pax_global_header00006660000000000000000000000064141437256000014514gustar00rootroot0000000000000052 comment=aa2fe645dddb2e1129c88bebf25fffdc4ccd8259 pyepr-1.1.3/000077500000000000000000000000001414372560000126555ustar00rootroot00000000000000pyepr-1.1.3/.coveragerc000066400000000000000000000001301414372560000147700ustar00rootroot00000000000000[run] plugins = Cython.Coverage source = src branch = True # omit = */Cython/Includes/* pyepr-1.1.3/.github/000077500000000000000000000000001414372560000142155ustar00rootroot00000000000000pyepr-1.1.3/.github/workflows/000077500000000000000000000000001414372560000162525ustar00rootroot00000000000000pyepr-1.1.3/.github/workflows/python-package.yml000066400000000000000000000070601414372560000217120ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: CI # Triggers the workflow on push or pull request events on: push: pull_request: schedule: - cron: '2 1 * * 1' jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ['3.7', '3.8', '3.9', '3.10'] include: - os: ubuntu-latest python-version: pypy3 steps: - uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade setuptools pip wheel python -m pip install sphinx coverage codecov pytest - name: Build and install run: | python -m pip install . - name: Test with pytest run: | python -c "\ import sys, epr, numpy as np;\ print('PyEPR: %s' % epr.__version__);\ print('EPR API: %s' % epr.EPR_C_API_VERSION);\ print('Numpy: %s' % np.__version__);\ print('Python: %s' % sys.version)" pytest -v syslibs: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: [3.9] steps: - uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | sudo apt-get -y install libepr-api-dev python -m pip install --upgrade setuptools pip wheel python -m pip install sphinx coverage codecov pytest - name: Build and install run: | python -m pip install --install-option='--epr-api-src=""' . - name: Test with pytest run: | python -c "\ import sys, epr, numpy as np;\ print('PyEPR: %s' % epr.__version__);\ print('EPR API: %s' % epr.EPR_C_API_VERSION);\ print('Numpy: %s' % np.__version__);\ print('Python: %s' % sys.version)" pytest -v coverage: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: [3.9] env: OS: ubuntu-latest PYTHON: '3.9' steps: - uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade setuptools pip wheel python -m pip install sphinx coverage codecov python -m pip install -r requirements-dev.txt - name: Build and install run: | make coverage-report - name: Print info run: | python -c "\ import sys, epr, numpy as np;\ print('PyEPR: %s' % epr.__version__);\ print('EPR API: %s' % epr.EPR_C_API_VERSION);\ print('Numpy: %s' % np.__version__);\ print('Python: %s' % sys.version)" - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 with: env_vars: OS,PYTHON verbose: true pyepr-1.1.3/.github/workflows/wheels.yml000066400000000000000000000013631414372560000202670ustar00rootroot00000000000000name: Wheels on: push: branches: - 'releases/**' tags: - v* jobs: build_wheels: name: Build wheels on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04, windows-2019, macOS-10.15] steps: - uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true # Used to host cibuildwheel - uses: actions/setup-python@v2 - name: Install cibuildwheel run: python -m pip install cibuildwheel - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse env: CIBW_SKIP: pp*-macosx* - uses: actions/upload-artifact@v2 with: path: ./wheelhouse/*.whl pyepr-1.1.3/.gitignore000066400000000000000000000040641414372560000146510ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # misc SciTEDirectory.properties .idea .DS_Store .vscode .venv* pyepr-1.1.3/.gitmodules000066400000000000000000000001651414372560000150340ustar00rootroot00000000000000[submodule "extern/epr-api"] path = extern/epr-api url = https://github.com/avalentino/epr-api.git branch = pyepr pyepr-1.1.3/.readthedocs.yml000066400000000000000000000002511414372560000157410ustar00rootroot00000000000000version: 2 build: image: latest submodules: include: all python: install: - requirements: requirements-dev.txt - method: pip path: . formats: [] pyepr-1.1.3/LICENSE.txt000066400000000000000000001045131414372560000145040ustar00rootroot00000000000000 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 How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . pyepr-1.1.3/MANIFEST.in000066400000000000000000000010621414372560000144120ustar00rootroot00000000000000recursive-include LICENSES *.txt recursive-include tests *.py recursive-include src *.pyx *.pxd # recursive-include src *.c recursive-include extern/epr-api/src *.c *.h exclude extern/epr-api/* recursive-exclude extern/epr-api/src/api-test * recursive-exclude extern/epr-api/src/examples * recursive-exclude extern/epr-api/src/test * recursive-include doc *.rst *.txt *.py Makefile make.bat *.png recursive-include doc/_templates *.html recursive-include doc/pydoctheme * recursive-include doc/html * recursive-exclude doc/_build * recursive-exclude .github * pyepr-1.1.3/Makefile000066400000000000000000000062361414372560000143240ustar00rootroot00000000000000#!/usr/bin/make -f # -*- coding: utf-8 -*- # Copyright (C) 2011-2021, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR 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 PyEPR. If not, see . PYTHON = python3 CYTHON = $(PYTHON) -m cython CYTHONFLAGS=$(shell $(CYTHON) --help | grep -o -- '--3str') TEST_DATSET = tests/$(shell grep N1 tests/test_all.py | cut -d "'" -f 2) EPRAPIROOT = extern/epr-api .PHONY: default ext cythonize sdist eprsrc fullsdist doc clean distclean \ check debug data upload manylinux coverage ext-coverage coverage-report default: ext ext: src/epr.pyx $(PYTHON) setup.py build_ext --inplace --epr-api-src=$(EPRAPIROOT)/src cythonize: src/epr.c src/epr.c: src/epr.pyx $(CYTHON) $(CYTHONFLAGS) src/epr.pyx sdist: doc $(PYTHON) -m build --sdist LICENSES/epr-api.txt: mkdir LICENSES cp $(EPRAPIROOT)/LICENSE.txt LICENSES/epr-api.txt eprsrc: LICENSES/epr-api.txt fullsdist: doc eprsrc $(PYTHON) -m build --sdist upload: fullsdist twine check dist/pyepr-*.tar.gz twine upload dist/pyepr-*.tar.gz doc: $(MAKE) -C doc html $(RM) -r doc/html mv doc/_build/html doc/html clean: $(PYTHON) setup.py clean --all $(RM) -r build dist pyepr.egg-info wheelhouse $(RM) -r $$(find doc -name __pycache__) $$(find tests -name __pycache__) $(RM) MANIFEST src/*.c src/*.o *.so $(RM) tests/*.py[co] doc/sphinxext/*.py[co] README.html $(MAKE) -C doc clean $(RM) -r doc/_build find . -name '*~' -delete $(RM) *.c *.o *.html .coverage coverage.xml $(RM) src/epr.html $(RM) -r htmlcov .pytest_cache .hypothesis $(RM) epr.p* # workaround for Cython.Coverage bug #1985 distclean: clean $(RM) $(TEST_DATSET) $(RM) -r doc/html $(RM) -r LICENSES $(MAKE) -C tests -f checksetup.mak distclean $(RM) -r .eggs check: ext env PYTHONPATH=. $(PYTHON) tests/test_all.py --verbose ext-coverage: src/epr.pyx env PYEPR_COVERAGE=TRUE $(PYTHON) setup.py build_ext --inplace coverage: clean ext-coverage ln -s src/epr.p* . # workaround for Cython.Coverage bug #1985 env PYEPR_COVERAGE=TRUE PYTHONPATH=. \ $(PYTHON) -m coverage run --branch --source=src setup.py test env PYTHONPATH=. $(PYTHON) -m coverage report coverage-report: coverage env PYTHONPATH=. $(PYTHON) -m cython -E CYTHON_TRACE_NOGIL=1 \ -X linetrace=True -X language_level=3str \ --annotate-coverage coverage.xml src/epr.pyx env PYTHONPATH=. $(PYTHON) -m coverage xml -i env PYTHONPATH=. $(PYTHON) -m coverage html -i cp src/epr.html htmlcov debug: $(PYTHON)d setup.py build_ext --inplace --debug wheels: # make distclean # python3 -m pip install -U cibuildwheel python3 -m cibuildwheel --output-dir wheelhouse --platform linux pyepr-1.1.3/README.rst000066400000000000000000000110101414372560000143350ustar00rootroot00000000000000================================= ENVISAT Product Reader Python API ================================= :HomePage: https://avalentino.github.io/pyepr :Author: Antonio Valentino :Contact: antonio.valentino@tiscali.it :Copyright: 2011-2021, Antonio Valentino :Version: 1.1.3 .. image:: https://github.com/avalentino/pyepr/actions/workflows/python-package.yml/badge.svg?branch=master :alt: CI status page :target: https://github.com/avalentino/pyepr/actions .. image:: https://img.shields.io/pypi/v/pyepr :alt: Latest Version :target: https://pypi.org/project/pyepr .. image:: https://img.shields.io/pypi/pyversions/pyepr :alt: Supported Python versions :target: https://pypi.org/project/pyepr .. image:: https://img.shields.io/pypi/l/pyepr :alt: License :target: https://pypi.org/project/pyepr .. image:: https://img.shields.io/pypi/wheel/pyepr :alt: Wheel Status :target: https://pypi.org/project/pyepr .. image:: https://readthedocs.org/projects/pyepr/badge :alt: Documentation Status :target: https://pyepr.readthedocs.io/en/latest .. image:: https://codecov.io/gh/avalentino/pyepr/branch/master/graph/badge.svg :alt: Coverage Status :target: https://codecov.io/gh/avalentino/pyepr Introduction ============ PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://envisat.esa.int .. _ESA: https://earth.esa.int Requirements ============ In order to use PyEPR it is needed that the following software are correctly installed and configured: * Python3_ >= 3.5 (including PyPy3_) * numpy_ >= 1.7.0 * `EPR API`_ >= 2.2 (optional, since PyEPR 0.7 the source tar-ball comes with a copy of the EPR C API sources) * a reasonably updated C compiler (build only) * Cython_ >= 0.29 (build only) .. _Python3: Python_ .. _PyPy3: https://www.pypy.org .. _numpy: https://numpy.org .. _gcc: https://gcc.gnu.org .. _Cython: https://cython.org Download ======== Official source tar-balls can be downloaded form PyPi_: https://pypi.org/project/pyepr The source code of the development versions is available on the GitHub_ project page https://github.com/avalentino/pyepr To clone the git_ repository the following command can be used:: $ git clone https://github.com/avalentino/pyepr.git To get also the EPR C API source code, the following commands are necessary:: $ cd pyepr $ git submodule init Submodule 'extern/epr-api' (https://github.com/avalentino/epr-api.git) registered for path 'extern/epr-api' $ git submodule update Cloning into '/Users/antonio valentino/projects/av/pyepr/extern/epr-api'... Submodule path 'extern/epr-api': checked out '93c1f1efce26c64d508fe882d5c72a898a068f29' .. _PyPi: https://pypi.org .. _GitHub: https://github.com .. _git: https://git-scm.com Installation ============ The easier way to install PyEPR_ is using tools like pip_:: $ python3 -m pip install pyepr or:: $ python3 -m pip install -U --prefix= PyEPR_ can be installed from the source tar-ball using the following command:: $ python3 setup.py install To install PyEPR_ in a non-standard path:: $ python3 setup.py install --prefix= .. _pip: https://pypi.python.org/pypi/pip License ======= Copyright (C) 2011-2021 Antonio Valentino PyEPR 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. PyEPR 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 PyEPR. If not, see . .. _`GNU General Public License`: http://www.gnu.org/licenses/gpl-3.0.html pyepr-1.1.3/doc/000077500000000000000000000000001414372560000134225ustar00rootroot00000000000000pyepr-1.1.3/doc/Makefile000066400000000000000000000011721414372560000150630ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) pyepr-1.1.3/doc/NEWS.rst000066400000000000000000000353771414372560000147470ustar00rootroot00000000000000Change history ============== PyEPR 1.1.3 (13/09/2021) ------------------------ * Do not use the deprecated distutils package. * Improve command line arguments management in ``setup.py``. * Stop distributing .c code auto-generated by Cython_ in the source tarball. Now the .c code is generated by Cython_ during the build package phase. PyEPR 1.1.2 (06/11/2021) ------------------------ * Enable CI testing with Python 3.10. * Update the internal copu of EPR C API to v2.3dev_pyerp112. PyEPR 1.1.1 (07/08/2021) ------------------------ * Fix a serious issue in sdist generation. PyEPR 1.1.0 (06/08/2021) ------------------------ * Old Python versions are no longer officially supported. Now PyEPR require Python >= 3.5 and Cython_ >= v0.29. * Introduced the ``pyproject.toml`` file. * The ``setup.py`` script has been simplified and modernized, now it always use setuptools_ and ``setup.cfg``. * Now the EPR C API is handled using git submodule. * Fixed potential crash in cases in which the EPR C API fails to open the requested product * Update the test suite to use the public product ``ASA_APM_1PNPDE20091007_025628_000000432083_00118_39751_9244.N1``. The previously used one is no longer available. * Continuous Integration moved to GitHub Actions (GHA). * Fix a leak of resources on Windows platforms. * The ``print_()`` method of :class:`Field` and :class:`Record` classes has been renamed into ``print()``. The old ``print_()`` method is now deprecated and will be removed in future versions. * Support for :mod:`pathlib`. * Enforce type checking. PyEPR 1.0.1 (07/03/2020) ------------------------ * Fixed a problem in the test using the :data:`epr.Product._fileno` (only impacting MacOS-X). Also some advice about the correct use of :data:`epr.Product._fileno` has been added to the documentation. * Always close the product object during tests. Prevents errors during CI cleanup actions on Windows. PyEPR 1.0.0 (08/09/2019) ------------------------ * Do not use deprecated numpy_ API (requires Cython_ >= 0.29) * Minimal numpy_ version is now v1.7 * Set Cython_ 'language_level` explicitly to '3str' if Cython_ >= v0.29, to '2' otherwise * Python v2.6, v3.2, v3.3 and v3.4 are now deprecated. Support for the deprecated Python version will be removed in future releases of PyEPR PyEPR 0.9.5 (23/08/2018) ------------------------ * Fix compatibility with numpy_ >= 1.14: :func:`np.fromstring` is deprecated * Update the pypi sidebar in the documentation * Use `.rst` extension for doc source files * Fix setup script to not use system libs if epr-api sources are available * Do not access fields of bands after that the product has been closed (fix a segmentation fault on windows) * `unittest2`_ is now required for Python < 3.4 .. _unittest2: https://pypi.org/project/unittest2 PyEPR 0.9.4 (29/04/2018) ------------------------ * Fix compatibility with Cython_ >= 0.28 * PyEPR has been successfully tested with PyPy_ .. _PyPy: https://www.pypy.org PyEPR 0.9.3 (02/05/2015) ------------------------ * Fix PyEprExtension class in setup.py (closes :issue:`11`) * Updated internal EPR API version PyEPR 0.9.2 (08/03/2015) ------------------------ * Improved string representation of fields in case of :data:`E_TID_STRING` data type. Now bytes are decoded and represented as Python strings. * New tutorial :doc:`gdal_export_example` * Improved "Installation" and "Testing" sections of the user manual PyEPR 0.9.1 (27/02/2015) ------------------------ * Fix source distribution (missing EPR API C sources) PyEPR 0.9 (27/02/2015) ---------------------- * basic support for update mode: products can now be opened in update mode ('rb+') and it is possible to call :meth:`epr.Field.set_elem` and :meth:`epr.Field.set_elems` methods to set :class:`epr.Field` elements changing the contents of the :class:`epr.Product` on disk. This feature is not available in the EPR C API. * new functions/methods and properties: - :attr:`epr.Record.index` property: returns the index of the :class:`epr.Record` within the :class:`epr.Dataset` - :attr:`epr.Band.dataset` property: returns the source :class:`epr.Dataset` object containing the raw data used to create the :class:`epr.Band`\ ’s pixel values - :attr:`epr.Band._field_index` and :attr:`epr.Band._elem_index` properties: return the :class:`epr.Field` index (within the :class:`epr.Record`) and the element index (within the :class:`epr.Field`) containing the raw data used to create the :class:`epr.Band`\ ’s pixel values - :attr:`epr.Record.dataset_name` property: returns the name of the :class:`epr.Dataset` from which the :class:`Record` has bee read - :attr:`epr.Record.tot_size` and :attr:`epr.Field.tot_size` properties: return the total size in bytes of the :class:`epr.Record` and :class:`epr.Field` respectively - :func:`epr.get_numpy_dtype` function: retrieves the numpy_ data type corresponding to the specified EPR type ID - added support for some low level feature: the *_magic* private attribute stores the identifier of EPR C stricture, the :meth:`epr.Record.get_offset` returns the offset in bytes of the :class:`epr.Record` within the file, and the :meth:`epr.Field.get_offset` method returns the :clasS:`epr.Field` offset within the :class:`epr.Record` * improved functions/methods: - :meth:`epr.Field.get_elems` now also handles :data:`epr.E_TID_STRING` and :data:`epr.E_TID_TIME` data types - improved :func:`epr.get_data_type_size`, :func:`epr.data_type_id_to_str`, :func:`epr.get_scaling_method_name` and :func:`epr.get_sample_model_name` functions that are now defined using the cython `cpdef` directive - the :meth:`epr.Field.get_elems` method has been re-written to remove loops and unnecessary data copy - now generator expressions are used to implement `__iter__` special methods * the *index* parameter of the :meth:`epr.Dataset.read_record` method is now optional (defaults to zero) * the deprecated `__revision__` variable has been removed * declarations of the EPR C API have been moved to the new :file:`epr.pyd` * the `const_char` and `const_void` definitions have been dropped, no longer necessary with Cython_ >= 0.19 * minimum required version for Cython_ is now 0.19 * the :file:`setup.py` script has been completely rewritten to be more "pip_ friendly". The new script uses setuptools_ if available and functions that use numpy_ are evaluated lazily so to give a chance to pip_ and setuptools_ to install dependencies, numpy_, before they are actually used. This should make PyEPR "pip-installable" even on system there numpy_ is not already installed. * the :file:`test` directory has been renamed into :file:`tests` * the test suite now has a :func:`setUpModule` function that automatically downloads the ENVISAT test data required for test execution. The download only happens if the test dataset is not already available. * tests can now be run using the :file:`setup.py` script:: $ python3 setup.py test * enable continuous integration and testing in for Windows_ using AppVeyor_ (32bit only) * status badges for `AppVeyor CI `_ and PyPI_ added to the HTML doc index .. _pip: https://pip.pypa.io .. _setuptools: https://github.com/pypa/setuptools .. _numpy: https://numpy.org .. _Windows: https://windows.microsoft.com .. _AppVeyor: https://www.appveyor.com .. _PyPI: https://pypi.org/project/pyepr PyEPR 0.8.2 (03/08/2014) ------------------------ * fixed segfault caused by incorrect access to :attr:`epr.Dataset.description` string in case of closed products * fixed a memory leak in :class:`epr.Raster` (closes :issue:`10`) * the size parameters (*src_width* and *src_height*) in :meth:`epr.Band.create_compatible_raster` are now optional. By default a :class:`epr.Raster` with the same size of the scene is created * the test suite have been improved * improved the :doc:`NDVI computation example ` * updates sphinx config * small clarification in the :ref:`installation` section of the :doc:`usermanual`. * EPR C API (version bundled with the official source tar-ball) - in case of error always free resources before setting the error code. This avoids error shadowing in some cases. - fixed a bug that caused reading of the incorrect portion of data in case of mirrored annotation datasets (closes :issue:`9`) - fixed a bug that caused incorrect data sub-sampling in case of mirrored datasets PyEPR 0.8.1 (07/09/2013) ------------------------ * fixed an important bug in the error checking code introduced in previous release (closes :issue:`8`) * fixed the NDVI example * no more display link URL in footnotes of the PDF User Manual PyEPR 0.8 (07/09/2013) ---------------------- * now the :class:`epr.Product` objects have a :meth:`epr.Product.close` method that can be used to explicitly close products without relying on the garbage collector behaviour (closes :issue:`7`) * new :attr:`epr.Product.closed` (read-only) attribute that can be used to check if a :class:`epr.Product` has been closed * the :class:`Product` class now supports context management so they can be used in ``with`` statements * added entries for :data:`epr.__version__` and :data:`epr.__revision__` in the reference manual * the :data:`epr.__revision__` module attribute is now deprecated * some *cythonization* warnings have been fixed * several small improvements to the documentation PyEPR 0.7.1 (19/08/2013) ------------------------ * fixed potential issues with conversion from python strings to ``char*`` * new snapshot of the EPR C API sources (2.3dev): - the size of the record tables has been fixed - the EPR_NUM_PRODUCT_TABLES has been fixed - fixed a missing prototype - several GCC warnings has been silenced - additional checks on return codes - now and error is raised when an invalid flag name is used * better factorization of Python 3 specific code * use the *CLOUD* flag instead of *BRIGHT* in unit tests * added function/method signature to all doc-strings for better interactive help * several improvements to the documentation: - updated the :file:`README.txt` file to mention EPR C API sourced inclusion in the PyEPR 0.7 (and lates) source tar-ball - small fix in the installation instructions: the pip_ tool does not have a "--prefix" parameter - always use the python3 syntax for the *print* function in all examples in the documentation - links to older (and dev) versions of the documentation have been added in the man page of the HTML doc - removed *date* form the doc meta-data. The documentation build date is reported in the front page of the LaTeX (PDF) doc and, starting from this release, in the footer of the HTML doc. - the Ohloh_ widget has been added in the sidebar of the HTML doc - improved the regexp for detecting the SW version in the :file`setup.py` script - formatting .. _Ohloh: https://www.openhub.net PyEPR 0.7 (04/08/2013) ---------------------- * more detailed error messages in case of open failures * new sphinx theme for the HTML documentation * `Travis-CI`_ has been set-up for the project * now the source tar-ball also includes a copy of the EPR C API sources so that no external C library is required to build PyEPR. This features also makes it easier to install PyEPR using pip_. The user can still guild PyEPR against a system version of the ERP-API library simply using the `--epr-api-src` option of the :file:`setup.py` script with "None"" as value. The ERP C API included in the source tar-ball is version *2.3dev-pyepr062*, a development and patched version that allows the following enhancements. - support for ERS products in ENVISAT format - support for ASAR products generated with the new ASAR SW version 6.02 (ref. doc. PO-RS-MDA-GS-2009_4/C - fix incorrect reading of "incident_angle" bands (closes :issue:`6`). The issue is in the EPR C API. .. _`Travis-CI`: https://travis-ci.org/avalentino/pyepr PyEPR 0.6.1 (26/04/2012) ------------------------ * fix compatibility with Cython_ 0.16 * added a new option to the setup script (`--epr-api-src`) to build PyEPR using the EPR-API C sources PyEPR 0.6 (12/08/2011) ---------------------- * full support for `Python 3`_ * improved code highligh in the documentation * depend from cython >= 0.13 instead of cython >= 0.14.1. Cythonizing :file:`epr.pyx` with `Python 3`_ requires cython >= 0.15 PyEPR 0.5 (25/04/2011) ---------------------- * stop using :c:func:`PyFile_AsFile` that is no more available in `Python 3`_ * now documentation uses intersphinx_ capabilities * code examples added to documentation * tutorials added to documentation * the LICENSE.txt file is now included in the source distribution * the Cython_ construct ``with nogil`` is now used instead of calling :c:func:`Py_BEGIN_ALLOW_THREADS` and :c:func:`Py_END_ALLOW_THREADS` directly * dropped old versions of Cython_; now Cython_ 0.14.1 or newer is required * suppressed several constness related warnings .. _`Python 3`: https://docs.python.org/3 .. _intersphinx: https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html .. _Cython: https://cython.org PyEPR 0.4 (10/04/2011) ---------------------- * fixed a bug in the :meth:`epr.Product.__str__`, :meth:`Dataset.__str__` and :meth:`erp.Band.__repr__` methods (bad formatting) * fixed :meth:`epr.Field.get_elems` method for char and uchar data types * implemented :meth:`epr.Product.read_bitmask_raster`, now the :class:`epr.Product` API is complete * fixed segfault in :meth:`epr.Field.get_unit` method when the field has no unit * a smaller dataset is now used for unit tests * a new tutorial section has been added to the user documentation PyEPR 0.3 (01/04/2011) ---------------------- * version string of the EPR C API is now exposed as module attribute :data:`epr.EPR_C_API_VERSION` * implemented ``__repr__``, ``__str__``, ``__eq__``, ``__ne__`` and ``__iter__`` special methods * added utility methods (not included in the C API) like: - :meth:`epr.Record.get_field_names` - :meth:`epr.Record.fields` - :meth:`epr.Dataset.records` - :meth:`epr.Product.get_dataset_names` - :meth:`epr.Product.get_band_names` - :meth:`epr.Product.datasets` - :meth:`epr.Product.bands` * fixed a logic error that caused empty messages in custom EPR exceptions PyEPR 0.2 (20/03/2011) ---------------------- * sphinx_ documentation added * added docstrings to all method and classes * renamed some method and parameter in order to avoid redundancies and have a more *pythonic* API * in case of null pointers a :exc:`epr.EPRValueError` is raised * improved C library shutdown management * introduced some utility methods to :class:`epr.Product` and :class:`epr.Record` classes .. _sphinx: https://www.sphinx-doc.org PyEPR 0.1 (09/03/2011) ---------------------- Initial release pyepr-1.1.3/doc/_static/000077500000000000000000000000001414372560000150505ustar00rootroot00000000000000pyepr-1.1.3/doc/_static/empty.txt000066400000000000000000000000001414372560000167350ustar00rootroot00000000000000pyepr-1.1.3/doc/_templates/000077500000000000000000000000001414372560000155575ustar00rootroot00000000000000pyepr-1.1.3/doc/_templates/codecov.html000066400000000000000000000003061414372560000200660ustar00rootroot00000000000000 pyepr-1.1.3/doc/_templates/gha.html000066400000000000000000000003471414372560000172100ustar00rootroot00000000000000 pyepr-1.1.3/doc/_templates/ohloh.html000066400000000000000000000001771414372560000175630ustar00rootroot00000000000000
pyepr-1.1.3/doc/_templates/pypi.html000066400000000000000000000011541414372560000174270ustar00rootroot00000000000000 pyepr-1.1.3/doc/_templates/readthedocs.html000066400000000000000000000002501414372560000207270ustar00rootroot00000000000000 pyepr-1.1.3/doc/bands_example.rst000066400000000000000000000112211414372560000167530ustar00rootroot00000000000000Exporting band data ------------------- .. index:: ENVISAT, band, raster This tutorial shows how to convert ENVISAT_ raster information from dataset and generate flat binary rasters using PyEPR_. The program generates as many raster as the dataset specified in input. The example code (:download:`examples/write_bands.py`) is a direct translation of the C sample program `write_bands.c`_ bundled with the EPR API distribution. The program is invoked as follows: .. code-block:: sh $ python write_bands.py \ \ [ ... ] .. _ENVISAT: https://envisat.esa.int .. _PyEPR: https://github.com/avalentino/pyepr .. _`write_bands.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_bands.c Import section ~~~~~~~~~~~~~~ To use the Python_ EPR API one have to import :mod:`epr` module. At first import time the underlaying C library is opportunely initialized. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 1-11 The main program ~~~~~~~~~~~~~~~~ The main program in quite simple (this is just an example). .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 48- It performs some basic command line arguments handling and then open the input product. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 89-90 Finally the core function (:func:`write_raw_image`) is called on each band specified on the command: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 91-92 The :func:`write_raw_image` core function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The core function is :func:`write_raw_image`. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :pyobject: write_raw_image It generates a flat binary file with data of a single band whose name is specified as input parameter. First the output file name is computed using the :mod:`os` module. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 19-20 Then the desired band is retrieved using the :meth:`epr.Product.get_band` method and some of its parameters are loaded in to local variables: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 22 Band data are accessed by means of a :class:`epr.Raster` object. .. seealso:: :func:`epr.Band.read_as_array` The :meth:`epr.Band.create_compatible_raster` is a facility method that allows to instantiate a :class:`epr.Raster` object with a data type compatible with the band data: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 28-29 Then data are read using the :meth:`epr.Band.read_raster` method: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 31-32 Then the output file object is created (in binary mode of course) and data are copied to the output file one line at time .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 34-36 Please note that it has been used :data:`epr.Raster.data` attribute of the :class:`epr.Raster` objects that exposes :class:`epr.Raster` data with the powerful :class:`numpy.ndarray` interface. .. note:: copying one line at time is not the best way to perform the task in Python_. It has been done just to mimic the original C code: .. code-block:: c out_stream = fopen(image_file_path, "wb"); if (out_stream == NULL) { printf("Error: can't open '%s'\n", image_file_path); return 3; } for (y = 0; y < (uint)raster->raster_height; ++y) { numwritten = fwrite(epr_get_raster_line_addr(raster, y), raster->elem_size, raster->raster_width, out_stream); if (numwritten != raster->raster_width) { printf("Error: can't write to %s\n", image_file_path); return 4; } } fclose(out_stream); A by far more "pythonic" solution would be:: raster.data.tofile(out_stream) .. _Python: https://www.python.org .. raw:: latex \clearpage pyepr-1.1.3/doc/bitmask_example.rst000066400000000000000000000070171414372560000173260ustar00rootroot00000000000000Exporting bitmasks ------------------- .. index:: bitmask, ENVISAT This tutorial shows how to generate bit masks from ENVISAT_ flags information as "raw" image using PyEPR_. The example code (:download:`examples/write_bitmask.py`) is a direct translation of the C sample program `write_bitmask.c`_ bundled with the EPR API distribution. The program is invoked as follows: .. code-block:: sh $ python write_bitmask.py \ .. _ENVISAT: https://envisat.esa.int .. _PyEPR: https://github.com/avalentino/pyepr .. _`write_bitmask.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_bitmask.c The :download:`examples/write_bitmask.py` code consists in a single function that also includes command line arguments handling: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python .. index:: EPR-API, module pair: epr; module In order to use the Python_ EPR API the :mod:`epr` module is imported: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :lines: 25 .. index:: product, open pair: with; statement As usual the ENVISAT_ product is opened using the :func:`epr.open` function that returns an :class:`epr.Product` instance. In this case the :func:`epr.open` is used together with a ``with`` statement so that the :class:`epr.Product` instance is closed automatically when the program exits the ``with`` block. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 49-50 .. index:: product Scene size parameters are retrieved form the :class:`epr.Product` object using the :meth:`epr.Product.get_scene_width` and :meth:`epr.Product.get_scene_height` methods: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 53-54 The EPR API allows to manage data by means of :class:`epr.Raster` objects, so the function :func:`epr.create_bitmask_raster`, specific for bitmasks, is used to create a :class:`epr.Raster` instance. .. seealso:: :func:`epr.create_raster` Data are actually read using the :meth:`epr.Product.read_bitmask_raster` method of the :class:`epr.Product` class: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 61 The :meth:`epr.Product.read_bitmask_raster` method receives in input the *bm_expr* parameter that is set via command line: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 46 *bm_expr* is a string that define the logical expression for the definition of the bit-mask. In a bit-mask expression, any number of the flag-names (found in the DDDB) can be composed with “(â€, â€)â€, “NOTâ€, “ANDâ€, “ORâ€. .. index:: AND, OR, NOT, DDDB Valid bit-mask expression are for example:: flags.LAND OR flags.CLOUD or:: NOT flags.WATER AND flags.TURBID_S Finally data are written to disk as a flat binary file using the :meth:`numpy.ndarray.tofile` method of the :data:`epr.Raster.data` attribute of the :class:`epr.Raster` objects that exposes data via the :class:`numpy.ndarray` interface: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 63-64 .. _Python: https://www.python.org .. _ENVISAT: https://envisat.esa.int .. raw:: latex \clearpage pyepr-1.1.3/doc/conf.py000066400000000000000000000161011414372560000147200ustar00rootroot00000000000000# Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. import os import sys sys.path.insert(0, os.path.abspath('sphinxext')) # -- Project information ----------------------------------------------------- project = 'PyEPR' copyright = '2011-2021, Antonio Valentino' author = 'Antonio Valentino' def get_version(filename): import re from packaging.version import parse as Version with open(filename) as fd: data = fd.read() mobj = re.search( r'''^__version__\s*=\s*(?P['"])(?P.*)(?P=quote)''', data, re.MULTILINE) return Version(mobj.group('version')) _version = get_version('../src/epr.pyx') # The short X.Y version. version = _version.base_version # The full version, including alpha/beta/rc tags. release = str(_version) # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ # 'sphinx.ext.autodoc', # 'sphinx.ext.autosectionlabel', # 'sphinx.ext.autosummary', # 'sphinx.ext.coverage', # 'sphinx.ext.doctest', 'sphinx.ext.extlinks', # 'sphinx.ext.githubpages', # 'sphinx.ext.graphviz', 'sphinx.ext.ifconfig', # 'sphinx.ext.imgconverter', # 'sphinx.ext.inheritance_diagram', 'sphinx.ext.intersphinx', # 'sphinx.ext.linkcode', # 'sphinx.ext.napoleon', 'sphinx.ext.todo', 'sphinx.ext.viewcode', # Math support for HTML outputs in Sphinx 'sphinx.ext.imgmath', # 'sphinx.ext.mathjax', # 'sphinx.ext.jsmath', # Additional extensions 'ipython_console_highlighting', # 'IPython.sphinxext.ipython_console_highlighting', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The master toctree document. master_doc = 'index' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [ '_build', 'Thumbs.db', '.DS_Store', 'sphinxext', '**/empty.txt', ] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # # html_theme = 'alabaster' html_theme = 'pydoctheme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { 'collapsiblesidebar': True, } # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['.'] # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If this is not None, a ‘Last updated on:’ timestamp is inserted at every # page bottom, using the given strftime() format. # The empty string is equivalent to '%b %d, %Y' # (or a locale-dependent equivalent). html_last_updated_fmt = '%b %d, %Y' # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # This is required for the alabaster theme # refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars html_sidebars = { 'index': [ 'globaltoc.html', 'relations.html', 'sourcelink.html', 'searchbox.html', 'ohloh.html', 'pypi.html', 'gha.html', 'readthedocs.html', 'codecov.html', ], } # If false, no module index is generated. html_domain_indices = False # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. htmlhelp_basename = 'PyEPRdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'a4paper', # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '12pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'pyepr.tex', 'PyEPR Documentation', author, 'manual'), ] # If false, no module index is generated. latex_domain_indices = False # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'pyepr', 'PyEPR Documentation', [author], 1) ] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'PyEPR', 'PyEPR Documentation', author, 'PyEPR', 'One line description of project.', 'Miscellaneous'), ] # -- Options for Epub output ---------------------------------------------- # A list of files that should not be packed into the epub file. epub_exclude_files = ['search.html'] # -- Extension configuration ------------------------------------------------- # -- Options for intersphinx extension --------------------------------------- # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { 'python': ('https://docs.python.org/3', None), 'numpy': ('https://docs.scipy.org/doc/numpy', None), } # -- Options for autodoc extension ------------------------------------------- #autoclass_content = 'both' #autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] # #,'inherited-members'] # Auto summary generation #autosummary_generate = ['reference'] # -- Options for extlinks extension ------------------------------------------ # External links configuration extlinks = { 'issue': ('https://github.com/avalentino/pyepr/issues/%s', 'gh-'), } # -- Options for todo extension ---------------------------------------------- # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True pyepr-1.1.3/doc/examples/000077500000000000000000000000001414372560000152405ustar00rootroot00000000000000pyepr-1.1.3/doc/examples/export_gdalvrt.py000077500000000000000000000134161414372560000206660ustar00rootroot00000000000000#!/usr/bin/env python3 import os import epr from osgeo import gdal epr_to_gdal_type = { epr.E_TID_UNKNOWN: gdal.GDT_Unknown, epr.E_TID_UCHAR: gdal.GDT_Byte, epr.E_TID_CHAR: gdal.GDT_Byte, epr.E_TID_USHORT: gdal.GDT_UInt16, epr.E_TID_SHORT: gdal.GDT_Int16, epr.E_TID_UINT: gdal.GDT_UInt32, epr.E_TID_INT: gdal.GDT_Int32, epr.E_TID_FLOAT: gdal.GDT_Float32, epr.E_TID_DOUBLE: gdal.GDT_Float64, #epr.E_TID_STRING: gdal.GDT_Unknown, #epr.E_TID_SPARE: gdal.GDT_Unknown, #epr.E_TID_TIME: gdal.GDT_Unknown, } def epr2gdal_band(band, vrt): product = band.product dataset = band.dataset record = dataset.read_record(0) field = record.get_field_at(band._field_index - 1) ysize = product.get_scene_height() xsize = product.get_scene_width() if isinstance(vrt, gdal.Dataset): if (vrt.RasterYSize, vrt.RasterXSize) != (ysize, xsize): raise ValueError('dataset size do not match') gdal_ds = vrt elif os.path.exists(vrt): gdal_ds = gdal.Open(vrt, gdal.GA_Update) if gdal_ds is None: raise RuntimeError('unable to open "{}"'.format(vrt)) driver = gdal_ds.GetDriver() if driver.ShortName != 'VRT': raise TypeError('unexpected GDAL driver ({}). ' 'VRT driver expected'.format(driver.ShortName)) else: driver = gdal.GetDriverByName('VRT') if driver is None: raise RuntimeError('unable to get driver "VRT"') gdal_ds = driver.Create(vrt, xsize, ysize, 0) if gdal_ds is None: raise RuntimeError('unable to create "{}" dataset'.format(vrt)) filename = os.pathsep.join(product.file_path.split('/')) # denormalize offset = dataset.get_dsd().ds_offset + field.get_offset() line_offset = record.tot_size pixel_offset = epr.get_data_type_size(field.get_type()) if band.sample_model == epr.E_SMOD_1OF2: pixel_offset *= 2 elif band.sample_model == epr.E_SMOD_2OF2: offset += pixel_offset pixel_offset *= 2 options = [ 'subClass=VRTRawRasterBand', 'SourceFilename={}'.format(filename), 'ImageOffset={}'.format(offset), 'LineOffset={}'.format(line_offset), 'PixelOffset={}'.format(pixel_offset), 'ByteOrder=MSB', ] gtype = epr_to_gdal_type[field.get_type()] ret = gdal_ds.AddBand(gtype, options=options) if ret != gdal.CE_None: raise RuntimeError( 'unable to add VRTRawRasterBand to "{}"'.format(vrt)) gdal_band = gdal_ds.GetRasterBand(gdal_ds.RasterCount) gdal_band.SetDescription(band.description) metadata = { 'name': band.get_name(), 'dataset_name': dataset.get_name(), 'dataset_description': dataset.description, 'lines_mirrored': str(band.lines_mirrored), 'sample_model': epr.get_sample_model_name(band.sample_model), 'scaling_factor': str(band.scaling_factor), 'scaling_offset': str(band.scaling_offset), 'scaling_method': epr.get_scaling_method_name(band.scaling_method), 'spectr_band_index': str(band.spectr_band_index), 'unit': band.unit if band.unit else '', 'bm_expr': band.bm_expr if band.bm_expr else '', } gdal_band.SetMetadata(metadata) return gdal_ds def epr2gdal(product, vrt, overwrite_existing=False): if isinstance(product, str): filename = product product = epr.open(filename) ysize = product.get_scene_height() xsize = product.get_scene_width() if os.path.exists(vrt) and not overwrite_existing: raise ValueError('unable to create "{}". Already exists'.format(vrt)) driver = gdal.GetDriverByName('VRT') if driver is None: raise RuntimeError('unable to get driver "VRT"') gdal_ds = driver.Create(vrt, xsize, ysize, 0) if gdal_ds is None: raise RuntimeError('unable to create "{}" dataset'.format(vrt)) metadata = { 'id_string': product.id_string, 'meris_iodd_version': str(product.meris_iodd_version), 'dataset_names': ','.join(product.get_dataset_names()), 'num_datasets': str(product.get_num_datasets()), 'num_dsds': str(product.get_num_dsds()), } gdal_ds.SetMetadata(metadata) mph = product.get_mph() metadata = str(mph).replace(' = ', '=').split('\n') gdal_ds.SetMetadata(metadata, 'MPH') sph = product.get_sph() metadata = str(sph).replace(' = ', '=').split('\n') gdal_ds.SetMetadata(metadata, 'SPH') for band in product.bands(): epr2gdal_band(band, gdal_ds) # @TODO: set geographic info return gdal_ds if __name__ == '__main__': filename = 'MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1' vrtfilename = os.path.splitext(filename)[0] + '.vrt' gdal_ds = epr2gdal(filename, vrtfilename) with epr.open(filename) as product: band_index = product.get_band_names().index('water_vapour') band = product.get_band('water_vapour') eprdata = band.read_as_array() unit = band.unit lines_mirrored = band.lines_mirrored scaling_offset = band.scaling_offset scaling_factor = band.scaling_factor gdal_band = gdal_ds.GetRasterBand(band_index + 1) vrtdata = gdal_band.ReadAsArray() if lines_mirrored: vrtdata = vrtdata[:, ::-1] vrtdata = vrtdata * scaling_factor + scaling_offset print('Max absolute error:', abs(vrtdata - eprdata).max()) # plot from matplotlib import pyplot as plt plt.figure() plt.subplot(2, 1, 1) plt.imshow(eprdata) plt.grid(True) cb = plt.colorbar() cb.set_label(unit) plt.title('EPR data') plt.subplot(2, 1, 2) plt.imshow(vrtdata) plt.grid(True) cb = plt.colorbar() cb.set_label(unit) plt.title('VRT data') plt.show() pyepr-1.1.3/doc/examples/update_elements.py000077500000000000000000000045021414372560000207740ustar00rootroot00000000000000#!/usr/bin/env python3 import numpy as np from matplotlib import pyplot as plt import epr FILENAME = 'MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1' # load original data with epr.open(FILENAME) as product: band = product.get_band('water_vapour') wv_orig_histogram, orig_bins = np.histogram(band.read_as_array().flat, 50) # plot water vapour histogram plt.figure() plt.bar(orig_bins[:-1], wv_orig_histogram, 0.02, label='original') plt.grid(True) plt.title('Water Vapour Histogram') plt.savefig('water_vapour_histogram_01.png') # modily scaling facotrs with epr.open(FILENAME, 'rb+') as product: dataset = product.get_dataset('Scaling_Factor_GADS') record = dataset.read_record(0) field = record.get_field('sf_wvapour') scaling = field.get_elem() scaling *= 1.1 field.set_elem(scaling) # re-open the product and load modified data with epr.open(FILENAME) as product: band = product.get_band('water_vapour') unit = band.unit new_data = band.read_as_array() wv_new_histogram, new_bins = np.histogram(new_data.flat, 50) # plot histogram of modified data plt.figure() plt.bar(orig_bins[:-1], wv_orig_histogram, 0.02, label='original') plt.grid(True) plt.title('Water Vapour Histogram') plt.hold(True) plt.bar(new_bins[:-1], wv_new_histogram, 0.02, color='red', label='new') plt.legend() plt.savefig('water_vapour_histogram_02.png') # plot the water vapour map plt.figure(figsize=(8, 4)) plt.imshow(new_data) plt.grid(True) plt.title('Water Vapour') cb = plt.colorbar() cb.set_label('[{}]'.format(unit)) plt.savefig('modified_water_vapour.png') # modify the "Vapour_Content" dataset with epr.open(FILENAME, 'rb+') as product: dataset = product.get_dataset('Vapour_Content') for line in range(70, 100): record = dataset.read_record(line) field = record.get_field_at(2) elems = field.get_elems() elems[50:100] = 0 field.set_elems(elems) # re-open the product and load modified data with epr.open(FILENAME) as product: band = product.get_band('water_vapour') unit = band.unit data = band.read_as_array() # plot the water vapour map plt.figure(figsize=(8, 4)) plt.imshow(data) plt.grid(True) plt.title('Water Vapour with box') cb = plt.colorbar() cb.set_label('[{}]'.format(unit)) plt.savefig('modified_water_vapour_with_box.png') plt.show() pyepr-1.1.3/doc/examples/write_bands.py000077500000000000000000000060661414372560000201260ustar00rootroot00000000000000#!/usr/bin/env python3 # This program is a direct translation of the sample program # "write_bands.c" bundled with the EPR-API distribution. # # Source code of the C program is available at: # https://github.com/bcdev/epr-api/blob/master/src/examples/write_bands.c import os import sys import epr def write_raw_image(output_dir, product, band_name): '''Generate the ENVI binary pattern image file for an actual DS. The first parameter is the output directory path. ''' # Build ENVI file path, DS name specifically image_file_path = os.path.join(output_dir, band_name + '.raw') band = product.get_band(band_name) source_w = product.get_scene_width() source_h = product.get_scene_height() source_step_x = 1 source_step_y = 1 raster = band.create_compatible_raster(source_w, source_h, source_step_x, source_step_y) print('Reading band "%s"...' % band_name) raster = band.read_raster(0, 0, raster) with open(image_file_path, 'wb') as out_stream: for line in raster.data: out_stream.write(line.tostring()) # or better: raster.data.tofile(out_stream) print('Raw image data successfully written to "%s".' % image_file_path) print('C data type is "%s", element size %u byte(s), ' 'raster size is %u x %u pixels.' % ( epr.data_type_id_to_str(raster.data_type), raster.get_elem_size(), raster.get_width(), raster.get_height())) def main(*argv): '''A program for converting producing ENVI raster information from dataset. It generates as many raster as there are dataset entrance parameters. Call:: $ write_bands.py [ ... ] Example:: $ write_bands.py \ MER_RR__1PNPDK20020415_103725_000002702005_00094_00649_1059.N1 \ . latitude ''' if not argv: argv = sys.argv if len(argv) <= 3: print('Usage: write_bands.py ' '') print(' [ ... ]') print(' where envisat-product is the input filename') print(' and output-dir is the output directory') print(' and dataset-name-1 is the name of the first band to be ' 'extracted (mandatory)') print(' and dataset-name-2 ... dataset-name-N are the names of ' 'further bands to be extracted (optional)') print('Example:') print(' write_bands MER_RR__2P_TEST.N1 . latitude') print() sys.exit(1) product_file_path = argv[1] output_dir_path = argv[2] # Open the product; the argument is the path to product the data file with epr.open(product_file_path) as product: for band_name in argv[3:]: write_raw_image(output_dir_path, product, band_name) if __name__ == '__main__': main() pyepr-1.1.3/doc/examples/write_bitmask.py000077500000000000000000000042341414372560000204640ustar00rootroot00000000000000#!/usr/bin/env python3 # This program is a direct translation of the sample program # "write_bitmask.c" bundled with the EPR-API distribution. # # Source code of the C program is available at: # https://github.com/bcdev/epr-api/blob/master/src/examples/write_bitmask.c '''Generates bit mask from ENVISAT flags information as "raw" image for (e.g.) Photoshop Call:: $ python write_bitmask.py Example to call the main function:: $ python write_bitmask.py MER_RR__2P_TEST.N1 \ 'l2_flags.LAND and !l2_flags.BRIGHT' my_flags.raw ''' import sys import epr def main(*argv): if not argv: argv = sys.argv if len(argv) != 4: print('Usage: write_bitmask ' '') print(' where envisat-product is the input filename') print(' and bitmask-expression is a string containing the bitmask ' 'logic') print(' and output-file is the output filename.') print('Example:') print(" MER_RR__2P_TEST.N1 'l2_flags.LAND and not l2_flags.BRIGHT' " "my_flags.raw") print sys.exit(1) product_file_path = argv[1] bm_expr = argv[2] image_file_path = argv[3] # Open the product; an argument is a path to product data file with epr.open(product_file_path) as product: offset_x = 0 offset_y = 0 source_width = product.get_scene_width() source_height = product.get_scene_height() source_step_x = 1 source_step_y = 1 bm_raster = epr.create_bitmask_raster(source_width, source_height, source_step_x, source_step_y) product.read_bitmask_raster(bm_expr, offset_x, offset_y, bm_raster) with open(image_file_path, 'wb') as out_stream: bm_raster.data.tofile(out_stream) print('Raw image data successfully written to "%s".' % image_file_path) print('Data type is "byte", size is %d x %d pixels.' % (source_width, source_height)) if __name__ == '__main__': main() pyepr-1.1.3/doc/examples/write_ndvi.py000077500000000000000000000056401414372560000177740ustar00rootroot00000000000000#!/usr/bin/env python3 # This program is a direct translation of the sample program # "write_ndvi.c" bundled with the EPR-API distribution. # # Source code of the C program is available at: # https://github.com/bcdev/epr-api/blob/master/src/examples/write_ndvi.c '''Example for using the epr-api Demonstrates how to open a MERIS L1b product and calculate the NDVI. This example does not demonstrate how to write good and safe code. It is reduced to the essentials for working with the epr-api. Calling sequence:: $ python write_ndvi.py for example:: $ python write_ndvi.py MER_RR__1P_test.N1 my_ndvi.raw ''' import sys import struct import logging import epr def main(*argv): if not argv: argv = sys.argv if len(argv) != 3: print('Usage: write_ndvi ') print(' where envisat-product is the input filename') print(' and output-file is the output filename.') print('Example: MER_RR__1P_TEST.N1 my_ndvi.raw') print sys.exit(1) # Open the product with epr.open(argv[1]) as product: # The NDVI shall be calculated using bands 6 and 8. band1_name = 'radiance_6' band2_name = 'radiance_10' band1 = product.get_band(band1_name) band2 = product.get_band(band2_name) # Allocate memory for the rasters width = product.get_scene_width() height = product.get_scene_height() subsampling_x = 1 subsampling_y = 1 raster1 = band1.create_compatible_raster(width, height, subsampling_x, subsampling_y) raster2 = band2.create_compatible_raster(width, height, subsampling_x, subsampling_y) # Read the radiance into the raster. offset_x = 0 offset_y = 0 logging.info('read "%s" data' % band1_name) band1.read_raster(offset_x, offset_y, raster1) logging.info('read "%s" data' % band2_name) band2.read_raster(offset_x, offset_y, raster2) # Open the output file logging.info('write ndvi to "%s"' % argv[2]) with open(argv[2], 'wb') as out_stream: # Loop over all pixel and calculate the NDVI. # # @NOTE: looping over data matrices is not the best soluton. # It is done here just for demostrative purposes for j in range(height): for i in range(width): rad1 = raster1.get_pixel(i, j) rad2 = raster2.get_pixel(i, j) if (rad1 + rad2) != 0.0: ndvi = (rad2 - rad1) / (rad2 + rad1) else: ndvi = -1.0 out_stream.write(struct.pack('f', ndvi)) logging.info('ndvi was written success') if __name__ == '__main__': main() pyepr-1.1.3/doc/gdal_export_example.rst000066400000000000000000000145561414372560000202120ustar00rootroot00000000000000GDAL_ export example -------------------- .. index:: GDAL, export, VRT, ENVISAT, offset This tutorial explains how to use PyEPR_ to generate a file in GDAL Virtual Format (VRT) that can be used to access data with the powerful and popular GDAL_ library. GDAL_ already has support for ENVISAT_ products but this example is interesting for two reasons: * it exploits some low level feature (like e.g. offset management) that are rarely used but that can be very useful in some cases * the generated VRT file uses raw raster access and it can be opened in update mode to modify the ENVISAT_ product data. This feature is not supported by the native ENVISAT_ driver of the GDAL_ library export_gdalvrt module ~~~~~~~~~~~~~~~~~~~~~ The complete code of the example is available in the :download:`examples/export_gdalvrt.py` file. It is organized so that it can also be imported as a module in any program. The :mod:`export_gdalvrt` module provides two functions: .. module:: export_gdalvrt .. function:: epr2gdal_band(band, vrt) Takes in input an :class:`epr.Band` object and a VRT dataset and add a GDAL_ band to the VRT dataset .. function:: epr2gdal(product, vrt, overwrite_existing=False) Takes in input a PyEPR_ :class:`Product` (or a filename) and the file name of the output VRT file and generates the VRT file itself containing a band for each :class:`epr.Band` present in the original :class:`epr.Product` and also associated metadata. The :func:`epr2gdal` function first creates the VRT dataset .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 101-117 and then loops on all :class:`epr.Band`\ s of the PyEPR_ :class:`epr.Product` calling the :func:`epr2gdal_band` function on each of them: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 136-137 The :mod:`export_gdalvrt` module also provides a :data:`epr_to_gdal_type` mapping between EPR and GDAL data type identifiers. .. index:: VRTRawRasterBand Generating *VRTRawRasterBand*\ s ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The core of the example is the part of the code in the :func:`epr2gdal_band` function that generates the GDAL_ *VRTRawRasterBand*. It is a description of a raster file that the GDAL_ library uses for low level data access. Of course the entire machinery works because data in :class:`epr.Band`\s and :class:`epr.Dataset`\ s of ENVISAT_ products are stored as contiguous rasters. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 54-78 .. index:: offset The fundamental part is the computation of the: **ImageOffset**: the offset in bytes to the beginning of the first pixel of data with respect to the beginning of the file. In the example it is computed using * the :data:`epr.DSD.ds_offset` attribute, that represents the offset in bytes of the :class:`epr.Dataset` from the beginning of the file, and * the :meth:`epr.Field.get_offset` method that returns the offset in bytes of the :class:`epr.Field` containing :class:`epr.Band` data from the beginning of the :class:`epr.Record` :: offset = dataset.get_dsd().ds_offset + field.get_offset() **LineOffset**: the offset in bytes from the beginning of one *scanline* of data and the next scanline of data. In the example it is set to the :class:`epr.Record` size in bytes using the :attr:`epr.Record.tot_size` attribute:: line_offset = record.tot_size **PixelOffset**: the offset in bytes from the beginning of one pixel and the next on the same line. Usually it corresponds to the size in bytes of the elementary data type. It is set using the :meth:`epr.Field.get_type` method and the :func:`epr.get_data_type_size` function:: pixel_offset = epr.get_data_type_size(field.get_type()) The band size in lines and columns of the GDAL_ bands is fixed at GDAL_ dataset level when it is created: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 50-52 .. index:: dataset, band Please note that in case of :class:`epr.Dataset`\ s storing complex values, like in `MDS1` :class:`epr.Dataset` of ASAR IMS :class:`epr.Product`\ s, pixels of real and imaginary parts are interleaved, so to represent :class:`epr.Band`\ s of the two components the pixel offset have to be doubled and an additional offset (one pixel) must be added to the *ImageOffset* of the :class:`epr.Band` representing the imaginary part: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 59-63 .. note:: the PyEPR_ API does not supports complex :class:`Band`\ s. :class:`epr.Dataset`\s containing complex data, like the `MDS1` :class:`epr.Dataset` of ASAR IMS :class:`epr.Product`\ s, are associated to two distinct :class:`epr.Band`\s containing the real (I) and the imaginary (Q) component respectively. GDAL_, instead, supports complex data types, so it is possible to map a complex ENVISAT_ :class:`epr.Dataset` onto a single GDAL_ bands with complex data type. This case is not handled in the example. .. index:: metadata Metadata ~~~~~~~~ The :func:`epr2gdal_band` function also stores a small set of metadata for each :class:`epr.Band`: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 80-95 Metadata are also stored at GDAL_ dataset level by the :func:`epr2gdal` function: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 119-126 .. index:: MPH, SPH The :func:`epr2gdal` function also stores the contents of the *MPH* and the *SPH* records as GDAL_ dataset matadata in custom domains: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 128-134 Complete listing ~~~~~~~~~~~~~~~~ .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python .. _GDAL: https://gdal.org .. _PyEPR: https://github.com/avalentino/pyepr .. _ENVISAT: https://envisat.esa.int .. raw:: latex \clearpage pyepr-1.1.3/doc/images/000077500000000000000000000000001414372560000146675ustar00rootroot00000000000000pyepr-1.1.3/doc/images/ASA_IMP_crop.png000066400000000000000000010574361414372560000175510ustar00rootroot00000000000000‰PNG  IHDR L1ÂýsBIT|dˆ pHYsaa¨?§i IDATxœì½y˜dU}ÿÿ¾ÕÕÕUÕݳ130¬Ã"3ȲEÑ "†EŸ€‰;Šá«€[0 ·DM4‚úÄ$bDŒˆ&  TDŒDP”° "³ötwuwuUÝßó{~ßÓ5lÎÂ0çý<ýtwÕ½çžó9ŸsÎû³œs³<Ïs%$$$$$$$$$$$l”¶t¶$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„„„„„„„„͆d€$$$$$$$$$$$l6$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„„„„„„„„͆d€$$$$$$$$$$$l6$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„„„„„„„„͆d€$$$$$$$$$$$l6$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„ÿ .Ôî»ï¾¥«ñŒÀ²eËT*=ý%"É2!!!!aCHHBÂf@©TúƒÈܳ]tQËßøÆ ^÷µ¯}-\·téÒM^¯,Ë6YÙÞf~êõº/^¬³Ï>[¿ûÝï6Ù³Ÿ*²,ûƒdñ‡Þ¿)°páB•J%=ôÐC[º* Û4Ê[º Û žid왂r¹¬¯}íkúä'?©þþþißîsŸS¹\V«ÕzÖÈpÙ²eZ¶l™$ixxXßùÎwt饗êk_ûšn½õV-\¸p‹ÖO’þùŸÿYcccOûþn¸a#ÖfãáÙ¢C [3’K6!!a‹â¸ãŽÓÈȈ¾úÕ¯NûîÁÔ 7Ü ã?~ ÔlÓaÙ²eºð uá…ê£ý¨~þóŸë¸ãŽÓŠ+ô|`KWO’´Ë.»hï½÷~Ú÷ï¾ûî)+!!!!¡+’’°…ðàƒªT*iùòåºçž{tòÉ'k»í¶S­VÓ²eËtÛm·I’~÷»ßé oxƒæÎ«jµªC=TÿùŸÿ9­¼GyD矾^ð‚hÖ¬YªT*Úi§ôêW¿Z¿üå/»Ö!Ïs}ò“ŸÔsŸû\Õj5í¼óÎzë[ߪիW?nÿ¿þë¿êÈ#Ô¬Y³T«ÕôÜç>WüàÕl6Ÿ²Ž;î8í¸ãŽú¾0í»/|á ÊóüqS´ÆÇÇõáXûí·Ÿúûû5sæL~øáºâŠ+6xÏ%—\¢}÷Ý·ÐæU«V=n=7f›c”J%qÆ’¤Ÿþô§…Ï<òH=ôÐC:õÔSµ`Á•ËeýÓ?ýS¸æÖ[oÕÉ'Ÿ¬vØA}}}Úu×]õñLçZ½zµÞûÞ÷jÉ’%êïïW­VÓ’%KtÎ9ç¨Ñh„ë6´ä’K.Ñ!‡¢þþ~õööjþüù:üðÃõ•¯|¥p݆ôç©ô—‘|Pþ箹sçªV«éCÑ·¿ýí'ì“r~ä‘G´|ùò ËC=TßûÞ÷$ICCCúÿïÿiÁ‚êëëÓ¾ûýëÓÊZ·n>ðèˆ#ŽÐvÛmdô§ú§ºå–[6X‡Ë/¿\têõº¶ß~{½îu¯ÓC=ô¸{q¾ûÝïê¸ãŽ sÃ^{í¥w½ë]Ú(rIHHHØTH)X [÷ÝwŸ^ô¢éCÑ[Þò=øàƒºâŠ+tÔQGé†nЉ'ž¨ èŒ3ÎЪU«ôå/YÇ{¬n¿ýv-^¼8”óƒü@ŸùÌg´lÙ2qÄêëëÓ¯ýk}ó›ßÔ·¾õ-Ý|óÍ:à€ Ï~ë[ߪÏ~ö³Úi§ôæ7¿Y½½½úÖ·¾¥Ÿüä'šœœT__ß´úžvÚiºì²Ë´×^{é oxƒuË-·è‚ .Ð÷¿ÿ}]wÝu*—ŸüÔÒÓÓ£SO=UúЇôË_þRÏ}îs%Iív[_úÒ—ô‚¼@K–,ézo³ÙÔK_úRýèG?Ò¾ûÎ:K£££ºòÊ+õªW½J·ß~»>ò‘îyÛÛÞ¦O}êSÚqÇõæ7¿YårYW_}µ~üão¶6wCžç…ß`åÊ•zÑ‹^¤í·ß^oxÃÔl6µ`ÁIÒ¿øEqÆš9s¦N8áí¸ãŽºï¾ûtÙe—éÛßþ¶~ò“Ÿh—]v e=ðÀÁ 9äCtæ™gªR©è®»îÒç?ÿysÎ9Úu×]ÃõqºÒ»ßýn}ô£ÕÞ{ï­7½éMš9s¦V¬X¡[o½UW_}µ^ýêW®ï:ý%I¿ýíoõüç?_Ï}îsõæ7¿Y+W®ÔW¾òp ºþúëõâ¿øiH¼ˆÕ«WëÿøµÃ;è´ÓNÓÊ•+uùå—ëøã×7Þ¨³Ï>[ÍfS¯{Ýë4>>®¯|å+:å”StÝu×é¨£Ž åüò—¿Ô‡?üaqÄZ¾|¹êõºzè!}ó›ßÔ5×\£o}ë[:öØc ÏþÛ¿ý[½ç=ïÑœ9stê©§jæÌ™ºîºë´téRÍš5«kÚØÅ_¬‹/¾X;^ùÊWj»í¶ÓwÞ©¿û»¿Ó5×\£ÿøÇš1cÆ,—„„„„M‚{àò,Ëò,ËòO}êS…ï>ö±åY–僃ƒùyçWøîª«®Ê³,ËÏ<óÌÂç+V¬È'&&¦=ûî»ïÎócŽ9¦ðù~ðƒ<˲|É’%ùÐÐPø¼Ùlæ/~ñ‹ó,ËòÝwß½pÏ—¾ô¥<˲ü oxCÞjµºÖùŸøÄHc=Þ÷¾÷åY–å_øÂòûï¿?/•Jù¹çž¾ÿö·¿¾GVK—.-”ñÁ~0ϲ,?ñÄóv»>ÿýïŸï¾ûîy–eù~ô£ðùÍ7ßœgY–/^¼8_³fMø|||<_ºtéfkóÅ_\ø¼Õjå/{ÙËò,ËòÓO?=|Ž~üÅ_üÅ´²~ýë_ç½½½ù¯\¹²ðÝü㼯¯/?á„ ŸvØay–eùÇ>ö±iå åãããáÿ#Ž8bšÎΞ=;_¸paÞl6§ÝïòÌó<ßm·Ý¦Éò©ö—‘¿ÿû¿/”õÃþ0ϲ,?öØc§ÕeCØm·ÝòR©”ÿö·¿-|Î3â±öõ¯=ŒÃSN9%ït:á»Ûn»-ϲ,?î¸ã ÷¬[·.žöìGy$ßyçóÅ‹>¿ï¾ûòr¹œ/X° ÿßÿýßÂw¯}ík»Î7ÜpCžeY~ôÑGçF£ðÝ•W^™gY–¿ýíoi$$$$l9$$!a3àñ E‹M»þw¿û]žeY>sæÌ)Ìó{ãߘgY–_qÅÓ®ÿéOºÙÚ¼lÙ²ü}ï{_þ¾÷½/?ï¼óò%K–äY–åóçÏÏxàp}–ey­VË×­[7­¬·¿ýíy–eù 7ÜÐõY§œrJÞÓÓÈðÏ~ö³<˲üE/zÑ“ªk7¤¿¿?ßc=ºº1º Oµ¿è÷½÷Þ»ë3öÚk¯|Þ¼yO¦9¡N2@64ÖjµZ^*•òGydZy‹-zJÏ?ï¼óò,Ëò‡~8|ö×ý×y–eùÇ?þñi×?öØcyOOÏ´~8á„òR©”ßÿý]Ÿóüç??Ÿ?þ“®WBBBÂæFJÁJHØÂ8øàƒ§}6þ|IÒ¾ûî;-%¨T*iîܹZ³fÍ´ûþã?þCŸýìgõ³ŸýL«V­R«Õ ßeY¦•+Wjûí·—$Ý~ûíʲ¬ëѶÏ{Þó¦HÕh4ôóŸÿ\;ì°ƒ>úÑvmK©TÒ=÷Üó-îŽ7¾ñzõ«_­o~ó›zÑ‹^¤ÿøÿ),Ý0<<¬ûï¿_‹-ÒN;í4íû—¼ä%’Ö·ÜvÛmʲLGqÄ´ë9äiÏÚTm¾é¦›tÓM7I’*•ŠvÝuW½å-oÑùçŸ?­-ûì³§•Á~‚믿>”åxä‘GÔéttï½÷êÀÔO~òIë÷Ü<]¼æ5¯Ñç>÷9í¿ÿþ:å”StØa‡é°ÃÓÌ™3ŸðÞ§Ó_àCéZæ‚ ôàƒ>µFl7ÖÚívH{sl¿ýöºï¾û¦}~óÍ7듟ü¤n¹å­X±bÚ>¡ÿû¿ÿÓÎ;ï,iª½ÝÆá¼yó´hÑ¢iúuË-·¨¯¯OÿüÏÿ<-eOZ¯·+V¬Ðš5k4{öì'hyBBBÂæG2@¶0ºí9`Ói·ï¤õÆD»Ý.|öÉO~RçœsŽæÌ™££>Z»îº«êõº²,ÓUW]¥Ÿÿü皘˜׳QuÖ¬Y]ËI%Ï£>ª÷¿ÿýlÏÓ=æôÄOÔœ9sôùÏ^÷Þ{¯Úíöãn>§þsæÌéú=Ÿû†ÜÇ»'˲i²ØTm¾è¢‹tá…>©k7DîÙ4ßmÏ„×kddD’´víZIÒܹsŸJU ¸ôÒKµ×^{éK_ú’þú¯ÿZÒúc”?þx}üã×{ì±Á{ŸN ƒR©¤N§ó”Ú°!<Þ36´¿'˲iϿꪫtòÉ'«^¯ëè£Öž{î©þþ~•J%Ýxãºé¦›žô8”ÔÕ€Xµj•Úí¶.¾øâ ¶‡¾OHBBÂ3ÉIHx Õj颋.Ò.»ì¢;î¸cé¸ãŽ;ôóŸÿ¼ðT×®]«yóæ¾Ëó\CCC…Ï!Ât~ö³Ÿmô6ôõõé5¯y.½ôRýâ¿Ð’%KôGôG¼žú¬^½ºë÷|îÞï!ò<×ÚµkCôɯßTmþC0sæLeY¦¡¡! <áõÜ•+W>íg–Ëe½óïÔ;ßùN­\¹R?üáõÕ¯~UW^y¥n»í6ýæ7¿Ù ‘:ýµ5â‚ .P¿î¼óÎiïsY»ví´h•Ãnèö92úCú2!!!aK"Ûð,Àc=¦¡¡!-]ºtšñÑl6uóÍ7OóÒtÐAÊó\?øÁ¦•wûí·ktt´ðÙÀÀ€öÝw_Ýu×]]Ó¿6ÞøÆ7ªÓéèÑGÕé§Ÿþ¸×j=öн÷Þ«ÿû¿ÿ›ö=/Â;è ƒÂg|°ò<ïzŒñý׎¡•6O›Ÿ.;ì° ö߆®—¤k¯½v£<îܹ:ñÄuÅWèÈ#ÔÃ?¬;î¸cƒ×?þÚñ›ßüFûï¿×—IÞxãÓ>£½Ýúñ±ÇëšÞwØa‡iõêÕ<^;!!!ᙎd€$$< 0gÎU*Ýzë­…·Wçy®sÏ=W+V¬˜vÏë_ÿzIÒûÞ÷>­[·.|Þl6õŽw¼£ësÎ=÷\5›M~úé]ß’Ýh4tçw>ívì·ß~ºæšktÕUWé´ÓN{ÂëO?ýtu:½ímo+¤Â¬\¹R\p²,+”sê©§JZßf7(ÆÇÇuÞyçu}ƦnóÓÅYg¥ÞÞ^sÎ9zøá‡§}ßéttë­·†ÿ:è ½ð…/ÔÍ7߬O|âÓ®*¤ÅÀíöœ‘‘‘®i{1žjmX°`î¾ûîicŽNÆŽ€W¿úÕ*—ËúøÇ?®ÿýßÿ Ÿçy®óÎ;¯kŠÙ9çœ#IzÓ›ÞÔ5¢499ùŒ‹Ø%$$$8R VB³ÕjUgœq†.¹ä=ïyÏÓË_þreY¦ï~÷»zôÑGuøá‡Oó°~øá:ãŒ3ôÿøÚwß}õŠW¼B½½½úö·¿­ÁÁA-X°`Ú Ð–/_®ÿþïÿÖ§?ýií±Ç:þøãµ`ÁŽŽêW¿ú•~øÃêõ¯½>ýéO?í¶sÌ1OúÚw¼ãºöÚkõo|Cp€Ž=öX5 ]yå•Z¹r¥Þõ®wé…/|a¸þ…/|¡Î>ûl}êSŸÒ’%KtÒI'©··WW_}µ¶Ûn;-X°`Ú¦ÞÍÑæ§ƒE‹é‹_ü¢N;í4-^¼XǼöÚk/µÛm=ðÀúÁ~ 9sæ¼ä_þò—µlÙ2{î¹úÊW¾¢Ã?\½½½úõ¯­ë¯¿^wß}wá= .‹F£¡¥K—j¯½öÒÿñkÇwÔØØ˜®¿þzÝu×]zùË_^x/M7<Õþz2è¶ {c^ÿTË{ÛÛÞ¦w¼ã:ðÀuÒI'©V«é‡?ü¡î¸ã{ì±Ó"P{챇Þÿþ÷ëüóÏ× SN9E3fÌÐõ×_¯•+Wj¿ýöÓÝwß]¸çÅ/~±>ò‘è/ÿò/µçž{êe/{™vÛm7MLLèÞ{ïÕM7ݤÃ;L×\sÍFmkBBBÂFÃ9{+!aÃãû|ùò Þsä‘GvýnáÂ…ÓŽ8mµZùÅ_œ/\¸0ïííÍ,X¿þõ¯Ïï¿ÿþüÔSOízüh§ÓÉÿþïÿ>_¼xqÞ××—ï´ÓNù[ßúÖ|õêÕù¼yóòƒ:¨ëóÿýßÿ=ÙË^–ÏŸ??/—ËùÌ™3óƒ>8Ç;Þ‘ÿêW¿zR2¹è¢‹òR©Žá}ûìÚ|ÖYgåCCC]åº)Ú¿dCx<¿øÅ/òSO=5ßm·ÝòJ¥’×jµ|ñâÅùòåËó믿~Úõ«V­Êßýîwç‹-ÊûúúòZ­–ï¿ÿþù;ßùÎÂ;%–-[VÐÙÉÉÉüÃþpþÒ—¾4ßa‡òr¹œ ä‡rHþñ<Ÿ 6$˧Ò_O4Fâ:>.\¸ÁcxŸÊX{¢ç_rÉ%ùâÅ‹óJ¥’Ï›7/Å+^‘ß~ûí¡ÿoºé¦i÷üË¿üK~àæÕj5Ÿ?~þº×½.øá‡óC=4Ÿ3gN×çÿèG?Ê_ùÊWæ;î¸cÞÛÛ›æûí·_~æ™gæ·Þzë‰#!!!a‹!ËóìJHHØêñÐCiáÂ…zÕ«^¥Ë/¿|KW'!a›D£ÑÐüùóuÀtMKHHHØZ‘ö€$$lÃè¶7drrRçž{®$餓NÚÜUJHØæ°zõêiÇjçy®óÏ?_F#Ä„„gR$!aÆ{ÞóýÛ¿ý›^üâkþüùZ½zµ®½öZ=øàƒzùË_®«¯¾zKW1!áYÏ~ö³úÀ> £>Z;í´“FFFôýï_wß}·>ø`Ý|óͪT*[ºš  izBÂ6Œ—¼ä%ºýöÛuõÕWkÕªUªV«Z´h‘Î:ë,½ímoÛÒÕKHØ&ðüç?_|°¾÷½ïé÷¿ÿ½z{{µûî»ë‚ .лßýîd|$$$<ë" › iHBBBBBBBBÂSÂÈȈÞõ®wé¥/}©æÍ›§R©¤‹/¾¸ëµ·Ýv›^ò’—hppP³gÏÖI'¤x ëµŸúÔ§´xñbU«ÕpLu«ÕšvÝc=¦SO=UóæÍS¿^øÂ†š&<ó‘ ­###zûÛß®vÚIµZMx ®¸âŠ-]­„„„„„„„g1V®\©Ï}îsšœœÔ‰'ž(IÓ^´)I÷Üs–-[¦V«¥+¯¼R_üâõ›ßüFK—.ÕÊ•+ ×~ðƒÔÛßþv|òɺîºëtæ™gêCúÞúÖ·®›˜˜ÐQG¥o¼Qÿðÿ o}ë[Ú~ûíuÌ1ÇL{çUÂ3)k+ÇK_úRýìg?ÓßüÍßhï½÷Öå—_®ÏþóºüòËõªW½jKW/!!!!!!áYŽU«ViÞ¼yºè¢‹tá…¾{å+_©›nºI÷ÝwŸ$­?êý9ÏyŽÎ9ç}ä# eì¼óÎ:õÔSõ™Ï|&ÜÿáXõW¥»îºKûì³$éÓŸþ´Î:ë,ÝrË-zþóŸ/Ij·Û:à€400 Ÿüä'›£Ù Rd+Æ5×\£ï}ï{úÌg>£7½éM:âˆ#ôÿø:úè£õÎw¾SNgKW1!!!!!!áYŽ ù²[­–þýßÿ]'tR0>$i×]wÕ‘G©«®º*|öï|GZ¾|y¡ŒåË—+Ïs}ó›ß Ÿ]uÕUZ¼xq0>$©§§G¯}íkõÓŸþT¿ûÝï6VÓ6’²㪫®Òàà þìÏþ¬ðùòåËõÈ#èÖ[oÝB5KHHHHHHØÖqß}÷i||\ûï¿ÿ´ïöÛo?ýÏÿüšÍ¦$é®»î Ÿ;vØaÍ;Wwß}wøì®»îÚ`™’ ×&<3‘ŽáÝŠA8²T*Ú‘>;ì°Âw+W®Ôw¿û]-\¸PµZm³Õ5!!!!!áÙŠ±±1=øàƒú“?ùÍ;w³?ÿÞ{ïÕððð&+ppPÏyÎsžò}«V­’$Í™3gÚwsæÌQžçZ³f¶ß~{­ZµJ}}}]¹ÉìÙ³CYÒú—wn¨LnÂ3ÉÙŠ±jÕ*íµ×^Ó>¼øÝï~W¯}ík7yݶ5|ùË_Ök^óšÍúÌ{ï½W{ï½÷&Îo~ó›§e„$$tC2@¶1ì¾ûî’¤jµöˆäy®<ÏU©T400 J¥¢jµªV«¥‘‘åy®r¹¬,ËÔjµÔétÔétT.—Õß߯ÉÉIMLL¨··WµZMårYÍfS£££j6›ª×ëjµZ*—ËÊó\“““êt:jµZšœœTOOJ¥Ò´HN¥RQ¹\V«ÕR«Õ 9¦ív;|ÞétT*•”ç¹:޲,S–eêéé)ìá:®m·ÛÊó\¥RI}}}š˜˜P»ÝVoo¯Úív¨ÏãÚv»žÊå²&&&”eY¸§Õj)˲Pg>Ÿ˜˜P½^åò9eäy®jµªf³êʳ¹¶ÓéP§r¹ž+)´Ÿk{zz”e™z{{Ã=“““¡ßé¿f³©¾¾¾Ð_ÞÞV«ê”eYx.r­V+ó¿½(£ÓéÊWµZ úÎõÔýBÖ­V+ôu÷ö#{trÐí¾¾¾Ð¿ÔÓÛßÛÛÚÁs¥õ'ÈLNN†1:>>®,ËT©TB9¡-è m¥ßxÖäädxßQoÆPooo¸ÞÇXžçá^ï—=2q¹ò]¹\Öððp˜kÐ5ÊȺ¹Ž£;ÈÈu=æ{tò1ßét499©¾¾>5›Mõöö†v ?ÆŸÑ6d@ùÈ´^¯«Z­jõêÕ…yÌ Ef|FÙ® ±ÞQòìíí ó‰tY‡ö6 ÕëõÂüé²e.æ9½½½šœœ ϧlæŸé3æ äÆü ¼­®è2ã]¦N^gŸ?è7ÚÆXC.ÈšqïMà9š={¶ò­ËvÛm'i}Ä"ÆêÕ«•e™fÏž®˜˜(Ì×~í¡‡Z(wCeúsž¹HÈVŒí¶Û®k”ãñ ƒz·ÝvÓèè¨FFFÂ"Ñ××§°ØÍš5«@gΜ ’R©¤uëÖiΜ9Z¹r¥jµZX,J¥’f̘¡ÁÁAibbB•JE­VKccc*—Ë*—˪T* C¥R),~¥R)@H¤R699H DÁ Õr¹žÙÆb1ƒØp-?nt![rˆ¤ÈÒnäSZo`Ť›Ï En”±øJëI eMLLbEû0©# ¸/Æ™Ô9õõõ ŒžžêG›èÈ“ßS*•T«ÕB½1Jhr‡lÆò ïi›4E ?ȃz@\ ”ÔcbbB¥RIÕj5ü ñžœœ,×<ÏÃfIžÑÛÛäéC!Î\¡n¸QËçô õ L ÉÉÉ‚ìÝÐv™¡¯”Oóf˜›Ð ŒGÚ„£‡2œ@Sò„¸£Ï̃ýýýáYqŸRW×7TûûûCÛÝÈð9ˆ1ͼÈwè8õëëë+èúN`ŽnµZªÕjr§¿h7cbÅŠ‡ÕÀÀ€šÍ¦úûû5>>ÆããyæÌ™’Ö%###a¾šFœ7'öÙgtÐA[ìùݰçž{ªV«éÎ;ïœöÝ/~ñ =ç9Ï ó{:î¼óNýÑýQ¸îÑGÕªU«´dÉ’ðÙ~ûí·Á2%®Mxщåe IDATf"mBߊ±ÿþûëW¿úÕ´Ó®žÌ,•Jš5k–êõzXXÜëÆ¤ïÞl÷`µZ-MLLhxxX³fÍ*,¾aèïïÞ9HÍÄÄ„šÍ¦²,ÓÀÀ@¨Ië‰ƈ“ 'PÔ!6Nœ´c(¹g¹p/¹{ñY i 2ƒ!¼’‚ÇνïNš]³Ù ÷BÜCJ[ùÜI¿Y0GGGƒ, 7È™hNì5¤ŽF£ SHBüÂ'7dh£Ë€Œ÷Æ»4n×@b܃J$ÈI#Æ_9ðþ—dìäÜÉ ² Bà ²ùÀ°¦OÀ{»<*ùs#×£ NZ‘ }„>1î¤)§{¡= wC#Á#‡<ï‘9òn6›A®nÔ@¤8+  Œˆe<^&''ƒ<éstߣ°<ýA¶È×#J|o·GÿÐ>Gïq| ÃÞï)Œ#Œ®§^g N’Ñ'ŸGÐôv2n³èeÐ/îT¡¬J¥¢ñññ «8¢Íç}}}¡´Ï®a|{tÅ I¼ó½^WÁˆö¾D¶”ëFc›¶¹Á†AâÑêθn4á™8]¸Ïû”õŽöûÜÍ}óçÏW«Õ kšG3›Í¦ÆÇÇÕh4ÂøÄHrcuK‚¾ßØ?Êå²^þò—ëßø†FFFÂç=ôn¼ñF½â¯ŸsÌ1ªV«ºì²Ë e\vÙeʲL'œpBøìÄOÔ=÷Ü£Ÿþô§á³V«¥/ùËzÁ ^ vØáªw¦GŠ€lÅ8ñÄõ¹Ï}N_ÿú×õÊW¾2|~Ùe—i§v*O£T*…… '6 ðððp¸®Ñh„°4ÆG­V ‹€§¸GMR $¾BîYÐ :¾`¹÷ÖÉ5ðô8õÂ#%7¦ DDQâÈ…4EøÜ€ˆ ¸§9AȽ,Èxª–ßË"†W“²<¼OÛˆl°àJSÄω­FÿMú¤@záäädÁ#N;!å7.<šA»=Zäd’ã׺®Œ¼þ莤)s£„ºÆdÒLi3ýC;]‡*•JAF®Kn˜y[<í‰ëã>v@~±‡cÕI§GtÐ-¼Ânô@ÜøÌëã}Œùy”Ýwƒp²·ÉÉ{L¼uŽ£Þw.ó8šà:¿”§ßxä‰2é[>w¢î„Ø. ˜,Ë4>>"Ž´Á#Mn`y$—6x”ÉJäàÆúêò˜˜˜zÁåã ™aðáðgø|ìºËó1°\/=Œ¨ãÍŸáãÍu™ât¢ÏXèGæj7ôÜ anpcÞ#/îðây> GdÕn·Ã›¹W¬X¡±±± £¬SnèydëÙˆÇ3B®½öZŽŽ†ô¬»ï¾[_ÿú×%IǼjµš.¾øbzè¡zÙË^¦÷¼ç=Ó…^¨ùóçë¼óÎ eÍž=[õW¥ .¸@sæÌÑÑG­ÿú¯ÿÒÅ_¬7½éMZ¼xq¸ö´ÓNÓ¥—^ª?û³?ÓG>òÍ›7OŸþô§uï½÷ê{ßûÞ&’DÂÆD2@¶bsÌ1:úè£õ–·¼EëÖ­Óž{î©ý×Õu×]§Ë/¿üq=2FC•JEN'ìIð=’‚÷òAºÏÌ™3õûßÿ>,(Ò”7Љ“6Réäxtt4ÂØÛ”e™êõzø£Å£ xzYŒÄ»@›<ïÏ$ÚËqbçdÑ£C1ys/œ/ø¾x²`÷õõI*îÙT ˆÈ™6C¬Ü{ë „{ý¬rMœ£“XkÈ5õü²ð»7²§§'ä #»8/râH“§ÙÄ$BÓ ¤¡±Ï„¶û=ݼè1Ñòºð›kyƒ¶ºzÔ‚¾„˜¡‡n Q_tœñæD‚D°‚g8aä:"Xñ Æ•·?6B]ܘ… ºŽO›'ŒaŸÓ¼)›þñ(u X×mw:ÅéCè; \žnX0'ÆýéÎw6¸ÁìsQÈÉ@®«±ã}ážÏy|ïž)žI›=äãèp½Ü–pæ™gê·¿ý­¤õúrå•WêÊ+¯T–ezà´ë®»jÑ¢EúÏÿüO½ûÝïÖÉ'Ÿ¬r¹¬£Ž:JûØÇ¦¥ŠŸþùÔ¥—^ª}ìcZ°`þò/ÿRï}ï{ ×U*}ÿûß×»Þõ.}öÙj4:ðÀuíµ×jéÒ¥›­ý OÉÙÊño|Cï}ï{uá…jõêÕÚgŸ}ôÕ¯~µé†F£&|Bèx™œ|C1úúúÂäLd‚<[Bá###a!#Òà Y¬0€ãMÀžîÈýþ|R!MÈ ‡Ïï–öÙB7<‡>{d„{|”ïCqBëŒ~B6ÔÉI#u!’>!bá‘9'èè 2v™{½»E¨hŸ§K¹AA¿P>rï½âs¼p/¤“=ñ3bqç÷‡GÛ˜scƒÈØ@s½£íȿݨu÷½#.+¬Ò®N§ èÏôºÇý寷ƒ{||âlŒçX½L@‰1̳´­Ûøpƒˆ2ˆôù~8Ö žŸe™jµZp"ÐvöŒliÄ:¿1Ë݈=:è ]ýõOêÚ³Ï>[gŸ}ö^7þüiéZ [’²•£¿¿_ŸøÄ'ô‰O|â)Ý©Éó\cccï{Ù0.úúúÂf;&äz½®ÑÑÑBŠ{ÆÇÇÃbæi=, N'„ì ² ”:Žu5Z­–*•І¤âéOîñwÒíÏwìFOWqR b²á†‘ïã  oD¢YrR勺/ž,’´h”×ÉÉäÄIllˆ cï{²x FìyuÂYròèžÍØãGÁ(‡69Á¦~“ï'óx-ýäìĽ¡±ÁIôûbrH›¨¯1— 'jùfhO?ñ¾q£‹2œŒQ¶§°8^'îÝŒ7ì€{ÊŒ ”åãÀ#’ô©¤‚ü¼lÆã½q²{Åéød5×SëõóHÿ{d/–JÔ™{Š“ãxÎqRÎøô´*æHÂø˜p¸·Þ iÔÅåèÑ,æ5dG20@H_òù×Ó–òö„‘®>W¹ãÄS}žÀÀ} ñ2<=66/̃^G A!zëQ=¬¹p”ĺJšoBB“G2@¶Q°p@^ 3ž&€·¯R©#ÄCâ¢öÏkµšFFFÂ"Q266¥ÞÞ^5ðìjµªv»­ñññÂfXÏ v"‹G•ûãŸWŒ…NšŠ‚8a“¦RŸ6DŠ(ÓÛŸ°ãÏw2ç^NêïI>NŠxõbqôø‡kcBâõsæZ­†Ô¡¾¾¾àÕ£}ÝÚ†wŸçð{`ÝL_î‹ÉoOOƒ‘éäù¹7ÖûÊÛädúÍSa(™¹Žºq…î ÓÔÛÓ¢¼o ×ô¹ë‰-Êd,I ‘Ř:™Ä3ídÔljN%ðh‚QÆ1zîdÒË¢~¯÷ë‹[ž ãý͸•Tðx»±åÑ@¼ØN‚»ET\¶q¤…2ÝÚíÏb/ãŽ2œHS†ŸZæF‰Ï'Ô›v8 £©^È0ýY*•‘Íóù™~s§€Þ‡üvg óQ¬?Y–ÇA<¯¸Žù8óç1¾<š!ÖÍP¢½¾Ft:`h0n}žãoæàf³©Z­"% Éóõ'¢¹³Í)êt:Z³fM!tK!v0mÌr66Ò)XÛ(È wB‡¡À"Æ&ð¡¡!ŽŽjttTãããa*,µZM½½½…“&&&ÂÞT¢.¼€œ2"Mmªä^2¢,Ý6 :!óïy6^,ˆÞ7÷d»'ßÛ莓ÅnS©èUv’E™iˆ _¬+•Jð²!?' áv{êÄH§…AÊýYóæÍS­VSØèîõˆI€·!&ÔÓD/G*Fy¾>ž¶!WŒ«xïƒïWôÏÓW d<ÏÓYb#rEªœ?Çû#6ôÜãëä¶aD¹ì(3– e:!Š#N¾Ý¸óô¯eRVœH½œüS¦Žº^;‰vcŽºœ\GÝãì¾â‡{\fžjçÑ('K'ÚÌ+N¬»ÉÃõ‹¾ífìùоQ®§ýy]!Íè|·ˆžT4 ˆª"sö!xZœGWˆ>ÇG)Çåó Ê£^8h§G³½ïÝPC±S„>E¤)cÁ7¯ãòÈõtG:Íß±£Šé\¯›Í¦Ö®][XÓcóæÍÓvÛm§Ù³gO[WÜ8GÇÝàKHHxòHmõz=Oè^JÏ7‡@ñ‚Â5kÖ„(IÁ;Lœ£$‡††Ôh4BTƒÆsÔY8ØC!iÙp)Ïó³Ý ‰{ú‹çðK ‹½2Œ1'ÆNÀœL{n1m Ò”qôy*¤Â–J¥N©T*Áèš“HOû‚ØÄï$ˆ=ÔÓ½ÒÈÅ=²½½½Z³fÚív¨Sžç…}2'Œè‹Li*M&^¼Ý`CÅ$]ð í”Ò 8±Ä£¿¨Ó 'Rô…§ëy´ÃÉ«¿0Íåâúá}ä{nüÈOêäúEý¸ÎûÖ }LÝ|C²{­ùÝf|º¾8éCä3?8y ¯>.ŽÆµÛë7ë3GÌœ938Jp4lI¤hEÂÖ‚d€l£X·n]xqT–ea¯E¿†Ö¬YSx“v»½~êàà FFF¹`áð÷{Œ…4+›õX,H[¦Žëuä¹Ú,F½½½ Ï÷4ŠØ»íéS,X}}}á~ó8uðß<ƒEÝI³“.'å´9ö^Kë‰Z­¢8~ê‘ן:øÿ '#N|âÆž7Îo'O”?44TøBàF ³< RŒXží„ýq¹ù“Uþ§}þLvx_;Nl©—§?99AVñ#'â<§Õj…(•Ë9t#Ržfãºç†muãÄ=Ùè4×ñ<'ÆþÛs'{nhz“ðHÁŒI]qò)©`4¹Ñî2È ‚Ïs½­NDÑ IçˆkÒn|žq϶GÆü7åÑ^™¢šèMqr=sdóè†[îç^dãûqp xz›“oÊÃXð£¶}ŽbNñ¾Åp¢nÌ{n¼ÆïAbü¹1ãQÇôc¥RѺuë400ÚäcÁõ×tžÁ©†¥R)ËÀ™ƒ‘ï«Â0öh‡©ð’ÃjµäÂÚÅ&jïAÚRp}ÙØå&$ll$d :FA©TRX<ð:s*ÆF»ÝV¿V®\¼ºk×®Õàà` àLÜÒÔ^ ¼ÙRˆ’H'ñ¢æyôY–…¹XhÝÃ{3!–RÑËËbåž²<ü<µ(ËÖŸ†B›láU†lr‚Œ{÷ð–±€º ¤lß‹àmAVä~ó½ï5ñÀâè…{\}o ×ydÈÉ9õ÷ôOiãZO9¡/!îY¥¹Ïû(&Q7Vøß ®÷½—EÛÑ1îƒ`ºñ \¦ ˆ‹§Áñ,tÝ£}1aˆvcÊ£ D“œLð=2õvÄ2E1þýE‚Üï/ÆÃ®T*áÞ8âÁ[¼!ÀžvÂó¹ÖÉyÕ!êp"c×¾‡@z ‘Už…ƒ "ÍÞŸXÿº‘{Íã(–[ƽ9  "ªãããªÕja¯Ï¢?¼Íô)× ÿ¾É˜ÃЮóh…§{¡Ãô:âÞ7¢Ýyá²b¬RuŠ/þô¾ð芧áy´ÑûËÇ•ŸFœ˜Óÿ¼ÒÄ>b®`L{”à 7Ñ;OUõ(e­V e‰fœys2ýÝ××t×78Æù¨Ýn‡ùŸvÒŸDDæÎ«z½R†=2Ö-…Ð3­VK‹-Òý÷߯-IØš mÖ—Ö/МRʼnÖÄÄ„êõz``‚fñâéN€= O¨oNuB‰õŽõ²ññq †Åzc ð¬Ø;އ’„xáXœ|o ¿ñ²B’ÜSÛÓÓ£F£Qîw­§äð}µZ äß7ÌÆ)EnXQúÏ7ÈCü~dák'Ö+¯³ O…¡N8œäû{VèGH:åû‚þþþBÚexjš¥.wÈÿ×jµBtÃÛê^zÈÑžV«<ýNªü¨M—zç㊾äs #<ã£nÆ•×~å­ËEp²Á»ízOùžzâ ÷ »¾ø{*Ö­[W àôsÜî¨èíí sõ#m£'&|F[â´5¨ççû˜B†qT±CD0–ムèKßÛD]1J™=Ì÷†0Ю»îØ`¬ú˜¥Ïh#cÛÛëGäÎüÁØEô› GI=ºàŽ 82â ô‘¶P_æ_Úî)®“FC³gÏŸ;/IµZ ÆÏd|?‰“¼€E÷H9YÆãÉéFyž‡ÓWX‘‰o,÷ôÚîž[Ï?†H*´"çJ/o‹;d‚ˆä——@ºç4NÑ B*æ=C$y.„‹J•€z„@R N¹>'}Æ£î öÔ1d‡1èi.ÈÃOsï°§òÐOîu÷Tä‚lœ4Ògž>‚§}w/«GhK©T †…”A_ó,ÚÄßžrGÙ´app°@$Ñ/w —NPK¥R!%Í÷7¹<0ð\GÝ@çÔ<qT¥T*>¢»Iædà/~#e³^¯ï·4iòè[êGo¼“a7ÂEEcü3›GzœÜ»‘Gsâh'eCü½ÎDƈ&{$Wš:FCÃñF¤­¿¿¿`àøÉ€>o¸“€g£ Ìó!§À"QÌ™”Mª­G ½º\C´uöìÙÓÒã0à}^òµƒ1IDÜŠ÷qèŽ*£££ Ï/—Ëš1cFpDøÚãŽ6¨T*ψ(HBÂÖ‚d€l£À[ßl65cÆŒÃDΦs­‡àI•™={vˆ‚ 2Š!À$îXþÈȈ$M;îÔsë z†çäº7¶?׉cµZ $€Å…kÜ(`qóÜu'l’‚±„‡7Þ\wž6ˆÉlüÆlÊ‘¦ö®°ˆzšõ¡ÿ¨'rôÿ˜àá‹÷)8ɧ~,ºr¢¯ý>êÏ‚ ±¢<DšJÙC^g7ÜS A$ê5::ZHqy`Üù‘BI‚冞÷=z®àùჃƒ ‘+ÚæžVI¡Þ.HàÁ÷‘{ß=jG}éÇz½^Ãu'¥Á|ŽñˆÌ0:ÜÃ"‹ñ‡!冄ÌI6õqBGýºe'<,êÞ/|îURDkE IDAT†¼.ÈÌ#-žºãϤoœ|»w™÷ @¸×)€¬`R_ÈDÈëÁ“!'š¤U ?ú©[Ÿzýc#‘kÑ=6“Žƒ<©³ò”ç¹F!²ÁXòü{ˆÍSWœü:éôÓß܃‹<ÈÑ÷}”ázéc@Rx¿cÒ‰>zàû­ºÉÖ‰¤UʧžÞ”ïQWÊá^7 Ü+O_zÔÕçô•)Œ~z¡î‰žGÄÈ }"{‘ô9þ£=Dѱ8/޾ùfx7ÚÜxðûØÇ„3ÇûÜçUt¹º±ÍÜ…!„¡Œ¬cƒ]óµ¾àÙxâG £»F¼žô{©Ñ!þ§.¾ï„ëÜÀÉó<jÚH~ŸÏ>|¡Ÿ0T1Ž$36È‘¥; ¸7ÞKãcÇÿ÷:} éÎO©Ä8à @.~B˜§NR¶²±£‚kÐQ¢ßŒæ`OYĤ?=JàcÄ”ï/zÆ÷è$ÿ»®úœÆxCŽÁ¤¿™§Ñ>#jçÎ'îàõ}H­VKããã'ÑjµZˆðu‹ørÏ–„Ï›ó'!aS ¥`m£ðJ i}Îëàà †‡‡ƒAÁ¢ÓÓÓ£3f„4.'þ±Pš2jÜ3é/ˆ’¦"!î%tZìå¤\ïøNJ|?Àsë$Ï Ïÿ¦m^6×¶Zëß"ïûðêyˆÞÓ|v¢ï) ”ïíˆS¥ ͱç2ïõŒ ˆç¼s †¤çÔCà>ýz'‚®;NòÝ`ñ1ãžë›Æ}løØÂs¹¸ÁíÄyyzÏs9ºHý€G$Ðú:ž \‡Tû¡±è3Ö©ŸQNU¡­´ÏI?ó9$ÏóP¦??ÖOÁ¬Õjʲ¬pjë·Ï“nLº!DTÊO;Ëó\###…4׳,[ŸvÌ|çØ}ñS°HÙu}ñù㙂µ© †d„$l ¤È6 Âü¤.IÒèèhXœšÍ¦Ö­[ö‰à„Ô­]»6DQ 'žwÍBâ7“§}ùQ¤îýd£;‹¼'÷ž;уŒx •¾˜cL±hð¹§:Ä?^>õ¢]¾Ÿ‚º±0ÅÆ€4EÀ»ÔÂßx2TIS¹Îî)tï¿“'bnl:1qcòßç2uÂMßó½•8r#©@:ݰC_º¥m¹ÅérNf1èð\Ç¢8"—çäÃß$í$ª©‹#}ž_î$×Ï÷w½A7ùßÛÁXAvèëà† ÷!OWôè—“?ŸqÀËõšö#ߨñþrâÏwÜ‹GÚɾGÜð¾E.±aë{g¤)wíô9Áû:6ì|Έ @—‹f¾<7>ŸPWOÓsA¼¸{\?=•Ñû86z™ëéW×=wÑ÷»ëi¸èðò‰¢{ú[–M½ñœˆQ7¬74î}n£hÕ‰>Æ3Ïpg–ƒ1Üß߯Z­žÉ\_Ÿðä" Û(Hm ·•ƒÀ½¼Y–i```šwˆ ˜=¼1]š"É,\¾xF*zúynìùõE8N¥òèŠ{s}“¦o|£7xíœÀÄÄ‚¿¹Þ÷³P®“3ÚÈóü{Êe»AÄ¢ëûžë)',’nXÄF ×ÑÈ·[Åð82{ÇP/Ó%dïQ,È'Ï.{'%”‡‡§"‚§Ð>䇠Ÿ´Ã=±ÞNÚâ›S]×ÐÛØq/»§`yÙnøéBô•Gk<¢åél´ß½Ønz4ÂõÝeìi*xŠ]ÿy¦c¯;í‰SÿºÉQZŠÖŒ3´`ÁÕj5Ýu×]Z·n]è³Ø™@ÅÏ#:èŠG©¸—gûxq=‰£Y>iC7]Fv[tÌ÷Ì +è ©›>ßfYq_ÏpÃË F{Ûœ8».z? 7Nò=*ç}nzšÏŘvƒœr|‘6ˆû¸÷¨÷—ø¥‡®èž§^ò|×CŸ3ýä6×37~è3wNli¤HÂÖ„d€l£Èóõ{ xël§ÓÑÀÀ@˜x9IšÊq'¯vll,¤g11ñfd”8ŇŖ4$7D¤©#€ÅÒ ¢/”önø‚Ä"â†HLXTü½ñ÷ÒÔi)þlˆ`¬øiQNœàÅ^L{÷ˆóüس^îys¯£ þ’?'xYêïýì˜3<Ÿ¾b‘ö÷‘¢ÀužÖ{Qi/²'z*ñþêåd"àýã)2îuwýs∬|7röSƒœü¸¡Å÷CH#Q&HiìÁwý¢8Û½ú\Cºg9&Ìþ·ëklSV¬Oô‰ëMú×Ëãúf³Þ¿ÁwìcüÒ¾ùóçëÄOÔܹsµ÷Þ{kîܹ:çœsÂû†ü¨aß#áõuRí€{ÂÝqÀxr£Ë£M®‹ž6ê/2ð÷`Ä K®ë¤%¹!Œ,©'÷ºœý^>øñý1<¥Ñ¬¦o|Ï Q Êò4'7œbã96XrŽÔƈg,øKL]±ÀçIa>âïèe0oqŽ.wøx$Ÿö0§Qž¹ OÉÙFÁyüžû/­_°Ùüì›ú†‡‡5þ|•Ëåàmj·×OÈN'Ux³ðÞÆiMÒöÌ÷"JSyàž"â$н›Ü§!ÅDÏÆøZ<Ì,Ži`Aã¼ÞÓàG”zíƒ0t:ˆ§Ù=…þ7×yž62¤|<—qDÄ ƒQþF܃{ØYœX"?Iasº÷gLhÝpr¬HÏ€˜!7ôâh…“žíQžÛn·Ãùþ.;'‹±Qh+›‘íòwSPO×Cï[dK[Ü@õ:¡ëÈÝõÏ=ðèNLp½>ÞO|§NùØt‚G_û~t‚û‘—EO?d.qð´?¯C»ÝÖ< ‡~X÷ÝwŸz{{õØc…òüåw”á¤Gª\ŒYêȸ‚Pº>»á@ÿ;!÷¹ÇeédÛç×­àYÌnÄ9iöˆƒei¬Oîˆ È¡Z­†ùíûµ<µË£bÈdž;+Ø#áÑ)ôÝqã÷7×##× ®ó9Óq^[­VÃæ~îCžžêH;<2âQKôÛß_ãs1m¦m>þ|^ÞRðñ»±ËMHØØØò#&a‹ Õj…—ï‘ÛÊ›!H,–NòÚívx9ZOÏú÷Vø‚í^#'î~:U³Ù gÇó<ƒxArbé),N@¥©‰7öjÅ„ËÓÜËè ‹vûâåĈM§e¸'Î7‹:a ?úûûéC¾â/rD¦<õÂå!iÚû7ú|N n>ïç½'Þ¯D•|^¼ÿÊ£Aår¹&¸%‘Œ…„­ÉÙFáo’}ì±ÇT¯×Ãdêo]&:R©TÂ[¾!µ{÷úKSÑŽoìt:á »’ œ{¶!Ò Ê‚Ì2Ñ»'bGDX`}…/LNæÛíváqªEìEæw¹\raauRæÄž²<*wÎZH¾G܃ Äß»’¾ËóõÇhúq§~¯÷a___0© !$Œr½¾~-}AÙããã]Ÿí$y?ÌÀI¥{r݈Ó% !¼“TúÆ=ÙRžë„˜ëè7àÏì–ãuïëë †ßùÉEÞ&žA=âhX,'WîáŽ7ûÑÓ>ŽâTI7]眘±_¬^¯‡6Äýq$`4†GÀœÜ3Öùß~ucÔsù!¶Ys§Ë¹V«ixx¸p“rÚé$š1äýh±±LÝâ臧DÆQ—ïA·Ýhv2íÏu½ð2}nɲõûI‰#¢A###g„*8¤Ð +7ÒÇÆÆ F”×Ãû£„ƒF¼ÿècŒdæ|úÑ£W蘿ûÆçHã>ïùi]îìq£Âëà†®Ï¡Œ1ß3™ðäNÁÚFÑét ­Õjitt´p¬.FJ½^W¥RÑÈȈJ¥’V¬X¼º3fÌ%ÒgÜë?>>Ò{êõzˆ¬àUuO»çËãMö= îd!ẞžžð® <÷¤» ÒÇgD!üý(…ð…ÞóÊÝ‹ !¦í±‡‚Èßx—!ýNzc¯¬RÈÆ7£R©x€T|gm$ÂÓ]µZ DÙSw—$ ‚â§ 9qã>÷»Ÿ”¬“('Wþò8¯zB¹qDÃ(ê§§9ùrùñç‘c°»‡–“›œøÑ÷’ :øKíèß›°¡> ¯èK7=ê799©Z­êáÑC?i à Éd¬¯>—0Þcï+/&õè÷ðLÚ§,zÄ‚zû‘Õô›o@†¼£7qć{õ³,S­V+ìu€”»è ÄFž; ⨛ë?õëëë Ä×Ç:+íážžžž`ØaŇkœìù» $…9ôÓ_ü‰þ¹—žö¹L<ƒAá/¹£|÷òó7NI…>u½ñÈ&Ï÷ϳ,+Œµ3fݧ>nt0&H-sCŠz3%a~C¾èºBjíèö>tÏÏ÷9Ò‡È"&Wè$dsllLN§"‡^x´ 6˜Ý{KŸÒN —§Ÿ|”çëO©òˆQ»ÝÖàà`HÑœQžåÆ3‘dP¯×C}‘†—§[¡SÔùctxZéƒ=B”ãÑJ¢­V+ô£©ÄÐáó8ªG1Xb’ÌÿùAw+•Jˆ–!/×)êã]ÂhÄy„^ã¼@þLêÄ{œ˜‹|Žàz7Ö=Ð÷=¡/¤9ºÎ\K„ÃÆ ,fàTb̸ƒ‰ß8[XKÜ`ô”Köð=‘F1>ÝaÂw­V++qg,º‘C„uË_2ûlij¹m [ÉÙF1>>®þþþ@(úûûU©T¦rÈ3/š"u D:‡4µ xJMœZÀbêžR-‹œââ  0žKŽñ„¸³q|0‹cLb*•Jx“*Ÿ9Ù¦¢lŽõ…›6Po6Š:i§®¾ÀC›ÍfXÀðþåùúc’1¸Xüܸ ùŽˆÅØØXHS"’å}$M#žZâ(îa35ÏqrîÑ"'€Ô™¾wrâÿÓ?N eR‘¬R6†G[z{{ÑÒ5÷€Óž<Ï)¢þ. 3¢îÕuò‰yÔÍ7õ¼}O#tÂéé>èeÒîà{~¼ÿ=Äû¬V«ªÕj ²‡Há„à3dHSùõÌî%Fž±¡îQJ'ÍžæÁs™û{„€oæ¦m~Œ+i£î¬Ì Dv'&&400 Vƒè¯Ì܃®Ð·ÈŸg‘žêC7J\'\NcccÁ0Cw /ìGóºb(Ä‘8t¶Z­ªÑhŒÚ͈± gÁ±å9ôµGCˆšŒŒŒަwgí`¼`¨ûQÒ[Ï”z$$<$dE§Ó o2o·ÛR­VÓàà`añÞ­f³©ÑÑQU*•°ˆCB<êái LŒ62úp÷0A ñšB~¤)ÏZ»ÝÖêÕ«Cê ?^|êZ­Vx7 õ¨T*0J*¼ Ä# ´ÍÉ7¤Î7d’žÀBÇ‚„±æÑ—8]/¶{€=bä÷j{¾3ip“<"ëi!´™gB~¼mYòýYà!“È‘û©ëøøxHCòh†¡¦þ7ep"oD†¸ºÎ C'óD:Ð;òúÑ]ß JÉûcÀÓf ýßcà„âÆæ^¢Õj5Dù¸žúØ@î/Ú¾º Ý€w‚NhÛŒ3¹r]@^x³ñúò<ÊÀñQEþô­§K2î=ŠèÎƉÿ-qO²§¸D¹Üçémüæo"Ô‡w¹ñ‰Nqr¥|ú˜çú\çÆ*s ýKªQœî†ñA ¢“}¯‘GC©¿Ï3ÒÔÑÐÌ—ô)ó óƒËÇ# Y@Œ+Æ}ļào2Ç9ã²á3öG1~ÑmRnY_0Ø<}ÌúÇçP¯F ÷ŽŽ#Â77–‰ QwÆãÌ™3C4…ô3?ôÄSÝ9æÆæ–Ħ2@’Q“°) mlçd*i=!å˜KwYÑÇnøWíõÂ8@ž¤U@\Ýk‹¼cÂçÆ Äcdd$ÈÕõ/+s?úÒ…þq½4•ãizÜC[¥õÄÍÓŸœtzäB*¦J*«J?#¢$”ådʽ¹xâù®Z­ùB¨}yyÜï)ŽÈ¸T*ill¬°?2J ±›±ÁøB—™ÜÃï)ô1ïËÁXæ~OIrO=¿½ý<{hh¨ ãþþþ‚ÁÅsÝ óè—Gi™·Ð'úÆ=úÞ.Ƽ§‰ztbêóˆ;H+QWtƒù—ë!ìqÊý⑾¾¾~ä:êNäàÑ#Ÿ·GFFBʬ<ôOi¢<ô±\.Þ-…Ì<ãsr8âè “zoƒ¯-8H‰Gñ|D§âH rªÕjš5k–/^¬ÿùŸÿQ¹\Öïÿû‚ÁžeYxçýçã-!!áÉ# Û(†††4kÖ¬°CRج ñ !~&j&m¼©ÒéÄûÅ$ðE¯.d·\.«¿¿¿àAƒ0ñ³°•Ëå@H!Y–¯ÕøøxH‹®¥\È- –{µTx¤ïôøøxH«ÁHrï׻܀ƒh³`7›M BÉ.©@d$H3Fï7prËu0‚ºóO~½^I7à _\O}AWœ¨ºWÚ£GxÛ©«§¨¹AFßIS›†‘­{‹‘3ŸA¨Æ=ßÔ×ûÝtƒ„~âZÚQV»ÝúL$#/ÖE7òúhè_?´ÃÇs äœù#Û _ú¹ý1^Æ×úo¢Bž"ëŽïs7à#n1çcDcp3û< ˜³Ñ?æ¢Vkê°ŽÑÑQ-\¸P«V­ ijyž‡Ô¼ØyáczK#E@¶&$d ùý,|xü ]³°8aîéé 9û ZØ«’çy˜©·ß³©ˆB³ÉÙFáu=Mɉ9D‚Éß,HRñM³ñ‚éäbÆäODeÖ¬Y!µÊê‚—ßÉf§Ó Ù±áZÚã$Ðɪ{ Éá–¦<ÁîauBMû ,–,Œx iƒT4f<íé^m¯»"d ñ¡oðú~÷ØÓnO©ƒTy´A*žÚÃóðÂú‹Ã<…áxÝpõ” 7^Ü‹N_ oäåä½_ ÔN|‘‹{'÷±‡Ò£IÈÜÓÄ<‰ûcï:íðý)NÞ<š’>ä‘êæããÕŸã{•ݘòñ熖G Ð/7´éSOrýqÈïvݤ wZx_b€û8A]ÜÐ…¸ò òý‘¯ëËÑÏñû:¥ëª§rñläʼÄx ¾®´cÅŠºùæ›õðÃkåÊ•…(¥¿ØñæÑ,‡<àsN 7ŒéOŸë|þð9Ù÷ùÄ©…>/ù|çêMùª8Q|,Äpã€6{ǓϽÈÊõÏ1Fý  ¹pÝF>ÒÔKTi©Wn¨Yñ:»ã‚ýt¤0oI$C(akA2@¶Q0¡ãQ‹=Ix,ñ±hdYöm@<Þ1BéqÄAšÚø ñô#ò†Yü‰”°˜dY¦¡¡¡àMã´"O‡ðÁîA–T0 X< ž/ïé ñ¢N9.O'ôN&ˆftËSgÑÆxÀ°£H“UïH–e…|f ¦ØðpÏ»/¦ßKïÇÀËëi<'ùNxâ”4®î鯤ÎN ÝíFr¬w´Ã̉¥§¹â†Ï@¿Ñ/tÁHdC{ðJ{ŒïÐo×A—eìÁw¯>uwãÂ=ñn„¹ñÙDÏéo7œè3.·¾©ž”÷L{}ƒ¯¿Oƒ¨審uŒwþw¹’æˆ>¢oÌO^o× 7V} ø^ ¸Ñïãš{™¯˜/ãríää¤n¿ýö0¡oî¬ðhrÀ¡.žöD]¼NÌ->&híBÏ=r@nĹáïãà Tô£DŒñnÑÑXGùÞ#\ÈÆ£ÑÌî|ðß|îGn{D£Á O'ç~|7ó¥Ÿòün”bø ·­V+:[)“°5!½ˆp…{V™´<­‡fàùÉü/MyNÝãì^8iŠä1& IDAT³pàYb­×ëj4ÒäädXðÖyøß‰ÿ³x‘ì;êà)RNrÜCÏuNäbbç‹2÷»1<¤"Ñv9Soȉ?ÃÌõòüþØË)_ F½âˆ€§P'ßóã©s./O¹@Fn„ ?'O\ãßq=„ÙI¬îvrCѳ8…ÈOT¢Íå8ÒâÞdâº@”ÂûÝEã(›ëí§K¥Ò´h»2è†oæõãb]öñIU9ʈu•¿¤ÑfîñöºAivrëm£o<:⮓n¬{›\&´½f•Ë=¢>ÿ{gcûUÕÿ5gÎóÜÎ@ XS*ÐP•T_H˃m"´¼Ñ˜˜«BL ± KM±Ô&¼@LŒ„ô…/$hb(0>€Bäm“JDKÛ{{gÎã<œsþ/&Ÿ}>¿u§Ðÿÿ{oËüv2™™s~{¯µöÞßïZkï͘äþiÇC>Ó€šè¬ëJ{øÎ¤' Ïqª)õÊ•ãvuBn¼×:tß`ìµs€µTcPIÛœ^kýcþÇý;¤_ñ¿mß²2‰Í:°œ±]˘(ˆ##vÚäHdÎk°ØD€v@ØpøèÏc‡Ç1kvÔ¡#Ú•mø'­Ô¤¦.OEùÉí1uù‘%G \íÅ%?z>?Ú1 O Ñž<žy(³'‹çraïÅb™jŤò;rÊ ^sÉ,eš½ðöx›pEDy“·'U§8ÐVêå ›‰Ð±Ì-7ACnö óï.ÆóùÉÑ€…óßy~Äц–‘Ï9±Þ ¨ì…§ šÙko‚œí™ÍÇ€ÉÞjG‚©ÁìaŸ×kr¼ @Ó@Ë?ÔÐtÜ=9jfû´ ³]šÌÒ¾œåu[~¦‰e&Â&§Ø¦õ˜wÜ¢ Y~|ŽÝ ° "mãî‹¶ qî̘$›4™àó~ë>"*»&Y¦Ö ëÒ(¶Ú“£XèÏýÍ$ÙmqÌêêw:j`Í®·œ=¾ÝrÔ‹¾LL©câqºGî§ô%;+ò8à]×ì ãy–3dÀý¿{2™Älv´^É=ï$æz;…Ô;ÃYw~7ýÄ©.u©Ë“/u9¡Å&)cváDtï–2 Îó Û+}\¸Þf 'ÝÉ9“D·Û-“K^Ìê“ ¯{a3“qÄù‹™$¼÷¼=à&K¸{¢7xà;ÈDŽ /“0@%Ÿy‚Α¶»ô³™ô1(]]]­œ_’5²Z[[‹Ë.»¬~<ñg°€íd/²¿ dÓàÔyëDeRQ%!躸]YOÍf³r¸úÀû½±±[[[å]ŽT¡û ž­7d• ¹£ÈÏ2ÌÌÞÿìa·6G°vj˶hム#7N_¡¾ô]úV¶kô˜Óh®¤÷9ªf2M½øh"㈈û„Á.}›ñÂmË`›ô¸aûfœ£­Yv^C— 0ú_YYîÀÆ#sÄ&/Øϱ‰n¸_±¶Ï¶æô6§wZV<ßc9ϱg‘Éíõ¢q¶ÿЯ<Øö<þ¡+÷l–ÈcYÞ4À ãÝçq¤aŒ>4¹ÙàHú†¸<ˆmãBÿŒžóîœf iO±S±° lx±XT<ËÈÃvjçzÝ®ÃÖ¹×m79&ºgRkÀnÂcù0.t»ÝJÔÂvdÛònY¼ß);Œ|—£~w&ëÜŸÇßo°fç„Çjì3½<–šHd²IÉã$Íý—ïhÍöÊwÇ9·l<ËõmµZ±¶¶VÎ 2Ñ¢O–Ã)qΰ³šQ&ˆÇ‘Gœ'­|ýë_×¼æ5ñéO:>õ©OÅb±ˆ×½îuñ/ÿò/•kz衸þúëãðð0>ýéOÇ'?ùÉøÖ·¾¯~õ«ã±Ç«\û¡}(n½õÖxë[ß_øÂâ–[n‰øÃñŽw¼ã¢µ­.O}©¡ŸàâÁ¿Ñh”Q™T#¢2ñHúÞˆå@Ïv™LZˆÅbQ(ã<¢/ö43Ñ* –𺭬,2º¾9*½Du|½AßËgN/Lˆ ì¹D&xØ[±ÉÒÛ­Úãmïèþþ~eëKƒi tî¶.‹F•Ün“UOÀÔÛ¦—;z!÷l?¼Ãi&Èr±XT«£0ÑÔ—rq„öÜxM“I÷Ù³g+úeC…Ý@O¶-ƒ–ì±Ë©Hž´Ë`ÞÄv6›¯ëJ´'ƒ]ꎌ#¢²3še“£l@_󯯬dçÕçô@œ €4<èÔ9ƒ]ÞåƒÞíç]&c\‹Ñ —I_³ÙŒÍÍÍJ*.&esØÁ/)Û òõµ&Kóù¼â•_,ª©YôÆ•L0±9êéÅØÈz[Þ±Šg»xüñ˜ÅµŽÊQO¯Ã±3}Òf÷ Ë“gùL!?ê“Søn:–gšÔñcâ¾ý`xi›1isZ^Þ€àéà·î.ôs+øÀâ9ÏyNüíßþm!a×_}¼èE/Šw¿ûÝñOÿôOåÚÛo¿=ÚívÜ{ï½Ñëõ""╯|e\sÍ5q×]wÅG>ò‘ˆˆ8sæLÜyçñö·¿=î¼óΈˆxÍk^qÛm·Å­·Þ/yÉK.xërñK9¡…ÉŽÁ7/¸u^¸|/&XzÖFñ8åôŠÍÍÍ™Ð]ãŸN§±³³óù<.»ì²Îít:%BBÄÄ6“ZNåšN§`OYÄÑ‚Å|–‚Ûãg{²%ÂÀ¤íœi{ó³§’‰Ì9Ë^€{uM¸¼®„´4âìE50ôj™pa9÷šg8*äSà $œƒ ðy$n—wÝáÝ سJ½3²<Žóˆ#wÚc"–sÇ­û½½½F°¯­­Å³žõ¬Ò2 gòEF¿Èzak& \™|;]Ðïô]{cÝ4y—'êgД£¡9ŠÁîWDgXæ3ƒèÓ&ŽÙ.irðá…¶ORµSŽ€yñ1:3ñ`}rd=ýšºnllÄe—]ÛÛÛ%Ò•íËQDžE›|°(×#[˱ÂrÁžMfó';\œúi"› vN`yœwäÂ6eò°½Z¿ØU¶GìÊãKަð?öD$òh ÏçÙ¹c"¾ùÜõe.à@]ÆêÍöïûûû1™Lb<WÆ3§ñ±Õ»£¾QYÈ)‹I×…þ9®üó?ÿs¼öµ¯­D€:N\ýõñ•¯|%~øáˆ8²Ã{ï½7n¾ùæB>""®ºêª¸á†ⳟýlùìóŸÿ|ìííÅéÓ§+ï:}út,‹¸çž{.¤Èêr K9ÁÅéöø¤0¨2ö÷÷£ÛíV&ð•••èõzO§ÌºÝn9`®ÝnÇx<®lïꓵµµF…´àqÍ–[FÚ;jÏ,†½iö3ð¹Ãþ”;jÂ~óȉç´Z­ÊV¼‹ç¹ŽÔÝ;³X#ª ëíyX¦=µÛíR'Àíw*Š#<Õ­<7€Io›j@a ˆ<ì­'š[]=:±Ûiu¥<ŸÂ©ÈDXwd`Ê{3€qÔÈdÇÄŽ:å<Ë/"ÊÙ€ÀѹsçŠM:Õ ÚŽÜ.À?6›süM(œîã5Mô=ä±ÜA(PGvx?ÑÚoÛEwöG,½ÌÈ Â‰-ã͇$:"“Ûn·É Ýc‘ s&ÊDRúý~9ÝžzØ2fq¯×‹ñx[[[Ñjµb:F³ÙŒŸû¹Ÿ‹Ë/¿]ìþ_ÿõ_ãÏÿüÏãÌ™3eü°¼¦Ói9#½å½i‹ )zEf¤9:侅̧Iís„ŠñÑÀ}Ã}a±XD¯×«80 ,,ÎçzGmsT=RêIûóx‡ Ñ—íƒûršÖÚÚZ´ÛíŠÃ%G]²Ó€ÔO×Ó)£üvŸã:dê”ZGÖ ›&wÙQrÒŠ·áwá³x žûÜçÆ·¿ýí˜N§ñŠW¼â¼k_þò—Ç¿øÅr¨å

wyîsŸÏ~ö³ãÁ| ZR—KQjrB‹·›´WÌ&{n¢¶—páçðYDD¿ßù|“ɤ²xϹÐLÌÈÞ*È ‹ªRx#™¤˜Ð ižÀ˜lÊ)ð>ß‚ô“žkï?2t:—#*nkÄÒ3è§}#¼xÈ…ús¯A,“ß3Éó™C^D{ìYD§xï‹Eñz2áÒêij10‘óN{¹™ü½påt€ÚááaYH !3Àâý|ÙcïÏM ˆÖîííUÖ?¡³‡Ûà?b™²Eß°º½>çÁ)&¼Ómçý­V+&“IÙœÁžeÛ¬Û `ÄVT³=:MšŽªÐ.{ÍÙDÂÄÙ‹ïôÚÕjµŠCÂë¶L²L€!D¼Óëyéq@žu7üÍÿ“É$Ξ=«««ñ³?û³ñÈ#TRµ­c¬ó˜Åo1üFŽ€òLÚÊ÷8Þ…Í0S8{b±XÂÌ3ì8rÄ9¨9oЩ¡È'ˆÉ:26¹ôxâ´4¯…2ègîÀnx.ãE£Ñ¨²®-“pÆ&R°¸û¤ï`Ø.¤ÍÑQßK¿agrz‘Á!¸åbÖå¥/}éy Îçóy|õ«_ˆ£t*ÿÞÞÞ>ïÛÛÛ±X,âñÇç<ç9ÅÀ|ï²µµUžU—g~© È -z&䃉@b` ¡h·Û±¹¹ãñ¸€*&ÃV«N'æóyìììTÂæèt:1N 4ˆØÛÛ‹ÉdR¼ZQ"#£Ñ¨lãk/¿O¬%Eo&íŒÙÓÊagö.Ääô*€˜S×ìɳ·Ý©\9j sæ‰Ö%|E0ÐÁÓnäŠ|ì©¶×>Gk &Ž ?ìÅ uuuµ„Ö9>¢z @1b9I|N.žÏçÑëõb4•çº=ÞåÇöI.ýh4ª€Û–½Á蔼yëÎ6¹<ûY€OlÅéS¼Ÿg›¤™øÖ áoî‡Äxí} æ+¢•òDøàà šÍf±Qô„α?HZ&]èÇ Ÿ÷±ð›µ^otIÅ&hËõÞ–;GQXcf›0Ù3ØFñoÿöo±X,âÛßþvlooÇÊÊJ ‡ÃøÞ÷¾Wtíz]!Wô†Ží@pd΄Ž~é±û±íxm…#"¼›B§vXx]}‡ïѯ×ýq]»Ý®8‚žÈ‰ƒ|é'¼»ó=Ž\R jÖq·Û-2s½M°ÜvÆ#"¾‡ˆ#zô=îët:RëqûtŸEwèχºmÏärÏ=÷œ—æ´»»{ìµï|ç;ã·û·ã]ïzW¼ÿýïÙlwÜqGüçþgDTÉs]ê’KM@Nhét:epöD¨ñ€±œ¨˜ÉÓm6›ÑétÊ.L‡‡‡e·€“CáûûûeqfÄÒ£5ËDAD€IàÒh4JÔ b™æ&t&NÀ-í§}{í! çÍf3&“Iñ$®x¾Ó/˜Ìœæô >câ3iñõžü]ïV«Udég5›ÍVê@FNK3˜¶=Pœ"“sð!{&Dö¨›4as^¨î…¨ä`C‚]8•Û û¡­Ôk4Uôcð}8¿ÝkتӋpI a瀿£È›½åØSDu¦~¿_<©Šl§»··W€6!k&¥xp‘-‘ÚÆslóÈ€zâgq.²ŠˆJ{ÉB–< ®­­•ÝólScëÚr„p #Œ9Z™£SÈŠ¤Ùlÿó?ÿSƃ^ëÇ)]gy6z„L­€ð:¥‡±È'ï5Á],åݶKtÊøÓh4bww·BR‰D·8 8l8ÑÝë\ƒA©;vë¶ôz½JZ,`ÿ¸§A(ý‡Áp8Œ^¯Óé4N:Uê4™LÊ8bG}ÏD‘>(s„Ó³h}Òsi}Þ¸c>Ÿ—ñÕ¤‚Ƴ_ƒA\êr!¢1o~ó›ãÍo~så³ûï¿?nºé¦ó®=}út<úè£qçwÆG?úшˆxÕ«^ï~÷»ãÿøãÊ+¯Œˆ(ëçØÜÃåìÙ³±²²[[[åÚ½½½˜N§ÑjµÎ»öºë®ûÿj_]ž>¥¦§'´¬­­E¿ß/ÃÆÆF4^èí~ÆææflooWÖ0©³h‰˜õ€„~¿qêÔ©Ç1  µg}4Å`0¨_"˜2áz„âÇãqI£^€#&X@4»p9ZÀ„ƒ—ræ &d“yÂÈ ÀÅDè´¶€äýÞÁgNá{çK“—>Nc89™X°óXÄ2=`c íkrðJ2A@*!¶¶Zv4Ä$ €.!@iX¢w/ E~lž½ÕhN·"âÆ»ŠŽ‘ÀÕÁ3jÙA¬ÑU¯×«,”v*àjww7ÚívìîîV<²\7™LJJ ÷ùÔôèv»¥nèz:VR­h;$ =B uxƒ‡ÃaiýÉä—k!@DWƒA¹È“wiB'¨çHã ²óbsd·¶vt–žyÀi³ÙŒápX€+ãÏd2)ÛQ£kdh‹þ±Uô °¶Þ‘ ´‹ïÖ××£×ëG˜#ýÛdÏQôA_¡Þô=ê̘3N+QAt°»»[ˆÐt:N§SlÅdûÅî/kã"–[nꩳSÃhW³Ù,óiq;;;•ÈÏc\ΑÕ8Äã¨SÞ<¹ [×2¶BÀqØ!ïÁ`PHÒx<.r:‰å=ïyOœ9s&xàøîw¿ÿøÿgÏž^¯¯|å+#"â…/|a´Ûíøæ7¿yÞý÷ß\sÍ5eÎ`H¾öᇎ3gÎÄË^ö²§¸Eu¹X¥Ž€œÐ²²²»»»edh6›Å#8# bÐjµ¢ßï—t¨üàÑï÷Kž:цÁ`ëëG'ž÷ûý‡1ãñÇÍÍÍh·Û±³³S@ˆsÛ€îˆ%ˆ:{öl™Ì öñª9&"J´f0T FTw™qÚŠ½v¾™ó¢ñ¤9µÅ`ØÞL‡ÿæ£Ñ¨ìôiØ3› @ŠB]J|%µ†œZÖ,‹ ¥ÎÔ“û|f‹×œq±÷¹Qð¢ò Öd®ÐSØE¢R& NU‱É'žeÀ`:º‰Xz£‘PCi»#.Ž6X½^¯’ÈlÈØÑvXjµZåýý~¿x°éƒèË‘J"k†Ãa… æœw÷<é9ˆÈ#d…tL0Ï2÷B~@66 œL&¥Ÿ9†nm£Ð~¿_ È>í§îxˆ2€]ó.Ò8i‡û›£ ؑɅÓ½¦ú9ýÎQìƒÆÎÎNñ´7›ÍØØØˆñx\ÃÐý Ûèõz•]¹Ü6G,§xÒÚívE®¼§ÕjUÒí@°ÝƒbCÈ…g1®SgÈ r“Íœ’êÈ¡=û®ß³IÈp8,dÙq¯ÉÏ¡Ýèq:VRº<>á<À¦°ó§Û.XOÅsTY__—¾ô¥ñýï?>õ©OÅÛÞö¶²Ælmm-Þô¦7Åg>ó™ø“?ù“’®û½ï}/¾üå/Ç»Þõ®ò¬›nº)Z­VÜ}÷Ýñ ¿ð åó»ï¾;VVVâ-oyË…n^].Q© È -F#¶··c¿ìòPtÊ„ÓYúý~œ:uª¤+vPÀ³6b6›E§Ó)»cX®®®Æóž÷¼Ç…Hà!ŸN§1+‹‹í•ŒˆŠ·Š¶ê B!%ËI*¯qñB7¼ÇLl€kÞ µ§ Yà $Íù>,dxabÇÃKz™Á0Ï:88(Þtƒ>{YŒ Úž€Èza"uÔÃ9ßLºN)sú¿n„lyõ¶W—÷ðIûa]ïwÄcÐL½x>uuÎ=íÜ G¼íŽdà5wÄÆ)@žðÑ#mît:•ÝÞ°)G< 2 d‰2­\– <EoN"¢Óív+í…ðR§ù@fÐ…ÓÝL\œjã\{žËuÔ…Ô4€ª ºŸá~Fý -È O5õ…`å´AäEºBF^£ã¯£Y¬W¡Œ^'„,ÑUŽ*Cœ©6ÁÚ §ÈÒ&oèÀú9ˆ˜ÇäÈgô¡N+bŒÁ. j¤’ÑêíñÉ)†K<öØÁ;¸âïw[‡ô §i2¦Ð‘Ád2©DvxDÈdˆÕb±(»4bËlØc©ŒŒ8‹<^Ÿ”òàƒÆ=÷Ü×]w]´Ûí¸ÿþûã#ùH¼øÅ/Ž?ú£?ª\{ÇwÄu×]o|ãã}ï{_L&“¸ýöÛãŠ+®¨­­­¸í¶Ûâø@looÇÞð†øú׿wÜqG¼ímo‹k¯½öb7³.OQ© È -Óé4Ξ=[&¼O‡§NŠˆe(ûÔ©SñØcUSãQ7ˆ&] /%9ìÿû¿ÿ›››Ñl6‹“4¢ÕÕÕ²À©6Lâ€@Àááòtb§DxdƒgÛ#æµ€Œœ{ 0¦ýòŽ ÄŽêDDÐ1Iâa4i‰X‚0{^#¢€v@ªS‘-@~Ùˆï{ßûÎÛÅêÅ/~qüýßÿ}¼÷½ï·¾õ­±¶¶¯{Ýëâ®»î*©à”÷¿ÿýÑï÷ããÿxÜu×]ñ¼ç=/~ÿ÷?þàþà‚·­.—®Ôä„–ìí@M§ÓŠ—4bégñÝx<ŽÝÝÝØÜÜŒ³gÏ–tçÛ29OÀÓï÷K¾/'x“vÀ„èö(ã}ÛÚÚŠv»?þx%ÅyÚ|fÐÀC–=¤ÞöpS/›œÆgòòPO¤ŽØ{è­wý=@Ö)LàÜ;NË‚PÀ“*@€Â33¨Ë„ë8²ä G>¸¹™ Ø‹kpP„ˆuAw8¯›Aö&QÌ{$±EˆD F{Ð;r6A…Þ¨ ²=öØ úÌ}yÐFo5%‚eÝ8eÈë€U&ÉöÊÚ« )ÏQú§IŒ×1@‘èн󮜶±±Q€1ip€D“Ë҄ΑAôèÈ+@šöSW·1!b¹Y âÂ}€Wú¿ŽâzDZ<¦˜ŒÑÅŽòz$“öœÚÅ›O?sZ‚u\Çbk®5!±œ±ëžûX¿GÝ©+}¯ÓéTìЉ8e Û4`Ç– î!Ô¼×)N¯ôæ‹Åц%¶sR°F£Q—=69úH}£âÔ©Se= ßÃnL4°«n·N'†Ãaœ;w.NR¹æškâþážôõ?ÿó?_üâŸÔµï|ç;ãï|çÿkÕêò (õ"ô\˜ˆ""677ckk«äL3(Û;Aa"²§‰™´ Þ³Ù,†ÃaÙÖÉœgp­É2 21Qgžmðçu-" €¨ÓaxWDTÀ²Až2ïsN8žv§„y®ü|&lƒ7G4H3ðÄnðÀ"N¶ˆåú§ñÛ)ULÆ<“”#§5‘‚dà °gØÄÆuä}>ñ.RÌæ,Bu[ NÕÉ^elÊÊäÊ÷Fhpm]8Jb¹|9m2ƒ®;N% D;m£ŽXð\ïÌæÈ€Á²v”Æ©*öbú{“Mo@Aê‹wP‚ÑVl[7éw´É§ÊãÈp:¤=åGÉ\olã8ãž™‰ªmÆ©qؤ‹gºn&;Ø ëy¸žq›a­`ÌæšµµµJ”¢âuBÌ'õxAdζÅ{±±ìðàt%ÚÉ…äíõo¼ÛŽ N*§Óg}žJDÂätåïÿû•ÝëR—ºüøRZö÷÷Ëñµµµ²<ç[€ðFíîîF§Ó‰Gy¤²Ý.“ƒ39å¬Í ±h’:!À[ê<óˆ¨L`xÜñt²C $ÊÀ‰ßà;§c˜0ñSršàÓ%„ƒÉ™½þ#¢²Ø6?{£ûN{y‡"×E,A2rñ¤Ìzoj€bHá{Ž©ï³wÔ)H芺:ïÚ ݘ°ž{d [ ›ˆÚcŒlý.{þM`ðhCL5,¦>xþiò¥^ÎÁGgy]6ç…âèpŽY€(G™¸Þƒ4žƒ®12#ÅÑõ³ƒ€b"š££7Y¦^¿@=øŸ¾Œ|¼ã8â—#´–ýCÂ#â<·£Z´Á¤‰’‰r´çÜ‘c?ßDýäÔNHƒ‰úäo“jä…L¼¦ ùÚ&I°mÒWäY×~¾SÔLÎl£´y6›•®¬sJN9ãyü><<,[æb¿Œè [ÃfMôl‹ŒMüØN2Ñ&ÂmgvâH¶ïùÀ¶c{±þíÔ9ζéÍf³BŒˆ"ìÿÝOy.2ttÇi|<oo¯œQåñè58—²xŒ½Ð?u©Ë….59¡Å;]q²µ×70‘ÌçG‹ÏñðxÛ\¼«¬¿˜L&ÁÇ¢uæq€dD,sÕ;N%¥çÀùt^¢2<‹ÉÐ^KOy·WÚÆ „|-õލžaùrséíAæ^þvªDöèæÔ¾3ˆE?ölÏçóBf2ôõ LJM~œÞãt Ú| ‹e* ö ‰ÌrÊçõ.ä„óltb0jò0u”{æc ”AÓý¸àÈÅÄÎéŒ\kÒl}:Õ1Gq2P‡´š4äñ\/n÷:“AÞé ,Û«eÍwn³?ãÞmÀí_mÛ8 øM¢ìé7©0¡w ¥åbd"ì§u€ý{3Š,·œ:šû©ûm¥ôCÒ^Yö¸av|Øñà ÝGéW;ë-;\÷Ûrv„†>‚­ÕÎ}Ä}ÛÑèN§W^yeôûýr '˜sN“4©±þiKÖu«ÕŠííí’2I{›žÈiU—ºÔåÇ—z È -¾´¿¿_ 3“F ±gq±8Z7ËDPô)ÄL˜€¶Àر@›-_!CaLL§Ð¨ðºC¢x&g^ŸÀs;ñÜ';ÅÈÞЈ%¡A^´‹bÀîоÁºÁ$“šS ()®ƒS™ py/yÌ&BÙSï¶ +Gd ºL¤ æÐ›ïµ Ù{é‰<{ÐÝ^ËŠÈZžèý^^<ŸH¼×òön]> ‘{ó¢R“7lÜ@•÷ÙÎ DŽ2Q¢ „ßäêc¯ÎÅÇF©[öØS·Û Ô} ÝY~–Ó¸ò9&B¾ÇrC/&Îÿ¢~æû:Néó´‹g[6N§8L â½ ²I‡ßS¹žô{Ï-7¯5Êžcœ.&ØŠu† ˜¬PWG®œ )±,¹>×1Éd=ë“ö!›Ùlyz8:$ Õò²c:¢Ã½8p˜CøÎŽ¡ã@««G[9³‹¢ÿ3YÂyåt:žÍöáûûûÑív+¤7G¶"¢l1Œ ï°÷tˆ ‹Ž§÷¸(‘=­YÏèÇ2cû¤aèÄ Ù‘±ÙlVRþ ò œÔM›Ï©³í…ßôeJèv°þýP¯Eå=¤NÚ–#-ööc¿çhmgyù<Ï$#Û*×°®ù: … fdžSëüvÊ»‘òøÅ˜dýX¶Žàz<˜Bów¼Ï ëÕv>ŸG»Ý.ã†#)ŽØ˜Öih·Û¥ý8–ÜG¡}n º€:Åxéó<šÍf´Z­xþóŸ_È=§LÀˆ²X&Žnw»ÝÒnlÝãïÁÁA ƒ’6g¢ÎÚl&;êR—ºüèRZ| l^ÈÍı\oÐl6£×ë•Ã$,ø³G¯Ãðy!>©{4Åp8,Ÿ{ÇO¢kkkåªn·ãñ¸œbï!QŸÍÄèTƒ-ê²±±Qñ˜1‰fÄóœßŽ’a L"ª`‡\i€ĪÙl–èRÄò {«]ö4œñX¯¯¯W6\™`5›ÍJî´É“A4ïËßU ½€ÚMZ‡ºË¹ÚV«UñD|óûik)¡Ø“G}Ñ)‘뎴4lÐ^o€D™x¼}'Å`ÝdÄžWGÕ•&¨<Ï×ОœjäóXIÊ>lÛžwëÂ1ë‚q‚÷Ó‡xm‡~~xx“ɤb¯ÇEè‹ÓŒØÊÛ);89,O4TìÂdƒúÓ÷Ðsûm»Œ~¤›¤ýæG´Á$Ø}Y1Îì‰ñ=`œþ€=ð>ÆL"~ô%Œ[&®Oî¯D™ìøð{ÝFo¶ “^SôN§Sêèt(ÚΜÓív㡇ŠÍÍÍ2ærŸ s•Óé<& cÒ‡½õ<ãéh4ŠÑhT¢WØ6äÇdøR—쀻?u©Ë….u Ö - ÀÛÛÛ±»»[@ %béÑœÏçqêÔ©2û`¦ƒƒƒB,¼[­V<äåyÏ{^ ‡ÃòÓð.AŠØ“É$N:U+€êÅ!‰üxG$€–'R$ì â¼yOhxú Þ¼1$Œ4ä¼X,Êdç°X†ÌnîõÊäìhƒ'~€)Q-ƒ§‘¦áÝ»ò}ü×iH&Kaƒ0ŒF£Š¬? dd/lDu›X·ÙéBrËÔQ¢ù|^¶°%=‚ˆ[»Ý.mrÄ,"ŠÎùŒóe¼~9zý€¢„>ËèÛF|G?h;mD'ÈÛd"G r ä£Ñh”5\)§!gtAh“›=Ìü½··Wdé1rÔétÊv¥ô— ÍôE·ÁúòîzØ/‘Æ-@/)™è’k‘6N]±1Î1ò¸‘wKò"go)K±ÞÞ¤ûdÂʘèºó9º±®°%Ûêt:-k°UÚÄx…3h8V" °ãÚ.øÌgÉpVFŽöò,êeòNel†HF£J°“ {¥ïðÝw¿ûÝbÛDùkp$øl:“mîÃdòny{Î!Jc}36Õ¥.uyò¥& '´ŒÇãÒœ[›Ó[˜ÉæüÉdÝn·4&,¼v³ÙÑîU4N^7ðÔ 7+++1 Ê$Ðh4b{{;.»ì²âI¥þ^h±ÜñÆ`/bé  .i«ÓT|@"ïŒ,Z­ÖyþA8 0©@‚åôOÈ®? Å)E¤®Ý BÁä‹,¨„1byX`Ähä4tËÆÑ§:M&“’Îeðê5x b4°Lû ~â”»Ó‘#õ3ãÙVGMOè1i)¾‡ç;¥Ä€ )ÃNñt³54€Ù²§ï ÚçtÀ¨K;B‡~h·7(Àn]g§¹^Ol2†}p½;õ%B‰nL ¼&Ðô/ú‚Ï_ ’5c2™@rÐ õ´ÜÐ;Ñ Òg°+dhÒ˜*¬ê¾žI¦SSžƒ‚b{\[[+ ÐŽÎXƒ=ÒèÌàzcc£´qÎéAÈÏ<ÖQЩefÓÇí|`GCtDÀƱgôŒÞ‘Q!“&äèÍ2ƒA%“ÝÅp‚t:J» !ò±¹¹YêÆ˜àÈ ïð¸ËøÇøÁÿ—ºÔÑŠºØëõ*)u8l÷¶YGfèP0c§.¢o¹ ÒŽñx\dÃø•Ãõh ¹Ùl–q[‡%ºÁ’eNý¸Ï©8ÔÁúfÌÁnœÂ†½³nÊÍÙlv^ty ›ÃÃÃè÷ûÅN777+ÄÐŒž¹ŽßÙ„Ni'ýÀ<ÿ&]Ìþ&rÈ‹õ(´rÎú$ú) ô€^MHˆbñ\DzGx¨›·ƒGkkk% ‚®÷öö*cGDTÆÈÑtÆÔÅbQæ!È'©Àóù¼’Zœ‰„úR;UêR—§{© È -€tç$b Œðöhøá@‹=¦ù3q1!z‰ó«ñ¢cäN³$ ù=ÖD.M°ÙÓÍoßoO5ív ÞMƒ~äà MþxXö¬¢S{}]Oôë®+¾û0À‚4à=¦Ž>"öär ="Š]cë¾6÷“¼hœ~ãT€$í6€õ{o»Ý.Q1{·¡qˆ6#?8ïÁÛ‹­³×Ú×6›Í %BAŠ“Áµ‹Á°#Ø-m³>Lâh¿é3޲PvP Ú»o½ð>Ú둉5ïGÒ& Ž¦r?){/±IúSšü\žçˆuq_Loll”íŠIuµƒÃOÛ¬û>c¥#ž™Ûñ„ÝRpN8ªA Üúúze-‘£V<Ç¿Óc6J.‘| È™ïˆìÛñåh8}Ééyv0Õ¥.uyr¥& '¸P"Ο4#ŽÀS³ÙŒsçΕ ™Ô-òË#Ž&CÒˆ -Žxí Æ–'"Ò{¼À@ƒGË{Îܪ§>ylGÄyqîqº€Aõ‰¨®Ñpn;×:7.{G­e{‘+“í¬‘rdéh–A©É ƒÿÑ‘ëoѶˆ(irN (¹Üg¡#E¬á;Ú‹ ¼ÓÉ‹S¹"– ]Ú“ 2ÑœâÍöBTÞK½ì6·÷Üùö¤~ñà4SLœ¼pÜ`Õ¹ð|äšôÑ€=ø™œšÐ¡×F£;;;•–±óšëÜ?“$Ÿ™aðfyà¶ÓÀk‚¨CN­Âq∶àT5äe]‡û£m×ï¤`뤙![;# 1¬E ßÓŸL °IH\Är“Û¶E!™(ò.H¤Ç€‰ÿãØq:QVÒ &NËã3÷Kžçô0Þϵ^SâÈf&»³ÙÑF!NMcÎÀI™" HÛò8F»¥ÌÙáļvxx´½1ºæÚl—¢Ôº<“JM@Np`°ó@DT¼x²ñtÌH¿ŠˆJ®<Þa¼j„Æ#ª»C1Xr/û¸\²ˆÒ;ÎNÙ‘Ë$‡÷âÍòZ&§Á`PÀLÞ2Õ^v&:@’£#öœ9mÌõX‚:>sêˆ'Dƒ'ÚM{Ü à¢ÎÈ„405¢S˜ì-ç€Úé­U#ªÛL>Ñ)Ïä>Gh ÒíåHò‰ˆJ;ò=LˆÈÌ@ÃyûØmBGA{}‘«#ŽbAÐrtgù™0ùzlÃà™ï‰ `W´ ]šèÛvLN3BGÖŸÛÉs²¬öB¿rd*·½SoÖu™ÐûÚc"K] F‘£OÔ3Gxσ”#g@©Ç Û¿ÝÏ!o^ƒgƒYúûsÆ>¸‡m2îº/¹ß!7ì;ôN†&Žè:]‰1—(B›ÝfÛö„n!1N C¶Úœ#ª‡ezÌ#*Býs$ݰ;ã·£ÙÈ:aO^ˆŽ\[­V‰ÞO&“r‰#Žvà¸î'ôñºÔ¥.O¾Ôä„0“ ÊYÈh¯SO‚ {c Ô t v½£ küžàýƒ;§T°è›ÉÎ!ýˆåAL¬¼ƒ<ö\?Àò¢äHˆ°Aƒ'Ûyp[”yç*þG^xó»LØœú¨ˆ¨žfmÙð¿Ä2Gh`6»/Ø> £ÔÛ²t ‘ÓeLm?ü챉X¦û-Ëô7À²·5u¿£]î³¶<âØÛJg;pJK~6õv~=º0©tŠ¡#,^kXóbè ìèË&.€ÆœBcï³×/Xì¦Çû­_Þé»ï:¢ÃXD;ü·S]7G)œ~æÈvf#Sêk›wô‡45ägŸ EŽFF,I“Ç]Û…ëfbÁEßñ8ê±%"*¤/ßk[s”‹÷[·‡záLsÊŽ-Ž:3^x½²l6›Ñn·+»“yìôœùt)u¤.Ϥréc†u¹$¢` ÆÂjOÄÒÃC~/“Þ'=—ÙëE”À)üfrÆëë&§‚0É -äpÏçG;@1á”Èžèv»]@éc*&2€ˆ½å|do;rrî¸Á …ƒ ÞmÐhÀ¤±'^wáE—±èb2Á{ ( }Š5džƒMË‚:R7îu½¾ŸÉœ÷¨a_´Ý8 .T{ò-7þög&d t’Ó“ NÑ™£!~Ÿem2J ú ôü™7# ~™ ÚÛlð‘‰)Ày{Vä—mk²ÜOý FY+cû7u_¶Ý¬¬,O®ç]NË¢n^ Bê¡S v½‘„S™Ž[¨n;Í‹ ]7 öŒB<cH'4iðxè{ÐeLi«ÇRúì\ÈŽÞƒ~ÝŸ(NS<ެY–…ëê>ϵÞuŠûlÓ8 LÀé/M“X¢ìÈÊýšÍ<îíí핈!?,?n|Ìú„€`“ɤ8(&Lv’Pç§Cñ\u¡~êR—§¢Ô䄼«˜ÎXz'#¢¬·¸ãµc‰Xrg Ís¸yV¯×«„û™´Y\¾¿¿ãñ¸rx õ'LV<+{§r#"Šç‘úð ØòßÈ‹4ãyûûËÓ̹‰ÅóíY4A0€·—Ò^F_ÃsÜ6@š e™ IDATIY&=¾eƒ2ë×ò°\CN¯É$Ã`&G…y³œ žèÖ6k@ØžÏ畃ۨ—ßi"ŒL¯ö„:ªbbà¨i3´-o›Á=ØÈ$ƒ:GM,CÒMàx¾×yñ{N¡ÝÔÝDÎ×E,Óæ2)EGʶ%dO}28sßáZ§µYNîcù™ô«lC9ÂÁ3"–^oþæ»ìÕ·Žý lÂëË<öxÌ¡NF£¢ú˜mÓý=™¬b/€e§V9Mˆb§!è•:2Ž8Ê¡41aüå1—ϸÆómØ$ÚucG€LöìÐ2Q¢Í“®qæ^GJH¿´#Í6e›tú°m–èZ]êR—'Wê¬\ì5Œ¨z¯#ª‡89W8¯Y0ÊžÉÄáp¼]Þ¶6b¹=l£±<Å™úùà}{{{Ñï÷Ë–œL ö®²ý%€›:Ä›`˜d>×¹"€€Á­×'sÈ%ƒ"d“½çÛ<7×7O¤öÖ» d9ÕÈß[ß9’C[Ø€…ªh‘€)@˜Ó?xŸm鸈Žë›#XÅãtcmPfÀˆÝs-6™ûO¶-¾'’ÀýÊ~/öÎ3Ì@Õ^hŠ#f9 ÇŽƒ:G‘Ll­g÷ ¾÷ó\/¼ÈÞâÛí¶Ç»1Xdç.ìØžuÛ¥Im¦^>ôÏàs>_®qÔu Ø,¶cYÛžxŸ#¤èþ8O¿~®Ÿã>Báyȟ뜎Çu<‹úgû³c„ߨ¹7ãpJ™‰9öÍçî›Þá=»óNï*æ÷»ÝØMîCqžýšØyžA¯ëë˃Q­_O?Áöí¨ñ؈îx?ý3“üºÔ¥.?¾Ôä„<@ì˱Ø=A{¡¢½ÎNáÈ$§¯HŸW²Îf³²%¦A)Ž$xá¼íЋÃ-gËÈõµ¼œb;÷ßã¶ëˆjÚ÷8 E»ÐŸAæ3 ˀʑl{g[PÞkùQ'd†cÁõñayÇ7ŸyƒŒMd#–Ûñ:g³YåHlÀäËý?G'Kls&&xùŒêÉ{©³õB}r$Áùü~Þbq”Ž À´M±¦#G¹Ÿ>Š=:êh›¶ç»¦Ÿ¹Ÿ[D=î W“®|¯ÇGì³Ñh”íné´t\¯QÂþ܇°k“9ÏDLI¨.X7 r„ÂQ!v)3ñ@¿´öÚN]Çf³YvØòú:Ö·äH\&ï?©å$´±.¿ÔZðÒy%Îã@ÃÖÙcH´„ï=éâb2™ÏçeG-`Æàƒ”€ápXñ":ÈÛqRÿãêËĸ¶¶V9ùÙa~/‚4!óHýÄY܇,˜œíÅôä»X,Ê)ó¦¯~îq‹ý3y¢Ž~‡É…ëaï#×FT70¨á}žàçóy™´ÇãqIC–' À ÞdÆ¿Ñg³Ù,mr4ÈàYØ–íõw$ËàÃQ&\žK4ĺvT Û4I0iåùÙ«ë‰m™6ón;È€½¸Ø,ÏÊd…ÃÿлÓé{&W<ÛËm›Î}ÃrsÔï¸h #ÜK·¬ ¸‹£³.Ø .bI ñÞ0Ãc’9ŸåõbÈŸÏè»&Àè‡ À×»ö™åñ&ŸÆîQ;xŽ …eÂæN!2Ið³3é¶ü8WÈ‹é=®d†íµÛíÊBnìÌD>쀅ÿ?òXÃÿ<‹ñÒÆãqÑŸ×`˜te]¢ sÈÜQ&¢ÈßQÆGX/Uñø_—º<ÝKM@Nha e"vž;„ë)hˆ%šÁ'Ï`'2á´'&4§}q¯O,öº‘n·[€©K숵X,ÊvÁÈ©ù|^ö§žžìhsÞ!Pe opÆ"JOfö–" G”2аfžØ21ÈÉi´ËuqzœÓ|&pÙÛ—½¸N‰0CÄ L-'?ƒz™Ó& $uˆëMœ¢æ}Ld)Ž68*cï±'ovrJ:AßÄ&cô1än/o¶_‹,"¢;“F£Qˆm±§û2ô™@˜ˆÑ¼ëÜ|>/[gCø È iýd1¦`ïBˆLìùϤ°ÙlVRŽðHû0=ßït?_ïubn¯ÏÍA.Œ€^/èö-뉅鎸¿ú}¦P¶ŒmÎã´Ó>±QÑîgôÏì”È@›1{gg§Ò~¯“¡}vÖ0W´Ûí²ý-¶#7&ìüø995Ö냰!§¨ù3þG&ŽøBfÝǬg÷7>Ë„”ï‘óŽlŽŽ\ÊòTšÔÔå©(u Ö .¼Ô^·àP7ƒAÞ!žŃвG”Ó” œ ö½ E¤Äàp<G¯×«t{>#–‹#¢²¶À×SO“ã@º=Τep ¯Ïäðäu1)!½ ɳÇ/¡É‚‹#$ÚÏß9-Ì[¡²SöÓ‡=´ÅŸVä`=X§&\ÈËmƒøš<™( Ëgú¹Ç¥²˜8Ì(rÊñ,Û+O›½É²1°ÇËßhm{íè7öʽŽ*ðÃA~7×";ì2×qmm­œôíÙ«ÔÉžyƒXÚŽ‡ÜöŒŒqH@ /L\"¢²Ø/³S9m[Ø‹‰ÆÁÁAI©ô8cOµ*¶<þN'#}û3i¤?Ò?HݲóÛu_!zBÚ×´ÛíʵÈËv„|s íe½ c¹û€ÇWî%ZÃ5N§D`WVVÊ÷ŽvÑ}nzf1¼û¹Ï\b bl°þÑ#ã-c킨ú0LNgà ôJ[qtù9Ã]Gƒ‰`s½®Û&MÚy2©K]êòäK9¡…Öžj‡¾}ò8žKÀ5¯n·[À ž=žm¢BDïøÞÞ^t»ÝØÝÝ­L¨&L¸ BôìhÂäÆÄIýÏ;wž‡ÜùËxݘ9¥ÙÖˆeØÞi3xøˆtØûŒ×Õ^l <§x85´Óé5³ÙÑ"UÀ‘½qö~¹pzŽw¯!Ò䨀}ò\ŸÖ 80\ät:“Úâkºb@éô5êé´ßèvíõ¥XÖóùÑzêdù¨9MÂǾK§¥¹Îö†°M° rd ÛÄ®r¤(§‰Ð^«œ^„\,;À~§Ó‰ÑhTä Ðây8Lœ‰¸dýðì¼V‰¾ëŽ=v`¨Û~ &±€³ßmϸ£¿¨·¶aï F;Ñ!€ÔŽ—ˆ(§e#OúÞÚÚZÙYrÀ+öåuôGlR‡aC&8) ®—·]¦îŒ!^4 y ðìãz›ŒÚábÑŽÕÕÕ"ˆÁºÏ‰²ƒ~á1’3?<ÿ`ç´ ›@FlwÎ8ýìg?;{ì±rÞ„IJ ÎÇ¥`1¾4›Í2/ØYáñÓ*;2.u©# uy&•š€œÐ²ººZ<_&Ù‹e ÷â>&gD5—:bé)HìííÅ™3gŠG¬Ûí–5¤Y9*aиæ\‹ˆˆ‡±¹¹ËT Ò¶œR2Ÿ/O.xŒF£âõzÚF;™€™-'{Ì!bLÀJ€%¯pÈ 3"Š^¸y²÷"MHšSÛøÛÈ@,uà{9·°cÁPàeÏi"€§m¨RÇèŽt <ž@¼"¢ØXÄQ¤m4•z<#ªéV–9uôuìÞÄó‘:ƒq/v¨ÇEg€“5{ȱUÚm¯x&=È–z®¯¯WRÆÐ6ÑÇõõõ •´“rÈÞ|Úê­e766J›M¼ía†04‡Å>ÚýØ26³‘±åÆxäúØîyVÞÕi¿¤r:z€3!M§7u:˜N§e,"•t2™DDD¿ß/möv®ú;ÄŸ)K]7ëÓ䎾‚—ßvÐív ˜ÇƱ“|Úg#ȇí2–/Gi®èºßïWR¼3¡×b‹Ž€@´<^1þôûýÒ§ˆ ñ7sL·Û-ï¾êª«âÑG-uF¦vÞ0öa7QìñÄÒj‰`:Ý ¹@&ëR—º<ùR§`ÐâÞ*!yþf³[[[P᥌Xz™ˆüÃànO¤A ÌÓL†L ÆÑî+Î+ÞÝÝ-t¿ßétý~¿ÉÝÝÝò|îuÔh4*ÕéLNc Ý OÔl6+)MÎK ÄL&“’ž ø¨/“ºd"—ãNWf’^[[‹Ê¢Rƒhˆ’½šö¢:ÚQ“GCˆ¸`;Qv"ë÷ûEž€WHÅ;/ÒHÈžlßçT ÀMÄÒ+‹x!-z {÷lÀäχ“Q7ä³··WÙÙ ðá uf³¾w;"¢€Dž @Âî;N!NNý’&c; }›Ãî÷÷÷Ëba§–Ð>®1Á¤¿c_&Žè(GO²óÁ‹‚×××ãÔ©SÑív˵<Ë}Ƥ0O?><<¬D<Ýw­Ëˆ¥‡~míhƒv»]ˆ,dˆhÏþà~RÞ/ˆè8Õ®×ëxö;u*§3íïï—õý~¿ØPŽDbGn;¶æñ»€›è4›ÍÊBo;M¼nbeåh‘üx<.º¤3f`Ûý~?F±9G7±oˆ&l€~Ò¦ìl€(lllÄ`0ˆù|Ýn·ôë~¿_ÖþôOÿt ‡Ãø¯ÿú¯Ò§ŸeBG¾væŒÇãbŸNÇB&DF™H9D¶ž/.U±såBÿÔ¥.ºÔZH°7/- ¸™4ÇãqìïïÇææf)€Tȵ=ª€[§’p-‰”,&4Öu8ÒÁ¤É™N§â eGƒG¼¤Ž6Ø» ˆ°Gl2™¯-uÀëøµÜ©,€Çˆ%ÈXYY‰n·[&?À ^5{éì%:)rn»½ÔxŒH¿I'0 GÈÁ€q4U¼öö$ò¼ˆ¥÷Ù“çÜw<¸Ž ÙËy ý‹Å¢Ë˜L&ÅÓ ¡Ax­+§p8­.§ó`Ãè¢ëú£Sêe¹› bŸÞîv:ý+“§aˆ{½^!SØ‹¾#E€) À”:¬®®VvZs{°W¥û òÝÙÙ©¤FDÁxÐ]œ^ÁbM ú¦½^B=С#\€Zôã¨}&DÓé´Œqô[ ú$2¸ãö #G)ÜØØˆÑhT‰þ 'tîM9ÙȦ×ë½»=Ø/Î l<$h€˜û!fë(y¢ØvBØÓn· áÄ–ÿ¼ƒ÷8z‹ž½îˆ÷ñ9Š{‰öt: e ö:(ÒÜ&“I´ÛíxüñǢÑív£ÕjÅööv|÷»ß-¶È3°5ú™w~DÖ>–±Äc†‰*óP ÒëR—ÿ»RZ~N§ œ€XçÖœ"Žˆˆóv=03Iô±÷ºÓ©X7Òh4b0Ä`0¨D1ƒA ‡ÃˆXnÍJj ©SLŽLdLþË(‚Á? OÑç ¶Ùð7€uÒØ˜œux™ñ~<â¡‹X¦$०î>Å"`Pa€åˆ €ÕgAøDrKtîh…åÎ3f³Y Ô#ï µ±±Ãá°¤ª0³ÙÀ ûð:•ÃsoRƒý˜Ð½"Õ’v€t´„gð¿×ËŠ£…Ø8vá¨TDTˆŽÓ¿r_C—ë…w9•{Ï‹Š³wÛˆóÀ%õCf&*ôì ÛC‡´×€‘çÚƒN}³cà—vó#"®;€”mbMôsJö“ 6 Y0Q#…o=÷ºÿ[üî÷ûeœbœä"lÛ¦}*€/õõ:ëѶˆ(ÎäÏuŽ”Z—üŸ#Nô뼎 ˆSËíq0`Žüæó:°Æ"/Œ/G"i äéÓh4ªØ;÷M§Ó2'L&“¸êª«âŠ+®(ëB~øáb/N3sÄçɹsçŠN‘—û¨#î“vÌ\êR¡º’H§–‘(§³ sìÌéÔŵ¼SÓÈü,írÛðh;‡ú: ï‚(˜¬íõeÁ­û d G½­OHŽ×y*iƒõkà‰6 ¥ïš4¸ýnßÛ{ï” “)ˆ(„Žg:}Ï$ÁžnÛžê€í#3žå¨rgmŸy;d§Èìíí•TPÆ'Gžˆ.´ÛíRÿˆåz{Ç-+tÚ‚#‡ `¾ÝnÇp8¬pG‘£6^{9‰ˆr0§Çeêb{¥¯BHѳ—Ÿ÷SÒÙ(ŒMÝn·Œ…ضj’™È6åÛëëë%¢ñ˜ÛãÔOú ¤²q´n‰ÿ#¸ŸgÒ_§ÓilnnÆh4Šüàqpp;;;•üǽ3×ÎÎNéOl<€üøœ´1ì¹Á©K]êòäJM@Np±‡Á•‰Å$Â$h¯;÷6›Í²à7{„œ6Ad€I±XÄ©S§*XÄQTï ÑívË»§Óie!àx<.“#ía‚ã­9¿Sœ2À¶gœ‰?b¹ÐÞ Yeo¤É Ï0HÚcmâçgÐ6ˆ“ SœG1È4Øer'½Ýbè&§|H1¨ˆˆÊ3xŽ7,€ìY&&ýtNɉˆ 8GÿÈ~ee¥,¶íI·Ìq¼‡ÜË/o•Ì{Åq4 ¢eÐhä^×›·ÛíÇ ë¨"²°Ûûœu?›ÍŠÇ0lògÂ,èD´xŽSù¼Sž#qöþc«Ã&–%ŸÓG;ˆ:bW9 Äp8¬uÆ8ƒsGŒ°g§sÙ¹ÐívË.€DþHÉ4æЫ¦³ÉéUèÜéhü~¢hŽuc£0vP@¤Ð?ÄÑdÔã?Ù1ãqÐcžS˜°5ì»N§…pѧ WD=èƒDf¼–ùá9¥Ë„Û°ÃÂÞt@f̼o½‰¤Ó¸zp}©—×Q‘BŠý@ˆ ”±ƒ\§±š:z Éé¦;M‘:É»Änܱ+÷U¿õqÈÍcKîgôᲦ¢é¶ë–ÓûHk³,‹EYƒ~xžm›ñYGD9tÒN ÈdþžúYçÃá°B ù²‚<¼þd6›rL[ˆæX‡&îŽx!ÓºÔ¥.O¾\úmNH‡ñž÷¼'~é—~).¿üòh4qÇw{í7¾ñxýë_ý~?¶¶¶âæ›oŽï|ç;Ç^û±},®½öÚhµZñ‚¼ >øÁž†+ž8 À ˆVD,=ÒŽ‚0¨äù 4{|™´ùŽÅäìœÈ`²ewR®œàœ~"ž 1aBÀM[œ—Í÷ö¼óLächÄ2]È€Ðå”5çG,·ÑecRvŠŽ½²9ÅùùÜ> r¿'Zêb¯¿£ÜÇ5N¡ŽÔ¹dl:íÎ9ET<ÄöÈgo«ŸE„Æu§ÞØ6Q(lÄ^]×Ϻ6噬‹Ê€™°g’jbîÅË´Ó:qz r·œ:Õ°ÜY[D=Mx –òbxGxgÞ¹,?ÇíÌ„4/F¶- !õ'Û‰ »ûýòþLŠÑôzˆI¶ëŒ^ý limm­lûÍ},ü¸û™Øã©#¥Ø¢×zAH°[÷G“Ôãì‡6xCfÞyÊöî(jn«=ý&tÞP„]¼h·7œà¹ÈÚ¶æ{íÌY,e‹ÇddÆ÷ãñø¼”NÚn‡ýúñ ÞeG‘Xê϶â­V«¤÷z®á:?ãéPÝSñóDå«_ýjÜxã±µµÍf3^ð‚ÄûÞ÷¾óÒÑ.®©Ë3«Ôä"•Ç{,þò/ÿ2âW~åW"âxÉC=×_}Ƨ?ýéøä'?ßúÖ·âÕ¯~u<öØc•k?ô¡Å­·Þo}ë[ã _øBÜrË-ñá8ÞñŽwüØú0¡—§l¢Á„Èf/‘·X@ȽÎUgò!½©ÝnW¶Äõ¾îxÔ‰úA,˜ ðj椀TêFj“¡xêëœgƒºìí#Âbàdo-u·7Ô^_ê—É@DÕÎ$m’ˆF~|GI×’Q]¬iBe{µgÖQ\{@Wn³=ë^Oá:°²n Ï¢íØïBÞ–¯e h$…uMŽTѰAäh;„ÛÛÝó.“[ȳI³£L Öƒû-ÿgÒ è"= {¢GSìÕöZ"!¾ÃÖ¼;@•÷»ÿ„Úu‰í¢oÛ1ý€ï ˆŽ28ÅÊ$žï\?;øY[[+cOw¤ÀÞ~€´£D—¶mZÇîïŽZԻѷžH^Ô=“X; 2HGo¤C™!WÒ@qÄpŸ×Ø`&õñØYù›±Ad!r›³3‹{2²Ã€1Ï2lÂ2È©V´ÕëR–‹M@î¿ÿþ¸á†âܹsq÷ÝwÇ—¾ô¥øßùøèG?¿ök¿V®»X¸¦.ϬR§`]¤rõÕWÇã?gΜ‰O|âÇ^wûí·G»ÝŽ{ï½7z½^DD¼ò•¯Œk®¹&îºë®øÈG>RžqçwÆÛßþö¸óÎ;#"â5¯yMÄm·Ý·Þzk¼ä%/yÂú0È;…'âüuÐå â^¿‘=‡Õu>°ÍžhÞéÉÞ#Ï%ÝcÙ{ž'rƒ8žG½}½ó³ ‚©+²`!=Ïfe‚szKÄÐÒG²—ÇàÚ xee¥B º"¢Bà˜äÀ~¶ “ðqàì‰ôãô{ü,öè[ÖÔçzw {< ¬,_Ȇ#Öçb±($Ó²>Ä».¼‡Óü½ §m eÝšèð ô áËuð½ô¬ ¾²}#/tb™ð·×ï`óüMz“ë˜n· õ1 Ë¤{ Ô]ÚÎÐ “{Ü>dÆ; vBþÇ@ݜɕ–Ã<ßÄåg~æg¢ÑhÄÃ?gΜ9¯¯¢+G”ÈÅ.ý×ûûûñ™Ï|&®¼òʈˆxÕ«^?üáãcûXìììÄ©S§.®©Ë3«ÔKPžÈ›pxx÷Þ{oÜ|óÍ¥“Fîzà 7Äg?ûÙòÙç?ÿùØÛÛ‹Ó§OWžqúôéX,qÏ=÷üØzä(uˆˆÊ$G±×Ý@È ’P¼S˜œHØK‰l˜˜œjÅîY€d‡ð™|©?“®=yüسé::=*¢š·mÏ%ßñ9`&Gœº–ßÏçöÂCÊ ªkQM÷a"6 0ðÈžqäipÍ©OÜÃsÑkÖu&¾Ÿ682€ìV<Û`§¢¼Ý`‚vÐFï–fàïô+¯‡±Œ2Á48F6îÔÍ`•­œ]È)ˆ¶sG¿ü÷:"AÛ‰L!À’§AlŽj"+“pÒí­GŸÙ¡@î<²4©Éý—k¼˜Ú6çýÞqÈò3£Íî[–…g{ÅLÚi³uCqú“wïrdekk+^ÿú×ÇïýÞïUdBߥØÖˆ>¹~ÒZ& IDATÏؖlj<þØI»í…G†Ç9\°%ˆ.Ñú¶ûR£Ñ(¤ÄDÌýÒã—ÇÄLÄìA?N¶v1/ðØ.)ý~¿lí©Ð-޵n·Ýn·²ñmpt—EìN×2™988¨lL»rÙ¥.ÿ¯Ñ'ós\Áæûý~ås¨„^L\S—gN© ÈÓ¨|ûÛߎét¯xÅ+Îûîå/yüÇüG#<ð@ùÜå¹Ï}n<ûÙÏŽ|ðI½3ƒ8®ž ™0æóy9¯ÃlÏ“J»Ý.Ïøç…Ì<‹BPáÉÞÛÛ+ á‰bÀ‰º9%#bé©'eÀàÔmeRÍÞ_&{ˆÞD¼µÜï»S\xŹßèYó,Û– ¤Ó%AÊ{“O_C›2H¤ 3dH=, žNü9uËу;¾£nØ…£&kF£²f!×›säËzµîœªHý°¥|ÆCN‡1éá¾,cçòg/µ^×€ýÒft  ‡œ;Zá(õ²÷¯:΋ I­òZÆžÓëõâðð0^ýêWÇM7ÝT¼än;²1ÁÃV "èp}}½² vuš#÷˜tñ,§>b¿¶užåûx#(¼‡:[7üï(ÏöÆ ù–…íÌ$öyE¶3Hdi6›•³?LÀþæñÅrôÿ¼ ²ì1Õ»õY¾yÌ6±÷;NJù­ßú­¸üòËã–[n‰ïÿû1™Lâ¾ûî‹¿ø‹¿ˆßýÝß~¿IpM]ž¥NÁzÂùÛÛÛç}·½½‹Å"üñxÎsžgΜ‰f³YÈ€ËÖÖV%5à‰ “‰Á$é– ä ¶xAñ0 ‡Ãó"g³YŒÇãâyc÷ŸNlg°±ôL:º€Œ£N3pä€ÉÂiKLZxx Ì–óƒ=AZh?4÷2qgI¢ÍN¢Ž”8Õ‚çüiræýŽBðYŽö8òAÝÐÛƒ^ 4y®† ©ÉœeA{Mì½7H6HÏdÝ85ËS{Ò­w/ÎõÎV&AN-Ê ×Dýœâ×ív+‡xššpº¿ ·v»]RPˆØ¸Ýîs&È×€œêÄß&NîN=‚´Ó/}°åqÂш•••²0ò!ràˆŠå‰Þ¨?Ù‘”œÚÇs‘…£G&ƒ\oÁ¹<ß/‹¸âŠ+"⸎Çãbc\ÃÃ^›åÔ¡ù|^"&^¨kýSr$O=õd¬f,¥®ô[;xä‹hrŽb0^ÚAa›°N¿Ùj>Ÿ—”&GòÇ©Å\c[ð¼à¾½²²<ƼK]ž(ZñdË}÷Ý÷Ýw_å³Á`pìµW_}u|éK_Š7¾ñqÕUW•Ïo¹å–ø³?û³ˆ¸ø¸¦.ÏœRZ¦Ói9ÌËÞ¿ˆê$æÜq¼³Ù¬œNî]tØ™0X¨IÁ³Ê Ïäb¯ßQ§‰¾@Ô!" ±ñbØœÖA¡L&9µƒ:¸;¯Ÿ=ö2æ ߀Пøä­E©—»þ€7GºÝn‰ yr:‘u˜(àÁ†ˆj:^ž´i‹ßÛÓ ÀÌ“¿mÂÏ„,f;Ê$·ÕjUR# T !NÏ3y°Ñn¶zE><ÏiRÔ‰tC§†x#–§Ñ“b@ƒýÙ[ïT”ÅbQÎ{0q¤¡c§Þxû[“Q@%:>.ÊÀûsªíÈéKÈÓÅýÊ×°5‡ú RtÆoì*{œy.öä¾›Ÿçþ‡ÞòxÌ9Ü61NË!xÔ¾õ…/|!þîïþ®²^€÷ò “H ì©Ñ8:ågÒgçTT¯£³ÃÓvêÝGî|ØgS¬wôÊï<X¾ô{ÿ¿··WȾØ,@£Ñ(g:™ATÑãZú"¤?Úív‘•ÛŸ·ßµb† Béo¶wvi4ùÿI(7ÞxcÜxã•Ïzè¡øßøó®}ðÁã†nˆW¼âññ<žõ¬gÅ×¾öµøÃ?üÃ8wî\üÕ_ýÕŪv]ž¥& O£ò¬g=+""Ξ={ÞwgÏž••£d®% ©Õjwíu×]÷#ßÅVµ^pêÁ}mm-Úív%78b™*ÃÄ1™LÊ$Íý&&%‚Ny‰XMÞ€°b’ä´ ä @Bn&Ùcï …g\žb ñCÆ€ï`…αKÚ‹y®ï nŽÆqN€w‰2À3ÙAöxcíYçoƒ\ÚŠ~Háó$§¤°Þ(§“a |,Æãq‘×ÊÊ2UÐi!î&NÉéŽÆå¾Ä}ö0#[G/2ÁˆˆÒ—©+z$r¡=ýè™è‚×¹=8;¼«ž¯s¿u¤Ïk6ÜGÝ6H[S{ÜÀ¾ˆ ;uÇÞr;Pf³Y|⟈ÿþïÿŽJô…>ï~Ê=N¢Nìçvt`BÁý€môÛn·+ºA猎LЯÑï¡AÌúhe¬B÷Ô~è(¥ Âþþ~9øÔÑ ®·¾i+)*Ž.mŠXn‹‹Ží( O#W/°ö8‡lÛív±sN$§“JKä9ïÌÇûÝþ†h Wú²w Ë‘fRnz a^ÂVi+óó€¤Ó>äKDŠñÝýß}‡H)„‹¾qÒÊ¿ÿû¿ÇË^ö²ÊæG;\ñý‹^ô¢‹†kêòÌ*5y•µµµxÓ›ÞŸùÌgb8–Ï¿÷½ïÅ—¿üåøÕ_ýÕòÙM7Ý­V+î¾ûîÊ3î¾ûîXYY‰·¼å-?ö]xÞ¢xÄœŠáŘlI`²aò°÷…I‡ÂNL:“ɤœIç0@õïI ° °dž»Ýn…<ðð ¾&xº™$sN:ÅijŽÖà9‡erˆc íæÅˆ%ÙbbôóMh Úø{}}=677Ë„xõ.=€&oH¼ŸK@ã:¼ ­Vë<£Çétz0³žžLØN‰X¦y!+GZ° €íòõ§Ø8Z’mÉ:B7x2 " Êüœ¼¥ÛíV®q* „ ù-qÄ ‚M´=®vðnƒ~ú5ö‹ˆüA‘W>w{¡›Ô`£ØÄÐ ŒjÄwØ5ãH·Û-ºàämÆ Ú`BŽ}’ýNêà¶› :k¨'Æì Oìd2)ï½âŠ+âÍo~s\yå•Ñï÷Ký¸ßiQèØã‰×SaÓŽà@V ½Ýn}Y~ެ¬¬”µFvvÐO3AòØŽÜ!î‹ûûû•t]Æ\¯¯AÆìœEÛ=ŽcN;Äûv ñÓív£×ë•­×±úÔOýÔOUvBìõzrŒ¼©õ¡o{^aÛ]Ö–P·ñx;;;1Š-íîîÆt:-N>¿”ÅóÝ…þ9®\}õÕñÍo~ó¼4ë¯~õ«ñüç??VWW/®©Ë3«Ô)X±|îsŸ‹ÑhTt=øàƒñ7ó7ñË¿üËÑn·ãŽ;îˆë®».ÞøÆ7–ÓDo¿ýö¸âŠ+â]ïzWyÖÖÖVÜvÛmñ| ¶··ã oxC|ýë_;î¸#Þö¶·Åµ×^û#ë²··WR˜ 'ÛKh|mm-&“I¬¬¬D·Û-„Á‘ §ð Q§Ó‰XYY‰N§Sí챎X¦æx¡%õd‚eÂæ]9M`uuµ’§ 8!k?:ND,#%ƒÁ âa‹¨î¨´±±Q&dò–!o\kú^ˆÓ#œ:ÀäÌós*`˜É}<—”¡Fã(¯²h`0aäïˆ|ØûŒÞxïq9ÕÔq±X”3QHiƒôØó씌Ùl­V+z½^ìííÅp8Œýýý’ò`YLc—&Æè÷ÿ°wf1–åý~O÷é>{¯3žñØx¼`l ˜`d6 + !‹JP¸ˆðE@IP” „Âf !ß.rAD¤HD" ("‹² a°Æ6¶±={<ûôvÖÞÎù_Œž:ÏWÓþ‰Í÷)©ÕÝç|_}Uo½Uõû½K}/"ÙÕÞúl ;õÐwÆ‚ï –|~FúK±CúøÁë…¾0§ÜÌ)€0cmbƒnÒN‡²Ùº.’mrçDdt,¢+O®‹åü¦Ã­ÇfH¤rˆ]1QeܯÀ\î÷û…{œÆøCB1óùãÐ(Ö2@)ò`ü™çwÞyg|÷»ß‡~8]ïp½Ñh”÷{ía Ås\.—¸ Ý£/ȰR©¤k¸×Þ9æ/äyó,d255õz=úý~š›p¼(¾·ÜȈˆF£‘’¾í]6ÑϽÌÔ‹ÇïF¼8³³³ÉË‚!„>Ôjµ8|øp´Ûí¨T*Ñn· ¡_¬ÕÖˆúÍ›Î#"­;¬G¬{èÌÎÎNа‘§×ë]âØå}ï{_¼õ­oßøßˆ÷½ï}±´´÷ÜsO|üã—½ìeñ[¿õ[?7\3)¿X¥4Ú~ÃËT®»îº8~üxD=¥R)Ž;–b%ï»ï¾øÀ>ßþö·£\.Ç›Þô¦¸ûî»ãºë®»¤ÎÏ~ö³ñ¹Ï}.ž|òɸòÊ+ã]ïzW|øÃ¾$fœrß}÷Å«_ýê7L(ÇI:ÜÉ/«"| ‹›®uot¶BûÈ[6&¬G€9¿­‚Ì<ít,¾É}rÌ.àšþÐúY­Vc0D½^/XÍDz#6%DÂ\7[ÚW©T¢ÛíFÄ4Üm¡Ždž;äk©c¯fæ±°æDÉÃL±Bb|¯-ØlØ< ìp¸^¯—¬ºç±á%³å™Î!uBÆÜ‡>ÊíE¡ípä€<ÑÚ†ŒÐ7ê´w Ùîìì¤677S•ÇÜc Èáoæ×5d‰§¿È“qr¨’=EQÈw€ìØ€Œþ†®›D8ŸÅsÓ!^&rÌÆ)þ7à§ôÃÞ!úçœ)äï„qÆ”5j4E§ÓIVp* 8&–&­Œºpíµ×ƱcÇR»¬«Ì+tžyo úEýÎ_bè;Þ°ÍÍÍ$ˆ,mŸŸOÀyÖëõ¨V«Ñét’± ‡Ã¨×ëI6œ8Åšì<{òXÏè7qú›››±¼¼œôY°îÙ“ib177—< xØ{Ðmˆ\½^/¬£ëëë…5`qq1Í+¿¡Þùtžçß‹(æd ™5$+æ0:AhØÖÖV¬¬¬Ä½÷Þ·ÝvÛžûïsUØ×ÿæoþæ9é?üpüÁüÁž}ûÚ×¾ŸùÌgâÞ{ï~¿W^ye¼å-o‰O|âqàÀBŸ+\3)¿˜eB@öYa¡jµZqèСjìÆ¯×ë±¶¶ý~¿†µÌ‰ˆâ¦ Àfssì2¿qûÛJalR'›°c‰mM7‰Ë-‘<Ç!cã#)y‹ ‹7á¶–z3§ï¶J³áŠb „¥V«â»Æ€}žÇ"íÐ7äAŸ‰&ÈË€™±…¼aEÍëwh2wR+uØjì~FŒ½Zß ÌÏϬèš0AbLuX/±ò¢'°Œl¥-—Ëé ÙŽw',½ä^-¾·nb%5hÉÃCLÀ÷Z’_ÚÂ5ÖK{¢“-ô&¬´v¤2cЉÇyf"F¿òpC÷+1Çî¯79ðÜvXFƒn·[82=œCrù¯ FúŽ×‘vÐÿàih6› ¸Bè!mttÖó5s4¥µ¯Rþ. Ö@ú÷—v²Æšô°nEDÔjµä-që,s—u C aUŒ‰õ#7®ØSgï$ºˆlì‘…d 3Úàùá¼1ö d˜w»ÝÂñÖ&Îèv»Q©T ¹2è*ûò·.sZí§äk;k':¿¶¶ö‚$ ?úÑâï|çeéÛ¤¼pË$kŸ–jµšÎHŸ™™I§H±Ñà™ÀŠÇÂÍ5Þ\±JÞØ Y¨†Å=,ül|¹–U,ò|çp‡o.&2xC†ÃaáØ^À+'o°©bñrxIþœäت‹eÛqÇKÈÓ¡l=¬v)#O!" $ˆÍÐÖxÒ½<*È‘gçD>™0DDŠCìÛºOm7™Œ(& ó™=n´5­ Q—“`6Ä©£ÏöX"{Øb°sXò¦Ý´Ï"d—°5[µ=Þ®ðê³jµšŽõ°„~8¼‰6Yæ$äzÞÀÜÆ 5Ý„ÞDÜk€Ç$ÿÁz=33N'=?ÚÖ7׃,:Iç^ <‚ö 9áeïƒç&Ï´çÂÞtÜ!]Œ¤/'šŒò`îBt#â’9JAÎnÈ0ë,›~FßW²»»›¼îô‘¹Nžk‹zì#gŒ$>¼CºÁš¹íÐ+ÿŒ#âRÅ>t€¶ù„­œàsãƒìr=µç“ùM;v„>™„ú96Ðà¡Ê7^÷Üo}³™ñ0ÙˆÂü´çÒÞÉ~¿ŸByñ#ë½çm(•JÑétR»s¯¸½)´Ók!¤™q´¡+7ö8$mü'eRþÿÊ„€ìÓÂF`0eLb3`—MŸ ŒÅÜ!,Ä,Æ~û9V4Â|HÚƒØÒhðáEŸM7·Œló9ýµ"ß4Õ¶³²ÑGD:%…çÙ{h lx9ñ -ö9”ò`—?íà¹lšyþAÞ¾Ë-›¡ÊCÛö"X içh4> ð p#äÃõ¨ÓàÆ œöš†œÜê‰'¸"#úfkª‹É%u¡år9z½^j ò6Éô øMÝè|îé@΀ø\ööÔð,bí „Ü[ÞmõEŸ ¹A¶è¼ªu9ŸÌÆÌ2à{tû|j“­ ƒ“ÝæÄXÐWô#_sLÎÜ~ NxϽf&€šèØÛ‚®“ÏFøÍøzî»Ýöæòë¬×6'z€ç5O¾§Þgžy¦@¬¿ðŒåFŸŒÅ£Ïx |÷3>è©×D¼?è^"Ÿ°EÌCƈ¹a/múmTcŒmþN L‡áR§×d~ˆº^¯_rÔå."4)¿(åòŸ7)—¥°Àó¶_&ƒ+¼^Ü À $Ùø¹MÆž¿ €b ª˜eSbsp±ÀÖ7‚vEŒc¢y.í¶G…gó7 ÏcCÎÁÅ›2›¯ÿÞ¼Ñ{SËûèzr9°©û7ß# Úí°žéS‹l•Df&bè‹Ã–ì à™Ãÿ&.<#OZf,Üwb¶­oÔŸCË°ÈØÒÆýò ظ@¤ ¼,ÂàL:,K{Ê Šé#ch/ŽÇ‘û‘a]´§Ùl& m™Á3s 0ÊøÍÌ̤Ïéòrû¬ÿ®Ó-ëú5Gß068 ¹!뽟‡nÙóÁ³ic>€HÆuŽÓ³xQµZM2¡ý´Á8lmm¥üHrÍ­ëôÉï+B¶è(÷°&à)°‡—~š¼ +ô/y 3ív»ÖÑNôºãw¼˜°0†´‰z¼F{ Aöè:o½rØ^) íûì=³Ísßóžñg ynî]tâÔTñ€ ÆÕcÇzÊÚä7Ù[/WÉIÓ³ù3)“òl— Ù§Å`+™ß‚ë¸l‡dlÙ»`«!Vøí¾wrcpêÂç››› LÒ.6uˆÏtì0ý³¥ŒMÑ`Ñ€(›€ '“ä‘“ˆ±ùù{zç܃@Ûœ´Oßí0!B¾ôÛ€`’‡å±©û3‡;Øm…-žNt5!¤ŸmàsH,àܲµ'ˆÞæÞ@rµÇžq®¼r­ÃÇœËàû Ôñ™Üó}¢í¡pè ÷r‚ÛŸËÕž<À)Ï$‘škÑ#€CcîÌÒ6ƒnƒ7“Ö{ jùÖwL‘©ÇÙcäºsƒºîÜÆýµˆnòck=2´Ç5" /Û4I䚸2's¯¯´ÓÄß$°mc×)@9ßÛà`‚èõÎ$™pÊ¡ x‚°üÓ~~³&x¾:œÔ!b6hY®nÏ«Õj‚îµÓDÁäÊ>Aô¬Oè* ?½².!'ëÈ~<†wR&åÿR.?eŸ”ËRF£QáäMïüä'Îj7ÀÛÂÆfIqx ˆMÀGW‰U ‚‰:"Š›¿dˆ´iyÃÀ‚JŸ\'ÞÖ°ˆâËæL¼øM¨Ž7u{l9òß´‡~¢B=&Þ$meÍóKfggSŒ´‰›«C™Í1ˆvžˆ­ßüØ’A°%ÔòÊßH\ÑúkÀhð 96x²×Ïœmra‹¬-_žco„ÇÌùlÈ‹zl1vì¹=A&ˆô•úsò…2_r¥½&¶–e“o/eîÌ­ÈÈóòrH‘Á²õÃÞS‡Tñz ¨Í¨{à€ ž9Smõâ6£ßxÖó67ØÀ€\J¥R¬­­ÞcÄ`à uÐŽ½ ÖõLSõÎÄÔzÈøÚ`Ýs}Œ2ôzc²F¿0”ð\NècþÆ÷Ü“è6š°S¿ y›}Ç’ëð²1èù,Õj5*•JÔëõ”óè±e~±VºŒ {ýÀÈðBNBŸx@&å¹(²O Õ^–gcÇôJgff’U5SÔð1¨Ê=.\ëM{¯zlÉ€ó·­Ê¶ÖÛl+¤7Ao°<×Ïá;[½lqžÅ3èuAÊ ”mÌ7_@‚Ã3lí6È·µCn ¦xS¯½(±0((!{ˆ¦A#€ƒºœ_pôØZç ä9þï Ã2 };!×ø{ ,>s]¥Ò8¤/_fƒGîq(Ñú`FlíέöÔGøá!Ö¡ˆbR¸uÑ!!Ôe@÷r+8ãhðj¯Nbg"oÐGì™2Bæ~‰^N`M -÷ü(f_›{] ÖsË9Þ3ÚËXð>ÿ±ŒƒOðó¼Ì‰¶A7:`BçqõOó99)“2)?[™„`íÓÂBîM°ä Ì–]^¬ÆÆdÐç…ßÞŸ21N>äZ»»ÙÄ#Š!HÜçÐ6 wÉ}€(o¤¬l0L6P6x6i›‹-{ÈÈqÅ€2Ì»¯|îr\LÚœCáÏü¬ºþÞÀÖáB–)aEþŽïí™ð=9ÐÚËÚj0Éwù&mP1~qX&°’Óƒy[Ösocî0*“Nê¤Ý&G<“DcD³ue/0ê05“'_ú@;Ñ‹jµZÐë‹ÇýDvèÞ&BgüLë‰,×Û#e¹íEØÝ“ ¼§±Ñht ¹áÇ:cà H…ŒÐ^ƒQ·ƒúr/ž_ šRdÅÆïˆq®ïlAF¬s~r…±fÐ'dd–ëòËÇÉu›Pús[ö­Ã®‡ãÔWäa•¦2ï IDATõ‡p2¿È«ÉÛâ¹hï缬Ãö¢çAË‹±B¾>–™¹ƒáŠœ³gÏ&ï>ÏÍCùÛž^šè0ZËírëñ³ý3)“òl—‰dŸ‡ÍDŒOUr8‚­Œ,ÐlÞ¶rqÁ›@Êen™Ï‹A„s9lM3°ä9ìcðe’å¼·…vGCR(¾À ±$,ä}r`)?‘k°þ9ßÀ`ÜÖºüăq"ÆÜÄÅD K¨²y(‘-ͶÚâì8oîÍßíqBçL ðDÐ7÷ËÖs?pÈŠ½)è¦=kë)À%b|*ÅsÀà 4at¬Jî}´LæGž'a¹Ý‡þÍü3Ù6©Aü““zäÆwX½3aùÌ Öö@Ð[’Òüw{çÌÌL"2È0·@»¿~6Iά)Ög6#ºhK·OÌ2àdœÈ±×b/Ç‚^ ãz½žäKñ1ÑÎc¢]ô O† ´å‡^X^è2¸0ŽÖIë¶×wæ õ’°$úÈ}Œ+u³æ˜Ìº/–ÓG÷‰g2çm°ò>å=ÏkAî³qÀý´|‡Ãa ïr˜æ¤LʤüleâÙÇÅ‹¦vƒ›³-°¶èóïþ°ÅÏ×ÐØmiKoµe‚ä@Í…zùÍ™[þF1g¡¿–ß;¬K|N®,_°<öe•âöÐ~çÙ°GD:+Ÿç¹ÿŽLÌ[ô™vÚZžo°i°%™g˜ RžÔjâgÐiҔϨ›$‘#D€ÖJm@×p8LVNî±°§.ê9Y¶®cQµ…×`Æ!wXV=þ½^¯ðÎ[È}ü1„Ç Œz)ù)Hý¡¹÷Á@Ím6ÁÈe1öX.Î?bxLíaŒ¿øÓ'våÞ.þv²7sËrAæ¼ç¨TºxZú¹—|06 äãü$ŠÛMY¯ÈõÚÝÝMÏœšºxJ×ë_ÿúxÇ;ÞF#…èĆ~8Äo/ï@NþÐOîw¡°ä$Ðcâ5Ù'„q¯ P>]Ìë¸ç1븽Aò<œ™™)„$–JcâôôtÌÍÍHçÎÎN:ú™ññºD=¾<—¹‡Ž;ôÐcË݇S\®²—çâÙú™”Iy¶Ë„€ìÓ‚¥8b¼ø:ñ.¢xì) ›ÍÅV«ÂѦlÒÉ-­c‹/ Ù€=·†šˆñ<úD_LjØt}¿=ô›—¶°aHçÎ`ÂÀšß\G½´Ë& ÒÖáaŠ·Û%ÑàÎr¥Ø›ñØ#K=žå±ô;è§ÁÅ}…Ì@ n}¼'²ÐÕjµ‚^4Ô^·…>4r°IÌuÉäÌž§ápX蟭ëÕ\kƒKtÌ!TX×ÝÆÊIõöBìq1ö¸ÈÜsŸgÐnƒ+{{¬oÔor‚Ž0>ÕÌC'óL{*©‡kúý~:Šy`Ò”ë“eÎ|¦}Xî=–Ì1 ºÄ÷;;;Ñï÷“NÛsgË8‡|ø&d  žžžŽz½Íf3ãU¯zU¼êU¯Šz½^x¶è$y ÌSÚá¿‘© k´½{« /ô™Öëõ‚ÁÄ’qâ„({2™«&ò¹ÉãÀÿx¾è‹½1¬ìAx…+•J´¡ïžkÌ3ÈMnxbn0n<‚›{<'eR&åg/“¬}Z»c0Æ‚Ÿƒ-6#€”ÃB¸Ï!)+¾CŠØÌò75ÛŠËÄFeK àÚÇç^ˆ185°á¾œDØÒmâ‘%,Ô· {78•Ê»©©©ÔæÜÚžŸpäþØrê÷ûQ¯×ckk+ªÕjª{Y“‘/Û[!5x69s²-&ˆ´Ýä”gSx¶‰‡ ÷ì ÈB>ú¢.‡¦4›Í‚?Åqá´þ#NK«T*éÄ&ÆÃ‰ñ&À–‹Ç}³¼| ?ãZ­V Öaz®w¼>÷ÙcDÛú¼8Î/w¤>æ³-ãŽ|LÌrôqÈ®‹5Åd ½Æ¢m‚fÄnzz|JÜööv4KÖ/ç“ÑÆ„zx`“v0ª&¥&Áý~¿Ú8;;›þç~[÷#Æž r¹œôйÀØ\uÕUñæ7¿9Z­V|ýë_/‘{¢üÎ~ Ûãåu]7I›šºøb¿ü¥¡¾?ùÂX•ç[ä§çÙˆB»í‘®Õj)´ã‚ \[©TÒûkjµZØcS©TÒQ½Ì1·Óûõ›TÒnæÇ`0HdÆFËpgg'êõúóŠ€L¼“ò‹R&}\p'³Y¨lvˆáTþ,·0²Q²1GŒßa`²ÉAV3o+: ×^ î!À MÙ^¿ß€¾d³³³ÉzfËžãº}ÒWÄ8É·Ýn§ãs9)ßí`,œÓ@Û 2i?4–AƱßï§6a±4pÍ“TímPÛ«aJÛ/¬¸lÆ´“k æÝ‡?®ò äIö²Hâ q8„A²4 ±•ÕaTÊ ƒ:“SäiÏëâ7o7ñ£&„žCy(›¯£^ÚO„™ó™ÇØ^6ƒ/Ï1­½?̹Ü3‡ŽSGþQŽGõ¼c‹‹‹²oBìSØìI†Tç†$æ²½àùžÀñB-/ä¾MÊå+È>-ÄSв‘°a:,ÇÞ­­­h6›Ñn·S},È,ÄŽÁ`a½Äò‰‡„ Ý›!í1x¢.×Ùëõbzz:åA+ž‡о~¿ŸÀ‡WÀ›“­Ó |æ¸ðˆˆV«ƒÁ yWö´ ¨“*mIív»…°ˆü(b{]ò°°ÍÍÍBã8 ±¢¯XüœNìeSv?‘ Û!Wä“ç.8ÌÂãÇÿl茽­Ö£É½C„dø”5¬¹<—ºùÛ@²dRƒnbéöa¹E}aŒí¡‡‰z^˜hÖaY™DD4ØÜÜŒ™™™Â;whòà»Ü+ÓjµÑÀƒà܈\ß#Æ^*ŒyÒu¥R¹Ä;•ëzެ xëõz‘Ì'×ãƒÛÛÛÑjµ’1>ø3ö¸Ù @xz½^ªw0¤yÑjµ’>1NöD2ÏÊår Ùáô'¯&{Œ=º†î›à°œ8q"®¹æšèõzÑét G3n½^/Íë³×™ˆH'—EDá)Œ;B8ìÖÞ^䘇Ú"W‡Kz~™À°~¸N÷dt8¦wM¡³èßòòr4›Íxê©§ †#{§vvvâàÁƒqæÌ™èt:é½è*û „‡>OM] aíõzƒÎÆÆFº†±ð*Öy{¼.g±—rR&åù^&dŸ⓽°²AÛ p5ˆgÃ=Mñ{ Xè#Š/³õÑ„‚¤p[e ÎI(ä$ ƒ ×Åÿã< ÜóløXOmÅ4 ¶…Ò Œü°2nnn¦Ít4Åüü|ôz½dµ'ý²ùú´&B§ RX±b[6ôÀ& Y¨Ú ¹°5÷z½‚Õ×ù >•¯›¾-êÔmO ‚0ž‹.¡7lîyh„CZ 7‡n s¥ÒÅ®ÕÕÕ(•.†cA8¥¸î  ¨Ë  e1¹°G!<¶`#W{»|Ì3€›6ò¼üt]FvNÂ5Í­ó´ÙÁœ@ÿÚív:’€Fɽsè*×úæ!Ïq¨¤ÃqÏn·µZ-EÖ/€(D›°.ÆÓœ±„\Ú“iô¼±AÅ žžˆHSúÐ&,“~#Á`Ýn7Ž?ëëëi-ñºÝn[ê³€dyƒ;È–`Bý&tÔ!c´­V«E¿ß¿„ £c\ è3¨ „ÍŠñ@ñe¾‡¬8¼Ì'Ïk@nÄ´ûÀÚArïÎÎN4ÞaËpNˆð¬™ÀzÒh¹a¦}¹ÇÊ}ñøhÆÐž,æŽ=È‹yY­V“¬©s8ˆ}e^F£h6›i. [Ï#æ;ú“Ï1æ4ëÏvŽsØùaPæ „4/‘+óÒëaIÛÛÛÑï÷Ó|±ÇŠ·s—J¥èt:I÷ð~1 ¤Ñ½n·F#ÍM çè8¹Uo Ì?úÅ:ĺìlôa=™N§N'mw¨ª×úïõ`ii)ºÝn4›ÍØÙÙ‰[n¹%n½õÖ8pà@ÌÌ̤Z­Íf3z½^’=Ęu Ï47žÉs™CxŽ···£^¯Çêêj´Z­Â\bÞ²Þþ áµ1`R&eR~¶2! û´8¤ÄqÎ6[ɽ ²ñ9ü‡° »ü¢ak¼= Å÷°;ÇKÀ4 °Y¯× VØÜZ Y¼ò?€—´V«,b´‘:ØDóÄZ6/úéP!Ú_«Õ 1Ñî£7sB˜ü|d¨³ÂÞ*@íãsˆàÔÔÅÓk677Ó3ØÐ : ž‡WÅ@3ÿ¾Tºøžjµ ä9\Ë€Üd ½‚4¡c¶š:Ì#'"È‹,íµÕØÄ”çÓƒ;tÒVûÑhT„º.ÂQœÛDܸÁ8àÙ:†5rÄüCä#¡‡:È!²A¸`ȃ”qMž ñq¢­I9ciÂêœNn‚¬˜À9BLq֮ؕÃs‹,øÛá/›››‰3Ÿ,Ƙ±tnãÇÜu^”ÃoÿÜÏ:š“눋 ¼^¯Çh4JóÙ Õét¢R©ÄÊÊJÁDOЛ­­­X\\L991d~àAðÃ\E^È%blüpXóÄ„9ØÑ‡€‡Ãh6›Iì‘@gM#ÆÞÒf³™æc«ÕŠ—½ìe177?þñãôéÓ…¯0r@h!@´Ï^ ¯»xË 'ô{8¼øÂ]{;˜NÔg¿Ìås¹ËÄ2)¿HeB@öi±u`äÓà͚뜬‡§kC–ÅÄU6[@|DŽ7À&'ù84 @™ÝýÜ—‡/`zÙpذè›Ca¨ƒß!6^¬þ´ÉÉ›<7)ÈÖùX+óØâ@àÍù$ÄÛb>ç*oà´…ï$N¶¦Ž|L¶¶¶؃ÐA6Ñ{dÀß&ÃxJ± }t?"Æžÿ!U<=0¦¾Ü !°îãÁ1éEŸíqp.sÉ„k4mqò°qÝ7òW±7Ź&öŽä Ýa—ö„0F ò¼Öú„'„vøà “÷œä³~ÐWæÄž{Lî¹âÄØZ— *Ì >G¿9òÁ\ÞÚÚJÄ™þ1ÿÐÖ ¬î|†qƒ61/fggÓÜBF´Ÿ>3¾Èy‰ŒX‹-WÖs®Û+7Š9dòæõ˜¾q ÞŒ%èÙ~ô£ØÞÞŽw¿ûÝñÐCÅC=”äo0}rˆ¢×2fòSL¶}¬.zHH–CÑl ¡°æby9ËsE@&eRž‹2! û´Î*•J² åïn0¨`“Á¸ dÁ›·ÃX˜mMžššJáã Þ4¼éҬ݀1Ÿ²å„ùˆ±Â@€æ1€¢Cl² >Žj4!¸@ÖØìÜî1Ð:qØ @€UÞâÕˆ±ÇÁa"¼lÞ*Ž»ôõÔc¢å\Hz`«²Ák^¯I„CkÐ3,Å@0ó!¾‡±ƒ”B\ >„Ç@R i€“<œÃ€°(Pflµ¥ Gô Y:7Æ$÷›ùÆIH„úЀ<†‚k®¹&ž~úé$Gúhc÷ {ö¸¸mÌ æ‚ ´“>ÐgêdÝ¡î„6" aYCr@HòGè³ Ô1&älÑgl{W|‚A,úäµÊc›ê3AYZZŠõõõ4W­Göv SƒkHÚÚÚZÒ#¬ö¬¬až‡´“¹ÌóÐ{«LžìÝE677S¸ ë]îA´Ç†¾ÐFdˆìùŸ)CýÃþ0þò/ÿ2¶··ãÇ?þq0àÑcìm$k·Û?17²ñýÇËNnŠ×q÷Çk‹=¢/Ä2!5“ò\” Ù§%ßøÙ€(Î×p.›„GÙ ©3¢øÂ;‡ëØ¢˜[æì¡p+„ƒï/ÄV³8²1;¤‹þ9ă~àcýpå‰ß\ïPÚm²ˆ6¸ÎÃl­DðL,¼„½ ;ÇbÓ~2¡/Co¸Œ‰½) îGFôÉ  kª=*"Ú‘‡Ô°™ïâCûØüsRÂO˜! `À$˜ö C¿p“ÂýxœüŽîŒ<¶ÎÓ1851ðôÜD‘9u W&NÜK›s ²-¼Üãã‘7},•JqúôéKÈ 2¥Ï¿<Ûϵ7OýE§eF#666 Öc,ç?iÝáyÔã9 ·:÷xX‡Ý?dE¸(m‚ Ú#ãñ´G²Š¬Ð‰½ò#}0OOÑííÃãFß핱גz©/b|¨ˆ­ðö°™D¢×è#ÄÂ^4Ö¯¥ôÏó¯Œ †N^¬3ä äzîõvss3Nœ8‘ÚŒ·Ë§ÝÑçD™D¢>ÜãVîa$„±¢Í6´ ·ˆqn¤ ç¤Lʤüô2! û´.c×: 9@>·p²ÑØúJ8‰­[,c¯ ›€l,Ê,Þl:l–ã{ØÌ+ak­Á9›#7à)" àƒÍ29Þd Æ}?›¤O@1!°W`8¦ð {=¸vvv¶ƒaK:Ï5ˆEþöR16€-®q¨‚¯å{“/N䢟«ô›¨r uçrC66\ÁÊÃÁr‹0rA*ÆÚÖ_©ÇÈa*Ô›[ò=ô t.¯Ëùè¹Áçh4Jm0Ù60s1)2€å:‡\1¾Öe­ç§Ãóò(@7ÞGBt°ÚÐ[ë&zÇoHº-Ì‘ŽA¥Ï|n¢h‹:‘µ"¯¬=´ äóÂÄÆa_öÆqoNX³|p„ç!²ñó |™ë½^/*•J’«É¯õÈs”uÏŒ>~¶ßÿa}ÝÙÙI€ŸyBØ—‰4ßó¹-ûGt4?9 ÙãUw¸¯×D>óÐl6 9Rx##"%›#›í1 íœ˜æñ¤­žëžK´‚Ê|A‡ù)•Š/41>”‰·bR~QÊ„€ìÓb—> !b|æ¼ÿÇÊÆ†‚õ˜ ð1§0Øás6Ú1NyXƒ ßã1ðµ?X¸rë7m°åØVhú`p©.6*ž8äìó™­¨n«µÙä \òöY&ü8aÔVa@cÉÿ¾ŸššJ¡~C´ÇÓ-ÿ<:œÃu@ ­ª¶ÒÌýL€ˆÇ¹C^ò~ÙÚQ$ü8dŒ¼Ý6{’¨ßã˜w@¯ „ ÙÒfÂG‰ç‡ ÿ#þPÛÂõ|æð*홚š*uj –Ënii)Ο?år9ºÝná¸_’ˆsæyÄØ£ó6RØ[dc‡Oγå9£´;ë&±6<ØŠëTî¹0@µì9ÜcÎØEDa-3¹Ì×¥r¹œÞU9ðúe²ÇçÈ(·ìv»—„Y†|g«}NZ‘KîË@&Íöôºn‹cNH}*›¾YneœØzŒLíò3<.„gå:J¶|r/ÀÙú¸_çÑ×¼½&Í&}&vÈÑB_ê%g…1ãc@f Ås û' QµgÌ–ht€úŽÈx`¹Å‹bO€ ”¶F£‘,ö܇¼½.àÕp¨LÄøt¥½òv8n—ÏÆgïò§ß;î³…‘[Âm0A¶^7˜ ¹q€¶Z©Ë¤ÚÞº|nÇ•ƒ^{žIÛóƒÜ>ÆÐë ^šR©”N¢¿ðHÛÚï¹Çýè&}Fé änO•uÜ'NMM¥ºlàòeÏ+×£_£Ñ(6ç}ŒSƬOFtêà 355•ÎÈIs>?‚gz^®âuhR&åù^&A‹û´|øSlAçobëËår²ÞçVB61ža /õ±¸¤½éÙ*kK§7Er5lµÚ˺e ëÊíÎA¨­]€?ƒÆ|ƒÎ=l~Žç·56A¤œó“È ¡ þÜà©©©dQå$&-àÈ^ Ë›çà!Ó!C[Ñ}N>cBŠÃv<è­’?@%:éú‘ñ^Îcb™[–Þ´ó¿ V!|žo€ˆA£uÒÖw- ×§ 9܈~ÛK‚ŽÚ’Q|!¨Ã¤ÜËÍãoùmooÇêêjáä&?ßúaÐn+>uñ ¼©&süø´2Ë˄պ˒{ПœX„ÀX&.ôÅõ8|æÞªœd²^ÚrŽ Ð‡RQÏôôtÔ@®7 ¶aÂÏ´.sƒi¿“5Ç„ÌF( -{Í#ž ˆG·LÆí‰ÄðR*• DÐ:’ë¶?ˆÔë$$›1cü=—YK|k æ™èm­V+5Ë!7¼Ê„ÔLÊsU&}Z kD±ÕÊ+·´Q°âñ7 Å·­¸e¶¦EO.ò³lõÑ¿&0lÖyhˆ½)ÜoK'ŸY^9x n€3m5xâšœœ™ ºÝ9±òóvÁÿXE Ypü»½ Üg`]¯×ÓýÈ%"RœºÁqXÜ“#,ß{É  ‘'ncÕ´‡ «+cE}&_*€‡ZÖ—½,Í„H9ÔÀ–{œB§ÛÙÙI¹\“údr7 €×yS&@ô×ã‚üi»ÿñzåáeX‚s"@ºT¿0ÓóØ@ÔÀÏÖb€ê¹’ËØ† ˆ×ç^äH^‹ '{7óc¯Cl˜ØÝÝ-œÈds[L~½^’àŽuœµÁ¡z–É^D‹>:×n0¤—b"w<°&PÒäA™ÈØcÁ¸r”½[yÿÐ Ïd‹®Ó~;Ï­ 4´cww·pF&žÁ±ÁÔ~ÐújbÇ|¤—³LȤü"• Ù§PÍbì 2b Žl5g‘Í-l¶*z“ηë|:îÞVYÚh¢À¦ì€¢úµ‡%bl ·Õ@ëpPÚég/À›ÇSl©t8ˆûÆfÍ—»üÝ[Qé“<ÞBvòøÉ-¡´…6˜ò?ßç9·ÓVE“Æ‹¿M|\'€äêœÄæ}±Õ ›ö9äϺ™·Û šzœdlr±w =u˜èÎbRfíbBÉXR/kžië³ïA¶dì `}ª:nÏ¥ó]Ü?ËÉaŒ)äÙq~éŸIíÏ >ÏÞ+Œ)×YúŸ“·‘9cPúæçøùö¶ ,ì&ÊöØùøn:lƉéÈØ'z¹Ï8 þ¸ÞÞKÏA Ü_dc"bo㔇®¡Ã>ñÉDŠÿ‘ý#\½¶®à) /üö!÷K}·ÛMã걡 {è¾Ç•uk¯yï„ï½¼dÈ93.Œ+}È×=úê9Nè;6yŽ cžÏ& ÜG>‰lþ¡ýÍf³`˜b è'} !Þ^?æ9ëîå,ùülüLʤ»æ€o ìÇλ1)µ‡P-BiÜgÚä6¢×è`N¨Ün®7™Ýk,m à‚5“ÎXÏÎÅó677 ýAnÄÇí£^{BóvšdääÔ:‡WÊ¡…ÎaBïhÛææfôûý4«ÕjáÙè¬Oãyú@X‘_*ˆžòwn¢Í> `zúâ».h£Iï^†Ë‚yh}anx½2qàÌ1Hõ€wnìîŽ_ÄŠ,¼.X_¨—07^ŒhòjlƒsË}-•JÑh4ÒÉbx=|Bs…b‚òB% "2)ÏU™„`íÓò“ÀÛôôøm´,ª(l²,è® –7#À”Ýèù;ØÌ#Ƥ%·RÆÀ†Äfë··{#ÈÁYn­¤m€56¾̘¼xƒ¤Ï—&ËRòç{S$ÆšÓš|/}º1Nêt.„AÓîîn’ rüø}<‡>åa\Œm¾¡ãià´,ô‚‚Gx›c®MDÑ[ÿÑI€‡A$}2hv¸÷Qì¥#¤Ëýöç€Û¡S´…ñ‡è¤ Ú%ï½ÁŒEu4Ÿ2fÇÚ͘YO¶··£V«¬³è”½C´ÛD„ùlë¬õ„ñÈ5‘rŒ¼Á8 1Ï‹±'†ç1VŒƒåHX爭ýÕj5ƒÁ%9M¼¯†qAoý¢9žïöy.PöÒQmâeoJþŽÏ9}²õ>" @{/#ŠÃ™Ð[’¸äáuÒãboG*Ó'uˆ·‰%’ú‘ k/†õ{U\r£úÁºƒ9Øø‚2‡ü†{ú^*•¢V«¥5Ý 1¢Õj¥9; §jµÛí=½è2{¾I™”_¤2! û´x!,EDa³¦ØÚ ´扉¶”:F7b|‰ M^Â=”Üò; `Ý!\@ÅŠð2¡ÀªqéËþr‹rD¤¤b62á(Çn·{IÂ32whõNG£QaÃ4P4aÌ=¹wgÚòÇænë/`ÑïØËÚo0EüµûløEkNÞÎìdl¿WDÓˆñ ö ;<Æò30G mÛ݇¹1‘)ãÒív£Õj%¯žA?:G†Ãy˜l惨×ëi £´Ù íâ%tÌp>fh·Ëà½$ݦŸår¹íuzss3jµZ¬­­žg#†Ç"Mñ=^Ó+•JÊ{°áÂÍü¶ñȆÚI?!ß&NöЇÃh4É{Ûl6Ó¾‚.`¨àzÊÖÖV4‚Ü××× }É[£Ñ(ÞøÆ7Æ©S§âÁLë5ë‡/³³³Ñh4’Ž¢#}æòz¾äL¼“ò‹R&dŸo¶XKÙ@8°7„ûùÛ‰•y¸ÿcQt„×¼QEc¸ñtØÚîÍ‘ð[O 8m±Ž(5Êfè$v{ rË¡7B[æb±× T¶Z¸´Ë¥½1޹´\}±‰ ¤Éa &>}†1F?›ÿôôtát,Æ;¢Hêõzê?o!v/ $÷¦˜,±É;<k½€4AÔ Ó333)ÜË(ÉÏ€8dô¨×ëEµZMz†õ·×ëE«ÕJmCï­ãê6É«ÕjI–èš=íâ{~rRµ—· ˯Ajî´e—yaï—eDÛ¶··£ÓéÄôôtê»=%ö\ÎÎΦu‚¹ÃXAhøÛd•PLŒ³È¢ÓéÞn‚ã¶ð·Á/¤×ÌÜ Áܱgo”ÇÛòG·<ÈñGGÑ%?Æ {W˜¬3¬%‘HþÂÂB _e¾­­­%/oýîõzIGìõ‹úèïÜÜ\¬¯¯ÂÈÐOƒvÖ dÉžššŠN§“H>ĉµÌïë°¡ÄcBþÄÎÎN4›ÍBˆc‚'ÙÐÞêÎ|ìv»i¼ kèU·ÛˆˆV«wÜqGüë¿þkºn0$dαÞV«ÕBò;z‹¿Oiâ™”Iùÿ+²OËÖÖV´Z­D‰/f1çÈM‡jEŒ7ÀJDr$"ÆàÜÇòrßC’¼xΡ ÜÿXË#Æá3œTb¯º½u¶ØÑv ­mlàlÌ6à~¿ý~¿`K:º¸ßmA΀!ÂmØð¾1~$2f …“vBÂFìÍÓ@¹Ú럲=LµZ-é àñ¡NôÈGc:D‰~ºým2 #„…þ@8ÐÅf³™ˆš A.Àƒº™è_­VK€=¼EŒ“–í‚LS'²ƒDa©7xÆÂŽžÐ‡Zü2w(è„5÷Ž!_›=DÏS¬ÐÎÃçDgú eìò0{óÎsÎÕ!¬3<ÃáAx"Æ`–1"vŸ{ô°ßï§z«ÕjÁcä¼1ˆ cè÷ˆt:´v +¯ôƒgx ±°°»»»Ñét †ŽìÍó°ö÷z½t^ÄÙÙÙ6kb-lªl~,ø,Ø,ìår9¹åK¥R,..Æúúzºà…¬T*Å`0(€_ƒªáp˜,^ÄÒ~ ¨øÛ–Soì¿"F9¦½1u¸—CË"ÆÉlžÕj5YWßx ؘ°Úâ Y¡oÔMH1Éõz=…Cì°#Æo’f£äùXCíp8 À àØ¡/€R@ËñÜô°‹'‚-úHÎÛÉC…ò$|M‡y@T!ˆql½­Õ ” ÖPtºT*ÆšvÚ¢ p´ŒœAŸ–´Ä GÓÓÓ„þÛócrJx%ÜwÚŠnlnn&=ͽvô2jmÊIGž$…ä0ßÍ\Ãó/ÂÕÐk>cN²–Æá-@—˜_1{Q!36 ·ö˜!KÆ—yAXúÞn· m¶¡qà8áˆHd„¹çü-'ÿ{üì峇Ík2óßÌ?æ2ú†þ [¤&½´PŽÇ ýŒˆd€4ÛÄ=ž~¹_£ÑHkª?k„ƒ1öC?1” êG7¸YÐ&~/òŒøœy‰q€O{÷òH£×è2ŒˆÂ|€ã©™•••¤ÇÚ¯¿þúè÷ûqìØ±äí¡^ÚW©T’.w™x@&å©\þ3)—¥BÙ”±<Ú ¹»»›b»½Ù²XÉ-§¶R{ãìzo XÏ VóPîÇÃû¾^¯§ ¼¾†M…Šÿ±ÓrhK¿ß/È I¡Þœ`ùùó¶¾q½«O±á"ÆÈ.ÿÁ`É2 ° P`‡û0N€YÀ„‰"Vq[ùÝçÍÍÍ‚%=÷~A˜Hì´×c0$ !€Î‰ÐyXª×ëÑh4¢Ùl&À‚.£3sss)w¡^¯GÄ8×9 SÀu³ÙŒf³™@-·!1‰fÌ:È <@ÊÞDúK{<&€;'\ó¹Ã{œsäùf€)E×ð`0>X®=/!¹´ +<^9îE71VðwÄØCä°4€5±öŒ+z€¦Ã`C…-ð¬)€Oˆ9ý†aÍÎ >ýˆ°*Öæ:×R³ÙLs€ñq.›Éë k:ÌÍ…£ cÜx#¥Ý€Gžç‡`EDÚùÎáll@™Ã[œl„,òv9ì9Ð[`sòæX{ƒ¿ÃãǘÐo÷ÕäÐàòÆ=LØâopî¼{ ~ƒ¼é€`:œR豤/ö\DŒsšh+ž'Àˆ­±;ÆÒ@â6z‡<|L)`“öÛ:Îó¼&SÌç[Ø‚Ê| Ìðfoõš“%mÆ:Ïsyº`¢Â½ÈʼnïX¦¹×}tˆõÒGê‡"c[Ú™³è92Ï –ɳßÏây›ë&írÈ)cÌsÐ1ÚaãºcoîÖÖVÌÍÍ%Oϳ·Ç9è²=:u3W|È„²z½»»»qõÕWÇúúz¬¯¯§ºè×BƉþÖjµ”ïA>‰ål`Ï=è;zŒ^rò!ÓÉðИ|8DÕdÏk ãÏþB½ùç‰áŒãƒl¤Á0333ív»p•$®V«Q¯×㪫®Šf³sssi^ÍÎÎ&¯7²ív»…yµŸÊ]wÝú§Zøl4Å[ßúÖ¨Õjqûí·GDÄÃ?¿üË¿·Ýv[|éK_Š~¿wÝuW¼ñoŒïÿûqàÀtÿ§>õ©¸ë®»âƒü`üú¯ÿzÜsÏ=ñ‘|$žyæ™ø«¿ú«Ÿkÿ&å¹-²O‹˜-ú¶6²È² ‡Ãdu Ìfìp§ÜZbÏ–gâÜ XòXnîeãfCÔÙI\¶ÉDÄøÈVƒ À›0ÀÀÀsØÈy¾7d6C‡ñ·AµåHZÎ5ì±ÑûD°ˆb24¡C L@ Ü‘AD$¹#c*[Õ ¥0`²^ðLŠÃ­ µx:jµZ²ˆ0Ð¥<<±#< ç O„¨ÔÔªÕjÁ+·Wè“É‘I/Àˆ¸ò<´ ‹½CÛÂû€ÇB†5ww7®¸âŠ˜™™‰ÕÕÕP}‚U­V‹F£‘ò€*•Jœ;w.fggcaa!%ÅB`è¿ÉúææfŠqG–nƒç+¤Ê^ÆÎyÌô¶ú{>pDžG½Ê6JØâ¯  ƒ[c{"œÃBx $ž¼ Ïê bäðövzÍdBް–{­´‘oÐmë¿É3ã½±±‘,É„tQ—=Hö<@`]¯½ EÈ–=È´™uµdww·pª}r–ß{bÏŒ P&ãŒëœC>sÃ…×/tC”uŽ5§^¯Çììl,--ÅîînÌÍÍE«ÕJÇ3¦Ýn7y䑸ŸÿùŸxä‘GÒ<¢­¬ÌûRé…ÿñ“< ×_}\ýõ…Ͼõ­oÅùóçã£ýhšOwÝuWÔjµøêW¿Íf3""^ýêWÇ7Þwß}w|úÓŸŽˆˆ .Ä'?ùÉx÷»ßŸüä'#"âŽ;îˆíííøÈG>ï}ï{ã¥/}ésÕÍIù9— ÙÇÅçϳYÙZ HcSu‚(‹½L>òP6Ù¸Û2ç0ˆñ—‡¡àý !wó\e6Y€7Ä…˜ÍÏ€šë\‡­‰´ÑV{4h‹ ²Ôáù Ù è${“ž ‰év»i¼"eaà˜¶lLâ:€ž‰÷p­?­V+‘ò†ìbø¤·Ûíh6›k+Þ djðJ;©ÁJ®&1ôds‡>ñár&a„îÕjµXXXHá=ÅáèW¿ßÛn»-®¼òʸÿþûÓ}N'ùë°Ežyúôé6Ož<õz=VVV +:a"„<1G‡Ãa!ßÏøl²ÌX2üóܲ﹀Œ<§øŒ¹g€mï#s1÷¶áur®™½€>%ÌäÕrdžnmm¥$t‹uÂ^D‡†y.ú1²†úÿùÏÇÔÔTüáþaD\ï¯~õ«ñÎw¾3‘ˆˆk®¹&~åW~%¾üå/'òµ¯}-677ã]ïzW¡Îw½ë]ñá8¾ò•¯LÈ ¨LÈ>-Þ¼iå ÄD`ðˆÐf1&Ä›µã½ÑD­êùoÐ(â¬P€=6$‡Í˜8äG¢Úc‚â0(~C ‹Ã‡li3ð¥¿&ÄŸ¢¶¶¶’W‡>"_c—Š_6è2w=Xg}(@î‘¢?öØêˆ<±~Bb»cLlÍäYÄP ÄxÆlÌ9l…B?°äó¿ [./Æöhƒh6›1baa!ºÝnzQd¹\ŽÅÅÅdE]XXHmåøÎÅÅÅ8wî\:t(*•Jœ:u*Úívt»Ý˜ŸŸOÇ&3ÎP,¯GމÕÕÕ˜šº˜OræÌ™”÷‚|n¹å–8{ölq³³_šV­Vcee%Μ9ý~?½˜ÄÿÍÍÍØØØˆ©©©‚"÷l1Çs½fž{nŠÓÀúë?‘qèŸ+äÄVõœ<Û«fBöǵè)Ä’¾níId^°¶8ô†º˜S¹÷ÈK+÷9‘:'É^'™§x+rïÐp8LDjqq1666 ž((Ôá4,ÿ7“l¯[–£‰#¡lÈŠuÒk¦ëBF9ÙðúËu9 ¡ˆaW&”SSSÉê#ž™'µZ-Ž=år9VWWãðáÃqòäÉ´³FD:¬{[;m÷št9Ëå$ ëëëñ÷ÿ÷ñ¦7½)®¹æšˆˆxüñÇc0Ä­·ÞzÉõ¯xÅ+â›ßüfò>ðÀés—ÇÇâÁ|î;1)?·2! û´Ø2È&…ÍÑ›wní3pp Å–nÀ#_·Û-X9ÙÌ\¸½®Ÿöò`¢Ä†J»¹×ýàÙBlxlâlž9Ysø’­ÂÈÖaga3 vî½#d\ëMÜ¡<0D1A³‡Š¾Ø*ÊX9$™¸/<“:x¶É‚½3„†8Èm4àÂ’nù:”…ð®ÜÒìö¤r08¦í¶v’» 8á×_}ŠóžŸŸåååÞy£6ÉÅ«««ÑëõâäÉ“‰„<ýôÓÐ|ìØ±øÞ÷¾—HÈòòr‹z½Ï<óLÒrPæççãÂ… qà 7ÄÍ7ßN'–——S»˜Oóóó \ÏÏÏÇÜÜ\ÜxãqæÌ™F±´´÷ßlnnÆÊÊJ!±<'–9zíñXC ·½@xîÍðÉ`^ Æy¦>ãÐ4E/m©Ï=IÌ«½rµl¡GÿÐ]H€=ÆÔåyc²•ÏÖ4yrÈ|d7ò0‚X{½¦«««Q.—£Õj<¡ÌÏ/ž ñ¶§8'¡ùº†< wý~?…XÚ«‰ê…÷€uÄF‡Ÿæ/Ža&ñÏ7}¤m>âxjj*^ô¢Åë^÷ºøö·¿Íf3VWWcww7Z­V¼öµ¯ßù߉jµO<ñD ‡Ã¸é¦›âßøFœ8q"é÷îînò>AÔ¬G^kèÿ ¡|ë[ߊÿøÿ(|Æ{‘~Zù⿃Á y?".†UED,--]rýÒÒRŒF£X]]C‡Å… ¢R©¤wü¸,..¦º&å…Q&d'ÛÚ…ÍܱÒ,ÆNÂ4à°EïÙXˆÁf3¨wû"â’ >¢˜HI’cĘ@Ù¢J{ÙhmQƒì`™§ løÈä²ø]¹ üš`+3²¢oþ?'°õ•ïð¦ØÓckjÃÍs úL.Üä9A¾Ö‹||˜ÚNÛ D­'ÎCBîœ dK»­À& [Š¿G€gò ¼©gvv6^üâGµZÕÕÕXXXˆõõõxå+_ÇŽ‹óçϧ˜ñápO?ýtzÖ€$…ÍÕD‚·G—ËåÂKó"ÆÄÝäìîÙJ¥Ç¤¹Q«ÕâE/zQ\{íµ±¹¹÷ÜsO\wÝuqòäÉd¹mµZ155W^yeôûýêØh4’î‡ÃXYYIºà9‡œ{ ¶ƒ¾äÖn{Pýîô Ò¨'?ËÞLæ†Á=ãk’bRe¯&º‡N27íõsh}fl˜´7÷Èx¾0‡xa#'Áym žŸB Û^CèºÁ3ƒA,..¦|!{B½^çžcô9y ='‘Ãh4>ú/š:{…[í¢ç1rù¹ÍóÈ8qÏÄ%" š¹]._ÿnww·pB½(¶ò DüÎd€!›d‚$d,iXN¹ÇáCv‘»ßóm…µuyxcu?M`°¦KîÂ&QŒ¹6‰sX }Ͻ=´…MßÄÁ›šL¹ÞôIø‡{ýbF·—þ#®ø!x'ëÉ=Jެå^9“äØjµ)´N@H£ÁºÏQœKKK1??¯|å+£×ëÅ©S§b}}=Êårœ:u*žzê©èt:Ñn·Ó D„Íñ2?dë÷álll¤6v»ÝØØØH ¬¾Î¡L2OÚív”Ëå8wî\Ôjµ8þ|üèG?ŠÑh”ªjµZ¬¬¬ÄÚÚZœ>}:½\íèÑ£Ñn·ÓóÏ;>ø`4›ÍôbÇáp‹‹‹…܂뮻.Y¸Ÿzê©ô"¸\÷3d½Ià$/{Ö¬N¶'2bœÀNû­„]þ$oƒçˆ):äobŸ{½¦yNz­°—"7ÜØ0áúi³sÔÏÌEŒ#öJÙ0€L!œdU«ÕR˜ßùóç ¤Ìr´cµFédAòl!ýe³wÊóÙk†×a¾§>Ë’çš zå3^¸È>‘£¥R)½Ørkk+Nœ8_ýêWcss3Ž9çÏŸsçÎÅææf|ùË_޵µµX^^N/Ã}òÉ'c}}=N:kkk©þÑh”¼J¬¯&°6jåäd¿•ûï¿?î½÷Þxï{ß[ð-//GDÄÊÊÊ%÷ð–ÅÅÅt-¹tà _Ë©Z“òÂ(²‹-€~IUÄ83b¾¸bÓsÀÁ^[øLJÊårá…u€Y[¿"Æ$€â°,žEþ„ûä:/vûÛBnK<ÖJ‡¢ä ÉŠd_ò¨ÃaNön°±9 —qȯãù&s.‡›ä ³Ô½W˜ mŠˆBŒ4Æy9qÈ×ÄɤÙl‘4)r{Lré¿A©­Åè$ß@·¶¶‘ ß·Õsm¥R‰J¥sss1??år9ÖÖÖ¨áù<òHlll$²ÙÚÚJãúúzÁsÈ»Hž››K2 Q`ÖívèmµZ‰¸qÄ0oµ6Ñ©ÕjÑétb{{;–——£ÓéDµZM/åc.=þøãQ._|OÂââbŠ—>{öl9r$8‡ŠÁ`GމïÿûÑï÷“¥—ùuå•WÆôôt\{íµqøðá8sæL¬­­Å‰'’ç…çÁiî©°gÀ$†Ó–ròµžÙO}èNî)³Ñ„yl²1â“õÜÛ àÌÿöZh¯s¢J{ ëÎO°g o 2É=ÌÚÌx8p ÖÖÖ Æ{Y/èDÌF‡k™\ùÄ3Wôî IDAT{3¼Öäë0²q™u…PD¯C–‡I¡V!Ìó}p ×íììÄO<.\H{ÎÚÚZ\¸p!NŸ>KKKqèСXYY‰óçÏDZcÇ©G/ÑQä°f,½vs0Äå,φä'ÕûÓÊç?ÿùˆˆø£?ú£Âç7ÜpCÔjµ¸ÿþû/¹ç‡?üaÜxã‰ð’'rÿý÷Çk^óštÝéÓ§ãÂ… ñò—¿ü݇Iyþ• Ù§ÅÞ‡Üê…M'bœîxpo„{Y£ Äm‰‹(KýÔK]cË`eK9}¡½<Çmã™¶ÐêÙlìÅ0ù0¢XöäDÂuš¤ñ}D– }3028§ØSbTÌøßž@–‰¨ûŽ%ù™\ä [ÁùÐiÒ ´¼½ Œ¡{>‡ßaa€’éé‹Çõ.//ÇáÇ£ÑhÈI»ÝŽóçÏ'Ë1õÜrZ‘ÃÀð +ǹCŒgffá¹öÌ0§£¶Âû¤^¯F#ÕÇeff&‘ŸVE®Õ‹^ô¢8uêTT«Õ¸ùæ›ÓËßžzꩈˆh6›É+Ójµ¢T*Å™3gbcc#–——cnn.¶¶¶â¦›nŠ—¾ô¥qîܹxæ™g¢×ë%˜{²b‡¾XWìIqîß!7tŸ1­T*é€Näóša=q($$qg§øfuôÜGä²Nø!ùå>3QÊûÆøÑ^ëˆyÆSký±!€9åu}G†„Ííìì¤\ < O&Σ˜ŸŸ;ï¼3¾ño¤¼ÏgÆÇDËúŠœ½F¡ï¹çËÞ<]|æùÇX’;qèС8wî\j?cI8-dcgg'ÖÖÖ""RþÈÎÎNœ:u*ºÝnòð}êSŸŠ÷¿ÿý©]œ(gýB·y/HÄE/ÚÂÂBó™tÖSO=ÿöoÿïÿûÓµ¿ù›¿Õj5¾ð…/Ⱦð…(•Jñ»¿û»?ŸMÊÏ¥LÈ>-Ãá°p¦=››®-Z¶^æ  I€_@D‚Ã3½ù¢ ²Ù`øŒÜ6@“$r“î‡päÉŽß@äá¶äa ä9„K˜`ÙrF8í5y¨ÚºfOà­Z­Â`bi«½~‘Ù^`0¿ °×ØÒV{‚èïôôtzoy È‹% ‰£\úædU€  Ñãk¯ ɰ‘N‡B¯!÷OOO§8|¼ ~›1!„?ñ 䉀„Y¦\k+ûÎÎNlll$²U­VÓ{ Zq qÚÝÝ .¤q[YYI§µ-//Çööv¬­­ÅúúzLOOÇÒÒR°ÛÛÛ)dkww7ž|òÉhµZqòäɘžžŽÕÕÕ8}út¬®®F«ÕŠS§N¥÷ <±8þ|¬­­¥ñj·ÛqóÍ7ÇÁƒ㪫®Š|0Ž;+++IŒynk!FÈÙ‰Þ>$À;æžC1=rOºâ0JÀ?¡£Ýn·°ÞíµfðcRÀºà£q 3c}´Ñ™ø½#¬½ž·ö ynÛPàuÎó’gïì\<­«ßï§0;E®ÙÙÙ‰z½ž®‹ˆD@Nž<O=õTš¯´ÑF%ÆYÒ¯£^»F£ñ©…¹Ç—ù‚Qm…$íîîF§Ó)BÁ3}pu†å=©ÛíF­VKsþÂ… ±¼¼Œ7¼á édB¾gnñ¬ÙÙÙxÉK^W]uUœ8q"ÖÖÖa^YY‰Ó§OÇå.—Ëò•¯|%VWW/ñ~P>þñÇí·ß¿ýÛ¿ñ‘^DxÅWÈââb|ä#‰~ô£±´´o~ó›ã»ßýn|üã?þã?Ž›o¾ùYíפ\Þ2! û´°A°™:^ÙÞ 6áˆHq°1??_ ¹ ž Ê–.6[¾ ʉB¶|Úb ÏƹÉ7&÷ÓÖIÚd`+uÄ8‡”ç]`Õ„8ùøQ®3¡‹‡¤X^i éÀI~€Ça4¥)ÇÆó›gÒ?‡•ð<À=ãác³Lù䃭ŒÜÇóI€×µZ­D088€þCpmy&¼^¯G­V‹^¯Wx}»ÝNà5?ëbÍ!¥R)®¸âŠX^^NGÔFDœ9s&Ö××S«ÕjÔjµX__OõnnnÆüü|!ä£\.§—Q2Žèt»ÝNr4Ð2°Žˆä½ñK±Šû}¼·‚ç9ü O!8„÷lnnÆÙ³gãÌ™3ñº×½.þû¿ÿ;cww7æççãÉ'ŸŒh4Ñjµbss3½ý†X,--ÅùóçãäÉ“qêÔ©¨T*Ñn·ãꫯN’^¯<òHšG¶‚;i½‰“g¼9³Ë=ÑŒ•¯qH1ú„üDŒó”úý~ÁèâµÐÞµÜ[155•¶-c€s>x&ú‚®ÓÖ½ 6¬?Î!²1bǽÆ6`Á‡¬ô¡hµZñ¹Ï}.î¾ûî¸òÊ+ãƒü`|øÃ~Öú3)Ï2! û´8Æ@ÉÞ‡ˆ‹› p”i7ºÃ²X¨ ÞÙ4rÏ=Q0Ý19ذAðìåqX4/ž?55•äÙi?àŸÛqÏùšž.ŠåÝo@Ž(&ýs-uA€ò8lÚE=£Ñø(LƲÛí¦c†¶¶¶ /93épèÛÖÖV k²wÂÞ([¤]è;Gf¢xð<`·E”gå^Nj²K;éÉ«îŸÃDF£Q4ëõzœ={¶ðnŒv»]Hàçÿáp˜žIÐ)Ï•< òŒˆD¶Ð}ƒJ@ºrøðለxúé§ÓÑ—·Þzk?~<^úÒ—Æ}÷Ý—ÇYƒ4ÇjµZ\¸p!¦¦¦baa!J¥‹G/,,¤\•••h6›‰\âbü×××ckk+å”J¥8{ölÌÎÎ&âvìØ±h·ÛÑn·ã–[n‰W¿úÕqÓM7Å}÷Ý=öXŒF£t¼t§ÓIs½È½lßÖ®o4…ñço‡'BÊårÔëõKÖ“óR©T #Üï*‡!(#{ç§@N(<“u‚5“5‡5’PCÈ?F禠#>±ÏÞ:‡íììÄÙ³g“ Ö×× ákÌÖPòŒVVVâ?ÿó?ãío{¼þõ¯}ìc±±±‘æ4sÓë‘ÃÃ00?XcrCóBdã‘5£Ñh¤õ£Ì5×\×_}üÉŸüI<öØcñw÷wñðÃÇúúz:t(8>úhê¯ìÌY{[ÐYæ}¥R‰¥¥¥8pà@úŸPG¿·ÇF<öËYž+ÈO+_ÿú×ê5·Ýv[|ó›ßü™ê{Ï{ÞïyÏ{þ¯Íš”çy™}Zð"ØëÁÆÇæ’‡$ä§§§SLúÎÎN²¼ú<{‡@PmXš±8 >ÊÏeƒx:$ ÕÏÉAr#"æ™™™84¡‰ˆB}€êt,:`–M°h‹ ¡ ‘6BŸJÇâ÷® ‡Ãèt:ÉóÓh4 =a9XæQ€ÆÔ–h€þÌÌLJ~†$âÉÀïpÚøNÙ°©ý¨×ëÉ* Q¢ï•J%%wF£8pà@ºßÄ[^^Ž[o½5:ßûÞ÷âÑGMá%è/2À¬­­ÅÕW_¥R)Ž?ž@DÀBŸ#<1SSSqèС˜™™‰õõõX]]M`¢´µµ•¬ÁXË¢ÕjŹsç¢\.G¯×‹©©©tü- µ^¯G»ÝŽˆ‹ï iµZ±¸¸Õj5–––âá‡NÏ»ù曣R©Äc=–޵†TqÄïË_þò˜ŸŸõõõ¸á†â‰'žˆsçÎÅW\óó󱺺ý~? Üëõbuu5{J8Äq{{;²©©©xúé§£^¯ÇÃ?gΜ‰™™™¸æškâ†nˆn·?üáãäÉ“…ch»ÝnòF¤Ñíˆñ1ÚŒ% –¹É çX˜£üšÍf¬¬¬$ï”=Ýn7šÍfò(öz½xÝë^WxŸ D ÍcÅZng#cO¸ò†8ãÙƒÄ@x ˆÈ~{{;NŸ>N'>õ©OE«ÕŠ—¼ä%Q¯×ãˆ^¯—t‹µÙk‡ÉQ³ÙL^—^¯£ÑÅÃ#F£QÜxã)1žïÖÖÖbzz:æææ¢T*¥Séx)iDÄUW]?þñ¦ýwR&eR&dß–Ü¢ËÿŽÏØcE%T«TºøîÀ–FNÓÇ Â~“,²Ãºçll:ö.°íð©=c"0;;õz=m~NVåemlF€lúJ3ÀBž‡ÂÆ‹¥”p¬¼#,ý~6<!® é½&lðœnyp(9!333 ¸l#úGߨÛÉ÷"êsÖ{Ú›ššJ›tÄÅdÌùùùÔ~<3ÏñÇšyðàÁ˜åååB¨!3„2ŒF£xÍk^+++ñÔSOÅñãÇ£Z­F©TŠ………¸þúë#"âÔ©Sqå•WF¯×‹'Ÿ|²àµˆˆX]]M€pee%<˜ú²½½tîСCIO.«v»Õj5Fß¹¹¹D$Y ±´´”ÀuĘŒmnnÆÂÂBìîî&Àçc¥ûý~T«Õ˜››‹¥¥¥DÆÎŸ?qðàÁ8pà@œ9s&Ž9×^{mÜ|óÍqøðá8wî\ÌÍÍÅáÇã¿þë¿R>Ë÷¿ÿýø³?û³8~üxœ8q"^ùÊWÆ£>ëëëqõÕWÇ¡C‡âÌ™3 \’Ë8___¥¥¥”+›ޭ„¦=óÌ31;;›ŽÕ}:Í÷h6›±¾¾žÖ1ÖgäKÛ¼N=z4n¿ýö¸ï¾û¢R©Ä™3gÒ¼e­êõzqîܹ˜žžŽ#GŽÄÎÎNœ?¾°^?Êåð€LʤüoÊ„€ìÓâ ”Þ!?lÜXáóͰŠu˱Áƒ“¶ölÞˆ"Æ!<ãØðˆñ)MÔáÐ1[ i/ ÀÇ“;Bèbƒç™ô Ÿ]Û†R©”Þ³@{ðîxcÅ*Š•²Óé¤P/dŠY: #¶=>ƒÁ Åk7›ÍÂ)4&I·|ü8®ÓÞ®ˆHž(d1~Ó=ªÙlF¥R)<<2oxÃbjj*>œ¬?þx¼øÅ/Ž~¿×^{m,,,Ä~ðƒX[[‹£GÆÚÚZ¼þõ¯v».\ˆííí8tèP:ý浯}m¬®®ÆÓO?§NJcÆ;/Nœ8ý~?G¨Z´»Ûí¦P«Z­Íf3…cCÙÞÚÚŠ#GŽÄ`0HÖσ&²E®Èüü|Ôjµ(•JqþüùŒçææâèÑ£ñè£Æììl\wÝu)|g}}=É‹§n½õÖ8qâDœ?>é('öìììD»ÝŽ………h·ÛñðÃÇ}÷݈©©©øÁ~õz="":NŒF£øÜç>oxÃâÚk¯v»+++qÅWÄc=×\sMôz½”ÔŽ~bÕ_[[‹ÍÍ͸páB:t(†Ã‹ï  Ñn·£Õj¥0V«•À&uÞ{ï½që­·Æ[Þò–Fñ•¯|%‘æD­V+„!¡ÛÌQÀ«=²öª:wÍy^ä:AÖɯâ7Ï'¼pÁsÁæ¦ßi¿ç© ƒCX7¨O!Gáæ†•ÃTyž ‡µA¬:N´Z­X^^Žz½žòtºÝná­ëοét:±¶¶–—Xw½–™¼3N¼Ðö3®»n·[ðAÂ;N Åë¼ñ~ò?{†CØF£Q?~<šÍf2t±–aâ~ ?èG¹|ñðƒ£GF£ÑˆÁ`.\(¸:§NŠóçÏ'"|ÅWD³ÙŒ'ND³ÙŒC‡ÅââbA¦—³ÔqÝ´n#mŠ6E¿ÄE?Ô ´ŠMòÁEã´@?%Aó¡EP´HP A×5Ú:vT[QlY–byWÚ¥v—Kî.—Çáœ9’3óÿ@ü^óJ©-ÉòÎ,v—œyßçü\×}_÷ý\ mK¥Rº~ýºFGGCÇÀÀ@ð.öšÍf˜occc*•J¡!ÍXé™+xR$…l]êv»ºpá‚>õ©Oi}}]«««!ÛmBêçÉ ØO¸Ã%z™¨¯K>Ëßî©cNp¡àÙIë’½ÐÊþÁ;]väÏÃÀ~Åz¡žî¹`Ýa,€c¬!ž)JDØÏ”áÙ`Ów¬åýý}ŽŽjnnN‡‡‡a8ùb#•ânšF£Ñ#;¥ŽÞŸ´™’§ªæ÷ì…¾ÇJ F÷pA¸C6=éØó†×z¹4o?¬ñ|>¯@4]ÙÒüü¼âñ¸J¥’æçç•L&µ½½­ÑÑQmll¨ÓéhzzZ³³³ºwï^L’yäIÒöö¶T(~(H¿ôË{©ô ÈCZ8L9 Á*¸csÆP`Itë¼oøe·Èc ”N‚|£–x@€)ÀÀå_H¤Ž{x’zÈ €6b‰sB$õÞ~ë±2^ÚÊÏx—×@Ó‰DBõz=%2È ,'‰<“zb-X8!âynAv©ÝØØX Ìå#®-ç’»D"¡Ó§OYÄÄÄDȽŸN§õÝï~WÉdRårY¯½öZ »±X,XKé¯ÝÝ]u»]moo+‘Hï²-ÈL£Ñ¤7‘H $¤ ÙlªÑhk0ó²=88âH«[,U(”J¥T(T«ÕT©TT«ÕT(´¹¹©R©Ô#ScÞµZ- Åb±Ü?‘å'•JéÖ­[AVE¿ ݽ{7ù|>¯ññqU«U•J%•ËåñæáiÔ®¯¯ëþýûzñŵ°° ½½=mmm0899©x<®„½Ùl6š{ ±EÈËår0J0G¹Õ‰i\¹D-?ä…ÔÌzå•Wtþüy=þøãºté’¾ñoÏ{ëpéÿGîÉÚõÖ—è+—L²Žˆ»Êd2xŒsRé±hÄÊH'©Ä%o€ïî½to0d…˜#Œ6¼‰{&R©TÏþäžkêBàÿÐÐΜ9£Ë—/ëïý½¿§Z­¦ßú­ßR,Óîîn!9'{ž1<«S'Bx½êõºâñxÏý*,ø<{s†yΚÑÑÑì€ó1HÞ×} NŒéáá¡677ÃØ³· +›Í*N‡x2êéòå˺yó¦Z­–îß¿¯ééi:uJ¿ú«¿ªßÿýß×½{÷B¬ ë ÃÂO<¡»wïjooOgΜù9’ ¥ïé—÷R釴à–[–|—N‚Ž=Ý#ÖvéĺÅAÍ¡Í!y,PgÀ[2XÓ°Xr røÌ½ð /î.Û’NR¸z.´›ç;… ÑvÚ ˆøÓ~e¨#Éq7Ïu@!kþÇïƒð¾&大åôX¬óø€+.¼Ãª8??ÆàܹsÐØØXHIyõêÕkªË=xm¬×ëÁò˜¢«ÕjS,Õ±X,¤höæNçø~ŒK—.)NëÕW_ ªÃÃÃ"ÖÉ02¼N§‚±Ïœ9£«W¯†[y'wh¸\R¶]:ÖêSŸÒ;wôÆoh||\ÛÛÛ æóùàÝB·çÎ`ÑßÛÛÓÎÎŽÖÖÖ€­×ë {¬ÒžU­V«éÖ­[ KÇÒš7n(“ÉhkkK###J§Óá’9€g,vûT(ÂEŒ###š˜˜ÐÞÞ^™\LYI&“a^âe"îËã õ|@¥RI¯¾újÈÐô¾÷½O?þ¸^|ñEU*• …r£„ƒvA¾¤“ËÝâï@Ÿù !a?`.$O­ïGì ÞßW<Þ £rNÏ(È~M=ìiÈ=&Ì÷&÷øº!€çúžñÉår=ØÙlVO=õ”Μ9£ùùy­¯¯ë‹_ü¢–––Ôn·ƒõÞÓªX,”ï¯xŠXƒ¬±½½½àðØ?0(ù˜@*ðö¶Ûí˜Â=-ÌÖÏd¯ÃÀ€§ÉåÈȈ²Ùl¸8Ã…Ô¡¡!}ç;ßÑÊÊŠÊå²&&&´²²¢ùùyýÞïýžîß¿¯jµ<½xÙ·Iêpýúu•J%õK¿ôË÷_úä!-€R¾{ 88¥^·9  ð+ÜdÎóÜ“æàDæÃáÎÁÆó€<·ŒQWžÃí¶èï=¸gP/¼×³Æ {pù„$êAÔ¨õ‚¸åRRÏÍÛ´éDÈëî–MÚïÁ÷ôK&“Q§s’̽RJ@`_R°¾Çb± HÀ;544¤B¡ ùùù`Y'p{yy9¤l廀²îîî†1tÙ `‡y ¡/±p2‡óIÒ­[·”N§U¯×ƒ÷ÁA{œðXm›Í¦šÍ¦¾ño T·Û Ïg®Hê‘tLU*•”N§5??¯7n/DRÙÀ#㲯¯Ç8yg3Y´Ïû)P©T 1^ÖH<q"‰D¢ÏÎΆ8¥ÉÉI­¬¬2åcÒnßrtt¤f³©Z­v‘ë èë_ÿz³lmméàà@¯¿þºÎ;§~ðƒºwïž666T,ÃzÆbN,¤ Ùä bîZú}Ê­öüÜû±Ùlöx@¾ô­¯ö&Œìc¾×1¶ì¡Ñý‹yé{"?L»1‡ßþ=fÉÛšÉdB–¸¡¡!Õëuݹs'¬åO|âZ]]ÕÊÊŠêõzÈÜE=ÙCÜÄ¥0¾HI™·Ô‡¨¿Ïã·JbÁþ‡” ¯ãE9¹ŒåóyU*•ž8Åt:­T*¥\.Rù²7³wt»ÇÙÔ‰„‰„¶¶¶ÔÖÖ–jµš¾ò•¯(›Íjjjª‡àv»]Ý»w/È*%ibbâ‡ÂKÐ÷€ôË{©ô ÈCZÜZè@͉ÖrÏ€µÂa¹æ÷<Û=ªù>ž·˜zÝ8àÐ99¸ÄÀ!ÅÁå^—3y6+á€pD-yȤ¼?¤9Q ,(¤V·6º—…T«XбTûàZs^^,·nMæ:dnñ'ÛT³ÙÔÚÚZŠmllp‰¤a`àø•R©ä:¤uà…ÜÄ-¼Ò1€ªÕjÁJIö(êâVc@h·Û ±%Œã@l ä ‘Ëå”N§C ÚíímU«ÕžìKÌ7¤=Øÿ,pwwWŸûÜçBß[­–ö÷÷ƒ¶@`“Nœé·úRoæë“uãVbþƪë^B›¤@ä\#ÏÚL§ÓJ§Ózüñǵµµ¥ÝÝ]ÍÎΪ\.÷X˜É¸688¼©TJÃÃÃ=÷;T*•gff4<<¬••ÅbǺÿ^xA333šŸŸ×©S§tpp W^yE[[[¡Nîísà{È[­W—‹²ù~‰Ç;I_òÙ¨‘ÅIï ŽìƒnlañõtÏ2^¼‡Ñý˜µÁœ!ΆqtÒ‰LÑï7Z]]Õõë×5<<¬©©)ýØý˜^xáíîîO¬“}Ö!ã;<<è+ö%ÖžËC½ŸiK"‘Ðøø¸NŸ>­«W¯€êÒ IDATªV«õd˜óùê{?‚Ë}ïÃ3733£z½®ñññ3‚…u/ÿÓ÷˜ß½{7ñ‘‘e2ÍÌÌhssSF#ô}6› óaxx8È5û¥_úåû/}ò?œÝ ÷VÞƒèA, •Ëù€Y>µöû³£^À‡{büç›Í†8æ3›>o·Û!›‹úŒaT:HËf³*—Ë!šû:&&&ÔétT©TT.—€ {˜=, êŽÀïñ÷C\ñn Ùö[† ÆÛ#)d—è†`pæ ä‡ö#íévc&îÝ»§b±€ž[Ç<»WÏQ?Æ”ù—>W€2FüÌç.óß=hvþ>þÏüò æ^7Ö€H¹\Öøøx ãñøñ Ñܨ^.—Ã= Œ/iX¹ç²rppd0Åb1C¼%‰DB•J%Èí*•ŠÖ××5??¯'žxB©TJ÷îÝ Ò:Ÿÿô«Kª N8!ªŒ•'Ópã ë‹âû‘“FÖ³{ÜÄ!´Ûípû6u%ËI&''uêÔ)¥Ói½ñÆaü¢÷œØ3ÿø?sŠ:à‘cŽ2WÜãë’©hŸÑ&ßY³ì‘|±dÝñ7º¸ÄÔ=SÑý•w3VxJüwxn™?Ì;>¿³³Àów¾ó]¿~][[[*—Ë=ž!—¡ú÷ý\ðø9Ú“H$ô©O}J¯¼òJ˜ë¾yûtíÚ5}á _tÃE¿áÁðû;Ø 0fà8::ÒÔÔT n"oç"M<³Ùl6Ä„´Z-]¿~]sssêv»zùå—uéÒ¥àA&6æîÝ»š }€gˆsbttTÙlVzä‘G~(‚Ðß.H¿ôËÛQúä!-Æ~VÔìDÁ­Ê–PNO™è`p…u^ê½yÝ­†n°9ÑMÖ%ýЦ]€2'—'6ܲè–K—H\þDŸ98äó.¡þуÞÛåÀÒÛåÏ + uPp`â9pÐÇuîܹÐ&$ÜM¿x\ŒÏ4ëÜÉAP÷PÆ áä@g Éd²‡ ¢Çã!v`à8VåÌ™3Êår*•JÀ’­‡¹$)¤ö9á€Bé–mÚ•Á1ŸY o57èo÷Tøîñp9— }ô£Õöö¶–——U¯×511¡ÕÕUmnnrÊûá€UÚ!u¹×þþ¾2™LH/ì7É»^ž>3ï?öoµZóþÃÃC½üòË!fâ•¶Ûm•ËeŽŽ*N÷xñÓ(ie|ßÊbͼpòîÚã.ü¾ÆÃ½g¬GÞÏ|…|ÐG.áó÷0Ÿs›ÏWÖ’‡;Ã{ìÌYJ³ÙÔØØX¸“%‹… ƆùˆF¿^¯÷\T×h4BÚßd2ù&V»}œÅ+—ËéÂ… :}ú´–——CÚg72@$…õÀšâ’:€´§îvÒè{!mbÒgÌ7'ÿxwÜXOêè{…¿Û Q™äááaÔ'ÆÂ ^ú¹¤jˆúÒ—¾¤R©$vÒIZ`÷h².ÙÈE;]Zq|þùçCb'ì>÷égÒ.“°ÉT»Ý„$‹¯†Ž\.§|>¯õõõ0¾$KÀðQ¯×ÃÍææÑÑQåóùî:—Ë…;wZ­–uóæM­®®jrrRét:xè0ÐÍÍÍ…ù%Iù|^³³³Aº¾¾úùÝ.}H¿¼WJŸ€<¤ÅA‡trè:øå€ñ Àärˆ(8ççHe8p9ÄyæÑÑQ¸\‹ïðN· èÝSáY¯šî}p‰…ƒG@Ž[,y7 ÌãamÞO¼ í5Vd?ðÝ#°xI 2þíVy·Šó=ž¬$ê |Æø›ŒH?þ¸µ¶¶¦ååemoo«P(èÑGÕÒÒR$ÅJœÉd444ÒïR@´²+!'ó˜—èÉ `íÞ?ï#¤!žÏ ÷x`íf.;a;<<ÔÎÎŽ²Ùl˜·Œ¯“H£ÇMt:žÛ›}l™ëQ`µ¦3†ÌkêåD`åïpýèÿ7íôùNL†ÏiðÑ}osÒchˆ/qR¼r‹”¥Õj)™LðJf4æ¤Ì»kµšÊårè“V«¥¹¹9=ýôÓúoÿí¿iuu5x1¨3ï¿·òPù<õDÞ×Þ7ì…ëþétNä…|ß÷U¾ïkÚ>™;ív[+++ÚÙÙQµZ ë€÷º× ãŠ{QÜÐR,ÃüaO‚4øó¨gô€t°§“¼Ãç§±ü{Qächh(xÒ¤c/ÃÈÈˆæææzb[x& eeEñx<ìI._es¹\Ø3ð¼¥R©ÝmbbB·oßÖ“O>©D"¡‘‘år9u»]ÍÎÎêÊ•+ú©Ÿú)ݹsGÏ=÷œ¶¶¶Â}I±XL_ýêWC,]­VÓÆÆ†ÞíÂX¾Ïí—~ùA—>yHKT¶àÖT—w 83<ý®Š(ðK'²žÇÆïÜJO]=Nø‹«[£ïô€HÚÏ3„‚ø.ŸóßӜހ^'lÔ3JÒÈÂÓéœÜáAÿ<à"Øn·¦ 2—©¸•9R¡Pm¾}û¶âñ¸fggÕl6õ /ÒØn·CúÍýýýFŽô+Aé~O‡¾K˜œ 0'‰DŒƒ~Ì „,<Ôë+þv»­›7oÂÀ|¥®Þç✘BjD€¨¯K›I=2*—Îð;÷>0— ÔÌ› íîE„lRêàDŬ¹ìßq@á}Äx0n,šúýýý`çRBÚ‹Å4662›%“IU«U …¹ÀŽï@pûàyC>Ôjµ4;;«gŸ}V£££ºvíÚ›¼ ¾ÞËîq R,'|>r¯²€ºh\âècMXðs'oÌWÖ9Þ±ž;cÈ>FŒƒ·×ëÏç{>w$õF7‚¸§›gùì25Ö ãÊ{ðP¨û{ƒñ†ðïNç8Æ£Û=–šíïïR­Vµ¸¸¨d2©ÍÍM­¯¯‡õÇÞÄxNLLLŸ.,,hcc#x½êõºR©”2™Œ–——5==­T*¥oûÛ!£Ûµk×ôÄO¨ÓéèæÍ›ºÿ¾†††ÂmçÜ¢Ž1™L*ŸÏâÓ/ýÒ/ß釴pPzúS·ŽºÝ1Àív;X5]RÃa ˆÔ^œÜð·(aÑv™‰tm.}@B€ÌÂA¯ê P€¥“·öò3$Dtx—[y/–QÚàÀÀã=4àap Rˆø>®+W®¨ÙljwwW­VKSSS!ÇýòòrL1.NG“““pbõÄ#å–Zäéééyiàmdd$ŒŸ[FT(T.—HuYF.— cìv3þôÒ$<Ì7ú³\.‡\þîˆÞïÁ³ƒÈ@”SúõÀàÝ€. kÐ))€bæ&õGHF%}>ŸÝ£hì¹lÓëír0óy¿œuÍséæ²ª\.ÀõR>ŸW"‘P±X ã]#N‚¨K§ÓQ©T񮮠vvvtþüy=ùä“j4ºwï^!£Ý¤YoNúØÇÞÊ;äÀØwÔ³T ©!¤žþ¥Ï¼ïø³Ù Æ÷¸´É?ï}â˜XìDb‰Ä4ìCN®¢úÇx°7C’>®³gϪÓéhiiIÓÓÓºvíZX‘Ö8—Ë©Ñhôd¬*‹J§Óêt:!^äþýûaý ݹsGCCCzðàAH×Ýh4”N§µ··$p\öÈžá^øw»ô= ýò^*}ò–hŒ“ku£R¬_nE¬¸, ÎÜë1á`ôÀO¬epÉ÷˜¸e‹º|ÞÁ¡ê2 é$×µó<ßo¿ àA]ép"ñ:<<ì¹ç€ ÈŽz9 †(î-pÕëõ@°HŒŒ„gÒžB¡ §Ÿ~ZFCׯ_×ÐÐPð„¼ôÒKÚßß×ÑÑ‘fff´³³£f³RprÑób½c0W«ÕzH [[;Žöööœ€lþÒ鴒ɤ&&&zÔÞÞ^ˆaÜ N,éGF…¬¹g¢Æ8C”ÝSá1.d^“¡Šyá4cäÞ(æ5sš JžõàÖh—ÆDI2 ÐÁ¢§c(ñyÊ[øŒ{(ñ†¹õ›zA¹#‹x³y|ó}>Ÿ×ÑÑQˆï ŽI=É |Ì ›±Ø±T'—Ëé]±XÔþþ¾¦§§õè£êk_ûZè/¯»ƒrÖëÏÇ) “»¨Š=‚ŸC¶!™î5ôï8˜GÉþ øöK5}ïqcP”P±1ÿœ¸8i¡ÜË„DÒÇ„>GšèÉ,hõp°Ç²/@ ¸”õ†é]6› 2¼<ЩS§Ôjµtþüùàíyþùçutt¤ .„1®V«J&“:{ö¬ªÕª†R©”nݺ¥±±±pÇK­VÓää¤677C=é›J¥"Iš™™Ñ©S§![ÖÊÊŠOî°ÙØØ—V«Õp {I³ÙÔÜÜ\V7ËÛE@ú¥_ÞŽÒ' qáàõà Ðã² –fÿ½Ë¥8ÜVÜ´Ìáî2‚V-Èq8Ð=“‹{,uù•k•¬¸ ¨t¢S¦}®'Ö9„·†ò|éÄ»â–K?ð$…Û°]Î#ÜæËÏ3Äãq¥ÓiU«Õ}<€””CCC!Љ…``@‹‹‹šžžÖk¯½¦µµ55›ÍpÃÚÚZ ív[kkkJ&“J¥Ra¼=e1õ#XRyt Þvuvpp f³¼'•JEgÏžÕÚÚZ¸¥ybbBår9ô; /ú^æßÛâà`J ò1¼K|ß½i\é$ó}C¿à1p ˆ„ / q ÑØ'î´Ñµñ^o'_æ8uué˜g¤óµâsÓcFX\PI›}¾B>ÜCH*^ÖT¡PP&“Q³ÙÔÞÞžªÕª422¢F£ÚT(´··§½½½Z‰DhO«Õ ^Áááammm… àééi=õÔSzî¹çz¼¾0O:ã‹õü–z—Ô¹—€~b]cØ —ï¼ëîub]ð̽½½žD È­h3ãK=! qÞżcÎCÄØ3!Ãìyx/Z­–FGGU©T”J¥‹Å°Æ1¬0¹cƒz¸ç¼Ý>N¯L¢Ÿ“ôS.—ÓÙ³g599©ƒƒÝ»wOÝn7ÜÁqæÌmooëÒ¥Kºÿ¾b±˜òù|}êÚµk!ŽìîÝ»ª×ë* * Á³133£x<®¥¥%MNN†u022¢‰‰ Åb±åoww7xE …‚J¥’ …‚ƒác||\’B M<W©T $›5ÉüûQ,}RÓ/oG釴`ÅAÒáp׿K@Üêꇸëù£÷qðsߤ90±|GžË¶ð v¬Å~^­V{tûná$8¨m4A&Ãp)ß…èaå•NR–¢¯ç¾Z­,ÄxÆ©í4e2moo+“ÉhzzZÃÃú~ýº¤c‰ÖÑÑQД»ôhddDÃÃÃ*‹!&Â144±_ÞHà'ýM0,q!hý‘´Ûí`•Ïd2J$Á ùµ¯}M;;;ÚÛÛ €ýÞ½{=cÅÜs+µƒ-IÁä Œ:ìï²)I¨µÛ'ðÏ»<ɽ‡î=ˆÇÓÎ"YcÎ@„ñ*¹œ‡9L2–túŽ~Œ¹ež9ÄÏ ðŒNç$抹‰äѽ)|ú`xx8\²FLßå^dį®®*ŸÏk||<¬—ííížØ±ãŒHCCCaÝ0?ð´AŽ2™ŒŠÅ¢T¯×•H$Â6ûØÇô­o}+Òz½ȺJ³Ž\z…%“{XëÔí±.§£O’Édøœ{6Ý»†Ü’Œ…± ˜o\2˜ÍfCì‚hˆ«QÏ\Çš¨V«Á“»··§áááÐ/NdØoY_ìCk“L&U¯×Ã|Ä 1882™!u‚¼ (—Ë)™LêÁƒZ[[Ó‡>ô!% =ùä“!9„`llL…BA7nÜs.NkuuUñx\ýèGµ¹¹©ýý}ÍÎÎêÆ!+ã¾±±¡ááaMLL„¾ËçóÔòòr 재¢\.‡3£9Òé´677($XýÒ/ï¥Ò' i‰ÅbA»,éM€ÅQ¥“ìL.[ àÀ<>Çó¤"ôïu@–㞀›ëí]çM=ñ¶pÀàyq‹!Üê ér)ÉÀÀ@OL‹[„¥“Ëö\Ž‚'Æ=6’zHÄÂÓóò{¬ÕxF „€¯¿Ëϰ`û3FFFT,µ»»«ééiÍÎÎjffFßþö·µµµÈ™bjµZøã@(—ËÁ* qÀ⊂ÿL&£ÃÃÓ>èd2™Ð.æL,Ó_ûkM¹\Nßþö·u÷î]Åãñàá`¼ý}Ro&!ˆ_&“ R²xü80䉠QI= ™gº4‡yî·1»T‘9*£™™™ «ÕªJ¥R—ЋeŸô´ÞïnùG¢U.—{Ó=Ž€ôȬUæˆ{d|I' —ö@Êc±˜Òétø댺zêUIa.°œ|ô©+ñ³³³!&P<88¨|>¯µµµ°Gø|cž!ãÚÛÛ itÏœ9£ Õj59sFÙlV‹‹‹Z^^îIDàÒ<êÇÜK&“!xÁ³¹¤ ÐÞn·Ã½ìwC†ÁÀÁ(c€ÇÔ×Ïõ5Ϻöÿ;ùŒ>Ç {¡§æ…°@Ä™—ŒßaÍ2Žd÷ê0Omá¥tÏäyzzZçÎ AÚ+++z饗422¢Ç{,x"æ/AãŒW©TÒW¾ò=úè£Êçó* Z[[S>ŸW©TÒÈȈfffT«ÕtïÞ=-..†ô»âÊöööT«Õ‚1`hhHårY•J%¬=ÆÐå©TJÅbñMñ6“““!™‚Çã½[åí’`õ= ýòv”>yˆ <ƒÇî<·¹[þ£ Ÿ,N®]–N¤ ¼KŸÇ=Š8¨ÑL;Pt "ž± ¾¾»æÞcSx6€Æc8;ní\xýÜkõ”x» s|޶ÓF‚ð‰%á;¼Ó­÷ à™ÈÐFÏÎÎ*‘HhjjJÏ<óŒ^yå•pñ}@?aõGf(Ëd2ÊçóÁê7!‘Hôh¼9l!_µZ-XM˜oÁØà…V¥RÑïÿþïknnN›››HaõfléŸWô1` PÄ\Pñ.'µŒVLoßsÙ{@ø`ŒËGGG%gÎÂc”  * òêcNûf´ŸgPg—Øàµq/—.’0íß§žÌ?:¤±‚»÷’µÎþàsÕc’677U.—µ··§ÑÑÑðy.Æäò6ú£V«i?ÈyV꣣#­®®†ßÎ{ì1ÍÏÏëæÍ›zðàAX×>÷|ü» Ö3íuR‚'ˆßñ ŒÎ<–ˆ}9j·{’"ØåRx7P0‡}ßÄKÁ¿ ˜F®É2Ö ó‰q«×ë={ýÃ8ù3ñŒ1+•Šƒg`ppPþð‡Ãó‹Å¢nÞ¼©µµµ`|˜ÕéÓ§õ /¨^¯kqqQ«««šžžÖêêª~üÇĉ0Ÿ¸{£G¿ôK¿|ÿ¥O@ÒÂaâ™Ã3‹[9X¯.àbwK–G@3žÿ>@PDáГÔósˆCôsdnáÙ€m×¼»D `Ãw!'ô à  ár5'/´‰ïüp—Ô”=Ó‘þô9ïtðŠ\B ÐåË—µ··§o~ó›ªT*šžžV©TÒööv°¼~¹X—Éœs¹\qdœÜÖé¥;aô¸5Ûív \OróæÍž$Xa‘ÁD‘Hy¬õb~:PóåR#ÚàÄØ­ÞÞ—þ{H?ƒ” Cö“ÏçÕjµ”ÏçU,0÷ñÅÛäëÉ=\ô1À‡¾dNy@»·Rëq èòù? bæDŽBýh·|ú O¡“Eæ½$¥Óé 1BNÅÅ„Xü¹²Õj;88¨l6<Œ´ggg'è÷gff‚ŒËôÄÄ„~â'~B?þ¸>ÿùÏëþýû¡.Ä|ÐV÷Ò:9ƒx0Yh§ÇˆðÙh|™)x4M-낹³¿¿â+|yl‰K.©+Þ½vûøòF¼KŒ õaŽyLÜààq5%$˜ó8g]rnàmæüÈf³ZXXÐÙ³gU«ÕT(´ººªëׯkgg'Ìãn·«T*ÐGFFÂíâÈìÖ××µ¹¹©ùùy]ºtI[[[ªÕjAr–ÍfÃ^J\Çööv¸Û¨T*)•J…‹oݺâ9ÜÛ$I<ÐÀÀ€fff466¦Z­‚̹2¿½½-Ianº¨Ùl†ûC~ÊK=ú¥_¾WéËn‹× IDAT‡¸D‡]^ä(‡Ÿt| aÝ”NÀ–3wïS<ÀšøOêÒ@ïN²³P7€ ÝA>uŠÊ\6µJC*\òC6êë-@ °´ºFÍ÷ ;€ºD"‚sc±“L;NZ›ÄX mH§ÓJ$ZXXЙ3gtãÆ ---rdLæè±¸»÷«)­Ç ` u/žéär1¡R¯®ž9´³³ÆŽ6{JåF£´íî…ü1ŸHëÚn·pK2àÓõàN<Üb줒¹ì^®(™`.¶ÛÇ·wãðñÞX,ÆÄ=Ñ9ዹ×ö0Çœ@»ôàÈx{ÿ1ŽþoÖ±Çh¸ç‰yL¼ñN– •’z< ¤gå¢È|>æ^«Õ w²¸ç•`o'%ÌïËr¹ˆÿÊÊŠ>ðèòåËÚÜÜ ëŽ~b_ÁÀ¼p‚G»‡“ŸûÿÓé´Fð˜Ñ‡ô¹Ç«ù»W=4¯QÙ)…yç^bÊ<ˆÝÓQGç–K\ñz+•Jigg'x|Ïe~¸Ç¹NÛ§ÉÉIé7ÞЭ[·´¾¾dÔ‡~}ñÅuõêU jttTçÎ îììèùçŸ:N‡€q<óóó=’´d2©µµµÐwÈ­ˆ3ÙßßïÙS§ÕÕU9s&?!Ú©T*ô s›ùŒŒ‹¹ð£Xú¤¦_ÞŽ2ð½?Ò/?Š…Õ%Ò‰¼ˆ˜ÃŽÿ#ÇápŠ^Àäò)—!9™¬ùegüνøø–Z?´A꽕Ý&‡¯ƒ 0u@sÂaL8˜¢/öz¸· @É;9h±PJ'Ù¹\ö ÈWHã‹<‹Í—^zIÕjUårYõz]ÕjµG‚B‰Çã=)9‡‡‡ƒ¦œyàcEö~)L2_¼ Òq0uÀ­ËØ\j‹Å‚|†¿9ø½üg€rêÁÀº•¾•TÐßYt©Œg€ƒ€9yf>5›MÕëõàéqPÇÜvk²¯Aæ²Q=ÅûçùÚcíÒ'‡‡‡!3ó„¶;¦ÔicNýIËZ¤ÿ©k:î‰7Ùßßd9?NPP,ð&éÏ`>â@úÇœ«×ë*‹Êd2a]e2ŽŽjjjJ·nÝÒw¾óž¸êâÞéÄ[Ægè[ϘÆ{k_»<‹Ä~¦ï[ô{_ø¹Ë/ÝÃÅÞáûcL= üÔßÇŸ˜ž9¤}…BAW®\Ñ¥K—ùð@sþæyþ{ÖG³ÙT£ÑÐÁÁÖ××õ¿ÿ÷ÿÖÍ›7µµµöæug?ñ5²³³£üãÜâñ¨Õjá¬Á@×4—Ë©^¯ T½^1‰rö÷÷{R83ü~ n·.Ê$&.ŸÏéÞá¡¡¡°ß‘ȃùS(ÂÝ6ïvñuüƒüÓ/ýòv”¾ä!-nÝ÷C‚ÃZRXÁØÄð;@ÝKàúbD¬rþ=êà‘ÿ»u’ºøEwn¥“ƒ”÷`9vË'` :Э˜néæ÷.ãâY/üÛ=+x3\‘@G‰à¤Û톻> `–Ëe½þúëêtŽƒ²©KÔ£åoooO©TJFC¥RI™L&®hÚL.Þ¼aXùI)ŒwkooOsssÊårZZZ ßI$!àž4Àx1œd8hÄ[/N"ºÝc©L±X óÏŸçs‹yB9p(ºœÅ‰Ï3þÊ\Æçò$Æ—uÀ é—·£ô ÈC\8¸8Ü€Iê±rÈbAâû²ÜbâêüŒÿ»”ŠƒßAÐ[4e®•‚)pÔ«Ãaå½<È‚h§ƒ= wãàžïEÁƒ{x†[:=F&ÚŸÔ›ƒ Î!ÊœH$ôì³ÏêÅ_ÔÍ›7%õJ‹< ¢)»ÜŠöB°¤7[ê]š°EßívCà&Þ,ãÄ!K!e-R·ÖzûéG_.wñïp`¹Ï'¡>2‘…+jýskzt¬ùãêä^:¾Ï{¨»g@äk“yIà9Ô Ká3îyñÌU´ÇcŽœ˜² êáÁú™LFÉdRÏ<óŒþÊ_ù+!íw¿û]ݼy3ommõÜš¾¶¶æÒÖm„ÈQ?>ßn§ÃÍçó! yooOëëëáþÖ˜{r}.G×Gœ´³žèˆ‰“VÀ¸ïæõ§ù›µŠ1Àç ãÊ÷¢æ!ÿçó¿ÝsðL^ùöíÛáBSmóX%'H¾ÿþe^öfŸïüŒ¹æŸ___×éÓ§U«Õ411¡õõõo‘H$T¯×éÄðAæ;ö8˜úÓ.æS2™T6› Þ7 fGG'éÁ!-R8³ÈòU©T´¶¶<?,ž‚–zôK¿|?¥O@â288Ž£›‡*‡žÿÜõÒnõ“N¼nµ•Ôs¨cá÷ÃÛ­Òo“±ÅAŸ¡¤WŒZ즮½æÐwÙuÄ"J]£‡¾¤°G»jQ‘ƒC+ ~~(´ùn”„D-XB³Ù¬fgguûöm½úꫪ×ë!¨™ˆK©häÂëﱌ‹Å±pàƒÕÙB, ¤css3\J788¨T*¤'ª|Ü<‰À)ê½pñvz`µƒXî‘ Ý“pw çÞŠ(ÐrRI}œ0¹W‡ïú;!^æ.ëÑïžp%¼þ]ŒÌuâtÜã‚· Ù }λoW»Ý’À\.§gŸ}V§NÒêêª^}õUmllè?ý§ÿ¤ååee2u:ÇÛ¼—ŸŒQ.— $™6LLLèüùóZXXÐÍ›7µ²²¢jµÚ³¦}^Qw~æÄ‘yõ¾1Þ.½¢¸§‹~p# u` Ü™GüŒùàûdt>zß»͉…ÇÞð\÷⹌sppPÅbQ•J%Ô™5F ܨ×0º¯3N'äï¥}Hð˜ûä±XL<¤ ɪV«ÊårÐöövX‡¨T~xx¨T*¥©©©pžÐ÷ÈòHžÏ絺ºæ|©T †Ö2ïå"Væ5I?†‡‡ƒç$Nk{{[;;;Áâí{·ÊÛE@ú¤¦_ÞŽÒ' iq Ððƒ;jíò Ó¢D—Ryà¬Ðn©ØF-Nn<­ª[¯)Jñbx¯[7£R—›8)zÉï‰z†Üøï£² ˆ“÷«$^ôE¯#€eppðM·2ïïïëÚµk=ñ,€ÖK‚¿éWú Y é‡!7X7] N"•ñ ¬ä€ Ò|v»ÇÁœ…BAív;Ä0>\÷ïàÌûÇIf»ÝÀ¿Çó8°tBêãÍÏ\våcìëå­Ö’ƒ]ú›g»%ü­æ¥[í©l—ø¸¼ÊûÆÉ{þ_÷\º'*«q’ï .AŒÅb=—Öëu}ýë_×ÊÊŠ®]»¦……% }ò“ŸÔÔÔ”>ÿùχàq'×@Ÿ (›Í*•J…9 @ÇâÝét4==­ééiµZ-ݸq#¤ƒeŽð\Ö0ÏŽö™{Á uÌy7®°®ÝÛáóÈI½Ï—húš÷¹õ49‰ñù‹$§ ®NŠè·æû% ²’J¥ÂmäNäùœ§ÛÎ ÃhÛ¢s>“Ä{},y§Ï5úÅÇ:ªÏw/ }D_8 wÀJ_»×Åçhú€¾ayÝü{nÑwóƒÏâcÑÏhó;Žîܹ£Z­êûÆohdd$€\¤*>§½>åÁÁÁpQ_, –j¼6/^Ô¹sç´¶¶¦«W¯ªX,ö*÷¨°¸uÚ ®Ë’ØœxEûÈ /Ì Úâcè@Ý×1sÕSDó·×ÑɯßãÞ3êCÿa¥wïuó}”ùîÒ-Æ &uö9æ%÷ÄÁ°§S_žKý¢gŒï¿Äq{<ë~ÚÙÙÑ£>ªT*¥J¥¼a<¢‚œmffF»»»AZÖl65::ª………à&^Rx7Ï?uê”uïÞ½§Öí{€s¹œÒé´411¡ÍÍMU*¥Ói•J%½Û¥ïé—÷R釴pà¸Àµî¹UâÀD:¹TMêµÒrpcA¸¨“¤7VN ¢Ö:|üßš[y6R ¬xÔÙ¥a.ÓB^A[).Ÿñ~q0íVf/º\Ræ±)€Ù¨wéÁèè¨.^¼tõx,¸ÏõÀ*ê}ìRœbtï râãË¿‡‡‡U,Õh4‚…–g0·ð®Ü¿?üß½4HîˆSñ÷¼ uÂæàÏŽ-×ïK½ÙÒ˜{nŒz]|,£Ïe(Ô‘:{ sÔÅ=;ŒßÃƒá€ø­HªXæsÀÎÏ|-9Èô5ëñ\.eò{#è¿F£î\ø£?ú£0?!È__¾GÄb±žËÝÐôãýxòÉ'uáÂݼyS7nÜÐÎÎN¨¯§t’fÜ=? À}ôß´%Jf¼~¼+ öü9>†îea `ôƒˆ™K:aÉd2%nÞØØ€=‹…œü\HÆý ú‘~B¦@_˜ |ž:aEÇbLÕF£tý´•Ï»÷‰9AV#Æ„ñët:oºó#j©g<˜x}(ô-wpH'^¼h&Æ‹9ë–eêUÕÓÙÒŽ¨•[R\uˆ{qü³6/Ì=A^z‚T©T444bb±˜FGG•H$ôòË/kii©ÇCåÞ bg½ëÂ… jµZzõÕWßäé ýÑxߨ?Œ»±ƒ¾ãw<“ö:A滾2ß|¼Ý{9an:éôýˆŸ91uÃO»ÝÖüü¼©W_}U###×ÎÎNßÛÛS¥RQ­V ¤€µAªm÷Æ...ªÕj©Ùljgg'Ä—ìïï+™LjrrRÛÛÛİŸ!ùºuë–FFF4;;«¹¹9•ËåÎ<™L*“ɨÑhèèè(Ü Óh4ôÃPúÞŠ~y¯”>yH @¹Ž[h|D=!šnÝv«®[·\wÕûMãDü?J„\JâÞ¿'y•K¹ž_:_ñx<ncat ëAŸ¼S:!?.áps0LßQîE‚Pü°w9ù懇‡õÝï~7¤°œ™™Ñ½{÷BÛ>Î’ä¢<U¤íííÆÉÅ!ßn·ƒÖùèèH»»»=wb¸…Ô-åî© .îÍ oœÀâ]ðìkê,Äb±àM‚,9q’íÞ4ú‹H‹§ ¥-4ˆ£{ˆÜCÂsð$y6"êëž“(ñTû2uKˆ8÷ö±†<ÅjÔâïóÌeV´ "ø“²ù¥”Ô²´»»«ÍÍÍžË}í»ÜÒ÷,ê±ØÉ2‡‡‡j6›ÓÅ‹ÕétôàÁ½ñÆa.Óÿ´Ó÷€êùóçuþüùáhjjJ_þò—C;Ýæž{ h·'yp/Ïr²éföDî¬pï­ËÝ(")ìmÒÉ…®nð [ó†±õ}µÝn+N+™Ljzzº§¥“D šh/cÏ»»ÝnÏ…~ÄFàíb<ðl¸'Ð M2™ ™¿šÍ¦ž{î9ݺuKñx\SSSª×ë*•JŠÇ/$­×ëȰÒétêƒü žxâ ½ôÒKºpá‚þâ/þBçÏŸ×þþ~BÏåršœœÔÜÜ\ˆý¨T*!QF¹\snxxXù|^ÙlV÷îÝÓì쬴¹¹îÁ{½Cª_ú¥_þï¥O@Òâ}X—+q¸E½ ÑC;š•…C×¥,Xä]^ã;‡­[w£Ò/XÞÜÏ;GFFBV'ψ$¥z¼G2™ @ K­ËÜ£ár·rbEsÀJßFÓ p¨3@7må÷!íÀÀ€ÎŸ?¯­­­ ·ït:Z]] 9õ9 IEI*K¤X¹È«\.‡€ßZ­¦l6ƶR©ô!Ú’Ífupp R©Ô3wsÚɽ Œ{°Ü ùŠz„û¬2™Œþëý¯=— I½©¨)È4}?X3?y–ï‰ì'eÖ s’â{œÇp¸‡¨Ûíë?çØ³œã=Å ÅØ% ­­­õHÓ|MÒF Q b*• Ä…q«×ëa¾à±eŽúE®¬¿Ì²Ñhh``@þç®N§ˆ"·‹«\.‡ËP¹¦V«…ËXs¹\h×ììlˆ¹wï^È¢E°'²îïïkjjJÝnWù|>Ôíµ×^S2™Ô©S§Âž‰á&—Ë©Z­êÎ;ºxñ¢µ¾¾þ'í;[¢²Àäsû¥_~Ð¥O@ÒâÙ‚8´ÝjíÞ.ûâ ßÛÛ ÀÒ­uºÒ èçÙÒI`0÷Eˆ<•d§sr?ÏäÀvë¹Ë- r({†'d¹œÀª×Cê•|ñ9.ðã].£rÐæÏq™‘Ë+$…ô·³Ë—/«P(è•W^ÑÞÞž†²ÙlL¡®×ëÊd2Ar!©Gvu©\&“é‰{À*è}`àøÒ-…]§Ó d (òÏð3—­8ˆ÷9CŸ#סß ëÁ³€H'‰¶| õH昻0ˆ‹ ÷ òh‡_0I}y/ÿg~:1Å‚ÏûŽx^ˆïqOÏ+@¼g$cÍŠÔ½Qî‰`:i`løœG4cJˆýpÏ„ßùƒõÜ=QÌGΕËåtúôiÕëu½þúëºsçŽ*•JXÄsàYp£sõôéÓÑââ¢VWWµ´´¤íím}ò“ŸÔ—¾ô¥Ð—ì5œèaÁÇ\bŽ8‘c¯ð1ô½¹Æœåd·rbE¼‚ï5îC†´¿¿ö¤œ~Œ,ôÉÈȈž}öYmnn†ä.ssÖ×»Ýq<ÑtÂ|†¶îíí…yä}ËšsƒûŸÓ©©©p©àììl¸ÈR’J¥’‰„†N:¥½½==òÈ#š˜˜Ðêêªö÷÷U,{$™N+•Š677•N§•H$T,588¨Ë—/ëÒ¥KZ^^ÖƒT(Bv-2ú>}ZÝnWÛÛÛÊårÚÝÝÕÌÌŒfggµººúæÃö,}Ò/ï¥2ð½?Ò/ÿ¯åOþäOô÷ÿþß×¹sç4<<¬B¡ O~ò“zá…ÞôÙW^yEŸøÄ'”ÍfU(ôs?÷sºsçÎ[>÷·û·uéÒ%% ;wNÿê_ý«pà}¯R¯×ÃḠ¢g¯r‹*ÖK¿+0 ¹[G9`‰´Õj5L€ßEÁu#á ô»%ø¼Ç48ð‰zvÈêâ^LR¯÷Ë"m¤ºEräÆÁµZ€.€˜L&577§Z­¦o}ë[áf`²J¡›ÇšGª[@]:V6› –tùáö_¿À¯Óé¨R©ÐK_áõÑää¤ …BÏÍçÍf3è±%¯ýîDR:‰­I$¡ÍÜÊŽ¤ù˜ÒoÉd²‡Ð2¿laf|i»9óÈ/ׄTó$N,˜_|×<ó qGn÷ M>>‡~žvð'QÞ.,ÃÌ7» wп—LrÇó3‹oØÐЉDø[RHÙìkÉ%\´‡:aéFÆçi¶Ð +›Í†àóÕÕU½ð ºqãFH ÍûéÇááápN§§§uîÜ9U*­¯¯kiiI+++*‹Z^^ÖW¿úUÍÏχ¬Hžù‹zñÇe˜Œ1ÆŸ—ôă›Èìîíí…ùBßt:нÏ Ý É©T*am¸W–ÏB¤è÷\.§\.§Û·oëÖ­[À!ñcÏGRE}¢™y®Çظä–vsw{ k9*ÕÂÛ211¡L&£Ë—/ëÊ•+ªÕj:{ölðbI „0NBS,5==­ëׯëÿøµ²²öÈcÇCv¾|>¯±±±@À’ɤòù¼–––tïÞ½ðlÖ*ÞÆ„Xííí@bÖògögú›óojllLÃÃúpá‚>ûÙÏö|æÂ6ýòÞ)}ò”ÿðþƒ666ôÏÿù?×W¾òýçÿüŸÕl6õ“?ù“zî¹çÂçnܸ¡}ìc:::Òþáê÷~ï÷ôÆoè#ùHÈöBùßø ý“òOôwþÎßÑ—¿üeýâ/þ¢>÷¹Ïé—~é—¾¯:qˆPPyÀ Àh4ˆÛŸã!àÍ¥G5\Ú|+ ™ƒpÉ÷)€ˆ`ÄëM;‘¯ qv¢Åa988¨|>êÂ!“NÈšÇW8©}S¶,¼šx–ƒ6›Õââ¢fff”Éd$G·P8´Ûmíììôü´3‘H¨P(„>tHL U€ª,²m é§~ê§4>>®n·ÛCVb±ã‹ºhcé1~Lj'4ØßßñÃÃÃaì°˜ÜêK*?gƒáÉ ˜ÏxvR©Tøã’*Æ”ÏK'©Q™ó¾>hÛÈÈH xš\7ðn·Û=ÄŠqDº—L&{8óÐ˘P/¾ÇYpÀ ÀôËÔi$‹uÄÜç-€ëÂ÷˜"Èó miµZ!xrrRÓÓÓšÕ•+W455¥û÷ï‡ùÃ>„—Ç=¯¡t:­GyD.\^½ÝÝ]moo‡[´µ´´¤öÏþ™>þñ+¸“A—UQo‚Œ™'‰DB©T*ô!}îÄÑ=2움ó¨W„±ã6»g²Î¿™çrÈõðK-ñHh}}=Ü©â±BmŸ îá£@ö]788æãáõ…$²Ùggg533£V«¥ÙÙY}úÓŸÖ¿ûwÿNúЇ´²²¢ååe]½z5„ýýý°æñNÜ¿_###ú[ëo©\.«T*)ŸÏ‡ñ7 s{y£Ñ2Ó]¾|Y ŠÇã* Ö£>ª»wïêõ×_ixÃÅ—x?ÆÆÆz$t?jåÿæùƒ?ø}ìcS¡PÐù/ÿEÏ=÷œ~ý×=(¤wÛôË{§Äº}ßÚÛ^¶¶¶455Õó³V«¥ .èÒ¥Kú“?ùIÒßý»W_ûÚ×tûöí8ïÞ½«‹/êŸþÓªóoþ$©X,jaaA¿ð ¿ ßýÝß ÏüÍßüMýÚ¯ýš®]»¦Ç{ì-ëòÊ+¯è©§ž ’ À8Å]÷H_Фóóv»Ý“ÇeLlæX_˜saµÇêÅ–Ñ€L Ó•¿7€]'ä<“àk·*ÆbÇz÷h :RWúpÉû". ⥞|ÖûË5ýXv°œòûT*¥vû8cÍ… T«Õtûöí -8<A†jžM‡çDÛÂÜŒGÚÇÜà9ľœ¬x!¤ÌÚÅX·ã„ë.ÀÔS[sƒ3ÖkÚ‹—*š1‰6¸œÒc·˜Ûìx 4sÁº£/ÜbNŸBBƒx<’+¤ÓéÐþZ­¦r¹¬v»æëPRˆõX§Ói-,,èâÅ‹ŠÅbzä‘Gô /huuU‰DBsss*‹Á“÷Ó?ýÓš››Óÿïÿ]wïÞ }ËøA™‡<ÚÇ>æŸçDúØb,ð¸87Øøøxì$ÙßA’Ãû1 jjj*x—–——{RÕ2¾YܨÃÏ|ÿf ùŽ{÷ÜãÈÜpù“'–ØßßAçž_þå_Ö?ü‡ÿP_þò—õoÿí¿UµZU2™T¹\ÖÈÈH0 ¬¬¬¨P(¨Ûíê©§žR·ÛÕúúzx—ž={VªT*¡þѽ½=¥Ói}âŸÐûÞ÷>}ñ‹_T£ÑÐáá¡ …‚ªÕªZ­–2™Œ®]»¤a­VKO<ñD Ó\¨øÇüÇzùå—õþ÷¿ÿ͇ïÛX8×í×~M‹‹‹?ð篮®ê_ÿëý¦¶­­­éÑGÕ/üÂ/èw~çwþÒï¿ئ_Þ{¥ïyJ”|HÇ€éÑGÕýû÷%ƒÿñ?þ‡~îç~.,PI:}ú´~ò'RŸÿüçÃÏþ×ÿú_jµZúô§?ÝóÌOúÓaü^ÅEò¦ß®TE:¹Ü-žx%8 9dÝ2 8âàfãôÈ |–zù3¸m°ŠìŠv`}Ãè ça—.ÁâG.ïL§ÓÁúNÀ#–l€‚òf=1ýç}±sÍ:ýxEbËå´°°.ÐZYY )#ñ2 cð›!0£££äq?ý–ÍfØ8%©V«…vaA¤]Xq ðt¯™K©¨{£¢ut©™Ë£SÒÉ.…¢¿ñÔ1¶‡‡‡a|ù?à‰±ŠŽ}Oû¢óOÖcƹ ß½ îíaî{v6À,Àõt°‰õ™öPÜÃó=î€Ø—NY·±Øq02k–ŸÓ÷.‰¤O±¸g†ù•dñÏ ïaaí—J¥×44tœ6·P(httT“““=†„T*âb¸l.NëôéÓzôÑGU­VÃ%…ÄŒ0†¤ZM$ZYYуtùòå¼"º¯¹qƉžcÀùܧߨ¿|üÒétðX²1|ïp°î æéžñ"ùތԉÏw:8κf¾ùØxv-<^´•¹Gv2æ{"‘P"‘òÇÃÃÃ@>ܸB; ÞìëNG[[[a~ñ‹_Ôýû÷õØcé}ï{Ÿòù¼Òé´ÆÆÆ400 ­­-­­­…9”ÉdtãÆ Ý¼ySûûûzì±Ç”Ïç577§ÉÉI}øÃÖ'>ñ u»]kjjJù|^ÉdRããã:88ÐØØ˜.\¸ F£¡™™½ÿýïW©T Áí:s挵»»«X,¦çŸ^/¿ü²ŽŽŽ´³³óC!Áò5÷ƒþóVå?þÇÿ¨½½=ý‹ñ/þÒ:½Óئ_Þ;¥O@Þ¥R©Tôío[O<ñ„$éöíÛÚßß×ýؽé³W®\Ñ­[·ÂáíÚµðs/333š˜˜Ðk¯½ö=ßž•CnppPõz]µZ-ÄzÒ*ý r2ð8] ïÏ'…ªK:øŒ“}€8oSêÇ!êÁ<“L-î¦ç,¿T¿±œ~=@™Ãž¶»W%*Ùrðæ€ÎA)D¤ÑhhttTù|>xŸÈf!5Íf3¤®8¾-‹|»ÝÖøø¸ÆÇÇÃå^x¢Ü;°â;´³V«õ7êão—Ëxh›1œL÷‚Ñ—Œ)äoꀈEßÅžÏ÷Hg<>Æï6áâ1—ÓIê!þ3ÆÆ»!¯î sY@ Ë6D~£ðÑvÚêä™ë‹ú9è”zïüðØ÷‚2/y.í¢ÿ¸ãIò8(b¦¨ƒ¯3¤;x×ÜËÅ\`2/cÞ8¤ÏŽƒïãñ¸4::ª 5Ðþ›7oêÏþìÏtûömMMMõ$¥ð˜’ÁÁÁ¨É.‡AçÞ2¯7ýJ >ž‚½Ïå…žÑ ó9æö ÆÍçÔÐЦ§§¨vé{£ØÏ™îÁs™Ÿ{äšÍfèH°“húˆv¸±ˆ”½ÝnWËËËú­ßú-MNNê3ŸùŒžyæMOO‡ÏS×ùùyŽŽêèè(\¬xúôi=õÔSúùŸÿy]¼x1d@ãÎé8ÁÆÆ†Ö××CÿûÿïõÛ¿ýÛêt:ºyó¦¾öµ¯ieeE/¿ü²nÞ¼©;wîhiiIËË˨C’·¶¶´··§jµú—¸?¢åë_ÿºÆÇÇõúë¯ë}ï{_˜cŸùÌgB²‚wÛôË{§ô³`½Kå—~é—Ôl6õ«¿ú«’¬'cccoúìØØ˜ºÝ®J¥’¦§§U,ƒ~;Z …Â÷e‰ñƒ€Ãϳ¹DK x/ðÍwýóîùà°r°J=x·t’•gó.ïÈ$‹ŸK (¼‹g¹¼ù?däò?¬ýÿ®—Ôóî¨$Ëɇº[¤i mœŸŸã‹Åtùòå`ÙÅÙh4B ˆ§Y„‹¥ÛßR  ›œœ äk3ýÍaÁ¿é Ú•=ñ,™Çè&Èà„¤8ú”˜—y0Ï\®Ù09Ùõ3W ´.·ñµáqîIq™WT¾ä²(²~9ñ>¡˜SÜÿpåÊ•J%•J¥Ð¿&ÆŠvC}Îùg.9)ñ¾æwÝn·Ç؃7ÚçªÇ‰¸g ”{[ð&ûÞçrÇF£¡­­-*ŸÏ÷Ì HëÁ½xŒ©Ë-½?^úœòýÖ×¢fÈš6::$yÙlV•JEׯ_×7¿ùM]ºtI—.]ÒÚÚZðÎã±'ÙÀêêª …‚yä ëÿã,IúÙŸýY}õ«_Õÿù?ÿ'Œÿ¥K—”Ïç5::ªÕÕÕp—R½^×óÏ?¯‹/*NëöíÛ¤+“ɼÉ[úáX º}û¶FGGÕétôꫯêÝ.™·âí(kkkj4úùŸÿy}ö³ŸÕ>ð½üòËú•_ù]»vMÏ?ÿü;Žmúå½Súä](¿þë¿®?øƒ?ÐïüÎïèÇüÇß•:D3ó°i!ép(!ÒdD€,éDO.õÞ¤Ë!ˆÄ⣣£:E|ê‹Ì¤Õj…¬>x88Ü<•$`ÇePòÔËÁœËCø·ÚFýx¢ž }ÄïyžKp°lNLL39ö±´E³•„Ô»ny§FOÌG,ÓÖÖV ÀêY¯×Õl6U(‚çƒzcáô¶EI‡[}!5þ ïÔwÉÀž z'9Þ÷€&÷ºAN™wÌÆžùÁx3Ï ïæ¾[á!u<›ù‚t‰9çó?JŽ¢QræÀï2÷ébyß2·y–{¦ x$ø?kyïRÚŽµÛמ{0!ÛîaâÿZ¼tÄ;êÞ½{Êf³á’9—AÛív(Ži}}]wîÜÑÀÀ@ˆUÚßß±åV«¥±±±°fâñ¸ö÷÷µ¿¿¯÷¿ÿýzñÅÃÅ‹ÄZ0ž¼ß÷-')ÌiŸï¬A'ìÒ±g ríÙûÖ÷7ß›Yû.±c~ŸÁš£ï·¶¶4>>®ÅÅE5›M‹Åø=Ãת¯õaOvÒÁžÄ3Ø[êÏÞ@Òú&—ËéÃþ°&''U.—õÚk¯é‘GQ«ÕÒ¥K—B†5ä`Èë®\¹¢V«¥­­-mll’7>>®•J%íïïëþè‚§Øå‰ïõò­o}K/½ôRÏÏHb-Îq²ßüÍßÔ/ÿò/K’>øÁ*ë3ŸùŒþôOÿ4à†~é—héw¸|ö³ŸÕoüÆoèsŸûœ~ñ1üœ4ƒ»»»oúšS‚ïÆÇǃÆ7º¸wwwõôÓOÏz¨ ò˜¨DJ:ÉÐã;—“H½:e?,9´ü÷JB~Àãq+žt’ —úùAéÖZ·®:tðŠ¥—ø¨e8*m =]îÖÝ(Ðäy¼›ŸµÛí`ñ‰ÇãÊf³êt:TÄãq•Ëe5 ‹E•Ëåp»ö@Ä¡¿··Á÷îÜ@â 9‡‡‡ÚÙÙéé#¯/óÅ­óNÖ $üq‹®Kd¼¯\®çÏö¬D.ArYœ¤òP`¬¥BâÞ:æŒ{5|mPg¤}xƒû3Ýk†\JRˆÁq"à ï¢|Þ`åvÒàžD÷è¸4ЃÔlûÚ§˜KþŽááá`±vÃR+éÄs]ÃÔ ÐÍ\òõtxx¨J¥Ò¸!ÞFöŠd2©……ÍÏÏkii)\ÆÉ¥tét:XÉé‡vû8Ö¤V«);–·MOO‡ÅÅEmllèÆ=@ß½’nœð¾äùN>Ù·ø?kò…„OrI—-²¯2OñޱoúÜe_cýøþÅœÚÝÝU2™T¥RÑôôt¸ÌwDI©{W\B‰ÄŠ;aÜ»ë†bzéºÝc‰)óSRðâ& íìì¨T*é™gžÑ‚nܸ¡/}éKZ[[ ž°J¥¢Ó§O+™LêÒ¥KúÙŸýÙÐgGGG!¶cssS³³³ºuë––––ôÓ?ýÓŠÇãzä‘Gô…/|A‹‹‹º~ýºÆÇÇõøãëêÕ«a¾U«U u:ÍÍÍ)“ÉhffF•JE ŠÅbúæ7¿HλY|Mýÿ-O?ýô›0ÄÝ»wõ¹Ï}îMŸ×­[·ô×ÿú_ïùùßøC’ôñú™ŸùIï¶é—÷NéÇ€¼ƒå³Ÿýløó+¿ò+=¿;þ¼’ɤ¾ûÝï¾é{W¯^ÕÅ‹ƒ$-eô³*‹º|ùò÷¬‹[¡Ý: ¸ÄxP5é¥]°ƒéÄ2ê Ç-`þy€!sˆjüä÷@w€|ÀÔ»;™Š‚…h,ψJü`…fŸçÓ>¼~AÖMêá—½83™Œæææ‚…øððP¥R)x%ÚívÈh„ÕŸ Z— Ñ¿ƒz8ØoµZÚÜÜ|S?:€uï[vXªù¿“CIÀ¸ç¾r í (jæ;NîgüŽ9L?¸È`l¼>Nx>ÏuK§6~Ô‹àfÖôg´M.'Ðo夢 (±tÏï`MÐÿ¬ÉN§b~Ü{Dÿ3Où>cÂgQBÀóô³<˽p·¾3g¬C_ïÌýó=%º]<ùPPy^½zUo¼ñF›|`çÿCCC¡+Õ›–——U©T4??¯ååeëøñãaîÜ£Äß„,!Kc…8 óÈçñ*òAðx†{‘˜'dÇœÑ'ëóýÈÌ{S¥RÑÆÆ†yä‡Ð;_ëîµâo'¯¬WÈÄ>š#ísðt¸WÆïΩV«ŠÇãº|ù²®\¹¢×_]Ï=÷œž}öYý×ÿú_õGôGj6›jµZZYYQ­VS¹\ÖÜÜœ¾ñoè¿ý·ÿ¦ï}ï{º|ù²†¾úÕ¯êûßÿ¾vww577§gžyFßúÖ·ôüóÏkmmMò'¢›7ojnnNŸùÌg‚þq¯ûÞä[·nikkK7oÞÔüü¼®^½ª‹/êôéÓwL²þI7ßã~ÜîÔ>õ©OI’¾öµ¯õüüOþäO$Iïÿû500ðÅ6ýöîiý¬Ÿ@û7ÿæßè·û·õÑ~TÿøÇõ½ï}¯ç÷øÀ$íyH{ì1ýÂ/ü‚þé?ý§j6›úüç?¯©©)ý£ôÂç …B 2cccúÈG>¢—_~Y_øÂô÷þÞßÓéÓ§ÿÒ>9(¸“å6 "¥ýÃ7;‡$W' <×%!HùœÇQûÌßâÒþa¸½½­t:ÝØE-üËßã›+ ±òo['D¸ñ|'GQQÔÂ%]~¡Y¹\ù1^%ðè7Q×jµp{1ý%ƹb±Ø^¨ "h‚Ü8pOóñx˜s… ?ÿöªHè‘Ëó½(Èåß>ŸÜ‡ÂXÜ›á–jïu°ïUœÜ›Àûœ`ÓOôÆÇB΃÷ÑCÊüî tàk½–r \ÑõŒnúºá÷^î×cs ;ë–üæßÃnx.óèäÉeľáÄ‘ïº÷À÷÷@0nùâ9ÈщóÐÐjµZÏsÉ+Â*ŸÉd´µµˆÈèè¨ …B¸3HR(ŒÀs Ce}»1ÅIŸ{]‘/k›)@¸Ïcr£K”ó=žC?Ý#Ý»!dô»Õjéܹsúà?¨o~ó›ÚØØèÙ‡°âãîäÍX£Fß+Ðw÷ú¸g£ FšjµªF£¡v»­×_=$ ‹E-//‡âvÚéìåË}ç;ßQ±XÔ=÷Ü£\.§×^{Mív[™LF•J%xÅâñ¸fffô§ú§J§ÓšŸŸ×#<¢|>¯ÕÕU-,,hhhH³³³j·ÛZ^^ëÂuÿý÷ëĉ:qâ„nܸ¡W_}U?­í‡¿þ×ÿº~á~AŸûÜçÔívCúç>÷9}âŸÐÏüÌÏHúÉb›~{÷´>ù ´gžyF±XLÏ>û¬ž}öÙžß98uꔾùÍo곟ý¬>ýéO+‘HèÃþ°~ï÷~/äˆÐ~ë·~KÙlV_üâõ{¿÷{šÕ?ûgÿ,TÕúË©“?¼Ý¢ïà 0ñP&·î¹uÔ¿[רHû`3 Bi¼×˜ƒI?¤ýûQë.¤ÈÉB4TÈãr0ë °Ë³\žÞw©71?†200Às©TÒðð°òù¼nÞ¼žáó$iûø!'Œ`µJò;·|òs·¦;cþœ`:Pô‹î€9 qâøpà#íWsÙ;Ip¹ú³ø½[£ïs€F ²&¸@2Bþ“Çöûúˆê¨GþÞúçœÄ¢_>>^áwÞÑ/¼8Ýn·'¼ïN„Û ~TçÉ·@ž^¿¸rêï—ÔC4iΨ'Ñ ZÔh€ ÑIŸžÁ:ÁCP(Âg«Õj ôZà‘¡¡!­­­éܹsšœœT*• Ià^9ÏûV´JÕdÌ<»—}§2˜s—UÔS|Xú;1”D ¡ï}ü¼ÑhèæÍ›zàôÈ#è›ßüfϺ÷µ%Ÿì3¾ßEsOø>‰þÌ]§Ó ‘‘‘P.™û]vwwCQ’z½®f³©l6î@*•JAÿ¸0‘HhmmM÷ß¿VWWCN_³ÙÔÚÚšjµšfffÂþúøãkffF‹‹‹ºzõªôâ‹/jaaAƒƒƒš™™‘$ýʯüŠâñ¸Þxã ýÙŸý™¤½{½‰„Μ9£©©)}øÃÖ¿þ×ÿZ·nÝÒ;Ýþ"oÅÛÕ¾üå/ë _ø‚þÃøZ^^ÖÁƒõ›¿ù›úíßþíð™Ÿ$¶é·wOëŸ@{á…~äÏž={6ÜŒþ—µßøßÐoüÆoüÿê“2¬i€&s$ƒÃ—’½L¯[úynDùÒ>wðïÎ-ÖI=9%XÛ¼†¿Ç@Öà%wyV,¶çÆææfO…Æ‚…‘ƒÓkÛ{ˆ’“4ißKáábQÉ;<d``@‡ÒÀÀ€ªÕj[„_Aš¼oXuo‰D"”ç%\ÆÁ$r‰Çã! ÕC©ºÝnO©`÷èxˆƒ·úT}þ°V:Ùtrë•7|ÆAºƒ-îNÀ°¤2nÂv49!uË?Ï¥O€iBÜãý`.«CÞçºPã’7梃¾bqöµä¤% *ÝSà†H•'—Ô£€òèÒG¾ãù5¾î™7Jð¼ ¼õçž½()t#CÔÓÂó!ƒÌ­ëk³ÙÔêêªFGGÇCe¬F£Š>ПÑÑQ•ËåG¡²õû6¾FPD‰¿{O!ì>åž4ˆä< tÐI‚¤RÈD /¬iôlssSsss:tè2™L(Ál(£ëdŒµê9rþy¼~î…dñÀ@Òét 1[[[Êf³j4Êd2A6\܈l¦§§Õjíݧ’H$T.—500 J¥¼%±Ø^žÉòò²ÖÖÖ´ººªR©¤ÉÉI}ò“ŸÔÙ³guàÀ:tH§OŸÖöö¶ž{î¹ãñÄOhqqQ­VK·oßÖ‘#GôwþÎßÑõë×uñâE =ðÀ:räˆVWW500 ÑÑQý´¶¿ˆÔ$“Iýîïþ®~÷w÷/|ÆO ÛôÛ»§õ È]Ú<ñÚ¿óPÀa ^ÅCܺGÌ5±ÔüŽÍ-Çž‡á €¡N¢b€ ÀBM*vK-±¾XwÀ-êòP/ÀU‚ìÝ „ðÝhüx½^·ÄrK¯$U*•+îmÞïÞ†n·«‘‘U*•ž>3,½ív[ù|^õz½GÖx¤$õÜ® Àw/–[Ö™gŽÏqÔ" ÁsàíØÃ­¢yN<œtñÜN§³“i‚„—¸…ØÉ«WïA†üŽgº¥ÙA7äÂuß š[±u®—诃FƈlÑkÖ1äÙ ò%.ß ¶“1æ P!¡T“Â’M¥¥ýË=1 Ìåv€hdåy*>—%$Ò$¬)Š8¸ÞIÏ'±Z­â´½½­ÑÑQݺuKSSSÚÚÚÒÚÚšFFF422¢x<®©©)Õj5ÕëõžD{ä922 ôË=Äìo¶ ™p¢È¼ð\tÀ“ÒÑ{¿ƒ|_ò°IåCW½J™¤PÕìòåËJ¥R:|ø°®^½äÏ3œìxžJt †ÿ<2büCCC!_y) !„ç …PBÝÛÝÝÕÇ?þq }ík_Ó¹sç¾™J¥´´´¤B¡ ƒ†µrèÐ!åóùž *I ‰íÿóþOý«õ¯ôÝï~W‡Ö¯üʯhiiIÿãü?~\333šššÒíÛ·uóæM]¿~]õz]>øà_™û)Þ H¿õÛÿßÖ' wil²é{¼¼‡OD­~ ÂQ¢•\¢ Í-š~prp0Kû¹Üê )¸q8z˜‡]]·<ûxýæptë+Ïó0Æpó¼ÞE®FÔ3À³ÎTïdð ¶³³’«Õj¸ÜÞööv¨$“L&ø§”'`DÚ¿­›¹ àÊ-®ž0Í\¸ÇÀ­ªnÕdŒ\$ˆ§€P —‰æˆ¸gÀC”|®x§“M(2ÜÞÞ–¼m’‚ÜœL9q² <Ü…$Ydä2æ˜pFqÿÿBþ W‡þ8€öß»~:ñâ÷4äå9-¼ ‚ãžæÅ×0@Ôóèƒ1i¿4-àÔïqïk…5ë„Å=kì#teV IDAT è¥ËÐó ø{M=ô¯T*…2ÔƒƒƒáÒ8Œ*~‰g©TÒÔÔ”ÆÆÆ”Ëåtþüy­­­õx¾Îž=«Û·oëá‡Öùóç{<Á_÷¡Û¯áááp‘¨Ï=óÉøÜƒÇÃúgþð A^œx¾ dÌ @¾oookqqQ?üp¨õšø\1|Æ9e=B܃ÃXñî±¾F¸_‡=0“É(›ÍêÖ­[j·ÛšžžÖîî®^{í5=õÔS:~ü¸nÞ¼©J¥ˆ²Îd2ÚÜÜÔSO=¥Ng?¯äcû˜ž|òIår9mookbb"¬ï«W¯êÉ'ŸÔ}÷ݧV«¥ÙÙÙПÅÅEݼyS÷Þ{¯FGG•ËåT,õ¾÷½O333:s挪ժ^{í5½Ó­O@úíÝÒúä.m€bÝbnÕu0D嬢’zîZ¬¸U€$Hû7hshº¥Ð‰ƒ<uh·Û!žØûÍÿ£(Å-”nB?¤ÞKó<\ ²m÷˜8°p ±‡Kx²;@(ëàÁƒ=ßñÒXs^­V«§äe.—ëñƸ·fssó-`pá$/ Òa’åàØç0 :îJÃÏÑ#€2vK®{jÜ’.í_çòM&“=zÅïöQ«5ÏAV„¸—!z‡—†õüô÷xspÇZ!Å=}|Ï×d°ê yÕëõ ''`Ì­Ï# ïólæ6’É ÚþãdÝçý1Èßó¢9 ̵'4GÃÔüè„“FžÁxÛív¸O šH$B™×x|ïbIÃ8;;«L&£ ›T@’¤ùùùP¥ F£àý‹ç0ljD"äMy‰hža`í wè1 t'™Löäа.]o½BëheeE?øÁtÿý÷‡Ð5æŒþ;‰…àt»ÝÚ†G̵é/djww7„_±&''U¯×Õíî…Â5›ÍP•oÉÎÎN¸ òßø†Î;§£G†ŸÕÕUiqqQù|^/½ô’FFFT,599©r¹¬'žxBïyÏ{týúu]¸pA :~ü¸¾ýío«ÙljyyYÿäŸüýìÏþ¬.^¼¨b±¨±±1}ðƒ ^´+W®’úÔSOéôéÓa¼ùÈGôå/YýÖoýö£µ>¹‹á8„L°Žq˜†¸oÀPãpôPªN§’,±’qzÅáŠzN8¨£ù#F¿-˜iMÁ‚ XñÖétB¹a¬£Xý¾ iÿVtòDog,ÖRo¥'Nšà±ëþ ¬—’b±€ÀÎÎŽvvv”ËåByHæÄ-ìñx<„”A&Z­–>¬X,B0œð8b.ÝòɸÏd=pƒÜAä=Avƒƒƒª×ë!×ÇçÛIœË®¤*£!e^å ëmÔ’Äó€UÛÃóƒ÷0êáa.ŸWP"wÊIЇ«ðlúõ07Æ ñsþ4›ÍcOkÆCêЗsY`n¨ż9ào'wÈÇïP:ÑrK=DËÉ+r#rá}÷¯¾/1VÞÙh44::ô¡V«õ„Çq÷¹/¾ø¢®]»dMâz±X %²£!¢ÑŒV«¥L&H!;'ôèÙtýfãqöp 9Ôëõ°ŸÐ_i¿B–Ï „ºÝn‡dî¡¡!åóymll„¹¤x33ý†ÄÒ÷’PvÕ=åè9åt™3I*‹U,S¹\di{{[›››¬”Ëe]»vMÃÃÃ:pà@¸§ãäÉ“Z__–ÍÍMe³ÙPzùÈ‘#ºzõª²Ù¬~õWUÕjU_þò—5<<¬§Ÿ~ZßùÎw´ººªv»­Ã‡ëüƒ’òÏ;§z½®£GªV«éùçŸW6›ÕÜÜœÞ|óM-..¾åŒýI··+«ïUé··£õ È]ܼr“3@.©[Ù;;;ÁeP¤j99ô¤·ÞÀ¡ )qB ƒâ@uðßn·{@ –~8Hä¸'…1ó.¾ pqht°°sý;€pÏq¢õÌ`Ýh‹EÕjµ†ЊÅbÊf³áFh <ÔÇNØ\< š±Ø^ ÞF£€+àPêÍ·€”ñoNT˜3n¡FÈOÚZ.ßx<’};Nȇñ|¾ãrŽz²|.ÑgÆÏœútÉsð`‘•ö€5„ˆ>bÒívÃejÑ\÷Êd2™lÌ}¼Fûî2:àF¿=œNÒ[¼ív;È•ç9ð†¸ã=àY„ì@h¾NYÛ¬yòNðÒ8FNÈÙ¹ç€u!pO€‡ã16Â`¹¾v»]e2ªwýÎïüŽ>ðèÚµkZXX¸Ó1ÛoýÖo?¤õ È]Ú8̬€OÜìøA èôê'@Ýøƒ…JÚ¯䇰[¯9L±‚’,Jr,ã¤Ð# Î>eH§Ój4á@‡è!C›`>ñN8YC2™ŒªÕj¨^ã¡qèrò,’—™ïd2æéÚ-Ú€U߹×ÒMîæ¹öjµZOÅ4tp6'Ñ€«J¥rq·ë“{ûÞ„Ïñ=_{ô…þAžÝkD_¼*•¤ ûžSER<ëO ä ÂÈÚq‹7Ö}.‰s™ºÇò𤊑{JÜ;ÊØéö <ßïïàç²!ONFc¤ìêÁƒõõ¯=Œ›ÄéMMM…p¢J¥¢F£¡jµª©©)mll¨T*õx70@¸÷Ã÷ˆ ë ™‘CðưÃxwwwÃ-í;;;=gö,r"J¥R¼ÐU×W¾Ãk6›aÍ£¯‘ÕÕU:uJO>ù¤þøÿX7oÞì)íËúBΜ® étZÙlVÕj5„S1÷è|&“Q¹\Öôô´ºÝ®nß¾@>7–/--ijjJCCCÁ+ÇÆÆB777uàÀ%“IŽŽê}ï{Ÿ.]º¤¥¥%µZ­@*GGGõè£jyyY­VK/½ôR¨ºE‘…§Ÿ~:œOFCÿøÇõÚk¯i}}=§'Nè¯ýµ¿ÖËÙ³gõú믂ùN¶¾¤ßÞM­O@îÒÆìa¢7I±€F-Ò<‡ «Üòïù’Xé½²[f9 J<Ó½ÑØf';Ѱ0Þ…ë?“Éô„xð¿ë¸q ( ÚØØ¿'äÊï¨xò:„¥P(èñÇ×3Ï<ÂLGx&xä¢R©hww7xA 1©TJccc!”«Ýn«\.KÚ³À …žp·*»å0$©'\"ß«z$Œ ðî$LR¸ô\!·Ê,ÝÓÙã÷/7CwA2R©T¨¤Ä%€:BÑ#Âw˜sícœ¬ä‡Ì±A%Ý•ö¼“m¬Ð^9Ë«1á½Aùœ÷ÅïQÀ;Idïˆæ]±Ö¢áy<,è.ãÞÝÝ DÀ?knnNGÕ+¯¼¢ááaMLLh{{[¥RIÓÓÓªT*º~ýºòù| ñ9ž|òÉP´¡ÑhOÀÚKu£îéñ„pßÝ+м+º,í{_™[¬K¥R%!Œ¬Qi¿Ôµ{Q$…õÜét#”3ß»ó"›Íj||\ëëëA\¿âñ½Ü™­­­P/íß4îñàü`&)ä>xR¦E?€ÝÒö›Ø£Túè•cäú÷é#¥w*¼Wê½$Ž÷@ÚÜ* ‰ÊçóÊårÏ#$¢V«pî¡—Ä onn Èpë,!(w²Ð“¸L¨ã@3N÷>¸~H½­°Æ;AöñÜb ð$d àÄx‘-Ï@žè°WÑ"TË+ˆ9Ñrò^À%ÏtÏàà`ðV@=Ƚ3èó€þ&“ÉØøÅ¸¬ „{±Œ. ¸ôÜ*£DÖ~ƚ♬žå÷‡"Ä;ÚívûC=DÓI7ô±Ýn‡€d>xý§46@œµÄ¿™3ȰïNbªÕªNŸ>ˆùÀÀ€æçç•Éd4::HûÔÔT ¢CiﮌC‡iyy9Xñ‘c&| ï°ƒ~7`8i‚¤£gcößS<¼ rƒ¼`¨ðP6¿¤Â ëóŠdíöÞ…7nÜ·ÂS̽nÜO9#ÉdRµZ-{¼½[ù´`©öÜx|ï¢FÆki?ÂC]>žï’L&Ã:a>ñŒÐvo >‹…ùB÷ÝÚíak®‹$Ã{Èa4<5Æú¥ÏQÂé ùôýáCCCÁ»#íySñ`zY_/×Ës°¶{è¦{Ð öÞƒÜ}-b xä‘GtãÆ ‹Å@zÇÆÆ´¶¶æzkkKŠÅbJ§ÓÐK/½¤“'O†y#o„¾ºGÉ÷M÷ð°ÿa@A'ÜÃ3<<Ü“Cã{ û˜Gk‘ hxÊ|ÿsrH(k­Vë‘+ýšŸŸ×=÷Ü£ÙÙY•Ëå@€Y{x[F˜#t%* H2w/%{M"±W™ŒÓB¡¼w¹\.„ßAÆ!V‡ y"\PX(tèÐ!ÍÎÎêßø†nݺÊ–Ÿ:uJçÎÓw¿û]ŒŒhrrR>ú¨}ôQ­­­cÌg?ûYéСC:xð Þÿþ÷krrRßþö·uôèQ>}ZÓÓÓšœœT"‘еk×zΰŸ¶Ö' ýöv´>¹K›'ˆâVÇz†•Ÿ†å Kº´S2—Ù¹µØ=+Âä¡"Xí$ -Ïö¸ioOŸð `e÷Ð!2¡`>F·îóL·nºGHzk2-¨“ i?l`Èϱî!{äø©T*=•dðêÎ@õ° /„>œªÕj4Á*Iœ~4 ÀäÖ|¬Ð þ¦ño'–ŽBà î!:Ò~•0žapÇ{¢dÑóJÐ#¿[€|@£{üÀÇuPëmbÈñ¡³QâáqþèÖfž;0°wÃ=s500 l6BM½‡D"'ˆ^¼<¸‡]ÜÞÞÎÐ9öúŠ~ûøŸ×Õ«Wƒñ2;88¨™™ÅãqMNNöÜèîáWÞw—£{bIh²Ç@nÙÖÖ–ÆÇÇ{*Âu:-//‡œÀÙÙYýò/ÿ²þý¿ÿ÷j·Ûš›› å¡¡!]¹rEsssªÕj ¹¿ök¿¦¯~õ«:þ¼î¹ç­®®JÚ3l\¹rEÅbQ¹\NgΜÑïüÎïèÂ… ÚØØÐ÷¿ÿ}% MNNêë_ÿº®_¿®wº½]~ë··£ÅÿòôÛOcÌxK´2Š´¾ÄÁÅæw·n¹Å—çqxIê9HTlxà‹"ï€aµç°åçnEôD ’ž”õ1F·vE´[È4î9q˦´çy) !뇥R)Åãñ‡L&588¨l6«ááa%“I¥R) …Ð×D"Ñ+•Jè¿w°éÄ‹¾¸l d‚x†[3=œ.žÕ>þ]­QrãÖz'¹<“ þïã€Ðx艴_™‹w jbbBÓÓÓšžžÖÌÌŒR©TMÞ7¼aüÎäCì•èŸÖµµ5•Ëåoa.xgÐ1ÞÁx!¨ÞƘƒd:™„<IŽ–d¹wížRÖ‚ÿßA°_„É{Y'Œ¹Hý^äÅüó'[N†ÜûãaHív[ËËËZ[[ÓÊÊŠŽ;ˆÔÖÖ–ŠÅ¢–——{.·ô½áÖ­[*—Ë:räH'”J_Œ×½nàðæk ýgœ.*úOÎ2óRÍQo­jÜ+Œ|Ù×ðÄBvÜØBXÕÂÂB ’‚Wνd¾¦1Ê`üp/Ï+ž9H~·Û ÷¯@˜†Ö×׃ç¨X,ãç{L*•Ò}÷ݧ#GŽè£ý¨î¹çžPåŒ[ïËårгT*¥{î¹GûØÇtùòe½ùæ›J$* :räHÈ“ÙÝÝÕúúzÈÙzíµ×´³³£S§Né½ï}¯ŠÅ¢þàþ ~ë·~ûÑ[ßr7'’z슂âåC£ÖiÀ{8Ø!Hnwò í‡sñVnÙõ<‚¨EÚãô}¬†ãqîn<ÎÞ'CÚ·Îrx3€®{蟃]úË{ëÖ-mllhkkK±ÕTs¡¬e»Ý¯V«…|ú[«ÕzˆFÔ ËÿÝzëÖgía=Yàur™@”˜#·êBx¢‰Ô|×õˆÿ߉˜8óùeÎÐ1æ…?^J”ï1šššÒÈȈR©”†‡‡uýúuÍÍÍ…¹ÂÊë`Ï^÷zÐ_<ŒÒÀ„h6¯£{Š o>? Çóœh' «Ûí† â\çœ@ú³òsã¹/ŒÅuˆ~9s¯`TßøŽ{}Äû¥‘ív;”v/‹ï¾î}Þ766B>N¹\Öððpcóà•Úí¶Ö××5>>®L&£L&£±±1MLLhyyYÒ~H Ö÷'ÕÑ~áUƒtDuÔÉ¥¯?y1ìÇxL32u‚Êúqc‚÷ï„“øz½®……;vLGŽѵk×z<|ndd¤'ç(º§’ÓæóBÁŠF£ònØ[HˆÅb¡²{,ë "‚žŽŽêÙgŸU½^×Ù³gõä“OêÕW_ {žÑr¹¬­­-ŽŽêèÑ£¡zÖ£>ªr¹¬ÿûÿ¯žxâ ÍÍÍ©Ûí*ŸÏëüùój·ÛZ\\ÔÜÜœ‰„>õ©OirrRsssªT*ÁðW¡õ= ýöni}r—6׎‚>õÑXy€}!ðp P€Œ‡ò`Ár 9Ètµ–ƒˆƒÖ=(~È2V€ïò2¢|„<¸å°Æg¢hIoI@ÊÈ{Ò~÷yܾ}[’”Ëå‹Å´¸¸¨ýËíèò¡Ÿõz=Ü¿Q,{¿Lr;ãÈ€ñ0V',÷¹7Ä­ÅôËÖf/Ëœ|FC·œœúg<Ü Ù:½Á@O Á¶ùÝñãÇC²5÷"T«Õ K“Qøv¹CÂ$…þÐHm£Ñ¤ÈC£!H^‘ÊÁº¯ÁT*¥ÑÑQ% =öØcêv»ZYYÑ‹/¾Øh=AŸgÝiÞé'dÎßç²õïD3ŸÇâkù÷p ÆÊá{ëŒ5C½ßüÞûÇó.]º¤‡zHsssÊårÊçó!OÌóF îYªT*zßûÞ§‡zH«««A.î•`ù¿ïÈŸÐPèÈȽGN|L¼ÃÞ3<<r¢Ð÷úùþN~…¤ÓÜCZ¶··µ¶¶¦3gΨÓéèÊ•+=e² ±C>òLÜ+Ì»‡‡‡•ËåÔl6CùnÆ…/â ív[Á[²¾¾®f³©T*¥ .èúõë=„‡ ggg5==Êó.,,èÊ•+ú¥_ú%% =÷ÜsÁÛrøða=üðÃ!OæÔ©Sº|ù²êõz(¼²²¢íímåóy­­­ý•ð€ø:úq?·ßúíÇÝúä.mŠò8°°9 q¯†[òÜ  ùØ="Ò>˜"䇃`ä·øúw¥ýƒˆCÀéDƒwN£VIþvRä%Ïáãv÷Í ˜[±=ÄÁAÞ€ÝÝ]MNNêõ×_×ÐÐP¸‰Ù/3âƒïdÞçÒÁrT|ˆ÷' vqqQÉdRo¾ùf :ô݈$×7Ö}lúåƒõz=è¢Ù=î1cî%…P%ïûƒ>¨©©©0Ÿù|^§OŸÖK/½Ôã}ìb޼n·Û“›(óÛàï´>Ýãáž*þö< ¿HïNÆÀô¼Ÿ4ôùðbNÒƒªÕj*•JU»ÝÖ< IšŸŸ×úúz˜'ö$ï½÷ªT*ibb"Ìã¹sçT,{’¦Ýcèºëqó;—m·Û 9=P_&ÅÏ|Œ<—N§uÿý÷‡¸÷õõu­¯¯k`` '7ÈCž¤}O D)J&é_4”ïó\æÇI+Ÿ’KôØ?Œø»þy^zï ÙCï¢û”ëËöövð.’ÓQ*•ÂEs€ÔíîîjuuU±XLÅbQ÷ß¿òù|(Í3£ÍuÎ 0ýbyµ+æÆ½e|@¿X ~çIÔèäÇ Ø;œìºá¶°° \.§l6Î ö~©E'‘¹ç´¹×zggG•JE333á’T**§¥Óéà9CxPF+UýÆÆÆÔh4A^__dh||\’´±±¡—_~Y¥RIù|^ÝnW/½ô’âñ¸511¡Ÿû¹ŸÓC=¤HÚ3Ø\¼xQúÌg>£r¹¬ÍÍM]¸pAsssú­ßú-ýìÏþ¬æææBA–w²õ= ýönj}r—6·:å Äêëa²ÄÁõ*f£–Ðh¬<‡ÜóvppK½y S>.~½âQ«2àÎã˜ý`—ö=RïíÂÑp ?¤£D„ï§/zÛz·»wùÖêêªÎœ9£X,¦?ÿó?a Ñ9AîÉdRÕj5TµòÃ' ºC´Š¿÷O¬õdXdˆˆUôÀ½BȈÿ{X²A–žpíŸs½ 9˜G¶€"H›ƒVŽç¤t»Ý@ö¶¶¶T¯×uÿý÷kgg'ÜÑí¿“¨~p :ýã¦zÆäÄ Àìž ÞAɧqp‹Å”ËåtøðaMNNJ’fffÂÍöÝnWSSS.BZ IDATª×ëúÊW¾ÒóN֧߯ÁX<¼ Ù:©và•µíÄÝA®Ï#ºÍß`¬Zúâ{’ï4€p´*—ëµ·ÓéhiiI‡V2™ –ýr¹¬d2©C‡©Ùl†u‹î‹Åà¡\^^Ö{ßû^---:c½x¸ªï视q!ÆÅ:qô04Ï;‹V´ó¼=_w<‹5Ýéì•W¦ü0}i4ÚÝÝÕåË—5;;«\.§jµöŸvw÷îï¡8ž¯ž(í_n qÉårªT*ÚÚÚÒúúz¸I<¶ÁÁÁN¾J2™T&“Q"‘ÐÆÆ†nݺÈ`½^{{µZ ^âb±J펌ŒhssSÏ>ûlØ‹oܸ¡\.§Ç\sssúÏÿù?kiiI«««Ö/ÿò/ëûßÿ~HÐñÅõÇüÇÚÜÜÔÕ«WõØcénoé·~{;ZŸ€Ü¥+u”€¸ÕÒãíÝk")^žàµV¤99`yN,Ö{c¸[y~”PD½+V$õzN8˜|p€S]Pµ<ó…`Þw' |×åé9ÖTÑÙÝÝU>ŸW½^W2™T£Ñåv.üí‰ü„“Í\ ¢Iãî¹pË3òÄ0WQK¿ËÄA³‘›¢!©ÈÖ½,BõZ0FwÀ*íTÞÁ÷=œ…²ËÑ’£èˆ½Õji~~^ƒƒƒáVûz½Àh<¾ŸìÎßž|Ï;˜è¤Î­ÿ›››Ag|<&ïú‰ÎR€`rrRÙlVgΜQ"‘Лo¾©«W¯êÈ‘#Êd2ZYYÑÅ‹µ²²¢•••ÐÏ#¹S ·‚{8”Ðy×m'ýÒ>@v½poGT'ÝKÁs¢$ÏÁ6ŸE—=™ÞÇäD—>Ôëuݺu+\°7;;ª”17QëðàÁƒºqã†Þóž÷„9ó0;ú cs²|'ï²åQo:Î{Ð÷¡{þ=EO™ô9úå†N˜w<Ÿ9pà€šÍf¤/xÄ › ¥†}-r&LOOO^.—ÓÐÐPȱÀ{ËD;;;“´çÉÀÀ“N§ƒÇƒÏ!P”)O¥Rêv»Á³rèÐ!•J%%“I9r$—³gÏêÅ_T·ÛU£ÑЉ'Ôívõó?ÿóJ&“úêW¿ª_|QµZ-ì\`X­VuáÂ…;µ?­Ojúííh}r—6ÂPܺí{À†'Ö9àPâpp+¿?“ÃÏã—ù¿´Ÿ¬ØíîÇj;1òþúa‡eØ-ì~Øs03œ€€2÷48pp„ 9pt+gôæíhL»{E:¤}ë[ß €ÃœÇ¥'“É`±wÒ“ž«á“ð$iÿr:©îmâ™î!ŠEn=w‚!õ†Î8Xõâ€=ú®ð~÷X91ñzGÐ1tœ>zœýõë×1Œ‚DŸ3'„ÓÑçx<*Pq© }EIˆ¤ž|©÷ºÁÁAåóy8p@‰D"x¾ }ív[W®\Ñõë×{B¼øÒoÏÇp‚áä›wú}*ôÑç9Büܺ¼£¹-wò€¸îÐ?ö'v%x.3šÿ;‹éÚµk:}ú´î¿ÿ~-..*ŸÏkddDkkkJ$J§ÓÚÙÙ w~Äb1U«UU*MLL(“ÉèØ±cšŸŸï’&ÆâeoÝpãúí^@× ôÔ +ü ÀwCBÔûˆƒª[[vvvB’6ÏéÙóÜ ‡ ···5??¯ƒ*ŸÏr q RZ6›U&“ žòD†‡‡U*•‚‘!•J©Z­*+›ÍJ’*•JȰx®ù[[[ëY›››PµÛí@zJ¥’FFFÂþQ©TÔh4”ÉdôÊ+¯(ŸÏ«ÑhèìÙ³’ö£U}<äŠÏøûÄ2È‘ç¸'Ǧ“W'1’ÂeYôÐVþìì¬.^¼>¹ŒÐorHt»{%v=ÇÅÏ-—Œ•9qO¤0§$Šòóh!—%@‹T###=`Àʘ<ÜÄA.ñøZ'AòE_<Ô Ðì^'âÉÝRÌßx(‡ (~Ë-÷>Ç4×Ñnwïæg¼'”…,8pqr _ÌÓððp¸ƒ@±XÔèèhHÈ=zô¨æççõÊ+¯„¤\¬ßV'êNº˜;š{€sOw¡Ÿ!ÐÂÖЕ_`褃糞øû^@ø @šïº¥?jµ÷}ͽ²###:~ü¸U©TT¯×599©………B€ êüùó:pà@(“}åÊ•rGîýðVô†~“»áå„Ñ[ÿ¾oyé^÷îµÛû%fÝSl¼O>Çì³è¬Ï2ç{ž‡ÆÝB'Ož –ÿZ­ÆEe7¼?Íf3\øÇÞ_(´¹¹æ½Z­öäÜPÖ6‡ûGü†zî/¡¬îææfÐ7Št:{áÜ'‚|'&&”Ïçµ¼¼¬±±±@\î¹ç}èCÒÖÖ–ÖÖÖ488¨gžyFFCßùÎwtùòå SöÉ¡¡!ŒŒ„|+7ì¼S-J¾œÏí·~ûq·>¹K›'÷:XÁ²‰Õ’àf?t8`¥çÐìœy¡)C.©çð¥_žOQ|sxci¥ Š,³Êä8©ÙÝÝ À“C°ç¥‚“‡È¸ÙA‡{Epþœf³©‰‰ 롇R»ÝÖ÷¾÷½XÿÈȈ’Éd\;•Îé© åd ù#O¥pc¥wðáá-î]qB€…¯ï0ÌV`>‡ü¤ý$åhèU´Ê´W ÀÀÆ;츷Ê="Ä‘XrœI½åœy¾' cñ†Ð`öè¤Ì=8¥½C?Nkq<׿æfv›››Z[[ ¥R!54t—1“àëºìžÆÀ:çsî¥rï”Ï¿“)¼l¯ØEÕ(æ 〒³ÆÝë„®26úë{‡>¹…¼^¯‡uU.—õòË/‡qSbeeEÍf3xZ«Õj#ÑB¸Î«¯¾Æà—ú‰zÚ ƒÈ=Ó÷öUdá2­×ë¡- ×%Â;Ýë^æ:‹¢Úét´±±îã '‚u†!ýC§Ÿxâ =÷ÜsaŒôyŠÇãÊår=ÕÓ Mx<‰„¦§§µ¹¹©z½ 4 år¹àÉcžGFF499ô1NkjjJ7nÜ„|ggGÉdRÉd2ŒáàÁƒšU£ÑЂâñ¸æççÃ~?55¥ÉÉIýŸÿó´¼¼J6_»vMKKKj4šœœÔîî®&&&Bž û^,Ó¡C‡ôꫯþ·ßú­ß¢­O@îÒÆ燔´ïj„°Ñ{%“v»¬Z~‡?ÇApÔ Ñpk4/5´xø‡¡Ct$žÂx‡‡BpÐsð{Ì;ÿކînx>@ÒƒeÒÁ:À°Ì8²ÙlO˜ÓÜÜ\(¡;22¢z½Þî•Íf•N§µµµnôhA¯f³©]¿~=Tb¢oÈÝ•ßææfÐYÖŸq/ˆ‡±ÝKÈ>à±þ7†¯;,ô¬H.ž·Ä3v¼xüaÏqo÷3@Ò+¢«'ÞK wcÐXkJ¥RÊd2:wîÜ[<¯ñx\õz=TÐtìØ1 •J¥¹wÉ6èÐææfáÀ‹Bø¾©pãÞVÏ{bÔ¡C‡T­VC˜^IúEˆd=²Þ=§¯Ûí*›ÍªÓé(N«ÛíêÖ­[zê©§4??îÇ`¬’Â>ˆŽ²¯e2™à!Á3Q­VU(Ôl6‹íXX\\Ôúúº¦§§5==­F£¡ÍÍÍ@ÀÑ;ÊY+›ÍÏÊøøx( |àÀ}ò“ŸÔ‡?üa½ð úú׿®ÅÅEŒŒèöíÛ:xð žþyý¿ñ7´´´¤R©$Iúà?¨ßÿýß!bxø~í×~M¿ø‹¿dó_þËÑùóçuõêUýUh}oE¿½[ZŸ€ÜÅ Ð0 ÒHÀ¬Çä9Ȇ††BWÔêÇçi‚$š–„–±*rØòLȃÇF|ø<ãs PºÀψnÙv &äŒçq «Ùl+!SÀ\fffôÄOè™gžÑ¯ÿú¯ëßþÛúÒívƒ|’ɤVVV´»»Û—Ž,kµZÏÈÑÐ5÷@øL"'ÈR<SÚ'ƒŒ  AŒ¹¤`yDSš øÐÐP¸{Ës£X.»Ý½$P÷$‰`™E_˜äácÀêîap›››áù‰DB333:xð Ö×׃£÷x-Ü£áVu‘³U*• ŸðžKyQ D(êÍjµZ* !V}uuUÕj5€mÂ^¢÷V¸Ñ­éè†{—‡çñ='÷’Yð;fx/^"HL:î)• AãyNرÔo:ˆÇ2›ÍªZ­]a̬Éz½ž‡û±¸çým·ÛªV«ÊårÊår£kkkáý¹\.ëÍÍM•J%ÕëõñÃ×=ž^'4nÈÀ#E_ùŽƒG>0ÇóìŸeÝŒŽŽjhhHccc¤â¹CænÌáÝþ‡ùJ&“a¿J¥R!Œr``@étZÕjU[[[úö·¿­OúÓúÃ?üCݾ};È N«Ùlíèè¨ÆÇÇ ÃÐjµB(a§ÓÑèè¨ÆÆÆ´´´¤B¡ÖÄ•+W466<0Íf3ÜñH¥RªT*!dbb"ì‹‹‹jµZ¡ìr§ÓÑÑ£Gq^ZZÒ‘#G4==­õõõpéäüÿQ™LF…BAêtö œ:u*$ÄKÒ?þÇÿXNGÿðþC½üòË?úü.j}RÓooG‹ÿåé·ŸÖÆÁXƒHxâ'‡±ðÔßÙÙÑÖÖV°,rˆyŽG4~[R <î†çç€\çî9|8Æê(©'lÀ=€Äb{hH´:'!ûϹ±whhH™L&?žI¸”ËŠð.¬Èå¾ûîÓ믿®]»vMíöÞÍÄôÕs lŒò…%ÛC`¢„ I“ö-æJÂÐ;Xü˜SËbL1áy€9€ßÃRíÞˆÔÈÈHЫX,€ƒWißbˆÆ[€g„÷9¡ÝÞÞ„ }\=üðÃzÏ{Þ£Ï|æ3Êår=³‘iÀjM",@2«\.‡JUÆ288nW÷œ t‹²¿od˜ÏçcÌ#ÏŸÂh@‰R'й\.è –oi¿¤-2’è ‰&¡BNȸÑh„ù¤¿ÛÛÛJ§ÓaMÓîm`ý!w÷Ôañ÷ý%‘H‚ƒÇÃ÷'t€ÐL&Ósag¥RÑüü¼666T( ÝÙÙÑÍ›7ÚCÇ766$)x766tòäÉ s¾`ÈanÑwdí2@_ysïÞž É£ü¬´n¸»»«7n¨X,†yɬx.D›wÜÍ>‘Ïçƒì0Ö?:!½ô|5ö2Ö.r@÷ÙwX'NPÙœššÒðð°ÆÇÇÕl6õæ›o¯"$"ÁúÎårZ__ïÑ!/x€Nd25›Í£AHß+¯¼¢3gÎhss37?c»Bæè(çÂÒÒR¸°^¯ëðáÃÕ‚êõzðAhCèe±X ¥ußxã ¥Ói]»vMÙl6jR©”jµšþ×ÿú_úÃ?üC5›ÍÎÚn·µ²² ¬®®êÁÔ‡>ô!mnnêÖ­[*•Jj6›Z]]U»ÝÖ~ðÍÍÍé‘GÑC=¤'Nè7ó7uðàA½öÚkúim}ÒooGë»´(F_Ñ\ ³­­-u»û·m\<=Ž$©‡ì¨«|ßøÐó{€’[\UFðTpð¾.€)\“¢¡_ŒGÚÍ=ù €@i?ü2jÖCޏwÂ}’7ëõz8ðâŒ×åyp²¨A DžOÇU«Õø`Œÿà¹Ì+Ï$œ ÏAª{ÞøžWTò2¯XL@º§Íÿ%¯óâãsÒ–N§U.—C¹UÂB42.twùñYæ?“É„ûYÜ3hÎårŒð]?óÁ³ÑØØ˜Þ|óÍ&ÈÚã{Ì“¤ž0t"J4Ý€\|^¸[Á÷À2aX.ÖŽ¯>ëÄÂÃ4y6kšç"æÁÏS©T¨zäcbma¼ˆz;ý™årY###êt:º}ûv ‚###ÊçóZ[[ {ޤеµµ¥J¥¢ééi-,,èßø††‡‡CÕ&æâà¡XôB-eÌž~1^ú` »Bþb±˜ÖÖÖzô}e=qÙ ž.ÏEŠÇã!ÔÃA&“é ó k¹R©h||\gÏžU±X ¹5è„ëć½e||\ÉdRãããZ__W6› ó1==­íííÒ(í• §bz:55r6:¤b±¨ååe­¯¯kjjJ³³³!ÜŽó†Ü‘éééPœ «T*)“Éhii)T÷‚?~\ÇŽÓíÛ·uþüy]¸pA7oÞÔÊÊŠ~îç~NëëëZYYÑ;Ýú‹~{7µ~Ö]Ú<î×Ɇ´o¡ôC‰P ƒ”Xf `xøž“L&B2ì:xlcaçY^=kxx8ä^ð˜xŽˆ[9X!U–Bȉ{Y„0H ·S{hއcy)cIÁ™J¥tàÀ¥Ói-..j{{[þçÞ“øÌ|‚”Éd‚•PÚOR%,Ž>z<ï0'&ž°Ì÷ñˆ —›“@H²D®€ òb¢÷ñÌÁÁÁàYœHû÷¹8Q‚pŒŒ„Ð.@žë&ºâ!zŒBáÀ¨Õj©X,àðÆo„$á(Ñâ¹ô‹¾S^˲“HÈÏÈȈ†††4;;€¤[îù<7?ÓÖ××Õjµ´¼¼,ëõz=è~4‡Äs€|ž|â͂ؑÐìÞÍÍÍPm9úˆì+!•è•—e.ý3ì ^5 ™ð<æÎ÷n¸†¤àes¯¤ë(ï„üB„=d ýÊçó* :|ø°òù|Hf®Õjá©TJÃÃê×ë!d)ë±ÇëñÚ2·N^ÜCË>æ{'{òBß=_ YÅãñà™a /< óêyuì„D²çÕÉX[x¾ŠÅbaôjh“““Ö‹/¾¨r¹¬Ó§O‡=‚ËåB¾¹ÉdR“““ÕÌÌL ‡ÖÆÆ†&&&zªiu:{¶ð*¢»ÈûÀÊf³!_ŠòºN„ð Ažõó?ÿó’¤b±ö¤?ú£?Ò /¼ 7ÞxCù|^±XL“““š™™Ñ§>õ)}ö³ŸÕO<÷Â,--õä;¾Síÿ5´êÿåO¿õÛ»õ= wióð-ißbîù|žƒ°ëáFž, ðñVž_«ÕBâ2Ïá÷€}Ï-p)í'˜ó¬Ü|Ž~:øâ=üŽM•ƒžþ:€ôwþMè§´_&âIá@ä°¬×ë*•JpØóïÑÑQu»]---Ý1'«5a^׫ä06æÌCt+qúîi¢yXcñyu0.)„?ñnaî™' €$1ïžKB¨•“cæk·¤·šôŸ9év»!‘›~@>“—ŠÆÃw‚޾’$[©TT­V%íy#¯ñx¼'`Îzáÿ¬‰d2©z½¬Úî-p2ízçÄ ½ôùbýú¸œX¸Žaw‚ç®0w¾–ÜÛás^ûúƒ´ynF ¼¤¼Æ’ÉdÂ\ìîîöܶQ=bî Ä4~Þn·566¦K—.9&“I5·Ì7ò»qã†ÆÆÆ´¶¶¦\.Ö }p½`ïð}`Œ.ºY3ö67a±Gv¬KžÅÚñ{„³‡¢Cž?GB?D/ß»‹ïa"±wQc­VëÉ÷¹zõªN:îØT.— ž2ÅtR\*•4>>®Z­¦­­-åóy-,,„1d³Ùð^6·c”¹yó¦fggµ´´ö¢±±1¥ÓiµZ-MMMõ¬Kr¸Z­–:¤7n¨ÙlêØ±cÚÚÚR¡PÐì쬒ɤ6664;;«¿ù7ÿ¦>ô¡I’{ì1]¸pA_üâµ¾¾®‘‘‘`$ë·~ë·½õ È]Ú›²ä`Ý5žLí@ßC1lQî½ÀÒçr(󜖤ýr¹¼Ï¿çÆJ؃ƒ!óü À pOL:}âÙ~ñ[¿±,JAe#Â2(kÉÅ{€`B¯<´K0`ˆqºµ“¹Ä‚érò|÷NyÈ …yõ„q÷f8qeìÈ+8síúä!mQk·ëL·»WJ³P(2S.—µ»»«r¹ò£ßõw“TìóŠž¶ÛmÕëõåcºÞò=BVTc1ÞÜÜ ÉÊÒ~ØŸ‡%±†§Ï:244bÏ!ŽQ ˜öð)š0ªÏ‡{ÐmÖ4ëÚ=‘„¬áíaüþY÷º8x&,gyÿÀž#ákÙ N'„ñ{Â$=G%ú dÄóœ¸ ·¾¾®ááaéܹs!§‹gxŽT±XÔØØ˜fggð¥yå7Hc…ä»2Â~ãFÖ&úásÌz`ÿâxÛ˜;Bö Ù¾†{ŠI¸Nmoo‡\%öIÁ@8V»ÝV¡PÐÐЪժnܸ¡Ç{LßûÞ÷400 ÑÑQmll„»ŒÆÆÆ422¢ùùù@˜wvv´´´Ô³.jµšòù¼2™Œr¹œ´ººnYç9F#xE!Ìì‹\È™Éd …àeŒÇãzá…B.W>Ÿ2/‹š™™ÑîîÞ]>§OŸÖ™3g‚·(‹©P(èàÁƒÒÉ“'U.—uûöm½ÓííòVô= ýöv´>¹K› ÍPyØB¨8´Øœw" ìIé~ ¹ò°°;‘,¡Q/"ÈÏs/Œ?À6;úŒ\;¿w`ÅaÈ¡ïDÇeqäÈ¥R)]½zU×®] 㧆¥R "‘ÐÚÚZŽQ€õ0yȃRÆÂÿ8óÏù`|Œ™xt'†®cþ €"ÏuÌ-ñ.âÄÓÉl,¶/?;;«ÕÕUe2™pÁÀ…øwôŽþžá$Ì+CE?ï`Ñó¡Üšïc¡¿W>Ÿ/šÏçCqI=!5¾ÅÍfSÅb1„&QvÖמW>s N¸¯7¼9^–ØC}|Ý: àoH4}K ä×=Kö™gï;kÔCÚ<<ì‡ydÜ“FAúgž¼\³‡]2×è~"‘P¥RQ±XÔ‰'‹Å4==­R©¤X,¦©©©‡H$øl·ÛºuëV¨GŸÙ{ ½N®‘¹{”}Þc±ýK £†óìû™‡«º7…u†]_½l:êwx;½Ê;N¡ÚÜÜ ¢T*¥z½ÊAw»]U«Umnnê±ÇÓK/½¤jµÖb«µwky©T !`õz]­V+xM$…0UŒ/~¹*¤1•J©ÕjiggGÕjUCCCZYY “R©î)—ËÁÈÀÚØ«$W¯×ÃþòàƒªX,ªÑhèêÕ«!dkuuU—.]ÒÚÚš>ö±izzZNGÏ?ÿ¼þôOÿ4ËX__·¶÷[¿”  IDATõÛÖúä.mXSˆxØ’¤žC= ªÝ²ìß•z;ÿwÐKþB”ÜH½á=Q°ìyž§…˜qy¨”“$¬´Þžã|™g~Ë Ï¿ á‰ÅöâÎqÓsyï„PMNNªT*izz:ÖÜÒŒ<ìÆ^Â)…“>0öᲈ¸ÈçŒæòôÄ×+æŒÏz_<ÄljèÚÚš¶¶¶B)ù%äd³Ù`Åvâå`=v¸'=tbêÄírCÿãñ½ün·pÑÛXl¯”±ç,áÍpÞð\Æpg F½rîÕó0ÆhøŽ¯qä`wB.º¬}¢<2d€ïIèQ£ï€òlæ†i'T¾vœÜòLÀ>ct/•ë-ÞIA¿ùîîî^1 /û<33n¾öœ Öa€òVk¯äl¹\U¾X+¾ú¾äd¾Ûí†Ü Š-ÐÖ}vBå¿'4ÉÃÎ|ÿtýõ{\‡¢Â¹zN’Ü+âž×L&£½’¶ÎÞ=8ÅbQ¥RI§NÒÔÔT•ŠÇã!§¹“·ããA.„Ìù|Q|À=>£££A/|oêv»ÊçóZ]]Õîî®nß¾­l6«d2’ܧ¦¦Âœ¶Z-}þóŸ×Õ«WõùÏ>̺:<<¬ååe}å+_ oyyYkkkaoÊçó!þn}oE¿½[ZŸ€Üå ½ØRoY·ªy¸ƒÇ;»…^zk>  )`2 Šy¾[x£a'¼@ààßÍC¼<&Ïr«¨ƒuoþ9ðÑxo'oƒƒƒ:xð ÆÇǵ¶¶IO¦M§ÓÁÚ·²²¢F£Ñúá!1¼ÇÃS¢s‡E“ÿ;™ã¹¢â Øˆ‡“¸—$*W.õ(yhŸÙ8˜v+:ýív÷.ÜÚÚÒÎÎŽ¦¦¦ÔétÂMȃƒƒ* !‘¢ÿ„ÝãÂg¢ž()bîôyH–~cc£Çƒæ¹xÆ#`ÊÁ ™¤oÀ $ïàO€ë}ág>Wô Š|È8a`N!}Ì%·Uó.¡xî)âè—ßù!)„`²/x"yÔøàsç!_Þß(!¡¹±H E¶··U«ÕÔjµ”ÍfC¾Õ–Ø7âñxéÁRO8ùD.þíúçY;‰d-²˜KÆç  õé2ð¾DõERÏþ‰\èësgg'TðÁ{gggµ¶¶¦ÍÍÍPáêÆÊår:qâ„^y啞œ8À¾—)fȃ„3^<„"7![BÇÐ}³¢!dÌ#¹4¿ø‹¿¨T*¥Ç\G 0Bewwwµ±±¡­­-­®®7å­s¹\ÏÚoýÖo?ZëWÁºK›»þiêP|†Ï±ÑÀ<”JR8±lš9lø·[ùøó3iß燮&.ýs+®[ï£VA'?Xo¹SÀã2á»îu‰þ;Jœ° îÝOµ—N§n4çPåмté’8 [·nõTõqù;pö031Á:ïD™ø˜˜'OÞw¢ã:àó°¡_ü L˜?çý̽W~òðæÐÍÜ'{—έ¬¬ÒêÚà;i`ÌN¬¢ºØòd_ï2ðd{,묀9s ’ÔC8ªÕjðrH c‰&=#{tbàô6Ÿ'H#c¤ît ¼{ü|NŒüœ{\Î4'ü,¢Þ˜hµ*72xú‚õ²B'¯Äçä–5îc"\ÇuÑ Ñ­¯¯o„‡í![ô V«ivvVzßûÞ×C’Üëkà oú ØnµZÁÃä:Ë¾Éøœ@²Ï ÷–zeB÷H²W{…A×i¼ÛȽãBÉíím-//+ŸÏ+—Ë©V«)‹©T*éêÕ«j4Êçój6›!œ‹2]O]¿éŸÎÞ­æpÜÛV«icc#ÈäÄÄ„ÆÇÇÕívuûöíà=¡÷ÄÄ„>ðèâÅ‹ªT*úÕ_ýÕPýªÛí*›Í†‚†ªÕª*•Š$)ŸÏ«V«©\.‡ uïdscÊûO¿õÛ»õ= wiã`ˆûÁì–r÷\89!œÄ¿ðs‹ª‡ p7„´_5 + «–_hEÝÛÀ‰Ï-ÖÀœÜH }æYüPÀ¸ÝÒ Ù@n]wàÁaÈgø?`+k§Ó ƒ¾\¹rEA6~»g æ„ÃÇ@°RÒú‹•Ž1rKµ±{¨Š[¶ùs‚pïaÌ£EÚs^9†~nmm`Îc±½øt?¯\¹êùiccã-àË=iÞOãôÍA¿-ÿ]Ô£C\9„ˉÀokk+ä ð\gq")‡è(Y3Ro¡_c袓 jµZÁ+—[–£Þ9bñ»Ýn‘dé‡ßÛÁßn‘ÇK‰$ê}òõâúáóæ¹j<Óeq'rö„íd2ÙC~777Cø#Õù<Ã×ú955¥©©)u»Ýž›ã}¥žòœ(ÆÉ\AÜ à®/ÖÄ»Eœ@Fs™x2$—c ”8ĺÓé(“É„yÇ+‰>R’–gW«Õp¯G¥RÑÒÒR˜Ö;²§âX:ÏDn¬™ãÇ+‡LôÐ8΋ÑÑÑP=ŽñC$×××{ŠHÛ”J¥”Íf•ÍfõòË/«X,†þAdœÄ èĉJ¥R¡Œ:žÏ·ûik}ÒooG뻸¹[>Þä$$Z³ë9–]ZI½—ƒ¹…¹ÓéôòôÇ«E£ƒ,x.ÄAê—Ö¹wDÚ¿ƒƒ`ãÏGQ0î–UOÒ‡ÄùÝ'­V+T4J§ÓªV«*‹áÂ=äI;Ž–——ƒl‘™[íÝ;äVcä9ñ)¾ï —ƒ 95þ±.#+æËCšµ?®œ@E¡Ô[°Khòô¼ €[¥RQ6›Õää¤ÆÆÆ´¹¹©‘‘år¹ GFF”J¥´²²¬»ôÑ­ºîuqK³Ë)º>X !H¥RÁ*õØI1ùÙl¶‡  Å8EõnwÏ“ådν® +Ÿ#Ÿ{¿ëƒ5Ãzñü¨·Ê=!Þgô͉šÏ-zåkÒŒáÁ=N@迯AþÍ:s°ëëÔ=VÈŸçr¹ðOŸÐùb±¨ûî»Occcj4ÓÍ›7µ¾¾H5ûÕîîn´ZXXè)ÕwôÜ+ôÅ sãžfI¡ºë0ûÈ{'Æö+'Jô‹¨ÝÝÝpaª$ ¥Ói­¬¬„ÐGî‰ÅbáÒÍF£¡\.¼€CCCZ[[S&“ÑÄÄ„FH`Ç4::ªÙÙYýí¿ý·õïþÝ¿ aªäRÑÏf³©«W¯jww7!Ä!]xÔH‘«Ä¥‹œU{ww@XŸ~úi=ðÀ!ùþüùó=|ý …`t@>¢|>Ñ;ÙúÞŠ~{7µ~Ö]Ú¼B8è=´ÃÃYÃÃÃ=!+Qk¦Ô[»ÞŸCxï€C*ZÔÛà 6jíu‹¥7H‚“úÍáLõ‘ö/XÀ=nÛ-·TI’,p•J%ĉŠº÷Þ{Øyn4·Æ²÷ ‹…Ùxîý‹’ú 8àg4Žnå÷ð:““EªÍDI§{Fr¹\¸˜ «3ÅQñʽUFC·oßÖòòr°þ6 ÉT-r¸ÎãI¡?ÔP³> Gè;þPT€ð3€úuæÌŽŽ T­V‹ÅBE%g³Ù  Ô²“qúi¢¸A::ËZ"!™“3“Íf{ Ì1z‰~S9aåã¨'ÑÉcsï%²ô0%Ÿ#¢o|ùdòp4sÝö} =eŒQòÔôôtOÂ77ÑnY—kkkzóÍ7C?)E¢^dÅD†ì…ZÆŒ ¶¶¶zB±þ£ îUõ5æ—t²Ÿ–Äe«îÉclìmxB(Ÿ›H$T­VC¨ çÏär¹ƒ!“¥RI…BA÷Þ{oð„&“I¥Ói}ò“ŸÔûßÿ~ýÌÏüŒ …‚666B~{x[­–nß¾ýÿ±÷æ1rŸ÷}ÿ{föšcçÚ‹äòEQ$-SŠ)’i¶%ÙnkÄnœÄMÔ))"©‘:JlimÔh†á´ ÐTFÜIÙhYl‹²,W‡II¤.ry-%wwÎÙÙcfç÷Çâõì{Fò¯nkY±9@pçú~Ÿïs¾ßŸÏûóyBª^Rúrp©¤à…Èf³aÍñu—ôÑÌa’sô÷÷ëoÿöoU*•$Iÿí¿ý·0žFFFô–·¼%¬­VKårYÅbQçÏŸW©T ä‹™s?‹å‡‘šÇ{,ÌÙîO?ýtÇw>¬;î¸CÃÃÃÊårú…_ø>}úu¯û¥/}I{÷îÕÐЮ¾újýÛûo;ð@¯ül”žä -,ðîÖ—6šn‹ðÒÒR¨Ïd2A;ÍÆç×å:S¾788¼X˜¥Îƒ%… ±Ûâ B8AOìb÷Pt; áZÜÛ%!€'—mp1ד6À},S"‘P>Ÿ×ÕW_­X,¦ééé”Ý#Iû÷ï×… ÂI¿Ü =ýà}Bq9šK€Å|×ÿÌðy·÷ă¨=È=Aô§ßÓAˆlèÖV²WaM¬Õjj4êïïW±XT&“ 2€2ú¦X,*Ném–H$T*•4<<ú#‘Hýî-r@GÛâ…@&D_»ì 4ãÌ3,!g@ iffFÃÃÃZXXèhÓjµúš1Þ-õã3÷Š07Ý{A“<äiNð±{à7¤×31Î<Ëãé §À÷õõu( у‚…)¦“c¼ ÔŸµi4 ÄÑS&;)bvƒ37=Å0ó†úÕj5;v,€ôl6«íÛ·‡qÌéèKKKJ¥RêïïW"‘Б#GT¯×µiÓ¦bÖ Ü›yǵ¸¸ÚÐe¨žÍŠvaݡݹ>ÏQ¯×Ã÷ôe· ŽyÉk¼*’B67€;㢯oýàÁþþ~•J¥ÍŠ{Çãqõ÷÷‚@&¯ÕÕU•ËeMOOkß¾}ºá†túôi]{íµzÏ{Þ£hÇŽš˜˜còüùóZ^^îˆñb 8PoÆc¸cccšŸŸc®ÝÞHf±¼¼¬L&~,--馛nR¥RÑ¿øE={VÕj5x`‰„b±˜²ÙlY‘vï'$"ûf—7Ëòïÿý¿×{ßûÞŽ÷®»îºð÷+¯¼¢Ûo¿]ÐßüÍߨÑh賟ý¬n¹å=÷ÜsA~,IŸÿüçõÙÏ~V÷Üsîºë.=ýôÓúô§?­ .è?ÿçÿü{¦^yãK€\¡…ÅÙ½ nÅt°ƒÕ8®}·j:0u Øx»OèÆ²çò áX—X`]ÊÐ]t†ØP\31üp< Ý M]yÝý@N—EÞ§µZM­VK×\s&''õì³Ïv€@¯' PÅó˜¼v[—‘ð[6sžÉA}Z[[ àÎ5\þæR<Ò†wˆ†ºidd$H4 ×]wž}öYI ±Ä Mºêª«466¦W_}5Ä€lÚ´Iíöº.7„¶q0êºû×#~Ãx€øá°>HmËá„H;ÞsÛ­}Ü‹3Ö_úÒ¹:Á—ÖÉÀ¬{¢¨ã×¥Bn=gnPÕÕÕà uÏ@OR'$pM3/Üsᤠ>ãÜc)¯Ìa_k˜/>ö¨ƒ{å”Z\\Ôì쬶mÛ"Þ7dsx 8ïöÛoדO>©µµ5?^G ÷b ˆ¿¡¾ž}¿™Gî…v#D·üŒ6T­V k*m‹aÇ{¢Üû:88dgn̼ÇbëgŽŽ†3j2™Œ …‚²Ù¬VVV”J¥Ôh4Âóâ+‹ZXXÐÄÄ„~åW~E[·nÕw¾óE"=úè£úÚ×¾¦™™™`\r£õ”¤‰‰‰@&b±˜¶oß®z½®“'O†6‡¤ éòåË!i‚mµZ¡^‡ÒÉ“'uèÐ!õ÷÷ëšk® ÞÊááaý›óoôðÃëþûïçšD£Ñp ¤»R©tÄj½Yå" ÿ»kîÞ½[ï|ç;èçŸýìgÇõÀ²xã7j÷îݺ÷Þ{õ…/|A’T(ô¹Ï}Nwß}·>÷¹ÏI’n½õV­®®êÓŸþ´~çw~Gûöíû1=U¯¼Ù¥G@®Ð@rë¡/2H¤uBzÐT*´¶x5Ü{ un¢ÒÆApžYGZõz½CÖå² ·Ô³a"AÈîà.B–ã@›ZêÈn%ØsMß©À<™LªÑhtdcŠFס“ÌËd2áoê·¸¸¨#Gމ‹ß²@é¤ݱ CΚ Ðn™ ÑÁ¤}¼{x¨ý`M&“¤ÓR癌Z­¦jµªD"¡H$¢‹/ X>yòdë¹\N/^ ×# t~~^¹\N‘H$ÉÆãqÍÍÍÀ×h4”ÍfU(BC‚ç¿ÇÃ\Ôøø¸æææÂ8‚`âa` CfnHrfgg•Ë嘈D"š›› mË3Ñ–0Æ0ue 3qRŠŒÇ œgÂCàr·T¹˜ƒwžÅÁº_—¾vBÌØw(mî^6¼6Uæ5÷fœ@ ™'´À²Ý^?ïÁÓ«ÒÝcÖecÔ…±ÊúP©T”Ëå422¢x<®Ó§Okll,ôû™3gÂX^ZZÒÉ“'uýõ׫\.ëðáÃaîЬi’B5duqqQ}}}Á“ìI~7&@z½ß˜‹ÌWÚË催©Œy¼t.£¢ e‚@p~dŠ1AÜH½^W£ÑP2™ nâÇ“òꫯjëÖ­úæ7¿©?~\<òˆæçç;¼Ë’ÁÆ«œjppP»víR¥R ózbbBóóóÊd2*‹:sæŒÖÖÖ‚·jxx8ô=©¼©óÊÊŠòù¼ŠÅ¢>úÑj``@ßýîwU­Vµ}ûv­®®ê?ü‡ÿ Z­¦›o¾YÔ7¾ñ =ôÐC! X,Ó®]»ôâ‹/*“É/Õ•Xº=·^šÍ¦xà}âŸè8¬qûöízï{ß«¯ýë€<ôÐCZ^^Ö¯ÿú¯w\ã×ý×õ‡ø‡úÆ7¾Ñ# ?C¥G@®ÐâðEѵÄL¾'ml’€À- ‰ß Œ Ð.¢×h4Âw]å–;ôöÄð9àÐá'¯¬¬k:€KÚlšÜ° pi€ŒMÒ­“ñx\ccc!…c½^‡k±I...†<ú€Zâ $n¤uùà S€rÃs#«s‰²I¡®n~CARƒ<Ç-˜ÈÌ7H¤$¢Bß7›ÍØ €“Ôa…aÅn6›x +‰„ƒ/^¼¨d2©ÑÑQ]ºtIét:»—>öøڱŸcìG£Qåóù /ñ8ÆÉØØ˜HI&“ô0.]*å²:îA›1®x^ÆR%æ"‘H(•Jïd¯ Ñ-ÔÔ‡öÇšÍ=<>€±Òß߯ÅÅÅO©'àÙø Þ—IAŠÜûÂøròÀ5»Çgu8Â`ážžv»­D"Ñ‘­‹ñHÜ 2›ÙÙY;wN—/_ÖÎ;C D"¡jµª¯|å+Ú½{·–––BªWºÇ a|ñØD"¡z½®jµÚadq#†÷ãíè&(x2Ü+í5÷pÓV~˜¦¤‚xqq1xƒ Þ÷õ›yB~ˆ7Ä¥tîk6›ÓwÞ©r¹¬|P³³³¬0.é#$WÔOF¥RÑøø¸NŸ>­X,¦z½®J¥¢f³©ÉÉI-//kbb"´-cñüùóa® k÷îÝŠÇã* ZYYÑm·Ý¦r¹¬ƒê[ßú–òù¼Êå²üq½ë]ïÒÇ>ö1-..꥗^ çû\¸p!¬i—òf–7C‚õ[¿õ[úå_þe%“IÝ|óÍúÌg>£ƒJ’Nž<©¥¥%]ýõ¯ùÝþýûõ裆ÄÇŽ ï{Ù´i“FGGõâ‹/¾ñÓ+?±Ò# WhAZtï  AÊlb€ —´°ù¹õ›â–Q@ÇââbwljÝDƒ‚Ԅﺤuë®K›ØlÙô©?›:ºtd]õz½#å$¿sk*Þ È›;Ï y !‹éúë¯W4Õ… ‚e¢T(‚Ešv2Úp%P$´\Ǹt˲¤NÙÏàà`°öÈôòzúÐ%bÓn·¸CÒ9Z[[Óâ⢖––”ÉdPC›Íwn¿ývÅãq8qBïz×»BV"ú²\.ëäÉ“ žÓ§OkyyY“““á™h+ÆxéG—“AÈF°¸JëqO¹\NSSS”°ð ’”1ƒ~|iiI Tº…Ø¥7îí@à|f³YE£Q•Ëeõõõ…þª×뚟Ÿa`uu5œÕÀ؇|¸g†×.kbœ¶Ûm-..2÷Êc\ºÆ\wbÊ}ÖÖÖ‚%Ô½Š€\ú‡ñå±î¹ƒ¸CŠïx¹ãš6¬V«aܳÒß߯M›6)›Íª\.krrR£££*‹šžžkN,S±XÔÎ;•Ífµ´´¤;ï¼Sý׿¯{=–Ò9ÂÂïÏÈü‹F£u~áò,cÝ^'À¾Ô™¾<™Lvi€/..*+Nw_–––têÔ©p­ñâ­tÏÉ$‹r¹¬}ûö©¿¿_ÓÓÓú×ÿú_ëàÁƒúÌg>£z½®¡¡!U*•0þ8itt4Ü“Û#‘ˆJ¥R0 -//kddD©T*´åÊÊŠöîÝ«B¡ Z­¦B¡ \.§mÛ¶)‰èܹs:räˆÞóž÷ÏG³ÙÔÛßþv=ðÀÚºu«>þñ듟ü¤~÷wW'NœÐ³Ï>«X,ÎY[[S:V6›U©T )|¯¤’Ëåô©O}J·Ýv›òù¼¦¦¦tï½÷êöÛo×ßýÝßé®»î Þç|>ÿšßçóyµÛëç²LLL¨P(éìëÝ‹kõÊÏFé+´¸§Á­„€W6-IÁ²îšÜî˜6<6J~çË,^0fñZp?î°q°í„†ëx,…{n\2ãq€%¬â´g‰bsåô^®W­VƒÞúÂ… !ãP­V“´qB¹oʵZ­#>{I ÁÅ€+'r€?+†ÿ‡††T­V;úœ~õ¾˜ @!©#ë‘Ë@ÜÊJ›¹|Ç-¶^Úiaa!rþiÏb±¨ÕÕUÕëõ@.&''599©«®ºJÛ¶mÓ±cÇtñâEmÞ¼Y+++:þ|ПsàY,Óã?®l62j„ ê–ùHò6ê èŽÅbÚ±c‡"‘ˆNœ8ÆŸÆ"^ ¾±æ"¿<2–»Ç4`ÿÓ¦€fIJ¥RaLù¡‡Ü‹2^ '7¤ f-€Ø3G¤Ãùó‚1üf.1?X/˜»€r' ÝR"H"Æ÷°­¬¬„çaLAT Û¨Ÿ{°¦·Z­ŽyÙßß”+•JÊårj·ÛaL¥Ói¥R©È‰D´ÿ~]ýõJ¥RÚ²e‹^~ùåŽu¯‡¯…x1‰êïïR-¤™xn˜Cív;ô¯ÇË>²Ç™<;} !c Ú‹\‡g£ ¨;©Ëñ`e³YÕjµ`ôÁëA»Ò'žnxeeEGŽѶmÛ466¦V«¥}èCúÒ—¾¤cÇŽ…õ•5„5ù‡'yË–-Êd2*—ËZYY ñcxgggõö·¿]Ï?ÿ¼¦¦¦4>>®­[·*NëâÅ‹zë[ßâÐÖÖÖÂA‚årYwÞy§:¤d2©|àúà?¨'žxB?øÁôàƒjçÎÚ¾}»þÅ¿øzöÙgµwï^íß¿_/¿ü²zè!år9:tHofùqÄ€=z4x"(.Óórà 7è†n¯ßùÎwêçþçµÿ~}êSŸÒ]wÝõÿT—^ùÙ.=r…^e“xH)_Ýòè©jÝÂΆæÞ¼®¿v]6Öcˆ¤pŽ‚o²ÝdÀ7W¼Ô‹¶tÀ²[ž]gîÚh?5ÚÏp"æ pæ`.k||\ñx<¤ÞEr±¶¶,ØêF›z±îlémA}g/vô-VI'žñËÛ”gÆ‚ëU@1}Çsºü¦[Îå`I_ñ|\GRUÑ'õµµµ?óâ‹/ Ó5×\£={ö„6~ë[ߪ¹¹9;v,œ299dnårùuc´zqà†´‰Cǰ̹7¾ã9±´sð]8ÉÝ }Bÿ8)a¾Z˜C,8ßÀÊx!&ÉûÀ mµZHât—ºÁÇä/ŠÇQñŒxñœ$@xœxWÀ¸äo,â´5@X7NtzÉßÜ—u$ý…”“ŒOÒz6¥³gφ¸@:I ÈÖô裆ßÀ}]cÝ¡ ™ô?2IÈ·»Fð2Bñ^ã5v‚êi¾y^7ž0¶YçR©”J¥’’ÉdïA¨ s/‹£I__Ÿ”N§;ŒT¤é­×ëA900 ™™U*íÚµKÿé?ý']uÕU¡o‰?cn²ö—¾ŸžžV6› ã¾X,†Öçææ´}ûv½òÊ+Ê)°¯ IDATårŠF£Úºu«~ÿ÷_…BA÷Þ{¯î¿ÿ~kbbBÍf3¤ôîïï×ã?Œ O=õ”þãüúÀ> [n¹EÚ¼y³žzê)ýÉŸüI0¦¤R)=öØcºãŽ;ôÌ3Ïèg¡ìß¿ÿ5¨™™ýÙŸýÙô{Ò,ñ‹_ Þ)I*‹¯ùn±XT$Q.—“$ŒŒ„ñÓÖ¸X,êïxÇÿÍ#õÊßÓÒ# Wh8b£p®°ª@TØ$•X8 ÒÆÆàá=6c>w°âš}À7ÄÁôø ×E³Y’º­Ü´Ï‹÷Á¯yϳ×ÂÙð±ÞÖj5ÍÍÍ)YSX[[? K+…6•6¤Tôr0êA_ð܃ÇPˆ•yã:´A$épyÛÑ¿îñX@mï’<×Jºµç@)`i\,S¥R –jÆÁ‹/¾¨cÇŽ…s-‰„Ž=ªd2©\.€ÐÅ‹•N§ƒõzaa!ÄCpO—íPÚP‰‰¾¢]Ø0·mÛ¦ùùùL=ã•óÒ‡HÔjµ@î3™L¡?÷çpoÀ/ž9­§ÅõlQ>¿¹®'€t8is‚ÌgÔͽŠÈløœö¥Ý;A¦­}¼z »ËF]>Äï©Ûàà`ð¼1ÎèO—f]ºtI©TJÓÓÓzõÕW;2¨ÑvHÓ¾öµ¯iÇŽS:~MlŒ“ Ú–vÄðÁ{´¿Çvðy4º§Nž6§=;ˆ„Ä­áx`x~Þ…ááá2‡„’ÌiîiưÑjµÂa«¬xܘWôs„ùèС°nó¿{}XcX‡(¬u<+™¨°årYñx<ÈK¥’ŠÅ¢n¾ùfýæoþ¦¾üå/‡qP(´´´¤;v„C`³Ù¬òù| w§NÒôô´šÍ¦{ì1?~\[¶lÑ»ßýníÙ³G<òˆÎ;×az3ËÃòîûS"‘ˆvíÚ¥x<®^xá5Ÿ=z´ãœâD^xá…Ž¬Z—.]R¡PÐ[ßúÖÿ«zôÊßÏÒ;ˆð -€€¥×nÜ2Ü3A–À¿s ÂgüÞ-¬€,]Ü ÐÍý±Ö9‰6¤!:švý5¿q ÀótŸNœøŽ×Ÿzñ¬lÎþÜ|>11¡\.2®¤Óik||<œØ½¶¶¼O€_'ÔÁ¥pNüx>Úǽnm`PhÊwy«ÕêÈ”„õ“àSž•6Ôh¹§ƒUȤ¯;mïÖaGX7Æk€7ç <òÈ#j4š™™ ’¥‰‰‰Kzr?°‰›N´æ,:úso¯µµõóG +zi]"Eÿ¹JÚ ±´©Eˆ0}Àœq’éžþwrD;b5÷¤ N6â<—<Ž€þá9ˆéñ~§N\ ‹uÛ³B1W©«Èzä$Ê=fŒiÆ>uåÞŒ)ŸOÌ·X,¬òdåBJǵ}ûvmÛ¶M£££á3ˆ%ž;Hi"‘P­VÓììl8Ûbçcqåž#ƂˬÜ8âRI, ðX‘ÍÉ=x}}}øZç$o‘“3êDÝF þ¬¤y¦ÿXÇÉìGÀ=}GâO Àa†ÃÃÚ˜˜Ð´oß¾àué6 apamðÕ™Küöšk®Q6›í0z-,,è{ßûž*•Šîºë.ÝrË-*‹zõÕWuéÒ%5›Mý«õ¯ô‘|D7Þx£R©”*•Š:¤µµ5‹E}ík_ ç™HëécGGGǵmÛ6½ð úüç?Úëg±üŸZ­¦¯ýëzÛÛÞTþð‡uÿý÷w´Ñôô´¾óïèÿãÞûà?¨¡¡!Ýwß}×¼ï¾û‰Dô‘|äÿùYzåïOéy@®ÐÂæÈ&q0âò ²¿¸,+ß ; wàɦˆuŒï¿^:O•ƒm^ceão—zøÆÏõød†ìAÔ í–X¿ î‘ñà^, €¸n0ë7ï—nÅ=’B?{Êb÷yŒ–^úBF»3¦Ü“Fˆ:±a³s@I»DÃA7VÐD"¡-[¶èÒ¥Kš›› ‡6›M-,,„Äñx<Ú¢Ñ×׬ ЩS§455²òÐÆÜ»Ùljxx8¡—Ëe% ]¾|9Š{ß¹ŸçâméÌȃ{›°l3‡°ãÁ@®Ôíáô6gÞ¸49…ôÌ%›Üy餓ïPþ™{KÜêN}Ì2Ö!ÌŒmOÒÀý|»€yïR,¤EÌáh4$=¤å4ø¥¥¥7Q˜ŸŸÖv’'0œR—S¹G–öfL3>xß“0øß×Z÷²øœvBÆÜI&“ß½®’:ˆgs²Çï+üÖ埞T€þœÕØØ˜yä}üã×ââ¢Îž=ûo¤ËmY[;x=Kc~uuU¹\Nõz]µZMgÏžÕã?®÷¿ÿýÚ½{·>ðèÈ‘#:uê”ÖÖÖ4==­úOÿ©~øa=zTÃÃÃúÈG>¢³gÏѱcÇ455ˆ²³;wê†nÐì쬎9¢7»¼QV>ñ‰OèꫯÖÛßþv¥Ói:uJ÷Þ{¯fffôçþçá{ôG¤w¼ãúGÿèé÷ÿ÷ÃA„ãããúä'?¾—ËåôéOZŸùÌg”Ïçuçwê™gžÑýÑé7~ã7´wïޟسõÊ_zä -X»±ÄR|ñr`ÈÂOúK?tÎÁe·¥Í‘ÈÓ~²!±ÙH–a`SvË ´qx›àÊ-»<¼ü–¹wóî6ñûsn$²~äm+rv{ãÐGOkëd€&u£¸¥ÏA:Új'fXÏioïG's€À.íFÐ'€ÑŸY `ÀîÖ]êçíGq ä€ÙAã@G >ž~(âºdJ$!ÛO»Ý‡£¥R©™²ä^G$&ýýýÚ¿¿¾ô¥/顇ÒO<¡‡zHFC BŠ’Édpn6›ºxñb¸–?›ÿO¿ãMXYYéˆçpB@z`¬§xe;áÀZïóòäóÔ >æÛívxçûÔÏɼ“§}o' <“*Ú§[®Àt2Êw»½¦ y½ººªF£d‘ÑèF ZµZÕìì¬FGGÃÜe|âsÂD+ú4¿.GD6Ò%cé^£Ü³ÉúÓ='xFæ3ýÂç+<ŽÄ1'i_Æ ž#<>¦]þæ¿õûº¡HRƒùýi¯þþþ@`ûúú‚$0“ÉèÈ‘#zá…”ÉdBÿàMBƉD æÅb1x՘닋‹ZXXFœM›6©R©¨¯¯/œpŸËåtÍ5ׄé/|á :~ü¸VWWõgögj·Ûúú׿®·¿ýíºæškôþÁ?Ðÿøÿ#¤†M¥Rš˜˜P<×ÌÌL žçÏŸW»ÝÖŽ;ôÜsÏégµü0R³gÏýÕ_ý•þøÿXFC###ºå–[ô_ÿëÕ7ÞØñ½Ç{LŸúÔ§ô±}L}}}zÿû߯{ï½7ĈPþàþ@ÃÃÃúò—¿¬{ï½W›7oÖ=÷Ü£?üÃ?|CŸ±W~ò¥G@®Ðâ ›“­|Æ„έø’:6&éµÖP,ýl4X±¸Ž¯‡[5ÙÈøÌIˆ î…ͳªx pÏàÎÛƒçô ùÆ«¯¾ˆ”[ÉÈäÁ6xÏ=/ü뎉q0ï}ÔmµtÂá²€ $tuu5œàdÏvÄ{ÝÞÆ“×Ñ­×ÝuÀbÐ&ˆŸï KÚÑ‘H$Äþ¸•ûrïååeU*•Ž`ít:­r¹Æ^&“ÑÐÐ …BhHŸCP*•1ùð‡?¬={öè©§ž Ðn©ÑÂÂB|­V+&2®j.u—œÈúé&ì€\® Ù`,Soæ×'V«V«ux!bì{¬äĽbæ>@œûøØ§O»“(оæPü¹ù®ÏWÌd=óqJýÇÆÆ´}ûvU*•àÅ♉áâ$OhµZU2™ÔÜÜ\Çàù¸âI;0?ˆË¢žîôñßýìŒ;îá14È+¹3nù>÷H±ð´0f©—{ä ‡”Ú$áðõ×½E'OžÔüü|ð &“I]ºtIËËËJ$á9Þýîw+›Íê`Œ;ÔaaaAÉdR¥R)Ì«L&£x<®©©)=ÿüóš››Óý÷߯ÇwHGÿçÿüŸºñÆu÷ÝwëðáÃ!s&“Ñ£>ªZ­¦M›6éꫯV«ÕÒÉ“'uéÒ%Õj5]{íµšššÒÁƒõõ¯]ofùI{@î¹çÝsÏ=?Òw8 G}ôGúîoÿöoë·û·ÿ_ªÖ+?¥G@®Ðâr'éõå8.aTôõõ«´[úâ·Þ¾ž¥Òe"¬Ë[^/ÀÖÉõôVÂþL^6}ip½ ÀIÁC___8Ó`Ó¦MÚ¶m›ž{@s¯».󞿦]x>·~vƒ~ÚÝÛŸ÷»ï»Ä©Û“p÷÷œðx¹çÃ¥îÑ¢OÜšïVxRub…쎇CÄhc@ «›ù¡hü¶Ýn+ŸÏw8Îb!K :o6›ª×ëª×ë:tè<¨‘‘}øÃÖW¿úÕ}ìãê}>GºÁ#ýW’ Éq‰ Ÿ¶–62hù8ç5õ Í]CÆ"'¿îeàú),ûTɸd~pö¤Ä=—Ý.¼vô'uòïÒ6´mÐí] {™ÿïë‡aêîÆv»â ¸¦¼…! Ï‘L&Cúj'ìî%ô@jȨ{®ðŠú³Ó¾>ï×ÔÙ½»ÌGbVè È;'I_'ž¯ç%v¯ cQR<mÎ+Þo´W©T ’Þ¾¾>MNNêüùóÔµ×^«………ƒ3S0*pN ë—“¾¾¾ph£ÑP&“Ñàà *•Šž|òI•Ëe½òÊ+ªT*ágÏžÕøø¸FGGuúôi=ýôÓúèG?ªH$¢¿üË¿ ûÓüü¼NŸ>­]»voËæÍ›CÖBSz³ÊE@~’¤¦W®œÒ# Whü¼ž<K]7Àé¶Ä±!¹ÎŸï9Øõkº¬‹MÏ-œRgf6(©3‹€Óc?Ü"Ú-¿’Ö–EHL7p÷Øîϵ©'|6Þ³gÏjaa!Ä,¸l„$B'$ ž~“ëKÄÇÛ@ÉuœÐNþ Þ,·ª½Íˆº\Î¥`€oêIû¼ à@{Àw,S.—Óüü¼FGG5??¯D"¡ÑÑQI ®¾¾>ŒŒ„t¨~ˆíÆóÔjµp ±9È=Nœ8¡F£¡¡¡¡pº5 Ñ¥=ÔóùçŸ×—¿üe8qB¿ú«¿ª_ûµ_ÓÒÒ’þê¯þªclcu¦h#2XÑæŒ-‚ÙÝ#E»àÄy¼†Ï»îövÏœ¿Gà4˜0äºÌ÷šø¹)Ü›ï2—¨7YÎøm·‹1·¶¶‚Ò}®»´ÏÉs”þ $ÈÿÑÊ!¾Ô¹ì!Ÿ#xUOž<ÙÑ_œtuŸC4ñÊŽŽ*ŸÏ‡ñæqM´{$ ¤Õ=ªôs‰±‰D‚‡Å½ÃŒ3¼uܯ[ÆE»¸€z9¡gŒqoþf-!.Ä CÞÆ<³{\˜cH}]uO&[NNNêWõWõØcé…^о}ûtã7ê{ßû^HêA–®Í›7+•JihhH¥R)x2éûz½®F£¡\.§X,¦jµªh4ª|>¯³gϪZ­†Ly•J%x.———õ•¯|E—/_ÖÄÄ„¾ùÍoꡇR$Ñ]wÝÎ:pà€ÆÆÆFµeËŽŽêÁ i}{¥WzåG/=r…Î3è–>u[P\îHa#÷Í ðbcÓôM]º[%±Ä¹SÚÈ”Å=ÝAÝb¾AºÌEÚðê¸L Öí réP·ÀÉ…4–sssA£ì` ]?©:ýäyÚÞuï&øž{Ü ì€ÐêZ|ÚÂ=]ݲI¯±¨r_€!õC²HÇÒì¤5›Í†Ï———•Íf•ÉdT©TB€6ŸÕjµH‘{ …™ÍÊÊŠ …Bè Kê %™™µÛípú7DÃû¨»Gƒ1P©Tôâ‹/ªR©(•Jéñõž÷¼G=ôP:Núè#ÚÏ ¤Œ¬0.³¢Ÿ8ÐÍûÈǫ˧œì;8…\{lóÙÓ-CD°ÆC\‚ˆgÃɤ›s0$…>t¢á¤€qÖí-åÞ¯çÝh·7ηpž{6|ŽúÜðÏ=@Ÿk {òuc``@Ùl6œ¦=22¢ñññiŠñèßdesBàÏÑmÜñyÞ½naÁ÷µÏ=Ô۽Ѭ=܃vur‹ÅÂx:I2ÄÀ Üq*mȹ|}‚øx@;€V«ÒhÓNôQ½^}:00 ÅÅÅ ]ûçÿüŸë“Ÿü¤úûûuñâE¥R©ðûh~~^»víÒŽ;488¨'Ÿ|2dÖrâ.)ô ûv»2é¹ùØ«¯¾ªÕÕU}ÿûß×ä䤿ææT­V599©µµ5ÝtÓMJ¥RšŸŸ×·¾õ-MOOëÂ… êï_?Ùýñõýï_JÏ[Ñ+?-¥G@®Ðâ–v©3ƒ•#¤¸éÙœ\êÔmMõ`E¬s.áþþ»îø·ÎIàÃïé÷„¸µNR!BÛL0=nsI€XžÝAõ VÒ¡¡!íß¿_FC.\W·òü¤xÅeï@’¶áà8ožÏ •-·»–:»ÄÂ Š´!ǃÐxŒ†{§è—hIêg[·n À¾T*©\.«Ñh„k@ }¹¶¶¦ÑÑQ5 åóùYhÏž=J&“gp0æççƒ,)†ªSX¨!Äîò!‚õØMNN†C‡‡‡µcÇ?~\÷ÝwŸ¾ÿýïkffFgΜéH ê¾{9Ò†·‚ jx#\E?1{Jè³n‚êã Ýn‡T³îq!‹•“]€1äÏ­áÌùÅÅEµÛí mó¸+ÝN'½'O>‡!—N„Ô¤ÝKåk“›×ó´òž¢Æ8jµZ!K1 W]u• …‚*•Jøœ³œi sÍ ¾¾yÌ ã’“Ë}}aîÓHüÀNæ-Ï<ŒµÛ=“´5kóØÇ‘KÕ˜n ¡?Ýp±I$al±V0Ž!Ö‰DB¹\.ðâV*­¬¬èoþæotñâEE£QÍÎΪÝnkrrRýýý:zô¨n½õV½÷½ïÕÄÄ„ŠÅ¢šÍ¦nºé&µZ-=óÌ3a,ñ|¬ûôE¹\ÖÀÀ€òù|X{ûûû566¦……ÝvÛmzøá‡uîÜ9]¸pAÉdRccc*•J:~ü¸¾ûÝïêmo{›^~ùåpZúÅ‹•Ïç5==­={öè;ßùŽz¥WzåG/=r…Rk²Ñx@ž 69×÷³²ÙS\á–Lÿ\Úä@ÒãL |æ@àåȽ\ˉH·¼‹M[ÚØ0Ù\=õ,íàõå=ýØØXˆèá9è8¨ùÖd_Nþ\&åmë–M~´€UÇ.Éâo·0G£Ñkee%5X†0Ð~Ò†¬MZׂ“Š–€€ÍîÝ»õÖ·¾Uõz].\ÐÜÜœ¤,OétZù|>x’8uË4u6tï‘‘  ªT*irr2€µL&#iÝZ_¯×•Ë催b||<˜‘‘ÍÍÍ}üøq•J%=zTSSSjµZ!5«“ÏlÖ-Åà\ ¬ÃŒQ¤=¤hæšôu÷vXòKDîäÃcI†‡‡U.—;,ñô% ˜ùï^i㼞ïq_€¤{!kî p/“(Æ3?ýZ}}}Ü"CŠåY6?aÝA?VqÀøÊÊŠ’Édˆ×â°Gbü•f³εXYYQ.— E¶Z-=ÿüóDÌçuçœ žÍïáR7—>ùšåíÇÕjµ‚·bhh(d}c`¾J±vô5ó„{†ƒÜƒy&©£ ûúúBÌV¡Pcï`¼Äš››ëð~bx饗´oß>Ý}÷ݺ|ù²Ž?®[o½U×^{­VVV”Édtçwê‰'žÐéÓ§õ¡}HÑhT/^T£ÑP¡Pè±1N1ôH€vf=ß¶m›~ë·~K—/_Ö±cÇ´¶¶¦\.§þþ~U*ÍÌÌè«_ýªþ×ÿú_ºãŽ;ô»¿û»êïïב#G´sçNÍÏÏëÁÔ‰'ôf7þ¸¯Û+½òã.=r~6K÷°8w{8¯À%7îºgÃõ¸·Ú±aºæØ­klºXJý”n™‡Ô™õ†×% ’^ó|¯ö±Fv[Ÿy'r‰DT(´{÷îBi@ k:€³HP?I¯{ÿn ŸE"% -..†v¥ž.«ƒ,xðƒ,Ì=1Np>.\šá€§ÙlêÒ¥K!ÍØØ˜VWWU«Õ´¸¸¨Ã‡«T*+h»Ý'eÇbëç,,,„û{Ûà AÎáR©2Nõ÷÷`¿yóæ_²eËÍÌÌ€fLÔëuŒŒèÌ™3’ÔÈ9/bìãSRo. æ±d#y!PçrHîáçæxP³Ë‘˜3ÌGÇXÑ©r5?‚×ô#uðö‡D´Ûí +ì&#Œú€ú¢ÿï–üñ}ˆ%ÞÓûò\N¬ãñx¨+€Ú ÌOæ õ ·{(›6mÒŽ;‚w“Õj5g,öÑhT!YÁåË—CÌ’“ÌîàsoC—.BþèG¾ïÖžf³æ;Ï7·Û뉱9õ\ú†×€ïÐÖn”b½äÚ1Ÿóî©*‹á}ú£qÑèF>â9>üáëç~îçtùòeÍÏÏëäÉ“ŠD"úö·¿­|>¯}èCºõÖ[CœÆÔÔ”‰„ …BGì”Ï;÷ ñ̜ωDT­Võå/Y.\е×^«ãLJõˆ4¿x†‡‡U­V5==­©©)Åb1ÝsÏ=J&“úË¿üKõJ¯ôÊ^zä -tþvPê€GRØ´°À±Éqˆs³±ø{Ò†“ϸ¼È-}€©3H=ÿÐÐPØ|.ñðt´l¤lØ~¹{¼.ÔÕ%0l¬H#¶nݪH$¢3gÎhiiIµZ­C–´ºº¤»|ùrG~~ÚÒ‹K\ø@ü,Xìµ§™Ó6®}Ì9Àô,K!~çò'¢MŸÁrZ©T”N§500 d2)Iáü™™™Ð?äcÅf|T«U% E£Ñ w¡~ H$²ѯ迩±¥RIñxs9-6C¬ù€È…˜—¯Ðw\°ÂçBžåz÷l@œØðÌ~øaî Xò€zI*•JÚ¾}{HKZ¯×Cð9–HÚƒ<þü[]]í°È3>±#×ÀºÉ³¸Ö|ll,hë‹Åb­œzNû!ïJ§Ó!uÛ¶mA«¾²²bX¸àár/dÚK4¿¡ˆE!¶¢Éxû8äÑ’‚ÄŠ9ˆbì;¨D6‚€!"x†|޹G2ãr/iÝxHgÌÄãqÕëõPŸn ¤hãñx}²®ïàć±qð×wú¹ÌäþxH|Ý ½¨^2æÈêêª.]º¤¡¡!íØ±C’tÕUW©V«…lKcccªV«ŠÇãÁêžÏçuã7êСC* a½pÏž¿!•H»0”´Z­àÙc¤¢Ñh?îÃÛÄóò[Úº[.Ëó²î2ß<£mŠäŒþ‡ø%“I---8$œ8šD"Îñ nÌSÖfÖÇùùùàm¨T*zç;ß©L&£3gÎhddD/½ô’Μ9£þþõ³w~îç~NwÜq‡†^xá…p¢:Fß tÒº!N=ìÌL IDATw :00 K—.éöÛo2»‹/*›ÍjË–-ºýöÛõÝï~WCCCú½ßû==üðúå–[táÂ]wÝuzê©§~ô ø§¬ôH¯¼¥G@®ÐâÈ`Ì÷¤uK¶ol².¥ðͤÛjǵ<0›Í ƒÍÉ% òçÔë=–pêC]܃ÁuÐc­uà'md™, Ù&ÍëþýûU«Õ4<<¬Í›7)@Ë {™ØÝK‚… mœ#àä«4¯±vÓ&d•qÙ–i€¼ëº½MÝšï\@±¬íô#mW.—ˆ¢/},hº½c÷ÆãqÕjµž>ŽÜsäd`å§:»Œr h*•J¡±î—Ëee³Ùî¹ÅI»[± ó6äP7‚_!’:Æ™}ž‰³ ÖÖÖ”J¥‚•@ÏxvpMl Ðïå’GÚѽ(.ëò!Æ\£Ñèáð¹ÄIðnP€¨2^©7÷wÃE÷¸{@×É,ã˼ÏzBÛ´ñŽ0‚±ŽügÓ¦M* Z\\T©T óïR³¹ž*•Ji`` È éOÄ)ÑÎ9Hï{Ì•ŸÏÁÚN§Ã8‚|a`íæ>x@h<„>!ô놬;ÔkÇŽªT*ŠÇãJ&“Á³ÉX`Ž`4ð´Æ<+D£Âüü¼ªÕªvíÚ¥‘‘¥Ói«Ñhè™gžQ«ÕR>Ÿ×¾ðý÷ÿþ߃àOþäOôîw¿[ZXXP*•Ò¶mÛ”L&uöìY ‡ñHV;¼ªŒ§¥¥%Ý}÷ÝúèG?ª?øƒ?P­VÓÌÌŒ$éðáÃúÄ'>!iPó›ßT,Óƒ>¨¾¾õÌ}äúf–7ÊÒ+½òF”¹‚KwÀžKܺ°w @aCÜžÖÖ6‚*¹.ÄÅ-ul¬þ›¦“ îúf³©l6«jµ¬|’:4álš’H}ZG  8™Lvl»C¢àò$´“[$]jˆ–ÈÒëK<-´Ÿvî’'25s¸5\RðŽ¸µœ÷Çkkk!-m¥R À¢ê#ÏÝ××ÎFi4Ù¨x©ýDÝ’:44ÔáÍB–Gb©­×ë ÂC–®T*¥Ë—/kyyY»w﯀.÷f_@ÿaQv™MÍôàbGÿô÷÷p„t… ]€ëv{]‹¿¼¼Òž:Qðög>B¬Ûôµ=8±âó=¼ ŒYæó”1ä’;<µZ-@??¤M'dG~Þ›>m(mdÂên,Ô.«sÙ €D¿;ÙrâØ„@h<»tŠvï¶bûy( —ÇmP\*ãçexð=aqïÍèè¨r¹œÔl6511Èc£Ñd†q`#„3LΜ9$‡®™²||z,‚{éãT*Õ‘R¸Û³ƒÇÃI„{!ÛÚÔ3;¹×Á3,9€ôàcÆœKu¼Ÿ©£ÇuI s—fB¸(H¦X3:Æ1àœçãÞ̾¾>Åãñ 9ŠÅÖ•cnCb/H³†5¦¯¯¯#m/ã‚ÌSdîK;Óÿnp`ι—2̺<88¨D"¡H$¢R©¤z½®D"¡‘‘]ºt©ãIÖCæu ×ã¹ýž¹¹9µZ-år9=þøã:tèÊ岢Ѩžyæ}àÐòò²^|ñE%“I}ûÛßÖÊÊŠÞ÷¾÷éæ›oÖ}÷ݧJ¥¢b±ŒA¥RIkkkJ§ÓÚ¶m›¡„œŠÞl65==­ƒjvvV…BASSS!ƒ^¿J¥R =çÎS6›U>Ÿ×G>òMLLüÐýö'Uz^ùi*=r…fEº’6R]º¬É@ÝÃP—6\ûl^®¹F£AJâR#—B¹µ– `çÖæt:•¥ G"‘è°Üaý$;HÁ2îºéîLRüÖ%@’Â}Z­õŒC$ýà?´á±Éf³>N`Š"Fù×}6²€ @è ÂI…Çïàùà¹\ ƒU`ì`؉ÖfÚ Y ÄË-½ÝR8®ÔÁcRHP`¥¯y.¤OCCCAª±ººªB¡ -[¶hyyY³³³Aª722¢¥¥¥`¥ˆÕ€ûÁf™LFJ¥R!Í'mL]ÜÒííÈØ—¤J¥À{°ÜK(õ `?<O 〾,>ß1ÇœàSÏnBÞmiGŠÇ|q9ÞåNc—iz½™“.¡„àaÌ ^|æ2#ê™fìñ'3ŒG“|Ÿq¡u¯ ãbqqQ/¿ü²&''C°q¥RQ>Ÿ×ÐЦ¦¦Â¼©Ÿ]ÎHß³Vâ­ŠD"ÁààòJ'¢´)íQÁ°ÀéãŒ_—©—Ÿ@ÎÜu)"míëõ³†ãmŠÅbá¼Æ,I¸_6› ‰=bºô‚Éóùá)–3™L‡,²P(¨P(£ÓW¿úUmÚ´IÏ>û¬VVV411¡ïÿû*•JúÜç>§‰‰ ýÅ_ü…^~ùå@ä1$ óI{@¬šÍ¦^~ùe%“IÝtÓMú‹¿ø …ܤþÊW¾¢ûï¿_[¶lÑ?øA½ÿýï׫¯¾ª¿¥G@zå§¥ôÈZCl‚[ÖÝÚìy7¸jØdÙTï@¬g5bCtÌ糖f€£9ò{· »Õöõ@/Z—ƒ@@ØØ]‚C¦¤³gÏj``@•J%À’†ž´5iWð¨·KÅx.l¨ô‹ dzâ3€ˆ“AÀ﹌Àê„ë+}ã§’:tØxðÄ`™„ ¡Óç>Xa¬hÑ3™LðTÑ-Á¡Ÿœ˜’‡‡‡U©T‚,fll,€øùùùî±GÒ™Fêæó°˜†|Ñÿô1Äàq ßeŽðww›yÊV{^¯î8 ÷>@âñx¸¦¼olSîë>¼#N]rØn·_“Á+†$<“{:.óµ Ùlvx/ÉHFö¦þþ~e2‹E=ÿüóªV«ÐFÄ¡ÿ IÕj5x0ÝëÄœuïqp'ŠÄ‚WärLH>÷pã$ÏûÖÛÕc÷¸Vw{»¼œ5’EàÉ!¦”º¬YÉd2ÈYOœÀ& hllì5ñ[¬û¬‘H$$Ú`lW«U ‡SÑ ŸŸŸ×C=¤»îºKŸøÄ'ôÔSOéÁ dŽõŠLfôí4<<¬F£¡£GêÏÿüÏu×]wéĉzòÉ'µeËíÙ³Gõz]³³³a›žžÖÊÊJ/ o¯ôÊÿaé+´8ñÍ¥[:âA’Xyý¬ÏåR@<Ž5Ñå%€“/üžÂ=~yN¯;DÇuâN\þ᛹˺ÃÃÚU³¹~ :€‡½[‚ƒfÏuv)õ’6d\R'€´8ÁG]y~@E·´PàšsÚ­Ø\÷Ü›áïV=~Ç%_g¾ã1!€^§ÓéD¶nݪZ­À/ž¼È2ÈT$IÅb1´cµ¿¿_ù|>ÅúøpËh«Õ Ù¦lz———ƒÖ¾!Ã’“hÚ˜vaÜð¸7ó—à@ÖÖÖT«Õ:@¬“UúÁ­íŒe@-$’àóÛ%MüžñËA°0žÛ½g.±s¯‹O—ãa1vÏ‘·…“Õ¥¥%¥ÓéÐÿxA4V¹óemm=QÆ¥[~(!ýÁ¼ •3¿a­[ZZê¡ h÷îÝ’¤X<—KáXgS©”¢Ñhˆac,Ræ"ýÏ5xFÚ²íÏíýÇZí}˜ ÏÝ+íŸ#Yrï†brÈ~µ¸¸¨r¹íE=¤Dñ4`<‚áÍYÓU*•ÂZÁžÁØÄó8;;ö€™™ èðáÃúå_þe­®®êïþîï´°° V«’N€ÀDÄÐÎÙlV·Þz«8 ‹/jttTÿðþCíÛ·OÏ>ûl0 ;vLÅbQµZMovy#ˆ­^é•gé+´ø¦Hu/‚÷h 3pyƒ9®Í5%uÄøµ]囥Î÷½ž.9rù€—ï8ø–@Q$é¤åýîk¸õߥM’”N§ƒ\ƒ4¼kkk*‹!6`àÅÅE-//w€'N:‹Þöú)€'(¼ïÀ´[÷Í5é³niZ÷³BpLv[Þ8J ^ŠîCp2ã*‘HhbbB‘Èzpë®]»tâĉ4Ý*ËõI‘KdKdÔ*•JAò†¦M;ž~399RåB&*•JxŽx<®D"äudúéžGN Óív»##׃d0LP1òBtïîeÄšïÈn¯ïñ»n`îYï >çÜÔrÄçmÆíëÞL'`Ȧºã«üYèqãzž2Pïó Û«ã„H$Òqð©{x Vf­âÀP—ŽI ó8‰R“N§õÔSOÏÏ™nC÷è–EÑæ.…(ð{H¤Ÿpä‘9¡bäsÕ=Žô½§êæÚî…€¨«ãÆ:DÒ圬Y%ŒÑhTÉdRétZÙlV ÑÌÌLGìäò•H$BŒÉüü¼õ ¿ð êëëÓ7¿ùMMOOëÚk¯ÕæÍ›µwï^µÛm=úè£zúé§Cü^*°·[¥R ^'²¶ÍÏÏëÌ™3ºêª«tÛm·)‘H„`ö;î¸#~855¥Ó§Oëßø†~ËåUé•^é+´^4¸¤ÛÒÎæÀbí±ÒF¾yu/D·¤É7h9(êì„…ët߇×üóÔ³Òhœñ;È€[H%)ËÎ;C æÄÄ„ªÕª"‘HÐA»Åe8Ýi#Õ­÷‹$o3úÏA)ý€µí k:ùqk%¯6îùñ¾d 8P0ëVLaÐð:+‹)—Ëéꫯօ Ôh4tîÜ9e2ÍÏÏøÃú‰öšºáÝ …*2=ÆVk,•H³"‘ˆŠÅbH{˸À+288¨b±¨h4ª\.âyjµZGâ‚ÆVgÈí˜Ã+Àáxž€áõˆs×þ»¤…Àï'èx+±8¥XÆ,Þ ® ¡q©$’¶¦MxŽî{ûõ9Ç?Oë‹·ÂçcŠùìdÐc3ºÇ©´.ëéëëÓsÏ=‚­éú”6ázÄ …ŽÇÔ‡¶óuÖ½K\Û3wñ}æ©gyó¹çÞC—oB!).a¥m} ò±Äx¢\Šçu‰Åbš $Á³"ŸâÙ‰³à™GFFBvE¤KŒÿùùùŽd"Œñ¾¾>e2™7rýõ×K’Î;§M›6é}ï{ŸZ­õsBžþye2™`pX]]ÕÒÒRðºC¼ùœñA¦µr¹¬¾¾>ý—ÿò_ô–·¼EÙlVÿäŸü=ñÄúÖ·¾¥«®ºJ‡×}þùçU.—Õ+½Ò+?zé+´&4ÒFö…gEasrA·µ½ÛJØt …îõ¤G|ÎÿÝ œëz6ôÝäílˆN\ظ¥,X¾ûf͆½cǵZ-={6®Z­ |s·w{l\–³ù½Ý âVïî¶”¹ÇÇìë}9‹ÔyîŠË«Üjí@ÊɤέþÆ × hzóæÍAò200 ÙÙY‹EŽŽêüùó!øuuuU³³³a¬¬®®ªZ­°…%é<›Í*‰„4Âî p©–âjµªht=S[½^²:`qçÎ:wî\¨›G@®ôZ/}ÌD¢ã°>€¢¤ÀXØq-¼‘ÄpE£ÑÕ B¥`@u0Š›gTF"‘FØç,Æ9çkP?ßRç™!Ýü‡Í{o;´úžíõÖÆu·Âc) +ܯÙ\ÏÞ666,ódÉcŽÓ”ªÑhh||\CCCš›› „g¥oüožƒkجúoÜ«ÆçÝ^7ožÓÝc±ÛÔh4B¼äOˆü»lŽóJ³Þþx)}íÖ 7Éd2ôé¹sçBüÆÄÄ„U.—ƒ¹Ýn+N‡vÂ#…§ð¯ÿú¯µmÛ6---éSŸú”fggõÀ)I>ô¡ijjJ‡îˆ3d ãcŽwÖjµtøðaÍÌÌèî»ïcîÙgŸÕ‘#GIZ\\ÔÌÌLˆz3Ëå­èy@zå(=r… Æ­“Rç‰Ïll|Ç'ÀÎ>Ýâ'm,^lün™÷˜×.ëªéßAFâÙp¸.Ö@$ØÀ;`æ¤ ë4äyD4ºž­eçÎúÁ~ ©©©K©ëê±Øcm|w{ŸØ© ÷ÐÑn!†¸ ‰£¿<§>íáÄ‹ö¡-<ÕcWÜx]½½Ý’í2+<1~Îu €°Òß߯sçÎ)™L†þáIâÀ.5r¹õ‹Çã$EÚªÉdRù|>\…Þßï—"¾¼¼¬J¥¢d2©-[¶(—ËéÌ™3ž$&€qƒîI¢ýWWWC\{€ÒgÈ`ÓNZ™{€$®)"¾ËåH\ÏqÆœÇõÐúϲ4—jñŒ>ÿDy»ø=xFï¯çusÂYb³vàa`,0ö<.ëa6›íu:é¢-ñXA|Ûí¶êõzð¶ùÚíòµŒõ/uf^økÆ—üÄs 2saãڼdzAÂ|­dž°Fø``` ê#/u²ïk%íÖmì!ûÚÚÚZ¸V, Aÿ;vìÐùóç5>>æ×ã\ê†'äæ›oÖåË—•Ïçõ§ú§:þ¼Òé´†N:¥½{÷jïÞ½Ú±c‡NŸ>’0–È>çãŸúCÂÚí¶Îœ9£ãÇ+‘Hèšk®Ñ–-[”Ïç533£b±¨t:Ýó÷³Vz¤WÞˆÒ# Whq׸K<Üò훋2› gòáüŽMÒÁ³K›Xø‘š8˜p77ÐuÀë–k,y0¼æ:<'õv™†Ÿu@°¸y!€ÁÌÌŒZ­–¶nݪcÇŽ)[?´ƒÝä9péŽp­½[}ÝzÚ ¸'¼Ï†í„‘{¹eÔIïu·!ýϽ}¢_GQ?\ŽçêïïA夵¥þõz=HY|L¶Z­P pi@‚`\îGš\O½ïÜc‚‡ƒ1Øæ»~J,¶~²w±XT¹\Öððp¸×ðð°ªÕjè{,µgÀ³;—¿`M÷ùá„ÓŸ`ˆåÚ3Ma±¦<ý5÷s¢Êõ܃@[38Óeqq1x†|î$‰Šâ¤òÁ|ubM[P÷\º%—ör²ÁeÍðïq=À5sÐIÒÖôãæÍ›Cì ãÙO±X 0ŸsÒ .×J$ÓÒÒ’òù¼R©T +++Á "I™L&d¼J¥RzË[Þ¢w½ë]šššR¡PP4º~èààà ¶lÙ¢ééiE£QíÙ³GwÜq‡>²VCÉ„H3~˜cKKKúö·¿­r¹¬÷½ï}ºóÎ;566¦B¡ oûÛÁCˆœïÍ,o”¤Wzå(=r…–nIŽôÚ¸‹î?=»^¯€†kòÈà^ÚÐz³©€°Ìùfêzi¥¤°‰®‹žKbØ8»=/ÔgÐ6‡††:2„ †@ÈH$¢S§Nu€P6Ìn+=àÁf×- ðs4ºådÝ8—yy,‹ƒ~À£“·SGÀ í@ôúP÷Ðn©EfØâ:©TJív[…B!ôÙÜÜœ¢Ñh?’:¬ðÊ©#òÆ@¹\V©T àÌ»‹F×Ó¸âu`lG£ëz÷t:ÝA˜ûûû•L&U*•Bßôõõ…ì<‰DB›6mÒåË—uþüùàÄC>ý=÷}ìÓ½UxÏ0zzR®KŸ’É"†š~‡¸¹Åšv¥Íòù¼J¥’r¹œ‰DHSZ­VC{ÍótK $»¡Á= .Ë’6ÎÂ`üùXöþïN¹Íÿ~]Oƒë‘Ø •JIRÌ{’8qc-”Öƒ×ILÀÚåÏIf:æs›ñE½ºÉàuÎçó’âd’IÛ¹ÇÌÉðÚÚšR©TG¹{{ <çPN${|—çôƒ[%…çeo`ÍÄ0'1ö0¶ÇÇÇU.—566¦ÕÕÕâ—³”•ÍfƒWtyyYgÏžÕùóçõ¶·½MßûÞ÷T©TB,NµZÕèè¨BßìÙ³'ôÑÙ³g;$x}}çúô÷÷k~~>x¸VWWõä“OêÒ¥Kºá†ôó?ÿóÚ¼y³vìØ¡GyDñx\étúÿgÇí•^é•îÒ# Whq€êšbßÈ%uO,ˆkkgq8x€0>Ü×-ëa#â=À%Åå>|sw·{ ÜòÈaÃD’àž'!üíÖkÎïH§ÓA20;;«B¡ÀD*•R©TR&“Q2™TµZ h÷Àоœ»áV}·ÀwK9ÜJÜM.\BÆû!©àøk·ÖB¸†*@÷ñjêêÙ‰‰„$¯ ãîýj6›j4Á9sk1}—xQ|œ¶Zë)6!SXiñ„xÊgb–9ŒÇã¡®KKK!3Ä/utïÖp·fSWÏ¶Ó ™CŒQ@§ËÙ°|¿¸¸ÈVyæLIgÄ®¸—{2‡††:N,§Îõz]kkë:wæUˆžÇ ¹—‘5 »8‘î–aúf|{À0ÀÖ38ÑVFÏtåqVžœ:2ö¸&Í.ä.]O[¯×C€:qÑhT[¶léX¯œyÀóÀÀ@ða8q¯—×…:¨=“œÏ7Ʊ=x…ñ¼²¾³2'èƒht#é@__Ÿ*•JðJ.--)•J…àlæP÷£úчxgHf™Éd2â´b±XH­K—.…¸NsÇãÓüü¼ÂØàyFFFÂzȸZYY kB¥Rщ'táÂ}ìcÓwÜ¡ññq½ð šššzݱþ“.=H¯ü´”¹B‹ƒb66À›ª/ÐlÙ4©€,TÝR‹nk›*› €Ñå €·d¬´; æZÝò@…K¸°†býu ˆ/¬š IDATI{”J%mÞ¼9¯f³©M›6éÔ©SÁZê€ -àJÚØLÉåmq"¨¥¸–÷Ïáñ–)ÝÒÚ¿Û (m¤ääw2@¤àý‘6ÎYZZR.—Óøø¸¤upLf0?©J«ÕÒââ¢:$&ív;ô%?©‰‰ }üã×Ö­[uþüy•ËåŽTÅÍf3¬u>ž ù‘H$ÄÄ<ÿüój6›úgÿìŸixxXGŽÑ[Þòý¬–©é•7¢ôÈ\´°a¹¥ÌÁ-àÅß.³rý/Öq@„{G|AÇîwÀ‡F©ó<îM}º-ÿî-¹4Á½!HY<Î Xt@tà 7èØ±c!#D 1 âàžîK=ÐÏÓ>|×A¶?¿KŨ›Ët TN.8¸Ek2dé©q©2* õ§_¹ÎØØ˜’ɤvîÜ©éé鎸ÎL¨×ëá·d¶ê&h¯ó,ŒOÀ¨{©°nV«UÍÏÏ«=` I^*• äqff&x¨ðš ÁYZZ ÖmbQ'•JE™LF·Ýv›&''õ裪\.+‹ill,ÈV¢Ñhx^êëã °Öý¬ËBc…|âY É¥n ŠçIÚ ~H¥ ïu 3?£Ñh8+%‘HÆó@r£´›§ý…D{ž‘×îéôkÓÌ—t:²SAVÉøå‡þ¹L‘×xRˆb¼³Ö?^+++š˜˜P>ŸW6› ÆÎiI§ÓÖåË—µsçN9rD{öìéX«¸¯¯¡ô7Ü=±Ìa—ø![’6%ìöz²Öu/˜—Ý$ƒõ 0ÏøS±X ×xCÞFX#Xï<>ÌP<“{3‰ýboU£ÑP6›Õêêj uÅbQÒzœG,S¹\V&“ Dž«¾¾¾MëâÅ‹j4Ú·o_¸^BÖ“l6«L&úi~~^íöz2 æk*{ ‚ÕjµT©T$IcccŠÇã*—Ëzøá‡õÊ+¯èÂ… á Ô7³°ÇôJ¯ü4”¹B –lÏ`Óí`ÆÚˆ,½4–w·dºCR =d lˆ’:‚À¹‹?¿qi$„ ‘ݸ&×ê–™uÇ`x]½¬ÖËËËÊf³’¤ééiÕj5mÛ¶M›6mÒ÷¾÷=:uJñx<PϰÄóSÝSÀ§{…ÜZŒÄ¿»ußnel!!pPIÿxà31 n]n·7²¹ç…âVûd2¼@Ï=÷œ–——ƒìÁ½ÍfS ZOP€ÅÕ ×q¯\.§f³âqòù¼–––‘ÑèzƲ}ûöéòåËZZZR¡P€àmqq1ÇM›6©V«©Ýøø¸²Ù¬Òé´fff455çu×]§|P.\Ðòò²6oÞ¬sçÎ…yÄXàù}lF»=¹\.¤vò‹Fž3HU---ÂÇw‘iI ž‚È»ç*€Ü ŒSæš“B~ï±-<cÜc‹VVV‚WÈ ¤K¢\^äÖgÚë·K:™Û¼ÆûÊ5Ü#éë}Ou&“ѶmÛtöìYµZ-íÚµKO?ý´êõºÚí¶&&&T.—µ²²¢¹¹9õõõ©\.ëæ›oÖ©S§:,åÜ×ɲºd2©••ÅãñÉk³Ù q¬³îÆó±°°bqhgæ)^9ÖJúÕÀ¹7Ä¡\.kppP£££¡OHrZ;k4íÍœÄsñLeÿv{=‹•¤ð:N«\.+™L†ñ41ñÿ±÷æÁ‘^ÕÙøÓ‹¤Vï›ZËH³ožñx™a¼P`Œ±YL9‚ ’8–"a©¸B „‚ÄI¥*ÎTÂfcâ"N‘Š1vYLðÛcãm<žÍ³i$vu«7u·º%u÷÷‡~ÏÑÓ¯ á÷}0ÆLߪ©™‘ºß÷.çÞûœsžsN/J¥r¹œ䜂ŵäÙµnÝ:LLLØ^dÌ–Ûí¶Ä‰D›7oÆ…^ˆ……¼éMoÂüü<î½÷^£Õ-/¯dÀ+•Jv뙟Éd윥gªR©`bbáp.— Ä«Ý~S H[©i·ßDk+ çh£¥TyÔ¼I Që=¾Ó%]¯×ÍÚ«e‚+ &à ÂÃÚ´¦ª§ƒà‚@‹ö¢ÒF”Ê£VHZ¼Õê˱¿RŠO (õûýfÉíèè@*•Âää$>Œ¡¡!ÌÎÎ}‚A¿JRº-™|³*……ªRªÈÉç8ù<ÒPø3UœÔ%§¥˜€Á˜ÎØ`5Á€z–˜éªÑhXQ1*¤TèÍPL€NpHK?RR©˜ò2—ËaiiÉê…°ˆÓìnß¾‰D/¼ð‚y<B¡êõ:"‘¦¦¦ŒJâ÷ûžÁÌ:µZ­Å:Úl6í™Ç·T¿ß@ ``, ™B¥ÔÆp.IG …B¦„²òz­VƒÏçCoooKP,=\õ¼œR ` Z~©0Sö¸Ïh‰×ø TAQ°Ë=D°O™ã¾¦‘ƒ û¤ è ¢Â£ µ×ëµ¾éóÕó ž;RvxV©G–Š˜ÛíÆúõëqÉ%—X°ýÆÑl6¶ær¹N§[” ŸÏ‡h4ŠP(„©©)ÛwÜ+4Ž8ë¸ðŒ¬Õj(•JF¥ã{8GT5½\.Å’ÆÆPÑ{¦™ õ<`¶'—k¥‚;ÓêR ªÕj6—ËÕBÿâ¹MY¡¬2¦B,mI&“…Bh4Vj$E£Q‹ã —¬££ëÖ­C±X4Ïk¯PææççÑÛÛ‹F£aA“É$®¼òJK«ýŽw¼ßþö·qäÈS`z{{r722‚‰‰ £w---¡¯¯ÏÖˆ²§´ÒîînË‹ÅÌSÏóÑív›§ezzúÿé>n·v;[[9G/c^8À*}B­Ñá´ ‘þ ÅŠÈ‹ßQ Ê¿ >ÕjÏ ‹ÏÒ8 å¸3è—*Á®Zù•®ÞÒOXŠEÆ p<´“Ú¢`ëÖ­èèèÀ³Ï>kô#GŽXîùŽŽ n$8Rn½RËØ¨|þ@k(ÐZÖLRÎt>4n…1´ôs.¹¦ÌÊy£bG‹&ßK€©tZV‰„Ñ fffLYÇã…BÈår6·§“rÅyQJW£±R'€_Eò³yÙSf˜Ê“z¢NŸ>#GŽX†ºîîn«÷P(LÙà3)ëTVi±&à¦e•VeZ§»»»‘N§Q,188ˆt:m´ R¸Ï8NŽAçJlÙ²§OŸ6°377÷2ú [UØh9¦ÁV©T tz<«O¹áÞ¥’  3 J{R¥ƒ{‘^UîGÃâù·38ß©+½@K¼Ÿ¡s§ç¿CÙSo$-øœ£ÑÑQ bii¥2÷™3g055eJ½cÅbÁ`Ð<¸ÄÉ“'þ¦1)Ç 8ªB@À®ð¨üilÇÀý̳•ûgaaÁhm4qN™X@ º~Œ×â|¥R),..š×²Å3ƒF®-?CƒŒÊ8”;¿ß®®.ÌÌÌØYÌ8š¥¥%T*lذÃÃÃ&sssèëëC6›E4E,C³Ù4¤^¯ãÀXZZÂØØöíÛgÞ¯w¥ž‹×ë5šU½^G2™ÄÔÔž}öYlÙ²çŸ>&''Í És÷˜Þ¤ò¡ÎãñàäÉ“¦Ø½Ú­íi·×Rk+ çhã%F°¯ÞõX(·™Ö“žZywìØÃ‡›å—ÙÈ;gÆR©d4™îînlÛ¶ °±¨u^)Y´„ÓRÍçÌÎΚ’LZD*4\Kʇ¦<%8U9`Ê•|öÀ“óL%ƒñT>Ù**ªhpÏR–øy®Ï¯×k /×ÖyþpM€ÕB‹Tî)“ôæÑxAy¡÷ˆJ;û@%ŸžEfo[ZZºuëð /`||ܼDšÝ-¢Z­bíڵزe >ð`ß¾}æ `_)ŸêÑ Ìóüã8UÙи-õ>j" þNišªÌ*½”ë@™¦2Íào{¤¢Z­"ŸÏ[êf>“çÏ[Ê׃rçñx‡‹Åì<àûé9j4Èçó&ã•JCCC¶ç6mÚ„ÉÉI\Òóù<Ö­[gIªÕ*º»»Q*•Ïçáõz±}ûv”Ëe;Î?ÿ|ìÞ½ßýîwÑßßo†˜œ¢^¯Û3¨T‘úHÃc´b±&''ÿ_¯åvk·sªµs´ÑZEÏ<þÆêÉ õƒ—Á»G~ž4*!ü™>“)ya;A¶5üœR68 ´T¸ÆwÐjÉç)à€5g´D.//c``“““V÷C5­TÔÄ÷2Ž€¬ó»´lêx ð€Öìe|/­ ü A-ãjÉTeG‹:êgÔ2N°I Tgg'òù<–—WR€2õ%£%輨2É÷*Ðåzq½ ШÄÕj5£x& „Ì‚Ãqhí¤üQæ ˜éi!ØŽF£ðù|H$&ó³³xä‘GlnHøìB¡`<õH$bU±#‘ˆ)9šžÔ T9~‚U(#”S ´VÚ#9-áj©eÌ ©#ªp*õDלkD¹Ð*Ûü×–^õЩç ),+•‚Xg¸_ø^Ö¡‡ˆ^)~‡òãô0ªW†F *EŒŠÇ㘛›C6›ÅÔԔф†Ígww7ŠÅ"Ö¯_ÉÉIlܸ?þx‹'Rã-¨èë9À5"LçƒsàÜwzÆò]Ü[ÝÝÝf§}Öy¥§‹ãÖ>rI•ä¹§K=Ã(+|åŠà? ··×Þér¹ÌƒÄ}V,‡‘ÉdlŒµZ Ùl^x!öïßoF…B¡`ã`–ÏçÃúõë155…t:mÅ#{zzììöxV DNMM™’îñxðàƒbÿþýèééÁ>ð|ë[ßÂääd‹G†òµ¸¸ˆH$‚……$“I$“IÌÌÌ R©˜Eå–çÏ«ÙÚv{-µ¶rŽ6Z’´ä`'ÒàåAÔÊsVÊ•^ļ¸x¹ñ;z¹ò²¥Å(ûCàÁ¦Š/C^~¼ÐÕÚ¬söã¡×ƒ ˜ßQ¯ŸÉÔ£LÍÉL`%«Ëää¤*,|/Ç©T׆Ÿ¡b¢*µ:ߣãTpÖl6[²”ñ öÖ¢†œ#ñûýH¥Rh6›H§ÓÖÿååe«M¡µœ´9‚«ÓÚKpÃlGŒõᜑZâ÷ûÑÙÙ‰±±1£Ò‘RBY •’sÁzn·»%€XQ~’É$ü~?vî܉r¹ŒãÇ#N·<ƒh {<«UÉiI`“ÙÙY³ SQVï°šŽZ³Êùýþ–x)*Î}Å=¤2FšóÅ5a?¼óº5ñç†rÃ"¤œOõÊ©á€r®û\+˻ݫ‰HSReä•5*ÁšfXUt©ŒkŸ(Ç|=@\;ŸÏ‡xlk¯1^Ã=餶©ô&•5=y–©¸*€º·i¨ˆÅbX³f Ž;f󝯆R©Ô¢À•J¥ƒ ŸÅ¹äZ¨X­VMvynÒKÏ)×rrrÒ 9& +Húä“ObóæÍvÞ²(©žÍËËË8räæçç-МñZ^¯}}}–q/NcÇŽh6›8r䈥öz½èééÁºuë0;;kó]©TÌp°°°€J¥‚`0hg3îKŽ‘Évk·vûÕZ[9G¹¿çza«ET-^üŒfóaSëº>Ci¤KèåL‹¯ÓzÈwª'Ei,´¬*-G-©T4 ±Ñ"® ÙÉ9Wë%ƒ>µ~I½^Çøø8B¡Y÷xùò»ÏL¹Z3øh ö @‹ÅšóH`­´6¥Zñ÷œ_UfTbŸT!"Źö”‰`0h5zzzP(,SûÆ÷:½_ "5îD-ˆ¡PÈËPD:QWW—¥&(ÖøÊ>ÓvÄ2­j*•‚˵’MI•[έΕR¤hýfŒ=•Ê¿‹Å}}}&·ÌÊ566fY¶¨|±p£'kì…zø5ð›kK¥†}R£G„@Z ÜÏœ?þMÓ£Iã.åS>ßKYâÙâTFÖ¬Yƒ\.‡f³‰3gÎ`bbÂÖ—2B«8é¥TÞæçç‘N§ÍÁ¾ÓÀ¾ñüÑýF9"ÔëõšÂÀxõܲï<yv3[˜RguÓàv»ñè£â±ÇÉ'°¸¸ˆ¹¹9„B!ttt`jjÊú§1qêqPϦ®טi·™¬„é¤&2®Œû7[jîT*efz?]®•ï@ `Ô¸J¥b´Êr¹lô«J¥‚p8Œ¹¹9 #‹¡§§Ç¡!4 ìܹÇǾ}ûpõÕW›W“cRš£Æ^ñœUf³Ù4O“Nü®µ¶RÓn¿‰ÖV@ÎѦVq^²¼sÌJkÑgÜ3×>ç‘Þ,Î=•7fÛá¨Â¤–EÆ„Ãatuu!›Í¶Ô? 2ű“s ‰DŒâÅ´šüû@j ¿O E?»´´R¡¹Z­"¢P(´d%S¹T¥‘¯«« •JÅÆ“ÍfÑÑÑh4ŠééiKçºvíÚ ­ZÍÙ7¡j9WUï׉ž"Ž»§§ñx…B©T ‰DÂbOS*•ŒzCe„±¥RÉÀ“D  Å˜@y¤lªl(UJ-ì”§¢M…\½‡šaK½iêäï¹ÿø* ëõ:²Ù,"‘–——MqÔ½Ûh4¬~ÿßÛÛk •k¡ï¦¢ 8÷ Ò©ô,àžfÿTù`_8µÈs-œ1U|_<dž päÈLMMµœù”G®_gg'R©jµšÅgУ¡”\Î'ûÍŒq}}}p¹\(—Ë(‹ìNj*Ïq*çœÃ‰‰ øý~ÛïºÆµZ •J¥RÉ<å]]](‹¦¬4 3¢QA"½kãÆ( ˜ššB$Áââ"žþySp¾õ­oaÆ èîîÆðð°­Æ©‡¹îînøý~ÌÍÍÙ}ôj75Ôµ[»ý¶·¶rŽ6^djaTë¤Ó¦@H-õt¼˜x‰ò"uÒ;ÔS¢4  5Û6UDô÷´Ž©åÏéyÑ>)•‰žRgÔb¯V?‚eR½W*ŽŽõ‡a¿ßo€O³iéeªÊ‘³o¿hTAP«£*‡Œ–£Á£F:~¥\qø õÈ(ÈÕ ™rCû©”~FÐÅF°DK«R"8ïô&,--Y\‡Û½Z¼rff±XÌæ²Äùh4V«R¯×2¥16|'ÁŸ£Y‡T! '‚2AÐFÏÊØØ˜mfJcÐ-½8JYSÏ"׎€Ÿ`ïvzTÞ)Wù|Û·oG6›5ú û088ˆR©—Ëe²ÊØÝahh@ÍæJ¬ÏÉ“'Q©T¬‚4Çǽ¨uF^‰¶©ûZz+ÕcEÅg ×€†Ê=*{êMRoŠîiß”ùx<ޱ±1S>”×OC=NÇ臺gt¬ì*J·¢âEEE6Òè´Få’{IãG¨¨ÑˆóGÚ c(˜ž›Ÿ¥ŒvuuY}ÞÞ^Sš¹ç¥Óù.fW#¸'°'…Íí^ Ôf½Ör¡Â{úôi ÀçóXM|ÀZ@L<±°°`4<*ÿ‹‹‹èëë³s·\.c||Üd+chhCCC¦Dö÷÷ãé§ŸÆöíÛñì³ÏšGdÏž=øêW¿jg”¸.ª<òìl4ˆÅbÈd2¯x†ÿ.´¶RÓn¿‰æþß?Òn¿ŽvàÀ\{íµ²tˆ¯{Ýëpûí·¿ì³û÷ïÇÕW_P(„X,†w¿ûÝ–aÈÙþå_þÛ·o‡ÏçÃÆñ·û·-¼õ_Ô¨8Ð’íü“BCÊ/sf´Ñ? ú•&À Qã0ø;¥tð2Vn9/öA-ƹJíøEë Bx¨e‹—>•ö“óT­VMñ¨ÕjF "£\.[ý *j¹%`åxؽ°yij솎AçBƒAÕLI dÓuS ,×Dã ´©BÀùW~=é_ª ªu›¯³³~¿n·ÛRÙ,+Õ™©È¨Ç*N[Æ-6r³Ýn·~ò¶ ê}>Ÿ¥%eŽÊ”I³Ï¬´4“²´´R‘œUž)ß@õzccc¨V«FÑËåB(2Ï ©a”?Ε*|¯3¶‚r¡^»Z­†ÙÙY«ÍjîãããF&“±ì>ÌøÓh¬¤÷÷÷%-•J¡¿¿}}}2Ë2e„ïdÆ2Ê4×òGªR´8f‚\•U=ø®׈gåšÞ*®ƒÓKÈçÓƒ´¸¸ˆX,†D"d³ÙÏTµZµ®5ã€Eõ™gž1¹×=Ç=Å9â>fßH7ä~áHNÏÿVú¿ãr¹Ìø‹öxgg'"‘•B|sssö}ŸÏ‡d2‰­[·bûöíVä²P(àÈ‘#8uêJ¥ŠÅ"šÍ•¢‡[·nE*•²¹çYä÷û‘H$ÌÀ¹ŽD"æ±bQÍF£ažŽ|>‰‰ ëãÌÌŒ:4 Yww·ý¡Ÿoñz¨’Çñ°€–T¢ªxr=œ €1KKK8sæŒ_V´æ<‹E,.."‘HX:Xe ‡Ã¸à‚ °¸¸ˆÉÉI„Ãaär9Ôëu àøñã&ÃJSo…*ïêQ¥|ªüëïõÿêa£bDE…óåôŽpù~ʶze”ÊÖÝÝmõ#X¯FIÝŒ½àÞ¦’499iç‘Ò6U!еb€5×Ï¥²¢{žûF•ož¹ª´:©™œ¯× ¿ßx<ŽÅÅEKÐ@e‚EûXÉ}aaÁêã8Ï ÆCE"ìÝ»Ï>û¬ÕÇðz½¨Õj‡ÃV4ޯ׋P(dóÝh4lÿ¹\.Ë<ÅÄh4jK·Ûm^Qzãêõºyð°víZüñÿ1|>~ö³Ÿaaa{÷îÅ–-[Éd0== ¿ßuëÖ¡³³ñx^¯ÓÓÓ– "™L¢··¡PG5ÐLï–SfÕS¥çÖüüüo8þ¿Q~Õçþ*mbb7Ýt^”¶°M»½vZ[9KíMozÞô¦7µüìšk®Áðð0n»í6S@¾ð…/ »»÷ß¿¹Œ÷ìÙƒ-[¶àÖ[oÅ?þã?X r½å–[ðá·Ür €kÐÒÒ>ÿùÏãSŸúÎ;ï¼_Ú'^Æl¼ð•îÄ«uXµ@­GÏJ¡ÕSS’<òÝ|§f4R°z;ã$œý 0áø˜õŠÏ `VË2)LÎç&“IópÐ[«Õ¬H!ß§Áñ¯@ðKP©qÁÏèz¨âÂÿsŽ5å* ׇïvRTø RqhÍãsU™àœñŸA ¤sÈs,T˜º»» tnS«ÕŒÂFK¢&й¤E’€€´è)W B©„øÐËEJ‚;õvÐr˺,‰Œ™àÜ‘îv¯¤n6Wâ=^|ñE›*º¦¿×£2D™SêžÎ©3Á‚þÞår_ž}µ9ôz½µßÍÍÍXQ¢è-‰F£èêêB¡P0Z•uUB¹×{Qå‡ë§ñ ”9vg|e‹k£¼ô”5l¨ò¬ÞB5&ЗÏç-E3kjPV´˜c³ÙÄÀÀ@ uTÏ66ŽÕi¼Ñ3”¯×Û’Ú•ò©465èyÍ}ª{YÏ«h4ŠÞÞ^ŒYlÙÒÒ’QïX„^}½=üc´Ö®]‹þþ~SÖ‚Á Ö¬Yc1ŒrÈú Èf³Ö¿¹¹9T*tww#·Ô¶Ñø0ž­Åb~¿ßöâââ¢y¡Oœ8arÃxÂ={öàg?ûªÕ*æççmÎr¹r¹ÆÇÇ-“V6›5O ³Þpà øÿøÌÍÍ™!ƒkì<û¸Ÿh,8×ÛG?úQ¼ùÍoF4Åw¿ûÝ–ßMlÓn¯Ö¦`½ÊYk€•KùþûïÇ»ßýnÛ °víZ¼ùÍoƽ÷Þk?ûÉO~‚Z­†o¼±åy7Þx#šÍ&î»ï¾_ú^µÈóÝÊ£×Ï­‡/€À¡t¥…(8 »š€Lp·ÛÝReœ±êî&`Ñx>‹€H­©ªéx4pRÁ»*/ê5 ˜¡Å; ¶ÔËH&“ˆÅbJÖPµ$:­HœõÌ0)Å‚óÆ9Ô¹æûøg ½zB¨(ò]N—S‰PÀ¤sªÿçZQ±âZÑÄÏ’¶¤6ZŸG©TB À¦M›‹ÅìÙT`YS¤\.c~~Þ(ªTº¹×ŠÅ".¸àóp4 «.^(ì, U°X,bff¹\ÎΩééiÌÎÎ"bçÎðz½Ø¼y3þèþ\púúúÐÝÝ—^z ‡FWWúûû±k×.ôõõ!ŸÏ#›Í" bÇŽ&kÄûÞ÷>3˜¨[½ä\'Þç²dffŸúÔ§ðÿøxÙïÏ&¶i·×NkS°ÎrûØÇ>†Ûn» ÀÊeþÿðø‹¿ø 0*D<Ù÷X­7—Ë¡··sssfyq¶X,fÏúE—"Á/K^òÀêÞ×àj~^`j¹ä¿'/2µªógJÉVi läKó"U«¡Ò9HÅP«'û ÞÎ-÷êMaµl^8´àõôôسhù#ßyyy¥R ‰D¢%†…sCÐ×l®Ö`†µ>ªå]¹ôê±¢YƒS•7ÏgêúpþT‘äºÓêª$ZcTªt8wT¨Tz&p;2é hw^ô¬÷¹ÏáÃþ0 …¾ÿýïãæ›oF¹\Æ¿øÅ³Ú\«%[û+p7¦ÀT‹&/{µÚó@&P$ÀR«¬r¡«‘/a>K-¨ú<`•j¢ô å°+ÀååÏ÷1¿>[³¹ˆ911¡¡!ËAßÑÑééi,..bË–-¬FKJFf¸¢BFë+TsZ4àR=<7JQág”b¤VaUhøåå;“‚^~^sõä2P˜àˆã«ÕjH&“Èåræèèè°»årÙjn°ï”3Ö÷Ðß)Ðä¹n ª N‹7ëøý~£Š°Ó}R>é¨ÕjŽðSâ÷¹g´X Áôg>ó|ö³Ÿm‘Í@ `i^׬YƒJ¥‚éééCÀòò²yÞ 9ï£C`¤´åÔêzs ¸oU™Ð’È Ñh˜Ç†ÿ%E^ÏÊ) ü5ãxÄ©X±?”YÆdhß©$Q"tzMÕS«žAÖA 8zô(²Ù,.½ôR¬_¿ÞTîY®×ââ¢<þøã(•J-FÝ_*lº?¸F”;*ÓJãržÁ:¯4&PN4N†òÙÕÕ…T*eÙ¼8 ¢9Z Vãg¸—ÔèA¥zzzáp™LÆŠÿq1ö" Ý‹šp8Œr¹l…2¹/¨…ÃaÌÌÌXm ùùy£>¾á oÀ7Þ·Û}ûöá?øJ¥ …>ùÉO"‹áÉ'ŸÄE]„G}^¯çwfggMQózWëôx<‹ES˜víÚ…“'O¢··úЇ099‰O}êS-E)ô†r} …B‹GøµÜN:…ááá–Ÿ‘ÊùJí»ßý.î¿ÿ~¼ð ¿é®µÛïXk+ g¹1'9¼ùÍo†ÛíÆ-·Ü‚|ä#H$`{Ú²Ù¬þÀJšÁZ­†jµÚB#âg÷îÝûKû¡õ ”WLW¹Óò\©TZRÌpéÁ¤–uµˆ–ËåªßÀ.y¾‹ÏVKº˜«ÁäÇ.§•W) a"|>ƒ®ÕÃKX èmݺ[·nµ,Cä‘3Ó­qO<ñD‹XãXd œ˜B´¤è©h­2ïr¹ ÐЫt:õl¨€ßÕ5£w‚}!`Q«k®@‰ã$]¨»»™LƌdzàœÉdZb=8®-ç# ¶(?š¸@)+TîB¡Uk‡ÃXXX°‚|œfâ{XŒ^­¡¡!D£QŒŒŒ X,¢³³Ód— ŠJV¥RA¹\F86êŸÛÛÛ‹+¯¼Ò@m,k  ŸŸ7Z ÇÒh4L‰]^^F"‘@>ŸG½¾RWD“¨‚óÈÌ`—ê•Ô}ÍùV!×ÓIóZXX0€êv»Maàd_(Kôt°ìŸzéèETï‹zVT¹TÊ÷,÷¯}ž-ü>å…2O…—õ`€Ê\±XÄöíÛ199ÙBä~ H$( ¸æškðÃþДrõ@ê>åKe{„ ½¬FÏýAùVŠ"½Ô¤n+†|>o2«žhÇ¿ßoUÅ)#Ü#”§¡…gŸRŒèá¡‘‡´¯îînô÷÷ã¹çžÃää$"‘ˆõ“JC£Ñ@45…¨ÑX©SãóùÇ …°iÓ&>|ØÎ®-ë—pï¸\.:tßûÞ÷000€_|¡P]]]Èårøò—¿Œ½{÷Z|GG>ô¡aß¾}Ø·oŸ¥R®×ëØ´išÍ&&&&àõz-]÷Þ½{-@Þë]Éx7>>ÞâUfÂz0¹¸^íZ Êbø¿m›6m¦M›Z~–ÉdZâ4ØJ¥þüÏÿŸøÄ'ÐÛÛ‹|>v. x½Þ³ŠmÚíµÓÚ È«ÜöìÙƒF£3gÎ`Ïž=èîîÆÁƒ_ö¹C‡aË–-v1KyðàA\rÉ%ö¹ééiÌÍÍáüóÏÿ¥ï¥uZÓBÒ­À™ºZÁ;::^–ÑGA-/,µ®*g*UM+©@„Mþ_½H äeÿÈ•×K“ÀE³ù,¿R%vZ r\.¢Ñ¨Q5|íò"ÀÍår-YŠ<±ˆçƒ}áçƒÁ`Kæ"'OŸs­|r¥P©Ušn¥1Ñ“À‹XyËôÆÐÃEPÇϨ–ÏWë,ǵ¼¼lAù¬hÏg´T*är¹þ{gg§¥ûäç5ãטqTúÒ‚Á ’É$fggQ­V … ¹Ýn«[CÀÁ˜‚M¾+ !“É ŸÏ¿ì2¥ŒóY䈨 tuuO~Û¶mF!€œŸŸ·ìRn·Û,©~¿ßä\•f ªT*¨ÕjæA`ŸèM ¼SÕlNJwRj–zÊ86Ê ÿÖX)RaÔ£AÏ"e–5z†è‰¢ÂFy%=ˆ*Öiá¾Wº˜zó–––LAsz3UNøÿ`0ˆw¾ó8tèU~?~ü¸­}8F:ÆÀÀººº¬J¥R±‚‘|æÚµkñßÿýß8qâ„!œ[îuõÄQf¸×56Šg½;¤_±)Õ”òƽOãÇø8¥ä15ב ׬R©ÀçóY¡@§±ƒç†3[a­VÃÜÜŠÅ"Ö¯_f³‰T*eÔ/zÖƒÁ ¶mÛf‰%òù<*• B¡zzz°iÓ&?~‡Æàà ÉX__öìÙƒ¯ýëx衇pÇwõmhhõzßÿþ÷Q­VÑÛÛkÞè+®¸ËËËxæ™g°°°€LMM᪫®B£ÑÀ—¿üe4›MLOOãÌ™3æuŒD"¨ÕjÇ]wÝ…þþ~¤R)ÜsÏ=¨×ëv&“*Ƶ¤Râóù,öE=%¿kí)5™L³³³¸õÖ[që­·¾ì÷±X 7Üpî¾ûmÚíµÓÚAè¯r{ôÑGáñx°yófx½^\ýõøÞ÷¾‡R©dŸ9sæ ~øaüþïÿ¾ýìºë®ƒÏçÃwÞÙò¼;ï¼.— 7ÜpÃ/}¯fcQ ¬Ô** ªTÐ’Jz•>ƒ«Ûžd€``£fÃÑX µÞÒ¢O>6 ßÁ`uÍ̤ô.þ\© &àcLA:1ç‚Á‹,f5??x¶zJøŽMßM%†`ƒ€¬Z­š•U=TŒÃãñàÅ_´2•A¿ßŸÏgÊŸÞG¿ Æ…_÷Ÿ_ÔúûûñðÃã‘G±??ü0ÞúÖ·Âçóá‘GÁ-·ÜÇsÖ°M»½vZÛr–ÚÇ?þqD£Q\vÙeˆÇ㘛›Ã÷¾÷=|ûÛ߯_ýÕ_™‹òK_úöîÝ‹w¾óøë¿þk+Ö“J¥ð—ù—ö¼X,†Ïþóø›¿ùÄãq\sÍ5xæ™gð¥/} ög†íÛ·ÿÒþÀóbSj€òÄÕºN‹¿Ç`\þŽ¥ZDüið#­ŸZ‘Yi¼Ü©0-,,˜Õ“Ï¢EÊ™ ˆßá!JË,©3JIVk茘U¦X,Zýˆ@ €±±1S|šÍ&†‡‡M™,•JèììDwwwKLz› þ+¿&¥XÐ;CÓÙÙi”Z,®°šÁˆÿVÀGÀʹæZ°èps]•wÏÌ,--µdçRŠŽfibŠØ'N`Íš5˜ŸŸG.—³X*üJƒk6›&3¤Øp=†\ŽÃù]``p hñ qîÙ”û†û–ÏÖ ìN¥Z=–<HQ¢œð<á{5‰ßøIçr98p›7oF<ÇÞ½{ ’–Å}Ę=c]”o|ã–ÝKÏî®.“WîMª¡œF£`0ˆR©dòNÅšŠÏ%ö‰2Á8/ãZ­†H$bŠ=¶‰D{öìA:6™Ñ„ ü?;O9*Û4‹Yy饗ŒÖèv»Q,qÞyç™ñƒ‰:¨•Ëe‹åÚ¸q#®»î:<ÿüóÈd2H§Óðûý( VÉœIéÚ±cž~úiÜwß}V<1 "•JaÇŽH¥RÇñãÇqÁàŸø¼^/Ž;†Ûn» ³³³¸ôÒKñú׿ÄØØ˜)k~¿####355…ÁÁAKQ­Vñ–·¼›6m“O>‰ƒš¢T«ÕÌ£Öl®$)àùý»Ø~‘ÒÕÕõ²úfðoÿöoðx<¸âŠ+ìgg Û´Ûk§µ³ÔöìÙƒ;î¸_ûÚ׌rÑEá®»îÂûßÿ~ûܶmÛðÈ#à3Ÿù Þóž÷Àëõâ-oy n½õVSRØ>ûÙÏ" á+_ù n½õVô÷÷ãæ›o¶¢†¿¬©Â ¥Z"˜ðw‹‹‹v8›~ .$ÈÑ€b>ýCŠ­òJo¡ÒCK$ûOÏ /h~‡cãÅO€Ãx^´ü7/v >%È…BæŠD"ˆÅbf%¯T*èïïG.—³ ÑHÄæOã;ä‘:CïRž8·ähðTàØxá;n•›Nª…*šüç—ë­qT>´:މ?Ó³´Ð2ã ©G´úrLT9.ÆFp¬”õlq鉃H§Ó¦±¨çSyï” ‚7Î)$¹\΂i©ØRv¨dÓ;àñxLa9´NóÌÀŹ(—ËÆÖØ(GŠF£H¥Rh6›F/©×ë8uêfggí”Ê1çL©=œ_¦iU ¢z¸Ælz6°J'$pÓ{*º»Àñs^¹·©ê>¡’¥žRD¹/©ÈR Ó w}QoБ#G022‚„ÃalÛ¶Íþr¹lÖpÊF¹\†ËåÂîÝ»Q­Vñì³Ï5‡-`Õ Îye_è©a, •gM«¬qÆ9¤"Å9¤âEÙ¦ò¡”ÒJ¥‚ÑÑQ+ȳsâ¤ÎjbM†ár­d®óù|¸ôÒK‘ÏçqüøqlݺëׯÇc=fEýXÉzûö혘˜Àüü<¦§§­Èãôô4î¼óNôõõÙYNE¨££ÇŽ3ì¿øE¼÷½ïÅ{ßû^T«Uœ8q~¿¡Pk×®Åå—_Žõë×cii 6lÀ™3gP*•ðÏÿüÏFAìëëC¡PÀC=„-[¶`ëÖ­6¯ËË+©ðCØÓÓƒ……Äb1=z6l@2™D<Ç?øA¼á oÀí·ßŽ#GŽ`jjÊö+ïžµ¯vûß<g«é=Ìv¶°M»½vš«ùÛ ­ívÖÚþýû±gÏ– €f}#ÀP`¬Zð4(“—?˦®ü-î @¨¸Ô(æ!oœ–?í›ÒRô=J— `d»*e†´Çb1ìÞ½årsss( èëëC©T2+7çtpp¹\Çoñj0ë,Ç«V_Í.DOçL=P¼ìÔƒÁï¨%ÚIASŽÒfBœÊ#ß«Áì•ì»®ó&’cMê=J7#Õ8®k³ÙD8ny·Ûí¶@bÆÜ$“I,,,XAH¿ßo€«T*Y¶+& PÇ„´l{½^Ê>Ÿ±X̨ˆ”z8.DƆöDª›ßï7Š ½1 òØ×îîn„B!ôööbÓ¦MسgñàƒbjjÊ3µ€œ“Âǵâ³ÏTPum{Ž ®*æô<)ÍD×Îé}S™¥‡‰”,Î)ç‹sæl*Ÿ\'UŒ•žÆX2U®tÏq® þ)Oœ‹7šâ ÀžU«ÕP©T088ˆ7¼á xê©§ðøã#ŸÏ·x)»\ §çƒcUðÏóˆõNp_é˜8¯?« Ô£HúS04E„gA$AGGr¹\Kr5NÌÉ<Å IDATtuuYÚÛFc%)ŠL©»k×.LOO›IEÑçóáäÉ“æåu»Ý˜ŸŸ7Å: bzz˜µdÓÓÓØ¼y³…—]vÞúÖ·âþç°ÿ~“•ÞÞ^Äb1lݺSSSp¹\Èd2xç;߉ûî»kÖ¬Á¿ÿû¿[JìuëÖáÆoDµZÅ=÷܃뮻~¿ßøÆ7lOîܹGŽÁÂÂÖ®]‹·½ím˜ššÂž={°fÍ\vÙexòÉ'qûí·ãðáØ™™i1Ò‘‚zæÌ<÷Üsؽ{÷Ëdú7Ùx¯¿ë]ï2Eð×Ù2™ ¾ÿýï¿*ck·ßÝöê«ìíöª4^T¼@ déî×ËžTå#Äð»ê} Øå¥F+-¢¼À©Ù?Ž7‘H```;wîıcÇpÏ=÷à’K.ÁúõëFqâÄ ‹í`†,MÏʾðߺ©`©…]å 3A ט{k¯Aåªx¨Ä}¯ (_ÃZK¥äQ¦ià 1X´ÞósºÏ4•*ˤձßGŽ1…zÍš5Dww7úúú099‰B¡€¯}íkH§ÓÖî_Màœ5´pü<¿HkÒ}ªJ•dTÑÓ¿™!ˆg* F<7Òé4’É$6oÞŒãÇ£V«¡§§_|1šÍ&žzê)T*•Å9•J!£V«YV£l6k13ÄæÍ›qÉ%—àÞ{ïE¹\FµZE:¶ýX©TŒÖV¯×Mùׂ¤óóóèëëC6›E©TB2™´5ñz½xüñÇ1::Šd2‰;wbÿþý¨ÕjxÏ{Þƒb±ˆ /¼ÐæèÓŸþ4Ün7îºë.üèG?²X.z­GFFP©TL&í|ëêêÂÄÄJ¥^xá;_FGGñØcappO<ñ®¿þzÛo—_~9<zè¡–sŒïj·vk·_½µs¸ñ𦢡 µÒQÉP…Ac4xñ©W AŽÆbÐÒ¯`XQoû¤™XÔ3 ^ŽI]áNÅŠÊŠ*PNpMš ÁûΠÄ@ €X,†©©©–,?‘HÄ(6ô(ÐRÊ9Ô±êx±Ôª^#g–-`Õý®O=-\[þÍùPK¸VMfß”ŠÀÉÉI$“I3.°Ö÷‘*ºŸ8NÊ„f§s;H‰ä¹Àgk½Séà™Á=­gŸ¡ž«\.‡¹¹9lÞ¼Ù²Ñ8pìØ1tvv¢§§Ç<ÍfÛ·oÇE]„£GšŒD£Q,,,`ii CCC¸úê«ñÕ¯~³³³°ó‘ 8ã?âñ8\®•À{ÖÝ Bîñ¬¤ ¦§trr7n„ËåÂÖ­[±{÷n„B! ¢^¯cll ÇŽ³š#W]u•56lÀÌÌ FFFÐßß믿ýýýFkËf³xà°yófSŽèñÔB§ããã( èïïÇää$&&&°k×.„Ãaìß¿¿EÆI³ýeµ2Îfk“ZÚíµÒÚ È9ÚxyØ‘ŸÌßñ¢csR¥”Σ …Í z5'À½h–SP^º´Þ°8+ kßÔù ZIYb#èW€B…&“ÉXÀçðð°]VõúJºT¿ß`0ˆ“'O"“É´•f³ÙRìð•<K Ä^ œq\|&³è.ÇùV«,Çàô,ñ™êc?) º–ì7-¿\?R‚Á €•¬V ¸.êaâü+=Œ¿£•]½!^¯½½½-”¥æˆÑ#Ðh4¬?/zÝønMLÇÏ‘bìIŒýQ嘴Êäââ"Âá°)”-õtñÝÁ`^¯===(—ËH§Ó8zô(¶oߎ-[¶àùçŸGOO099‰ÎÎN”Ëe„B!lذW^y¥Ñ$¦§§[öóÐò÷ƒã´à:½nl*?¯²¤JfˆR‹¾ÎzNœT?*\öŸ)‰Ê ×E•#M«Ï枢ò·¸¸ˆÉÉILOO·œ…jp¹\- ØoM­#§ pq1Ž€ŠŸî=Wñ;ŒQY=k”Óõë×›Çe||ù|ƒƒƒFg]»v-Ž?Žl6‹^x¡%›VWW’É$Òé4Êå2æççñƒüÑhóóóðù|˜ŸŸG&“A<‡Ï糸9WbÿY]œ^JÍpçr­ÄéwÞy¸êª«ðº×½Îö ?ÿùÏÑßß»ï¾^x!&''­Ðigg'âñ8ÆÆÆÐßßÍ›7]÷’K.AµZÅæÍ›ñâ‹/âôéÓSȹgÑTÖX)•JØ·ofgg±}ûv<ñÄxàÌû¥Õæ•6ØníÖnÿ{k+ çhÓ‹M-êÀ*p‚^^x ,É‹çÏ4ó»Àju`ͼâÌž£Öq¥Mi¼Z7ùG©´j&&-ãÑ1ñßJ‡Òyá÷kµâñ8<Yöèé °ééé˵’&unnΔ;w:/JqÓ‚‚o‚µ¾ÒŠG «frŽIÇ©ïvzœÔ ã¤Ô°”å·3!=ªlhüzzœÖsZS©r¹\ ¥ˆã*‹f‰ç‘ÃN`®2žÒ+¤AéôPPñ¤Ç‡ý¤rÎ:´ðr¼êI`-*‚Œ7aãïÕóE% ™LbhhÙlÖåH$‚x<Ž`yyæéX\\D,C<G2™Äàà Ö­[‡'Ÿ|SSS/£Cq_){CÁ5÷?Ïß9ã”´½’Ñ?c`0F}žÊûKâ»58›ãT*¦*¼Nãeƒ}¢ÌR^xvq®(ûê=¤|s¾Ô3Á³JûÚÝÝmVs5ª0¡Î·“Rªt7§1AT¦ … …b±‰„e¡ëëë³LoZ’sT.—:Y«ÕpæÌ[ÿîîn¤Ói|å+_± årÙè”ô42öŠ{Gëç¨Á«££™LÍæJ†©©)£Mõõõ!“Éॗ^ÂÁƒ[b¸àĉxþùçñ†7¼Õj<òÖ¬YƒŽŽäóy<òÈ#èééA<Çôô4ž{î9lÛ¶ÍdŒuyB¡fff,]°Ïç³ÚN333·ì_;wîD¹\¶sˆÊËoƒçAÏÒ_÷sÛ­Ý~Ý­­€œ£—¹f·qReÔÀŸ±x•ÆXðo>×™ÖÖ ¶TQàûøy¥0ë'¿ËŸkIO¼|Þ½”ÅJŽr^ò ôó´ /.."‘H “É ‹Y¾úÙÙY«Ù¨8§R@ L+¡*" ´t>TÉâúi*]]Cý¿sM€VO”ÓÛÁ~k_éAP¯î÷û­& =” ƒsŒæ¬MA"`~~Þ<˜™™±ßsÞøù\®K,3k+×—OþœŸ¥Lу wµžÓ’JÐÊyðz½F‡ h6›…BXXX0ªRjH¹RºJ$ÇãA<7ùF±XD6›Å¶mÛLFâñ8*• 6oÞŒ¾¾>ÌÎÎâ©§ž²~軨Ìrüª0ê9àÜ'ô:ò;48ð{N  *Tò¨T(½‹2˸M­žTÝ—ªd:C¦ IûD™ "DÀ¨ °ŽM ü™RæøsÍj¥ÞVÎÒA¹oÕZÎqjú^•9=ƒÙÔcù¡×E3lqÜ‘HÉdÒâ»Üî•Ô¹ìs<G±XD>ŸG©TB8F Àìì¬-ÜË”÷p8ŒL&ƒR©„|>µk×¢P(ÀårY ³ÞÅb13TðyÕjÕâ˜Xñš‰#蜚šÂ3Ï>ŽááaÛ“Ì\ÇìqšD¢§§sss…Bزe êõ:zzz0<<ŒD"‰‰ ¬_¿—_~9pÕUWáÎ;ïÄüü<\.WKRŒW«µ= íöZj¿å;Ûí¬7µx« Ô =¤ Ry)8çßzÑ*—Y­›Àj ¨Z.ÕâǦàC-”juUúR5˜‰@€Y­ëõºYY—‚àQëv°±X ÉdÒ‚•yy3cŒÒBèÐyUå€`„ýÒ9PGÐå¬8;ó3ÎX c*ü=ÇÊï©EµÑhØz+à$p¥’¥q+ì' €–ÂNOåGe‡àX­§à,ÜÈ9×t¡”3¥Ðâ¯Ù­ØÿP(dccº`®™®‘Ƹh!<*-|僒ɤ%)`l‚‚J‚FbÎQ¥RÁÄÄ^zé% äóy«žJ¥pÞyçYÀ=ÇÐÕÕ…“'Oš§mhhÛ·oG4Eww7Ö­[g±Qšâ•ž50psß+¥’ò¡žS*|êãóÔêíTÄõLQùr»Ýغu+®½öZ µ$“à>VEGÏÝGz~ñóêyP¹çUƒ‹z˨0sþôLàYƾé8©4«¢@H 'TèC¥g•=(óü›Aô<è©bÀ>ÓSg2«u¢I èÅ`%ðr¹Œ“'O"›Í"—Ë@Ë÷˜Ha~~ނ׫Õ*B¡Ý¤d©‚Fäþ`!×h4jÕÈ{{{­Oœo~-‹æ}Ç;ÞË/¿ÜöB,3ƒØÐÐxàœ9s©T ~¿ápñx»wïF4E¥RÁìì,J¥.¾øbë{8†Çã1¯öùçŸ?üÃ?ÄÎ;ÍËX(0;;‹D"׿þõøÓ?ýS¤R)£–ý®¶¶Òn¿‰Öö€œÃ—ŸÒÔÊIo+ §Y‡¨•ú¤@X-ÒF CA…R…¨Lð³úh X%ˆÔÌX@«‡Ciz’&Aî²~FßIkw&“ÁÀÀ€YªXö˜Z­†b±ˆX,-©o º5þ€c%hg㸕¢^$9ÂõTEMÁ"ç„ïUúš‚;‚$zcø\~–ŠÁ8ã.èc1AUdª×GJ*TT¿TlÖ Þt1+\Cæûý~SLèåQë'çŒ ¸ÑX©{Àô¢áp===˜œœ4`å¤Ðp>Y¨“™¨fu¼\wEaö-zóšÍn~"‘° X333H$³ŠÎn·½½½ôs¹±mÛ6$“IƒAÜ~ûíÈf³¶·@)[ú>Ý?šÎãñ´äsTî4±×ò¤Ô<=_”ºD¥ùÚk¯E½¾’ùK÷þÑ9UÅQ­ÿ/ÁŸi60õTptŸØ {/¸(ÿœ ¾›^5ÖA`±/<ÿø ¤×½§ãå+]“û„™ÅH ä~©€þÈ€ôfs¥¨$…X,f±¬Â®J—Û½“S­VBvõÕWc×®]æÉf³èé鱺#FÖ 6`||.— SSSFódì )ž ÄgÌK2™Äë_ÿzœ§òDoI.—³XŽññq³ªk`1÷ ÇOo &î±`0ˆp8Œl6‹`0ˆ+¯¼û÷ïÇáÇ199‰@ €p8l Î?ÿ|¸\.8pÀ#\wÝuøÉO~bÔ§|pþt©AB­÷ª r¯¨ñA©lºšýŠ{ŽèÔ;IÅÜÜœ‚ä^ç\ª¢¡J ûË÷R!ãZkÂ];5’p}¨ÐjºXõžj=÷ ½œößÑ„ì—z4)ÿj``1ËF£a^=OT¢òªTIzÁô½F6lÀ¦M›pá…â‡?ü!<exËårV³ƒãL“Ë¢…L4AÁÀÀ&&&ì|à™Ãyã™Â¹ðù|èîî6J©Kù|ÉdÒÎ'­ð¤¼qí0©¥_çà†ï£,h欮®.SPH[೩T¨œ(UE)TT¸ü~¿yB¡–——‘H$P(LiP ³)qŽ•ùõù|èêê¦M›Ëå022b1jM%‹µZ“½^/ŠÅ¢ZÊK½^G86yÒø(¥¼1HžÙ†ªÕ*‚Á õ¯Z­(¢Ü7 byy—^z)Nœ8™™ŒŽŽbÍš5V˜±Ñh \.ãØ±c–m¨\.cjj •JýýýfùVE[PM¡^$[Ê1åD ÜJcrÊ-Ý ” `•¦™Ïçñï|étºÅSã Ħ§@•iõjp¨Pò{”Î7\Ý”íƒR›ÔóÇõtŽQhÿ©0Y\¸gzzzJ¥pôèQd2™€OÅX-òÚÑÑ……D£QœwÞy¨×ë8sæLË;Óé4xà<öØcؼy3Ž;—Ë…M›6! áäÉ“-†ƒf³iÙ¢h,à~¡·%dÁÖ¹¹9LMMÙ¾¥7†I+`rr©TÊ”þͽ³°°Ð"ó?ýéO1==#GŽ´¤Þ°a~ô£açÎÀ‰'°nÝ: àÑGµlw*ÅQiM ™X@)WTÔ¹÷(ªèRn¹çœç¦^^^)§{–ï 1ïø<õ†*…I4 ,¬Gº 3&Šçƒz•^§±?ôp¾¸·©„ë¸ø*ì^–Š–ã×=FÒH¥ƒsIƒ¦€®T*VѼÙl"›ÍšÒ½þÿ«‰D°¸¸ˆééi¼ôÒKؽ{·¥Á}ñÅmÝÊå2¢Ñ¨)ç.—Ë*£3mm:6e:ŸÏXQºz{{áõz-v¬Z­bnn¹\>ŸÏè¯[·nµ”½<ÿ˜ê7—Ë! bttÔ·††°aÜ}.×JÕôjµju XÉ›q þÕ‚‹œOÊç†à™óÞh4Ì;CjžVe§@•Ž_©v”E¥Àówœ#sröéŨV«ön¦TV¹×~èÞ ±¥³³Ó@2׆û‰Jž=<é‘Pj¤Ö@¢lPÒ8õ¸ú|>S˜ÈÍsF3‚uww[±±1‹E['zL´ÿœ÷@ €þþ~twwãôéÓH§ÓH$èïï7ªÑîÝ»-Nˆå^¯333öŽF£T*…5kÖ ‘H˜R,Ñ×ׇf³‰+®¸Â*­kö5îS§N!“ÉXÜ)˜===H$…BVe1(,h833csS*•ì<9räÒé4&''±{÷n‹E3ˆ8pÀâKb±>ò‘ ‰ ··×*ŸSc&¯|>H$Ò2ÿ¸à‚ ðð(‹Å'?ùI\uÕUرc®ºê*Äãqüüç?ÇæÍ›ÑÛÛkFŸvk·vûÕ[ÛrŽ6* £JñÑàMZ=y9Ó²KÐAk Ò5”AàFpC‹´f3Z³i´*š V­Ð´Àòý "TË"°Zšc׬4¨J`¾´´„ùùy³bwuu!‰`vvõz³³³XXXÀ† 022bºNpK‰€Tk˜(¥J?ǹc97j)®×ë8L:†‚'ŽT9Òä4•(9ÖÊ×lINk¿¯€•Tö[=F¤41׿zC”ÚB`¿°°`Ô˜b±hë§²¨}ä vù9¦öt¹\FŸ Å˜V媳ïñxÜhu…Bñxår¹Å¢Í¬W§…®‰DP, þöÞ4Hγ:¾zŸÞ÷îéY%4’l-¶$,ì`;6ØÄT(L…¤€"Àqe¡HA!¦Š".~@’ ¤’~*Ä&¸!,laƒ)K¶µŽöÑŒfŸžÞ÷žéžîïG×™Óý~Éû1 ¾«jY¡Ï IDATT’fºŸç^Î}ß×9ç:ç1”KMÅ£w¡V«¡V« (L$8{ö¬¬åÈȉb±n¿ýv\¹rù|±X 333]TžF£‹/е?—Ë ÍP{‘ø‡ýç¾¥LR Ö4JRÒtÌ9 T°˜eN#4-kH…›²¦)F&“I¨2컎]Ñû…cá¹Åﯮ®v¥_Õ^ £GÏ¢§ƒç ½y\;î -4èpr¬:Ñë' *Tº´ÇÅd2!‘H ¿¿ÇŽï£N¶À$Zgæ§……Ó‹‹‹F»ÝÆÕ«W111û³³Ø½{7êõ:†††ÉdÐßß……äóy©¥³´´„R©Ô•ÙËívãå—_F«ÕB©TB<G4E¹\ÆÀÀZ­fggÑ×ׇ`0({: ЇÕãñ T*aii ±X §OŸÆðð°(‰TtN'J¥ªÕ*jµ’É$fffðgögøáˆÑÑQ©ØžL&ñ­o} ú§Š\.‡ . •JáðáÃÈd2ˆÇãh4XZZ‚Õj…×ëCƒÝnÇîÝ»‘L&qôèQø|>˜Lôz½Žïÿû°Ûí¸tévîÜ —Ë…ýû÷£¯¯‡F¡PøE\Í?W{£(X=¯J¯½­§€\Ç—4/FÍeå¥È‹]ó  „ ‚<¸4 €XÙøKË3•M ¡·€ •t &kêi:>€`Øàk˼¦i ½(Q•J‘H~¿_¨G,œçñx €JÎ 7¿V~tV‚O­Àè´º\?z“4§ŸãäÜ`ñ;œg‚Kz£ó¢­Êš–Ã1FBÄ1èQ ¡¢EoŒævs]_Á÷±†Æää¤È&ןë¦é?´ð3€—óY*•$‡¿žwʬ¦ ŽÅÉa˜ŸŸŸCå+%‘sŸÉdº)ÃÚ8A¯Ýwî¸Îv»]2q´×V'ÉÐô+=ÌFÅD+j4¬ðÙôR¾õÙêóùIJo2™¤†F³Ù©ˆ>11!Áçš²Ê=EŠg3ç=—ˉrGšh©TÂúú:Ün7"‘¦¦¦0<<Œ©©)) º´´„õõõ. !½‚N§S²²ù|>$“I¸Ýnär9¬¬¬H:X,lÛ¶ Õjµë ]__—8 îUžÙ>Ÿ¹\Nä—žžB¡€F£¾¾>ÌÏÏ#™LâÀO<»îº Ï<ó Þóž÷à©§žÂîÝ»Ñ×ׇ¯|å+ôèQñ ‘¶H Ï‘d2 —Ë…‰‰ ©ÿ½ï}OöþÖ­[aµZ±¸¸ˆ……‹EØívD£Q˜L&8p·Ýv>ùÉO¢×z­×þw­§€\§MÇJðbäÅ­­|ôðß :A×Ð4. ~tÑ ôó-D[íµ’C†¦kÑšNzÁ¦Žð=/´v3>‚ cbŒ‡®OBÊ ÒívK1,^ÂZ1²X:i#iY%á˜hç<‘&ÄþJ玔76R²t@·Î¥iS ö$€#ØÔ*ŒT™]Ëh¥&XÐÔ=«ÕŠjµ*ë¢é[ˆü½U”/¯×+Þfâr8XYY°ª=UZNh5×´‚^zR©€ e‹rH¹$hnµZsR«Õ‹Åä™ôøX,¬H 6ݱc6oÞ, ç½Ùl ݇û£Z­vÅp¬¯¯£\.ÃårÁd2ajj ###€k×® ÿýž{îA.—ƒÏçÃÜ܉Êå2víÚ…¥¥%äóy Š˜”“H$‚“'OŠGÏçó h}}]ÖMËŠ´§Â¥­ûZiÕtLm Ð@‚¤òB™âÙãr¹º²Jé jm 1A+ÕjU~Ïý¥éW‡¦ÿpMt Ž}ÓŠ)_Œ£ì0S•hŽ›r¥cVèݰÙlèëëC¡P:½;:µîêê*"‘¶mÛ«ÕŠ™™1¶3üµZ-x½^„B!,//cii ^¯Wö|£Ñ@¥RůV«Áï÷cii ÓÓÓBéóù|X[[“b~\÷V«…ÁÁA9‡Úí¶µW«U ¢ÙìÔýà¹Q©T‡ÅkB%†±r¤ ê³R{¾†dÔ^Fž™^¯‰DãããxöÙg±wï^lÙ²7ß|3~ò“ŸˆwÓM7áÃþ0Òé4Ο?/Žt:ééi´Z…étN§^¯>Ÿ;vì@*•’ŸÑS’L&áñxàr¹H$Få,ú›¿ù d3[ÏÒk¿N­§€\§À›–H ì¬-Á²¾Xy(ѺŦ7-Æ|'ŸIP¨ÿhË#ŸA`¢-íšWN‹,•£Ç—(Ÿi´þjŠ  ßI@t€‹aíܹ³+^Àn·Ë…OÀŸN§‘N§»4miåxIAÒ^&´ÏÏs® Àøo@¯ãH4=ƒý'ðåÜðY´Ðò3ôüPø7-לC ºt †~רðÊ00uddÉdR”žd³YT*áøs 9!:À™YÔÌæN–\.§Ó)Yƒ(?Úƒ¤­Ô6[§ÀŸã­V'ž‡DNJF»ÝÆÂ‚Èùã¤r~Ø?mÁמ-‚õ|>/1·Þz+æçç%M©ÝnÇÞ½{qùòe„Ãaô÷÷ÃápˆòA°Ï X•JEÒ“Ri3›Í%/àìÙ³’>™sIë5ã”´§“2¥ã«ØÊžöªrrurž#4.h€¯e‘ߣÂÁ}Fª9çWˬöÞÑS¥éqTjôÞÓ±`ÜKôêqž8ß”*Êšv¨×›ïá3X;HAìv;€öc 8S¼Röi(ѩǩdø|>ÙoFCÀ2û Q¯×‘L&Q.—Åë×n·‘Éd‡E1 ƒp»ÝXYYA"‘™&}jff~¿&“ óóóÆÂñrìLÙÍçsžéùaÍzì8‡ÚSKCM£ÑÀC=„ÁÁA¼ë]ï’X”3gÎHlÚ>ð¼ãïÀÊÊ †‡‡‘Ïç±uëV|àÀOúSÉÇÔ»6› £££Ø¿?Þ÷¾÷¡\.㥗^kðìÚµ •J©T õzÇŽƒÏçÃOR‹¸Td˜¸ŠŸ¦þ±2t:Æ«¯¾Št:h4Šf³‰d2‰H$‚T*%´—I leŽçäÉ“èëëC n:­Í›7oÆ{ßû^|õ«_Å¥K—d.µ’ªUʹö¸qîy&p?iÃVôõüP5ÅŠsHyÒʺŽ+€X,&±6ÚÛGãÿÏ!ŽÑlÞH´À~±:FEÇpðYÚ À>2ö„}ç9¦­Æ<¹_M&|>ŸÌëÐÐöìهË/bqq…BV«UdJ!©‡‡^¯WŒ<ŒcE~Æãñ P( •JIàµî—ÉdÂøø¸(èµZ n·µZ ¡PHî“É$ž z&&&àõza±X¤6F±X”±µZ-QÊ+•Š$‰ÐëV¯×‹ÅÄ‹B/×€g=y¤::<ûì³xòÉ'±wï^˜Íf<øàƒøïÿþoI½{êÔ)Ɉçóù°°° UÌ_xá”Ëe8„Ãa¼ímoÃŽ;ð±} ëëëèïïÇââ"<FGG188ˆF£L&# 8?uéÒ%‘7³õ< ½öëÔz ÈuÚh € @¬lX@7™J…æ²kN/Ÿ­é&tðÒÔÖt ^è~×û©•'µó]šâ¤)CZ!ás5åLGë1iš -ÄóóóÂï&"Âf³ajj @©TJÞi¤]ñ™?/w6íÑá8õ8W¼ÜîbqüÎë)ü?וÖW½~TȨäûo\W‚+‚N+SŽ´¢J ÈØVKfACÒ~H«£Â£×žëH«3ײÙlJ0*Ƕ¶¶§ÓÙE¢rÃy¡ÂŬJ €¥å™Yµ8Ö?1›Í‡ÃâébF,*ʤpÄò½ìg»Ýá œ^ºt õz›T¡µ'NÀçóaddsssâ9¢7Ájµ ç~eeE(ƒ[¶l‘ô¢N§KKKXXXÀ¹sçD¾´7NÇìpˆs©8SÙÕûŠû‡Šçšç×E'HІm  <ñÌá¼ÝqÇ(‹øÑ~ÔØnôÈò¬Ñg‰6VplZÙ§¼Ò2OyÖž`zAô“É`xx>ŸO’vpo‘fç÷ûEÖµººŠB¡€R©$ïgÖ;Ѭ\.‹@™õõuär9ñˆpN¹v.— ±X H§ÓA¥RÅb‘¤Ú{ÁÀo&Yp¹\…B˜ŸŸ‡ßïïRÜu,³_ÑûN°ßïÇïþîï"‹áé§ŸÆ¡C‡P*•`2™°²²"gqµZÅÌÌ ¾óïÀn·cß¾}¢Xabbõz—/_ÆoýÖoáÆoijÏ>+gÓôô4¬V«œ»víÂÌÌ áv»Q.— …ðf·7ÊÒk½öF´žr7#˜%ÑÆaèÌ0´k/t^ldkσ‘‹ t§ æ…ÈK è®âÎq°¼Ä JØg ª4‚TZ, š´…´Ñè›+•J’v•ã\ZZ’ˈAÕºqœœ íÑà˜µ@—¥˜MÎøoW{E´‚óÀù'à' Ò AfM±a?tæ-=÷ÚÓ¤é¬B¯77Zu0²|ÖÖfRšX[¡X," ¢P(ty÷(ŸÆŒMÚÊMª S-///KÜ A½~¿Gæž + ÷¹Ž:u0-3| `Ïž=¢˜1¹­ÈVk§ZóSO=…x<.…ÚšÍ&6mÚ„v»SDŽt*JÍf§°R*@'h¿\.K¿ù{íÍÐû—´A­$k¹à3ôžÒJ'ç@ˆZý<Ê׊JÍÔÔΞ=‹­[·âäÉ“]{‰ûIôØ8ïÚÛÁhFåÅ(ÿ”SíÝÓ ŽAgqã™ÆtÓ6› ¡Pf³¹\N,þúY¤N®­­!•JIqBÒIÍf3|>ŸŒ¥T*!ŸÏ£T*ÉœÒcByçœñÝôvR)a¢ žñ:ã ÏçƒßïÇüü¼ÈéÚÚš$Ž !€ëÇ`tz¸—æ™ØÃx¦óLâC剉f³‰«W¯â»ßý.šÍ&^|ñE¬­­azz###p¹\XYY‘ òþþ~„Ãa,//ãÌ™3ؼy3®]»&õXZ­‰–——eþ²Ù,ü~¿Ð8Žqçg?ûVVV`2™ …Ëå~%^ëµ_§ÖS@®Ó¦  ›n¡­¾¼ "ª´%”ßÓÖ{M×Ñ—›¶¨jz…€ëk/­Ž¡š¾Ep@ !Ǫ›¶Fkž:bù}ò¿ù =Ö`0(6ò•'''$à’œf ʵ²AK(=¤ i«²¶è?°‘QLÿ­­ñêñkë¼^ÚsÂÏiÊ›VTùc<ßGê•þ.ëd³Ù×#×G¯?ÇMy2›ÍX]]E /å“óòûšÆõ§<‘zÁ»ÚêJ !S¨ê¬P¥$éy$×VvƶlÙ"t«={ö`bbÛ¶mƒÃáÀØØ~øÃâÒ¥KÃÖ­[‘N§‘H$P©TP(¤ÿn·N§ËËËX]]E,ƒÝnG<G.—ŽÍfC&“éR´)C\®%Á •,ΟŽeášio•¦4jZ'•B½&ü·Î–§³RÙl‚Š[·nE»ÝÆùóçE‘á;ô÷ù~íãÏ4uK+”Ý'*¤²ÑðB/®–SŽMï%žsFº'ïr¹P*•D¡Ð™õõu¤Ói¸\. ¢Çã]µ,‚Á J¥’xéx~ù|>‹ET«Õ®x2­és”Š-åÔëõJ…sîgR¬(Ï.\€Ýn¢ÅÒÉ„¥=Ý|¿^×p8ŒJ¥‚t: ·ÛL&ƒH$"sOe¥Ùì¤p¦,pͨ4½üòË(‹p8˜››Ãèè(n¹å¤R)¬®®"ŸÏcçÎB±XD<G(Âêê*víÚ…«W¯Š—Äçó ÝÌdêTLgÐ<½!LÁÌs…¿'ÅìÍn=H¯ýº´žr6 *´uRƒJ µ¥ÐHÁÐ<|Má 8ÓJAˆ®Õ¡«><©ü?-£¦ÀÒ U{Dô»´"¢A‚Ãü› +™LbëÖ­ðz½Èçó¨Õj¨T*p»Ýh4ˆÅbBåÑÖUMõ0fó"8×^! ª4XÑ”'­Ø=@ÚZË>hK,ßMÅB§»ÔÊ-À|6çO‰O[¸µ5™4;½¤±1’1†€OË×@ajkàFyÕó¡ã´gÍd2Iª]»Ý.™ˆ¸^ô,pœÌðÄLd—Ž/Ð1Qºñ}ü;—ËáĉÄÒÒ2™ œN'€Ôغu+ž|òIT«U‹E,,,Õâñ¸[oÙ²EÀ\>ŸG8F$ÁÈÈ^yåµ:i‚V²uŸõ9aôŠhÙâzçÖ¨¼ko›¦#j𮽯”‡¾¾>˜Í`æ‹/âÒ¥K6‚þu¿µ¬•ý{ÒŒÆÊ›¦RÑËÅó €¤WÖg„ö¬Ï*ž-ZcbÆyhÿ—J¥¤æ‹Ãá@6›•ÊÛN§Ñh;vì@¥RA>Ÿ‡ÅÒI]KÏ V|¹6Ü?÷\‡µµ5ɦŠéù|.—K”7ÆoQé‡Ã°ÛíH§ÓÛÇÉël€:É…Ýn—ˆ¬„N£Œ.J¹öù|’àƒÉxv:NÜ{ï½Ø»w/&&&àr¹0<< ›Í†¥¥%8 ‰wñz½¸ýöÛ‘Ïç%0ii Ñh¥R >ŸV«±XL<…”ÉV«% a>ŸG4•yûMl=¥¦×ÞˆÖS@®ã¦é F°®­‘À†ÅY[; ü€ú™š;­A€¶ZÓŠª9/IíÑ B[5è&xÖ^}p²¿:–À›}Ö–S#ˆ___—м¤â°x@hE…BÃÃñÖóοõEL0¤yãZÙãX9·ü~»Ý–ËX+FO’ž“i£ !ÿ&ðd_4ˆSSh¨pdhªߥeŠ2Dúƒ¦Ù7MâX X¹®Ú’Îx ‹£e[ÄkZeSÇšÐú™Íf%×è€çJ¥“É$µph¦ÅWモVgL~NÏ_¡P@¡PÀÅ‹Ea£wÃjµbûöí8yò¤Œ'›ÍJ…kÖ‚ÉdÂÕ«WqíÚ5Øív "—ËI5kÈv»Ã«§õ–1ŽŒ3à~5*ÃÚsÈ}¨ã´Ìèj¥P˹QQdã|E£Q¼óïÄÜÜž{î9”ËeüÝßýÝkŒ ¢šªI™ÓrÊ1èlUZÉÒAâü®î·®c¢½4ú|ÒžKwËÄxÆU«UÄãq,..Âd2Éü‹EÙ«¤n1¦ˆÉ–––dÎXïÈd2¡P(ÈçN§€}¿ß/ÁáL±Ëd,dÈâ“Ífn·[maÓSKoSY3ùA @¹\–5¦Ç]J¥’œ?=2šzÉTðõz]êÇÔj5¸\.D"´Ûm aqqÏ<ó ÌæN­(f{»á†ÏçáõzqÇw ™LŠQ! ¡^¯ciiI [¤’16K\ô=T.—»Ø7«ie¿×zíW½õë´ÑrgŒ @aÓb^¾G¬Ö:®æHë‹X§ZåeJ€Fë¥úükz–îÿÖÔ"í1›ÍÂwÖu2´2AÅFSEtz„ô;Èü~ý¢\.wÍÕðð0úûû`• mÝÕÀèÎrŹÐ5¼ùz nù9#ƒß5z„XyXÿN[´IS2ÆÑ=mí'í‚T(½®¤/0P”@Uÿ­ÁÊ„¬6¯)b:†ËårIK* ¬b6›që­·âòåË8þ¼x(X­é¿=Š'NˆÒO¥«V«É¿{÷nÌÏÏ#—Ë!£Ýn˹À¬wT~®\¹‚7»½Q HO©éµ7¢õë¸-v´ŒêØ^¢Ú‚®©Z¼œu†í9ÐW൞‚Zîø>M‡â¡Êþòo Tnzi2ü¼æ&XÒ–pÝZât‹Ïêê*fff000 —©Ëå‚Ãáî½ÙlÆÂ‚ä¾'¨Õt Ü5UD+Tü;A3× ”wbôZpÜFêŸÅf6›%(\+ ¯V ù\>›€PÇKHèÀeò¨I%Ñ©9ך¤£YÜŽõ;H]Îù皥ÇÉ9q»ÝR©¹R©½Š¿g :+ Æ1 '-´Z '0eV.>O{¥h5f6-­„Sf N£Õê¤m·Û’øÀåravv‹ƒƒƒÈçóû–·¼—.] 0ƒü}>.]º„v»›o¾?úÑ`2ui‹Å¢ŒS4 7R&9ŸZaÖqSÚ Ê½Õl6%siy:#1Õòò2>Œ¿ú«¿Âðð0.\¸ }ä~¦…ž{™^EŸÏ‡r¹üº~_+öš:Ê~E—)bõ¹§÷Œ>Wùoí±t¹\p»ÝRfttÓÓÓÇ·Û-óiµZqóÍ7ÃçóáöÛoÇáÇEùÉçóÙaÍ zR)_Ü7ív'œEÿ<’ɤ(¬×ë¢hëº<Ìææóù$=q4¸´Z-QbÖ××%˜žÆƆp~ÐM#X4íR¼ù>z§)7TŒ¨œ18ž{saa###ÈårxûÛߎH$‚—^zIâVïtõêUT«Uœ;wNöãÈà–[nÁìì,†ÐÏÜn7 …Z­†††píÚ5©ÕÂ3¬×z­×þ÷Íü?¤×~›ÎT£/OÒ0x±Ñº ¼¶–ˆÃáè *Õw#øæ¥A+²~¿¶8òÙô ð½|>ÿÏïð#GÚHáçiäs´aJ æ IDAT§A÷Ý8ÎF£r¹Œ©©)¼øâ‹Bòù|ƒˆD"Ë4/p>S®/W£¢e¤ 1«‘öÔóbÖÁóì·VÀT @,¿)š3OJ”q-ø^ͧü Í1²`™ö0k£ÑK.­¥øò3œ®³in{½^Ë%sÄõ%à¥"5x¸6<¸—t!N®1÷×…ã!pæ¸(ã<xQ~¨Ø"ÅqëóÃhäÐJ/A*-í¬ÑBE>ŸG<G__*•ŠÌ…ÙlƉ'`6w²V…ÃaX­V¡F}á _À_üÅ_H€z6›•‚™ì+÷"Ç–N§Q©T$øà›F &( ‚  Éd$ [³Ù”‚~&“©«ªy­V´VÌh”à÷Ûí¶Úôz½ðz½h4ø)³ú.`Æ-þŸÏ¾rå n½õV  R©`ll f³ÅbQj¸\.¼õ­oE"‘3Ñf³¡\.# b||=ôvïÞF£¡¡!ŒchhCCCØ¿?þøÿÛ¶m“8HÖXy3›¾C~Ñz­×~Ñ­ç¹NrzxAÓŠÍKY_¢:@™QgõÑÖx£å”ÀŠ—¶VF´U^?ƒÖ4~Î¤Í ŸÙW¨ìÌØèÌ3ãäë|þÀk³ßkE Õj! !‰`qqQú¹¸¸ŸÏ‡ÑÑQ¸Ýn\¾|Yrâk>:ÇHE`Ì‹˜àDZεDŽV_~ŽôXË5c¿­V«D#ÖÜuí]! ØÈDÅy5*Iœ3zp,–N ¾;™Lvñæiý%¸/•J’J{H½àz1€X>ÉÍ&åD{`4 ¤Å”ñ"K\k*Á”7RˆVu_b±Ün7–––$€»Z­vÅIhožž3΃„9Úó¡•Ì`0ˆd2‰@ ÅtQšŠÅ"r¹FFF®¯¯ã]ïzŽ;†K—.¡V«aÇŽ˜™™ÃáÀàà ³·ÛÞü-·Ü‚cÇŽayyÄóÏ?·ÛR©„¾¾>ÙG¬ÊMЮ•­hpœü½×ë•`bîuþÑɸF<7øóçž{DÖ©,QÁÑ ©ÝnÇûßÿ~üþïÿ>¾ò•¯àùçŸïRµ±Cï}­ê˜&zhø®)çDÓV©´håkM%dóæÍ€ÉÉIlß¾]²5ñóŒGÊçóˆÅb2_LñÝßßz½ŽÇãããXXX@(B4E*•’¾¬®®¢T*¡¿¿_öimô$Ð @Ï­Ïçeèdh«V«¢ ‹EôõõIº_*)T¤˜I«T*‰ÂG ½/&S'n‚ÊÆòò2‡œÌÆsœsGye¿½^¯ìŸÏ‡jµŠt:¿ÿû¿ÊØÊÊ ,–N¥öp8,AçSSSÄòò2jµšìë;wbeeÇÇÌÌ Êå2ÆÇÇqÓM7aii gΜÁ¥K—píÚ5‰±¡¥×z­×þ÷­ç¹NÝÎt=ó2Òñ˜Òú@}A¹úT4eGƒam)ש öt 3/pöP]G* ÍfSRQêñ,àj/ö†Àrl¼X<Ø÷¹pÎE½¼¼Œ“'OâìÙ³ò3­”ñ/Z>“ã5λTf¨°püZyp:5H:Þò–YÀM+D.—K@-¼@w%u~^ål’F…‘@ŒVÒˆõ1 ÉZjJ °ȭלÖ]f#£ÒÀ1óùFC¼싎· uWËž1[­óÕj¡PûöíC(’Z/¥RIž¡Až¦ìéZ‹Å"2™Œ¬!´¶ê“NÇàßB¡€F£P($2D€šËå„F“H$0;;‹B¡€@ €={ö  aÛ¶mh·Û’rÔn·cûöíh4x饗d¯?û쳸té’Ìö\RYæ9Ÿs͘$€FÒ£pl,hH°¯ÏÊÏ®/ßKå’ÁÉ6[§B½ÏçƒÏçC$Áøø8ÆÇÇqÛm·ahh@@Ò¹2[ãÓ8—z|ÕjUÞK ·Ùl†Çãå”ÊÚ Ï>Óòϳˆû)‹ÁëõJÆ%*n·~¿‘H;vì êk×®a}}]â1¸fggqåÊQÜûúú$í2åÕãñ ‘H ™LŠw(˘Xô²V¯×%6„rıF£Qd³YÙ·”q¿ß›Í&çÇòò²xg¨@¤R©®"‡ôÔ2ÅÐÐÄup_Qn¬V+"‘ˆdÔj·Ûðù|ðz½²̘Åçÿà?ÀéÓ§qåÊØl6lß¾¥R ç΃ÙÜI±¸¸ˆÉÉIØl6Ü}÷Ýp8XYYÁ¹sç$V£ÑÀÀÀ:„Ï}îsðûý8xð ŠÅ"NŸ>õõuI#žH$^ç¦ýå¶ž¤×~šåóŸÿüçßìNôÚ/¯---áßø†XúÚhqÔž£u›ŸÑ`N{C€ / ¬öh«!36éø^.èj… ˜bØw‚M!ºÓÓZÏgÓú©«0ó÷:ÈšÖMZAÙgîÚµ 'Nœ@£Ñ´§Û¶mC¡P”Ëå®laºŸÚ¢=D¼¸!λ¶   ž;Î1ŽØÈÒ´ºº* Š€€ ÉóAÐ2£Ý ].—€:~Çl6# õÆdꤻm6›R9™Áèäÿ=o|ÍfƒÏçƒÛí T2™D¥Ré¢z˜L&Qþ´è(…´X­Vô÷÷wqÊëõº(–|•¹ÙÙYLNN"›ÍŠ2ÄZ œ n*½|Õj•`\ÝW-_+Ðñ0R™ÓòN9¤Ür\«««ðù|XYYÁŽ;P¯×133ƒh4*Š + g2ìÚµ »wï†ÙlÆÉ“'qòäI4›MI1M…\+ƒTÊõ9ÀsC{Ô8* ”G£·D{C^/¦ÂH÷Ó±cì•jSªÕ*Nž<‰©©)9r‹‹‹°Ì9åÞ¦¼©F<ÿ´RL/•§÷ ÷¸ÅbÛí9áŸjµ*i‘Ýn7R©¬V+8›Í&•ɹgR©Âá0®]»&^ƒÁÁA¼øâ‹xë[ߊjµŠÛn» ÇGµZ^8F³ÙD?¢Ñ(¬V+Êå²g¦bÞ¹s§d¼jµ:)fÎzF¤%6 ñ ð¤¶Ûm„Ãa,,,ˆ—“Ê¡Íf“àtÒ­V«ŒÇb±H60*Av»]ÎfãýÁ¹Ïår0™LƒðûýH§Ó°Z­D(ÂÔÔŽ?›Í†¡¡!9¿Ëå2 …¢Ñ(L&þàþ…BýýýhµZøÉO~‚v»“(`rróóóB¥guuUÒ—Ëe,--áŸøÄ/]á½¾yóæ7$…Õàߌ±õÚonëQ°®Óf6›»`õE tÓ ø‡ŽæD“>A‹Á–RÔÕ…¼4Ň™ÎˆÄT’ \¶X,ÂÝ'Ö €`š— A©6ì?)@wM‚ ~ßbédŽI&“ØÉ|ùóóóÂíöz½hµZB¯ Ej•¦i‹žwr­X°ÀF°/ŸGë.©iÀ†Ò¡äëÑgtøMÅÒ´+~¿Ýn‹õšÙÀø Ò†2™Œ(mŒýˆF£B¡`)¤ÊðùL9Jëh¥RÍÖ)¢G@EY ìP®t zÇðk³Ùd¾©™LìT´J³Ñ’ëp8àñx¤ÐS…rnº)«Œõ ½@—‡ˆûQ[Éù,`#S+.›Ífd2$“Ix½^8N¬­­á§?ý)dü{÷îÅK/½?88“É„¥¥%©;b·Û±wï^\¹rE(-ÜOô¬P3zé%"h¤ŒÐC¢)…çZî(34Lp_ò=\'6zMiÜ ¼ñ\¢‚pøða”ËeñB1ÁãÕ8F#•&mÅ'¥“†íelµZú©ÀPà:²¨ßÎ;‡ñ™Ï|úЇÐh4ðÕ¯~ÓÓÓ˜œœÄÞ½{ñì³ÏâĉØôÿV¹7™L8wîFGG±ÿ~œ8q«««˜››Ã‘#Gp÷Ýw#‹‰g‚>©ˆ;N‹E©ð}ã7Š,qnÝn7Òé´(g¤5Òû @ª~çr9)ü™J¥D‰¸téÖÖÖD)aÐ}¡P@»Ý†ßïON¡PZ;>ŸN§W®\‘ØVŠ'Å”{^+¬ÃtÄG2Šñ9°yófØl6øý~ÔëuÌÏÏKáÃx.\À÷¿ÿ}8NÌÍÍann###’’—óÉdpÇw H*cÒ!YKäÍlo”·¢çéµ7¢õ< ×Y£¥„Üvmu5zÔ Œ/A°OÊi;´ò{:£íeàÏ ]§Á¥µ`A[JùNM2fá6Òk-Ò ÀF€0:Áºö†¦lÐwöíÛ‡©©) à¬T*x4µ‡Üw=×Ú:¯kÐ*Ì~°¿zþ =@¼´9^öÓhu6 £i* åA{g¸¦‹Íì3A³¥´pêøÖ>p¹\ðx<( ˜šš’Ú”+v*}:[–ÝnGµZ•1jŠ“%0•)(Ê­ö^¯WRÒ‹A¹ rªyè›7oF<—w:N”Ëe”ËeÖ:Í«qq¾4-–bíMÔHÎ+­øíöFŠVÎK8–ìF¥R ­V “““BaZ[[ƒÇãA__FFF$Øyvv‘HårY*ÒÓ’M §Ó³R ÔICä>ÖFÊeVÇé1hê?\ΟMo•k½?µGI{æhA§lQIÔžYž]<¯Èþ¢‚hôÚê,k<§¨(òLóx<‡Ã¸é¦›„rõè£Jeú矕JóóóøáˆóçÏãüùó2ÆB¡ ÔI³Ù,™›˜Â7ŸÏã¶ÛnömÛpóÍ7K†'¦¾ÅÈÈÌæšKKK²Ïûûûár¹$Ž(Ëïh˜!xo4ÈçóÈf³p»ÝˆD"¨×ëÈårp8’E‹mXa²î1—Ë…X,†íÛ·#“É N‹GƒŠªÉd’"€‰DëëëXZZÊ‹ºÝn ‹BD/'Sé:\¾|‹EðÛí6<^|ñEœ;wù|^Ÿ…B¡+¶DÓE9wZÑçw)ÇT~x¦P™14Ýý§’Ì´²T†µœð}Œmâàr¹066†|>çž{û·‹÷¿ÿý˜žž†ßïlj'¤ª8)˜J¥$ g §ŒýÃ?üî¼óN,..âìÙ³R_†ñ¤ù|>,--¡Ùlʤ’ÝjµpöìYx<ƒAQf¹ŸR©ªÕªÐ´(Sô.--‰§:Ⱦºº ¿ß/^I¦æåº,..¢\.£^¯Ãív‹’̾1=öÔÔHü3©‘úZ*•àõz%À¿^¯ãÊ•+"ÓGÒýÒsÂñPiþ×ýWäóy<óÌ3X__G<Çúz§Háþýû%äÇ?þ1’É$œN'î¾ûn˜L&?~üºr)­ç­èµ_—ÖS@®ÓFà ld„¡â ©l´€/z‚+z4…K[Ç \´Å·X,x-ˆ¨®¡ ­Œì»¶Pê£'ƒ}¢¥X›Í¦X]uÜŠ¶vÌ,NOOã;ßùÞýîwãâÅ‹(‹b±Õ—:û¢½N: ŸýÐÊFŃàW{$HŒñ,¤Ãhoþ›ã泀΅íñx¤Ïü¬V@¹6Ú[¦c48·šOYcö$¯×+´=ŸœA/¡©0 Ì<Ã2¤žiN¾ÎpÄ>Ø´Z-x<Ôëu”ËeIéIÂH1Ó2B*kP>9®´¶¨sN”KK{ãtÊW‚sƽ˜Íf z Óé´üÌétŠgÇãñ Ýn# Õjaaa©T FCÀ^¥R‰©'žx###(‹ÅbÁåË—»”Æv»¥¥%™*ï:PÙˆ¿Eú$÷¸N÷JåÊ™öxPéàxg¦c£´ÒÀuäB M‚ç˜Þ{TÖ™¤ëÃu£÷‡2ÅóK§öz½Rÿ¥ÕjÁï÷Ãd2áäÉ“°Ùløßù,.."NK½ P($iz)+ôºÝn4 \½zÁ`ív¹\ýýýÈf³°X,H&“8r䈜7Íf@ÉdµZ ™L¥R Ùl6[§Hg¿PH›Í¦(¬ÍfSÎI-•JˆÇã°Z­‡ÃÅ í)äžä¥ÓiØl6ÉÆE–sÊ Ò*I, ¢”P®èñä^®V«D»ÝÆÂ‚xå號ŸG±XD<G¹\Æòò2J¥Ün7ÆÇÇÑh4Ëå066†§Ÿ~GŽËåÀùóç ±°°€ù—ÁÙ³g‰DP«ÕðÞ÷¾&“ §OŸ~ÍÝù›ÐzJM¯½­§€\§´v±ù4Él6Kð%=@w} M¡ •žÏѱäJëÚ |–æO¤ñò'uCWÃe4e‰l^âFË(­«LáIK³¦Çùéš^ÂÏú‹ÅÄŠ®•/“@K4-Öô¼ð¹NF*‹¶kï1u/yÜç•cÒ–y®½ö󽬬®½"|·¶t3ÖDÏo»ÝÞT+.ù|¾KÁ¡F+‘ÚKÃt«ì³ÅÒÉØåóùÄr¯åPƒwÊ3×Ϧžà”|w®c|H1ä¿©HêŠÍ¤ÛQÖ8׺ˆVŒ¹>ì#?å˜ëBå1ŸÏÃf³Iª_-+y@'®Äï÷˺  –¥ì1΂”;Æn1¾#‹¡Z­âìÙ³8sæ 6oÞŒµµ5|êSŸB$Á¿øE?~\ú®él<ôšë=HPGEž^¾D"}ûöáòåË8wîœÈ›Î*E¯Ï.zJ´¹çûµXÅ›rÔn·±iÓ&\ºt N§‡ÂîÝ»Åûép8$ËÙèè¨xÉ¢Ñ(2™ úûûtâ0 …‚ÔxI&“°ÙlxòÉ'F%þ(ŸÏKr¦¢u¹\¢lÄãqYw¹dœŠÇãê•nƧÑëÓ×ׇ­[·baaGè{ú ¥" …dïÔëuø|>ñ"ŽK‘D›Í&AÝÑhTÒê¶Z-„Ãay&‰a×ÖÖÇÅCÙh4$&ÔX‹Å‚R©„`0(éé ±Z­8tèZ­†‡‡1>>ŽÅÅET«UƒA9#B¡öîÝ‹L&ƒh4ŠÓ§Ocvvãããx³›6õZ¯ýª·^Þë´ h+¶æ¤Õ؉̄@,kFÀK°«òÐuV)MQá¥Ï~”j?á…Â4žZaÐñ lšJ¡5­¦œ¦«ÕÀDƒ`£æÅôô4žþy‰ ý§ÒŬ+&S'(”Öb*bŒu ²Åw0¨W¿—^~ž`MSãJ9'‰üA˜#•7®ÿÍyãZèdš6Fj eÉØglPô´Qî8? du8p:Úü~?¼^o—×H+Ö: Z+.—K6¾—2E å…}Ôca%rö’N%ž ÉdêÄ—håKËŽjT¶IÉ"PÖsCÀ®ûd6›ÅËáóùÏç%©Z­byykkkÅøø8¶oß.Š&+Në4·³³³óa³Ù°¼¼ “É„³gÏâÀxðÁÑßß/ëÁ>êx Ê<åŽûSS“ø¯×‹{î¹ßøÆ7ðÁ~~¿_~§kûètÔZžô:éóH¯©ŽC£\iª •Z­ðk©¦ò³:vç[ @<‡Çã‘t¿ì³ÕjÅž={àñxpï½÷âüùóxê©§ðÔSOI!IÆoe2 ɲÄÚ&“ ápµZ áp¸+‰ã¿êõ:âñ8\.—È'kv¬­­auuU¼jÙlÅbQÀ==9 2¯årY”(R?éU[^^F»ÝIà 3Ø™ÍfIó¬éoŒMÉçóR¤pjj ñx¼Ëkëv»Q,Å(¤ç”Æ£l6+þår¹\©TJÖ‰JÊc<6mÚ„x<Žw¾ó¸óÎ;±{÷n´EX¯'3¿G… ØHŸ«½P|‡žc=\+Î?ÃÔ¥:¶deeétZž¡i]ÚƒÀÿsÞÚµ'HËßËÅ:FC_ÈšâÆ>pÞ¹4HÖ@W÷AîKcjb6fsâºñcbH/£'&àÌ™3‡ÃB¹Ñž9KÎK±X”}]«ÕpèÐ!Üpà 8pà€s#¸×ãÔ^&íÝ4z:ÙX­çö|i3ñ|âÙÄ9О}>ètÕ” fÁ¢Œjc„þ·öðêµÒ'îîa*µf³Á`PK(³Z&¨¨èõ!íR^ŸFZ–Q©ÕôP]˜ÀÛçó‰QB‰œššB¡P3€J4=T ÃÀ}Jê’ÝnÇää¤dǺí¶ÛpæÌÉ4g·Û‘Ëå$ 3•z ÖÖÖÍf ‡Å[¦i¬<Ün·P/Eya¬‡Vê8—”i¯×‹t:-1\µZ ñxívCCCh·Û]énõ9i2™‰D`³ÙDfi áú­­­ Š{)ËwxÆ„B!lÞ¼…B[¶lA»ÝÆÅ‹1;;‹-[¶àÎ;ïÄää$\.n¼ñFLNNÂlîdëzûÛߎ»îº ÿñÿS§Na~~…B###¢&“I¼ÙíÿË[ñó>÷õÚwÞ‰;S뽋e IDATg÷Üs®^½Šo|㢀<úè£p:xúé§áñxû÷ïǶmÛðøããK_ú “Éà±ÇÃÇ?þq<öØc€;î¸F<òþüÏÿ;wîü…¯×ޜ֣`]§Mƒ`ãÒåegäOó²×VAMé!áA¥•m%$µBg!6€'¦A­úTh™ÖèN[ª¿£A‹ÑC@Å@[¶5Í‹ÀH9" hµ:ÙWÈafõ\Rô˜h5·Ûp8, Š‚‘æ  éyáóøy*FF/• ]W륭Ì…Ƶåûõç8z®õZ=%ü·önh%“^"Žƒ¼~Æ.PÑÒÔ*'ZÎ4%FSt¨Øé,S¤4‘NE Ì1ñ¹š:¥e[+<úƹÕñ Z‰ÔÞ<ýo*×”9…ˆkÊ¿ù\­¨2³Á$éVäì‡B!ìk­VëŠAÑ M­VC6›Jâ·¿ýmØív$‰×T4׊ûϽÆ>jë<«»¿ð øò—¿Œ#GŽH< ÇK:c»Ý–sð}L§  ëüâÜhåý Þ%­Ò«Å¿éa2™LRïçwûúú$ÛšÞ7¥RIâ%X¿ÆjµJÛ©©)‰Á¡‚à÷û…¢ÉZì9/KKKX_ïdjK$°X,¢Œ³¯”Vçøu€v¡P@¹\–,R”ÃL&#Aø¤†QÁ"ÕUï)‡ÃBi£‡ƒóÅ=M/ =Äô¼•J%˜Lz^ »ÆëõŠãt:»â8t€?×ŸŠ ©l|ŽÛí†Óé”"…™L7Þx#^~ùeœ>}Fø‡ˆ3gÎàСC¸xñ"VWWñGôGؽ{7 ….^¼ˆ^xKKKXXXB³W¯^ÅÌÌ 2™L—!ézoÁ`PþÝl6ñôÓOãþûï—³FFFp×]wá{ßûžüìðáÃX]]ÅG?úÑ®ç}ô£E»ÝÆý×½ñïµ_Zëy@®Ó¦Á!/\]Iš@Ug'âï´…SÓ‚.4ÈÒ›Vt°±þØ lðû:U¦Q16ª¯kk¿V„4õ‡c¡—Á¨lñyÚ’Ë?zLFŽy2™ÄöíÛ±¾¾ŽL&#Ê€6fã<é t#IƒMΞ# L{N¨øY£‚ ¢¶6\±z­Ø¾“ó¨-üôÈPŽ8&£²¨-ZÒV6®1A§Çã%¡ÑبĬ.Ý/ŽI{´¬‘‡ÎÚ$œ·NK^8­N²‡aµZ‘Íf… È9ÔïÖ ´‚Hy× »Vb€ 뽇önјtÖ­V«XÛ³Ù,ìv»}4›;Áܬߠ3 q¬@GAf;-àN§S*v‡B!D£Q Q`ôþÕ1ôieL{Ëå²T³×ò ½|z¬Œ 0z†Œ ŠÞTîølz9õY¡ÏEMäwø{~†±>ŸOÞÉùd¼’ÙlÆâ⢌;NcÓ¦M´¬Âó–Ê!SƒS`ü˜ÓéDµZÅ•+W„ŽV.—Ñßß`0(u‰(w$/3¥q\ 4g¢z6†RØ ˜ð‚J ÎFÇT½‹>Ÿ¯« =•çt:-{ |>ŸT@çþ[__zXôâ˜Ífy6ã ¹×˜è„ ÷d>ŸÇàà ÖÖÖ033ƒ©©)¼ï}ïÃÉ“'a6›±sçNìܹ×®]ÃwÜZ­†Ë—/ãüùó¸|ù²Pâ8¿Úö«Ð~Ùý{zñžxâ üà?Àã? £¤ÕëuìÙ³ç5ßÛ½{7Ž9"r=11!?×­¿¿‘HçÎû¨×~ZÏr6£G€`Ž BÓQtÆ*‚^öuúY|¿§ƒÐµWØa´$èêÿæÏ1hm½çï9mÝ&ØÔÀ^eý>6mYÕòJ¥‚b±ˆR©„@  “†’i9ùL““î@2iФm TµÂÅ5c08/\ `à Àù×ë©­éü¾®¯ÀgѬ-ÿzÞµE^+§ú÷\]ß„fM©áºð]=¤´5›Mx½^X,KzÍÞ’¨Q.M&"‘<,‹Ð^ô:kÏç†`–@ªZ­¢Z­vüÿ“Âçr®ôÞ1ZÕõáœé@º&°Vµ!ò6;;+tµB¡ t+í¹ä:jî>i…¿”ëV«cÇ»ö¢Þ›z¿r_j Ãõ§·€Š8e…ò§=Oô2é}@ï•pî kC%™Ê´Vú´‘óÊwPn¸: ­ô,°Ç5dÌ©ŒOˆF£BÕ«V«Ø¾}»V³nF¹\1›Íb1®T*ðxßE•ã™Ä³‚^2¦ŸfJÞ;vˆ÷euuËËË’ò™™£¨ húm¥R颺R‰ÈårH&“[ÂyaÝR¹Z­ …æçç¥ï¬ B¥Ÿ^ ‹¥SÜ‘1Oœg¦õ¥rÆxLdÒ…;wââÅ‹H¥Røà?ˆ}èCxþùçñž÷¼;vìÀ¾}û000€ .`ffV«Uht¬U³¶¶†ýû÷ãàÁƒŸt={@xàØív„B!|ò“ŸÄc=†?ù“?Ðñ¨ìaÆ …ÐnwRJó³TÞ- ʳzí7£õ< ×qÓqLûH°¥¹Õ:îØàíkO‰Žÿ6^ôN§S A‹V^´¡=dh Æß“ÇNÐÅ?¼ø›¢ëzhï‚Î&¥- F ÁM­VC.—C¹\î¢i¨Þ¾“—¢Ž¹0zØ#ðÔ ˜Ž'àü•ã%©)xŒg0R¸¶šº¥çž}0zm´gI{’4×1(zìä›ów´:²Òt«ÕIå[*•Dõ›ÍfIËÉ>Tø|>)„ÉÂv›QÕò«>÷?ã÷û‘Ïçe>u°¹1»˜^G#=‹k§çŒ2˔“þ.%ÿfðn"‘@6›…ÕjE¡PZ TFtͳÙ,©<÷õõ¡T* Í…± \#‚?Ý‚rîw§Ó){”²Á±R™Ôë©=ž”WzDôœPÉÖ (”!­„èsÅh<áÞå¾áe—)‘H`eeEê~¬r=h=<<Œ[o½§OŸÆ™3gpðàAd2Üwß}xæ™gd¾©tûý~ñl¶ÛmI•\,‘J¥¤*y&“A³ÙÄž={pôèQQ¦©,S¡ä¼ºÝnäóy¡²R&Y÷ƒóÍìR+++RïFÇ 1ƒZ»Ý†Óé”`÷P($Ïâ<ñœãúk£iw HgZxum4H$â±£BJ¥ºÎ6*ßzõ÷÷ãÀR/¤¿¿'NœÀ¦M›à÷ûñÏÿüÏ8xð ¾ùÍo¢ÑhàÕW_ÅÚÚ>,ψÅb˜žžšÓU¯­­Áãñte {³ÛÏëYXXÀââb×ÏŒñtÆöðÃããÿ8 …žzê)<ôÐC¨T*øüç?ÿsõ¥×~³[O¹Ni¼Pu<€úÚê§9çšê Ý¾Zñ6.3MË0›Í¯©¹¡'?«geZQ6rókë<Ç ³Õðò£ÂlXhÙöƒ—óëQ¿ØGå%“É  ¡Ñhˆg£V«uomm >Ÿ$£ Çɾëjæº?Úʯé:Úc ƒÀ9/d•1·ÀŸk0nÌœë¹×ÖiZ&iõd´£×”k­i@ŸVV2™ŒðÙK¥’X]õtöEØV«%#É™§˜ý%ŒEò¸œÇR©ŸÏ'VçL&ƒt:-VeîU#ÕsÂçqÍ´Œë¹g¸v´@ë5ÓI¾Ããñ`eeEäœYĘҕïu8“¯×ë]©ˆ¹¯Ú9¶b±(Ï% † ûÏÏR¨4齤)ß©÷i7Ú#ñzÔ=£·‰ž>R‡hÀà³8Gúü¢üéù׊’öЉ]hµZÈårðûýðù|Šív;8€ééi¤R)œ:u —/_†ÏçC6›ÅØØ˜ÔªÕj'µ¡ÌØl6„B!ŒŒŒàÕW_EµZÅÀÀR©”(V«ƒƒƒ’½Ìï÷Ãlî¬d†!ÒÓé4188ˆ«W¯âÁD Àg?ûYx<T*QôN'‚Á ‚Á ¢Ñ(‡T½w»Ýÿ`±XÄJMz’ÇãÍfC6›E èòZRѵÛíh4ˆÇã2§¬ÑB/ßÙn·Ñßß|>J¥‚‘‘)ŽÉï²Úy$Áèè(|ðAœ9sÑh[¶lÁùóçqíÚ59¿ÇÆÆpêÔ)ô÷÷ã¶ÛnÃ׿þuŒŒŒàäɓعs'b±Ž;&žÃÍ›7cÇŽ˜™™Áòò²È넼™MßÅÿÛÀÀº~V(ðÓŸþôÿøááa îºë.˜Íf<öØcøÄ'>p8 ¢”êÆb–ŒaRfk3~ö-oyËÏ5¶^ûÕj= ÖuÚH)1ò¨µu_[° ŒIeb–^Ø | sM§ pgUd õ{µÃ~¬®®vU§À¨8-ÛÄbKWº¦I©Cäh ¯v LwíÚ…¡¡!Äb1øý~)¢ÇÌB~¿CCCRÅ——±W0´ìŒ“ëì;­Úš^Åçñÿd¼èõúq=øNíñÐÿ7¾_{CÈã6fÒ^$=ïZ¹Ô—(×¼V«¡X,JÜQ9¤§ƒß7fLcA6¦ÕcÐÀ•ˆò©ã‡Ø/ÒnheN&“Èf³] 4÷Τã)Óì/é$ZîtR³t¶!—S©ç˜˜ÂUSǼ^/J¥úúúpðàAyÄ‹GÀK`Ë4×Z©äÞäç<FGG‡_£$“ºE¹ÔtNÊå‡cã~Ò^JεqŽø]“„kÅ9âÊ&ß¡.°¯š>Ås€ëNO+ ~¿_23% <ðÀ¸ÿþûålÌçó8wîJ¥œN'’É$ …‚Ð×*• Ž?.^'*‹Lql±XDÎu| =:¦‚ëk2™$=¬¦²Pi'o}}ùÈGðÿø8zô(Ž9"J5—r¹Œv»-ý›•¹N§ÓB£‘:"LXà÷û%œŠR:¯ÚÈÈ, 6mÚ$ëµZMâZx?°žÇì쬬«ÇãÁÀÀ€(Ê•JEj±0(÷K0ÄÔÔΜ9ƒ@ €«W¯âé§ŸF__>ô¡aaagΜA©TÂÕ«WñíowÞy'æççáõz1<<Œééi”Ëe¡×f2LOO£X,ÂëõÂï÷#Ëï{­“áªÕjavvcccp:8sæÌk>wöìYlÛ¶Mh¦Œ1~–Å%wíÚõÆw¾×~i­ç¹N›¶³iE‚—µV"xÓ:lôˆhp«)'-JüŸi¤;Èê~Ñ’ª-¥´j˦¦±Ñªé4ì# ÇÛl6»j~DêŒ?†¤è _…BápkkkrA(x<‹Eär9ìÞ½ 0™LRäJ+8ÝZ)ÔÁßì­öT¬.µÒ§ç\Es~×Z{·8÷Ú³@`¦•PBæé§•ÏÑÞŒLÉ5 Ô ö>hJ¹áÚó]\_tRl4P§RF*€.¤WÀ›ý­V«˜™™Á‚¼[+|´êrßp^©c&L¦8íÉÐ Xϯö@RÑ3™LTÌq–Ëeø|>´Z-$ LMM fii ‘H¤+³P ˜È®|yfÐ+S¯×‘L&ÅúL0¬÷®î»–a®—‘ÞÄýMùe 1דÏÒñMz¿ò½ Þ§|“jÕl6eÿRލ`Q>©Àjå”Y›Úí6%†&—Ë!ŸÏã‰'ž€Åb/A¡PÀœN'"‘ˆ(±X çÏŸG"‘@«Õ‚×ëÅââ¢d( ƒ¨Õjò‡‰*.\¸ uSÚí6ÆÆÆðÊ+¯ÀjµbrrG‹‰‰ ¬®®âÀÄÄ&&&P.—ñéOxøá‡ñðÃ#—Ëa×®]8~ü8æççÅËÕh4ËåD‘Ûºu«(׿©íÿÖ«ò /Àb±`ëÖ­°Z­xÏ{Þƒ'Ÿ|_þò—%®ivvGŧ?ýiùÞ;ßùNôõõá›ßü&n¹åùù7¿ùM˜L&¼÷½ïýÅ ¨×~%ZO¹Né%èñcÓVtOÀC×Ó¡¦d,Ñ¢l±tÒSòß:x]¿Ÿ*?G C° iVºþ…>× R`\.—X+Ýn·€]>›A¸#½Ùl–ÀC³Ù,ô‰t: ‡Ã‘‘™S^Æä9;NäóyÌÌÌ`ß¾}8qâB¡PWà0ÿhªÙëy`ŒÙ*1Ú‹ çJ{6hù×ëÎwèe9Ø…šóÏßó½ÌRCE‡Ö~“Âßs,ÒJ…ÃK c¨L°vûJ…H+Lœ·p8Œ\.'ÖeÊ5éXz,ôPa"8ÓJ×›)GkÁy7RË8ÚÄõ¶Z­ðx<¢ÈéCäÉÓ‹@9×rãñx$ŽàìÙ³Rc‚15‹E¸ýFC”žTpËårך2Û3iq|6› @étZd¸V«Éþ5›;ü~]Á›û›Ÿ#­KË,½QlºP&÷9°Aä3¸§\.WWü•ý-ÓÚÀÁóÁd2Áï÷# Ãétbqqf³YbЦ§§áóù$c-Êå2nºé&ÌÌÌHªîh4*Éççç%Ýïâ⢜3Tž´1†±…BAh\ŒñÙ½{7J¥Òé4ìv;Âá0 …‚$½H§Óp»Ý¨T*2¾••|ík_ÃÏ~ö3üçþ'<2™Œ]ا@ gÙìì,âñ8²Ù¬Ä@x!Î)cVè¡ünݺ¹\&“ 8uê†àŒŒH­õ‹Ïev¯ÕÕU¬®®"‹!ŸÏÃëõJlË}÷݇»ï¾§NÂsÏ=‡F£! ïºë.˜L&¼ûÝïÆÔÔFFF0??O}êSH&“…B2g|®ÓéD ÀÜÜúûûa·ÛÑßßjµŠÉÉI¤R)|øÃƱcÇþÇ»÷l¿ ÖÿM#}ï­o}+B¡2™ ž|òI|ë[ßÂg>ó¡_ýõ_ÿ5Þò–·à¾ûîÃ_þå_J!ÂX,Ö¥€ƒA<òÈ#øÜç>‡P(„{î¹çÿaïÍc+½«óñç.¾¾û¾Ø¾Ûcg<[Æ“„@Ò@@E¨Z±Šª¢M¡RUU*âD[µªªnÐ ŠÚBQÕ´ K!‰$aš ™ÌdÈ,öÄ_o×¾û¾ú.¿?¬çøÜ—i‹~_Ò4ÌýH£™±ï}ßÏú¾ÏsÎsÎÁ‹/¾ˆ?ù“?Á'>ñ ,,,ü¯mØ^û6$ ·i#˜  ÕU•ùb×Uþ­Aµ¤Iƒ-! ^ZÌèyÐDÁh}äÞ`A“£µ˜f´tƒ„Š@˜$‡‘£¥Ri (€ô™sÄ1kBf·Û@X¥RÁÎÎæææä…¯e>À~èõëבJ¥D6À2½”œèÀX-Ñbu^J°Éù¥5N{hEÖY¶89œ-çÒ„F{;ø5Ù¡äIÇSèõÒUÇ5ØÕQgâ"‘Óž6î!’Nî3^®ç…{‹ó·¶¶&÷ÓD‚׃¾×ßè=äz`4 X,Ù$ÚüŽŽ=àÜqÏq?sμ^ï@L@¯×¯<Ï5Ç­³LõzûÁò´Š›L&ÌÌ̈G‡r*~J_‚Á dp£G®ÛíJ-ÎÍfñcÇàr¹°¾¾.”ǃ‘‘ìîîŠWªT*!•JIÖ6“¤¤®ÙlbccCÆÅ¸$‡Ãßþí߯ÌÌ ¾ð…/`eeFÝnW´‹Å¢¬ *cccžcÎ +–ÓcÑív111­­-É<åt:qüøqIcër¹J¥`6›¥h`±Xĵk×099‰`0(R*Vy§‡Šq5ÜK©TJRLKµz½.™Â¾ÿýï£Õj!•JIjâW_}/¼ð¦§§±´´„»ï¾­V +++xþùçñè£â#ùæççñ[¿õ[’fùmo{&''ñ•¯|E Sáp/^D»ÝF$Á¥K—þÛwîÿF{­ÈuÍ»îº _þò—ñÅ/~år^¯‹‹‹xä‘GðÑ~T>wìØ1<óÌ3øô§?|à°Z­xÇ;ÞÏ~ö³BRØ~ÿ÷_øÂðÙÏ~ãããøÌg>#E ‡íç§ ÈmÚ´×`Të§ù¢%9Ñ@–/$cJL Ü©¿g|­Õ´ü i°KK¶1(W뽵̆‘ßÓõŒEù´ŽžBg-1_­åçµhé¦ur꺯^½Š LMM¡Ùl"NË5‚Á d¹¡L†AÁ###©Hu,-Èœ @€Ò,z€Á)œSZ† ¤ `«ÕªIÊ# cA´ÌMpGpI+*c]¨içܳ?Ô–ó{ôZè1ñ~šàj z«øz¸ DÙø=rzöèâÏiE' &)Õ„˜ë¦%XÜÿ&Ú3Âëq Ï«cSÖG IEâÅsZ¯×áñx„dðSB²³³#˜:ŽÄÇÐÎ bZ7çææpùòe˜ÍûÈ¡|ŽPÂåóùP©Tä ó<Ñsèp8Ä»BbÍ=A#É.cX8×|¶èXOνPü.÷ס^¯ !`f#îM®¿@ª–Ÿ8qׯ_G4•X¤@ §Ó‰ÍÍM¸\.¤ÓiIHÑét0==-–ûR©„ÇãâÅ‹Böè-ñù|BŒè‘åù`ì¤GFF …$‡{•½³³³øä'?‰|™L“““XYYA¿%mee÷ÝwŸì]ŽÉétŠ·fww~¿»»»ˆF£èt:¸~ý:ÆÇLJ±¶¶&^ÑÑQ \¾|Yöm&“‘gp¿´Z-É€ÕëdJd…v¾kNï‡ÏçC­V“X&Y˜››Ãîî.ž|òI¼÷½ïÅÿñcuuUbNŽ;†Ó§OãÊ•+…Bðx<ø•_ù¬¬¬àcûΞ=‹?ÿó?G§ÓÁG?úQüÆoü.^¼ˆ¯|å+˜™™Á»ßýn<óÌ3xôÑGqøðaÄãq™ßÛ­=üðÃxøá‡ªÏÞyçxòÉ'ªÏþîïþ®¤ñ¶Ÿß6$ ·i3fN2Z¶u6%0K«.I3«Aÿ­b4&HÒžàÀâH}1·NÿÇ—2Á&-×Zƒ®³öPZA‹2­$À嚀 ɘΕó ѵ&š¹ÎY8ikkKÀ(­ëÌD£5ÛcccH§Ó2wÆ¢]œ'ÎçY×nЖw-‹ÓZxÎçL>n#£½ì“Óé”ÀO·Û=Á„ßãwõþ µžëÄýìyÓJ®ã´lŒsO‚½Òï÷E.¢=˜“Tqß‘¸ðlhÏecÚë¦Ç ÷0ûÃ=͹Ô$Ÿë¥ç˜dˆÒ£f³)¤T§=e?yø{žíÍ£'€=—Ë…@ 0ÐßB¡€n·+Êf³¡\.K÷ööpíÚ5‹E”J%”Ëå3@O^,C§Ó^žk®7÷7Ÿ$ZÚǽĽJo&Ä$_$šZÖFpÌó+Y§&“ü»ßï#£Óé  "‘H X,"¢\.Ãét""‹Œ­Óé`llL@4ÉE©T’g¸- Êå2ü~?nÞ¼)ý£•ww½^Oâ5è-d¥p·ÛóçÏ‹Åív£P( Nã±ÇÃsÏ=‡çž{ÛÛÛðûýðêÔ)$ ˜Íf”Ëeyv4 $“IŒ‰!Åår!‰ ^¯ÃårajjJ‚ÎIø˜nrr­VKÐééÕDäðáìŸÏ籸¸($Íf³É^êv÷3Zñ½DÒÌ☋ÛÛÛëq×]w¡ßïã=ïyæææP«Õ0;;‹'žxËË˸té¾ûÝïâãÿ8æææðµ¯} ög†ééi|üãÇÅ‹±ººŠ`0“É„^x‹‹‹øä'?‰7n`bb‹¸óÎ;‘Ëåðæ7¿_øÂþ‡·îkßþ·= Ã6lÿ/mH@nã¦kdh ¦É€ÖqkÐÈïÐúh”Jñÿ:C6­oÿ¯¬Ó:Ó4ïa±XÄRI€@@2,‹ÎhDðÕétÄãCy ›Ž3Ðyô5ˆ·X,(•J0™LØÝÝm´ÉdyǪI |‘ëø‚Tà Ž ÕjIŸyZ͹~:Æ€—óÇ9Õ~¹'x-½nÖŽsÆõÕÞ1‚xSÄ=¥É%ïAip iÒd‚D€÷a삎…á|ir£÷ –>qÞ¸ü7A.«¤“h×ܳÄÊû´çPÿ­‰ ÏçF§ÁæuIôOÄ¿5qÖ{œ FFFD†Ä}  …`·ÛQ.—‘Íf%51‰:É-Ë<—HMÅB IDAT\»F£!¤Ÿ´d±T*! Âjµ (ï÷÷õûv»]b>¸—:Ž…{]ˆó|;NT*•Ÿžã`ø’MžYMz8/üžNüÀÌPår©TJ¤k¹\N<-ététårãããÅÎÎìv; …†m xê©§¤®G6›ÅÈÈvvvà÷û‰DH$„L‘İàÑ£G‘Ífe¯ÚíväóyɘÏça±X066XZZÂââ"€Äbt»]¬¬¬ÀëõâÚµk8|ø°Ä_Ð3ÂýS.—EâIÂét:%[«—Ûív)8Hoj>Ÿ‡Ãá ^4˜Ôëuø|>D£Q$ ,//£ÕjáMoz’É$b±˜HÐ*• r¹œx©IÐC¡666`µZåZ7oÞ„ßïÇÚÚnܸ@ €Ï|æ3¸ë®»P*•°²²‚;ï¼F™LïxÇ;`·Û±±±oûÛøæ7¿‰Ã‡ãŸø¬V+¾öµ¯á{ßûÚí6&''ñƒü—.]’ÚBôG§Ó‰üǼõ‹v؆mØnÙ†ä6mtu³@ðgP|4ìjY•d¬ 38ñšÚJ VJÖ_>4k‰_BÚbª-ÖÀØãut= j6ZÒµç†ÀG{†| Êø{>7£Ñh V«É¸ à&&&$¥f$]¿^ Þ‹ÀÛn·|ÓJNo ­ä¼Ž–%qþIêšÍ¦È±¸8×:`—¿×ñ!z „:22"’+‚n‚>®.å7ü[§EÖñôÔéki×–ëÄ{òš–šü°:¦G¯/ÁŸÖ¾óÚÂ9å:“ôñ,h™$狟3ÆHéä:iï_(`·Ûq÷Ýw‹¥¾^¯K¬ ‹V«U©îÞívQ.— …°·wPçÀ€W‘ž´z½§Ó‰³gÏâÒ¥KâIáú8NyöhÃçG¯1=@:Ó%_š@’`èõÑEM.øìâèsl2™ÐÇãq˜ÍItÐLOF·ÛÅüü©Å²³³#1(4t0½.+Õj¹\.— “““(—ËâA bÜÉ´ûÄX’Z­¿ß/â&“I$M|ÞÒÐÁûûõ"‘N:…½½=¬¬¬ˆ'†2N]G'Êz¸\.ñø1IÂõë×át:%æƒÙ¥*•Šò‘àÉ'Ÿ„ÝnG4Å«¯¾Š¯ýë¸÷Þ{áv»Ñh4ðo|Ï=÷œ¤^[[C ÀåË—Q«Õ°°°€/ùËRãÕW_E¡PÀ3Ï<ƒ¹¹9=zúЇL&ñØc‰ÑäõnCoŰ½QڀܦMK£˜R“zc"WÑâš$`¨Q¿Ýh4Ûø‰Ïk 0ïI°¥¥Yü. ¼Ÿ–TЪ®­ÞÚK¡õôü®öP¯ÏùÑ–níEaµçˆ–~öµT*áÆ˜œœ„×ë…ÇãÁîî®ôtt©TJª{3€Òd2Áï÷cccc@æÄ\ùáp™LårY%ËåòñÒ$A{‡øy‚`Î?¯=YZ–¤SÕòú$[Zö¢=;œÆXÇkðsH Á2×U{0ôg8Vö‘¤„ýàšd°ßÜW:h]dž ÊÉ`µœO{•`µ×Hï[Êœhé×1Eü>÷­î¯EÒϘ îy=v^€‘ýáyáÿív;êõ:666dîY½ZËIˆ×ãp8 g³Yx½^™GÃBOV£ÑÀÚÚ"‘úýýÚ$”Õ ¸ïHRuì ý~_2×PŸo^Ç8z xæéÝáÞÑÏB‚o—Ë…ññq™+z ølŠÅbØÞÞÆøø¸xP½^¯J•ß‘Ëå@¼N§ñxÛÛÛ€r¹,7ŸÏ‡r¹,FÊAYž±Y$D@``ý].—Ä ±öM£Ñ5¦çkrrµZMÖX?+¸¯Yœ’µLHˆÊå2`uuý~Ñhív.—KÖžñD\o“J¥·ÛD"›m¿0æúú:Nœ81›^z:uQC"¸^gΜA¡PÀÌÌ FFFP©Tàóùðàƒâ¾ûîƒÏçÃc=†­­-ƒA<üðÃxâ‰'påÊôz=¤R)˜L&É‚U*•055…ÍÍMôû}‘9rDæ1 aii O<ñ677öÙ° Û°ýÏmH@nÓF @PǺÖãk2 –ìhù pàek=hk.FÀH G EPc”QðºŒCà5€A)¿«¥6ü,É_¸Ú£¢½·º -ÖšHiˆî#ÁH©TOÅÈȈTñ¦>šUiíd£E7b~~f³Y2ÄÐkcµZÅúH€æp8$X—@‚óéñx$ˆ–ãá˜5ãKþVq§ÀTk²gœ; ¼¹ßø·‘p‘ÑëÃëqÞ¸ Rµ÷†ãÒ‰pµìÉ("¡bŸ¸tP»î;p I£lFŸ’½ÏµGPÏI-ì”âqŒ$†´âÓb¼žÑûe2™ôq è­¢4‡^ Ž‹^EÆh0OòKožÎXFÀIRm2™pôèQØl6¬­­Éý£W‹Æí±£DK,εŽÿÑ„Uq‚Y&Ààzpýù›Í†h4Š©©)¸\.,//ËYÞÛÛC8Kz.—òÁϸÝn$“IT*D£Qøý~y†ùý~$“It:œ>}Z¼œËR©„‘‘Ií˘1Ž‹•ćTºŸŸŸ‡ÛíF¥R‘8—|>/dscc;;;âÝ5›Í˜žž–g(I¡–ªµÛm©œÎg¥Ãá!¹\NÖß'qáϸ¹O™¡ŠžIzj¸vŒ#c¿Õj•¤6› ÅbQˆ0Ï"+µÿæoþ&‰Ž?ŽÿøÇ¨Õjò¼ì÷ûØØØÀîî.®\¹‚ééix½^Øl6Äb1ñ qŒ ògºJ¥‚z½Ž¹¹9LOOÃçóáÂ… ¸zõ*2™ Î;'±P¯wÓ?õu‡mØ~ÖmH@nÓFàM ¨I€&|YЪI`¢ƒ–Aƒu€AK¤ :¨Ù(—ÒàKƒ_‚PJŽ´|…/= pƒ˜‚ (5@Öñ'A¸ÔÚú¬ÇÊ¿ëõºXʘGži+™ž—ÀxbbÙlÅb¹\NÙl†Çã‘T•—/_F¹\(òGI–hë7ûÏy`|ƒžc6]m[K}ØgM´äM{§8oÚ#¡ªN½¬×@Ï=IÁ¤–’@òZì³è0˜šs¬÷?«A¨î¿&ÊÚë§Ï Þg¼6®ŽíàøµçM{úø}_Dª3ƒ÷6I­Óýþ~õlÞ[“%Z™¯_¿¯×‹H$‚`0ˆl6‹R©$÷×$؈$+\΋–¶ñ¬ÑcQ*•àr¹pôèQ¼úê«h6›B´Þ JŸÚí¶RŽŸ{@{é¸^ZnÅ>èloÚ»¦ -:‹çÑår‰ô§R© Ýn¤›-‹H$ðù|úl6‹ÍÍM‰ýñx<CÛ͆ññqñJ;v W®\ÅrÐårÉs–q?Ú O‚ïõzÇåù±´´4PãÅf³‰, a{{ÍfSÀ2=—<ôÆrn)§ã¼”ËeñЋEñäšL&‰! ±Ûíò|n·Û(‹U.—…œR6::ŠÝÝݯëϰâ¼ÎˆEÏÏçC$ÕjÅÕ«WÑl6Q«ÕJ¥Ðh4pøðaD£Q<ýôÓ8{ö,Ž9‚J¥")s?ðàå—_F6›E"‘@«Õ’XVnïõzˆÅb˜žž–q½óïÄ… páÂI¡ßu?omH@†íµh?¿'fØþÛF€§A _vÚz¨e|‰óóÄñgZ’¤k@ðghÞêúZÚeÔíó»¼6_RÜr<ŸÐlZF¥3 imÅü7Ç£e#üðZår»»»èv»ðûýp¹\r}¦eJf΢ÔÀb±`vv'Nœ@·ÛÅåË—‘H$„DГÓn·Q(,Á­VKR\öû}©ªLy\"‘@­V¡%ZÔiy³géõ4Ž™ÿ×ÁðË­>Ëuçh c8&ã:j‰€ ûH‹®zÌÚs@¢¢?÷”&£zýÙÿ~ÿ ³q€âÃýÂ9!a×Yéøgj®‹öÊñ^šhbª¯Íõ×}ÉçóØÜÜ”z̦Æûùý~ñŒ=|^Èòg´(“hmnn"•JIªj^›ëÀ>F£Qœ8q ’¦Z?8.½·4ùàóAÏ-çˆýÒß5ư±xßøø8Ìf³œ!~‹Å"Y—€}2çõzqüøqøý~ ”&Àï÷÷ƒñ¼Íš-©T õzËËËÈf³2Üon·[2ä9Nx½^x½^Äb1Y#žÉ‡zÅbËËËBFGGÇEúÖh4‡%ÆÌd2¡P(ÀårI\ÓLÓÛêp8P­Ve^´‡¬R©`~~étZ$b”‚9NIEìõze¯1CS[,ƒAñÊÐCEï ×Ûl6K®A¹\¯Ì‘#Gàp8ðøã$¥ˆÅbx÷»ß¹¹9‹E,,,ÀjµâÌ™3p»ÝøÎw¾#)ÐÓé4ŠÅ" …¬Öýt¿$c?þñ±´´„D"çŸ^‚üÏœ9¿ß\.'$Ž„÷õlú¹ð³ü3lÃöZ´!¹M›œ:Û p²”/s-‹Ò/u>£&ŸQK"X@K¸Œ×&ÀÓd‰V5^/.í}ѤÁ¨ïæà¼°„l°pŒzüzÞt1>Z† „i‘£—‚€÷ …B¸ï¾û„@°Øää$&''1==~¿+W®`ccNG®OIsãëLZì#eš°Ôëu‘~p>5±àÜqÎ8O¯z]ŒdD“1^_ÇÞ轡¥yÿì7­°´Â¿±¯Z¦)ûÌÏi`£‰’–é cð«1ö„€N{–ôÞÐAzê´‰¿ãüêóÄyÖqGÜŸz=8vcl çÀ’/~†×h4ØÚÚißèè¨X¾ív»ì«~¿/AÎúÌ·Ûm‰} ’Vû~¿/à“VsÆxó9søða=z½^ObÈ´·‘RMV¹:ˆs¨­÷Fï%ÏŸ~.¹ÝnîNGb­<Âá0Âá°xôzÇb1ñ<’Àq_‹EY¿«W¯âêÕ«r¿J¥‚B¡€P(ŸÏ‹Å"¯˜F™à–)¾µ,ñd¬_âr¹`2™¤ˆÞÝwß ‡Ã!Þ«Õ*ôl6J¥’Ô÷`M‰Ûl6Øív©HÎùdúî~ðƒ8}ú´¼'˜FXǧ1ÉÇÈÈ|><xŒ€CŸã”¦Úív‘]jÏ*ûA£”ÝnÇØØŠÅ"î¸ãär9œ?¹\ñx'OžÄòò²ó§R)¬¬¬ ‘H`ttcccxöÙgñòË/#—ËÉs  aqq¿ôK¿ǃv»d2‰ÕÕUlnnâÈ‘#X]]ÅÅ‹Q«ÕŒc?¯mHB†íµhC ÖmÚ4ˆdÓ²í `#!€ÖãËeŽ• …z}íQÑq­÷× Š/*‚'m%ç Ö(‡=0š8ñåÉÆÏÓ*Çëêþñ¸–u¯Åÿ‹E‹EÄb1„Ãa! {~¿^¯Wä{{{8tèFFFP(póæÍ¸ñ¼³iÏ‚þ=×F{ôÜë< š&œ?Î3çQ×Ûб¼>F LÒ¡c èÍ➣åœ}Ñ^½w¹?5)0Y <µ|…s ÷––=éý¤0û¡A¼öxêuâ9à^Õ{I_[KË8o¼6cY̵÷PÇh/‘>“œo¾™ßaÆ«~¿/ž‡N§#Ö{J©˜!IËù(CÓ÷&(Ö™ªxæéÙÛÛÈÀÛÛÛ¨T*ØØØ@¹\–ïpŸPd”]i’¨çF?_´·‹ šóÃB•Æ|Ö|³Š}(OÎÈȈXá{½vwwåyb·Û¤ƒ.—Kâ˜0¢X,J-Vï&!dHZéI3f¨úá(ÁæÍf§OŸÆ{ßû^Ôëu<õÔSRéž^„n·‹H$"F JÜ(}K§ÓB®(§"‘£Ç„Ec±VVVD†Ôjµ$nK?›™‹žXÆqЛS©T066&EGGGár¹ä£££ðx<¨T*2Wsssèõz¨T*¸çž{ðøã# âÃþ0VVVÍf±½½l6‹cÇŽÁáp`yy'NœÀìì,}ôQ¬­­¡T*ɺ¸\.¸Ýn|øÃÆÉ“'ñüóÏKÃt:jµŠjµŠo|ã¸|ù²x€ôY}=ÛÐc1lo¤6$ ·iÓÒ&-W0‹¡åFÚ2©9޶ÓK‹«–ÊhI‰¶´“lðgÆ G¿)xië™¶6sœü µÌº°¢íúg¾®~à¸Áãææ&œN'Ž= `?}$­ŒKKKR buucccØÞÞF.—HCɾk¢HºÕœgö[ƒrÝg]CEg"I»•ä‡÷Öq\?]WÅdÚw`ßµÅÚ¸ì;­¬Ú{ÅÏ2˜UÿLÇjp_kÂÂ=¡­æFb`ì›–Qé}íýÒ#Ù൸7u†"ö‹àœÿgÿ¸_ôyÓD['@àúk‚EàÇy"¨¤çO“=îgî—J¥‚r¹Œ±±1ØívÄb1$ ÔëõÏ–ÓéD­V“ý£ûB‡ž;cΉÕj…ÏçËj¢c>´×J§Ö^<1‹1%$AúwÛÛÛ0›÷³$Åãq4 rôÒq´|D“ÞžÎ3ÇÈŸ9NÉôÅ m-YÓ^L½75 圱ÿºi„žo³Ù,i…ëÐl6áp8$ø¼Z­8HÑ @ê€pðív/^D¹\†Ûí é:;Sëòš‘H¯¼ò ŠÅâ9¡üˆ^Rv<•Jaoo>ŸµZM,óÜC¥R •J/½ôvvv²Á±æ½¥•JE¼°Ä’ÏÄ.— ‹‹‹‡ÃX__ÏÃØØ˜xR¸þãããØÙÙ°ïa£ôªP(ÀétJeuf°r»ÝÈçó±@G¼p$zL‹ît:ár¹à÷û±°°€äóy¬¯¯cvvV«O?ý4&''¥îÒ³Ï>‹¹¹9œ>}6› —.]B£ÑÀË/¿Œ¥¥%ܼySRýrP÷µ¯} áp.— õzx×»Þ%†±@ ž4z¬þ/x@†mØÞHmH@nÓ¦åF|Yk` Z…5%°e'Mø’&P 06‚uZMµõ’ …À’/c¾(´ÅIWƒf_uà±¶<àèÔ½º°Ÿ–óèþho Aå0?­Ýz~ªœ+• vww199)©&×××Fáv»±½½ÑÑÑÔœºOÚãÂ¹æ˜øÒ'@ÓÞ®ŸQvGàF8ÉA_°Ú¦÷‚–GHr]›Í&¬V+‚Á Nœ8ÉÉIÄãq|ñ‹_Фë*h‹( A½öÆiï÷‰çBKµÔŒóCψ¶Ú³iö–ðw¼?É…âºÈ¥qïñŒp­¸¶$e‹«–>±é}ª?Ï>ÑûÁ@_-cä5÷^__—1Ž’É$†ÄvpÿðyÁ~PfCÙ×1ŸÏ#KÁC³Ù,© ™U‰À]¯'­Ú›QjÉy6®‰ÑCÅóÃ=C© Ó¸6›MT«U >& e:kÆqÅãq$ ÌÎ΢P( ›Í¼^¯¦fÖµ:(#c’Z­&Y«˜Pcoo333ØÛÛÃêêªô€µS6È”¾Ü§ù|^p˜L&ÙÜ_•JEöªËåB<G<Çøø8&''ñøãc}}µZ ?þñ±¸¸ˆGyo{ÛÛpæÌ|õ«_E*•ÂÈÈJ¥Òé4`ggNçÎC±XD§Ó‘ôåf³Y Cl›››r.Ün7fgg1;;‹ï}ï{X]]…Ïç“ý© ¯wz+†íÒ†ä6nFk¢&Ú²ª-¨DÊ¡­òÀ¤(ô’ðEÄ#‘–òhÐÅþ°šPÐò¨­è¼7¿«p±Šc#X2ÊÊ4‰ÐÀ•–ncF"Ž×•_æÁN[[["C9|ø°¸þÖ××Ñl6%hœ/t-—#IÐ^#³ÙŒ;î¸C2i5ç…À¼Ûí q"HÓ…çtzUcŒ =A\g®]³Ù„Ëå’½E2™H$Ðl6±µµ%sl¬ÛÀësq8ÿœwîC‚J-á"¸ìt:âÁ Hæ÷t ;çP{ ´'¬×;¨¾®ã^n%ÉcÀ=Ï}Å=ÃâpÚ CO•öòlñû¼¾Ùl ‰Æ>h«½Œ_0z)aâZiY$=p zn6›ðûýh·Ûðù|Èd2’Ž”÷çÖy%ÈšÍfx½^D£Q™[ìlôzh¢Éõ%¨ÖS’#ΧÎ.EyÓéD(B³ÙÄôô4–——ár¹011ÍÍM‘˜±¶G&“‘˜·Ûl6‹f³)×u:hµZ(‹2§ý~ðz½H&“"S¢tÍáp •JIîL&#D  Š\Š)‰i”—1e2ø|>¤R)9‡µZMÈ¿Çãè‹ w“É„t: Ç`ßräÈÜqÇ0™ök¸<òÈ#RcˆÁø©T ¹\ãããðù|ðù|(•JX\\ÄÍ›7E>V«Õ$®–äiÃN¯·_0 dõcaF¯× «ÕŠL&ƒ‘ŽŽŽbee£££2î“'Oâ+_ùФŒgEyJÂÆÇÇ‘J¥äm6›%Ío(Âüü<666„6 ŒãÞ{ïE±XÄõë×Q­V133#5`z½²Ùìé¶a¶ÿ¹ ÈmÚø"×¾ø+ _æt×5ÿúo‚m; å ôÕ«5`ÑÙ¸pž ]Y›÷â¿i‰ç V2  ù9e#˜åý´÷¬T*buÔ@Q“ö“§Ýn£\.cmmM,j9?úÑÉddÜFIœ~¹iÒ477‡p8 ¿ß/Õ…µwI7];ä¬Óé X, `ÑR:- ÒÞÎ×’ —ä“…Ð4‰Õ’*JÕò5)Ж\-ÒëNK8´ƒ"„$Qºÿ\[ö¹ÓéÈÞã<±iB`ô:i™žŽEÐ<Ê–hYÕÞ’LíA0z8v¹¿ ²9oz]9&-¿ÓŽsÉuåZpÝ} 8ÏÉ•+W0;;‹L&ƒh4 »Ý.Ó°, Éyaì÷;ç1\'’Ênhhà¹4Æ¿$óyCÂĽÌ=¥ãD8—ôäi‡±¶¶&ñ½Þ~æ-ŠT*%éív[¼7$ËË˰Z­8tèVVVÐét$˜Ïžt:-}=þŒb±¯×‹r¹ŒJ¥‚X,ø_.—ñÔSOáÈ‘#’j~~F>Ÿ&“ o~ó›qõêUloocwwN>Ÿù|ÝnWH‚60ãB»BòDrÊñÒàr¹033ƒjµŠË—/£V«!¢\.£X,bccÇÇ/þâ/" â}ï{¾ño V«auuUj£ðܰ(¬ÓéÂGRÈ 4˜¥Ói¼ï}ïƒÉdÂßüÍßàêÕ«èv÷ë0°=N£P(àÂ… x½›öŽÿ¬¯;lÃö³nCr›6 Êé×é[r,‚D‹Å"`J$€/—üÞÞžÈhŽ÷ A§Ö\³ñl±X$û¯KÐe,ÎÆ—-¯£Šö€,Þª¶º&"-æ¨ê˜Dê¼IÀôïkµÆÆbwÀ IDATÆÄ²úÒK/‰t…ã&ã\°ßº ô=÷܃ûï¿ù|ßùÎwD&¢ãm¸FFOçÞb±Haf!€Óò £‚׿ß:î8¨£‰‰–Cé@}öƒÖQ-¥âßPj¹¥2šXp-éñáÔ{•} HÖ2>·Û-ÒÆ´˜ÒÆëi°Ë¹Ô¤¯P(È|Œ‘\Ñ“¥¥¼å~´ô¥N:™ƒ–Uql<š´iB¢É6ïÁ~SFD‹ú‰'°µµ%u#xmJÌ´!‚÷ÐäÏn·‹ÔdrooÛÛÛ"qbÑ<îK}†uáL^_?+´á„Ͻ§¸n­V ccc( 2Nf£J§Ó¨Õj¸qãl6›1³y?Ív"‘:>¬·133§Ó9çÔn·%ž+—ËI*[‡Ã­­-‰‰`erÆ]ƒAŒ£^¯£ÑhHÆ%z¹;î»ï><öØcˆF£ØÙÙ‘ìW[[[rî›ÀlRôB¯¬¬ÀétJÅ\.')¼éª×ë(•JH¥R²g¤Î¬hv»™LFÎb§ÓA*•B6›…ÅbÛí–yâ³’ÒH®Õj…ÓéD©T‚×ëE§³Ÿy^ªF£H$‚S§NᡇÂ¥K—P(°³³ƒZ­6ò¹¹‰¿ÿû¿Ç‘#GpìØ1x<D£Q¤ÓiIiL2É„¤ŽËK/½„`0“ɯ׋¥¥%8,..byyÿöoÿ†l6‹v» —Ë…ññq|ìcÃÂÂ>÷¹Ï!NãþûïÇüÁü´¯àa¶Û¾ ÈmÚdø²çËPË—hEåË¢ßßÏ€âp8hpª­ãZÒD«-AH­V“ß@Y,–9 ïÇïk EP Áû¢¿O -ÿô`4›M‰  WË|8_¼å_´F2€’qZÒ¦ž&9ù|.\,7´þñ…ªc8WÀ>ôûý˜šš‚ÅbÁW¿úUqÿì’€ð;º@Á"Á»öñ…ι1ÆNh™œ–Í„,RnÒét$ÐÀ æ}€ƒZÊÃqè˜í]ÑwZÎ .ø=J1týzh©'ãZ踽¦\/½ßN§Î¯Ï@k‚p’^s_êø%ãb½sνÎðD ÷É ÇmôŠh‰ž®¾M«üÊÊ ¼^/Þüæ7#‘HHð-c´¼MŸ¾b±ˆ±±1är¹g2™¤ò7ÂY q4$ì7×sIO£®æÍ½ÌŒV”©¹ÝnLNN" bddDbH*\Æ||³èÜøø¸ì;éû|>„B!¤ÓiƒA;v ét‹E²*ñyâñx099‰ÍÍMD"‘·qQª™Ífát:%xÛëõ 蟜œ”8‘'Ÿ|‘H½^‡B:y°ŸìkZ©TäÇ}çñxP,Œ“œÑcS©TÄ;CœÏç…˜ŽŽŽ"›ÍÊ3öèÑ£p8’9Ìívc}}N§n·[äzOëgÚÔÔ”™ìv»xkXI>›ÍâK_úNœ8ééi„B!‘Ž]¼xÉdÝnW2sÍÍÍá¯ÿú¯qãÆ ¬®®âÊ•+ˆD"A*•cR³ÙD>ŸÇ©S§033ƒååe;v ‰DóóóØÝÝÅåË—‘L&å¹â÷û‹ÅL&ñ©O}JŠ2þÎïüþáþáÿ÷ûøgÕ†a{#µ!¹M›¶h³¬Ž¡Ð×ÀA „Þt2A‰ _æôŽLé] ºÄø²Òžm-æ}ØW ” Ò4È"˜aœB©T ûE`ÂkrN42™LÄ^¯×…ÄhÁ&wÏ$aì3çžóJGMP511ŸÏ‡B¡€W^y™LV«u@š£åIœ7ŽI{-èEªT*Rÿ¡^¯# ¢\.yc¥káȃ£c'èÕ!YäjyËÞÞü~¿0ëÏk ¶¶ëX ®1†NçñcP,³5éx ¢õÞÕ1ÏܧÚêÍ5Ðñ<Ì„hêš:ö‚`­Ûí€Cî‘Ls^€Y#­àô¶è=©2÷†.øH€ær¹píÚ5‹EIIªi§Ó‘µÖ$ž÷‹F£X__‡ÃáÀØØ2™ŒÌ1‹ƒAø|>¬¯¯ËÞÐE9ú¬ówÌÞÄ=Æš4:ÁÛíF£Ñ@(1¢T*‘1¾E{ËÆÆÆàõz±¾¾Ž\.‹Å‚B¡ ñ,§OŸFµZÅÖÖ–H,ât:‘Ïç…˜›Ífììì T*‰G-Ãçó¡ßßOý:66†X,†R©„@ €~¿jµŠÝÝ]Äãqt:èLÙ=>>“é ¸+ƒ¸ÏÂTÁ, ÉxÊ·H|(±â¼V*Ùß|þt»]øý~X­V¤Ói˜L&y–&“IƒA ʯÕjBæÆÆÆàr¹Ïç‹Å°»»‹J¥"ŠV«…|>¿ßééiœ<óÌ3¨×ëˆF£ˆD"hµZ’þøÅ_ÄÍ›7qæÌÀÖÖü~?L&“<_Àïr¹dïNLLH,Ì¿ÿû¿cssóÿáü» Ȱ½mH@nÓF€EÖÓë`Vx~†ÖDæu'8%ÑÐ^mmåK̸hEÓÁ’ÜÚ²MЯåH|Éjýý­¯@´÷ôtpðºÀA†0ÞG3J}ør§å‘Ÿš4caœ58&èÔâÒÀšÙ¤nÞ¼)@.¢^¯Kf³Ù< Ég_4€Õ’,³Ù< ½"¸ÕI8Ú£CùÁ'×MǬôé=Å53Ž•„ž~ß(¡#!á=9oõz]®MRd6›ENÅýÂ=ʱÈÓóA«I&½;ÚS¡ãUC¢É2É É•–…iRÊ1h‹°3÷σ¿IÀ´§û„ëÇŸ³/º` &èšsMI8Þd2 «ÕгgÏb{{N…B^¯FCRÂrÞ(«á:°ö¨Ëå’‚¦ôÑkÁ1±Ð $‰ôÀÐkÊç‰N4 ŸWôX:t¹\Nê_ØívlmmIzh®O<G¹\F(‚ßïGµZE.—£ Úív<÷Üsâ-â~cº^-Ë‹ÅbØÜÜ”˜³ÙŒÉÉI¬®®¢×ëIV¦\.‡X,&µ7Xƒ1 ŒaàÞà^õûýH§Ó²®&“ >ŸOžyP*•dþIø …"‘ …FGGemŒÏ[Þ' ʾ¢Á€Ut›Lû‰˜Y*ÀjµŠ´1•J¡×ÛÏÆõ4›÷3Q9N!ʼnD«««R#¦ÑhàêÕ«XYYÁÉ“'ñþ÷¿øÀð§ú§(•JØÞÞÆÕ«WqýúuuŽ´¬•A飣£H§Óèõzðù|xàðüóÏcjj ›››°Ùl(‹"µZ­¨T*¨ÕjˆÇãˆF£¸yó&âñ8.\¸ ã^ÏöZy@†mØ^‹6$ ·q#àÐús¾t´€ÌËN@g (6ÊøãÏxôçéEÐçÆ(AÁ%€J3¿O‰_bÆl¼?ÇCï û©%_š0i0Ôf0™Lb9åÜ j‰¿Çc ¾Åb묖py<œ8q£££xùå—a6›±°° ²ÓÒò‚8Møoà ý¦ÑKÄŸi •¶ÄS"£c+€ƒ‚q½vÜ'\ý=N}MþžûVÇ}ho›öú°¸$çZËã8.Î3°/_aÖ&^W°jýE ”&x¼—Þ§šØë¸ }FŒóÍkQBÃkôh ©ŽáÒ^ -·Ô™} I☠‡ÃÙÙYìîî"›Í É£L…}-‹¨×ëçÁ¾ƒA!eôÒk¨I=Gì %r<3$š·:‡\¿X,Ç#dÈívK î}“É„P($ϤT*…n·‹|>l6+R)®CµZ…ßïG§Ó‘˜ ŸÏ¯×‹R©„F£!23ZˈÕooO²ŠMOO£P( ÛíŠ76ŸÏ#Èž×$“Ä„rMÇ#Òµx<.àŸÏV³ÙŒl6+‰2™Ì€t-ŸÏÃn·‹¤UÇ8ñ¬èl~,þÚëíG¤£X,JÖ$¢¡ŠàÁà$/úý‡å3ñx‡F8ÆÍ›7ÑívÇñÜsÏá™gžÁƒ>ˆ{ï½<ðÚí6üq¼ûÝïÆ[Þòüê¯þª<[»Ý®dìõzkHÏe6› ^¯.\€ÓéD<ǹsçJ¥dÌf3ÊåòÀÜÒãF …ðË¿üËøÖ·¾…ŸÇ6$5ÃöZ´!¹›®±@Ë©®`N @]7_BÔõk²B@â¡=(š”X­Öï,¯¥IA# Ùlm;¥aŸ`óº—´" ëq3`“Öf£ŒL[—µõ™c$RÓòåª-çô2üÑÂNੵë###ƒ˜ššB0D>ŸÇÜܚͦ‰û©;96§Ó‰jµ*M œµ×H÷“ZT ´‡‰}Ö²&Î%½Ü/$A”üp)/b£¥^)J6Î5½l\3®/?kÜ“ôPŒj’ʱqßh )½ ”ÖqO°Ôó»\k}HT´'‰EM†´×O…ç“ëĹ%y¡gŸ×ëÂþÐbO«ƒîª&¨ôŠðoz9×ÖÖ°¸¸ˆT*%† Ê Yëz~zø3 ™ B\Hút¬çœDJËóØ'> èáÚz<¸\.,,, V« Aw:BŒIˆY—„ œkÇ=ʽ ì{‚§@¼‹E$K$¤Zz¸½½-^¥`08îv»ár¹$»X·ÛE¡Pñ2нZ­ ah4Èd2¨V«ƒžÏç…0h)ç–óÆ{‡B!ììì R© ȳØ/¾HG¿¿_,0›Í ¡$áâ¼±ª×ëx&1Å/ç2Iž¿^¯‡D"“'O" á=ïy®]»&1v‘HSSS(—ËH&“ˆÇã8sæ þõ_ÿ+++€¿ú«¿B:–â’¬áÁ ZzÈX"’Ø~¿õõu@(‚ÝnÇää$ÖÖÖä¹CÊý•ÍfEV–J¥püøñÿ }è¶7RÛ´ÌÌiK*`ü9pð`ÓFàÀ:§Á¡&|‘óÀ–_H h  4¡á}x^Ãd2‰58ÆèXöCKR4ÑâuØ µ$Œs¢ X²?¼–άĹÓ×#À¢ôH×vp:bÝœœœD­Võk×àv»ÑívQ.—±³³ƒf³ ¯× “É$Eݼ^¯d5ã “@Öhý&`ç<@Ð+¥eYz ´gG{N´ôG¯9½1är½¹N·Ú[ ºf´µEŸëH0ª 3²:^…ýÔäUƒx®¥&jÆóAB::::°Ï(éá<I„Ñ£¦ 3?«AšöÞpéÏAìܯú^Æ4×ì£^Cm4 Ìâhñ'¸‹F£E2™D&“A»Ýɉ×Äår!—Ë¡ßï£X,Š4‰dŠD\)Ý}–õ|è¸0ŽÙï÷KÍ ’W«u¿(&3(1a‰ INf`³ÙpäȬ¯¯KºXè3e-3x™L&©eÂ>Ð{L¬=sº:ƒÎN§S¦næúp½†œÓR©„………oïôô´d#¡&¡ L„“Ò¯~¿/ÏÊŽè $a$Iìt:G§ÓA2™”þ1[—ßïG¿ß©÷›É´_ı^¯ËzkãQ$‘¬_?üá1??b±ˆX,†\.‡õõuôû}ìììàsŸûæææpèÐ!‹ED£Q|ó›ßÄ‹/¾ˆS§NImžÃd2)ïÊ=il#Y¤<³^¯ãûßÿ¾Ì©®ÞÎÀ{jhœ`<¶a¶Ÿ® ÈmÚ´$FKZ€ƒJâZ®å”eh"aü_ÈÚjM@¤_üzZ‚¤Ék(×c&/Æ}ñÀB“LÑFåÄb‡333·<“ÿÛmè¶7JÛ¸ñʿѪèÁùâ×äB¢I'°ÓdB{/´† …¿'pb?x­[y3øBa†&-…¡U84Zï®ebtj¹—­z ú:œ7-á8µe™ýcEο®UBpÚn·‹ÅP­V¥ð_æ©T >ŸO2ˆU*‘Ò°‚2ÁÁ¸ÇãЬ¥azí´L 8Ëi0­ çƒÀ\“?L£N¯1¯ÁëÒZl$ŸÀA0¯¨œW~– ‚9‚vxÊ¿¸ÞšTé} =[z^ø‡ÄŽãÔAö?çI{N4I1ÆKé9Ñ‚s3¢3iˆö¾ñ»ô°qÎõyÐN6½¼––L¶Z- ,//cjjJ9Ï­Ë$™”±”cïo$‹úçÆ½?­V+|>Ün·È±¸î&“I2T9N„Ãa©7ÁýDpÎlXFCÒðêX0«ÕŠH$¯×‹@ F’Uí9¤e25ZþGGGQ(Ä[G9“×ë•óÎg*I­îü¾&ëÝnWR w:ÉVÈ:$À›ßãó@{>9ï<û<;|¾íîîÂétÂãñH \ž¡F£z½·Û-²Fž£jµŠv»-i~HüÉ©S§à÷ûáõz¥°a±XÄÛßþv8$“IÙó~¿‘Høú×¿Žµµ5|úÓŸÆÓO?l6+)t­V+¦§§¥V =p$y|Gñ\---ÁëõÊûÅår‰üM{µ!Íétbll ‹‹‹RDòõlúùñ³¾î° ÛϺÝ:mаýÜ7#XáÃZ[µt‡–Jm%æm]&8$Ñ$‡€MKÓ ˆÀ8xj/A-Ô:3_„F¯~ÙðºÀA ÿo§üÿðE®É­eŒ%á [Ë]´UÓØöØCL#I€i2™Ä’ér¹P¯×Ðñ…ÈÀmzNÜn7B¡úý><Ï(àÒ¬Ƀçš@ê}­ûÈ}ʾó^´ò³/Z®ÅÏj½h$Üý~  Ïšîcôžå9â\kÏ…qïpÜz=Ù "y=Zž-‹’dM¼´ˆ‘‘üçþ'Úí6d¹\‰Dét###˜œœÄ‘#G`2™077'øGŽA"‘@µZX+Î9½ZŒiL¥RH§Ósº··‡V«§Ó)ãé¥õûýxÓ›Þ„S§Nazzzà|Û° Ûÿ܆Û´Q¯Ï¿óÚòJ Gª=#:‚×âËHVk¾€´‡@“ Æ4pâw€ƒjçì›&F+*Ç­½Süœq Ƙ ̵%Üèý0JG8&ý$ÈÓ ”VöN§ƒh4 ›Í†l6+Ò‚|j¨=òùÐ^0Ê‚ôuùoîÃD"!`6Hv'¦Šõz½b)¶ÛíâýÐë;::*Þ;öSïýla_GGG‰Dàóù011»ï¾?þ¸È‰²Ù¬Ü‹sÅT²»»»¢ýçx™ŠÄŒ²5í¥±Z­E'™í‹€—Þ¡X,&†]ØFÊ¿(ªT*“TÀìϽüÏW(Âöö¶x0xHòH°FGGQ*•Ðív%€œg¡ÝnÔôaÂVx-½?ªÕ*2™Œ¼;Œµ”è}ÔAzqùÞaæ3—˛͟χ~ðƒø—ùôû}ÌÏÏ£\.ãÙgŸ•[­V<ôÐCxî¹ç°¼¼Œ••x<¬®®¢Ýnã#ùþò/ÿ333xà°¹¹‰ . V«!™LÔ«âžc?èéêt:"ÛÛÛÃôô4fff$Á@<G©T’,^óóóxÇ;ÞX,†Gy¯wz@†íÔ†ä6nøƒzþßhñÖ±´Ì k ¨¯CÀBÀÅ—³öF²£½pj2Áûh‚b”Cql¼I A.5Í|qÒ=šp±éÔ½šh?¯­çG×àØHªÐC‡áСCX__+6-‹&“I$X ìít:ØÚÚðÍÂxÚ“Bk7ƒf¹:vCÇÐçœý§ÄIƒl l„…À¿×Þ--÷Ò’íù0J¯´üK¯¿×$‘?Óc0ö—}1«ó3ä p}µ„O¯/÷“öDpÜ“&iFªׂYßøÞ[ïoÆDiéÏÏ­®Áó­I <#Õš0ÎA{.Y0 !‰ÈçL¦ýúãããBz¹†ü>/Ѓ§ÇÏ>òg­V @@^¯ýþ~bŒd2)²)î z&0 @êm0…,Ic$(Ò$€€•$–¤©Ùl¢Õj¡R©ÀãñaÓ±1¬D’R,OLL Ýn#LžË½½=»$:Åb‘HDâV¸µZMúD)÷ ÷=¨F¥RI<%úLo.å_̰EâÚív%T¥R‘$Ì$ÈB‰|Þ=ÐôžQ:—N§át:qþüyŒã‰'ž@¹\Ƶk×Ä«ÇÑëíW~_\\D·ÛE"‘„/¿ü2òù<666p×]w¡Ýnãå—_Æìì,^xá…¢¨|®p|.—Kö I-ì÷û …pÿý÷cyyYê-µZ-LOO£Z­âÅ_D>ŸÇ‡>ô!<ðÀøÒ—¾„a¶aûéÚ€ÜÆMËj´5–/" ðhíæœd8Œ´Ìi² úš`P~ ³HcØ'-" a`¦¶î²iÉ ûßóÅ­%[ºÆïÈië¼0óþü,ÇOÌùÖÖG‚:J®x­z½ŽíímX,LOOcaaA1iIÔ\8'­VK<&Ô–;NÌNÄt ¬)@СIǪ½S:Þƒ ]{9´å–äR§ÖåZTjšüÜëñiï“^Oí±ãŽ=ŠT*… ɪ¥½$6ý~_¼"áp{{{T8>Mè4éã8µE“{ˆäJíUášñFyŸqÎŒ#Ø&ð#x2Î+½&F ®÷3e#Œó°±î-«¬éÂkè¸&íaÒ{“ëeôJ2@Ÿ¿¿•„JÏèÍ!Ø×gEA}þ´|PŸ]ÞƒÞ¯=ÛÛÛ’™`¹T* ìb©g¦1Ö·Ð^/®3Æñ^­V ­V GE(Âêê*ªÕªL®™Ïç“TºôPýQ(àñx¤O$Y¼2=½,@È=¯¥;|>0.‚À»ÕjÁç󉇢×Û¯¼ÝjµËådõû} à&1Èårr~¸W™=Šg“I}>Ÿ4î}z$jµÚ€‡©ÓéH=îw78ÎωÏçC¹\pÕ‹Ÿçs›Ï! èYH’_' `F­ååed³Y=zÇŽÃÔÔŽ9‚d2LOOcii @‹‹‹8~ü8b±J¥‰Þò–· N#“É #‘HÀétâøñã( ÈçóBìYŸ„Ï\ŸÏ'+J͸þfó~•û÷¿ÿýxë[ߊüàX]]…ÉdÂÑ£Gem†m؆í§oCr›6à ›Ï¿u,-‡À`æmÅÖÙµ´ÄˆàŸ–6§Ó)`Ø@¬uçÚ‚ÇÏèšÚ3¢û Öj 9àX5Yb¿5AÐÞÀž^jäùÂ×àG{^ô-Éaßuð2ÿÍþæóyìííáĉ˜œœ”ÌXår6›MôÝÔÜ3u*% œ_¾Liáä¿ív»§ëLZ\7Î?'É ÷ O@@¦5àÆ9ᵤSï7-ÏÓDN{º´‡‚ÀIcð©žsö™zy~ž–PM¸õ^1î5îiŽDÔápˆ–\ƒ~®7›Þóœ'þœg’„Îf³ Ì¿–h^KË—t…{½vúLp©í×ãÒ-–ëøJéàœƒAd³YÁוJE¾o”_iï*É‚Ïç“Z•JÓÓÓxðÁa±XpéÒ%‘CéjÝì3BÑkÁsäóù055…7n œ‹Å¯×+™¦HÒ™J9cuuu Yç³Z­þ„g™žƒ‰‰ T*»Ûí–˜.‡ÃL&#kBÌ>ñ\ƒAÉÄÅõq¹\¤u:]®Çc2í×Mb _zT(9âqýx»ÝŽH$"éÀIÐI†"‘R©*•Š;(óbIM™v—… «Õ*Ün7¾ýío£Z­JªÛh4ŠÕÕU‰‰cjÞsçΡÓéàCú¤ÿõ_ÿu|êSŸÏ˽÷Þ‹sçÎáÚµkrµ$Ól6KÊ^¯‡{î¹çÎé7×SkÞµ$‚VcîKh4?!‡â÷Ç@¡?þM‰ Áœöf”r^9`“İHöj@®%y>i´þŽŽ"‹‰öž{—çE¯½Þ»$‰ìŸŽ£âÚðwž´VóÚ~+¿G«³öfÒŠË~Ы¥¥•FbÍŸó ê5à:²@¦ßï—"q¬»Áû2΄Þ5ʧøÒuGäGGGñ /àСCBü¸Çù¬©×ë¸~ý:ŠÅ"‡oÛl68Nx½^är9T*é ‰?½!ñx;;;BB¸£££(—˲Gm6›dÄÊçó’=‹à×ápÀápˆ´‡Y²H,)OÓä€Ô'ét:ˆÇãˆD"X]]ï’ßïG©T’Ú%ô3Øš‰FFF055…B¡ ßcú\¦Göx<’&€œ§z½.ñ,ôšpÏósn·µZM¼Ùl– ïLslµZ%×Ný¨½À+[àiï­ap|ñè¼÷¼&¯CÐOO¯E+œ&3ZZ@0hae™?ŸÄƒ€Ï8V’Ž÷ ^ ’£d‰à…­´ޛßa ÐL&ƒíímÉgÏ Ò^¯'‡†ó[.—ÑjµÄú­=!´ê6›Mx<t»ûtpâÄ ƒA‘F/…^7~Ù|8_:ö‚Á±Ú»B°ÍkóZô¶˜Ò*©ÉûÆ€Ö[Éã4qeZMMØWí0z¹\h­æ\rÏÅãq¼óïÄwÞ ¿ß^¯'@pdd^¯‘HDæ‘÷Õ¤À(Õ#¢u›÷×çKÿÑdÖn·‹åZ Zëé… Þ Ž›{TŸ%®c¿ß—y&)£„×áϘœÂf³!‘HH…rÎû£3²ñÙâñx‹ÅF°3n©^¯ 0ž˜˜€ÙlÆÃ?Œ……ƒAD"éO§³_O‚`Üï÷K$J jµ¼^¯Qzz …ööö Q,‘ÏçQ¯×xû|>ŒŒŒ ›ÍŠÅŸ…@)'#àguJ£xþ›Í&²Ù¬üN{¢¸ “É ¤»N$ØÛÛ/J²Î˜—`0N’‹™™ù\½^ÇÎÎz½¦§§1:: ·Ûp8 ¿ßx<.ħP(üÄ3’ä…’&ö™òºp8 ·Û-ò7·Û-‹µDH,¦¦¦$¾ææÍ›øÿøììì`wwO=õ¾ûÝïb}}ÅbQâe~ô£ÁétâË_þ2Êå2VVVH$`2™páÂ8ÌÏÏcqqQŒ^¯¡P&“Iïôô4~ô£Éù¢ž‹Å‚k×®assSÎâöö6–––pæÌ¼ë]ï’çÂë݌υŸÅŸa¶×¢ = ·i#¨Ó€ÙL(¡ h×Öe--°X,"A2êøµD…Öd3cŽÖïSã®=ÚÂN IH0dÌÐþò®­ÖF¹É ‚¶æjë?pRiùcÿp ’£œD[u d î8_½&­V Î~®úZ­†ãÇK“ɤXŒûý¾~z½^𠸧7U£i!¥W$Šæ€¥P(HŸI¬t€.û ·äš¼2•ăÖn’z±˜™L“1=7”0(±X›ĬwAÆõÖ…×ø;îï›ÍfLLLÀjµ hD"dÀãñàÿðqÿý÷£×ëáóŸÿ<¾õ­oaeeEÖ0•J x§¥™Rz}xtü‰Çã‘=ÆLQFÇD°k±Xä\0--I—ŽïФO:-Ôë«Ï3¥•$8ô@òÜÓÁ mV«Éd&“ ù|^²mooÃív',‹Ôn ±û1NK y @"‘êÙì;co˜Š„‹ñLÔ@OëAÐce6劉ÍårhµZR;¤X,JÀx£Ñ€ÏçC.—ƒÝn‡ÏçƒÉd’¤ÑhT@2­†¤¬¥Ü)‹WÁï÷#—ËÁív‹‡ÙçóÉ1ÐÐëÀÀ{’O£¤‘æ.— ÛÛÛèõzR‘ÿN&“(•JˆÅb…BXYYA©TB£ÑO ÷êää$²Ù,r¹Úí6R©b±˜Ü“}m4B8èQòx<’½QXZZÂìì¬îÍÍMüÅ_üî¹çãöö6àío;Ο?xç;߉íím|þóŸÇì쬇óÚZÞÇ}V«Õäù^,åùóÖ·¾ÝnW¯^ÅÙ³g‘ËåD¦V­V‘Íf1>>Ž_|©T NW®\ÓéÄÜÜÜOýþýÿØ;÷9Ïë¼?³;³»s¿ì\öF.ïæEREÒR“²£¦.ÜÆRÇ)P @c m;.ÔEíÄqáÄŽÝVý§iÐMê ZVcVUv¥¨LKŠdQ¢.$—Krï;;;—Ë^g¦,~‡gFŠë6–[ûÉÝ™ï{¿÷ö=Ï9Ï9ç­ƒöV´ò.mmgÀ=néŽÖÞg5ò…Ro!÷ºt*¼å™O¤¼€IòO0<\î-7^ÆàõöÞæå9>Æ@ê­ác3¸'rˆ1aôdÎË;<ˆûkx¯ÔÖÖ–®\¹¢T*¥óçÏk``@¥RÉä ¾€VV^Àxi²###µàLOìΜ9cë`ffF·oß¶ñD΀Vœ1!‡>së‹ÚùHôq€<"Ö÷ ¡*6RЧ!9£Ćhy.ÖÃîî®éôSg4 ‹MQ:6ïÚ'?ùIÍÌÌ(k~~Þ,ÀTÊ–dà`ÅýÄÖ d—~{¹Ÿ'ÍÌ€Ñ?kòåç9ŠF£&9a_}€<û_’Iá7îã=&¤^ Ï›Éd´²²bÆOˆð„ÃaµÛm­­­i{{[ãããÚÜÜÔÆÆ†’ɤÂá°~û·[ êv»U04^:V¥RQµZ•t§âÖÖ–Òé´0æææŒèDÇ{$uȸªÕªˆJ¥¢¡¡!¥R)ÕëuµZ-ÍÍÍ)‰YÂC—H$T*•´¸¸¨d2iY¹ªÕªYÜ1ì°Xk­VKÑhÔÆvccC™LFëëëj·ÛÊçóV ùKYKËËËJ¥RÒ¹sçôúë¯k}}]CCCZ[[S<W­VÓw¾óÛSœáÙlÖÈÛòò²$)«ÛíjrrRKKKÚÛÛ/¤Š°Ýn+•Jõxs0LàÉ‚ÀݼyS333ºçž{ÇU©T´¾¾®ÙÙYÝ}÷ݺté’ÞûÞ÷êÃþ°òù¼VVVôÑ~Ôâ{>ýéOë_þË©ÝÝ];wNW®\±µ¶µµeû“õ;55¥¥¥%óØàyùÑýQózk²³³£—_~Yßþö·õ÷ÿþß·Êç‡Öää¤þðÿÐì;Ù<í©wióšüí-öžxøúý1xBì~ ¼x«&ò† Žöë§÷ºt:5›Mv>x[ºSãÃg­â¥í5ï¼ éwÆ&^š\Ë[ž9ä±è#áòýÆâ콞Ôh¥ý9dŽër/ž¿!"©NNN*™LêöíÛšššR«Õ²ÚÈdA€$U•Ïç%É…Ú®^½ªP(¤ÉÉI«V¼ººju +£ë€tÒ_žbÅX±Þ¸?c ö©Š™äX^B844¤'Nè‘GQ6›ÕsÏ=§ŸÿùŸ·5ƒ NŸ‘¼ GbN<¨z饗Œ\ûŒN¡O}êSúìg?«ééiMNNê·û·%I/^´ªÛxñHìXOH›(z)á!â™ñÔ@Ú@>ØáåW>~„çg~s^BÉ=ñ"áÍbv»Ý)"gŠ·Ö„)œ788h†d2)IÚØØ0Ù‹p8l ©d™¬o =AÙÕjUµZMÉdR‰DBÅbQÁ`P>ø ®\¹¢f³i0Xììì¨P(¨X,öÄ¥D£Q“NE"5 U*µÛm9rD+++vU*ó0z‰™¯Xoxβ´ÅþíeŠcccºyó¦’ɤ677MÖuóæMÛëkkkvND£QƒA“‚ )‘HX}‘7nH’e°Â+ éeN9ψeÁ ÄÚóŸÍçóVGo¡$#ß‘HDõzݾçe`œO³³³šžž¶XŒ_|Q7oÞÔ©S§4??¯Ç\ÙlÖæ*‘HhhhHO<ñ„~ögVð T*e™µb±˜î»ï>E£QݼySkkkJ$Z[[³=ƒ1áСCFL_yåݸqCÊår* úßÿû«R©èÞ{ïU Ð… 4::ªÏþóš™™é;íí­" ¤æ ½í ä]Ú €@ŸŠàÜðböd`ï³¢x p÷q’ìßX}¡+@ª@Æ@"g?v/ß¡Ï ÿ<"ôºô)˜'G~ŒŸ<2ä©/H—AQ@ž oãúfñ4Þºßl6õÄOèÙgŸµŒ6>æ¥Ñh¨^¯[q²mllص‚£budìlÍÎÎZ%á'NèÌ™3Êçó6.>î… Sæp˸ú~±þ3/HpðjõKóB¡Éf†††tèÐ!MOOÛ³¾÷½ïÕüȹê_¿Þ«Å½É ‰D, © kpF¼?¿}û¶¾øÅ/ê _ø‚Å'HÒ_ü‹Ñ‚ûñtð]ï©ÛÚÚê)”à÷)Ro;û’=F¬  Œ¨Ýn›wª?††}Æúö=Ÿ7©Õ‰?) :uê”e"òÈÈø<™Ã"ï3ª¶[²¶æÿ2OlìxÖÖÖtéÒ%ýÚ¯ýšþÛûoZ[[Ó¿þ×ÿZùÈGzêxðG’·'–Ò¤ž4 û9ä r:99iÁâý× ã {C&ô—ÿò_îñ6 ‹Ã€ D£Q‹}˜››S³ÙT½^·scrrÒa6›U>Ÿ·5IÑõë×µ´´dRp8¬H$¢Z­¦V«¥b±hRCÀöàà ‘¾­­-«ÖÍsƒAË^G-$æ /p P"‘ÐÄÄ„&'' U©TT©T¬/œ)ÕjÕ<HšØÿÑÇãq‹…ªÕj’dUыŢ:¤|>oëjccÊ2x6ðæb8*•JF´H–Áþ`Ÿ†Ãaóúîíí)™LZœâçðFlookyyY¡PHãããfxXZZR$ÑOþäOêk_ûš.]º¤ååe}ë[ßÒÖÖ–Êå²IÅÂá°666T,5;;«t:­÷¼ç=j6› ‡Ã:zô¨ÇëÌ™3zöÙgõµ¯}M…BA÷ß¿>ò‘hjjJ÷Þ{¯~é—~I?ñ?aÕè‘ÉOôN7oÔø~ÿy³öþÃÐÊÊŠþÉ?ù'úæ7¿©ßýÝßÕææ¦|ðA=ùä“ö¹×_]?þã?®½½=}å+_ÑüÿQ×®]Ó<`é¹i_øÂôÐCé£ý¨üq}üãׯÿú¯ëŸøÄ[:vííoîoímo‹‹‹:wîœb±˜666¬¨“´¿Qï¿ÿ~]¸pAŸúÔ§´¹¹©Ï~ö³ªT*zñÅ•Ífí³_øÂôÙÏ~VŸþô§õWÿê_Õ³Ï>«Ï|æ3ú;çïèßÿûÿ¦÷~á…tñâE³¢I½¿x^ª M2€ÚÞ[Qy¡v°öcÙßÝݯŒEɂϦò9ú †öÀÞ§èô2úçc üÏIq/°·ûÿO c<2ž,y2ˆÄ òæå >à1¤æÊ›½ü3Æb15 E"Ý}÷Ýêv»*‹FшÓ'ưÙlš%)L§ÓQ©Têü¥c¹äYˆ«À³Óh4ì™ûÁ,óèõk…Øî¹µµe–h_a™kðÈàÔÔ”ÕF9þ¼~õWUsssúÄ'>aàÉ÷˯™P(d}c>âñ¸xà½þúëZ\\´±`,}`k,³ûŸ;wNÅbQ@@ËËË6þÞ#À>HzbÊç#?.ÌcÃØúàu:ô³—f¼Ù÷~OB2è'û”ÇÌd˜±ðÆ €j4U»ÝÖè訊Ţ$)›ÍZ=…ÑÑQ•J%SÈic}:éB¡ ëׯk``@çÎÓíÛ·íÚ¡PH÷Þ{¯vvvô­o}Ë2¦!ùYYYÑáÇuóæMmmmYlŠôù½‡D rù|@Ï?ÿ¼ªÕªyøóC¬„¯²NIÓââ¢w$4èv÷¥wÙlֻݮjµšÆÆÆT.—m½Öh4¬žÉøø¸b±˜y$&&&´½½­¥¥%ݾ}ÛäX¯¼òŠE$Ù™Å:©V«/Ç:tH»»»ºÿþûU,ÕívõꫯªP(è#ùˆÆÇÇÍ#B5{Èìòò²ªÕªNŸ>­[·néå—_ÖóÏ?¯ .¼éû÷­j¼×Ïž=k†¦ïgk6›zõÕWßðlÅbÑ ´íím8qB§OŸÖ7¾ñ IÒßü›ÓŠ7Æb1IÒÜÜœNž<©øÿ¡¾ô¥/IÚO¿<55¥Ÿû¹ŸÓ¿ý·ÿÖ®ùÅ/~QŸùÌgtåÊ‹MÃCDF/À;cÅ\z¹ò;æ‹jòìÖP£Ñèɾ†)‘‰©â9HmŒ¡‹t✠Ï?ÿ¼¢Ñ¨ž{î9ÕëuÍÏÏëÁÔsÏ=gä‘ù$AhH]¾¾¾nR7²áÕj5­¯¯Ûœž:uJ§OŸV³ÙÔW¾ò•ž²©©)ód% ÍÍÍÙ™úN¶ïæ­ø³^÷ÍZ?ùö÷ì{Þó-,,HÚ?}ôQýÜÏýœaI:|ø°|ðA}õ«_5\óØci{{[ûØÇz®ù±}L¿üË¿¬¯}ík䇨H°Þæö{¿÷{úã?þcýæoþæ65õg~ægþÔJûnµÛíêk_ûÚÿµ/€,åô—¤K>ÒDû—-’ Ojø?/\ëXzûµÛÞCÁïHžo;bkð1étÚê_©G290°_$RÞl6-Y^ž^xÁÆáúõë=Þ\¤©ìgæˆðH$¢t:mÄžÄ ;<¬A2†Åb1Û+ÄÃ@Bg’¯#48¸ŸA O ¼‰OI$Êf³¶6)òçæ}í<#€m¼Xž…9 &¡cñýjµªÛ·o«ÓÙOP·OÎÈÆ”ÍÍM­®®êêÕ«úÝßý]ÍÌÌhbbBgΜÑÊÊŠUa÷Æ%äo6ž‹Ú(ô9‘HXÁJ<¾NG<òˆyä­¯¯[ à±±1µÛmÕëu}èCÒßþÛ[öÌïöV«Õô'ò':wîœ$éÆÚÚÚÒ=÷Üó†ÏÞ}÷Ýš™™1Oá•+Wìç¾)›Íê•W^y‹{ÐÞÎv@@ÞÆ¶ººª‡zH_úÒ—411ñ†ß¿ xõBó9F,°bz+ ‰IØü=¼Ë¿lÈ}à®'A’ìeãûɽ½tÇK è#'¾Ï˜6½ —'þwÜS’Iuüu‡@•€žÑëü7þ¥îãVüX¬¯¯ë…^Ðöö¶&''555¥‰‰ K‡J°«v€G½^W±XÔÊÊŠýp 2†ÑhTããã¦é&åè±cÇ4::ªh4ªT*¥l6«h4jó/ÉV?óÞ_ů_ÆŒÔÃÍfÓæ§T*Y4€±'.žü0ñ‰OhssS¿üË¿,i_­!ÉŠcú–ÉdÔív-q^8ÎßÒé´]ë ýp´ ÖÛØ>ñ‰OèìÙ³ú…_ø…7ýý÷ºQ …Ÿy£âªæ%.ɬÚ^ê#©ÀxÓ˜ø’¢ú¯ƒEä­`zî%Ý)ŠæÁy?¨I2°Ä¿½æûc ˜câ­Ñý²4>ã=B¼<ûãúIß÷céåUޒϵ½Ç x¥1ÿŒß¼yS‡V4µÌaè°y,‡Ô˨x©›'bô~G£Qó¢Õj5#D¯¼òŠÂá°Òé´Òøîíí©V«™¥»ßº¬ÍƒuÀóB#^K.1Nß’~Èœúuë×, „ù$cF19tƒV  ÷»>.Péɨ—ñx×ìÿØCxÀ¼×ƒ9ôd‚ë—Ú1V~}ùŒnžàô¯!¼kÞ[ç ë˜ù£oìO¼:ÞC¬ÉŸ#Ä.JÛí¶­*g# $³\,³x…Ãa+8 E>FmŒ±âC ‘ñqN1Ÿrˆc è!ÃýóÍZàx¸ \\2BIwd{ü¼ÙlÚ M2k‰ó†4¶Á`P£££êv»V˜°^¯IK§Ó …BV‡„yÁ+GJYdGH‘O1/ô“3ƒÏâ™$½2ç8÷âQ«Õlm³w!=Œñ}Ä]>|XÝn×br666ìÞÞ WŠ´¶þìåŒÙÛÛ³3o~~^¡PHÑhÔ7´Z-E"E" [[[[[7éd(Ò‘#G´¸¸¨'NèÒ¥KæÂc„g5—Ëé¯ÿõ¿®ùùy•Ëeíììhiié Àý±e2™7A[­–^ýõïú½Ï}îsú¾ _ÿõ_×Ç?þqûùè訤}bÓßH>N§í³ì“þ´ÆårY÷Ýwßÿ×3´?Ÿí€€¼ ­ÑhèñõþÁ?P¡P°Š¼X kµš½|¤·g£êO€oýäÅïõÀ蟛¼Ø¹†—váVçeîƒÅùL?¹á…ç-ü`\Ñoé/ßó$¦_ÂÕoåå~ýÒú¸à:~«¶G€ýì'_&ÆÓ”~‹½—uì½µœk¼Ð{7 % ¥R)MNNö€ÅÑÑQ-..š—b``À· æÈ0.€If‘d\ƒÁ Z­–¥Ú`°Ö Põ5.¼$‚‚kd·Á³€ge ‘ÌÍf³©\.§\.§û±Óù/ÿÅ›ÿß§ &¸Ú“½n·k…ñ¦§§­ptGVØX3>PÛ[¤Y[x]¶¶¶zö‰÷Êx‚á=$ÞhàÇ„yBþȸõŸuè=!ÞKIV"<1|—ó˃õ~ïb8ÖÄÄ„‘¯­­­Yœ눹'¬÷p!9¤/ŒÏ388hëIU·Û5éÝÆÆ†ÍÉÞÞ~ÚæÑÑQ+ŽH 2½AJˆ¯(K2²|ƒ„„uF¶(ïb­3gÃÃÃ&%ëtö³¯qOOÆ×ÖÖloSh±^¯›ì «¾÷PÖj5Åb1[x[0u»]‹M|ø3˓ν½=“Øá‚|âáâ³ÛÛÛŠÇãJ$:qâ„Î;§7nXíÎîp8Ü“ Œ½ˆrÉZâ™è[.—Óöö¶ÖÖÖt×]wÙø’ ’¹¡¡!e³Y‹uãݹ¹¹©\.§©©)mnnêå—_V©TÒðð°þÂ_ø êt:zæ™g‹Åô¿þ×ÿÒÒÒ’¦¦¦Ç555e©ÀXÛÿÍ«ò¹Ï}Îþ|êSŸêùÝñãLJõÒK/½á{/¿ü²NžŸïÉE­¼eüŒ”¿dâbm’¸€g‡8:uJÏ=÷œfgguòäI­¬¬hnnN¥RÉâÓ8§ÖÖÖ µ¸¸¨ÍÍÍ™|Ï.胃ûõ‘®^½j©‘÷öö´ººjD@ù………Ïê;Õ¾¬ÿ×ök¿ökúÜç>§Ï|æ3ú•_ù•7ü> êÃþ°~ÿ÷_ÿâ_ü‹ž4¼O>ù¤þñ?þÇöÙ~ðƒÑïüÎïôàšßùßQ ÐOÿôO¿õtÐÞ¶v@@Þ†6>>®'Ÿ|²ÇŠßívõ¥/}IO=õ”{ì1e³Y ¾­Õ[J}œýd{‹-–Ý~K®—Kñ²åß”~Ïà›ëq/™ÀD‚ŸØË ˜xÿ÷{¼nÝyOü!î­‰žæ ÊöÈ~ŒèG¿Ü ¢âI‰—«ñ‰Ÿïàe`ügО3v¼Ì‹Å¢jµšÎœ9£±±1ÕëuÝ{ï½*—Ë+AD§í=UÒ ÊT¸ÞÙÙQ,S©T²ñe}`a%6áv:w‚‰¹lssÓRµr_dsGµàYú:55¥r¹¬H$¢#GލZ­jccC—.]2 ¸Ÿšš2 ˜¡’8÷ÇÞív-øüìÙ³J$Z__ï‰Íð€±òž®ÃÜû}è÷ ã†äÃTŸ€{ —ñûÖ¯EÈ‹76xL¿'Ò{€¥tõýðR$ï±”d’;¼skkk:uê”ÆÆÆ´¼¼lžj Að‘æÐ/4úNÇÀ7{¦Z­šg„`eŸÆvwwWõzÝ0ø!ÓÄš$‰ž}GlDˆ~Æ…±ñÞ„`0hÁÑÝnW‰D€o04ù²%jqÐWoüˆD"VÍ}}}][[[&_"²töìY5 [¿^"FuèСžÀþÉÉI­¬¬ØBp>^Lþí FÌQ.—S$Ñ7lŽºÝýÚ)¡PHápØ<$xH¯^½ª«W¯ȇd5›M#®µZÍ*×{Ï3_È8{ðÆÆ†òù¼ffftòäIÕëuu:óVú÷ÁÿÈæˆ¥üÑýQ½öÚkú“?ù‹…S£ÑЋ/¾hç°—Q¦R)ŽŽêÒ¥KfPy§Û[E@þ´kþ«õ¯ôÏþÙ?Ó?øAýäOþ¤¾ýío÷üþG~äG$í{Hî»ï>}èCê©o–Ïç{pM:6"“Édô|@Ï=÷œ>÷¹ÏéïþÝ¿«Ó§OßŸí ½s퀀¼ mxxXïÿûßðó/ùËÔûÞ÷>ûÙÛµQ=`÷R!€ €°ï´—ûþ8^àò÷Èø—Z>ë­»y¹'&Ò”¼>`ç³×æ{îŸ[RÆÛ§ÚD&Pà¾_^rƸ!³âùúã8¼¬Ïøxªúà«¢ó]Æ’xO¨(xP.—S¡PP¡P°Àíf³©F£arˆþgõ’¬îÕjU™LÆ"/j@"ò‚'™LJÚ'Ûhô³Ù¬¥ ƒæÝ èàCV%@£Z­Z¬Æ×¿þu•Ëe‹@¢…0ƒÝËÚâœ;wN…BAÒ¾§±R©XŠSt󌃗0y/kݯmÆðï=ý2+@¿t‡P³_¼^ž=ËöõôýK¿ñœà%ÐúŒ[€ü7Ë|7<<¬ÑÑQ{æV«¥§žzJÑhT•JÅ*cãÁb ÄϾ!mµZ5O±>NÇRÝJ²˜ï ‡Ã*‹–cbb¼^‘HÄ(k‡=Ê<"ÜÛÛS½^7ÎÚÚší+ïEö5;ˆÇðµBâñ¸m_‘–xggÇê"܀Ź cžýÙÒl6D¤R)•ËeëËÑ£Guß}÷©ÝnëÚµkºuë–}–ŠèU7ò5Ÿ„ûŽ«ÙlªÝnÛš8tèíÛ ó2‹E#ñxÜ<ŽœÝ»»»ªV«&£k·ÛJ$6œíœ5Ƙ”`0¨»îºK³³³V`.ÞEÎ/ëÊf³:þ¼¶¶¶tøðaݺuËH{­V³õ†!†1ao¿öÚk* T6›ÕË/¿¬wS{ôÑGôØcé±Çëùç$½ç=ïÑýÑéŸþÓª~ô£ ƒú‰Ÿø =üðÃ&=§ýÒ/ý’âñ¸~ó7S?ü°ÆÇÇõéOÚ²j´žv@@ÞÁÖo±—Þ¾Ê!*©‡ xÛ¯íæ¸á¥A*^džX@L°Øb¥÷dY0â¼7…ŸK2©‡tÇ"ì«ëò|\ǧ“ôV^ˆ Š{z€ïcBü¼û€4¬áܾx‰K?@„Ôx¢‡F’Lú€·Ë út€7/v¤^zP¢¼¼iÕjU‡ÒÅ‹-k´WT«ÕìÅ]©Tlî|.ÿN§cÖe4Ö€'ž @€1^&ÀÄ‚¸'$3’ Î8Öß¾Ò9×e½ìíí™×#‘H˜§‰ | 6@À’ ûÚÝÝí‘/¶ÛmÅãqÅb1---YÃjµªn·kcËy´µµeR²ééi% ËÒw×]wiffF¿õ[¿¥÷ïþ^{í5Û?Ì{kppPKKKj·Û:wî\OÖ;ÙÞnÈ“O>ù=_ãÂ… VýÿÖ>ùÉOꓟüä÷|íƒöƒÙÈ;ؾüå/ëË_þò~þvlT,¬X5yᢼ5Õ×c@B@z^>.Dêõ à,{¯€Qð¬tFFFìÅÓéì~þÞ,  ð¢ÿ-éN®z@Zjïé÷:.ð†ð;@½OKê½Ò—×43nÈ}|Ÿ¼çÁ?#sã=OŒ„оñògL=àe>¶··uûömmmm©Ñh˜:™L*ŸÏ÷èݱ"C¾¶¶¶L¢à=4Rƒ¼¬‰õFæd…[gÍf³Œ±z@D°8ïííW Îç󚜜´àgŸi “H$466¦S§NéÒ¥Kð2™Œ¬f2MMMéé§ŸÖÞÞž¦¦¦Ôn·-ËëK-ëÕïžõƒÈ\#±Á+æ×¦ŸSœ³>˜Oͬæ cÁ›%O`½øLrýqV>£^8V&“Q,³€ðf³©h4j2<Ö‹$KûJ`±ŸJ$–ÞK?^b 00`àk4=‹±±1 kqqÑÈo§ÓQ>ŸW­VÓæææž #D«ÕÒáǵ´´d™²hF2æe’l_‘©ÓéØú$ûÀšñÜOå Qk4ÊçóVc$™LZª]»·ö3Ÿœ‡Ô­ØØØÐ™3g´¹¹©Ë—/«P(h{{[ÍfÓREÜU.—S«Õ²8 æwvvÖ ñMLLèüùóºyó¦æççuêÔ)ÍÍÍÙ> …BÊår’dAáxV^ýuó‚ÈÏ»ˆ˜Î_æYY·ÛÕèè¨Å»ø´r¹¬\.§¡¡!-,,¨X,öÄð1gœ§årY±XL¹\N[[[ºÿþûuÏ=÷èñõó?ÿó Êd2J&“ÓíÛ·U­V U*•‹ÅôÔSOiww÷ÏE%ôƒvÐ~Úy—6@²·vv»Ýž*¿þÞ ‚UBáɉ—Vùï{â0 Ékä½U؃s=+` Àç¥+Xk©\×ôò<¼°=ƒtøïzrÅw’ɤÉx %?{‹²ÏÅï-ÑÈ,ÐO÷Çšx÷."‰û€0by'ë—Ç0!,>`Þ“,·ô©Óé(‘H(—ËéСC*—ËzõÕWÕét‰DÌ àûÉ8u:{Y‡B!³6Ò(ö¶±±a^¼Y^ò‚õk´$«€„µÛn· ü€>22bÒˆT6›5É òºV«¥Z­f%<2ù|^ï}ï{µ±±¡'žxÂjlmm)›5ë~(Ò… ôÌ3Ϙõ”µŽÕ ^/w¤ÿžt»ÝË6ý“îQ/óò1"Ì{rˆá=Ëþ`ŸK²j÷þû~?3†Ýn×$@ì$;•JEKKKÀYSxf¸w¥RQ"‘P:V0´,Oô•`bâ=ˆ¢/ÍfS•Jň^>Ÿ·¢…Xljëh·÷Súâ½­T*V&“Q<·êàÔ²@º”H$,í+kBGzZ~G\ÑÚÚšjRêìÙ³æé£ÆÒ1ú7::ªjµj$žbH&&&T©TzöO4ÕÔÔ”y Ož<©ÉÉI•Ëe¥R)MLLèÊ•+–böÂ… zýõ×5::ªññq­¬¬XÚZ<$o M0^ªX,¦Ÿú©ŸÒææ¦žyæmoo+›ÍjeeE­VËYD£Q;ë‹Å¢fâǘ³Ó§O›¤siiÉ ÁàtÞdôÿ¶¶fu?666F•Éd”Íf%Éç/dwjjJ=ôôôÓOë•W^ÑÖÖ–þàþ@ív[_ÿú×õÔSOé?ý§ÿdk.ŸÏ›w…8-R ÷+Þ©öçÁsÐÚ÷ÒÈ»´a‰Tà÷,NÒrÀÁË¿!žHð2|c5üz¾··g "€4ŒëHwR¾z+ÞéÙØû{Ä%õx |M€„ï3}ãß>“‘$ vÄrOÆ`韗Ôx+~§s§Ò8À’uÝ{Œ¼’Õ¡ð€ÒkÇy&2_MMMivvV’L"sãÆ ---illL•JEºë®»4>>®r¹¬ï|ç;Êd2Z[[S ÐÄÄ„²Ù¬2™Œnݺ¥¹¹9‹¡àEMºÍz½nž_³³³£‰‰ ûÁÆ@@ããã6ÏÝÝ]ŒŒÂ;ÃZY__70‹Å477g"¬Ê©TJ±XL‡ÒÕ«W̓”kzzZgΜQ£ÑЕ+WtôèQ ›Ôäå—_ÖÆÆ†ÝŸ}P*•zÖx04°ŒÌ"ཞH²ÎW¬Q®Ëúf¯0~x }Zgö {¶_þÉZñi³Y¿È›<1cOA r¹œb±˜J½¶¶¦ÕÕUË^444¤‰‰ “0–J%[ï…BÁÖA(ÒÍ›7%É,//Ûü¦Ói‹€ì°ŽÈ¼uâÄ ­¬¬‰¼u떒ɤÒááa#º§OŸV±X´@u<¾%™¸B¡êõº¿$n¹Q§Ó1Y΂âñ¸Âá°‘ˆJ¥¢“'OêôéÓZ]]U«ÕR³ÙT$ÑÒÒ’N:¥{ï½W7oÞÔË/¿¬X,fs°»»kɆ††tûömår9ŒŒ¨^¯›Ìj||\?öc?¦Ë—/+ëöíÛ ƒŠÇãšžžÖââ¢àûã?þc}øÃÖ‚ …‚#ï2yAhX/‰DBÏ>û¬žyæmnnZò‡ÁÁA#3dæBF‰g‹5Œ$ŠõðÒK/ihhHétZ§NÒ‚í¤™Ò¾Š}—Éd´´´¤ééi;Ë岆¦¦¦L†ÆùžÏç•N§Õétôû¿ÿûjµZºuë–"‘ˆ>ö±ihhH“““j4úïÿý¿ëâÅ‹šžžÖ7¾ñ K^qûöíïåñãÇuýúõÿ7ñA;hïÞv@@Þ¥îiȇ~ì`%÷Ö>ÈIÀ>ñx¼Gꄇ…;š_€ À÷‘ï# _ÄZx)’Øáj IDAT×ÒZb^dý’Ÿj˱/ÄÅï |ú8Œv»mׄxò@_¹§îD~À,òÞzއÂ{išXÑ©P시ùÀ\é‘l·ÛöÌ­VË^â^CŒçfssS·nÝÒ‚®]»¦ÉÉI›3R•–ËeÓ³cõÝÚÚ걈#õ"ø@ …´¾¾nu^bN…°z2 …tøðaíîîêÖ­[=ž´¥¥%ÅãqóVžxb±¨ÕÕUåóyE"•J%³r?~\±XLÁ`Pºvíšb±˜Ž?®­­-8qB§NÒ׿þuÛGƒƒƒžÌhÿý<òlÞKæ½>Óóå=%Ò>8÷¤œû±nYSÈ“ˆg€Àz©¤—C²‡½”П d¹Q>Ÿ×ÄÄ„Eä^’L¾†<[f,H6˜¸0OÞ<ÙÏårÚÜÜT<·ß…B!“Ù°766 U¯×µ²²bk9X·ÛµÄ!ªÕªÅPP¯Ýn[ T­VÓ‘#G”H$ôÚk¯Ic²‡ð‚Q_"X€9µj8'üq XQÄp8¬'NèØ±c:qâ„Úí¶^zé%-..Úù855eûnvvV±XLkkkæÈçó¶×ðœlnnjllL—/_ÖÎÎŽ®]»¦½½=‹E#˜—.]Òûßÿ~-//k``¿®±1™LFCCCš™™Q6›Õôô´‘ÈÇ{Ì’;@ 777•ÉdìŒ&¡¤ayyÙ2Ÿ·™H$¢“'O9ÜÝÝ5©V±XT>Ÿ×ã?n^6pFe2+œë‹™â5dݱnYox·¼¤uhhHccc=ÒØãÉdRÛÛÛŠÅb6ö¤*ç]çen‰DÂÎâr¹¬ééi‹Ù‘¤B¡ @  [·nijjÊ 5’´¼¼lç ±çŸ^Ï?ÿ¼.\¸ð§¼ßšÆ{ýĉ=2×ïWkµZºqãÆ;òl퇷x@Þ¥ ùüÓ[ëÒlXÞ£à3TIzƒõ0ãeQž(p¸#IBC õû³ð²|@¹Ô[uïG¿JR¨æ{Èxx>§ÁóùŸÃŠMÿH-J(`ŸgñÖzHžú‰ÅK6ÖCOâw›âëNðæˆg–Ôü˘@\ÈHå%8¬€$³ “þòþè t`W$ѵk×4::j`:==ÝSÙ)Rt÷¬çd³¡ŸXMS©”,ª"{ \*•,°OsLV-²€½öÚkW‚äfggG§OŸV8ÖÊÊŠ^}õU=zTNG J§Óššš²à]bƒÊ岎9¢h4ª~ðƒ¦UŸŸŸ×+¯¼Ò¿‚bðò{̯~‡çÄ' ëÃ{4Y»HÙ+|¹žT,3Ò¸¾¾®‘‘MNN*“ÉH’Å­°.}CCCÊårj·ÛZ\\´ tˆ0ý7€Nf3I6&XÁ±`—Ëe[û¡PÈŠH9rÄ<%>FjppPÕjUï}ï{533£X,fë›dŒÄ­P(h~~Þæ$ÜOÍœPócuuUÛÛÛ*‹Q:îñ±¼ñ Ny8~ü¸ööö´¼¼lûb XçP*•,n$›ÍêðáÃVð6 ZÖ¯[·nYþè訢ѨÕyþùçís@S§Yåàà *•Šnܸ¡R©¤©©);vÌRn }ç;ßÑáÇ•Ífuýúu#bå˜s`NœëpssSù|ÞžÙJÞOË£GªV«©R©(“ɘw›Êï蓨Ä{¿›Í¦%”X]]U0Ô_úKI###úêW¿ªééi?^cccúÖ·¾e2Ð#Gލ^¯kqqQúЇT(téÒ%3åóy½Óí­ò€´ƒöV´ò.mÜæ¯ýF_ï¥^®å=’Lû ¸“d†“eÅ÷Á±{)–Ù”~@Å5¼tŠæ=(’z¼€$\K3V8ÿ ^æåƒ|é÷ôÀ~yé ž˜þ˜ˆ„ƒqóãÓïqâÞÈ’Þ Dú¾A&ex¼©d‡XúÅxb­&ÓÏ­[·Lòƒ”¹5 $YöÒ§–J%›æ~zzZ šžžÖòò²É¨/p¤Fdžööö”ÏçMW_.— ¸ùêÊÁ`P¹\N©TÊ‘[­– …‚µk×®Y\ …;Ž®_¿®ûî»Oï{ßûôä“OªÓÙ¯˜ y¢àÞÌÌŒU\&˜ùž{î1 -Õ¼ ÷:w/]”diQY¬‚Î bö1"€/ÖtÇ‹é“xï'ÿ'+R8H-Á½ƒƒƒšŸŸ7ã÷ç:È› …‚^y啞ëRÕòê ãE£Q% -..Ú9 m¼Í:î³ãÅb1Óÿ¯¬¬X¬ L ûMNNêÆêv»šœœT(2¯… GGGmŒú{{{V¡b÷ÐK®Ø“ÞËŹÒéì'o`ŒkllLKKKާiccÃÖç Éh4ªd2©J¥bkxšH$bÙžªÕªZ­–¥$¾çž{z2¥ÕëuÍÏÏ«V«)+kllL“““¶ÎÚí¶y;¼ ©a§Ó±tÇËËË:|ø°Òé´fgg˜a´èv»–9Œx/§ÛØØP,S§ÓQ*•22¸»»«õõu•J%›Œa;;;³z*œËgÎ1dÃxJ†vvv´¾¾®ÙÙYÍÎΪT*)‰èòåËZ^^6òD é¤ÿçÿüŸZ[[S­VÓØØ˜e‡üam¤æ ½퀀¼‹›qÒ—'úVDMlÖ+dxBý^Z¿%——€4Ö]I’|V‰KAà È÷Vc——yøx’âK$Xö…×­¼0p\—@KŠ_íììô¤Ùœy©ýÀ@|¿!/ŒäƒëôK´xùÌèo¿ä…1Âr΋«:€oßçg^R†s``@Ï=÷œÂá°I#¢Ñ¨e²j6›Þ†‡‡-R§Ó±Ú€dH¿b±˜­ ¼)dáær9hNÈq >®b±¨›7o '“Þ¢S§N™‡¦ÝnëæÍ›zðÁmÜ=™R,S¹\¶ M¬O@"Ü¿N¼á ß(@ ˆ_ìöÞ Æ†5ì ÍáÇͣ´»»«……u:ŽŽ*‘H˜€û¡µùå—•Ïçm?°w“ɤõäXÉIy»µµ¥B¡`u2¼—Žçä¯A|ÉÈȈ¢Ñ¨eL ºzõªOx&'' è§R)+h ™Ežè«‹çr9Ke‹ìÀuäW€wˆ¸ÍÉår*—Ë*—Ëúæ7¿©z½nõÌ;Þ‚n·kÏOzéíímU«UKðF-Õíææ¦Ž9¢H$bUȉg …BJ§Ó×àà nܸ¡ÍÍM•J%[£SSS* ÚÜÜÔüü¼”™™ŽŽêüùój4š™™±z€>ýÆ£º½½Ý÷R©T Í IQQÆ‘BxœvvvÌ@€0!ˆðñ‚8w»ûµŽ¼‚GÍ”ݸqCÛÛÛŠF£Z]]ÕÎÎŽJ¥’ÅŽmoo›ù Ãõõu -..~—·íÛÓ< í©wi´xPâ½"’z¬­ÞóÀK‚õ¿t§d ?à2KG@ÃáŠ5 Æõ½l‹ÿûLPþ÷4¬£>ø×¤_¼ û‹ògddÄ,®>›ãÄxzBÀ=8ÇÊé=þóŒ©`æ çœý|pÝþŸ!C4ø˜æ¾ùuøñä8da&ËÁÈ<7)X»Ý®®]»¦B¡ ¹¹9‹7";d­Óé˜Ô©k"‘HhiiI¹\Îæ€Û±±1uS¬¦Ò~µlÖûÈȈ²Ù¬jµšeêYZZR,S4µLBápت9ãå[ZZ2 Ùx¾úÕ¯*™L*•J)ŸÏkppÐêR`‰ÅûáÉ>Ä’ý ±òÞ)ö ¸/±ò–u AÆ[B•j† jN&“ÔÜÜœw*SC 8'Æ )ÙÆÆ†A2Æ­¬¬A` $™‡¤Ýn[ì@*•R«Õ2ƒ)Yñ´á[YY±€òýBxP¬Ôƒƒw áQ 2‹illÌÖ7c¶¹¹ikpggG±XÌ+d³Y«“l if£Ñ°> ÍëAÝæp}}Ýˆèææ¦%=ðR;ö§¯›“Éd”Ëå40°ŸR6•JieeEÝnWÙlV±XÌÈC(ÒÙ³g•ËåÔh4¬žÅä䤯ÇÇ•J¥´´´¤™™•ËeMNNšA…lYù|^¡Ð~‘?¼QT8ÇÃBÚf$OxÇxôNXæ ÉY·ÛÕìì¬Äñj·Û&Yƒ”q{O2ãÆ<òÝP(dk+«ÕjÙ5 zGú122¢ååe“pB<½Qàjo9 5í­hä]Úx¹f¼´†8áó’Þ`9õ5<|ó™«<&´_wîûåÉ‚¯<‹”ûy ¸ç%æÉ†¿¿ó>ÞÅ{,xIùøOJ¸&Ï î¤òå™úã@ M|×+‚góÏÍ=!ŒOüϰöƒPÿ{ž€À¸x Õ9ýÇ2ì3ñ9gZ©TR4U*•êÉr“L&‰D¬8Y4µùÃSÙÀcÇM"3<<¬J¥b¹ÿÓé´âñ¸‰„­'ž“~ûµ‰G±(“““ªV«ŠF£Ö···U.—-ÙwJ¥’#jœ@ÂÒ鴊ŢΜ9£l6«­­-™Wy†zù"ûÓËû<9ôóãç oóÆ÷iƒƒƒ&‰±ïú€ÆÆÆ477gVyïÉCä;@üR1¼-œ€7P׌d¬Õf³i™¦ð år9ˤV©T,5x °ÄBþÄšôõPÂá°N:¥jµª™™³ÒãU@®ÇºÜÚÚ²ôÂd0 ’HH™š†††´²²b©•û÷¢Oª@õwpFàAÖÝwß­ññq­¯¯ëöíÛŠÇã8ýüóÏ+êâÅ‹P6›Õ‚fggÔh4477§£G*›ÍêÙgŸÕì쬚ͦ€—h4ªÃ‡+ÑZYY±ì_ÉdRóóó6f<„ãç–')dR£¦넌WÞ;ÆúT£Ñ°,XœÉËËË–B›ñÁ³Œw†óïĈtë©TJÝnײŠÅb1…Ãamll˜á§V«ÙþšœœT¡PP¹\¶ë´ƒvо·v@@Þ¥ÍÇ_àUðÞ‡>R!ï™ðÀ.©aÅ•î¼&4^ÖÞÒÏ5è|øx@íã<£?!®ã+Ucyì{ždô÷ÍKš|öªdÇ{$$Áð¿ç9úï `ô²H½”¹„LùdÞò¸¤Ÿ¾€¤ï¿¤BÖ?~Lé3ãஓáÿÈŠ¸k![ݪg¼Ç522b Æg˜"k:ÖÞÞžÉR°®g©!S):BNDzE"år9…Ãa-//Û˜Öj5óX0‰| Yýïòò²J¥’…Õææ¦nÞ¼iÚxƒä +óèÇÜש`@ø<™eŸ2g^¶7y¶“ɤVVVtñâE]½zU###μqyˆ¯â“>©½Á™Â9‚|‹¾1ÝnWÅbQÓÓÓFFx€8ñ Pá%LRo1C®ë%akûl9¾¿^åû×ká Ç¿ ¼g‚Ø•~ï }‡Ðyê×é—AÑ·Ã3ãÙé'7žx*ýXaÁeøý€1æ^ã°dÍøµÂ¸ø”«ÈkÀ\p†|L¦$$|ÆZÀ~!C_EºÕjÈÛÞÞ¶Ô†"¼~ý27¾·—Æ1xñ³½½=ù|^ÃÃÃ*—˶f=Ù|’ë~ÿ>æÞ>`‰Ï{2˺ðÆãqåóy…ÃaËØÅÛ U*•zö‚÷"†B!‹I€ÔÒoªØË€ô’ÆÿY·Ì•'ºG"“f‘½ ЬŽG‹uÀó j4ÚÞÞ¶¢›x1X¬?ˆ 1iGµx,÷¤æÌS§²›Éd´»»«jµªt:m¤K¬ééi œ¦hb$ÑÑ£Gµ¹¹©Ã‡kqqQ F2Ž;¦ëׯ«Z­ÚÏFGG•J¥T.—-5p2™T4Õ‰'Ôl6-Oç`o9Þ3Ö5ñ0ccc6þxÐ8?¼üà É-ûÝÝ]+2988h˜9ŒD"ŠÇã¶^IbÀÙÇú(—Ë ‡ÃÓØØ˜eÕCê×h4lž!G·oß¶·ƒvÐÚ÷ÞvÌ»´y’€ô@ÐhÈV>…'×ë'Þ ëå!|®ÿšX/ßÌâXdy ¿' ä@÷R*îãŸÝ±÷{ü÷ýsðsúÍuü˜yAáåÕOrúÇÊ{|Þ*ÒùBxÞþ Jžèxìçkzï”»Xå=ô^'¬ÁÜ !D‘ûô{Ù°ÎûuçÇ‚w,–€V‚Ä©@ Àd,--)“ÉX-d%¥RÉä#¼Ĩvi‰DBÁ`Ðb4¼÷‹5L>×òž*O¤YçH=H{Š\ÊÏ= TROÝ‹Å:bl}š[ùýXCà‡††”J¥L×l6µ±±añÃÃúyó¦öööôì³ÏjmmMÍfS£££j6›=±Z¤Ð=vì˜"‘ˆsï¢ … ý˜G"KkKV3ˆŸiµZ¶Úí¶Å%PTù`{/‰t'Ή¬I»»»æÍ –q O qJJ×ëu-//[ÿùñ'Ò~ ]2z={Öú í_ ‡ÃšŸŸï LÇ[æ3eƒA#л»»F:xnê쬭­©ÛíZR†cÇŽY¡?úMªd¤dÙlÖÖìÈȈæççu÷Ýwëòå˺çž{Ôh4´´´dñ@¹ÏÍÍirrRׯ_·:ív[kkkª×ëF9Ûüüú5O&DŒ(SSS×ÖÖ–Õl6•H$ÌÈåkqÎp–Ëe%“IóšnooëöíÛªÕj=ëÓ{hÒuw:SˆïÞÞž*•ŠT¯×MÖ†”¯ÑhX68¤rÅbQÚ·â ý ´ò.m{Ð0åw’z@>/.²ðy¸ÿ^ÿ 2ÂÏù?–ì~/ €Ý{bøy}%ÀÙëêy zéQ?1¢ÿþ™=¨ `­å¾hÕ¹G=7Ý^ófZ~¬†Œ…úŽ¥¾ #‘Ôã™ñø»I¦ºÝnO<$ÞÒÍw=ñ1+úè?‰ñVtˆƒŸ'úî»—!Áãy’dR ßÏJ¥b@ÍË›úã{Óááa‹ßðÿ]?Ÿô’ |²F}ŒÏw„}á=xx)qžÌÂ=àøq/5‚ü!MŠÅb·Šõx8FFF´¾¾®Z­fk‚{ù„^B¸µµ¥J¥bƒ¼WÓëý™7Ö+^H¤‘^jÉø iuuÕ²îÕj5 ëØ±c–‚O¤‡ym·Ûæ™ ÷‹!&“IËv$É2)Q‹‚ôÌkkkæ©Â#655e„€àzƯ õ%êõºvwwMÞä ™à¨oCM dH¤*fͳžè/ÓÝn×ÒÏÏÏkhhHÕjÕèÙ³g `KûD6™LjvvVù|^§OŸ¶ø«d2©ééiíîîšW‚Ùnïg}* ŠÅbºyó¦e‚Ã+á=4Ô‚a}@¸ò‘HDÃÃÃZ^^V»½Ÿ@€sožOîp.Ìrº´´ÔcD󯤒¬q®Cý¡`p?ý3†¼E±XL'NœPµZµ³#“É(èøñãj4ÚÜÜ4ÏÒ3Ï<£ƒvÐÚ÷ÖÈ»´yÀâ¢?Hi€÷´ù9ð„OÆîî®e%Õ‘#G¬"|»Ý6-<µ]¼±#€dä-^ÏÏ^CºF ÷ðð°Ž?®¹¹9³ÒóÌÄn°Ž©dÕðJŒØôô´Êå²pãaa"ÿñ1eô7™LöX¼»Ýý¸€11[kµšŠÅ¢€Iƒ:Ž¥^žŸŸ7ÁzˆF£f‰—d–|ö5Ÿ…X@ ù ¤Ú§äŰÀœ®¬¬˜Ç‡tÏŒµe8ÃýŇ6£F«ÕÒèè¨Z­–r¹œªÕªUO$:|ø°^}õU‹‹ ÀâsÏ=§‘‘ öçÞôû5 …”ÉdŒ rvv:¥Ói›Lj›±ÁPÃ~%ž%‘H¨ÓéèäÉ“Z]]µ¬T¬CŸä˹ßjµl½³OHÍþçööö”L&Çí¬šÕÀÀ€ŠÅ¢¥RÉÎÃw²õŸõßÏë´ƒöýnä]Üxô{:8€,cÉô–{^ 0ÿ¾×étìz¯‰G7ŽEpè­Í^2ä½Þóâ½ý²2š÷`po‘öÏ@ê¸Ò"å-ù€ïÍðå’ìù%™Å³Ÿx0˽<÷÷ƒäÅãq2û¸ïÅòÄÛ{8üša®!:Üà ¿¦°òœ=ù`\©‹Âg*•ŠFGG5==­b±hE 9ƤßŃ„ü„q"ˆ˜ñ$à¿Ýn«Õj)N›e9ÜÆÆ†y:|¶3R©RŒ²_ |bbÂjmøØ ŠÆµÛm¥ÓiI²‚sœ3“““VsxxX‘HÄ*f§Ói“cIw¤„ÄšÄãqµÛm-,,ØC$c±˜šÍfOñGIz1 , Z^^¶€¬?¾Pj‘´Ûm«áC‚HF£Q¹\6ÙaµZU*•Ò< 'žxB/¾ø¢¥®V«Êf³ÑõëוÉd´¾¾®‰‰ ÍÏÏknnNÍfSãããæ ™™™Q<·::œ×l{£™Â“ùìr###ÚØØP&“Ñèè¨*•ŠFFF¸¡K IDATtôèQ‹E[;œSƒƒƒÊf³¶ö—––´»»«‰‰ ­¯¯+(‘H¨\.ÛxBä8 BívÛ‚Ó‹Å¢%$ .ˆ}ËÜáÙév÷«©ß¼yÓÖH«Õ2‚ýÃØÈA{+Úy—6/ãØzÙ“·nœ:Ž¥LÅì¹'-,¯J¬¸ }°2–´þ>aMæ¼ðæA›—Ê@NlÞ&Ý©¯áe9~¼Ðøl.€ >ï©tÇR ðãÞ~ÌxÑaqçþŒ Í*@?×ñ¸n·Û3N|Ùò5üµ}lÀÛ…—AÖ¸Ÿó^O±æ{EýÀº$“ž°Fñp]¬Â>Ól6F%Iù|^[[[F XSH<¼<„ù±øžßg,ƒxI2}:ßeþ ¶…Œp-æ˜þãåñò/¯w@ÞÇ>bLé óå½!ôƒTĤOÇãV5>ŸÏkuuÕäG#U"þayyÙb?J¥’r¹œr¹œIf¨ËÂóµÛm¥R)“'a…§à\8¶ìbƒƒûµPH™ŠŒq{{Ûj Ђ:dÒ¥R©¤³gÏêµ×^³ë’’™ëkmmÍÖëÈȈ%#˜››³kÓwúµµµey²®±o°¦—J%5›MÅãq³â#Wƒ(y²/I™LÆ‚ùY¯©TJ•JÅÖž»ý¬KCCCV¬“k¯¯¯›á‚>‘n˜BŠÑÉd¬Àߣ>ª••#iápXµZM###Z]]ÕîŢſ´Ûm­®®š7€&ãããZXXÐÀÀ€r¹œ$™‚µÏYP©TlO ÷…Pv:›÷jµjû$ x€ÙûétÚä‚›››ºvíš­µv{¿((µy|v, IâÍ€H„Ãa:tHÁ`P7nÜÐää¤ý8‘mnnª\.+‰Ø¹K ;dŒŸqæ¿“í­ò€´ƒöV´ò.m¸Ä½¤Ãƒ2/ VÁ‰ƒ÷2ø v¾µ4|¬ß^YðÀÝ@>Ÿås>+·æ½E™—`—,À‹€—ŒÏ¬ÔO¶ðŒ@.¼†>xÍ Y'~<³÷Ìøïósôà€øqc~x&,’^ÇóüöÞ5FÒüªïÿVUßê~骾MwÏL÷ôÌÎîì‚×ö’Ø@L ,R)‹"åE"^$B ¤DHÇ’"!d‰ˆDQ,ñGqÄ%ÜbáMdìÍÊïîܧﷺ߫»ëöÑÿÏéSå%XàÍÚžþI£î©~êy~·çy¾ßs¾çOD}¼/}¯¥PxyÞ QbqÜ4›MÕÞ+0Nh¤‹ªó^ê„7€è½CÌ—'O€ÆA݈v»="b¶Y3€ ÞƒHìï #Ön@Î¸× _ÄOx/ǸdŠù÷Ò.úÈzñ]OH¸F¿ß7à:uýúu#UXý»Ý®îß¿oû 9™¯¨—xDßO€9u: þ^šH}¨ZMÁ¸jµªX,¦ÙÙY«×˜ÆšFGRÃâÍÉf³zã7l½Ø÷Ô}!s{¤ÝnkqqQ[[[j6›ZYY±z/ív[óóóV£ƒçN(²ŒZívÛ ÖQÛ„ìZhÖ€qá‘ãþ:::²Ï(`HÁȳ³3% óÖj2Çí—ËåŒ$Pè¯ û‘´ÄápXšžžÖ½{÷´³³cÄÆ{IªÕªUþ…BÚÞÞ6Ï"¼ È ˆ‘šÕÁÁVVVLÊÕn·-ó27Ö{‰çÃúúºž>V¹\V¥R±gN*•2"W¯×U©T èÖëu³ÊOOO+‹©^¯k{{{$cÒ öB$±q/,,˜oÐÕ«WuåÊÅb1“7¸ ‡çÖ¥ä_«Õ2¹kÀº³×0ð@PŸšš² ò^æ™â™133cE<³Ù¬5??¯ óÖ¬¬¬è~àtûöm#Šo¿ý¶îß¿o^ÀõÊÊŠõ“´ÅÄ;±.H÷ ‚ìÕP(¤ùùy{îRÇI¤Ÿ#/Cë÷û–9ëÁƒ#sì 7’Käb½^O¶GÖ±ï*•Š2™ŒŽ-Àôô´’ɤUއTU«U“´‘4àÉ“':99±Z/W¯^5X«ÕR¥RQ¡P°7H"IÞïÆ3úýï²]¶÷¢}ûRöËömX»‰{€x¹/ +¼‡_’ޤ‹X¾ ãáíƒ!Þʤ‚ ¡^ª‰D …Ì‚å­î¼Dè›4*á‚|œœœH•ð’)úŠ%»ß¿¨Ñ¸$¸‚Ã\ÇÔù« ¯A?ù‰u;˜¶Y’½ü†Ã¡½‰¹!uì¸$ /rŠûq-úä½^®q‡‹—‹ùtøþsM?X åÜ^Fà?kÀÜBz½ó4½…z/ ™s!ùA:Q*•F¼]D¬Ó^6†÷dZüÇr‰‰ »¯ñÐñ.ˆF£*—˶/ÖÖÖlŒ333–‚û›ûžØ–|àzðàÁˆ‡£Ûíjwww$Í31Un‚Áó˜¼b߮풄\¶÷¢]g´!ƒò~éìzÉ ð5n Œò‚áÜ’ìå샽×¹DæÝbèÀš—¥·äó9À`æ-”\ÏËcNOO&€uaÞ½g€åãðÆð7¾ 1ô$ €Ô"Ä÷èó¸œ o×ò »r÷Þ'Ÿ„€9àãAbþùÇ ðìLLLX\ÖÔ{à|?™¯³³35 U«Õyݬ?в>œ“=€Tàrï•—_±Ü[>ÈÙ§ÝeÍý\zÂæäY/2„}ô£ÕÞÞžêõºZ­–‚Á Òé´ŠÅ¢‘ ¤T¤B¥¿årY“““šŸŸW¹\V*•R>Ÿ·ó ¬Kçµ)|Ð=çÇÓI`7û©^¯ù`>ñîôz=•J%ÍÏÏk~~^Ož<‘bNMMi~~^ý~ßb1ÇH{¸'-.ÏœR3c_“““#ž¿o½4tzzÚæ9—ËÙž;>>¶eéÜËF= 0“““jµZZ[[S©TÒÊʊņº¹/‹Å¢$Yá<äPH¡Þzë-]¹rE¡PHKKKj6›³rvv¦»wïŽ*°ó¬X„Ãaår9ó"³b-1 ±ŸÉ*Ç=Gb¾œK:O%í½ŽÝn×¼MVÏÄgÏâx$\¬#†! -%¼#ÜOKKKjµZ'rzzjk“Édì¾™››S Ðîî®$™çfyyYÅbÑžÇÄÂd2Åb1Åb1mmmYl,Öòýn—ä²}«´KòŒ6ï=€X|x¸óÂùÀ\Àà‹½—Pp<€Âƒ2>8y`æ­ü<é"5//&bP$¤ràú´&û¸Œ ù×¢/€¾åô‡ëy¹'FÞCä%]­VkD–ã¥[~N¼uÕÇ`pn~÷Ž5žÆz#çb̬D‹;s@_˜^‡G¬äHª”,ÖÇKW[[«Õ2BÔiaaAÕjU“““ZZZÒƒ455e©y!;½^O¹\N‘HD‡‡‡#ñˆvl6›&ÉeO$‰ï0÷["‘P&“±ç72/ïùŠÅbj6›zóÍ7µ¾¾®©©)Ë^†1ÂÇq]¶ËvÙ¾¾vI@žÑH÷j¬O^ 3®ù—4RñÙËt<ÀæÌ ßÇà)4{k?„ å—©p>¤S>°°ëeH>®pî¥ ¸ö l÷©^=iL`!ãEÇù½°ÎXüxX€4À—*s≈t!ñb|^ÎM_8p/]xzø/–é!3â×˃r?žZ­6"Sò„ÌÇRаîC$™×€ù|2/ÍCú„UéàÞ{>¼×È“‰?¿ß³žyÒí½X—Ç ²ŸCž<Ò'ïeó²,ö1¸\Ç“¬ñ¡PH±X̪V´M*\€S,SµZ5bïïG¯m÷I (âw||l÷Ùž’ɤb±˜Y»ÙCÔáh·ÛêvÏ+k“k~~^•JÅbGÄ+A%©X,š4çÊ•+#Öó©©)‹¥ ÖK2™ÔõëוL&µ¿¿¯jµjsF-îyS·Û5I„™¤ù¤&™Lšç‚sø$ Ü/3£6Ù˜ðúy’Ùjµ‹Å,‹SµZµš%Ì×|ã7433£7nèáÇæ=J$6ßétÚb!&&&LÞÔëõôÎ;ïhzzZ·oßV­V3r†Ï€ã8â¥sO ±/^¢èc6xζÛ푤dÏŠÅbÚßßW,³÷±/X»H$¢³³3---éììÌâúý¾fggÐøôÀÜûx-HA ñêt:ŠF£V¨är(vÉ{‚=ñ}¿Û{%Áºôª\¶÷¢]g´yÉ  +¹~¥y™ß÷ò x}|ŸyÏ ÑÇZxPéeWÞº*i$¸Ðíõù¾^æéðVP@¨¦Ä¾<•.bc$¤x«»>ö–BÆ&]d»ò^,­z=¹âûÈm ÀØ[Ûý¼ø>y‚Äç^nÅçô‹ýÀA„˜bb ô‹æI)×ó–a/K¢ù¢nÞÚïÁ ëæ=6ž¬z Ûïñý‚Õ™ñúX®ë½2ŒŸx!_˜o|¼?N> îü É‹÷Zú"XÉ©þàÁ+écÙ#µZÍH’CÒO÷û}U*#ãüÁ` b±¨T*5"¹$ÓÊ\ƒ9ô±+€uÀ3äØî!éÜ*_©T”Íf­‚}6›U86FâVRŸœœÔóÏ?o’#/mâ—H$´³³cñ$$%Àðà‹ ²&±XLù|^™LFGGGêt:Z]]µ"tx“ˆáécÖˆ¥À’ô":Ï(ÅzPT”zÔ´˜››3ÏÚÍ›7õäÉ}ô£Õ£G,ÝìÙÙ™–——Í3srr2’”‚|Ô aí …‚Òé´lOÄ‘ÉQèq0XjbÈ›÷°'‘Dz?Æ= ’ŒHD"ó¨‘ÑlmmMù|ÞÒ-‡B!K•Œ·—ýL¿É¢‡w" *•JY€¯wž¹Í{Þ *±"‘ˆÅÓàñ& óp8´8¡p8¬]¶ËvÙ¾þvI@žÑæA`Â{+Æ-ÃÒEA»ñøIæ•àX,Ãþ'çds¼ÿ×÷1š/ô…÷Óú P÷"ŒƒÎqÏçôóÁ¸½…œ@\@7Ÿ.½Ô‰yð`›¾yï @Užã=Ùá:¾OüþKÏ|_¼¼Í×Aæâ=,~@üؼ|Œ¾x ˜—£±¦Ò×Y¿×|ö)O>¼…ùào^ãïI¯÷¦øþ°WýOÈ4{Žýå÷µò}£_Ⱦ ô‰>{Ïœ'^Ü~x²ˆ·crrÒ¤;ƒÁ@ÙlV“““ÚÞÞ–$-,,XzfÎÛGÅûÁg->¨C4ŠÅ¢Éèãó B¡Õû`ý‰]…΃™±h‡CÛìaö÷ì@>Òé´yt TXã½§ˆT²ÛÛÛ*‹VØ{£R©XóP(¤Z­¦x`7êêÕ«vŸà!Nƒ9'@ åe>Á`p¤ØžXœ©F-6€±‘¾0IÜÉK/½dAÀÉdÒ@9c„  ‰DT¯×ŒDA‘P7FÕl6µ··§J¥b5JF ÚÙÙ±õ£Æ…'–’¬:<^ZÈ({|iiI’ÌC ß—ÉdÒæ?+Ú3%›ÍjnnNýþyMúˆŒ.[ðs&“±µdžs¹œÉÁ²Ù¬­ÅJggg•H$œ J§ÓÊårGU(l¾ñJLMMÙº0fŒFÖ©×;¯4Î51šàcþð¤øù ˆýììLûûû–äììLÕjU{{{ S‡-AqMþ™ !!QñFœ“Ì\ãÅ3!¯‰DBÉdR'''ºwµµµeFT*eÏ­~¿¯D"aDÞ§1¿l—í²ýÅí’€<à  ëA¹—Éð‡´Þs‚eÌ{/üïã^oÕ÷ÇJ²`>òè# +­Ïêä¥C^I¢‘ñð¹'HÆÇ=&ÀûÀ}ß/þîç×Kuü¸½Å«"Vr^Ü^²ååSþ:>#“?¯ÿÿ8©bn½—€ï(|0ÿøqã{…9ë⃾™¯‘übðÂZü\2~®íådŒ6¾eŒhŽEÂC_ £~í¸çäxÏ` -DRÀ<ïu?xàËr}¿n¡PH©TÊâ4ØÇFCõzÝ‚¯I‹JjRÆX, Ͳç‹q§Ói¥R)³æðÇÍzÏÜÒç`0hóŒE€Ø¸£1??o} æe`w:]¿~]KKK‡æµ)—ËzøðáH8Õ±%Y1¼@  z½®n·«B¡ |>o÷5\s *ÇA€!÷Äîxm¿O¢•^’y›Ø7œŸÌTx—HLœE³ÙÔ½{÷T.—mHó‹ .•J)‘H¨V«¨×ëzå•WtõêUKã+ǦP§ejjJ™LF«««ÚØØ0ï5+Òé´àÇãq•J%Ðæþð’HoHšžžV"‘ñ–cév»ªÕj–)Šøœ`0h)JÅ’0L,Óüü¼‘,}!ÉA"‘ÐpxCCæ*jÄà cÌÃáP{{{öÝf³©H$b{•µæ™GŠç3±"$3À ñ~6ÿ¼þFÿ»l—íÝ.%XÏhóÖðñ4¨|îA¹·ˆ{½¸'¼PÞ K2·;—X½ñºpmÚççÅäåkã?Çô¢ ]ĨàíðÇa‰¤ÿ¾Ì•táùð^ ây<9ôÀ€Ã¹Þm¹çõDÔ“K®ã -Ò¼,‡¾úX]¶YËw“²ÞÈ:ø Ïõ}ªZï‰#¨™}äûæ ýó’2ˆ«ßƒ”±v€*/©£?ãû„ϰ ƒA+DÇþ¤‚6ú~O†½ƒâ‚_úÒ—lÝÑÚONNZ¼Àéé©ZÃKã“.D}vvfÁÀèóIwÌ}ëõÎ3!qÈ"ë[YYÑ“'OT*•,s$œ l©ñšx¹%–ðp8¬T*eŸ3—årÙ<"ÈÎjQ/É “,K¡PHõz]ÃáÐ<xYÇäƒô‘ùÚýôr~^ ~®øÜK¬è3 Ë0ãô7À”tñ`÷Åô°èy`ê²'C~xùûy¥yO}ó/,<îõñr'@——TùõàZãçò²5ßO½—Â%ÖÊǬø¹Å+ÁÜÓ?äBXfÙžd¾›·‹{âÝú4.é'BüîI ÷óƒ¬Åω'%ì3ïq|@¤*…Bî''Ï땤Óiu:X%hRá†Ãa«ε|ÊmÀ7ž,öX¹\6àÍ\#áâ^ö 3•J©T*Y€p8¶xˆv»­½½½‘º6¬ µ]ƒžŸ70Ë^À ?==­v»msCõíV«ež<¤f]·—…qO±×‘pV«U Xfís¹œeÑ“dufð<Ñ_®Ë½ßjµ”N§•Éd,–¢ÛíªÓé襗^Òôô´vwwuvv¦G™ž‡É÷G IDATŒõzÝRʃA år9iqqQgggJ$ö,, ZXXÐôô´ôøñcë÷ÔԔɣ˜ ïEæÞäùé÷0`OD2K 8±Á`PW®\±B€x}HQ¾¿¿o„4ë#ùˆ¶··uxxhìƒó¿!Âp8T:V(²lZÈÀð¶t»ç+VlŽõ×ò™º¼Wɯ7|zPæÉ oÜD¿|Í ßßñµ”.R®B49Î{C<`®¼—EÒñð2/äEï&'÷>x/…'l¬=ûÊ×|ñ{‹ã}qL~²Ž>%0cÁZïÉLÍÌÌXzÒ……ݺuK@`DVBÍC055e€¸Ñh˜ÕÞÌP(džˆÓÓS“5ÛÑívMfÒï÷-Eìüü¼VVV¬v÷éƒÁ –——õüóÏ«\.+‘HhwwWNÇ,Û€J@$1YžÐ_,æý~_{{{VD’ùdzL&•Éd”Éd,ëÛét”ÏçÍ«Ã>fî±zs}<.ÄzQhÏs7•J¥tõêUÅãqK{Kl„—â™ ÚÛÛÓÓ§O-.Ïâôô´æææl ãñ¸mž¾úÕ¯*ëí·ßÖƒÔh4´¿¿oÁ¨Ñjµ”Ífáéè÷ûšŸŸW¯×S­VÓÝ»w%I#{—=ÈúâmcO¤Ó鑘AÒ=³fpóL"¾^¯«\.K’®^½jïâ ’tåʃAµZ-óNñ,ˆÇã–¾Õjivvvä^M&“ŠF£#’3äì÷h4ª³³3U*ÕëuÛ<3‘”AvñÈPc…Ú8—í²]¶¯¿]g´yÐè)àÊ i4^€­÷†öÇ­þ^:Ä9ø¿=.R^rN>ãE ¥{ àÁ±$³¶y2ä=/€ÿèÃ@?xéB ºÞÛAßù¿£€øq ð—S¡Ù÷ßåº^JÆ:z÷²/%âZ½^Ï*{3¯^jä‹úqnOngl333‡µ²²¢ëׯ+—Ë1b+r¹œ‚ÁóT»™LƈÒ¾žÃää¤F2„…Bçµ°ÌŸœœ¨T*ùYZZ²èÁ``Þ“™™¥Ói5 •J%‹EKµzûömKwÚh4¬± H˜ˆ‘(—ËV)ÒÙÙ™²Ù¬:Ž²Ù¬§ ÏÓã²öÔë`¿BlÚí¶ÛV«eãâ§€ àR’Í»ß[Üó¾ð&?£Ñ¨µ¾¾®ÅÅE­¬¬h~~^F6÷Á`Põzݼ;@À¤vœÒ´b±¨ ½ôÒK*•JÚÜÜÔýû÷U*•”Éd”Íf  ãU…B*‹ÚÝÝU45/Ô;wÔï÷uóæM+2™N§Õëõ4??¯L&£jµjÏ _§'*™LÚ¼•J%{4¿¶¶f)œ§§§-°o Ϙùùy#²<“Á‘ßä䤩/|á ÚÜÜ4R€GŽë¤Ói-//ëöíÛ¼Ï}Y«Õ´¿¿¯V«eDY0qI<Ó‰»ˆW'“É(™LÚž…Böÿ÷»yCË7êße»lïE{ÿ}†—í}kã’/…áï^c¹(ãæ÷ pøòßó2,/ÇâZÌóÒ÷ä€~p @ãð1OJa>ð1 ZEcdþAë­Ð^߉AŒÕÐBüÃÛbä‰×E&#]ÔÝà?I#àÚk“J> ÚK ¼tˆïÇÐgŸùK¾OÙ;.‰‹Åb„ƒ?¾ôµ±5dîa^}œ sáÓ>3o¡Xc¥ǾóÅ!¢’F>#ª÷„0FOnüáë{¿÷{õ;¿ó;*•JšžžÖ+¯¼bžÖT*¥(‘Hh{{Û¼ ô÷èèȲZƒA{¦pÿPõ`z 6çõ32™Œy}†Ã¡Uµ'=3q8ìõb±¨×_Ýöiu,‰UΑÖA.}Lˆ$---)èùçŸW(2’!IGGG¶x!ÉúÕï÷­ e¿ß×7Œ¤P7…½†äÖ¿€vww¿æûÿº½W„á’„\¶÷¢]g´A<|J]¯ñç…ãÁ Ÿ`Vˆ€'€//p_ŸabbbD·ÍËòãÏ-]xk<ô{i˜td½t€ïz‰—'Ix°¾Ñƒݼl}úS{⹫ÀJîõå’̺ÈñHAø›÷‚0¯Ì Ù{&|f0ï¡ò$RÃü¿›g „ì‚óm¬÷šñúŒ¥Úmærðã|¬­'ÞëâÉó0ã:˾õÚv/¹b¤Ú|B&ùÉ|Øýw½7Nð1·œ‡ë3OÒEl–$ ú&x÷øøXÕjÕ²9% «qttd–èÙÙYE£QjzzÚR¶‘O+ G QOþ çËËË6wxð€ì‰òpx^Û¢X,jggG<°sssÊçóæiÉd2¶v±XL'''F‡áyKR©”>|¨‰‰ ­­­)+Nk8š4jooÏ‚˜OOOU(´ººªL&cïá C1­¢;ÿ‡xÔëuÅb1Åãq«ª>99iðÄt»]Ûxˆ@â”N§•N§U(Ì€§ªÓéhccCù|^=Ò•+WtëÖ-U«U ¼D"úÊW¾¢d2©Á``ã¼yó¦ºÝ®ŠÅ¢þá?ü‡úGÿè©T*éoü¿¡7ÞxC?¶gaµZU§ÓQ"‘yvnooëþýû–YŠ9‚¸1oÈ©ÈúEƬB¡`€~ooϪ¨sÿS(³ßïëÎ;’¤B¡ f³iû½\.›Ç!‹¡ƒX…B!#7ÕjÕž•m$½«««öÎaK²ÊíãñR©¤l6«Z­f±)dMóI pÁ`Њa­®®j{{{$¥úe»l—í/n—¬g´õz={‰ŒkαÎî¼Õ–l2€wI_“†×r/g‘dÖ+ïM˜žž¶——çx়À9‡™ã–jüôaúŘè\Ë{(¼> óXñÐȆøÜƒÏqšO?Ë<„ÉÀâ-nÌ  P’½„}V32 S€IòÙŒ¹õÙ»ü~ð¶Ì ß c5–.¤P/Ÿ¢ÿxt<?Á^ ÿÞ+Ãw'''MÓíÉ*{Ç<<,>΀XŽ÷±9ö,´½dƒób•eJ2Cß_ýöÇx?ÖÖÖ4==­ããc @o·ÛVøþ“ª–j+âc X§Á``ñ!|§Ñh(N[½…8—ËéääD“““šµ@tÖ;™LªÝnÛÜÏÌ̘åZ’nß¾­ïú®ïÒÉɉ*•Šö÷÷­^À¹d¯Z­Úþ/ Êf³–½)•J™¬'*kyyYñx\*—˪V«j6›ÈÎ>åĸÀ|QÿƒW¯^5y`:V¹\¶˜›…… jæÞët:ºw®^½ª çi»Ý®J¥’ŽÕëWxï÷û*—Ë Z__×ÚÚšÖÖÖ´²²bò7ÝñBxooOGGGº}û¶VWW577§+W®(hggGzôè‘Þ|óMýéŸþ©>|h¤¨X,ªT*饗^Ò /¼ T*¥Z­fÁêÈÂx ‡C“Dñ¹t£Aje¼¨xÙHþvvv´¹¹©r¹l{©ÜÍ›7uëÖ-½ôÒK_“²˜¤įP>55¥v»­d2iÏÞV«¥§OŸªZ­*ëìì̼Ad¿ZYYÑÚښşxôÑÑ‘=ƒHCí‹ b`ñÆ.Ÿ®ùýjï…üêÿæUi6›úéŸþiýàþ É??ùÉO¾ë±o¾ù¦~à~@ñx\étZ?üÃ?¬ÍÍÍw=ö—~é—ôÜsÏiffFkkkú7ÿæß¼kB—Ëö­Ý.= Ïhã xi nesÇJ³X¥È^ã/]X÷½[ßB/ýâo>Ž„†Ô+3ÖG~ÇÒ Ðó²'Î ñ$…—-à°Ž”’ /ÊÍ˲Á|âA¢ïXچËخϜ{BæãH«Êç~ŒY¬³ȳFÞÓ@@&߇¨xO‚§ñd AÆŸÆÉ cÀr.@ã-x²W3û‰yît:¶ÏüÚ{¯çàs¿èkƒœ Pe¾Õjxà T€0â5¸{yiaÙ'>séd%ÄDœžžZÚÔr¹lr¤p8lª@à<íl»ÝÖääyåmÒ¼BONN´ººjÉ©±)Àà ]Hÿ°î/,,˜$ç…^ÐÉɉeÄbñ‰Oè{¾ç{ôå/YÙlÖŽýwÿîßéŸø„~ögV?øƒ?¨/~ñ‹úøÇ?®ýý}ýÇÿøÿ_ï²½Çí’€<£ )ZÀ«'h¤ÉØ‚ÔÇÇ?Øç­ö¼ ¥ ¢AÅe8$§ÑhØ€Ì`Ù†¸xí5àB„GÆ{0“ôÇ/ÕÁÚë³l=¡á'ã‚ ±Îû4ŒfHžÿ kí¸ÜËÇyxÙ[/+óD‰©¤‘ùðñ@`D‹îç„y–d í7^ ˆsÅù˜/W¢¾ßüß—½ÈÚ!ñã2@ÆÌ?O }LÀ8añÔ¸¦__@i86O2DÖbâ=1Á`ÐtódLšœœ´ \â5ˆ`¿PÑܧ:­Õj–*2ÔjµÔh4´¸¸¨r¹Úí¶UÇB _ˆ²³ééi…ÃaÕëu½ð šššÒ;wôøñcmnnêääD©TÊd†Ú¹¹9•J%•Ëe¥ÓiÅãqómmmÙs ¢ùÝßýÝj·Ûúüç?¯ÉÉI-//ksssÄØþíßþmݼyÓ¼CXù···U©T”Éd´¼¼¬z½®OúÓzî¹çôÇüÇzõÕWuõêU•ËeÝ»wO™LƂ㷶¶T­V-ò8âwÎÎÎtrr¢×^{MŸùÌglŽ†Ã¡æççíyR*•49y^‰"÷D³ß?O”‘ÉdÌ£‡’3­#„†–b±¨T*¥¹¹9•ËeóNöz==yòDgggZYYQ¯×ÓÑÑ‘Òé´*•ж¶¶ôÁ~P‹‹‹ŠD"* *—˺yó¦Òé´Z­– …‚b±˜yS¸§1&Qóýlÿ7oÅ_õ¼ïÖ®]»¦J¥"I*•Júô§?ý®Ç}âŸP8ÖïþîïZÜÍ?øAmllèSŸú”~þçÞÎñs?÷sú§ÿôŸêç~îç$Ißû½ß«n·«üãúgÿìŸéöíÛßèá]¶÷©]J°žÑ†et8Zñ2”ù`˱ÄgxÉÒ ŸÖ×ÿÄb•Äã`ò^é¢`!VH€˜ï€’*»ÞKÀ9yYùXÆîÓFb¦0„¡è2vÆ‹Nð–~¤ô¯ ùæ½ÆËؼÄÇˤúXð}ré"nÀŽÌk³OOì½3^ªå¥_ãýÆ2ì=e€ ÒS|Nÿù BË¿³³3Ód*C.˜#O¸X2¢yÙóϵüžDÆÚxiP!ã²8ˆ {šù†lÐØ'~®é3Ò¤p8¬ëׯëÚµk&{ ƒÊåræ¹víš666T*•Fµ²²b5z½žB‡C“iu»]­®®ªT*iggG½^Ï‚¢ÇÓ¤†B!KQJ¶Z­f@ Ë/÷ÁÁÁ’ɤ?,óFCù|^ûûûúÃ?üC%“I]¿~ݬËÁ`P÷ïßW.—S:!¬¹\N7oÞÔµk×”N§MRD02mqqQ™LFÝn×ܣѨÕÎ`}ØŸWè€677Í› •Ífµ´´¤l6kóèèhDD52³H$b øéÓ§j4ÚÜÜ4/ÀÜÜœôv»­Û·o«Ûíš§CD©T²¬OÙlVóóóêv»V =‹©Ýn+N›¬Z­*ŸÏknnμp­VKƒÁ@µZMµZÍRľñÆÚÝݵg.q9ÑhÔ2}˜_,µººªùùyMNNjssSõz]¹\N‰DB’lݸ?†Ãóx¤G™äÔËU1@ݼyÓ4(žÞàDŠ\ÿ¼©T*&+•JÚÛÛS½^W"‘Ðôô´r¹œÂJ¥¢ÃÃÃOf4Õúúº=«%YüO(Òìì¬õçððÐ,òÇÇÇzüøñˆ—¼ÕjÙ»‚÷Y¯×3Éâ³Úþ<’Òëõô»¿û»úáþa#’´ººªïû¾ïÓg?ûYûìþàtzzªýÑ9Çþèj8ê¿þ×ÿúÞtþ²½/í’€<£Í[¢˜TÆçåTÈ|x¡óRõÁÙf%{ðǹ|åáqë>¤ß!èt½ÄÅK~Hx ð>`möÛ€v/ÁñÀxJøçLq,²!,–>µ,ß#« óM±NxBè‡)¢½[¬´sö$`Û“A'ƒ'Œ~A¦w>®O†—/AÞXúG_>þ:ß¾ï]ûzã9þ2ÿþ²íÉ“':99ÑK/½ô5{ñÅõøñc»OÞzë-ûÜ·……e³Y½ýöÛé~\¶o¾v)ÁzF[·Û5+“ýÀj”Š¢Þ+HEîCÆ /gÁâ `ãsâ&©x0‹%ÝËc¹^§Xõ™†ÐYCDô\“FÅrÔÇpð°õÅô ò™‘d’$Ÿ^b511a€ÿ{éK³Ù4Ëw²4ïÍà3óÉɉÍ9×ókÇ÷‰ñq-Èðž0~î=xP¯ñkG¹6Þ2¾{zzjÄBè‰!^æÆÖÔÇ„°ÖìeŸ²˜=Î9}=?·Ëzú˜À>×Fšèûwvv¦X,fä{ÏP&“Q>Ÿ·½AÂá°ã5™™™ÑÜÜœZ­–Ip˜#ˆõ"‘ˆiãƒÁ fggU*• ÌÇãq%“Iõû}KF1 LŽI,R®­­éÎ;zçw”ÏçG,×2¨:=55¥çŸ^ø‡hDŒÌMÕjU¡PHËËË#AØ““絪ժZ­–:ŽÜX,¦ÇkqqQ¡PHÕjÕ¼0F#yšœœ4Ù«|¡¿;wîhwwWµZÍÈd{gzzZµZMW¯^ÕÜÜœ^zé%mmmi0aÃÀpíÿOq< ”N§uëÖ-µÛmÕj5ÍÏÏ[œ^”f³©••™„ˆóx<®çž{ÎÆØjµtóæM5 ºsssú‰Ÿø ýÞïýžz½ž>ÿùÏëÚµkš™™Q2™T*•Òp8Ô?øÿ@ÉdÒb1~ë·~K{{{úЇ>¤jµªB¡ W_}U­VK+++ú•_ù{Ž.,,q;<Üdžb¥sÀ‘˜3÷x‘Í@Ê Xž˜˜P¥RÑp84oÈÁÁIJG¡PȤ@ÝnW­VËäHxɼ%zvvV¡PÈæŠß=@CJ877g߃8-,,¨R©èþè -N…øÖ¸T*innN¹\Ϊ•3FHÓpxžööääDOŸ>µ€òáp¨R©d'Ÿ±m_ƒÁ@ÛÛÛš››S"‘°‹Ü@À2€A–É|@|î¹çìþ£*7ž(Ÿ¥Œ{Œì_¤>99Q"‘P¿ž‘«V«)—Ë)“É(—Ë)‹©ÓéXÀy °â„GGGÊçó–­jbbÂjµ4›M-//ëå—_V,Ó[o½¥³³3mmméÿã¬ÝÝ]X]Š_üÅ_T>ŸW,ÓÆÆ†y`¿ð…/Xö1}ùË_Öêêª?~¬7ß|So½õ–>ô¡)‘HQzô葚ͦ²Ù¬âñ¸nܸ¡H$bq)š››Ó½{÷¬H$13@@ñx\óóóºÿ¾Ir™—½½=KÒÐëõL^ɾ‡4Û³i8<—vMNNªZ­Ú³) ™Ä­ÙlQçþo4J$V˜#ž?RS#ûK§Ó:::Òá᡺ݮ†e5óÉ(ÎÎÎÔjµ”N§íë÷ûJ&“êt:#q{ïgû«<©ßÈs^¶Ëöní’€<£Íëk¥  °|r}à¢Á±8´ñP=Q Ðš÷Rø@réÀó9À¯‹·Ø4yaøsxùP4ýšñú9ð$0Ìÿ9\×ÇÐW€=ýõßñäÄËr$ÙËÉ@1yðï½$€bÀ·÷&y0M£/^öäÇÊï~MÆ÷ yà;ž2ŸãsÀ÷9'¤ÏÖ|ß×q„w IDATâëׄýà £—yï ×÷4^OÊ=ñ“‹'´Èñ~øô¿€ €<×px^o%ŸÏÛºS³ ÑÎÎŽYt>|h€+!Ï·¶¶ÌâìÉh$Q2™ÔîÁ ’ɤIL»D£QËœåïûz½®t:­ÕÕU¥Ói=|øÐжZ-‹‰ñ)~€†¥•íõzf•î÷ûZXXP¡PI‡»³³3¢û‡TE£Q5 «ÓÐï÷577gÄ$X"è/Äø3ïe«ÕR45’CÐù`0P¡P0â399©ëׯ[ß)¢Hl¾?žW¤'ð> êÑ£G&+;==ÕÑÑ‘‰„VWWÕn·µ¼¼¬f³©óD"}ä#Ñÿøë7ÞÐÎÎŽÚí¶Å( Œ—€4 ø¹®ùÈjaï“árNŽ|úœî^ÚÄ1kÈÿÝ%úè­à>ˆúÝäMh2*yð ¨òY|¼×d<Â{軪füãór%I#±=\‡ßY¿Þü#>Á{t|_<¡':Þ%]ÔJHÞ†q¢Iód‘ëzO’'SÌóïûïÉßø~ô„Á!ÖÆï+H ?—'dþœ~¿Ñ—ÉÉI zFnƒ ó÷s?33£Z­f@ ÐMÁ½Áà<ö‰: d*b ‡Cmnnêúõëv>Réz/¾ý¸«Õªâñ¸¤s è[o½¥©©)]¿~]'''ªV«#EE!NFÃäM’”H$”J¥¬ ){±x³~Õ@  J¥¢ããã‘L[̱*€X,åÜ<³|ý IæI!ûT2™ÔÄĄըÀÉ>„¤yƒÅÖÖ–Î|>¯™™¥Ói¬»»»–òIÔìì¬úý¾ …tåÊmmmYÆ«½½=õû}ëììL¯¿þºŽŽŽ …Lêó¹Ï}ÎR<ß¾}[¯¿þºr¹œþÚ_ûk‡ú¾ïû>% }ùË_V4ÕÒÒ’¾úÕ¯ªZ­êÑ£GªV«ÚÜÜÔÌÌŒ*•Іe€ÚØØP*•2bC¥ôH$¢Z­¦ÉÉIU*K•ì“”@ IŒ,ëÎ;úßÿû+‘HØýŠLŠäž¼/--Ùår9Kõ\(Ôï÷Í#311¡ùùyëgµZµ¸Ÿ`0¨jµª……ó¬øúRÍfÓ€.)¶K¥’666l/' U«U ‡CË×ëõFŒ?>®Ñ¿ý»ôýjïù«œsbbB÷ïþ]ý—ÿò_ô ¿ð – kggGò'¢Ÿú©Ÿ²cè‡~H333úÕ_ýÕò«¿ú« ú{ïïýåqÙ¾éÚ%yF/e,ã àð% Wº¨á˜/ GÎ<˜õÔÿôVe®áåHHtŸôgÜÊïÁ '/H Æ=+Xº˜ çÇ‚ìû/i¤…Ÿ|Çè{+?ÀiˆŸð©€ ccNÆ m\†åÇɸ}|îã%ùÉOêÃþ°þÎßù;úÿâ_X!¹¹¹’N§õñ\ÿú_ÿke2ý­¿õ·ô¥/}IŸüä'õOþÉ?ÑsÏ=÷¾Œñ²½7í’€<à 4.³y«<`ÄDo¹Ä:äƒ{ù.™™‡’ t2= ö’ Žñ€0À±Xû}ñ@HŸn`Ì÷‘€A Þ ,{IѸÔ†5ÐǦŒ?ïX y!²{Bã-÷^"ç ¤ýà\Þ2OÿñÚŒƒ¾ËÖ¸¦'©~=üøü¾áºgOR¼4Ëë=W7>XybKƒ $VÉ÷Çó;² ¿6*ä=/OfÇe~~~ék0´€«\.§jµjYØ+Äx ÁKR«ÕFGÒVøƒó” ©TJý~ßRùrmÒÌrÿ¤b±˜fggmžÉ3_0+NÛ=þÚk¯©Ûíêõ×_W(2¹};;;S2™”¤™K P6›U½^W¿ß· wÀ(@Ô“J/w£nL¯×³ /,,XjTŽ£P±fìddÕjUÛÛÛj·Û¶^^ÖFFè¹_!FÜßTËî÷ûHc±˜*•ŠR©”e¶ŠF£Úßß×ññ±–––trrb„lrrR'''–j—4¼½Þy}‰ïÿþï׫¯¾ª““=xð@ápX{{{úò—¿¬Û·o«R©hiiI§§§zóÍ7ÍË4 T©TŒp+ êÅ_´Ú ý~ß<xHž>}jÞ¤ª‘HDGGGêv»ZYYQµZIúA:õøÐ‡>¤ÿóþÊå²r¹œÅà¤ÓiµÛmõû}Ëþwzzj’'ž7‘HDKKKÚÝÝÕÌÌŒ€ÄÛ‹Å,Ãû‰ñ"\;‰¨R©ØóŸñ‹EÛ‹d­#û²x‘°ç3 Z­Ö3ëùñÿqmooK:þæ3ŸÑg>óçõvVWWuëÖ-}þóŸ×ÏüÌÏèµ×^ÓÄÄ„¾ÿû¿_ŸúÔ§,F„ö/ÿå¿T<×/ÿò/ëSŸú”õ³?û³úWÿê_}ÃÇuÙÞßvI@žÑÐ"ÀÒK?°øñò î°Œ褋ªÖ>ÿ»4šåWº—¶@ øŽ—Ñwé"€Ù>éB¢ÄqŸ…Ë[ö½îŸ9ðýàšèˆøqs^ªäó7æ‚ßñˆŒƒxæÍƒvæ‡1xŸCD¼ÅŸ×zâ× â0.™òPO|߯›'P|õò¿KE0}¼É8yñò5¼GÌí8qóˆæI4{ˆ½‡¥—s³‡¼7‚sA¬ à$ˆr8Zš[29MLœ’¤Ò;cI&“ªV«&«¢*¸ßÞkpzz:â ôÁ£ôòAªP€u p1žPÇb1Õëõ‘ vT‡\—Ëe=zôÈÀl¯×³wâ=B¡U!'¨|uuUù|^OŸ>U»Ý6iððÌ`é&÷6²+IŠÅb:99Q¹\6òCF&jH sc ›¤Ü}ôè‘yl š>rÕh4F¼”SSS&á/bH—˼g³YÍÌÌXŒÎé驦§§µ··§J¥¢ÙÙY5›MKG ˜¯T*êv»V‹éÏ믿®D"¡¹¹9}å+_Ñææ¦Âá°ŽŽŽôÚk¯©P(è7ÞÐöö¶þçÿüŸºqãÆHF­V3ùA÷³³³ÚÙÙÑ;ï¼£ÅÅEíìì(™Lšg( š|jõˆÓÓSÅãqÕj5mmmÙzòœh4V‘œÔ¼ÙlV+++&=ÄÀÇuëÖ-óF½óÎ; ¶Æ8}<&‚ßùœ/_Ušï˜<ØäÚ€PoaæEC_ÞMîåå.\ÛƒRé"C`ÏmŽõ`ÞKtÐ{9•?Ö[g/Èfƒ´€kæ Âã¥÷x‰rÈ)h9޹òëÌg~îñÀøüw#CKžÆ½2ôÉ2öøýÃÏqu]Æ=1òR'ö ÷šl/a®Ë~m½Pð”d²$oéäû~χ¬$x)Òé´wƒAËøãI2räI€ùv»mÖz®I@;ÕÍñ® ãb|j`²n±ÿfff,ƒP¹\V,3 W¯×ÕëWQÿìg?kû-8Ïv…<…½Éúçr9ÍĮ̀Ýn ´b¼h4FV¼ÌqvvVGGGê÷/ªË{y dË'kÀ꤇kW«UÅb1«ñ¡ŒD"–îÚB¡Z­–­7E#W¹\IS|zzjEêÈvÿþ}ÛKx4–––Ôn·U,-9Ϥndl‚–Ëe‹EýÉŸü‰+ªÚ÷z=èþýûúýßÿ}…B!år9ÍÍÍivvV»»»–ºxqqQ+++Êf³zò䉖––ŒdþÙŸý™–C$X㉉ ---Y½š|>oò©\.§f³©+W®X¬ žZ­f$x7nÜP,3éÞ/b{ŽŽŽÔl6•J¥ÌcîßKsžµZÍjC ‡°ÛíªZ­*ÚýEMïµÁhÓívM^FÑG0 ÀCܧôååÎ9°Ø{àIŸ<@Æò„õ‹¬Š——Œyë9׿;ãd€æ-÷Ì ÀØ×I¡¯œƒñJ@Ø{Q°‚ódlÞ‚ï§ÿx¯ððõu7è“—2“IÎÉù˜€«'0ž|yÏиŒ5ñd‰¿ù¤)a>»Ýó™œß{²¤Ñìcì'æv\ æÏ륞 ùûÁK¶°šz² ô÷ƒa¡º6ÞSSS–öøøXñxÜŠ=6 ë+—}R€Á``$!—ËYUmÑôô´¥…äî³x---YÊ^€5^ 0È}ÐË#ÃßívÕl6ÍÚ̃üABB¡I£ØsÇÇÇV%‘H¨Ñh˜T !d °G&«h4ªl6«ÍÍMµZ- TFâÕh4tíÚ5½òÊ+ªT*¶o ¬ öV§ÓÑÌÌŒy€0RxWÁ<ÎÏÏ›|Žy'ö¢Ùó{râ½ Ä9Äãq‹E“§½üòËZ[[Ó›o¾©E£QmmméêÕ«4žp»~ýº’ɤ=z¤½½=MMMY0T6›µ0©TJ7nܰÊèOž<ÑêꪊŢòù¼‘8ž'ý~_ÅbQÝn× Yv:óŽ5›MÍÍÍÙ}šËåìžkµZ Z[[³9‡`G£Q "Åb*‹V×…Ô½^O­VK©TJ™LFÇÇÇ_cl¨T* J&“VɼÑh(N[–7î7 ‡CË0†b2™ÔÁÁyÇØ»ÿ¾cO ç©®IØpÙ.ÛeûúÚ%yFAz€+o!h_ ÏÇL2¤‹è>NpPñ²^Xã’Ol‰ãd‰x^ >«×ä'R™q‚ÀµÆÏ`Gw`õý FzüµÆñ½×A:Ï^ââ³vyÙsE_½L<@™¾xàê³ù9ãxß⟚š2‰ ’}âãNøþª‘¨ð»—Lyb)Ðón·kViæ 2@ 1^ ïñäyÜËáÁ¸÷æ°'ø»6\Oˆ/‚è÷ÅápXøÀ´¹¹iin¥s€†ŒXŒÙ!Ùxø2 ŽF£ŠF£:<<´T:@û=A–«H$¢ããc]¿~]ÛÛÛfž˜˜P2™´`s‚k›Í¦†­D7 Z¶)ÖŒô«x_ˆ‘¨T*#ߣþÂÄÄ„âP(d1•#¯ …BV?£ÛíZutHS*•Òââ¢âñ¸¶¶¶Ôï÷u÷î]œœhvvVÝnW[[[êõzZZZR.—ÓÑÑ‘nÞ¼©Á` ÃÃCU«U«4O, i}}]…BÁ,ðNǬû@`$fazzÚÆežzÔH!(ŸÏk{{ÛRÍòÉçóV©ÜïgŠ6®¬¬X:ÝV«eE)Ö¸¾¾®­­-}çw~§Þxã ‡C öfoþñ–ÕëuÝ¿_ÿüŸÿs}üã7Ð~åÊ#™Lf$ûáññ±vvvì]ZZR0x^¤vmmM‡‡‡‡*—Ë& –ú6Úžk·ÛJ$–ɬP(h}}]OŸ>59Ï-R1—J%KH€ç¡ÓéX;{žWz`äñb³ÔAy¦w:óîá⹂T’çòÅo†vé­¸lß*í’€<£- YVêqðÂ$òŽGå¥3ÿЛ™™±—ºÏÕø–.€Øgtò±Ò¸"#áeáåb€nŽás^øþ;Ò…ŒŒ—¾¯Iâë'Œ3÷à=ÞcäÁ*`KÒÉáÚ6r Þ7æpx ‰çììÌæ”ñzRÄ:x 22¼3¬‘÷ôÒù |8cßì+ïÙóɔܽ^ϲ¢ÑGÆ411¡ ›ÝnWÛÛÛj4„œÉdLÃO½<"ÛÛÛ€ËøX›d2i©N Ø}úô©r¹œYmÑ¢ûš™LÆ,¶HÀÖ××Õl6õäÉ5›M‹ÿ ˆz~~Þ®•ÏçÕjµl->|¨¥¥¥‘X©h4ªÅÅE[»ÇÛ¾!Pž˜Š™™‹sh4&ùY[[3¹O0Ô;ï¼£v»­ÙÙYår9+ìFuòh4ª©©)% Û…BA…BAÝnWZ^^Öúúº>|¨ƒƒ«b],-Å*…ååe=~üXýèGµ··§‘àfæ Z­*Ni'ƒqàúõëêv»ŠÅb¶7Xÿl6kD×ÉɉÒéôHaCdHý~ßöK2™Ôññ±Þyç]½zUëëë#Ðóù¼~è‡~Hÿí¿ý75 ýÞïýžêõºÝGƒÁÀb˜» mooëõ×_W¿žêí·ßÖK/½¤Ï}îsšÕÚÚš>÷¹Ïéƒü Úí¶¶··5 ”L&•N§µ²²¢­­-5›M¨×ëiaaa$ > i~~^½Þyý—Û·o[Šç‡* innΤa V_ X2™´ ñÃÃC›ž <ãgggíºx”؃i ÄZQåôôTµZÍŒápX½^ϼoxæŠÅ¢yüñ ù÷K§Ó1Ë·c»$5—í½h—äoií¡| €Ì¸€‡¶—Þº,É@=2¬OIÊ9é}€èr9Ÿtá’ zê½ãÁçÞ`†Ð§"ià"]òc‡$x‹5ž ¾ññ"Ot xÙ–}ÆÂ¹ð"Py÷5N œÇÇ6`É#¾€c! >æ†ù`Oà!ðD…㤠rÆ\1#ã³ !ýÂóÁzú˜O8X{b$$™~›¾1nˆ™ß[¬ ßc(~æ÷U·ÛU6›Õúúºnܸ¡ýý}½ýöÛæ‘¡:²t^îôôTÕju¤F£ÑÐ`0°Jä€Rî2\Õj5³3ÈzТC>'''U(F5;;«r¹¬Á` ­­-C¿^è0•J©Z­Zvªééi ÕëuE"  ¼ÇòŽä)›w¥Z­šÃß^ytt¤@  k×®©^¯+‘HhssÓ¼¤†œSOB"‘ÐÑÑ‘jµš¦§§uíÚ55›MÕëuƒA“GšdëÆ:9ùÿØ{“YÓì¬ÿ‰ˆc3r¸9Ü©îuWUwW·¡š nØ0ˆ ÔbdL‚E³2,ˆÅ ·l$¶, ŒÔ€dªÝí*U·ªòŽ9gÌsddÆø_¤~'ODÂþËåëê¯Tª{óFÆ÷}ï÷~ï÷<ç<Ï9—º¸¸06™\è÷ûªÕjúÉŸüIimmMËËËÖáœ,Àšk^\\T¡P°gbooOµZM‘HÄ*4Aº666T¯×­™ˆååe{ƺ·oßÖÑÑ‘5fL&“ ²R0Ô;w´¾¾®B¡`óF áððP'''¶?K2 >µ³³£……ëÒ»µZM?ñ?¡¿òWþŠ~ñQÿú_ÿkýÌÏüŒÖÖÖT­VõìÙ3}éK_Òo¼¡Gi}}ÝzgàÑ`mAéIóî»ïê/ÿå¿lU¢~ï÷~Ï´tèABÇÚ‡â÷öö¬·J¡PP©TR0T¥R1‰"¦oÿã¯Êçó:>>Öâ⢭éZ²Ñ+•JFVü{ƒÏÑ­›=a}}]ív[¥RÉ´LÓóçÏU*•t~~nå\}3:~†Ù˜RÂFCÍfS@ÀæwiiÉšúJMÜ#ª4ÑÛƒµ …”Íf­ì-2H|?ñ?asƒÇäµ×^Ó‡~hr,äž‘HD_üâµ¾¾nFìjµj^œB¡ ¿ðþ‚šÍ¦Êå²~÷wWý~_o¾ù¦U2k6›zã7‰D”Ëåì~Åb1íììèââB»»»6/KKKúè£T¯×uqqa 'ý~FÕëõ”Ëå¬+úÞÞž?~¬Û·o›—éîÝ»:??7ùÏ ™;öC²Æ»»»VLãG£QÅãqƒAmllX3Kö²jÞlO•·ÍÍM­¬¬(ëòòÒLñ«««FrWWWÕh4”Ëå ]7«Ç*—Ëj4úæ7¿©ÿ׫øuð^§zå÷ ëú2®m>~tÇ<òŠ"?d$Ý^žâÍÏDä|U@‘A4½€@Òl6…Ú´'ó IDAT‚éo=ið™ 2%8ú>ÕŠø~/±"B ø!õ4øf‹|¿'%H›¼ÄÊÉɺ÷€žï!ÁùH7•¥˜ Ÿñ> ,醘ñýhÕ!t˜’9__ÑË{7¸Ü+®Õge¼ŸâäûWL&3&óÒ(#—àÞx8ö22ßüŽ,Õmd0™ó{dÑVWW•ÉdLÒÕétôñÇëêêJÅbÑ rŸ©†FM‡÷A’Âá°>þøcõz=={öL{{{ªT*V– E^’øàÁ«´‰D x_]]éý÷ß·s;??7 Hx,ÓÚÚš¶¶¶ôâÅ ÆçççS½*¨ð…ç¦ßïëììÌÓABÈ:Õj5 0 ¯¢»z¹\V(t]𕉬wÌ뇇‡Z]]Õh4ÒÚÚšâñ¸®®®T©T´²²2Æ …‚™É¿þõ¯«Óéè7~ã7T«Õôÿá?Ôoÿöo«ÛíêÇüÇmß¾ÿ¾÷[·n)ë“O>Ñw¿û]ç¿þë¿®'Ož(N¡Úßß׃,ãñÉ'ŸX–`aaÁš8R!m8ªR©(“ÉèÛßþ¶²Ù¬–——Õh4”ÏçmŽÉt„B!}á _P¯×S±XÔŸù3ÆÌå|f2™¨P(hccCOž<±Àž'ž%ÖJ¯×³ûAP‚}˜,$šg•=‹€•ߨ¿Êå²âñ¸"‘ˆJ¥’îß¿oÁ§H$bŒF£¡££#ÛW¾ò•¯ü©ð€Ì3 óñysòŠöfèÙȪ$‹V†Ãᩬ ›/à@ºt¼‰òÀi ½<°‡PøÌÜWéâóÎÀñëAZ¨Å`ê¥Y^zD悹à˜lð¾ŠÇôÀ0ï%h>k©¢ ¹ò^þļø¹T£ë†,1ŸÌ;ÄÏguòdaì³~€8ž4Ñ^Ê„yB#iÊÄêÏPá#úÜ«X,fµö¹fîÍlQÈk†ï…ÐAþüÜò} 7Í1ýyq¯‰„•ÚüéŸþiíïïà ó‘H$4-2+]ËK¶¶¶Ôl6õèÑ#Åãqår9ËdœžžÚ\0ßtJO§ÓªÕjVIjeeÅ¢·¹\ÎîG©T2D¿†@ຟò®ããc{F£‘R©”‰„™ÎƒÁ ’ɤu0ç~"mAnÃÏ–––”L&‹ÅÔn·-0@æ£T*Ùg¯;SW*žžA¥2Ñx<ž’ÒàÁK²¿¿oÑì iuuÕúBàéV«ªV« …BV Šg¼×ëÙ=€,¼þúë:;;›“<¿ãñX‡‡‡æ=a­p ¬‹­­- % µZ-“Le³Y[kDлݮòƒ’ɤɷ˜·áp¨§OŸZPˆ Ëoþæo*™Lê÷ÿ÷Õn·5õ+¿ò+ŠÇãèßxã žžª^¯›”ÊVûûû ‡ÃÊf³–aÿFzûí·õo|C¿ñ¿¡/|á êëõºÊå²XFõðáCœœhooO™LF¯¿þºí'ív[ºwïž"‘ˆù(ªÕªT.—õÆo˜§£ÑhhwwWÕjUûûûÊd2F;Ž666ŒÔ“¡!8€Oˆ}‡,Z»ÝV³ÙÔÎÎŽ†Ã¡ì(¸P©Ttqqa²Cü!kkkZYYÑÙÙ™¶··-H@fŽÌùææ¦I’ɤ§ä\/k|VdNjæã³sòŠÀ7?“Qðx6¥›ªÞsÁwzŸ Û÷ #òUŒAм—Ó²TÑ™õ°`šõ™áà ž59sLRüψŒcâåúkñÒØðûÌÄ2àÁùZ!^Ò4›àBy¿dÄgL|E2/õâ~#É!{ …,Âè3 €4މÀËž¼ÿÄM?ßÌÙ.¤3^èåq¬YoŠ'xZ Pœó¬÷Æ“~NŒp8¬ÃÃC E"+ËIÇo¢²TGº¼¼4 ÆsÇõñÇ›çÂû—0Œ·Z-+ošJ¥ (¹xûí·õþûï[¥Ÿx<®ÝÝ]öÈÈøP¡*•JÁ#2ÜjµT.—MZ‚¬D’eÈX¯×³2£¤t:m€"<]w¯–®Ë£r.xrºÝ®5 dSùŠŒ Ù½ÕÕU›€&ßd‰ãÆãqÛ|! ²:øîܹcD¡ÛíjkkË'''ê÷ûJ¥R” …Bøoß¾­l6«R©dd§P(X×uü?øt$©Óéh8ˆ‡d^^^ª^¯+ŸÏÛÏ_¼xae•———uqqaÏG»ÝÖ¿ý·ÿÖö¶D"¡ÿïÿ½²Ù¬I›(Õ‹Tн¯Ùl*ŸÏ[ á\.§ÍÍMýÂ/ü‚~é—~IwïÞÕ_ý«U¿ök¿¦t:­««+=þÜúµœœœØ}cýc„'Û„÷l0hggÇî÷þþ¾í?Ýn×À«ÕÒ‹/l¯€Hçóyë©dævöö|ö²¬‹££#ëDï^v˜Ïç5Ì Dq2#4˜„„P½Œg—Œ'R·“““)Ié|ÌÇ|ü¿Çœ€¼¢à©@Ž$ÉôóDæ$8C Í ðÇæNÜ’Ñ5K2y QJÿb }xö™f¼”I_RÕÿŸŸû¨:DÀW"òàp ðºfÀ1 ÿ’äw}„žl‚/Éü¡Ãàé³Q¾²Ó¬¾×ˈx{`ï‰ ÷BäKÔB*|v¤×ë™ïEÒT¥2Þ³>ï‘n*ÌxRÂ9Pè )õDÉ“C_`É}„TzÉ:–¦ .x2©‰F£J&“‡ºÿ¾Þ{ï=-,,èôôÔ Â„««++oŠWƒcäùþ/^ØóÂ\¬­­YV‰5ÂzLcœ&ºûÑGÙ\á“©V«Ö™ÈcX‡½^Ï*Ýùì$‡~¿¯z½n^$"ÊÝn×$2>OcN@^ÑX$‹ Ý4úó‘H馫8ŸÍʶÍ6|Õ(/Õñ ÐWcò^ ß1 ¨=À÷‘p@œZü™ëƒS]·gÍÉ>£ÀyH7 ÛGä!\È}ð+x߉7‹s ^Ó,ÝTÛ’4%•"êé¯Ïƒn@5R8î-À…R¼>ûÀà8:Op¸NŽÏÜøBü牜÷ðxò8K\¼'pE“8î7™¤YÉ󿉢4ÝBÙ°øóç;˜Ç ë™qxx¨L&£T*¥r¹lÇB2³³³£ÕÕU ;6^$?4™€ÇcË*r:ŽeX§=23u2™´Ê=årÙ¼ 4è…Ãa#HÁ`P±X̤AFÃÀu¹\V4Õx<6©¥K‰„iëYNG’Ì$F홣ñ¥Ï@qm˜«ãñ¸UK:??7éL<7@αvøì¾2¢á’,›ÃÚEf‰DLRò>¤N§£p8¬D"¡R©¤h4ªv»­|>o²ÂP(¤h4j2 ~·Z­Zð%‹@]\\Ô×¾ö5[ ü&Dþóù¼ÛóçÏuqq¡T*eÒKJÎ’ª×ëSYYö3Œøì¡­VKgggºÿ¾Eù‘²œœ¨Õjé+_ùŠõl9??W:V»ÝÖ| íímÅãq={öLãñuI\ ôñx\+++*—Ëæ³züø±ŽM>É´¿ÿþûÚÞÞÖ;w̼Ï{„lEGƒÒé´R©”Úí¶"‘ˆU®¢,1D-[u* žœâó 2LßÌÉù  Vð~"¬@  ÇÁ_]]5âN&söêêª...þoÝù˜ùðcN@^ÑáeI€1€›/׿pòôÀ…týäíâß9çPõR™ÙŸyŸ(øÈ&€Ýn®ƒóäÀ˸ø~€;‘X/ßäz…t½•.ù¼÷¶xÓ7¢xö@@YÁÂ|qmþ3œ—¿÷\ƒ'Ò YäsÜËYòyõ^îçíï$ãendÎíH3¤ú,1"£Æµrïýœû̇Ï~øõiñÍÆ¸‰DB‘HD'''¶V1`ŸŸŸ9‚|Eâ>…ÃaÓ¢Hñò7Îä#Þ<ô¢  %\ŠPõo¼(ð 0izÓ¨ú¨³>Šå#Ò^jã¿Çd¢Ä€ï§EúùNOvx 1|(³@žczB0­K²ë"ˆÇ#¢ê½3>SÁÏ!nÌ{2åçšóæ<}õ.ŸQñÙÈš@F@æßK•8/©ú4™“'¶€TŽ9ë·áó\? Ýg <\÷,±ƒ|øÏð_ü½¬ƒ×•Ñ𞾣ѨId|Å&$ÌÑUº\‡Ãa 3\®YO€Êûž¨¼äAþ¬4rÀâ>†É]("É"Û –®½)…BÁš'^^^šÔ‹s‘d šïáÿð=/X#\óx<6ï=C<‡³=uüïD)i£è†d˜/ëë³x‚Á R©”*•Šùax†}©gLä<û;;;æcét:zòä‰ùdR©”"‘ˆR©”òù¼¢Ñ¨ž?®~¿oÍoݺeAz½®N§c|2Ǭ]äl€a‚úè#Åb1­®®*‘HXGu2&ÃáPï¿ÿ¾úý¾¶¶¶¬L0Ô£GŒX¿óÎ;ZYYQ8¶¬>(H8’*Èz0Ôáá¡Ý+ö®áphÅh I†“wË‚2™ŒU6ãXd ý~εw:¥R)5 õz=žž*àÚÉÊÅb1óаoPPaqqѺ­#ǃ`°wóìŽÇcår9---©X,ªßï[Íù˜ùøÃ9yE‡ö ¯Ï'‚ì×l¾lâT9òä—Ŭ‰]º‰®Cnø<@{ö˜|FšöwQô™ŠYIЧ‘#…çš½@ì¥L€U°ù.¤#ëÓÎÝK€fÏÍ̉”z9š—îxp9›9""ìÁÇôY#þš‘RøócmøŒïÌßç#à|7€ùÓHȧ}óÊu{òã¯{–DPg‡—¿ùÌZ °q0;Qõl6kRÃõõuF‘HD»»»‡:99±>€â……ë~tã&£â+Oá¡j6›vž½^OãñØÈMØ€¶··U¯×­ì©—æ!W!+ q¡asþ¢ƒiÞÞáp¨z½®h4jÙ›X,fRªN§cÇG‡A!ãÉù×Þ¢þ±XÌLÛü …”L&%ÝdDF£‘™žñø3¬­ËËK­­­™Lr<¾)ð@Ä> )“É Çó¡X’¶¶¶¬ $œç=f<k{{Ûæ" issS/^¼Ðåå¥éÿ‘¶!ýÃÌOÏ_µZU½^×Ý»wmŸèt:F¼ðäñÌ—Ëe«(i*+S.—Íó9F.ÖétT­V•H$t||¬X,fþP(¤ÿóþÖÖÖ”Éd,Ë4-3‡M®Ê3 ¹#Às…—ɯ³Ñhd™Ÿ=[YY±óeÏÃÅÏ'“‰šÍ¦ÎÎÎ,€ÊËÐxæ...T,Ç•ÏçT¯×Üx"LÖ‰…¬V«e}e¨òF‘Ö”™fF"‘)™¦?Gžù~¿¯d2©N§cÇ FÊù;/‚qì«?ªcN@æã³sòŠ‚%MX¥÷l€/ @¡t£ýöÑìY+ÝTmxPî3³’!¾¢˜ž%^ªõ Ü{ f³@>›ãɘÿþ— Roâö¤Ê_³'>CäÓÏ÷?çÚ=É`Þˆb{ó7Çœ½ïœƒ~ÏJ”˜oO4<@45ï|ŽãûûÏñçâ ¢'+ äB~­ú{Éñ½”Œß÷^Àm*•2)W<7Ý=€šïY[[3pyN»ÝV±X´Þ"È[|6P’UÖAiÇÈ èñD`ˆ!¹R©(™Lª\.«ÙlšÞW€Cb@ô•’JÀb~ýû¬’7Sæ‰ ÿvyyi„ƒ{ÍP1Íߟ۷o›ÌˆŒ>l6«““órñPYËûŠðñYÊ“õa^È!‚@@©TJKKKÖ4pqqQ…BÁŽ °‡\E£QåóyµZ--,,èã?Ö—¿üe}å+_Ñþþ¾5]L&“ð‰„U=Ã$I©TJ±XLÅbÑ2ÿI ¯ ä«««J&“V”` {.},¨8Å@6ù ÷x8Z…7²=>Ó1 ÃC冸n·kÛü}‡Øø`7ªqAÌ!ûHÑB¡=gÀuµ7wò΀”‘J§Ó¶ö®®®¬ðÏšo¦é hsÞn·•Ífmdò-ŽiæÚÈ6Åb1ÛSÎÎÎô²Çg•™ùø,Æœ€¼¢0džëæ?€™¨€™ @×G½}f…—&Yj·cêóÅfdI^jÄ¿ù+/__ª0.iê<üuy ÍÏμd=¨öžþ,iÊÏwxÏ‹—KI7R%æÊ“î—yÍf™<ñY™Ùù‡¼øk÷÷€çIŸå{ˆ„Îf2¼tί^ð\/÷`ï³þønæ`9€xŽÏqdÖ|õ"äTápØªÝ ÛH&“ªÕjF0tëÖ-#cÝnWwïÞÕo¼¡ßû½ß³ˆ7‘Yº]ó| £á:?€˜`0hýAÈtÐÐgKWg_yˆrÙLF½^O•JÅ¢Þ¬¢åtófí! 3D‰Ó««+õû}#4¾,÷ÅÅ….Er]”ž…‘‰ÁLIT¢ÖT$‚hø©Ü{zŽxÙ¡³r/@0•çxN©¸1Ëf³* 6÷¬ö2*q…Ãamoo+™LZ$}2™èÅ‹Ö/òÃuP²•{He¨ñx¬d2©H$båˆíü3™Œƒnß¾m~<‹‹‹Öü’{ä½6O¸Éd2&s¢¯D¥V«issÓ@üþþ¾677•H$Ôn·õðáC›sæÔ¯ÑhdFx²dmjµš™æY?< ô»¡Ü.ë‡,C0x]>Bç×džðr^”¼%+Ç~¹¹¹©­­-‘‡ø,..Z¥2È’ÇD"¡X,¦gÏžYߎɚ$ E‰÷ 'd?ªcNjæã³sòŠ"öÀ?è‚Á "d¼\<¸ñßãÉŒ÷Pùe¸zòà}ü‡l‚hèlÖBº1Ž{c9àUº‘@ùL‰èÏFág¯o–\y —÷,xÉØ¬§Ãg8î¬wÃmŸà8G挌‹ïi Òû4f³Þô(÷4ïx¹Jý}â8™‚¿~Ž=‘c.üœAÒÈ`@^ þÿÌhä?£ÑH>Ôx|]!ªÑhhaaAétÚæäùóçÖ?€Þ­VK©TÊÖH³Ù´h9Y ž$O€|ȤìÕ,Áô  )Üg¶A`ø;»1ÍÇ×åZc±˜ùoNgªÊ¿—Ëå´²²¢óós ,..*‰¨Ýn[¦ó=×R*•¦2ŽÈ™˜äY7î=„ ’Æs²±±¡ããcžžš7Æ÷ÂãÁþ@„™u<ÿø&“‰™Úù@'s¬ž‚H$bU³f×=@¼ÛíNIµÈ0\]]éììÌJC–}–Š&†“ÉÄ<ø… afÏd2ŠD"F¨ëõº™»}‡û`08ÕÇ?ÒãÇÇ깿ƒÁ@­VK£ÑHÛÛÛj·Ûºuë–r¹œºÝ®jµšÉ B¡nß¾m=NÎÎÎT¯×ÍóÁ3 ±éõzÊf³&_ƒ|àsÂ[A¦™%Š+•Š‘EªQ‘1£ƒ=d.[³BæqccÃÈÕÃB¡IâX·<7T•ó¾“Z­fYÄT*eY¢\.g+D†5MSNÊ¿Ì1Ï€ÌÇçiÌ È+:xéû(ô¬ô†€è2õóyYú¥PÈw~ZUïðÀ N„É7ýó2#ISÚhŽ3 €¹|?Ñ9Ò賑®€ ÈöFkofäÌ?7?ÈefåL€?ÿH ˜sŸ¬½FzŸÍ p\À‘Ï„xÙ'pD?‘ñ¢f. Ÿ&­c^¼—†È4kJ’eÁ•™bˆ-¯V«šL&S’hVG# YwfÌÚd)- ˜ÇŸÁ39òk  YtâxT’%L{9!÷ÇWø‡¦ñçZèQ±²²bDƒ +kó:Ç&K1ûlBÚXwH´ <[DðÙ3:ŽU9‚Èr///uyy©££#;/öî9^Œ`0h$–9C¦Fqî/Ñ!ìq_úÒ—$IÍfS‘HDgggæËðR;I½ççÝnW…BÁ²<¨É6,,,XãG$aÏž=Ó`0P.—S¥R±NãçççV¤ *êääDÇÇÇ º¸¸°" *JRÍ-ŸÏ+“ÉèììÌö»««+jooÏädÂá°ŽŽŽÌR«Õ¬GÒ4ŸQ‚Ô…B!E"Õëu¥Ói»ŸTÅâ:(¯Ì>‚w„lE#X·»»»J§Ó¶ÆX{gH&“Fæc/óÙÇÅ1'5óñYŒ9yE€{ˆ8f#öDyáLy¡ó]>j.ÉÒñ ógª®z?/0^8D¡½æ˜È)ÀÅWƒòàÀ ð2)o²æû.>[á#ùèÐy‰‘ia>|Öòõs>âJ–‰šòÞÇÁùz]<ö¾Èóí«P}Zdl¶J$Žó×Ìïúì2–Y™Ƭ PôÞ/Eãz|¦ÀKÆü}ã<}TóêêÊ¢íÑhTÍfSï¼óޤk“ìââ¢Âá°ŠÅ¢éî}¶¹àºÙlš„ s9¹O€#|Þƒâ¥kkkÖ[°ÍzAÜ=?‡Éä¦zY²€€¿R©dæwp^Þèí¿ÛË] LdB¤YÌÏfH Q³²*Žã³Dæ}fà̹%äe‘Â7Ã9ðôÎ æšs€hð}ð{oçïåoÜGÈ‘lî>æ—h1Çù´ì‡¤šæµ)åO6 @€nÚ>²lD×¥›¾ >û4™\7ô½ƒjµšòù¼òù¼>ùä“yÙçˆÙúêêJétZÒu„ûìì̾¿\.›üÒéµÞ¾\.'Ij4zë­·tvv¦ÅÅE=yòDívÛÀ.׆þââÂú‰¤Óé) ‰D”Ëå ô×} üš0#yˆr‰º{ý| °ã{Ù’ÏlùÌ‘iJ”kggG÷îÝS½^W¯×39 Ï=$B¡¾ÿýï+¸6?þü‡äkd(… i%úLF®Ñh¨^¯[ÄýCº6ý///kaaÁ$KdMô0o™X,¦f³i¤…s§s;kV’êõº”Ïç­ZسgÏ´¾¾nÏI@ ~  WWWúÚ×¾¦h4ª>ø@FCµZMï½÷že¸¸g81]W¹b¯ÅË™"ƒ‚fiiIÇÇÇ’dþ(®?„—‚U*[‹H¬¸7t?/ V ²Â|çêêªö÷÷íÙ&F_ö¾“})›)bLiâxÀ°a Ì‹Ü{fðÃPÈË•8G鯰íÿ ¨À(ê%µ±±¡P(¤t:­Çk<«V«i4Yf #,@ð˜Édtrr¢O>ùDJ¥Rü02#•¢+5ç(£¤‚c§Ói½ùæ›z÷ÝwM¾‚„ƒ¦iétÚ®Ó‰X,fr%2Ì!s°¼¼lÙ*Öh«Õ2©×åå¥677-ƒòüùs#TwWVVt÷î]]]]éôôÔ|.hëyVŽ-Šï×A$KdÃø óH&ƒ9¢z`•g*‘HXùY®5—Ë©ÙlZ¤mµZU,³Œ™6ŽwëÖ-+¯û÷ïëôôT‰Dˆ–üsýþû†Jc>3J Ègý¸gívÛ2 ºíímèí·ß¶>%­VKétÚ"ø“ÉÄÅÙÙ™Ý/¼™LFÝn×`âs`æ9§À÷êôôTƒÁÀ2Pì×ø%8Äruûömó{ŒF#“OùLy<·w ÅضÛm»_ãñX_øÂtpp0•eôÑh¤l6«Á` ÓÓSóƒp~ý~_<ÐóçÏU©T4 ôñÇëáÇ–¢S<]ÐÉäóù©,üËŸ•kžU™ÏbÌ È+:Øä=8ä…ðd“õ‘':(òÙ6z"NSÀ“$«Lƒ6PC´ËK|øN?#«Â ˆïa aB;îÎDԼ̌ìÇ(s \÷Ä#*ê â¼h½·ÂGÑ%M•Š%:‡dÉ_/„‡¬ÇñÑY¾‹þ €f~€0Çœ'/+++VQÆK줂éw¶i„bvqqa>/LJzþü¹éÌ`†EvqzzjD’Ƚ^YYÑ—¾ô%ççç:::šZ;<°’¹¾¹ÜêêªÂá°jµš*•Š­ ˆôd2©½½=½÷Þ{ZYY1X,­4+$ó±«D¼kµš‘ ºR'â[¯×-ÂÊgñtà¯`®1ÐCØxnÈD½F'‡uïÞ=š¬…îÙápXõz}  ²©üD7oH“N§£p8¬T*¥Z­f÷­ÙlªT*‰B‹O¡æ¿r8ÊËÒ›)×x<¶¬Ð“'O”L&íú!~ñxÜö«Ñh¤ÝÝ]“çáÈårzòä‰€ŽŽŽlïaOà¹&ûº»»k™ü0áoݺe@o•Ä–Qz¢~çÎë;YDþGt~eeE{{{Öвßï«ÓéØs<”Ïç-Æ~:õá‡Úž€‚¼}r0(›ÍªZ­ ƒº{÷®*•ŠR©”y.hI¦2Àœ‹EµZ-år9åóyœœX…7_ÑêòòÒ|§§§&müñÿq½÷Þ{æa/¦Ï-„—= ÔîŢvwwÕívuûömu»]órƒÁ©Æ˜¼F£‘b±˜U›{úô©eG†‘ÌÃÃC“ò‘A%ó)ÉŠpÏæc>æã7æä>:MÄ’,`0DôÆË“H,οÀµ^Äßg= ®¬¬xç@€ yRIöÒâ…ϵù}¢ã€G"åþû½I›yð:k"·¾’’¿ÞÙÌßåØ €ãó\3sëM·œ¥Z½§„ùödË“N®‰Ï‘äEä|‘=p‰8#ûñÖ‚'f¬ 2hétÚ< Èá666ôüùs+“‹ÅL³¸¸¨T*eÒ½`0¨ƒƒµZ- ‡C“Áq,ÀRÀ%6)¯J¿îY P6›U¿ß×ÞÞžêõº™ƒñnäóymllXéRÈZ P"‘P¿ßW­VS§ÓѳgÏ”J¥,ëU©TÇõÚk¯i8êààÀHX(²¾‹‹‹F„õH²ª[@Àzƒxò»¹¹iÙ,ªM&•Ëee2{ …‚­@Ñúµµ5{nÈT´Ûm3Ûò,âÁ¡’”õõuu:õz=5 µZ-k¬‡¯¦V«Y'ΕL"~<k}}ÝÖâþþ¾Ég8‡õõuËp]\\†Œœ|çw”Ïçm¾¶¶¶,ˆá ƒygßÁÜí}o¾ù¦†Ã¡b±˜.//U­V-ËCu/®°¾¿¿¯Z­¦×_]ƒÁ@FÌ!fx<|õ1À{¯×ÓÅÅ…ŠÅ¢y …‚ÖÖÖŒl‘™ôÙ#I:99ÑÊÊŠnݺeäöòòRñxÜ<KKKªÕjVªiEÌkÑn·U.—¸Rv3y·ÛU«Õ2‰j42Å7›M{&ÿàþ@<ÐãÇ­:}n¨æå%O’´±±¡|>¯b±¨jµªh4jœ|>¯l6«çÏŸÛs U*•,˜ ŽÅbª×ëvϒɤí3ÕjUggg&C¢ˆ×%™L*‘HÑñ~Ê—5æùø<—ÿÄÌÇKDþÙXÚÌZˆÇãÊf³‡*—ËǺ{÷®^¼xaÙl6«f³i$*›Íš1{0(ŸÏ«×ëÙçÉl"£Bµ¶¶¦b±¨ÿõ¿þ—õ†à9FFÅÒívµ¶¶fD„`I»Ý¶¾_üâõÎ;ïLÉ: øb ‹=2—Ë©P(hqqQçççFîZ­–eø(M éÅb:99±æ‹ÈÜ$éÖ­[*‹æ-éõzj·ÛÖ êô’ð²?F#ݾ}Û²_NÇîÙææ¦¹íím ›H$¢R©¤\.§L&3Õ¨¶X,š7°Õjiww×ÖÝÒÒ’>þøcmoo[ðƒ~"ÈÇð@±–ð{¬®®Z_ü1µZÍ êÙlÖž'‚\Ex¯ ŒÅb:88ø£¼‚?WcN@æã³¡o}ë[ßzÙ'1rãüü\¿üË¿lÀÂWÔÐB(|%/Y"b ð™5Ûöû}ÓÞòršõF‘÷ݳ}Õiº) çÈÿ1v®R Ý€u²<=æ|³=i:“ÁïúëàxZ®Í_'?G:Æïú!l\£Ï$¼!“h­ÿÎR0++›ý^²üòáÏÏGؽ¡ŸëóÒä,@À|DDÉ}M¿{÷®¾ò•¯è»ßý®y’ƒÎÎÎ$Ý4Öƒü‹EI2ÂÌÜ"ï{O ™A"Öëõ,’Ûjµ cf¥ïþJ̧’U*•2@‡'„2¹˜o™¯Éd¢F£¡••mnn*ŸÏëââB­VËæ&‹iaaA¯¿þºeÔø²‹‹‹êt:¦e' E V$L¬ëíím…B!OEóóù¼®®®Ì IÌf³ö í_ZZR¡PP Ðùù¹É«þ q¤OÂÊÊŠZ­–í dG‘f¥Óie2“n±ÿ@fÉBî‡Ã›Fq’ÌpM°¹ IÞÒÒ’Ú?úè#ë¥Â:¥È†4›M½ív[KKK¶v=©ÇÊd2Ö%ÈRgŸ?H'Ù(žÍúúº‘Õ»wïªT*i<¾éšŽ·Œ†{I*—Ëúæ7¿©ÿûKø3¼×½÷ðsðŽ~×6?ºcžyE/~oR†$"‘àH7åg‰šc´lgA; ÀŸïóÒé†yÒ‚— ‚Áñx™20„ÎÊ€ü rÅKÀâ}+À(pž”§”dDÁ+^€2'\oìæïƒ—AbøwÀóF†h–,x@ÄË£|–Åg~øO#ƒÜS¾[ºößd2Ë‚qMœY(̼ÉßþíßÖ‚U£ºw­aà _’“X,f2ñâ⢺ݮöööttt¤‹‹ Åãq‹X"”dĆH(~ €|¹\6ç;UÕ&ƒ…îÞÏ;0ÖÃùù¹Ò€ëpuuUGGGSÐÉw¤É A$ÑÌ·ÛmU«Ue³Yïœk»Ý6Y²0¤ˆR¡hqqQívÛ¤Oì<[ô›@6Ç|P•h2™X¶‹5€QÜÝt:m×é÷‚ HϺݮîܹcz{¢ä‹h4j„§R©!%ÓÃóP÷ûD”g›¬{˸’¬*„ |“D$GöÏþY…B!U«U={ö̤¨Dè} ‡€@§Ó1©%ÒÄÁ``Y6Ï2•Óè·‘N§­ÀçGÓÎÛ·ok2™X¥V«©Ûíšðêêʲ]§§§–E„ü!;>>¶½™-Y!üiÌ7UË(~šõ~»F£¡D"¡P(dÏ9æg2™(›ÍêààÀ¾[¥R±kŽD"J§Ó‘dEhª9 ´¾¾®@ `Þúð†iV™ÉdT©T4Ôh4Ì+ó£:æùø,Æœ€¼¢à è$~=ˆŸL&¦É–4\ÉTðs¦ÏˆøÍ MÓK xÑt½‡ÄK5¼ÉÿòO^8O^:œ§'DÖ‘+ðo%¾ƒãŒxÑâ›ðçè#àÌìÄiÙ/i›õ¡xÏDÂû=<Ù˜½¯Þ õdŒcò}>+å׉¿^@,`’J5ôÖð®w{{Ûä(˜XS©”ÉþÖßú[úoÿí¿é?ø}7eZÃá°i¸9"±Ü«r¹l’*kݺuKápXggg¶†ÉE"mooëøøXWWWŠF£ªT*êõzÚÚÚ2àØaθOív[ÍfS‰DBÉdÒÈ0‹ð`\^^j4@# Ûï÷Õh4¬ü*×)ÉtóT‡’d¥G‘úÕ£ÑH§§§º}û¶€jµšUâ¡j€¯Ï~…B×=@"‘ˆ0"ÿ_Œû^rç;sú©ê5|±–¤›²×¬[H&ë~4Y%*äLÌ%`:N[IÕ`ðºë‹gìµ×^Ó`0P©T2£4òKŽ·¼¼¬\.gçDtˆð`0Ð;wlƒ–…"Ëا[øææ¦”Ïçõøñc“[~ôÑGæÿY^^V·Ûµè¿¶C”![½^OÅbQ[[[:::²9J$v\î ž†~Y²Ù¬][&“Ñéé©ÉÐØó9.¾:H ë9›Íš¿‚ç’*U¼ ȶð¬Hפ‰"ÙÕÕU{Î¥kï Y)JÿF"#È"ßKùb¼T쟤›HFuvv¦T*¥L&cÏ8×Ôl6ÕëõF­2.Šg¨x™Ã†æc>þ´9yE‡Þà-ÝÈ—Ð>jïå@TÄš•?!³‘n:^ór$úîýŸ˜=WŸZ øïà‘ñÒ OªxùJ]ÛKšÞÇÇÇJ&“ö»H˜8'È$çZ]]U.—³ªqÅbѪÒQl‰_ 0{k/Ï•ô0¤³†ñ·I²?C¾!{”SÆ Oà¹{˜••+áÌ}Ák5ó1¸1' ¯è`ƒ÷ŒYy ° órpîó¬t@èÉŸƒøxÀî3€t"é€eŽˆ& à>çíIˆtÓ+Ã,戟þ}ߢ֜3ÃgZ|Ä—sô×í%[Þ[±ù]/gã3^æÅ|øjW|§Ïùùã:š^:0|$üœD"»Ê®’YXX°Šao¼ñ†R©”~ÿ÷ß@3ÀPÜh4ôýï߈$&hO˜i†T0›l MæÈÐÐ!0DŸ„­­-ëˆ)ÍڢѨLú±b-x(­ë{»ðœáÀ„0ǪV«ŠD"v|@!ë˜cãà™ã˜<‡€zªLaXG‡,‡çx8ªZ­ZGi¤$þ8+++ŠÇãª×ë–ñóY8¤M¾šW»Ý6y~¿o¦þN§cU° ÆBæ•c“Ä”^­Vµµµeò›u:Ú:ÇãŠF£j6›ÚØØ0cq8ÖÁÁÆã±ÎÎÎ ¸ŸžžN5ôÄ'Ñív­#øÂ‚5ºFzúô©I±ypº¾¾®[·ni<[Ij²ÚÜÜÔÓ§O­ºûD3‰¨^¯Ûò„S=ë€rÕ”ìåwè™Òï÷Í´Ž¡œl+{ž‘f³iž @áþM&%“IU«UI×fm$¿CsC[’5&sC±ßL– E: ”ûö2í¬•^¯g쑎I²lï3æ¹û+Õ°*•ŠeÀ|N’p(—˺¼¼´L ëÍïû/sÌ3 óñysò /ƒò‘_~–ÿ¼ì @;+ò€Ú“/eòÒ,^VD÷~øÍÌKÑGèš\/6º‰Ìù,ÿ÷þï»ð™ ÿ;|Æ‚7n3_d-ü\3Ç\;ßïIÇñQN/˜0œßÁ½äü9¶ÏŠpx€4å~>¼< H$BŠ~>˜A2tçέ®®êþÏÿi #‹Ùçy±0Ñy{c½/ÓLŸ‰­­-žžjggGÇÇÇ:;;³Ïܾ}Û¢“ÞëÐï÷Í‹A)ëÿÑxzœìììh4ºîÀBF…ÁÉä‹R´KKKeõ=bÿ¾ ¦j4ô¾9(2°ååeÅãqÕj5“.ñLõz=%“IÅb1µZ-Õj5 ˆPÅŠè<Ò%ú€]€ðCRÈ2aÀ¦t* H üA2–¡PȲN?ÈŠÅ¢F£ëBÕjUOž<™ŠìrŽŽtvvf¿ë«AZ‰ì¯¬¬èììÌH“$›k€q4U"‘Ðêêªá‘"ÛK$zöì™ŽŽŽlߥjÔh429ëƒ{E'úl6kë¸Ýn›‡ éQ¯×³L’9®ž.^BésAV’L†ƒ$ãñuíX,f îY8V<7Ù>žeÈ ä!ŸÏ›\Š=ŽuÉT É–Ù>Óá³’¦=çì#þ>Óá³d.¾Ç—Úõ`Ÿï#›@”—ùð™?Ë“¹Ù ŸgOÒ>møM á%\~žip¿f Ÿá¼ýµ{/Çâ|}&Äg¢˜3"ß4¾CÞ3,B ¨XZZÒ“'OL¶(Cê3 trr¢­­-3òóf³©\.g™®ŠC“ÉÄHÑrÊóŽF#ó=p΀XšÁùjEôs€,--Y3[·ÛÕÕÕ•v¼———Êårf¦Äïòò²B´ï¾ìu0´,^ v»]+ K¥®R©dçvuue¥M1­ØÀ(IDATG£Qmoo«R©X•ªq˦HšÊJP͈ŒÏ Ä‚5á& ‚L޲»d-ØÖ××U*•ÌH½²²b%qý~PˆcšÇHœÏçÕét,‹Ä3JŸö2 µZMçççVy ý>žæ¿ •Çh4 …¬Ò¤žÆ‹d”أѨîܹc@” €H»¨ØDCE|,<|‹‹‹*—Ë– "ñ¾¸¸ÐáááTæpíåƒìÉ=šÒ·‚LX 0¯Ž/ñLЯÅÕÕ•âñ¸’ɤêõº‘Ê~¿¯7ÞxCÅbÑ"+ãþã£aî‘yõû}#´Ìó0™\—Xîõz–-ä¹äß«%“IIR*•š ñŒBz!˜ìs+++ÚÙÙ™’uær9•Ëe¥Ói“ú˜¢M1Ö þ¬ù˜ùøÃ9yEÑq^î³™Y_—lx©`Чê=àeÅšÀÓY™è¶÷fyáðg¢Ã¾Äï,à&Kã=\¤"]’¦þ¨àÅèMݳ™?7Ô­÷^ ?þ̹pÝ^ÒÃËÒKѸ>OÀÈìx2é#È€ÿw²>þš©žåçÏûE¸næ2NUòZ^^¶HâÑÑ‘EׇáÚí¶R©”6yá{ Ž$’€Zä;“ÉD;;;ŠÅb–9;::Ò`0° :WWW:::2C. Žì¤IĘŒƒ_×ÈÁ0­’ý¬—J¥©ç­þ`0P¹\Ö—¿üekvHÿ žƒF£1%çc-@äÀÉdÒ@£–(  -ÊΚ ‡ÃÖᚮ۔3f½q‡Ã¡Uàòr5ºys˜7²W@*ë¢ßï›Æžr¿DÞ°€Io§šœ¯,&ÉüeD˜œñx\ëëëªT*:991 𽸸0_Âh4R¡P˜êB‰VLØÜŠx@4U&“Q.—S<—t F}ñ ²f’LzØjµìúJ¥’oÖÞ!ò]±XlŠH°/„B!e³Y»Wæ} {€âÞjµ @ì9Oª[õû}mmmYˆ${$”σAe³YË8!ë♆Br‘o’¹à݋ʼnD¬ Y_]‘Œ1òK*§µÛí)90Ï8k€r¹ì!>äMéÒuigî5•Ì(èà=dìAQ¤œ·_·/sÌ3 óñysòŠŽá𦠞—I7À(Úh6c@ÀSº©Úä£äÞX@æEé Ñ^J%ÝTZòY~È—nAI7ÙŸ%àü=áñ„Šï#*ÍÏ^Ì a¾Çsÿ²óò'ˆÇ“d ÏÎÝËɼéÜ@‘`~×{B|Æg{ü}âß¼?„u9ô2.I¦ñfÍP&5‹éÑ£Gö{———Së ð À¸N„òáÇzúô©ùX§Édr x£Ñ–d±)Z*•L²¼¼¬ËËK‹øJúý¾...”N§M«> LGF•L&õèÑ£©¨¹/ÙIE$ÖX:V±XT Э[·T©TT­Vm]Ðqšg* Ù=$3á+Ñ"‹immÍHc½^7ÐÞl6-; ^÷!9==µ{²¹¹)IÈ}DÝ8À2Ï&ý6<`E!#pPäû|%.ž²8^"å³¥Þã¨ãy@8]WöŠÇãÙç~ ™b/..ì;R©””! x&È| ‚¨G"Ûƒ `T:{ë­·tzzjÕ«*•Š666T­VõüùsŸŸ[Á€8¤RLe4M5ƤÙ%Y4 øÙÀ0€@Ê=Èör€+¿(å%ëI äÄG…9OI&»!B7÷Ò#ŸÁ êeK³ÑgŽ˜•ñw€ èò‘"O ˜'¢|ÌÇðĈ—·'|·Ï”ù.>ϼB,8¾¿ ²,ÞtéÍÞ¼Ì=±[]]U:¶2–ÒMå3Íy“*ç„G!OE¼!WWW:??·(<4܉DBñx\ûûû­,—Ëj6›SÄ.ªÛíjkkK­VËÀ •w€²Ù¬!Gܯ……ëF…*úCÐÐ{˜¿X,¦·ÞzK=R8Ö;ï¼£ƒƒ½ùæ›j4Vn´Ûí*•Jpaîýúã¾-,\÷E¹ººÒúúº?~l†\~ŸëÁôÎ3hj6›vOg³”õèñüñL&óqPö”õæÛ4¼%xX×ìmDþ}i奥%­­­Iºö¡ $™dǤ‡D:‹Ùy‘…ð2Qî{$Q.—S¯×3 Ï…@ÙEÌûápX‰DÂÖ8²._ög’ý½ßï+N›¬ŠêqìÕÈ6ÉIJ0//{¼Œ ÈßøC?øÁôoþÍ¿Ñk¯½¦oûÛú¹Ÿû9ÇcýÜÏýÜgr>óñ£1æä³ª/_ àÜ@½NÛ^ÈD?ù3Q9þLäSßìyÌúØüˆâôÚi2¸{oË_¿ú/Ÿ ’~X¶â_ŽD½¤Š,Ñ`&™ŽçIQMÀ߉?w¾ß“ "·^–æï—¿¢Õ̽7¢‡çÜüZ`Þ(íÙívõæ›oêáǺ¼¼Ô‡~¨ïÿû©žT­V-êÉËÞ›Á×ÖÖ …,Ê”‹ûŠßÍ=º|tåFC’T(´¾¾®µµ5“nµÛmÓtc ä`ø^\\T:Öh4R>Ÿ×éé©‘Ün·kMÜïx4¸˜Ï?üðC‹äv»]ÅãqµÛmÕëu‹Nª|`†ˆ>køöíÛSþ2ñxܪZy@ I\XXPµZ5’J¤D"¡t:m=@| kÖY+žÀÄ ÀMó5À¶×ÃCúý¾’ɤÚí¶IxR©” …‚5ò$ãµI$VIˉ rNT> š)šsäØØØ°†ÉdR·oß6ßÅéé©ÎÎÎLŠÅ~À¼­¬¬èþýûº¸¸Ð|`àúéÓ§SÈ)‘rÈ+Y.žŒË’tÿþ}µZ-U*ƒ×å†ÉH2ÀTheež—µ½´´¤f³©õõuÛG‘žÄ yä“yã™÷Ò6IV ‚{Jö‚õÁ½‡ŒZ@‰Ázœ•·‘¡âyá;È,A@y/ÐÅœû ñ¦[}.—3Ð?K1‘³²¯û,óÚÚšÖÖÖT«Õ¬ %xÙŸù}4™LêôôTGGGJ&“¶~Éê¾jã·~ë·ô;¿ó;úÎw¾c¿øÿ¢õÿñ?ÖÏþì϶˜ù˜sòŠOû m÷U–üïxø;Úo/Ãò2$éÚØØjµ,â³&žðÂ}Å#Ή49/4ˆú|¢zÞÛà%RÓ›=áàœýùƉ¶úò¶¼œügùl×Àçg †÷‡pn^Ò剀hòòãÅ áòR7é¦ö=?ã8\;À‰F[tJ&‹å^¦ˆÎ¾ÿþûª×ëzóÍ7õî»ïJÒ”ñ“߉F£ÖÄm2™ø+‹ºÿ¾îÝ»§b±¨§OŸZÕ¡?ÿçÿ¼>úè#---iggGûûûB‰„¶P(¤ …B!“=Q6–ëØ$ ‹B©. ÊårÖˆíòòR‘HD_ýêWõÉ'Ÿ( *•JY§qHÆøZ­¦³³3%“IµZ-‹>-¥RûЧD’y#|u¸f³©F£aàx4º®¦EÄzssSÃáuÀ'QeîÂöööìü0QãÁ !ÃÐK&¢^¯ ör2À†y1x¶½ÍfSKKKÚÚÚR±XÔ‹/¬li$±òÉ /­è“UØØØ°õH¶éš—âÅãq---)“ÉØœÜ¾}[FCççç*—ËSdŸâ¹\N©TJ———Úßß7I¾ª¢‘Y¡È@¥RQ&“Q³Ù4i©h4:忪×ë¶^16g2[½^Ïš²>777•Íf­7À½V«Y¿ŠT*¥ÃÃCk$è»{BKÏžN§c„†ŠUOŸ>5¢„ôF}dÅZ­–âñøy¥ÿM»ÝV:6)ûh³Ù´àÙ&$bd~د"‘ˆöööôìÙ3+àÀÚcß÷Á Š7xV4Õx<¶²Ùjªw±†s¹œI%—––Ôjµ´½½mɺݮ헃ÁÀÊ[F×ý`ާü/{üIg@þËù/ŠÅbú™Ÿù™©Ÿÿ½¿÷÷ôó?ÿóúÞ÷¾§?÷çþÜgrNóñùsòŠßëÄ‹€è¥L€\6"^H¾‚'’¦$ND”½ÌÊK^¼ ï%JTY¤á¸“‘@†¨ñ¾L´ÞT øçX>²æ Þ|'/ÂD"aõ÷gɃt#¯ò¤Ï›â}D™c~ Ì-÷„cy påß™²+^{aò÷‚¨#ÕžˆÙ†¨Ò=ÙÀùñãÇS§jµªr¹lµû¥)VWWõÖ[oéöíÛzï½÷´µµ¥ •J%Õëu¥Óimllè£>R<W:¶ï:==5sq½^W«Õ²J7ø= ­x5€J¥’<———ªÕjÖ€, šÁ™ˆ3ÄÄGÊÆÔšCòôðáC-..êôôTý~_ÕjU½^O;;;SÚx*Yq߸GÍfSÙlÖ½:$YDù >€ÑhdfâL&£F£¡d2©««+‹E»'ÅbÑ¢æDž»ÅÅEËš0×ÛÛÛjµZ&ÂCryy©µµ5«hÆ3D6ó°7¸‡Cår9Çcåóy#‚>³È51O˜ÁiÖ·¶¶fÙ#ßPp›H$l ôû}œœ¨Ñh¨\.k<«X,* AÀÇc“õ@ÆÊ岒ɤU#ãa—®Áíƒtttd{$ Ï UÝÈð}üñÇŠÅbJ§ÓVŒg`Ï zö왢Ѩ‘,:Ó³/ŸŸ[T8¶ì ç‰D”N§U«ÕL¶yÀ‚9÷ÂÆ3ÅzD"V}Šì{û™/éÍš<;;³ìË`0ÐW¿úU}ðÁÖ ˆ}+“ɨ×ë)•JÙ¦›9ÙMöÖèÅÅ…ùÆ‚Á ªÕªõoÙØØ0 (Ïøîî®^ýu}÷»ßÕh4²y£¯ÏñññT±Šp8¬““…B×=@&“‰õly•Ƈ~¨û±û¡ å›o¾)IzôèÑœ€ÌÇÿuÌ È+6x±Qµ„¨:$ƒá¥Dc‘;ýßä>Þèè3^¾å½¤ã}µ$¾Ûƒ}ÀÀGÄ "uuu5eGVÂð:^ošõßÁŸ½œŠˆç1™L,Š„Âg|fÅ“ÿ»þ|c'猙-5×Äß9&שÀøì–÷œðýôüð÷Ù4ßÌ#žÈž={6Ef˘“á°Þ|¶&ëääD?V.—ÓÿïÿÝšÈ-//ëw~çwìXOŸ>5‚‹êüüÜôÝD'É@*;•J%3¢B¡ëê:T :;;S±XT<W¿ß׋/¬±ÞJ#}°|uu¥T*¥¥¥%½öÚkúÞ÷¾§ýý}Ë. ‡C™Ü I Ï ÏÄÊÊŠÝ—@ `%vŸ={fä˜Ì>@P P«Õ2·´´dæø““‹ û,ÀÊ“ñ@ `fö 5›MËøÑÃk€¬ Cº©~—Ífµ´´d>/Bêíù@Á ï]XX¸.éÚl6Ͱ ˜k]ZZR£Ñ°‚DúÉ$‘ÙÞÞÖêꪶ··U¯×­“=‘ñ‹‹ U*“\áYÚØØÐ“'O‹ÅÌOR(ì\‘B !$»»»ªT*:>>Ö½{÷t~~n}@ÈÌÑw„kN&“*•J‡v½ÑhT•Jeª— Aü/WWW*•J¶_}I$:<<´µCu6ŸõU¥üû ^¯Û±ÄF°‚9 ‡ÃÖƒãy½^7£;×ÁÑl6õÉ'Ÿ¬×ëFÒ …‚.|¶}ggÇž®õþýû:88P0T©TR:6É&{þ§ããcÛûèÄþ@ÆÂB‚uǵ³³£Z­fþ(Þ/£¯÷Ÿ|VYOÕjU÷îÝû¡ŸÓ„Öûçc>fG`ò'¹Zçã¥oûÛú»÷ï¾ìÓ˜ù˜ù˜ùø‘¿ú«¿ª¿ówþΟè1ÿÃøúûÿïæÇyüø±îß¿oíµ×tïÞ=ýÖoýÖÔçÎÏϵµµ¥_üÅ_Ô?ý§ÿô3?¯ùø|Žyä?õS?¥_ýÕ_ÕÞÞži¯çc>æc>æc>æãÿÿ¸¼¼Ô‹/ôS?õSâÇþkí¯I’>|hRÍ?î‹Å¦È‡$e2™OÍrп(“É|&ç2?cž™ù˜ù˜ù˜ù˜?Òøæ7¿©ï|ç;Ö\•ñÿãÔÏÿüÏëw÷wõµ¯}í%žá|üióúhó1ó1ó1ó1óñGý¯ÿuu:ýçÿüŸ§~þ+¿ò+ÚÚÚÒÛo¿ý’Îl>>c.Ášù˜ù˜ù˜ù˜?ÒøéŸþiýäOþ¤þÁ?øjµZº{÷®¾óïè¿þ×ÿªoûÛSMoçc>fÇ\‚5ó1ó1ó1ó1äÑívõ/þſЯýÚ¯©V«éÇ~ìÇôÏÿù?×ßþÛûeŸÚ|ü)s Ö+2:Ž~á~A[[[Ö{á?ý§ÿô²Oës9:ŽþÉ?ù'úÆ7¾¡\.§`0¨õ¯þÕ§~öÝwßÕ_úKI±XL©TJóoþM½xñâS?ûïþÝ¿Óǵ²²¢;wîüíÝ[HTÝÆñßmfB¥w,ì0R†TEEÐE*˜”aÐE¤•Ùñ"è`BS£vQ]d††ÑA*£@ÇTPt>\t È2K²²0ïÅŸ6Í;öò‡×YÓä÷l­ÕfÍ3<±ÝK¶mÛôºÔ¾îÂ… ²hÑ"1b„ýJ×Ù³gË•+WBÖ’{ï¹}û¶äææJJJŠ8N‰‹‹“É“'KeeeÈZr¯Ùó3²G$ÄÅÅÉ®]»ì×ߺu‹òÿ¢O˜1c†z<Ý¿¿]ºt©Z–¥GމôÖ¢ÎóçÏõ¯¿þÒ¬¬,;GŸÏ²îÑ£Gš ™™™Z__¯Ç׌Œ õz½úöíÛ µ~¿_‡–””hSS“VTT¨ËåÒeË–™úX¿½üü|ÍÊÊÒ}ûöiSS“ÖÕÕiff¦öë×OìuäÞ»€®]»VkjjôÊ•+zþüy-,,T˲Ôï÷ÛëÈ=¼š››uÀ€êõz5!!!hŽìD HpæÌµ,Kkjj‚ÆsssÕëõê÷ïß#´³è×ÚÚúË’ŸŸ¯IIIúñãG{ìÅ‹êt:uÆ A÷p»ÝZTTô÷ËËËÕápèÇÃ÷¢HKKKÈXgg§&''kNNŽ=FîfLŸ>]‡nÿ™ÜÃkΜ9:oÞ<-((Ðøøø 9²mx«8qâ„$$$H~~~Ðxaa¡¼zõJ®_¿¡E?ýůPuuuÉéÓ§eÁ‚o>\²³³åĉöعsçäëׯRXXtÂÂBQU9yòdx6e’’’BÆ\.—¤§§Kss³ˆ»IÇþ™ÜÃëСCréÒ%Ù»woÈ¿9d Q@ú€û÷ïËèÑ£ƒÞÓ-"2nÜ8yðàA$¶õG{úô©tvvÊøñãCæÆ'Ož<‘oß¾‰Èÿ¾Ÿã?2dˆ 4ˆïç_´··Ë7dìØ±"BîᤪÒÕÕ%>|ªª*©¯¯—õë׋¹‡SKK‹¬[·NvìØ!Æ ™'{шÒ¼{÷NCÆŒõt’)þ›™þ*wU•÷ïßÛk].W'Ó{<¾Ÿ±råJùòå‹”””ˆ¹‡ÓŠ+ÄétJbb¢‰ßï—Õ«W‹¹‡ÓÊ•+e̘1RTTÔã<ÙˆFœ *•––Ê‘#GdÏž=2qâÄHoçWRR"Ë–-“ööv©««“M›6ɧOŸdëÖ­‘ÞÚëØ±crúôi¹sçN¤·½ŠÒ 8°ÇÿÙjkk³çÑ»~dú#㟵µµ‰eYö3ô”¯_¿Jgg§¸ÝîµS¦L ÿ†£ŒÏ瓲²2)//—ââb{œÜÃ'%%ERRRDD$;;[‡øý~Y¾|9¹‡AGG‡¬ZµJÖ¬Y#ƒ–>ˆˆØSµ··Kll,ÙˆJ<‚ÕŒ?^=z$ÝÝÝAã÷îÝ‘ŒŒŒHlë6räHéß¿¿Ü½{7dîÞ½{2jÔ(q:""ö³Ûÿ\ûúõky÷îßÏ?ø|>ûÚ¸qcй›3iÒ$éîî–—/_’{´¶¶Ê›7odçÎ’˜˜h_555òéÓ'ñx<²xñbIKK#{Q‡ÒÌŸ?_:::䨱cAãÕÕÕâõzeêÔ©ÚÙŸ+66VæÎ+Ç—ŽŽ{üåË—ÒØØ(yyyöجY³ÄívKuuuÐ=ª««Å²,™7ož©mÿö¶oß.>ŸO¶lÙ"¥¥¥!óänÎÅ‹%&&FÒÒÒÈ= †*쫱±QfΜ)n·[€øý~‰‰‰!{Ñ'B¯ÿ…a¹¹¹š˜˜¨•••ÚÐÐÀA„ÿÑÙ³gµ¶¶V<¨–eéÂ… µ¶¶VkkkõóçϪªúøñãKNNÖÖÖÖ û•••Ù‡ƒ­¨¨P·Û­Ë—/ÄÇû-íܹS-ËÒÙ³gëµk×ôêÕ«A×äÞ»Š‹‹uóæÍZWW§—/_ÖS§Né’%KÔ²¬ 3&ÈÝŒ%K–„œBö¢ ¤èèèеk×êСCÕåré„ ôèÑ£‘ÞVÔJMMU˲Բ,u8A?¿xñÂ^wóæMÍÉÉѸ¸80`€æååé³gÏz¼çîÝ»5==]].—¦¦¦ªÏçÓ®®.Sé·—••”õÏ—ÃáZKî½§ªªJ§M›¦GcbbÔãñhvv¶>|8d-¹‡_AAAÈIèªd ºXª¿8I z¿À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0æo™=m½õªìIEND®B`‚pyepr-1.1.3/doc/images/modified_water_vapour.png000066400000000000000000001253771414372560000217720ustar00rootroot00000000000000‰PNG  IHDR V%4sBIT|dˆ pHYsaa¨?§i IDATxœìÝy|LçþÀñÏ™™¬D$BDl±ï*¨­–Xj©öÞR”.ªÕÖí¥½Z·%–¶.å^ÚªßÕ©VCm]EìUZ‚ZkIb ²ÎÌùý17adŸÌ™É$ß÷ë5¯ÖsžsÎ÷|3d¾sÎó<Šªª*B!„Bá:g „B!„(;¤B!„B8Œ B!„B‡‘D!„Bá0R€!„B!F !„B!„ÃH"„B!„p)@„B!„#ˆB!„Âa¤B!„B8Œ B!„B‡‘D!„Bá0R€!„B!F !„B!„ÃH"„B!„p)@„B!„#ˆB!„Âa¤B!„B8Œ B!„B‡‘D!„Bá0R€!„B!F !„B!„ÃH"„B!„p)@„B!„#ˆB!„Âa¤B!„B8Œ B!„B‡‘D!„Bá0R€!„B!F !„B!„ÃH"„B!„p)@„B!„#ˆB!„Âa¤B!„B8Œ B!„B‡‘D!„Bá0R€!„B!F !„B!„Ü€B!„°Ý©S§¸sçŽÍûûøøP¿~};F$Dþ¤B!„pQ§N¢AƒÅ>ÎÉ“'¥#ˆB!„‹Êºó1°aÿëÀêûŽ#„#H"„BáâªÕlØO> g÷B!„‹3n6î'„£ÉûN!„ÂÅé±íCÞÞQR€!„B¸8¹"\‰¬"„B!„p)|…B!\œ<‚%\‰ÜBhfÿþýèt:Ú·oŸëö¨¨(t::Ž .äØ~÷î]ÜÝÝñññÁd2ùüÛ¶mC§Ó1uêÔ"ïkO:uB§Ó±~ýú|û©ªJݺuÑét=zÔAÑ !Jƒ¬G°Šú’o¢…3H"„ÐLhh(~~~ÄÄÄä:Ç|tt4Š¢ ( [¶lɱ}çÎFºté‚^oû÷tŠ¢Ø¼¯=¼ôÒK|ñÅùöÛ²e qqqtèЦM›:"4!D)‘u¤¨/¹"œA !„fE¡[·nF¶oßžcû–-[èÑ£¾¾¾¹ Ym=zô(Vªªkÿâ2d*Tà§Ÿ~âêÕ«yöË*PFå¨Ð„¥„Ü®D !„¦²Š‡ Œ³gÏröìYzõêE—.] U€œø€ŒŒŒ1ét:ÂÂÂHHH <<œ   _~ùež9ðôôä¹çž####Ï~7nÜ`Íš5øúú2dÈ"##8p uêÔÁÛÛ___yä¾úê«\Ñ­[7t:Lœ8‘<==©W¯Ó¦M#333×ý6mÚDïÞ½ñ÷÷ÇÓÓ“ 0aÂnݺ•£oíÚµ Éõ8S¦LÉ5¿¶äL!Dé%ˆBSYEÀƒFtt4aaa„……qáÂN:•½ýæÍ›8p€€€Z¶l ÀêÕ«Y°`µjÕâ™gžáõ×_§Q£F,\¸¶mÛrñâÅìýŸ|òI†X>˜O™2%ûU«V­ì~#FŒà™gž!..ŽÁƒ3fÌüýý™4i}úôÁh4渦7nбcGöïßÏàÁƒyõÕW Ì7Yw5.\˜ëö¯¾úŠŒŒ † †——¯¾ú*çÏŸ§[·nŒ7Ž!C†ÇðáÃy÷Ýwó<× AƒX¼x1ùË_øÛßþ†¢(L™2…æè;þ|z÷îÍž={8p o¼ñþþþ|øá‡tèФ¤¤ûØòH›-9Bž-_e½ò“œœÌرc ÆËË‹V­Z±|ùòãÙ¼y3½zõ"88OOOéÑ£GޱpwîÜáý÷ß§sçÎâããC‹-øðÃIOO/R„ Q…BcAAAª^¯W¯]»–Ý6lØ0µbÅŠªÙlV<¨*Š¢þ÷¿ÿÍÞ¾zõjUQuðàÁÙm/^T322rýúõª^¯WGmÕ¾uëVUQuêÔ©¹Æµxñâìs¤§§[m›2eŠª(Š:wî\«vEQTEQÔáÇ«&“©ðIPUµ]»vª¢(êŽ;rlkÚ´©ªÓéÔƒf·ÅÆÆæè—žž®†……©nnnê… ¬¶uíÚUUEmذ¡š”””Ýž––¦vèÐAUEýꫯ²ÛãââT777µbÅŠê©S§¬Ž5zôhUQuÔ¨QVíµjÕRCBBr½¾É“'«Š¢¨Û·o·j/N΄ùÛ¿¿ ¨³@]eÃk¨€ºÿþ\ß«W/ÕÏÏOýì³ÏÔmÛ¶©£FREQ¿ùæ›|ãZ¾|¹:nÜ8õÛo¿UwìØ¡®Y³FíÝ»·ª(Šúõ×_g÷;|ø° þýïW¿ÿþ{uëÖ­êÔ©SU///µgÏžvÍ•(9¤Bhî¹çžSEQ¿ýöÛì¶   õñÇWUUUÍf³`UlŒ3&GQ’ŸfÍš©uêÔ±j+¨y衇TõÖ­[9¶F5 @mÛ¶­U»¢(ª§§§U1UX .TEQŸþy«öÝ»w«Š¢ä8W^V®\©*Š¢.Y²Äª=«¹ÿ—{–mÛ¶©Š¢¨aaaÙmï½÷žª(Š:iÒ¤ýUÕÛÛÛª8³µ±5gBˆüe s@ýÁ†×œ| Ÿ~úIUE]¶l™Uû£>ªù …ÌÌLµzõêj—.]²ÛîÞ½«¦¤¤äè;{ölUQu×®]E:‡p 2öH¡¹îÝ»óõ×_³eË Äñãǹ|ù2aaa€å‘ž®]»²mÛ¶ì}¶lÙ‚¢(9 ýõ×DFFrèÐ!’’’¬¦çõðð(tL))):tˆÊ•+óŸÿü'×>îîîœ8q"G{íÚµ (ô¹²<ýôÓŒ;–U«VññÇãëë ÀçŸä|ÏÌ™3‰ŽŽæüù󤦦ZmOHHÈõ<]»vÍÑ–5ðÁƒ³Û8ýs¸ŸŸŸ­ZµbçÎ?~<û18[Ùš3!Dáh±Èš5kðññaРAVíááá 6Œ½{÷Ò¡C‡BŸË`0àëë‹Áp/Rooï\û¶mÛ ×)Ú…ë“D¡¹¢gÿÈ–Í«W¯æðáÃT®\™ãÇS£F êÕ«—Ýgܸq|ôÑGT«V¾}ûf?“ °xñbâãã ÓÍ›7¸víÓ¦M˳_nãªV­ZèóÜÏÛÛ›gžy† °téR^}õUîܹ÷ß~Kùòå6lXvߨØX~øa’’’èÒ¥ }úôÁ××½^O\\_~ùe®ÏG+Š’ëØ ƒÁ@@@ׯ_ÏnËdž×õpûöm›®÷~¶æLáÍ… زe þþþVߪg#ÑÑÑT©R°ž~÷êÕ«|üñÇ4oޜݻwS®\9«s,]º´H1eÝ} eß¾}EÚ·8늼ôÒK,X°€… òꫯòÍ7ß’’‹/¾huMÿùÏHLL$22’çŸÞêQQQyÎ ¥ª*W®\¡zõêVíF£‘ëׯS¡B…춬\ºt‰Æç8Ö¥K—¬úeF«Üæ¹XÏâìµX„(í²¦áµe¿¼Ü¸qÃêK ,þþþÙÛ Ò¯_?6nÜX¾„Yºt)ýû÷ÏwŸ?þøƒ?üЬY³Ï!\Ì‚%„pˆž={¢ª*›7ofÛ¶m9jÒ¤ •+WfË–-¹®ÿ‹ªª<úè£9Š .›ãœY‹æ¶ŠzùòåiÚ´)GŽɾâ­Zµ¢uëÖù„3gÎXcÒ¤Iܹs'»O–öíÛ“™™ÉâÅ‹­úGFF²{÷n¹Ó!„“f!ÂmÀÄ^óó9f¥J•r½Ë‘˜˜˜½½ õêÕ£uëÖôïߟåË—Ó³gOþö·¿åÚ÷ܹs„……áîîNtt4+V,ðøÂ5É#XB‡È*@> ä>ð9,,Œ+VpçÎ7nl5n 00§Ÿ~šeË–ñÐCÑ«W/nݺŦM›ðöö桇²` ШQ#ªW¯Î²eËpss£F(ŠÂóÏ?OÍš5 gÿþýÌŸ?ŸºuëÒ»wojÔ¨Abb"qqqìܹ“#F0~~¿¢‹nذaüãÿ`çÎ@λ`YdñâÅ <˜§žzŠ   Ž9ÂÏ?ÿÌàÁƒó‡¿iÓ¦4mÚ”§žz ƒÁÀ÷ßOll,ýû÷çÙgŸÍîW«V-æÎËk¯½Fhh(ƒ& €íÛ·³gÏ7nÌÌ™3­Žýú믳xñb^y墣£©^½:dÏž=ôïߟµk×Ú)KBˆ¢(Ì ô¾ÿ{ÝïðBý[´hATTf³ÙjHÖ¿ã¶<Õ¶m[6lØÀÕ«W³·KñÑ­[7EaëÖ­T«V­ÈÇ.Ä©sp !Ê”–-[ª:N­R¥J®ÛOœ8¡*Š¢êt:u̘19¶§¤¤¨ï¾û®Z¯^=ÕÓÓS­Y³¦:fÌõÆj·nÝTN—cŸßÿ]íÑ£‡êëë«êt:U§Óå˜&víÚµjÿþýÕ*Uª¨îîîjPPÚ®];uÒ¤IêŸþiÕ÷Á©lm•5—~¹rårXU-ÓóvïÞ]õóóS}||ÔÎ;«ßÿ}ö”ºN/ܵkWU§Ó©êĉÕÕÃÃC­[·®:mÚ´\×PQUUݸq£ú裪~~~ª‡‡‡Z¿~}õí·ßÎ7®®]»ªÞÞÞª¯¯¯Ú¿õðáÃê”)Srͯ½r&„È)kÞHP÷ØðŠÌgÞõë׫Т¨Ë—/·jïÝ»·Z½zuÕl6)V³Ù¬víÚUõ÷÷·šÂ÷ܹsjíÚµÕZµj©qqq6åA¸EUUÕ¹%P镜œÌĉY±b‰‰‰4jÔˆ &0dÈg‡&„(…ºuëÆÎ;s}MQ:ÅÄÄкuk¾rN%Q°ãÀ³Àþýû³Ç…ݯwïÞìÛ·™3gR·n]¢¢¢øâ‹/Xºt)C‡`äÈ‘,Y²„ØØXjÔ¨À_þòzè!Z¶lI¥J•HHH 22’M›61þ|F X&éС ,\¸:uêX¿FÛpe¢$“G°44`À€ì¿´ 4ÈþËj6›³ÿÒ !„BWÖ r[öËÏêÕ«y÷Ýw‰ˆˆ 11‘ƳlÙ2œÝ'kªÝû¿Ó~ä‘GX¹r%óæÍãöíÛT¬X‘¶mÛòÓO?Ñ·ï½ÁŽ;F\\Š¢X="šeÊ”)DDDØpe¢$“; Y·nýû÷'**ÊêŽGïÞ½9zô(ñññ9æÕBˆâèÖ­;vì°¤/„(ݲšØ°ÿ1à)ò¾"„ä°Fò[=4!!½{÷:)2!Di¥(ŠÌB%DUR§á"7R€h¤0«‡ !„=mݺUÆ!„(ñd ˆFl]=ôÒ¥KÙ« !„Â5ä´ók±ºZ‘÷] réÒ%ªUëœsv(B!„(’Z$$üê´"D áJä}§[VµÜù8‡åɸêÖÝ2áÉpxjྲྀC¿Â†åðö\ë¾_Ì€FÐã¯÷ÚbÊðÊd¨àw¯}ù ðLæý¡§hkØg‰ã*Ìüþþ"„Ô¸×uÙ÷ptÔ:¦LK›Ø ´²þÉ 7jÀž˜ò¦uh>€ÞaÖñ^Û¯ûaù0wê½6:>˜§Ç£NºL唹Aׇ'üõjêÎ1âöD/ØŸã:¿ ÛÀöðë¸v:÷ë8\º:t|š>^øë˜1Õƒ¿ö±üù¸©1ÓŽ=ÅÉeÛ ¼®_‚…3áÙ¿CpȽöõËàúexn, fÊ)wijÜGÆœ)¼68™V÷­µakñ~¹]Çâô˜w¼gΟÇ̱P»‘Mב-=æþþ2µº×¾kü±^bÜœ Щ7<|ßâ†vúûQ"¯cæX¨TÕõ¯JæÏcæXKœ®~YJÚudåׯcÑضÒŒ÷L®ç¸té’Ó Â,D˜×~B8šÌ‚¥‘—_~™¨¨(’’’¬Æ,[¶ŒaƱ{÷nÚ·ooµOÖLà ¼m}Àðvh‚½µÔbŽ÷8 [ ì»ÿkXÆô¼ûtaÿ°Ol»Œ0.eûLmŠ´_ýIæz¥¯ÛúÛª¶„ˇ ~/l˜ î˜z7è3Ú/R(9ì7µflÊ\v)ÞrÑF¿¹ÞcédøÅîÇ~ÐŒ´ ü3õ_97t­ Û/k~þ2Mr¬-ɯ¶\9¿{ãà_ëáôÕ6\>sÊLRYŸ¶è¡¥ sPR¡»IfÁŽ%ƒÐ5òä“O’œœÌÊ•+­Ú### ¦]»vùìí£mp.@E!72qÃlç·iHM»N<(ØþE²x€äX[’_mI~…(óä,ôéÓ‡^½zñÊ+¯pûöíìÕC7nÜÈÒ¥K ˜*ÓËaq–T·Õ ¬ÈÄO™qÞ\£àŠ rΧ߄=ùWvv¥ŸäX[’_mI~5¡×ƒÁ†ïëôf@&Ï&ˆ† ³z¨ÈÝ]µò]æ_ î,„B”q¸Ù0 C> g÷†Ê•+Çܹs™;wnÁ­ÔÕ$a1TjmõêìJ?ɱ¶$¿Ú’üjÂ`ƒ-ˆ¬]*œ@ I~,Zòòtv¥Cˆ.ŽnÑüijÈó}³¶yÈ#„š“kKò«-ɯ& zp³áãƒ|âÎ ƒÐK¤3ΠT‹úÎÙ”=Ü¢™å5žŽ†ÝÖÖE9' ²Dr¬-ɯ¶$¿B”yRø–H=€MüC Fk¨ÖÂÙ‘äoù‹¾O`¨Ù*7°<®ê‚¹:»¹l®j½áßËPY"9Ö–äW[’_mè°mQ³½¢`R€»©ÖzL€rÎŽÄþB:A·-k‹èÌD¤M#Cuwv(B!l]‰P áò–°›«'`÷8·Çّ؟Þn^–ÕÐ…E&n¤¨Þå{ !„p>C1^B8˜¼í„Ý\ýÓòò(u:;;!„¢ ±õˆ¬"œ@HÛœ@©>ÎÙ”rÃAé'9Ö–äW[’_!Ê<)@J¤`gPª=ÚÕÙ”Õt ´ÑrÕzCÇGPY"9Ö–äW[’_md B/êK> '·]‰TßÙ”j²¡}ô0Dó¡÷[t0üj½AÓžäX[’_mI~µ‘õVQ_¶Ìœ%D1É!D‘œ7×à é!RU/2pç.園B[”Ë'Aáò¶BÉAÓCD¤NãªZ…[ª¯³CBaë: ò,ŒpyÛ•H—œ@ž›@‡— z+mÏS^Iæ ·æþ Uu—ízì]¿ÙõpeNªêÅ5s5.™ƒHQ½­;ÄìrN`e‰äX[’_mI~…(ó¤)‘9ôl* FÕ€*J¾}«‡Z¬Ýñ^›¢XÖÇлY^:;¼«|”;<í¾ŒQŸ¬\,þïóáüÿýη.—oŒ¼&Ež‘-¼EûzL¸“aõ2`DAµC€¥€r,ò!ùÕ–äW2D¸y«Dêéг]4óiúkÄšë0È}þJb‘ö¯Xš<«[þ\­eñcº­V`EÆ Öeö#Þ\³ø¼Ï²ÿ³üׯ&t|þÜ ÇÖBfê½>‚ Ið¯mùsÕfv ¡t›µ¬Ø‡èé¶™'Ü~°j;ljÎÊŒ§¸®ûø.Ï9ùüjKò« "\ˆ¼íJ$ÇþXn¨•ø>ó/(¨ôqÛP¨ÄÛ*Õ±üPsh1Ù/¦»j96eMæ“ö;èÿx{Yþëh)22ÓàäFK¢è \%jÍŸ„j-ì~úÒÏË»à>¨­;Ë£n©¬\ÃW¹À™³)³— `—‹|H~µ%ùÕ†Œ.D a“½ rËÿ{ù‚o5çÆc/nž–£q?Ëá›3{rÕ\…—<>£Ûg‡#„%Ÿ­+¡Ë#X ¤6 ¨ky•6:Tm5Û:;çJ0WㄹF5ç?˜Z®zhzþ3æº\0W§¦.fÀ2ûV òÍ©B8Rrr2'NdÅŠ$&&Ò¨Q#&L˜À!CòÝoÕªU,_¾œßÿ+W®H§N˜2e õêճꛖ–ÆÜ¹sùꫯ8wîåË—'44”I“&Ñ¡C-/O8‰ %Ò¯ÀgQjfMrv%Ûo¦‡ùWÚ?¹«æ\ãã–êËmµBÞ;Ïÿ˜Uì2qcEæ 6-c¢î¨>Ü0W*öqK;åXäAò«-ɯ64º2`ÀöíÛÇÌ™3iРK—.eèС˜Íf†Í{QÉY³fQ¥J"""¨W¯ñññLŸ>ÐÐPöìÙC“&M²ûŽ1‚o¿ý–wÞy‡îÝ»sãÆ f̘A×®]ùå—_hÛ¶Œ+X IR"•wv…’™ ç÷Cf Ôh Þ.òÙ°fpîíAÍ¡æÃà_DZñ8Û^c;bÍuè`ø•Úº³ÜTý8aj”¡‘— û<»fFG‚¹ ”’çûìÉN9yüjKò« ¡¯[·ŽÍ›7•}Ç£k×®œ;wŽñãÇ3dÈtyL}ùã?R¹re«¶îÝ»S»vmæÌ™ÃçŸXî~,_¾œgžy†iÓ¦e÷íÔ©ÕªUã›o¾‘¤’¡G%RsgP(éÉpè[Ø»n%8;šÂûÛˆÜÛë…AÏB°fñr%ßgþ…ii6Ùé}÷Ìßìs‘7ɱ¶$¿Ú’üj#kzQ_ù|\³f >>> 4Ȫ=<<œ„„öîÝ›ç¾AAAsáÂ…ì6ƒÁ€››¾¾Ö‹Úúøø ÓéðôôÌ;@á²äˆ°™»74ê ÉP¾Š³£)¾ø½ðë¨ß‚Jñ´»š².³7TË-«-Æî$˜«±$ãyöÛpÈÔRóqB!ìHƒG°Ž9BãÆsÜåhÞÜò…ÕÑ£G‹4F#66–øøx ¸÷˜¹Á`à7Þ`Þ¼yôìÙ“°°0yçw¨X±"£F*Úõ— ˆ°™{9hÜ×ÙQØÏ¹½på8ø»nbÄ@’Z‘kªå›'oRðVR¸«–#ËüÃ1¦Pæ¥!Ölý¬ÙÊŒ§¯Bˆ’ëÆ9Œøûûgo/,£ÑȈ#ðññaܸqVÛ¦OŸXÆ›¨ªeÁÙš5kM:eì¹è2BÁ*¢èèh†Nƒ (W®Õ«Wç¯ý+1119úÆÄÄгgO|||ðóócàÀÄÅÅâ,Iö\d;qÚÙh'Þ\“Ó_g\ÊÆ¥ÌáÇÌÇ1bàÛŒÁÙmŸ¥¿”] h"ö„vÇ’cmI~µ%ùÕF ^ Ýl63räHvïÞÍ’%K¶ŒùÆoðÑG1mÚ4¶mÛÆ÷ßOÆ éÕ«Ô>@ápr¤ˆ,XÀµk×7nM›6åÚµküûßÿ¦}ûöüüóÏ„……pâÄ ºuëFhh(+V¬ 55•ˆˆ:wîÌÁƒ Èo1µ=@c‡\OYôÖûðC¤³£ÐF¢êÏÆÌG³ÿ¬ÇD Ýy~Ê|ŒÕ™šYí?oÁ¼ î'l'9Ö–äW[’_mdéÈGT¼åu¿[™y÷¯T©R®w9³·DUUFÅÒ¥KY²d ?þ¸ÕöÇ3wî\f͚śo¾™ÝÞ·o_š4iÂo¼Á–-[ }¨W¯Ó§OÏ.@"""ðòòbíÚµ”/o™ÕªuëÖÔ¯_ŸÙ³g3cÆŒ|ÎòˆVá `ÞÎŽÀq¢=8e®Oœ9Äq'}wžãÎUVI޵%ùÕ–äW…2´Žåu¿˜Dhýsîý[´hATTf³ÙjÈáÇhÖ,ÿç•UUåÅ_$22’E‹1lذ}Ž= ÀÃ?lÕnÜ*z IDAT0hÑ¢;vìÈÿ¢„K’G°ŠèÁâ \¹r4nÜ8{V£ÑÈÚµk8p`vñ–çÃÂÂX³fMgqixµä¥¤Ò^¿‡0ÃVü”›v=v^Óð–FÍÁüjìÀesUÇT¦ØÔžäX[’_mI~µ¡Á#XO>ù$ÉÉɬ\¹Òª=22’àà`Úµk—ç¾Yw>"##ùì³Ï>|x®ýjÔ¨Àž={¬ÚÓÓÓ‰‰‰ÉÞ.J¹b·nÝÊïpæÌÒÒÒhÑ¢EŽ¾Í›7gÓ¦MdddàîîîèP]Få6/xDRGËäÔ©Ü4ù9;$!„¢LéÓ§½zõâ•W^áöíÛÔ­[—¨¨(6nÜÈÒ¥KQ€‘#G²dÉbcc³ †×_E‹1bÄš5kfU`xxxЪU+:vìHûöí™ù„sçÎñþûï;þ…椱ƒ×^{ÔÔTÞ}÷]àÞ¬Y³DÜÏßßUU¹yó&Ó•¤ª^ì2>¦Ì^$ª9ó(„Bˆûb HžûåcõêÕ¼ûî»DDD˜˜HãÆY¶lƒÎîc6›1›ÍÙ3X¬]»EQX´h‹-²:fíÚµ‰@Q~þùgfϞ͊+˜={6åË—§iÓ¦¬[·ŽÞ½{ÛpQ¢¤“G°ŠiÒ¤I|óÍ7Ì™3'»š/¾v:Žëº­VàëŒg™Ÿþ*ÌÕíz왟ÚõpâA g:;‚ÒOr¬-ɯ¶$¿ÚÐh¬råÊ1wî\HKKãÀVÅÀâÅ‹1™LÔ¬yïñº¸¸8L&Svqrÿ+«øÈâããÃÔ©S9zô(ÉÉÉ\¾|™èèh)>J1¹R S§Nåƒ>`úôé¼úê«ÙíY³BdÍq¿ÄÄDEÁÏ/¿GŠŒöUÜ'%ÕÙ”r©)ÎŽ ô“kKò«-ɯ64XˆP­ÈM:5û5a«muëÖÅËË‹?þø#Ç~‡¦~ýúŒÿ8 DY¿Î}1­»ý²Æ<‘s÷÷_ƒU ­ÛŽÅXúÞ¼nÝ>orŽo£â/Â/ä\/ã“E0þ=ë¶”TKß]¿Y·G}áÖë 0d4|·ÁºmãvË13å‹b]ÇÕ‹©¹^G€ÎëÈP-™>û@ígëxíXeÝ–|ôÏB_—â-}œ;é'0{¼u[jŠ¥oÌ.ëöuQ01°áðû÷ï'44Ô¡!e}vØ?BsNÔYðþW¡õ·8%vQvÉ#XEôïÿ›É“'Ó§Oúõë—cÚ¸öíÛ–;$mÛ¶¥ÿþL˜0!{!Â*UªX-´#J¿ZØÊËÜB!\FƒÐ…Ђ E”5«Ã† ذÁúEQ0™L4lØmÛ¶ñöÛoóÔSOa0èÑ£³gÏ.ÄÊ¡iE/®'ZÃzP½nðp8øØð ’¸ÏÍëààì(J7ɱ¶$¿Ú’üjCÆ€"c@ŠhëÖ­yÎêU|d eÓ¦M$''“””ĪU« )Ì#TÛ4‰ÝÞ2S!î8¹ Rn8;šÂñFîí·/AÂ!¸›sîQ“F8;‚ÒOr¬-ɯ¶$¿Ú1 Â…È©³(”ôd8ø-ܹ½ª‚wA7vJˆ)y<wz+\úzM„JÚ µ)ý^âìJ?ɱ¶$¿Ú’üjCÁ.D ɱ·¦«ê.ÓÏm} ¨¨$åÛ÷âA8µÌFȸk¹c~~‹ŸûÆNÜ¡~jn[L>ʆ¸-§¢’ĺÌ~\4Ûv \4 #ßÃÕ?-¾r2ÓÀ” )7áÈpíTÞû{û[®­$)ÍôGèç¶Žƒ¦‡Ø’Ù~n먭;˺Ì~œ6×ÓöäMd£æ$ÇÚ’üjKò+D™'ˆ P¹Â³î_fØšgS&d¦@ü^Ø5ŒéÖÛ,³þ³‡T*^2Ð}º+0¶â"ö+@2’áØO–׃ŒéðçFË+/u! ^É.@ëówø*ã9¶gv¥‹a ¿ò‡©…öˆBÇ“1 Â…H" åÆ8´ Îþ &Y'Ñ¥1ðmæ`¶»ò§¹¡³ÃB¡)@„ ‘Aè%ÒqgCf*$ÅÃÝk€ÙÙÑÏW?Z¦Ü ¨ n^ÎŽF‰fþ0µà¢9z~3>Ì™sÉTðÎÅõàâ_Âþ$ÇÚ’üjKò« „.\ˆ %Òõ‚»8X¥ºðÈhú8è\ü¾Ù‘ÓÐj´ ¾Õœ6™Z29m*?f>îø“qü9Ëɱ¶$¿Ú’üjC_Œ—æâ%K«ÎÎ Ï –ñ ‡@qñ²õã©pù¤Þ,½“]W¸n  ¡þOžr_iµí’9ˆC¦–$«åµ9ùÄOµ9®¸Gr¬-ɯ¶$¿B”yR€ˆ2'í6X'Ö[þ¿4ëaˆæŸžÿ²jÛbìΔÔ)Ú B!OÆ€"ˆ(”¤ pö8³̦‚û—dªÙr÷ãnOTtÒ êvŠ5´‰Í^èOÒݰ…~n먮»`µ­­þw^öXÀ¦Ì^l1vGEqR”B!ìF áB¤…’ ¿ü®tv$ΣÓC£ÞÐæù’ûš‚Š3­ôˆðœFîRŽ>ô'h ?‰—’Ê6c7LòÛG!\Ÿ,D(\H ýUÖmpv¥Úq¶íg6YÖÙù \?mߘ쥆î<¯{~Ì î‘TPr¾ì˜© ¤½ËªŒ˜µø'`Ìö?¦°&9Ö–äW[’_mÈ,XÂ…È©©³ÈÁàe™1*å¤$‚ª:;"Û½ü4¸ýnY(1å3 ·ŸªZîéÝ vmc´Uå*ÝVÑÉð 7U?n¨•¬úüjìÀâôpΚkkÄÐ1ÚWÜ#9Ö–äW[’_!Ê<)@J¤’7À àÓð[ û—ZVFwUõ«!–‚jÿRH<[¸ýtzhò˜e*âYL|Kfw"3^°j»ªVášZY»“vzT»c ɱ¶$¿Ú’üjCÆ€"ˆ(oË·þ7ΔÜñ…eð€j-À˜ G,ü~ŠUAíŽÚÅV\·©À>SRUË ‹Œ}X›ÙßÉQ !„МÛŠ ÿ.\“ B”"çÍ5ø8íu¼•mït!„(9²ÆtزŸ&uo‰ç슥j3h9üëØ~ŒÕ›-Æîü”ù×Õû|WŠÇø§ª^ÄšëpÄÔŒ#¦f*WxÁ=’FúŽ "ú;Ç«¬’kKò«-ɯ6dºp!R€”Hgœ@±Ôë =ßê­l?Æ-Õ—Èôø8ýuΛí;&&ª ýîëá͇ÞoÑѰÛq']å¸s•U’cmI~µ%ù¢Ì“o%ROgP,zwp/W¼c”W’ù‹Û÷x(é¬ÏìËEs°}‚–ÿ×n‡*q‚uéë¶žšºx ƒa7~ÊMº­¢¶î, ð§©ë3ûæ˜Ënþ½\›ãŠ{$ÇÚ’üjKò« „.\ˆ Âî2S!5 ܼÁànÛ1Ê)wyÔm#^J*ûŒm¸ˆý Ò,H¹Ä î‘ÙÓðféç¶Ž~nëØ”Ù‹?Í I3yrWͽRô rÊ]òžo9/RToû/„Âv2]¸)@„ÝÙéw Å@¨ÕζcÜV+ðuƳ¬Íìo÷G°Êº&úc¼ëù«3ðuƳ¹.FØÎ°—gܗ⥤æyœµ™ýù6c°–¡ !„(,¡'''3qâDV¬XAbb"5b„ 2$ßýV­ZÅòåËùý÷ß¹rå têÔ‰)S¦P¯^ÞsÙ§¦¦Ò²eKNŸ>ͬY³xóÍ7m¸(QÒI"ìîÊqHº5ZÛ^€dâÆsuΚk“Š—},ã‚u Ö]ä¼¹K3žÉµO]Ýžv_–çjê&ôœ1Õ,wC.˜«s[­Pè8ªéR.p—rœ7×ÈóŽŒBˆhôրطo3gΤAƒ,]º”¡C‡b6›:thžûÍš5‹*UªA½zõˆgúô鄆†²gÏš4i’ë~“&M"%Å2“£¢(6\prã­DÚæìœÎW¹Åp÷/yÝãcjèÎÛõØáãìz¸2«§a3s¼Ç1Ç{úè#­.I”r¤˜¾øâ ^zé%Ê•+Ç;w¬¶ÅÄÄðÖ[o±wï^ Ý»wgöìÙ„„„pTÇŽw¸¥ú²ÓØOÒh©?”½†Dn*Ö„F}àÒË¢„÷ó †À&`pƒøV·=&³ªã¶Z›ªFÕ¾oÓG»¾¯OU¨ÚÜ>žäØ6mÚ4ÒÒÒxï½÷¸råJ¡)\“ Å0zôh¨X±"+W®´Ú——k×®¥|ùò´nÝšúõë3{ölf̘áŒs•‰WÕ*\7`,à-áîmyy”¿×æSB:Býîà_Üì0dÃKI¥ƒáW’ÔŠl5†qÅXüƒ>À'Z ïJpv7ïû¼].ÀrMõºC¥:¥«ðÈR^I¦¼’lóþô'à¶š­Æ0þ0µ(òþÍôGhoØcÕÖRˆúºSø(wÈÄ'ÝÖàF&[aÄ›kÚ«B”z B¿qãF®Æýýý³·–ÑhdĈøøø0nœõ³ÐdÖ¬YüôÓOxyɸϲ@ }ýõ×ìܹ“cÇŽñÎ;ïXm3¬]»–^x!»ø¨Y³&aaa¬Y³¦D ÅåWÚ¿ÕZÚÛ<ト:ºXN›êqû ~5¡ý(ðòƒ‹1ÖH… xø¨iã ú² »a ô¿2.uN‘ fú¹­ãÏéyös#“î«i¨ÿ“ )Õ¥Bˆü”àixÍf3#GŽd÷îݬZµŠàà{šFÂÃÃyúé§éÙÓµ×A…'ƒÐmpåÊÆŽËŒ3¨V­ZŽígΜ!---r~(kÞ¼9§OŸ&###Ÿ3\²c´âA»~sv¥\Ì®|7·3ìe†×z6åÛ/w¾ÍÌŒ´ œ47°g„®¯€‹b’üjKòë2*Uª”ë]ŽÄÄÄìíQU•Q£F±téR"##yüñÇ­¶Ï;—³gÏARRIIIÙµ§¦¦’”””ï`wᚤ±Ák¯½F“&M=zt®Û³þ²fÝ¢¼Ÿ¿¿?ªªróæÍ|ÎpÈaŠ<|8ßÙ”r‹>Ìwsý1^öX@[Ãïùö3ª¶ÃX™ñ&ôTÕ].p`|™Q@ŽE1I~µ%ùÕFÖ|^Q[à‰ Ö¯qŸä}È-ZpüøñÀáÇhÖ¬Y¾!©ªÊ‹/¾Hdd$ .dذa9ú=z”[·nQ¿~}üýýñ÷÷硇,SòúûûsäHîã…ë’G°ŠhåÊ•¬]»–C‡´,䤖–ýŸ³#(åf-³ëáªê.3Êãs2Tw>ÏÅesU»ß%Ù9Çâ’_mI~µQˆ1 CûY^÷‹9­ŸÍ½ÿ“O>ÉçŸÎÊ•+<øÞ³‘‘‘Ó®]ÞÏ)gÝùˆŒŒä³Ï>cøðá¹ö›0aááÖS3_ºt‰¡C‡òÊ+¯0dÈêÖ­›ÿ… —#H$''3fÌ^ýuIJJÈ~œêÖ­[ †ì[’Y·(ï—˜˜ˆ¢(øùùås&ù±¤ãÁISö›ZsûŽ÷–ñmÚòò¶ëát˜ñ E±ŒØ=Çâ’_mI~µ¡Á,X}úô¡W¯^¼òÊ+ܾ}›ºuëÅÆYºtiöB#GŽdÉ’%ÄÆÆR£F ^ýu-ZĈ#hÖ¬{öÜ›tÄÃÃV­ZаaC6lhuÞ³gÏP·n]ºtébÃE‰’NÁ*‚ëׯsõêUfÏž}›ÐßߟeË–q÷î]üüüxî¹ç¨W¯^^^üñÇ9Žqøðaêׯ»»{>gZ DY¿Î}1­»ý²Æ<‘s÷÷_ƒU ­ÛŽÅXúÞ¼nÝ>o2,œiÕžxNœ¶îúÉ"ÿžu[&ðñ)øí¨u{Ôw¹/ø7d4|·ÁºmãvËùîw[­Àsÿôáý¥U9o®aÓu\½˜ZèëÈP-™Ž Þâ^ÀkïÀÂ(ë¶ä£ú:¸oé{º}é'0{¼U“)5·GË1ÎE«ë8pØÌ†—çé:’ÎXqÊíç‘’ ƒÂÓ¹¼ï4—Õªü_ú+|ž>Š+k£s_ÄìÍ!ýu›F?Šòó 5ÅÒ÷ÁgÞ×EÉuÈuÈu¸âuD ó±þý °$g Ž–5½¨¯> ®^½šçž{ŽˆˆúöíËï¿ÿβeˬVA7›Í˜ÍfTUÍn[»v-Š¢°hÑ":tè@ÇŽ³_´ßu —¤¨÷¿[D¾ÒÓÓÙ³gOvÅ–[Œ3fÌ`ûöílذ€€š4iÂÓO?ͶmÛ8}útöLXñññÔ¯_Ÿ7ß|“éÓsÎþCëÖ­—€ ë áí>ÐN»5þêös½ÇRKw®À¾›§Ã®O-ÿ_³-ô™jßY°’ÔŠ,ËxšŸ2c±=×ÕüÖMÉ©þ$s½ÆÒ×m}}­„ zë^[Psè;U›Y°ö›Z36enööÔF¿¹ÞcédøÅîÇÎMªêŸÔ9,H¹ÐûŒðXÄ\¯±ø(wòìsÈÔ’ÝÆŽ,ËxšFùöKQB샭‡ÓWØp øŒýû÷êв>;ì_¡MlØÿ´‚Sbe—Ü)ºvíJ—.]²_]»v%00½^O—.]hÒÄò·êÔ©¤¤¤Ð¿6lØÀš5kxì±Ç¨R¥ o¾ùfgúUû‹)á|•[ wÿ’¿y|B Ýy»ûÁoÛ…=ø-§ ¢3{ðvêLöÛÛ! RÈ9ùüjKò«B BÏõeËÔ½B“ v (ŠÕ]°<Ó¸mÛ6ÜÜÜxê©§§Aƒìر£ÓÖ•/`{駠⥤⭤ Çd×c× .¸(† Û×ë8bjƬ´ñü”ùwT2ÈïQÅ2¬9… ùÕ–äW¶¶.^(D1ÉÛÎ/^ÌâÅ‹s´‡††²iSþkä®yñƒyúÛgGP:¤©žÜTýHS=­7<ó7›yÊ\ŸE#8g®…‚Š·’‚#)ª7™¸3âR¤9… ùÕ–äW%x!B!$o;!„M6{2>u¿š:Øí˜­ô˜æA·µ¸‘É`·oyÛs& ô'ív!„(•ä,áBäˆ÷Ñé¡BÔ·rÎŽ¦d»®pÌÔ„DsÎ7må«Ü¢‘þÆ+è3Õt Ô×¢¼’l·s!„¹äH‰”äìJµ§å½ŸÁš? _ÿZŽ‹Éõ0Dó¡×[t4ì¶Þðà´•EpÀÔŠˆÔiü”ùª;ßf fFÚþ45,x粤9… ùÕ–äWrD¸)@J¤=w6{ëý¼·éôP×2 ¯‡ãbrE5tçyİ‹ õºüç­"ë¦êÇvc7~Ê|ŒmÆnÄ™C0£ã”¹>ûM­IR+Ú)êR†‹"üjKò« „.\ˆ¼íJ$û¯!î™÷³#(åÞWä]âÍ5™›öwváŽ*•_lȱ(ɯ¶$¿šPu Úp7C•¯¢…HR"É4¼Z’ix5fÛéªWÔÀ"/8YfÉ4¦Ú’üjKò« “L6|ª3É#X ¤î6QPt€R`W!ò¥¢d¿„BQúÉa“½ÀÍޝsv$•ÝU˱*s ?e>ÆYsmg‡#„.Ëlã³ÜN w@J¤Î @õ Ng(èìHŠnæ§ÎŽ ”[8³Ð]Sñbcæ£|›1˜ËæªUÊ!ÇÂ’_mI~5aÒ+õº"¿Lz¹û,OHFgP “›à5põø¹Øã¼)©ÎŽ ”KMqv¥ŸäX[’_mI~5aÒë1Šþ½²IoÆ>wˆÒE ©­CÏV^I¦¾îÍõ‡ñ$-ß¾w.Ã88½ Îl·´yU„‹‡ ýkÅU¬Q²‹’©ÿ°ü7í6$ÆÁµS`úß¿½f“åÏq¿äÜOQÀ¿T/ê8g®ÅqSc.šÕ?fj¾û%˜«±ÃØ/%•[ª/—UIh‘cQL’_mI~5aÖë1é‹^€˜õ R€G“DPM—ÀkŸÒÃ-?ÝÍ|ûžß»æÃ­ ÷ÚnÆÃ¯Ÿ›§åÏmžƒ¶Ã5 ØNnžƒÝ àüï`ü_Ý•™f¹³sjKÎþ:7xähú„cã,©¢3{0'} æjEÚï7ãÃL0ÏD‡ #†"ï/„B×&ˆÀ‹Têèc©­;[`ßÔ$ËcWÆô{m™©–; YNoò •Bì®Ýd¦X⾕p¯M5ÁíËë~UAµæà]ɱ1–dUu— Õlj‰&ÿBï—¨ú©¿Bˆ‚™Ða²aYs“±Q„^"åÿTIwf;lþ\,¡cé¯'}ŸNðè$¨éاãJ´nÑ|èõõ»­7ܼÊɱ¶$¿Ú’üj„£ /[Š!ŠK i›³(–ê¡ðp8TièìHr7â¢ï“pö|—Ù?Wõ»±-§¿Î¦Ö&pN@e‰äX[’_mI~5aF C‘_f)@„È#X%RgP,µÚÃ#¯9;мMy³èûœßg)B¼ý!ø!ûÇäŠvazÚ;97¼:Åá±”9’cmI~µ%ùÕ„í`™5ˆFˆüÉ)ÀÙ”j¡ÍA)×$ÔÙ”~’cmI~µ%ù¢Ì“; Â•ã–éj½üœBQú™mÏa–;  ¤vwf;ܾ€úaÎŽF!„(ýÌ6>‚evñy°š7oŽ¢~5wUUQ…åË—Ó¸qc #ù‘G°J¤ã=Û-Õ—]ÆGØklGŠê]ìã<ÁÓ îvN £œAéÐ@’'Ü~È9}óª…N‰§L‘kKò«-ɯ&ŒèlšËèâ=Š››þþþ…~9r„ÔÔTg‡^¦ÉɱS&˜«ñiúkœ7×`²çT¼•”b¯nWè8¼|í Å†‘C…ëëiØLSÝQ¦¥Ep6£ö½ Çc€‘Î «lkKò«-ɯ&Ìÿ›Õªèû¹ö€ùóçÓ®]»Bõ5¸»—ÐoHË)@J¤Î=[î\1rÍ\£ÞžÀ·/nýétgGP:TPnã¦ËÄG¹c½aâ§Î ¨,‘kKò«-ɯ°£'žxÿÂ/n«×ëyâ‰'¨X±¢†Q‰‚H"D!) PøÇLËU’"„Ngû×~ë»ï¾+REQм°?×~×9É®]»èׯþþþx{{Ó AÞÿ}«>111ôìÙüüü8p qqqNŠXWH'x4BVB¿ßæÌž¼•ú!»ŠB”yYë€ý•ÿGÁäädÆŽKpp0^^^´jÕŠåË—ϪU«ËéÓ§sí¿yóf:tè@¹rå¨\¹2ááá\»vͦ\ˆ’O "úæ›oèÖ­~~~|õÕW¬_¿ž·ß~۪ω'èÖ­F£‘+V°hÑ"NžjÖ¬IXXkÖ¬)Ä™šÚ!ÚÂÓc›¼”Tte`A¢16Ôv·.ÂÙ_áÎåâŸ_ o%o%µø,i†Žqv¥ŸäX[’_mI~]Æš5kðññaРAVíááá$$$°wïÞ<÷}°ø "88˜ .d·]¼x‘}ûöñÜsÏY3:t Aƒ~nЉ‰¡wïÞ9r„   6oÞLûöí™?~޾ªZ çº()@Š`ÇŽTªT‰cÇŽñÐCáææF`` ¯¼ò wîXf:sæ iii´hÑ"ÇþÍ›7çôéÓ…¸XCƒèó– Z¦á]”>‚›jé_ºüÑ®÷yPÜ/°qÄÿ^üó_0Wç“´¿±8=œ[j «¸8:=êìJ?ɱ¶$¿Ú’üj¶ñù?‚uäÈ7nœã.GóæÍËEK||Í–-[8wîƒ b̘1…xâD8‹<‚U/^äîÝ» <˜wÞy‡:ðÛo¿1yòdŽ9ÂÎ;¹qã@®SÂùûû£ª*7oÞ$00ÐÑáç)UõâŒZ—³æÚd scç¦\e¨Ú ¼ ?Ó_žRðæ´¹ç̵Š0'j¡ÿƒçÜ¿â7ÓÃüijèìp„¢LÓb¬7nP¯^½íYŸq²>ó†ÑhdĈøøø0nÜ8«sÜÌÏSÐ9öíÛÇG}D¹råðõõå믿&$$„wÞy‡ÌÌL&MšTè8…cHRf³™´´4¦L™Â[o½@—.]pwwgìØ±lÙ²OOO'G)´Ò ºƒ‡³#)9z¸EÓZ¿Ÿ¦þK !„p2“HA³`ÙƒÙlfäÈ‘ìÞ½›U«V\è}%ÿ©ÞoÞ¼™ëã^ï½÷ƒÉ“'c4éׯ_‘ãÚ‘G°Š R%Ë`áÞ½{[µ÷éÓ€@bbbŽýQ?¿‚súˆ²~ûb6Zwûe£e0߃Þ V-´n;cé{óY¸æM¦ü¢‰ wÿ’!îË©¨$Ñ2PûÄ3å}²>úɺ-óÆ?BÔw>ކŒ†ï6X·mÜn9߃^{Ö.{`ÐE>×Á™VMW/¦æz£ÆÃø÷ w‡ïƒ;xø€ÞݶëXøÀd!ÉGÿ,ôup)ÞÒ7ö„uûÒO`öx«&Sjo<Ʈ߬»ÚëçqÿuxΙ#Il=×ú:¢¿+öušbé³Ëº}]LÌeÏ›C,罟þ~”Èëˆþ®t\”ÌëÈŠÝÕ¯#KI»Ž¬X\ñ:¢¿„„ùXÿŽþX’3Ób¬J•*åz"ë3NÖç¢ü¨ªÊ¨Q£Xºt)‘‘ÿÏÞ}‡GQíÏ–T$¡&tB(B@ªôD) ‚ˆX^ *Þ_A.EàšŠ÷Š4 7 \/"hT”"D¤ ZD’PBÚîÎüþXÙlÚ&;Û8¯ç™˜93ç3Ÿæìœ²–áÇ[Õqç5‹×S^¡¡¡¥v›={6³gÏæ­·Þ"66¶ÜXÇ‘1"§Â&MšÄ|À/¿üBûöí‹öŸ9s†V­Z±dÉþþ÷¿S½zuž~úi«PC† áܹsœ:uªø¥ó@ªN:Í€'-†×…éC [S;ß´Õg¾ïLè¾)w ú‘Ï`÷|È»Æ|ËcZ=è| ×KÐ{²}bÛkìÅ«9ïpÈÔÙ¦óµgˆóæý«cc_€ ÿ†ó‡aϸxŒypçO‚Fk¾ÍíßËÝ&BÿiV—ª”æNDçıרË>¼Cgí!âü¢é©ûÑî×..o²ä@^Ï]ÀÚ‚ ˜:––?G¼P"ÇêùU—;ç÷@ ,ØIWЏ ¬àðáÃtìØÑ¡!>;,?Ü«•YöÛø?ù6Þrm[×ûþF‰±?ÿüóÄÇÇsíÚ5‹q ëׯçñÇç§Ÿ~â¾ûî+µ>EQøÛßþÆÚµkY½z5O?ý´U™‹/Ò°aC.\XÔ»¤P«V­hÒ¤ ;wî´:¯ÐÓO?MZZß~ûm©eÞzë-fÏž$Ib,!Þ€Øà‘GÌÓÒÝéË/ͯºuë†V«eøðá|þùçdgg•)üá5jTjd·˜+â’l„¾ªà™r¡7ìƒß„f%<;‡DÀÀТ¿JÚɆ›ÿ j =ž‡ˆQ óµ,S½¾¹Ñ1$Ö¼µc&­ì6 bZîb~2[ˆÐ],܉ȱºD~Õ%ò«ŠÂixËÚúŒ«Ïì/",¶çÞiQê5GŽIvv6›6m²Ø¿víZBCCéÖ­[©ç¾ùX»v-+V¬(±ñæ7]»våÓO?E–ÿútÿþýœ9s¦Ü禧žzŠÚµksåJñFá_Þ|óM/^LŸ>}ʼ–à8b ˆ  İaØ;w.²,Ó­[7:Äܹs>|8={ö 66–.]º0lØ0f̘Ann.111Ô©S‡©S§:ù.¬e*A|e¸_ryHÿ_‚¥Ò|77o¹×àÚ¸qd#Ôƒ&=Íó>Õ|ø×‚ðHȽ'·™»ai´æ{iÐ Ú ƒúb½R]QêpÔA†lÛ:&AR&¡š‹%.ÂxM©É¹Fñ«IÁ&jŒ2d‘‘‘Lš4‰7nмysâããÙµkëÖ­+ŸñÌ3ÏðñÇ“œœLÆæ™<_yåV¯^ÍĉiÛ¶-û÷ï/º®···Å:‹-"22’1cÆ0iÒ$®\¹ÂŒ3h×®QQeÏ?pà@Xî}N:Õ%ŸÁîVây}öÙgÄÆÆ²bÅ bcc eÊ”)Ìž=»¨LË–-IHH`úôéŒ=NÇÀY²dI…úKºƒðHó[‚k 'ºN€&÷—Ÿ³#«´ m†B`#gGãÚêöê{‘÷ò_æ†áåŸp[7Ý&{¿‹¯”kuì[CÞË™LÅÓ ‚ ÜEä ¬j^ÚyeùüóÏyã7ˆ‰‰!33“Ö­[³~ýz}ôÑ¿®!ËȲl±ÎƶmÛ$‰Õ«W³zõj‹k6iÒ„äää¢÷íÛ—íÛ·È#ðóócøðá,^¼½^oó= ®O4@läãã X°`A™å:vìÈ×_í ¨/°è}àø Ìݯj•þ×}(`È…‚lE7Ñ25Ò¤Q[ú“Ï éVø—úšËôÒí%@ºiuì¹.^Rž¸>£ ‚šLh0ª0 –¿¿?qqqÄÅÅ•ZfÍš5¬Y³Æb_JJŠMq 4ˆAƒªÞÝh4¢Ó‰Ç[W'Æ€¸¤gàÑJš ª!ŽmŸ>€¬TÇÅäQJš½F°/‘cu‰üªKäWPIBBB™ %ÁuˆˆKªøüØ‚íÊZ ]«ƒúí IwðóüEáÕÑCŒØWȱºD~Õ%ò« S¡—¼ÙþÖÄíÙ³‡¡C‡R¿~}g‡"T€xGå’<¡/“ë÷péÇt>1Úq\<çÁq•>UB)ÚÊ^|ê®V…  ò«.‘_U¨5Ä|õÕWŒ9’I“&1~üxg‡#T€x"‚Ëè =B¬Ïl†ê¿,¿° ‚P¤p,Û7÷~ܾ};?ü0=ôK—.uv8B‰7 ‚ ¸Œpíµg¸ªÔb›a˜³ÃAp…+¡WædÆ |óÍ7üíosv(‚ D,—Tõy°Á;:Œùk%tw±þ_ÎŽÀÃ-^ïì<ŸÈ±ºD~Õ%ò« 5VBw£Fâ³Ï>cìØ±„††2oÞŸ ÷uvDãç&qº-_¿*_"B{” ^k¸¦Ô䀩—e1µb;äX(ƒÈ¯ºD~Uq7Ï‚õÐC±yófFMûöí3FLeéêÜãIWpIù7áÈg}¾~AÎŽHðu{è©û€S¦V¼ž»@4@AÊ Wò ˆìæo@ :”-[¶pôèQg‡"T€h€•æå-@~6T«åìhª®IwëuÛ¨[O}é2Q^k¨¯¹ÌNÃn*êVè†|¤<|È @º‰N2:9"AÁÕ 2„8; ¡<£Ùëqö9;€ ñò‡{†CÇqî5dÚ[%ïoÐ º\úÒBÞugGSuÆÈ¿ež^XM&´ä(~ä(~(HêV¦2YÑpFç ±+YJ *uH7é¡ý‰nºøK·T©CApS§N¥C‡9r„¼¼Þ\–ësE©S©×å.Ùõr^PO“N]Íè1ØõÚnËÎ9ŠùU—ȯ*L·¡Û¾yÎÿC-[¶äÆÎC¨ÑqI½œ€G{ïÎŽÀýñž³#ð|"ÇêùU—ȯ* ǀغyÒ9sæ0oÞ<ÒÓÓŠP1Ý%9vÞÍ%Öoeˆ~'RV™eφS;@6BA¤Ÿ0¿1Ø·ªÕþ«œÖZ?¡T¾ §áÍJƒS;áìw`¸=^͘Ƕšï«8I ­†@#§èu'{ŒùoÁCüdìay œ)6»ñzî¼$Û^›%›š¹õ€}»Ó˜ªKäW]"¿ª¸ÛWB1bûöí#,,Œ:dUæ‹/¾pBdBq¢"P[ú“Ñ^›è¯û¶Ü²W~ƒ«ÍÐïtl«å¿½ V3×l€ºyŽmKGÿÚg,0IJ°.¯ÕƒOul¾5Açã¨H]ÓÏÆ.¼›oûtš'L÷˜× A;Z½z5‹-B£ÑœœÌ… ,ŽK’{OüâIDD*H6ÁÉmæ1/÷Žƒúm‘ ‚ ˜‰u@`Þ¼y 6Œ>úˆÀ@uffìÃs¾ëäСC<ôÐC„„„àïïOëÖ­yë­·¬»ILLdРAÈ#>æQÇ5jÔ°Ø_£F ´Z-^^^F¶mÛÆ„ Š5¢ÿþlÙ²¥ Á“.Dø½±¹Š¯³Ã±ÙSbòæ’*7vv(‚ ‚Pä¹çžãêÕ«têÔ‰‹Y°EA’$Ž=ZÆGñœf¯DEEQ»vm&MšDJJ 7oÞdÛ¶m¬X±‚—^z ___Ξ=K^^Vç·k׎¤¤$ ÜhÕ>ÁîjK2Z¿‰õÛñ—T^õP-4¿óŒ×*zhrv(‚ Âmj­’Mtt4¡¡¡øúúrï½÷²aÆrã¹páÑÑÑôíÛ—š5k¢Ñhøè£J-ëÖ-bbbÇÇLJZµj1`À’’’*œƒàà`Ú¶mKŸ>} #((¨h &88¸Â×Ô%ހؠAƒ$$$0bÄš7o^´ÿïÿ;ï¼ó%Î=„¢(deeQ·nÝ2jʳkÜ‚¥«™PËúËã0u50ÖkzÉÀ^c/n*Î ¦îÑžàí ŒèØch] ë*Šõ:T%r¬.‘_u‰üªÂ„£ ]°FÅ¡C‡X´hááá¬[·ŽqãÆ!Ë²Åø×â’’’øÏþý÷ÞËСC‰/uÜììlú÷ïOzz:3fÌ ""‚k×®±oß>rr*>f(!!¡Âeç œ>}šAƒѼysÞ~ûmj×®Íþýû™7o7oÞdåÊ•vª)hj§k ÅMœ_¬u^ýäÄŒãkC$וåŸànÞœžT%r¬.‘_u‰üª¢pPyeÎ+ÍöíÛÙ½{7ñññŒ;€¾}û’ššÊ´iÓ;v,MÉ ˜¾}ûråÊ>L|||©õÌš5‹Ó§OsôèQš4iR´øðá6ßàDÄ3gÎD–e¾úê+|}Í}÷{õêE­Zµ˜8q"O=õTÑ›ÌÌL«ó333‘$©ÓÃu¶wènË_ºE˜6‰?”º\’Cì2]àœ©•;O’ Z]n^þ•¯ÿ–âÏ)S+ÎÊÍ1(î7½\/Î)óp”Iˆæ2LEûr?.)!ä(~*ç!ÊɱPE"¿êùU…+¡oÙ²…€€ÆŒc±?**ŠÇœн{÷Ͻóm‡¢(¥Ö‘““ÃÊ•+;v¬Eã£2V¯^MZZsæÌ±:6gΚ5kÆSO=U¥:ûc@lpâÄ Ú´iSÔø(Ô¹sç¢ãaaaøúú–8È騱c´hÑ//¯rjú ˆ·ÜR߆Ä]–Å~Ü/°>}ÞK°y•従‰æ²YŦ~o6W>\c±+í"Œ˜§Šu»|w5ü¿/-÷nG˜V,„_ 0»„;ƾ[wZîÛõ¹¾â^š {7œbªÏRžðZ‡Ÿ”Sæ}Ÿ[þÊÅÜïãÇŸaÚ[»cÀoÿ]ÒÂ=à÷d˜ò/ÛîcÕ¹h¨9Oäï ñ~y0ג˽.§™ï9ù”åþuïÂ’i»L¹yLæ${Zß Q¯ZÇfë×cUñ¯iI_6˼6©›Yè;wü^å¿Wé³a4ßC͹¿Êææ˜¯›¸×òÛãaV”upSÇž­–ûìôóQ•¯‡j÷Ѧ£gܸæ}´éè÷QÈÕî£0¿îx{>‚Kïcùô€­cðǧuëÖVo9Úµk˜Ÿ{ªêðáÃäääƤI“ ÂÛÛ›.]º°}ûv›®õî»ïR³fͳlÙ²*Ç+؇¤”Õ,,DFFrôèQ’““ñ÷ÿë#ð?ü矞ÿþ÷¿ >œÇ{Œ„„’’’ŠfÂJKK£E‹L:•ùóç—xýÄÄD:uê<Ô·<^¦nöïšÕ^û+ïø½JÝ·å–=ü)ìˆc9ëçyÀ±Ða¬}bü¤àI¢sâÈT*6x#\{†8ßhÐï(µLÚØ9.UpB ­†ÄB—§+V¾4ו7µå†á¬ÌÿŠýÅuÖ"Î/šžºívÍÒ,Ì›Áë¹ l>o¢÷jâ|£ ní;hìJtnûŒ%’&‚à¤À‚t¥ØËÀ >LÇŽ¥LQ®’Âg‡¿ApGÛg'ÌHLe{§”{xx8aaaV Ë—/Ê‚ ˜>}z¹u:tˆ®]»²víZ«7ëׯçñǧzõêDDD0}út$IbéÒ¥$$$°cÇ\¡{ `ëÖ­ h=>qÏž=Œ9’7nTèZ‚ºD,¼úê« >œÈÈH^}õU‚ƒƒÙ¿? .äž{îá 66–.]º0lØ0f̘Ann.111Ô©S‡©S+ÙÿGðçå†,Ë…ïŒ}=s ˆ ‚àpr%W5wöB„²,àííÍŽ;Š>àíß¿?-Z´`Þ¼yn€\¿^ò¿×¯_Çh =» ÑË>ø Ô¨Qƒèèh†Î'Ÿ| /¼À÷ßNgnϵlÙ’„„ôz=£G&**Šððp¾ÿþû N÷›º7âF.É!l(Ë׆Hòð±Ë5­º9X é:=t?ÑI{É}g<ë¬=Ä‹ÞïÓV{Üò@ñn‚ý‰«KäW]"¿ª(œËÖ­¬Y°‚ƒƒ‹f÷¼Sá8W{Lk[x=zXô.ñõõ¥OŸ>$&&VøZmÛ¶-u°ûúõë‹ºŽ Î'ހبwïÞìØQz·žB;vä믿®d-WË/r—H‘›²4*‡ŒQ(yú>[%ƒgJŸ9Pu 5ç™ìý.!Ò%~5µ'[©VþI.h ~Ýuû˜’ûOŽ›Úþuà·Dà§ÅuW9V—ȯºD~Ua^×£ìǺóñ?q>~ŸÅ>ÃõÒ§¹ˆˆ >>Y–-Æ;v 0?ðWUIë¦Ý©´Y¶J2yòdžxâ žzê)^zé%4hÀùóçù׿þŦM›øøcÏ«ãŽDÄ%õvv.CABQ$»5>–—<Ça.È Øjx˜¯ ÷»u,  2ņ‘ÍZ^æyŒÝ˜™;Ÿú/ˆÔ›é4i¼â½Œ0M[ »ÝÚ(WNŽ…*ùU—ȯÓ4׃†ãzXìËJLá›No–X~äÈ‘|øá‡lÚ´‰G}´hÿÚµk ¥[·nUŽ©~ýúôèу½{÷róæMÌ¿ÿsrrHHH°©ŽÇœS§N1þ|>ýôÓ¢ýZ­–7ß|“'žx¢Êñ ö! ‚à`YJ Æ~ì7ÞG®â[þ .ê†Rt¥žÍopÎÉMØjx˜pí"17@êiÒyÌk=Õ¤[œ4µá¬ÜœkJÉ3™‚ ÖÔ2dÈ"##™4i7nÜ yóæÄÇdzk×.Ö­[W4Õî3Ï<ÃÇLrr2 6,:Ó¦M$'›g|üùçŸñó3O·>zôè¢r‹/¦ÿþÜÿýEƒÚ—.]Jff&o½UlÚÊrÌ;—¨¨(¾þúkþüóOj×®Íý÷ßOãÆ¶ÐÔ# ‚à`…]°šjRX?±Â3{¹š=Æ|”ÿ4GMe¿>/®›öÏx¯¦£ö°Õ±Ú_˜ëà g]Áx{…*‚àñL•\¤¼•Ð?ÿüsÞxã bbbÈÌ̤uëÖ¬_¿Þâˆ,ËȲlµÞÇe$Ibùòå,_¾I’0™þZ ª{÷îìÙ³‡Y³f1~üø¢} Üwß}eÆÇ#V·54ï aýÁ× zità^~ ›å·ZsC*¬Ô1—,õÔýÈë> Øe¸ŸÃ¦Žv¿¾^20Tÿ%õ¤?Цb.ü»Â5¥&_ïç´©ŒWr‚ ww] ]M]»v¥k×®,Z´ˆ#Gްyóf>ÿüsÑq¢"ØMÝÖÐûeð tv$UP:>ª>ŹÇê­ûÎÚCd*A65@ Šžl¥ÞR>^”ðÚé6=Fè¿`„þ‹Rˤɸ’[‡órCòŸrЂ žªp%ôÊœw7èСCÑØÁùDÄ%¥bæµlÝ qvlÏVøp©‡˜º1#w!c¼62L¿­JUI™<㵊š ÄŒã¢Z¥ë¹rr,T‘ȯºD~UQ‘•ÐK;ÏSÄÆÆ­MRœF£¡fÍštîܹܩ}õ‰ˆK: ô(·”«ÐûšßTÉ ~Åo {øS©MªÜØz“íñe>\ü)׿0è)ÿXåªIÙ ÒïF#É|e¸Ÿ‹Ü% rr,T‘ȯºD~•ÄÆÆV¨\ß¾}ùßÿþGµj¶-¤+ØÏÝñÞÍí rv6 lÝŸƒö˜ÇS¸º ÿvvžaa Óró“±Xcyé†2Ïë¦;ÀBß ÖïR1:WNŽ…*ùU—ȯ* ǀغyÒ¤¤$ÂÂÂX°`çÎ#''‡äädæÏŸOXXû÷ïçÓO?%11‘Y³f9;Ü»šx"T™"ƒ1ŒPlTÁƒé0â'å ÃhÓy!šKôÕ}WâB„‚ BåÈ•œË“ÆÎ½òÊ+<ùä“LŸ>½h_“&M˜1cƒ˜˜vîÜÉÙ³gYµjU™‹+ êòœï:Ái²Ò`ß 8º 9ÎŽFp”Aúݼíû=t?9;A„»^eÞ~nžâ»ï¾£G’»°wïÞ½{÷pß}÷qéÒ%G†&# B•ùÖ¸½>È= õÀuõ„’Õ”®ÑL“Lu醳C¡æã¼â¨Ûƒƒ³ÃAp¸ÂY°lÝyrM4çxHÿ_ZiN9;AÜ€?·¨-ý‰¯”ku,Ts‘Þºè­ûŽÚD´˜¸¦btÑÏn•„ntóGÁˆˆŽ?^áò&“‰ˆˆ~ûí7£Êãš?Ew½Ë@}gá±ö„^]WCÍy^ñ^FcM*Kó¦rE©ã¼`Ô¸:örvžMäX]"¿êr¡ü~mŒä¸©-çå†VÇúè¾gŠÏ?-Æ–ýì]‹%š{8K€#ÃÊpüøqrrl[àøñãäæZ7:Ç —ô+ÐÑÙAx¬·ßwnÄOÊ¡¥ö4ÍLÉè%7nzõÛN¸è =¯2v&EnêÔXTá9öh"¿êr¡ü¦ËõH§^‰Ç2• ~3µ¶Ø—*û’¯¨4@°Šdt•„.{À£àÈ‘#‹¦Ø-‹$I(bÅd—àþßuv’Íܹs9rä¿üò Ìž=›Ù³g[•MLLäµ×^ãÀèt: À’%KhÚÔúAçÝwßeùòåœ;wŽ&L˜ÀÌ™3ÑéÊJý ;Þ™PÜú9;·x½³#àAýv"´G™™7Ÿ”l€¸@Ž=šÈ¯ºÜ$¿ßûrÈØÙbŸ!ï·”ï çU†»u ÈSO=eó9’$¬B4BE‰ÈmW¯^åÃ?¤C‡Œ9’•+WÍ–p§S§Nѯ_?:vìÈÆÉÍÍ%&&†Þ½{säÈjÕªUTöÿø111¼þúë <˜ƒ2kÖ,.^¼È|PF4®ÿeiÚ Œpö;gGb;?_çÖY®Ï.ã`v†pSqß×ø?{ð•á~;Yðuþb0~Rš,¼ñÐ5A\ ÇMäW]n’ß<Ň<|Ší½.:vÏ„M% î¾áÚµk‚P ®ÿ¤ë Mš4!++ €ŒŒ V®\Yb¹˜˜|}}Ù¶mÕªU S§N´hÑ‚%K–°pá¢kÌ›7çž{ŽyóæЧO ³fÍ"::šÖ­[—X‡;hr6„ëàæPÆ|ÐyÖí6á—”Væÿ½F×è‚PYŒÝøgþ—íŽ ‚p7‘e-&¹o@*qŽ T•{7{URZÿ@£ÑȶmÛxä‘GŠ5¢ÿþlÙ²¥hßÎ;ÉÏÏ'*ÊrÅר¨(EaëÖ­êï gv÷K!ý\;û?„£ŸCÓu× ÿ†·}_£‡î'g‡"‚ ‚ œ={–¼¼<"""¬Žµk׎¤¤$ Ц„k×®E¹zõêQ«V-Nœ8QFMûì³Z®_„ËÇ ' ò³áSyd£³#+ß´·œ[¿/¹4Õ¤ÐPs=çSíµ¿2Ák-­´Å¦¼]2Í9£ÃHÍši’ñ“l›!Åå¹HŽ=–ȯºD~Ua2i0µ6o&“xOtÁ²AF†yÐYPõAAA(ŠBVVuëÖ%##ooo|}­]«dÕÊ8æÂ#! ü¼ÖÜéò4îz'¯¨ˆF¡Î­¿¡æ<¯ø,£iA ïç¿ÈU¥Vù'¹“ú*­àh#éOz}BCÍyÞÏÑj6·æ"9öX"¿êùU…ɨ£íu&£è‚%8žh€¸¤vå±£êÒ ÚhOÒYw¨ÄŘîtý"\9 Šló!Ë·ÿn0wźvÞ\N£ƒ:áP=¤j±I™ôÒíňަ{0 ¯ÚÉÍæ^ƒ?Ϙ»‘™n¿¹‘æûZŸ'i v8ÔlPµúe4(^à…âÆfÎÊÍùÕÔžT¹±åñ“Ë<ï¼Ü†!tС…æw»ÄrU©ÅISn(Õ­Ž(^n?Ë‹•rr,T‘ȯºD~U!›´P‰Æ„l ÁñDÄ…S¶effZËÌÌD’$‹Êæçç“——‡UÙ.]º¨p…h.ñ’÷rêö$YßÛ΂ïâÀT² r2ÍíûVÜ€~›—?ôù;´©b¤™&™)>ÿ¤AÁÞÊ{“ëJª]ðY©ðÓ¿áüa0Ünwòàè8ýµuy­zÿ½ê órC–å¿Âwƾv½GÛmÄâ¼iü©Ô¶é¼Ænœ55gªÏRZxÛ§’d cQÞtΘ­Žåáãyo™AŠ1™4(•j€xØ4‚[ßu6hÞ¼9¾¾¾=zÔêØ±cÇhÑ¢EÑB8…ãDŠ—MOO'##ƒ¶mÛ–QÓ: ÞrK}wYûq¼<Âúôy/ÁæU–ûN&šËf]µÜÿÞl®øoB5©¯¹Œ#iaÄ8•dYôÝÕðözóƒ{æ9óÛŽ[·à“|8~ɼ¯pK8 ¯hÚØ`ëNË}»¾3×WÜK3aÝú<jÎSGs-¦2ïƒU‹,v]¹˜[ê}L{ Œypã2ܺ ²9Ó©²ùß…÷ñÝ9XsÇ}åߨÜ}¬ŠÿëßùxsúX6é/>‡1ëZ¹÷Áå4ó='k±î]«¾Ô¦Ü<¦?s’½-‹Æo…¨W­c«Ê}d)œ=~/=Q¡¯Gá}Ô:÷ƒô»i®9 üõõ¸SN®9†ŠÞÇÜ—ŽøÍjiÒH•“$‡‘ôC2I/Ná‚Ü€<åŽlüù¨Ê׃ÜsÙĽ–û·ÇÃ,Ë *˜:ö› ÂN?çâ>Ä}ˆû°Ã}ìù.½åÿÑÿ>¶ŽÁCdggMhh(¾¾¾Ü{ï½lذ¡Üó.\¸@tt4}ûö¥fÍšh4>úè#«r7oÞdÞ¼yôîÝ›ºuë@DDo¿ý6ùù:•º€¤ˆ%!­\½z•:uê0gÎbbb,Ž=öØc$$$””T4VZZ-Z´`êÔ©ÌŸ?€¬¬,BCC™0aï¿ÿ~Ñù .ä7Þàĉ´jÕÊâÚ‰‰‰têÔ x(Ö_=¼.LÝ쿨Z{í¯¼ã÷*ýuß–[öð§°#ÆÜýª,Þð@,tkŸ?)x’èœ82ëñ7% מ!Î7šô;¬ŽJ‚VavvÎKÖíÉiõ0$ºú(÷Þ{/µjÕ">>žµk×Z-xüøqú÷ïÏøñã0`Õ«Wçûï¿gáÂ…ôìÙ“¯¿.¡K‚àöD¬;ìØ±ƒ[·nqóæMNœ8Á¦M›:t(¾¾¾ÄÆÆÒ¥K† ÆŒ3Š"¬S§S§N-ºV`` ³fÍâÍ7ß$((ˆÈÈH~þùgbccyöÙg­–öcÕ¹K¥ÈMùÂ0‚]†Áä`ŸÅ«^›_¬µË¥„’üó5xï‹R2ufNî†ëÿÇ ýn»T)¡ Åd·Ë+'ÇB‰üªKäWЬE1Uâ±®Œu@¶oßÎîÝ»‰gìXó'Š}ûö%55•iÓ¦1vìX4š’;ÓôíÛ—+WÌ µÃ‡_b¹fÍš‘––f1iO¿~ýð÷÷gÚ´iüøãôìÙÓöû\šh€ÜáÅ_$55I’ظq#7nD’$RRRhÔ¨-[¶$!!éÓ§3zôht:dÉ’%EcD Íœ9“€€–/_Î’%K¨_¿>¯¿þ:o¼ñF9‘8v:zþ”k“¡SSºfîêä".Ê¡|šÿ‡LívÍ÷þa·KUŠÔ–þ$XÊàšRS%V®uio¼Wæá¹)› £i®=Ë ìÓ)ä/Ý"Ts‘Krˆ[¯2_®rr,T‘ȯºD~ÕaÔTj:ÆÒ{ãoÙ²…€€ÆŒc±?**ŠÇœн{÷Ï•¤¿&Y)«³Ÿ_É.Ž•½páB©ç îK4@î’’R¡r;v¬ð+ÁÉ“'3y²­3~8¶ûÈE9”åù/qNnB”÷jK:´~Gsö4¼ 4xÅgÍ É¬Éªp·2·QΛݴˆò^C'ía»W}Ÿn? }gðIþ“|ne÷ë» 1©ºD~Õ%ò«ŽJ΂E³`?~œÖ­[[½å(\ãìĉ¥6@ªê›o¾àž{îQåú‚s‰ˆ€YJ ùÓxE‹+Í []ºA{ݯܠ:ɦf=à[V )ÓåÞ6UÔU¥ɦfÖÓïV¯”Ké Õ¤l;GM4çh¢9Ç!cgÜxGA—‘‘AXX˜ÕþÂõÐÊ^Ó¬òŽ=ÊÛo¿Í¨Q£Ê™´GpWb,É< ïDïÕiÊž†×Ñši’™ê½”ñ^ë¦n¦I*½«^ñé,‹©!]'\{†`:ŸœÝÊɱPE"¿êùU‡ 0–³ý7ža¹ý£„¹Ío .ñ-GázhÅǾVUjj*ýû÷ÇËË‹={öP³¦û}H'TŒû÷gñHöyÐJ–Söbïªk¨9Ï+ÞËh ¹Àï¹-ÈQì3»—£tС…öwâò¢ùÅt¯uܲßTuÓà¾oPG*>¥PaåäX¨"‘_u‰üª£°R–ûÇ™·;ý–u*±xDDñññȲl1䨱cv핚šJ¿~ý$‰o¿ý–*®d,¸4ñÄ%9v•ô?”º|Zð ÆØeeîÆÝ ç P·‚SAìÿ9·~FjH× à¦[NëM>AR&ƒô»™î³ˆŽÚDË/Ç–yþ)S+VçO$ѤÞ\ùýt ¼êó÷hO¨V‡S•“c¡ŠD~Õ%ò«ŽòÞ~”µ•bäÈ‘dgg-IPhíÚµ„††Ò­[7»„ž––F¿~ýP…o¾ù†† Ú庂ëo@Òåz¬ÎŸH¦DWÝAjH׫t½&= O´}b3¡%_ñ&_ñFqâèx­¼üA£wZ.§î{ºhæšRÓ¦ÆÄ1S;NË-©&eÓK··ü*a~7tG¸&×$YnFâåyÓ ‚ ¨lÈ!DFF2iÒ$nܸAóæÍ‰g×®]¬[·®hªÝgžy†?þ˜ääd‹ÆCaÃ%99€Ÿþ¹hÚÝÑ£GpåÊú÷ïOzz:«V­"==ôôô¢k4lØÐP'O_)Øh€.-Enʆ‚±ì6 rjW¥&= íhPò[jÁ]uyÌk½ê«µW#›'½?¡ž& cI–›©ZŸ ‚S©ÜìåtÛúüóÏyã7ˆ‰‰!33“Ö­[³~ýz}ôÑ¢2²,#˲Õzw–‘$‰åË—³|ùr$IÂd2ÏyòäIRRR$‰'žxªþ9sæS‰\™h€¸¤¨êõK(è%:ŒH’Jù縢¹)ßXxqN™ç]’C¸$‡0@ÿ:ÝA‡=$wMriÊɱPE"¿êùUG9Êˢà½Ö­¡Ôíámß×è¡ûÉòÀ¬åÎ èn"r¬.‘_u‰ü Â]OŒ¸¦Ôä;c_¥,õúŒ²z66o·®ÂÍtÈJSÔldn”´yоo ®*µØch×… ù™c¾ùûܼO£…ÀFà{"²ÆÝ¡õƒàl¿z¥,úë¾%Cfƒ4Öm§ám¥=EcM*?Û`AJ ÒJè‚ Ñ*%<j6„Ÿ>€[Ðý9ó,Qz_gGV5:h7ò¯õ>|j€OuçÆ$‚ å2Q¹îT¢ –à¢"TJõúæ·¾5Á˜uÂÍoÜ"CöŸp+Óܥ̞o>稥¹Êýº¯Ðbâ°©yJ)ýíAÜ™˜Kp#b ˆKÚéì<Úˆ ¥3æÁ±-ðÓ¿!+Õa!y–—G8; 5©DûÄñ´×GpÓÙáØ‡‹åØãˆüªKäWbºàFÄ—t³ðh/G•~LëMº›gòªVÇa!y–q/;; :ŒÔ”® ÝD#Én;æÆ‚‹åØãˆüªKäWîz¢â’:;6¸oéÇtÞÐf(´ã¸xM› BiÄÁˆÈmW¯^åÃ?Ä`00räH$ɲ»FNNsæÌ¡iÓ¦,[¶Œ;vðì³Ï²bÅ zöìI^^žEùüãDGG3zôhvíÚÅ‹/¾Èüùóy饗ʉ&Åž·¦Š3»áÛ%~BÝzši’™âýOÆ{­ÃOʱË5·Š1þêÚ³ÕÙx>‘cu‰üªKäW¢"¸1ä¶&Mš••@FF+W®´*ãççGZZEûúôéC£F3f ›7ofüøñEט7oÏ=÷óæÍ+*k0˜5kÑÑÑ´nݺ”hÎ=ìzö&i@ÒR梅öPSºÆ}ºýü.·°Ûxø­ðð»\J(Éöxøp©‡h.ÐF{’0M’C©)]£»nyŠ¿™Z“·CêUU99ªHäW]"¿‚p×o@J (%O“£Ñh,…ºtéÀ… Šöíܹ“üü|¢¢,§\ŠŠŠBQ¶n-ë A¶í`რÿÿAý¶ÎŽÄvþíì<ÜÒ eî¦;ÀBß ÖïrH85©D{Çñ´÷GHÙ©SuåäX¨"‘_u‰üª£p%t[7÷ï.¸!ѱƒo¾ù€{îùkúÜãÇЮ];‹²õêÕ£V­Zœ8¡rß%•ùAPcðòwv$UÜî¡íÉÝ¡†p• q IDATt0MAR¦Cêó‘òh¤I£ž”ŽVÿÓ ‚à¡LUØÁÁD¬*ºxñ"3fÌ K—. 6¬hFFÞÞÞøúZz $##Ña emo~“ó}d¸þðAA°&¦á܈h€TAff&>ø ’$±aƒx¥¬†sr¾0Œ`—a09ø©RGú 8½ R~Tåò‚ ‚ >Ñ܈è‚UIYYYDFFrùòe¾þúkš4ibq<88˜üü|«™±ÀÜp .ãê«xË-õmH,ÖgþÇ]ðòëÓç½›WYî;™h.›uÕrÿ{³aÕ"‹]iaÄ8UlŒð»«aÚ[–ûò°ìw8X¬GYüVˆzÕ:´±/XÏBµë;s}Ž4þýŸä?É—†¡ä)>6ÝÇ•‹¹%ÞÇ}Ã,ïãÊiøa%,úÎûåm¯ûXo¹/ñ,üÛ˜²ŠuC*á>¸œf¾çäS–û×½ K¦Yì2åæ1ý™“ì=è˜ûøå˜ÌÎçß·üzÌŠ*ó>Ò“²¸¬Ôç¦b^“£¤ï«œ\s ö¼_)—zÒèç=[¥Ÿ[¾äæ˜Ë&îµÜ¿=Þœ§â¦Žµž!¨¤ŸóYQUþ9w‰û׼¿»û}rµû(ŒÑïcÏGpé},ÿþð±u ‚ ”JRJq}»zõ*uêÔaΜ9ÄÄÄXÏÊÊbРA¤¦¦²gÏÚ··<ÏøñãÙ¿?]»v-ÚŸžžNHHóçÏgÆŒç$&&Ò©S' ?ÐÇò‚áuaúèÖÔ·X¢‡õ[‰ó‹¦±&µB峯Àޏ™Cb!D…1{½x5ç™:Ût^¸ö q¾Ñ< ßau,~+Œ»c–_7ÁÎȽ>ÕṎY }SÁh¢sã¸(‡Úíšµ‡ˆó‹¦§Î1¯sr_^Í}‡òŸÿkçöxxp\©ç4Õ¤ÐA{„'¼?e”þsDiv^nÈ/¦{Y_ðñ¥ÇçÊɱPE"¿êrçüH; éJ±—>|˜Ž;:4¤¢g‡¨ÃP¯u§'šNN‰]¸{‰7 6*l|œ;wŽ]»v•Øø2d>>>¬]»ÖbÿÚµk‘$‰‡.k Âö X°2NÌþ¨®r,Rä¦l1Œä¤©CÂÉVªqÌÔŽórCjIW©.ÝpH½ªrׇ7w!ò«.‘_uˆY°7"Æ€ÜaÇŽܺu‹›7ÍË{Ÿ8q‚M›60tèPî¿ÿ~Ž9B\\ìß¿¿èü:uêЬY3À<Ð|Ö¬Y¼ùæ›ÉÏ?ÿLll,Ï>û,­ZµrðÝ ÂÝ)UnL\~4ÇMæ9£/É!NŽHA•ÑJŒœ@4@îðâ‹/’šjî~$I7ndãÆH’DJJ ²,sèÐ!$Iâïÿ»Õù&L`õêÕEÿž9s&,_¾œ%K–P¿~}^ýuÞx㠇ݓ»«-ýÉýú¯ÐK;Q€—³Cî •LtÑþÌ}›:‘.×+÷œfšd:éÓV{Ü‚·”Oé§iÉaS'óX"AO£Ò ôììlfÍšÅÆÉÌ̤U«V̘1ƒ±cÇ–{é+W®ðÚk¯ñå—_’““Cûöí™7o °(———G\\Ÿ|ò ©©©T«VŽ;òæ›oÒ½{÷JÜ”àêDä))åÏÁ*˲Mל}þë:qâD>ûì3fΜɀÈÈÈ`áÂ…ôíÛ—ü±hÁgÁsˆˆKúÁÀü€(eQ]ºÛ¥yû}ѱZö{±Ë0ø¯Áô«ß.óáÂWÊ¥¶ô'þÒ-‡Ähñ=$Éà Ón”“c¡ŠD~Õ%ò«Þ€l߾ݻw_ôÆ£oß¾¤¦¦2mÚ4ÆŽ‹FSòpâU«VqâÄ öíÛG·nÝèׯíÛ·çµ×^+êž——dž ?~ÞR>R9Og² ¹··“ J¾C®ùþFQ Ày†R79ÏD~®†œord_r¿Ò7£9¹zŒÆÊý0 çºRƒÍ†GˆË&I3X¼¾Ì󌊎\|1 ¯T½¥ Q€WÑýà…¢HªÖé0åäX¨"‘_u‰üªC…Aè[¶l! €1c,§†ŒŠŠâÒ¥K8p Ìs[µjUÔøÐjµ<ñÄ>ðÖZ°"Þ€¸$Ç~YB4—xÔë3î×}E”YfÙó‡áø Ìäé'À?}þ%,mR=ÚŽ€àf*_ ~·§ÏJ…ãÿƒäÌ÷æFÕ±-péWëó4Z¸g4qVwÔ›y°ãüv¹Ô"ç5òÿt-Ùж5 i Þ¥_ïà9ØyœÑž ²O²Íáì1 d£a ûŒÅâ[ö‚‘Lݘž³ˆ1^yP¿Ýæz+*[©ÆgrÐd~ÝuÖÔœ›¨VŸC•“c¡ŠD~Õ%ò«¡?~œÖ­[[½åh×®`ž¬§´1ǧoß¾Vû Ï=yò$!!!èt:¦L™Â{ï½Ç Aƒèß¿?™™™Ìœ9“š5kòì³ÏVâ¦W' ÁRÃôÛè¯û¶Ü²W‡_âÍoîtjgÉåëÝ»¹V¤Pö8µ.ýkŸ©Îí3oÅiuàÕëCµÚàåï€ ¯çBF¶ùÍÕlØ}ö•ÞXøø‚Pèõ{A³Ú\J 'Â:›^­T䈩«ó'Ú|ÞiSKN›ZÒ\{VµÈ¥¿›Z°Å0’/ CU©CÁ¥¨Ð+##ƒ°°0«ýAAAEÇK“™™YT®¼sçÏŸ˜Ç›.OרQ#öìÙS4»¨àYDD*H6ÁÉ/áæÐùIu^´òKl8²ùH¹Zþ9§ÓáýÞFÝ«jˆ®h»áA>ΊS²˜îZÁÕM™2…>ø€¹sçÒ»wo®_¿Î{ï½Gdd$»ví¢C‡ÎQ°3ÑqIû€QÎÂ-I(´ÖþFÝOÔÖüYb™ioÁâ7m¿¶¢ÀŸ¿›ÇŽ´VÅ@+êò øé,˜lHs5Û¼úCÛÝŽ|õæ7"*wX2 þo±ºu”CBAƒ\î˜&·å9öh"¿êùUGEÞ€œ‹‡´xË}×K-\â[ŽÌÌÌ¢ãe[X®¬s;F\\‹/fêÔ©EåxàÚ´iÔ)Søæ›oJ¿'Á-‰ˆKªæìÜ–™ÑúMLð^KéJ‰e…:8(g: gnOwÛ0žë Ô­³¾Êׯ€¡ú/ לa~ÞLÏ\xÐrìÑD~Õ%ò«ŽÂAèe gÞ{:•X<""‚øøxdY¶rìØ1Ú¶m[jUíÚµãèÑ£Vû‹Ÿ{âÄ ºvµœžR§ÓÁ÷ß_ÎM îHÌ‚å’Ú9;·¥ qFg¿ñ>2”’?™™lû°÷u=ÎgB-ˆh5|Õ¯s¼­ëÞØ_-é*aÚ$ªK7œŠ:\ ÇMäW]"¿êùk º-[/ØGŽIvv6›6m²Ø¿víZBCC-f¸*éÜS§NqðàÁ¢}F£‘O?ý”ûî»zõÌ ×6lØ hZÞBùùù$&&<‹x"x › FsÜÔ–%¾ÿG#Mš³Cr>­ßc:™ÿ.‚ x#•„^Æ9C† !22’I“&qãÆ š7oN||<»víbݺuH’yjógžy†?þ˜äää¢ÃĉY¾|9cÆŒaáÂ…Ô®]›÷ߟßÿÝ»wÕÑ£Gî»ï>fϞͭ[·ŠÆ€¼û¦¦2oÞ¼JÜ”àêDDP…ÎZFB‹ê÷ø)ΈŽ¼Å >èÒú…CÇF ×:;šÿßÞ‡GQ¦{ÿvg'ö=B0w‡Åˆ¨£fúè#,XÀŠ+X°`­[·fÀ€¬^½šn¸Á£×+ž¡Ä'b½D“X¡ËåÐw„øX—–]»¡õQ[¦ÞÑpÓ ç×E%Á&"{vAO>e*åØ\ʯ¹”_s˜0 /@xx8 .dáÂ…µ¶yã7xã7ª­ŽŽ&33³Þ"""ÈÈÈ ##£Þ¶Ò2è#bŸ´©þ&>Î^¹+áÓ?Bá>oGãjÆÅô4wÓ˜¿Ö¹,ùìkà0¾Mñ¿3Ì?ÇÅN96—òk.å×&Ì„.b=ñI?óvMg@é çdNZèm‹žro?‹ÚuqN®Ú¦yc2ÍÞ|ØWqí`P”{àš™‹Ì?G=~pta{å@òÞÅ>ãMù5—òkŽsÐÝÙOÄÃT€ø${gÉ !0p, ¼Úvöv4®Ü†×—Þ ƒÆùÞ5Õ)Ð 7 €›à’væŸÏ†Ø\e»™%åSØïèæíPÌá9nÑ”_s)¿æ0é,3¨SX }WˆnA¯ùž{ÒéRoGÒHV‹ó HßNÎG ï0´Ð‰ú::“S9ØÛaˆˆˆH T€ˆ\l¾ÿ^ý'ìþ-³¹è˜0 ¯ˆYÔ Ý'}éѳ7¢y«â—¼S1ž“F[žÛæ/öîù:bøÿwòž-…ÓF„ù'´;à“ݽAL})\ÖÙùX§¹½6¿ùÙHÃÿÉC!àÒ€ÞÅ>ãMù5—òkuB?¢' >ɳ? Ž9:ñçòÿà”ц+¿ ­å¤GÏïi%¥îï[isvª‹›åû#–ÌòÉüË>AîÓP•øÛ.ggôKÚÁÕ=á—W:_ÍÚ´ÇíÃa#ÌRŠÍÂ~þ’Ò’fºi’ƒÖ‘ø%?–tdG¥¿½3×>ãMù5—òkuB?¢Ä']áѳ]b=ÌÁ!9pí-…=·7düÖ½ý•°c•st¯·Bt_÷ŽÓÅúÓC_¤—í{þRq' t ?ß÷?ÂGyðùÞ&u´K9©¸ƒÙšTŠ5Ž»é”cs)¿æR~Í¡NèâGô –e)àçArCÐG´¶{;ŸeP¸oƒ²î§ƒ%ŸÛ‚þÊèÀ ·œi¾ëc³Ã‘“ðåx›óOÃý ¤‹õ~ø ±Ö#ͤˆˆˆ´tz"Ò@Ö³Ãð¸:øãLêgà/[œEGQÓ Ÿ ¶‘,­¸—]•-h¨3¥NèâGT€ø¤2oТåB‡ößÏbŽ}¡ÛUÍ“G”Tœz·yìqôäcÛèêŠò!Ò»~çèCŽ}0‡—x5Óø@Ž[4å×\ʯ9ÎuBwg?Ó+Xg3cÆ ’““騱#V«•ŒŒºßS5 ƒaÆaµZ™>}zm^|ñEú÷ïOhh(={ödîܹØíõýkÿ»{! r÷{;‚.ýnoGÀ*Ûͤ—>Ñrçñ·hʯ¹”_sœë„ÞØEÐÅ ôä¬üü|–,YBbb"))),]ºK=C”.^¼˜={œ£ÕÔö©§žböìÙ<öØc$''³yóff͚šC‡xå•Wê8òåM¹”F+0¢øÀv F0×~F„åt­m;ôÁ¿„_ÀÑí5·¹dt½¢z™pÍùóÏÖ þ&‰p^OeEõ¶‘]¡ËÜÊù Vt?ÏÆÚ,¬Øzut~ä$|ù›ô¤mêsŽ[‡CŽ8>³_KÀ:[2ß9úx<ñBŽ/*ʯ¹”_s¨ºø guïÞ¢¢" Xºtií÷íÛÇã?ΟÿügRRRªm/((àÉ'Ÿä׿þ5O>ù$Æ Ãf³1kÖ,ÒÒÒˆ¯åèž}4}ÈÇâ²i îL|ÀÎ: .—C\"üíj/@z ‡áƒÕGï®Á Î?#»Âµ÷Ax8²½æ¤Ó¥0â7Ð&Æù½¯^S¬pÃöiÀ'»ayÈ¥žêð£óË!Ï1»áQà…_T”_s)¿"½þ¿´{ŒŒ 4eÊ’““¹í¶ÛjܾvíZÊËËIMMuYŸššÊÌ™3Y¹reˆgX¨ ›„AÝO}¬?-ŠýFC¯¡bR°ÍÈb…€à³sz\°-"æìµ ‡ð(ÿ¸žZY€@+„œýçÞ7R¯ƒSg'Dò ðïîëÊA|hûyÍý?<à3ûµ|`»ÅeÝ~G78ºRf„z%&¯Óñ#*@ܰtéR¶lÙ®]»jm³}»óñ@BB‚Ëú˜˜:tè@^^ž©1zCt_¸ú‹ôv$M׺# J®þÚá<$ÂCœ“ Bèyviï\Î:ºŽDp«ÅÁi#›Qû‰›ìWóBùqÌÑ©I!­9êˆiô~í×3¿ì‘z‹e‘‹Š»ÉÕ ]¼@H#:tˆßþö·,X°€Njÿ¬  €ªm‹ŒŒ¤   Ž³ìb›¬Ôèµ,¸g’·£0Y¿¸í2hæ,Bâk¿Ÿþj»|£wÿ‰pË–Uü'ûÝjmÀÑ•SF›ÚÏýÎk0þžzC\m»©ÎóÔæÛʾ*>˜cq“òk.åוTœßÐýD]Ó…9—á}!¶-$ÄAÛꈈÈEÎÝNè*@Ä T€œgêÔ©ìßï|ýÈb±°bÅ V¬XÅbaïÞ½tíÚµQÇ{üñljˆˆ`ñâÅ,X°€ØØX{ì1fΜYÏžkÞ½ptåÕò_ó…ý ì¸]  jóB|`»…ÅSÖòÆëƒ«^5‹W ¬ù86* ÄŽ¥B;°b'õÏ»ReXçâ¼½ïí(Z6åØ\ʯ¹”_ó¨˜?¡ä<{÷îuk?‡ÃQë¶éÓ§3}úôFq€[q´D=­{øïÿåCëÏYa›À#¼Aû7¢y¥ü>ÖØntY¿É~5LêMfE(ÿ´«eïŸ$|É„àDZŠÜŠ¿&ùKÅ|lÍI£m³×gLzÐÛ´|ʱ¹”_s)¿"= >©‹·ð1Ö£Œ~‡Zñ¾íVÎаä¤Ñ–Õ¶›jÞxm"ël ;rÐ:ú|C'Ë1,t²£åD½û•­8nD×83w^å²*&‘SÙB;û]—ìíZ>åØ\ʯ¹”_‘‹ž†á©Ã¶Ê˘S:‡‡KŸç·¥ øÄþ³í·ÇÑ“çÊ~ÃÃ¥ÏW[ž+ÿ {æf&""Ò\Š‹‹IKK#..ް°0’’’xûí·´ïñãÇ™}ûöåÍ7ßdÒ¤I8&Mª}VßòòrFŽÉ©S§xá…ˆŽŽfÑ¢EŒ3†õë×» Üs¾ôôtJJJg\i™T€ø¤½T›ÄÇô í{À¿^„3?Â5÷A×+ ÈhÚ°F6~äJȶÝÎûÈzÛ–­8ftr':ÿçf~¥”cs)¿æR~Mb‡|@Vó~5[½z5ëׯ'++‹‰'0|øpöïßÏï~÷;&NœˆÕZóË4¯½öyyyüûßÿ檫œ“j1‚Ë.»Œ3f°iÓ¦jûlÞ¼™E‹ñæ›o2aÂ7®Eü…^ÁòIÛ¼@½N€ƒ9PRåÅpt»óiˆ£öŸc¾ãÂoÈÀÂQG ;+ãë]ö;ºÕØÿã¢àf~¥”cs)¿æR~ýÆ{ï½GDDDµb 55•ÇóùçŸ×¹oÿþý«Š€€€î¼óN6oÞÌ‘#G\ÚWTTššÊƒ>Èå—_Þ¼">GˆOòý_\¿YŸ…£yPtþý |ýØJ½Y´ïèíZ6å×|ʱ¹”_s)¿&±7a©ÙöíÛ‰¯ö”#!!pΗV×¾ƒ ª¶¾¶}çÎKYYO<ñ†¡ñ„[:½‚%néy•ðíz8¶ÓÙ¤Ò†Æ ñŠæ«  €Þ½«÷elß¾}ÕöÚVµ«o߯¾úŠgŸ}–U«VæïrKS©ñ•8U gL;Eyü’0B-õuÖzDÂÞoàÌNçºåp¬ÂLx ë”-Gi !M?XE¥©y¼è)¿æSŽÍ¥üšËŸó{²Ôùÿ±Oª¤®b¢îý¼Çn·“ššÊ/~ñ FåÕXÄsT€ø‹ã§aùðñNÓN‘k=ÄÜ€+ ·4l"D[Ƀ“g¿ßô5¬ÁÍÛÞÊ(J*ÿ 4C²û8Ì_ÛôãHÍ”_ó)ÇæR~ÍåÏùÍ/v.>©ùŸ€DEEÕø”£°°°j{]ûžkW×¾ .dß¾}dggsâ„sž­S§NÎ!yOœ8A›6mjíì.þIˆO:¸vÎâ4ð¹{3µ7ÔAà ¡¸Ý凳‹)Nÿh¦cí„ÕëšéXRòk>åØ\ʯ¹Zb~ó½@½wv9ß©Z[4ˆ¬¬,‡K›› ÀÀkÝ7!!¯¿þºÚú ÷ÍËËãäÉ“ôéÓ§ZÛôôtÒÓÓùꫯjìO"þËb¨§Ï8rä“&Mâÿh®_´EDDĆNVV±±žF?''‡!C†«7Ž ÜÄÖ­[ôÀ0qâD† Bxxý¯‡‹ÿÐKVVVµ¡éDDDÄ·ÅÆÆz¼øpÕü}@ÆŒÃèÑ£yà8uê½zõ"++‹uëÖñæ›oV÷ÜsË–-cÏž=téÒ€»ï¾›Å‹3ažyæ:vìÈK/½Äwß}Çúõë«Îѯ_?úõëçrÞ}ûöЫW¯Z',ÿ¦ÄÇxÿ˜ˆˆˆøŸæïðî»ï2íÝí™ eIDATsæLfÏžMaa!ñññÕžˆ8‡Ëð¹ÁÁÁlذ3f0}útJJJHJJbÍš5 :Ô8¥%Ñ+X""""~ê§W°²KÝ8Âàö_Á1‹†Qâ#Š‹‹IKK#..ް°0’’’xûí·½–ßùûßÿŽÕj­qÙ¼y³KÛœœFEDD‘‘‘Œ?ž½{ÍiÌŸ3cÆ ’““騱#V«•ŒŒŒÛ6&—/¾ø"ýû÷'44”ž={2wî\ìv&ñq ÍïäÉ“k¼Ÿ/½´æO:•_§ 6p×]wÑ·o_ÂÃÃéܹ3cÇŽ%''§Z[Ý¿×Ðüêþõ¤s¯`5vQ~ÅóT€øˆqãÆ±lÙ2æÌ™ÃÚµk¹âŠ+˜4iYYYÞÍ/=ýôÓlÚ´Ée0à§ùMvíÚň#°Ûí¬X±‚×_o¿ý–¡C‡’Ÿï/Ã)š+??Ÿ%K–`³ÙHII¨q´“Æäò©§ž"--Ûo¿uëÖ1uêTæÍ›Ç´iÓ®®üÞu×]FDDDƒŽ¡üþ䨱cÕÖ111ƨQ£ªÖéþuOCó«û×|[·n52 ØäÆ’iÆÖ­[½})rÑðÞ{ïÁ„ \Ö§¦¦røða>ÿüs/E濌:ÆV°Ûí|øá‡Œ?žÖ­[W­ïÚµ+×_=ï½wá$MR[>“˵k×R^^NjjªË1RSS1 ƒ•+Wš¼¨ë~mÈvP~/]m]xx8ñññoÃ0ªý¼P~k–‘‘Qµ<úè£.Ûtÿ6]]ù­î_³¨ºø > %%…ââb²³³]ÖgffÇUW]å¥ÈZ†¢¢">øà’’’&00[n¹…wß}—âââªv`ãÆŒ7΋Ñú—Æär̘1„††’™™érŒÌÌL, cÇŽõTØ~/;;›ÒÒR®¹æšªuÊouO<ñ¤§§“žž^m»îߦ©/¿µÑý+"sæÌ™ãí .v½{÷æ³Ï>cÉ’%DEEqòäIž~úiV¬XÁË/¿\mT©Ý¯~õ+¾üòKNœ8Á±cÇøøã¹çž{8tèúÓŸèÑ£ài套^bãÆÄÄÄ››Ë”)S`Ù²e´jÕÊËWâÖ¬YömÛÈÍÍåý÷ß§cÇŽX,vìØA= jp.ðX,<ûì³Øl6ÈÎÎæ÷¿ÿ=wß}7“'OöîÅzA}ù=|ø0·Ür ååå²{÷n^{í5{ì1ú÷ïÏÿøG‚‚‚å÷BÏ=÷?þ8cÆŒaÊ”)}ú4gX"u²†ax;¹8h^ñ """""â1*@DDDDDÄcT€ˆˆˆˆˆˆÇ¨Q""""""£DDDDDDyyyÇßÿ=† GGGxzzbÖ¬YÈÏÏo6îæ‚€mÛ¶aäÈ‘prr‚‡‡¦OŸŽììlÛàå—_FPPlmmáãラS§âÔ©SÛýá€T*Å›o¾©uŒ¯¾ú R©'NÔ;^""ÒÆÂ—ÈB¨Š€‡ U³˜øøxØØØ`ëÖ­¸zõ*ÂÃÃwïÞÅéÓ§áåå…þýû6oÞŒ/¾øcǎŨQ£`ccƒsçÎ᫯¾ÂÖ­[‘žžÀ”)S ‘H°víZÄÅÅ!..N}îž={ªÿ>wî\¤¤¤ 003fÌ€««+Nœ8÷Þ{û÷ïÇž={ “iþ“SZZŠ‘#GÂÅÅ3fÌ€ èÖ­[‹y˜?>þõ¯᫯¾Â‚ ´Öýõ×hhhÀ¼yó`ooxùå—Ñ·o_ÄÅÅÁ××ÅÅÅØ¾};ž{î9\¾|ûÛßtžkúôé8uê¦OŸkkküøãX²d N:…­[·jl»råJ¼úê«pvvÆŒ3àííà£>ÂÖ­[qüøq¸¹¹iìcHÓ%}sÖ«W/øûûkÀýÏD"Áþýû1jÔ(uööö9rd³ñ&''ÃÝÝÿýïñä“ObÀ€êu®®®û­\¹[·nÅO<øøx¤¥¥á»ï¾Ã™3gpîÜ9ØØØ´ùú7oÞŒ;wbêÔ©;v,NŸ>~øÄñãÇ¡Þ6''£FBQQñôÓO#//›6mÂöíÛ±iÓ&Lž<°|ùrüüóÏX±bÔÅFff&^{í5øùùaݺumŽ“ÈÔTMª ÙÈä"²¾¾¾‚•••P\\¬^6gÎÁÍÍMP(™3g‰D"üûßÿV¯ß¼y³ ‘H„3f¨—åçç ZÇß¹s§`ee%¼øâ‹Ë<(H$aéÒ¥:ãZ³fúõõõë–,Y"H$aÅŠË%‰ ‘H„çž{Nhjjj{A6l˜ ‘H„#GŽh­‹ŠŠ¤R©pæÌõ²œœ­íêëë…øøxÁÚÚZ¸uë–ÆºØØXA"‘½zõÊËËÕËëêê„#F‰Døúë¯ÕËssskkkÁÍÍM¸zõªÆ±^|ñEA"‘óçÏ×XÞ³gO!88Xçõ-^¼XH$ÂáÇ5–š³ßüæ7‚D".^¼¨^6mÚ4Á××WèׯŸ0zôhõò²²2A*• ‰‰‰­Æ«zß×®]Ûâu¸ºº .\ÐX7gÎA"‘7nlÓ5¨Î%‘H„íÛ·k¬ûôÓO‰D"$$$h,OJJ$‰ðÑGi,?vì˜ “É¡ªªJ½<;;[pqq¼½½…üü|áÞ½{BTT” “É„ƒ¶)N"SKOO¼>Bzzº¹/…º6Á"² ‰‰‰P(8xð zÙÁƒ1zôhH$ôëמžžOITW=A???X[kOY5~üxDFFbÏž=zÅõé§ŸÂÆÆ_~ù¥Ö·Ùï¾û.<==±~ýz­ýlmm±|ùrH¥úýSÔ\gô'NàâÅ‹4húiMlllðÊ+¯@.—ël¶ï½÷žÆ·ù¶¶¶øûßÿX½zµzù7ß|¹\Žßÿþ÷ Ó8Æ|'''¬_¿^gS4}’3UÓ;ÕSApðàA$$$ 11'OžDmm-åçI„v÷zÐþð­ÁTýsn ÕšŸN¨¼úê« ÁÔÍ¿nݺ…}ûö!((H«YÕ#<‚Y³fáîݻزe‹zyhh(V­Z…’’Ì™3¯¾ú*.^¼ˆwÞyGãÉQGÄ> dIX€Y‡›a]ºt EEEˆ l"«ÑÜæÀH$Z7”ß|ó áíí kkkuûýÌÌL´9¦ššœ={®®®øç?ÿ‰%K–h¼Þÿ}ØØØàòåËZûÁËËKß4`Ö¬YprrÂ?ü Ñ¿âË/¿ Ýùš½ÞØØX­eª¡€Ïœ9£^vúôiP¿rwwÇÀQ[[‹K—.éy¥Ú ÉÙß›³gÏ¢¬¬ HHH@cc£º¿‰®‚µ½¬µ, €²‰ >t½'R©TÝ„Lõ¾¨Þ“Ñ£Gë,ÖT¿ªíTfΜ‰çŸGŽAJJ ÆŒƒÅ‹ë#‘9p,²$,|‰,ÈÃÑUßh?x³‹Í›7ãüùóðööÆ¥K—УGoæßxã |úé§ðóóÄ àïï¯î/±fÍ­NÄ-QÝ@ã/ùK³Ûéêïн{÷6ŸçAxúé§ñÅ_`ýúõxùå—QUU…ï¾ûNNN˜3gŽzÛœœ :ååå3f ÆWWWXYY!77k×®E}}½Îxuõ­ÉdðòòBII‰z™ªjîz|}}•••]ïƒ ÉY@@ÂÂÂpøða‚ þÜ$$$ÀÍÍ 2™ û÷ïǸqã°ÿ~¸ººbÈ!íŽUåá>!Ôýô—¦¹þ.ª¼¨Þ‹ÖÞ“‡·ÐSO=¥~ºöꫯr˜a""#cBdAzôèdggãÖ­[8pà<<<4š©Š‘ýû÷ÃÇÇ€æð»wîÜÁÿýßÿ!::LJ£££Æ9t5•j‰êæ2&&Fïæ4í¹±{á…ðÅ_૯¾ÂË/¿Œo¿ý555xþùç5®éŸÿü'ÊÊÊ’’‚ßüæ7ÇHMMmv)Apûömõ7õ*r¹%%%pqqQ/Så °°‘‘‘ZÇ*,,ÔØP~k/—Ëuž»¼¼¼Ùë64gcǎŪU«žžŽýû÷#,, =zô :{÷îEaa!®\¹‚ǼÃÞtß¾}[çò¢¢"÷s¬úSµüaºÞ())Á¼yóàààxýõ×OOÏöO$"U,Cö#256Á"²0‰‰‰ûöíáC‡´š¤ôéÓG=“®ù?rrr }ôQ­âãÖ­[ÈÉÉÑ:§jòB]ßV;99!** .\л9M{ 8ƒ ™3g‘‘¡þÆZÕ?D%;;‰O=õ”Ö1tÍ©ò ‡GŽ€cÇŽA¡P`àÀêe111Ín_^^Ž3gÎÀÞÞ^£8qwwÇíÛ·u!úrm‘˜˜ؽ{7Ž;¦ñ™HHHÀ¹sç°aÃõÏmÑÒçB,ºrÜÔÔ„cÇŽA"‘¨ßÕ{rìØ1ñ©úQ©¶”EçsÏ=‡‚‚|öÙgøôÓOQPP€çž{N„+!2.6Á"K„Ȩžp|òÉ'(//×êw š´ððáÃêÒ¼¡TuÈ>zô( …zyuu5æÏŸ¯ófMõíosM³þßÿûhhhÀܹsu6iQ llóçχ xã7žžŽþýûkõ7† ZÍwïÞÝêŒêï¿ÿ¾ÆÓˆºº:üéO †Vå™gžµµ5>ûì3\»vMãï½÷ªªªÔÛ¨ >X³fÆö)))8~ü¸ÑŸ@ÄÇÇC"‘à³Ï>CuuµV"–-[ íý?Zû\ˆáàÁƒØ¾}»Æ²Ï?ÿ999ˆW?Õñ÷÷GRRrss±bÅ íOž<‰o¿ý˜2eŠzù?ÿùOìܹ³gÏFrr2æÍ›‡™3gbÇŽøÇ?þ!þŵ;¡“%áçŽÈ¨nÏŸ?@wÇçøøxlÚ´ UUUˆŒŒÔhß­[7Ìš5 6lÀ€””„ŠŠ ìÝ»0`€FkèÝ»7°aÃX[[£GH$øÍo~ƒÀÀ@$''#==+W®Dhh(Ƈ=z ¬¬ ¹¹¹8zô(æÎ‹•+W5sæÌÁ[o½…£GÐ~ú(çY³f f̘iÓ¦Á××.\ÀîÝ»1cÆ lܸ±ÙãGEE!** Ó¦MƒL&Ãÿû_äää`Ò¤IûõìÙ+V¬À+¯¼‚˜˜̘1^^^8|ø0ÒÒÒ©¾¹Wyíµ×°fͼôÒKØ¿?pæÌ¤¥¥aÒ¤Iضm›‘²¤äéé‰~ýúáìÙ³ê UFŒ{{{ܹs>>>èÛ·o›Ž9räH888`ÅŠ(--U7ù{íµ×4š¨Óã?Ž)S¦`Ê”) Å™3g°k×.xzzj}¾þýïã‘GÁ‚ °gÏ 47oÞĦM› “ɰfÍõSÀ_~ùúÓŸ†/¾øB}ŒU«Vá—_~ÁŸÿügÄÆÆêìPOÔ¨ž€²‘É™kü_"2\ÿþý©T*øøøè\ùòeA"‘R©TxõÕWµÖ×ÔÔï¼óŽ&ØÙ٠«¯¾*”–– qqq‚T*ÕÚç—_~WWWA*• R©TkžŠmÛ¶ “&M|||Á××W6l˜ðÞ{ï W®\ÑØV"‘ñññíÈ‚Òüùó‰D"8:: :·9~ü¸0vìXÁÝÝ]pvvF-ü÷¿ÿ:¤s~“ØØXA*• »ï¾+ ¶¶¶Bhh¨ð—¿üEç*‚ {öì}ôQÁÝÝ]°µµÂÃÃ…·ß~»Å¸bccÁÕÕU˜4i’pþüyaÉ’%:óÛÞœ½ù曂D"  µnܸq‚T*fÍš¥sß   ó–ìÚµK1b„àää¤þÌݸqC¡ÙëåÜ)‰DHNNnSì)))‚T*Ö®]+lß¾]1b„àèè(¸»» Ó¦MÓšE%??_x饗„ž={ 666‚···0eÊáÔ©SêmÊËË…ÁÎÎNç\§NR¿ÿ•••mŠ—ÈTTó€¤Bš¯ÎBf A0o ÔyUWWãÝwßŦM›PVV†Þ½{cáÂ…˜9s¦¹C#¢ÄÅÅáèÑ£&íÛ@DdˆŒŒ 4ßУu—< ==]£O”Š¡÷2ûöíòeËpñâE”––ÂÕÕ}ûöÅ[o½… &èÜþ½÷Þùsçààà€I“&á£>‚···WEû€ˆhêÔ©X·n–,Y‚]»vaÈ!˜={6RSSÍu"†t@W½Zbè½LYY¢££±bÅ ìÝ»_|ñ¬­­ñØci¶xøðaL˜0¾¾¾Øºu+>ýôSìÛ· F™À•:>ÉŽ;0iÒ$¤¦¦j|K0nÜ8dff"//OïÙŸ‰È4âââpäÈNúDD‘ê È÷ú°ÿEÓ û ˆ±ïeär9‚ƒƒ¢1 áСCQ[[«î£'NœÀ#<‚•+WâÅ_4àʨ#ã°H¶lÙgggõLË*ÉÉÉ(((ÀÉ“'͵F"‘tØy0ˆˆtc^cßËÈd2¸ººª'"€üü|œ:u Ï>û¬F13bÄDDD`Ë–-zƒ, ‘\¸p‘‘‘Zß DGG233͵ÁÁƒÙÿƒˆº€8R+`d"5¨í×îzwž ü¹ØÝ›ì{cÏÆ­^TVãø²ú‡¡p vU/¿¸á"ª‹îaèëC ØÈà^P„}ïÅüÁØã~ »2Û÷~躎Œˆhl“i½{^ß ¯Þž]‡Š¼VŽ:ˆ~ÏE£ûÀû“(^Ûu ·Ò »d´FlDè¸ôŒï©^f¬ßŽx{^ß §îN@Ç|?ö¼¾®H²øëPéhסʯ%^Çñ/ puÿ]ÈmïŸLP·Ï7£°°ÐlH[&"ÜòëëA•-loȽÌÃ|‚2iÒ$Lœ8¿ÿýïÕˆêªc>|ž¶œƒ,GÁÉï~÷;¤¦¦¢¼¼\£íä† 0gÎ?~ÇרG5’ì<€…š¿ð>ÝŠðè¸í ¾fôX»—ÞÁÄãû\p£ÕmÓ;¿äÍoûÿxóëõq£{vŽLD¾·~ÿ {V”ᱟ÷!ü¦v¾º/Š>ò²]ßym;¦• ?«W(Z ¼»cÇÈ$Üèоéà_\ˆ‰Ç÷!°è–Ñý°£F`ϰ8­åŸtÿoýAôówe̱¸˜_qYr~¯ç†b÷®I(¾ÓMsEA°jP³siˆIuïpÀ èoÀ³0¶I÷(X†ÜË´fñâÅxÿý÷QTTäçç£GøðÃñÇ?þQcÛÞ½{#((»víÒÿ¨Cc't‘L™2ÕÕÕøþûï5–§¤¤Àß߯ k~gg‘£³ © ©#?~}ðiŸ[°›¹Cèô˜cq1¿âb~-G»îet‡†»»;¼¼”ÿûûûcèСøæ›o4†>OKKCVV¦NÚþ ¡‡M°D2~üx$%%ᥗ^Bee%BCC‘ššŠ={ö`ýúõ-·i´ç?Îu6¶¸‰¬ÀPT8ºõØÞÎF==ÄÁÛÁÜ!tẕ¸˜_q1¿â°²d|­l¥ÐÌ m½—™7oÖ­[‡œœôè¡lÿûÄO`À€èß¿?<==QPP€””9r+W®Ôx¢²lÙ2$%%aúôéx饗pçÎ,\¸ÑÑÑHNNÖÿ¢¨Ãc"¢Í›7ãwÞÁ¢E‹PVV†ÈÈHlذ3fÌh}ç.®Qfì€`\ Šh}c""¢.N&¬[šÔ£¹ýZYß–{…B…B[õ5 ßÿ=>ÿüsTVVÂÍÍ C† ÁöíÛ1aÂsÄÆÆbÇŽX´h&Ož <þøãøøãammH×zêèX€ˆÈÑÑ+V¬ÀŠ+ôÛ1l¼8`öÖ·!ÃEÍ6d.^Òs,.æW\̯8d2@fHÒJ+ç¶ÜˬY³kÖ¬ÑX¶`Á,X° Íq$&&"11±ÍÛ“ecÒYÙ¶¾M ÖÀ{öü2Å(ܪÊšÅnž¨t¼ß®Íš s,.æW\̯8dV€µwu¼$s`'ôŽèÚnsGЩ¥þbî:‡Ðüë—v@kÄ­ÌÔ‹fЍë`ŽÅÅüŠ‹ù%"¾Qâ‡æŽÀ >@À¯gëÛšÓÆùúïÓ- ô ¸S«ttA^·T;8i,ŸºñI3EÔu0Çâb~ÅÅüŠD åd úR´¾ ‘±±!£ñ žŒ–mÔÃu9r™ ÕöލrpB•ƒeÖëóŽÝ4Sd]s,.æW\Ì/±éˆÎšx˜& Ð$•¶i>‡€`å„|4ù‡DH­”“ôYÉŒ3W†mC=¢¯]ÄàKgáRSÕþ>à£=¿þå׸uÅûð5Iø›Òf'>Jk÷1$‚+E“ÆKªàlY*ÆÈ15ùó+U}_ìBfÀ&XQâßMzºJgœŒ„»Înè›söõµzíïæô‰Ü<”?ûõlLu6¶È é¬À0Tyjõ Ï+ÿt÷F&WÎ3€Æ†ûÛ¸¸}ÞÊŸ»÷0jÚÔ O¶û¡ù×y=KcÙmod†ôÆ=;‡vßÒ#ÇÔ<æW\̯HØ„,?v‘ÌÞ¤§«±³Çå pH üfN› 'À³›òï¾=€~CnþÆ‹©Qfì!¸ÑúÆzrøµÏ´³«²pjl²Î)ÿ”HGgÀ·'=Ä8ÅTWcí`ÝúF­p¯*Gè­\8ÖÖÀ®¡p¥g²‚Y€À89¦æ1¿âb~EÂ> dAX€A"ú޾ʿÛ;®æÇX¬m€è¡@ä@ÀÝÛÜÑt]×üƒpÏ΃/FøÍs‡CDÔñq^² ,@È ^Ý”¯ÎFjtC͉yU::£ÄÍ _Š<| ·÷¬2wT:ºÀµºAzu×êðNDDD–‡HGþ>H IDAT”¶˜ºÎÜQ˜ Òqü|ü”Hï$ò½}qdàs|ÔÛØ¢Þºù¡w÷-8€ÄǶ;†&©B#qí×!×ê­mPcgÚæ‰•±rLº1¿âb~EÂ' dAX€tDNÝÍA›467s”öQö ±Í4ó ÃÓÆcn·|üPæâ†ÀÛùp«ªÔÚÚ¡ØÍõÌñáhœA‰D=Ô/i2VŽI7æW\̯HØ ,?vQßY掠Mê뀳'€ª å¨Q–rŸøûxÝËâ€1”Ãîv%—‚"p18ãÒª öòûÁFˆŠZ‹‹ùó+vB' ÒÅnµÈ˜llÞ†:ÀÉÕÜÑ´_^6pb­Ù«³*qó@V`˜º9SŽOT98áLD_Üêæ@Õσÿ<Y 6Á" Â; 2˜-9ÀÜQÏ«Àí|åˆ^–Z€4I¥¨³±SUkÝÔ›ÆF4XÛ ñׂ¢À«;Ò¢ᮋ›Æ¾™!½M/u=|ð¦§ýû÷ã¹çžCDD€'Ÿ|ZÛfdd 11ÎÎÎpwwÇSO=…ÜÜÜÖORÞ†mÈ`—‹Ìx*œ\p"z0vŽLÄΑ‰¸Ò3\Ù™;¤·z٩Ȩ±o.’Ë¥¢›”˜cq1¿âb~E™ÐÉ‚°ÑÓ_|¼¼<¼ñÆعs'>ýôSܹsÇÇÁƒÕÛ]¾|qqqË娴iV¯^¬¬,Œ=%%%-Ÿ$íS‘¯¢kûãfsG žZ[{dãlxΆG!«Gò}üp¥g˜zY®_ êuŒne,ûÿx@´c“s,.æW\̯H¬ÚñjAuu5^ýuøûûÃÞÞÄÆ[ ç‡~ÀŒ3 ã™gžAvv¶Ö¶qqqJ¥Z¯‰'¶ýúÉ¢° –ž>ÿüsøøh“4~üx„……áƒ>@|¼²‡ó¢E‹`oomÛ¶ÁÉIÙ;{РAÇòåËñá‡6’Qo‹?Ÿ[F£ÈñB©«î:»µ¾±‘ŒÿüQ“««bŽÅÅüŠ‹ù‰H}@¦NŠS§NaÙ²eˆˆˆÀúõë1{öl( Ìž=»Ùý>þøcøøø`Ñ¢E C^^>øàÄÄÄ -- }úôÑØ>44ëׯ×Xææfºÿ»È´X€èéáâ‰[·när9¶mÛ†ßþö·êâ-[¶´\€8ù=nK#k’#ðv>jììQäÙ µ¶vF;vsÃðvF•ŽÎ¨tt6é9];Áˆs,.æW\̯HD(@vìØ}ûö!553gÎÄÆÆâÆX°`fΜ ©TwcšŸ~ú ÞÞÞËÆŽ‹   |òÉ'øòË/5ÖÙÛÛcèС\Y"6Á2‚ŠŠ ddd ** píÚ5ÔÕÕ¡_¿~ZÛFGG#;; ¦Ó¢Ø5Ôcà•óqþ\«+ÍQ—³eË8;;cúôéË“““QPP€“'O6»ïÃÅøúúÂßß_ý…íƒA¬é‡©#bb¯¼ò jkkñÎ;ïJK•ì<<´¿j÷ðð€ ¸{÷®Ic´42kÜè€ì€`Î~MDDÔú€\¸p‘‘‘ZO9¢££™™™z…˜““ƒ¼¼<õ¶ºví<==amm°°0¼û««Óëød9X€´Ó{go¿ýŸ|ò hœƒžI1Îq,X½µ ÎDôÅÿ¢bŒÞ„hÙn£Žr|Ù s‡Ðé1Çâb~ÅÅüŠD„Q°JKK›ý2Uµ¾­är9æÎ ggg¼ñÆëFO>ù›7oÆO?ý„‰'â£>Âøñãùd¤“bvXºt)þö·¿áƒ>ÀË/¿¬^îéé (++ÓÚ§¬¬ ‰îîîÍXΊ_L5lý&ªÆšFs‡Ðé1Çâb~ÅÅüФOD¨P(0oÞ<?~?üðüýý5Ö¿ÿþû??AAAxë­·°uëV<ñÄâI&Å' Zºt©úµpáBu¡¡¡°··Ç¹sç´ö;þ<ÂÃÃacÓÂ0¨W¶ßNÖx•}ônî9­±Ùµ=9Ø8y“Öî;_ÙÓ_ÕXV˜Q„“7¡¦¤FcùáÅG´¾Ê+&¯Ôž/㳃À‚4—Õ4(·=öШz©¿Ékµ/mæ—Àg4—í¹¨<ÆÃV/>Ó®ë(¸Ó¨ó:¼œ´¯£AR\o2þu¼’ |õ³æ²çJÛ|yØ8y“ÖØù¿|v ûhgÙXÓˆ“7!ïØMåR3±5y›Vl›gþˆ+?fi,kïç*vé˜Nq@Ç}?b—Žé×tÌ÷#vé˜Nq*í:TùµÄ븼v?ÊW>£ùôúÇ€uIZ1˜\ž€¤æ“wi¾Þhá”§§§Î§ª/XU_¸¶DÌŸ?ëׯGJJ üñ6]Î3Ï<-ö3!Ë%ølKoï¿ÿ>/^Œ÷Þ{K—.չͬY³pèÐ!dgg«GÂÊËËCxx8Þ|óM|ðÁZûddd`РAÀ é€_ŒÆ:ŸnExtÜv_3þý*òz&þ¼nÕ¢£­ªœ°ý‘$ƒgçö¬(Ãc?ïCøÍÖóu6 ØõP[Ø9fý‡tÚ6)ðîŽ#“p£{€x'!""£»žŠÝ»&¡øN7ÍÀªAHOOGLLŒîE¢ºwHŸÄhÔÙúþw€AßAgì¿ûÝïššŠòòr~ 6lÀœ9spüøq Þü˜‚ àùçŸGJJ V¯^çž{®Íqݾ}¾¾¾X¸p¡Î{&²l|¢§üãX¼x1Ɖ'"--M㥲téRÔÔÔ`Ò¤Iصk¶lÙ‚Ç{ >>>xóÍ7ÍxÔw/ (pâ‘DDdiDè„>eÊTWWãûï¿×Xž’’ 6¬Ù}UO>RRR°jÕ*½ŠX»VÙü`ĈzíG–}@ô´mÛ6H$ìÚµ »víÒX'‘HÐÔ¤lÃÓ«W/:to¿ý6¦M›™L†„„,_¾¼õG–u!KL%ÕÊfX ‹†ÆÎ.¦©3©)©ƒ—ƒ¹ÃèÔ˜cq1¿âb~E"BñãÇ#)) /½ô*++ŠÔÔTìÙ³ëׯ‡D"Ì›7ëÖ­CNNzôèxíµ×°zõjÌ;}ûöÕø’ÖÖÖV=pÏÑ£Gñ÷¿ÿÓ¦MC`` jkk±sçN|ùå—HHHhs“-²,,@ôtðàÁ6oƒ½{÷ê’CKý÷3±ÆàV.ÐX„:nê;¢¹ë€­/k/¯¼ \W^‹ÿo4ØOs·cæÖé­oHcŽÅÅüŠ‹ù‰HÐ7oÞŒwÞy‹-BYY"##±aÃ̘1C½B¡€B¡Ð±Jõ…íêÕ«±zõjc!''àçç©TŠÅ‹£¤¤‰xÿý÷Ùb¤cÒ þ¹#h“ú:àÌ  ªHr³œdÉ$Ý˳/…y@ÒTÀÓ€v´¤4fÉhs‡Ðé1Çâb~ÅÅüФ•æT-î×GGG¬X±+V¬hv›5kÖ`Íš5ËrssÛtúÐÐPlÛ¦=èun,@:"¯H“žÎ©æ"ò²~3v -œ¸zP(€†: à†²ùß!ÀÙíþv2Þð 4,&ÛÆô˾ûú:d†u.(àÂ/ÀBåÏ·óÆF IÔÜ.œŠ‹šßßÁIym¹Hñ)+F¯¼k(ôꆿžˆÈ»÷ª \ E™k C@oLwQOؘ̱_q1¿DÄ„àT{®f"¸àF³Û45)›ZåeÇvr¹æúÓÇ5¶µ\Ü /@lÐ'÷ kï¡Ð«›Q †:àâiàb†ö:y#påœòÕ¯nÊWG.@¼ËK1âü/8Ñ×}Tt=Šn¡ÈÓ[ô„ˆˆÌ ÏBô0 Ô&¥·³'ëY@“ÂÜÑ>š¤R\éë¾=PâÖú˜íDDdX€á0¼ÑåÍ–Æz ¼¸WÀÂgŽù:p÷¼ºÖ-ÌiÉêlíPäéƒJGg nùøárÏpT™ £ÎÓ‘ñ1Çâb~ÅÅüФ ê|±!3`Ò•\6wZ<»£ÆQƒ©…ÿcu¡8tÖÖH…žÝp`ð\înòse´Ð†Œ‚9ó+.æW$"ÌB$6ÁêˆF-4wZì”ý9 n¿ûm±þoPt¨½§ìÛÒÕØÙ£ÆÎ^åeˆÊÑ,h«œPä郑ÿLø×8QŽK÷1Çâb~ÅÅü êrêjÓ'€Ëg€ºsG#®üëˆ}h„€kþA88x”h™û€aBmR^ \¿\»¤‚×’ åÓ{Uúí'‘Á@hÀÍKœØŒÅ«¢ Áù7Ð+/.]h@q†\<ƒì€ äúõ„`é´ˆˆˆY Ô&ew€Ÿ÷Å…æŽÄ|¤R ÷`ð˜ŽÝ M*ð-¹øôcp®©ÖZïu· ”Ÿ„µ¼×ýzZú˜DDˆ6!‘Ø ½#Úõº¹#èÔf®5l?…B9wÈÑ]@IíCéZ]‰áçÁÀ+ç`ÛP¯s›bwOމÌ^¢'oá¨ô æX\̯¸˜_‘p,² |ÒEÍ4wZd6€«PS­| üµùדּ•%ÖTkOªØAP>²²‚L?¸T›8ÕÞCTîÝÔÚÚ¡ÖÖ^c››Ýü‘Ñ«Ê]E‰að«ƒD9.ÝÇ‹‹ùóKD,@:¢#̯_‡á½˜¤µìÑ£ëÜñQÁ›~ (+nÛ~R)Ð'ˆ¤œCÄäøátD´Æ²j{GÔØ;ˆvÎÐGCD;6)1Çâb~ÅÅüŠ„}@È‚°¡6qp‚"”3¢K¤,¸‘Y~€¼ÈLoû~ àã§ÌCGUoc‹|o_4Z)µ¯öÆ•žafŽŠˆˆD'…aÅã“°!êD*]p¢ï`ØÈ÷D|ÒADDˆªO‡!û™ëÞŽ(÷ ¹#h—î=€þÃn†£QfÿžÈê†{vƽ‰þñŒQס4Êd¸ëâ†ÛÞ¸íá §š{xå<¼ËKMÕ³Lv®®Š9ó+.æW$ì„N„HGtm·¹#h—°>@â ÈðcÔÙØâtD?œè;N.F‹ R1êá:´‚—v@Ý)Ý2S/šì\]s,.æW\Ì/ñÁ[G”ø¡¹#h+`cÛ¾cØ66 ÷,X)špµG*€óv¨Çå^"ò®Áµºx;ö uè“{nU€7\íŠ;û–e°©Ÿå¸ts,.æW\̯HØ , 2ºÆåLãÖ¶€ÌÀO˜µ¼á7sa-—£À»»Q Î̹¦³Îk=ñˆÈ»†ˆ¼k€ì€`”¸yB.“¡Af­ó8²¦&XË!ia¼åF™ ÍìODD&ÆNèdAX€Ñ]»Ô×ý†= œ/£ÞÆg£p%0 ŽÆm‚ÕÕùÜ-AlÆq\ ŽÀÙð¾tLëp§ý¯^€¬…IR®ô Ã…ÐH1C%"¢¶b't² üØ‘ÑÝÎÊKÁ† M)*]Pîì†FC£N.÷ªàr¯ •ŽÎ8ÞWçlè•w}íR³³©€ • ÌÅ —ÉPáè‚z›6Çá|¯Î5Õ€FkkT8º ÁšOTˆˆ Â&XdAøà­#:´Äܘ]c=^9‡á~Q÷g0–äµF=\—’OìÃÄû0úô xU(GÚÚš¼­MûGÜÌVï?òÜÿàV].f¸J[sL†a~ÅÅü¿Zn§ÿüç?xá…àè航ª*uøãÿˆ“'OB&“aìØ±X¾|9‚ƒƒ[>hÀp#ÖVgc‹ë¾= k’£{éXÿ:‡„.n^@ïþ@áM处rõº2+@f¸z“ êmlQgk…Ô¸uò£}Ú¾­³Ð=°¶¤V€»—QC1+Ê»è“{ M°üŠ‹ U´<Ûd£L¦"¹ÖÎMRå×h!¶òùVïos[;(¤Vp¹W…!kj‚ ‘ ÈÓwÝô¹¬.¡­9&Ã0¿âb~EÂ> dAX€´C~~>Þzë-øùù¡²Ró[úË—/#..111Ø´ijkk±hÑ"Œ=gΜ—W w²aãEŽ\S•£NF B…“ Æž:ÚbÒ#ðîÝ¥]€øqö$€};Yª³±EF¯~¸Ü u¶íRë!³‡´}Ûî@Ü$ÀÙUù³‘§$1«žE·às·Dç:›ÆFÈšZ.@rüƒpdÀ@“ÔJý>õÕ¦óg†âF÷åþVV¨µ±CØ­\Œ=uŽu5[Ép`ð( :´5ÇdæW\̯HØ‹,ëÞvxñŤ¤$´hÑ"ØÛÛcÛ¶m?~<¦L™‚íÛ·£¸¸Ë—/7Sĺ5I­pÏÞ5vöPHZþHØØ.ÝýeÎnÊç}boåz7å(X†²n’#ðv>B ®Ã¾¾ÎðµÀÙ è7 ‹ÌÉÑè;ˆxvûõšÜÛ?¼pGbÓØ×êJ/ûúÚGÀ¯òRôÉÍ‚}}ª!·Òï>Ÿ²bô͹Œ¾9—Ñÿj&†g¦£ïµKð¬(ƒku%ܪ*Ð'7 ³ÎÃÍÈÍðˆˆ:C&!lCÇõêêj¼þúëð÷÷‡½½=ˆ7¶Î?ü€3f 88Æ3Ï<ƒììlÛïÛ·#FŒ€££#¼½½‘œœŒâââ¶];Y>1Ð7ß|ƒ£GââÅ‹øóŸÿ¬±N.—cÛ¶møío '''õòÀÀ@ÄÇÇcË–-øðCËžëãAîžÀðÀ¯§ñŽiÛPYçá^ye.w4ÞÁåÛÞÈÏ|ðãâ ÃŒ~ÚN#$ÿzÜÎÇΑ‰(òôió~€ 8öôñf·³R4¡Oîx•—¡ÂÑåFž’ˆ¨S© ÖÔ©SqêÔ),[¶ X¿~=fÏž …BÙ³g7»ßÇ ,Z´aaaÈËËÃ|€˜˜¤¥¥¡OŸûí¡>Œ &àñÇÇ_ÿúWܾ}o¿ý6pêÔ)Øè1À Y ¸}û6^ýu|øá‡ðóóÓZíÚ5ÔÕÕ¡_¿~Z뢣£±wï^4444ÿ Uxð‹1vØô«cÙÀ(¢É;v£z4»>àvúä^ApA^‹Çi’ZábH/\î†RWc‡iÑZË1µó+.æ×rìØ±ûöíCjj*fΜ ˆÅ7°`ÁÌœ9ÒfúiþôÓOðööÖX6vìXá“O>Á—_~©^¾`ÁôîÝßÿ½úxÁÁÁxä‘G°zõj¼øâ‹"]!™ ›`à•W^AŸ>}šý…(-UŽäá¡}ÓäááAp÷îÝæOp–Ã4‰é£=掠s;ñQZ‹ë½ËK1äâiø¶¸B*EŽ_Od†ô†B*…sM5¤ …1CµX­å˜Ú‡ùó+U}_-<5Ù²e œ1}útåÉÉÉ(((ÀÉ“'›Ý÷áâ|}}áïï[·îO–›ŸŸS§NáÙgŸÕ(fFŒˆˆlÙ²¥ÅË&ËÄDOßÿ=¶mÛ¦Q¹]âßÅ;6aÃóæŽ s›ºáI£Ï©æ†ff`Ðå³p¬«1ê±-•±sLš˜_q1¿"¡È… ©õ”#::™™©Wˆ999ÈËËCTÔý.\¸Í¶Q­§Î…M°ôP]]W_}¯½öºuë†òrå¼ €ŠŠ Èd2xz*ÇŸ-++Ó:FYY$ ÜÝÝ›?‘¬ÃGuMVV(qõ@·/êÜóÛMIEeí`ÜÉ%‚Y“Úƒw]ÆÎ1ib~ÅÅüŠD„Q°JKK¦ÝfYÕÂCÕâ£-är9æÎ ggg¼ñÆçxð˜ŸGŸsåà=”””àÎ;X¾|9<<<Ô¯ 6àÞ½{pwwdzÏ>‹°°0ØÛÛãܹsZÇ8þ<ÂÃÃ[îPµ~"ðídWÙGáæžÓ›]Û“ƒ“7ií¾ó•Ý8ýÕYe…EØ8yjJ4¿A>¼øŽ/;¡±,¯ ˜¼¸\¤yÜÏ ~Ð\Öàÿ ÿÝÔ\žú‹î ÿf~ üxFsÙž‹Êó=¨ÎÆÏÿ`ƒލp¼ßùXŸë(¸ÓØæëh€T÷JhïuÀ+©ÀW?k.»q®´Í×Q‘W“7¡ä²æ?¿|v ûмŽ9æý­ÇdD¬ë8}CÀ__I×ë:nåTk,×õ~Ô4S>“ãbzªñ¿¨œêÝ'·äêœÄlóÌqåÇ,ebý~èó~4Ö4bãäMÈ;¦ù r!5“×ÁëàuXàu\^»å+ŸÑü?zýcÀº$­LNÕ ]ß— î æÍ›‡ãÇcݺuð÷÷oó¾sU‘å“Kͪ¯¯GZZšÆ/ƒ øðÃqøðaìÚµ ^^^èÓ§fÍš…C‡!;;[=V^^ÂÃÃñæ›oâƒ>Ð:~FF ¼®Õ ݧ[·AÁ×D»¾ÈëY˜øó>¸UW´ºí¾-À±ÝÊ¿†ãgw¬:;œ 냬ž¡¸éã‡='àð¬(Ãc?ïCøÍÖóu6 ØõPûÀÿI¾À„⌂UàÝ;F&©çÀ0&ÿâBL<¾E·Zߨe2왈_"¶yŸ˜+ç0ñç½°mlhv›"Oäu Àù°H\÷ 4F¨DDív=7»wMBñnš+ 2€UƒžžŽ˜Ó"£ºwHßÄè1Ñ®zÿ‹À ™Ðûˆ# P(´úzdff"::«V­ÂóÏ·Ü®Y<ÿüóX»v-Ö­[‡9sæh¬ß½{7&L˜€;v`üxÍyЦOŸŽ'Nhô¡ÎO@ô`kk‹ØØXŒ3FýŠE·nÝ`ee…1cƨ‡•[ºt)jjj0iÒ$ìÚµ [¶lÁc=¼ùæ›-Ÿ(m… ®¦c³m¬ÇÀ¬s~þ\««ZßAÛNÆõ𷜆¸æ„=Ããq³[Û¿%ëJŒ‘cjó+.æW$m脞º˜üšæë›?d¿~ýpéÒ%(äüùó€¾}û¶’ªøHIIÁW_}¥U|RRR°jÕ*<÷Üs:·ó÷÷ÇСCñÍ7ßh:iiiÈÊÊÂÔ©SÛvýdQØ ÝÖ¬Yƒ5kÖh-‰‰ÁÞ½{õ?`ßYFˆŠšóûxsGÐ9È­d¨³µÓš}Èï|Ì2Wwdôî‡r'W€¼R… 2k(šk¾+jOŽ©u̯¸˜_‘ˆ0áøñã‘””„—^z ••• Ejj*öìÙƒõë׫¿|7oÖ­[‡œœô衜ãåµ×^ÃêÕ«1wî\ôíÛii÷‡_¶µµÅÀ÷›î.[¶ III˜>}:^zé%ܹs .Dtt4’““ ¸(êèX€‘A®á\Xä{û혾%·1ö—#È Ä¥žáè{í<+Êp6¼/î¸{ígQÿüQ½÷©prʼnè!¸Ñ½‡Ñg¾ïŒ É1µó+.æW‚ xš!ð«h2 ‘“ñ:õ’6Ã+.×@W½÷‘[Y¡ÚÞ5v|ìÔ†ä˜ÚŽùó+Ž&+ É€»º&6Á"3`ÝK‘H”/¢öø¸9C IDATA"""êRø„  XÛ—N›;²d ÖÖ¸Ü WÃPîÌoE‰ˆ ¥0𠈂O@È ø¤#:“bîZåÕ‰œ,ðžqÙnsGй_v¢ÍÛÊ­dÈÁ…ÐHT98‰Uç¢OŽI̯¸˜_q4YI ·’êýj²âSh2=>éˆäu掠UYçsÿîîžæŽF?5œRBT5æ¡ÓcŽÅÅüŠ‹ùG“•šdú¯Üd¥ 7~@D-`Ò ~Ѥ§³il€gÅ]t++†¬©å„ªÊÒ;@v&pí¢r™½¨ÿµnró:ò¤ÕKWþYW ”ÝŠ ¦&å2E“òçÜ+ÚûI$€‡àâfºX;²r'W»{¢ÒÁYcyìÒ1-îWåà„ë¾°njD½-ªÅ ³Sj-ÇÔ>̯¸˜_q(¬¬Ðd¥¢°’€™ ‚KM5†e¦#4ÿ:ìë[~úr38¶¨(»¿ìn pb?`m­üyð`H¬ˆÉÝbàø^àæ5@þërÊ';W/ho/µF= D 6mœUN@ŽGA¥£~M§nùø¡b˜3¤‚…TŠJ6½"""êRX€dr9<*ËáVUÑê¶µ÷”Í®äIPÉÎlíÿ`ÀÓG„€DwÅÝûËPyWùz?à<ôe—æTS ß’"4IýP«Ç¬µ¶v¨åÄ‚DDFÕ)š ˜Ö¼I„XˆZÃNèQÝÝÖ·éÀ®]öý¨l–Õ•T·¾ÍÂ#€GŸC¥ É¿Žqix;_cyMI™"ê:˜cq1¿âb~ÅÑ+È xR´µ ŽèÐRsGÐ.!ÀÐ8À§ƒÎ§8wþûÜÒE·Œ¥Ê÷öCZô`yh>æúiîv3EÔu0Çâb~ÅÅüŠC+4A¦÷KÁ„Ì€M°:¢Á¿3wíÒ35ÎÜQ4oÉ$ý÷¹™äN€ÑC²HyÝpxàH­åc–Œ6C4] s,.æW\̯8 o‚¥!¢–ñ HGäiî:µ˜@sGйùÆt7ws,.æW\Ì/ñ ]up;_9\­=GX%""ÂÀþ >!3`BFwí"PY £Ì Qç§0° –¢ Žƒ ‰¤í3À ‚‰D‚7"2’­TŒM°:¢Ë?šôtu6¶¸Ñ=·|üÐ(³n÷ñd6€ ë åíW?›;‚ÎÁ³¢ ½o\…ûCÃ7Ÿþ꬙"ê:˜cq1¿âb~Å!‡Ô Q°ä]ðV033ÖÖÖðððhóëÂ… ¨­­5wèF½EìâJ.›ôtUŽN8Ùw*œ\Ÿ~ ÖNòa€Ð>ÀÈ$å éQF0ïsGaùBó¯Ãçn1…»Î®êåEEÀ¼þfŒ¬ócŽÅÅüŠ‹ù‡â×Q­ô߯ë=€•+WbذamÚV.—ÃÆÆF䈺 Ѩ…&=]“Ô Õöޏgï…¤ýß„ØÙ®îFL$ÿšmî:Û†zHM°mlÐX>á_x´N‚9ó+.æ—ÌmòäÉðððhóöVVV˜uFpìØ1Lœ8ppp@DDþú׿jl“‘‘ÄÄD8;;ÃÝÝO=õrssÍ1µWp/àÑi@`˜¹#é8®ùa÷ðxÜìæoîPˆˆº<Õ< ú¿x+H¦ÇOž¾ýö[ÄÅÅÁÝÝ_ý5vî܉·ß~[c›Ë—/#..r¹›6mÂêÕ«‘••…Ñ£G£¤¤ÄL‘7ÏJÑçšj8ÕÞƒTàp|ºø*gw7ƽ¶U“2ߎµ5ïo_œŒ„ÛÞæ…ˆ¨Ëk2¨ºaC÷µ =äççã…^À‹/¾ˆõë×ã±ÇCll,æÍ›‡wß}W½Ý¢E‹`oomÛ¶aüøñ˜2e ¶oߎââb,_¾¼õíz]Ä«Ðær¯Ã23sùìëëLzns˜¼Ò¼çw­®Äðó§såìêëÍŒ6NÞdî:=æX\̯¸˜_q(ç‘éýRtÑäàÁƒHJJBdd$¦M›†Ó§Okm“––+«®™±±ÑÃþóÔÔÔh=ñx\.ǶmÛðÔSOÁÉÉI½<00ñññزeKë'ŠšiŒpÛL"(`-o„µ¼ñÿ³wßáQUùãÇß3“Þ;¤„P t&ÅHSPD\¾~®®X¾ËOÄRQX|–ÕÅ]±«F¤."%„ªB€ ˜I !½LÚÌä÷ÇÈdÒ37Sr^Ï3zn9Ÿ{r÷Ì=çsUW·kÝÆðÒø–S˜7®BqAÛë—UWcs·½ÁòÚ{ÈKƒ‚Åm,-ѾÒík^JJJX¸p!þþþØÛÛ3hÐ ¶nÝÚäq7oÞdáÂ…Œ7777är9[¶l©wßñãÇ#—Ëõ>S§N5ôåÚaò<ð øúúÈ#øøcýo(«;Às‘1ˆH œ8qOOO._¾ÌÀ±¶¶¦S§N,X°€ââbRRR(//',,LïøÐÐP’““©¬¬ÔÛ¦£ËH)ÂoP‘£3§û…s®÷ÊlíÚµnc˜Ò·åÇ\¿Ñ; -¥íõ9¹pªÿâ{…Qacyí4¥‡±C°x¢¥%ÚWZ¢}¥ÑºùMÁš={6_}õ+V¬àÀ :”yóæÕèqÉÉÉ|ûí·ØÙÙ1mÚ4€Fÿ "66Vç³aÆ–7D3¼óÎ; 2„äädŽ9Bjj*sæÌᥗ^âý÷ß—¤NA—ȂշnÝ¢´´”Ç{Œ·Þz‹‘#GræÌ–/_NBB?ýô¹¹¹õ¦wóð𠺺šüü|:uêÔÞá7H¥°"ÏÅgWÔrñª±>ŽÎй 885½oSª¬¬ÈsÕ¶·9ë”—ÍÀ« Üôñ#Ç­ùé AÓ" Ö¾}ûˆ‰‰!**йsµ£3ÆGjj*‹/fîܹÈåõ?nÜ8²³³8wî\“{{{† Öâø[#..Žüã8::àêêÊ×_M÷îÝyë­·¨ªªâí·ßn—X:*ÑiFCyy9+V¬àµ×^`ìØ±ØØØ°páBŽ9‚å}£-h³`Ý? °P¼Åèqë~w²84|¼è€‚ ™º•Ʋ`íÚµ gggæÌ™£SÉO<ÁéÓ§9²þQ÷¾íhÎ0¦öꔟŸ··~•U«VaeeÅòåËQ©T’ ĬñôôàtQŠˆˆàüùóxyy——§w|^^2™ w÷&VéÛ2¾©óÉ[7ôhÝ R)Ñ×êÌ·ÿŃœÿüW²Ìø,¶Î܆2G©S~|ù âVgÐÕK„&ÿ†]e9iyÚ‰ÚIYºçýè(ü#^·¬ ˆÒêÄu"ëê9÷SØ}A·,úrýÃ_Œ‚­‡J›}'מÒ)ËÈ®ª÷:žý,ÞѼë¸ü°²[{PXµî:>ÿE·,õbn³¯£0­­3·‘“”«S~ö£8bÑ)«TªxæÝ~NÖ­ÏP?{¯ÃJ­ærr9ï-8£sWv_móuT)«Ø:si?§ë”'D%²'r¯^l;çîæÊî«:e†úý0Å븲ûªE\˜æÏ£&vs¿Ž¦v5±˜ãu$m9LÁÇóuÿþf|5Y/†ö&E¬„„úôé£÷–#44€ÄÄDƒÅŸ’’‚§§'ÖÖÖ³téRÊË¥IŒãïïß`ìË—/gùòå¬ZµŠ•+WJR¿²j1»¦Ù,XÀ'Ÿ|Âùóç0`@mùÕ«WéÝ»7ëׯç¯ý+...üïÿþ¯Þd¦ˆˆnܸARRR½çgðàÁÐc2<­³Í§SSø‘ÀPG§¼;L>sŒî·R±V«ˆ~áÄì‚r%¨TºÛ °²û€1†‰-µsûGMâ–·o‹Žó,ÌcÚ/1ôL×o¯¹ŸÂÖg!ýÞ ·n€ª î½l¹\û¶£fDÚð 0aF.äÞÙ7j2© sÂ{øßÉdêɺfÝ4ø¹ëR)¬(³µãаqœïõÇœ§sw3{ëÃ’×ß‘‰6––h_i™sûÞ¸ÄÁÓ¹“]guFù¤Þö·ß~›€€z÷îMYYûöíãßÿþ7£FâèÑ£Îiÿýßÿ%--£G6¸ÏªU«X¾|92™ µZmÐú1«Eyä>ùäöíÛ§ÓùñÇ>|8 …‚3f°sçNÖ­[W› «æF_´hQÓMjß PÚIèƒÉwv#,9‡ò²÷íÒ¦< qpõ’î6¿n: ºIpm}Vû§‡ŒšW.ÂÅ3PuOnw žwÿññkÿ8MÝ5ÿn\ îË-oÝÆ1× s"ÚXZ¢}¥%ÚW5ix[sœ±­ZµJçÿ#"" äÕW_eÏž=<ôÐC­ïÉ'Ÿä“O>!;;Ÿz÷yûí·qpp`ï^ý·qBÛ‰H Lš4‰éÓ§óÎ;ï Ñh>|8qqq¼óÎ;̘1ƒÑ£G°råJ†ÊôéÓyã7(++cÙ²eøøø4¯ÒÎÊlíø½K¬Ô*zßøî€xvÒ~ÊJ¡ Š @£g7ìaÃÁξƒoG ƒ2%\Ž×v@äríµô€¾ƒÁ·‹±£4]%öŽÜöðAÙ¸}E.¥ÅÈëyÓVfcG‘£3š&5 ‚ õkÎãQYº­SVZ¨j`oíÐóšä:÷ªf^34] óçÏçÕW_åôéÓï€Lœ8‘‰'6¹ß¢E‹Lò¹ÍˆH }ÿý÷¬\¹’M›6±råJüýýyå•WX¾|yí>½zõâØ±c¼þúë<úè£XYY1qâDÖ¯_/é/k{ Ó¾%8}”%ÚUÂCÀÆÆØ‘µ•µö-NßAàîeìhL[Э¸”sºÿ`’ºõlöq]ng0<ñÜÝuPt]÷ëFlÿÁ”ÙšI/VÁDhš‘R÷¾yþÜ7Ï_§,%¾ˆWÇÖ»XXQQQh4y —.i‡@ôïß¿Q7L̰l¢ÒBvvv¼÷Þ{¼÷Þ{îΡC‡Ú)ªöçîÖÖÚ¡Xµvø•WgcGeU•PY±#1m®%E8”+¹Ü£W‹Žs*+¥[f:¶Uúëá”Ø;¢P‹†Ah)5rT΂5kÖ,>ýôS¶oßÎc=V[¾yófüýý>|x«bmŽšE ʲeH*• ++ñHÜžÄ8Stl…±#°hõeƒªQU —ÎÀÉC§ýb²$õe¯ K´±´DûJK´¯ùˆˆˆ`òäÉ,X°€Ï>ûŒ£GòÜsÏͺuëj'‡?óÌ3X[[“ž®›Ñlûöílß¾#G´ÐΞ=[[Vã§Ÿ~bêÔ©|ñÅÄÄÄðÃ?ð /°dÉ&NœÈŒÊÓ€cÇŽI¶à¡Ð0ÑÝ3E#ŒEkl%t…|»j‡“bÑÁŽ¨Ç”îÆÁâ‰6––h_i‰ö•†º•“Л¶µsçN–,Y²eËÈËË£OŸ>|÷Ýw:oD4 FoØÔ½ûÈd26nÜÈÆu2Kùùù!—ËY¾|9999Èd2BBBXµj•äó/>ÌÌ™3Ù´i“¤õúDÄ(‡­P¯yCÞfeaÃ`€è¶ZÿyýZ}¬ !Æý6¥-m,4M´¯´DûJ£9s@:®1ŽŽŽlذ¡Ñ·_~ù%_~ù¥þ¹›1–9((È(™¦<ȬY³X°`úÓŸÚ½þŽN ÁÁdøæÜæþ¸Ÿè•šÜô΂ B­š,X-ÿt¼GÁ}ûöñðÃóÐCñÁ;œI¼ÁdxæáY˜‡ÒΞ+Ý‚Ž ‚Ù¨Y ½5Çu4³gÏfÔ¨QµÝ…ö×ñº½æ ó¼±#°h?‹/×%•öszÓ; m"ÚXZ¢}¥%ÚW06µZ­­- EÇë|™ Ñ1E¿šG\a޾й ØØ;šæ[mì,Û©uõç“ G´±´DûJK´¯4jVBoéÇVBoo[·nåÈ‘#üùÏ6v(–‚eŠ&5¾Æˆ©°µƒ#ÿX Ý\|'þ¾‘Ôìï6vO´±´DûJK´¯4š³zCÇu4³gÏæûï¿gîܹøûû³zõjc‡Ôለ)²2U Õj(ÈÕ®açÖf² ºƒ™Äi®¬¬Û|ŽN¹wtE»Òn¹­-7}ü(y‘k¢…†‰ö•–h_iH•ËR=ôÐCìØ±ƒG}”0gÎc‡Ô¡ˆˆÐjåpá”Âćź‚áݺA·¬›Üq÷äаñ¢"‚ÐM+߀h:àÓ¦Mc×®]\¼xÑØ¡t8¢"´š-ôì¯íˆ8¹;š¶ à¾Ð)@ÚzœKKtå"ÎÊ~ïÒƒ syuÔŽ¬Ô*¬Ô*l++W7K^0oeyr@NÞï2Ý 2Ð[¦f—úÊÛº¯×Õet5Ý'‰ß%A¸WDD÷ß¿±ÃèpDÄÅn€Ù_;Š&ÙØB¿ÁÆŽ¢å=¢_ІŽ+‰G8–•šr…FMjç³î€ÈªÁJ¥Â¦ª• \NÌâ#Lú›øË\J–ØÆe¹2¾‘“¼Ï¾¦;ƒõºšî“Œ…eÞ¿¦@ÕÊ4¼­9ÆÒØØ˜ï¿ÃæJt@L‘SgcG`ѺzÔ_žœeڕлIW‘“ ƒû‘H¹9¥«‡\£¡Êo8–+¹Ülw/\»ZÀë0'ÚXj®ÆÀ¢‰ûW5Y°Zsœ ´7Ñ1Eý7víå õ——Âí[ ,•¶þ*+kr\=ÈwvC#7ï¿øeTãVR„w~¶• }yˆ‘£²|¢¥6ÜØX4qÿJCdÁj½¬¬,vìØAZZeeezÛ?üðC#DeÙDDî îá£ÁÃGÚz\JŠ™‡{q±ý£´s¶B iär‚úp)¨¹® ¼ZA$'²`µNLL 3gΤ¼¼¼Á}DÄðD·Wh5Ud¤BZ2”+MÛ©TÚ õjµ´õTËdTZYSeeÍ3IÍ“F&#Ç̓›>~”ÙÚIR‡mU%]²nªJ’:A„ŽiÑ¢E 8 .P^^ŽF£Ñû†': ¦¨àº±#h–š4¼±G 0ߨÑ4_RVýåɉ³2nH[¡“ ±¡CˆïF¹­yÏ©ONR®AÏç¤,eøåx†üv‡rýWã‘¡ÛX¨+ÇØX4qÿJC¼v"zK>}Vrr2Ë–-#,,LLFoGû®3U±ÿ0vÍR­Òbí܉»SÍÂk;ë//WBaÜÊ µBA±ƒ¥öhd–÷+xøµ#=ŸB£ÆIYŠSY)rį§Ì„¡ÛX¨ë±°hâþ•†úî$ô–:ö¬^½zQTTdì0:Ë{ú±÷½nì,Ú?ÅIEüÓòÒ—šÑÆR›jì,š¸¥Q3¤¥ŸŽ>dÅŠ¬^½š¬¬†G’“ÐM‘“o»Vç\ZBßW N¿†}eãC\Ò¯AÒШ¡²²nBe9œŠÑ]ŒPa }‚ ´±·FMÞüíµ¤\†ªJm™ª.¬týãdrè=ºJ˜¢×œ\óä·Àž¤ÕY¹Ñµkã)Loúøqhøx-W›çìfÖö ©©6ÚJ´¯”Äý+ ±zëÌœ9“S§NÌÀñðÐO¨²gÏ#DfÙDDÀ±\I¿kItÏHmrßì[pú¨vú½.Õý[;ðò1ÍHâmg##í2• ’/k?u)`gîž`ï(ý‚…¦î–·/±ý[žN3ÛÝ‹lw/ "A„–ùâ‹/X»v-r¹œk×®qóæMí2™y'‹1U¢"ͤÑÀåx()‚A£Á·‹±#A-±Hë¬^½šéÓ§³eËÜÝÝN‡Ñ±ïºVˆ‹‹ã¡‡ÂÏÏGGGúôéêU«ô®‰gÒ¤I8;;ãîîÎ#<ÂõëÍÌnua³áj­=غ㪫µCήý¥m˜¯fSYIçœÛøäç :篜\{ÊØ!X<ÑÆRûÙØX4qÿJCÝŠ XªV®bInß¾Íÿýßÿ‰ÎG;¸té÷Ýwééé|øá‡üøã<þøã¼óÎ;Ì›7¯v¿¤¤$ÆJ¥bÛ¶m|ñÅ\½z•1cƓӌôŽª†ÃÚNYiÜú]K‹™Ç +±“:å–T)ÅZRm,5ѾR÷¯44­Ì‚ÕÑ'¡0@oØ• =1«¾ûî;*++Ù¾};=zô`üøñdff²iÓ& quueÙ²eØÛÛ³wï^œœœ:uj¸¢ò|Ã.èÈ)/§¦÷“ŠSY)aÉ—QhÔ¤v ÂÚÆxÁ´‚O~>ù9TËä¤Ô“gY™£ÄÁK¬×!%ÑÆRS¢}¥"î_i¨‘£’`ÖìÙ³‰‹‹cíÚµ„„„ðÍ7ß0oÞ<4Îü׺’““ùöÛo4hÓ¦M#**ªÁ”¶ÇçÁdÆŒ¬^½šÛ·oóúë¯3qâDâââ°±‘îßÉcÇŽIvn¡aâ H \¹r…I“&áëëËŽ;8qâëÖ­ãË/¿äÏþ³á*:¶Òpçô<ý•që/tÒÁ:ß+Œr[ã#žþÑØ!X<ÑÆRû¯±°hâþ•Fk& ×|²oß>bbbø×¿þųÏ>˸qãØ´i“'OfñâÅhYPvܸqdggsðàA^yå•Fc_¼x1½{÷fûöíLœ8‘'žx‚ï¿ÿž„„¾øâ‹V·‰`ºÄxë­·Ðh4¼¼¼xúé§yòÉ'kßläåå韗—‡L&k:ÕÛ¿ò{³Œ9’víÚÅóÏK—œç‹/¾ --+Vèm[±b=zôàÉ'Ÿ”¬þŽJ¼iÄÄDúöí[Ûù¨1dÈÚíÁÁÁØÛÛ×;aéÒ¥KôìÙ³éW‰Á·3u>y릑}^g·”èkl¹Mïðý/äüç¿ê”eÆg±uæ6”9JòãËOpèCÝ}Óò`æÇ”¥{ÞŽÂ?âu˪€( M·˜_Õ°üýK›û)ì¾ [}Y[_]/FÁ÷æ2úâüžˆµJÕèuÔÍ-Ÿ‘]Uïuü’‹w4ï:.ñÇw¡29ô ‡1Â+Ñ-»ŽÏïi —’"ÿ{ŠS¿C•QÐäu¦²uæ6r’ruÊÏ~GÌâ#:e•Jϼ›ÃÏɺ1D…Èz†Þ¶ôçñyŸi}?ßðÎ^‡üdSNãÁS1ú77·z·yzzòá‡JZG%«n¬[*蘲˜òÀvO1øuuÎÍfêɺg¤6¹ï¹Ÿ`ÿ÷ÐÔÜi[;xð18Ê01^èÙŸ}£'QfkßôÎh'JOû%†žé ·WZ2ø2êþÞ…D̡㚷CÊml¹íáÍ•nÁœë=¥]ó®©9üïd2õd ]³¤Ÿ þÓÀ‘Dßâã¯\dê/‡°­ú#ÃM?öšDz'F(˜“¼ßeD/T¼O|/&•Q¯«¹ÿ}Ë[ü´=ݸÄÁÓ¹“]ggF>7>•}ƒß­7ö‚ƒƒÙ·oŸNyff&þþþ¼÷Þ{¼þúëMÖǰaÃØ¼y³ÞÛ„o¿ý–ùóç˰aÃt¶ýå/aË–-”—K·>š³³3»wïfâĉzÛ>̬Y³(*jÃêÃB½Äßô-ðÿþßÿ#''‡É“'³mÛ6Ž9š5kX´hýúõãÁ`åÊ•(•J¦OŸÎصkÓ¦MÃÇLJE‹ù*c+tr!¶ÿÝ9 ¶–7DAhReÁ2¶†&®Raaaƒå*•Jòú;"Ñi©S§rìØ1\]]Y¸p!3fÌà?ÿùÏ?ÿ<'NœÀêîš½zõâØ±cX[[óè£IHH'Nœh^:·¤Ý_‰ù(vpâRPRºtG¥0Ì”¥ºÃˆÚ›]e]oßÂïNV*óý6Ò/'“a‰ñtÊÓM“¨?œF04ÑÆR«;”J0$qÿJ£& VK?eÁòôô¬Íîy¯šy®†HQ[sކæÎJ·ÿþDEÕ7¬R»uÍp3Á°Ä$ô3f û÷ïor¿ððp:ÔºJrêŽ9î¸ò]Üø%l8>©Æ0߂ħÁ3£ rªVq-)bDBÎ¥ÅdyúPimž¯ƒnÞ KÖ-öšÄmïÚò¬ø,xf€#³|¢¥–iì,š¸¥¡}£Ñøc]zÔIÒ£tç»TÖ£ô‡°°0¢¢¢Ðh4:ó@.]ºhÞÛªæ/^$""BgÛ¥K— RGc^~ùeæÏŸÏ“O>É‹/¾H@@éééüë_ÿbûöí|õ•‘SgZ(Ñ1E÷½aìLF5€ ƒu>66œ¶¼]9:s¹{É=Ì> ¯ŒjdèN#{pãsÓÛ—CÃÆÓ'õw‚n^À­¤‘ qxæó[÷³[¥½5ÕÆB[M3vMÜ¿ÆÓeÞ(ºÌÓœ™#ƒß®wÿY³fñé§Ÿ²}ûv{ì±ÚòÍ›7ãïïÏðáÃÛ“¿¿?Æ ã믿æÕW_­íèÄÆÆrõêÕ&Sø¶ÕO2™Œ7²qãFd2jõs ÇǾ}ûX¶l3gÎÄÁÁ3fð·¿ý k †)oذGyD§³Ô½{wž{î9ƒ×%ÔOt@¡É5ì*˱­ª@fÆY°s]=ø-°g‹s+)¤×ßuÒðÖp)-Æ¥´˜2[;ò]Éwq£ØÁÉá ‚ X4õÝIå­9®1ŽŽŽlذ 64¸Ï—_~É—_~©WÞØJéuMš4‰I“&5{ÿ¶X³f ¯¼ò C‡å‘Gá‘G!((¨]ê´D,St`¡±#°hõ-²×ž œ9Õ(ñ!aT´eIuUߢ`-tëÄ¡Ëí[ˆÈò¢…ÆÔŸG0 qÿJCswzK?¦ž†W ™™™>|˜!C†°aÃzöìÉÀYµj—/_6vx‚耘¢~sÛµº2[;’ºsݯ[“™<| løø5¼O'è?Ü} ¨¼4^û§£3ô …®AÚEëãê}ÃaÀíu{vª¿–¨²²&×̓|7ÔrËûòÒà6ŸÃIYŠon6åeˆÈò¢…Æ kz¡ÕÄý+›B¡`„ lܸ‘[·nñÓO?1aÂ>ûì3ú÷ïOŸ>}Xºt)çÏŸ7v¨Ëòž~,A—‘íZ]±£§ûnÖ|„.A0ùèÑ»á}‚ûÁ¤YhØ8 eJ_íŸî^0j„ƒ†ú]`ütí èS…®Áí§¹ šÒÃØ!X<ÑÆRC1¤$î_iÔÌiù§c? Êd2FÍßÿþwRSS‰eæÌ™|÷Ýw <˜   /^lì0-Ž˜" ‘É©°¶¡ÒÚ¦Ét·VVw?õ<°wò‡ ¾Úˆ½ƒDÁ\¶ö`c uZur…à»×âê¶–7RªÍºÞ¾ÉØó§HîÒ ¯Î?¿\£¦Wj2NÊ’÷)·µ#9 9n¯_ÁœH‘«#6lÆ cíÚµ\¸p;v°sçNþö·¿;4‹": ‚Át €1`ïhìHÚÎÙÂG‹7é–™ŽßLÊììZÔÑÈåTZÛ`¥Q£P7¼¼B£¡wêïôNý½Á} œ\(µw ÐÉ•Šêº=IA„¢f%ôÖ'ÔoàÀµsCÃStý(ø…; ‹µû<<ÐØQX®+»¯Òëá·§ûø=|ý¯ýF¯Ôä6ÕåPQÎà¤_q-)æbp_ŠÛt>sÑT m•42ÎThqÿJ£9+¡7t\G¶råÊÚõLê’Ë帹¹1dÈFŒÑΑY6Ñ1E)aô"cGÑlÖ6Ú7.î 3ƒ/R¢ÎŠˆ!”Ú9Pà슲μ¡Ä¨Ë>\(íÈðîL·¬ô6Ç`SUIÐÍȪ«ù½KÓiª…¶J@t@¤#î_Á”¬\¹²Yû7Ž~ø''‘ÞÌàq±šô¾±#hw/9  ›–-Šm[Ÿ5v–áZ@ GL ½“¿Nùì­7z\@vSN­]]h¹¦ÚXh«G›ÞEh5qÿJCÓª èŠ?$99™àà`Þ{ï=nܸR©äÚµk¬Y³†àà`bccùú믉géÒ¥Æ×bˆ7 B›Uk@U*˜ï²zBKÉ5¬U*äÕÍ_h ÀYYB`FZ½  ‚ ­£iåJèšþ]ôÿýßÿñ?ÿó?¼þúëµe¼ñÆTUU±lÙ28@JJ Ÿþy£ 2 Í×±ï:Á òsáT \< UÆŽFh/5‹vÍ‹ ‚ [ëRð¶.s–%9~ü8£FªwÛÈ‘#ùùçŸ1bíšE¡Íì´ëƒthxA?ÁòØU”ã^\€­ ô:]KŠ KN¤Ç­(4-{##‚` j²`µôÓѳ`Y[[_ï¶øøxlîŽ-W«Õ8:Z@šOѱï:Sul…±#h·»s@†k'¤›ºÈ-ÆŽÀ²í‰ÜÛîuzæ1æB,¡)¿¡P«Ú½þöfŒ6îXþkì,š¸S2kÖ,–/_ΦM›(((   €ÿû߬\¹’Y³f@p°ÈÍo(âûjS`^©Þd€\®¿˜Ÿ©ªY ÝX\JŠžp÷¢|’C(·±5n@ÖcJw£Ô+«®FVÝ1f!«;±R·”Ìñþu(/£÷«x§qR9;ƨ" oë|ðÁ\¹r…矞çŸ+++T*íY£Gæƒ>Àßߟ+V1RË": ¦(8ÂØX´yCÞ&“8¹H7œÌ¾¢œ7(·µ%9 ‡v)v Ò^?£ÕmSU‰Ki1ÅNTXX»Þ˘mÜ1„;‹fJ÷¯me¶U•”ÛØQimÝà~Öª*ºeÝD‘¡À¶ÒøÃNë#VBo777Nœ8Á8~ü8¹¹¹xzz2~üx"""j×™7ož‘#µ,¢"÷°²†ÐaÐg€6½° œ‰ï5€k÷öÃØºdgðÀé£\ %±{/c‡#‚‰ ºuƒ~×®ß;ŒÿÀ÷+³³ç\Ÿ¤Út§ä¬#˜`?‘«õär9S§NeêÔ©Æ¥Ãw ÜCaþÝ {oph­!\N¹­å6¶T›Ë¸53áV\Hï¿ãUkìPA06ª*Ê•X©ô玹”Ó-+n™éøÞÉB¦ÑPnk‡FnšNªVNBWuÀGÁ°°0š½¿Z­&,,Œß~ûM¨:ñÄež¿pcGa±~N†ûŒ8̵¤˜ gq-)ä—°á”Ú;/ ¤ýœN×ûº; ‹&ÚXji@Wca±LéþMöïÎmwo \ô¶f¦3êâiîýšÈ¥¤‚½J±¢¹KHH@©T¶ø˜²²2‰"êxDÄýº?cì(,Öºhãv@¬UUxäáQT€B£6^ 9µ.Öè¾9·é-‰[Þ¾ä;»5)˜B[¶_é˜Òý[âàH‰Cý©U•¶vÜq÷ÒYa·Ô&šo^ƒU«&¡k:è£à¬Y³jSì6F&“QÝAœ´§Žy×Õ£¤¤„wÞy‡ .pþüyrssY¾|9Ë—/×Û7>>ž×^{Ó§OceeÅý÷ßÏúõëéÞ]?³ÇG}ÄÆ¹qã~~~<õÔS¼õÖ[XY5Òô“Þ3ä¥ u|÷gcG`ÙfgüoCÒRè”›MÌðñÙ1…6¶l;‹f.÷ï ¿®dxûꔥ¤ö¤8ËJT#Äæ{òÉ'[|ŒL&ÃÓÓS‚h:&ѹ+''‡O?ý”2kÖ,>ûì³ÚÌ÷JJJbüøñ„‡‡³mÛ6ÊÊÊX¶lcÆŒáÂ… xyý1sùÝwßeÙ²e¼ùæ›L™2…3gΰtéRnݺÅ'Ÿ|Òp0VöR\¢Auï *¤\6v$-ç`äµJŠœHîÒß»ô ÂNi@Zç’º“áÕY§ÜÚ¡áL2íÅZU…}E¹Å® b mlÙDûJÉ\î_• U·6¶hd¦ùÀ®F޼ޏáæÍ›B‡': w’ŸŸ@nn.Ÿ}öY½û-[¶ {{{öîÝ‹““v–òàÁƒéÙ³'ëׯçý÷߯=ÇêÕ«yî¹çX½z5cÇŽ¥ªªŠ¥K—²páBúôéÓW&Àžàî …¹P\• ª++@Ì«nT±£çz$µs€±Ci“›>~ü6Ìd‡#‚ t$µ¦o@ZqŒ ´UÇëö6CCcýT*{÷îå‘G©í|tíÚ• &°k×®Ú²PQQAdd¤Î9"##©®®f÷îÝÒßN®^‚£{!ë&äBìa¸x*M05¡ ·nð@ìQºÜ¾iìPAA0#¢Ò)))”——¦·-44”ääd*ï>פw Õ]ЪsçÎxyy‘˜˜ØpE± ´D ó 3 ”¥PQ·3 /4cGÖ´Å;Œ[¿•J…{Q®%EÈÍ¡ÁÐ97›AW/â]'åmÌâ#FŠH—¼ZƒkI1EX«ªŒŽA™J[®hc`ÑÄý+ µZŽJ¥hñG­‚Bûw] äæj´<<<ô¶yxxP]]­3ŒËÖÖ{{ýùîîîµçª—S熷™ˆ0˜0|´ öšaÃÁ¦4tÕÿñµ+×’"F$Ä~å"v&º¢n[¸vÕOgi 6UU ø=Q—ÎàV\dìp ÊTÚØrY^âS"î_i¨U Ô*«V|‚URRÂÂ… ñ÷÷ÇÞÞžAƒ±uëÖfÅ”ÍSO=…··7ŽŽŽŒ5Š#Gô; ãÇG.—ë}Ä€–K Þ6Eýo×êl++ðÉÏÁÿN&ÖêÆ¿).Ìƒì ¨®ÖÎùÐTßýo•v(VÍ—ár9øø‹{Ûb³¯(§[ÖM4r9Ùî^¨åm«úòíŸe¥p'S;ŒL}7®F Yé`_OVF™ ¼}Á­I0ªe2Ôr…A®Å˜ò\ÜÉòô¡ÀI÷amèËC=®Ðљ߻ôÀ7÷6ž…ù‰EigO¶»7õ¤TTÉT[ؼ¤¦ÚØY;‚ß°jdrSx+80…8 ˳·i¤µÄû×hÔ h¢3Ñàq˜={6qqq¬]»–¾ùææÍ›‡F£aÞ¼y WQQÁĉ)**âÃ?ÄÇLJþóŸDDDÃØ±cuö â›o¾Ñ)ssskñõæAt@Z &ýZ^^žÞ¶¼¼àfrQ–0<ñ=n¥b_QÞè¾é)p|¨UÚáVÊퟧbîN@¿ËÆÆN…¾mì€x0êâ\J‹9>µáÚósàä!H¿Uwç®TUjç²\¹¨¿¿Bc¦¶½RääBlè®ûv¥Üƶm'3¢ÿ@~8‚R»–em»éãGž‹;£/ž6X$×ÕƒŸŽ ÇMÿõ–Ja…²…1 íÏÁ»šðç4TýÉØ‘X.;wÓè€ÒP«åT·ªÒð`˜}ûöCTTsçÎ`ܸq¤¦¦²xñbæÎ‹¼•á?ÿüs9uêÇ´o: Àk¯½Fll¬Îþööö 6¬Åñ æI Áj   ìíí¹xQÿéôÒ¥KôìÙ³vQ›šy"u÷ÍÊÊ"77—þýû7\Ñ7SáÛ™:Ÿ¼uÓH>¯³[Jô5¶Îܦwøþrþó_uÊ2ã³Ø:sÊÝ•?/?Á‘¿ÇãRZ‚³²¹FCZÌü’²tÏûÑQXwRûàžwGû¶£´þS ùÚ²šÏ±,x3FÿÒæ~ »/è–E_ÖÖW׋Q°å„ ×’"•¥Èª5^Çɵ§tÊ2²«¼ŽÅ;´opŠò¡´*«! H­†Òâ?®ãøø²æºr ¢¬u×ñù/ü¿J¡àRJ%Ÿ?¾’<Ý_}×Q˜VÈÖ™ÛÈIÒ¶wö£8½±Ô•Jϼ›ÃÏɺ1D…È-ú±µå:ÊmíHL.ç«G÷4ëçQseçÓ ºu¢àŸÇ½”•Úš{/¯½CÚÖ_q+.¢ÐÉ•<wÎÆæó¯ù19:ë¤ÒléïG[~UÊ*¶ÎÜFÚÏé:å Q‰ì‰Ü«w;çîæÊî«:e†ú=7õëPXƒ“o5îÁÕ”eýÊ÷غ•â\]û¹øŸãü¶ã¤N™Ü¦€èW¾G­ÊÑ)OÞ–sŸÖ)sò«$ú•ï)ÎJÓ)¿u6ŸÞýA§Ì=¸š£Kv‘pE§,ïZ ѯ|¯·oìßpãø2S»{Ïæÿ<îeÎ÷•¡¯#iËa >ž¯ûoô7Óà«Éz1X‚]»váììÌœ9stÊ###ÉÈÈàôéÓÛ»wïÚ΀B¡`þüùœ9s†ŒŒ ýÅb‹¬ZüÄõäääàããÊ+X¶l™Î¶ÇœcÇŽ‘œœ\› +--ž={²hÑ"Ö¬Y@~~>þþþ<õÔS|üñOsï¿ÿ>K–,!11‘Þ½{ëœ;>>žÁƒÃcÛ¡ï#:Û|:e1å ìžbðë휛ÍÔ“1tÏHmrßs?Áþïµï±µƒƒ£ ã…žýÙ7ze¶Íû&Û³0i¿ÄÐ3]¿½’² wgHK†ßCFZóbPXAÄ:®%‘ëËðî̾Q“%IÃë'“©'cèš%}fªŸŽ$zøx½òœ¤\¼z7üšhЕ‹}:`×®]L›6 -ZT{.www–.]Ê'Ÿ|ÂÒ¥K9~ü8ëׯgåÊ•<ûì³z±ÿô:ÍI¾³§B‡r)¸/UV†Y¼êµ9Ѐï5žá&ÃÛ—#CÆpͯ›ÁꔡÍze¨©kª…¶í+-ѾҨÖ(Ш­Zü©ndÜÜÜïÔloH^^^³3f ÿûßÙ¹s'?üðS§NeݺuDDDˆ7#JÌ¹Ç /¼@jªö-€L&cÛ¶mlÛ¶ ™LÆõë×éÚµ+½zõâØ±c¼þúë<úè£XYY1qâDÖ¯__;G¤Æ[o½…³³37ndýúõøúúòæ›o²dɒƹïu©.±^j¹œR{”vöØUT ¯6É—EŽNüÚ³·¼} vζï= µÇ2%åe”ÛÚ¡‘YÖ éˆNit{ž‹e¶vxætë†Aë¶©ªÂ¥´„bG'³^e¾)Mµ±Ð6¢}¥%ÚW"*y«&¡£2þwÑ«V­ÒùÿˆˆyõÕWÙ³g=ô‘"¤": ÷¸~ýz³ö çСCÍÚ÷å—_æå—_nY N†{ØnŽbGgN÷ 'ßÙ•ð¤‹8–+›>ÈŒ; ¯Ki1#Îâ^œO|¯°f+3®]OaÚ%;ƒð¤‹øÝÉ4xÝÙ·˜rú(Bús¹{/ƒŸßT4ÕÆBÛˆö•–h_‰´2 dÁòôô¬÷-GM2žº_¼Ö=¶¡¤=M 0þ|^}õUNŸ>-: Ht@4r9e¶ö”ÛØQ-7­oãm++霛M…-yÎnhȶaN öååwß6™ß«e¥y.nä;·î!ÂJ¥Â±¬ t/.Ľ¸[>íÛ‰A0 {¢`¯îœ î&©OXXQQQh4lW—.]h4¡NhhhƒI{š:ĤtKgþOsB›9—3<ñƒ“~m2 o{ó(.`ôÅ3„ýžh1«Y:::„ó½BÍ2 o¦—G†ŒáJ·àVÓÇèáHènàÈA:0µ TM|¦>ïÑý¼¹¡ÁSΚ5‹’’¶oß®S¾yófüýýu2\ÕwlRRgΜ©-S©T|ýõ׌1‚Î_tyËmÊÑ#G6çê3#: ¦èÂæv­ÎZ¥Â« ¢|5+ò™›ªJ¼ósp/*0ØÜ”µ ršV³R«p+)Ä¥T›öØÜØVVâQ”cYýCõ꦳¬Ë®²¯Â<Êˤ¯Chª…¶í+-ѾQªV|ùg?""‚É“'³`Á>ûì3Ž=ÊsÏ=Gtt4ëÖ­Cvwã3Ï<ƒµµ5éé¤T~úé§éׯsæÌ!**Š˜˜{ì1~ÿýwÖ®][»ßO?ýÄÔ©Sùâ‹/ˆ‰‰á‡~à…^`É’%Lœ8‘3f°‘S!†`™"•i½…°4ÊJãÖïZZ̈Kq¸”“ëên°ì^íÅ7÷6žgó96”L¯NzÛ«”¿© ÈÎ`ò™ã v`„¦5ÕÆBÛˆö•–h_‰Ôt@Zs\#vîÜÉ’%KX¶lyyyôéÓ‡ï¾ûŽÇ{¬vFƒF£Ñ6eccÃáÇyíµ×xùå—Q*• 4ˆýû÷3f̘ÚýüüüËå,_¾œœœd2!!!¬ZµJ'»¨`YDÄ y¾]«+±wäBÏ~”ÚÙ|ó:v•m:_·`ê ¿Ì…A¬4ò—)r»Ê l«*Í2m¬B­Æ^]FÐÍë¨årRº“áõÇ«ôq+Ç6z|Ž›'çz 8ýÝ$Z¯¤{F*U +’º“íá-IÆÔT m#ÚWZ¢}%RóF£5Ç5ÂÑÑ‘ 6°aCÃCµ¾üòK¾üòK½r6oÞÜèùƒ‚‚Ø»WáIÁ²‰ˆ@‰ƒ#ñ½PfgO@vf›; ½`ìTÃÄV-“¡RX¡VX¡]íÁ8 °±y+ŒXªÀÌtüïdRnk§ÓiJ–‡9®žØVUJÖ ºyߜ۔ÛÚ‘ïâŽJ¡ ÚÂÒ ‚ ‚¹Á¤å¹¸‘Ô‡ÿîFªØ ú†€F ÁbdgšrY²ÎG ›ª*^MÀIYÂ¥ ¾ä»¸IZŸ ‚Q©€ÖŒnkÍ[Ah#1 Ý•ç;“QbïÈo!\÷ëŠJa˜×9%-?ÆÅMÛùpri{ý*…ùÎn::£6ã´ÂJ;î¸yQfk§[žÓøÜ§²R²3p))–2<ä ž…ytλƒm•‘'þXSm,´h_i‰ö•ˆí|Ž–~Ì/Š`Ì÷éÇ’[iì,ÚÓ_µü˜ëW z¤¥´½þØÍ Û IDATB'—»ixè°±kú•â߃#î'­ÎdŸžþ±ÑãnúøshøR$NÃ[imÍ…þœ JA+×,1UMµ±Ð6¢}¥%ÚW"dÁ©ˆ!X¦hÈ_ŒE[1½åÇäBq!„„¶½~ÕÈ5ê»i…Íozg7®ùwÓ+»bL={ÿ¡Èщ"G'zÜJ•*´ZrF›êØ 'û7¦©6ÚF´¯´DûJD¢Iè‚ ñÄyõ1v-¼«qëw))bä¥8]¹Øæ ÿ¦È7¼ùÒ¥dSUÉÀßué,î%…ÆÇ L¥-•h_i‰öA¼ .#Îý¬MÇÛ‚äHõrV–ÒïZv•¤v@¥0Î-Û¹ të >~m?W…-7}üÈòìd´ë1&ï‚\ºe¦ãw'SÒzäÕÕ8)Kq-)ÂJ%Æ‚`á$ZD¤Ðñž~É%'ÂÍëðÀœ¶w@Ü‹ }ñ Ne¥dxu6Ú{÷^0yÈ ðΰÐÑ…ØþCHõ @cˆš™€ÛL9}Ô"ßþ‚ è€f¤ã=ý˜ƒ¤ÝíZ³²„¡—Ï3èÊ%ì+Û¾ {÷Þ0~ø`¨“v¾„™¦CÍ—øü—–#—i×1ÈR2ÐÈåÛù8ÿù¯n¯ý™ZؼŒöÔT m#ÚWZ¢}%"&¡ fÄ2Ÿ€Ì]NR»Vg_QN[7ÌLǺªñ$âÖ6àì õ%oªÙ܆ßo˜áJj…‚R{Êmí ¶\|šöO…88ƒ½Cà +kmê][{ƒT­­W­Á¡\‰}E™Y?„ÛTUâ¬,ÁF¥{ÏdÅg)¢ŽC´±´DûJK´¯DDD0#¢bŠî{£]«+rtæt¿Áœë=@oM‡ººÁ”G Goým~]áþ‡ ¸ŸábËsvã—°aüÚ³ŸÁ"Ü8Oû§»Œš ¡Ã´§út€ñӡ׃T €K©vzø•KØà“±ݺÁ±GèRgAÁ7>`¤ˆ:ÑÆÒí+-Ѿ‚ ˆ9 å6¶ÜðëŠ}e9ýS~kt_w/í§´Š ?Ô*pó‚} ï þ-PÚÙsÍ?[Þ¾†;é]NÚŽTq\:£-“˵×çè¬ýÿn!ÐgÐÿoöåtÏHEigÏ¥ >”ÙîÜíÉ« ×’BR}»`€åQA„¶+¡ fDt@„V 7O8yJK`ä$mÖ+k3}˜®ae£}#R³Þ‡ƒö#‚ &­feóÖ'íLt@„Vqq×¾-°wUøøjߘ»j ”i;U~] ûæC0‡ò2‚o^C^­á–·ñ2© ‚ HJdÁ̈˜bŠ,4vmæÇ oSUi‡c<¤^&´ÜÖ™ÛŒ‚·’BF]:ËÀ«—°­ª4v8ajmliDûJK´¯DÄ$tÁŒˆ¯MQ¿¹ÆŽÀ¢½4¾ám + Ñfòrri·,Ê—;r»Šrl++Í:ëØ½L­-h_i‰öAt@LQ—‘ÆŽÀ¢MéÛð6+kèF´_<–&hJF·kdrª¬¬±R«Qh¤ÿê­Z&C-W R(¨Æ0©œ­©6ÚF´¯´DûJD Á̈‚%B»ºéãGô𠤶K}N®œ Ê…P*Ê·,‚`îZ3üªæ#íLt@î*))áµ×^cÊ”)x{{#—ËY¹r¥Î>†>ø€I“&áç燣£#}ûöåÍ7ߤ°°°Þó~ôÑGôîÝ;;;zôèÁ;#Jeþ¿í¥Å› /ca­Rá^\ˆKi1r >ÓÑå¸yp¾W(™^Û¥¾R{’º…pÍ¿UV⥯ JÌ̈è€Ü•““çŸ~JUU³fÍ@Vgyl¥RÉŠ+èÞ½;~ø!û÷ïçÙgŸeÓ¦MŒ=šòrݧñwß}—… òè£Í /¼Àš5kxñÅæúQƒ^›®^„£?@Vº´õx0ê×Ó ø=kUkœëÛ}Á §pe÷Uc‡`ñDKK´¯´DûJDt@3"¾¼+00üü|rssùì³Ïôöqpp -- ww÷Ú²±cÇÒµkWæÌ™ÃŽ;øÓŸþT{ŽÕ«WóÜsϱzõêÚ}«ªªXºt) .¤OŸ>õ“rF/2ð–L®ýH=¤Þ®¢œ.Ùäºz 7Ð|¨³ðð@ƒœJ¨GbÔez=Òàv—Òb|òsð(Ìo—xì*Ëérû&*…‚lw/Ô E»Ô+¥¦ÚXhѾÒí+‚xRê†úÈårÎG¡C‡póæÍÚ²PQQAdd¤Î¾‘‘‘TWW³{÷ô~+¢n_!¡0aø;’–Ûú¬±#°l³·>Üèö.·3˜rú(Á7¯·K+µ ×’"œ•¥È«5íR§ B»S·á#íLt@ÚèÖ­[¼ñÆ :”éÓ§×–çææbkk‹½½½Þ1îîîäææ¶g˜B#üaâÃܯÉ]AÁ4‰9 ‚6ÈËËcêÔ©Èd2¶nÝjìp,R¾³+±ý‡p)¸UVÖ’Ô‘•?í‡ëW$9½ ‚ HO¢HII .Äßß{{{ Ôìgžììlžzê)¼½½qttdÔ¨Qµ£Fꊉ‰aäÈ‘8::âííMdd$wîÜiV=‚ùVÊÏÏgòäÉdffrèÐ!u¶{zzRQQ¡— ´OOφOþÅhøv¦Î'oÝ4Ò£Ïëì–}­3·é¾ÿŃœÿüW²Ìø,¶Î܆2G©S~|ù N®=¥S––3?†¤,Ýó~tïÐ-«ÐÀ‡™p¦N6¬¨³¹EÿÒæ~ªŸ…*ú²¶¾º^Œ‚OOʹÒŸ«]ƒQ)¬ZtÙUõ^Lj÷u¯#;~: kSàF¿ˆ uŸÿ¢[Ÿ/-»IiŽî0¤ú®£0­­3·‘“¤ûÖììGqÄ,Öý‹¼R©â™wsø9¹}®ã|j5«_<§ó󨹷Ñ븑ZF‰ƒSíšõÝWÊJm †¼kuNÊR¢ìkÓïGK~UÊ*¶ÎÜFÚϺ¿ Q‰ì‰Ü«w;çîÖËTßïùžÈ½mþ=7…뀶ÿ}%ÅuÔü·¹_G S»ŽšÍñ:’¶¦àãùºÿF3 ¾š¬ƒ¥˜={6_}õ+V¬àÀ :”yóæÕèqLœ8‘£GòᇲgÏ:uêDDD'NœÐÙ÷øñã<øàƒøúú²gÏþñÃĉ©¬´Œ¹{‚.YuC3®;°œœ|||X±bË–-ÓÛžŸŸÏ¤I“HMMåðáà 0@oŸ¨¨(þô§?˰aÃj˳²²ðóócÍš5¼ñÆ:ÇÄÇÇ3xð`¸ÿ]û–Î6ŸNYLyàG»§è*õõ¹q•©¿ÄàVRÿš&u•Âþ"? æP¤v`ÿ¨IÜòömÑqž…yLû%†žéúíuæ ýãÿ…ßC™ìàÁÇÚg%ôĽÙ7jEŽÎ;§ÿL¦žŒ¡kÖͦw6€*++öšÄÙ>ƒjË¢é?¯áñlîÅøæÜfÀï‰ômÇ×N…N.dzuâRP_.÷m·z¥ÐT m#ÚWZæÜ¾7®qðÀtîdwÒÝ›sîÜ9ÂÃÃÛ5¦Úg‡ÈsйugÅ×õǾoß>¦OŸNTTsçέ-àHLL$-- ¹¼þï²?þøc^zé%N:ÅðáÃP«Õ 0'''bcck÷6leeeüú믵ç;uê£Gæã?æùçŸoùu &M¼i¡šÎÇ7ˆŽŽ®·ó›7oÖ)ß¼y32™Œ‡n$ Hp„#꺷ó!^SùÎn\îÞ‹;î^íO¥µ ·=¼)ttÆ¡L‰meE»Ô+%s}x3¢}¥%ÚW"dÁÚµkÎÎÎÌ™3G§<22’ŒŒ NŸ>Ýè±½{÷®í|( æÏŸÏ™3gÈÌÌ´siãââøŸÿùÎÌÈ‘# a×®]ÍnÁ|ˆu@î±ÿ~JKK).. 11‘íÛ·0mÚ4@Ûë¿pá6l ²²R§ïããC=íDó¥K—òöÛoãááÁäÉ“9{ö,+W®äÙgŸ¥wïÞí|u‚Ð18¹r2tÙÚ!ß8 ‚ ˜ŒÖf´j䘄„úôé£÷–£&Ãgbb"#GŽlðØqãÆé•ß{¬¯¯omÖа°°z÷=yòd³.C0/¢r^xÔÔT@» ú¶mÛØ¶m2™Œëׯ£Ñhˆ‹‹C&“ñ׿þUïø§žzŠ/¾ø¢öÿßzë-œÙ¸q#ëׯÇ××—7ß|“%K–´Û5™;Çr%Áéבk4dxu¶ˆEä,‰\Sv&…ŽÎdxùRâàØä1Eøådá“×>“ ­Ô*\K‹Èqó û3*…økO T3 ½5Ç5 77—àà`½rÚí ÉË˫ݯ±ckþlh_‘5Ô2‰‰ïqýzÓ £i4-[Gàå—_æå—_nY ™çÁ¯}Çš*÷¢F_<³²„;nžé€üœ ÷éÿ}*´‚B£¦Êoxä3l,%ޤýœN×ûº4xL@v“ÎÇIYÚ.1º•2òÒY\J‹Éuó°ˆHSm,´h_i‰öZB&“;Abˆ)úµž4?”B£Á¾¢ÛÊ d&_ºhƒœF4r9iHìÑ‹bíЦSëb=ÆJ­Â¡L‰µªª=BD^{U"³œMµ±Ð6¢}¥%ÚW"ÍIÃû[왩û9ñÿ<¥§§g½o òòòj·7vlÍ~[ógCû6š5T0[æÿU %šô^»V÷ÿÛ»ó¨(®ôoàßnÖf‘}EDP ¢1jü)&QBâhĈ¾ÎdNDc&šñ„™Qãd11Μ1“˜™Œ$GƒŽD=YÔŒÉds£€"*(* v³ÙlÒt½´´¶ÝlMW/øýœS¹u«êÞ‡RyºêÞ+Ø©[a×ÚÚé/ùj5ÐzûoK‹æ{µ¨Z€3åI$€½æ«µØþœæ« húÒªÂ^ €Je¸/€¦/íLø!:A@­¶ƒZÝ~0o©œÐ¨–¡Iâ ©]+: »Z-Ek«%·`oÄs{µTŠ&G'ŒBnÔɦoï`‚j‰*{8´ª íæÅîjµ³ƒZ"ÕþYè0"¶£³SÏ0¾âb|EÒ6½#¡³5ÛÝäyÀž«ÇÅÅ!++ jµZgH~~> &&¦ÝKÅÆÆâÔ©Szå÷ÛöõÔ©SHJJÒ«ÛÑ5Èv1±Föú«§‹É½A‰Ø gq¹²fýuKîvùPp\“x´ÜÒ,â×r ø904¶·3ð Ðßg).šå'P}(ÈJÎÜI8ZZ€ü£@ù%ýã¤R`è 4Ò|m½[s“3 ãpýzßvë¸66àHÅxDxcèÐSprnÿçyéâ@Äb†óg˜äøM·Ûs!8£p9°ŸN¹ƒKÇ F^ñÆQ0´¤‘eâM+}ËÁùáѸ⯉WUOíÚ#¶®³SÏ0¾âb|E" ôäädlÚ´ ÙÙÙ˜9s¦¶<33ÁÁÁ:3\:váÂ…8zô¨v9•J…­[·bôèÑ 㡇ÂÖ­[±xñbm¢søðaãÏþ³"kÇ„àÒÔˆÁ—Î#ÌÐoÝ÷_Nü¬yâq·¢_ ×ì ˆ°®¤²(:”—Ý)kU‹5Û½ììWMRåÖpt¿M2(•šÌN©tGÑ™¡(-é|Ë@Ïsë _¿puU¬süæ|Ý4‘vçŒJ@®û /Êð4Ô‘{zCîé ïºÑz™ Þ8‰âø!¢û€ƒÐ“’’0iÒ$,X°uuuGVV8€mÛ¶iÇgÌ›7[¶lAII ú÷׌ï™;w.6n܈””¼ýöÛðóóÃ|€sçÎ!''Gç:ë֭äI“’’‚  ²²Ë–-Cll,RSSèY;& D]¤V§O7kÇ‹³ðâ½._€Ü㣠VK¡RÙC!÷ëÒqAøß÷wÃâ·_±w ‰ÐSŽ‘±{òÝa"¢žØµkV®\‰Õ«W£ªª ÑÑÑØ¾}»ÎµZ µZ»×¶vttÄÁƒ±téR,Z´ ˆÇ¾}û0nÜ8k$$$`ïÞ½X½z5¦N L™2ëׯ‡ƒŸ˜õFL@¬Ñá Àô-–n…M’@€_µý+®Â¥©Á`%ŸëŸîþ¹¸q ÔÀ3MRV[뉒 ƒ VwoàI½Ò õJ7¸¸(áî^pp¼_ßJ¸¸Ž‹©ä,ù×?*ê5:% × 87Ä*bÜ‹1¾âb|E"Âpuuņ °aÆvëlÞ¼›7oÖ+÷÷÷×[¹='NÄĉ»T—lkähéØ,‰ `hIâÏæÃµÑð4¯!úS÷ZK#PYðòV`ì¸ïàâÒù«v=áÒGÔówÅಠð­­Â÷ñãì€Þ÷ –5ĸ7c|ÅŸФ+ƒÐÛ;ŽÈÌ8 ¯5Šù–nÍ ÜÓ—ú¢ÑÙð`þE˜¹QÔØ(Cuµ7\Ýn"8ø2d²Fѯ9rу¢_£3.M ð®­†SK³¥›" kˆqoÆøŠ‹ñ‰w¢wgw2B"ƒø„zA"AaX*½ütø[x(ë,Ý$‹“JÕ2¤ñ#ŽB*åÿ4DD½RÛZÆGdfL@HööÀà€A1€—¯y¯­–J¡êEk>ôÄ€ÐR Š<ƒþ!aggÌüŒDDDD¦ÅW°¬QM©¥[ÐcR{ ÿ@ 2V3e­5)ºn队_bbOÂÕM‰†W´¶Šÿ™ƒ¼HÕ\2-ÆX\Œ¯¸_‘te%tC?›" `b¿kéô˜ªÈ?üt¨ºaéÖèZºËÒ-0Ÿ‹¥á8°2쟌Ÿ~L€B.þ㨃K¿ý÷;ÆX\Œ¯¸_‘´ BïîÆW°Èø –5ú¿—-Ý‚ž€ÆzÍb÷.Zhiï9Æ_"<}4‹+:»˜¶Mb‘Ëý PøÂóÁ’ËP©ÄŸO=éýDѯљZ·>¨ðöCƒ­ü ºÉbÜ›1¾âb|EÒ6ݘãˆÌŒ ˆ5r ²t zÌÞˆ ÄŒ<¬l-8c§á•H5ëÄ=d}}êHÛ ô˜Ø_ááY#úõØâKõõnÈ=> €†×Ÿ¯$8¹Qà†§ ÍILDÔ[q:Ù& Ö¨©ÚÒ-èÕäJÀ×­ûÇI$€_0 Âôm2‡[·q­Ütó"W»{â|¿0½òy\|-» ÂÃ徸ébÄÚXCŒ{3ÆW\Œ¯HÚ¡s‘™q¬Û”J%–.]ŠÄÄDøùùA*•"==½ÃcAÀøñã!•J±hÑ"ƒuÞ{ï=DEEÁÙÙÄk¯½•ª“¿íßu|]ꙹ[,Ý‚Þ틹_Yº ( ÇÁ‘ ½v-kˆqoÆøŠ‹ñIÛ ôîn„NÀ' ·ÉårlÚ´ Æ Crr2222 ‘t<@wãÆ())ƒuß|óM¬^½Ë—/Gbb"Ž=ŠW^yW¯^Ň~Øþ‰üCúÒ] Î2 ˆ€Êή_cKûÓDùÃÿ(;\¿l¸Nß dàc¥¿û­ùæ«[ z8à$Ê.­òB/_ 8àè¤yËØç–$•ªÑ¯|ý*u5ž¸|9ÍÍâŒ=¿fœ(çíH«;Êú¡ÑYÓ§sýàðð2{;ÌÅ1¾Ÿ0¾âb|EÂAèdC˜€ÜŠêjÍ«O …Ö¿xñ"V¬Xÿüç?HNNÖÛ¯P(ðÆoàùçŸÇo¼?~â‡\8 E•h HÐpógž /ü0l4*½5Sîª#ÙFX"Æ÷ÆW\Œ/11@:_œmþüùHLLÄSO=epÿþýûÑÜÜŒÔÔTòÔÔT¬\¹{öìi?13A"A«Ä­R)„N¦e•Jïl÷ ì ŽÓÌeow–DØÙß^Óãž}îž·û2D“ Ø;X¤‰&c'm…½½&Ãò¸Ž1ÿ€¦F ¤â"Ðõú*¼ýQ4  Œÿ0‡²À~8; wÿ-­uó@­{¨ìlàÆ#"Ÿ€ áÿÖFÈÈÈÀñãÇQTTÔn‚‚@ll¬Ny`` |}}QXX(j-Á¿/0úQ@Öó –,έ÷b£ÎííUptj†T¢†}+ìîŒLôòª‚׈£Úï}r+Q_ï§[· 4;:BÝÁã«Ë}q8öA({øƒnvp€Ò¥ûç(í‚ÿ Ó£kõ:Æ&ç t²& ÝtõêU,^¼ýë_Ðn=…B'''Èd2½}^^^P(í_¤hÐw¸)šK|ô0o¬¥[!®€Àkˆ{ ÎÎJ–·[·hÀ 48Ë6ŽªœˆŒE{Ÿvë׺öA“£S»ûO|tñóè´Å!¨q÷è´Þ½ÞÝ>¦·éjŒÉ8Œ¯¸_‘´Â¸µeù„,€ H7½ð ˆÇsÏ='ÞEäí?Y¡žË+³íÄÉ©Õppl¾Åа ˆR—úNÏwÍ77]Ý࡬ƒSË-œ‹ìÑ/ù×ó®]øå¢ÂÛÞ~F_ç~ÖÕ“q_q1¾"16‘`BлGjšXvv6¾þúk¬[·555Ú š››Q[[«b×ÇÇÍÍÍhjjÒ;OUU||:X¼íÒÿ€O§êlUïLÆå'tª]8P‚Swê¾ïůq⣓:e×ò®cÇÔh7è”ÿêÿðóº_tÊʪ€©E×uÏûÞ!`Égºe-²”ÝÓ†¬c@ê'ú]›µ Øó«nÙÓšëÝëÅ,ÍÓ cûQ^Ùb°Qúý¸%˜·yeÀW_A½¼±Ó~5ešûà†&1õòR`ôÃ? _ù_àul.ÿR»=:~¤Û'ÿ1NNw¬B|žú¥^ÛvÍÚƒ³{ŠÑè茼¨pxèäý¬èÑ}õÄÆÇ ö£¶¬;¦î„¼H÷éß±÷Ž#gÉ·:e- -Ø1u'Ê~Ôé ³~ÜM¬¿ÖÐ'6>Þ+úXçÏã‰÷Š~´±¶~´Å×ûQôÉAÔ|ðŒîÿÑÛ&[&éµá~¦T*‘––†àà`Èd2ÄÇÇcÇŽ]>¾²²sæÌŸŸ\]]ñðÃãÛo¿Õ«7aÂH¥R½íÉ'Ÿ4ewH¡+#®ï3r¹þþþX³f V¯^­-OOOïtm={ö`êÔ©øôÓOñÌ3ÏàðáÃx衇´û¯_¿Ž¾}ûbíÚµX¶l™Î±yyy1bð|®Þ+XþבøøW »`‚}±Oþ”Oem§usv?~­[7 xb¦8c@~ƒ½c'¢ÑIÿ•6C|j«0ù§ ºÜy¼Nöÿh¼ëÿ¤ M_ÄR80 {žˆ:W÷vë”\„ ž½íéIDATS'‡ãÚµ¾¨«õD`P9<‡ØNÀÓ“ V™ÓÅÒp|½ÿ7¸QyÏ+ØåyÀ¿G 77Ç›÷jíïN¹€Ôˆk«ó€fÓ¶=11ÇǺuë‰mÛ¶!##Û¶mÃìÙ³;<¶¹¹>ø êêêðöÛoÃßßï¿ÿ>¾úê+äää`üøñÚº&LÀÕ«W±mÛ6sxzz"22Ò$}!qð¬n˜3gyä2AðÈ# 99/½ô† xâ‰'àììŒÌÌL$33‰Ó¦M3kÛÉ6õ¹ˆ€€køß÷¡øl4vƒ£NÃÉ©ÙÒM#""k¢‚qc@Lü1ôÞ½{‘““ƒ¬¬,Ìš5 €K—.aÉ’%˜5k¤LtòÑG¡°°¿üò F@“h<ðÀXºt)>¬S_&“éüžE¶ È]öíÛ‡úúzܼyPXXˆììlÀäÉ“1`À 0Àà±ÁÁÁ:Y¹——^yå¬Zµ ÞÞÞ˜4iŽ;†ôôtÌŸ?QQQâw¨¨suÇ…àP‡„›dŠÕÒ¾Péå‹ð«á[£y´îßýp÷ò'îž@+XÇÎÁ¡-Y_LÖØùDDt1vº‰Ý»wÃÝÝ))):å©©©øío‹#GŽ`̘ög2ܽ{7¢¢¢´ÉØÙÙá™gžÁŠ+P^^޾}ï¬ ÌylÇ€ÜeáÂ…˜9s&æÍ›‰D‚;wbæÌ™˜5knܸÑíó­X±6l@vv6üqlܸË—/ÇÆ;>pš‘=è}jÜúàøa86-ÝZŒC‚V;)Tvö:[Ñ€¤¾U…rßm™_˜=ÆNµÇ„w¶íáæoVV$´J»¶îJ›ˆAgñðÿ}?ÿ “·ÇÔ ½M¦Å‹‹ñã+"ÁˆÍÄ ­÷”£mY‚Ζ!(((@\\œ^yÛñ§OŸÖ)¿pá|||ààà€ˆˆ¼òÊ+Çß’uá»”––uœZ­nwߢE‹°hÑ¢îpè,£ÚÑy߬Ũ“Gqv@ò㻜„ÔË\p,:ÅýÃuʯôÅÈ?záÄ`{\ éô¹Ó믿®ó}RRBCC±xñb|þùçxê©§ÌÚê:& D¸îãC#ÆÁ¾U©Z‘gN`ð¥ÎÓ—ª>ž86$U’4;:¡ÚÝSŒæ™LTT222ºT7$DóVÁ§UUUÚýñññÑÖ5æøgžy‹/Æ‘#G˜€X1& dŸ 4_T*À7D2aQJ™+”·ç–ªÕð¼Y »^¹kSáí‡óýBáa#Ù‰ˆˆhV¼Êº§¬ý©÷1wîÜn]!..YYYP«Õ:ã@òóó111‹S§Né•wõxJ· L@¬Qé!½u@¬Md,àíü°¨¯ÆLBÂGK·¬sg÷cð´îÏ.H¥(…’~¡Öm±·×&.÷cãK]Ç‹‹ñã+4ËwdÆíín'Œ2P×8ÉÉÉØ´i²³³1sæLmyff&‚ƒƒuf·jïø… âèÑ£ÚéuU*¶nÝŠÑ£G#0°ã×—?ùD³zpG3m‘åq,ktÒÀÒÛV¦F\)”@spý2 ¯Ô­–nYçî]ñ¶«JWÜðôét«qó0É´Á¶ÈØøR×1Æâb|ÅÅøönIII˜4i,X€ŒŒ :tÏ?ÿ<8€wÞyGg`ø¼yóààà€Ë—/kËæÎ‹¡C‡"%%YYYÈÉÉÁÌ™3qîÜ9¬[·N[ï‡~À“O>‰?þ999øâ‹/°páB¬\¹=ö¦L™bÖ~S÷ÜŸ¿!Y;gëpöðó7š„C€_reØèÖl¹àâçbé&ôjŒ¯øcq1¾âb|Å¢º½sœiíÚµ +W®ÄêÕ«QUU…èèhlß¾]牠™ET­Vë¼6åè舃béÒ¥X´h}ûöaܸqÚz}ûö…T*Å«¯¾ ¹\‰D‚ÈÈH¼þúëøË_þbò>‘i1!£ Œ5PœT\ÕŒiµ§DDD½SW^Ájï8Óruuņ °aÆëmÞ¼›7oÖ+÷÷÷Gfff‡Ç†‡‡ãË/¿ìI3É‚˜€ØµZЦ&êëÝD»Fm£'n´ú¡YíÜi]Yæ”Öõ·Ç¯Õ8 ë|Œv·Uµø@YïŽ&UçmëLk«½¨q¼ß1¾âcŒÅÅøŠË–ãÛØ(ƒZm­o¯·Â¸d‚Ÿ’ù1±Ê›}püØ(œ9=T´k®¿‰ƒò$8¶tí”–àÚP ¶ïíã½ýM€½é?LAõO”טdeò•p`ÿd´Š a|ÅÇ‹‹ñ—-Ç·¾ÞJ¥»¥›ÑëyBÔ& Ö¨²(ÏÓ)jp±Dì »èæQw/XZfÂæd‚OjΡð?ñ ã+>ÆX\Œ¯¸l:¾5··{ÈϘ½%D¶Œ ˆ BBB¾ÿþ{àß#,ÝœÞñã+>ÆX\Œ¯¸za|dÁð Ù& V$((YYY¸v횥›BDDDÝdá„c@Èv0±2–ÿŒˆˆˆlŸ€í`BDDDdóø„l‡µÎ%GDDDDD½+¡T*‘––†àà`Èd2ÄÇÇcÇŽ–n–Íùî»ï •J nGÕ©›——‡‰'ÂÝÝ^^^xúé§QZZj¡–[¥R‰¥K—"11~~~J¥HOO7X·;±|ï½÷ggg 8¯½öTªûÆwΜ9ïç!C†+¸»»wéŒïzeJ¥R &Nœ¨-ãýkœ®Æ—÷¯ørss)‡Ø2Bnn®¥»B÷>±»w»;RRRtÊSSSQ^^Ž#GŽX¨e¶K„v÷©T*|ùå—xúé§áææ¦- Á#<‚Ý»w›£‰6¥½xv'–û÷ïGss3RSSuΑšš A°gÏqo:º_»²`|ïåïï¯WæêêŠèèh\¹rïßžèJ|Ûðþ5—¶AèÝÝ8Ì ˆ(((@tt4¤RÝGll, °°ÐͲi/¾ø"àáᤤ$üôÓOÚ}.\@SSâââôŽ‹ÅùóçqëÖ-s6×fu'–Úò»Â××—÷y{{{ôïß‹-BuuµNÆ·sµµµÈËËÓ¾ŽÉû×´îoÞ¿Dt/NÃk """ôʽ½½µû©k<==‘––† &ÀÇÇçÎÃúõë1aÂ|õÕWHLLÔÆ³-¾wóöö† ¨®®F@@€¹›osºK…B'''Èd2½º^^^¼ÏÛ1lØ0ÄÇÇ#&&€f¢…¿ÿýï8xð Ž;WWW`|»àÅ_Dcc#V®\ €÷¯©Ý_€÷¯yq²L@¨W6l† ¦ý~ìØ±HNNFll,^~ùe$&&Z°uDÝ—––¦óýc=†øøx̘1x饗,Ô2Û²jÕ*|úé§xÿý÷oéæô:íÅ—÷¯9q²|Ë øøøüt§ªªJ»ŸŒçááÉ“'ãäÉ“hnnÖÆ³-¾w«ªª‚D"———¹›i“ºK477£©©É`]Þç]—œœ WWWñaŒoûÒÓÓñæ›obíÚµX¸p¡¶œ÷¯i´ßöðþ §á%ÛÁÄ ÄÅÅáÌ™3P«Õ:åùùù }tM='‘H™L†S§NéíÏÏÏÇ AƒàèèhÖÙžîIJí=û{ë^¿~ …‚÷y7‚ ÷ïãkXzzºv[¶l™Î>Þ¿=×Q|ÛÃûW,„N¶ƒ ˆHNN†R©Dvv¶Nyff&‚ƒƒ1jÔ( µ¬w¨®®Æ_|øøx8::ÂÞÞS¦LÁ®]» T*µõÊÊÊpèÐ!LŸ>Ý‚­µ-݉eRRœ‘™™©sŽÌÌLH$L›6Í\ͶyÙÙÙhllĘ1c´eŒ¯¾×_éééXµjV­Z¥·Ÿ÷oÏtßöðþ%"»5kÖ¬±t#îwøù矱iÓ&øøø ¶¶o½õvî܉ýë_z³‚Pû~÷»ßáĉ¨©©AEE¾ùæÌ›7W¯^Å'Ÿ|‚°°0š™V>øà:tÈÏÏÇüùóagg‡-[¶ÀÅÅÅÂ=±ûöíÃÉ“'‘ŸŸÏ?ÿ~~~H$8}ú4ÂÂÂàààÐåXÊd2H$¬_¿---°³³Cvv6^}õUÌ;sæÌ±lg- ³ø–——cÊ”)hnnFUUΟ?>úË—/GTTþùÏÂÁÁã{¯¿ýíoX±b’’’0þ|\¹rEgëׯ€®ÿ[ÀøêêJ|/]ºÄû× ®]»†ÿûß&ð îæ¦ð þð‡? ((Èü û“%!}J¥Rx饗„   ÁÉÉI6l˜°cÇK7Ëæ¼ýöÛB||¼àéé)ØÛÛ þþþÂÓO?-?~\¯nnn®0qâDÁÕÕUððð¦OŸ.”””X ÕÖ+44TH$‚D"¤R©ÎŸ/]º¤­×Xþãÿ,899 ¡¡¡Bzzº R©ÌÕ%«ÒY|«««…éÓ§ aaa‚‹‹‹àää$ |¸iGÔNÃKDDDdó¸ÙB'"""""³aBDDDdó¬g^¥R‰´´4C&“!>>;vìèÒ±W®\AZZàéé ©TŠO>ù¤Ýú9993f \]]áçç‡ÔÔTܸqÃT]!‘0!"""²yÖ³áôéÓ±eˬY³û÷ïÇÈ‘#1{öldeeuzìùóçñé§ŸÂÙÙ“'O YÃËï¿ÿO<ñ‚‚‚ðùçŸãÝwßENN{ì1ܺuˤ}"Óâ""""›×öĘãLgïÞ½ÈÉÉAVVfÍšHHHÀ¥K—°dÉÌš5 RiûŸ'$$ ²²››ÛaÒ²dÉDEE!;;[{ΰ°0Œ;ü1^xáöŒL‰O@ˆˆˆˆlžu<Ù½{7ÜÝÝ‘’’¢SžššŠòòr9r¤Ããï~ÚÑÑD­W¯^ÅñãÇñûßÿ^'¡3f "##±{÷n#{@æÀ„ˆˆˆˆL¢  ÑÑÑzO9ÚU.,,4Ùu ..No_ll¬v?Y'& DDDD6Ï:¡+ x{{ë•·•) “]çîóÞ{-S]‡ÄÁ„ˆˆˆÈæ™þ¬ï¾ûR©´KÛ©S§Dí]wµ7p¬¡Ù¨†††Ûº ãÆsÈÛÝ…ŒŒŒ.%$$àããcðéCUU•v¿)´§í¼÷^ËT×!q0!"""²QEEE·ÿôEÎãîî®Wˆ¹sçvë|x¨J‹XU«VUóæÍU¯^½+:ŽÛk*+®ñ66ÔÁƒuûí·«[·n—Ô€|þùçš4i’n¾ùf%%%)66VMš4ш#ôßÿýß~÷ÍÈÈÐm·Ý&IÊÊÊò}LÇãñèí·ßö››››«ž={êꫯV\\œn¸áÍ™3G§OŸ¨Éãñ¨gÏžúë_ÿªÌÌL¥¤¤¨jÕªzþùç+Ì 66VC† ÑéÓ§+œW\\¬5kÖ¨V­Z4h$iÅŠºï¾ûÔ¬Y3ÅÇÇ«V­ZúùÏ®?þñAÑ£Gy<>}ZÓ¦MSÓ¦M«ë®»N³gÏÖ™3g‚ÞoÓ¦MºãŽ;T»vmÅÆÆªyóæš4i’¾û¹Mš4©ð#Q³fÍ šïådv¥*ºä›o¾Ñ£>ª-Z¨FªU«–®¿þz :Tû÷ï—tékçÔ©Sš7ožÚ´i£„„ÕªUKݺuÓK/½´&cŒ.\¨n¸Aqqqjذ¡ÆŽ«ï¾û.h®+V¬ÇãÑóÏ?¯7ÞxCݺuÓUW]å÷q³µk×jðàÁjÞ¼¹jÔ¨¡5j¨C‡Z¸p¡¾ÿþû€222äñxtðàA-^¼X­ZµR||¼š4i¢'žxÂ×p½üòËêØ±£jÔ¨¡zõêiìØ±:uêÔe<¢UU· ½¼/ä.l0òòò$I={öTLLŒÖ­[§}ûöéú믗$}ûí·úàƒT·n]ÝtÓM’¤W_}UK—.Õm·Ý¦Ÿÿü犉‰ÑG}¤eË–iݺuÊÏÏWƒ $Iýû÷—ã8zþùçÕ£GõèÑÃ÷Ø×\s ¦+V¨qãÆ8p jÕª¥;wjúôéÊËËÓÆUµªÿF‹‹‹Õ¥K]uÕU8p Œ1ý›öáÇ+''GË–-Óøñãnÿãÿ¨Ó§Oëßþíß'I5j”Z·n­=z(%%EÇŽÓo¼¡¡C‡ª°°PsæÌ úX О={4`ÀU«VMk×®Õ¬Y³´gÏ­[·Îoî’%K4fÌÕ¬YSTRR’¶lÙ¢§žzJë֭ӻᆱ«¯¾Úï>—ó±¤ËÉì§p~­¥¥¥êÒ¥‹<¨>}úèý¯ÿ%cŒ<¨×_]ƒ R³fÍ.iíœ>}Z}úôÑŽ;ÔªU+3FÿøÇ?´zõj=ðÀúàƒôä“OúÕ2zôhýö·¿Uƒ ôë_ÿZÕªUÓºuë´{÷n•——+&&&è9¬^½Z6lÐ/~ñ 5JðÝ6yòdU©REiiijРŽ?®Í›7ë‘GÑîÝ»õ /=æc=¦mÛ¶)==]wÜq‡^{í5͘1C§NR:u4mÚ4õïß_=zôЦM›”““£³gÏjÉ’%—ûTˆ6\”’’bªT©bŽ;æ{ðÁÍÕW_m¾ÿþ{óá‡ÇqÌoû[ßí¯¾úªqÇ 8Ð7öõ×_›Ó§Oýúõ¦J•*桇òߺu«qÇdee­kùòå¾Ç(++ó»mÖ¬YÆqóÿñ~ãŽãÇqÌСCÍÙ³g/=cL§NŒã8æí·ß¸­U«VÆãñ˜?üÐ7¶ÿþ€yeee¦gÏž¦ZµjæÐ¡C~·uïÞÝ8ŽcZ´haŽ?î?uê”IKK3Žã˜?þñ¾ñ˜jÕª™«¯¾ÚìÛ·ÏïX=ôqÇ >Üoüšk®1M›6 z~3gÎ4Žã˜íÛ·û_nf0Žã˜«¯¾ÚÌœ9³ÂÇqŒÇã zßÌÌLߨk¯½fÇ1<òHÀc9sÆœ8qÂ÷ï[;sæÌ1Žã˜ôôt¿s:r䈹æškŒã8fÇŽ¾ñ·ß~Û8ŽcRSSÍwß}ç?}ú´éÖ­›q' Wïú¬R¥Šyë­·‚Öl|ÿý÷fðàÁÆq³k×.¿Û†ê{¬¿þõ¯¾ñãÇ›ºu뚸¸8S·n]SXXèWcëÖ­MõêÕÍÑ£GƒÖ¢àª!C†ÇqÌË/¿ìKII1ýúõ3Æœ{ÁT·n]¿fc̘1MÉiݺµiÖ¬™ßØÅ^D¶mÛÖT¯^Ýï¡Wyy¹©[·®éر£ß¸ã8&66Ö¯™ºTË–-3Žã˜_þò—~ãï¾û®q'à±*òÊ+¯ÇqÌþð¿qo²råÊ€ûlÛ¶Í8Žczöìé{üñÇã8fúôéóKJJLÍš5M||¼_sv¹ Èådæm".åçRuëÖÇqÌ”)S.úØ[;×^{­©R¥J@ãfŒ1Ï=÷œqÇ 6Ì7öoÿöo  ×ý×ý`Ò¿ÿ‹Ö{¡={öÇqÌã?î7îm@–/_pŸaÆÇqÌÌ™3n›={v…Í3ÃG°¸ê¶ÛnÓÊ•+µeË 0@Ÿ}ö™¾ùæõìÙSÒ¹ÉtïÞ]Û¶móÝgË–-r'àô•+WjÅŠúóŸÿ¬ãÇûmÏ[½zõK®©´´TþóŸ•””¤ÿ÷:'&&F………ãMš4Qݺu/ù±¼þå_þEãÆÓŸþô'=óÌ3ªU«–$é?ÿó?%^|þÕW_);;[yyyúïÿþo|Øožtî݆òòò }üøñ Ï;\¾O£Aƒ¾íŽ?ýôSmÙ²E999š5k–¾ÿþ{Íš5ë¢ÇðæñÍ7ß½=XnÞÜ¿ù曀ݮΞ=«ââbÅÇÇ=^EÙ=÷Üs:xð fÍš¥3føÝ¶sçN-\¸ð¢ç¶° /×õîÝ[ÆmÞ¼YÛ¶m ø˜Ð 7ÜàÛ)Ø÷ìß¿_ÆõéÓ' ù8tèPÐèxÿ6;Ø·¨×¨QC­ZµÒÞ½{}B»víÔ¡C}øá‡*((ð½ö~Y¡×_|!Çqtß}÷#Øwªœïü²yíØ±Cßÿ½Úµkçkß¾}…ó?®?üPqqq~ÍIbb¢Ž9´ ù±œÛn¸á3F›6m’tnK[¯Z;5kÖÔµ×^«C‡é‹/¾¸}ëÖ­’þ'_ï?c´cÇŽ€ù»ví ú8ã}ìËY#` ×yßáxúé§uüøñ€ë¼_Z¸}ûvß7¤Ÿß€xÿÖøwÞñû~ƒ¿ÿýï>|xÐpÞµTôѬG}T§OŸÖ°aÂ~ç…w+àŸÚðáÃeŒÑ#<¢üü|ÝtÓMºùæ›ýæ4mÚTƘ€í‹ßzë­‹~£úã?î÷nÄ©S§4yòdIòû^ŒÁƒ«ZµjZ´h‘þò—¿øcúôé:qâ„oŽWçÎuæÌ-_¾ÜoþŠ+ôî»ï†Í;Á|úé§:räHÀ¸÷ŒØØXߨÅÖΰaÃdŒÑøñãýÖcQQ‘üq9Ž£aÆùƽïbÍ™3Çï#m§OŸÖ”)S.ë|¼¿®‘>øàŠ¿®Áà:oòñÇK ~ásÏž=µzõj8qB-[¶ôûì{½zõô/ÿò/Zµj•Ú¶m«Ûo¿]ß}÷6mÚ¤øøxµmÛÖïkIJMMUÆ µjÕ*U«VM5’ã8úå/©Æ+33SùùùZ²d‰®½öZÝqÇjÔ¨‘JJJtàÀ½óÎ;6lØOþÝ>ø {ì1½óÎ;’ßýÎ}ÈòåË5pà@ÝÿýJIIÑÞ½{õÖ[oiàÀ~Ù$µjÕJ­ZµÒý÷߯ªU«êµ×^Óþýûu÷ÝwkðàÁ¾y×\sþã?þC£GVûöí5pà@Õ­[WÛ·o×®]»Ô²eKeggûûÿïÿ­åË—käÈ‘ÊËËSÆ õá‡j×®]ºûî»õúë¯ÿD)ýô6nܨñãÇ«K—.ºþú땜œ¬C‡éµ×^S•*Uü¾Ÿåbkç±ÇÓúõëõÚk¯é¦›nÒwÞ©ÒÒR­^½ZEEEš0a‚ºtéâ;^·nÝ4bÄýîw¿S«V­tï½÷ªZµjú¿ÿ÷ÿ*11Q?ûÙÏ~Ô…ðÒ¹¦fþüùzä‘G´mÛ6]wÝuÚ·oŸÞxã Ýwß}ZµjÕO–üh.îÀuY>øàs×]w™Æ›¸¸8S»vm“––°µ¤w;Á Z¶lô¸Ï<óŒiÑ¢…©^½ºiÚ´©ÉÊÊ2gΜ ˜wäÈ3tèPS·n]oÒÒÒL^^^ÐcnÚ´ÉtîÜÙÄÇÇ›ºu뚌Œ öI*pÓM7Çc’““ƒÞ^XXèÛRu̘1·—––š©S§šë®»ÎÄÆÆšÆ›1cƘââbÓ£G€­X1æý÷ß7½zõ2µjÕ2Çx<ž€mb_ýus÷Ýw›äädcRRRL§NÌôéÓÍÿûÿÏoî…[Ù^®áÇÇqLBBBÐm€9·=ïm·ÝfMÍš5M×®]Ík¯½æÛR÷Â-b»wïn<9}ú´™6mšiÚ´©©^½º¹öÚkÍìÙ³ƒ~‡Š1ÆlܸÑôéÓÇ$&&šêÕ«›ë¯¿ÞLœ8ñëêÞ½»‰7µjÕ2wß}·ùøãͬY³‚æ{¹™y·Ò­hÛßó)Ûð~öÙgæÑG57ß|³IJJòý¿`À€fçÎǽØÚ9uê”™;w®iݺµ‰‹‹3W]u•éÚµ«YµjUÐ:¿ÿþ{óôÓO›ÔÔTS½zuÓ A3fÌóÝwß™5j˜öíÛûÍ_±b…ñx<æù矯ðÜ?ýôS“žžn’““MBB‚¹ùæ›Í²eËÌÁƒÎßc222ŒÇã1_~ùeÀ±*zþ.µ8ŸcŒ1n7A?ÆöíÛµjÕ*uíÚU 4Ðßÿþw½ð Zµj•üqM:U’”‘‘¡Õ«Wû>oë§6mÚøÍ™3G3fÌÐäɓէOíÞ½[Ó¦MÓСCµtéRß¼²²2Ý|óÍúÛßþ¦'Ÿ|RÉÉÉZ¼x±Þxã mÞ¼Yݺuó«³wïÞêׯŸF­#GŽhâĉJLLÔž={*üV[°¡Gzçw.ëz¸gß¾}jÑ¢…xཙ„«J×€T$--Mýë_õå—_J:×€¼úê«Ý"²¸¸X 6TFF†ž}öYßø¼yó4mÚ4íÝ»×w‘å’%K4fÌíܹӷ÷úÙ³guÓM7©FÚµk—ïþ·Ür‹Nž<©?ÿùϾ·ÎwîÜ©[o½UK–,ÑC=ô“ž?üðväÈ%%%ù}Ôª´´T ÐúõëõÊ+¯èÞ{ïu±BøéDÌEèuêÔñíEîu)½Õ† TVVæwñ¥tîbLcŒßÎ'kÖ¬Qjjªß?U©REƒÖîÝ»}Û+~ýõ×Ú³g† â÷?“´´45oÞ\kÖ¬¹¬s€+!ß‘ž~úi5mÚTš4i’222Ô¢E ­_¿^ýúõ£ùQ*mbŒQyy¹Ž;¦%K–è­·ÞÒc=æ7çäÉ“JIIQÕªUÕ¨Q#;6`Kͽ{÷JRÀDzêׯ¯ºuëê“O>ñ›{ã7Ô⽯w®÷˜ÍõÞ¡â8NXïBíúôé£o¼QyyyZ¸p¡þô§?©^½zZ°`^}õU·Ë€ŸT¥ÝkäÈ‘úÝï~'éÜ» ,ÐÈ‘#}··mÛVíÚµSëÖ­%ÛËþé§ŸV^^žÞÿ}ßw«zõê¾oL>_bb¢Š‹‹}ÿ^RR¢ÚµkÌóŽyçzÿ¬hîùÇ€P¸ðz8„—Ûn»Í·DºJÛ€L:U#FŒÐÑ£GµnÝ:=úè£:uê”&Nœ(I7nœßü^½z©]»vºÿþûõÜsÏéá‡v£lIáó­¿@¨UÚ¤Q£FjÔ¨‘$©oß¾’Î}9Ö°aÔ””ô>ýû÷WBB‚Þ{ï=ßX:uTVV¦S§Nù}Ñ”tîŽ;úÍ-)) 8®wÌûåTÞ?+šë½=˜Ã‡û®%@øIIIQJJŠÛeTZ•¶¹PÇŽõÛßþV¨°1Æø}+­ô?×i|ôÑGºå–[|ãß|óŠ‹‹}á’Î]¿ñÑG×ûåiÞ¹Þ??úè#_stþÜóy¾Ã‡ë†nðû–b„—ŸýìgÚ³gMÈeŠ˜dëÖ­ªR¥Š®½öÚ ç¼òÊ+:yò¤ÒÒÒ|c}ûöUll¬V¬Xá×€¬X±BŽãèž{îñõïß_£FÒîÝ»}sËË˵råJuîÜÙ÷ÍÌ 4Ð-·Ü¢•+Wê±Çó턵k×.}þùçzôÑGƒÖwøða?~\+W®ômý‹ŸÞ}÷ݧ?ýéOn—±È×>2¶‹|í#c»È×®Ï>ûLƒÖáÇi@.S¥k@FŒ¡Zµj©cÇŽªW¯žŠŠŠ´zõj½üòËš0a‚êÔ©£/¿üRƒÖƒ>¨f͚ɣíÛ·káÂ…jݺµ~õ«_ùŽ—˜˜¨iÓ¦iúôéª]»¶n¿ýv½ÿþûÊÊÊÒðáÕššê›;lØ0åäähÀ€zòÉ'•””¤%K–hß¾}Ú¼y³_ÙÙÙºýöÛ5`À9RGÕ¤I“Ô¦M›€-/Ô²eKµoßþ§ >111äkùÚGÆv‘¯}dlù"ÜUº¤K—.Z¾|¹žþy?~\5jÔPÛ¶mµråJ=øàƒ’¤Zµj)99YóçÏב#GtöìY5iÒD?ü°¦L™°ãÕ”)ST³fMåäähÁ‚JIIÑäÉ“}ߪ¼2¶‹|îh@ufÍšåv |í#c»È×>2¶‹|îh@uØšÐ.òµŒí"_ûÈØ.òE¸£24 B†QgÙ²en—ÑÈ×>2¶‹|í#c»ÈáŽQ§  Àí"ùÚGÆv‘¯}dlù"Ü9Æãv8§  @:tP~~>„!^¯]9Þ24 B†@ÈЀ ꤧ§»]BD#_ûÈØ.òµŒí"_„;D1cƸ]BD#_ûÈØ.òµŒí"_„;vÁ #ìªÞx½våx@ÈЀDµk׺]BD#_ûÈØ.òµŒí"_„;DÜÜ\·KˆhäkÛE¾ö‘±]ä‹pÇEèa„‹šÂ¯×®ï€!C dh@u233Ý.!¢‘¯}dlùÚGÆv‘/ ¢NŸ>}Ü.!¢‘¯}dlùÚGÆv‘/»`…vUo¼^»r¼ dh@„ ¢ÎŽ;Ü.!¢‘¯}dlùÚGÆv‘/ ¢ÎSO=åv |í#c»È×>2¶‹|î¸=ŒpQSh”––*>>Þí2"ùÚGÆv‘¯}dlùÚÅëµ+Ç; ˆ:üGÙ.òµŒí"_ûÈØ.òE¸£24 B†Qgüøñn—ÑÈ×>2¶‹|í#c»ÈáŽQ§qãÆn—ÑÈ×>2¶‹|í#c»ÈáŽ]°Â»*„7^¯]9Þ24 B†Q§°°Ðí"ùÚGÆv‘¯}dlù"ÜÑ€ êL˜0Áí"ùÚGÆv‘¯}dlù"ÜÑ€ ê,^¼Øí"ùÚGÆv‘¯}dlù"ÜÑ€ ê°=¡]äkÛE¾ö‘±]ä‹pG dh@„LU· B-;;['Nt»ŒJmß¾}:qâDÐÛV¬X¡ŒŒŒÕR³fM]ýõ!{¼pÀ¶‹|í#c»ÈáŽQ§´´Ôí*µ}ûö©yóæ?8gÑ¢E!ªæœÏ?ÿ<ªšÖ°]äkÛE¾wŽ1Ƹ]Î)((P‡”ŸŸ¯öíÛ»]”wJ+%µt¹šÏ$ æw2¼^»r¼à2µ”ÄxÀÃEèB†Q§¨¨Èí"ùÚÆ¶‹|í#c»ÈáŽQgذan—áÈ×6Ö°]äkÛE¾w4 ˆ:³fÍr»„7Ëí"kØ.òµŒí"_„;Dv¬°|mc ÛE¾ö‘±]ä‹pG d*]òá‡ê¿ø…®¹æÅÇÇ«N:êÒ¥‹^xá…€¹êÝ»·jÖ¬©ÄÄDÝwß}:pà@Ðã.Z´H©©©ŠU³fÍ4{öl•——Ì;zô¨222”””¤„„uéÒE[¶l zÌÍ›7+--M JJJRff¦Ž;ve•X¥k@¾ûî;5nÜXóæÍÓúõëõ‡?üAMš4Ñ!C4gÎß¼ÂÂBõèÑCåååZ½zµ~ÿûßëóÏ?W×®]v‡˜3gŽÆ§ûï¿_7nÔ¨Q£4wî\=Úo^YY™zõꥭ[·ê™gžÑºuëT¯^=õíÛWo¿ý¶ßÜíÛ·ëÎ;ïTJJŠÖ­[§… jóæÍêÕ«—NŸ>m/ \Ô²eËÜ.!‘¯m¬a»È×>2¶‹|öL„èܹ³iܸ±ïß `’““͉'|c_~ù¥‰‰‰1'Nô™ØØXóÐCùëÁ¡ IDAToîܹÆãñ˜O?ýÔ7–““cÇ1»víò•——›V­Z™N:ùÝ¿cÇŽ¦uëÖæìÙ³¾±wß}×8Žcž}ö٠矟o$™üüüyöø1Fåv •šwJùF2A~FU0nã':gXÃv‘¯}dlùÚÅëµ+WéÞ©H:uTµê¹/v///×믿®ûî»O5jÔðÍiܸ±zöì©5kÖøÆ6lØ ²²2effú/33SÆ­]»Ö7¶fÍ¥¦¦ªS§N¾±*UªhðàÁÚ½{·>,Iúú믵gÏ 2DÏÿDœ––¦æÍ›û=>B/''Çí"ùÚÆ¶‹|í#c»Èá®Ò6 Æ•——ëØ±cZ²d‰Þzë-=öØc’¤¿üå/:uê”n¼ñÆ€ûµiÓF_|ñ…ïcP{÷îõŸ¯~ýúª[·®>ùäßØÞ½{+<¦$ß\ï1+šë½ˆ6UÝ.àr9R¿ûÝï${bÁ‚9r¤$©¸¸X’T»ví€ûÕ®][Æ}ûí·ªW¯žŠ‹‹U½zuÅÅÅÌMLLôK’JJJ*<æù{±Ç?ÿ˜@4©´ ÈÔ©S5bÄ=zTëÖ­Ó£>ªS§Niâĉn—vQŽã¸]àŠJû¬F©}ûöêÛ·¯–,Y¢_ÿúך>}ºŠŠŠT§NIçÞ±¸PII‰ÇQbb¢¤s׎”••éÔ©SAçzå[Ñ1½·ŸÿgEsÏ?&B/==Ýí"ùÚÆ¶‹|í#c»Èá®Ò6 êØ±£ÊË˵ÿ~]{íµŠ‹‹ÓG}0ïã?Öõ×_¯˜˜IÿsÆ…s¿ùæ«uëÖ¾±6mÚTxLI¾¹Þ?+š{þ1ƒ¹ë®»”žžî÷“––æwA¼$mܸ1èdF°_AAÒÓÓ¶ ž9s¦²³³ýƾúê+¥§§«°°Ðo|Ñ¢E?~¼ßXii©ÒÓÓµcÇ¿ñÜÜÜ€ û%iРA®ŸG£F"â<Âáù t®á8ÿ<ÆHš))û‚¹_ýsnáã‹$¿`¬ôŸsw\0ž+)ð<&MšUÏǘ1c"â<¤ð|>ÆŒçáŽç1f̘ˆ8)<Ÿï®ìçáåæyäææú^‹5mÚTmÛ¶Õ¸q㎃Éå]¸~2C† 1U«V5EEEÆc dêÕ«tÞÉ“'ûÆJJJL\\œ9r¤ßñæÍ›g<ùì³Ï|cÏ>û¬qǼ÷Þ{¾±3gΘV­Z™´´4¿ûwêÔÉ´iÓÆoÞ;wÇqÌÒ¥KƒžÛº¡2¸ø6¼¡üáwZ¼^»r•î#F¨V­ZêØ±£êÕ«§¢¢"­^½Z/¿ü²&L˜àûxSVV–:v쨻ï¾[“&MÒÉ“'5cÆ %''ëÿüŸÿã;^bb¢¦M›¦éÓ§«víÚºýöÛõþûï+++KÇWjjªoî°aÔ““£èÉ'ŸTRR’–,Y¢}ûöióæÍ~ufggëöÛo×€4räH=zT“&MR›6m‚và@4¨t H—.]´|ùr=ÿüó:~ü¸jÔ¨¡¶mÛjåÊ•zðÁ}óZ´h¡mÛ¶iâĉºÿþûUµjUõêÕK ,¸cÊ”)ªY³¦rrr´`Á¥¤¤hòäÉš:uªß¼˜˜åååi„ ;v¬JKKÕ®];­_¿^]»võ›Û½{w½ù曚1c†ÒÓÓ¯~ýúiþüùªV­š½€€0æcŒÛEàœ‚‚uèÐAùùùjß¾½ÛåD¬µk×êž{îq»ŒJË»N¥|IÁÖéZI¡Ê·@Rôýΰ†í"_ûÈØ.òµ‹×kW.b.B.Unn®Û%D8òµ5lùÚGÆv‘/ ¢ÎK/½äv Ž|mc ÛE¾ö‘±]ä‹pG dh@„ €¡AÔá{Xl#_ÛXÃv‘¯}dlù"ÜÑ€ êôéÓÇí"ùÚÆ¶‹|í#c»ÈáŽQçp»„G¾¶±†í"_ûÈØ.òE¸£24 B†QgÇŽn—áÈ×6Ö°]äkÛE¾w4 ˆ:O=õ”Û%D8òµ5lùÚGÆv‘/ ¢ÎªU«Ü.!‘¯m¬a»È×>2¶‹|îh@uâããÝ.!‘¯m¬a»È×>2¶‹|îh@„ €¡AÔ?~¼Û%D8òµ5lùÚGÆv‘/ ¢NãÆÝ.!‘¯m¬a»È×>2¶‹|îh@uÆŽëv Ž|mc ÛE¾ö‘±]ä‹pG dh@„ ¢Naa¡Û%D8òµ5lùÚGÆv‘/ ¢Î„ Ü.!‘¯m¬a»È×>2¶‹|îh@u/^ìv Ž|mc ÛE¾ö‘±]ä‹pG‚¨Ãö„¶‘¯m¬a»È×>2¶‹|îh@„ €¡AÔÉÎÎv»„G¾¶±†í"_ûÈØ.òE¸£AÔ)--u»„G¾¶±†í"_ûÈØ.òE¸sŒ1Æí"pNAA:tè üü|µoßÞír€ ¼ëTÊ—äö:-Äï tx½våx@ÈЀD¢¢"·KˆpäkkØ.òµŒí"_„;Daƹ]B„#_ÛXÃv‘¯}dlù"ÜÑ€ êÌš5Ëí"Ü,· ˆx¬a»È×>2¶‹|îh@uرÂ6òµ5lùÚGÆv‘/ €¡24 ˆ:Ë–-s»„G¾¶±†í"_ûÈØ.òE¸£AÔ)((p»„G¾¶±†í"_ûÈØ.òE¸£AÔÉÉÉq»„G¾¶±†í"_ûÈØ.òE¸£24 B†@ÈЀ ꤧ§»]B„#_ÛXÃv‘¯}dlù"ÜÑ€ êŒ3Æí"ùÚÆ¶‹|í#c»ÈáŽQ§OŸ>n—áÈ×6Ö°]äkÛE¾w4 B†@ÈЀ ê¬]»Öí"ùÚÆ¶‹|í#c»ÈáŽQ'77×í"ùÚÆ¶‹|í#c»ÈáŽQ祗^r»„G¾¶±†í"_ûÈØ.òE¸£24 B†@ÈЀ êdffº]B„#_ÛXÃv‘¯}dlù"ÜUº$//OC‡UóæÍ• † êž{îQAAß¼ŒŒ y<ž€Ÿn¸!èq-Z¤ÔÔTÅÆÆªY³fš={¶ÊËËæ=zTJJJRBB‚ºté¢-[¶=ææÍ›•––¦„„%%%)33SÇŽ»òpEø†XÛÈ×6Ö°]äkÛE¾wUÝ.àÇZºt©Ž;¦GyD­ZµÒ±cÇô›ßüF;wÖ[o½¥ž={úæÆÅÅiëÖ­~÷‹‹ 8æœ9s4cÆ MžnÜ8¿y½zõR»vítÿý÷ë¹çžÓÃ?êR}Çqí±!­ZµÊí"ùÚÆ¶‹|í#c»Èá®R¿’••¥9sæhîܹ5jÔEç÷ïß_ zï½÷|cuêÔQYY™N:0¿¤¤DuêÔñ›[RRtž÷öóÿ¬hîùÇ æ®»îRzzºßOZZšßõ(’´qãF¥§§ÜôèÑZ¶l™ßXAAÒÓÓUTTä7>sæLeggû}õÕWJOOWaa¡ßø¢E‹4~üx¿±ÒÒR¥§§¼Ý›››tòAƒ¹~Ë–-‹ˆó‡çC*”.éüóˆ—4SRös¿úçÜ ÆIÁXé?ç^ø1‚\ûž‘I“&EÕóç!…çóçáŽçç!…çóá]Õý<¼Ü<ÜÜ\ßk±¦M›ªmÛ¶ÉË`*©Y³fÇqÌìÙ³/ù>gÏž5ñññæð½øâ‹ÆqóÞ{ïùÍ=|ø°qÇÌ›7Ï7Ö§OÓ²eË€ãΛ7Ï8Žc>lŒ1æÐ¡CÆq“0·E‹æŽ;îZ_~~¾‘dòóó/ùœ€Pó®S)ßHÆå~g¡Åëµ+W)ßyüñÇ•••¥éÓ§kúôé—|¿W^yE'OžTZZšo¬oß¾ŠÕŠ+üæ®X±BŽãèž{îñõïß_………Ú½{·o¬¼¼\+W®TçÎU¿~}IRƒ tË-·håÊ•úþûï}swíÚ¥Ï?ÿ\÷Þ{ï=e "Tºä7¿ùfΜ©¾}ûê®»îÒ®]»ü~$éË/¿T×®]õì³Ïê­·ÞÒ† 4yòdedd¨uëÖúÕ¯~å;^bb¢¦M›¦¥K—jÚ´iÚ¾}»,X ¬¬, >\©©©¾¹Ã† S«V­4`ÀåææjóæÍ8p öíÛðvavv¶ 5`ÀmÞ¼Y/¾ø¢¨6mÚ} ¡sáÛµø©‘¯m¬a»È×>2¶‹|î*ÝE诿þºÇц ´aÿÛÇÑÙ³gU«V-%''kþüù:räˆÎž=«&Mšèá‡Ö”)Sv¼š2eŠjÖ¬©œœ-X°@)))š2¶‹|îc.áÛúêСƒòóóÕ¾}{·Ë‚ò®S)_’Ûë´@¿3€ÐáõÚ•«tÁPyÑ€D ÷ÇO|mc ÛE¾ö‘±]ä‹pG‚¨3a·KˆpäkkØ.òµŒí"_„;DÅ‹»]B„#_ÛXÃv‘¯}dlù"ÜÑ€ ê°=¡mäkkØ.òµŒí"_„;!C dh@u²³³Ý.!‘¯m¬a»È×>2¶‹|îh@uJKKÝ.!‘¯m¬a»È×>2¶‹|îcŒq»œSPP :(??_íÛ·w» (ï:•ò%¹½N $ñ;^¯]9Þ24 B†Q§¨¨Èí"ùÚÆ¶‹|í#c»ÈáŽQgذan—áÈ×6Ö°]äkÛE¾w4 ˆ:³fÍr»„7Ëí"kØ.òµŒí"_„;Dv¬°|mc ÛE¾ö‘±]ä‹pG dh@„ ¢Î²eËÜ.!‘¯m¬a»È×>2¶‹|îh@u Ü.!‘¯m¬a»È×>2¶‹|îh@urrrÜ.!‘¯m¬a»È×>2¶‹|îh@„ €¡24 ˆ:ééén—áÈ×6Ö°]äkÛE¾w4 ˆ:cÆŒq»„G¾¶±†í"_ûÈØ.òE¸£AÔéÓ§Û%D8òµ5lùÚGÆv‘/ €¡24 ˆ:k×®u»„G¾¶±†í"_ûÈØ.òE¸£AÔÉÍÍu»„G¾¶±†í"_ûÈØ.òE¸£AÔy饗Ü.!‘¯m¬a»È×>2¶‹|îh@„ €¡24 ˆ:™™™n—áÈ×6Ö°]äkÛE¾w4 ˆ:|C¬mäkkØ.òµŒí"_„;DxÀí"ùÚÆ¶‹|í#c»ÈáŽ@ÈЀD;v¸]B„#_ÛXÃv‘¯}dlù"ÜÑ€ ê<õÔSn—áÈ×6Ö°]äkÛE¾w4 ˆ:«V­r»„G¾¶±†í"_ûÈØ.òE¸£AÔ‰w»„G¾¶±†í"_ûÈØ.òE¸£24 B†Qgüøñn—áÈ×6Ö°]äkÛE¾w4 ˆ:7v»„G¾¶±†í"_ûÈØ.òE¸£AÔ;v¬Û%D8òµ5lùÚGÆv‘/ €¡24 ˆ:………n—áÈ×6Ö°]äkÛE¾w4 ˆ:&Lp»„G¾¶±†í"_ûÈØ.òE¸£AÔY¼x±Û%D8òµ5lùÚGÆv‘/Â]¥k@òòò4tèP5oÞ\ jذ¡î¹çÌ-((PïÞ½U³fM%&&ê¾ûîÓ‚wÑ¢EJMMUll¬š5k¦Ù³g«¼¼<`ÞÑ£G•‘‘¡¤¤$%$$¨K—.Ú²eKÐcnÞ¼YiiiJHHPRR’233uìØ±+ WŒí m#_ÛXÃv‘¯}dlù"ÜUºdéÒ¥úꫯôÈ#hýúõZ¸p¡Ž=ªÎ;këÖ­¾y………êÑ£‡ÊË˵zõjýþ÷¿×矮®]»ª¨¨Èï˜sæÌѸqãtÿý÷kãÆ5j”æÎ«Ñ£GûÍ+++S¯^½´uëV=óÌ3Z·nêÕ«§¾}ûêí·ßö›»}ûvÝyçJIIѺuë´páBmÞ¼Y½zõÒéÓ§í„3SÉ9r$`ìïÿ»©_¿¾éÝ»·olÀ€&99Ùœ8qÂ7öå—_š˜˜3qâDßXQQ‘‰5=ôß1çÎk<ùôÓO}c999Æq³k×.ßXyy¹iÕª•éÔ©“ßý;vìhZ·nmΞ=ë{÷Ýwã8æÙgŸ znùùùF’ÉÏÏ¿X €k¼ëTÊ7’qù‡ß@hñzíÊUºw@’““ÆÔ²eK:tH’T^^®×_]÷ÝwŸjÔ¨á›×¸qcõìÙSkÖ¬ñmذAeeeÊÌÌô;fff¦Œ1Z»v­olÍš5JMMU§N|cUªTÑàÁƒµ{÷n>|X’ôõ×_kÏž=2dˆ<žÿ‰8--MÍ›7÷{|„^vv¶Û%D8òµ5lùÚGÆv‘/Â]¥k@‚ùî»ïTPP V­ZI’þò—¿èÔ©SºñÆæ¶iÓF_|ñ…ïcP{÷îõŸ¯~ýúª[·®>ùäßØÞ½{+<¦$ß\ï1+šë½î(--u»„G¾¶±†í"_ûÈØ.òE¸‹ˆdôèÑ:yò¤¦N*I*..–$Õ®];`níÚµeŒÑ·ß~ë›[½zuÅÅÅÌMLLôK’JJJ*<æù{±Ç?ÿ˜½¬¬,·KˆpäkkØ.òµŒí"_„»ªnp¥¦OŸ®_|Q‹/V»víÜ.ç’8Žãv €+*õ; YYYš3gŽæÎ«Q£FùÆëÔ©#éÜ;*))‘ã8JLLôÍ-++Ó©S§‚ÎõË;·¢cžÿ¸{üó D“JÛ€deeù~&MšäwÛµ×^«¸¸8}ôÑG÷ûøãuýõ×+&&FÒÿ\§qáÜo¾ùFÅÅÅjݺµo¬M›6S’o®÷ÏŠæžÌ`îºë.¥§§ûý¤¥¥ù]/I7nTzzzÀýG­eË–ù(===` â™3g\¬öÕW_)==]………~ã‹-ÒøñãýÆJKK•žž®;vøçææ\Ø/Iƒ rý<æÍ›çχT )]ÒùçQ$i¦/FÿêŸs /_$iüc¥ÿœ»ã‚ñ\Iç1iÒ¤¨z>ŠŠŠ"â<¤ð|>¼[ÙÏÃ+Ï£¨¨("ÎC ÏçÃ{[e?/7Ï#77×÷Z¬iÓ¦jÛ¶­ÆpüHnoÃu9fÏžmÇ13f̨pΠAƒL½zõ‚nÃ;yòdßXII‰‰‹‹3#GŽô»ÿ¼yóŒÇã1Ÿ}ö™oìÙgŸ5Žã˜÷Þ{Ï7væÌÓªU+“––æwÿN:™6mÚømûsçNã8ŽYºtiКÙÖ-4úõëçv •ÚÅ·áíÇ6¼–±†í"_ûÈØ.òµ‹×kW®Ò5 ,0Žã˜;ï¼ÓìÚµËìܹÓïÇ«°°ÐÔ¬YÓtïÞݬ_¿Þ¼úꫦuëÖ¦aƦ¨¨Èï˜sæÌ1ÇL:ÕlÛ¶ÍÌŸ?ßÄÆÆš_ÿú×~óÊÊÊLëÖ­MãÆÍ‹/¾h6mÚdú÷ïobbbÌÛo¿í7wÛ¶m¦ZµjæÞ{ï5›6m2/¼ð‚iÔ¨‘¹ñÆÍéÓ§ƒž :4È÷Ê\¼ å÷ƒDçïL´o¨‘¯}dlùÚÅëµ+Wé=zÇcÇ øñx<~sóóóMïÞ½MBB‚©U«–¹÷Þ{Íþýûƒ÷™gž1-Z´0Õ«W7Mš41YYY¦¼¼<`Þ‘#GÌСCM:uL\\œéÒ¥‹ÉËË zÌM›6™´´4gêÔ©c222̱cÇ*<74*¾ˆÍx½vå*Ý.X[·n½ä¹í۷צM›.iîØ±c5vìØ‹ÎKNNÖŠ+.阽{÷VïÞ½/i. *íEè*DÀœðÓ"_ÛXÃv‘¯}dlù"ÜÑ€ ê¸]B„#_ÛXÃv‘¯}dlù"ÜÑ€ êäää¸]B„#_ÛXÃv‘¯}dlù"ÜÑ€!C dh@uÒÓÓÝ.!‘¯m¬a»È×>2¶‹|îh@uÆŒãv Ž|mc ÛE¾ö‘±]ä‹pG‚¨Ó§O·KˆpäkkØ.òµŒí"_„;!C dh@uÖ®]ëv Ž|mc ÛE¾ö‘±]ä‹pG‚¨“››ëv Ž|mc ÛE¾ö‘±]ä‹pG‚¨óÒK/¹]B„#_ÛXÃv‘¯}dlù"ÜÑ€!C dh@u233Ý.!‘¯m¬a»È×>2¶‹|îh@uø†XÛÈ×6Ö°]äkÛE¾w4 ˆ:<ð€Û%D8òµ5lùÚGÆv‘/ €¡24 ˆ:;vìp»„G¾¶±†í"_ûÈØ.òE¸£AÔyê©§Ü.!‘¯m¬a»È×>2¶‹|îh@uV­Zåv Ž|mc ÛE¾ö‘±]ä‹pG‚¨ïv Ž|mc ÛE¾ö‘±]ä‹pG dh@„ ¢ÎøñãÝ.!‘¯m¬a»È×>2¶‹|îh@u7nìv Ž|mc ÛE¾ö‘±]ä‹pG‚¨3vìX·KˆpäkkØ.òµŒí"_„;!C dh@u Ý.!‘¯m¬a»È×>2¶‹|îh@u&L˜àv Ž|mc ÛE¾ö‘±]ä‹pG‚¨³xñb·KˆpäkkØ.òµŒí"_„;D¶'´|mc ÛE¾ö‘±]ä‹pG dh@„ ¢Nvv¶Û%D8òµ5lùÚGÆv‘/ ¢Nii©Û%D8òµ5lùÚGÆv‘/ÂcŒ1ns Ô¡Cåçç«}ûön—å]§R¾$·×i$~g¡Ãëµ+Ç; B†@ÈЀ ê¹]B„#_ÛXÃv‘¯}dlù"ÜÑ€ ê 6Ìí"ùÚÆ¶‹|í#c»ÈáŽQgÖ¬Yn—áf¹]@Äc ÛE¾ö‘±]ä‹pG‚¨Ã޶‘¯m¬a»È×>2¶‹|îh@„ €¡AÔY¶l™Û%D8òµ5lùÚGÆv‘/ ¢NAAÛ%D8òµ5lùÚGÆv‘/ ¢NNNŽÛ%D8òµ5lùÚGÆv‘/ €¡2•®ùûßÿ® &¨OŸ>JJJ’ÇãQVVVÀ¼ŒŒ y<ž€Ÿn¸!èq-Z¤ÔÔTÅÆÆªY³fš={¶ÊËËæ=zTJJzPvé IDATJRBB‚ºté¢-[¶=ææÍ›•––¦„„%%%)33SÇŽ»²€J¬Ò5 EEEúÏÿüO9sFýû÷—$9Žtn\\œvíÚå÷óÒK/Ì›3gŽÆ§ûï¿_7nÔ¨Q£4wî\=Úo^YY™zõꥭ[·ê™gžÑºuëT¯^=õíÛWo¿ý¶ßÜíÛ·ëÎ;ïTJJŠÖ­[§… jóæÍêÕ«—NŸ>ý¥Ë‘žžîv Ž|mc ÛE¾ö‘±]ä‹pWÕí~¬&MšèÛo¿•$ë¹çž«pn•*UtË-·üàñŠ‹‹õÄOhĈzâ‰'$IݺuÓ™3g4mÚ47N-[¶”tn[»O>ùD;wîT§N$I=zôÐM7ݤ &h×®]¾ãŽ?^©©©zå•Wäñœëóš6mª[o½U¿ÿýïõÐC]~¸"cÆŒq»„G¾¶±†í"_ûÈØ.òE¸«tÏsE·KÒ† TVV¦ÌÌL¿ñÌÌLc´víZߨš5k”ššêk>¤sMÎàÁƒµ{÷n>|X’ôõ×_kÏž=2dˆ¯ù¤´´45oÞ\kÖ¬¹¤óƒ}úôq»„G¾¶±†í"_ûÈØ.òE¸«Ô ÈÅœ}ú˜–-[wÞ¼yÆqsøðacŒ1‡2Žã˜ìì쀹-Z´0wÜqGÐúòóó$“ŸŸIç¸Á»N¥|#—ø„¯×®\T½òÊ+¯èäÉ“JKKóõíÛW±±±Z±b…ßÜ+VÈqÝsÏ=¾±þýû«°°P»wïö•——kåÊ•êܹ³êׯ/IjРn¹å­\¹Rßÿ½oî®]»ôùçŸëÞ{ïµt†@x«”¡¯_¿^ÿøÇ?tâÄ IçvŸzå•W$I¿øÅ/tôèQ ø š5k&cŒ¶oß®… ªuëÖúÕ¯~å;Vbb¢¦M›¦éÓ§«víÚºýöÛõþûï+++KÇWjjªoî°aÔ““£èÉ'ŸTRR’–,Y¢}ûöióæÍ~5fggëöÛo×€4räH=zT“&MR›6m‚¾DƒJÙ€Œ5J_~ù¥¤st¯^½Z«W¯–ã8:pà€jÕª¥äädÍŸ?_GŽÑÙ³gÕ¤I=üðÚ2eJÀŽWS¦LQÍš5•““£ (%%E“'OÖÔ©SýæÅÄÄ(//O&LÐØ±cUZZªvíÚiýúõêÚµ«ßÜîÝ»ëÍ7ßÔŒ3”žž®øøxõë×OóçÏWµjÕì„©JÙ€8ðÿÛ»÷àªêsãÏŽ ˜Ñ$F¥xPÑP r©bè 8@D”T¼Š#‰bUÈ4޵R%­-ÂÐ?¨ã%V­"Ú0h•B¸ÈP5™©BIÁËH*—h+F")¿ó‡f—@ y×Z¬õýÌdÔ•µ×~×ÓNÞ“dïxÎ+¯¼rT×,..VqqñÏ;ýôÓ“~\«5#GŽÔÈ‘#jØ+,,Ôþð¿Ç±BIäk‰Û"_{dl‹|t‘ú@âb푯5:l‹|푱-òEб€ rÆï÷!G¾Öè°-òµGƶÈAÇÀ3, <ÂÈiþî¨èhäkÛ"_{dl‹|t, ˆœÙ³gû=BÈ‘¯5:l‹|푱-òEб€ r-Zä÷!G¾Öè°-òµGƶÈAÇ‚ÈéÒ¥‹ß#„ùZ£Ã¶È×Û"_ ϰ€ð "gêÔ©~räkÛ"_{dl‹|t, ˆœ=zø=BÈ‘¯5:l‹|푱-òEб€ rŠ‹‹ý!äÈ×¶E¾öÈØù"èX@x†€gX@9µµµ~räkÛ"_{dl‹|t, ˆœiÓ¦ù=BÈ‘¯5:l‹|푱-òEб€ ræÍ›ç÷!G¾Öè°-òµGƶÈAÇ‚Èáå ­‘¯5:l‹|푱-òEб€ð ϰ€ rfÍšå÷!G¾Öè°-òµGƶÈAǂȩ¯¯÷{„#_ktØùÚ#c[ä‹ ‹9çœßCà;5554hª««5pà@¿ÇZÔÔS©Z’ß=­‘ÄŸ€wøz­ýøϰ€ð "gÏž=~räkÛ"_{dl‹|t, ˆœ¢¢"¿G9òµF‡m‘¯=2¶E¾:DÎŒ3ü!äfø=@èÑa[äkŒm‘/‚Ž‘Ã+VX#_ktØùÚ#c[ä‹ càžaA䔕•ù=BÈ‘¯5:l‹|푱-òEб€ rjjjü!äÈ×¶E¾öÈØù"èX@9óçÏ÷{„#_ktØùÚ#c[ä‹ càžaàDNAAß#„ùZ£Ã¶È×Û"_ "gÊ”)~räkÛ"_{dl‹|t, ˆœüü|¿G9òµF‡m‘¯=2¶E¾:žaàDÎ’%Kü!äÈ×¶E¾öÈØù"èX@9ååå~räkÛ"_{dl‹|t, ˆœŠŠ ¿G9òµF‡m‘¯=2¶E¾:žaàžaAäú=BÈ‘¯5:l‹|푱-òEб€ rx‡XkäkÛ"_{dl‹|t, ˆœñãÇû=BÈ‘¯5:l‹|푱-òEб€ð ϰ€ rÖ­[ç÷!G¾Öè°-òµGƶÈAwÜ- ûöíÓ´iÓ”ŸŸ¯ììl¥¤¤¨´´´Åskjj4räH¥§§+##C×^{­>þøãÏ;w®rrrÔ¹sg}öÙúÕ¯~¥ÆÆÆ¤óvíÚ¥‰'*;;[]»vÕ!C´jÕª¯YUU¥¼¼û¬¶nݪ¡C‡jÏž= çþæ7¿QII‰®»î:-_¾\wß}·~ûÛßjòäÉ ç544hĈZ½zµüq-]ºTgœq†F­µk×&œûæ›oêŠ+®P·nÝ´téR=öØcªªªÒˆ#ôí·ßvp*8‹-ò{„#_ktØùÚ#c[ä‹ Kõ{€£Õ³gO}ñÅ’¤½{÷ê™gžiñ¼‡zHiiizíµ×tòÉ'K’ ¤Þ½{kΜ9zôÑGã×xä‘GtÇwè‘G‘$]zé¥:pà€¦OŸ®’’õéÓG’TVV¦Í›7kýúõ$é„NЄ ôöÛokçÎ’¤Ï>ûLï¾û®n¹å–øò!Iyyy:ï¼óžˆ’ãzi͇~¨ýû÷«_¿~IŸËÍÍÕ|ÿ1¨M›6ÅêÌ3ÏÔi§¦Í›7ÇmÚ´©ÕkJŠŸÛtÍÖÎmú<5¡\@öîÝ+IÊÌÌLú\ff¦œs ?ÆuÒI')---éÜŒŒŒøµ$©®®®Õkú¼GzþC¯ ïM:ÕïBŽ|­Ña[äkŒm‘/‚.” HеôKóðN=ü!äÈ×¶E¾öÈØù"èB¹€deeIúî;ÍÕÕÕ)‹)###~nCCƒöïßßâ¹M×j:·µkú¼GzþC¯ ïû=BÈ‘¯5:l‹|푱-òEÐ…r9çœs”––¦÷Þ{/ésï¿ÿ¾z÷î­N:Iúßïi4?÷_ÿú—öîÝ« .¸ ~,77·ÕkJŠŸÛôÏÖÎ=ôš-3fŒ >òòò~!^’–/_®‚‚‚¤ÇOž¸î£Ã¼<þµX¯^½Ô¿•””$]GÉÇvïÞíb±˜+--MúÜ7ÞèÎ8ã ÷ÕW_Å}òÉ'®S§N««siiiî®»îJxüÌ™3]JJŠÛ²eKüØO<áb±˜Û¸qcüØ\ß¾}]^^^ÂãìrssÝÿûßø±õë×»X,æž|òÉ狀ºÚIrÕÕÕmLð^SO¥j'9Ÿ?ø3ð_¯µßqù7ÞxC/¿ü²^}õUIß½úÔË/¿¬—_~Yß|ó$©´´Tõõõºêª«´lÙ2UVVêÊ+¯Ôé§Ÿ®{ï½7~­ŒŒ MŸ>]O>ù¤¦OŸ®7ß|SsæÌQii©&Mš¤œœœø¹EEEêÛ·¯®¿þz•——«ªªJ7Üpƒ¶mÛ–´­Ïš5KµµµºþúëUUU¥… ê†nPnnn‹8¼Óüÿƒ‚ŽF¾Öè°-òµGƶÈç÷t,zöìéb±˜‹Åb.%%%áß?ù䓸yÕÕÕnäÈ‘®k×®î”SNq×\sûè£Z¼æã?îÎ?ÿ|wÒI'¹ž={ºÒÒR×ØØ˜tÞçŸîn½õV—••åÒÒÒÜ!CÜÊ•+[¼æŠ+\^^žKKKsYYYnâĉn÷îÝ­Þµ7ÆŽë÷ǵ#d,ß1F‡m‘¯=2¶E¾¶øz­ýbεòn~ð\MM ¤êêj 8ÐïqBkûöí¼BH;4õTª–ÔRO·Ë»Wª‘½?3tØùÚ#c[äk‹¯×Úï¸ü, =øKÙùZ£Ã¶È×Û"_ ϰ€ð "§ù+–¡£‘¯5:l‹|푱-òEб€ rêëëý!äÈ×¶E¾öÈØù"èx¬áUp<8ò«`y:¢ø*XÿðõZûñžaàDΞ={ü!äÈ×¶E¾öÈØù"èX@9EEE~räkÛ"_{dl‹|t, ˆœ3fø=BÈÍð{€Ð£Ã¶È×Û"_ "‡W¬°F¾Öè°-òµGƶÈAÇÀ3, <ÂÈ)++ó{„#_ktØùÚ#c[ä‹ cAäÔÔÔø=BÈ‘¯5:l‹|푱-òEб€ ræÏŸï÷!G¾Öè°-òµGƶÈAÇÀ3, <ÃÀ3, ˆœ‚‚¿G9òµF‡m‘¯=2¶E¾:DΔ)Sü!äÈ×¶E¾öÈØù"èX@9ùùù~räkÛ"_{dl‹|t©~€ß¶mÛ¦¯¾úÊï1$IéééêÝ»·ßc€@¤mÛ¶Mçwžßc$غu+K€ÐbAä,Y²DW_}µßc„ØIäk‰w¬ÿ}çãEI}$­–t™OÓl‘4!0ß±B‡m‘/‚Ž‘S^^Î_̦ÊÅb‹[é#i ¤Y’îõy–p£Ã¶ÈAÇ/¡#r***ü!äÈ×¶F¾Öè°-òEб€ð ϰ€ð "§°°ÐïBŽ|­ÑakäkÛ"_ "‡wˆµF¾Öè°5òµF‡m‘/‚Ž‘3~üx¿G9òµF‡­‘¯5:l‹|t, <ÃÀ3, ˆœuëÖù=BÈ‘¯5:l|­Ña[ä‹ cAäÌž=ÛïBŽ|­ÑakäkÛ"_ "gÑ¢E~räk[#_ktØù"èX@9]ºtñ{„#_ktØùZ£Ã¶ÈAÇÀ3, <Âș:uªß#„ùZ£ÃÖÈ×¶E¾:DN=ü!äÈ×¶F¾Öè°-òEб€ rŠ‹‹ý!äÈ×¶F¾Öè°-òEб€ð ϰ€ rjkký!äÈ×¶F¾Öè°-òEб€ r¦M›æ÷!G¾Öè°5òµF‡m‘/‚Ž‘3oÞ<¿G9òµF‡­‘¯5:l‹|t, ˆ^žÐùZ£ÃÖÈ×¶E¾:žaàDάY³ü!äÈ×¶F¾Öè°-òEб€ rêëëý!äÈ×¶F¾Öè°-òEб€ rJKKý!äÈ×¶F¾Öè°-òEÐ…vY³fRRRZüxûí·έ©©ÑÈ‘#•žž®ŒŒ ]{íµúøã[¼îܹs•““£Î;ëì³ÏÖ¯~õ+566&·k×.Mœ8QÙÙÙêÚµ«† ¢U«V™Ü+p¼íÒdæÌ™Ú°aCÂGß¾}㟯­­ÕðáÃÕØØ¨Å‹ëÙgŸÕÖ­[5tèPíÙ³'áZ¿ùÍoTRR¢ë®»NË—/×Ýwß­ßþö·š}ºJJJÔ§OIRYY™6oÞ¬õë×kðàÁ’¤áÇë /Ô´iÓ´aÃË[ÆìÙ³G§všßc„ØIäk‰[£ÃÖè°-òEÐ…þ; ιV?×ØØ¨×^{M×^{m|ù¾{ŸË.»L•••ñcË–-SCCƒ ®QXX(眖,Y?VYY©œœœøò!I'œp‚&L˜ ·ß~[;wîìˆ[Ã1***ò{„#_ktØùZ£Ã¶ÈAúdòäÉ:ñÄuÊ)§hôèÑúë_ÿÿ܇~¨ýû÷«_¿~IËÍÍÕ| o¿ýV’´iÓ¦øñCyæ™:í´Ó´yóæø±M›6µzMI çÂ{3fÌð{„›á÷¡G‡­Íð{€Ð£Ã¶ÈAÚäÔSOUII‰žzê)­Y³F=ö˜þùÏjøðáZ¾|¹¤ï~¬J’233“Ÿ™™)眾øâ‹ø¹'t’ÒÒÒ’ÎÍÈȈ_K’êêêZ½æ¡Ï  8ÐïBŽ|­ÑakäkÛ"_]h¤ÿþêß¿ü¿üãkܸqÊÍÍÕ}÷ݧüü|§¢)´ßiÉ)§œ¢+¯¼RûÛßÔÐР¬¬,Iß}Ç¢¹ºº:Åb1eddH’²²²ÔÐРýû÷·xnÓµšÎmíšMŸ?œ1cƨ   á#///á÷L$iùòå*((HzüäÉ“UVV–p¬¦¦FI¯ìõðÃ'½cêöíÛUPP ÚÚÚ„ãsçÎÕÔ©SŽÕ×׫  @ëÖ­K8^^^žôû2’tã7r!º©FR¾û¥Ý„;Qò»IoÿþÜÚfÇçJšÚìXý÷ç®kv¼\Rò}ÜÿýüïÁ}ó},[¶,i®ïïDÒ’fÇ–ë»n&݉¤Žøó‘øðQü߃ûà>‚tåååñ¯Åzõê¥þýû«¤¤$é:8J.bî¼óN‹Å\CCƒ;pà€ëÒ¥‹»ë®»’λüòËÝùçŸÿï… ºX,æ6nܘpÞÎ;],s3gÎŒËÏÏw}úôIºæÌ™3],s;wîlq¶êêj'ÉUWWëí¡ žyæ¿G8®5õTªv’káã™VŽ[|DóÏ îXÉö²ÃÑì4¶E¾¶øz­ý"õ/¾øB¯¾úª  N:)55UcÇŽÕŸþô'íÛ·/~ÞöíÛµzõj]sÍ5ñc£GVçÎõÜsÏ%\ó¹çžS,ÓÕW_?6nÜ8ÕÖÖ&¼áacc£^|ñE]rÉ%:óÌ3ínGTSSã÷!G¾Öè°5òµF‡m‘/‚.´¿róÍ7«W¯^8p 233µmÛ6ýîw¿ÓîÝ»õ /ÄÏ+--ÕE]¤«®ºJ÷ß¿¾ùæ=ôÐC:ýôÓuï½÷ÆÏËÈÈÐôéÓõË_þR™™™5j”Þyç•––jÒ¤IÊÉɉŸ[TT¤ùóçëúë¯×£>ªììlýþ÷¿×¶mÛTUUåiH6þ|¿G9òµF‡­‘¯5:l‹|t¡]@úõë§ŠŠ ÍŸ?_ûöíSff¦†ª hРAñóÎ?ÿ|­Y³F÷ÝwŸ®»î:¥¦¦jĈš3gNÒïjüâ¿PzzºæÏŸ¯9sæ¨[·nzàôàƒ&œ×©S'­\¹RÓ¦MSqq±êëë5`À½ñÆ:t¨'÷Qhûî»O÷Ýw_›Î8p V¬XѦs‹‹‹U\\|ÄóN?ýô¤×¢.R¿À_, ˆœ–^"‰|­ÑakäkÛ"_ "gÊ”)~räk[#_ktØù"èX@9ùùù~räk[#_ktØù"èX@x†€gX@9K–,ñ{„#_ktØùZ£Ã¶ÈAÇ‚È)//÷{„#_ktØùZ£Ã¶ÈAǂȩ¨¨ð{„#_ktØùZ£Ã¶ÈAÇÀ3, <ÃÀ3, ˆœÂÂB¿G9òµF‡­‘¯5:l‹|t, ˆÞ!ÖùZ£ÃÖÈ×¶E¾:DÎøñãý!äÈ×¶F¾Öè°-òEб€ð ϰ€ rÖ­[ç÷!G¾Öè°5òµF‡m‘/‚Ž‘3{öl¿G9òµF‡­‘¯5:l‹|t, ˆœE‹ù=BÈ‘¯5:l|­Ña[ä‹ cAätéÒÅïBŽ|­ÑakäkÛ"_ ϰ€ð "gêÔ©~räk[#_ktØù"èX@9=zôð{„#_ktØùZ£Ã¶ÈAÇ‚È)..ö{„#_ktØùZ£Ã¶ÈAÇÀ3, <Âȩ­­õ{„#_ktØùZ£Ã¶ÈAǂș6mšß#„ùZ£ÃÖÈ×¶E¾:Dμyóü!äÈ×¶F¾Öè°-òEб€ rxyBkäk[#_ktØù"èX@x†€gX@9³fÍò{„#_ktØùZ£Ã¶ÈAǂȩ¯¯÷{„#_ktØùZ£Ã¶ÈAÇ‚È)--õ{„#_ktØùZ£Ã¶ÈAÇÀ3, <ÂÈÙ³gß#„ùZ£ÃÖÈ×¶E¾ºT¿@²-[¶ø=‚$)==]½{÷ö{ŒWTT¤¥K—ú=FˆI"_KtضF‡m‘/‚Ž$€&L˜à÷q[·n Ý2cÆ ¿G¹~ztØÚ ¿=:l‹|t, ôkIc|ža‹¤ úꫯ|ž£ã 8ÐïBŽ|­ÑakäkÛ"_ H õÿaÄ/¡ð "§¬¬ÌïBŽ|­ÑakäkÛ"_?‚…È©©©Ñm·Ýæ÷!V#‰|-ÑaktØ>6Û¶mkÓïfþå/Ñ€Lg ë+eÂ, ˆœùóçû=BÈ‘¯5:l|­Ñ᣷mÛ6wÞym>ñâņÓ|'Œ¯” o°€Üÿ¾óñ¢¤>~Ž¢0¿R&¼ÁpÜè#^)Ç;~ €gX@9~räk[#_ktØù"ØX@9S¦L„<ØÞ rIDATñ{„#_ktØùZ£ÃÖÈÁÆ‚ÈÉÏÏ÷{„#_ktØùZ£ÃÖÈÁÆÀ3, †öíÛ§’’uïÞ]iii0`€***ü 𠈡k®¹F/¼ð‚f̘¡e˖颋.ÒøñãU^^î÷h‘¶dÉ¿G9òµF‡­‘¯5:l|l, F^ýuUUUé‰'žÐ¤I“4lØ0=õÔS5j”¦Nªƒú=bdÍš5ËïBŽ|­Ñakäk[#_ ˆ‘ÊÊJ¥§§ëúë¯O8^XX¨;vhãÆ>M†ììl¿G9òµF‡­‘¯5:l|l, F6mÚ¤>}ú(%%1âÜÜ\IÒæÍ›ý 𠈑½{÷*333éxÓ±½{÷z=à;žIõ{€°ÊÊÊjñ»uuuñÏ·î¯m|–/$}Ù†ó¾úþ£-¾–Tÿýµ¥™3g¶ú³º_ýµêëë%I]ºtQ×®]xÞÑœkqMIZ¹r¥î¾ûîÀÝ“ßÏßÖkîÞ½ûû{]Ò–®ôWI ùozz´×<Ò¹+W®Œÿ~™Ï¶L“;ݼÇjkŸ%‹N‡åïžU«VÅÿcO-žÿÈ÷êpîK’¶l9ÒáÕûîH1çœó{ˆ0úéOªòòr}ùå— ¿²hÑ"ÝtÓMzë­·tÉ%—$|¸RRR’>ÆŒÓÑ·HÇšñ§Ÿ~ª’’ 6L§žzªRRRôüóÏ·z>¶Ë—[Ư¼òŠn¸áõêÕK]ºtQ¯^½4aÂ}ðÁ-žÕKÞdåk¾UUU5j”ºwï®Î;ëŒ3ÎЈ#ôÆo´z>¶Ë8Ê>"‡5jÔ(—‘‘ážzê)·fÍ7iÒ$‹ÅÜÂ… û¸ýû÷» .¸ÀõèÑÃ-\¸ÐUUU¹«¯¾Úxâ‰îÍ7ßL8wÍš5.55Õ7ÎUUU¹ ¸³Î:Ëåææº††ËÛóù6Ì{î¹nãÆ ÿøÇ?,o-0Ž5ãÕ«W»ììl—ŸŸïnºé&‹ÅÜóÏ?ßâ¹tØ6_:|l<Ø;Ö=ûì³níÚµîÅ_t?üá]zzºÛ¼ys¹Qî°sÞdåk¾îž{îq/½ô’[»v­«¬¬t—_~¹‹ÅbîÅ_L8—Ûgå HúóŸÿìb±˜[´hQÂñüü|×½{w÷ßÿþ·ÕÇΟ?ßÅb1·aÆø±ÆÆF×·o_7xðà„s/ºè"wÁ$\ï­·Þr±XÌ=ñÄt7ÁãU¾Ã† s¹¹¹;üq¢=ûLï¾û®n¹å–„78ÌËËÓyç§ÊÊʾ«à°Ì·ù›?ºˆ¾6C{2>ô¥¥—¶Í÷hÎ £ödÜÒ;wëÖMÝ»w×§Ÿ~?åKÞdÜ$Š=nO¾-IMMÕ)§œ¢ÔÔÿ½ó¶Ï¸I;Ü, hÓ¦MêÓ§OÂfIÊÍÍ•$mÞ¼ù°íׯ_ÒñæÝ´i“$µznÓçÃÈ2ß¿ÿýï Ç?üðCeeeéÄOԹ瞫éÓ§kÿþýí½…ÀkOÆGó>TGæÛ„wLÆ}ô‘¶oß®¾}û&<‡ÍKÞdÜ$Š=îˆ|<¨ÆÆFíØ±C?ü°¶nݪ{î¹'á9$:l™q“(v¸-x#´wï^{î¹IÇ333ãŸoM]]]ü¼Ã=¶éŸ­{¸ç8Þy‘¯$ :TãÇWNN޾ùæ½þúëš={¶Ö­[§Õ«W·ú&’aОŒæ9½fóç¡ÃíG‡;&ãÆÆF)===á ‹(wXò&c)º=îˆ|ÇŒ£åË—K’ºté¢ 誫®JxŽC¯Ùüyèpû3–¢Ûá¶` ™(—¹£üú׿NøïÑ£G«gÏžúùÏ®¥K—ê'?ù‰O“En?:Ü~Ôm·Ý¦·ÞzK¯¼òŠºwïÞæÇÒá¶9RÆôøØÍ›7Oÿþ÷¿µsçNýñÔÍ7߬o¿ýV7ß|s›O‡¬-ÓáÖñ#X(++«Å­¹®®.þùÃ=¶é¼Ã=¶éŸ­{¸ç8Þy‘ok&L˜ IGýs¡Ç›öd|4Ïqè5›?¶A‡Ûž±sN“&MÒ‚ ôÜsÏiìØ±IÏqè5›?O˜;,y“qk¢ÐãŽÈ÷ÜsÏÕ AƒtÕUW©¢¢B#GŽTqqqÂszÍæÏC‡ÛŸqk¢Ðá¶`é@ýúõÓ–-[tðàÁ„ãï¿ÿ¾$é‚ .hõ±¹¹¹zï½÷’Ž7lÓ?[;÷pÏq¼ó"ßÖDå—ÈÚ“q[ÑaÛ|[C‡ÛþgýöÛo×sÏ=§²²2ÝtÓMIçD¹Ã’7î±agñ÷ÄE]¤/¿üR»víJ¸¶Ë¸5Qèp›øñÒ[aõÆo¸X,æ***Ž_~ùåÎJxÍæžxâ ‹ÅÜÆãÇ8àúöíëòòòÎÔ;ï¼sØ—‰¥Ã¶ù¶„9ヺÛn»Í¥¤¤¸gžyæ°ÏÕ;ç]Æ-‰B;êï‰&tÆ s™™™ }¥Ãö·$ n –ŸŸï233ÝÓO?íV­ZÕâÛ¹ÔÔT·}ûöø±†††„7Ê[±b…7nœëÔ©“[»vmÂs¬Y³Æxâ‰îšk®q+V¬p ,pÿ÷ÿçúõëç¾ýö[ÏîÕÖù®]»Ö]qÅ®¬¬Ì­X±Â-]ºÔÝu×].55Õ9ÒÓ{õ˱fìœs‹/v‹/Žÿ;eÊ”ø±CÑa»|éð±g¶oß>÷³ŸýÌuëÖÍtÒI®ÿþIöĉ]JJŠûä“OŽþùçîÖ[ouYYY.--Í 2Ä­\¹²ÅçY±b…ËËËsiii.++ËMœ8ÑíÞ½Û쾂Â:ß>øÀ]yå•Îr;wviiiî /t3gÎŒÄ_Èε/ãX,ÿHIIIø÷æè°M¾tøØ3îÙ³gB®‡~ôêÕ+éy¢Úaçì3Žz5ßÙ³g»‹/¾ØeffºÔÔTwÚi§¹+®¸Â½þúë->¶Ë8ê>’˜sü0oðKè<ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <ÃÀ3, <óÿ\!£9mûã™IEND®B`‚pyepr-1.1.3/doc/images/water_vapour_histogram_02.png000066400000000000000000000767421414372560000225110ustar00rootroot00000000000000‰PNG  IHDR Xšv‚psBIT|dˆ pHYsaa¨?§i IDATxœìÝ{\Tuþ?ð×¹Š( „’h(†¦¢¦X*ÞÈ.²š©«i­®(mQAÁ¼¦[k^Ê’KòMókyÄtÓLÐJ“Ÿ¸Š¦á¼Ä† àç÷‡Í¬Ã Éù¨ç8ãëùxð¨ýÌgÎyŸ×y7ç¢!ˆˆˆˆˆˆ4`л"""""zp°!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"""""Ͱ!"¢JAA ¢££õ.…ˆèÄ„ˆt‘““ƒÁ€Î;[}===ƒƒ§OŸ¶xý·ß~ƒ““<<}ú [·n5j@Ž=Š„„tèÐ>>>pvvF“&M0zôhüüóÏfBÏž=)))¦Ót ¾þúk³¹éééèÑ£êÖ­ <ú裘={6®]»fQ“Á`@=ðË/¿ ::~~~pttĪU«ªÍÀÙÙ#FŒÀµkתW\\Œõë×ÃÓÓC† ¤¥¥aàÀhÚ´)\]]áéé‰'Ÿ|}ô‘Õm„‡‡Ã`0àÚµkHLLD`` œñÈ#`æÌ™¸~ýºÕ÷mß¾O=õêÕ«ggg4oÞ ¸råŠÅÜ&MšT{JTrr²Õ|e2»SÕ]röìY¼öÚkhÑ¢ÜÝÝáé鉠  Œ9ÇPóµSVV†¹sç¢uëÖpssƒ§§'ºuë†O>ùÄjMB,Z´>ú(\\\ШQ#ÄÅÅáÊ•+VsMKKƒÁ`ÀªU«ðå—_¢[·n¨S§ŽÙéf6lÀðáÃѼys¸»»ÃÝÝíÛ·Ç¢E‹pãÆ ‹¢¢¢`0PPP€%K– $$®®®hÒ¤ fÍšej¸>ýôStìØîîîhРâââPVV&ñ› ¢•£ÞÑƒËøA®jƒ‘™™ èÑ£œœœ°qãFäçç#((péÒ%8pÞÞÞhÓ¦ àóÏ?ÇòåËѳgO<ùä“prrÂ?ü€ÔÔTlܸ999ð÷÷ 0Š¢`ÕªUGxx¸iß?ü°éßcbb––†€€ <žžžØ³g’’’™™‰mÛ¶ÁÑÑüÿF‹‹‹Ñ¥KÔ©Sƒ†â¶ÿ¥}Ô¨QXºt)RSS1iÒ$‹×?úè#\»v /¿ü2\\\ãÆC«V­???\¸p_~ù%Fމ¼¼<Ìž=Ûê¾ „ýû÷cРA¨U«6lØ€äädìß¿7n4›»lÙ2ÄÆÆÂÃÆ²²²ðæ›obãÆøæ›oP·n]³÷Èœ–$“ÙÝpk­¥¥¥èÒ¥ ?ýéOB   ›6mÂ!CдiÓ­k×®!""»wïFHHbccñÛo¿aݺu:t(8€yóæ™Õ2~üx¼÷Þ{ð÷÷Ç_ÿúWÔªU 7nľ}ûPQQ'''«Ç°nÝ:lÙ²Ï>û,Ƈ'N˜^›2e \¾|˜8q"öíÛ‡5kÖXÝæë¯¿ŽììlDFFâ©§žÂ_|éÓ§£¬¬ õë×Gbb" €ððplß¾K—.Eee%–-[&û« ¢ "Ò‘ŸŸŸppp.\0 6LÔ­[WܸqCÊËËÍ^KNNŠ¢ˆüãf㊢EQÄÈ‘#EeeeÍCBtêÔI(Š"¾þúk‹×BBB„Á`4?~Üb^yy¹èÑ£‡¨U«–8}ú´ÙkÝ»wŠ¢ˆ-ZˆË—/›ÆËÊÊDXX˜PE|ôÑG¦ñ'NˆZµj‰ºuëŠüü|³m3F(Š"Fe6þðËÀÀ@«Ç7cÆ ¡(ŠØ¹s§Ù¸lf'NœŠ¢ˆºuëŠ3fTû£(Š0 Vßmûâ‹/„¢(bâĉûº~ýº())1ýïÛ­Ù³g EQDdd¤Ù1;wN<üðÃBQ±{÷nÓø×_-EÁÁÁâÊ•+¦ñk×®‰nݺ EQ,r5®O±uëV«uX[#7nÜÇŠ¢ˆ½{÷š½6räHÓ¾~ùåÓøåË—…···pqqÞÞÞ"//ϬÆV­Z‰Úµk‹óçÏ[­ƒˆ¨*6 D¤«#FEQħŸ~jóóóýúõBÜüÀäíímÖlÄÆÆZ4%¤U«V¢iÓ¦fc·ûÙ¶m[Q»vm³„FÂÛÛ[tìØÑl\QáììlÖLÕTjjªPE¼ôÒKfãß|óPÅb_Õùì³Ï„¢(âÃ?476 «W¯¶xOvv¶PEôèÑÃ4öÆoEQDRR’Åü‹/ áêêjÖœÉ6 2™›ˆšüÔ¤Ù¸q£PEL:õ¶û¾ÝÚiÖ¬™ppp°hÜ„bÅŠBQc{ùå—-@£ÿûߨ€ 0à¶õVµÿ~¡(Šxã7ÌÆ ÈÊ•+-Þ#E3f̰xmæÌ™Õ6ÏDDÖð,"ÒUÏž=±zõjdeeaРA8räΞ=‹=z¸yšL÷îÝ‘mzOVVE±¸}õêÕHKKÃ÷ßË—/›Ýž·víÚ5®©´´ßÿ=|||ðÖ[oYãä䄼¼<‹ñ&MšÀÛÛ»Æû2úóŸÿŒ &à_ÿúÞyçxzz>øà–ŸŸ:u óçÏGff&~þùg\½zÕìõ_~ùÅê~ºwïn1f¼ðÁƒMcÓïáV^^^h×®víÚ…#GŽ˜Nƒ“%›™ñ½Æë3¬©î¼U…‡‡ÃßßóæÍÃðôÓOã‰'ž@Û¶mk¼ ())ÁñãÇѸqc<òÈ#¯׬1_ã¿+Š‚'Ÿ|Òb~§Nþð.o:uªöµââb,X°_}õŽ?ŽÒÒR³×Ïœ9cõ}íÛ··óóó»íkÖn—MDd "ÒUÕ Ñׯn~hþüóÏñã?ÂÇÇGޱø€7qâD,Z´=ôž~úiøûû›®—X¹r%N:Uãš.]º¸páfΜYíú(bcc±}ûv7oikôGkÇÃÃÍš5ÃéÓ§qìØ1‹×wìØàùÿ]Ý»w[Ìß»w¯ÕýÜŽqß2k„ˆè^cBDº3~ÃñöÛoãòåË×Z¸sçNÓÒom@ŒÿÕx×®]fÏ7øïÿ‹Q£FYýg<­¥ºS³^{í5\»v 111VŸya¼ðÝ6jÔ(!0qâDäää M›6èСƒÙœÀÀ@!,n_¼uëÖÛ>Qý7Þ0û6¢¬¬ S¦L³çb >µjÕÂâÅ‹ñŸÿüÇlIII())1Í1êܹ3®_¿Ž•+WšÍOKKÃ7ß|sß|ÓaÍO?ý„sçÎYŒ¿Épvv6ÝníÄÄÄ@I“&™­Ç¢¢"¼ñÆP111¦qã·X³gÏ6;¥íÚµk˜:uªÔñÿLT]#¸ã'ÀÝ)ž‚EDº36 ?þø#ë>÷èÑëÖ­CII Z¶livî{ƒ ðç?ÿk×®EÛ¶mѧO\¹rÛ·o‡««+Ú¶mkv5£Q£FX»v-jÕª…ÆCQ¼ôÒK@tt4rrr°lÙ24kÖ O=õ7nŒ‹/âĉصkbbbîú³† †×_»ví`ùípó +W®ÄàÁƒñ /ÀÏχÂÖ­[1xðàjv!!! Á /¼GGG|ñÅ8~ü8ž{î9 >Ü4ïá‡Æ?þñŒ?¡¡¡BBBðüóÏ£V­Zø¿ÿû?xyyᡇRu!$&&bäÈ‘X¾|¹i^yy9:tè€_ýóæÍƒ¯¯/–,Y‚/¿üèÖ­›Y½{÷F¿~ý0~üxœ;w“'O†——öïß_íSm‰ˆî…ððpìÚµKêzÒO~~>Z´h¡C‡ª¾™ÑýÊæê„……á—_~ÁÉ“'Ül@>ÿüóÛÞ"²¸¸5BTTÞ}÷]Ӹܹs‘˜˜ˆC‡™.²\¶lbcc±gÏÓ½×+++ѦM¸»»cïÞ½¦÷?þøã¸zõ*¾ÿþ{ÓWç{öìÁOÃóÏ?¯c…DDwÝ\„^¿~}Ó½ÈjÒ[mÙ²åååf_7/ÆB˜Ýùdýúõ6{𓃃†Ž}ûö™n¯xæÌìß¿#FŒ0ûË$,, Í›7Çúõ륎‘ˆèNØÉo²Ko¿ý6…„„DEE¡E‹ؼy3úõëÇæƒˆìŠÍ6 BTTTàÂ… X¶l¶nÝŠ×_ÝlÎÕ«WáççGGG4nÜqqq·Ô€›ßB,\¸cÇŽ5½Þ¶m[´k×­Zµpó^öo¿ý6233ñÝwß™žP\\ŒÚµk›ž˜|+///›þ÷Å‹Q¯^=‹yÆ1ã\ã?«›{ë6‰ˆ´Põz8º¿ôìÙÓt78""{g³ È´iÓ0zôhœ?7nÄk¯½†²²2Lž<0a³ù½zõB»víð /`ÅŠxõÕWõ(ÀýóÔ_"""""­ÙlÒ¸qc4nÜзo_7Ž«ï0`ÜÜÜðí·ßšÆêׯòòr”••™=h ¸ùGÇŽÍæ^¼xÑb»Æ1ãéŒÿ¬n®ñuk M×’ÑýÇÏÏ~~~z—a³l¶©ªcÇŽxï½÷pâĉj!„ÙSiÿ]§ñÃ?àñÇ7Ÿ={ÅÅŦS¸€›×oüðÃÛ5><Í8×øÏ~øÁÔÝ:÷ÖmÞª°°>ú¨ÙSЉˆˆˆèþòÐCaÿþýlB$ÙM²cÇ888 Y³fÕÎùì³ÏpõêU„……™Æúöí ggg¤¥¥™5 iiiPýû÷7 0ãÆÃ¾}ûLs+**°zõjtîÜÙôdf<þøãX½z5^ýuÓ°öîÝ‹£Gâµ×^³Z_aa!._¾ŒÕ«W›nýK53pà@üë_ÿÒ» ›ÂÌä07õ˜™æ¦3“ÃÜÔ9r䆎ÂÂB6 ’l®=z4<==ѱcG4hÐEEEX·n>ýôSÄÇÇ£~ýú8yò$†ŽaÆ¡iÓ¦B`çÎX´hZµj…¿üå/¦íyyy!11III¨W¯úôéƒï¾û)))5j‚ƒƒMscbb°téR 4óæÍƒ–-[†üü|ddd˜Õ9þ|ôéÓƒ ÂØ±cqþüy$$$ uëÖ·ü­ªeË– ½»ÁÙ9'''f¦3“ÃÜÔcfr˜›zÌLs#­Ù\Ò¥K¬\¹«V­ÂåË—áîmÛbõêÕ6lÀÓÓ¾¾¾X°`Î;‡ÊÊJ4iÒ¯¾ú*¦NjqÇ«©S§ÂÃÃK—.ÅÂ… áçç‡)S¦˜žªnäää„ÌÌLÄÇÇ#..¥¥¥h×®6oÞŒ®]»šÍíÞ½;¾úê+LŸ>‘‘‘puuE¿~ý°`ÁÔªUëÞ†ôjÑ¢…Þ%Øf&‡¹©ÇÌä07õ˜™æFZ³¹$** QQQ8§nݺª¿JŒ‹‹C\\Ümçùúú"--­FÛìÝ»7z÷î­ª"""""{f³"$"""""ÛÄìÂsÏ=§w 6‡™Éanê139ÌM=f&‡¹‘ÖØ€]Ø´i“Þ%Øf&‡¹©ÇÌä07õ˜™æFZcBv!99Yïl3“ÃÜÔcfr˜›zÌLs#­ÙÜEèDÖðöê139ÌM=f&‡¹©Šüü|”””è]ŠÍÉÍÍÕ»„û‚‡‡‚‚‚ô.Ãî±!"""»ŸŸæÍ›ë]Ù¸£G² ¹ÇØ€‘]0~ó±zõj´lÙRçjÈÖŸpÎoÐî=6 dRSSñòË/ë]†Mafr˜›zÌLsSoÆ €–-[ò6¢û/B'»ÀsWÕcfr˜›zÌLsS///O؀]Xºt©Þ%Øf&‡¹©ÇÌä07õô.ˆj€ i† i† i†wÁ"»‰7ê]†Mafr˜›zÌLsSo„ ·s¿?¨ð~{^rr2fΜ‰;v {÷îÒÛÉÎÎFÏž=1cÆ Ì˜1ã.Vx{QQQøðÃQPP€€€M÷MÖ±!»«w 6‡™Éanê139ÌM½!C†`×®]Õ¾n+*¼Ÿ„§(ŠéçnmOzí—¬cBv!""Bïl3“ÃÜÔcfr˜›zaaaøúÿ¾ùX à~|Pá÷׃ðbcc1tèP4nܸ޶өS'äååÁÛÛû.U¦ŽB—ý’ul@ˆˆˆèÓTXõë×Gýúõïx;...6ñíiƒ¡Ù™O>ù]»v…§§'\]]ѺukÌ;åååfóš4i‚ÀÀ@üúë¯xõÕWñðÃÃÉÉ )))n^b0ðõ×_[ìcÍš5 …««+4h€—^z ¿üò ÂÃÃa0˜ÄÌÎΆÁ`0m×È8·²²sæÌAPPœ€øøx\»vÍb¿6lÀðáÃѼys¸»»ÃÝÝíÛ·Ç¢E‹pãÆ;Ž4À„ì† ô.Áæ039ÌM=f&‡¹©·cǽK¸/Lž<C‡E~~>FŒ¸¸8!0mÚ4DDDàúõë¦¹Š¢ ¼¼=zôÀ—_~‰§Ÿ~¯¼ò ÿpo¾ù&FŒS§N!** 1118|ø0ž|òI\¹r¥Úk.ª:t(–,Y‚îÝ»cܸqpqqÁÂ… 1zôh‹¹S¦LÁÁƒ†W^y/½ôJJJ0qâDŒ1BER¤ž‚Ev!==ýû÷×» ›ÂÌä07õ˜™æ¦ÞÖ­[õ.Awÿþ÷¿±`Á4iÒûöí3]s1gÎüéOÂW_}… `êÔ©n^qöìY´jÕ »w‹Ëm÷qüøqL›6 >>>ÈÍÍ…¿¿?`îܹ6lÖ®]«ú¢ï'Nà§Ÿ~Bݺu³fÍB›6m°zõjÌ›7 64Íýꫯ,$!^zé%¬Y³¯¼ò :uê¤jÿ¤-~Bvá“O>Ñ»›ÃÌä07õ˜™æ¦Þ¼yóô.Aw+W®$&&š]ðíàà€·Þz ƒ©©©fïQ .¬Qóü1*++gj>ŒæÍ›gqúUM¼ù曦æ\]]ñâ‹/âÆÈÍÍ5›kíÛEQL·aÞ¾}»êý“¶Ø€Ù‰@QôèÑÃâµæÍ›Ãßßøõ×_MãÎÎÎxì±ÇTíž|òI‹×Tß1KQtèÐÁb¼Q£F€K—.™#!!=öÜÝÝa0`0бcGÀ™3gTퟴÇS°ˆˆˆˆìÄ•+WÀ씥[ùùùáçŸÆ•+WP§N€¯¯¯Ô>4h`õõ àÔ©Sª¶éááa1æèxócjee¥iìòåËèØ±# ЩS'DEE¡^½zpttÄ¥K—°hÑ"‹ íéþĈˆˆÈNxzz Ñ´iS‹× ¡(Ši þ!}ÆÆåܹshÙÒòy*çÎSµ=5V¬X‚‚=–… IDAT$''cúôéf¯íÙ³‹-ºgû¦»‡§`‘]ˆŽŽÖ»›ÃÌä07õ˜™æ¦^rr²Þ%è.44Bdgg[¼vìØ1œ>}¦&Bv¬>uþäÉ“øù知·};ÇŽ 8Ðâµ;wÞ³ýÒÝń쟬3“ÃÜÔcfr˜›z;wÖ»ÝÅÄĸy©¢¢"Óxee%^ýu!ðòË/ßÑ>† GGG,^¼§OŸ6 !0eÊ”{ú,ãèYYYfãÀܹsïÙ~éîbBvaèСz—`s˜™æ¦3“ÃÜÔëÛ·¯Þ%è.,, ñññ(((@«V­‹øøx´mÛ7nD×®]1iÒ¤;ÚGÓ¦M1sæL¡M›67nСCìÝ»mÚ´QuZ—¢Æs_zé%Ô«W'NÄÀ1yòd<ÿüóèܹ3ž}öY™Ã!ð"""zÀÑ»€jܺæÍ›‡víÚaÉ’%øðÃqýúu<òÈ#˜={6þö·¿™.îný‡¢(Vç$$$ Q£Fxë­·°råJÔ©SO=õæÏŸ>}ú˜]c"³ýê^óóóî]»€Ý»wcëÖ­hÙ²%Þ}÷]ôêÕ k×®UµÒ‡"Ô´tOåææ¢}ûöÈÉÉ1_IDDD5s»¿GóóóѼys*SçèÑ£ Ò» )¿þú+4h€ÐÐPüûßÿÖ»Ujú9ŒŸ×î¿!»°{÷n«÷#§ê139ÌM=f&‡¹©g|>Eu‚‚‚pôèQ”””hT‘z6Ñ|ÁÓÓµjÕ2UTTàoûÊËË­^$NdÄ„ì›o¾É¿¨Ubfr˜›zÌLsSoÕªU·c îmÁgŸ}†éÓ§£OŸ>hÔ¨.^¼ˆ¯¿þùùùhß¾=bccõ.‘îcl@È.X;ç“þ3“ÃÜÔcfr˜›zsçÎeÓ¦‘Î;#<<ß|ó Ο?àæª’’’0yòd899é\!ÝÏØ€]puuÕ»›ÃÌä07õ˜™榞‹‹‹Þ%<0Ú¶m‹O?ýTï2ÈFñ6¼DDDDD¤6 DDDDD¤6 dîô¡J"f&‡¹©ÇÌä07õþñè]Õ² z—`s˜™æ¦3“ÃÜÔkذ¡Þ%Q °!»§w 6‡™Éanê139ÌM½?ÿùÏz—@D5À„ˆˆˆˆˆ4Ĉˆˆˆˆ4ÄìB^^žÞ%Øf&‡¹©ÇÌä07õNœ8¡w DTl@È.ÄÇÇë]‚Íafr˜›zÌLsSoÑ¢Ez—@D5À'¡“]X²d‰Þ%Øf&‡¹©ÇÌä07õ&OžŒ]»výáœüü|”””hT‘z Ò» ¢{Š ÙÞ®R=f&‡¹©ÇÌä07õüüüþðõüü|4oÞ\£jä=z”MÙ56 DDDô@0~ó±@K}K±ê€áÀ}ý ÑÝÀ„ˆˆˆ(-„ê]ÑŒ Ù…ùóçcòäÉz—q_ªî|ç´´4DEEݳýž:u €>§‘ÜËs¨¹ÖÔcfr˜›ziiiz— »‚‚4mÚ#GŽÄŒ3€ŒŒ üöÛo ÁŒ3Я_?‹÷¥§§ãý÷ßÇP^^ŽÀÀ@¼øâ‹˜4iœœœLózè!888àçŸ6{¿¿¿? 1sæL$&&šÆ7oÞŒgŸ}Ó§OGrrò=;n²-l@È.”––ê]Â}évç;/^¼XÃj´u¯Î¡æZS™Éanê•••é]Â}ãäÉ“èÔ©š5k†‘#G¢¸¸Ÿ|ò ú÷ïíÛ·£gÏž¦¹111HKKC@@ OOOìÙ³IIIÈÌÌĶmÛàèxó#c¯^½°fÍ=zÔô÷K^^ ™™™f Hff¦é}DFl@È.¤¤¤è]Â}éß|h}ÆóÍ3™õ8Ïú^ŸC͵¦3“ÃÜÔ3f >øà½Ë¸/dgg#%%III¦±aÆ¡oß¾X¸p¡©IKKCZZ „>úÈìÛŽ””¤¤¤`éÒ¥xõÕW={öÄš5k™™ij@ŒMFŸ>}°sçN\½z...¦×\]]¦Éq“m`Bô@ÐçŒgžgMD¤ÀÀ@³o" ""7ÆþýûMc‹-‚““>øà³æ±dɬY³ÆÔ€¿ÉÈÌÌÄØ±cMÿîïïØØXlß¾»wïFŸ>}P\\Œï¿ÿ¦oPˆ6 DDDDv§mÛ¶PÅb¼qãÆøöÛoÜ<ÍïûᅦÞzë-«ÛqrrB^^žé 00ÙÙÙ€7n ;;‘‘‘èÞ½;••…>}ú`ÇŽ`vºÀ„ìDQQ¼½½õ.ÃÆ`fjq­©ÇÌä07õ.]º¤w ÷ OOO«ãŽŽŽ¸qã€ÿåuáÂÌœ9³ÚmUmdz÷î>øÀ7pùòeôêÕ uêÔA‡‘‘¹sçòúª–Aïˆî†˜˜½K°AÌLךzÌLsS×ͨclRBCCqãÆj*++ÍÞgüF#33Ó¢ÉèÙ³'8€K—.!33uëÖEh(OÆ%sl@È.ðÖ~2’õ.À&q­©ÇÌä07õþú׿ê]‚MqwwGHH:¤êÛ£=z@Qdee!++ -Z´ÀC=àæ·#7nÜÀ‡~ˆcÇŽ!<<Üê©`ô`cBvÿuE3“Áµ¦3“ÃÜÔkÙò~|¾ùýíµ×^õk׃+W®X¼~éÒ%8pÀlÌ××!!!صkvïÞmvŠUXXœ1wî\¼þƒ¬cBDDDôB˜þ=::ãÆÃ_|fÍšáÅ_DBBF>}úÀÏÏÏê­{õê…ß~û ¥¥¥f ˆ³³3žxâ œ?Þ4¨*›k@<ˆgŸ}?ü0\]]Q¿~}téÒkÖ¬±˜›››‹Þ½{ÃÃÃ^^^8p Nœ8au»‹/Fpp0œÑ´iSÌœ9óΟ?¨¨(øøøÀÍÍ ]ºtAVV–Õmfdd ,, nnnðññAtt4.\¸pgÑ9 ÷>ü9r/úwŠ¢XœµdÉüßÿý‘‘·ß~›6mBII âãã1aÂ‹í ƒÁ€=zX}­aÆüVЬ6&;;[Œ3F¬Y³Fdgg‹M›6‰¡C‡ EQĬY³LóŽ9"<<|8¦NŠÂÂBøùùáÌ™3Ø¿?æÍ›gj>€›f5oÞëׯgr—-]ºTïl3“Áµ¦3“ÃÜÔKHHÀºuëþp?ÜéÏæ®1B ¢¢.\À²e˰uëV¼þúë€ÿüç?(++Ãc=fñ¾Ö­[ãØ±c¸víàСC¦ñ[5lØÞÞÞ8|ø°iìСCÕn€i®q›ÕÍ5¾NDDDDô ±Ùo@ÆŽ‹÷ßÀÍo!.\ˆ±cǸyZÔ«WÏâ}õêÕƒ—.]Bƒ P\\ŒÚµkÃÅÅÅb®———i[pñâÅj·yë~o·ÿ[·IDDDDô ±ÙdÚ´i=z4Ο?7âµ×^CYY&Ož¬wi·ÅòуÊfOÁjܸ1BCCÑ·o_,[¶ ýë_‘””„¢¢"Ô¯_ÀÍo,ªºxñ"E——€›×Ž”——£¬¬Ìê\ã¶Œs«Û¦ñõ[ÿYÝÜ[·IwGdd¤Þ%Ø f&ƒkM=f&‡¹©gív±Dtÿ±Ù¤ªŽ;¢¢¢ÇG³fÍàââ‚~øÁbÞ?þˆ   899øßuUçž={ÅÅÅhÕª•i¬uëÖÕn€i®ñŸÕͽu›Ö<óÌ3ˆŒŒ4û Æ ÌæmÛ¶Íê_PãÇGjjªÙXnn."##QTTd6>cÆ ÌŸ?ßlìÔ©SˆŒŒ´¸›ÈâÅ‹1iÒ$³±ÒÒRDFFb÷îÝfãéééöÀ!CîÉqÔ©SÇ.Žã^ý>€-ªG,€!6TßëÍÉx©UÆrŸ[Teü=‹wŸú}fÕ{Ô,0©ÊXéïs«E:,°~{öì¹'¿Áƒs]©<ŽØØX»8@ÛßGll¬] ÝïcÈ!ï#RëÖ¿?ÒÓÓMŸÅѶm[6ºwƒÞ÷¾[FŒ!EQQ‘Bˆ!C†ˆ ˆ’’Óœ“'O '''1eÊÓØÅ‹…‹‹‹;v¬ÙöæÎ+ ƒ8räˆiìÝwߊ¢ˆo¿ýÖ4výúu"ÂÂÂÌÞß©S'ѺukQYYiÛ³gPE,_¾Üê1ð¾Òt·ýñs@îåý>„ˆî_ü{”›»dôèÑðôôDÇŽÑ AaݺuøôÓOo:½)%%;vÄsÏ=‡„„\½zÓ§O‡¯¯/þö·¿™¶çåå…ÄÄD$%%¡^½zèÓ§¾ûî;¤¤¤`Ô¨Q6͉‰ÁÒ¥K1hÐ Ì›7>>>X¶lòóó‘‘‘aVçüùóѧO 4cÇŽÅùóç‘€Ö­[[ý/;DDDDD›k@ºté‚•+WbÕªU¸|ù2ÜÝÝѶm[¬^½Æ 3ÍkÑ¢²³³1yòd¼ð pttD¯^½°páB‹k0¦N ,]º .„ŸŸ¦L™bz¨¡‘““233¸¸8”––¢]»vؼy3ºvíj6·{÷îøê«¯0}útDFFÂÕÕýúõ P«V­{Ñ}Ìæ¨¨(DEEÕhnhh(¶oß^£¹qqqˆ‹‹»í<___¤¥¥Õh›½{÷FïÞ½k4—î̆ п½Ë°103µ¸ÖÔcfr˜›z;vì9rDçJÈqÝhÇæ"kÒÓÓùµjé`¢ךzÌLsS/330|øp+![æáá¡w v Ù…O>ùDïl3“Áµ¦3“ÃÜÔûꫯŸŸ’’½K!åáá   ½Ë°{l@ˆˆˆÈnðÃ#ÑýÏnžBDDDDD÷?6 DDDDD¤6 dølÌLךzÌLsS™Éan¤56 d"""ô.Á13\kê139ÌM=f&‡¹‘ÖØ€]:t¨Þ%Ø f&ƒkM=f&‡¹©ÇÌä07Ò"""""Ò """""Ò ² »wïÖ»ÄÌdp­©ÇÌä07õ˜™æFZcBváÍ7ßÔ»ÄÌdp­©ÇÌä07õ˜™æFZcBvaíÚµz—`ƒ˜™ ®5õ˜™æ¦3“ÃÜHkl@È.¸ººê]‚ bf2¸ÖÔcfr˜›zÌLs#­±!"""""Ͱ!"""""Ͱ!»0iÒ$½K°AÌLךzÌLsS™Éan¤56 dô.Á13\kê139ÌM=f&‡¹‘ÖØ€]ˆ‹‹Ó»ÄÌdp­©ÇÌä07õ˜™æFZcBDDDDDšaBDDDDDšaBv!//Oïl3“Áµ¦3“ÃÜÔcfr˜i Ù…øøx½K°AÌLךzÌLsS™Éan¤56 d–,Y¢w 6ˆ™ÉàZS™Éanê139Ì´Æ„ìo!(ƒ™ÉàZS™Éanê139Ì´Æ„ˆˆˆˆˆ4Ĉˆˆˆˆ4ÄìÂüùóõ.Á13\kê139ÌM=f&‡¹‘ÖØ€](--Õ»ÄÌdp­©ÇÌä07õ˜™æFZS„Bï"è¦ÜÜ\´oß999 Õ»²Æ5äÐrMåh¯ù^ÿ·gðÏÝü¼vçø i† i† Ù…¢¢"½K°AÌLךzÌLsS™Éan¤56 dbbbô.Á13\kê139ÌM=f&‡¹‘ÖØ€]HNNÖ»”¬w6‰kM=f&‡¹©ÇÌä07Ò² ¼ … f&ƒkM=f&‡¹©ÇÌä07Ò"""""Ò """""Ò ² ©©©z—`ƒ˜™ ®5õ˜™æ¦3“ÃÜHkl@È.äææê]‚ bf2¸ÖÔcfr˜›zÌLs#­±!»°téR½K°AÌLךzÌLsS™Éan¤56 DDDDD¤6 DDDDD¤6 DDDDD¤6 d"##õ.Á13\kê139ÌM=f&‡¹‘ÖØ€]ˆÕ»ÄÌdp­©ÇÌä07õ˜™æFZcBv!""Bïl3“Áµ¦3“ÃÜÔcfr˜i i† i† Ù… 6è]‚ bf2¸ÖÔcfr˜›zÌLs#­±!»žž®w 6ˆ™ÉàZS™Éanê139Ì´Æ„ìÂ'Ÿ|¢w 6ˆ™ÉàZS™Éanê139Ì´Æ„ˆˆˆˆˆ4Ĉˆˆˆˆ4Ĉˆˆˆˆ4ÄìBtt´Þ%Ø f&ƒkM=f&‡¹©ÇÌä07ÒšÍ5 ™™™9r$š7o7774jÔýû÷Gnn®Ù¼¨¨( ‹ŸG}Ôêv/^Œàà`8;;£iÓ¦˜9s&***,æ?QQQðññ››ºt邬¬,«ÛÌÈÈ@XXÜÜÜàããƒèèh\¸páÎC |Š« f&ƒkM=f&‡¹©ÇÌä07Òš£Þ¨µ|ùr\¸p'NDHH.\¸€¿ÿýïèܹ3¶nÝŠ=z˜æº¸¸`ÇŽfïwqq±ØæìÙ³1}útL™2Ø·oqæÌ,_¾Ü4¯¼¼½zõ¯¿þŠwÞy¾¾¾X²d úö틌Œ tëÖÍ4wçÎxúé§Ñ¯_?Ìš5 çÎÃäɓѫW/ìß¿NNN÷ ×СCõ.Á13\kê139ÌM=f&‡¹‘Öl®Y²d |}}ÍÆúöí‹GysæÌ1k@ðøãÿáöŠ‹‹1kÖ,Œ=³fÍtëÖ ×¯_Gbb"&L˜€–-[RSSqøðaìÙ³:u„‡‡£M›6ˆÇÞ½{MÛ4i‚ƒƒñÙgŸÁ`¸ùES`` žxâ üóŸÿĘ1cî< """""cs§`Um>ÀÍÍ -[¶ÄéÓ§ÍÆ…·ÝÞ–-[P^^nqþctt4„fO]¿~=‚ƒƒMÍp³É>|8öíÛ‡ÂÂBÀ™3g°ÿ~Œ1ÂÔ|@XXš7oŽõë××ì`‰ˆˆˆˆìŒÍ5 Ö\¹r¹¹¹ 1¿zõ*üüüàèèˆÆ#..—.]2›sèÐ!@ëÖ­ÍÆ6looo>|Ølîc=f±ã{sÛ¬n®ñuº{vïÞ­w 6ˆ™ÉàZS™Éanê139Ì´f ÈøñãqõêUL›6Í4Ö¶m[üýïÇêÕ«±uëVDEEaåÊ•xâ‰'ðÛo¿™æ£víÚV¯ ñòòBqq±é_¼xõêÕ³˜g3Î5þ³º¹·n“îŽ7ß|Sïl3“Áµ¦3“ÃÜÔcfr˜iÍæ®©*)) ü1–,Y‚víÚ™Æ'L˜`6¯W¯^h×®^xá¬X±¯¾úªÖ¥š(Š¢Û¾íÕÚµkõ.Á13\kê139ÌM=f&‡¹‘Ölú””Ìž=sæÌÁ¸qãn;À€pss÷ß~k«_¿>ÊËËQVVf1ÿâÅ‹¨_¿¾ÙÜ‹/Zg|ýÖV7÷ÖmZóÌ3Ï 22Òì',,Ììzضm"##-Þ?~üx¤¦¦šåææ"22EEEfã3fÌÀüùóÍÆN:…ÈÈHäåå™/^¼“&M2+--Edd¤Å×·éééVï+>dÈ{róçÏ·‹ã¸W¿` ,Ÿûá `€ UÆ·°<`<€Ô*c¹¿Ï-ª2þžÅ»Oý>3¯Êøb“ªŒ•þ>·êQ¤ÃúÓK¬Åž={îÉ¨ˆëJåq¸ººÚÅqÚþ>\]]íâ8í~®®®vqFZ‡«««]p÷ééé¦ÏbhÛ¶­Åä& ÂF%'' EQÄÌ™3küžÊÊJáêê*†jûøã…¢(âÛo¿5›[XX(EsçÎ5EDDˆ–-[ZlwîܹBQQXX(„âôéÓBQ1þ|‹¹-Z´O=õ”Õúrrr‘““Sãc"ú#Æ5ä@høóûZÖv§Bü¾Oþ9""¢{…Ÿ×îœM~òÆo %%IIIHJJªñû>ûì3\½zaaa¦±¾}ûÂÙÙiiifsÓÒÒ ( ú÷ïo0`òòò°oß>ÓXEEV¯^Î;£aÆ<þøãX½z5nܸaš»wï^=zÏ?ÿ¼ÚC&""""² 6×€üýïÇŒ3зo_<óÌ3Ø»w¯Ùœòòò0hÐ dddàã?ÆàÁƒÑºuk«_Ò©ú,Õ3“Áµ¦3“ÃÜÔcfr˜iÍæ.Bß´iEÁ–-[°e˳×EAee%<==áëë‹ àܹs¨¬¬D“&MðꫯbêÔ©w¼š:u*<<<°téR,\¸~~~˜2eŠÙ]µÀÉÉ ™™™ˆG\\JKKÑ®];lÞ¼]»v5›Û½{w|õÕW˜>}:"##áêêŠ~ýúaÁ‚¨U«Ö½ ç w 6ˆ™ÉàZS™Éanê139Ì´¦Qƒ§õ‘&rssѾ}{äää 44TïrÈ×@Ë5•  ½æ{ýßžÁ?GDDtOðóÚ³¹S°ˆˆˆˆˆÈv±!"""""Ͱ!»PõÞàTÌLךzÌLsS™Éan¤56 dâããõ.Á13\kê139ÌM=f&‡¹‘ÖØ€]X²d‰Þ%Ø f&ƒkM=f&‡¹©ÇÌä07Ò² ¼…  f&ƒkM=f&‡¹©ÇÌä07Ò"""""Ò """""Ò ² óçÏ×»ÄÌdp­©ÇÌä07õ˜™æFZcBv¡´´Tïl3“Áµ¦3“ÃÜÔcfr˜iMB½‹ ›rssѾ}{äää 44TïrÈ×@Ë5•  ½æ{ýßžÁ?GDDtOðóÚã7 DDDDD¤6 DDDDD¤6 dŠŠŠô.Á13\kê139ÌM=f&‡¹‘ÖØ€]ˆ‰‰Ñ»ÄÌdp­©ÇÌä07õ˜™æFZcBv!99YïlP²ÞØ$®5õ˜™æ¦3“ÃÜHkl@È.ð.2˜™ ®5õ˜™æ¦3“ÃÜHkl@ˆˆˆˆˆH3l@ˆˆˆˆˆH3l@È.¤¦¦ê]‚ bf2¸ÖÔcfr˜›zÌLs#­±!»››«w 6ˆ™ÉàZS™Éanê139Ì´Æ„ìÂÒ¥Kõ.Á13\kê139ÌM=f&‡¹‘ÖØ€‘fØ€‘fØ€‘fØ€]ˆŒŒÔ»ÄÌdp­©ÇÌä07õ˜™æFZcBv!66Vïl3“Áµ¦3“ÃÜÔcfr˜i Ù…ˆˆ½K°AÌLךzÌLsS™Éan¤56 DDDDD¤6 DDDDD¤6 d6lØ w 6ˆ™ÉàZS™Éanê139Ì´Æ„ìBzzºÞ%Ø f&ƒkM=f&‡¹©ÇÌä07Ò² Ÿ|ò‰Þ%Ø f&ƒkM=f&‡¹©ÇÌä07Ò"""""Ò """""Ò """""Ò ² ÑÑÑz—`ƒ˜™ ®5õ˜™æ¦3“ÃÜHkl@È.ð‘©Ž7 IDAT)®2˜™ ®5õ˜™æ¦3“ÃÜHkl@È. :Tïl3“Áµ¦3“ÃÜÔcfr˜i i† i† Ù…Ý»wë]‚ bf2¸ÖÔcfr˜›zÌLs#­±!»ðæ›oê]‚ bf2¸ÖÔcfr˜›zÌLs#­±!»°víZ½K°AÌLךzÌLsS™Éan¤56 d\]]õ.Á13\kê139ÌM=f&‡¹‘ÖØ€‘fØ€‘fØ€]˜4i’Þ%Ø f&ƒkM=f&‡¹©ÇÌä07Ò² z—`ƒ˜™ ®5õ˜™æ¦3“ÃÜHkl@È.ÄÅÅé]‚ bf2¸ÖÔcfr˜›zÌLs#­±!"""""Ͱ!"""""Ͱ!»——§w 6ˆ™ÉàZS™Éanê139Ì´Æ„ìB||¼Þ%Ø f&ƒkM=f&‡¹©ÇÌä07Ò² K–,Ñ»ÄÌdp­©ÇÌä07õ˜™æFZ³¹$33#GŽDóæÍáææ†F¡ÿþÈÍ͵˜›››‹Þ½{ÃÃÃ^^^8p Nœ8au»‹/Fpp0œÑ´iSÌœ9óΟ?¨¨(øøøÀÍÍ ]ºtAVV–Õmfdd ,, nnnðññAtt4.\¸pgU¼…  f&ƒkM=f&‡¹©ÇÌä07ÒšÍ5 Ë—/Ç©S§0qâDlÞ¼‹-ÂùóçѹsgìØ±Ã4///ááᨨ¨ÀºuëðÏþGE×®]QTTd¶ÍÙ³gc„ xá…°mÛ6Œ7sæÌÁøñãÍæ•——£W¯^رcÞyçlܸ 4@ß¾}ñõ×_›Íݹs'ž~úiøùùaãÆX´h222ЫW/\»víÞDDDDDt?6æÜ¹scÿýïEÆ EïÞ½Mcƒ ¾¾¾¢¤¤Ä4vòäIáää$&Ožl+**ÎÎÎb̘1fÛœ3gŽ0 â§Ÿ~2-]ºT(Š"öîÝk«¨¨!!!¢S§NfïïØ±£hÕª•¨¬¬4}óÍ7BQñî»ïZ=¶œœ@äääÜ.¢1®) GBßßײ¶;â÷}òÏÝ+ü¼vçlî___‹1777´lÙ§OŸTTT`Ó¦M8p ÜÝÝMóУG¬_¿Þ4¶eË”——#::Úl›ÑÑÑB`Æ ¦±õë×#88:u2988`øðáØ·o gΜÁþýû1bÄ ÿ‹8,, Í›77Û?ÝóçÏ×»ÄÌdp­©ÇÌä07õ˜™æFZ³¹Äš+W® 77!!!€ÿüç?(++Ãc=f1·uëÖ8vì˜é4¨C‡™ÆoÕ°aCx{{ãðáæ±C‡U»M¦¹ÆmV7×ø:Ý=¥¥¥z—`ƒ˜™ ®5õ˜™æ¦3“ÃÜHkvÑ€Œ?W¯^Å´iÓÅÅÅ€zõêYÌ­W¯„¸té’iníÚµáââb1×ËËË´-¸xñbµÛ¼u¿·Ûÿ­Û¤»#%%Eïl3“Áµ¦3“ÃÜÔcfr˜iÍQïîTRR>þøc,Y²íÚµÓ»œQEˆˆˆtaÓ߀¤¤¤`öìÙ˜3gÆg¯_¿>€›ßXTuñâE(Š///ÓÜòòr”••YkÜ–qnuÛ¼u¿·Ûÿ­Û$""""zØl’’’búIHH0{­Y³fpqqÁ?ü`ñ¾üAAAprrð¿ë4ªÎ={ö,Š‹‹ÑªU+ÓXëÖ­«Ý&Ó\ã?«›{ë6­yæ™giöfvA<lÛ¶ ‘‘‘ï?~k’’’ÌSO=e6mÚd^xáÓ¶m[ó³Ÿý,f_uuµéÙ³§éÒ¥‹Y²d‰Y¿~½5j”iݺµÙ²eKÌÞM›6™V­Z™Ñ£G›õëכŋ›ýèG¦W¯^æøñã ¯†¶Gf‰}iÎÏ ïB¯yGfvÈÍ;2³CnÞðýÚù Ü2xð`“””d"‘HÜ#)))foii©:t¨IMM5:t0£G6Ÿ|òIÂã¾ôÒKæê«¯6mÚ´1]»v5EEE¦¶¶6nßW_}eî»ï>“‘‘aRRRÌ€̆ sýúõ&''Ǥ¤¤˜ŒŒ 3~üxsèС¯†FSãƒhZ|¿vþw¬76zoß¾}µ~ýúFí-((PAAÁ9÷uìØQ‹-jÔ1‡ª¡C‡6j/ÐöM肇¡Pÿîh 2³A¯yGfvÈÍ;2³Cnp¡PVVæw Df6è5ïÈ̹yGfvÈ ®1€ æÏŸïw Df6è5ïÈ̹yGfvÈ ®1€p†€3 œaA(äååù]B‘™ zÍ;2³CnÞ‘™rƒk …É“'û]B‘™ zÍ;2³CnÞ‘™rƒk …ÜÜ\¿K 2³A¯yGfvÈÍ;2³Cnp€3 œaA(¬ZµÊïˆÌlÐkÞ‘™róŽÌì\cA(û]B‘™ zÍ;2³CnÞ‘™rƒk …eË–ù]B‘™ zÍ;2³CnÞ‘™rƒk œaà g@ ùùù~—@dfƒ^óŽÌì›wdf‡ÜàBOqµAf6è5ïÈ̹yGfvÈ ®1€ ÆŽëw Df6è5ïÈ̹yGfvÈ ®1€p†€3 …­[·ú]B‘™ zÍ;2³CnÞ‘™rƒk …9sæø]B‘™ zÍ;2³CnÞ‘™rƒk …¥K—ú]B‘™ zÍ;2³CnÞ‘™rƒk …víÚù]B‘™ zÍ;2³CnÞ‘™rƒk œaà BaÊ”)~—@dfƒ^óŽÌì›wdf‡ÜàB¡K—.~—@dfƒ^óŽÌì›wdf‡ÜàB¡  ÀïˆÌlÐkÞ‘™róŽÌì\cà g@ ååå~—@dfƒ^óŽÌì›wdf‡ÜàBaêÔ©~—@dfƒ^óŽÌì›wdf‡ÜàBáå—_ö»„"3ôšwdf‡Ü¼#3;ä×@ ÜBЙ٠׼#3;äæ™Ù!7¸ÆÀÎ0€ fÏžíw Df6è5ïÈ̹yGfvÈ ®1€ ªªªü.!€È̽æ™Ù!7ïÈ̹Áµˆ1Æø]N*++S¿~ýTZZª¾}ûú]B ®§¤RI.{ªLR?çg=}fñçÐ,ø~íüñ g@8ÂP¨¨¨ð»„"3ôšwdf‡Ü¼#3;ä×@ &Lð»„"3ôšwdf‡Ü¼#3;ä×@ 3fÌ𻄚áwD¯yGfvÈÍ;2³Cnp¡À](l™ zÍ;2³CnÞ‘™rƒk œaà BaáÂ…~—@dfƒ^óŽÌì›wdf‡ÜàB¡¬¬ÌïˆÌlÐkÞ‘™róŽÌì\cA(ÌŸ?ßïˆÌlÐkÞ‘™róŽÌì\cà g7€=zTS§NUnn®233•””¤¢¢¢¸}ãÇWRRRÜã'?ùIÂãΛ7OYYYjÛ¶­.¿ür=óÌ3ª­­ÛwðàA?^™™™JMMÕ€ôÞ{ï%\[¶l‰Ù»yófÝ|óÍêÔ©“V¯^­_|Q%%%2dˆŽ?ÞDi N^^žß%™Ù ×¼#3;äæ™Ù!7¸–ìw^uíÚU_ýµ$éðáÃzýõ×Ü{ÑEéºë®;ëñ>¬™3gêÁÔÌ™3%I7Þx£jjj4mÚ4ª{÷î’NÞ¦n÷îÝÚ¶m›ú÷ï/IüðCÝ{ï½ÑáC’rrrtÕUWiåÊ•º>4^nn®ß%™Ù ×¼#3;äæ™Ù!7¸èä\¾ûî;uêÔIÉÉÉúÑ~¤‚‚‚è«'uvíÚ%IÊÎÎŽY¿ôÒKuñÅk÷îÝ1{{õêwžºçÖí­;fC{ë¾´4û¬ÆêÝ»·úô飞={J’6mÚ¤_ÿú×Ú°aƒ>øà¥¦¦J:ù#XmÚ´QJJJÜ1ÒÒÒtøðáè¿WVV*===n_ÝZÝÞº_Ú{æ1€–$´¯€êÑGÕ!C4dÈýêW¿Ò›o¾©òòò³¾oÄ…†Þ4{gþ¨‹ÌlÐkÞ‘™róŽÌì\ í’ȨQ£”ššª;vD×222T]]­cÇŽÅí¯¬¬TFFFÌÞÊÊÊ„ûê¾~æ¯ í=󘉌1Byyy1œœœ¸¿ Ö­[—ðΓ&MÒÂ… cÖÊÊÊ”——§ŠŠŠ˜õ§Ÿ~Z³gÏŽYÛ¿¿òòòT^^³>oÞ“tò ÝË—/×òåˉDôé§ŸªC‡êر£^xá}õÕWúþûïÕµkW=úè£zòÉ'ãîxõä“Oª}ûöš?¾æÎ«N:é‰'žÐSO=³¯uëÖÚ°aƒ¦Nª‚‚UUU©OŸ>Z³f³wРAz÷Ýw5}útååå©]»v9r¤^xáµjÕªy.P@>ýôÓsîyûí·=³  @çÜ×±cǸ×jÈСC5tèPOuÀN~~¾þýßÿÝï2&_™yE¯yGfvÈÍ;2³Cnp­E½áŧ¸Ú 3ôšwdf‡Ü¼#3;ä×@ cÇŽõ»„"3ôšwdf‡Ü¼#3;ä×@8ÃÀ„Bü'ãÜÈ̽æ™Ù!7ïÈ̹Á5„œ9sü.!€È̽æ™Ù!7ïÈ̹Á5„ÂÒ¥Ký.!€È̽æ™Ù!7ïÈ̹Á5„B»víü.!€È̽æ™Ù!7ïÈ̹Á5Î0€p†¡0eÊ¿K 2³A¯yGfvÈÍ;2³Cnp¡Ð¥K¿K 2³A¯yGfvÈÍ;2³Cnp¡PPPàw Df6è5ïÈ̹yGfvÈ ®1€p†€3 …òòr¿K 2³A¯yGfvÈÍ;2³Cnp¡0uêT¿K 2³A¯yGfvÈÍ;2³Cnp¡ðòË/û]B‘™ zÍ;2³CnÞ‘™rƒk n!hƒÌlÐkÞ‘™róŽÌì\cà g@ ³gÏö»„"3ôšwdf‡Ü¼#3;ä×@ UUU~—@dfƒ^óŽÌì›wdf‡ÜàZÄcü.'•••©_¿~*--Uß¾}ý.!P×SR©$—=U&©Ÿó³ž>³øsh|¿vþx€3 œaA(TTTø]B‘™ zÍ;2³CnÞ‘™rƒk … &ø]B‘™ zÍ;2³CnÞ‘™rƒk …3fø]BÍð»€@¢×¼#3;äæ™Ù!7¸Æ‚Pà.6È̽æ™Ù!7ïÈ̹Á5Î0€p†¡°páB¿K 2³A¯yGfvÈÍ;2³Cnp¡PVVæw Df6è5ïÈ̹yGfvÈ ®1€ æÏŸïw Df6è5ïÈ̹yGfvÈ ®1€p†€3 œaA(äååù]B‘™ zÍ;2³CnÞ‘™rƒk …É“'û]B‘™ zÍ;2³CnÞ‘™rƒk …ÜÜ\¿K 2³A¯yGfvÈÍ;2³Cnp€3 œaA(¬ZµÊïˆÌlÐkÞ‘™róŽÌì\cA(û]B‘™ zÍ;2³CnÞ‘™rƒk …eË–ù]B‘™ zÍ;2³CnÞ‘™rƒk œaà g@ ùùù~—@dfƒ^óŽÌì›wdf‡ÜàBOqµAf6è5ïÈ̹yGfvÈ ®1€ ÆŽëw Df6è5ïÈ̹yGfvÈ ®1€p†€3 …­[·ú]B‘™ zÍ;2³CnÞ‘™rƒk@Ž=ª©S§*77W™™™JJJRQQQ½eee:t¨Ú·o¯´´4Ý~ûíúôÓOî7ož²²²Ô¶m[]~ùåzæ™gT[[·ïàÁƒ?~¼233•ššªè½÷ÞKxÌ’’åää(55U™™™ÊÏÏסC‡ì/ š3gŽß%™Ù ×¼#3;äæ™Ù!7¸¸¤¢¢B¯½öšjjj4jÔ(IR$‰ÛW^^®Áƒ«¶¶VË—/×o¼¡½{÷jàÀª¨¨ˆÙûì³Ïª°°PwÜq‡Ö­[§GyDÏ=÷œ&Mš³¯ººZC† ÑÆõÒK/iõêÕºä’K4|øpmÙ²%fïæÍ›uóÍ7«S§NZ½zµ^|ñE•””hÈ!:~üx§‚¥K—ú]B‘™ zÍ;2³CnÞ‘™rƒkÉ~àU×®]õõ×_K’>¬×_=á¾éÓ§+%%Eï¼óŽ~ðƒH’úõë§+¯¼RsçÎÕóÏ?=ÆÌ™3õàƒjæÌ™’¤o¼Q555š6mš Õ½{wIÒÂ… µ{÷nmÛ¶Mýû÷—$ ,IJOOûZzzºŒ11?ÆÕ¦M¥¤¤ÄíMKK‹K’*++<æ™ç=×ùÏ<&šÆ”)Sü.!€È̽æ™Ù!7ïÈ̹ÁµP ºDošÇùéÒ¥‹ß%™Ù ×¼#3;äæ™Ù!7¸Ê$##CÒÉW,ꫬ¬T$QZZZtouuµŽ;–poݱêö6tÌ3Ï{®óŸyL4‚‚¿K 2³A¯yGfvÈÍ;2³Cnp-”Èüc¥¤¤èÏþsÜ×þò—¿èÊ+¯TëÖ­%~ŸFý½ÿ÷ÿ§Ã‡«gϞѵììì))º·î׆öžyÌDFŒ¡¼¼¼˜GNNNÌâ%iݺuÊËË‹{þ¤I“´pᘵ²²2åååÅÝ‚øé§ŸÖìÙ³cÖöï߯¼¼<•——Ǭϛ7/îeÚªª*åååÅ}ˆQqqqÜû%é®»îâ:|¸i­¤øëî’´ªÞÚ:Iñ×!M’´°ÞZÙ©½õÖÿ-îÙûOí,¯·>Oñ? Vujoý«(Vã¯bÛ¶mìïGXúŠëà:¸®#ì×Q\\ý^¬[·nêÝ»· ãŽL€:tÈD"STT÷µ»îºË\rÉ%æ›o¾‰®}öÙg¦uëÖæ‰'žˆ®UVVš””óðÃÇ<Ö¬Y&))ÉìÙ³'º¶`Á‰DÌŽ;¢k555¦G&'''æùýû÷7ÙÙÙæûï¿®mÛ¶ÍD"óÊ+¯$¼žÒÒR#É”––62àìêzJ*5’qø8ÕËnOjÌ©sòçÐ\ø~íüò5kÖhÅŠúÃþ éäݧV¬X¡+Vè»ï¾“$©ªªJ·Þz«Ö®]«•+Wê–[nQÇŽõ‹_ü"z¬´´4M›6M¯¼òЦM›¦Í›7kîܹ***Òĉ•••Ý;aÂõèÑCcÆŒQqq±JJJtçwjß¾}qÓúìÙ³U^^®1cƨ¤¤DK–,ÑwÞ©ììì„8ÎOýÿ+‚Æ 3ôšwdf‡Ü¼#3;äçüž€ltíÚÕD"‰DLRRRÌ?öÙgÑ}¥¥¥fèС&55ÕtèÐÁŒ=Ú|òÉ' ùÒK/™«¯¾Ú´iÓÆtíÚÕ™ÚÚÚ¸}_}õ•¹ï¾ûLFF†III1 06lHxÌõë×›œœ“’’b222ÌøñãÍ¡C‡¼.&j{#GŽô»„ ÒÙ_É+ è5ïÈ̹yGfvÈ;_;cø4?8WVV¦~ýú©´´T}ûöõ»œ@Ù¿?wñH ®§¤RIõ{j¿šïNXe’ú%]uÕU¾Ö°wï^Ïß̵n„ªU«tÛm·ù]FÀ¬’Df^Ñkçvú„·$u—´QÒO}¤qV¯bÔ=§®j—NV­˜ºé5ïÈ̹Á5„Bqq1yzV,ïè5/ºKê+i¶¤_ø\KãÕUí7zÍ;2³Cnp7¡#–-[æw Df6è5dfƒ^óŽÌì\cà g@8ÂPÈÏÏ÷»„"3ôš 2³A¯yGfvÈ ®1€ øWdfƒ^³Af6è5ïÈ̹Á5„ÂØ±cý.!€È̽fƒÌlÐkÞ‘™rƒk œaà BaëÖ­~—@dfƒ^³Af6è5ïÈ̹Á5„œ9sü.!€È̽fƒÌlÐkÞ‘™rƒk …¥K—ú]B‘™ z͙٠׼#3;ä×@ íÚµó»„"3ôš 2³A¯yGfvÈ ®1€p†€3 …)S¦ø]B‘™ z͙٠׼#3;ä×@ ]ºtñ»„"3ôš 2³A¯yGfvÈ ®1€  ü.!€È̽fƒÌlÐkÞ‘™rƒk œaà B¡¼¼ÜïˆÌlÐk6È̽æ™Ù!7¸Æ‚P˜:uªß%™Ù ×l™ zÍ;2³Cnp¡ðòË/û]B‘™ z͙٠׼#3;ä×@ ÜBЙ٠×l™ zÍ;2³Cnp€3 œaA(Ìž=ÛïˆÌlÐk6È̽æ™Ù!7¸Æ‚P¨ªªò»„"3ôš 2³A¯yGfvÈ ®1€ ŠŠŠü.!€È̽fƒÌlÐkÞ‘™rƒk¡@6mÚ¤¤¤¤„;wÆì-++ÓСCÕ¾}{¥¥¥éöÛo×§Ÿ~šð¸óæÍSVV–Ú¶m«Ë/¿\Ï<óŒjkkãö|¸¶lÙâ亀 Q²ß4·+¯¼R×]w]ƒ_Ÿ>}ºRRRôÎ;ïè?ø$©_¿~ºòÊ+5wî\=ÿüó’¤Ã‡kæÌ™zðÁ5sæLIÒ7Þ¨ššM›6M………êÞ½»$iáÂ…Ú½{·¶mÛ¦þýûK’¬k®¹FS§NÕöíÛ›ó’[¤ŠŠ ]|ñÅ~—0’ÈÌ+zͽfƒ^óŽÌì\ ý+ Ƙ¿V[[«wÞyG·ß~{tøN~ ÏOúS­\¹2º¶víZUWW+???æùùù2ÆhÕªUѵ•+W*+++:|HÒE]¤qãÆiçÎ:pà@S\Î0a¿K 2³A¯Ù 3ôšwdf‡ÜàZèI“&©U«VêСƒ†®?þñѯ}üñÇ:vì˜zõê÷¼ììl}ôÑG:~ü¸$i×®]Ñõ3]z饺øâ‹µ{÷îèÚ®]»<¦¤˜½h3fÌ𻄚áwD¯Ù˜áwD¯yGfvÈ ®…vùá¨ÂÂB½úê«Ú´i“^|ñEýïÿþ¯¬uëÖI:ùcU’”žž÷üôôtcôõ×_G÷¶iÓF)))q{ÓÒҢǒ¤ÊÊÊyæyÑtúöíëw Df6è5dfƒ^óŽÌì\ í{@z÷î­Þ½{Gÿý†nШQ£”­Ç{L¹¹¹>V´L¡}$‘:è–[nÑÿüÏÿ¨ººZ’N¾bQ_ee¥"‘ˆÒÒÒ$Iª®®Ö±cÇî­;VÝÞ†ŽY÷õ³1b„òòòb9991ï3‘¤uëÖ)///îù“&MÒÂ… cÖÊÊÊ”——wg¯§Ÿ~:îP÷ï߯¼¼<•——Ǭϛ7OS¦L‰Y«ªªR^^ž¶nݳ^\\÷~Iºë®»¸®CZ+)þ:¤»$­ª·¶NRüuH“$-¬·VvjoE½õ‹{öþS;Ëë­Ï“4¥ÞZÕ©½õ¯¢X¿ŠmÛ¶]°¿a髆®ãñÇ[kš¾zZñŸªž¸³–.]zþ¿jž?‰®¢îõoO_q\‡¿×Q\\ý^¬[·nêÝ»· ãŽL óÐC™H$bª««MMMi×®yøá‡ãöÝtÓMæê«¯Žþû’%KL$1;vìˆÙwàÀ‰D̬Y³¢k¹¹¹¦{÷îqÇœ5k–‰D"æÀ k+--5’Lii©íåµX¯¿þºß%\êzJ*5’©÷x=ÁZS=Nõró ÁG©Ô¬Žèµs‹ï»æìµzÏâ÷?úwðÒ·ôšwdf‡Ü¼áûµó×¢^ùúë¯õ‡?üA}úôQëÖ­•œœ¬‘#Gê÷¿ÿ½Ž=Ý·ÿ~mܸQ£GŽ® >\mÛ¶Õ¢E‹b޹hÑ"E"ÝvÛmѵQ£F©¼¼<ækkkõÖ[oéúë¯×¥—^Ú|ÙB•••ù]B‘™ z͙٠׼#3;ä×Bû{î¹GݺuSß¾}•žž®}ûöé_ÿõ_uèÐ!½ùæ›Ñ}EEEºöÚkuë­·êñÇ×wß}§éÓ§«cÇŽúÅ/~Ý—––¦iӦ闿ü¥ÒÓÓ5lØ0}ðÁ***Òĉ•••Ý;aÂÍŸ?_cÆŒÑóÏ?¯ÌÌLýæ7¿Ñ¾}ûTRRâ4‡–bþüù~—@dfƒ^³Af6è5ïÈ̹ÁµÐ ½zõÒ²eË4þ|=zTééé8p /^¬~ýúE÷]}õÕÚ´i“{ì1ÝqÇJNNÖ!C4wîܸ÷j<ùä“jß¾½æÏŸ¯¹sçªS§Nzâ‰'ôÔSOÅìkݺµ6lØ ©S§ª  @UUUêÓ§Ö¬Y£:¹~àBÚä±ÇÓc=Ö¨½}ûöÕúõëµ·  @çÜ×±cǸ×ZºõþbA($ºíÎ…ÌlÐk6È̽æ™Ù!7¸Æ‚P˜ojjªõ‡µoß^W^y¥õ¹Ïׄ ´zõjßÎL$‘™Wôš zͽæ™Ù!7¸Ær7nœß%XÙ»w¯oCÈŒ3|9o°Íð»€@¢×lÌð»€@¢×¼#3;ä×@.H¿’4ÂãsöH§·$uoú‚qfé›o¾q|æÓúöíëÛ¹ƒ‹ÌlÐk6È̽æ™Ù!7¸ÆrAê&Ûÿ`w·~&Ðüx:g@ .ô»„"3ôš 2³A¯yGfvÈ ®ñ#X…²²2Ýÿý~—0e’ÈÌ+zͽfƒ^‹µoß¾s¾×ð¿þë¿Ô§OŸ&?·_wzlÌ57…D¹ù}wK„Baþüù~—@dfƒ^³Af6èµÓöíÛ§«®ºªQ{—/_Þ,5¸¾Ó£—kn ‰róóî–7pA;ý*€÷zt}§ÇºóµÔ»["Ü@@@´¼{=¶¼+FKÀ›Ð8ÂPÈËËó»„"3ôš 2³A¯Ù 3¤×@ “'Oö»„"3ôš 2³A¯Ù 3¤×@ ¹¹¹~—@dfƒ^³Af6è5dfƒÔàg@šÑÑ£GUXX¨Î;+%%E}úôѲeËü. ð H3=z´Þ|óM͘1Ck×®Õµ×^«±cǪ¸¸ØïÒBgÕªU~—@dfƒ^³Af6è5dfƒÔàH3y÷ÝwURR¢ hâĉ4h^}õU 6LS¦Lщ'ü.1TfÏžíw Df6è5dfƒ^³Af6H ®1€4“•+Wª}ûö3fLÌz~~¾¾üòKíØ±Ã§ÊÂ)33ÓïˆÌlÐk6È̽fƒÌl\ci&»víR÷îÝ•”qvv¶$i÷îÝ~”øŠ¤™>|Xéééqëuk‡v]à;Î$û]@Xedd$|•£²²2úõ†ýñGÿZÒ‘zk_J’Þ•´§õ%:B"ßœzœÍ¡S¿Ž;VÉÉ'[ªuëÖjÕªUÜÞªª*ÕÔÔ(99¹Á=555:~ü¸"‘ˆZµjuÖ=’‰Dô·¿ýM×]wÝY÷µiÓ&Z_C{Z·n]?ó¼õ÷$ª©±ûšbOMMMôŸÏ¶ïÈ‘ºßå©’Òêe½¤º÷(}'éXÂk:­úÔã\j$ý]Rãú±±½(yëÇ{ï½W©©©'+:ÏÌëònÕª•þô§?©GÖǪS[[«êêês§¦¦FƘsîûöÛo‰DÔ®]»³ÖTSS£Ö­[«]»vVu7fß·ß~{êŸêú®®×"’Ì;껺>ksÆ¿Ÿ«÷j$?uÌØß¯u_(}ûßÿýßѿךóï²3ûûlûÎu¾¦ØÓо³ÿ]v¦õ’îTlŸ5¤~?6äkIÒ¬Y³Îú¾œºþ©ßw ωDÿ\7äС“]ÑØÿ®Ÿ?JZ|Æ¿zê×={šûÌÁD.ç/bÎõ'V~ö³Ÿ©¸¸XGމyÈÒ¥Ku÷Ýwëý÷ß×õ×_óœèÿñõå—_º.ôÿðúðÃÕ©S'¿K $f²víZ1BK—.ÕwÞ]>|¸vïÞ­ýû÷+‰Ä=ïÀ:pà€ËRàA§N>Î?‚ÕL†®aÆéá‡ÖÿûÿO?þñU\\¬uëÖiñâÅ ‡‰†@¸ñ H3úöÛoõÔSOéw¿û*++Õ½{w=ñÄ1¯ˆ- g¸ /g@šØÑ£GUXX¨Î;+%%E}úôѲeËõ܃jüøñÊÌÌTjjª  ÷Þ{/áÞ’’åää(55U™™™ÊÏÏÞ²/h\d6xð`%%%Å=FŒÑÔ—ãŒmnŸþ¹ 5hÐ ýð‡?TRR’~ûÛß6¸Ÿ^ó–½vÚÛo¿­;ï¼SݺuS»víÔ­[77N}ôQÂýôš·ÌèµÓJJJ4lØ0uîÜYmÛ¶Õ%—\¢!C†hÍš5 îo齿%3z­aÓ¦MSRR’²³³~=L½Ö¤ šÔ°aÃLZZšyõÕWͦM›ÌĉM$1K–,9ëóŽ;fzöìiºtéb–,YbJJJÌm·ÝfZµje6oÞ³wÓ¦M&99ÙŒ5Ê”””˜Å‹›Ë.»Ìdgg›êêêæ¼¼fá"³Aƒ™+®¸ÂìØ±#æñ·¿ý­9/­YÙæ¶qãF“™™irssÍÝwßm"‘ˆùío›p/½v’—ÌèµÓú÷ïoFŽiÞxã ³eËóÖ[o™Ÿüä'¦}ûöf÷îÝ1{鵓¼dF¯¶lÙ2óóŸÿÜüîw¿3[¶l1+W®47Ýt“‰D"æ­·ÞŠÙK¯ä%3z-±?ýéO¦mÛ¶æÒK/5ÙÙÙq_[¯5%&ôŸÿùŸ&‰˜¥K—Æ¬çææšÎ;›ï¿ÿ¾ÁçΟ?ßD"³}ûöèZmm­éÑ£‡éß¿ÌÞk¯½ÖôìÙ3æxï¿ÿ¾‰D"fÁ‚Mt5n¸ÊlРA ÿrªóÉíĉÑþðÃÏúÍ4½v’—ÌèµÓ<·öå—_šÖ­[›x f^;ÉKfôÚÙÕÔÔ˜Ë.»ÌÜxã1ëôZÃÊŒ^‹WSScz÷îm ÍàÁƒæ¦^kjüVZ¹r¥Ú·o¯1cÆÄ¬çççëË/¿ÔŽ;Îúܬ¬,õïß?ºvÑEiܸqÚ¹sgô³A¾øâ }øá‡º÷Þ{c>à0''GW]u•V®\ÙÄWÕ¼š3³úèhBt¿…óÉíÌ[@Ÿ-zí´ÆfæeOPœOn‰>5ºS§Nêܹ³>ÿüóè½vZc3«C¯5,99Y:tˆùÔxzíìeV‡^‹õüóÏëÈ‘#š9sfÂlÂÖkM¤ íÚµKÝ»wi4IÑŸ ܽ{÷YŸÛ«W¯¸õúÏݵk—$5¸·îëAÑœ™ýõ¯Yÿøã•‘‘¡V­ZéŠ+®Ð´iÓtìØ±ó½_œOn^Î!Ñk6赆}òÉ'Ú¿¿zôès‰^kH¢ÌêÐk±Nœ8¡ÚÚZ}ùå—zúé§µwï^ýüç?9‡D¯é\™Õ¡×Nûë_ÿªgŸ}V ,PjjjƒçÂÓkM"lB‡ÖW\·žžžýzC*++£ûÎöܺ_Ú{¶s\ˆ\d&IÔØ±c•••¥ï¾ûNï¾û®æÌ™£­[·jãÆ ~0ä…ê|rórŽ3Yÿ<-©×¼ ×V[[« &¨}ûö1ßàÐk k(3‰^KdĈZ·n$©]»vZ¼x±n½õÖ˜sœyÌúçi‰½v®Ì$zíLßÿ½&L˜ Ûo¿]Ç?ë9Îþøc½óÎ;çuœ–ØkgâG°šPFFF‰¶²²2úõ³=·nßÙž[÷kC{ÏvŽ ‘‹Ì2nÜ8Iòü3²‚óÉÍË9κuëwz­ñ™Ñk±¹Í™3Ç\wÝu&==Ý$''›‹/¾ØÜ|óÍæÝwßMxz­ñ™Ñkñÿ=¨¯¡"4&\½Ö”"Æø‡ø oBà g@8ÃÀÎ0€p†€3 œaà g@8ÃÀÎ0€p†€3 œaà g@8ÃÀÎ0€p†€3 œaà g@8ÃÀÎ0€p†€3 œaà g@8ÃÀÎ0€p†€3 œaàÌÿj½ø{èð|ÄIEND®B`‚pyepr-1.1.3/doc/index.rst000066400000000000000000000054571414372560000152760ustar00rootroot00000000000000================================= ENVISAT Product Reader Python API ================================= .. raw:: latex \listoffigures % \listoftables \clearpage :HomePage: https://avalentino.github.io/pyepr :Author: Antonio Valentino :Contact: antonio.valentino@tiscali.it :Copyright: 2011-2021, Antonio Valentino :Version: |release| .. only:: not latex Overview ======== PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://envisat.esa.int .. _ESA: https://earth.esa.int .. index:: ENVISAT, MERIS, AASTR, ASAR Documentation ============= .. toctree:: :maxdepth: 2 usermanual tutorials reference NEWS .. only:: not latex Other versions ============== Online documentation for other PyEpr_ versions: * `latest `_ development * `1.1.3 `_ (latest stable) * `1.1.2 `_ * `1.1.1 `_ * `1.1.0 `_ * `1.0.1 `_ * `1.0.0 `_ * `0.9.5 `_ * `0.8.2 `_ * `0.7.1 `_ * `0.6.1 `_ License ======= .. index:: license Copyright (C) 2011-2021 Antonio Valentino PyEPR 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. PyEPR 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 PyEPR. If not, see . .. _`GNU General Public License`: http://www.gnu.org/licenses/gpl-3.0.html pyepr-1.1.3/doc/interactive_use.rst000066400000000000000000000270171414372560000173540ustar00rootroot00000000000000Interactive use of PyEPR_ ------------------------- .. highlight:: ipython .. index:: jupyter, ipython, interactive, ENVISAT, ASAR, ESA, pylab, matplotlib pair: interactive; shell pair: sample; dataset In this tutorial it is showed an example of how to use PyEPR_ interactively to open, browse and display data of an ENVISAT_ ASAR_ product. For the interactive session it is used the Jupyter_ console started with the `--pylab` option to enable the interactive plotting features provided by the matplotlib_ package. The ASAR_ product used in this example is a `free sample`_ available at the ESA_ web site. .. _PyEPR: https://github.com/avalentino/pyepr .. _ENVISAT: https://envisat.esa.int .. _ASAR: https://earth.esa.int/handbooks/asar/CNTR.html .. _Jupyter: https://jupyter.org/ .. _matplotlib: https://matplotlib.org .. _`free sample`: https://earth.esa.int/services/sample_products/asar/IMP/ASA_IMP_1PNUPA20060202_062233_000000152044_00435_20529_3110.N1.gz .. _ESA: https://earth.esa.int .. index:: module pair: epr; module :mod:`epr` module and classes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ After starting the jupyter console with the following command: .. code-block:: sh $ jupyter console -- --pylab one can import the :mod:`epr` module and start start taking confidence with available classes and functions:: Jupyter console 5.2.0 Python 3.6.5 (default, Apr 1 2018, 05:46:30) Type "copyright", "credits" or "license" for more information. IPython 5.5.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import epr In [2]: epr? Base Class: String Form: Namespace: Interactive File: /home/antonio/projects/pyepr/epr.so Docstring: Python bindings for ENVISAT Product Reader C API PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_ is fully object oriented and, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: http://avalentino.github.io/pyepr .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://envisat.esa.int .. _ESA: https://earth.esa.int In [3]: epr.__version__, epr.EPR_C_API_VERSION Out[3]: ('1.0.0', '2.3dev') .. index:: __version__ Docstrings are available for almost all classes, methods and functions in the :mod:`epr` and they can be displayed using the :func:`help` python_ command or the ``?`` Jupyter_ shortcut as showed above. .. _python: https://www.python.org Also Jupyter_ provides a handy tab completion mechanism to automatically complete commands or to display available functions and classes:: In [4]: product = epr. [TAB] epr.Band epr.E_TID_STRING epr.DSD epr.E_TID_TIME epr.Dataset epr.E_TID_UCHAR epr.EPRError epr.E_TID_UINT epr.EPRTime epr.E_TID_UNKNOWN epr.EPRValueError epr.E_TID_USHORT epr.EPR_C_API_VERSION epr.EprObject epr.E_SMID_LIN epr.Field epr.E_SMID_LOG epr.Product epr.E_SMID_NON epr.Raster epr.E_SMOD_1OF1 epr.Record epr.E_SMOD_1OF2 epr.create_bitmask_raster epr.E_SMOD_2OF2 epr.create_raster epr.E_SMOD_2TOF epr.data_type_id_to_str epr.E_SMOD_3TOI epr.get_data_type_size epr.E_TID_CHAR epr.get_sample_model_name epr.E_TID_DOUBLE epr.get_scaling_method_name epr.E_TID_FLOAT epr.np epr.E_TID_INT epr.open epr.E_TID_SHORT epr.so epr.E_TID_SPARE epr.sys .. index:: product :class:`epr.Product` navigation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The first thing to do is to use the :func:`epr.open` function to get an instance of the desired ENVISAT_ :class:`epr.Product`:: In [4]: product = epr.open(\ 'ASA_IMP_1PNUPA20060202_062233_000000152044_00435_20529_3110.N1') In [4]: product. product.bands product.get_mph product.close product.get_num_bands product.closed product.get_num_datasets product.datasets product.get_num_dsds product.file_path product.get_scene_height product.get_band product.get_scene_width product.get_band_at product.get_sph product.get_band_names product.id_string product.get_dataset product.meris_iodd_version product.get_dataset_at product.read_bitmask_raster product.get_dataset_names product.tot_size product.get_dsd_at In [5]: product.tot_size / 1024.**2 Out[5]: 132.01041889190674 In [6]: print(product) epr.Product(ASA_IMP_1PNUPA20060202_ ...) 7 datasets, 5 bands epr.Dataset(MDS1_SQ_ADS) 1 records epr.Dataset(MAIN_PROCESSING_PARAMS_ADS) 1 records epr.Dataset(DOP_CENTROID_COEFFS_ADS) 1 records epr.Dataset(SR_GR_ADS) 1 records epr.Dataset(CHIRP_PARAMS_ADS) 1 records epr.Dataset(GEOLOCATION_GRID_ADS) 11 records epr.Dataset(MDS1) 8192 records epr.Band(slant_range_time) of epr.Product(ASA_IMP_1PNUPA20060202_ ...) epr.Band(incident_angle) of epr.Product(ASA_IMP_1PNUPA20060202_ ...) epr.Band(latitude) of epr.Product(ASA_IMP_1PNUPA20060202 ...) epr.Band(longitude) of epr.Product(ASA_IMP_1PNUPA20060202 ...) epr.Band(proc_data) of epr.Product(ASA_IMP_1PNUPA20060202 ...) A short summary of product contents can be displayed simply printing the :class:`epr.Product` object as showed above. Being able to display contents of each object it is easy to keep browsing and get all desired information from the product:: In [7]: dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') In [8]: dataset Out[8]: epr.Dataset(MAIN_PROCESSING_PARAMS_ADS) 1 records In [9]: record = dataset.[TAB] dataset.create_record dataset.get_dsd_name dataset.product dataset.description dataset.get_name dataset.read_record dataset.get_dsd dataset.get_num_records dataset.records In [9]: record = dataset.read_record(0) In [10]: record Out[10]: 220 fields In [11]: record.get_field_names()[:20] Out[11]: ['first_zero_doppler_time', 'attach_flag', 'last_zero_doppler_time', 'work_order_id', 'time_diff', 'swath_id', 'range_spacing', 'azimuth_spacing', 'line_time_interval', 'num_output_lines', 'num_samples_per_line', 'data_type', 'spare_1', 'data_analysis_flag', 'ant_elev_corr_flag', 'chirp_extract_flag', 'srgr_flag', 'dop_cen_flag', 'dop_amb_flag', 'range_spread_comp_flag'] In [12]: field = record.get_field('range_spacing') In [13]: field.get [TAB] field.get_description field.get_name field.get_unit field.get_elem field.get_num_elems field.get_elems field.get_type In [13]: field.get_description() Out[13]: 'Range sample spacing' In [14]: epr.data_type_id_to_str(field.get_type()) Out[14]: 'float' In [15]: field.get_num_elems() Out[15]: 1 In [16]: field.get_unit() Out[16]: 'm' In [17]: print(field) range_spacing = 12.500000 .. index:: iteration, iterable, record Iterating over :mod:`epr` objects ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :class:`epr.Record` objects are also iterable_ so one can write code like the following:: In [18]: for field in record: if field.get_num_elems() == 4: print('%s: %d elements' % (field.get_name(), len(field))) ....: nominal_chirp.1.nom_chirp_amp: 4 elements nominal_chirp.1.nom_chirp_phs: 4 elements nominal_chirp.2.nom_chirp_amp: 4 elements nominal_chirp.2.nom_chirp_phs: 4 elements nominal_chirp.3.nom_chirp_amp: 4 elements nominal_chirp.3.nom_chirp_phs: 4 elements nominal_chirp.4.nom_chirp_amp: 4 elements nominal_chirp.4.nom_chirp_phs: 4 elements nominal_chirp.5.nom_chirp_amp: 4 elements nominal_chirp.5.nom_chirp_phs: 4 elements beam_merge_sl_range: 4 elements beam_merge_alg_param: 4 elements .. index:: data, image Image data ~~~~~~~~~~ Dealing with image data is simple as well:: In [19]: product.get_band_names() Out[19]: ['slant_range_time', 'incident_angle', 'latitude', 'longitude', 'proc_data'] In [19]: band = product.get_band('proc_data') In [20]: data = band. [TAB] band.bm_expr band.read_raster band.create_compatible_raster band.sample_model band.data_type band.scaling_factor band.description band.scaling_method band.get_name band.scaling_offset band.lines_mirrored band.spectr_band_index band.product band.unit band.read_as_array In [20]: data = band.read_as_array(1000, 1000, xoffset=100, \ yoffset=6500, xstep=2, ystep=2) In [21]: data Out[21]: array([[ 146., 153., 134., ..., 51., 55., 72.], [ 198., 163., 146., ..., 26., 54., 57.], [ 127., 205., 105., ..., 64., 76., 61.], ..., [ 64., 78., 52., ..., 96., 176., 159.], [ 66., 41., 45., ..., 200., 153., 203.], [ 64., 71., 88., ..., 289., 182., 123.]], dtype=float32) In [22]: data.shape Out[22]: (500, 500) In [23]: imshow(data, cmap=cm.gray, vmin=0, vmax=1000) Out[23]: In [24]: title(band.description) Out[24]: In [25]: colorbar() Out[25]: .. figure:: images/ASA_IMP_crop.* :width: 100% Image data read from the "proc_data" band .. _iterable: https://docs.python.org/3/glossary.html#term-iterable .. index:: close, product Closing the epr.Product ~~~~~~~~~~~~~~~~~~~~~~~ Finally the :class:`epr.Product` can be closed using the :meth:`epr.Product.close` method:: In [26]: product.close() After a product is closed no more I/O operations can be performed on it. Any attempt to do it will raise a :exc:`ValueError`:: In [27]: product.tot_size / 1024.**2 ------------------------------------------------------------------------- ValueError Traceback (most recent call last) in () ----> 1 product.tot_size / 1024.**2 epr.so in epr.Product.tot_size.__get__ (src/epr.c:16534)() epr.so in epr.Product.check_closed_product (src/epr.c:16230)() ValueError: I/O operation on closed file At any time the user can check whenever a :class:`epr.Product` is closed or not using the :attr:`epr.Product.closed` property:: In [28]: product.closed Out[28]: True .. raw:: latex \clearpage pyepr-1.1.3/doc/make.bat000066400000000000000000000013701414372560000150300ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd pyepr-1.1.3/doc/ndvi_example.rst000066400000000000000000000127411414372560000166340ustar00rootroot00000000000000NDVI computation ---------------- .. index:: NDVI, MERIS This tutorial shows how to use PyEPR_ to open a MERIS_ L1B product, compute the *Normalized Difference Vegetation Index* (NDVI) and store it into a flat binary file. The example code (:download:`examples/write_ndvi.py`) is a direct translation of the C sample program `write_ndvi.c`_ bundled with the EPR API distribution. The program is invoked as follows: .. code-block:: sh $ python write_ndvi.py .. _PyEPR: https://github.com/avalentino/pyepr .. _MERIS: https://earth.esa.int/handbooks/meris/CNTR.html .. _`write_ndvi.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_ndvi.c The code have been kept very simple and it consists in a single function (:func:`main`) that also performs a minimal command line arguments handling. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py The ENVISAT_ :class:`epr.Product` is opened using the :func:`epr.open` function. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 46-47 .. index:: context, open pair: with; statement As usual in modern python programs the *with* statement has been used to ensure that the product is automatically closed as soon as the program exits the block. Of course it is possible to use a simple assignment form:: product = open(argv[1]) but in this case the user should take care of manually call:: product.close() when appropriate. The name of the product is in the first argument passed to the program. In order to keep the code simple no check is performed to ensure that the product is a valid L1B product. The NDVI is calculated using bands 6 and 8 (the names of these bands are "radiance_6" and "radiance_10"). :class:`epr.Band` objects are retrieved using the :meth:`epr.Product.get_band` method: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 49-54 *band1* and *band2* are used to read the calibrated radiances into the :class:`epr.Raster` objects that allow to access data matrices with the radiance values. .. index:: raster, memory Before reading data into the :class:`epr.Raster` objects they have to be instantiated specifying their size and data type in order to allow the library to allocate the correct amount of memory. For sake of simplicity :class:`epr.Raster` object are created with the same size of the whole product (with no sub-sampling) using the :meth:`epr.Band.create_compatible_raster` method of the :class:`epr.Band` class: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 56-64 Then data are actually loaded into memory using the :meth:`epr.Band.read_raster` method. Since :class:`epr.Raster` objects have been defined to match the whole product, offset parameters are set to zero (data are read starting from specified offset): .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 66-74 .. note:: in this simplified example it is assumed that there is enough system memory to hold the two :class:`epr.Raster` objects. After opening (in binary mode) the stream for the output .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 76-78 the program simply loops over all pixel and calculate the NDVI with the following formula: .. math:: NDVI = \frac{radiance_{10} - radiance_8}{radiance_{10} + radiance_8} .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 80-93 This part of the code tries to mimic closely the original C code (`write_ndvi.c`_) .. code-block:: c out_stream = fopen(argv[2], "wb"); for (j = 0; j < height; ++j) { for (i = 0; i < width; ++i) { rad1 = epr_get_pixel_as_float(raster1, i, j); rad2 = epr_get_pixel_as_float(raster2, i, j); if ((rad1 + rad2) != 0.0) { ndvi = (rad2 - rad1) / (rad2 + rad1); } else { ndvi = -1.0; } status = fwrite( & ndvi, sizeof(float), 1, out_stream); } } epr_log_message(e_log_info, "ndvi was written success"); and uses the :meth:`epr.Raster.get_pixel` method to access pixel values and perform computation. The Python_ :func:`struct.pack` function together with :meth:`file.write` is used to write the NDVI of the pixel n the file in binary format. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 92 .. note:: the entire solution is quite not "pythonic". As an alternative implementation it could be used the :class:`numpy.ndarray` interface of :class:`epr.Raster` objects available via the :data:`epr.Raster.data` property. The NDVI index is computed on all pixels altogether using vectorized expressions:: # Initialize the entire matrix to -1 ndvi = numpy.zeros((height, width), 'float32') - 1 aux = raster2.data + raster1.data # indexes of pixel with non null denominator idx = numpy.where(aux != 0) # actual NDVI computation ndvi[idx] = (raster2.data[idx] - raster1.data[idx]) / aux[idx] Finally data can be saved to file simply using the :meth:`numpy.ndarray.tofile` method:: ndvi.tofile(out_stream) .. _ENVISAT: https://envisat.esa.int .. _Python: https://www.python.org .. raw:: latex \clearpage pyepr-1.1.3/doc/pydoctheme/000077500000000000000000000000001414372560000155635ustar00rootroot00000000000000pyepr-1.1.3/doc/pydoctheme/LICENSE000066400000000000000000000307231414372560000165750ustar00rootroot00000000000000A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. In May 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. In October of the same year, the PythonLabs team moved to Digital Creations (now Zope Corporation, see http://www.zope.com). In 2001, the Python Software Foundation (PSF, see http://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation is a sponsoring member of the PSF. All Python releases are Open Source (see http://www.opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. Release Derived Year Owner GPL- from compatible? (1) 0.9.0 thru 1.2 1991-1995 CWI yes 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes 1.6 1.5.2 2000 CNRI no 2.0 1.6 2000 BeOpen.com no 1.6.1 1.6 2001 CNRI yes (2) 2.1 2.0+1.6.1 2001 PSF no 2.0.1 2.0+1.6.1 2001 PSF yes 2.1.1 2.1+2.0.1 2001 PSF yes 2.1.2 2.1.1 2002 PSF yes 2.1.3 2.1.2 2002 PSF yes 2.2 and above 2.1.1 2001-now PSF yes Footnotes: (1) GPL-compatible doesn't mean that we're distributing Python under the GPL. All Python licenses, unlike the GPL, let you distribute a modified version without making your changes open source. The GPL-compatible licenses make it possible to combine Python with other software that is released under the GPL; the others don't. (2) According to Richard Stallman, 1.6.1 is not GPL-compatible, because its license has a choice of law clause. According to CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 is "not incompatible" with the GPL. Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python. 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 ------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 --------------------------------------- 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 -------------------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. pyepr-1.1.3/doc/pydoctheme/static/000077500000000000000000000000001414372560000170525ustar00rootroot00000000000000pyepr-1.1.3/doc/pydoctheme/static/pydoctheme.css000066400000000000000000000052671414372560000217370ustar00rootroot00000000000000@import url("default.css"); body { background-color: white; margin-left: 1em; margin-right: 1em; } div.related { margin-bottom: 1.2em; padding: 0.5em 0; border-top: 1px solid #ccc; margin-top: 0.5em; } div.related a:hover { color: #0095C4; } div.related:first-child { border-top: 0; border-bottom: 1px solid #ccc; } div.sphinxsidebar { background-color: #eeeeee; border-radius: 5px; line-height: 130%; font-size: smaller; } div.sphinxsidebar h3, div.sphinxsidebar h4 { margin-top: 1.5em; } div.sphinxsidebarwrapper > h3:first-child { margin-top: 0.2em; } div.sphinxsidebarwrapper > ul > li > ul > li { margin-bottom: 0.4em; } div.sphinxsidebar a:hover { color: #0095C4; } div.sphinxsidebar input { font-family: 'Lucida Grande',Arial,sans-serif; border: 1px solid #999999; font-size: smaller; border-radius: 3px; } div.sphinxsidebar input[type=text] { max-width: 150px; } div.body { padding: 0 0 0 1.2em; } div.body p { line-height: 140%; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { margin: 0; border: 0; padding: 0.3em 0; } div.body hr { border: 0; background-color: #ccc; height: 1px; } div.body pre { border-radius: 3px; border: 1px solid #ac9; } div.body div.admonition, div.body div.impl-detail { border-radius: 3px; } div.body div.impl-detail > p { margin: 0; } div.body div.seealso { border: 1px solid #dddd66; } div.body a { color: #0072aa; } div.body a:visited { color: #6363bb; } div.body a:hover { color: #00B0E4; } tt, code, pre { font-family: monospace, sans-serif; font-size: 96.5%; } div.body tt, div.body code { border-radius: 3px; } div.body tt.descname, div.body code.descname { font-size: 120%; } div.body tt.xref, div.body a tt, div.body code.xref, div.body a code { font-weight: normal; } .deprecated { border-radius: 3px; } table.docutils { border: 1px solid #ddd; min-width: 20%; border-radius: 3px; margin-top: 10px; margin-bottom: 10px; } table.docutils td, table.docutils th { border: 1px solid #ddd !important; border-radius: 3px; } table p, table li { text-align: left !important; } table.docutils th { background-color: #eee; padding: 0.3em 0.5em; } table.docutils td { background-color: white; padding: 0.3em 0.5em; } table.footnote, table.footnote td { border: 0 !important; } div.footer { line-height: 150%; margin-top: -2em; text-align: right; width: auto; margin-right: 10px; } div.footer a:hover { color: #0095C4; } .refcount { color: #060; } .stableabi { color: #229; } pyepr-1.1.3/doc/pydoctheme/static/sidebar.js000066400000000000000000000142141414372560000210230ustar00rootroot00000000000000/* * sidebar.js * ~~~~~~~~~~ * * This script makes the Sphinx sidebar collapsible and implements intelligent * scrolling. * * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds in * .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton used to * collapse and expand the sidebar. * * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden and the * width of the sidebar and the margin-left of the document are decreased. * When the sidebar is expanded the opposite happens. This script saves a * per-browser/per-session cookie used to remember the position of the sidebar * among the pages. Once the browser is closed the cookie is deleted and the * position reset to the default (expanded). * * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ $(function() { // global elements used by the functions. // the 'sidebarbutton' element is defined as global after its // creation, in the add_sidebar_button function var jwindow = $(window); var jdocument = $(document); var bodywrapper = $('.bodywrapper'); var sidebar = $('.sphinxsidebar'); var sidebarwrapper = $('.sphinxsidebarwrapper'); // original margin-left of the bodywrapper and width of the sidebar // with the sidebar expanded var bw_margin_expanded = bodywrapper.css('margin-left'); var ssb_width_expanded = sidebar.width(); // margin-left of the bodywrapper and width of the sidebar // with the sidebar collapsed var bw_margin_collapsed = '.8em'; var ssb_width_collapsed = '.8em'; // colors used by the current theme var dark_color = '#AAAAAA'; var light_color = '#CCCCCC'; function get_viewport_height() { if (window.innerHeight) return window.innerHeight; else return jwindow.height(); } function sidebar_is_collapsed() { return sidebarwrapper.is(':not(:visible)'); } function toggle_sidebar() { if (sidebar_is_collapsed()) expand_sidebar(); else collapse_sidebar(); // adjust the scrolling of the sidebar scroll_sidebar(); } function collapse_sidebar() { sidebarwrapper.hide(); sidebar.css('width', ssb_width_collapsed); bodywrapper.css('margin-left', bw_margin_collapsed); sidebarbutton.css({ 'margin-left': '0', 'height': bodywrapper.height(), 'border-radius': '5px' }); sidebarbutton.find('span').text('»'); sidebarbutton.attr('title', _('Expand sidebar')); document.cookie = 'sidebar=collapsed'; } function expand_sidebar() { bodywrapper.css('margin-left', bw_margin_expanded); sidebar.css('width', ssb_width_expanded); sidebarwrapper.show(); sidebarbutton.css({ 'margin-left': ssb_width_expanded-12, 'height': bodywrapper.height(), 'border-radius': '0 5px 5px 0' }); sidebarbutton.find('span').text('«'); sidebarbutton.attr('title', _('Collapse sidebar')); //sidebarwrapper.css({'padding-top': // Math.max(window.pageYOffset - sidebarwrapper.offset().top, 10)}); document.cookie = 'sidebar=expanded'; } function add_sidebar_button() { sidebarwrapper.css({ 'float': 'left', 'margin-right': '0', 'width': ssb_width_expanded - 28 }); // create the button sidebar.append( '

«
' ); var sidebarbutton = $('#sidebarbutton'); // find the height of the viewport to center the '<<' in the page var viewport_height = get_viewport_height(); var sidebar_offset = sidebar.offset().top; var sidebar_height = Math.max(bodywrapper.height(), sidebar.height()); sidebarbutton.find('span').css({ 'display': 'block', 'position': 'fixed', 'top': Math.min(viewport_height/2, sidebar_height/2 + sidebar_offset) - 10 }); sidebarbutton.click(toggle_sidebar); sidebarbutton.attr('title', _('Collapse sidebar')); sidebarbutton.css({ 'border-radius': '0 5px 5px 0', 'color': '#444444', 'background-color': '#CCCCCC', 'font-size': '1.2em', 'cursor': 'pointer', 'height': sidebar_height, 'padding-top': '1px', 'padding-left': '1px', 'margin-left': ssb_width_expanded - 12 }); sidebarbutton.hover( function () { $(this).css('background-color', dark_color); }, function () { $(this).css('background-color', light_color); } ); } function set_position_from_cookie() { if (!document.cookie) return; var items = document.cookie.split(';'); for(var k=0; k wintop && curbot > winbot) { sidebarwrapper.css('top', $u.max([wintop - offset - 10, 0])); } else if (curtop < wintop && curbot < winbot) { sidebarwrapper.css('top', $u.min([winbot - sidebar_height - offset - 20, jdocument.height() - sidebar_height - 200])); } } } jwindow.scroll(scroll_sidebar); }); pyepr-1.1.3/doc/pydoctheme/theme.conf000066400000000000000000000010231414372560000175300ustar00rootroot00000000000000[theme] inherit = default stylesheet = pydoctheme.css pygments_style = sphinx [options] bodyfont = 'Lucida Grande', Arial, sans-serif headfont = 'Lucida Grande', Arial, sans-serif footerbgcolor = white footertextcolor = #555555 relbarbgcolor = white relbartextcolor = #666666 relbarlinkcolor = #444444 sidebarbgcolor = white sidebartextcolor = #444444 sidebarlinkcolor = #444444 bgcolor = white textcolor = #222222 linkcolor = #0090c0 visitedlinkcolor = #00608f headtextcolor = #1a1a1a headbgcolor = white headlinkcolor = #aaaaaa pyepr-1.1.3/doc/reference.rst000066400000000000000000001103231414372560000161120ustar00rootroot00000000000000API Reference ============= .. module:: epr :synopsis: Python bindings for ENVISAT Product Reader C API .. index:: bindings, ENVISAT, ESA, EPR-API pair: epr; module PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_ is fully object oriented and, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://envisat.esa.int .. _ESA: https://earth.esa.int .. currentmodule:: epr Classes ------- Product ~~~~~~~ .. class:: Product ENVISAT product. The Product class provides methods and properties to get information about an ENVISAT product file. .. seealso:: :func:`open` .. rubric:: Attributes .. attribute:: file_path The file's path including the file name. .. attribute:: mode String that specifies the mode in which the file is opened. Possible values: `rb` for read-only mode, `rb+` for read-write mode. .. attribute:: id_string The product identifier string obtained from the MPH parameter 'PRODUCT'. The first 10 characters of this string identify the product type, e.g. "MER_1P__FR" for a MERIS Level 1b full resolution product. The rest of the string decodes product instance properties. .. attribute:: meris_iodd_version For MERIS L1b and RR and FR to provide backward compatibility. .. attribute:: tot_size The total size in bytes of the product file. .. rubric:: Methods .. method:: get_band(name) Gets the band corresponding to the specified name. :param name: the name of the band :returns: the requested :class:`Band` instance, or raises a :exc:`EPRValueError` if not found .. method:: get_band_at(index) Gets the :class:`Band` at the specified position within the :class:`product`. :param index: the index identifying the position of the :class:`Band`, starting with 0, must not be negative :returns: the requested :class:`Band` instance, or raises a :exc:`EPRValueError` if not found .. method:: get_dataset(name) Gets the :class:`Dataset` corresponding to the specified dataset name. :param name: the :class:`Dataset` name :returns: the requested :class:`Dataset` instance .. method:: get_dataset_at(index) Gets the :class:`Dataset` at the specified position within the :class:`Product`. :param index: the index identifying the position of the :class:`Dataset`, starting with 0, must not be negative :returns: the requested :class:`Dataset` .. method:: get_dsd_at(index) Gets the :class:`DSD` at the specified position. Gets the :class:`DSD` (:class:`Dataset` descriptor) at the specified position within the :class:`Product`. :param index: the index identifying the position of the :class:`DSD`, starting with 0, must not be negative :returns: the requested :class:`DSD` instance .. method:: get_num_bands() Gets the number of all :class:`Band`\ s contained in a :class:`Product`. .. method:: get_num_datasets() Gets the number of all :class:`Dataset`\ s contained in a :class:`Product`. .. method:: get_num_dsds() Gets the number of all :class:`DSD`\ s (:class:`Dataset` descriptors) contained in the :class:`Product`. .. method:: get_scene_height() Gets the :class:`Product` scene height in pixels. .. method:: get_scene_width() Gets the :class:`Product` scene width in pixels. .. method:: get_mph() The :class:`Record` representing the main product header (MPH). .. method:: get_sph() The :class:`Record` representing the specific product header (SPH). .. method:: read_bitmask_raster(bm_expr, xoffset, yoffset, raster) Calculates a bit-mask raster. Calculates a bit-mask, composed of flags of the given :class:`Product` and combined as described in the given bit-mask expression, for the a certain dimension and sub-sampling as defined in the given raster. :param bm_expr: a string holding the logical expression for the definition of the bit-mask. In a bit-mask expression, any number of the flag-names (found in the DDDB) can be composed with "(", ")", "NOT", "AND", "OR". Valid bit-mask expression are for example ``flags.LAND OR flags.CLOUD`` or ``NOT flags.WATER AND flags.TURBID_S`` :param xoffset: across-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param raster: the raster for the bit-mask. The data type of the raster must be either :data:`E_TID_UCHAR` or :data:`E_TID_CHAR` :returns: zero for success, an error code otherwise .. seealso:: :func:`create_bitmask_raster`. .. method:: close Closes the :class:`Product` product and free the underlying file descriptor. This method has no effect if the :class:`Product` is already closed. Once the :class:`Product` is closed, any operation on it will raise a :exc:`ValueError`. As a convenience, it is allowed to call this method more than once; only the first call, however, will have an effect. .. method:: flush() Flush the file stream. .. rubric:: High level interface methods .. note:: the following methods are part of the *high level* Python API and do not have any corresponding function in the C API. .. attribute:: closed True if the :class:`Product` is closed. .. method:: get_dataset_names() Return the list of names of the :class:`Dataset`\ s in the :class:`Product`. .. method:: get_band_names() Return the list of names of the :class:`Band`\ s in the :class:`Product`. .. method:: datasets() Return the list of :class:`Dataset`\ s in the :class:`Product`. .. method:: bands() Return the list of :class:`Band`\ s in the :class:`Product`. .. rubric:: Special methods The :class:`Product` class provides a custom implementation of the following *special methods*: * __repr__ * __str__ * __enter__ * __exit__ .. index:: __repr__, __str__, __enter__, __exit__ pair: special; methods Dataset ~~~~~~~ .. class:: Dataset ENVISAT dataset. The Dataset class contains information about a dataset within an ENVISAT product file which has been opened with the :func:`open` function. A new Dataset instance can be obtained with the :meth:`Product.get_dataset` or :meth:`Product.get_dataset_at` methods. .. rubric:: Attributes .. attribute:: description A short description of the :class:`Band` contents. .. attribute:: product The :class:`Product` instance to which this :class:`Dataset` belongs to. .. rubric:: Methods .. method:: get_name() Gets the name of the :class:`Dataset`. .. method:: get_dsd() Gets the :class:`Dataset` descriptor (:class:`DSD`). .. method:: get_dsd_name() Gets the name of the :class:`DSD` (:class:`Dataset` descriptor). .. method:: get_num_records() Gets the number of :class:`Record`\ s of the :class:`Dataset`. .. method:: create_record() Creates a new :class:`Record`. Creates a new, empty :class:`Record` with a structure compatible with the :class:`Dataset`. Such a :class:`Record` is typically used in subsequent calls to :meth:`Dataset.read_record`. :returns: the new :class:`Record` instance .. method:: read_record(index[, record]) Reads specified :class:`Record` of the :class:`Dataset`. The :class:`Record` is identified through the given zero-based :class:`Record` index. In order to reduce memory reallocation, a :class:`Record` (pre-)created by the method :meth:`Dataset.create_record` can be passed to this method. Data is then read into this given :class:`Record`. If no :class:`Record` (``None``) is given, the method initiates a new one. In both cases, the :class:`Record` in which the data is read into will be returned. :param index: the zero-based :class:`Record` index (default: 0) :param record: a pre-created :class:`Record` to reduce memory reallocation, can be ``None`` (default) to let the function allocate a new :class:`Record` :returns: the record in which the data has been read into or raises an exception (:exc:`EPRValueError`) if an error occurred .. versionchanged:: 0.9 The *index* parameter now defaults to zero. .. rubric:: High level interface methods .. note:: the following methods are part of the *high level* Python API and do not have any corresponding function in the C API. .. method:: records() Return the list of :class:`Record`\ s contained in the :class:`Dataset`. .. rubric:: Special methods The :class:`Dataset` class provides a custom implementation of the following *special methods*: * __repr__ * __str__ * __iter__ .. index:: __repr__, __str__, __iter__ pair: special; methods Record ~~~~~~ .. class:: Record Represents a record read from an ENVISAT dataset. A record is composed of multiple fields. .. seealso:: :class:`Field` .. rubric:: Attributes .. attribute:: dataset_name The name of the :class:`Dataset` to which this :class:`Record` belongs to. .. versionadded:: 0.9 .. attribute:: tot_size The total size in bytes of the :class:`Record`. It includes all data elements of all :class:`Field`\ s of a :class:`Record` in a :class:`Product` file. *tot_size* is a derived variable, it is computed at run-time and not stored in the DSD-DB. .. versionadded:: 0.9 .. attribute:: index Index of the :class:`Record` within the :class:`Dataset`. It is *None* for empty :class:`Record`\ s (created with :meth:`Dataset.create_record` but still not read) and for *MPH* (see :meth:`Product.get_mph`) and *SPH* (see :meth:`Product.get_sph`) :class:`Record`\ s. .. seealso:: :meth:`Dataset.read_record` .. versionadded:: 0.9 .. rubric:: Methods .. method:: get_field(name) Gets a :class:`Field` specified by name. The :class:`Field` is here identified through the given name. It contains the :class:`Field` info and all corresponding values. :param name: the the name of required :class:`Field` :returns: the specified :class:`Field` or raises an exception (:exc:`EPRValueError`) if an error occurred .. method:: get_field_at(index) Gets a :class:`Field` at the specified position within the :class:`Record`. :param index: the zero-based index (position within :class:`Record`) of the :class:`Field` :returns: the :class:`Field` or raises and exception (:exc:`EPRValueError`) if an error occurred .. method:: get_num_fields() Gets the number of :class:`Field`\ s contained in the :class:`Record`. .. method:: print_([ostream]) Write the :class:`Record` to specified file (default: :data:`sys.stdout`). This method writes formatted contents of the :class:`Record` to specified *ostream* text file or (default) the ASCII output is be printed to standard output (:data:`sys.stdout`). :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances. .. method:: print_element(field_index, element_index[, ostream]) Write the specified field element to file (default: :data:`sys.stdout`). This method writes formatted contents of the specified :class:`Field` element to the *ostream* text file or (default) the ASCII output will be printed to standard output (:data:`sys.stdout`). :param field_index: the index of :class:`Field` in the :class:`Record` :param element_index: the index of element in the specified :class:`Field` :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances. .. method:: get_offset() :class:`Record` offset in bytes within the :class:`Dataset`. .. versionadded:: 0.9 .. rubric:: High level interface methods .. note:: the following methods are part of the *high level* Python API and do not have any corresponding function in the C API. .. method:: get_field_names Return the list of names of the :class:`Field`\ s in the :class:`Record`. .. method:: fields() Return the list of :class:`Field`\ s contained in the :class:`Record`. .. rubric:: Special methods The :class:`Record` class provides a custom implementation of the following *special methods*: * __repr__ * __str__ * __iter__ .. index:: __repr__, __str__, __iter__ pair: special; methods Field ~~~~~ .. class:: Field Represents a field within a record. A :class:`Field` is composed of one or more data elements of one of the types defined in the internal ``field_info`` structure. .. seealso:: :class:`Record` .. rubric:: Attributes .. attribute:: tot_size The total size in bytes of all data elements of a :class:`Field`. *tot_size* is a derived variable, it is computed at run-time and not stored in the DSD-DB. .. versionadded:: 0.9 .. method:: get_description() Gets the description of the :class:`Field`. .. method:: get_name() Gets the name of the :class:`Field`. .. method:: get_num_elems() Gets the number of elements of the :class:`Field`. .. method:: get_type() Gets the type of the :class:`Field`. .. method:: get_unit() Gets the unit of the :class:`Field`. .. method:: get_elem([index]) :class:`Field` single element access. This function is for getting the elements of a :class:`Field`. :param index: the zero-based index of element to be returned, must not be negative. Default: 0. :returns: the typed value from given :class:`Field` .. method:: get_elems() :class:`Field` array element access. This function is for getting an array of field elements of the :class:`Field`. :returns: the data array (:class:`numpy.ndarray`) having the type of the :class:`Field` .. versionchanged:: 0.9 the returned :class:`numpy.ndarray` shares the data buffer with the C :c:type:`Field` structure so any change in its contents is also reflected to the :class:`Filed` object .. method:: set_elem(elem, [index]) Set :class:`Field` array element. This function is for setting an array of field element of the :class:`Field`. :param elem: value of the element to set :param index: the zero-based index of element to be set, must not be negative. Default: 0. .. note:: this method does not have any corresponding function in the C API. .. versionadded:: 0.9 .. method:: set_elems(elems) Set :class:`Field` array elements. This function is for setting an array of :class:`Field` elements of the :class:`Field`. :param elems: np.ndarray of elements to set .. note:: this method does not have any corresponding function in the C API. .. versionadded:: 0.9 .. method:: print_([ostream]) Write the :class:`Field` to specified file (default: :data:`sys.stdout`). This method writes formatted contents of the :class:`Field` to specified *ostream* text file or (default) the ASCII output is be printed to standard output (:data:`sys.stdout`). :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances .. method:: get_offset() Field offset in bytes within the :class:`Record`. .. versionadded:: 0.9 .. rubric:: Special methods The :class:`Field` class provides a custom implementation of the following *special methods*: * __repr__ * __str__ * __eq__ * __ne__ * __len__ [#]_ .. index:: __repr__, __str__, __eq__, __ne__, __len__ pair: special; methods .. rubric:: Footnotes .. [#] if the field is a :data:`E_TID_STRING` field then the :meth:`__len__` method returns the string length, otherwise the number of elements of the field is returned (same as :meth:`Field.get_num_elems`) DSD ~~~ .. class:: DSD :class:`Dataset` descriptor. The DSD class contains information about the properties of a :class:`Dataset` and its location within an ENVISAT :class:`Product` file. .. rubric:: Attributes .. attribute:: ds_name The :class:`Dataset` name. .. attribute:: ds_offset The offset of :class:`Dataset` in the :class:`Product` file. .. attribute:: ds_size The size of :class:`Dataset` in the :class:`Product` file. .. attribute:: ds_type The :class:`Dataset` type descriptor. .. attribute:: dsr_size The size of dataset record for the given :class:`Dataset` name. .. attribute:: filename The filename in the DDDB with the description of this :class:`Dataset`. .. attribute:: index The index of this :class:`DSD` (zero-based). .. attribute:: num_dsr The number of dataset records for the given :class:`Dataset` name. .. rubric:: Special methods The :class:`DSD` class provides a custom implementation of the following *special methods*: * __repr__ * __eq__ * __ne__ .. index:: __repr__, __eq__, __ne__ pair: special; methods Band ~~~~ .. class:: Band The band of an ENVISAT :class:`Product`. The Band class contains information about a band within an ENVISAT :class:`Product` file which has been opened with the :func:`open` function. A new Band instance can be obtained with the :meth:`Product.get_band` method. .. rubric:: Attributes .. attribute:: bm_expr A bit-mask expression used to filter valid pixels. All others are set to zero. .. attribute:: data_type The data type of the :class:`Band` pixels. Possible values are: * ``*`` --> the datatype remains unchanged. * ``uint8_t`` --> 8-bit unsigned integer * ``uint32_t`` --> 32-bit unsigned integer * ``Float`` --> 32-bit IEEE floating point .. attribute:: description A short description of the :class:`Band` contents. .. attribute:: lines_mirrored Mirrored lines flag. If true (=1) lines will be mirrored (flipped) after read into a raster in order to ensure a pixel ordering in raster X direction from WEST to EAST. .. attribute:: product The :class:`Product` instance to which this :class:`Band` belongs to. .. attribute:: sample_model The sample model operation. The sample model operation applied to the source :class:`Dataset` for getting the correct samples from the MDS (for example MERIS L2). Possible values are: * ``*`` --> no operation (direct copy) * ``1OF2`` --> first byte of 2-byte interleaved MDS * ``2OF2`` --> second byte of 2-byte interleaved MDS * ``0123`` --> combine 3-bytes interleaved to 4-byte integer .. attribute:: scaling_factor The scaling factor. Possible values are: * ``*`` --> no factor provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]`` --> value is provided in global annotation :class:`Dataset` with name `GADS` in :class:`Field` `field`. Optionally a second element index for multiple-element fields can be given too .. attribute:: scaling_method The scaling method which must be applied to the raw source data in order to get the 'real' pixel values in geo-physical units. Possible values are: * ``*`` --> no scaling applied * ``Linear_Scale`` --> linear scaling applied:: y = offset + scale * x * ``Log_Scale`` --> logarithmic scaling applied:: y = log10(offset + scale * x) .. attribute:: scaling_offset Possible values are: * ``*`` --> no offset provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]` --> value is provided in global annotation :class:`Dataset` with name ``GADS`` in :class:`Field` ``field``. Optionally a second element index for multiple-element fields can be given too .. attribute:: spectr_band_index The (zero-based) spectral :class:`Band` index. -1 if this is not a spectral :class:`Band`. .. attribute:: unit The geophysical unit for the :class:`Band` pixel values. .. attribute:: dataset The source :class:`Dataset`. The source :class:`Dataset` containing the raw data used to create the :class:`Band` pixel values. .. versionadded:: 0.9 .. rubric:: Methods .. method:: get_name() Gets the name of the :class:`Band`. .. method:: create_compatible_raster([src_width, src_height, xstep, ystep]) Creates a :class:`Raster` which is compatible with the data type of the :class:`Band`. The created :class:`Raster` is used to read the data in it (see :meth:`Band.read_raster`). The :class:`Raster` is defined on the grid of the :class:`Product`, from which the data are read. Spatial subsets and under-sampling are possible) through the parameter of the method. A :class:`Raster` is an object that allows direct access to data of a certain portion of the ENVISAT :class:`Product` that are read into the it. Such a portion is called the source. The complete ENVISAT :class:`Product` can be much greater than the source. One can move the :class:`Raster` over the complete ENVISAT :class:`Product` and read in turn different parts (always of the size of the source) of it into the :class:`Raster`. The source is specified by the parameters *height* and *width*. A typical example is a processing in blocks. Lets say, a block has 64x32 pixel. Then, my source has a width of 64 pixel and a height of 32 pixel. Another example is a processing of complete image lines. Then, my source has a widths of the complete product (for example 1121 for a MERIS RR product), and a height of 1). One can loop over all blocks read into the :clasS:`Raster` and process it. In addition, it is possible to defined a sub-sampling step for a :class:`Raster`. This means, that the source is not read 1:1 into the :class:`Raster`, but that only every 2nd or 3rd pixel is read. This step can be set differently for the across track (source_step_x) and along track (source_step_y) directions. :param src_width: the width (across track dimension) of the source to be read into the :class:`Raster`. Default: scene width (see :attr:`Product.get_scene_width`) :param src_height: the height (along track dimension) of the source to be read into the :class:`Raster`. Default: scene height (see :attr:`Product.get_scene_height`) :param xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1. :param ystep: the sub-sampling step along track of the source when reading into the :class:`Raster`. Default: 1. :returns: the new :class:`Raster` instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. note:: *src_width* and *src_height* are the dimantion of the of the source area. If one specifies a *step* parameter the resulting :class:`Raster` will have a size that is smaller that the specifies source size:: raster_size = src_size // step .. method:: read_raster([xoffset, yoffset, raster]) Reads (geo-)physical values of the :class:`Band` of the specified source-region. The source-region is a defined part of the whole ENVISAT :class:`Product` image, which shall be read into a :class:`Raster`. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the :class:`Raster` into which the data are read. :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param raster: :class:`Raster` instance set with appropriate parameters to read into. If not provided a new :class:`Raster` is instantiated :returns: the :class:`Raster` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster` and :func:`create_raster` .. rubric:: High level interface methods .. note:: the following methods are part of the *high level* Python API and do not have any corresponding function in the C API. .. method:: read_as_array([width, height, xoffset, yoffset, xstep, ystep]) Reads the specified source region as an :class:`numpy.ndarray`. The source-region is a defined part of the whole ENVISAT :class:`Product` image, which shall be read into a :class:`Raster`. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the :class:`Raster` into which the data are read. :param src_width: the width (across track dimension) of the source to be read into the :class:`Raster`. If not provided reads as much as possible :param src_height: the height (along track dimension) of the source to be read into the :class:`Raster`, If not provided reads as much as possible :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1 :param ystep: the sub-sampling step along track of the source when reading into the :class:`Raster`. Default: 1 :returns: the :class:`numpy.ndarray` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster`, :func:`create_raster` and :meth:`Band.read_raster` .. rubric:: Special methods The :class:`Band` class provides a custom implementation of the following *special methods*: * __repr__ .. index:: __repr__ pair: special; methods Raster ~~~~~~ .. class:: Raster Represents a raster in which data will be stored. All 'size' parameter are in PIXEL. .. rubric:: Attributes .. attribute:: data_type The data type of the :class:`Band` pixels. All ``E_TID_*`` types are possible. .. attribute:: source_height The height of the source. .. attribute:: source_width The width of the source. .. attribute:: source_step_x The sub-sampling for the across-track direction in pixel. .. attribute:: source_step_y The sub-sampling for the along-track direction in pixel. .. rubric:: High level interface attributes .. note:: the following attributess are part of the *high level* Python API and do not have a counterpart in the C API. .. attribute:: data Raster data exposed as :class:`numpy.ndarray` object. .. note:: this property shares the data buffer with the :class:`Raster` object so any change in its contents is also reflected to the :class:`Raster` object .. note:: the :class:`Raster` objects do not have a :class:`Field` named *data* in the corresponding C structure. The *EPR_SRaster* C structure have a :class:`Field` named *buffer* that is a raw pointer to the data buffer and it is not exposed as such in the Python API. .. rubric:: Methods .. method:: get_pixel(x, y) Single pixel access. This function is for getting the values of the elements of a :class:`Raster` (i.e. pixel) :param x: the (zero-based) X coordinate of the pixel :param y: the (zero-based) Y coordinate of the pixel :returns: the typed value at the given co-ordinate .. method:: get_elem_size() The size in byte of a single element (sample) of this :class:`Raster` buffer. .. method:: get_height() Gets the :class:`Raster` height in pixels. .. method:: get_width() Gets the :class:`Raster` width in pixels. .. rubric:: Special methods The :class:`Raster` class provides a custom implementation of the following *special methods*: * __repr__ .. index:: __repr__ pair: special; methods EPRTime ~~~~~~~ .. class:: EPRTime Convenience class for time data exchange. EPRTime is a :class:`collections.namedtuple` with the following fields: .. attribute:: days .. attribute:: seconds .. attribute:: microseconds .. index:: function Functions --------- .. function:: open(filename, mode='rb') Open the ENVISAT product. Opens the ENVISAT :class:`Product` file with the given file path, reads MPH, SPH and all :class:`DSD`\ s, organized the table with parameter of line length and tie points number. :param product_file_path: the path to the ENVISAT :class:`Product` file :param mode: string that specifies the mode in which the file is opened. Allowed values: `rb` for read-only mode, `rb+` for read-write mode. Default: mode=`rb`. :returns: the :class:`Product` instance representing the specified product. An exception (:exc:`exceptions.ValueError`) is raised if the file could not be opened. The :class:`Product` class supports context management so the recommended way to ensure that a product is actually closed as soon as a task is completed is to use the ``with`` statement:: with open('ASA_IMP_1PNUPA20060202_ ... _3110.N1') as product: dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') record = dataset.read_record(0) print(record) .. seealso :class:`Product` .. function:: data_type_id_to_str(type_id) Gets the 'C' data type string for the given data type. .. function:: get_data_type_size(type_id) Gets the size in bytes for an element of the given data type. .. function:: get_numpy_dtype(type_id) Return the numpy data-type specified EPR type ID. .. versionadded:: 0.9 .. function:: get_sample_model_name(model) Return the name of the specified sample model. .. function:: get_scaling_method_name(method) Return the name of the specified scaling method. .. function:: create_raster(data_type, src_width, src_height[, xstep, ystep]) Creates a :class:`Raster` of the specified data type. This function can be used to create any type of raster, e.g. for later use as a bit-mask. :param data_type: the type of the data to stored in the :class:`Raster`, must be one of E_TID_*. .. seealso:: `Data type Identifiers`_ :param src_width: the width (across track dimension) of the source to be read into the :class:`Raster`. See description of :meth:`Band.create_compatible_raster` :param src_height: the height (along track dimension) of the source to be read into the :class:`Raster`. See description of :meth:`Band.create_compatible_raster` :param xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1. :param ystep: the sub-sampling step along track of the source when reading into the :class:`Raster`. Default: 1. :returns: the new :class:`Raster` instance .. seealso:: description of :meth:`Band.create_compatible_raster` .. function:: create_bitmask_raster(src_width, src_height[, xstep, ystep]) Creates a :class:`Raster` to be used for reading bitmasks. The :class:`Raster` returned always is of type ``byte``. :param src_width: the width (across track dimension) of the source to be read into the :class:`Raster` :param src_height: the height (along track dimension) of the source to be read into the :class:`Raster` :param xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1. :param ystep: the sub-sampling step along track of the source when reading into the :class:`Raster`. Default: 1. :returns: the new :class:`Raster` instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. seealso:: the description of :meth:`Band.create_compatible_raster` .. index:: exception, error Exceptions ---------- EPRError ~~~~~~~~ .. exception:: EPRError EPR API error. .. attribute:: code EPR API error code. .. method:: __init__([message[, code, *args, **kwargs]]) Initializer. :param message: error message :param code: EPR error code EPRValueError ~~~~~~~~~~~~~ .. exception:: EPRValueError Inherits both :exc:`EPRError` and standard :exc:`exceptions.ValueError`. Data ---- .. data:: __version__ Version string of PyEPR. .. data:: EPR_C_API_VERSION Version string of the wrapped `EPR API`_ C library. Data type identifiers ~~~~~~~~~~~~~~~~~~~~~ .. data:: E_TID_UNKNOWN .. data:: E_TID_UCHAR .. data:: E_TID_CHAR .. data:: E_TID_USHORT .. data:: E_TID_SHORT .. data:: E_TID_UINT .. data:: E_TID_INT .. data:: E_TID_FLOAT .. data:: E_TID_DOUBLE .. data:: E_TID_STRING .. data:: E_TID_SPARE .. data:: E_TID_TIME .. index:: pair: sample; model Sample Models ~~~~~~~~~~~~~ .. data:: E_SMOD_1OF1 .. data:: E_SMOD_1OF2 .. data:: E_SMOD_2OF2 .. data:: E_SMOD_3TOI .. data:: E_SMOD_2TOF .. index:: pair: scaling; method Scaling Methods ~~~~~~~~~~~~~~~ .. data:: E_SMID_NON No scaling. .. data:: E_SMID_LIN Linear pixel scaling. .. index:: linear .. data:: E_SMID_LOG Logarithmic pixel scaling. .. index:: logarithmic pyepr-1.1.3/doc/sphinxext/000077500000000000000000000000001414372560000154545ustar00rootroot00000000000000pyepr-1.1.3/doc/sphinxext/LICENSE.txt000066400000000000000000000072671414372560000173130ustar00rootroot00000000000000============================= The IPython licensing terms ============================= IPython is licensed under the terms of the Modified BSD License (also known as New or Revised BSD), as follows: Copyright (c) 2008-2010, IPython Development Team Copyright (c) 2001-2007, Fernando Perez. Copyright (c) 2001, Janko Hauser Copyright (c) 2001, Nathaniel Gray All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 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 IPython Development Team 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. About the IPython Development Team ---------------------------------- Fernando Perez began IPython in 2001 based on code from Janko Hauser and Nathaniel Gray . Fernando is still the project lead. The IPython Development Team is the set of all contributors to the IPython project. This includes all of the IPython subprojects. A full list with details is kept in the documentation directory, in the file ``about/credits.txt``. The core team that coordinates development on GitHub can be found here: http://github.com/ipython. As of late 2010, it consists of: * Brian E. Granger * Jonathan March * Evan Patterson * Fernando Perez * Min Ragan-Kelley * Robert Kern Our Copyright Policy -------------------- IPython uses a shared copyright model. Each contributor maintains copyright over their contributions to IPython. But, it is important to note that these contributions are typically only changes to the repositories. Thus, the IPython source code, in its entirety is not the copyright of any single person or institution. Instead, it is the collective copyright of the entire IPython Development Team. If individual contributors want to maintain a record of what changes/contributions they have specific copyright on, they should indicate their copyright in the commit message of the change, when they commit the change to one of the IPython repositories. With this in mind, the following banner should be used in any source code file to indicate the copyright and license terms: #----------------------------------------------------------------------------- # Copyright (c) 2010, IPython Development Team. # # Distributed under the terms of the Modified BSD License. # # The full license is in the file COPYING.txt, distributed with this software. #----------------------------------------------------------------------------- pyepr-1.1.3/doc/sphinxext/ipython_console_highlighting.py000066400000000000000000000465541414372560000240050ustar00rootroot00000000000000### IPython/lib/lexers.py #################################################### # -*- coding: utf-8 -*- """ Defines a variety of Pygments lexers for highlighting IPython code. This includes: IPythonLexer, IPython3Lexer Lexers for pure IPython (python + magic/shell commands) IPythonPartialTracebackLexer, IPythonTracebackLexer Supports 2.x and 3.x via keyword `python3`. The partial traceback lexer reads everything but the Python code appearing in a traceback. The full lexer combines the partial lexer with an IPython lexer. IPythonConsoleLexer A lexer for IPython console sessions, with support for tracebacks. IPyLexer A friendly lexer which examines the first line of text and from it, decides whether to use an IPython lexer or an IPython console lexer. This is probably the only lexer that needs to be explicitly added to Pygments. """ #----------------------------------------------------------------------------- # Copyright (c) 2013, the IPython Development Team. # # Distributed under the terms of the Modified BSD License. # # The full license is in the file COPYING.txt, distributed with this software. #----------------------------------------------------------------------------- # Standard library import re # Third party from pygments.lexers import BashLexer, PythonLexer, Python3Lexer from pygments.lexer import ( Lexer, DelegatingLexer, RegexLexer, do_insertions, bygroups, using, ) from pygments.token import ( Generic, Keyword, Literal, Name, Operator, Other, Text, Error, ) from pygments.util import get_bool_opt # Local line_re = re.compile('.*?\n') __all__ = ['build_ipy_lexer', 'IPython3Lexer', 'IPythonLexer', 'IPythonPartialTracebackLexer', 'IPythonTracebackLexer', 'IPythonConsoleLexer', 'IPyLexer'] ipython_tokens = [ (r"(?s)(\s*)(%%)(\w+)(.*)", bygroups(Text, Operator, Keyword, Text)), (r'(?s)(^\s*)(%%!)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(BashLexer))), (r"(%%?)(\w+)(\?\??)$", bygroups(Operator, Keyword, Operator)), (r"\b(\?\??)(\s*)$", bygroups(Operator, Text)), (r'(%)(sx|sc|system)(.*)(\n)', bygroups(Operator, Keyword, using(BashLexer), Text)), (r'(%)(\w+)(.*\n)', bygroups(Operator, Keyword, Text)), (r'^(!!)(.+)(\n)', bygroups(Operator, using(BashLexer), Text)), (r'(!)(?!=)(.+)(\n)', bygroups(Operator, using(BashLexer), Text)), (r'^(\s*)(\?\??)(\s*%{0,2}[\w\.\*]*)', bygroups(Text, Operator, Text)), (r'(\s*%{0,2}[\w\.\*]*)(\?\??)(\s*)$', bygroups(Text, Operator, Text)), ] def build_ipy_lexer(python3): """Builds IPython lexers depending on the value of `python3`. The lexer inherits from an appropriate Python lexer and then adds information about IPython specific keywords (i.e. magic commands, shell commands, etc.) Parameters ---------- python3 : bool If `True`, then build an IPython lexer from a Python 3 lexer. """ # It would be nice to have a single IPython lexer class which takes # a boolean `python3`. But since there are two Python lexer classes, # we will also have two IPython lexer classes. if python3: PyLexer = Python3Lexer name = 'IPython3' aliases = ['ipython3'] doc = """IPython3 Lexer""" else: PyLexer = PythonLexer name = 'IPython' aliases = ['ipython2', 'ipython'] doc = """IPython Lexer""" tokens = PyLexer.tokens.copy() tokens['root'] = ipython_tokens + tokens['root'] attrs = {'name': name, 'aliases': aliases, 'filenames': [], '__doc__': doc, 'tokens': tokens} return type(name, (PyLexer,), attrs) IPython3Lexer = build_ipy_lexer(python3=True) IPythonLexer = build_ipy_lexer(python3=False) class IPythonPartialTracebackLexer(RegexLexer): """ Partial lexer for IPython tracebacks. Handles all the non-python output. This works for both Python 2.x and 3.x. """ name = 'IPython Partial Traceback' tokens = { 'root': [ # Tracebacks for syntax errors have a different style. # For both types of tracebacks, we mark the first line with # Generic.Traceback. For syntax errors, we mark the filename # as we mark the filenames for non-syntax tracebacks. # # These two regexps define how IPythonConsoleLexer finds a # traceback. # ## Non-syntax traceback (r'^(\^C)?(-+\n)', bygroups(Error, Generic.Traceback)), ## Syntax traceback (r'^( File)(.*)(, line )(\d+\n)', bygroups(Generic.Traceback, Name.Namespace, Generic.Traceback, Literal.Number.Integer)), # (Exception Identifier)(Whitespace)(Traceback Message) (r'(?u)(^[^\d\W]\w*)(\s*)(Traceback.*?\n)', bygroups(Name.Exception, Generic.Whitespace, Text)), # (Module/Filename)(Text)(Callee)(Function Signature) # Better options for callee and function signature? (r'(.*)( in )(.*)(\(.*\)\n)', bygroups(Name.Namespace, Text, Name.Entity, Name.Tag)), # Regular line: (Whitespace)(Line Number)(Python Code) (r'(\s*?)(\d+)(.*?\n)', bygroups(Generic.Whitespace, Literal.Number.Integer, Other)), # Emphasized line: (Arrow)(Line Number)(Python Code) # Using Exception token so arrow color matches the Exception. (r'(-*>?\s?)(\d+)(.*?\n)', bygroups(Name.Exception, Literal.Number.Integer, Other)), # (Exception Identifier)(Message) (r'(?u)(^[^\d\W]\w*)(:.*?\n)', bygroups(Name.Exception, Text)), # Tag everything else as Other, will be handled later. (r'.*\n', Other), ], } class IPythonTracebackLexer(DelegatingLexer): """ IPython traceback lexer. For doctests, the tracebacks can be snipped as much as desired with the exception to the lines that designate a traceback. For non-syntax error tracebacks, this is the line of hyphens. For syntax error tracebacks, this is the line which lists the File and line number. """ # The lexer inherits from DelegatingLexer. The "root" lexer is an # appropriate IPython lexer, which depends on the value of the boolean # `python3`. First, we parse with the partial IPython traceback lexer. # Then, any code marked with the "Other" token is delegated to the root # lexer. # name = 'IPython Traceback' aliases = ['ipythontb'] def __init__(self, **options): self.python3 = get_bool_opt(options, 'python3', False) if self.python3: self.aliases = ['ipython3tb'] else: self.aliases = ['ipython2tb', 'ipythontb'] if self.python3: IPyLexer = IPython3Lexer else: IPyLexer = IPythonLexer DelegatingLexer.__init__(self, IPyLexer, IPythonPartialTracebackLexer, **options) class IPythonConsoleLexer(Lexer): """ An IPython console lexer for IPython code-blocks and doctests, such as: .. code-block:: rst .. code-block:: ipythonconsole In [1]: a = 'foo' In [2]: a Out[2]: 'foo' In [3]: print a foo In [4]: 1 / 0 Support is also provided for IPython exceptions: .. code-block:: rst .. code-block:: ipythonconsole In [1]: raise Exception --------------------------------------------------------------------------- Exception Traceback (most recent call last) in () ----> 1 raise Exception Exception: """ name = 'IPython console session' aliases = ['ipythonconsole'] mimetypes = ['text/x-ipython-console'] # The regexps used to determine what is input and what is output. # The default prompts for IPython are: # # in = 'In [#]: ' # continuation = ' .D.: ' # template = 'Out[#]: ' # # Where '#' is the 'prompt number' or 'execution count' and 'D' # D is a number of dots matching the width of the execution count # in1_regex = r'In \[[0-9]+\]: ' in2_regex = r' \.\.+\.: ' out_regex = r'Out\[[0-9]+\]: ' #: The regex to determine when a traceback starts. ipytb_start = re.compile(r'^(\^C)?(-+\n)|^( File)(.*)(, line )(\d+\n)') def __init__(self, **options): """Initialize the IPython console lexer. Parameters ---------- python3 : bool If `True`, then the console inputs are parsed using a Python 3 lexer. Otherwise, they are parsed using a Python 2 lexer. in1_regex : RegexObject The compiled regular expression used to detect the start of inputs. Although the IPython configuration setting may have a trailing whitespace, do not include it in the regex. If `None`, then the default input prompt is assumed. in2_regex : RegexObject The compiled regular expression used to detect the continuation of inputs. Although the IPython configuration setting may have a trailing whitespace, do not include it in the regex. If `None`, then the default input prompt is assumed. out_regex : RegexObject The compiled regular expression used to detect outputs. If `None`, then the default output prompt is assumed. """ self.python3 = get_bool_opt(options, 'python3', False) if self.python3: self.aliases = ['ipython3console'] else: self.aliases = ['ipython2console', 'ipythonconsole'] in1_regex = options.get('in1_regex', self.in1_regex) in2_regex = options.get('in2_regex', self.in2_regex) out_regex = options.get('out_regex', self.out_regex) # So that we can work with input and output prompts which have been # rstrip'd (possibly by editors) we also need rstrip'd variants. If # we do not do this, then such prompts will be tagged as 'output'. # The reason can't just use the rstrip'd variants instead is because # we want any whitespace associated with the prompt to be inserted # with the token. This allows formatted code to be modified so as hide # the appearance of prompts, with the whitespace included. One example # use of this is in copybutton.js from the standard lib Python docs. in1_regex_rstrip = in1_regex.rstrip() + '\n' in2_regex_rstrip = in2_regex.rstrip() + '\n' out_regex_rstrip = out_regex.rstrip() + '\n' # Compile and save them all. attrs = ['in1_regex', 'in2_regex', 'out_regex', 'in1_regex_rstrip', 'in2_regex_rstrip', 'out_regex_rstrip'] for attr in attrs: self.__setattr__(attr, re.compile(locals()[attr])) Lexer.__init__(self, **options) if self.python3: pylexer = IPython3Lexer tblexer = IPythonTracebackLexer else: pylexer = IPythonLexer tblexer = IPythonTracebackLexer self.pylexer = pylexer(**options) self.tblexer = tblexer(**options) self.reset() def reset(self): self.mode = 'output' self.index = 0 self.buffer = u'' self.insertions = [] def buffered_tokens(self): """ Generator of unprocessed tokens after doing insertions and before changing to a new state. """ if self.mode == 'output': tokens = [(0, Generic.Output, self.buffer)] elif self.mode == 'input': tokens = self.pylexer.get_tokens_unprocessed(self.buffer) else: # traceback tokens = self.tblexer.get_tokens_unprocessed(self.buffer) for i, t, v in do_insertions(self.insertions, tokens): # All token indexes are relative to the buffer. yield self.index + i, t, v # Clear it all self.index += len(self.buffer) self.buffer = u'' self.insertions = [] def get_mci(self, line): """ Parses the line and returns a 3-tuple: (mode, code, insertion). `mode` is the next mode (or state) of the lexer, and is always equal to 'input', 'output', or 'tb'. `code` is a portion of the line that should be added to the buffer corresponding to the next mode and eventually lexed by another lexer. For example, `code` could be Python code if `mode` were 'input'. `insertion` is a 3-tuple (index, token, text) representing an unprocessed "token" that will be inserted into the stream of tokens that are created from the buffer once we change modes. This is usually the input or output prompt. In general, the next mode depends on current mode and on the contents of `line`. """ # To reduce the number of regex match checks, we have multiple # 'if' blocks instead of 'if-elif' blocks. # Check for possible end of input in2_match = self.in2_regex.match(line) in2_match_rstrip = self.in2_regex_rstrip.match(line) if (in2_match and in2_match.group().rstrip() == line.rstrip()) or \ in2_match_rstrip: end_input = True else: end_input = False if end_input and self.mode != 'tb': # Only look for an end of input when not in tb mode. # An ellipsis could appear within the traceback. mode = 'output' code = u'' insertion = (0, Generic.Prompt, line) return mode, code, insertion # Check for output prompt out_match = self.out_regex.match(line) out_match_rstrip = self.out_regex_rstrip.match(line) if out_match or out_match_rstrip: mode = 'output' if out_match: idx = out_match.end() else: idx = out_match_rstrip.end() code = line[idx:] # Use the 'heading' token for output. We cannot use Generic.Error # since it would conflict with exceptions. insertion = (0, Generic.Heading, line[:idx]) return mode, code, insertion # Check for input or continuation prompt (non stripped version) in1_match = self.in1_regex.match(line) if in1_match or (in2_match and self.mode != 'tb'): # New input or when not in tb, continued input. # We do not check for continued input when in tb since it is # allowable to replace a long stack with an ellipsis. mode = 'input' if in1_match: idx = in1_match.end() else: # in2_match idx = in2_match.end() code = line[idx:] insertion = (0, Generic.Prompt, line[:idx]) return mode, code, insertion # Check for input or continuation prompt (stripped version) in1_match_rstrip = self.in1_regex_rstrip.match(line) if in1_match_rstrip or (in2_match_rstrip and self.mode != 'tb'): # New input or when not in tb, continued input. # We do not check for continued input when in tb since it is # allowable to replace a long stack with an ellipsis. mode = 'input' if in1_match_rstrip: idx = in1_match_rstrip.end() else: # in2_match idx = in2_match_rstrip.end() code = line[idx:] insertion = (0, Generic.Prompt, line[:idx]) return mode, code, insertion # Check for traceback if self.ipytb_start.match(line): mode = 'tb' code = line insertion = None return mode, code, insertion # All other stuff... if self.mode in ('input', 'output'): # We assume all other text is output. Multiline input that # does not use the continuation marker cannot be detected. # For example, the 3 in the following is clearly output: # # In [1]: print 3 # 3 # # But the following second line is part of the input: # # In [2]: while True: # print True # # In both cases, the 2nd line will be 'output'. # mode = 'output' else: mode = 'tb' code = line insertion = None return mode, code, insertion def get_tokens_unprocessed(self, text): self.reset() for match in line_re.finditer(text): line = match.group() mode, code, insertion = self.get_mci(line) if mode != self.mode: # Yield buffered tokens before transitioning to new mode. for token in self.buffered_tokens(): yield token self.mode = mode if insertion: self.insertions.append((len(self.buffer), [insertion])) self.buffer += code for token in self.buffered_tokens(): yield token class IPyLexer(Lexer): """ Primary lexer for all IPython-like code. This is a simple helper lexer. If the first line of the text begins with "In \[[0-9]+\]:", then the entire text is parsed with an IPython console lexer. If not, then the entire text is parsed with an IPython lexer. The goal is to reduce the number of lexers that are registered with Pygments. """ name = 'IPy session' aliases = ['ipy'] def __init__(self, **options): self.python3 = get_bool_opt(options, 'python3', False) if self.python3: self.aliases = ['ipy3'] else: self.aliases = ['ipy2', 'ipy'] Lexer.__init__(self, **options) self.IPythonLexer = IPythonLexer(**options) self.IPythonConsoleLexer = IPythonConsoleLexer(**options) def get_tokens_unprocessed(self, text): # Search for the input prompt anywhere...this allows code blocks to # begin with comments as well. if re.match(r'.*(In \[[0-9]+\]:)', text.strip(), re.DOTALL): lex = self.IPythonConsoleLexer else: lex = self.IPythonLexer for token in lex.get_tokens_unprocessed(text): yield token ### IPython/sphinxext/ipython_console_highighting.py ######################### """ reST directive for syntax-highlighting ipython interactive sessions. """ from sphinx import highlighting # from IPython.lib.lexers import IPyLexer def setup(app): """Setup as a sphinx extension.""" # This is only a lexer, so adding it below to pygments appears sufficient. # But if somebody knows what the right API usage should be to do that via # sphinx, by all means fix it here. At least having this setup.py # suppresses the sphinx warning we'd get without it. metadata = {'parallel_read_safe': True, 'parallel_write_safe': True} return metadata # Register the extension as a valid pygments lexer. # Alternatively, we could register the lexer with pygments instead. This would # require using setuptools entrypoints: http://pygments.org/docs/plugins ipy2 = IPyLexer(python3=False) ipy3 = IPyLexer(python3=True) highlighting.lexers['ipython'] = ipy2 highlighting.lexers['ipython2'] = ipy2 highlighting.lexers['ipython3'] = ipy3 pyepr-1.1.3/doc/tutorials.rst000066400000000000000000000002711414372560000162020ustar00rootroot00000000000000Tutorials ========= .. index:: tutorial .. toctree:: :maxdepth: 2 interactive_use bands_example bitmask_example ndvi_example update_example gdal_export_example pyepr-1.1.3/doc/update_example.rst000066400000000000000000000126511414372560000171560ustar00rootroot00000000000000Update :class:`Field` elements ------------------------------ .. highlight:: ipython .. index:: update, field, read-only, EPR-API, MERIS pair: open; mode The EPR C API has been designed to provide read-only features. PyEPR_ provides and extra capability consisting in the possibility to modify (*update*) an existing ENVISAT_ :class:`Product`. Lets consider a MERIS Level 2 low resolution product ( `MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1`). It has a :class:`Band` named `water_vapour` containing the water vapour content at a specific position. One can load water vapour and compute an histogram using the following instructions: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/update_elements.py :language: python :lines: 8-13 .. index:: matplotlib The resulting histogram can be plot using Matplotlib_: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/update_elements.py :language: python :lines: 15-19 .. figure:: images/water_vapour_histogram_01.* :width: 60% Histogram of the original water vapour content The actual values of the water vapour content :class:`Band` are computed starting form data stored in the `Vapour_Content` :class:`Dataset` using scaling factors contained in the `Scaling_Factor_GADS` :class:`Dataset`. In particular :class:`Field`\ s `sf_wvapour` and `off_wvapour` are used:: In [21]: dataset = product.get_dataset('Scaling_Factor_GADS') In [22]: print(dataset) epr.Dataset(Scaling_Factor_GADS) 1 records sf_cl_opt_thick = 1.000000 sf_cloud_top_press = 4.027559 sf_wvapour = 0.100000 off_cl_opt_thick = -1.000000 off_cloud_top_press = -4.027559 off_wvapour = -0.100000 spare_1 = <> .. index:: band pair: scaling; factor Now suppose that for some reason one needs to update the `sf_wvapour` scaling factor for the water vapour content. Changing the scaling factor, of course, will change all values in the `water_vapour` :class:`Band`. The change can be performed using the :meth:`Field.set_elem` and :meth:`Field.set_elems` methods of :class:`Field` objects: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/update_elements.py :language: python :lines: 22-30 Now the `sf_wvapour` scaling factor has been changed and it is possible to compute and display the histogram of modified data in the `water_vapour` :class:`Band`: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/update_elements.py :language: python :lines: 32-46 .. figure:: images/water_vapour_histogram_02.* :width: 60% Histogram of the water vapour content (original and modified) Figure above shows the two different histograms, original data in blue and modified data in red, demonstrating the effect of the change of the scaling factor. The new map of water vapour is showed in the following picture: .. figure:: images/modified_water_vapour.* Modified water vapour content map .. important:: it is important to stress that it is necessary to close and re-open the :class:`Product` in order to see changes in the scaling factors applied to the `water_vapour`:class:`Band` data. This is a limitation of the current implementation that could be removed in future versions of the PyEPR_ package. It has been showed that changing the `sf_wvapour` scaling factor modifies all values of the `water_vapour` :class:`Band`. Now suppose that one needs to modify only a specific area. It can be done changing the contents of the `Vapour_Content` :class:`Dataset`. The :class:`Dataset` size can be read form the :class:`Product`:: In [44]: product.get_scene_height(), product.get_scene_width() Out[44]: (149, 281) while information about the fields in each record can be retrieved introspecting the :class:`Record` object:: In [49]: record = dataset.read_record(0) In [50]: record.get_field_names() Out[50]: ['dsr_time', 'quality_flag', 'wvapour_cont_pix'] In [51]: record.get_field('wvapour_cont_pix') Out[51]: epr.Field("wvapour_cont_pix") 281 uchar elements So the name of the :class:`Field` we need to change is the `wvapour_cont_pix`, and its index is `2`. It is possible to change a small box inside the :class:`Dataset` as follows: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/update_elements.py :language: python :lines: 58-66 Please note that when one modifies the content of a :class:`Dataset` he/she should also take into account id the corresponding band has lines mirrored or not:: In [59]: band = p.get_band('water_vapour') In [60]: band.lines_mirrored Out[60]: True Finally the :class:`Product` can be re-opened to load and display the modified :class:`Band`: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/update_elements.py :language: python :lines: 69-80 .. figure:: images/modified_water_vapour_with_box.* Modified water vapour content map with zeroed box Of course values in the box that has been set to zero in the :class:`Dataset` are transformed according to the scaling factor and offset parameters associated to `water_vapour` :class:`Band`. The complete code of the example can be found at :download:`examples/update_elements.py`. .. _PyEPR: https://github.com/avalentino/pyepr .. _ENVISAT: https://envisat.esa.int .. _Matplotlib: https://matplotlib.org .. raw:: latex \clearpage pyepr-1.1.3/doc/usermanual.rst000066400000000000000000000414541414372560000163400ustar00rootroot00000000000000User Manual =========== .. index:: EPR-API, ENVISAT, MERIS, AASTR, ASAR, ESA single: product; dataset; record; close pair: epr; module Quick start ----------- PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. Full access to the Python EPR API is provided by the :mod:`epr` module that have to be imported by the client program e.g. as follows:: import epr The following snippet open an ASAR product and dumps the "Main Processing Parameters" record to the standard output:: import epr product = epr.Product( 'ASA_IMP_1PNUPA20060202_062233_000000152044_00435_20529_3110.N1') dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') record = dataset.read_record(0) print(record) product.close() Since version 0.9 PyEPR_ also include *update* features that are not available in the EPR C API. The user can open a product in update mode ('rb+') and call the :meth:`epr.Field.set_elem` and :meth:`epr.Field.set_elems` methods of :class:`epr.Field` class to update its elements and write changes to disk. .. seealso:: `Update support`_ and :doc:`update_example` tutorial for details. .. index:: pair: open; mode .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://envisat.esa.int .. _ESA: https://earth.esa.int .. index:: requirements, EPR-API, Python, numpy, cython, pytest, gcc, extension Requirements ------------ In order to use PyEPR it is needed that the following software are correctly installed and configured: * Python3_ >= 3.5 (including PyPy3_) * numpy_ >= 1.7.0 * `EPR API`_ >= 2.2 (optional, since PyEPR 0.7 the source tar-ball comes with a copy of the EPR C API sources) * a reasonably updated C compiler [#]_ (build only) * Cython_ >= 0.29.22 [#]_ (build only) * pytest_ (optional and only needed for testing) .. [#] PyEPR_ has been developed and tested with gcc_ 4. .. [#] The source tarball of official releases also includes the C extension code generated by cython_ so users don't strictly need cython_ to install PyEPR_. It is only needed to re-generate the C extension code (e.g. if one wants to build a development version of PyEPR_). .. _Python3: Python_ .. _PyPy3: https://www.pypy.org .. _numpy: https://numpy.org .. _gcc: http://gcc.gnu.org .. _Cython: https://cython.org .. _pytest: https://pytest.org .. index:: download, PyPi, GitHub, project, git pair: git; clone Download -------- .. highlight:: sh Official source tar-balls can be downloaded form PyPi_: https://pypi.org/project/pyepr The source code of the development versions is available on the GitHub_ project page https://github.com/avalentino/pyepr To clone the git_ repository the following command can be used:: $ git clone https://github.com/avalentino/pyepr.git To get also the EPR C API source code, the following commands are necessary:: $ cd pyepr $ git submodule init Submodule 'extern/epr-api' (https://github.com/avalentino/epr-api.git) registered for path 'extern/epr-api' $ git submodule update Cloning into '/Users/antonio valentino/projects/av/pyepr/extern/epr-api'... Submodule path 'extern/epr-api': checked out '93c1f1efce26c64d508fe882d5c72a898a068f29' .. _PyPi: https://pypi.org .. _GitHub: https://github.com .. _git: https://git-scm.com .. index:: install, pip pair: install; user pair: install; option pair: install; prefix .. _installation: Installation ------------ The easier way to install PyEPR_ is using tools like pip_:: $ python3 -m pip install pyepr For a user specific installation please use:: $ python3 -m pip install --user pyepr To install PyEPR_ in a non-standard path:: $ python3 -m pip install --install-option="--prefix=" pyepr just make sure that :file:`/lib/pythonX.Y/site-packages` is in the :envvar:`PYTHONPATH`. .. index:: single: sources; setup.py pair: standalone; mode pair: EPR-API; sources pair: dynamic; library pair: git; repository PyEPR_ can be installed from sources using the following command:: $ python3 -m pip install . The :file:`setup.py` script by default checks for the availability of the EPR C API source code in the :file:`/epr-api-src` directory and tries to build PyEPR in *standalone mode*, i.e. without linking an external dynamic library of EPR-API. If no EPR C API sources are found then the :file:`setup.py` script automatically tries to link the EPR-API dynamic library. This can happen, for example, if the user is using a copy of the PyEPR sources cloned from a git_ repository. In this case it is assumed that the `EPR API`_ C library is properly installed in the system (see the Requirements_ section). It is possible to control which `EPR API`_ C sources to use by means of the `--epr-api-src` option of the :file:`setup.py` script:: $ python3 setup.py install --epr-api-src=../epr-api/src Also it is possible to switch off the *standalone mode* and force the link with the system `EPR API`_ C library:: $ python3 setup.py install --epr-api-src="" Please note that if the ``setup.py`` script is invoked directly, then the user must make sure that setup requirements are propely installed:: $ python3 -m pip install cython numpy .. _pip: https://pypi.org/project/pip .. index:: test, setup.py, download, pytest pair: test; suite pair: sample; product Testing ------- PyEPR_ package comes with a complete test suite. The test suite can be run from the package root directory using pytest_:: $ python3 -m pytest tests or running the :file:`test_all.py` script directly:: $ python3 test_all.py In the second case please make sure that the :mod:`epr` extension module is in the Python search path (see also :envvar:`PYTHONPATH`). The test script automatically downloads and decompresses the ENVISAT sample product necessary for testing, MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1__, if it is not already available in the :file:`tests` directory. .. note:: please note that, unless the user already have a copy of the specified sample product correctly installed, an **internet connection** is necessary the first time that the test suite is run. After the first run the sample product remains in the :file:`tests` directory so the internet access is no longer necessary. __ https://earth.esa.int/services/sample_products/meris/LRC/L2/MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1.gz .. index:: EPR-API Python vs C API --------------- The Python_ EPR API is fully object oriented. The main structures of the `C API`_ have been implemented as objects while C function have been logically grouped and mapped onto object methods. The entire process of defining an object oriented API for Python_ has been quite easy and straightforward thanks to the good design of the C API, Of course there are also some differences that are illustrated in the following sections. .. _`C API`: https://rawgit.com/bcdev/epr-api/master/docs/epr_c_api/index.html .. index:: memory, product pair: allocation; de-allocation Memory management ----------------- .. highlight:: python Being Python_ a very high level language uses have never to worry about memory allocation/de-allocation. They simply have to instantiate objects:: product = epr.Product('filename.N1') and use them freely. Objects are automatically destroyed when there are no more references to them and memory is de-allocated automatically. Even better, each object holds a reference to other objects it depends on so the user never have to worry about identifiers validity or about the correct order structures have to be freed. For example: the C `EPR_DatasetId` structure has a field (`product_id`) that points to the *product* descriptor `EPR_productId` to which it belongs to. .. index:: dataset, record The reference to the parent product is used, for example, when one wants to read a record using the `epr_read_record` function: .. code-block:: c EPR_SRecord* epr_read_record(EPR_SDatasetId* dataset_id, ...); The function takes a `EPR_SDatasetId` as a parameter and assumes all fields (including ``dataset->product_id``) are valid. It is responsibility of the programmer to keep all structures valid and free them at the right moment and in the correct order. This is the standard way to go in C but not in Python_. In Python_ all is by far simpler, and the user can get a *dateset* object instance:: dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') and then forget about the *product* instance it depends on. Even if the *product* variable goes out of :index:`scope` and it is no more directly accessible in the program the *dataset* object keeps staying valid since it holds an internal reference to the *product* instance it depends on. When *record* is destroyed automatically also the parent :class:`epr.Product` object is destroyed (assumed there is no other :index:`reference` to it). The entire machinery is completely automatic and transparent to the user. .. note:: of course when a *product* object is explicitly closed using the :meth:`epr.Product.close` any I/O operation on it and on other objects (bands, datasets, etc) associated to it is no more possible. .. index:: close .. index:: array, numpy, raster Arrays ------ PyEPR_ uses numpy_ in order to manage efficiently the potentially large amount of data contained in ENVISAT_ products. * :meth:`epr.Field.get_elems` return an 1D array containing elements of the field * the `Raster.data` property is a 2D array exposes data contained in the :class:`epr.Raster` object in form of :class:`numpy.ndarray` .. note:: :attr:`epr.Raster.data` directly exposes :class:`epr.Raster` i.e. shares the same memory buffer with :class:`epr.Raster`:: >>> raster.get_pixel(i, j) 5 >>> raster.data[i, j] 5 >>> raster.data[i, j] = 3 >>> raster.get_pixel(i, j) 3 * :meth:`epr.Band.read_as_array` is an additional method provided by the Python_ EPR API (does not exist any correspondent function in the C API). It is mainly a facility method that allows users to get access to band data without creating an intermediate :class:`epr.Raster` object. It read a slice of data from the :class:`epr.Band` and returns it as a 2D :class:`numpy.ndarray`. .. index:: read_as_aaray, data .. index:: enumeration pair: module; constant Enumerators ----------- Python_ does not have *enumerators* at language level (at least this is true for Python_ < 3.4). Enumerations are simply mapped as module constants that have the same name of the C enumerate but are spelled all in capital letters. For example: ============ ============ C Pythn ============ ============ e_tid_double E_TID_DOUBLE e_smod_1OF1 E_SMOD_1OF1 e_smid_log E_SMID_LOG ============ ============ .. index:: logging, error, exception, EPR-API Error handling and logging -------------------------- Currently error handling and logging functions of the EPR C API are not exposed to python. Internal library logging is completely silenced and errors are converted to Python_ exceptions. Where appropriate standard Python_ exception types are use in other cases custom exception types (e.g. :exc:`epr.EPRError`, :exc:`epr.EPRValueError`) are used. .. index:: library, module, APR-API pair: library; initialization Library initialization ---------------------- Differently from the C API library initialization is not needed: it is performed internally the first time the :mod:`epr` module is imported in Python_. .. index:: API pair: high-level; API High level API -------------- PyEPR_ provides some utility method that has no correspondent in the C API: * :meth:`epr.Record.fields` * :meth:`epr.Record.get_field_names` * :meth:`epr.Dataset.records` * :meth:`epr.Product.get_dataset_names` * :meth:`epr.Product.get_band_names` * :meth:`epr.Product.datasets` * :meth:`epr.Product.bands` Example:: for dataset in product.datasets(): for record in dataset.records(): print(record) print() Another example:: if 'proc_data' in product.band_names(): band = product.get_band('proc_data') print(band) .. index:: __str__, __repr__, print_, pair: special; methods Special methods --------------- The Python_ EPR API also implements some `special method`_ in order to make EPR programming even handy and, in short, "pythonic_". The ``__repr__`` methods have been overridden to provide a little more information with respect to the standard implementation. In some cases ``__str__`` method have been overridden to output a verbose string representation of the objects and their contents. If the EPR object has a ``print_`` method (like e.g. :meth:`epr.Record.print_` and :meth:`epr.Field.print_`) then the string representation of the object will have the same format used by the ``print_`` method. So writing:: fd.write(str(record)) giver the same result of:: record.print_(fd) Of course the :meth:`epr.Record.print_` method is more efficient for writing to file. .. index:: __iter__ Also :class:`epr.Dataset` and :class:`epr.Record` classes implement the ``__iter__`` `special method`_ for iterating over records and fields respectively. So it is possible to write code like the following:: for record in dataset: for index, field in enumerate(record): print(index, field) .. index:: __eq__ :class:`epr.DSD` and :class:`epr.Field` classes implement the ``__eq__`` and ``__ne__`` methods for objects comparison:: if filed1 == field2: print('field 1 and field2 are equal') print(field1) else: print('field1:', field1) print('field2:', field2) .. index:: __len__ :class:`epr.Field` object also implement the ``__len__`` special method that returns the number of elements in the field:: if field.get_type() != epr.E_TID_STRING: assert field.get_num_elems() == len(field) else: assert len(field) == len(field.get_elem()) .. note:: differently from the :meth:`epr.Field.get_num_elems` method ``len(field)`` return the number of elements if the field type is not :data:`epr.E_TID_STRING`. If the field contains a string then the string length is returned. .. index:: __enter__, __exit__, context, with pair: context; manager pair: with; statement Finally the :class:`epr.Product` class acts as a `context manager`_ (i.e. it implements the ``__enter__`` and ``__exit__`` methods). This allows the user to write code like the following:: with epr.open('ASA_IMS_ ... _4650.N1') as product: print(product) that ensure that the product is closed as soon as the program exits the ``with`` block. .. index:: update, ENVISAT pair: open; mode Update support -------------- It is not possible to create new ENVISAT_ products for scratch with the EPR API. Indeed EPR means "**E**\ NVISAT **P**\ roduct **R**\ eaeder". Anyway, since version 0.9, PyEPR_ also include basic *update* features. This means that, while it is still not possible to create new :class:`Products`, the user can *update* existing ones changing the contents of any :class:`Field` in any record with the only exception of MPH and SPH :class:`Field`\s. The user can open a product in update mode ('rb+'):: product = epr.open('ASA_IMS_ ... _4650.N1', 'rb+') and update the :class:`epr.Field` element at a specific index:: field.set_elem(new_value, index) or also update all elements ol the :class:`epr.Field` in one shot:: field.set_elems(new_values) .. note:: unfortunately there are some limitations to the update support. Many of the internal structures of the EPR C API are loaded when the :class:`Product` is opened and are not automatically updated when the :meth:`epr.Field.set_elem` and :meth:`epr.Field.set_elems` methods are called. In particular :class:`epr.Band`\ s contents may depend on several :class:`epr.Field` values, e.g. the contents of `Scaling_Factor_GADS` :class:`epr.Dataset`. For this reason the user may need to close and re-open the :class:`epr.Product` in order to have all changes effectively applied. .. seealso:: :doc:`update_example` .. index:: pair: scaling; factor .. _`special method`: https://docs.python.org/3/reference/datamodel.html .. _pythonic: http://www.cafepy.com/article/be_pythonic .. _`context manager`: https://docs.python.org/3/library/stdtypes.html#context-manager-types pyepr-1.1.3/extern/000077500000000000000000000000001414372560000141625ustar00rootroot00000000000000pyepr-1.1.3/extern/epr-api/000077500000000000000000000000001414372560000155175ustar00rootroot00000000000000pyepr-1.1.3/pyproject.toml000066400000000000000000000004031414372560000155660ustar00rootroot00000000000000# See: https://pip.pypa.io/en/stable/reference/pip/#pep-517-and-518-support [build-system] requires = [ "setuptools >= 40.8.0", "wheel", "packaging", "cython >= 0.29.22", "oldest-supported-numpy", ] build-backend = "setuptools.build_meta" pyepr-1.1.3/requirements-dev.txt000066400000000000000000000001001414372560000167040ustar00rootroot00000000000000numpy>=1.7 cython>=0.29.22 sphinx pytest coverage docutils<0.18 pyepr-1.1.3/setup.cfg000066400000000000000000000045141414372560000145020ustar00rootroot00000000000000[metadata] name = pyepr # version=get_version(os.path.join('src', 'epr.pyx')), description = Python ENVISAT Product Reader API long_description = PyEPR provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://envisat.esa.int .. _ESA: https://earth.esa.int long_description_content_type = text/x-rst url = http://avalentino.github.io/pyepr download_url = http://pypi.python.org/pypi/pyepr author = Antonio Valentino author_email = antonio.valentino@tiscali.it license = GPL3 license_file = LICENSE.txt classifiers = Development Status :: 5 - Production/Stable Environment :: Other Environment Intended Audience :: Developers Intended Audience :: Science/Research License :: OSI Approved :: GNU General Public License (GPL) Operating System :: MacOS :: MacOS X Operating System :: Microsoft :: Windows Operating System :: POSIX Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: Implementation :: CPython Programming Language :: Python :: Implementation :: PyPy Programming Language :: Cython Topic :: Software Development :: Libraries Topic :: Scientific/Engineering Topic :: Scientific/Engineering :: GIS keywords = satellite, reader, envisat platforms = any project_urls = Documentation = http://avalentino.github.io/pyepr/html/index.html Source = https://github.com/avalentino/pyepr Tracker = https://github.com/avalentino/pyepr/issues [options] install_requires = numpy>=1.7 python_requires = >=3.5, <4 zip_safe = False pyepr-1.1.3/setup.py000077500000000000000000000101461414372560000143740ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright (C) 2011-2021, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR 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 PyEPR. If not, see . import os import sys import setuptools try: import Cython print('CYTHON_VERSION: {}'.format(Cython.__version__)) del Cython except ImportError: print('CYTHON not installed') def get_version(filename, strip_extra=False): import re from packaging.version import parse as Version with open(filename) as fd: data = fd.read() mobj = re.search( r'''^__version__\s*=\s*(?P['"])(?P.*)(?P=quote)''', data, re.MULTILINE) return Version(mobj.group('version')) # https://mail.python.org/pipermail/distutils-sig/2007-September/008253.html class NumpyExtension(setuptools.Extension): """Extension type that adds the NumPy include directory to include_dirs.""" @property def include_dirs(self): from numpy import get_include return self._include_dirs + [get_include()] @include_dirs.setter def include_dirs(self, include_dirs): self._include_dirs = include_dirs def setup_extension(eprsrcdir=None, coverage=False): import glob if eprsrcdir: print('EPR_API: using EPR C API sources at "{}"'.format(eprsrcdir)) extra_sources = glob.glob('{}/epr_*.c'.format(eprsrcdir)) include_dirs = [eprsrcdir] libraries = [] else: print('EPR_API: using pre-built dynamic library for EPR C API') extra_sources = [] include_dirs = [] libraries = ['epr_api'] define_macros = [('NPY_NO_DEPRECATED_API', 'NPY_1_7_API_VERSION')] if coverage: define_macros.extend([('CYTHON_TRACE_NOGIL', '1')]) ext = NumpyExtension( 'epr', sources=[os.path.join('src', 'epr.pyx')] + extra_sources, include_dirs=include_dirs, libraries=libraries, language='c', define_macros=define_macros, ) # compiler directives language_level = '3str' ext.cython_directives = dict(language_level=language_level) print('CYTHON_LANGUAGE_LEVEL: {}'.format(language_level)) if coverage: ext.cython_directives['linetrace'] = True return ext def make_config(eprsrcdir=None, coverage=False): config = { 'version': str(get_version(os.path.join('src', 'epr.pyx'))), 'ext_modules': [setup_extension(eprsrcdir, coverage)], } return config def get_parser(): PYEPR_COVERAGE_STR = os.environ.get('PYEPR_COVERAGE', '').upper() DEFAULT_COVERAGE = bool( PYEPR_COVERAGE_STR in ('Y', 'YES', 'TRUE', 'OK', 'ON', '1')) DEFAULT_EPRAPI_SRC = 'extern/epr-api/src' if not os.path.exists(DEFAULT_EPRAPI_SRC): DEFAULT_EPRAPI_SRC = '' DEFAULT_EPRAPI_SRC = os.environ.get('PYEPR_EPRAPI_SRC', DEFAULT_EPRAPI_SRC) import argparse parser = argparse.ArgumentParser(add_help=False) parser.add_argument( '--coverage', action='store_true', default=DEFAULT_COVERAGE) parser.add_argument('--epr-api-src', default=DEFAULT_EPRAPI_SRC) return parser if __name__ == '__main__': parser = get_parser() extra_args, setup_argv = parser.parse_known_args(sys.argv) sys.argv[:] = setup_argv print('PYEPR_COVERAGE:', extra_args.coverage) config = make_config(extra_args.epr_api_src, extra_args.coverage) if '-h' in setup_argv or '--help' in setup_argv: msg = parser.format_help() msg = '\n'.join(msg.splitlines()[2:]) # remove usage string print(msg) print() setuptools.setup(**config) pyepr-1.1.3/src/000077500000000000000000000000001414372560000134445ustar00rootroot00000000000000pyepr-1.1.3/src/epr.pxd000066400000000000000000000271411414372560000147540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # PyEPR - Python bindings for ENVISAT Product Reader API # # Copyright (C) 2011-2021, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR 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 PyEPR. If not, see . from libc.stdio cimport FILE cdef extern from 'epr_api.h' nogil: char* EPR_PRODUCT_API_VERSION_STR ctypedef int epr_boolean ctypedef unsigned char uchar ctypedef unsigned short ushort ctypedef unsigned int uint ctypedef unsigned long ulong ctypedef EPR_Time EPR_STime #ctypedef EPR_FlagDef EPR_SFlagDef ctypedef EPR_PtrArray EPR_SPtrArray ctypedef EPR_FieldInfo EPR_SFieldInfo ctypedef EPR_RecordInfo EPR_SRecordInfo ctypedef EPR_Field EPR_SField ctypedef EPR_Record EPR_SRecord ctypedef EPR_DSD EPR_SDSD ctypedef EPR_Raster EPR_SRaster ctypedef EPR_BandId EPR_SBandId ctypedef EPR_DatasetId EPR_SDatasetId ctypedef EPR_ProductId EPR_SProductId ctypedef EPR_ErrCode EPR_EErrCode ctypedef EPR_LogLevel EPR_ELogLevel ctypedef EPR_SampleModel EPR_ESampleModel ctypedef EPR_ScalingMethod EPR_EScalingMethod ctypedef EPR_DataTypeId EPR_EDataTypeId ctypedef int EPR_Magic int EPR_MAGIC_PRODUCT_ID int EPR_MAGIC_DATASET_ID int EPR_MAGIC_BAND_ID int EPR_MAGIC_RECORD int EPR_MAGIC_FIELD int EPR_MAGIC_RASTER int EPR_MAGIC_FLAG_DEF enum EPR_ErrCode: e_err_none = 0 e_err_null_pointer = 1 e_err_illegal_arg = 2 e_err_illegal_state = 3 e_err_out_of_memory = 4 e_err_index_out_of_range = 5 e_err_illegal_conversion = 6 e_err_illegal_data_type = 7 e_err_file_not_found = 101 e_err_file_access_denied = 102 e_err_file_read_error = 103 e_err_file_write_error = 104 e_err_file_open_failed = 105 e_err_file_close_failed = 106 e_err_api_not_initialized = 201 e_err_invalid_product_id = 203 e_err_invalid_record = 204 e_err_invalid_band = 205 e_err_invalid_raster = 206 e_err_invalid_dataset_name = 207 e_err_invalid_field_name = 208 e_err_invalid_record_name = 209 e_err_invalid_product_name = 210 e_err_invalid_band_name = 211 e_err_invalid_data_format = 212 e_err_invalid_value = 213 e_err_invalid_keyword_name = 214 e_err_unknown_endian_order = 216 e_err_flag_not_found = 301 e_err_invalid_ddbb_format = 402 enum EPR_DataTypeId: e_tid_unknown = 0 e_tid_uchar = 1 e_tid_char = 2 e_tid_ushort = 3 e_tid_short = 4 e_tid_uint = 5 e_tid_int = 6 e_tid_float = 7 e_tid_double = 8 e_tid_string = 11 e_tid_spare = 13 e_tid_time = 21 enum EPR_LogLevel: e_log_debug = -1 e_log_info = 0 e_log_warning = 1 e_log_error = 2 enum EPR_SampleModel: e_smod_1OF1 = 0 e_smod_1OF2 = 1 e_smod_2OF2 = 2 e_smod_3TOI = 3 e_smod_2TOF = 4 enum EPR_ScalingMethod: e_smid_non = 0 e_smid_lin = 1 e_smid_log = 2 struct EPR_Time: int days uint seconds uint microseconds struct EPR_FlagDef: EPR_Magic magic char* name uint bit_mask char* description struct EPR_PtrArray: unsigned int capacity unsigned int length void** elems struct EPR_Field: EPR_Magic magic EPR_FieldInfo* info void* elems struct EPR_Record: EPR_Magic magic EPR_RecordInfo* info uint num_fields EPR_Field** fields struct EPR_DSD: EPR_Magic magic int index char* ds_name char* ds_type char* filename uint ds_offset uint ds_size uint num_dsr uint dsr_size struct EPR_Raster: EPR_Magic magic EPR_DataTypeId data_type uint elem_size uint source_width uint source_height uint source_step_x uint source_step_y uint raster_width uint raster_height void* buffer struct EPR_ProductId: EPR_Magic magic char* file_path FILE* istream uint tot_size uint scene_width uint scene_height char* id_string EPR_Record* mph_record EPR_Record* sph_record EPR_PtrArray* dsd_array EPR_PtrArray* record_info_cache EPR_PtrArray* param_table EPR_PtrArray* dataset_ids EPR_PtrArray* band_ids int meris_iodd_version struct EPR_DatasetId: EPR_Magic magic EPR_ProductId* product_id char* dsd_name EPR_DSD* dsd char* dataset_name #struct RecordDescriptor* record_descriptor EPR_SRecordInfo* record_info char* description struct EPR_DatasetRef: EPR_DatasetId* dataset_id int field_index # -1 if not used int elem_index # -1 if not used struct EPR_BandId: EPR_Magic magic EPR_ProductId* product_id char* band_name int spectr_band_index EPR_DatasetRef dataset_ref EPR_SampleModel sample_model EPR_DataTypeId data_type EPR_ScalingMethod scaling_method float scaling_offset float scaling_factor char* bm_expr EPR_SPtrArray* flag_coding char* unit char* description epr_boolean lines_mirrored # @TODO: improve logging and error management (--> custom handlers) # logging and error handling function pointers ctypedef void (*EPR_FLogHandler)(EPR_ELogLevel, char*) ctypedef void (*EPR_FErrHandler)(EPR_EErrCode, char*) # logging int epr_set_log_level(EPR_ELogLevel) void epr_set_log_handler(EPR_FLogHandler) void epr_log_message(EPR_ELogLevel, char*) # error handling void epr_set_err_handler(EPR_FErrHandler) EPR_EErrCode epr_get_last_err_code() const char* epr_get_last_err_message() void epr_clear_err() # API initialization/finalization int epr_init_api(EPR_ELogLevel, EPR_FLogHandler, EPR_FErrHandler) void epr_close_api() # DATATYPE uint epr_get_data_type_size(EPR_EDataTypeId) const char* epr_data_type_id_to_str(EPR_EDataTypeId) # open products EPR_SProductId* epr_open_product(char*) # PRODUCT int epr_close_product(EPR_SProductId*) uint epr_get_scene_width(EPR_SProductId*) uint epr_get_scene_height(EPR_SProductId*) uint epr_get_num_datasets(EPR_SProductId*) EPR_SDatasetId* epr_get_dataset_id_at(EPR_SProductId*, uint) EPR_SDatasetId* epr_get_dataset_id(EPR_SProductId*, char*) uint epr_get_num_dsds(EPR_SProductId*) EPR_SDSD* epr_get_dsd_at(EPR_SProductId*, uint) EPR_SRecord* epr_get_mph(EPR_SProductId*) EPR_SRecord* epr_get_sph(EPR_SProductId*) uint epr_get_num_bands(EPR_SProductId*) EPR_SBandId* epr_get_band_id_at(EPR_SProductId*, uint) EPR_SBandId* epr_get_band_id(EPR_SProductId*, char*) int epr_read_bitmask_raster(EPR_SProductId*, char*, int, int, EPR_SRaster*) # DATASET const char* epr_get_dataset_name(EPR_SDatasetId*) const char* epr_get_dsd_name(EPR_SDatasetId*) uint epr_get_num_records(EPR_SDatasetId*) EPR_SDSD* epr_get_dsd(EPR_SDatasetId*) EPR_SRecord* epr_create_record(EPR_SDatasetId*) EPR_SRecord* epr_read_record(EPR_SDatasetId*, uint, EPR_SRecord*) # RECORD void epr_free_record(EPR_SRecord*) uint epr_get_num_fields(EPR_SRecord*) void epr_print_record(EPR_SRecord*, FILE*) void epr_print_element(EPR_SRecord*, uint, uint, FILE*) void epr_dump_record(EPR_SRecord*) void epr_dump_element(EPR_SRecord*, uint, uint) EPR_SField* epr_get_field(EPR_SRecord*, char*) EPR_SField* epr_get_field_at(EPR_SRecord*, uint) # FIELD void epr_print_field(EPR_SField*, FILE*) void epr_dump_field(EPR_SField*) const char* epr_get_field_unit(EPR_SField*) const char* epr_get_field_description(EPR_SField*) uint epr_get_field_num_elems(EPR_SField*) const char* epr_get_field_name(EPR_SField*) EPR_EDataTypeId epr_get_field_type(EPR_SField*) char epr_get_field_elem_as_char(EPR_SField*, uint) uchar epr_get_field_elem_as_uchar(EPR_SField*, uint) short epr_get_field_elem_as_short(EPR_SField*, uint) ushort epr_get_field_elem_as_ushort(EPR_SField*, uint) int epr_get_field_elem_as_int(EPR_SField*, uint) uint epr_get_field_elem_as_uint(EPR_SField*, uint) float epr_get_field_elem_as_float(EPR_SField*, uint) double epr_get_field_elem_as_double(EPR_SField*, uint) const char* epr_get_field_elem_as_str(EPR_SField*) EPR_STime* epr_get_field_elem_as_mjd(EPR_SField*) const char* epr_get_field_elems_char(EPR_SField*) uchar* epr_get_field_elems_uchar(EPR_SField*) short* epr_get_field_elems_short(EPR_SField*) ushort* epr_get_field_elems_ushort(EPR_SField*) int* epr_get_field_elems_int(EPR_SField*) uint* epr_get_field_elems_uint(EPR_SField*) float* epr_get_field_elems_float(EPR_SField*) double* epr_get_field_elems_double(EPR_SField*) uint epr_copy_field_elems_as_ints(EPR_SField*, int*, uint) uint epr_copy_field_elems_as_uints(EPR_SField*, uint*, uint) uint epr_copy_field_elems_as_floats(EPR_SField*, float*, uint) uint epr_copy_field_elems_as_doubles(EPR_SField*, double*, uint) # BAND const char* epr_get_band_name(EPR_SBandId*) EPR_SRaster* epr_create_compatible_raster(EPR_SBandId*, uint, uint, uint, uint) int epr_read_band_raster(EPR_SBandId*, int, int, EPR_SRaster*) # RASTER void epr_free_raster(EPR_SRaster*) uint epr_get_raster_width(EPR_SRaster*) uint epr_get_raster_height(EPR_SRaster*) uint epr_get_raster_elem_size(EPR_SRaster*) uint epr_get_pixel_as_uint(EPR_SRaster*, int, int) int epr_get_pixel_as_int(EPR_SRaster*, int, int) float epr_get_pixel_as_float(EPR_SRaster*, int, int) double epr_get_pixel_as_double(EPR_SRaster*, int, int) void* epr_get_raster_elem_addr(EPR_SRaster*, uint) void* epr_get_raster_pixel_addr(EPR_SRaster*, uint, uint) void* epr_get_raster_line_addr(EPR_SRaster*, uint) EPR_SRaster* epr_create_raster(EPR_EDataTypeId, uint, uint, uint, uint) EPR_SRaster* epr_create_bitmask_raster(uint, uint, uint, uint) # @IMPORTANT: # # the following structures are not part of the public API. # It is not ensured that relative header files are available at build time # (e.g. debian does not install them), so structures are relìplicated here. # It is fundamental to ensure that structures defined here are kept totally # in sync with the one defined in EPR C API. # epr_field.h ctypedef struct EPR_FieldInfo: char* name EPR_EDataTypeId data_type_id uint num_elems char* unit char* description uint tot_size # epr_record.h ctypedef struct EPR_RecordInfo: char* dataset_name EPR_SPtrArray* field_infos uint tot_size pyepr-1.1.3/src/epr.pyx000066400000000000000000002512131414372560000150000ustar00rootroot00000000000000# -*- coding: utf-8 -*- # PyEPR - Python bindings for ENVISAT Product Reader API # # Copyright (C) 2011-2021, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR 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 PyEPR. If not, see . """Python bindings for ENVISAT Product Reader C API. PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_ is fully object oriented and, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: https://avalentino.github.io/pyepr .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int """ __version__ = '1.1.3' from libc cimport errno from libc cimport stdio from libc.stdio cimport FILE from libc cimport string as cstring IF UNAME_SYSNAME == 'Windows': cdef extern from "stdio.h" nogil: int fileno "_fileno" (FILE*) ELSE: # posix cdef extern from "stdio.h" nogil: int fileno(FILE*) from epr cimport * from cpython.object cimport PyObject_AsFileDescriptor from cpython.weakref cimport PyWeakref_NewRef cimport numpy as np np.import_array() import os import sys import atexit import warnings # COMPATIBILITY from collections import namedtuple import numpy as np cdef bint SWAP_BYTES = (sys.byteorder == 'little') # internal utils _DEFAULT_FS_ENCODING = sys.getfilesystemencoding() cdef inline bytes _to_bytes(str s, encoding='UTF-8'): return s.encode(encoding) cdef inline str _to_str(bytes b, encoding='UTF-8'): return b.decode(encoding) # utils EPRTime = namedtuple('EPRTime', ('days', 'seconds', 'microseconds')) MJD = np.dtype([ ('days', 'i%d' % sizeof(int)), ('seconds', 'u%d' % sizeof(uint)), ('microseconds', 'u%d' % sizeof(uint)), ]) EPR_C_API_VERSION = _to_str(EPR_PRODUCT_API_VERSION_STR, 'ascii') # EPR_DataTypeId E_TID_UNKNOWN = e_tid_unknown E_TID_UCHAR = e_tid_uchar E_TID_CHAR = e_tid_char E_TID_USHORT = e_tid_ushort E_TID_SHORT = e_tid_short E_TID_UINT = e_tid_uint E_TID_INT = e_tid_int E_TID_FLOAT = e_tid_float E_TID_DOUBLE = e_tid_double E_TID_STRING = e_tid_string E_TID_SPARE = e_tid_spare E_TID_TIME = e_tid_time # EPR_SampleModel E_SMOD_1OF1 = e_smod_1OF1 E_SMOD_1OF2 = e_smod_1OF2 E_SMOD_2OF2 = e_smod_2OF2 E_SMOD_3TOI = e_smod_3TOI E_SMOD_2TOF = e_smod_2TOF # EPR_ScalingMethod E_SMID_NON = e_smid_non E_SMID_LIN = e_smid_lin E_SMID_LOG = e_smid_log # EPR magic IDs _EPR_MAGIC_PRODUCT_ID = EPR_MAGIC_PRODUCT_ID _EPR_MAGIC_DATASET_ID = EPR_MAGIC_DATASET_ID _EPR_MAGIC_BAND_ID = EPR_MAGIC_BAND_ID _EPR_MAGIC_RECORD = EPR_MAGIC_RECORD _EPR_MAGIC_FIELD = EPR_MAGIC_FIELD _EPR_MAGIC_RASTER = EPR_MAGIC_RASTER _EPR_MAGIC_FLAG_DEF = EPR_MAGIC_FLAG_DEF cdef np.NPY_TYPES _epr_to_numpy_type_id(EPR_DataTypeId epr_type): if epr_type == e_tid_uchar: return np.NPY_UBYTE if epr_type == e_tid_char: return np.NPY_BYTE if epr_type == e_tid_ushort: return np.NPY_USHORT if epr_type == e_tid_short: return np.NPY_SHORT if epr_type == e_tid_uint: return np.NPY_UINT if epr_type == e_tid_int: return np.NPY_INT if epr_type == e_tid_float: return np.NPY_FLOAT if epr_type == e_tid_double: return np.NPY_DOUBLE if epr_type == e_tid_string: return np.NPY_STRING return np.NPY_NOTYPE _DTYPE_MAP = { E_TID_UCHAR: np.uint8, E_TID_CHAR: np.int8, E_TID_USHORT: np.uint16, E_TID_SHORT: np.int16, E_TID_UINT: np.uint32, E_TID_INT: np.int32, E_TID_FLOAT: np.float32, E_TID_DOUBLE: np.float64, E_TID_STRING: np.bytes_, E_TID_TIME: MJD, E_TID_SPARE: None, E_TID_UNKNOWN: None, } _METHOD_MAP = { E_SMID_NON: 'NONE', E_SMID_LIN: 'LIN', E_SMID_LOG: 'LOG', } _MODEL_MAP = { E_SMOD_1OF1: '1OF1', E_SMOD_1OF2: '1OF2', E_SMOD_2OF2: '2OF2', E_SMOD_3TOI: '3TOI', E_SMOD_2TOF: '2TOF', } ctypedef fused T: np.uint8_t np.int8_t np.uint16_t np.int16_t np.uint32_t np.int32_t np.float32_t np.float64_t np.npy_byte cdef const void* _view_to_ptr(T[:] a): return &a[0] cdef const void* _to_ptr(np.ndarray a, EPR_DataTypeId etype): cdef const void *p = NULL if etype == e_tid_uchar: p = _view_to_ptr[np.uint8_t](a) elif etype == e_tid_char: p = _view_to_ptr[np.int8_t](a) elif etype == e_tid_ushort: p = _view_to_ptr[np.uint16_t](a) elif etype == e_tid_short: p = _view_to_ptr[np.int16_t](a) elif etype == e_tid_uint: p = _view_to_ptr[np.uint32_t](a) elif etype == e_tid_int: p = _view_to_ptr[np.int32_t](a) elif etype == e_tid_float: p = _view_to_ptr[np.float32_t](a) elif etype == e_tid_double: p = _view_to_ptr[np.float64_t](a) elif etype == e_tid_string: p = _view_to_ptr[np.npy_byte](a) else: raise ValueError('unexpected type ID: %d' % etype) return p class EPRError(Exception): """EPR API error.""" def __init__(self, message='', code=None, *args, **kargs): """__init__(self, message='', code=None, *args, **kargs)""" super(EPRError, self).__init__(message, code, *args, **kargs) #: EPR API error code self.code = code class EPRValueError(EPRError, ValueError): pass cdef pyepr_check_errors(): cdef int code cdef str msg code = epr_get_last_err_code() if code != e_err_none: msg = _to_str(epr_get_last_err_message(), 'ascii') epr_clear_err() # @TODO: if not msg: msg = EPR_ERR_MSG[code] if (e_err_invalid_product_id <= code <= e_err_invalid_keyword_name or code in (e_err_null_pointer, e_err_illegal_arg, e_err_index_out_of_range)): raise EPRValueError(msg, code) else: raise EPRError(msg, code) cdef pyepr_null_ptr_error(str msg='null pointer'): cdef int code cdef str eprmsg = _to_str(epr_get_last_err_message(), 'ascii') code = epr_get_last_err_code() epr_clear_err() raise EPRValueError('%s: %s' % (msg, eprmsg), code=code if code else None) # https://stackoverflow.com/questions/1603916/close-a-file-pointer-without-closing-the-underlying-file-descriptor cdef FILE* pyepr_get_file_stream(object ostream) except NULL: # The returned stream can be safely closed cdef FILE* fstream = NULL cdef int fileno = -1 if ostream is None: ostream = sys.stdout try: ostream.flush() except AttributeError as exc: raise TypeError(str(exc)) else: fileno = PyObject_AsFileDescriptor(ostream) if fileno == -1: raise TypeError('bad output stream') else: fileno = os.dup(fileno) if fileno == -1: raise TypeError('bad output stream') else: fstream = stdio.fdopen(fileno, 'a+') if fstream is NULL: errno.errno = 0 raise TypeError('invalid ostream') return fstream cdef class _CLib: """Library object to handle C API initialization/finalization. .. warning:: this is meant for internal use only. **Do not use it**. """ def __cinit__(self, *args, **kwargs): cdef bytes msg # @TODO: check # if EPR_C_API_VERSION != '2.2': # raise ImportError( # 'C library version not supported: "%s"' % EPR_C_API_VERSION) # if epr_init_api(e_log_warning, epr_log_message, NULL): if epr_init_api(e_log_warning, NULL, NULL): msg = epr_get_last_err_message() epr_clear_err() raise ImportError('unable to inizialize EPR API library: ' '%s' % _to_str(msg, 'ascii')) def __dealloc__(self): epr_close_api() def __init__(self): raise TypeError('"%s" class cannot be instantiated from Python' % self.__class__.__name__) # global _CLib instance cdef _CLib _EPR_C_LIB = None cdef class EprObject: cdef object epr_c_lib def __cinit__(self, *ars, **kargs): self.epr_c_lib = _EPR_C_LIB def __dealloc__(self): self.epr_c_lib = None def __init__(self): raise TypeError('"%s" class cannot be instantiated from Python' % self.__class__.__name__) cpdef get_numpy_dtype(EPR_EDataTypeId type_id): """get_numpy_dtype(epr_type) Return the numpy datatype specified EPR type ID. """ try: return _DTYPE_MAP[type_id] except KeyError: raise ValueError('invalid EPR type ID: %d' % type_id) cpdef uint get_data_type_size(EPR_EDataTypeId type_id): """get_data_type_size(type_id) Gets the size in bytes for an element of the given data type. """ return epr_get_data_type_size(type_id) cpdef str data_type_id_to_str(EPR_EDataTypeId type_id): """data_type_id_to_str(type_id) Gets the 'C' data type string for the given data type. """ cdef char* type_id_str = epr_data_type_id_to_str(type_id) return _to_str(type_id_str, 'ascii') cpdef str get_scaling_method_name(EPR_ScalingMethod method): """get_scaling_method_name(method) Return the name of the specified scaling method. """ try: return _METHOD_MAP[method] except KeyError: raise ValueError('invalid scaling method: "%s"' % method) cpdef str get_sample_model_name(EPR_SampleModel model): """get_sample_model_name(model) Return the name of the specified sample model. """ try: return _MODEL_MAP[model] except KeyError: raise ValueError('invalid sample model: "%s"' % model) cdef class DSD(EprObject): """Dataset descriptor. The DSD class contains information about the properties of a dataset and its location within an ENVISAT product file. """ cdef EPR_SDSD* _ptr cdef object _parent # Dataset or Product cdef inline check_closed_product(self): if isinstance(self, Dataset): (self._parent).check_closed_product() else: # elif isinstance(self, Product): (self._parent).check_closed_product() property index: """The index of this DSD (zero-based).""" def __get__(self): self.check_closed_product() return self._ptr.index property ds_name: """The dataset name.""" def __get__(self): self.check_closed_product() return _to_str(self._ptr.ds_name, 'ascii') property ds_type: """The dataset type descriptor.""" def __get__(self): self.check_closed_product() return _to_str(self._ptr.ds_type, 'ascii') property filename: """The filename in the DDDB with the description of this dataset.""" def __get__(self): self.check_closed_product() return _to_str(self._ptr.filename, 'ascii') property ds_offset: """The offset of dataset-information the product file.""" def __get__(self): self.check_closed_product() return self._ptr.ds_offset property ds_size: """The size of dataset-information in dataset product file.""" def __get__(self): self.check_closed_product() return self._ptr.ds_size property num_dsr: """The number of dataset records for the given dataset name.""" def __get__(self): self.check_closed_product() return self._ptr.num_dsr property dsr_size: """The size of dataset record for the given dataset name.""" def __get__(self): self.check_closed_product() return self._ptr.dsr_size # --- high level interface ------------------------------------------------ def __repr__(self): return 'epr.DSD("%s")' % self.ds_name def __eq__(self, other): cdef EPR_SDSD* p1 = NULL cdef EPR_SDSD* p2 = NULL if isinstance(other, self.__class__): p1 = (self)._ptr p2 = (other)._ptr if p1 == p2: return True (self).check_closed_product() return ((p1.index == p2.index) and (p1.ds_offset == p2.ds_offset) and (p1.ds_size == p2.ds_size) and (p1.num_dsr == p2.num_dsr) and (p1.dsr_size == p2.dsr_size)and (cstring.strcmp(p1.ds_name, p2.ds_name) == 0) and (cstring.strcmp(p1.ds_type, p2.ds_type) == 0) and (cstring.strcmp(p1.filename, p2.filename) == 0)) return NotImplemented # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): self.check_closed_product() return self._ptr.magic cdef new_dsd(EPR_SDSD* ptr, EprObject parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef DSD instance = DSD.__new__(DSD) instance._ptr = ptr instance._parent = parent # Dataset or Product return instance cdef class Field(EprObject): """Represents a field within a record. A field is composed of one or more data elements of one of the types defined in the internal ``field_info`` structure. .. seealso:: :class:`Record` """ cdef EPR_SField* _ptr cdef Record _parent cdef inline check_closed_product(self): self._parent.check_closed_product() cdef inline _check_write_mode(self): self._parent._check_write_mode() cdef long _get_offset(self, bint absolute=0) except -1: cdef bint found = 0 cdef int i = 0 cdef int num_fields_in_record = 0 cdef long offset = 0 cdef const char* name = NULL cdef const EPR_Field* field = NULL cdef const EPR_FieldInfo* info = NULL cdef const EPR_Record* record = NULL info = self._ptr.info name = info.name record = self._parent._ptr num_fields_in_record = epr_get_num_fields(record) for i in range(num_fields_in_record): field = epr_get_field_at(record, i) info = field.info if info.name == name: found = 1 break offset += info.tot_size if not found: raise EPRError('inable to compute field offset') elif absolute: offset += self._parent._get_offset(absolute) return offset def print(self, ostream=None): """print(self, ostream=None) Write the field to specified file (default: :data:`sys.stdout`). This method writes formatted contents of the field to specified *ostream* text file or (default) the ASCII output is be printed to standard output (:data:`sys.stdout`). :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances """ cdef FILE* fstream = NULL self.check_closed_product() fstream = pyepr_get_file_stream(ostream) with nogil: epr_print_field(self._ptr, fstream) stdio.fflush(fstream) stdio.fclose(fstream) pyepr_check_errors() def print_(self, ostream=None): # COMPATIBILITY warnings.warn( 'the "print_" method is deprecated, please use "print" instead', DeprecationWarning) return self.print(ostream=ostream) # def dump_field(self): # epr_dump_field(self._ptr) # pyepr_check_errors() def get_unit(self): """get_unit(self) Gets the unit of the field. """ cdef const char* unit = NULL self.check_closed_product() unit = epr_get_field_unit(self._ptr) if unit is NULL: return '' else: return _to_str(unit, 'ascii') def get_description(self): """get_description(self) Gets the description of the field. """ cdef char* description = NULL self.check_closed_product() description = epr_get_field_description(self._ptr) return _to_str(description, 'ascii') def get_num_elems(self): """get_num_elems(self) Gets the number of elements of the field. """ self.check_closed_product() return epr_get_field_num_elems(self._ptr) def get_name(self): """get_name(self) Gets the name of the field. """ cdef char* name = NULL self.check_closed_product() name = epr_get_field_name(self._ptr) return _to_str(name, 'ascii') def get_type(self): """get_type(self) Gets the type of the field. """ self.check_closed_product() return epr_get_field_type(self._ptr) def get_elem(self, uint index=0): """get_elem(self, index=0) Field single element access. This function is for getting the elements of a field. :param index: the zero-based index of element to be returned, must not be negative :returns: the typed value from given field """ cdef EPR_STime* eprtime self.check_closed_product() etype = epr_get_field_type(self._ptr) if etype == e_tid_uchar: val = epr_get_field_elem_as_uchar(self._ptr, index) elif etype == e_tid_char: val = epr_get_field_elem_as_char(self._ptr, index) elif etype == e_tid_ushort: val = epr_get_field_elem_as_ushort(self._ptr, index) elif etype == e_tid_short: val = epr_get_field_elem_as_short(self._ptr, index) elif etype == e_tid_uint: val = epr_get_field_elem_as_uint(self._ptr, index) elif etype == e_tid_int: val = epr_get_field_elem_as_int(self._ptr, index) elif etype == e_tid_float: val = epr_get_field_elem_as_float(self._ptr, index) elif etype == e_tid_double: val = epr_get_field_elem_as_double(self._ptr, index) elif etype == e_tid_string: if index != 0: raise ValueError('invalid index: %d' % index) val = epr_get_field_elem_as_str(self._ptr) # elif etype == e_tid_spare: # val = epr_get_field_elem_as_str(self._ptr) elif etype == e_tid_time: if index != 0: raise ValueError('invalid index: %d' % index) # use casting to silence warnings eprtime = epr_get_field_elem_as_mjd(self._ptr) val = EPRTime(eprtime.days, eprtime.seconds, eprtime.microseconds) else: raise ValueError('invalid field type') pyepr_check_errors() return val def get_elems(self): """get_elems(self) Field array element access. This function is for getting an array of field elements of the field. :returns: the data array (:class:`numpy.ndarray`) having the type of the field """ cdef void* buf = NULL cdef int nd = 1 cdef np.npy_intp shape[1] cdef np.ndarray out cdef EPR_Time* t = NULL cdef np.NPY_TYPES dtype self.check_closed_product() shape[0] = epr_get_field_num_elems(self._ptr) etype = epr_get_field_type(self._ptr) msg = 'Filed("%s") elems pointer is null' % self.get_name() if etype == e_tid_time: if shape[0] != 1: raise ValueError( 'unexpected number of elements: %d' % shape[0]) t = epr_get_field_elem_as_mjd(self._ptr) if t is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(1, MJD) out[0]['days'] = t.days out[0]['seconds'] = t.seconds out[0]['microseconds'] = t.microseconds return out if etype == e_tid_uchar: dtype = np.NPY_UBYTE buf = epr_get_field_elems_uchar(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_char: dtype = np.NPY_BYTE buf = epr_get_field_elems_char(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_ushort: dtype = np.NPY_USHORT buf = epr_get_field_elems_ushort(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_short: dtype = np.NPY_SHORT buf = epr_get_field_elems_short(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_uint: dtype = np.NPY_UINT buf = epr_get_field_elems_uint(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_int: dtype = np.NPY_INT buf = epr_get_field_elems_int(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_float: dtype = np.NPY_FLOAT buf = epr_get_field_elems_float(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_double: dtype = np.NPY_DOUBLE buf = epr_get_field_elems_double(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) elif etype == e_tid_string: if shape[0] != 1: raise ValueError( 'unexpected number of elements: %d' % shape[0]) nd = 0 dtype = np.NPY_STRING buf = epr_get_field_elem_as_str(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) # elif etype == e_tid_unknown: # pass # elif etype = e_tid_spare: # pass else: raise ValueError('invalid field type') out = np.PyArray_SimpleNewFromData(nd, shape, dtype, buf) # np.PyArray_CLEARFLAG(out, NPY_ARRAY_WRITEABLE) # new in numpy 1.7 # Make the ndarray keep a reference to this object np.set_array_base(out, self) return out cdef _set_elems(self, np.ndarray elems, uint index=0): cdef Record record cdef Dataset dataset cdef Product product cdef FILE* istream cdef size_t ret cdef size_t nelems cdef size_t elemsize cdef size_t datasize cdef long file_offset cdef long field_offset cdef char* buf cdef EPR_DataTypeId etype = epr_get_field_type(self._ptr) cdef const void* p = NULL dtype = _DTYPE_MAP[etype] elems = np.ascontiguousarray(elems, dtype=dtype) record = self._parent dataset = record._parent product = dataset._parent istream = product._ptr.istream nelems = elems.size elemsize = epr_get_data_type_size(etype) datasize = elemsize * nelems field_offset = index * elemsize file_offset = self._get_offset(absolute=1) buf = self._ptr.elems + field_offset p = _to_ptr(elems, etype) with nogil: cstring.memcpy(buf, p, datasize) if SWAP_BYTES: elems = elems.byteswap() p = _to_ptr(elems, etype) with nogil: stdio.fseek(istream, file_offset + field_offset, stdio.SEEK_SET) ret = stdio.fwrite(p, elemsize, nelems, product._ptr.istream) if ret != nelems: raise IOError( 'write error: %d of %d bytes written' % (ret, datasize)) def set_elem(self, elem, uint index=0): """set_elem(self, elem, index=0) Set Field array element. This function is for setting an array of field element of the field. :param elem: value of the element to set :param index: the zero-based index of element to be set, must not be negative. Default: 0. """ self.check_closed_product() self._check_write_mode() if self._parent.index is None: raise NotImplementedError( 'setting elements is not implemented on MPH/SPH records') elem = np.asarray(elem) if elem.size != 1: raise ValueError( 'invalid shape "%s", scalar value expected' % elem.shape) self._set_elems(elem, index) def set_elems(self, elems): """set_elems(self, elems) Set Field array elements. This function is for setting an array of field elements of the field. :param elems: np.ndarray of elements to set """ cdef uint nelems self.check_closed_product() self._check_write_mode() if self._parent._index is None: raise NotImplementedError( 'setting elements is not implemented on MPH/SPH records') elems = np.ascontiguousarray(elems) nelems = epr_get_field_num_elems(self._ptr) if elems.ndim > 1 or elems.size != nelems: raise ValueError('invalid shape "%s", "(%s,)" value expected' % ( elems.shape, nelems)) self._set_elems(elems) property tot_size: """The total size in bytes of all data elements of a field. *tot_size* is a derived variable, it is computed at runtime and not stored in the DSD-DB. """ def __get__(self): cdef EPR_FieldInfo* info = self._ptr.info return info.tot_size # --- high level interface ------------------------------------------------ def __repr__(self): return 'epr.Field("%s") %d %s elements' % (self.get_name(), self.get_num_elems(), data_type_id_to_str(self.get_type())) def __str__(self): cdef object name = self.get_name() cdef EPR_DataTypeId type_ = self.get_type() cdef int num_elems = 0 if type_ == e_tid_string: return '%s = "%s"' % (name, self.get_elem().decode('utf-8')) elif type_ == e_tid_time: days, seconds, microseconds = self.get_elem() return '%s = {d=%d, j=%d, m=%d}' % (name, days, seconds, microseconds) else: num_elems = epr_get_field_num_elems(self._ptr) if type_ == e_tid_uchar: fmt = '%u' elif type_ == e_tid_char: fmt = '%d' elif type_ == e_tid_ushort: fmt = '%u' elif type_ == e_tid_short: fmt = '%d' elif type_ == e_tid_uint: fmt = '%u' elif type_ == e_tid_int: fmt = '%d' elif type_ == e_tid_float: fmt = '%f' elif type_ == e_tid_double: fmt = '%f' else: if num_elems > 1: data = ['<>'] * num_elems data = ', '.join(data) return '%s = {%s}' % (name, data) else: return '%s = <>' % name if num_elems > 1: data = ', '.join([fmt % item for item in self.get_elems()]) return '%s = {%s}' % (name, data) else: return '%s = %s' % (name, fmt % self.get_elem()) def __eq__(self, other): cdef size_t n = 0 cdef EPR_SField* p1 = NULL cdef EPR_SField* p2 = NULL if isinstance(other, self.__class__): p1 = (self)._ptr p2 = (other)._ptr if p1 == p2: return True (self).check_closed_product() if ((epr_get_field_num_elems(p1) != epr_get_field_num_elems(p2)) or (epr_get_field_type(p1) != epr_get_field_type(p2)) or (cstring.strcmp(epr_get_field_unit(p1), epr_get_field_unit(p2)) != 0) or (cstring.strcmp(epr_get_field_description(p1), epr_get_field_description(p2)) != 0) or (cstring.strcmp(epr_get_field_name(p1), epr_get_field_name(p2)) != 0)): return False n = epr_get_data_type_size(epr_get_field_type(p1)) if n != 0: n *= epr_get_field_num_elems(p1) # pyepr_check_errors() if n <= 0: # @TODO: check return True return (cstring.memcmp(p1.elems, p2.elems, n) == 0) return NotImplemented def __len__(self): self.check_closed_product() if epr_get_field_type(self._ptr) == e_tid_string: return cstring.strlen(epr_get_field_elem_as_str(self._ptr)) else: return epr_get_field_num_elems(self._ptr) # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): self.check_closed_product() return self._ptr.magic def get_offset(self): """Field offset in bytes within the Record.""" self.check_closed_product() return self._get_offset() cdef new_field(EPR_SField* ptr, Record parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Field instance = Field.__new__(Field) instance._ptr = ptr instance._parent = parent return instance cdef class Record(EprObject): """Represents a record read from an ENVISAT dataset. A record is composed of multiple fields. .. seealso:: :class:`Field` """ cdef EPR_SRecord* _ptr cdef object _parent # Dataset or Product cdef bint _dealloc cdef int _index def __dealloc__(self): if not self._dealloc: return if self._ptr is not NULL: epr_free_record(self._ptr) pyepr_check_errors() cdef inline check_closed_product(self): if isinstance(self._parent, Dataset): (self._parent).check_closed_product() else: # elif isinstance(self._parent, Product): (self._parent).check_closed_product() cdef inline _check_write_mode(self): if isinstance(self._parent, Dataset): (self._parent)._check_write_mode() else: # elif isinstance(self._parent, Product): (self._parent)._check_write_mode() cdef inline uint _get_offset(self, bint absolure=0): cdef EPR_RecordInfo* info = self._ptr.info cdef uint offset = self._index * info.tot_size # assert self._index is not None if absolure: offset += (self._parent)._get_offset() return offset def get_num_fields(self): """get_num_fields(self) Gets the number of fields contained in the record. """ return epr_get_num_fields(self._ptr) def print(self, ostream=None): """print(self, ostream=None) Write the record to specified file. This method writes formatted contents of the record to specified *ostream* text file or (default) the ASCII output is be printed to standard output (:data:`sys.stdout`). :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances """ cdef FILE* fstream = NULL self.check_closed_product() fstream = pyepr_get_file_stream(ostream) with nogil: epr_print_record(self._ptr, fstream) stdio.fflush(fstream) stdio.fclose(fstream) pyepr_check_errors() def print_(self, ostream=None): # COMPATIBILITY warnings.warn( 'the "print_" method is deprecated, please use "print" instead', DeprecationWarning) return self.print(ostream=ostream) def print_element(self, uint field_index, uint element_index, ostream=None): """print_element(self, field_index, element_index, ostream=None) Write the specified field element to file. This method writes formatted contents of the specified field element to the *ostream* text file or (default) the ASCII output will be printed to standard output (:data:`sys.stdout`). :param field_index: the index of field in the record :param element_index: the index of element in the specified field :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances. """ cdef FILE* fstream = NULL self.check_closed_product() fstream = pyepr_get_file_stream(ostream) with nogil: epr_print_element(self._ptr, field_index, element_index, fstream) stdio.fflush(fstream) stdio.fclose(fstream) pyepr_check_errors() def get_field(self, str name): """get_field(self, name) Gets a field specified by name. The field is here identified through the given name. It contains the field info and all corresponding values. :param name: the the name of required field :returns: the specified :class:`Field` or raises an exception (:exc:`EPRValueError`) if an error occurred """ cdef EPR_SField* field_ptr cdef bytes cname = _to_bytes(name) self.check_closed_product() field_ptr = epr_get_field(self._ptr, cname) if field_ptr is NULL: pyepr_null_ptr_error('unable to get field "%s"' % name) return new_field(field_ptr, self) def get_field_at(self, uint index): """get_field_at(self, index) Gets a field at the specified position within the record. :param index: the zero-based index (position within record) of the field :returns: the field or raises and exception (:exc:`EPRValueError`) if an error occurred """ cdef EPR_SField* field_ptr self.check_closed_product() field_ptr = epr_get_field_at(self._ptr, index) if field_ptr is NULL: pyepr_null_ptr_error('unable to get field at index %d' % index) return new_field(field_ptr, self) property dataset_name: """The name of the dataset to which this record belongs to.""" def __get__(self): self.check_closed_product() cdef EPR_RecordInfo* info = self._ptr.info if info.dataset_name == NULL: return '' else: return _to_str(info.dataset_name) property tot_size: """The total size in bytes of the record. It includes all data elements of all fields of a record in a product file. *tot_size* is a derived variable, it is computed at runtime and not stored in the DSD-DB. """ def __get__(self): self.check_closed_product() cdef EPR_RecordInfo* info = self._ptr.info return info.tot_size property index: """Index of the record within the dataset. It is *None* for empty records (created with :meth:`Dataset.create_record` but still not read) and for *MPH* (see :meth:`epr.Product.get_mph`) and *SPH* (see :meth:`epr.Product.get_sph`) records. .. seealso:: :meth:`epr.Dataset.read_record` """ def __get__(self): return self._index if self._index >= 0 else None # --- high level interface ------------------------------------------------ def get_field_names(self): """get_field_names(self) Return the list of names of the fields in the product. .. note:: this method has no correspondent in the C API. """ cdef EPR_SField* field_ptr cdef int idx cdef char* name cdef int num_fields self.check_closed_product() num_fields = epr_get_num_fields(self._ptr) names = [] for idx in range(num_fields): field_ptr = epr_get_field_at(self._ptr, idx) name = epr_get_field_name(field_ptr) names.append(_to_str(name, 'ascii')) return names def fields(self): """fields(self) Return the list of fields contained in the record. """ return list(self) def __iter__(self): cdef int idx cdef int num_fields self.check_closed_product() num_fields = epr_get_num_fields(self._ptr) return (self.get_field_at(idx) for idx in range(num_fields)) def __str__(self): self.check_closed_product() return '\n'.join(map(str, self)) def __repr__(self): self.check_closed_product() return '%s %d fields' % (super(Record, self).__repr__(), self.get_num_fields()) # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): self.check_closed_product() return self._ptr.magic def get_offset(self): """Record offset in bytes within the Dataset.""" if self._index >= 0: self.check_closed_product() return self._get_offset() else: return None cdef new_record(EPR_SRecord* ptr, EprObject parent=None, bint dealloc=False): if ptr is NULL: pyepr_null_ptr_error() cdef Record instance = Record.__new__(Record) instance._ptr = ptr instance._parent = parent # Dataset or Product instance._dealloc = dealloc instance._index = -1 return instance cdef class Raster(EprObject): """Represents a raster in which data will be stored. All 'size' parameter are in PIXEL. """ cdef EPR_SRaster* _ptr cdef Band _parent cdef object _data def __dealloc__(self): if self._ptr is not NULL: epr_free_raster(self._ptr) property data_type: """The data type of the band's pixels. All ``E_TID_*`` types are possible. """ def __get__(self): return self._ptr.data_type property source_width: """The width of the source.""" def __get__(self): return self._ptr.source_width property source_height: """The height of the source.""" def __get__(self): return self._ptr.source_height property source_step_x: """The sub-sampling for the across-track direction in pixel.""" def __get__(self): return self._ptr.source_step_x property source_step_y: """The sub-sampling for the along-track direction in pixel.""" def __get__(self): return self._ptr.source_step_y def get_width(self): """get_width(self) Gets the raster's width in pixels. """ return epr_get_raster_width(self._ptr) def get_height(self): """get_height(self) Gets the raster's height in pixels. """ return epr_get_raster_height(self._ptr) def get_elem_size(self): """get_elem_size(self) The size in byte of a single element (sample) of this raster's buffer. """ return epr_get_raster_elem_size(self._ptr) def get_pixel(self, int x, int y): """get_pixel(x, y) Single pixel access. This function is for getting the values of the elements of a raster (i.e. pixel). :param x: the (zero-based) X coordinate of the pixel :param y: the (zero-based) Y coordinate of the pixel :returns: the typed value at the given co-ordinate """ if (x < 0 or x >= self._ptr.raster_width or y < 0 or y >= self._ptr.raster_height): raise ValueError('index out of range: x=%d, y=%d' % (x, y)) cdef EPR_EDataTypeId dtype = self._ptr.data_type if dtype == e_tid_uint: val = epr_get_pixel_as_uint(self._ptr, x, y) elif dtype == e_tid_int: val = epr_get_pixel_as_int(self._ptr, x, y) elif dtype == e_tid_float: val = epr_get_pixel_as_float(self._ptr, x, y) elif dtype == e_tid_double: val = epr_get_pixel_as_double(self._ptr, x, y) else: raise ValueError('invalid data type: "%s"' % epr_data_type_id_to_str(dtype)) pyepr_check_errors() # @TODO: check return val # --- high level interface ------------------------------------------------ cdef np.ndarray toarray(self): cdef np.NPY_TYPES dtype = _epr_to_numpy_type_id(self._ptr.data_type) cdef np.npy_intp shape[2] cdef np.ndarray result if dtype == np.NPY_NOTYPE: raise TypeError('invalid data type') else: shape[0] = self._ptr.raster_height shape[1] = self._ptr.raster_width result = np.PyArray_SimpleNewFromData(2, shape, dtype, self._ptr.buffer) # Make the ndarray keep a reference to this object np.set_array_base(result, self) return result property data: """Raster data exposed as :class:`numpy.ndarray` object. .. note:: this property shares the data buffer with the :class:`Raster` object so any change in its contents is also reflected to the :class:`Raster` object. """ def __get__(self): cdef object data if self._data is not None: data = self._data() if data is not None: return data if self._ptr.buffer is NULL: return np.ndarray(()) data = self.toarray() self._data = PyWeakref_NewRef(data, None) return data def __repr__(self): return '%s %s (%dL x %dP)' % (super(Raster, self).__repr__(), data_type_id_to_str(self.data_type), self.get_height(), self.get_width()) # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): return self._ptr.magic cdef new_raster(EPR_SRaster* ptr, Band parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Raster instance = Raster.__new__(Raster) instance._ptr = ptr instance._parent = parent # Band or None instance._data = None return instance def create_raster(EPR_EDataTypeId data_type, uint src_width, uint src_height, uint xstep=1, uint ystep=1): """create_raster(data_type, src_width, src_height, xstep=1, ystep=1) Creates a raster of the specified data type. This function can be used to create any type of raster, e.g. for later use as a bit-mask. :param data_type: the type of the data to stored in the raster, must be one of E_TID_* :param src_width: the width (across track dimension) of the source to be read into the raster. See description of :meth:`Band.create_compatible_raster` :param src_height: the height (along track dimension) of the source to be read into the raster. See description of :meth:`Band.create_compatible_raster` :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the new :class:`Raster` instance .. seealso:: description of :meth:`Band.create_compatible_raster` """ if xstep == 0 or ystep == 0: raise ValueError('invalid step: xspet=%d, ystep=%d' % (xstep, ystep)) cdef EPR_SRaster* raster_ptr raster_ptr = epr_create_raster(data_type, src_width, src_height, xstep, ystep) if raster_ptr is NULL: pyepr_null_ptr_error('unable to create a new raster') return new_raster(raster_ptr) def create_bitmask_raster(uint src_width, uint src_height, uint xstep=1, uint ystep=1): """create_bitmask_raster(src_width, src_height, xstep=1, ystep=1) Creates a raster to be used for reading bitmasks. The raster returned always is of type ``byte``. :param src_width: the width (across track dimension) of the source to be read into the raster :param src_height: the height (along track dimension) of the source to be read into the raster :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the new raster instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. seealso:: the description of :meth:`Band.create_compatible_raster` """ if xstep == 0 or ystep == 0: raise ValueError('invalid step: xspet=%d, ystep=%d' % (xstep, ystep)) cdef EPR_SRaster* raster_ptr raster_ptr = epr_create_bitmask_raster(src_width, src_height, xstep, ystep) if raster_ptr is NULL: pyepr_null_ptr_error('unable to create a new raster') return new_raster(raster_ptr) cdef class Band(EprObject): """The band of an ENVISAT product. The Band class contains information about a band within an ENVISAT product file which has been opened with the :func:`open` function. A new Band instance can be obtained with the :meth:`Product.get_band` method. """ cdef EPR_SBandId* _ptr cdef Product _parent cdef inline int check_closed_product(self) except -1: if self._ptr is NULL: raise ValueError('I/O operation on closed file') elif self._parent.check_closed_product() == -1: self._ptr = NULL raise return 0 property product: """The :class:`Product` instance to which this band belongs to.""" def __get__(self): return self._parent property spectr_band_index: """The (zero-based) spectral band index. -1 if this is not a spectral band. """ def __get__(self): self.check_closed_product() return self._ptr.spectr_band_index property sample_model: """The sample model operation. The sample model operation applied to the source dataset for getting the correct samples from the MDS (for example MERIS L2). Possible values are: * ``*`` --> no operation (direct copy) * ``1OF2`` --> first byte of 2-byte interleaved MDS * ``2OF2`` --> second byte of 2-byte interleaved MDS * ``0123`` --> combine 3-bytes interleaved to 4-byte integer """ def __get__(self): self.check_closed_product() return self._ptr.sample_model property data_type: """The data type of the band's pixels. Possible values are: * ``*`` --> the datatype remains unchanged. * ``uint8_t`` --> 8-bit unsigned integer * ``uint32_t`` --> 32-bit unsigned integer * ``Float`` --> 32-bit IEEE floating point """ def __get__(self): self.check_closed_product() return self._ptr.data_type property scaling_method: """Scaling method. The scaling method which must be applied to the raw source data in order to get the 'real' pixel values in geo-physical units. Possible values are: * ``*`` --> no scaling applied * ``Linear_Scale`` --> linear scaling applied:: y = offset + scale * x * ``Log_Scale`` --> logarithmic scaling applied:: y = log10(offset + scale * x) """ def __get__(self): self.check_closed_product() return self._ptr.scaling_method property scaling_offset: """The scaling offset. Possible values are: * ``*`` --> no offset provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]` --> value is provided in global annotation dataset with name ``GADS`` in field ``field``. Optionally a second element index for multiple-element fields can be given too """ def __get__(self): self.check_closed_product() return self._ptr.scaling_offset property scaling_factor: """The scaling factor. Possible values are: * ``*`` --> no factor provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]`` --> value is provided in global annotation dataset with name `GADS` in field `field``. Optionally a second element index for multiple-element fields can be given too """ def __get__(self): self.check_closed_product() return self._ptr.scaling_factor property bm_expr: """A bit-mask expression used to filter valid pixels. All others are set to zero. """ def __get__(self): self.check_closed_product() if self._ptr.bm_expr is NULL: return None else: return _to_str(self._ptr.bm_expr, 'ascii') property unit: """The geophysical unit for the band's pixel values.""" def __get__(self): self.check_closed_product() if self._ptr.unit is NULL: return None else: return _to_str(self._ptr.unit, 'ascii') property description: """A short description of the band's contents.""" def __get__(self): self.check_closed_product() if self._ptr.description is NULL: return None else: return _to_str(self._ptr.description, 'ascii') property lines_mirrored: """Mirrored lines flag. If true (=1) lines will be mirrored (flipped) after read into a raster in order to ensure a pixel ordering in raster X direction from WEST to EAST. """ def __get__(self): self.check_closed_product() return self._ptr.lines_mirrored property dataset: """The source dataset. The source dataset containing the raw data used to create the band's pixel values. """ def __get__(self): self.check_closed_product() cdef EPR_SDatasetId* dataset_id = self._ptr.dataset_ref.dataset_id cdef const char* cname = epr_get_dataset_name(dataset_id) cdef str name = _to_str(cname) return self.product.get_dataset(name) def get_name(self): """get_name(self) Gets the name of the band. """ cdef char* name = NULL self.check_closed_product() name = epr_get_band_name(self._ptr) return _to_str(name, 'ascii') def create_compatible_raster(self, uint src_width=0, uint src_height=0, uint xstep=1, uint ystep=1): """create_compatible_raster(self, src_width, src_height, xstep=1, ystep=1) Creates a raster which is compatible with the data type of the band. The created raster is used to read the data in it (see :meth:`Band.read_raster`). The raster is defined on the grid of the product, from which the data are read. Spatial subsets and under-sampling are possible) through the parameter of the method. A raster is an object that allows direct access to data of a certain portion of the ENVISAT product that are read into the it. Such a portion is called the source. The complete ENVISAT product can be much greater than the source. One can move the raster over the complete ENVISAT product and read in turn different parts (always of the size of the source) of it into the raster. The source is specified by the parameters *height* and *width*. A typical example is a processing in blocks. Lets say, a block has 64x32 pixel. Then, my source has a width of 64 pixel and a height of 32 pixel. Another example is a processing of complete image lines. Then, my source has a widths of the complete product (for example 1121 for a MERIS RR product), and a height of 1). One can loop over all blocks read into the raster and process it. In addition, it is possible to defined a sub-sampling step for a raster. This means, that the source is not read 1:1 into the raster, but that only every 2nd or 3rd pixel is read. This step can be set differently for the across track (source_step_x) and along track (source_step_y) directions. :param src_width: the width (across track dimension) of the source to be read into the raster (default: scene_width) :param src_height: the height (along track dimension) of the source to be read into the raster (default: scene_height) :param xstep: the sub-sampling step across track of the source when reading into the raster (default=1) :param ystep: the sub-sampling step along track of the source when reading into the raster (default=1) :returns: the new raster instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. note:: src_width and src_height are the dimantion of the of the source area. If one specifies a *step* parameter the resulting raster will have a size that is smaller that the specifies source size:: raster_size = src_size // step """ cdef EPR_SRaster* raster_ptr = NULL cdef uint scene_width cdef uint scene_height self.check_closed_product() scene_width = epr_get_scene_width(self._parent._ptr) scene_height = epr_get_scene_height(self._parent._ptr) if src_width == 0: src_width = scene_width elif src_width > scene_width: raise ValueError( 'requeted raster width (%d) is too large for the Band ' '(scene_width=%d)' % (src_width, scene_width)) if src_height == 0: src_height = scene_height elif src_height > scene_height: raise ValueError( 'requeted raster height (%d) is too large for the Band ' '(scene_height=%d)' % (src_height, scene_height)) if xstep > src_width: raise ValueError('xstep (%d) too large for the requested width ' '(%d)' % (xstep, src_width)) if ystep > src_height: raise ValueError('ystep (%d) too large for the requested height ' '(%d)' % (ystep, src_height)) raster_ptr = epr_create_compatible_raster(self._ptr, src_width, src_height, xstep, ystep) if raster_ptr is NULL: pyepr_null_ptr_error('unable to create compatible raster with ' 'width=%d, height=%d xstep=%d, ystep=%d' % (src_width, src_height, xstep, ystep)) return new_raster(raster_ptr, self) cpdef read_raster(self, int xoffset=0, int yoffset=0, Raster raster=None): """read_raster(self, xoffset=0, yoffset=0, Raster raster=None) Reads (geo-)physical values of the band of the specified source-region. The source-region is a defined part of the whole ENVISAT product image, which shall be read into a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the raster into which the data are read. :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param raster: :class:`Raster` instance set with appropriate parameters to read into. If not provided a new :class:`Raster` is instantiated :returns: the :class:`Raster` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster` and :func:`create_raster` """ cdef int ret cdef uint scene_width cdef uint scene_height self.check_closed_product() if raster is None: raster = self.create_compatible_raster() scene_width = epr_get_scene_width(self._parent._ptr) scene_height = epr_get_scene_height(self._parent._ptr) if (xoffset + raster._ptr.source_width > scene_width or yoffset + raster._ptr.source_height > scene_height): raise ValueError( 'at lease part of the requested area is outside the scene') raster._data = None with nogil: ret = epr_read_band_raster(self._ptr, xoffset, yoffset, raster._ptr) if ret != 0: pyepr_check_errors() return raster # --- high level interface ------------------------------------------------ def read_as_array(self, width=None, height=None, uint xoffset=0, uint yoffset=0, uint xstep=1, uint ystep=1): """read_as_array(self, width=None, height=None, xoffset=0, yoffset=0, xstep=1, ystep=1): Reads the specified source region as an :class:`numpy.ndarray`. The source-region is a defined part of the whole ENVISAT product image, which shall be read into a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the raster into which the data are read. :param src_width: the width (across track dimension) of the source to be read into the raster. If not provided reads as much as possible :param src_height: the height (along track dimension) of the source to be read into the raster. If not provided reads as much as possible :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the :class:`numpy.ndarray` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster`, :func:`create_raster` and :meth:`Band.read_raster` """ cdef uint w cdef uint h cdef EPR_ProductId* product_id self.check_closed_product() product_id = self._parent._ptr if width is None: w = epr_get_scene_width(product_id) if w > xoffset: width = w - xoffset else: raise ValueError('xoffset os larger that he scene width') if height is None: h = epr_get_scene_height(product_id) if h > yoffset: height = h - yoffset else: raise ValueError('yoffset os larger that he scene height') raster = self.create_compatible_raster(width, height, xstep, ystep) self.read_raster(xoffset, yoffset, raster) return raster.data def __repr__(self): return 'epr.Band(%s) of epr.Product(%s)' % (self.get_name(), self.product.id_string) # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): self.check_closed_product() return self._ptr.magic property _field_index: """Index or the field (within the dataset) containing the raw data used to create the band's pixel values. It is set to -1 if not used. """ def __get__(self): self.check_closed_product() return self._ptr.dataset_ref.field_index property _elem_index: """Index or the element (within the dataset field) containing the raw data used to create the band's pixel values. It is set to -1 if not used. """ def __get__(self): self.check_closed_product() return self._ptr.dataset_ref.elem_index cdef new_band(EPR_SBandId* ptr, Product parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Band instance = Band.__new__(Band) instance._ptr = ptr instance._parent = parent return instance cdef class Dataset(EprObject): """ENVISAT dataset. The Dataset class contains information about a dataset within an ENVISAT product file which has been opened with the :func:`open` function. A new Dataset instance can be obtained with the :meth:`Product.get_dataset` or :meth:`Product.get_dataset_at` methods. """ cdef EPR_SDatasetId* _ptr cdef Product _parent cdef inline check_closed_product(self): self._parent.check_closed_product() cdef inline _check_write_mode(self): self._parent._check_write_mode() cdef inline uint _get_offset(self): cdef const EPR_SDSD* dsd = epr_get_dsd(self._ptr) return dsd.ds_offset property product: """The :class:`Product` instance to which this dataset belongs to.""" def __get__(self): return self._parent property description: """A short description of the band's contents.""" def __get__(self): if self._ptr is not NULL: self.check_closed_product() if self._ptr.description is not NULL: return _to_str(self._ptr.description, 'ascii') return '' def get_name(self): """get_name(self) Gets the name of the dataset. """ cdef char* name if self._ptr is not NULL: self.check_closed_product() name = epr_get_dataset_name(self._ptr) return _to_str(name, 'ascii') return '' def get_dsd_name(self): """get_dsd_name(self) Gets the name of the DSD (dataset descriptor). """ cdef char* name if self._ptr is not NULL: self.check_closed_product() name = epr_get_dsd_name(self._ptr) return _to_str(name, 'ascii') return '' def get_num_records(self): """get_num_records(self) Gets the number of records of the dataset. """ if self._ptr is not NULL: self.check_closed_product() return epr_get_num_records(self._ptr) return 0 def get_dsd(self): """get_dsd(self) Gets the dataset descriptor (DSD). """ self.check_closed_product() return new_dsd(epr_get_dsd(self._ptr), self) def create_record(self): """create_record(self) Creates a new record. Creates a new, empty record with a structure compatible with the dataset. Such a record is typically used in subsequent calls to :meth:`Dataset.read_record`. :returns: the new record instance """ self.check_closed_product() return new_record(epr_create_record(self._ptr), self, True) def read_record(self, uint index=0, Record record=None): """read_record(self, index, record=None) Reads specified record of the dataset. The record is identified through the given zero-based record index. In order to reduce memory reallocation, a record (pre-)created by the method :meth:`Dataset.create_record` can be passed to this method. Data is then read into this given record. If no record (``None``) is given, the method initiates a new one. In both cases, the record in which the data is read into will be returned. :param index: the zero-based record index (default: 0) :param record: a pre-created record to reduce memory reallocation, can be ``None`` (default) to let the function allocate a new record :returns: the record in which the data has been read into or raises an exception (:exc:`EPRValueError`) if an error occurred .. versionchanged:: 0.9 The *index* parameter now defaults to zero """ cdef EPR_SRecord* record_ptr = NULL self.check_closed_product() if record: record_ptr = (record)._ptr with nogil: record_ptr = epr_read_record(self._ptr, index, record_ptr) if record_ptr is NULL: pyepr_null_ptr_error('unable to read record at index %d' % index) if not record: record = new_record(record_ptr, self, True) record._index = index return record # --- high level interface ------------------------------------------------ def records(self): """records(self) Return the list of records contained in the dataset. """ return list(self) def __iter__(self): cdef int idx self.check_closed_product() return (self.read_record(idx) for idx in range(epr_get_num_records(self._ptr))) def __str__(self): lines = [repr(self), ''] lines.extend(map(str, self)) return '\n'.join(lines) def __repr__(self): return 'epr.Dataset(%s) %d records' % (self.get_name(), self.get_num_records()) # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): self.check_closed_product() return self._ptr.magic cdef new_dataset(EPR_SDatasetId* ptr, Product parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Dataset instance = Dataset.__new__(Dataset) instance._ptr = ptr instance._parent = parent return instance cdef class Product(EprObject): """ENVISAT product. The Product class provides methods and properties to get information about an ENVISAT product file. .. seealso:: :func:`open` """ cdef EPR_SProductId* _ptr cdef str _mode def __cinit__(self, filename, str mode='rb'): pfilename = os.fspath(filename) cdef bytes bfilename cdef char* cfilename if hasattr(pfilename, 'encode'): bfilename = _to_bytes(pfilename, _DEFAULT_FS_ENCODING) cfilename = bfilename else: cfilename = pfilename cdef bytes bmode cdef char* cmode cdef int ret if mode not in ('rb', 'rb+', 'r+b'): raise ValueError('invalid open mode: "%s"' % mode) self._mode = mode with nogil: self._ptr = epr_open_product(cfilename) if self._ptr is NULL: # try to get error info from the lib pyepr_check_errors() raise ValueError('unable to open "%s"' % filename) if '+' in mode: # reopen in 'rb+ mode bmode = _to_bytes(mode) cmode = bmode with nogil: self._ptr.istream = stdio.freopen(cfilename, cmode, self._ptr.istream) if self._ptr.istream is NULL: errno.errno = 0 raise ValueError( 'unable to open file "%s" in "%s" mode' % (filename, mode)) def __dealloc__(self): if self._ptr is not NULL: if '+' in self._mode: stdio.fflush(self._ptr.istream) epr_close_product(self._ptr) pyepr_check_errors() self._ptr = NULL cdef inline int check_closed_product(self) except -1: if self._ptr is NULL: raise ValueError('I/O operation on closed file') return 0 cdef inline _check_write_mode(self): if '+' not in self._mode: raise TypeError('write operation on read-only file') def __init__(self, filename, mode='rb'): # @NOTE: this method suppresses the default behavior of EprObject # that is raising an exception when it is instantiated by # the user. pass def close(self): """close(self) Closes the ENVISAT :class:`epr.Product` product. Closes the :class:`epr.Product` product and free the underlying file descriptor. This method has no effect if the :class:`Product` is already closed. Once the :class:`Product` is closed, any operation on it will raise a ValueError. As a convenience, it is allowed to call this method more than once; only the first call, however, will have an effect. """ if self._ptr is not NULL: # if '+' in self.mode: # stdio.fflush(self._ptr.istream) epr_close_product(self._ptr) pyepr_check_errors() self._ptr = NULL def flush(self): """Flush the file stream.""" cdef int ret if '+' in self.mode: ret = stdio.fflush(self._ptr.istream) if ret != 0: errno.errno = 0 raise IOError('flush error') property file_path: """The file's path including the file name.""" def __get__(self): self.check_closed_product() if self._ptr.file_path is NULL: return None else: return _to_str(self._ptr.file_path, 'ascii') property _fileno: """The fileno of the :class:`epr.Product` input stream. To be used with care. .. important:: on MacOS-X the position of the file descriptor shall be reset to the original one after its use. """ def __get__(self): if self._ptr.istream is NULL: return None else: return fileno(self._ptr.istream) property mode: def __get__(self): """String that specifies the mode in which the file is opened. Possible values: 'rb' for read-only mode, 'rb+' for read-write mode. """ return self._mode property tot_size: """The total size in bytes of the product file.""" def __get__(self): self.check_closed_product() return self._ptr.tot_size property id_string: """The product identifier string obtained from the MPH parameter 'PRODUCT'. The first 10 characters of this string identify the product type, e.g. "MER_1P__FR" for a MERIS Level 1b full resolution product. The rest of the string decodes product instance properties. """ def __get__(self): self.check_closed_product() if self._ptr.id_string is NULL: return None else: return _to_str(self._ptr.id_string, 'ascii') property meris_iodd_version: """For MERIS L1b and RR and FR to provide backward compatibility.""" def __get__(self): self.check_closed_product() return self._ptr.meris_iodd_version def get_scene_width(self): """get_scene_width(self) Gets the product's scene width in pixels. """ self.check_closed_product() return epr_get_scene_width(self._ptr) def get_scene_height(self): """get_scene_height(self) Gets the product's scene height in pixels. """ self.check_closed_product() return epr_get_scene_height(self._ptr) def get_num_datasets(self): """get_num_datasets(self) Gets the number of all datasets contained in a product. """ self.check_closed_product() return epr_get_num_datasets(self._ptr) def get_num_dsds(self): """get_num_dsds(self) Gets the number of all :class:`DSD`\ s. Gets the number of all :class:`DSD`\ s (dataset descriptors) contained in the product. """ self.check_closed_product() return epr_get_num_dsds(self._ptr) def get_num_bands(self): """get_num_bands(self) Gets the number of all bands contained in a product. """ self.check_closed_product() return epr_get_num_bands(self._ptr) def get_dataset_at(self, uint index): """get_dataset_at(self, index) Gets the dataset at the specified position within the product. :param index: the index identifying the position of the dataset, starting with 0, must not be negative :returns: the requested :class:`Dataset` """ cdef EPR_SDatasetId* dataset_id dataset_id = epr_get_dataset_id_at(self._ptr, index) if dataset_id is NULL: pyepr_null_ptr_error('unable to get dataset at index %d' % index) return new_dataset(dataset_id, self) def get_dataset(self, str name): """get_dataset(self, name) Gets the dataset corresponding to the specified dataset name. :param name: the dataset name :returns: the requested :class:`Dataset` instance """ cdef EPR_SDatasetId* dataset_id cdef bytes cname = _to_bytes(name) dataset_id = epr_get_dataset_id(self._ptr, cname) if dataset_id is NULL: pyepr_null_ptr_error(r'unable to get dataset "%s"' % name) return new_dataset(dataset_id, self) def get_dsd_at(self, uint index): """get_dsd_at(self, index) Gets the :class:`DSD` at the specified position. Gets the :class:`DSD` (dataset descriptor) at the specified position within the product. :param index: the index identifying the position of the :class:`DSD`, starting with 0, must not be negative :returns: the requested :class:`DSD` instance """ cdef EPR_SDSD* dsd_ptr self.check_closed_product() dsd_ptr = epr_get_dsd_at(self._ptr, index) if dsd_ptr is NULL: pyepr_null_ptr_error('unable to get DSD at index "%d"' % index) return new_dsd(dsd_ptr, self) def get_mph(self): """get_mph(self) The main product header (MPH) :class:`Record`. """ cdef EPR_SRecord* record_ptr record_ptr = epr_get_mph(self._ptr) if record_ptr is NULL: pyepr_null_ptr_error('unable to get MPH record') return new_record(record_ptr, self, False) def get_sph(self): """get_sph(self) The specific product header (SPH) :class:`Record`. """ cdef EPR_SRecord* record_ptr record_ptr = epr_get_sph(self._ptr) if record_ptr is NULL: pyepr_null_ptr_error('unable to get SPH record') return new_record(record_ptr, self, False) def get_band(self, str name): """get_band(self, name) Gets the band corresponding to the specified name. :param name: the name of the band :returns: the requested :class:`Band` instance, or raises a :exc:`EPRValueError` if not found """ cdef EPR_SBandId* band_id cdef bytes cname = _to_bytes(name) band_id = epr_get_band_id(self._ptr, cname) if band_id is NULL: pyepr_null_ptr_error('unable to get band "%s"' % name) return new_band(band_id, self) def get_band_at(self, uint index): """get_band_at(self, index) Gets the band at the specified position within the product. :param index: the index identifying the position of the band, starting with 0, must not be negative :returns: the requested :class:`Band` instance, or raises a :exc:`EPRValueError` if not found """ cdef EPR_SBandId* band_id band_id = epr_get_band_id_at(self._ptr, index) if band_id is NULL: pyepr_null_ptr_error('unable to get band at index "%d"' % index) return new_band(band_id, self) def read_bitmask_raster(self, str bm_expr, int xoffset, int yoffset, Raster raster not None): """read_bitmask_raster(self, bm_expr, xoffset, yoffset, raster) Calculates a bit-mask raster. Calculates a bit-mask, composed of flags of the given product and combined as described in the given bit-mask expression, for the a certain dimension and sub-sampling as defined in the given raster. :param bm_expr: a string holding the logical expression for the definition of the bit-mask. In a bit-mask expression, any number of the flag-names (found in the DDDB) can be composed with "(", ")", "NOT", "AND", "OR". Valid bit-mask expression are for example ``flags.LAND OR flags.CLOUD`` or ``NOT flags.WATER AND flags.TURBID_S`` :param xoffset: across-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param raster: the raster for the bit-mask. The data type of the raster must be either e_tid_uchar or e_tid_char :returns: zero for success, an error code otherwise .. seealso:: :func:`epr.create_bitmask_raster` """ cdef bytes c_bm_expr = _to_bytes(bm_expr) cdef int ret = 0 self.check_closed_product() ret = epr_read_bitmask_raster(self._ptr, c_bm_expr, xoffset, yoffset, (raster)._ptr) if ret != 0: pyepr_check_errors() return raster # --- high level interface ------------------------------------------------ property closed: '''True if the :class:`epr.Product` is closed.''' def __get__(self): return self._ptr is NULL def get_dataset_names(self): """get_dataset_names(self) Return the list of names of the datasets in the product. .. note:: this method has no correspondent in the C API """ cdef EPR_SDatasetId* dataset_ptr cdef int idx cdef char* name cdef int num_datasets self.check_closed_product() num_datasets = epr_get_num_datasets(self._ptr) names = [] for idx in range(num_datasets): dataset_ptr = epr_get_dataset_id_at(self._ptr, idx) name = epr_get_dataset_name(dataset_ptr) names.append(_to_str(name, 'ascii')) return names def get_band_names(self): """get_band_names(self) Return the list of names of the bands in the product. .. note:: this method has no correspondent in the C API """ cdef EPR_SBandId* band_ptr cdef int idx cdef char* name cdef int num_bands self.check_closed_product() num_bands = epr_get_num_bands(self._ptr) names = [] for idx in range(num_bands): band_ptr = epr_get_band_id_at(self._ptr, idx) name = epr_get_band_name(band_ptr) names.append(_to_str(name, 'ascii')) return names def datasets(self): """datasets(self) Return the list of dataset in the product. """ cdef int idx cdef int num_datasets self.check_closed_product() num_datasets = epr_get_num_datasets(self._ptr) return [self.get_dataset_at(idx) for idx in range(num_datasets)] def bands(self): """bands(self) Return the list of bands in the product. """ cdef int num_bands self.check_closed_product() num_bands = epr_get_num_bands(self._ptr) return [self.get_band_at(idx) for idx in range(num_bands)] # @TODO: iter on both datasets and bands (??) # def __iter__(self): # return itertools.chain((self.datasets(), self.bands())) def __repr__(self): return 'epr.Product(%s) %d datasets, %d bands' % (self.id_string, self.get_num_datasets(), self.get_num_bands()) def __str__(self): lines = [repr(self), ''] lines.extend(map(repr, self.datasets())) lines.append('') lines.extend(map(repr, self.bands())) return '\n'.join(lines) def __enter__(self): return self def __exit__(self, *exc_info): self.close() # --- low level interface ------------------------------------------------- property _magic: """The magic number for internal C structure.""" def __get__(self): self.check_closed_product() return self._ptr.magic def open(filename, str mode='rb'): """open(filename) Open the ENVISAT product. Opens the ENVISAT product file with the given file path, reads MPH, SPH and all DSDs, organized the table with parameter of line length and tie points number. :param product_file_path: the path to the ENVISAT product file :param mode: string that specifies the mode in which the file is opened. Allowed values: 'rb', 'rb+' for read-write mode. Default: mode='rb'. :returns: the :class:`Product` instance representing the specified product. An exception (:exc:`exceptions.ValueError`) is raised if the file could not be opened. .. seealso :class:`Product` """ return Product(filename, mode) # library initialization/finalization _EPR_C_LIB = _CLib.__new__(_CLib) @atexit.register def _close_api(): # ensure that all EprObject(s) are collected before removing the last # reference to _EPR_C_LIB import gc gc.collect() global _EPR_C_LIB _EPR_C_LIB = None # clean namespace del atexit, namedtuple pyepr-1.1.3/tests/000077500000000000000000000000001414372560000140175ustar00rootroot00000000000000pyepr-1.1.3/tests/__init__.py000066400000000000000000000000001414372560000161160ustar00rootroot00000000000000pyepr-1.1.3/tests/checksetup.mak000066400000000000000000000135251414372560000166550ustar00rootroot00000000000000#!/usr/bin/make -f ROOT = CHECKSETUP_ROOT VERSION = $(shell grep "__version__ =" ../src/epr.pyx | cut -d \' -f 2) PKGDIST = pyepr-$(VERSION).tar.gz PYTHON = python PYVER = 3.4.2 CONDA = conda CONDAOPTS = --use-index-cache -m -y .PHONY: \ clean distclean cache check \ check-nosetuptools check-setuptoolsoff check-setuptools \ check-pip check-wheel check: \ check-nosetuptools \ check-setuptoolsoff \ check-setuptools \ check-pip \ check-wheel check-nosetuptools: \ check_nosetuptools_nonumpy_nocython \ check_nosetuptools_numpy_nocython_c \ check_nosetuptools_numpy_cython check-setuptoolsoff: \ check_setuptoolsoff_nonumpy_nocython \ check_setuptoolsoff_numpy_nocython_c \ check_setuptoolsoff_numpy_cython check-setuptools: \ check_setuptools_nonumpy_nocython \ #check_setuptools_nonumpy_nocython_c \ check_setuptools_numpy_cython_c check-pip: \ check_pip_nonumpy_nocython \ check_pip_nonumpy_nocython_c \ check_pip_numpy_cython_c check-wheel: check_wheel $(ROOT): mkdir -p $(ROOT) $(ROOT)/cache-done: $(CONDA) create -p $(ROOT)/dummyenv -m -y \ python=$(PYVER) setuptools pip numpy cython $(ROOT)/dummyenv/bin/pip install --download $(ROOT) --use-wheel wheel $(ROOT)/dummyenv/bin/pip install --download $(ROOT) numpy cython $(RM) -r $(ROOT)/dummyenv touch $@ $(ROOT)/$(PKGDIST): $(ROOT) #$(MAKE) -C .. distclean $(MAKE) -C .. sdist cp ../dist/$(PKGDIST) $(ROOT) cache: $(ROOT)/cache-done $(ROOT)/$(PKGDIST) clean: $(RM) -r $(ROOT)/check_* distclean: $(RM) -r $(ROOT) # no setuptools ############################################################### check_nosetuptools_nonumpy_nocython: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) rm $(ROOT)/$@/pyepr-$(VERSION)/src/*.c cd $(ROOT)/$@/pyepr-$(VERSION);\ ../bin/$(PYTHON) setup.py install;\ if [ ! $$? ]; then false; else true; fi @echo "EXPECTED FAILURE" check_nosetuptools_numpy_nocython_c: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) numpy tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) cd $(ROOT)/$@/pyepr-$(VERSION);\ ../bin/$(PYTHON) setup.py install check_nosetuptools_numpy_cython: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) numpy cython tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) rm $(ROOT)/$@/pyepr-$(VERSION)/src/*.c cd $(ROOT)/$@/pyepr-$(VERSION);\ ../bin/$(PYTHON) setup.py install # setuptools off ############################################################## check_setuptoolsoff_nonumpy_nocython: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) setuptools tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) rm $(ROOT)/$@/pyepr-$(VERSION)/src/*.c cd $(ROOT)/$@/pyepr-$(VERSION);\ env USE_SETUPTOOLS=FALSE ../bin/$(PYTHON) setup.py install;\ if [ ! $$? ]; then false; else true; fi @echo "EXPECTED FAILURE" check_setuptoolsoff_numpy_nocython_c: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) setuptools numpy tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) cd $(ROOT)/$@/pyepr-$(VERSION);\ env USE_SETUPTOOLS=FALSE ../bin/$(PYTHON) setup.py install check_setuptoolsoff_numpy_cython: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) setuptools numpy cython tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) rm $(ROOT)/$@/pyepr-$(VERSION)/src/*.c cd $(ROOT)/$@/pyepr-$(VERSION);\ env USE_SETUPTOOLS=FALSE ../bin/$(PYTHON) setup.py install # setuptools ################################################################## check_setuptools_nonumpy_nocython: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) setuptools tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) rm $(ROOT)/$@/pyepr-$(VERSION)/src/*.c cd $(ROOT)/$@/pyepr-$(VERSION);\ ../bin/$(PYTHON) setup.py install;\ if [ ! $$? ]; then false; else true; fi @echo "EXPECTED FAILURE" # @TODO: check #check_setuptools_nonumpy_nocython_c: $(ROOT) cache # $(RM) -r $(ROOT)/$@ # $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) setuptools # tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) # cd $(ROOT)/$@/pyepr-$(VERSION);\ # ../bin/$(PYTHON) setup.py install check_setuptools_numpy_cython_c: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) setuptools numpy cython tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) cd $(ROOT)/$@/pyepr-$(VERSION);\ ../bin/$(PYTHON) setup.py install # pip ######################################################################### check_pip_nonumpy_nocython: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) pip tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) rm $(ROOT)/$@/pyepr-$(VERSION)/src/*.c cd $(ROOT)/$@/pyepr-$(VERSION);\ $(ROOT)/$@/bin/pip install -v --no-index --find-links=file://$(PWD)/$(ROOT) $(ROOT)/$@/pyepr-$(VERSION);\ if [ ! $$? ]; then false; else true; fi @echo "EXPECTED FAILURE" check_pip_nonumpy_nocython_c: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) pip $(ROOT)/$@/bin/pip install -v --no-index --find-links=file://$(PWD)/$(ROOT) $(ROOT)/$(PKGDIST) check_pip_numpy_cython_c: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) pip cython numpy $(ROOT)/$@/bin/pip install -v --no-index --find-links=file://$(PWD)/$(ROOT) $(ROOT)/$(PKGDIST) # wheel ####################################################################### check_wheel: $(ROOT) cache $(RM) -r $(ROOT)/$@ $(CONDA) create $(CONDAOPTS) -p $(ROOT)/$@ python=$(PYVER) pip cython numpy $(ROOT)/$@/bin/pip install -v --no-index --find-links=file://$(PWD)/$(ROOT) wheel tar -C $(ROOT)/$@ -xvzf $(ROOT)/$(PKGDIST) cd $(ROOT)/$@/pyepr-$(VERSION);\ ../bin/$(PYTHON) setup.py bdist_wheel pyepr-1.1.3/tests/test_all.py000077500000000000000000003026611414372560000162130ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2011-2021, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR 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 PyEPR. If not, see . import os import re import sys import shutil import numbers import pathlib import zipfile import operator import platform import tempfile import unittest import functools from urllib.request import urlopen from packaging.version import parse as Version try: import resource except ImportError: resource = None import numpy as np import numpy.testing as npt import epr EPR_TO_NUMPY_TYPE = { # epr.E_TID_UNKNOWN: np.NPY_NOTYPE, epr.E_TID_UCHAR: np.ubyte, epr.E_TID_CHAR: np.byte, epr.E_TID_USHORT: np.ushort, epr.E_TID_SHORT: np.short, epr.E_TID_UINT: np.uint, epr.E_TID_INT: int, epr.E_TID_FLOAT: np.float32, epr.E_TID_DOUBLE: np.double, epr.E_TID_STRING: str, # epr.E_TID_SPARE = e_tid_spare, # epr.E_TID_TIME = e_tid_time, } def has_epr_c_bug_pyepr009(): v = Version(epr.EPR_C_API_VERSION) if '_pyepr' in str(v): epr_version, _, pyepr_version = str(v).partition('_pyepr') v = Version(epr_version), Version(pyepr_version) v_ref = Version('2.3dev'), Version('082') return v < v_ref else: return v <= Version('2.3') EPR_C_BUG_PYEPR009 = has_epr_c_bug_pyepr009() EPR_C_BUG_BCEPR002 = EPR_C_BUG_PYEPR009 TESTDIR = os.path.abspath(os.path.dirname(__file__)) TEST_PRODUCT = 'ASA_APM_1PNPDE20091007_025628_000000432083_00118_39751_9244.N1' TEST_PRODUCT_BM_EXPR = None def quiet(func): @functools.wraps(func) def wrapper(*args, **kwds): sysout = sys.stdout syserr = sys.stderr try: # using '/dev/null' doesn't work in python 3 because the file # object coannot be converted into a C FILE* # with file(os.devnull) as fd: with tempfile.TemporaryFile('w+') as fd: sys.stdout = fd sys.stderr = fd ret = func(*args, **kwds) finally: sys.stdout = sysout sys.stderr = syserr return ret return wrapper def equal_products(product1, product2): if type(product1) != type(product2): return False for name in ('file_path', 'tot_size', 'id_string', 'meris_iodd_version'): if getattr(product1, name) != getattr(product2, name): return False for name in ('get_scene_width', 'get_scene_height', 'get_num_datasets', 'get_num_dsds', 'get_num_bands', ): if getattr(product1, name)() != getattr(product2, name)(): return False return True def setUpModule(): filename = os.path.join(TESTDIR, TEST_PRODUCT) baseurl = 'http://www.brockmann-consult.de/beam/data/products/ASAR' url = baseurl + '/' + os.path.splitext(TEST_PRODUCT)[0] + '.zip' if not os.path.exists(filename): with urlopen(url) as src: with open(filename + '.zip', 'wb') as dst: for data in src: dst.write(data) with zipfile.ZipFile(filename + '.zip') as arch: arch.extractall(TESTDIR) os.remove(filename + '.zip') print('Test product:', filename) assert os.path.exists(filename) class TestOpenProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def test_open(self): with epr.open(self.PRODUCT_FILE) as product: self.assertTrue(isinstance(product, epr.Product)) self.assertEqual(product.mode, 'rb') def test_open_rb(self): with epr.open(self.PRODUCT_FILE, 'rb') as product: self.assertTrue(isinstance(product, epr.Product)) self.assertEqual(product.mode, 'rb') def test_open_rwb_01(self): with epr.open(self.PRODUCT_FILE, 'r+b') as product: self.assertTrue(isinstance(product, epr.Product)) self.assertTrue(product.mode in ('r+b', 'rb+')) def test_open_rwb_02(self): with epr.open(self.PRODUCT_FILE, 'rb+') as product: self.assertTrue(isinstance(product, epr.Product)) self.assertTrue(product.mode in ('r+b', 'rb+')) def test_open_invalid_mode_01(self): self.assertRaises(ValueError, epr.open, self.PRODUCT_FILE, '') def test_open_invalid_mode_02(self): self.assertRaises(ValueError, epr.open, self.PRODUCT_FILE, 'rx') def test_open_invalid_mode_03(self): self.assertRaises(TypeError, epr.open, self.PRODUCT_FILE, 0) def test_open_bytes(self): filename = self.PRODUCT_FILE.encode('UTF-8') with epr.open(filename) as product: self.assertTrue(isinstance(product, epr.Product)) def test_open_pathlib(self): filename = pathlib.Path(self.PRODUCT_FILE) with epr.open(filename) as product: self.assertTrue(isinstance(product, epr.Product)) def test_product_constructor(self): with epr.Product(self.PRODUCT_FILE) as product: self.assertTrue(isinstance(product, epr.Product)) def test_open_failure(self): self.assertRaises(epr.EPRError, epr.open, '') def test_filename_type(self): self.assertRaises(TypeError, epr.open, 3) def test_open_failure_invalid_product(self): self.assertRaises(ValueError, epr.open, __file__) def test_product_constructor_failure(self): self.assertRaises(epr.EPRError, epr.Product, '') def test_product_constructor_failure_invalid_product(self): self.assertRaises(ValueError, epr.Product, __file__) class TestProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb' ID_STRING = 'ASA_APM_1PNPDE20091007_025628_000000432083_00118' TOT_SIZE = 22903686 DATASET_NAMES = [ 'MDS1_SQ_ADS', 'MDS2_SQ_ADS', 'MAIN_PROCESSING_PARAMS_ADS', 'DOP_CENTROID_COEFFS_ADS', 'SR_GR_ADS', 'CHIRP_PARAMS_ADS', 'GEOLOCATION_GRID_ADS', 'MDS1', 'MDS2', ] DATASET_NAME = 'MDS1' DATASET_WIDTH = 1452 DATASET_HEIGHT = 3915 DATASET_NDSDS = 18 DATASET_NBANDS = 6 BAND_NAME = 'proc_data_1' SPH_DESCRIPTOR = 'AP Mode Medium Res. Image' MERIS_IODD_VERSION = 0 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE, self.OPEN_MODE) self.bm_expr = TEST_PRODUCT_BM_EXPR def tearDown(self): self.product.close() def test_close(self): self.product.close() def test_flush(self): self.product.flush() def test_double_close(self): self.product.close() self.product.close() def test_file_path_property(self): self.assertEqual(self.product.file_path, self.PRODUCT_FILE.replace('\\', '/')) def test_mode_property(self): self.assertEqual(self.product.mode, self.OPEN_MODE) def test_tot_size_property(self): self.assertEqual(self.product.tot_size, self.TOT_SIZE) def test_id_string_property(self): self.assertEqual(self.product.id_string, self.ID_STRING) def test_meris_iodd_version_property(self): self.assertEqual(self.product.meris_iodd_version, self.MERIS_IODD_VERSION) def test_get_scene_width(self): self.assertEqual(self.product.get_scene_width(), self.DATASET_WIDTH) def test_get_scene_height(self): self.assertEqual(self.product.get_scene_height(), self.DATASET_HEIGHT) def test_get_num_datasets(self): self.assertEqual(self.product.get_num_datasets(), len(self.DATASET_NAMES)) def test_get_num_dsds(self): self.assertEqual(self.product.get_num_dsds(), self.DATASET_NDSDS) def test_get_num_bands(self): self.assertEqual(self.product.get_num_bands(), self.DATASET_NBANDS) def test_get_dataset_at(self): dataset = self.product.get_dataset_at(0) self.assertTrue(dataset) def test_get_dataset(self): dataset = self.product.get_dataset(self.DATASET_NAME) self.assertTrue(dataset) def test_datasets(self): datasets = [self.product.get_dataset_at(idx) for idx in range(self.product.get_num_datasets())] dataset_names = [ds.get_name() for ds in datasets] self.assertEqual(dataset_names, self.DATASET_NAMES) def test_get_dsd_at(self): self.assertTrue(isinstance(self.product.get_dsd_at(0), epr.DSD)) def test_get_mph(self): record = self.product.get_mph() self.assertTrue(isinstance(record, epr.Record)) product = record.get_field('PRODUCT').get_elem() self.assertEqual(product.decode('ascii'), os.path.basename(self.PRODUCT_FILE)) def test_get_sph(self): record = self.product.get_sph() self.assertTrue(isinstance(record, epr.Record)) sph_desct = record.get_field('SPH_DESCRIPTOR').get_elem() self.assertEqual(sph_desct.decode('ascii'), self.SPH_DESCRIPTOR) def test_get_band_id(self): self.assertTrue(isinstance(self.product.get_band(self.BAND_NAME), epr.Band)) def test_get_band_id_bytes(self): band_name = self.BAND_NAME.encode('UTF-8') self.assertTrue(isinstance(band_name, bytes)) self.assertTrue(isinstance(self.product.get_band(self.BAND_NAME), epr.Band)) def test_get_band_id_invalid_name(self): self.assertRaises(ValueError, self.product.get_band, '') def test_get_band_id_at(self): self.assertTrue(isinstance(self.product.get_band_at(0), epr.Band)) def test_get_band_id_at_invalid_index(self): self.assertRaises(ValueError, self.product.get_band_at, self.product.get_num_bands()) @unittest.skipIf(TEST_PRODUCT_BM_EXPR is None, 'no flag band available') def test_read_bitmask_raster(self): bm_expr = self.bm_expr xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) raster = self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) @unittest.skipIf(TEST_PRODUCT_BM_EXPR is None, 'no flag band available') def test_read_bitmask_raster_bytes(self): bm_expr = self.bm_expr.encode('UTF-8') self.assertTrue(isinstance(bm_expr, bytes)) xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) raster = self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) def test_read_bitmask_raster_with_invalid_bm_expr(self): bm_expr = 'l5_flags.LAND AND !l2_flags.CLOUD' xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) self.assertRaises(epr.EPRError, self.product.read_bitmask_raster, bm_expr, xoffset, yoffset, raster) try: self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) except epr.EPRError as e: self.assertEqual(e.code, 301) def test_read_bitmask_raster_with_wrong_data_type(self): bm_expr = 'l2_flags.LAND AND !l2_flags.CLOUD' xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_raster(epr.E_TID_DOUBLE, width, height) self.assertRaises(epr.EPRError, self.product.read_bitmask_raster, bm_expr, xoffset, yoffset, raster) try: self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) except epr.EPRError as e: self.assertEqual(e.code, 7) def test_fileno(self): self.assertTrue(isinstance(self.product._fileno, int)) def test_fileno_read(self): pos = os.lseek(self.product._fileno, 0, os.SEEK_CUR) try: os.lseek(self.product._fileno, 0, os.SEEK_SET) data = os.read(self.product._fileno, 7) self.assertEqual(data, b'PRODUCT') finally: os.lseek(self.product._fileno, pos, os.SEEK_SET) class TestProductRW(TestProduct): OPEN_MODE = 'rb+' class TestProductHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAMES = TestProduct.DATASET_NAMES BAND_NAMES = [ 'slant_range_time', 'incident_angle', 'latitude', 'longitude', 'proc_data_1', 'proc_data_2', ] def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def tearDown(self): self.product.close() def test_closed(self): self.assertFalse(self.product.closed) self.product.close() self.assertTrue(self.product.closed) def test_readonly_closed(self): self.assertFalse(self.product.closed) self.assertRaises(AttributeError, setattr, self.product, 'closed', True) def test_get_dataset_names(self): self.assertEqual(self.product.get_dataset_names(), self.DATASET_NAMES) def test_get_band_names(self): self.assertEqual(self.product.get_band_names(), self.BAND_NAMES) def test_datasets(self): datasets = self.product.datasets() self.assertTrue(datasets) self.assertEqual(len(datasets), self.product.get_num_datasets()) for index, dataset in enumerate(datasets): ref_dataset = self.product.get_dataset_at(index) self.assertEqual(dataset.get_name(), ref_dataset.get_name()) def test_bands(self): bands = self.product.bands() self.assertTrue(bands) self.assertEqual(len(bands), self.product.get_num_bands()) for index, band in enumerate(bands): ref_band = self.product.get_band_at(index) self.assertEqual(band.get_name(), ref_band.get_name()) # @TODO: not implemented # def test_iter(self): # pass def test_repr(self): pattern = (r'epr\.Product\((?P\w+)\) ' r'(?P\d+) datasets, ' r'(?P\d+) bands') mobj = re.match(pattern, repr(self.product)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), self.product.id_string) self.assertEqual(mobj.group('n_datasets'), str(self.product.get_num_datasets())) self.assertEqual(mobj.group('n_bands'), str(self.product.get_num_bands())) def test_repr_type(self): self.assertTrue(isinstance(repr(self.product), str)) def test_str(self): lines = [repr(self.product), ''] lines.extend(map(repr, self.product.datasets())) lines.append('') lines.extend(map(str, self.product.bands())) data = '\n'.join(lines) self.assertEqual(data, str(self.product)) def test_str_type(self): self.assertTrue(isinstance(str(self.product), str)) def test_context_manager(self): with epr.open(self.PRODUCT_FILE) as product: self.assertTrue(isinstance(product, epr.Product)) self.assertFalse(product.closed) self.assertTrue(str(product)) self.assertTrue(product.closed) class TestProductLowLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def tearDown(self): self.product.close() def test_magic(self): self.assertEqual(self.product._magic, epr._EPR_MAGIC_PRODUCT_ID) class TestClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MDS1' BAND_NAME = 'proc_data_1' def setUp(self): self.product = epr.open(self.PRODUCT_FILE) self.product.close() def test_properties(self): for name in ('file_path', 'tot_size', 'id_string', 'meris_iodd_version'): self.assertRaises(ValueError, getattr, self.product, name) def test_get_get_scene_width(self): self.assertRaises(ValueError, self.product.get_scene_width) def test_get_get_scene_height(self): self.assertRaises(ValueError, self.product.get_scene_height) def test_get_num_datasets(self): self.assertRaises(ValueError, self.product.get_num_datasets) def test_get_num_dsds(self): self.assertRaises(ValueError, self.product.get_num_dsds) def test_get_num_bands(self): self.assertRaises(ValueError, self.product.get_num_bands) def test_get_mph(self): self.assertRaises(ValueError, self.product.get_mph) def test_get_sph(self): self.assertRaises(ValueError, self.product.get_sph) def test_get_dataset_at(self): self.assertRaises(ValueError, self.product.get_dataset_at, 0) def test_get_dataset(self): self.assertRaises(ValueError, self.product.get_dataset, self.DATASET_NAME) def test_get_dsd_at(self): self.assertRaises(ValueError, self.product.get_dsd_at, 0) def test_get_band_id(self): self.assertRaises(ValueError, self.product.get_band, self.BAND_NAME) def test_get_band_id_at(self): self.assertRaises(ValueError, self.product.get_band_at, 0) def test_read_bitmask_raster(self): bm_expr = 'l2_flags.LAND AND !l2_flags.CLOUD' raster = epr.create_bitmask_raster(12, 10) xoffset = 0 yoffset = 0 self.assertRaises(ValueError, self.product.read_bitmask_raster, bm_expr, xoffset, yoffset, raster) def test_get_dataset_names(self): self.assertRaises(ValueError, self.product.get_dataset_names) def test_get_band_names(self): self.assertRaises(ValueError, self.product.get_band_names) def test_datasets(self): self.assertRaises(ValueError, self.product.datasets) def test_bands(self): self.assertRaises(ValueError, self.product.bands) def test_repr(self): self.assertRaises(ValueError, repr, self.product) def test_str(self): self.assertRaises(ValueError, str, self.product) class TestDataset(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb' DATASET_NAME = 'MDS1' DATASET_DESCRIPTION = 'Measurement Data Set 1' NUM_RECORDS = 3915 DSD_NAME = 'MDS1' RECORD_INDEX = 0 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE, self.OPEN_MODE) self.dataset = self.product.get_dataset(self.DATASET_NAME) def tearDown(self): self.product.close() def test_product_property(self): self.assertTrue(equal_products(self.dataset.product, self.product)) def test_description_property(self): self.assertEqual(self.dataset.description, self.DATASET_DESCRIPTION) def test_get_name(self): self.assertEqual(self.dataset.get_name(), self.DATASET_NAME) def test_get_dsd_name(self): self.assertEqual(self.dataset.get_dsd_name(), self.DSD_NAME) def test_get_num_records(self): self.assertEqual(self.dataset.get_num_records(), self.NUM_RECORDS) def test_get_dsd(self): self.assertTrue(isinstance(self.dataset.get_dsd(), epr.DSD)) def test_create_record(self): record = self.dataset.create_record() self.assertTrue(isinstance(record, epr.Record)) def test_create_record_index(self): record = self.dataset.create_record() self.assertEqual(record.index, None) def test_read_record(self): record = self.dataset.read_record(self.RECORD_INDEX) self.assertTrue(isinstance(record, epr.Record)) def test_read_record_index(self): record = self.dataset.read_record(self.RECORD_INDEX) self.assertEqual(record.index, self.RECORD_INDEX) def test_read_record_passed(self): created_record = self.dataset.create_record() read_record = self.dataset.read_record(self.RECORD_INDEX, created_record) self.assertTrue(created_record is read_record) def test_read_record_passed_index(self): created_record = self.dataset.create_record() self.assertEqual(created_record.index, None) read_record = self.dataset.read_record(self.RECORD_INDEX, created_record) self.assertEqual(read_record.index, self.RECORD_INDEX) def test_read_record_passed_invalid(self): self.assertRaises(TypeError, self.dataset.read_record, 0, 0) class TestDatasetRW(TestDataset): OPEN_MODE = 'rb+' class TestDatasetHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestDataset.DATASET_NAME def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) def tearDown(self): self.product.close() def test_records(self): records = self.dataset.records() self.assertTrue(records) self.assertEqual(len(records), self.dataset.get_num_records()) for index, record in enumerate(records): ref_record = self.dataset.read_record(index) self.assertEqual(record.get_field_names(), ref_record.get_field_names()) def test_iter(self): index = 0 for record in self.dataset: ref_record = self.dataset.read_record(index) self.assertEqual(record.get_field_names(), ref_record.get_field_names()) index += 1 self.assertEqual(index, self.dataset.get_num_records()) def test_repr(self): pattern = r'epr\.Dataset\((?P\w+)\) (?P\d+) records' mobj = re.match(pattern, repr(self.dataset)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), self.dataset.get_name()) self.assertEqual(mobj.group('num'), str(self.dataset.get_num_records())) def test_repr_type(self): self.assertTrue(isinstance(repr(self.dataset), str)) def test_str(self): lines = [repr(self.dataset), ''] lines.extend(map(str, self.dataset)) data = '\n'.join(lines) self.assertEqual(data, str(self.dataset)) def test_str_type(self): self.assertTrue(isinstance(str(self.dataset), str)) class TestDatasetOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MDS1' def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) self.record = self.dataset.create_record() self.product.close() def test_product_property(self): self.assertTrue(isinstance(self.dataset.product, epr.Product)) def test_description_property(self): self.assertRaises(ValueError, getattr, self.dataset, 'description') def test_get_name(self): self.assertRaises(ValueError, self.dataset.get_name) def test_get_dsd_name(self): self.assertRaises(ValueError, self.dataset.get_dsd_name) def test_get_num_records(self): self.assertRaises(ValueError, self.dataset.get_num_records) def test_get_dsd(self): self.assertRaises(ValueError, self.dataset.get_dsd) def test_create_record(self): self.assertRaises(ValueError, self.dataset.create_record) def test_read_record(self): self.assertRaises(ValueError, self.dataset.read_record, 0) def test_read_record_passed(self): self.assertRaises(ValueError, self.dataset.read_record, 0, self.record) def test_records(self): self.assertRaises(ValueError, self.dataset.records) def test_iter(self): self.assertRaises(ValueError, iter, self.dataset) def test_repr(self): self.assertRaises(ValueError, repr, self.dataset) def test_str(self): self.assertRaises(ValueError, str, self.dataset) class TestBand(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb+' DATASET_NAME = 'MDS1' BAND_NAMES = ( 'slant_range_time', 'incident_angle', 'latitude', 'longitude', 'proc_data_1', 'proc_data_2', ) BAND_NAME = 'proc_data_1' BAND_DESCTIPTION = 'Alternating Polarization Medium Resolution Image' XOFFSET = 90 YOFFSET = 80 WIDTH = 200 HEIGHT = 100 SCALING_FACTOR = 1.0 SCALING_OFFSET = 0.0 UNIT = None RTOL = 1e-7 DATA_TYPE = np.float32 TEST_DATA = np.asarray([ [228., 213., 235., 256., 239., 260., 210., 197., 233., 213.], [246., 248., 333., 317., 272., 247., 247., 221., 221., 205.], [239., 297., 412., 381., 301., 226., 262., 256., 229., 214.], [212., 279., 328., 318., 279., 231., 253., 274., 240., 242.], [199., 236., 245., 262., 282., 265., 261., 255., 255., 239.], [214., 218., 284., 300., 269., 266., 272., 224., 292., 238.], [240., 241., 300., 308., 248., 254., 269., 230., 276., 256.], [256., 261., 265., 269., 263., 262., 279., 279., 300., 367.], [273., 262., 262., 239., 270., 284., 344., 380., 416., 447.], [292., 286., 303., 261., 284., 374., 445., 431., 422., 416.], ]) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE, self.OPEN_MODE) self.band = self.product.get_band(self.BAND_NAME) def tearDown(self): self.product.close() def test_product_property(self): self.assertTrue(equal_products(self.band.product, self.product)) def test_spectr_band_index_property(self): self.assertEqual(self.band.spectr_band_index, -1) def test_sample_model_property(self): self.assertEqual(self.band.sample_model, 0) def test_data_type_property(self): self.assertEqual(self.band.data_type, epr.E_TID_FLOAT) def test_scaling_method_property(self): self.assertEqual(self.band.scaling_method, epr.E_SMID_LIN) def test_scaling_offset_property(self): self.assertEqual(self.band.scaling_offset, self.SCALING_OFFSET) def test_scaling_factor_property(self): self.assertEqual(self.band.scaling_factor, self.SCALING_FACTOR) self.assertTrue(isinstance(self.band.scaling_factor, float)) def test_bm_expr_property(self): self.assertEqual(self.band.bm_expr, None) def test_unit_property(self): self.assertEqual(self.band.unit, self.UNIT) def test_description_property(self): self.assertEqual(self.band.description, self.BAND_DESCTIPTION) def test_lines_mirrored_property(self): self.assertTrue(isinstance(self.band.lines_mirrored, bool)) self.assertEqual(self.band.lines_mirrored, True) def test_dataset_property(self): dataset = self.band.dataset self.assertTrue(isinstance(dataset, epr.Dataset)) self.assertEqual(dataset.get_name(), self.DATASET_NAME) def test_get_name(self): for index in range(len(self.BAND_NAMES)): b = self.product.get_band_at(index) self.assertEqual(b.get_name(), self.BAND_NAMES[index]) def test_create_compatible_raster(self): width = self.product.get_scene_width() height = self.product.get_scene_height() raster = self.band.create_compatible_raster(width, height) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) def test_create_compatible_raster_with_invalid_size(self): width = self.product.get_scene_width() height = self.product.get_scene_height() self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, -1, height) self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, -1) self.assertRaises(ValueError, self.band.create_compatible_raster, self.product.get_scene_width() + 10, height) self.assertRaises(ValueError, self.band.create_compatible_raster, width, self.product.get_scene_height() + 10) def test_create_compatible_raster_with_step(self): src_width = self.product.get_scene_width() src_height = self.product.get_scene_height() xstep = 2 ystep = 3 width = (src_width - 1) // xstep + 1 height = (src_height - 1) // ystep + 1 raster = self.band.create_compatible_raster(src_width, src_height, xstep, ystep) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) def test_create_compatible_raster_with_invalid_step(self): width = self.product.get_scene_width() height = self.product.get_scene_height() self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, height, -1, 2) self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, height, 2, -1) self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, height, -2, -1) self.assertRaises((ValueError, ValueError), self.band.create_compatible_raster, width, height, width + 10, 2) self.assertRaises((ValueError, ValueError), self.band.create_compatible_raster, width, height, 2, height + 10) self.assertRaises((ValueError, ValueError), self.band.create_compatible_raster, width, height, width + 10, height + 10) def test_create_compatible_raster_with_default_size(self): src_width = self.product.get_scene_width() src_height = self.product.get_scene_height() raster = self.band.create_compatible_raster() self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), src_width) self.assertEqual(raster.get_height(), src_height) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) def test_read_raster(self): rasterin = self.band.create_compatible_raster(self.WIDTH, self.HEIGHT) raster = self.band.read_raster(self.XOFFSET, self.YOFFSET, rasterin) self.assertTrue(isinstance(raster, epr.Raster)) self.assertTrue(raster is rasterin) self.assertEqual(raster.get_width(), self.WIDTH) self.assertEqual(raster.get_height(), self.HEIGHT) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) h, w = self.TEST_DATA.shape npt.assert_allclose(raster.get_pixel(0, 0), self.TEST_DATA[0, 0], rtol=self.RTOL) npt.assert_allclose(raster.get_pixel(w - 1, h - 1), self.TEST_DATA[h - 1, w - 1], rtol=self.RTOL) def test_read_raster_none(self): raster = self.band.read_raster() self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), self.product.get_scene_width()) self.assertEqual(raster.get_height(), self.product.get_scene_height()) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) h, w = self.TEST_DATA.shape npt.assert_allclose( raster.get_pixel(self.XOFFSET, self.YOFFSET), self.TEST_DATA[0, 0], rtol=self.RTOL) npt.assert_allclose( raster.get_pixel(self.XOFFSET + w - 1, self.YOFFSET + h - 1), self.TEST_DATA[h - 1, w - 1], rtol=self.RTOL) def test_read_raster_default_offset(self): height = self.HEIGHT width = self.WIDTH raster1 = self.band.create_compatible_raster(width, height) raster2 = self.band.create_compatible_raster(width, height) r1 = self.band.read_raster(0, 0, raster1) r2 = self.band.read_raster(raster=raster2) self.assertTrue(r1 is raster1) self.assertTrue(r2 is raster2) self.assertEqual(raster1.get_pixel(0, 0), raster2.get_pixel(0, 0)) self.assertEqual(raster1.get_pixel(width - 1, height - 1), raster2.get_pixel(width - 1, height - 1)) h, w = self.TEST_DATA.shape npt.assert_allclose( raster1.get_pixel(self.XOFFSET, self.YOFFSET), self.TEST_DATA[0, 0], rtol=self.RTOL) npt.assert_allclose( raster1.get_pixel(self.XOFFSET + w - 1, self.YOFFSET + h - 1), self.TEST_DATA[h - 1, w - 1], rtol=self.RTOL) def test_read_raster_with_invalid_raster(self): self.assertRaises(TypeError, self.band.read_raster, 0, 0, 0) def test_read_raster_with_invalid_offset(self): raster = self.band.create_compatible_raster(self.WIDTH, self.HEIGHT) self.assertRaises(ValueError, self.band.read_raster, -1, 0, raster) self.assertRaises(ValueError, self.band.read_raster, 0, -1, raster) self.assertRaises(ValueError, self.band.read_raster, -1, -1, raster) invalid_xoffset = 2 * self.product.get_scene_width() invalid_yoffset = 2 * self.product.get_scene_height() self.assertRaises(ValueError, self.band.read_raster, invalid_xoffset, 0, raster) self.assertRaises(ValueError, self.band.read_raster, 0, invalid_yoffset, raster) self.assertRaises(ValueError, self.band.read_raster, invalid_xoffset, invalid_yoffset, raster) def test_read_as_array_ref(self): data = self.band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET) self.assertTrue(isinstance(data, np.ndarray)) self.assertEqual(data.shape, (self.HEIGHT, self.WIDTH)) self.assertEqual(data.dtype, self.DATA_TYPE) h, w = self.TEST_DATA.shape npt.assert_allclose(data[:h, :w], self.TEST_DATA, rtol=self.RTOL) def test_read_as_array_cross(self): data = self.band.read_as_array() box = self.band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET) npt.assert_array_equal( data[self.YOFFSET:self.YOFFSET + self.HEIGHT, self.XOFFSET:self.XOFFSET + self.WIDTH], box) def test_read_as_array_default(self): data = self.band.read_as_array() self.assertTrue(isinstance(data, np.ndarray)) self.assertEqual( data.shape, (self.product.get_scene_height(), self.product.get_scene_width())) self.assertEqual(data.dtype, self.DATA_TYPE) h, w = self.TEST_DATA.shape npt.assert_allclose( data[self.YOFFSET:self.YOFFSET + h, self.XOFFSET:self.XOFFSET + w], self.TEST_DATA, rtol=self.RTOL) # @SEEALSO: https://www.brockmann-consult.de/beam-jira/browse/EPR-2 @unittest.skipIf(EPR_C_BUG_BCEPR002, 'buggy EPR_C_API detected') def test_read_as_array_with_step_2(self): step = 2 band = self.band data = band.read_as_array() box = band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET, step, step) self.assertTrue(isinstance(box, np.ndarray)) self.assertEqual( box.shape, ((self.HEIGHT - 1) // step + 1, (self.WIDTH - 1) // step + 1)) self.assertEqual(box.dtype, self.DATA_TYPE) npt.assert_allclose( data[self.YOFFSET:self.YOFFSET + self.HEIGHT:step, self.XOFFSET:self.XOFFSET + self.WIDTH:step], box) h, w = self.TEST_DATA.shape npt.assert_allclose( box[:(h-1)//step+1, :(w-1)//step+1], self.TEST_DATA[::step, ::step], rtol=self.RTOL) @unittest.skipIf(EPR_C_BUG_BCEPR002, 'buggy EPR_C_API detected') def test_read_as_array_with_step_3(self): step = 3 band = self.band data = band.read_as_array() box = band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET, step, step) self.assertTrue(isinstance(box, np.ndarray)) self.assertEqual( box.shape, ((self.HEIGHT - 1) // step + 1, (self.WIDTH - 1) // step + 1)) self.assertEqual(box.dtype, self.DATA_TYPE) npt.assert_allclose( data[self.YOFFSET:self.YOFFSET + self.HEIGHT:step, self.XOFFSET:self.XOFFSET + self.WIDTH:step], box) h, w = self.TEST_DATA.shape npt.assert_allclose( box[:(h-1)//step+1, :(w-1)//step+1], self.TEST_DATA[::step, ::step], rtol=self.RTOL) @unittest.skipIf(EPR_C_BUG_BCEPR002, 'buggy EPR_C_API detected') def test_read_as_array_with_step_4(self): step = 4 band = self.band data = band.read_as_array() box = band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET, step, step) self.assertTrue(isinstance(box, np.ndarray)) self.assertEqual( box.shape, ((self.HEIGHT - 1) // step + 1, (self.WIDTH - 1) // step + 1)) self.assertEqual(box.dtype, self.DATA_TYPE) npt.assert_allclose( data[self.YOFFSET:self.YOFFSET + self.HEIGHT:step, self.XOFFSET:self.XOFFSET + self.WIDTH:step], box) h, w = self.TEST_DATA.shape npt.assert_allclose( box[:(h-1)//step+1, :(w-1)//step+1], self.TEST_DATA[::step, ::step]) @unittest.skipIf(EPR_C_BUG_BCEPR002, 'buggy EPR_C_API detected') def test_read_as_array_with_step_5(self): step = 5 band = self.band data = band.read_as_array() box = band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET, step, step) self.assertTrue(isinstance(box, np.ndarray)) self.assertEqual( box.shape, ((self.HEIGHT - 1) // step + 1, (self.WIDTH - 1) // step + 1)) self.assertEqual(box.dtype, self.DATA_TYPE) npt.assert_allclose( data[self.YOFFSET:self.YOFFSET + self.HEIGHT:step, self.XOFFSET:self.XOFFSET + self.WIDTH:step], box) h, w = self.TEST_DATA.shape npt.assert_allclose( box[:(h-1)//step+1, :(w-1)//step+1], self.TEST_DATA[::step, ::step], rtol=self.RTOL) class TestBandRW(TestBand): OPEN_MODE = 'rb+' class TestAnnotationBand(TestBand): DATASET_NAME = 'GEOLOCATION_GRID_ADS' BAND_NAME = 'incident_angle' BAND_DESCTIPTION = 'Incident angle' SCALING_FACTOR = 1.0 SCALING_OFFSET = 0.0 UNIT = 'deg' RTOL = 1e-7 TEST_DATA = np.asarray([ [21.86950111, 21.86438370, 21.85926437, 21.85414696, 21.84902954, 21.84391022, 21.83879280, 21.83367538, 21.82855606, 21.82343864], [21.86950302, 21.86438560, 21.85926628, 21.85414886, 21.84903145, 21.84391212, 21.83879471, 21.83367729, 21.82855797, 21.82344055], [21.86950302, 21.86438560, 21.85926628, 21.85414886, 21.84903145, 21.84391212, 21.83879471, 21.83367729, 21.82855797, 21.82344055], [21.86950302, 21.86438560, 21.85926628, 21.85414886, 21.84903145, 21.84391212, 21.83879471, 21.83367729, 21.82855797, 21.82344055], [21.86950493, 21.86438751, 21.85926819, 21.85415077, 21.84903335, 21.84391403, 21.83879662, 21.83367920, 21.82855987, 21.82344246], [21.86950493, 21.86438751, 21.85926819, 21.85415077, 21.84903335, 21.84391403, 21.83879661, 21.83367920, 21.82855987, 21.82344246], [21.86950493, 21.86438751, 21.85926819, 21.85415077, 21.84903335, 21.84391403, 21.83879661, 21.83367912, 21.82855987, 21.82344246], [21.86950683, 21.86438942, 21.85927009, 21.85415268, 21.84903526, 21.84391594, 21.83879852, 21.83368111, 21.82856178, 21.82344437], [21.86950683, 21.86438942, 21.85927009, 21.85415268, 21.84903526, 21.84391594, 21.83879852, 21.83368111, 21.82856178, 21.82344437], [21.86950683, 21.86438942, 21.85927009, 21.85415268, 21.84903526, 21.84391594, 21.83879852, 21.83368111, 21.82856178, 21.82344437], ]) @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_read_raster(self): super(TestAnnotationBand, self).test_read_raster() @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_read_raster_default_offset(self): super(TestAnnotationBand, self).test_read_raster_default_offset() @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_read_as_array_ref(self): super(TestAnnotationBand, self).test_read_as_array_ref() @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_read_as_array_cross(self): super(TestAnnotationBand, self).test_read_as_array_cross() class TestBandHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def tearDown(self): self.product.close() def test_repr(self): pattern = (r'epr.Band\((?P\w+)\) of ' r'epr.Product\((?P\w+)\)') for band in self.product.bands(): mobj = re.match(pattern, repr(band)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), band.get_name()) self.assertEqual(mobj.group('product_id'), self.product.id_string) def test_repr_type(self): band = self.product.get_band_at(0) self.assertTrue(isinstance(repr(band), str)) def test_str_type(self): band = self.product.get_band_at(0) self.assertTrue(isinstance(str(band), str)) class TestBandLowLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) FIELD_INDEX = 7 ELEM_INDEX = -1 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.band = self.product.get_band_at(0) def tearDown(self): self.product.close() def test_magic(self): self.assertEqual(self.band._magic, epr._EPR_MAGIC_BAND_ID) def test_field_index(self): self.assertEqual(self.band._field_index, self.FIELD_INDEX) def test_elem_index(self): self.assertEqual(self.band._elem_index, self.ELEM_INDEX) class TestBandOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) WIDTH = 12 HEIGHT = 10 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.band = self.product.get_band_at(0) self.raster = self.band.create_compatible_raster(self.WIDTH, self.HEIGHT) self.product.close() def test_product_property(self): self.assertTrue(isinstance(self.band.product, epr.Product)) def test_properties(self): fields = ( 'spectr_band_index', 'sample_model', 'data_type', 'scaling_method', 'scaling_offset', 'scaling_factor', 'bm_expr', 'unit', 'description', 'lines_mirrored', ) for name in fields: with self.subTest(field=name): self.assertRaises(ValueError, getattr, self.band, name) def test_get_name(self): self.assertRaises(ValueError, self.product.get_band_at, 0) def test_create_compatible_raster(self): self.assertRaises(ValueError, self.band.create_compatible_raster, self.WIDTH, self.HEIGHT) def test_read_raster(self): self.assertRaises(ValueError, self.band.read_raster) def test_read_as_array(self): self.assertRaises(ValueError, self.band.read_as_array, self.WIDTH, self.HEIGHT) def test_str(self): self.assertRaises(ValueError, str, self.band) def test_repr(self): self.assertRaises(ValueError, repr, self.band) class TestCreateRaster(unittest.TestCase): RASTER_WIDTH = 400 RASTER_HEIGHT = 300 RASTER_DATA_TYPE = epr.E_TID_FLOAT def test_create_raster(self): raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, self.RASTER_DATA_TYPE) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_raster_with_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT raster = epr.create_raster(self.RASTER_DATA_TYPE, src_width, src_height, 3, 2) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, self.RASTER_DATA_TYPE) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_raster_with_invalid_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT self.assertRaises(ValueError, epr.create_raster, self.RASTER_DATA_TYPE, src_width, src_height, 0, 2) def test_create_raster_with_invalid_size(self): self.assertRaises((ValueError, OverflowError), epr.create_raster, self.RASTER_DATA_TYPE, -1, self.RASTER_HEIGHT) def test_create_bitmask_raster(self): raster = epr.create_bitmask_raster(self.RASTER_WIDTH, self.RASTER_HEIGHT) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, epr.E_TID_UCHAR) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_bitmask_raster_with_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT raster = epr.create_bitmask_raster(src_width, src_height, 3, 2) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, epr.E_TID_UCHAR) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_bitmask_raster_with_invalid_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT self.assertRaises(ValueError, epr.create_bitmask_raster, src_width, src_height, 0, 2) def test_create_bitmask_raster_with_invalid_size(self): self.assertRaises((ValueError, OverflowError), epr.create_bitmask_raster, -1, self.RASTER_HEIGHT) class TestRaster(unittest.TestCase): RASTER_WIDTH = TestBand.WIDTH RASTER_HEIGHT = TestBand.HEIGHT RASTER_DATA_TYPE = epr.E_TID_FLOAT RASTER_ELEM_SIZE = 4 RTOL = 1e-7 TEST_DATA = np.zeros((10, 10)) def setUp(self): self.raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) def test_get_width(self): self.assertEqual(self.raster.get_width(), self.RASTER_WIDTH) def test_get_height(self): self.assertEqual(self.raster.get_height(), self.RASTER_HEIGHT) def test_get_elem_size(self): self.assertEqual(self.raster.get_elem_size(), self.RASTER_ELEM_SIZE) def test_get_pixel(self): self.assertAlmostEqual(self.raster.get_pixel(0, 0), self.TEST_DATA[0, 0]) def test_get_pixel_invalid_x(self): self.assertRaises(ValueError, self.raster.get_pixel, -1, 0) self.assertRaises(ValueError, self.raster.get_pixel, self.RASTER_WIDTH + 1, 0) def test_get_pixel_invalid_y(self): self.assertRaises(ValueError, self.raster.get_pixel, 0, -1) self.assertRaises(ValueError, self.raster.get_pixel, 0, self.RASTER_HEIGHT + 1) def test_get_pixel_invalid_coor(self): self.assertRaises(ValueError, self.raster.get_pixel, -1, -1) self.assertRaises(ValueError, self.raster.get_pixel, self.RASTER_WIDTH + 1, self.RASTER_HEIGHT + 1) def test_get_pixel_type(self): self.assertEqual(type(self.raster.get_pixel(0, 0)), float) def test_data_type_property(self): self.assertEqual(self.raster.data_type, self.RASTER_DATA_TYPE) def test_source_width_property(self): self.assertEqual(self.raster.source_width, self.RASTER_WIDTH) self.assertTrue(isinstance(self.raster.source_width, numbers.Integral)) def test_source_height_property(self): self.assertEqual(self.raster.source_height, self.RASTER_HEIGHT) self.assertTrue(isinstance(self.raster.source_height, numbers.Integral)) def test_source_step_x_property(self): self.assertEqual(self.raster.source_step_x, 1) self.assertTrue(isinstance(self.raster.source_step_x, numbers.Integral)) def test_source_step_y_property(self): self.assertEqual(self.raster.source_step_y, 1) self.assertTrue(isinstance(self.raster.source_step_y, numbers.Integral)) def test_data_property(self): height = self.raster.get_height() width = self.raster.get_width() data = self.raster.data self.assertTrue(isinstance(data, np.ndarray)) self.assertEqual(data.ndim, 2) self.assertEqual(data.shape, (height, width)) self.assertEqual(data.dtype, EPR_TO_NUMPY_TYPE[self.raster.data_type]) ny, nx = self.TEST_DATA.shape npt.assert_allclose(data[:ny, :nx], self.TEST_DATA, rtol=self.RTOL) def test_data_property_two_times(self): data1 = self.raster.data data2 = self.raster.data self.assertTrue(data1 is data2) self.assertTrue(np.all(data1 == data2)) def test_data_property_shared_data_semantic(self): data1 = self.raster.data data1[0, 0] *= 2 data2 = self.raster.data self.assertTrue(np.all(data1 == data2)) def test_data_property_data_scope(self): data1 = self.raster.data self.assertTrue(isinstance(data1, np.ndarray)) data1 = None data2 = self.raster.data self.assertTrue(isinstance(data2, np.ndarray)) def test_data_property_raster_scope(self): data = self.raster.data self.assertTrue(isinstance(data, np.ndarray)) self.raster = None self.assertTrue(isinstance(data, np.ndarray)) ny, nx = self.TEST_DATA.shape npt.assert_allclose(data[:ny, :nx], self.TEST_DATA, rtol=self.RTOL) class TestRasterRead(TestRaster): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) BAND_NAME = TestBand.BAND_NAME RASTER_XOFFSET = TestBand.XOFFSET RASTER_YOFFSET = TestBand.YOFFSET TEST_DATA = TestBand.TEST_DATA def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.band = self.product.get_band(self.BAND_NAME) self.raster = self.band.create_compatible_raster(self.RASTER_WIDTH, self.RASTER_HEIGHT) self.band.read_raster(self.RASTER_XOFFSET, self.RASTER_YOFFSET, self.raster) def tearDown(self): self.product.close() def test_data_property_shared_semantics_readload(self): data1 = self.raster.data data1[0, 0] *= 2 self.band.read_raster(self.RASTER_XOFFSET, self.RASTER_YOFFSET, self.raster) data2 = self.raster.data self.assertEqual(data1[0, 0], data2[0, 0]) self.assertTrue(np.all(data1 == data2)) class TestAnnotatedRasterRead(TestRasterRead): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) BAND_NAME = TestAnnotationBand.BAND_NAME RASTER_XOFFSET = TestAnnotationBand.XOFFSET RASTER_YOFFSET = TestAnnotationBand.YOFFSET TEST_DATA = TestAnnotationBand.TEST_DATA RTOL = 1e-6 @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_get_pixel(self): super(TestAnnotatedRasterRead, self).test_get_pixel() @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_data_property(self): super(TestAnnotatedRasterRead, self).test_data_property() @unittest.skipIf(EPR_C_BUG_PYEPR009, 'buggy EPR_C_API detected') def test_data_property_raster_scope(self): super(TestAnnotatedRasterRead, self).test_data_property_raster_scope() class TestRasterHighLevelAPI(unittest.TestCase): RASTER_WIDTH = 400 RASTER_HEIGHT = 300 RASTER_DATA_TYPE = epr.E_TID_FLOAT def setUp(self): self.raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) def test_repr(self): pattern = (r' (?P\w+) ' r'\((?P\d+)L x (?P\d+)P\)') mobj = re.match(pattern, repr(self.raster)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('data_type'), epr.data_type_id_to_str(self.raster.data_type)) self.assertEqual(mobj.group('lines'), str(self.raster.get_height())) self.assertEqual(mobj.group('pixels'), str(self.raster.get_width())) def test_repr_type(self): self.assertTrue(isinstance(repr(self.raster), str)) def test_str_type(self): self.assertTrue(isinstance(str(self.raster), str)) class TestRasterLowLevelAPI(unittest.TestCase): RASTER_WIDTH = 400 RASTER_HEIGHT = 300 RASTER_DATA_TYPE = epr.E_TID_FLOAT def setUp(self): self.raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) def test_magic(self): self.assertEqual(self.raster._magic, epr._EPR_MAGIC_RASTER) class TestRecord(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb' DATASET_NAME = 'MDS1_SQ_ADS' NUM_FIELD = 39 FIELD_NAME = 'input_missing_lines_flag' TOT_SIZE = 170 RECORD_INDEX = 0 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE, self.OPEN_MODE) self.dataset = self.product.get_dataset(self.DATASET_NAME) self.record = self.dataset.read_record(self.RECORD_INDEX) def tearDown(self): self.product.close() def test_get_num_fields(self): self.assertEqual(self.record.get_num_fields(), self.NUM_FIELD) @quiet def test_print(self): self.record.print() @quiet def test_print_ostream(self): self.record.print(sys.stderr) def test_print_invalid_ostream(self): self.assertRaises(TypeError, self.record.print, 'invalid') @quiet def test_print_element(self): self.record.print_element(3, 0) @quiet def test_print_element_ostream(self): self.record.print_element(0, 0, sys.stderr) def test_print_element_invalid_ostream(self): self.assertRaises(TypeError, self.record.print_element, 0, 0, 'invalid') @quiet # quiet avoids errors when sys.stderr does not have fileno def test_print_element_field_out_of_range(self): index = self.record.get_num_fields() + 10 self.assertRaises(ValueError, self.record.print_element, index, 0) @quiet # quiet avoids errors when sys.stderr does not have fileno def test_print_element_element_out_of_range(self): self.assertRaises(ValueError, self.record.print_element, 0, 150) def test_get_field(self): field = self.record.get_field(self.FIELD_NAME) self.assertTrue(isinstance(field, epr.Field)) def test_get_field_bytes(self): field_name = self.FIELD_NAME.encode('UTF-8') field = self.record.get_field(self.FIELD_NAME) self.assertTrue(isinstance(field_name, bytes)) self.assertTrue(isinstance(field, epr.Field)) def test_get_field_invlid_name(self): self.assertRaises(ValueError, self.record.get_field, '') def test_get_field_at(self): self.assertTrue(isinstance(self.record.get_field_at(0), epr.Field)) def test_get_field_at_invalid_index(self): index = self.record.get_num_fields() + 10 self.assertRaises(ValueError, self.record.get_field_at, index) def test_dataset_name(self): self.assertEqual(self.record.dataset_name, self.DATASET_NAME) def test_dataset_name_new(self): record = self.dataset.create_record() self.assertEqual(record.dataset_name, self.DATASET_NAME) def test_tot_size(self): self.assertEqual(self.record.tot_size, self.TOT_SIZE) def test_index(self): self.assertEqual(self.record.index, self.RECORD_INDEX) class TestRecordRW(TestRecord): OPEN_MODE = 'rb+' class TestRecordHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestRecord.DATASET_NAME FIELD_NAMES = [ 'zero_doppler_time', 'attach_flag', 'input_mean_flag', 'input_std_dev_flag', 'input_gaps_flag', 'input_missing_lines_flag', 'dop_cen_flag', 'dop_amb_flag', 'output_mean_flag', 'output_std_dev_flag', 'chirp_flag', 'missing_data_sets_flag', 'invalid_downlink_flag', 'spare_1', 'thresh_chirp_broadening', 'thresh_chirp_sidelobe', 'thresh_chirp_islr', 'thresh_input_mean', 'exp_input_mean', 'thresh_input_std_dev', 'exp_input_std_dev', 'thresh_dop_cen', 'thresh_dop_amb', 'thresh_output_mean', 'exp_output_mean', 'thresh_output_std_dev', 'exp_output_std_dev', 'thresh_input_missing_lines', 'thresh_input_gaps', 'lines_per_gaps', 'spare_2', 'input_mean', 'input_std_dev', 'num_gaps', 'num_missing_lines', 'output_mean', 'output_std_dev', 'tot_errors', 'Spare_3', ] def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) self.record = self.dataset.read_record(0) def tearDown(self): self.product.close() def test_get_field_names_number(self): self.assertEqual(len(self.record.get_field_names()), self.record.get_num_fields()) def test_get_field_names(self): self.assertEqual(self.record.get_field_names()[:len(self.FIELD_NAMES)], self.FIELD_NAMES) def test_fields(self): fields = self.record.fields() self.assertTrue(fields) self.assertEqual(len(fields), self.record.get_num_fields()) names = [field.get_name() for field in fields] self.assertEqual(self.record.get_field_names(), names) def test_iter(self): index = 0 for field in self.record: ref_field = self.record.get_field_at(index) self.assertEqual(field.get_name(), ref_field.get_name()) index += 1 self.assertEqual(index, self.record.get_num_fields()) def test_repr_type(self): self.assertTrue(isinstance(repr(self.record), str)) def test_str_type(self): self.assertTrue(isinstance(str(self.record), str)) class TestRecordLowLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) RECORD_INDEX = 0 RECORD_SIZE = 170 RECORD_OFFSET = RECORD_INDEX * RECORD_SIZE def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) dataset = self.product.get_dataset_at(0) self.record = dataset.read_record(self.RECORD_INDEX) def tearDown(self): self.product.close() def test_magic(self): self.assertEqual(self.record._magic, epr._EPR_MAGIC_RECORD) def test_get_offset(self): self.assertEqual(self.record.get_offset(), self.RECORD_OFFSET) class TestMultipleRecordsHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestProduct.DATASET_NAME def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) def tearDown(self): self.product.close() def test_repr(self): pattern = r' (?P\d+) fields' for record in self.dataset: mobj = re.match(pattern, repr(record)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('num'), str(record.get_num_fields())) def test_str_vs_print(self): for record in self.dataset: with tempfile.TemporaryFile('w+') as fd: record.print(fd) fd.flush() fd.seek(0) data = fd.read() if data.endswith('\n'): data = data[:-1] self.assertEqual(data, str(record)) class TestMphRecordHighLevelAPI(TestRecordHighLevelAPI): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MPH' FIELD_NAMES = [ 'PRODUCT', 'PROC_STAGE', 'REF_DOC', 'ACQUISITION_STATION', 'PROC_CENTER', 'PROC_TIME', 'SOFTWARE_VER', 'SENSING_START', 'SENSING_STOP', 'PHASE', 'CYCLE', 'REL_ORBIT', ] def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.record = self.product.get_mph() def tearDown(self): self.product.close() def test_index(self): self.assertEqual(self.record.index, None) class TestRecordOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MDS1_SQ_ADS' NUM_FIELD = 39 FIELD_NAME = 'input_missing_lines_flag' FIELD_NAMES = TestRecordHighLevelAPI.FIELD_NAMES def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(0) # self.mph = product.get_mph() product.close() def test_get_num_fields(self): self.assertEqual(self.record.get_num_fields(), self.NUM_FIELD) # def test_get_num_fields_mph(self): # self.assertEqual(self.mph.get_num_fields(), 34) def test_print(self): self.assertRaises(ValueError, self.record.print) def test_print_element(self): self.assertRaises(ValueError, self.record.print_element, 3, 0) def test_get_field(self): self.assertRaises(ValueError, self.record.get_field, self.FIELD_NAME) def test_get_field_at(self): self.assertRaises(ValueError, self.record.get_field_at, 0) def test_get_field_names(self): self.assertRaises(ValueError, self.record.get_field_names) def test_fields(self): self.assertRaises(ValueError, self.record.fields) def test_iter(self): self.assertRaises(ValueError, iter, self.record) def test_repr(self): self.assertRaises(ValueError, repr, self.record) def test_str(self): self.assertRaises(ValueError, str, self.record) class TestField(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb' DATASET_NAME = 'MDS1_SQ_ADS' RECORD_INDEX = 0 FIELD_NAME = 'input_missing_lines_flag' FIELD_DESCRIPTION = ( 'Missing lines significant flag. ' '0 = percentage of missing lines <= threshold value ' '1 = percentage of missing lines > threshold value. ' 'The number of missing lines is the number of lines missing from ' 'the input data excluding data gaps.' ) FIELD_TYPE = epr.E_TID_UCHAR # FIELD_TYPE_NAME = 'uchar' FIELD_NUM_ELEMS = 1 FIELD_VALUES = (0,) FIELD_UNIT = 'flag' FIELD_OFFSET = 16 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE, self.OPEN_MODE) dataset = self.product.get_dataset(self.DATASET_NAME) record = dataset.read_record(self.RECORD_INDEX) self.field = record.get_field(self.FIELD_NAME) def tearDown(self): self.product.close() @quiet def test_print_field(self): self.field.print() @quiet def test_print_field_ostream(self): self.field.print(sys.stderr) def test_print_fied_invalid_ostream(self): self.assertRaises(TypeError, self.field.print, 'invalid') def test_get_unit(self): self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) def test_get_description(self): self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) def test_get_num_elems(self): self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) def test_get_name(self): self.assertEqual(self.field.get_name(), self.FIELD_NAME) def test_get_type(self): self.assertEqual(self.field.get_type(), self.FIELD_TYPE) def test_get_offset(self): self.assertEqual(self.field.get_offset(), self.FIELD_OFFSET) def test_get_elem(self): self.assertEqual(self.field.get_elem(), self.FIELD_VALUES[0]) def test_get_elem_index(self): self.assertEqual(self.field.get_elem(0), self.FIELD_VALUES[0]) def test_get_elem_invalid_index(self): self.assertRaises(ValueError, self.field.get_elem, self.FIELD_NUM_ELEMS + 10) def test_get_elems(self): vect = self.field.get_elems() self.assertTrue(isinstance(vect, np.ndarray)) self.assertEqual(vect.shape, (self.field.get_num_elems(),)) self.assertEqual(vect.dtype, epr.get_numpy_dtype(self.FIELD_TYPE)) npt.assert_allclose(vect[:len(self.FIELD_VALUES)], self.FIELD_VALUES) def test_tot_size(self): elem_size = epr.get_data_type_size(self.FIELD_TYPE) tot_size = elem_size * self.FIELD_NUM_ELEMS self.assertEqual(self.field.tot_size, tot_size) class TestFieldRW(TestField): OPEN_MODE = 'rb+' class TestFieldWriteOnReadOnly(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb' DATASET_NAME = 'MDS1' RECORD_INDEX = 10 FIELD_NAME = 'proc_data' FIELD_DESCRIPTION = 'SAR Processed Data. Real samples (detected products)' FIELD_TYPE = epr.E_TID_USHORT FIELD_TYPE_NAME = 'ushort' FIELD_UNIT = '' FIELD_NUM_ELEMS = 1452 def setUp(self): self.filename = self.PRODUCT_FILE + '_' shutil.copy(self.PRODUCT_FILE, self.filename) self.product = epr.Product(self.filename, self.OPEN_MODE) dataset = self.product.get_dataset(self.DATASET_NAME) record = dataset.read_record(self.RECORD_INDEX) self.field = record.get_field(self.FIELD_NAME) def tearDown(self): self.product.close() os.unlink(self.filename) def test_write_on_read_only_product(self): value = self.field.get_elem() + 10 self.assertRaises(TypeError, self.field.set_elem, value) class TestFieldWrite(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb+' REOPEN = False DATASET_NAME = 'MDS1' RECORD_INDEX = 100 FIELD_NAME = 'proc_data' FIELD_DESCRIPTION = 'SAR Processed Data. Real samples (detected products)' FIELD_TYPE = epr.E_TID_USHORT FIELD_TYPE_NAME = 'ushort' FIELD_UNIT = '' FIELD_INDEX = 3 FIELD_NUM_ELEMS = 1452 FIELD_VALUES = ( 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, 2417, 2282, 2280, 2393, 2440, 2697, 3119, 3577, 3853, 3688, 3784, 4201, 3846, 2821, 2186, ) def setUp(self): self.filename = self.PRODUCT_FILE + '_' shutil.copy(self.PRODUCT_FILE, self.filename) self.product = None self.dataset = None self.record = None self.field = None self.reopen(self.OPEN_MODE) self.offset = self._get_offset() def _get_offset(self): offset = self.dataset.get_dsd().ds_offset offset += self.record.index * self.record.tot_size for i in range(self.FIELD_INDEX): offset += self.record.get_field_at(i).tot_size return offset def tearDown(self): self.product.close() os.unlink(self.filename) def reopen(self, mode='rb'): if self.product is not None: self.product.close() self.product = epr.Product(self.filename, mode) self.dataset = self.product.get_dataset(self.DATASET_NAME) self.record = self.dataset.read_record(self.RECORD_INDEX) self.field = self.record.get_field(self.FIELD_NAME) def read(self, offset=0, size=None): if size is None: size = self.field.tot_size os.lseek(self.product._fileno, self.offset + offset, os.SEEK_SET) return os.read(self.product._fileno, size) def test_set_elem_metadata(self): self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) value = self.field.get_elem() + 10 self.field.set_elem(value) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) def test_set_elem_data(self): npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], self.FIELD_VALUES) self.assertEqual(self.field.get_elem(), self.FIELD_VALUES[0]) value = self.field.get_elem() + 10 self.field.set_elem(value) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_elem(), value) values = np.array(self.FIELD_VALUES) values[0] = value npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], values) def test_set_elem_rawdata(self): orig_data = self.read() value = self.field.get_elem() + 10 self.field.set_elem(value) if self.REOPEN: self.reopen() else: self.product.flush() data = self.read() self.assertNotEqual(data, orig_data) dtype = np.dtype(epr.get_numpy_dtype(self.FIELD_TYPE)) if dtype.byteorder != '>': dtype = dtype.newbyteorder() data = np.frombuffer(data, dtype) orig_data = np.frombuffer(orig_data, dtype).copy() orig_data[0] = value npt.assert_array_equal(data, orig_data) def test_set_elem0_metadata(self): self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) value = self.field.get_elem(0) + 10 self.field.set_elem(value) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) def test_set_elem0_data(self): npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], self.FIELD_VALUES) self.assertEqual(self.field.get_elem(0), self.FIELD_VALUES[0]) value = self.field.get_elem(0) + 10 self.field.set_elem(value) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_elem(0), value) values = np.array(self.FIELD_VALUES) values[0] = value npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], values) def test_set_elem0_rawdata(self): orig_data = self.read() value = self.field.get_elem(0) + 10 self.field.set_elem(value) if self.REOPEN: self.reopen() else: self.product.flush() data = self.read() self.assertNotEqual(data, orig_data) dtype = np.dtype(epr.get_numpy_dtype(self.FIELD_TYPE)) if dtype.byteorder != '>': dtype = dtype.newbyteorder() data = np.frombuffer(data, dtype) orig_data = np.frombuffer(orig_data, dtype).copy() orig_data[0] = value npt.assert_array_equal(data, orig_data) def test_set_elem20_metadata(self): self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) value = self.field.get_elem(20) + 1 self.field.set_elem(value, 20) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) def test_set_elem20_data(self): npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], self.FIELD_VALUES) self.assertEqual(self.field.get_elem(20), self.FIELD_VALUES[20]) value = self.field.get_elem(20) + 1 self.field.set_elem(value, 20) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_elem(20), value) values = np.array(self.FIELD_VALUES) values[20] = value npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], values) def test_set_elem20_rawdata(self): orig_data = self.read() value = self.field.get_elem(20) + 1 self.field.set_elem(value, 20) if self.REOPEN: self.reopen() else: self.product.flush() data = self.read() self.assertNotEqual(data, orig_data) dtype = np.dtype(epr.get_numpy_dtype(self.FIELD_TYPE)) if dtype.byteorder != '>': dtype = dtype.newbyteorder() data = np.frombuffer(data, dtype) orig_data = np.frombuffer(orig_data, dtype).copy() orig_data[20] = value npt.assert_array_equal(data, orig_data) def test_set_elems_metadata(self): self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) values = self.field.get_elems() + 1 self.field.set_elems(values) if self.REOPEN: self.reopen() else: self.product.flush() self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) self.assertEqual(self.field.get_type(), self.FIELD_TYPE) self.assertEqual(epr.data_type_id_to_str(self.field.get_type()), self.FIELD_TYPE_NAME) self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) def test_set_elems_data(self): npt.assert_array_equal( self.field.get_elems()[:len(self.FIELD_VALUES)], self.FIELD_VALUES) values = self.field.get_elems() + 1 self.field.set_elems(values) if self.REOPEN: self.reopen() else: self.product.flush() npt.assert_array_equal(self.field.get_elems(), values) def test_set_elems_rawdata(self): orig_data = self.read() values = self.field.get_elems() + 1 self.field.set_elems(values) if self.REOPEN: self.reopen() else: self.product.flush() data = self.read() self.assertNotEqual(data, orig_data) dtype = np.dtype(epr.get_numpy_dtype(self.FIELD_TYPE)) if dtype.byteorder != '>': dtype = dtype.newbyteorder() data = np.frombuffer(data, dtype) orig_data = np.frombuffer(orig_data, dtype).copy() orig_data += 1 npt.assert_array_equal(data, orig_data) def test_set_mph_elem(self): mph = self.product.get_mph() field = mph.get_field_at(3) self.assertRaises(NotImplementedError, field.set_elem, 5) class TestFieldWriteReopen(TestFieldWrite): REOPEN = True class TestTimeField(TestField): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MDS1_SQ_ADS' FIELD_NAME = 'zero_doppler_time' FIELD_DESCRIPTION = 'Zero doppler time at which SQ information applies' FIELD_TYPE = epr.E_TID_TIME FIELD_TYPE_NAME = 'time' FIELD_NUM_ELEMS = 1 FIELD_VALUES = ( epr.EPRTime(days=3567, seconds=10588, microseconds=239091), ) FIELD_UNIT = 'MJD' FIELD_OFFSET = 0 def test_get_elems(self): vect = self.field.get_elems() self.assertTrue(isinstance(vect, np.ndarray)) self.assertEqual(vect.shape, (self.field.get_num_elems(),)) self.assertEqual(vect.dtype, epr.MJD) value = self.FIELD_VALUES[0] self.assertEqual(vect[0]['days'], value.days) self.assertEqual(vect[0]['seconds'], value.seconds) self.assertEqual(vect[0]['microseconds'], value.microseconds) class TestFieldWithMiltipleElems(TestField): DATASET_NAME = TestProduct.DATASET_NAME RECORD_INDEX = TestFieldWrite.RECORD_INDEX FIELD_NAME = 'proc_data' FIELD_DESCRIPTION = 'SAR Processed Data. Real samples (detected products)' FIELD_TYPE = epr.E_TID_USHORT FIELD_TYPE_NAME = 'ushort' FIELD_NUM_ELEMS = 1452 FIELD_VALUES = TestFieldWrite.FIELD_VALUES FIELD_UNIT = '' FIELD_OFFSET = 17 class TestFieldHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestProduct.DATASET_NAME def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) dataset = self.product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(0) def tearDown(self): self.product.close() def test_repr(self): pattern = (r'epr\.Field\("(?P.+)"\) (?P\d+) ' r'(?P\w+) elements') for field in self.record: mobj = re.match(pattern, repr(field)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), field.get_name()) self.assertEqual(mobj.group('num'), str(field.get_num_elems())) self.assertEqual(mobj.group('type'), epr.data_type_id_to_str(field.get_type())) def test_repr_type(self): field = self.record.get_field_at(0) self.assertTrue(isinstance(repr(field), str)) def test_str_type(self): field = self.record.get_field_at(0) self.assertTrue(isinstance(str(field), str)) def test_str_vs_print(self): for field in self.record: with tempfile.TemporaryFile('w+') as fd: field.print(fd) fd.flush() fd.seek(0) data = fd.read() if data.endswith('\n'): data = data[:-1] self.assertEqual(data, str(field)) def test_eq_field1_field1(self): field = self.record.get_field_at(0) self.assertEqual(field, field) def test_eq_field1_field2(self): field1 = self.record.get_field_at(1) field2 = self.record.get_field_at(2) self.assertFalse(field1 == field2) def test_eq_field_record(self): field = self.record.get_field_at(0) self.assertFalse(field == self.record) def test_ne_field1_field1(self): field = self.record.get_field_at(0) self.assertFalse(field != field) def test_ne_field1_field2(self): field1 = self.record.get_field_at(1) field2 = self.record.get_field_at(2) self.assertNotEqual(field1, field2) def test_ne_field_record(self): field = self.record.get_field_at(0) self.assertNotEqual(field, self.record) class TestFieldHighLevelAPI2(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MAIN_PROCESSING_PARAMS_ADS' RECORD_INDEX = 0 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def tearDown(self): self.product.close() def test_len_1(self): dataset = self.product.get_dataset(self.DATASET_NAME) record = dataset.read_record(self.RECORD_INDEX) field = record.get_field('range_spacing') self.assertEqual(len(field), field.get_num_elems()) def test_len_x(self): dataset = self.product.get_dataset(self.DATASET_NAME) record = dataset.read_record(self.RECORD_INDEX) field = record.get_field('image_parameters.prf_value') self.assertEqual(len(field), field.get_num_elems()) def test_len_e_tid_unknown(self): dataset = self.product.get_dataset(self.DATASET_NAME) record = dataset.read_record(self.RECORD_INDEX) field = record.get_field('spare_1') self.assertEqual(len(field), field.get_num_elems()) def test_len_e_tid_string(self): dataset = self.product.get_dataset(self.DATASET_NAME) record = dataset.read_record(self.RECORD_INDEX) field = record.get_field('swath_id') self.assertEqual(len(field), len(field.get_elem())) class TestFieldLowLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_INDEX = 0 RECORD_INDEX = 0 FIELD_NAME = 'invalid_downlink_flag' FIELD_OFFSET = 23 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) dataset = self.product.get_dataset_at(self.DATASET_INDEX) record = dataset.read_record(self.RECORD_INDEX) self.field = record.get_field(self.FIELD_NAME) def tearDown(self): self.product.close() def test_magic(self): self.assertEqual(self.field._magic, epr._EPR_MAGIC_FIELD) def test_get_offset(self): self.assertEqual(self.field.get_offset(), self.FIELD_OFFSET) class TestFieldOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MDS1_SQ_ADS' RECOSR_INDEX = 0 FIELD_NAME = 'invalid_downlink_flag' FIELD_NAME2 = 'zero_doppler_time' def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(self.RECOSR_INDEX) self.field = self.record.get_field(self.FIELD_NAME) self.field2 = self.record.get_field(self.FIELD_NAME2) product.close() def test_print_field(self): self.assertRaises(ValueError, self.field.print) def test_get_unit(self): self.assertRaises(ValueError, self.field.get_unit) def test_get_description(self): self.assertRaises(ValueError, self.field.get_description) def test_get_num_elems(self): self.assertRaises(ValueError, self.field.get_num_elems) def test_get_name(self): self.assertRaises(ValueError, self.field.get_name) def test_get_type(self): self.assertRaises(ValueError, self.field.get_type) def test_get_elem(self): self.assertRaises(ValueError, self.field.get_elem) def test_get_elems(self): self.assertRaises(ValueError, self.field.get_elems) def test_repr(self): self.assertRaises(ValueError, repr, self.field) def test_str(self): self.assertRaises(ValueError, str, self.field) def test_eq(self): self.assertRaises(ValueError, operator.eq, self.field, self.field2) def test_ne(self): self.assertRaises(ValueError, operator.ne, self.field, self.field2) def test_len(self): self.assertRaises(ValueError, len, self.field) class TestDSD(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) OPEN_MODE = 'rb' DSD_INDEX = 0 DS_NAME = 'MDS1 SQ ADS' DS_OFFSET = 7346 DS_TYPE = 'A' DS_SIZE = 170 DSR_SIZE = 170 NUM_DSR = 1 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE, self.OPEN_MODE) self.dsd = self.product.get_dsd_at(self.DSD_INDEX) def tearDown(self): self.product.close() def test_index(self): self.assertEqual(self.dsd.index, self.DSD_INDEX) self.assertTrue(isinstance(self.dsd.index, int)) def test_ds_name(self): self.assertEqual(self.dsd.ds_name, self.DS_NAME) self.assertTrue(isinstance(self.dsd.ds_name, str)) def test_ds_type(self): self.assertEqual(self.dsd.ds_type, self.DS_TYPE) self.assertTrue(isinstance(self.dsd.ds_type, str)) def test_filename(self): self.assertEqual(self.dsd.filename, '') self.assertTrue(isinstance(self.dsd.filename, str)) def test_ds_offset(self): self.assertEqual(self.dsd.ds_offset, self.DS_OFFSET) self.assertTrue(isinstance(self.dsd.ds_offset, numbers.Integral)) def test_ds_size(self): self.assertEqual(self.dsd.ds_size, self.DS_SIZE) self.assertTrue(isinstance(self.dsd.ds_size, numbers.Integral)) def test_num_dsr(self): self.assertEqual(self.dsd.num_dsr, self.NUM_DSR) self.assertTrue(isinstance(self.dsd.num_dsr, numbers.Integral)) def test_dsr_size(self): self.assertEqual(self.dsd.dsr_size, self.DSR_SIZE) self.assertTrue(isinstance(self.dsd.dsr_size, numbers.Integral)) def test_eq_dsd1_dsd1(self): self.assertEqual(self.dsd, self.dsd) def test_eq_dsd1_dsd2(self): dsd1 = self.product.get_dsd_at(1) dsd2 = self.product.get_dsd_at(2) self.assertFalse(dsd1 == dsd2) def test_eq_dsd_product(self): self.assertFalse(self.dsd == self.product) def test_ne_dsd1_dsd1(self): self.assertFalse(self.dsd != self.dsd) def test_ne_dsd1_dsd2(self): dsd1 = self.product.get_dsd_at(1) dsd2 = self.product.get_dsd_at(2) self.assertNotEqual(dsd1, dsd2) def test_ne_dsd_record(self): self.assertTrue(self.dsd != self.product) class TestDSDRW(TestDSD): OPEN_MODE = 'rb+' class TestDsdHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dsd = self.product.get_dsd_at(0) def tearDown(self): self.product.close() def test_repr(self): pattern = r'epr\.DSD\("(?P.+)"\)' mobj = re.match(pattern, repr(self.dsd)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), self.dsd.ds_name) def test_repr_type(self): self.assertTrue(isinstance(repr(self.dsd), str)) def test_str_type(self): self.assertTrue(isinstance(str(self.dsd), str)) class TestDsdLowLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dsd = self.product.get_dsd_at(0) def tearDown(self): self.product.close() def test_magic(self): # self.assertEqual(self.dsd._magic, epr._EPR_MAGIC_DSD_ID) self.assertTrue(isinstance(self.dsd._magic, int)) class TestDSDOnCloserProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DSD_INDEX = 0 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dsd = self.product.get_dsd_at(self.DSD_INDEX) self.dsd2 = self.product.get_dsd_at(self.DSD_INDEX + 1) self.product.close() def test_index(self): self.assertRaises(ValueError, getattr, self.dsd, 'index') def test_ds_name(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_name') def test_ds_type(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_type') def test_filename(self): self.assertRaises(ValueError, getattr, self.dsd, 'filename') def test_ds_offset(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_offset') def test_ds_size(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_size') def test_num_dsr(self): self.assertRaises(ValueError, getattr, self.dsd, 'num_dsr') def test_dsr_size(self): self.assertRaises(ValueError, getattr, self.dsd, 'dsr_size') def test_eq(self): self.assertRaises(ValueError, operator.eq, self.dsd, self.dsd2) def test_ne(self): self.assertRaises(ValueError, operator.ne, self.dsd, self.dsd2) def test_repr(self): self.assertRaises(ValueError, repr, self.dsd) def test_str(self): self.assertRaises(ValueError, str, self.dsd) class TestDataypeFunctions(unittest.TestCase): TYPE_NAMES = { epr.E_TID_UNKNOWN: '', epr.E_TID_UCHAR: 'uchar', epr.E_TID_CHAR: 'char', epr.E_TID_USHORT: 'ushort', epr.E_TID_SHORT: 'short', epr.E_TID_UINT: 'uint', epr.E_TID_INT: 'int', epr.E_TID_FLOAT: 'float', epr.E_TID_DOUBLE: 'double', epr.E_TID_STRING: 'string', epr.E_TID_SPARE: 'spare', epr.E_TID_TIME: 'time', } TYPE_SIZES = { epr.E_TID_UNKNOWN: 0, epr.E_TID_UCHAR: 1, epr.E_TID_CHAR: 1, epr.E_TID_USHORT: 2, epr.E_TID_SHORT: 2, epr.E_TID_UINT: 4, epr.E_TID_INT: 4, epr.E_TID_FLOAT: 4, epr.E_TID_DOUBLE: 8, epr.E_TID_STRING: 1, epr.E_TID_SPARE: 1, epr.E_TID_TIME: 12, } TYPE_MAP = { epr.E_TID_UNKNOWN: None, epr.E_TID_UCHAR: np.uint8, epr.E_TID_CHAR: np.int8, epr.E_TID_USHORT: np.uint16, epr.E_TID_SHORT: np.int16, epr.E_TID_UINT: np.uint32, epr.E_TID_INT: np.int32, epr.E_TID_FLOAT: np.float32, epr.E_TID_DOUBLE: np.float64, epr.E_TID_STRING: np.bytes_, epr.E_TID_SPARE: None, epr.E_TID_TIME: epr.MJD, } def test_data_type_id_to_str(self): for type_id, type_name in self.TYPE_NAMES.items(): self.assertEqual(epr.data_type_id_to_str(type_id), type_name) def test_data_type_id_to_str_invalid(self): self.assertEqual(epr.data_type_id_to_str(500), '') def test_get_data_type_size(self): for type_id, type_size in self.TYPE_SIZES.items(): self.assertEqual(epr.get_data_type_size(type_id), type_size) def test_get_data_type_size_invalid(self): self.assertEqual(epr.get_data_type_size(500), 0) def test_epr_to_numpy_dtype(self): for epr_type in self.TYPE_MAP: with self.subTest(epr_type=epr_type): self.assertEqual( epr.get_numpy_dtype(epr_type), self.TYPE_MAP[epr_type]) class TestScalingMethodFunctions(unittest.TestCase): METHOD_NAMES = { epr.E_SMID_NON: 'NONE', epr.E_SMID_LIN: 'LIN', epr.E_SMID_LOG: 'LOG', } def test_get_scaling_method_name(self): for id_, name in self.METHOD_NAMES.items(): self.assertEqual(epr.get_scaling_method_name(id_), name) def test_get_scaling_method_name_invalid(self): self.assertRaises(ValueError, epr.get_scaling_method_name, 500) class TestSampleModelFunctions(unittest.TestCase): MODEL_NAMES = { epr.E_SMOD_1OF1: '1OF1', epr.E_SMOD_1OF2: '1OF2', epr.E_SMOD_2OF2: '2OF2', epr.E_SMOD_3TOI: '3TOI', epr.E_SMOD_2TOF: '2TOF', } def test_get_scaling_method_name(self): for id_, name in self.MODEL_NAMES.items(): self.assertEqual(epr.get_sample_model_name(id_), name) def test_get_scaling_method_name_invalid(self): self.assertRaises(ValueError, epr.get_sample_model_name, 500) class TestDirectInstantiation(unittest.TestCase): MSG_PATTERN = '"%s" class cannot be instantiated from Python' def test_direct_dsd_instantiation(self): pattern = self.MSG_PATTERN % epr.DSD.__name__ self.assertRaisesRegex(TypeError, pattern, epr.DSD) def test_direct_field_instantiation(self): pattern = self.MSG_PATTERN % epr.Field.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Field) def test_direct_record_instantiation(self): pattern = self.MSG_PATTERN % epr.Record.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Record) def test_direct_raster_instantiation(self): pattern = self.MSG_PATTERN % epr.Raster.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Raster) def test_direct_band_instantiation(self): pattern = self.MSG_PATTERN % epr.Band.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Band) def test_direct_dataset_instantiation(self): pattern = self.MSG_PATTERN % epr.Dataset.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Dataset) def test_direct_Product_instantiation(self): self.assertRaises(epr.EPRError, epr.Product, 'filename') class TestLibVersion(unittest.TestCase): def test_c_api_version(self): self.assertTrue(isinstance(epr.EPR_C_API_VERSION, str)) # only PyPy 3 seems to be affected @unittest.skipIf(platform.python_implementation() == 'PyPy', 'skip memory leak check on PyPy') @unittest.skipIf(resource is None, '"resource" module not available') class TestMemoryLeaks(unittest.TestCase): # See gh-10 (https://github.com/avalentino/pyepr/issues/10) PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) BAND_NAME = 'incident_angle' def test_memory_leacks_on_read_as_array(self): N = 10 for n in range(N): with epr.open(self.PRODUCT_FILE) as p: p.get_band(self.BAND_NAME).read_as_array() if n <= 1: m1 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss m2 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss self.assertLessEqual(m2 - m1, 8) if __name__ == '__main__': print('PyEPR: %s' % epr.__version__) print('EPR API: %s' % epr.EPR_C_API_VERSION) print('Numpy: %s' % np.__version__) print('Python: %s' % sys.version) unittest.main()