pax_global_header00006660000000000000000000000064152526022170014514gustar00rootroot0000000000000052 comment=8de63cb3b57db066a6404ac7b6a90b56f83ddc0a pyepr-1.3.1/000077500000000000000000000000001525260221700126555ustar00rootroot00000000000000pyepr-1.3.1/.flake8000066400000000000000000000036451525260221700140400ustar00rootroot00000000000000[flake8] min-python-version = 3.11 # max_line_length = 79 # max-complexity = 10 doctests = true # https://github.com/psf/black/blob/main/docs/guides/using_black_with_other_tools.md # - E203: whitespace before ‘,’, ‘;’, or ‘:’ # - E701: multiple statements on one line (colon) # - E704: multiple statements on one line (def) # + W504: line break after binary operator # https://www.pydocstyle.org/en/stable/error_codes.html # - D105: undocumented-magic-method # - D107: undocumented-public-init # https://github.com/gforcada/flake8-builtins?tab=readme-ov-file#rules # - A003: A class attribute is shadowing a Python builtin. # - A005: A module is shadowing a Python builtin module (e.g: logging or socket) # https://github.com/PyCQA/flake8-bugbear?tab=readme-ov-file#list-of-warnings # + B950: (smart) Line too long # https://github.com/orsinium-labs/flake8-todos # - T003: add link on issue into TODO. # https://github.com/plinss/flake8-noqa?tab=readme-ov-file#error-codes # NQA102: "# noqa: X000" has no matching violations # misc # - I # flake8-import-order: not compatible with isort # - SC # flake8-spellcheck: too aggressive # - CNL # flake8-class-newline: incompatible with black # - JS # flake8-multiline-containers: not compatibel with ruff preview # - ANN # flake8-annotations: too aggressive # - C # flake8-commas: too aggressive # - PT # flake8-pytest-style: test suite compatibel with unittest extend-ignore = E203,E501,E701,W503,SC,CNL extend-select = W504,B950 per-file-ignores = tests/*: D,ANN,C812,PT009,PT027,T003,T201,NIC002 */tests/*: D,ANN,C812,PT009,PT027,T003,T201,NIC002 statistics = True count = True # extend-exclude = packagename/subpackage/* # flake8-cognitive-complexity # max-cognitive-complexity = 7 # default max-cognitive-complexity = 11 # flake8-noqa noqa-require-code = True # flake8-spellcheck dictionaries = en_US,python,technical,pandas # spellcheck-allowlist-file = .spellcheck-allowlist pyepr-1.3.1/.github/000077500000000000000000000000001525260221700142155ustar00rootroot00000000000000pyepr-1.3.1/.github/dependabot.yml000066400000000000000000000010241525260221700170420ustar00rootroot00000000000000# To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" groups: github-actions: patterns: - "*" pyepr-1.3.1/.github/workflows/000077500000000000000000000000001525260221700162525ustar00rootroot00000000000000pyepr-1.3.1/.github/workflows/ci.yml000066400000000000000000000103251525260221700173710ustar00rootroot00000000000000name: CI # concurrency: # group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }} # cancel-in-progress: true on: push: pull_request: branches: [ "main" ] # schedule: # - cron: '2 1 3 * *' # Allows you to run this workflow manually from the Actions tab workflow_dispatch: permissions: contents: read env: PACKAGE: pyepr jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ['3.11', '3.12', '3.13', '3.14', '3.14t'] steps: - uses: actions/checkout@v7 with: fetch-depth: 0 submodules: 'true' - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v7 with: python-version: ${{ matrix.python-version }} - name: Install build dependencies run: | python -m pip install --upgrade pip python -m pip install build twine - name: Build the package run: | python -m build python -m twine check dist/* - name: Install shell: bash run: | WHEELNAME=$(ls dist/${PACKAGE}-*.whl) python -m pip install ${WHEELNAME} - name: Install test dependencies shell: bash run: | python -m pip install --group test - 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)" python -m pytest -v tests/test_all.py syslibs: runs-on: ubuntu-26.04 steps: - uses: actions/checkout@v7 with: fetch-depth: 0 submodules: true - name: Install system dependencies run: | sudo apt update sudo apt-get -y install \ libepr-api-dev \ python3-all-dev \ python3-build \ python3-packaging \ python3-pip \ python3-setuptools \ twine - name: Install python dependencies run: | python3 -m pip install -U build setuptools packaging twine - name: Build package run: | python -m build python -m twine check dist/* - name: Install shell: bash env: PYEPR_EPRAPI_SRC: "" run: | python -m pip install --pre --only-binary ${PACKAGE} -f dist/ ${PACKAGE} - name: Install test dependencies run: | sudo apt-get -y install python3-pytest python3-pooch - 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)" python -m pytest -v tests/test_all.py coverage: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.14"] env: OS: ubuntu-latest PYTHON: "3.14" steps: - uses: actions/checkout@v7 with: fetch-depth: 0 submodules: true - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v7 with: python-version: ${{ matrix.python-version }} - name: Install dependencies shell: bash run: | python -m pip install --upgrade setuptools pip python -m pip install --group coverage - name: Build and install run: | make coverage - name: Print info run: | env PYTHONPATH=src 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@v7 with: env_vars: OS,PYTHON verbose: true pyepr-1.3.1/.github/workflows/docs.yml000066400000000000000000000022651525260221700177320ustar00rootroot00000000000000name: Docs on: push: pull_request: branches: [ "main" ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: permissions: contents: read jobs: docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 submodules: 'true' - name: Set up Python uses: actions/setup-python@v7 with: python-version: "3.x" - name: Install docs dependencies shell: bash run: | python -m pip install --upgrade pip python -m pip install --group docs python -m pip install .[all] - name: Build docs run: | mkdir -p _static python3 -m sphinx -W -b html docs docs/_build/html - name: Check links run: | mkdir -p _static python3 -m sphinx -W -b linkcheck docs docs/_build/linkcheck # - name: Doctest # run: | # mkdir -p _static # python3 -m sphinx -W -b doctest docs docs/_build/doctest - name: Spellcheck run: | mkdir -p _static python3 -m sphinx -W -b spelling docs docs/_build/spelling pyepr-1.3.1/.github/workflows/lint.yml000066400000000000000000000031601525260221700177430ustar00rootroot00000000000000name: Lint on: push: pull_request: branches: [ "main" ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: permissions: contents: read env: PACKAGE: epr jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v7 with: python-version: "3.x" - name: Install lint dependencies shell: bash run: | python -m pip install --upgrade pip python -m pip install --group lint - name: Lint (flake8) run: | python -m flake8 --version python -m flake8 --count --show-source --statistics src/${PACKAGE} tests - name: Lint (pydocstyle) run: | python -m pydocstyle --version python -m pydocstyle --count src/${PACKAGE} # - name: Lint (isort) # run: | # python -m isort --version # python -m isort --check src/${PACKAGE} tests - name: Lint (black) run: | python -m black --version python -m black --check src/${PACKAGE} tests # python -m black --diff src/${PACKAGE} tests - name: Lint (mypy) env: PYTHONPATH: src run: | python -m mypy --version python -m mypy --check-untyped-defs --ignore-missing-imports -p ${PACKAGE} - name: Lint (ruff) run: | ruff --version ruff check src/${PACKAGE} tests - name: Lint (codespell) run: | codespell --version codespell --count src/${PACKAGE} tests pyepr-1.3.1/.github/workflows/wheels.yml000066400000000000000000000031141525260221700202630ustar00rootroot00000000000000name: Wheels on: push: branches: - 'releases/**' - 'ci/**' tags: - v* pull_request: release: types: - published # Allows you to run this workflow manually from the Actions tab workflow_dispatch: permissions: contents: read jobs: build_sdist: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: submodules: 'true' - name: Set up Python uses: actions/setup-python@v7 with: python-version: "3.x" - name: Install build dependencies run: | python -m pip install --upgrade pip python -m pip install build twine - name: Build the package run: | python -m build --sdist python -m twine check dist/* - name: Upload build artifacts uses: actions/upload-artifact@v7 with: name: dist path: | dist/*.tar.gz build_wheels: name: Build wheels on ${{ matrix.os }} if: github.event_name != 'pull_request' || contains(github.event.pull_request.title, 'wheel') runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v7 with: fetch-depth: 0 submodules: 'true' - name: Build wheels uses: pypa/cibuildwheel@v4.2.1 env: PY_LIMITED_API: AUTO - uses: actions/upload-artifact@v7 with: name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl pyepr-1.3.1/.gitignore000066400000000000000000000111141525260221700146430ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] *$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 # UV # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. #uv.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock #poetry.toml # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. # https://pdm-project.org/en/latest/usage/project/#working-with-version-control #pdm.lock #pdm.toml .pdm-python .pdm-build/ # pixi # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control. #pixi.lock # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one # in the .venv directory. It is recommended not to include this directory in version control. .pixi # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .envrc .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/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ # Abstra # Abstra is an AI-powered process automation framework. # Ignore directories containing user credentials, local state, and settings. # Learn more at https://abstra.io/docs .abstra/ # Visual Studio Code # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore # and can be added to the global gitignore or merged into this file. However, if you prefer, # you could uncomment the following to ignore the entire vscode folder .vscode/ # Ruff stuff: .ruff_cache/ # PyPI configuration file .pypirc # Cursor # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data # refer to https://docs.cursor.com/context/ignore-files .cursorignore .cursorindexingignore # Marimo marimo/_static/ marimo/_lsp/ __marimo__/ pyepr-1.3.1/.gitmodules000066400000000000000000000001451525260221700150320ustar00rootroot00000000000000[submodule "extern/epr-api"] path = extern/epr-api url = https://github.com/avalentino/epr-api.git pyepr-1.3.1/.pre-commit-config.yaml000066400000000000000000000040131525260221700171340ustar00rootroot00000000000000# See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - id: check-toml - id: mixed-line-ending - id: requirements-txt-fixer - id: check-merge-conflict - id: detect-private-key - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.16.6 hooks: - id: ruff-check args: [--fix, --config=pyproject.toml] - id: ruff-format - repo: https://github.com/asottile/pyupgrade rev: v3.21.2 hooks: - id: pyupgrade args: [--py311-plus] # - repo: https://github.com/pycqa/flake8 # rev: 7.3.0 # hooks: # - id: flake8 # - repo: https://github.com/pycqa/pydocstyle # rev: 6.3.0 # hooks: # - id: pydocstyle # exclude: tests|examples|data|docs|setup.py # - repo: https://github.com/pycqa/isort # rev: 9.0.1 # hooks: # - id: isort # name: isort (python) # - repo: https://github.com/psf/black-pre-commit-mirror # rev: 26.5.1 # hooks: # - id: black # language_version: python3.11 # - id: black-jupyter # language_version: python3.11 # - repo: https://github.com/tweag/FawltyDeps # rev: v0.20.0 # hooks: # - id: check-undeclared # - id: check-unused # - repo: https://github.com/pre-commit/mirrors-mypy # rev: v2.3.1 # hooks: # - id: mypy # additional_dependencies: # - tokenize-rt==3.2.0 # - numpy>=1.21 # exclude: | # (?x)^( # docs/conf.py # ) # - repo: https://github.com/codespell-project/codespell # rev: v2.4.3 # hooks: # - id: codespell # additional_dependencies: [tomli] # exclude: | # (?x)^( # docs/spelling_wordlist.txt # ) pyepr-1.3.1/.readthedocs.yaml000066400000000000000000000015761525260221700161150ustar00rootroot00000000000000# Read the Docs configuration file for Sphinx projects # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the OS, Python version and other tools you might need build: os: ubuntu-lts-latest tools: python: "latest" jobs: install: # Since the install step is overridden, pip is no longer updated automatically. - pip install --upgrade pip - pip install --group docs # Build documentation in the "docs/" directory with Sphinx sphinx: configuration: docs/conf.py submodules: include: all # Optionally build your docs in additional formats such as PDF and ePub formats: - pdf # Optional but recommended, declare the Python requirements required # to build your documentation # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html python: install: - method: pip path: . pyepr-1.3.1/LICENSE.txt000066400000000000000000001045131525260221700145040ustar00rootroot00000000000000 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.3.1/LICENSES/000077500000000000000000000000001525260221700140625ustar00rootroot00000000000000pyepr-1.3.1/LICENSES/epr-api.txt000066400000000000000000001045131525260221700161640ustar00rootroot00000000000000 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.3.1/MANIFEST.in000066400000000000000000000004751525260221700144210ustar00rootroot00000000000000recursive-include LICENSES *.txt recursive-include tests *.py include tests/data/registry.txt recursive-include src/epr *.pyx *.pxd recursive-include extern/epr-api/src *.c *.h recursive-include docs *.rst *.txt *.py Makefile make.bat *.png recursive-include docs/_templates *.html # recursive-exclude docs/_build * pyepr-1.3.1/Makefile000066400000000000000000000072011525260221700143150ustar00rootroot00000000000000#!/usr/bin/make -f PYTHON=python3 SPHINX_APIDOC=sphinx-apidoc TARGET=epr CYTHON=$(PYTHON) -m cython CYTHONFLAGS=-3 TEST_DATSET = tests/data/$(shell grep N1 tests/test_all.py | cut -d '"' -f 2) EPRAPIROOT = extern/epr-api .PHONY: default help dist check fullcheck coverage clean cleaner distclean \ lint docs ext wheels \ debug cythonize ext-coverage coverage-report default: help help: @echo "Usage: make " @echo "Available targets:" @echo " help - print this help message" @echo " dist - generate the distribution packages (source and wheel)" @echo " check - run a full test (using pytest)" @echo " fullcheck - run a full test (using tox)" @echo " coverage - run tests and generate the coverage report" @echo " clean - clean build artifacts" @echo " cleaner - clean cache files and working directories of al tools" @echo " distclean - clean all the generated files" @echo " lint - perform check with code linter (flake8, black)" @echo " docs - generate the sphinx documentation" @echo " ext - build Python extensions in-place" @echo " wheels - build Python wheels" @echo " cythonize - generate cython C extensions" @echo " debug - generate debug build" @echo " ext-coverage - build the extension in-place with tracing enabled" @echo " coverage-report - generate the coverage report" @echo " stubs - generate Python typing stubs for cython modules" dist: $(PYTHON) -m build $(PYTHON) -m twine check dist/*.tar.gz dist/*.whl check: ext env PYTHONPATH=src $(PYTHON) -m pytest --doctest-modules src/$(TARGET) tests fullcheck: $(PYTHON) -m tox run coverage: clean ext-coverage env PYTHONPATH=src $(PYTHON) -m pytest --doctest-modules --cov=$(TARGET) --cov-report=html --cov-report=term src/$(TARGET) tests clean: $(RM) -r src/*.*-info build find . -name __pycache__ -type d -exec $(RM) -r {} + # $(RM) -r __pycache__ */__pycache__ */*/__pycache__ */*/*/__pycache__ $(RM) src/$(TARGET)/*.c src/$(TARGET)/*.cpp src/$(TARGET)/*.so src/$(TARGET)/*.o # if [ -f docs/Makefile ] ; then $(MAKE) -C docs clean; fi $(RM) -r docs/_build $(RM) MANIFEST find . -name '*~' -delete $(RM) src/epr/epr.html $(RM) epr.p* # workaround for Cython.Coverage bug #1985 cleaner: clean $(RM) -r .coverage htmlcov $(RM) -r .pytest_cache $(RM) -r .tox $(RM) -r .mypy_cache $(RM) -r .ruff_cache $(RM) -r .ipynb_checkpoints $(RM) -r .hypothesis distclean: cleaner $(RM) -r dist $(RM) -r wheelhouse $(RM) $(TEST_DATSET) lint: # $(PYTHON) -m flake8 --count --statistics src/$(TARGET) tests $(PYTHON) -m pydocstyle --count src/$(TARGET) # $(PYTHON) -m isort --check src/$(TARGET) tests $(PYTHON) -m black --check src/$(TARGET) tests $(PYTHON) -m mypy --check-untyped-defs src/$(TARGET) # --ignore-missing-imports # ruff check src/$(TARGET) tests codespell docs: mkdir -p docs/_static $(MAKE) -C docs html $(MAKE) -C docs doctest $(MAKE) -C docs linkcheck $(MAKE) -C docs spelling ext: src/epr/_epr.pyx src/epr/_epr.pxd $(PYTHON) setup.py build_ext --inplace --epr-api-src=$(EPRAPIROOT)/src cythonize: src/epr/_epr.c src/epr/_epr.c: src/epr/_epr.pyx src/epr/_epr.pxd $(CYTHON) $(CYTHONFLAGS) -o src/epr/_epr.c src/epr/_epr.pyx ext-coverage: src/epr/_epr.pyx src/epr/_epr.pxd env PYEPR_COVERAGE=TRUE $(PYTHON) setup.py build_ext --inplace debug: $(PYTHON)d setup.py build_ext --inplace --debug wheels: # Requires docker python3 -m cibuildwheel --platform auto stubs: env PYTHONPATH=src stubgen -v -m epr._epr -o src mv src/epr/_epr.pyi _epr.pyi grep -v _cython _epr.pyi | grep -v __pyx_ | grep -v _typeshed | grep -v Incomplete > src/epr/_epr.pyi $(RM) _epr.pyi pyepr-1.3.1/README.rst000066400000000000000000000127361525260221700143550ustar00rootroot00000000000000================================= ENVISAT Product Reader Python API ================================= :HomePage: https://pyepr.readthedocs.io :Author: Antonio Valentino :Contact: antonio.valentino@tiscali.it :Copyright: 2011-2026, Antonio Valentino :Version: 1.3.1 |PyPI Status| |GHA Status| |Documentation Status| |Python Versions| |License| |Wheels| |Coverage| .. |PyPI Status| image:: https://img.shields.io/pypi/v/pyepr :target: https://pypi.org/project/pyepr :alt: PyPI Status .. |GHA Status| image:: https://github.com/avalentino/pyepr/actions/workflows/ci.yml/badge.svg :target: https://github.com/avalentino/pyepr/actions :alt: GitHub Actions Status .. |Documentation Status| image:: https://readthedocs.org/projects/pyepr/badge :target: https://pyepr.readthedocs.io :alt: Documentation Status .. |Python Versions| image:: https://img.shields.io/pypi/pyversions/pyepr :target: https://pypi.org/project/pyepr :alt: Supported Python versions .. |License| image:: https://img.shields.io/pypi/l/pyepr :target: https://pypi.org/project/pyepr :alt: License .. |Wheels| image:: https://img.shields.io/pypi/wheel/pyepr :target: https://pypi.org/project/pyepr :alt: Wheels Status .. |Coverage| image:: https://codecov.io/gh/avalentino/pyepr/branch/master/graph/badge.svg :target: https://codecov.io/gh/avalentino/pyepr :alt: Coverage Status 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://earth.esa.int/eogateway/missions/envisat .. _ESA: https://earth.esa.int Links ===== * HTML documentation (`stable `_, `latest `_) * `PyEPR `_ project page on `github `_ * `source browser `_ * `commit history `_ * `issue tracker `_ * `CI status page `_ * `PyEPR project page on PyPi `_ * EPR-API `project page `_ * EPR-API `documentation `_ Dependencies ============ In order to use PyEPR it is needed that the following software are correctly installed and configured: * Python3_ >= 3.9 (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_ >= 3.0 (build only) * pytest_ (optional and only needed for testing) .. _Python3: Python_ .. _PyPy3: https://www.pypy.org .. _numpy: https://numpy.org .. _gcc: https://gcc.gnu.org .. _Cython: https://cython.org .. _pytest: https://pytest.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-2026 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.3.1/docs/000077500000000000000000000000001525260221700136055ustar00rootroot00000000000000pyepr-1.3.1/docs/Makefile000066400000000000000000000011721525260221700152460ustar00rootroot00000000000000# 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.3.1/docs/NEWS.rst000066400000000000000000000417141525260221700151220ustar00rootroot00000000000000Change history ============== PyEPR 1.3.1 (16/09/2026) ------------------------ * Update project fields. * The minimum required Cython_ version is now v3.1. * Update pre-commit configuration. * Update project configuration files. * Use Pooch_ for test data management. * Support builds with the Python stable API. * Drop support for Python < 3.11 and numpy < 2. * Build wheels for stable API ``cp311``. .. _Pooch: https://www.fatiando.org/pooch/latest/ PyEPR 1.3.0 (03/01/2026) ------------------------ * Update the bundled epr-api library source code to v2.3. * Improve typing support. * Improve support for complex data like, e.g., SAR SLC products. New :func:`epr.Product.get_complex_band_as_array()` function. * Mark the `epr` extension module as "freethreading" compatible. Please refer to the :ref:`free-threading` section in the :doc:`usermanual` for more details about the freethreading and multi-threading compatibility of the module. PyEPR 1.2.0 (29/03/2025) ------------------------ * Drop the deprecated `print_` methods, `print` should be used instead. * Switch to cython `language_level=3`. * Fix the deprecated use of `property` is cython source files. * `epr` is now a package. * Switch to "src" project layout. * Rename `doc` folder into `docs`. * Switch to mathjax_ to build HTML docs. * Formatting. * Fix broken links. * Fix spelling. * Enable CI for linting and doc building. * Move coverage configuration to `pyproject.toml`. * Fix tests on iterators. * Fix unittests of OSX ARM. .. _mathjax: https://www.mathjax.org PyEPR 1.1.5 (15/10/2023) ------------------------ * Get rid of the deprecated `pip --install-options`. * No longer use the deprecated Cython_ `IF` statement. * Build wheels for Python 3.12. * Move project metadata to `pyproject.toml` PyEPR 1.1.4 (07/01/2023) ------------------------ * Do not use deprecated keywords in `setup.cfg`. * Silence compiler warnings. * Fix `extlinks` configuration. * Modernize documentation generation: - drop local theme - drop local sphinx extension for IPython console highlighting - use the RTD sphinx theme - update sidebar templates * Fix compatibility with `packaging` v22.0. * Modernize and re-format the Python code. * The minimum required Python version is now v3.7. 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 copy of EPR C API to v2.3dev_pyepr112. 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 sub-module. * 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.pxd` * 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 behavior (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 sources inclusion in the PyEPR 0.7 (and latest) 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 highlighting 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.3.1/docs/_static/000077500000000000000000000000001525260221700152335ustar00rootroot00000000000000pyepr-1.3.1/docs/_static/.gitkeep000066400000000000000000000000001525260221700166520ustar00rootroot00000000000000pyepr-1.3.1/docs/_templates/000077500000000000000000000000001525260221700157425ustar00rootroot00000000000000pyepr-1.3.1/docs/_templates/codecov.html000066400000000000000000000003641525260221700202550ustar00rootroot00000000000000 pyepr-1.3.1/docs/_templates/gha.html000066400000000000000000000004251525260221700173700ustar00rootroot00000000000000 pyepr-1.3.1/docs/_templates/layout.html000066400000000000000000000004621525260221700201470ustar00rootroot00000000000000{% extends "!layout.html" %} {%- block menu %} {{ super() }} {%- if sidebars != None and pagename == root_doc %}
{#- new style sidebar: explicitly include/exclude templates #} {%- for sidebartemplate in sidebars %} {%- include sidebartemplate %} {%- endfor %} {%- endif %} {% endblock %} pyepr-1.3.1/docs/_templates/ohloh.html000066400000000000000000000003211525260221700177350ustar00rootroot00000000000000
pyepr-1.3.1/docs/_templates/pypi.html000066400000000000000000000014521525260221700176130ustar00rootroot00000000000000 pyepr-1.3.1/docs/_templates/readthedocs.html000066400000000000000000000003271525260221700211170ustar00rootroot00000000000000
  • readthedocs status
  • pyepr-1.3.1/docs/bands_example.rst000066400000000000000000000112571525260221700171470ustar00rootroot00000000000000Exporting band data ------------------- .. index:: ENVISAT, band, raster This tutorial shows how to convert ENVISAT_ raster information from dataset and generate flat binary (raster) files 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://earth.esa.int/eogateway/missions/envisat .. _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 underlying C library is opportunely initialized. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 1-12 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: 49- 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: 95-96 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: 97-98 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: 20-21 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: 23 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: 29-31 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: 33-34 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: 36-38 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.3.1/docs/bitmask_example.rst000066400000000000000000000071051525260221700175070ustar00rootroot00000000000000Exporting bit-masks ------------------- .. 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://earth.esa.int/eogateway/missions/envisat .. _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: 26 .. 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: 58-59 .. 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: 62-63 The EPR API allows to manage data by means of :class:`epr.Raster` objects, so the function :func:`epr.create_bitmask_raster`, specific for bit-masks, 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: 71 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: 55 *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: 73-74 .. _Python: https://www.python.org .. _ENVISAT: https://earth.esa.int/eogateway/missions/envisat .. raw:: latex \clearpage pyepr-1.3.1/docs/conf.py000066400000000000000000000110141525260221700151010ustar00rootroot00000000000000# Configuration file for the Sphinx documentation builder. # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Version utils ----------------------------------------------------------- def _get_version(filename): import re from packaging.version import parse as Version with open(filename, encoding="utf-8") as fd: data = fd.read() mobj = re.search( r"""^__version__\s*=\s*(?P['"])(?P.*)(?P=quote)""", data, re.MULTILINE, ) return Version(mobj.group("version")) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = "PyEPR" copyright = "2011-2026, Antonio Valentino" author = "Antonio Valentino" _version = _get_version("../src/epr/__init__.py") version = _version.base_version release = str(_version) # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ # "sphinx.ext.autodoc", # "sphinx.ext.autosectionlabel", # "sphinx.ext.autosummary", # "sphinx.ext.coverage", "sphinx.ext.doctest", # "sphinx.ext.duration", "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", # needs_sphinx = "1.2" # "sphinx.ext.napoleon", "sphinx.ext.todo", "sphinx.ext.viewcode", # "sphinx.ext.imgmath", # "sphinx.ext.jsmath", "sphinx.ext.mathjax", "sphinx_rtd_theme", "IPython.sphinxext.ipython_console_highlighting", "IPython.sphinxext.ipython_directive", ] try: import sphinxcontrib.spelling # noqa: F401 except ImportError: pass else: extensions.append("sphinxcontrib.spelling") templates_path = ["_templates"] master_doc = "index" exclude_patterns = [ "_build", "Thumbs.db", ".DS_Store", "**/.gitkeep", ] # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output # html_theme = 'alabaster' html_theme = "sphinx_rtd_theme" html_theme_options = { # 'prev_next_buttons_location': 'both', } html_static_path = ["_static"] html_last_updated_fmt = "%b %d, %Y" html_sidebars = { "index": [ # 'globaltoc.html', # 'relations.html', # 'sourcelink.html', # 'searchbox.html', "pypi.html", "gha.html", "readthedocs.html", "codecov.html", "ohloh.html", ], } html_domain_indices = False html_context = { "display_github": True, "github_user": "avalentino", "github_repo": "pyepr", "github_version": "master", "conf_py_path": "/docs/", } # -- Options for LaTeX output ------------------------------------------------ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-latex-output latex_elements = { "papersize": "a4paper", "pointsize": "12pt", # 'preamble': '', # 'figure_align': 'htbp', } latex_documents = [ (master_doc, "pyepr.tex", "PyEPR Documentation", author, "manual"), ] latex_domain_indices = False # -- Options for linkcheck ------------------------------------------------ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder linkcheck_ignore = [ f"https://pyepr.readthedocs.io/en/v{version}", "https://www.openhub.net", "https://www.gnu.org/licenses/gpl-3.0.html", ] # -- Extension configuration ------------------------------------------------- # -- Options for intersphinx extension --------------------------------------- # https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#configuration intersphinx_mapping = { "python": ("https://docs.python.org/3", None), "numpy": ("https://docs.scipy.org/doc/numpy", None), } # -- Options for extlinks extension ------------------------------------------ # https://www.sphinx-doc.org/en/master/usage/extensions/extlinks.html#module-sphinx.ext.extlinks extlinks = { "issue": ("https://github.com/avalentino/pyepr/issues/%s", "gh-%s"), } # -- Options for todo extension ---------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/extensions/todo.html#configuration todo_include_todos = True pyepr-1.3.1/docs/examples/000077500000000000000000000000001525260221700154235ustar00rootroot00000000000000pyepr-1.3.1/docs/examples/export_gdalvrt.py000077500000000000000000000133621525260221700210510ustar00rootroot00000000000000#!/usr/bin/env python3 import os from osgeo import gdal import epr 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): # noqa: C901, PLR0914 product = band.product dataset = band.dataset record = dataset.read_record(0) field = record.get_field_at(band._field_index - 1) # noqa: SLF001 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(f"unable to open {vrt!r}") driver = gdal_ds.GetDriver() if driver.ShortName != "VRT": raise TypeError( f"unexpected GDAL driver ({driver.ShortName}). " f"VRT driver expected" ) 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(f"unable to create {vrt!r} dataset") 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", f"SourceFilename={filename}", f"ImageOffset={offset}", f"LineOffset={line_offset}", f"PixelOffset={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(f"unable to add VRTRawRasterBand to {vrt!r}") 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: bool = 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(f"unable to create {vrt!r}. Already exists") 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(f"unable to create {vrt!r} dataset") 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() cb = plt.colorbar() cb.set_label(unit) plt.title("EPR data") plt.subplot(2, 1, 2) plt.imshow(vrtdata) plt.grid() cb = plt.colorbar() cb.set_label(unit) plt.title("VRT data") plt.show() pyepr-1.3.1/docs/examples/update_elements.py000077500000000000000000000044361525260221700211650ustar00rootroot00000000000000#!/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() 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() plt.title("Water Vapour Histogram") plt.hold() 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() plt.title("Water Vapour") cb = plt.colorbar() cb.set_label(f"[{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() plt.title("Water Vapour with box") cb = plt.colorbar() cb.set_label(f"[{unit}]") plt.savefig("modified_water_vapour_with_box.png") plt.show() pyepr-1.3.1/docs/examples/write_bands.py000077500000000000000000000056161525260221700203110ustar00rootroot00000000000000#!/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(f"Reading band {band_name!r}...") 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(f"Raw image data successfully written to {image_file_path!r}.") print( f"C data type is {epr.data_type_id_to_str(raster.data_type)!r}, " f"element size {raster.get_elem_size()} byte(s), " f"raster size is {raster.get_width()} x {raster.get_height()} pixels." ) 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:: $ python3 write_bands.py [ ... ] Example:: $ python3 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: python3 write_bands.py [ ... ] where envisat-product is the input filename and output-dir is the output directory and dataset-name-1 is the name of the first band to be extracted (mandatory) and dataset-name-2 ... dataset-name-N are the names of further bands to be extracted (optional) Example: python3 write_bands MER_RR__2P_TEST.N1 . latitude """ ) 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.3.1/docs/examples/write_bitmask.py000077500000000000000000000040141525260221700206430ustar00rootroot00000000000000#!/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:: $ python3 write_bitmask.py Example to call the main function:: $ python3 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: python3 write_bitmask where envisat-product is the input filename and bitmask-expression is a string containing the bitmask logic and output-file is the output filename. Example: MER_RR__2P_TEST.N1 'l2_flags.LAND and not l2_flags.BRIGHT' my_flags.raw """ ) 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(f"Raw image data successfully written to {image_file_path!r}.") print( f"Data type is 'byte', size is {source_width} x {source_height} " f"pixels." ) if __name__ == "__main__": main() pyepr-1.3.1/docs/examples/write_ndvi.py000077500000000000000000000055131525260221700201560ustar00rootroot00000000000000#!/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:: $ python3 write_ndvi.py for example:: $ python3 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: python3 write_ndvi where envisat-product is the input filename and output-file is the output filename. Example: MER_RR__1P_TEST.N1 my_ndvi.raw """ ) 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 %r data", band1_name) band1.read_raster(offset_x, offset_y, raster1) logging.info("read %r data", band2_name) band2.read_raster(offset_x, offset_y, raster2) # Open the output file logging.info("write ndvi to %r", 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 solution. # 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.3.1/docs/gdal_export_example.rst000066400000000000000000000146141525260221700203700ustar00rootroot00000000000000GDAL_ 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: 102-118 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: 137-138 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 raster files. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 56-79 .. 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: 52-54 .. 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: 61-65 .. 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: 82-96 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: 120-127 .. index:: MPH, SPH The :func:`epr2gdal` function also stores the contents of the *MPH* and the *SPH* records as GDAL_ dataset metadata in custom domains: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/export_gdalvrt.py :language: python :lines: 129-135 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://earth.esa.int/eogateway/missions/envisat .. raw:: latex \clearpage pyepr-1.3.1/docs/images/000077500000000000000000000000001525260221700150525ustar00rootroot00000000000000pyepr-1.3.1/docs/images/ASA_IMP_crop.png000066400000000000000000010574361525260221700177340ustar00rootroot00000000000000‰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Ò¿øE�qÆš9s¦N8áí¸ãŽºï¾ûtÙe—éÛßþ¶~ò“Ÿh—]v e=ðÀÁ 9ä�Ctæ™gªR©è®»îÒç?ÿy�sÎ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æ‚ ôàƒ>µFl�7ÖÚí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žjm�X°`�î¾ûî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¾S�NgKW1!!!!!!á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šœœTOO�J¥Ò´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÷ö#{t�rÐí¾¾¾Ð¿ÔÓÛßÛÛÚÁ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̘¡ÁÁA���ibbB•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=2�FC•JE�N'ì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¸Áìs�QÈÉ�@®«±�ã}ážÏ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™œ|C�1úúúÂä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òH�mõ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þ§}þL�vx_;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/«G�hK©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é/ˆ’¦"!î%t�Zìå¤\ïø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À»�ÔÂßx2�TIS¹Îî)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§ÓÑÀÀ@˜x9�IšÊq'¯vll,¤g11ñfd”8ŇŖ4$7D¤©#€ÅÒ ¢/”�önø‚Ä"â†HL�XTü½ñ÷ÒÔi)þl�ˆ`¬øiQNœàÅ^L{÷ˆóüس^îys¯£ þ’?'x�Yêïýì˜3<Ÿ¾b‘ö÷‘�¢ÀužÖ{Qi/²'z*ñþêåd"àýã)2îuwýs∬|7röSƒœü¸¡Å÷CH#Q&HiìÁwý¢�8Û½ú\Cºg9&Ìþ·ëkl�SV¬Oô‰ë��Mú×Ëãúf³Þ¿ÁwìcüÒ¾ùóçëÄOÔܹsµ÷Þ{kîܹ:çœsÂû†ü¨aß#áõuRí€{ÂÝqÀxr£Ë£M®‹ž6ê/2ð÷`Ä K®ë¤%¹!Œ,©'÷ºœý^>øñý1<¥Ñ�¬¦o|Ï Q Êò4'7œbã96X�rŽ�ÔÆˆ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è$dsllL�N§�"‡^x´ 6˜Ý{KŸÒN —§Ÿ|”çëO©òˆQ»ÝÖàà`HÑ�œQžåÆ3‘dP¯×C}‘†—§[¡SÔùctxZéƒ=B”ãÑJ¢­V+ô£©ÄÐáó8ªG�1Xb’Ìÿù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á„à3�dHSùõÌî%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~¼m�Yòý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´éSO�rý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]öñIU�9ʈ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€µT�cPIÛœ^kýcþÇý;¤_ñ¿mß²2‰Í:°œ±]˘(ˆ##vÚäHdÎk°ØD€v@Øp�øèÏc‡Ç1�kvÔ¡#Ú•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©Ë“/u�9¡Å&)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#ª ëíy�X¦=µÛí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áÒêij1�0‘óN{¹™ü½påt€ÚááaYH !3Àâý|ÙcïÏM ˆÖîííUÖ?¡³‡Ûà?b™²Eß°º½>çÁ)&¼Ómçý­V+&“IÙœÁžeÛ¬Û `ÄV�T³=:Mš�ŽªÐ.{ÍÙDÂÄÙ‹ïôÚÕjµŠCÂë¶L²L€!D¼Óëy�éq@žu7üÍÿ“É$Ξ=«««ñ³?û³ñÈ#�TRµ­c¬ó˜Åo�1ü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:1�N 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Ä$ €.�!@�i�X¢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_¡Þô=ê̘3�N+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À³6�b6›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ñØc�USã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—ºüøR�Zö÷÷Ëñµµµ²�<ç[€ð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<‹ÉÐ^KO�y·WÚÆ �„|-õލžaùr�séí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±8Z�7Ë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[6�N§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¿çh�mgyù<Ï$#Û*×°®ù: … 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—ºüèR�Z| 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‚÷Ó‡x�m‡~~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†H�F£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Ðrt�gù™0ùzlÃà™ï‰ `W´ ]šèÛvLN3BGÖŸÛÉs²¬�öB¿rd*·½SoÖu™ÐûÚc"K] F‘�£OÔ3G�xσ”#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ä—m�k²ÜOý FY+cû7u_¶Ý¬¬,O®ç]NË¢n^ Bê¡S v½‘„S™Ž[¨n;Í‹ ]7 öŒ�B<cH'4iðxè{Ð�e�Li«Ç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Ì¡N�F£¢ú˜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Áõña�yÇ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ýd�1¦`ï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Ã5�N§D`WVVÊ÷ŽvÑ}nzf1¼û¹Ï\b bl°þÑ#ã-c킨ú0LN�gà ô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—ÿ»R�Z~�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¡ŽÔ¹d�l:íÎ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[[+c�Ow¤ÀÞ~€´£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¨l�L»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Ø…£�&k�F£²f!×›säËzµîœªHý°¥|ÆCN‡1éá¾,cçòg/µ�^×€ýÒft  ‡œ;Zá(õ²÷¯:΋ I­òZÆžÓëõâðð0^ýêWÇM7ÝT¼än;²1ÁÃV "èp}}½² v�uš#÷˜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¹å–ø³?û³ˆ¸ø¸¦.ÏœR�Z¦Ó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Ü61�NË!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®% ©Õj�wí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 Ë‘fRn�z �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Ü�¯À\î÷û…{œÆøCB�1ó�ùãÐ(Ö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æ×5�d‰§¿È“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=33�N'=?ÚÖ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`0e�Lb3`—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ì™2�Bæ~‰^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Üööv4�KÖ/ç“ÑÆ„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ö¸Ù @�x�z½^ª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`ä�Óà�͚뜬‡§k�C–ÅÄ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=”äo�0}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" aY�Cr@HòGè³� Ô1&älÑgl{W|‚A,úäµÊc›ê3AYZZŠõõõ4W­Göv SƒkHÚÚÚZÒ#¬ö¬¬až‡´“¹ÌóÐ{«LžìÝE677S¸ ë]îA´Ç†¾ÐFdˆìùŸ)CýÃþ0þò/ÿ2¶··ãÇ?þq�0àÑ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§e�F#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~Žç·5�6A¤œó“È ¡ þÜà©©©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úŸ“·‘9c�Púæçøùö¶ ,ì&ÊöØùø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öÒQ�mâ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Ì=¹w�gÚòÇænë/`ÑïØËÚo0Eüµ�ûløEkNÞÎìdl¿W�DÓˆñ ö ;<Æò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¦½1�u¸—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ÓÓÓ„þÛócrJ��x%Ü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›1�baa!ºÝ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™\ùÄ3�Wôî 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§ØSb�TÌøßž@–‰¨ûŽ%ù™\ä [ÁùÐ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­Â`b�i«½~‘Ù^`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%%w�F£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»Õj5�Fß¹¹¹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?§N�JcÆ;/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¥0�V«•À&uÞ{ï½që­·Æ[Þò–�Fñ•¯|%‘æD­V+„!¡ÛÌQÀ«=²öª:wÍy^ä:AÖɯâ7Ï'¼p�ÁsÁæ¦ßi¿ç© ƒC�X7¨O!Gáæ†•ÃTyž ‡µA¬:�N´Z­X^^Žz½žòtºÝná­ëοét:±¶¶–—Xw½–™¼3N¼Ð�ö3®»n·[ðAÂ;�N �Åë�¼ñ~ò?{†CØF£Q?~<šÍf2t±–aâ~ ?èG¹|ñðƒ£G�F£ÑˆÁ`.\(¸:§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²Žˆ»Êd2�xŒ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�¨#Éq�7Ï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ÍÌÌhssS�F#ô}6› óaxx8È5û¥_úåû/}ò�?œÝ ÷VÞƒèA,�� •Ëù€Y>µöû³£^À‡{büç›Í†8æ3›>o·Û!›‹úŒaT:HËf³*—Ë!šû:&&&ÔétT©TT.—€ {˜=, êŽÀïñ÷C\ñn Ùö[† �ÆÛ#)d�—è†`pæ ä‡ö#íév�c&îÝ»§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\âècM�Xð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™‰t�m.}@B€ÌÂA¯ê ��P€¥“·öò3$Dtx—[y/–QÚàÀÀã=4àap Rˆ���ø>®+W®¨ÙljwwW­VKSSS!Çýòòr�L1.�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íZ�X‘Ö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¡ §Ÿ~Z�FCׯ_×ÐÐ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 Þvu�vpp 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£�� Õj5�9sFÙlV‹‹‹Z^^îIDàÒ<êÇÜK&“!xÁ³¹¤ ÐÞn·Ã½ìwC†ÁÀÁ(c€ÇÔ×Ïõ5Ϻöÿ;ùŒ>Ç {¡§æ…°@Ä™—ŒßaÍ2Žd÷ê0O�má¥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·{’"ØåRx�7P0‡}ßÄ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Üààq�5%$˜ó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§ÕÕU�9s&?!Ú©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©TJ�FC¥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œb�tï 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‚,9�q’íÞ4ú‹H‹§ ¥-4ˆ£{ˆÜCÂsð$y6"êëž“(ñTû2u�Kˆ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^ÑÞÞž�†²Ùl�L¡�®×ëÊ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†ä.s�sÖ×»Ý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 „0�NBS,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·P�8´Û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}}=Ü©â±B�mŸ îá£@ö]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‰ñƒ€Ãϳ¹D��K 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$ø?k�yï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Ü»ë†b�zéºÝ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¸ñ|'GQ�QÔÂ%]~¡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¾F�PD‰¿{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�†ŸÕÕU���iqqQù|^/½ô’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ðÒ8�FNÈÙ¹ç€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Å4t�p6'Ñ€«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‘…§Ÿ~:œO�FCÿøÇõÚ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—£{b�Ih²Ç@nÙÖÖ–ÆÇÇ{*Âu:-//‡œÀÙÙYýò/ÿ²þý¿ÿ÷j·Ûš›› å¡¡!]¹rEsssªÕj ¹¿ök¿¦¯~õ«:þ¼î¹ç­®®JÚ3l\¹rEÅbQ¹\NgΜÑïüÎïèÂ… ÚØØÐ÷¿ÿ}% MNNêë_ÿº®_¿®wº½]�~ë··£Åÿò�ôÛOcÌxK´2Š´¾ÄÁÅ��æw·n¹Å—çqxIê9HT�l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Ø!Hn�wò í‡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**§¥Óéà9CxP�F+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õZ0F�wÀ*í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â™î!ŠE�n=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ÝS�l¼O>Çì³è¬Ï2ç{ž‡ÆÝB'Ož –ÿZ­ÆEe7¼?Íf3\øÇÞ_(´¹¹æ½Z­öäÜPÖ6�‡ûGü†zî/¡¬îææfÐ7Št:{á�Ü'‚|'&&”Ïçµ¼¼¬±±±@\î¹ç}èCÒÖÖ–ÖÖÖ488¨gžyF�FCßùÎ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ô1�NkjjJ7nÜ„|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Ò?þÇÿX�NGÿðþ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ËbL�1á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?ü�2�jÖCޏwÂ}’7ëõz8ðâŒ×åyp²¨A DžO�ÇU«Õø`Œÿà¹Ì+Ï$œ� ÏAª{ÞøžWTò2¯XL@º§Íÿ%¯óâãsÒ–N§U.—C¹UÂB42.t�wùñ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€|ž|�â͂ؑÐìÞ�ÍÍÍPm��9úˆì�+!•è•—�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ç9�F#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—.]ÒÚÚš>ö±�izzZ�NGÏ?ÿ¼þô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ñʽU�FC·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±˜²Ùl�Y‘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’B�5duqqQ}}}Á“ì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šv�2Úp%P$´\�Ç�¸t˲¤NÙÏàà`°öÈôòzúÐ�%bÓn·¸CÒ9Z[[Óâ⢖––”ÉdPC›Íwn¿ývÅãq�8qBï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 ñcx�gggõö·¿]Ï?ÿ¼¦¦¦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_ñ|\GR�UÑ'õµµµ?óâ‹/ Ó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ÇÿÍ#õÊßÓÒ# Wh�8b£p®°ª@TØ$•X8 ÒÆÆàá=6c>w°âš}À7ÄÁôø ×E³Y’º­Ü´Ï‹÷Á¯yϳ×ÂÙð±ÞÖj5ÍÍÍ)Y�SX[[? 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®¤Ói���k||<œØ½¶¶¼O€_'ÔÁ¥pNüx>Úǽnm`PhÊw�y«ÕêÈ”„õ“à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çc�qåž#ƂˬÜ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Ô í–<�mpÙ  €�FC@«¤` ¯T*!`qqQ‹‹‹jµZ”bmÒ>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Þ¸4�9…ôÌ%›Ü�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»¼Q�V>ñ‰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+r�v{ãÐGOkëd€&u£¸¥ÏA:Új'fXÏioïG's€À.íFÐ'€ÑŸY `ÀîÖ]êçíGq ä€ÙAã@G >ž~(âºdJ$!ÛO»Ý‡£¥R©™²ä^G$&ýýýÚ¿¿¾ô¥/顇ÒO<¡‡zH�FC 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¿.G�D6Ò%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ÏýÕ_ý•þø�ÿX�FC###ºå–[ô_ÿëÕ�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ÖB�Sz³Ê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 Ñ¥=ÔóùçŸ×—¿üe�8qB¿ú«¿ª_ûµ_ÓÒÒ’þê¯þªclcu¦h#2XÑæŒ-‚ÙÝ#E»àÄy¼†Ï»îövÏœ¿Gà4˜0äºÌ÷šø¹)Ü›ï2—¨7YÎøm·‹1·¶¶‚Ò}®»´ÏÉs”þ $ÈÿÑÊ!¾Ô�¹ì!Ÿ#xUOž<ÙÑ_œt�uŸ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Ë4u�6tï‘‘  ª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“Õj5�g,öÑhT!YÁåË—CÌ’“ÌîàsoC—.BþèG¾ïÖžf³æ;Ï�7·Û뉱�9õ\ú†×€ïÐÖn”b½äÚ�1Ÿóî©*‹á}ú£qÑèF>â9>üáëç~îçtùòeÍÏÏëäÉ“ŠD"úö·¿­|>¯}èCºõÖ[CœÆÔÔ”‰„ …BGì”Ï;÷ ñ̜ωDT­Võå/Y.\е×^«ãÇ�‡õˆ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ÓÌÌŒ$éðáÃúÄ'>!i�Pó›ßT,Óƒ>¨¾¾õÌ}äúf–7ÊÒ+½òF”¹‚KwÀžK�ܺ°w @aCÜžÖÖ6‚*¹.ÄÅ-ul¬þ›¦“ îúf³©l6«jµ¬|’:4álš’H}ZG�  8™Lvl»C¢àò$´“[$]jˆ–ÈÒëK<-´�Ÿvî’'25�s¸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Ï‘·…“Õ¥¥%¥ÓéÐÿxA�4V¹ó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·¤É7h�9(êì„…ët߇×üóÔ³Òhœñ;È€[H%)ËÎ�;C æÄÄ„ªÕª"‘HÐA»Åe8Ýi#Õ­÷‹$o3úÏA)ý€µí �k:ùqk%¯6îùñ¾d 8P0ëVL�aÐð:�+‹)—Ëéꫯօ Ô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ž3H�U---ÂÇw‘iI ž‚È»ç*€Ü ŒSæš“B~ï±-<cÜc‹VVV‚WÈ ¤K¢\^äÖgÚë·K:™Û¼ÆûÊ5Ü#éë}O�u&“ѶmÛtöìYµZ-íÚµKO?ý´êõºÚí¶&&&T.—µ²²¢¹¹9õõõ©\.ëæ›oÖ©S§:,åÜ×ɲºd2©••ÅãñÉk³Ù q¬³îÆó±°°bqhgæ)^9ÖJúÕÀ¹7Ä¡\.kppP£££¡O�HrZ;k4íÍœÄsñLeÿv{=‹•¤ð:�N«\.+™L†ñ41ñÿ±÷æÁ‘^ÕÙøÓ‹¤Vï›ZËH³ožñx™a¼P`Œ±�YL9�‚ ’8–"a©¸B „‚ÄI¥*ÎTÂfcâ"N‘Š1v�YLðÛ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ÉTe�G‹:ê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¥§‹ãÖ>r�I•ä¹§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¿h�TAP«£*‡Œ–£Á£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¢··¡PG�5Ð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˜º»» t�nS«ÕŒÂ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Ë–-v1�Kyðà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¥ä1�5ב ׬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©T�L&í|ëêêÂÄÄJ¥^xá;_FGGñØc�appO<ñ®¿þzÛo—_~9<zè¡–sŒïj·vk·_½µ�s¸ñ𦢡 µÒQÉP…Ac4xñ©W� AŽÆbÐÒ¯`X�Qoû¤™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•�5�6lÀÌÌ 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*�?¯²¤J�fˆR‹¾Î�zNœT?*\öŸ)‰�Ê ×E•#M�«Ï枢ò·¸¸ˆÉÉILOO·œ…jp¹\- ØoM­#§ pq1Ž€ŠŸî=W�ñ;ŒQY=k”Óõë×›Çe||ù|ƒƒƒFg]»v-Ž?Žl6‹^x¡%›VWW’É$Òé4Êå2æççñƒüÑhóóóðù|˜ŸŸG&“A<‡Ï糸9�Wbÿ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§1A�T¦ … …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šâ•ž50p�sß+¥’ò¡ž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 C�A…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Ö Þt�1+\Cæûý~SLèåQë'çŒ ¸ÑX©{Àô¢áp===˜œœ4`å¤Ðp>Y¨“™¨fu¼\w�Eaö-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­V�BvõÕ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�\¸g�zzz�J¥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$…BVe�1(,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ŸÆðð°(‰Tt�N'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~t�V‚O­Àè´º\?z“4§ŸãäÜ`ñ;œg‚Kz£ó¢­Êš–Ã1�FBÄ1èQ ¡¢EoŒævs]_Á÷±†Æää¤È&ןë¦é?´ð3€—óY*•$‡¿žwʬ¦ ŽÅÉa˜ŸŸŸCå+%‘sŸÉdº)ÃÚ8A¯Ýwî¸Îv»]2�q´×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ø|>Ùo�FCÀ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«Ud�J!©‡‡^¯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ß¾}¢X���abbõz—/_ÆoýÖoáÆoijÏ>+gÓôô4¬V«œ»víÂÌÌ áv»Q.— …ðf·7ÊÒk½öF´žr�7#˜%ÑÆaèÌ0´�k�/t^ldkσ‘‹ t§ æ…ÈK� è®âÎq°¼Ä JØg ª4�‚TZ, š´…´Ñè›+•J’v•ã\ZZ’ˈAÕºqœœ íÑà˜µ@—¥˜MÎøo�W{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¯ýº´žr�6 *´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 T�nzi2ü¼æ&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²`™ö0�k£Ñ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½^8�N¬­­á§?ý)dü{÷îÅK/½?88“É„¥¥%©;b·Û±wï^\¹rE(-ÜOô¬P3zé%"h¤ŒÐC¢)…çZî(34Lp_ò=\'6zMiÜ ¼ñ\¢‚pøða”ËeñB1ÁãÕ8�F#•&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¡P�Z;>ŸN§W®\‘ØVŠ'Å”{^+�¬�ÃtÄ�G2Šñ9°yófØl6øý~ÔëuÌÏÏKáÃx.\À÷¿ÿ}8�NÌÍÍ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ƧÑëÓ×ׇ­[·baa�Gè{ú ¥" …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¡P�3€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 ….^¼ˆ^xKKKXXX�B³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@çþ[__z�Xôâ˜Ífy6ã ¹×˜è„ ÷d>ŸÇàà ÖÖÖ033ƒ©©)¼ï}ïÃÉ“'a6›±sçNìܹ×®]ÃwÜ�Z­†Ë—/ãüùó¸|ù²Pâ8¿Úö«Ð~Ùý{zñžxâ üà?Àã�? £¤ÕëuìÙ³ç5ßÛ½{7Ž9"r=11!?×­¿¿‘HçÎ�û�¨×~ZÏr�6£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¡P�Z 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$â±£B�J¥ºÎ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«u�omm >Ÿ$£ Çɾë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ît�R³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µbrr�G‹‰‰ ¬®®â�ÀÄÄ&&&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èe�9Ø…šóÏßó½Ì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+½«óñç.¾¾û¾Ø¾Ûc�g<[Æ“„�@Ò@@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ÆÅ¸$‡Ã�ßþí߯ÌÌ ¾ð…/`ee�F�ÝnW´‹Å¢¬ *cccžcÎ +–ÓcÑív111�­­-É<åt:qüøqIcër¹�J¥`6›¥h`±Xĵk×099‰`0(R*Vy§‡Šq5ÜK©TJRL���Kµ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é¦u�r꺯^½Š�� 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à÷û‰D�H$„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áú8�Nyö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^Ç8�z 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ñ¦>šU�iíd£E7�b~~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ä9�Nx½^x½^Äb1Y#žÉ‡zÅbËËËBFGG�ÇEúÖh4‡%ÆÌd2¡P(ÀårI\ÓLÓÛêp8P­Ve^´‡¬R©`~~étZ$b”‚9�NIEìõ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®`cc�NG®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ÇÈŸ9�NÉôÅ m-YÓ^L½75 圱ÿºi„žo³Ù,i…ëÐl6áp8$ø¼Z­8HÑ @ê€pðív/^D¹\†Ûí é:;Sëòš‘H¯¼ò ŠÅâ9¡üˆ^R�v<•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àF�8É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`gg�NçÎ�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Ð^#³ÙŒ;î¸C2i�5ç…À¼Ûí q"HÓ…çtzUcŒ =A\g®]³Ù„Ëå’½E2™H$Ðl6±µµ%sl¬ÛÀësq�8ÿœ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õêUloocww�N>Ÿù|Ý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"‘·q�Qª™Í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çžóJG�MP511ŸÏ‡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ýý­¯@´÷ôt�pðºÀ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›÷3Q9�N!ʼ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Á%€�J�3¿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Ïe�6› ^¯.\€Óé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‰ I�Nf`³Ù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¢3�i�ˆö¾ñ»ô°qÎõyÐN6½¼––L¶Z- ,//cjjJ9Ï­Ë$™”±”cïo$‹úçÆ½?­V+|>Ün·È±¸î&“I2T9�N„Ãa©7ÁýDpÎlX�FCÒðêX0«ÕŠH$¯×‹@ F’Uí9¤e�25Zþ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Ün7�B¡úý>�<Ï(àÒ¬Ƀçš@ê}­ûÈ}ʾó^´ò³/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 G�E(Âêê*ªÕª�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Ûl68�Nx½^ä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ãôéÓ¸yó¦Œ5—Ëa||¿ð ¿€­­-T*ôz=¬¯¯K…ò½½=¼ð B˜ï÷~çÎ�C:�ÆÒÒþöoÿKKK/Âý£ g$ý~‡ÆÆÆööö$Þ†Ò±n·‹÷¼ç=x×»Þ…§Ÿ~¡P“““ØÝÝÅåË—qèСŸx¿ Û° Û߆ixo㦉Á°ž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Êå2VVV�H$`2™páÂ8ÌÏÏcqqQŒ^¯¡P&“Iïôô4~ô£Éù¢�ž‹Å‚k×®assSÎâöö6–––pæÌ¼ë]ï’çÂë݌υŸÅŸa¶×¢ = ·i#¨Ó€ÙL(¡ h×Öe--°X,"A2êøµD…Öd3cŽÖïSã®=ÚÂN I�H0dÌÐþò®­ÖF¹É ‚¶æjë?pRiùcÿp ’£œD[�u d î8_½&­V �Î~®úZ­†ãÇ�K“ɤXŒûý¾~z½^𠸧7�U£i!¥W$�Šæ�€¥P(HŸI¬t€.û ·äš¼2�•ăÖn’z±˜™L“1=7”0�(±X›ĬwA�ÆõÖ…×ø;îï›ÍfLLLÀjµ h�D"dÀãñàÿðqÿý÷£×ëáóŸÿ<¾õ­oaeeEÖ0•J x§¥™Rz}xtü‰Çã‘=ÆLQFÇD°k±Xä\0--I—ŽïФO:-Ôë«Ï3¥•$8ô@òÜÓÁ mV«Éd&“ ù|^²mooÃív',‹Ôn ±�û1�NK 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ˆ1�aôdÎË;<ˆûkx¯ÔÖÖ–®\¹¢T*¥óçÏk``@¥RÉä ¾€VV^Àxi²###µàLOìΜ9cë`ffF·oß¶ñD΀Vœ1!‡>së‹ÚùHôq€<"Ö�÷ ¡*6RЧ!9£Ćhy.ÖÃîî®éôSg�4 ‹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É=ñ"áÍb�v»Ý)"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Ñõë×µ´´dR�p8¬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¬„¯²N�IÓââ¢�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Ñ ´íím�8qB§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\óØc�i{{[ûØÇ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÷Æ%äo�6ž‹Ú(ô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*Y�4€±'.žü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…ñ¦§§­p�tGVØ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žýÙÒl6�D¤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ÓR�EÜ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?666�F•É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�žx�b±¨ÕÕ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=zT�NG 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¤�FÇ�†ööö”Ïç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¥bk�xš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Æ‘B�xœvvvÌ@€0!ˆðñ‚8w»ûµŽ¼‚GÍ”��ݸqCÛÛÛŠF£Z]]ÕÎÎŽJ¥’ÅŽmoo›�ù Ãõõu -..~—·íÛÓ< í©�wi´xPâ½"’z¬­ÞóÀK‚�õ¿t§d ?à2K�G@ÃáŠ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«­­-���™W�y†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):B�NDzE"år9…Ãa-//Û˜Öj5óX0‰�| Yýïòò²J¥’…Õææ¦nÞ¼iÚxƒä +óèÇÜש`@ø<™eŸ2g^¶�7y¶“ɤVVVtñâE]½zU###μq�yˆ¯â“>©½Á™Â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¾·—Æ1�xñ³½½=�ù|^ÃÃÃ*—˶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›L�j›±Á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‚H�F£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]¬Â>Ól6�F%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†÷d�ZüÇ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µjs�F-î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‘P7�FÕ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��µµµeF�T*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.—m�Hó‹ .•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 år9���iqqQgggJ$ö,, 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÷éƒÁ –——õüóÏ«\.+‘HhwwW�NÇ,Û€J@$1Yž�Ð_,æý~_{{{VD’ùdz�L&•É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ƒœ P�e¾Õj�xà 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ÆÚx�iP!ã²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óèèhDD�52³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!N�FÃä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 p�1ž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#C��KžÆ½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€0Rx�WÁ<ÎÏÏ›|Ž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­*�N�i'ƒ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Ù–}ÆÂ¹ð"P�y÷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ˆ Ôb�dL‚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¼¡G�i}}Ý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¿ñ¿¡/|á êëõºÊå²X�Fõðá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̤A�FÃÀu¹\V4Õx<6©¥K‰„iëY�NG’Ì$�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ݺeA�z½®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‘Ö”™f�F"‘)™¦?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[[3p��yN»Ý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·•Ífm�dò-Ž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±˜ùo�NgªÊ¿—Ëå´²²¢óó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‰j4�2Å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æ2�NUò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«> LG�F•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Åz�D"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þ(Þ/£¯÷Ÿ|VY�OÕ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Š8�N‰‹‹“É“'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.3.1/docs/images/modified_water_vapour.png000066400000000000000000001253771525260221700221550ustar00rootroot00000000000000‰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¡[·n�F¶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ýúõª^¯WG�mÕ¾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Û¶©£F�REQ¿ùæ›|ã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ÝT�N—cŸßÿ]íÑ£‡êëë«êt:U§Óå˜&víÚµjÿþýÕ*Uª¨îîîjPP�Ú®];uÒ¤IêŸþiÕ÷Á©lm•5—~¹rår�XU-Óó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ÇG�PY"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ªêÅ5�s5.™ƒ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‰ %Ò¯ÀgQj�fMrv%Û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¼Á–-[ <�p-R€Ѽyó¨RÅzÀCŸ>}¨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³fMgq�ixµä¥¤Ò^¿‡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è%Òqg�Cf*$ÅÃÝ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ØÌ†—çé:’ÎX�qÊíç‘’ ƒÂÓ¹¼ï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— ÕÇ�‰‰&ÿ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€‘Î «l�kKò«-ɯ&Ìÿ›Õªèû¹ö€ùóçÓ®]»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•þ×}(`È…‚l�E7Ñ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ófF�Mûöí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Žm�KGÿÚg,0�IJ°.¯Õƒ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®â[þ .ê†R�t¥žÍ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ža�a Ó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®_„ËÇ ' ò³á�S�yd£³#+ß´·œ[¿/¹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‚Va�vvÎ�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Üx�GA—�‘‘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®´*ãççGZZ���EûúôéC£F�3f ›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ß ÖïrH8�5©D{Çñ´÷GHÙ©SuåäX¨"‘_u‰üª£p%t[7÷ï.¸!ѱƒo¾ù€{îùkúÜãÇ�Ю];‹²õêÕ£V­Zœ8¡rß%•ùAPcðòwv$UÜî¡í�ÉÝ¡†p• q IDATt�0MAR¦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² ¹··<�M Ë`Ì¿cÿ›1û´ìfý¿Ì*·ã6X>“ 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+*[©Æg�rÐ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™>}z�m^|ñ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À'»a�yÈ¥žêð�£óË!Ï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°€N�jÿ¬  €��ª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üûßÿ檫œ“j�1‚Ë.»Œ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ÛœœF�EDD‘‘‘Œ?ž½{Í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''£F�BQQñôÓ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çõ-^¼X�H$ÂáÇ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�úi�M�lllðÊ+¯@.—ë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—УG�oæß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îÜÁÿýßÿ!::Ç�‡£££Æ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[[£G��H$øÍ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ç\§N�R¿ÿ•••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Å ìÝ»_|ñ¬­­ñØc�i�¶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› 'À³›òï¾=€~C�nþÆ‹©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¶Ö¶qqq�J¥Z¯‰'¶ýúÉ¢° –ž>ÿüsøøh“4~üx„……áƒ>@|¼²‡ó¢E‹`oo�mÛ¶ÁÉ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´4�2kÜè€ì€`Î~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¼ñÆëF��O>ù›7oÆO?ý„‰'â£�>Âøñãùd¤“b�vXºt)þö·¿áƒ>ÀË/¿¬^îéé (++ÓÚ§¬¬ ‰îîîÍXΊ_L5lý&ªÆšFs‡Ðé1Çâb~ÅÅüФOD¨P(0oÞ<?~?üðüýý5Ö¿ÿþû?�?AAAxë­·°uëV<ñÄâI&Å' Zºt©úµpáB�u¡¡¡°··Ç¹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õj�c!''àçç©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@�oLwQ�Oؘ̱_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âÖú˜íDDd�X€�á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ÛP�Yçá^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µ~"ðíd�WÙG�áæžÓ›]Û“ƒ�“7ií¾ó•Ý8ýÕY�e…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œRBT�5�æ¡Ó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йùÆt7w�s,.æ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‹`oo�mÛ¶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÷Ì=çs�UW·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:*Ñi�FCyy9+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�ÿýßÿ%--�£G�6¸Ïª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ÇÖ»XXQQQh4�y —.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‡Ôለ)²2�U Õ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++�W7�K^0oey�r@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þÝ {op�h­!�\N¹­å6¶T›Ë¸53áV\Hï¿ãU�kì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ËJ�T#Ä�æ{òÉ'[|Œ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¶Íû&Û³0�i¿ÄÐ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 {¢`¯îœ î&©OXXQQQh4�lW—.]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ôéÓ‡ï¾ûŽÇ{¬v�Fƒ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…Íoz�g7®ùwÓ+»bL={ÿ¡Èщ"G'zÜJ•*´Zr�F›êØ 'û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´_<–&hJ�F·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ä,‰\S�v&…ŽÎ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ƒœF4r9i�HìÑ‹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¿�M�2(•šÌ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Ü8�k$$$`ïÞ½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ÇÔ�h�7è”ÿêÿðóº_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Û6�sxzz"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¶íáæo�VV$´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 ÕÖ+44T�H$‚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§N�R�: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Àc�9sÆœ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".åçR�uëÖÇ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õj�8qB-[¶ôûì{½zõô/ÿò/Zµj•Ú¶m«Ûo¿]ß}÷�6mÚ¤øøxµmÛÖïkIJMMUÆ µjÕ*U«VM�5’ã8úå/©Æ�+33SùùùZ²d‰®½öZÝqÇjÔ¨‘JJJtàÀ½óÎ;6lØOþÝ>ø {ì1½óÎ;’ßý�Î}ÈòåË5pà@ÝÿýJIIÑÞ½{õÖ[oiàÀ�~Ù�$µjÕJ­ZµÒý÷߯ªU«êµ×^Óþýûu÷ÝwkðàÁ¾y×\s�þã?þC£G�Vûöí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�€­X�1æý÷ß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[°¡G�zç�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#_ûÈØ.òµ�Œí"_„;D�1cƸ]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‡”ŸŸ¯öíÛ»]”w�J+%µ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 •šw�Jù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Ý.àr�9R¿ûÝï$�{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Ø.òµ�Œí"_„;D�aƹ]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Ø.òµ�Œí"_„;D�xÀí"ùÚÆ¶‹|í#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Œ1n�s Ô¡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úÏÿüO�9sFýû÷—$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Ú4�7N-[¶”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³f�RRRZü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Ó¦øñC�yæ™:í´Ó´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£G�VçÎ�õÜ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Û6�wÞ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Žz��5ßÙ³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.3.1/docs/images/water_vapour_histogram_02.png000066400000000000000000000767421525260221700226740ustar00rootroot00000000000000‰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ëŠüü|³m�3F(Š"F�e6þðËÀÀ@«Ç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‡««+Ú¶mkv�5£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<�eË–a̘1wõø‰ˆþ�ûÛ¹sçàããcvªUii) „Í›7ã³Ï>ÃóÏ?¯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Ò¯¾ú*¦N�jqÇ«©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Õ2�UTTà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Û³g�PE,_¾Üê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ÿâÅ‹¨_¿¾ÙÜ‹/Z�g|ýÖ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÷ééé¦Ïb���hÛ¶­Åä& ÂF%'' EQÄÌ™3küžÊÊJáêê*†jûøã�…¢(âÛo¿5›[XX(EsçÎ5�EDDˆ–-[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.\¸pg�U¼…  f&ƒkM=f&‡¹©ÇÌä07ÒšÍ5 Ë—/Ç©S§0qâDlÞ¼‹-ÂùóçѹsgìØ±Ã4///ááᨨ¨ÀºuëðÏþG�E×®]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�:u2�988`øðáØ·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”••Y�kÜ–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£G�6Ÿ|ò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‡ÜàB�Oqµ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Ì𻄚áw�D¯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‡ÜàB�Oqµ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³Cnp�7¡#–-[æ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Ì𻄚áw�D¯Ù˜áw�D¯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ª««MMM�i×®�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íZ�1BK—.Õ�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íÔ­[7�7N}ô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Ý»w�i4IÑŸ ܽ{÷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Ž3�Yÿ<-©×¼ ×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.3.1/docs/index.rst000066400000000000000000000071401525260221700154500ustar00rootroot00000000000000================================= ENVISAT Product Reader Python API ================================= .. raw:: latex \listoffigures % \listoftables \clearpage :HomePage: https://pyepr.readthedocs.io :Author: Antonio Valentino :Contact: antonio.valentino@tiscali.it :Copyright: 2011-2026, 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://earth.esa.int/eogateway/missions/envisat .. _ESA: https://earth.esa.int .. index:: ENVISAT, MERIS, AASTR, ASAR Project Links ============= * HTML documentation (`stable `_, `latest `_) * PyEPR_ project page on `github `_ * `source browser`__ * `commit history `_ * `issue tracker `_ * `CI status page `_ * `PyEPR project page on PyPi `_ * EPR-API `project page `_ __ PyEPR_ Documentation ============= .. toctree:: :maxdepth: 2 usermanual tutorials reference NEWS .. only:: not latex Other versions ============== Online documentation for other PyEPR_ versions: ============ ====================================================== PyEPR latest https://pyepr.readthedocs.io/en/latest (development) PyEPR 1.3.1 https://pyepr.readthedocs.io/en/v1.3.1 PyEPR 1.3.0 https://pyepr.readthedocs.io/en/v1.3.0 PyEPR 1.2.0 https://pyepr.readthedocs.io/en/v1.2.0 PyEPR 1.1.5 https://pyepr.readthedocs.io/en/v1.1.5 PyEPR 1.1.4 https://pyepr.readthedocs.io/en/v1.1.4 PyEPR 1.1.3 https://pyepr.readthedocs.io/en/v1.1.3 PyEPR 1.1.2 https://pyepr.readthedocs.io/en/v1.1.2 PyEPR 1.1.1 https://pyepr.readthedocs.io/en/v1.1.1 PyEPR 1.1.0 https://pyepr.readthedocs.io/en/v1.1.0 PyEPR 1.0.1 https://pyepr.readthedocs.io/en/v1.0.1 PyEPR 1.0.0 https://pyepr.readthedocs.io/en/v1.0.0 ============ ====================================================== License ======= .. index:: license Copyright (C) 2011-2026 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`: https://www.gnu.org/licenses/gpl-3.0.html pyepr-1.3.1/docs/interactive_use.rst000066400000000000000000000270721525260221700175400ustar00rootroot00000000000000Interactive 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://earth.esa.int/eogateway/missions/envisat .. _ASAR: https://earth.esa.int/handbooks/asar/CNTR.html .. _Jupyter: https://jupyter.org/ .. _matplotlib: https://matplotlib.org .. _`free sample`: https://esar-ds.eo.esa.int/oads/data/ASA_IMP_1P/ASA_IMP_1PNESA20060202_062238_000000152044_00435_20529_0000.N1 .. _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: https://pyepr.readthedocs.io .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://earth.esa.int/eogateway/missions/envisat .. _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_1PNESA20060202_062238_000000152044_00435_20529_0000.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.3.1/docs/make.bat000066400000000000000000000013751525260221700152200ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build %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.https://www.sphinx-doc.org/ exit /b 1 ) if "%1" == "" goto help %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd pyepr-1.3.1/docs/ndvi_example.rst000066400000000000000000000127741525260221700170250ustar00rootroot00000000000000NDVI 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: 55-56 .. 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: 57-62 *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: 64-74 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: 76-84 .. 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: 86-88 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: 89-102 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: 101 .. 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://earth.esa.int/eogateway/missions/envisat .. _Python: https://www.python.org .. raw:: latex \clearpage pyepr-1.3.1/docs/reference.rst000066400000000000000000001122571525260221700163050ustar00rootroot00000000000000API 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://earth.esa.int/eogateway/missions/envisat .. _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 str 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 int 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 str 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 int 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 int 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 str 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 int xoffset: across-track coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param int yoffset: along-track coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param int 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`. .. method:: get_complex_band_as_array(iname, qname, *, strict=True) Return a complex array that is the combination of two bands. Return a complex array reading the real part from the band named `iname` and the imaginary part from the band named `qname`. :param str iname: name of the band containing the real part of the complex array :param str qname: name of the band containing the imaginary part of the complex array :param bool strict: raise a `ValueError` if the and names provided in input (`iname` and `qname`) do not belong to the same dataset, or if `imane` / `qname` does not correspond to the real/imaginary components (respectively) of the dataset .. versionadded:: 1.3 .. 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 int index: the zero-based :class:`Record` index (default: 0) :param epr.Record 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 str 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 int 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 int field_index: the index of :class:`Field` in the :class:`Record` :param int 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 int 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 int 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 int 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 int 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 int xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1. :param int 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 dimension 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 coordinates 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 int xoffset: across-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region. Default 0. :param int yoffset: along-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region. Default 0. :param epr.Raster 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 coordinates 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 int 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 int 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 int xoffset: across-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region. Default 0. :param int yoffset: along-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region. Default 0. :param int xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1 :param int 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 attributes 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 int x: the (zero-based) X coordinate of the pixel :param int y: the (zero-based) Y coordinate of the pixel :returns: the typed value at the given coordinate .. 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 PathLike product_file_path: the path to the ENVISAT :class:`Product` file :param str 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 int 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 int 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 int xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1. :param int 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 bit-masks. The :class:`Raster` returned always is of type ``byte``. :param int src_width: the width (across track dimension) of the source to be read into the :class:`Raster` :param int src_height: the height (along track dimension) of the source to be read into the :class:`Raster` :param int xstep: the sub-sampling step across track of the source when reading into the :class:`Raster`. Default: 1. :param int 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 str message: error message :param int 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.3.1/docs/spelling_wordlist.txt000066400000000000000000000004571525260221700201200ustar00rootroot00000000000000api config constness cython Cythonizing de dev distutils docstrings Docstrings eader epr freethreading gdalvrt geo iname Initializer iter jupyter len libs matadata nd ndarray np pre py pyepr pypi pyproject pythonic qname radiances rb roduct scanline sdist src str toml uchar vapour unittests vectorized pyepr-1.3.1/docs/tutorials.rst000066400000000000000000000002701525260221700163640ustar00rootroot00000000000000Tutorials ========= .. index:: tutorial .. toctree:: :maxdepth: 2 interactive_use bands_example bitmask_example ndvi_example update_example gdal_export_example pyepr-1.3.1/docs/update_example.rst000066400000000000000000000127021525260221700173360ustar00rootroot00000000000000Update :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://earth.esa.int/eogateway/missions/envisat .. _Matplotlib: https://matplotlib.org .. raw:: latex \clearpage pyepr-1.3.1/docs/usermanual.rst000066400000000000000000000423111525260221700165140ustar00rootroot00000000000000User 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_1PNESA20060202_062238_000000152044_00435_20529_0000.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://earth.esa.int/eogateway/missions/envisat .. _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 properly 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. .. 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. .. 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 Python ============== ============== `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**\ eader". 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 of 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 .. _`context manager`: https://docs.python.org/3/library/stdtypes.html#context-manager-types .. _free-threading: Thread safety and "freethreading" support ----------------------------------------- The `epr` extension is based on a C library that **is not thread safe**. The use of `epr` in multi-thread applications requires a proper locking mechanism to be implemented on the client side. The `epr` extension module is marked as `freethreading_compatible` only to allow its use with a "Free-Threaded" Python interpreter (e.g. Python 3.14t). Nevertheless, is such situations, special care shall taken to avoid that the functions and classes provided by the `epr` extension module are use concurrently by the application. pyepr-1.3.1/extern/000077500000000000000000000000001525260221700141625ustar00rootroot00000000000000pyepr-1.3.1/extern/epr-api/000077500000000000000000000000001525260221700155175ustar00rootroot00000000000000pyepr-1.3.1/pyproject.toml000066400000000000000000000174751525260221700156070ustar00rootroot00000000000000[build-system] requires = [ "setuptools >=77.0.3", "packaging", "cython >=3.1", "numpy >=2", ] build-backend = "setuptools.build_meta" [project] name = "pyepr" authors = [ {name = "Antonio Valentino", email = "antonio.valentino@tiscali.it"}, ] description = "Python ENVISAT Product Reader API" requires-python = ">=3.11, <4" keywords = ["satellite", "reader", "envisat"] license = "GPL-3.0-or-later" license-files = ["LICENSE.txt", "LICENSES/*"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Other Environment", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Free Threading :: 2 - Beta", "Programming Language :: Cython", "Topic :: Software Development :: Libraries", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: GIS", ] dependencies = [ "numpy >=2", ] dynamic = ["version"] [project.readme] text = """\ 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://earth.esa.int/eogateway/missions/envisat .. _ESA: https://earth.esa.int """ content-type = "text/x-rst" [project.urls] Homepage = "https://github.com/avalentino/pyepr" Documentation = "https://pyepr.readthedocs.io" Repository = "https://github.com/avalentino/pyepr.git" Changelog = "https://pyepr.readthedocs.io/en/latest/NEWS.html" Issues = "https://github.com/avalentino/pyepr/issues" [dependency-groups] docs = [ "sphinx", "sphinx_rtd_theme", "sphinxcontrib-spelling", "packaging", "ipython", ] test = ["pytest", "packaging", "pooch"] coverage = [ "pytest-cov", "coverage[toml]", "cython", "numpy >=2", {include-group = "test"}, ] lint = ["flake8", "pydocstyle", "isort", "black", "ruff", "mypy", "codespell"] dev = [ "python-build", "twine", "setuptools >=77.0.3", "packaging", "cython >=3.1", "numpy >=2", "tox", {include-group = "docs"}, {include-group = "test"}, {include-group = "coverage"}, {include-group = "lint"}, ] [tool.setuptools] packages = ["epr"] package-dir = {"" = "src"} [tool.setuptools.dynamic] version = {attr = "epr.__version__"} [tool.setuptools.package-data] epr = ["py.typed", "*.pyi"] [tool.cibuildwheel] build = ["cp311-*", "cp31?t-*"] test-groups = ["test"] test-command = "pytest -v {project}/tests" [tool.pytest.ini_options] addopts = [ "--import-mode=importlib", ] [tool.coverage.run] branch = true core = "ctrace" plugins = ["Cython.Coverage"] source_pkgs = ["epr"] [tool.black] line-length = 79 preview = true enable-unstable-feature = [ "hug_parens_with_braces_and_square_brackets", "string_processing", "wrap_long_dict_values_in_parens", ] target-version = ['py311'] [tool.isort] profile = "black" length_sort = true multi_line_output = 3 no_inline_sort = true include_trailing_comma = true use_parentheses = true line_length = 79 # force_grid_wrap = 0 # ensure_newline_before_comments = true known_first_party = ["epr"] # skip_glob = ["packagename/parse/*"] [tool.pydocstyle] add-ignore = ["D105"] # add-ignore = ["D105", "D107"] match='(?!(test_|conf)).*\.py' [tool.codespell] skip = "*.pdf,*.ipynb,./docs/spelling_wordlist.txt,*.N1,extern,./src/epr/*.c,./docs/_build,./htmlcov" count = true quiet-level = 3 ignore-words="docs/spelling_wordlist.txt" [tool.mypy] exclude = [ "^docs/conf\\.py$", ] [tool.ruff] line-length = 79 target-version = "py311" extend-exclude = ["docs/conf.py"] [tool.ruff.lint] preview = true select = [ # ruff --version # ruff 0.16.3 # ruff linter "E", # E/W pycodestyle "W", # E/W pycodestyle "F", # F Pyflakes "D", # D pydocstyle "N", # N pep8-naming "I", # I isort "C90", # C90 mccabe "UP", # UP pyupgrade # --- flake8 --- "YTT", # YTT flake8-2020 # "ANN", # ANN flake8-annotations # "ASYNC", #ASYNC flake8-async # "S", # S flake8-bandit "BLE", # BLE flake8-blind-except "FBT", # FBT flake8-boolean-trap "B", # B flake8-bugbear "A", # A flake8-builtins # "COM", # COM flake8-commas "C4", # C4 flake8-comprehensions # "CPY", # CPY flake8-copyright "DTZ", # DTZ flake8-datetimez "T10", # T10 flake8-debugger "DJ", # DJ flake8-django # "EM", # EM flake8-errmsg "EXE", # EXE flake8-executable # "FIX", # FIX flake8-fixme # manual "FA", # FA flake8-future-annotations # "INT", # INT flake8-gettext "ISC", # ISC flake8-implicit-str-concat "ICN", # ICN flake8-import-conventions # "LOG", # LOG flake8-logging "G", # G flake8-logging-format "INP", # INP flake8-no-pep420 "PIE", # PIE flake8-pie "T20", # T20 flake8-print "PYI", # PYI flake8-pyi # "PT", # PT flake8-pytest-style # manual "Q", # Q flake8-quotes "RSE", # RSE flake8-raise "RET", # RET flake8-return "SLF", # SLF flake8-self "SIM", # SIM flake8-simplify "SLOT", # SLOT flake8-slots "TID", # TID flake8-tidy-imports # "TD", # TD flake8-todos # "TC", # TC flake8-type-checking "ARG", # ARG flake8-unused-arguments "PTH", # PTH flake8-use-pathlib # --- misc --- # "AIR", # AIR Airflow # "ERA", # ERA eradicate # manual # "FAST", # FAST FastAPI "FLY", # FLY flynt "NPY", # NPY NumPy-specific rules # "PD", # PD pandas-vet "PERF", # PERF Perflint # "DOC", # DOC pydoclint "PGH", # PGH pygrep-hooks "PL", # PL Pylint # "FURB", # FURB refurb # --preview "RUF", # RUF Ruff-specific rules # "TRY", # TRY tryceratops # manual ] extend-ignore = [ # "D105", # D105 Missing docstring in magic method # "D107", # D107 Missing docstring in `__init__` "D203", # D203 1 blank line required before class docstring "D213", # D213 Multi-line docstring summary should start at the second line "RUF105" # RUF105 noqa-comments ] [tool.ruff.format] preview = true docstring-code-format = true [tool.ruff.lint.per-file-ignores] "setup.py" = ["D", "N806", "PLC0415", "PTH110", "PTH118", "PTH207", "T201"] "tests/*" = ["D"] "tests/test_all.py" = ["RUF012", "T201"] "docs/conf.py" = ["A001", "D", "INP001", "N812", "PLC0415", "PTH123"] "docs/examples/export_gdalvrt.py" = ["D", "PTH110", "PTH122", "T201"] "docs/examples/write_bands.py" = ["D", "PTH123", "PLR2004", "PTH118", "T201"] "docs/examples/write_bitmask.py" = ["D", "PLR2004", "PTH123", "T201"] "docs/examples/write_ndvi.py" = ["D", "PLR0914", "PLR2004", "PTH123", "T201"] "docs/examples/update_elements.py" = ["D"] [tool.ruff.lint.isort] length-sort = true known-first-party = ["epr"] [tool.ruff.lint.flake8-import-conventions.extend-aliases] "xml.etree.ElementTree" = "etree" pyepr-1.3.1/setup.py000077500000000000000000000155071525260221700144020ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright (C) 2011-2026, 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 glob import warnings import sysconfig import setuptools try: import Cython print(f"CYTHON_VERSION: {Cython.__version__}") del Cython except ImportError: print("CYTHON not installed") # 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 tag_to_packed_version(tag: str) -> tuple[int, bool]: mobj = re.match( r"cp(?P\d{1})(?P\d{2})(?Pt)?", tag ) if mobj is None: raise ValueError(f"invalid version tag: {tag!r}") major = int(mobj.group("major")) minor = int(mobj.group("minor")) packed_version = (major << 24) + (minor << 16) free_threading = bool(mobj.group("free_threading") is not None) return packed_version, free_threading def setup_extension( eprsrcdir=None, *, coverage: bool = False, py_limited_api: str | None = None, ): if eprsrcdir: print(f'EPR_API: using EPR C API sources at "{eprsrcdir}"') extra_sources = glob.glob(f"{eprsrcdir}/epr_*.c") 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: list[tuple[str, str | None]] = [ ("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION") ] if coverage: define_macros.extend([ ("CYTHON_TRACE_NOGIL", "1"), ("CYTHON_USE_SYS_MONITORING", "0"), ]) if py_limited_api is not None: warnings.warn( "The use of 'limited_api` is not compatible with the " "'coverage': 'limited_api' will be ignored", stacklevel=2, ) elif py_limited_api is not None: packed_version, free_threading = tag_to_packed_version(py_limited_api) macro_name = "Py_LIMITED_APIT" if free_threading else "Py_LIMITED_API" hex_version = f"0x{packed_version:08X}" print(f"{macro_name}: {hex_version} ({py_limited_api})") if free_threading and not sysconfig.get_config_var("Py_GIL_DISABLED"): warnings.warn( "Trying to use a free-threading stable API with a Python " "interpreter that has GIL enabled", stacklevel=1, ) define_macros.append((macro_name, hex_version)) ext = NumpyExtension( "epr._epr", sources=[os.path.join("src", "epr", "_epr.pyx"), *extra_sources], include_dirs=include_dirs, libraries=libraries, language="c", define_macros=define_macros, py_limited_api=bool(py_limited_api is not None), ) # compiler directives language_level = "3" ext.cython_directives = {"language_level": language_level} print(f"CYTHON_LANGUAGE_LEVEL: {language_level}") if coverage: ext.cython_directives["linetrace"] = True ext.cython_directives["freethreading_compatible"] = True return ext def make_config( eprsrcdir=None, *, coverage=False, py_limited_api: str | None = None, ): if not py_limited_api: py_limited_api = None elif py_limited_api == "AUTO": if not sysconfig.get_config_var("Py_GIL_DISABLED"): py_limited_api = "cp311" else: py_limited_api = None config = { "ext_modules": [ setup_extension( eprsrcdir, coverage=coverage, py_limited_api=py_limited_api ), ] } if py_limited_api is not None: config["options"] = {"bdist_wheel": {"py_limited_api": py_limited_api}} return config def get_parser(): import argparse 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) DEFAULT_PY_LIMITED_API = os.environ.get("PY_LIMITED_API", None) PYEPR_COVERAGE_STR = os.environ.get("PYEPR_COVERAGE", "").upper() DEFAULT_COVERAGE = bool( PYEPR_COVERAGE_STR in {"Y", "YES", "TRUE", "OK", "ON", "1"} ) parser = argparse.ArgumentParser(add_help=False) parser.add_argument( "--epr-api-src", default=DEFAULT_EPRAPI_SRC, help=( "set the path to the EPR-API source tree. " "If not set uses the system libraries for epr-api. " "Default: %(default)s" ), ) parser.add_argument( "--use-stable-api", dest="py_limited_api", default=DEFAULT_PY_LIMITED_API, help=( "enable the use of the specified stable Python API " "(and limited ABI)." "If 'None', the use of limited API is disabled. " "E.g.: 'cp312' for Python 3.12. " f"Default: {DEFAULT_PY_LIMITED_API}." ), ) parser.add_argument( "--coverage", action="store_true", default=DEFAULT_COVERAGE, help=( "build the epr module to allow cython coverage measurement " "(default: %(default)s)" ), ) return parser if __name__ == "__main__": parser = get_parser() extra_args, setup_argv = parser.parse_known_args(sys.argv) sys.argv[:] = setup_argv print("PY_LIMITED_API:", extra_args.py_limited_api) print("PYEPR_COVERAGE:", extra_args.coverage) config = make_config( extra_args.epr_api_src, coverage=extra_args.coverage, py_limited_api=extra_args.py_limited_api, ) 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() print("config:", config) setuptools.setup(**config) pyepr-1.3.1/src/000077500000000000000000000000001525260221700134445ustar00rootroot00000000000000pyepr-1.3.1/src/epr/000077500000000000000000000000001525260221700142325ustar00rootroot00000000000000pyepr-1.3.1/src/epr/__init__.py000066400000000000000000000044501525260221700163460ustar00rootroot00000000000000# PyEPR - Python bindings for ENVISAT Product Reader API # # Copyright (C) 2011-2026, 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://pyepr.readthedocs.io .. _Python: https://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: https://earth.esa.int/eogateway/missions/envisat .. _ESA: http://earth.esa.int """ from ._epr import ( # noqa: F401 DSD, MJD, E_TID_INT, E_SMID_LIN, E_SMID_LOG, E_SMID_NON, E_TID_CHAR, E_TID_TIME, E_TID_UINT, E_SMOD_1OF1, E_SMOD_1OF2, E_SMOD_2OF2, E_SMOD_2TOF, E_SMOD_3TOI, E_TID_FLOAT, E_TID_SHORT, E_TID_SPARE, E_TID_UCHAR, E_TID_DOUBLE, E_TID_STRING, E_TID_USHORT, E_TID_UNKNOWN, EPR_C_API_VERSION, Band, Field, Raster, Record, Dataset, EPRTime, Product, EPRError, EprObject, EPRValueError, open, # noqa: A004 create_raster, get_numpy_dtype, get_data_type_size, data_type_id_to_str, create_bitmask_raster, get_sample_model_name, get_scaling_method_name, ) __version__ = "1.3.1" pyepr-1.3.1/src/epr/_epr.pxd000066400000000000000000000271431525260221700157030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # PyEPR - Python bindings for ENVISAT Product Reader API # # Copyright (C) 2011-2026, 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.3.1/src/epr/_epr.pyi000066400000000000000000000140001525260221700156750ustar00rootroot00000000000000import os import typing import numpy as np EPR_C_API_VERSION: str E_SMID_LIN: int E_SMID_LOG: int E_SMID_NON: int E_SMOD_1OF1: int E_SMOD_1OF2: int E_SMOD_2OF2: int E_SMOD_2TOF: int E_SMOD_3TOI: int E_TID_CHAR: int E_TID_DOUBLE: int E_TID_FLOAT: int E_TID_INT: int E_TID_SHORT: int E_TID_SPARE: int E_TID_STRING: int E_TID_TIME: int E_TID_UCHAR: int E_TID_UINT: int E_TID_UNKNOWN: int E_TID_USHORT: int class EPRTime(typing.NamedTuple): days: int seconds: int microseconds: int MJD: np.dtype _EPR_MAGIC_FIELD: int _EPR_MAGIC_RASTER: int _EPR_MAGIC_RECORD: int _EPR_MAGIC_BAND_ID: int _EPR_MAGIC_PRODUCT_ID: int class EPRError(Exception): def __init__( self, message: str = ..., code: int = ..., *args, **kargs ) -> None: ... class EPRValueError(EPRError, ValueError): ... class EprObject: ... def get_numpy_dtype(type_id: int) -> type | np.dtype | None: ... def get_data_type_size(type_id: int) -> int: ... def data_type_id_to_str(type_id: int) -> str: ... def get_scaling_method_name(method: int) -> str: ... def get_sample_model_name(model: int) -> str: ... class DSD(EprObject): def __eq__(self, other: object) -> bool: ... def __ge__(self, other: object) -> bool: ... def __gt__(self, other: object) -> bool: ... def __le__(self, other: object) -> bool: ... def __lt__(self, other: object) -> bool: ... def __ne__(self, other: object) -> bool: ... class Field(EprObject): tot_size: int def get_description(self) -> str: ... def get_elem(self, index: int = ...): ... def get_elems(self) -> np.ndarray: ... def get_name(self) -> str: ... def get_num_elems(self) -> int: ... def get_offset(self) -> int: ... def get_type(self) -> int: ... def get_unit(self) -> str: ... def print(self, ostream=...) -> None: ... def set_elem(self, elem, index=...) -> None: ... def set_elems(self, elems) -> None: ... def __eq__(self, other: object) -> bool: ... def __ge__(self, other: object) -> bool: ... def __gt__(self, other: object) -> bool: ... def __le__(self, other: object) -> bool: ... def __len__(self) -> int: ... def __lt__(self, other: object) -> bool: ... def __ne__(self, other: object) -> bool: ... class Record(EprObject): dataset_name: str tot_size: int index: int def fields(self) -> list[Field]: ... def get_field(self, name: str) -> Field: ... def get_field_at(self, index: str) -> Field: ... def get_field_names(self) -> list[str]: ... def get_num_fields(self) -> int: ... def get_offset(self) -> int | None: ... def print(self, ostream=...) -> None: ... def print_element( self, field_index: int, element_index: int, ostream=... ) -> None: ... def __iter__(self) -> typing.Generator[Field]: ... class Raster(EprObject): data_type: int source_width: int source_height: int source_step_x: int source_step_y: int data: np.ndarray def get_elem_size(self) -> int: ... def get_height(self) -> int: ... def get_pixel(self, x: int, y: int): ... def get_width(self) -> int: ... def toarray(self) -> np.ndarray: ... def create_raster( data_type: int, src_width: int, src_height: int, xstep: int = ..., ystep: int = ..., ) -> Raster: ... def create_bitmask_raster( src_width: int, src_height: int, xstep: int = ..., ystep: int = ... ) -> Raster: ... class Band(EprObject): product: Product spectr_band_index: int sample_model: int data_type: int scaling_method: int scaling_offset: float scaling_factor: float bm_expr: str | None unit: str | None description: str lines_mirrored: bool dataset: Dataset def create_compatible_raster( self, src_width: int = ..., src_height: int = ..., xstep: int = ..., ystep: int = ..., ) -> Raster: ... def get_name(self) -> str: ... def read_as_array( self, width: int = ..., height: int = ..., xoffset: int = ..., yoffset: int = ..., xstep: int = ..., ystep: int = ..., ) -> np.ndarray: ... def read_raster( self, xoffset: int = ..., yoffset: int = ..., raster: Raster | None = ..., ) -> Raster: ... class Dataset(EprObject): product: Product description: str def create_record(self) -> Record: ... def get_dsd(self) -> DSD: ... def get_dsd_name(self) -> str: ... def get_name(self) -> str: ... def get_num_records(self) -> int: ... def read_record( self, index: int, record: Record | None = ... ) -> Record: ... def records(self) -> list[Record]: ... def __iter__(self) -> typing.Generator[Record]: ... class Product(EprObject): file_path: str mode: str tot_size: int id_string: str meris_iodd_version: int closed: bool def __init__( self, filename: str | os.PathLike[str], mode: str = ... ) -> None: ... def bands(self) -> list[Band]: ... def close(self) -> None: ... def datasets(self) -> list[Dataset]: ... def flush(self) -> None: ... def get_band(self, name: str) -> Band: ... def get_band_at(self, index: int) -> Band: ... def get_band_names(self) -> list[str]: ... def get_dataset(self, name: str) -> Dataset: ... def get_dataset_at(self, index) -> Dataset: ... def get_dataset_names(self) -> list[str]: ... def get_dsd_at(self, index: int) -> DSD: ... def get_mph(self) -> Record: ... def get_num_bands(self) -> int: ... def get_num_datasets(self) -> int: ... def get_num_dsds(self) -> int: ... def get_scene_height(self) -> int: ... def get_scene_width(self) -> int: ... def get_sph(self) -> Record: ... def read_bitmask_raster( self, bm_expr: str, xoffset: int, yoffset: int, raster: Raster ) -> Raster: ... def get_complex_band_as_array( self, i_band_name: str, q_band_name: str, *, strict: bool = ... ) -> np.ndarray: ... def open( # noqa: A001 filename: str | os.PathLike[str], mode: str = ... ) -> Product: ... pyepr-1.3.1/src/epr/_epr.pyx000066400000000000000000002475441525260221700157410ustar00rootroot00000000000000# cython: langyage_level=3str # PyEPR - Python bindings for ENVISAT Product Reader API # # Copyright (C) 2011-2026, 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.""" from posix.stdio cimport fileno cimport numpy as np from libc cimport errno, stdio from libc cimport string as cstring from libc.stdio cimport FILE from cpython.object cimport PyObject_AsFileDescriptor from cpython.weakref cimport PyWeakref_NewRef from ._epr cimport * np.import_array() import os import sys import atexit 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", f"i{sizeof(int)}"), ("seconds", f"u{sizeof(uint)}"), ("microseconds", f"u{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: {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(f"{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( # f"C library version not supported: {EPR_C_API_VERSION!r}") # 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( f"unable to initialize EPR API library: " f"{_to_str(msg, 'ascii')}" ) def __dealloc__(self): epr_close_api() def __init__(self): raise TypeError( f"{self.__class__.__name__!r} class cannot be instantiated from " f"Python" ) # global _CLib instance cdef _CLib _EPR_C_LIB = None cdef class EprObject: cdef object epr_c_lib def __cinit__(self, *args, **kargs): self.epr_c_lib = _EPR_C_LIB def __dealloc__(self): self.epr_c_lib = None def __init__(self): raise TypeError( f"{self.__class__.__name__!r} class cannot be instantiated from " f"Python" ) 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(f"invalid EPR type ID: {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(f"invalid scaling method: {method!r}") 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(f"invalid sample model: {model!r}") 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 def index(self): """The index of this DSD (zero-based).""" self.check_closed_product() return self._ptr.index @property def ds_name(self): """The dataset name.""" self.check_closed_product() return _to_str(self._ptr.ds_name, "ascii") @property def ds_type(self): """The dataset type descriptor.""" self.check_closed_product() return _to_str(self._ptr.ds_type, "ascii") @property def filename(self): """The filename in the DDDB with the description of this dataset.""" self.check_closed_product() return _to_str(self._ptr.filename, "ascii") @property def ds_offset(self): """The offset of dataset-information the product file.""" self.check_closed_product() return self._ptr.ds_offset @property def ds_size(self): """The size of dataset-information in dataset product file.""" self.check_closed_product() return self._ptr.ds_size @property def num_dsr(self): """The number of dataset records for the given dataset name.""" self.check_closed_product() return self._ptr.num_dsr @property def dsr_size(self): """The size of dataset record for the given dataset name.""" self.check_closed_product() return self._ptr.dsr_size # --- high level interface ------------------------------------------------ def __repr__(self): return f"epr.DSD({self.ds_name!r})" 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 def _magic(self): """The magic number for internal C structure.""" 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("unable 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 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 int 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(f"invalid index: {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(f"invalid index: {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 ndim = 1 cdef np.npy_intp[1] shape 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 = f"Filed({self.get_name()!r}) elems pointer is null" if etype == e_tid_time: if shape[0] != 1: raise ValueError( f"unexpected number of elements: {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( f"unexpected number of elements: {shape[0]} " "for e_tid_string" ) elem = self.get_elem() return np.asarray(elem) # ndim = 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(f"invalid field type: {etype}") out = np.PyArray_SimpleNewFromData(ndim, 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(f"write error: {ret} of {datasize} bytes written") 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 int 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( f"invalid shape {elem.shape!r}, scalar value expected" ) 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( f"invalid shape {elems.shape!r}, '({nelems},)' value expected" ) self._set_elems(elems) @property def tot_size(self): """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. """ cdef EPR_FieldInfo* info = self._ptr.info return info.tot_size # --- high level interface ------------------------------------------------ def __repr__(self): return ( f"epr.Field({self.get_name()!r}) {self.get_num_elems()} " f"{data_type_id_to_str(self.get_type())} elements" ) 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 f"{name} = {self.get_elem().decode('UTF-8')!r}" elif type_ == e_tid_time: days, seconds, microseconds = self.get_elem() return f"{name} = {{d={days}, j={seconds}, m={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 f"{name} = {{{data}}}" else: return f"{name} = <>" if num_elems > 1: data = ", ".join([fmt % item for item in self.get_elems()]) return f"{name} = {{{data}}}" else: return f"{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 def _magic(self): """The magic number for internal C structure.""" 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 absolute=0): cdef EPR_RecordInfo* info = self._ptr.info cdef uint offset = self._index * info.tot_size # assert self._index is not None if absolute: 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_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 int field_index: the index of field in the record :param int 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 str 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(f"unable to get field {name!r}") 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 int 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(f"unable to get field at index {index}") return new_field(field_ptr, self) @property def dataset_name(self): """The name of the dataset to which this record belongs to.""" 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 def tot_size(self): """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. """ self.check_closed_product() cdef EPR_RecordInfo* info = self._ptr.info return info.tot_size @property def index(self): """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` """ 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): self.check_closed_product() cdef int num_fields = epr_get_num_fields(self._ptr) cdef int idx for idx in range(num_fields): yield self.get_field_at(idx) def __str__(self): self.check_closed_product() return "\n".join(map(str, self)) def __repr__(self): self.check_closed_product() return ( f"{super(Record, self).__repr__()} {self.get_num_fields()} fields" ) # --- low level interface ------------------------------------------------- @property def _magic(self): """The magic number for internal C structure.""" 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 def data_type(self): """The data type of the band's pixels. All ``E_TID_*`` types are possible. """ return self._ptr.data_type @property def source_width(self): """The width of the source.""" return self._ptr.source_width @property def source_height(self): """The height of the source.""" return self._ptr.source_height @property def source_step_x(self): """The sub-sampling for the across-track direction in pixel.""" return self._ptr.source_step_x @property def source_step_y(self): """The sub-sampling for the along-track direction in pixel.""" 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 int x: the (zero-based) X coordinate of the pixel :param int y: the (zero-based) Y coordinate of the pixel :returns: the typed value at the given coordinate """ if (x < 0 or x >= self._ptr.raster_width or y < 0 or y >= self._ptr.raster_height): raise ValueError(f"index out of range: x={x}, y={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( f"invalid data type: {epr_data_type_id_to_str(dtype)!r}" ) pyepr_check_errors() 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[2] shape 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 def data(self): """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. """ 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 ( f"{super(Raster, self).__repr__()} " f"{data_type_id_to_str(self.data_type)} " f"({self.get_height()}L x {self.get_width()}P)" ) # --- low level interface ------------------------------------------------- @property def _magic(self): """The magic number for internal C structure.""" 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 int 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 int 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 int xstep: the sub-sampling step across track of the source when reading into the raster :param int 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(f"invalid step: xspet={xstep}, ystep={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 int src_width: the width (across track dimension) of the source to be read into the raster :param int src_height: the height (along track dimension) of the source to be read into the raster :param int xstep: the sub-sampling step across track of the source when reading into the raster :param int 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(f"invalid step: xspet={xstep}, ystep={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 def product(self): """The :class:`Product` instance to which this band belongs to.""" return self._parent @property def spectr_band_index(self): """The (zero-based) spectral band index. -1 if this is not a spectral band. """ self.check_closed_product() return self._ptr.spectr_band_index @property def sample_model(self): """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 """ self.check_closed_product() return self._ptr.sample_model @property def data_type(self): """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 """ self.check_closed_product() return self._ptr.data_type @property def scaling_method(self): """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) """ self.check_closed_product() return self._ptr.scaling_method @property def scaling_offset(self): """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 """ self.check_closed_product() return self._ptr.scaling_offset @property def scaling_factor(self): """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 """ self.check_closed_product() return self._ptr.scaling_factor @property def bm_expr(self): """A bit-mask expression used to filter valid pixels. All others are set to zero. """ self.check_closed_product() if self._ptr.bm_expr is NULL: return None else: return _to_str(self._ptr.bm_expr, "ascii") @property def unit(self): """The geophysical unit for the band's pixel values.""" self.check_closed_product() if self._ptr.unit is NULL: return None else: return _to_str(self._ptr.unit, "ascii") @property def description(self): """A short description of the band's contents.""" self.check_closed_product() if self._ptr.description is NULL: return None else: return _to_str(self._ptr.description, "ascii") @property def lines_mirrored(self): """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. """ self.check_closed_product() return self._ptr.lines_mirrored @property def dataset(self): """The source dataset. The source dataset containing the raw data used to create the band's pixel values. """ 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 int src_width: the width (across track dimension) of the source to be read into the raster (default: scene_width) :param int src_height: the height (along track dimension) of the source to be read into the raster (default: scene_height) :param int xstep: the sub-sampling step across track of the source when reading into the raster (default=1) :param int 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( f"requested raster width ({src_width}) is too large for the " f"Band (scene_width={scene_width})" ) if src_height == 0: src_height = scene_height elif src_height > scene_height: raise ValueError( f"requested raster height ({src_height}) is too large for the " f"Band (scene_height={scene_height})" ) if xstep > src_width: raise ValueError( f"xstep ({xstep}) too large for the requested width " f"({src_width})" ) if ystep > src_height: raise ValueError( f"ystep ({ystep}) too large for the requested height " f"({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( f"unable to create compatible raster " f"with width={src_width}, height={src_height}, " f"xstep={xstep}, ystep={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 coordinates 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 int xoffset: across-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param int yoffset: along-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param epr.Raster 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(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 coordinates 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 int 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 int 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 int xoffset: across-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param int yoffset: along-track source coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param int xstep: the sub-sampling step across track of the source when reading into the raster :param int 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 the 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 the scene height") raster = self.create_compatible_raster(width, height, xstep, ystep) self.read_raster(xoffset, yoffset, raster) return raster.data def __repr__(self): return ( f"epr.Band({self.get_name()!r}) of " f"epr.Product({self.product.id_string!r})" ) # --- low level interface ------------------------------------------------- @property def _magic(self): """The magic number for internal C structure.""" self.check_closed_product() return self._ptr.magic @property def _field_index(self): """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. """ self.check_closed_product() return self._ptr.dataset_ref.field_index @property def _elem_index(self): """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. """ 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 def product(self): """The :class:`Product` instance to which this dataset belongs to.""" return self._parent @property def description(self): """A short description of the band's contents.""" 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 int index: the zero-based record index (default: 0) :param epr.Record 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(f"unable to read record at index {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): self.check_closed_product() cdef uint idx for idx in range(epr_get_num_records(self._ptr)): yield self.read_record(idx) def __str__(self): lines = [repr(self), ""] lines.extend(map(str, self)) return "\n".join(lines) def __repr__(self): return ( f"epr.Dataset({self.get_name()!r}) {self.get_num_records()} " f"records" ) # --- low level interface ------------------------------------------------- @property def _magic(self): """The magic number for internal C structure.""" 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 if mode not in ("rb", "rb+", "r+b"): raise ValueError(f"invalid open mode: {mode!r}") 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(f"unable to open '{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( f"unable to open file '{filename}' in {mode!r} 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 def file_path(self): """The file's path including the file name.""" self.check_closed_product() if self._ptr.file_path is NULL: return None else: return _to_str(self._ptr.file_path, "ascii") @property def _fileno(self): """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. """ if self._ptr.istream is NULL: return None else: return fileno(self._ptr.istream) @property def mode(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 def tot_size(self): """The total size in bytes of the product file.""" self.check_closed_product() return self._ptr.tot_size @property def id_string(self): """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. """ self.check_closed_product() return _to_str(self._ptr.id_string, "ascii") @property def meris_iodd_version(self): """For MERIS L1b and RR and FR to provide backward compatibility.""" 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 int 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(f"unable to get dataset at index {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 str 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(f"unable to get dataset {name!r}") 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 int 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(f"unable to get DSD at index {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 str 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(f"unable to get band {name!r}") 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 int 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(f"unable to get band at index {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 str 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 int xoffset: across-track coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param int yoffset: along-track coordinate in pixel coordinates (zero-based) of the upper right corner of the source-region :param epr.Raster 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 def closed(self): """True if the :class:`epr.Product` is closed.""" 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. """ self.check_closed_product() cdef int 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)] def get_complex_band_as_array( self, str iname, str qname, *, bint strict=True ): """get_complex_band_as_array(self, iname, qname, *, strict=True) Return a complex array that is the combination of two bands. Return a complex array reading the real part from the band named "iname" and the imaginary part from the band named "qname". :param str iname: name of the band containing the real part of the complex array :param str qname: name of the band containing the imaginary part of the complex array :param bool strict: raise a `ValueError` if the and names provided in input (`iname` and `qname`) do not belong to the same dataset, or if `imane` / `qname` does not correspond to the real/imaginary components (respectively) of the dataset """ re = self.get_band(iname) im = self.get_band(qname) if strict: if re.dataset.get_name() != im.dataset.get_name(): raise ValueError( "the input bands does not belong to the same dataset" ) if not iname.startswith("i"): raise ValueError( f"'iname' ('{iname}') does not correspond to the " "real component of a complex band" ) if not qname.startswith("q"): raise ValueError( f"'qname' ('{qname}') does not correspond to the " "imaginary component of a complex band" ) return re.read_as_array() + 1j * im.read_as_array() # @TODO: iter on both datasets and bands (??) # def __iter__(self): # return itertools.chain((self.datasets(), self.bands())) def __repr__(self): return ( f"epr.Product({self.id_string!r}) {self.get_num_datasets()} " f"datasets, {self.get_num_bands()} 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 def _magic(self): """The magic number for internal C structure.""" 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 PathLike product_file_path: the path to the ENVISAT product file :param str 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.3.1/src/epr/py.typed000066400000000000000000000000001525260221700157170ustar00rootroot00000000000000pyepr-1.3.1/tests/000077500000000000000000000000001525260221700140175ustar00rootroot00000000000000pyepr-1.3.1/tests/__init__.py000066400000000000000000000000001525260221700161160ustar00rootroot00000000000000pyepr-1.3.1/tests/data/000077500000000000000000000000001525260221700147305ustar00rootroot00000000000000pyepr-1.3.1/tests/data/registry.txt000066400000000000000000000002001525260221700173310ustar00rootroot00000000000000ASA_APM_1PNDSI20091007_025628_000000432083_00118_39751_0000.N1 425132d361595a53a2adff849e3e02429df1be9d4883015f104ce2387f4eb332 pyepr-1.3.1/tests/test_all.py000066400000000000000000003062171525260221700162110ustar00rootroot00000000000000# Copyright (C) 2011-2026, 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 typing import numbers import pathlib import operator import platform import tempfile import unittest import functools import sysconfig try: import resource except ImportError: have_resource = False else: have_resource = True import numpy as np import pooch from numpy import testing as npt from packaging.version import parse as Version # noqa: N812 import epr from epr._epr import ( # noqa: PLC2701 _EPR_MAGIC_FIELD, _EPR_MAGIC_RASTER, _EPR_MAGIC_RECORD, _EPR_MAGIC_BAND_ID, _EPR_MAGIC_PRODUCT_ID, ) FREE_THREAD = sysconfig.get_config_var("Py_GIL_DISABLED") 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() -> bool: if "_pyepr" in epr.EPR_C_API_VERSION: v_str = epr.EPR_C_API_VERSION epr_version, _, pyepr_version = v_str.partition("_pyepr") v = Version(epr_version), Version(pyepr_version) v_ref = Version("2.3dev"), Version("082") return v < v_ref return Version(epr.EPR_C_API_VERSION) <= Version("2.3") EPR_C_BUG_PYEPR009 = has_epr_c_bug_pyepr009() EPR_C_BUG_BCEPR002 = EPR_C_BUG_PYEPR009 TESTDIR = pathlib.Path(__file__).parent TESTDATADIR = TESTDIR / "data" TEST_PRODUCT = "ASA_APM_1PNDSI20091007_025628_000000432083_00118_39751_0000.N1" TEST_PRODUCT_BM_EXPR = None PRODUCT_FILE = TESTDATADIR / TEST_PRODUCT def _create_pooch() -> pooch.Pooch: pooch_obj = pooch.create( path=TESTDATADIR, base_url="https://github.com/avalentino/pyepr-test-data/raw/v1.0.0/", ) registry_file = TESTDATADIR / "registry.txt" pooch_obj.load_registry(registry_file) return pooch_obj DATA_MANAGER = _create_pooch() 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 cannot be converted into a C FILE* # with file(os.devnull) as fd: with tempfile.TemporaryFile("w+", encoding="utf-8") 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) is not 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_str = DATA_MANAGER.fetch(TEST_PRODUCT) filename = pathlib.Path(filename_str) assert filename.exists() assert filename == PRODUCT_FILE class TestOpenProduct(unittest.TestCase): def test_open(self): with epr.open(PRODUCT_FILE) as product: self.assertTrue(isinstance(product, epr.Product)) self.assertEqual(product.mode, "rb") def test_open_rb(self): with epr.open(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(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(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, PRODUCT_FILE, "") def test_open_invalid_mode_02(self): self.assertRaises(ValueError, epr.open, PRODUCT_FILE, "rx") def test_open_invalid_mode_03(self): self.assertRaises(TypeError, epr.open, PRODUCT_FILE, 0) def test_open_bytes(self): filename = str(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(PRODUCT_FILE) with epr.open(filename) as product: self.assertTrue(isinstance(product, epr.Product)) def test_product_constructor(self): with epr.Product(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): # noqa: PLR0904 OPEN_MODE = "rb" ID_STRING = TEST_PRODUCT[:48] TOT_SIZE = 22911746 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(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(pathlib.Path(self.product.file_path), PRODUCT_FILE) 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"), PRODUCT_FILE.name) 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)) # noqa: SLF001 def test_fileno_read(self): pos = os.lseek(self.product._fileno, 0, os.SEEK_CUR) # noqa: SLF001 try: os.lseek(self.product._fileno, 0, os.SEEK_SET) # noqa: SLF001 data = os.read(self.product._fileno, 7) # noqa: SLF001 self.assertEqual(data, b"PRODUCT") finally: os.lseek(self.product._fileno, pos, os.SEEK_SET) # noqa: SLF001 class TestProductRW(TestProduct): OPEN_MODE = "rb+" class TestProductHighLevelAPI(unittest.TestCase): 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(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, # noqa: FBT003 ) 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['\"])(?P\w+)(?P=q)\) " 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(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): def setUp(self): self.product = epr.Product(PRODUCT_FILE) def tearDown(self): self.product.close() def test_magic(self): self.assertEqual( self.product._magic, # noqa: SLF001 _EPR_MAGIC_PRODUCT_ID, ) class TestClosedProduct(unittest.TestCase): # noqa: PLR0904 DATASET_NAME = "MDS1" BAND_NAME = "proc_data_1" def setUp(self): self.product = epr.open(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): 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(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): DATASET_NAME = TestDataset.DATASET_NAME def setUp(self): self.product = epr.Product(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): for index, record in enumerate(self.dataset): ref_record = self.dataset.read_record(index) self.assertEqual( record.get_field_names(), ref_record.get_field_names() ) self.assertEqual(index + 1, self.dataset.get_num_records()) def test_repr(self): pattern = ( r"epr\.Dataset\((?P['\"])(?P\w+)(?P=q)\) " r"(?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): DATASET_NAME = "MDS1" def setUp(self): self.product = epr.Product(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, lambda x: next(iter(x)), 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): # noqa: PLR0904 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: str | None = None RTOL = 1e-7 DATA_TYPE = np.float32 # fmt: off TEST_DATA: np.typing.NDArray = np.asarray([ [255., 333., 313., 295., 264., 306., 299., 330., 399., 335.], [254., 233., 320., 325., 281., 247., 249., 228., 217., 210.], [243., 266., 399., 397., 320., 237., 251., 261., 236., 210.], [216., 254., 323., 324., 286., 240., 242., 271., 253., 230.], [199., 226., 241., 259., 276., 272., 261., 252., 259., 235.], [221., 212., 264., 305., 271., 264., 275., 224., 284., 251.], [243., 235., 285., 312., 260., 242., 270., 233., 267., 259.], [248., 259., 266., 261., 269., 254., 274., 278., 287., 347.], [270., 262., 263., 238., 260., 280., 323., 374., 406., 437.], [303., 278., 303., 270., 264., 352., 434., 435., 423., 412.], ]) # fmt: on def setUp(self): self.product = epr.Product(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 # fmt: off TEST_DATA: np.typing.NDArray = np.asarray([ [21.869589, 21.864470, 21.859352, 21.854235, 21.849115, 21.843998, 21.838880, 21.833761, 21.828644, 21.823524], [21.869589, 21.864470, 21.859352, 21.854235, 21.849115, 21.843998, 21.838880, 21.833761, 21.828644, 21.823524], [21.869590, 21.864471, 21.859354, 21.854237, 21.849117, 21.844000, 21.838882, 21.833763, 21.828646, 21.823526], [21.869590, 21.864471, 21.859354, 21.854237, 21.849117, 21.844000, 21.838882, 21.833763, 21.828646, 21.823526], [21.869590, 21.864471, 21.859354, 21.854237, 21.849117, 21.844000, 21.838882, 21.833763, 21.828646, 21.823526], [21.869593, 21.864473, 21.859356, 21.854239, 21.849120, 21.844002, 21.838884, 21.833765, 21.828648, 21.823528], [21.869593, 21.864473, 21.859356, 21.854239, 21.849120, 21.844002, 21.838884, 21.833765, 21.828648, 21.823528], [21.869595, 21.864475, 21.859358, 21.854240, 21.849121, 21.844004, 21.838886, 21.833767, 21.828650, 21.823530], [21.869595, 21.864475, 21.859358, 21.854240, 21.849121, 21.844004, 21.838886, 21.833767, 21.828650, 21.823530], [21.869595, 21.864475, 21.859358, 21.854240, 21.849121, 21.844004, 21.838886, 21.833767, 21.828650, 21.823530], ]) # fmt: on @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_read_raster(self): super().test_read_raster() @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_read_raster_default_offset(self): super().test_read_raster_default_offset() @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_read_as_array_ref(self): super().test_read_as_array_ref() @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_read_as_array_cross(self): super().test_read_as_array_cross() class TestBandHighLevelAPI(unittest.TestCase): def setUp(self): self.product = epr.Product(PRODUCT_FILE) def tearDown(self): self.product.close() def test_repr(self): pattern = ( r"epr.Band\((?P['\"])(?P\w+)(?P=q1)\) of " r"epr.Product\((?P['\"])(?P\w+)(?P=q2)\)" ) 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): FIELD_INDEX = 7 ELEM_INDEX = -1 def setUp(self): self.product = epr.Product(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_MAGIC_BAND_ID) # noqa: SLF001 def test_field_index(self): self.assertEqual( self.band._field_index, # noqa: SLF001 self.FIELD_INDEX, ) def test_elem_index(self): self.assertEqual( self.band._elem_index, # noqa: SLF001 self.ELEM_INDEX, ) class TestBandOnClosedProduct(unittest.TestCase): WIDTH = 12 HEIGHT = 10 def setUp(self): self.product = epr.Product(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.typing.NDArray = 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): npt.assert_allclose(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): BAND_NAME = TestBand.BAND_NAME RASTER_XOFFSET = TestBand.XOFFSET RASTER_YOFFSET = TestBand.YOFFSET TEST_DATA: np.typing.NDArray = TestBand.TEST_DATA def setUp(self): self.product = epr.Product(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): BAND_NAME = TestAnnotationBand.BAND_NAME RASTER_XOFFSET = TestAnnotationBand.XOFFSET RASTER_YOFFSET = TestAnnotationBand.YOFFSET TEST_DATA: np.typing.NDArray = TestAnnotationBand.TEST_DATA RTOL = 1e-6 @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_get_pixel(self): super().test_get_pixel() @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_data_property(self): super().test_data_property() @unittest.skipIf(EPR_C_BUG_PYEPR009, "buggy EPR_C_API detected") def test_data_property_raster_scope(self): super().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_MAGIC_RASTER) # noqa: SLF001 class TestRecord(unittest.TestCase): 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(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): 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(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): for index, field in enumerate(self.record): ref_field = self.record.get_field_at(index) self.assertEqual(field.get_name(), ref_field.get_name()) self.assertEqual(index + 1, 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): RECORD_INDEX = 0 RECORD_SIZE = 170 RECORD_OFFSET = RECORD_INDEX * RECORD_SIZE def setUp(self): self.product = epr.Product(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_MAGIC_RECORD) # noqa: SLF001 def test_get_offset(self): self.assertEqual(self.record.get_offset(), self.RECORD_OFFSET) class TestMultipleRecordsHighLevelAPI(unittest.TestCase): DATASET_NAME = TestProduct.DATASET_NAME def setUp(self): self.product = epr.Product(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+", encoding="utf-8") 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): 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(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): 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(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, lambda x: next(iter(x)), 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): 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: typing.Sequence[int | epr.EPRTime] = (0,) FIELD_UNIT = "flag" FIELD_OFFSET = 16 def setUp(self): self.product = epr.Product(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 TestFieldGetElems(unittest.TestCase): def setUp(self): self.product = epr.Product(PRODUCT_FILE) self.record = self.product.get_sph() def test_string_get_elem_int(self): field = self.record.get_field("LINE_LENGTH") value = field.get_elem() self.assertIsInstance(value, int) self.assertEqual(value, 1452) def test_string_get_elem_str(self): field = self.record.get_field("SPH_DESCRIPTOR") value = field.get_elem() self.assertIsInstance(value, bytes) self.assertEqual(value, b"AP Mode Medium Res. Image") def test_string_get_elems_int(self): field = self.record.get_field("LINE_LENGTH") value = field.get_elems() self.assertIsInstance(value, np.ndarray) self.assertTrue(np.isdtype(value.dtype, "integral")) self.assertEqual(value.item(), 1452) def test_string_get_elems_str(self): field = self.record.get_field("SPH_DESCRIPTOR") value = field.get_elems() self.assertIsInstance(value, np.ndarray) self.assertFalse(np.isdtype(value.dtype, "numeric")) self.assertEqual(value.item(), b"AP Mode Medium Res. Image") class TestFieldRW(TestField): OPEN_MODE = "rb+" class TestFieldWriteOnReadOnly(unittest.TestCase): 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 = PRODUCT_FILE.with_name(PRODUCT_FILE.name + "_") shutil.copy(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() self.filename.unlink() 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): 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 # fmt: off 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, 2264, 2123, 2187, 2255, 2332, 2646, 3065, 3496, 3622, 3436, 3694, 3921, 3298, 2368, 1974, ) # fmt: on def setUp(self): self.filename = PRODUCT_FILE.with_name(PRODUCT_FILE.name + "_") shutil.copy(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() self.filename.unlink() 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, # noqa: SLF001 self.offset + offset, os.SEEK_SET, ) return os.read(self.product._fileno, size) # noqa: SLF001 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): 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=239048), ) 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): DATASET_NAME = TestProduct.DATASET_NAME def setUp(self): self.product = epr.Product(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.+)(?P=q)\) (?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+", encoding="utf-8") 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) # noqa: PLR0124 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): DATASET_NAME = "MAIN_PROCESSING_PARAMS_ADS" RECORD_INDEX = 0 def setUp(self): self.product = epr.Product(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): DATASET_INDEX = 0 RECORD_INDEX = 0 FIELD_NAME = "invalid_downlink_flag" FIELD_OFFSET = 23 def setUp(self): self.product = epr.Product(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_MAGIC_FIELD) # noqa: SLF001 def test_get_offset(self): self.assertEqual(self.field.get_offset(), self.FIELD_OFFSET) class TestFieldOnClosedProduct(unittest.TestCase): DATASET_NAME = "MDS1_SQ_ADS" RECOSR_INDEX = 0 FIELD_NAME = "invalid_downlink_flag" FIELD_NAME2 = "zero_doppler_time" def setUp(self): product = epr.Product(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): 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(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): def setUp(self): self.product = epr.Product(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['\"])(?P.+)(?P=q)\)" 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): def setUp(self): self.product = epr.Product(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_MAGIC_DSD_ID) self.assertTrue(isinstance(self.dsd._magic, int)) # noqa: SLF001 class TestDSDOnCloserProduct(unittest.TestCase): DSD_INDEX = 0 def setUp(self): self.product = epr.Product(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 = ( "(?P['\"])%s(?P=q) 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)) @unittest.skipIf( platform.python_implementation() == "PyPy", "skip memory leak check on PyPy", ) @unittest.skipIf( FREE_THREAD, "skip memory leak check on free threading builds" ) @unittest.skipIf(not have_resource, "'resource' module not available") class TestMemoryLeaks(unittest.TestCase): # See gh-10 (https://github.com/avalentino/pyepr/issues/10) BAND_NAME = "incident_angle" def test_memory_leacks_on_read_as_array(self): m = 10 for n in range(m): with epr.open(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) class TestComplexBand(unittest.TestCase): def setUp(self): self.product = epr.open(PRODUCT_FILE) def tearDown(self): self.product.close() def test_get_complex_band_as_array(self): iname = "proc_data_1" qname = "proc_data_2" cdata = self.product.get_complex_band_as_array( iname, qname, strict=False ) self.assertIsInstance(cdata, np.ndarray) self.assertTrue(np.iscomplexobj(cdata)) re = self.product.get_band(iname).read_as_array() self.assertEqual(cdata.shape, re.shape) npt.assert_array_equal(cdata.real, re) del re im = self.product.get_band(qname).read_as_array() self.assertEqual(cdata.shape, im.shape) npt.assert_array_equal(cdata.imag, im) del im def test_get_complex_band_as_array_not_same_dataset(self): iname = "proc_data_1" qname = "proc_data_2" with self.assertRaisesRegex( ValueError, "the input bands does not belong to the same dataset" ): self.product.get_complex_band_as_array(iname, qname, strict=True) if __name__ == "__main__": print(f"PyEPR: {epr.__version__}") print(f"EPR API: {epr.EPR_C_API_VERSION}") print(f"Numpy: {np.__version__}") print(f"Python: {sys.version}") unittest.main()