pax_global_header00006660000000000000000000000064137645640550014531gustar00rootroot0000000000000052 comment=7d7f6a47b9487b29bd8a07776dcf5425e0877d6f python-language-server-0.36.2/000077500000000000000000000000001376456405500162275ustar00rootroot00000000000000python-language-server-0.36.2/.circleci/000077500000000000000000000000001376456405500200625ustar00rootroot00000000000000python-language-server-0.36.2/.circleci/config.yml000066400000000000000000000025011376456405500220500ustar00rootroot00000000000000version: 2 jobs: python2-test: docker: - image: "python:2.7-stretch" steps: - checkout - run: pip install -e .[all] .[test] - run: py.test -v test/ - run: pylint pyls test - run: pycodestyle pyls test - run: pyflakes pyls test python3-test: docker: - image: "python:3.6-stretch" steps: - checkout # To test Jedi environments - run: python3 -m venv /tmp/pyenv - run: /tmp/pyenv/bin/python -m pip install loghub - run: pip install -e .[all] .[test] - run: py.test -v test/ lint: docker: - image: "python:2.7-stretch" steps: - checkout - run: pip install -e .[all] .[test] - run: pylint pyls test - run: pycodestyle pyls test - run: pyflakes pyls test publish: docker: - image: "python:3.6-stretch" steps: - checkout - run: ./scripts/circle/pypi.sh workflows: version: 2 build: jobs: - python2-test: filters: { tags: { only: /.*/ } } - python3-test: filters: { tags: { only: /.*/ } } - publish: filters: tags: only: /[0-9]+(\.[0-9]+)+((-(beta|rc)[0-9]{1,2})(\.[0-9])?)?/ branches: ignore: /.*/ requires: - python2-test - python3-test python-language-server-0.36.2/.coveragerc000066400000000000000000000000361376456405500203470ustar00rootroot00000000000000[run] omit = pyls/_version.py python-language-server-0.36.2/.gitattributes000066400000000000000000000000361376456405500211210ustar00rootroot00000000000000pyls/_version.py export-subst python-language-server-0.36.2/.github/000077500000000000000000000000001376456405500175675ustar00rootroot00000000000000python-language-server-0.36.2/.github/workflows/000077500000000000000000000000001376456405500216245ustar00rootroot00000000000000python-language-server-0.36.2/.github/workflows/release.yml000066400000000000000000000023141376456405500237670ustar00rootroot00000000000000name: PyLS Release on: release: types: - created jobs: build: name: Linux Py${{ matrix.PYTHON_VERSION }} runs-on: ubuntu-latest env: CI: 'true' OS: 'linux' PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }} strategy: fail-fast: false matrix: PYTHON_VERSION: ['3.8'] timeout-minutes: 10 steps: - uses: actions/cache@v1 with: path: ~/.cache/pip key: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip-${{ hashFiles('setup.py') }} restore-keys: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip- - uses: actions/checkout@v2 with: fetch-depth: 0 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON_VERSION }} architecture: 'x64' - run: python -m pip install --upgrade pip setuptools wheel twine - name: Build and publish python-language-server env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PYLS_TOKEN }} run: | python setup.py bdist_wheel --universal python setup.py sdist python -m twine check dist/* python -m twine upload dist/* python-language-server-0.36.2/.github/workflows/test-linux.yml000066400000000000000000000027171376456405500244720ustar00rootroot00000000000000name: Linux tests on: push: branches: - develop pull_request: branches: - '*' jobs: build: name: Linux Py${{ matrix.PYTHON_VERSION }} runs-on: ubuntu-latest env: CI: 'true' OS: 'linux' PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }} strategy: fail-fast: false matrix: PYTHON_VERSION: ['3.8', '3.7', '3.6', '2.7'] timeout-minutes: 10 steps: - uses: actions/cache@v1 with: path: ~/.cache/pip key: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip-${{ hashFiles('setup.py') }} restore-keys: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip- - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON_VERSION }} architecture: 'x64' - name: Create Jedi environment for testing if: matrix.PYTHON_VERSION != '2.7' run: | python3 -m venv /tmp/pyenv /tmp/pyenv/bin/python -m pip install loghub - run: python -m pip install --upgrade pip setuptools - run: pip install -e .[all,test] - run: py.test -v test/ - name: Pylint checks if: matrix.PYTHON_VERSION == '2.7' run: pylint pyls test - name: Code style checks if: matrix.PYTHON_VERSION == '2.7' run: pycodestyle pyls test - name: Pyflakes checks if: matrix.PYTHON_VERSION == '2.7' run: pyflakes pyls test python-language-server-0.36.2/.github/workflows/test-mac.yml000066400000000000000000000022261376456405500240660ustar00rootroot00000000000000name: Mac tests on: push: branches: - develop pull_request: branches: - '*' jobs: build: name: Mac Py${{ matrix.PYTHON_VERSION }} runs-on: macos-latest env: CI: 'true' OS: 'macos' PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }} strategy: fail-fast: false matrix: PYTHON_VERSION: ['3.8', '3.7', '3.6', '2.7'] timeout-minutes: 10 steps: - uses: actions/cache@v1 with: path: ~/Library/Caches/pip key: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip-${{ hashFiles('setup.py') }} restore-keys: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip- - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON_VERSION }} architecture: 'x64' - name: Create Jedi environment for testing if: matrix.PYTHON_VERSION != '2.7' run: | python3 -m venv /tmp/pyenv /tmp/pyenv/bin/python -m pip install loghub - run: python -m pip install --upgrade pip setuptools - run: pip install -e .[all,test] - run: py.test -v test/ python-language-server-0.36.2/.github/workflows/test-win.yml000066400000000000000000000017301376456405500241220ustar00rootroot00000000000000name: Windows tests on: push: branches: - develop pull_request: branches: - '*' jobs: build: name: Win Py${{ matrix.PYTHON_VERSION }} runs-on: windows-latest env: CI: 'true' OS: 'win' PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }} strategy: fail-fast: false matrix: PYTHON_VERSION: ['3.8', '3.7', '3.6', '2.7'] timeout-minutes: 10 steps: - uses: actions/cache@v1 with: path: ~\AppData\Local\pip\Cache key: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip-${{ hashFiles('setup.py') }} restore-keys: ${{ runner.os }}-${{ matrix.PYTHON_VERSION }}-pip- - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON_VERSION }} architecture: 'x64' - run: python -m pip install --upgrade pip setuptools - run: pip install -e .[all,test] - run: py.test -v test/ python-language-server-0.36.2/.gitignore000066400000000000000000000023241376456405500202200ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # IntelliJ *.iml *.ipr *.iws .idea/ out/ # C extensions *.so # Distribution / packaging .Python env/ env3/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # 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/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ pytest.xml .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # dotenv .env # virtualenv venv/ ENV/ # Spyder project settings .spyderproject # Rope project settings .ropeproject # JavaScript **/*.vscode/ # vim *.sw[mnopqrs] # Idea .idea/ # Merge orig files *.orig # Special files .DS_Store python-language-server-0.36.2/.policy.yml000066400000000000000000000052351376456405500203340ustar00rootroot00000000000000# Excavator auto-updates this file. Please contribute improvements to the central template. policy: approval: - or: - one admin or contributor has approved - two admins have approved - changelog only and contributor approval - fixing excavator - excavator only touched baseline, circle, gradle files, godel files, docker-compose-rule config or versions.props - excavator only touched config files - bots updated package.json and lock files disapproval: requires: organizations: [ "palantir" ] approval_rules: - name: one admin or contributor has approved options: allow_contributor: true requires: count: 1 admins: true - name: two admins have approved options: allow_contributor: true requires: count: 2 admins: true - name: changelog only and contributor approval options: allow_contributor: true requires: count: 1 admins: true if: only_changed_files: paths: - "changelog/@unreleased/.*\\.yml" - name: fixing excavator options: allow_contributor: true requires: count: 1 admins: true if: has_author_in: users: [ "svc-excavator-bot" ] - name: excavator only touched baseline, circle, gradle files, godel files, docker-compose-rule config or versions.props requires: count: 0 if: has_author_in: users: [ "svc-excavator-bot" ] only_changed_files: # product-dependencies.lock should never go here, to force review of all product (SLS) dependency changes # this way excavator cannot change the deployability of a service or product via auto-merge paths: - "changelog/@unreleased/.*\\.yml" - "^\\.baseline/.*$" - "^\\.circleci/.*$" - "^\\.docker-compose-rule\\.yml$" - "^.*gradle$" - "^gradle/wrapper/.*" - "^gradlew$" - "^gradlew.bat$" - "^gradle.properties$" - "^settings.gradle$" - "^godelw$" - "^godel/config/godel.properties$" - "^versions.props$" - "^versions.lock$" - name: excavator only touched config files requires: count: 0 if: has_author_in: users: [ "svc-excavator-bot" ] only_changed_files: paths: - "^\\..*.yml$" - "^\\.github/.*$" - name: bots updated package.json and lock files requires: count: 0 if: has_author_in: users: - "svc-excavator-bot" - "dependabot[bot]" only_changed_files: paths: - "^.*yarn.lock$" - "^.*package.json$" python-language-server-0.36.2/.pylintrc000066400000000000000000000005741376456405500201020ustar00rootroot00000000000000[FORMAT] max-line-length = 120 [MESSAGES CONTROL] enable = useless-suppression disable = duplicate-code, invalid-name, fixme, missing-docstring, protected-access, too-few-public-methods, too-many-arguments, too-many-instance-attributes, import-error [REPORTS] reports = no [TYPECHECK] generated-members = pyls_* cache_clear python-language-server-0.36.2/LICENSE000066400000000000000000000021021376456405500172270ustar00rootroot00000000000000The MIT License (MIT) Copyright 2017 Palantir Technologies, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. python-language-server-0.36.2/MANIFEST.in000066400000000000000000000002001376456405500177550ustar00rootroot00000000000000include README.rst include versioneer.py include pyls/_version.py include LICENSE include .pylintrc recursive-include test *.py python-language-server-0.36.2/README.rst000066400000000000000000000134531376456405500177240ustar00rootroot00000000000000Python Language Server ====================== .. image:: https://github.com/palantir/python-language-server/workflows/Linux%20tests/badge.svg :target: https://github.com/palantir/python-language-server/actions?query=workflow%3A%22Linux+tests%22 .. image:: https://github.com/palantir/python-language-server/workflows/Mac%20tests/badge.svg :target: https://github.com/palantir/python-language-server/actions?query=workflow%3A%22Mac+tests%22 .. image:: https://github.com/palantir/python-language-server/workflows/Windows%20tests/badge.svg :target: https://github.com/palantir/python-language-server/actions?query=workflow%3A%22Windows+tests%22 .. image:: https://img.shields.io/github/license/palantir/python-language-server.svg :target: https://github.com/palantir/python-language-server/blob/master/LICENSE A Python 2.7 and 3.5+ implementation of the `Language Server Protocol`_. Installation ------------ The base language server requires Jedi_ to provide Completions, Definitions, Hover, References, Signature Help, and Symbols: ``pip install python-language-server`` If the respective dependencies are found, the following optional providers will be enabled: * Rope_ for Completions and renaming * Pyflakes_ linter to detect various errors * McCabe_ linter for complexity checking * pycodestyle_ linter for style checking * pydocstyle_ linter for docstring style checking (disabled by default) * autopep8_ for code formatting * YAPF_ for code formatting (preferred over autopep8) Optional providers can be installed using the `extras` syntax. To install YAPF_ formatting for example: ``pip install 'python-language-server[yapf]'`` All optional providers can be installed using: ``pip install 'python-language-server[all]'`` If you get an error similar to ``'install_requires' must be a string or list of strings`` then please upgrade setuptools before trying again. ``pip install -U setuptools`` 3rd Party Plugins ~~~~~~~~~~~~~~~~~ Installing these plugins will add extra functionality to the language server: * pyls-mypy_ Mypy type checking for Python 3 * pyls-isort_ Isort import sort code formatting * pyls-black_ for code formatting using Black_ Please see the above repositories for examples on how to write plugins for the Python Language Server. Please file an issue if you require assistance writing a plugin. Configuration ------------- Configuration is loaded from zero or more configuration sources. Currently implemented are: * pycodestyle: discovered in ~/.config/pycodestyle, setup.cfg, tox.ini and pycodestyle.cfg. * flake8: discovered in ~/.config/flake8, setup.cfg, tox.ini and flake8.cfg The default configuration source is pycodestyle. Change the `pyls.configurationSources` setting to `['flake8']` in order to respect flake8 configuration instead. Overall configuration is computed first from user configuration (in home directory), overridden by configuration passed in by the language client, and then overriden by configuration discovered in the workspace. To enable pydocstyle for linting docstrings add the following setting in your LSP configuration: ``` "pyls.plugins.pydocstyle.enabled": true ``` See `vscode-client/package.json`_ for the full set of supported configuration options. .. _vscode-client/package.json: vscode-client/package.json Language Server Features ------------------------ Auto Completion: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/auto-complete.gif Code Linting with pycodestyle and pyflakes: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/linting.gif Signature Help: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/signature-help.gif Go to definition: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/goto-definition.gif Hover: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/hover.gif Find References: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/references.gif Document Symbols: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/document-symbols.gif Document Formatting: .. image:: https://raw.githubusercontent.com/palantir/python-language-server/develop/resources/document-format.gif Development ----------- To run the test suite: ``pip install .[test] && pytest`` Develop against VS Code ======================= The Python language server can be developed against a local instance of Visual Studio Code. Install `VSCode `_ .. code-block:: bash # Setup a virtual env virtualenv env . env/bin/activate # Install pyls pip install . # Install the vscode-client extension cd vscode-client yarn install # Run VSCode which is configured to use pyls # See the bottom of vscode-client/src/extension.ts for info yarn run vscode -- $PWD/../ Then to debug, click View -> Output and in the dropdown will be pyls. To refresh VSCode, press `Cmd + r` License ------- This project is made available under the MIT License. .. _Language Server Protocol: https://github.com/Microsoft/language-server-protocol .. _Jedi: https://github.com/davidhalter/jedi .. _Rope: https://github.com/python-rope/rope .. _Pyflakes: https://github.com/PyCQA/pyflakes .. _McCabe: https://github.com/PyCQA/mccabe .. _pycodestyle: https://github.com/PyCQA/pycodestyle .. _pydocstyle: https://github.com/PyCQA/pydocstyle .. _YAPF: https://github.com/google/yapf .. _autopep8: https://github.com/hhatto/autopep8 .. _pyls-mypy: https://github.com/tomv564/pyls-mypy .. _pyls-isort: https://github.com/paradoxxxzero/pyls-isort .. _pyls-black: https://github.com/rupert/pyls-black .. _Black: https://github.com/ambv/black python-language-server-0.36.2/RELEASE.md000066400000000000000000000003771376456405500176400ustar00rootroot00000000000000To release a new version of the PyLS you need to follow these steps: * Close the current milestone on Github * git pull or git fetch/merge * git tag -a X.X.X -m 'Release X.X.X' * git push upstream --tags * Publish release in our Github Releases page python-language-server-0.36.2/pyls/000077500000000000000000000000001376456405500172165ustar00rootroot00000000000000python-language-server-0.36.2/pyls/__init__.py000066400000000000000000000006201376456405500213250ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import sys import pluggy from ._version import get_versions if sys.version_info[0] < 3: from future.standard_library import install_aliases install_aliases() __version__ = get_versions()['version'] del get_versions PYLS = 'pyls' hookspec = pluggy.HookspecMarker(PYLS) hookimpl = pluggy.HookimplMarker(PYLS) IS_WIN = os.name == 'nt' python-language-server-0.36.2/pyls/__main__.py000066400000000000000000000075141376456405500213170ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import argparse import logging import logging.config import sys try: import ujson as json except Exception: # pylint: disable=broad-except import json from .python_ls import (PythonLanguageServer, start_io_lang_server, start_tcp_lang_server) LOG_FORMAT = "%(asctime)s UTC - %(levelname)s - %(name)s - %(message)s" def add_arguments(parser): parser.description = "Python Language Server" parser.add_argument( "--tcp", action="store_true", help="Use TCP server instead of stdio" ) parser.add_argument( "--host", default="127.0.0.1", help="Bind to this address" ) parser.add_argument( "--port", type=int, default=2087, help="Bind to this port" ) parser.add_argument( '--check-parent-process', action="store_true", help="Check whether parent process is still alive using os.kill(ppid, 0) " "and auto shut down language server process when parent process is not alive." "Note that this may not work on a Windows machine." ) log_group = parser.add_mutually_exclusive_group() log_group.add_argument( "--log-config", help="Path to a JSON file containing Python logging config." ) log_group.add_argument( "--log-file", help="Redirect logs to the given file instead of writing to stderr." "Has no effect if used with --log-config." ) parser.add_argument( '-v', '--verbose', action='count', default=0, help="Increase verbosity of log output, overrides log config file" ) def main(): parser = argparse.ArgumentParser() add_arguments(parser) args = parser.parse_args() _configure_logger(args.verbose, args.log_config, args.log_file) if args.tcp: start_tcp_lang_server(args.host, args.port, args.check_parent_process, PythonLanguageServer) else: stdin, stdout = _binary_stdio() start_io_lang_server(stdin, stdout, args.check_parent_process, PythonLanguageServer) def _binary_stdio(): """Construct binary stdio streams (not text mode). This seems to be different for Window/Unix Python2/3, so going by: https://stackoverflow.com/questions/2850893/reading-binary-data-from-stdin """ PY3K = sys.version_info >= (3, 0) if PY3K: # pylint: disable=no-member stdin, stdout = sys.stdin.buffer, sys.stdout.buffer else: # Python 2 on Windows opens sys.stdin in text mode, and # binary data that read from it becomes corrupted on \r\n if sys.platform == "win32": # set sys.stdin to binary mode # pylint: disable=no-member,import-error import os import msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) stdin, stdout = sys.stdin, sys.stdout return stdin, stdout def _configure_logger(verbose=0, log_config=None, log_file=None): root_logger = logging.root if log_config: with open(log_config, 'r') as f: logging.config.dictConfig(json.load(f)) else: formatter = logging.Formatter(LOG_FORMAT) if log_file: log_handler = logging.handlers.RotatingFileHandler( log_file, mode='a', maxBytes=50*1024*1024, backupCount=10, encoding=None, delay=0 ) else: log_handler = logging.StreamHandler() log_handler.setFormatter(formatter) root_logger.addHandler(log_handler) if verbose == 0: level = logging.WARNING elif verbose == 1: level = logging.INFO elif verbose >= 2: level = logging.DEBUG root_logger.setLevel(level) if __name__ == '__main__': main() python-language-server-0.36.2/pyls/_utils.py000066400000000000000000000157541376456405500211030ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import functools import inspect import logging import os import sys import threading import jedi PY2 = sys.version_info.major == 2 JEDI_VERSION = jedi.__version__ if PY2: import pathlib2 as pathlib else: import pathlib log = logging.getLogger(__name__) def debounce(interval_s, keyed_by=None): """Debounce calls to this function until interval_s seconds have passed.""" def wrapper(func): timers = {} lock = threading.Lock() @functools.wraps(func) def debounced(*args, **kwargs): call_args = inspect.getcallargs(func, *args, **kwargs) key = call_args[keyed_by] if keyed_by else None def run(): with lock: del timers[key] return func(*args, **kwargs) with lock: old_timer = timers.get(key) if old_timer: old_timer.cancel() timer = threading.Timer(interval_s, run) timers[key] = timer timer.start() return debounced return wrapper def find_parents(root, path, names): """Find files matching the given names relative to the given path. Args: path (str): The file path to start searching up from. names (List[str]): The file/directory names to look for. root (str): The directory at which to stop recursing upwards. Note: The path MUST be within the root. """ if not root: return [] if not os.path.commonprefix((root, path)): log.warning("Path %s not in %s", path, root) return [] # Split the relative by directory, generate all the parent directories, then check each of them. # This avoids running a loop that has different base-cases for unix/windows # e.g. /a/b and /a/b/c/d/e.py -> ['/a/b', 'c', 'd'] dirs = [root] + os.path.relpath(os.path.dirname(path), root).split(os.path.sep) # Search each of /a/b/c, /a/b, /a while dirs: search_dir = os.path.join(*dirs) existing = list(filter(os.path.exists, [os.path.join(search_dir, n) for n in names])) if existing: return existing dirs.pop() # Otherwise nothing return [] def path_to_dot_name(path): """Given a path to a module, derive its dot-separated full name.""" directory = os.path.dirname(path) module_name, _ = os.path.splitext(os.path.basename(path)) full_name = [module_name] while os.path.exists(os.path.join(directory, '__init__.py')): this_directory = os.path.basename(directory) directory = os.path.dirname(directory) full_name = [this_directory] + full_name return '.'.join(full_name) def match_uri_to_workspace(uri, workspaces): if uri is None: return None max_len, chosen_workspace = -1, None path = pathlib.Path(uri).parts for workspace in workspaces: try: workspace_parts = pathlib.Path(workspace).parts except TypeError: # This can happen in Python2 if 'value' is a subclass of string workspace_parts = pathlib.Path(unicode(workspace)).parts if len(workspace_parts) > len(path): continue match_len = 0 for workspace_part, path_part in zip(workspace_parts, path): if workspace_part == path_part: match_len += 1 if match_len > 0: if match_len > max_len: max_len = match_len chosen_workspace = workspace return chosen_workspace def list_to_string(value): return ",".join(value) if isinstance(value, list) else value def merge_dicts(dict_a, dict_b): """Recursively merge dictionary b into dictionary a. If override_nones is True, then """ def _merge_dicts_(a, b): for key in set(a.keys()).union(b.keys()): if key in a and key in b: if isinstance(a[key], dict) and isinstance(b[key], dict): yield (key, dict(_merge_dicts_(a[key], b[key]))) elif b[key] is not None: yield (key, b[key]) else: yield (key, a[key]) elif key in a: yield (key, a[key]) elif b[key] is not None: yield (key, b[key]) return dict(_merge_dicts_(dict_a, dict_b)) def format_docstring(contents): """Python doc strings come in a number of formats, but LSP wants markdown. Until we can find a fast enough way of discovering and parsing each format, we can do a little better by at least preserving indentation. """ contents = contents.replace('\t', u'\u00A0' * 4) contents = contents.replace(' ', u'\u00A0' * 2) return contents def clip_column(column, lines, line_number): """ Normalise the position as per the LSP that accepts character positions > line length https://microsoft.github.io/language-server-protocol/specification#position """ max_column = len(lines[line_number].rstrip('\r\n')) if len(lines) > line_number else 0 return min(column, max_column) def position_to_jedi_linecolumn(document, position): """ Convert the LSP format 'line', 'character' to Jedi's 'line', 'column' https://microsoft.github.io/language-server-protocol/specification#position """ code_position = {} if position: code_position = {'line': position['line'] + 1, 'column': clip_column(position['character'], document.lines, position['line'])} return code_position if os.name == 'nt': import ctypes kernel32 = ctypes.windll.kernel32 PROCESS_QUERY_INFROMATION = 0x1000 def is_process_alive(pid): """Check whether the process with the given pid is still alive. Running `os.kill()` on Windows always exits the process, so it can't be used to check for an alive process. see: https://docs.python.org/3/library/os.html?highlight=os%20kill#os.kill Hence ctypes is used to check for the process directly via windows API avoiding any other 3rd-party dependency. Args: pid (int): process ID Returns: bool: False if the process is not alive or don't have permission to check, True otherwise. """ process = kernel32.OpenProcess(PROCESS_QUERY_INFROMATION, 0, pid) if process != 0: kernel32.CloseHandle(process) return True return False else: import errno def is_process_alive(pid): """Check whether the process with the given pid is still alive. Args: pid (int): process ID Returns: bool: False if the process is not alive or don't have permission to check, True otherwise. """ if pid < 0: return False try: os.kill(pid, 0) except OSError as e: return e.errno == errno.EPERM else: return True python-language-server-0.36.2/pyls/_version.py000066400000000000000000000441321376456405500214200ustar00rootroot00000000000000# pylint: skip-file # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build # directories (produced by setup.py build) will contain a much shorter file # that just contains the computed version number. # This file is released into the public domain. Generated by # versioneer-0.18 (https://github.com/warner/python-versioneer) """Git implementation of _version.py.""" import errno import os import re import subprocess import sys def get_keywords(): """Get the keywords needed to look up the version information.""" # these strings will be replaced by git during git-archive. # setup.py/versioneer.py will grep for the variable names, so they must # each be defined on a line of their own. _version.py will just call # get_keywords(). git_refnames = " (HEAD -> develop, tag: 0.36.2)" git_full = "7d7f6a47b9487b29bd8a07776dcf5425e0877d6f" git_date = "2020-12-10 22:31:57 -0500" keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} return keywords class VersioneerConfig: """Container for Versioneer configuration parameters.""" def get_config(): """Create, populate and return the VersioneerConfig() object.""" # these strings are filled in when 'setup.py versioneer' creates # _version.py cfg = VersioneerConfig() cfg.VCS = "git" cfg.style = "pep440" cfg.tag_prefix = "" cfg.parentdir_prefix = "" cfg.versionfile_source = "pyls/_version.py" cfg.verbose = False return cfg class NotThisMethod(Exception): """Exception raised if a method is not valid for the current scenario.""" LONG_VERSION_PY = {} HANDLERS = {} def register_vcs_handler(vcs, method): # decorator """Decorator to mark a method as the handler for a particular VCS.""" def decorate(f): """Store f in HANDLERS[vcs][method].""" if vcs not in HANDLERS: HANDLERS[vcs] = {} HANDLERS[vcs][method] = f return f return decorate def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) p = None for c in commands: try: dispcmd = str([c] + args) # remember shell=False, so use git.cmd on windows, not just git p = subprocess.Popen([c] + args, cwd=cwd, env=env, stdout=subprocess.PIPE, stderr=(subprocess.PIPE if hide_stderr else None)) break except EnvironmentError: e = sys.exc_info()[1] if e.errno == errno.ENOENT: continue if verbose: print("unable to run %s" % dispcmd) print(e) return None, None else: if verbose: print("unable to find command, tried %s" % (commands,)) return None, None stdout = p.communicate()[0].strip() if sys.version_info[0] >= 3: stdout = stdout.decode() if p.returncode != 0: if verbose: print("unable to run %s (error)" % dispcmd) print("stdout was %s" % stdout) return None, p.returncode return stdout, p.returncode def versions_from_parentdir(parentdir_prefix, root, verbose): """Try to determine the version from the parent directory name. Source tarballs conventionally unpack into a directory that includes both the project name and a version string. We will also support searching up two directory levels for an appropriately named parent directory """ rootdirs = [] for i in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): return {"version": dirname[len(parentdir_prefix):], "full-revisionid": None, "dirty": False, "error": None, "date": None} else: rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: print("Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") @register_vcs_handler("git", "get_keywords") def git_get_keywords(versionfile_abs): """Extract version information from the given file.""" # the code embedded in _version.py can just fetch the value of these # keywords. When used from setup.py, we don't want to import _version.py, # so we do it with a regexp instead. This function is not used from # _version.py. keywords = {} try: f = open(versionfile_abs, "r") for line in f.readlines(): if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["refnames"] = mo.group(1) if line.strip().startswith("git_full ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["full"] = mo.group(1) if line.strip().startswith("git_date ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["date"] = mo.group(1) f.close() except EnvironmentError: pass return keywords @register_vcs_handler("git", "keywords") def git_versions_from_keywords(keywords, tag_prefix, verbose): """Get version information from git keywords.""" if not keywords: raise NotThisMethod("no keywords at all, weird") date = keywords.get("date") if date is not None: # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 # -like" string, which we must then edit to make compliant), because # it's been around since git-1.5.3, and it's too difficult to # discover which version we're using, or to work around using an # older one. date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) refnames = keywords["refnames"].strip() if refnames.startswith("$Format"): if verbose: print("keywords are unexpanded, not using") raise NotThisMethod("unexpanded keywords, not a git-archive tarball") refs = set([r.strip() for r in refnames.strip("()").split(",")]) # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d # expansion behaves like git log --decorate=short and strips out the # refs/heads/ and refs/tags/ prefixes that would let us distinguish # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". tags = set([r for r in refs if re.search(r'\d', r)]) if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: print("likely tags: %s" % ",".join(sorted(tags))) for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): r = ref[len(tag_prefix):] if verbose: print("picking %s" % r) return {"version": r, "full-revisionid": keywords["full"].strip(), "dirty": False, "error": None, "date": date} # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") return {"version": "0+unknown", "full-revisionid": keywords["full"].strip(), "dirty": False, "error": "no suitable tags", "date": None} @register_vcs_handler("git", "pieces_from_vcs") def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): """Get version from 'git describe' in the root of the source tree. This only gets called if the git-archive 'subst' keywords were *not* expanded, and _version.py hasn't already been rewritten with a short version string, meaning we're inside a checked out source tree. """ GITS = ["git"] if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %s not under git control" % root) raise NotThisMethod("'git rev-parse --git-dir' returned error") # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%s*" % tag_prefix], cwd=root) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") describe_out = describe_out.strip() full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) if full_out is None: raise NotThisMethod("'git rev-parse' failed") full_out = full_out.strip() pieces = {} pieces["long"] = full_out pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] # TAG might have hyphens. git_describe = describe_out # look for -dirty suffix dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: git_describe = git_describe[:git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? pieces["error"] = ("unable to parse git-describe output: '%s'" % describe_out) return pieces # tag full_tag = mo.group(1) if not full_tag.startswith(tag_prefix): if verbose: fmt = "tag '%s' doesn't start with prefix '%s'" print(fmt % (full_tag, tag_prefix)) pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" % (full_tag, tag_prefix)) return pieces pieces["closest-tag"] = full_tag[len(tag_prefix):] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) # commit: short hex revision ID pieces["short"] = mo.group(3) else: # HEX: no tags pieces["closest-tag"] = None count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root) pieces["distance"] = int(count_out) # total number of commits # commit date: see ISO-8601 comment in git_versions_from_keywords() date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) return pieces def plus_or_dot(pieces): """Return a + if we don't already have one, else return a .""" if "+" in pieces.get("closest-tag", ""): return "." return "+" def render_pep440(pieces): """Build up version string, with post-release "local version identifier". Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty Exceptions: 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += plus_or_dot(pieces) rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_pre(pieces): """TAG[.post.devDISTANCE] -- No -dirty. Exceptions: 1: no tags. 0.post.devDISTANCE """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += ".post.dev%d" % pieces["distance"] else: # exception #1 rendered = "0.post.dev%d" % pieces["distance"] return rendered def render_pep440_post(pieces): """TAG[.postDISTANCE[.dev0]+gHEX] . The ".dev0" means dirty. Note that .dev0 sorts backwards (a dirty tree will appear "older" than the corresponding clean one), but you shouldn't be releasing software with -dirty anyways. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%s" % pieces["short"] else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += "+g%s" % pieces["short"] return rendered def render_pep440_old(pieces): """TAG[.postDISTANCE[.dev0]] . The ".dev0" means dirty. Eexceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" return rendered def render_git_describe(pieces): """TAG[-DISTANCE-gHEX][-dirty]. Like 'git describe --tags --dirty --always'. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render_git_describe_long(pieces): """TAG-DISTANCE-gHEX[-dirty]. Like 'git describe --tags --dirty --always -long'. The distance/hash is unconditional. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: return {"version": "unknown", "full-revisionid": pieces.get("long"), "dirty": None, "error": pieces["error"], "date": None} if not style or style == "default": style = "pep440" # the default if style == "pep440": rendered = render_pep440(pieces) elif style == "pep440-pre": rendered = render_pep440_pre(pieces) elif style == "pep440-post": rendered = render_pep440_post(pieces) elif style == "pep440-old": rendered = render_pep440_old(pieces) elif style == "git-describe": rendered = render_git_describe(pieces) elif style == "git-describe-long": rendered = render_git_describe_long(pieces) else: raise ValueError("unknown style '%s'" % style) return {"version": rendered, "full-revisionid": pieces["long"], "dirty": pieces["dirty"], "error": None, "date": pieces.get("date")} def get_versions(): """Get version information or return default if unable to do so.""" # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have # __file__, we can work backwards from there to the root. Some # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which # case we can only use expanded keywords. cfg = get_config() verbose = cfg.verbose try: return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose) except NotThisMethod: pass try: root = os.path.realpath(__file__) # versionfile_source is the relative path from the top of the source # tree (where the .git directory might live) to this file. Invert # this to find the root from __file__. for i in cfg.versionfile_source.split('/'): root = os.path.dirname(root) except NameError: return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to find root of source tree", "date": None} try: pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) return render(pieces, cfg.style) except NotThisMethod: pass try: if cfg.parentdir_prefix: return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) except NotThisMethod: pass return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to compute version", "date": None} python-language-server-0.36.2/pyls/config/000077500000000000000000000000001376456405500204635ustar00rootroot00000000000000python-language-server-0.36.2/pyls/config/__init__.py000066400000000000000000000000551376456405500225740ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. python-language-server-0.36.2/pyls/config/config.py000066400000000000000000000127371376456405500223140ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import pkg_resources try: from functools import lru_cache except ImportError: from backports.functools_lru_cache import lru_cache import pluggy from pyls import _utils, hookspecs, uris, PYLS log = logging.getLogger(__name__) # Sources of config, first source overrides next source DEFAULT_CONFIG_SOURCES = ['pycodestyle'] class Config(object): def __init__(self, root_uri, init_opts, process_id, capabilities): self._root_path = uris.to_fs_path(root_uri) self._root_uri = root_uri self._init_opts = init_opts self._process_id = process_id self._capabilities = capabilities self._settings = {} self._plugin_settings = {} self._config_sources = {} try: from .flake8_conf import Flake8Config self._config_sources['flake8'] = Flake8Config(self._root_path) except ImportError: pass try: from .pycodestyle_conf import PyCodeStyleConfig self._config_sources['pycodestyle'] = PyCodeStyleConfig(self._root_path) except ImportError: pass self._pm = pluggy.PluginManager(PYLS) self._pm.trace.root.setwriter(log.debug) self._pm.enable_tracing() self._pm.add_hookspecs(hookspecs) # Pluggy will skip loading a plugin if it throws a DistributionNotFound exception. # However I don't want all plugins to have to catch ImportError and re-throw. So here we'll filter # out any entry points that throw ImportError assuming one or more of their dependencies isn't present. for entry_point in pkg_resources.iter_entry_points(PYLS): try: entry_point.load() except ImportError as e: log.warning("Failed to load %s entry point '%s': %s", PYLS, entry_point.name, e) self._pm.set_blocked(entry_point.name) # Load the entry points into pluggy, having blocked any failing ones self._pm.load_setuptools_entrypoints(PYLS) for name, plugin in self._pm.list_name_plugin(): if plugin is not None: log.info("Loaded pyls plugin %s from %s", name, plugin) for plugin_conf in self._pm.hook.pyls_settings(config=self): self._plugin_settings = _utils.merge_dicts(self._plugin_settings, plugin_conf) self._update_disabled_plugins() @property def disabled_plugins(self): return self._disabled_plugins @property def plugin_manager(self): return self._pm @property def init_opts(self): return self._init_opts @property def root_uri(self): return self._root_uri @property def process_id(self): return self._process_id @property def capabilities(self): return self._capabilities @lru_cache(maxsize=32) def settings(self, document_path=None): """Settings are constructed from a few sources: 1. User settings, found in user's home directory 2. Plugin settings, reported by PyLS plugins 3. LSP settings, given to us from didChangeConfiguration 4. Project settings, found in config files in the current project. Since this function is nondeterministic, it is important to call settings.cache_clear() when the config is updated """ settings = {} sources = self._settings.get('configurationSources', DEFAULT_CONFIG_SOURCES) # Plugin configuration settings = _utils.merge_dicts(settings, self._plugin_settings) # LSP configuration settings = _utils.merge_dicts(settings, self._settings) # User configuration for source_name in reversed(sources): source = self._config_sources.get(source_name) if not source: continue source_conf = source.user_config() log.debug("Got user config from %s: %s", source.__class__.__name__, source_conf) settings = _utils.merge_dicts(settings, source_conf) # Project configuration for source_name in reversed(sources): source = self._config_sources.get(source_name) if not source: continue source_conf = source.project_config(document_path or self._root_path) log.debug("Got project config from %s: %s", source.__class__.__name__, source_conf) settings = _utils.merge_dicts(settings, source_conf) log.debug("With configuration: %s", settings) return settings def find_parents(self, path, names): root_path = uris.to_fs_path(self._root_uri) return _utils.find_parents(root_path, path, names) def plugin_settings(self, plugin, document_path=None): return self.settings(document_path=document_path).get('plugins', {}).get(plugin, {}) def update(self, settings): """Recursively merge the given settings into the current settings.""" self.settings.cache_clear() self._settings = settings log.info("Updated settings to %s", self._settings) self._update_disabled_plugins() def _update_disabled_plugins(self): # All plugins default to enabled self._disabled_plugins = [ plugin for name, plugin in self.plugin_manager.list_name_plugin() if not self.settings().get('plugins', {}).get(name, {}).get('enabled', True) ] log.info("Disabled plugins: %s", self._disabled_plugins) python-language-server-0.36.2/pyls/config/flake8_conf.py000066400000000000000000000032461376456405500232210ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import os from pyls._utils import find_parents from .source import ConfigSource log = logging.getLogger(__name__) CONFIG_KEY = 'flake8' PROJECT_CONFIGS = ['.flake8', 'setup.cfg', 'tox.ini'] OPTIONS = [ # mccabe ('max-complexity', 'plugins.mccabe.threshold', int), # pycodestyle ('exclude', 'plugins.pycodestyle.exclude', list), ('filename', 'plugins.pycodestyle.filename', list), ('hang-closing', 'plugins.pycodestyle.hangClosing', bool), ('ignore', 'plugins.pycodestyle.ignore', list), ('max-line-length', 'plugins.pycodestyle.maxLineLength', int), ('select', 'plugins.pycodestyle.select', list), # flake8 ('exclude', 'plugins.flake8.exclude', list), ('filename', 'plugins.flake8.filename', list), ('hang-closing', 'plugins.flake8.hangClosing', bool), ('ignore', 'plugins.flake8.ignore', list), ('max-line-length', 'plugins.flake8.maxLineLength', int), ('select', 'plugins.flake8.select', list), ] class Flake8Config(ConfigSource): """Parse flake8 configurations.""" def user_config(self): config_file = self._user_config_file() config = self.read_config_from_files([config_file]) return self.parse_config(config, CONFIG_KEY, OPTIONS) def _user_config_file(self): if self.is_windows: return os.path.expanduser('~\\.flake8') return os.path.join(self.xdg_home, 'flake8') def project_config(self, document_path): files = find_parents(self.root_path, document_path, PROJECT_CONFIGS) config = self.read_config_from_files(files) return self.parse_config(config, CONFIG_KEY, OPTIONS) python-language-server-0.36.2/pyls/config/pycodestyle_conf.py000066400000000000000000000021721376456405500244100ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import pycodestyle from pyls._utils import find_parents from .source import ConfigSource CONFIG_KEY = 'pycodestyle' USER_CONFIGS = [pycodestyle.USER_CONFIG] if pycodestyle.USER_CONFIG else [] PROJECT_CONFIGS = ['pycodestyle.cfg', 'setup.cfg', 'tox.ini'] OPTIONS = [ ('exclude', 'plugins.pycodestyle.exclude', list), ('filename', 'plugins.pycodestyle.filename', list), ('hang-closing', 'plugins.pycodestyle.hangClosing', bool), ('ignore', 'plugins.pycodestyle.ignore', list), ('max-line-length', 'plugins.pycodestyle.maxLineLength', int), ('select', 'plugins.pycodestyle.select', list), ('aggressive', 'plugins.pycodestyle.aggressive', int), ] class PyCodeStyleConfig(ConfigSource): def user_config(self): config = self.read_config_from_files(USER_CONFIGS) return self.parse_config(config, CONFIG_KEY, OPTIONS) def project_config(self, document_path): files = find_parents(self.root_path, document_path, PROJECT_CONFIGS) config = self.read_config_from_files(files) return self.parse_config(config, CONFIG_KEY, OPTIONS) python-language-server-0.36.2/pyls/config/source.py000066400000000000000000000046611376456405500223440ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import configparser import logging import os import sys log = logging.getLogger(__name__) class ConfigSource(object): """Base class for implementing a config source.""" def __init__(self, root_path): self.root_path = root_path self.is_windows = sys.platform == 'win32' self.xdg_home = os.environ.get( 'XDG_CONFIG_HOME', os.path.expanduser('~/.config') ) def user_config(self): """Return user-level (i.e. home directory) configuration.""" raise NotImplementedError() def project_config(self, document_path): """Return project-level (i.e. workspace directory) configuration.""" raise NotImplementedError() @staticmethod def read_config_from_files(files): config = configparser.RawConfigParser() for filename in files: if os.path.exists(filename) and not os.path.isdir(filename): config.read(filename) return config @staticmethod def parse_config(config, key, options): """Parse the config with the given options.""" conf = {} for source, destination, opt_type in options: opt_value = _get_opt(config, key, source, opt_type) if opt_value is not None: _set_opt(conf, destination, opt_value) return conf def _get_opt(config, key, option, opt_type): """Get an option from a configparser with the given type.""" for opt_key in [option, option.replace('-', '_')]: if not config.has_option(key, opt_key): continue if opt_type == bool: return config.getboolean(key, opt_key) if opt_type == int: return config.getint(key, opt_key) if opt_type == str: return config.get(key, opt_key) if opt_type == list: return _parse_list_opt(config.get(key, opt_key)) raise ValueError("Unknown option type: %s" % opt_type) def _parse_list_opt(string): return [s.strip() for s in string.split(",") if s.strip()] def _set_opt(config_dict, path, value): """Set the value in the dictionary at the given path if the value is not None.""" if value is None: return if '.' not in path: config_dict[path] = value return key, rest = path.split(".", 1) if key not in config_dict: config_dict[key] = {} _set_opt(config_dict[key], rest, value) python-language-server-0.36.2/pyls/hookspecs.py000066400000000000000000000040451376456405500215710ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. # pylint: disable=redefined-builtin, unused-argument from pyls import hookspec @hookspec def pyls_code_actions(config, workspace, document, range, context): pass @hookspec def pyls_code_lens(config, workspace, document): pass @hookspec def pyls_commands(config, workspace): """The list of command strings supported by the server. Returns: List[str]: The supported commands. """ @hookspec def pyls_completions(config, workspace, document, position): pass @hookspec def pyls_definitions(config, workspace, document, position): pass @hookspec def pyls_dispatchers(config, workspace): pass @hookspec def pyls_document_did_open(config, workspace, document): pass @hookspec def pyls_document_did_save(config, workspace, document): pass @hookspec def pyls_document_highlight(config, workspace, document, position): pass @hookspec def pyls_document_symbols(config, workspace, document): pass @hookspec(firstresult=True) def pyls_execute_command(config, workspace, command, arguments): pass @hookspec def pyls_experimental_capabilities(config, workspace): pass @hookspec def pyls_folding_range(config, workspace, document): pass @hookspec(firstresult=True) def pyls_format_document(config, workspace, document): pass @hookspec(firstresult=True) def pyls_format_range(config, workspace, document, range): pass @hookspec(firstresult=True) def pyls_hover(config, workspace, document, position): pass @hookspec def pyls_initialize(config, workspace): pass @hookspec def pyls_initialized(): pass @hookspec def pyls_lint(config, workspace, document, is_saved): pass @hookspec def pyls_references(config, workspace, document, position, exclude_declaration): pass @hookspec(firstresult=True) def pyls_rename(config, workspace, document, position, new_name): pass @hookspec def pyls_settings(config): pass @hookspec(firstresult=True) def pyls_signature_help(config, workspace, document, position): pass python-language-server-0.36.2/pyls/lsp.py000066400000000000000000000025121376456405500203660ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. """Some Language Server Protocol constants https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md """ class CompletionItemKind(object): Text = 1 Method = 2 Function = 3 Constructor = 4 Field = 5 Variable = 6 Class = 7 Interface = 8 Module = 9 Property = 10 Unit = 11 Value = 12 Enum = 13 Keyword = 14 Snippet = 15 Color = 16 File = 17 Reference = 18 Folder = 19 EnumMember = 20 Constant = 21 Struct = 22 Event = 23 Operator = 24 TypeParameter = 25 class DocumentHighlightKind(object): Text = 1 Read = 2 Write = 3 class DiagnosticSeverity(object): Error = 1 Warning = 2 Information = 3 Hint = 4 class InsertTextFormat(object): PlainText = 1 Snippet = 2 class MessageType(object): Error = 1 Warning = 2 Info = 3 Log = 4 class SymbolKind(object): File = 1 Module = 2 Namespace = 3 Package = 4 Class = 5 Method = 6 Property = 7 Field = 8 Constructor = 9 Enum = 10 Interface = 11 Function = 12 Variable = 13 Constant = 14 String = 15 Number = 16 Boolean = 17 Array = 18 class TextDocumentSyncKind(object): NONE = 0 FULL = 1 INCREMENTAL = 2 python-language-server-0.36.2/pyls/plugins/000077500000000000000000000000001376456405500206775ustar00rootroot00000000000000python-language-server-0.36.2/pyls/plugins/__init__.py000066400000000000000000000000551376456405500230100ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. python-language-server-0.36.2/pyls/plugins/autopep8_format.py000066400000000000000000000050551376456405500243730ustar00rootroot00000000000000# Copyright 2018 Palantir Technologies, Inc. import logging import pycodestyle from autopep8 import fix_code, continued_indentation as autopep8_c_i from pyls import hookimpl log = logging.getLogger(__name__) @hookimpl(tryfirst=True) # Prefer autopep8 over YAPF def pyls_format_document(config, document): log.info("Formatting document %s with autopep8", document) return _format(config, document) @hookimpl(tryfirst=True) # Prefer autopep8 over YAPF def pyls_format_range(config, document, range): # pylint: disable=redefined-builtin log.info("Formatting document %s in range %s with autopep8", document, range) # First we 'round' the range up/down to full lines only range['start']['character'] = 0 range['end']['line'] += 1 range['end']['character'] = 0 # Add 1 for 1-indexing vs LSP's 0-indexing line_range = (range['start']['line'] + 1, range['end']['line'] + 1) return _format(config, document, line_range=line_range) def _format(config, document, line_range=None): options = _autopep8_config(config, document) if line_range: options['line_range'] = list(line_range) # Temporarily re-monkey-patch the continued_indentation checker - #771 del pycodestyle._checks['logical_line'][pycodestyle.continued_indentation] pycodestyle.register_check(autopep8_c_i) new_source = fix_code(document.source, options=options) # Switch it back del pycodestyle._checks['logical_line'][autopep8_c_i] pycodestyle.register_check(pycodestyle.continued_indentation) if new_source == document.source: return [] # I'm too lazy at the moment to parse diffs into TextEdit items # So let's just return the entire file... return [{ 'range': { 'start': {'line': 0, 'character': 0}, # End char 0 of the line after our document 'end': {'line': len(document.lines), 'character': 0} }, 'newText': new_source }] def _autopep8_config(config, document=None): # We user pycodestyle settings to avoid redefining things path = document.path if document is not None else None settings = config.plugin_settings('pycodestyle', document_path=path) options = { 'exclude': settings.get('exclude'), 'hang_closing': settings.get('hangClosing'), 'ignore': settings.get('ignore'), 'max_line_length': settings.get('maxLineLength'), 'select': settings.get('select'), 'aggressive': settings.get('aggressive'), } # Filter out null options return {k: v for k, v in options.items() if v} python-language-server-0.36.2/pyls/plugins/definition.py000066400000000000000000000022061376456405500234010ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from pyls import hookimpl, uris, _utils log = logging.getLogger(__name__) @hookimpl def pyls_definitions(config, document, position): settings = config.plugin_settings('jedi_definition') code_position = _utils.position_to_jedi_linecolumn(document, position) definitions = document.jedi_script().goto( follow_imports=settings.get('follow_imports', True), follow_builtin_imports=settings.get('follow_builtin_imports', True), **code_position) return [ { 'uri': uris.uri_with(document.uri, path=str(d.module_path)), 'range': { 'start': {'line': d.line - 1, 'character': d.column}, 'end': {'line': d.line - 1, 'character': d.column + len(d.name)}, } } for d in definitions if d.is_definition() and _not_internal_definition(d) ] def _not_internal_definition(definition): return ( definition.line is not None and definition.column is not None and definition.module_path is not None and not definition.in_builtin_module() ) python-language-server-0.36.2/pyls/plugins/flake8_lint.py000066400000000000000000000125021376456405500234510ustar00rootroot00000000000000# Copyright 2019 Palantir Technologies, Inc. """Linter pluging for flake8""" import logging import os.path import re from subprocess import Popen, PIPE from pyls import hookimpl, lsp log = logging.getLogger(__name__) FIX_IGNORES_RE = re.compile(r'([^a-zA-Z0-9_,]*;.*(\W+||$))') @hookimpl def pyls_settings(): # Default flake8 to disabled return {'plugins': {'flake8': {'enabled': False}}} @hookimpl def pyls_lint(workspace, document): config = workspace._config settings = config.plugin_settings('flake8', document_path=document.path) log.debug("Got flake8 settings: %s", settings) opts = { 'config': settings.get('config'), 'exclude': settings.get('exclude'), 'filename': settings.get('filename'), 'hang-closing': settings.get('hangClosing'), 'ignore': settings.get('ignore'), 'max-line-length': settings.get('maxLineLength'), 'select': settings.get('select'), } # flake takes only absolute path to the config. So we should check and # convert if necessary if opts.get('config') and not os.path.isabs(opts.get('config')): opts['config'] = os.path.abspath(os.path.expanduser(os.path.expandvars( opts.get('config') ))) log.debug("using flake8 with config: %s", opts['config']) # Call the flake8 utility then parse diagnostics from stdout flake8_executable = settings.get('executable', 'flake8') args = build_args(opts) output = run_flake8(flake8_executable, args, document) return parse_stdout(document, output) def run_flake8(flake8_executable, args, document): """Run flake8 with the provided arguments, logs errors from stderr if any. """ # a quick temporary fix to deal with Atom args = [(i if not i.startswith('--ignore=') else FIX_IGNORES_RE.sub('', i)) for i in args if i is not None] # if executable looks like a path resolve it if not os.path.isfile(flake8_executable) and os.sep in flake8_executable: flake8_executable = os.path.abspath( os.path.expanduser(os.path.expandvars(flake8_executable)) ) log.debug("Calling %s with args: '%s'", flake8_executable, args) try: cmd = [flake8_executable] cmd.extend(args) p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) except IOError: log.debug("Can't execute %s. Trying with 'python -m flake8'", flake8_executable) cmd = ['python', '-m', 'flake8'] cmd.extend(args) p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) (stdout, stderr) = p.communicate(document.source.encode()) if stderr: log.error("Error while running flake8 '%s'", stderr.decode()) return stdout.decode() def build_args(options): """Build arguments for calling flake8. Args: options: dictionary of argument names and their values. """ args = ['-'] # use stdin for arg_name, arg_val in options.items(): if arg_val is None: continue arg = None if isinstance(arg_val, list): arg = '--{}={}'.format(arg_name, ','.join(arg_val)) elif isinstance(arg_val, bool): if arg_val: arg = '--{}'.format(arg_name) else: arg = '--{}={}'.format(arg_name, arg_val) args.append(arg) return args def parse_stdout(document, stdout): """ Build a diagnostics from flake8's output, it should extract every result and format it into a dict that looks like this: { 'source': 'flake8', 'code': code, # 'E501' 'range': { 'start': { 'line': start_line, 'character': start_column, }, 'end': { 'line': end_line, 'character': end_column, }, }, 'message': msg, 'severity': lsp.DiagnosticSeverity.*, } Args: document: The document to be linted. stdout: output from flake8 Returns: A list of dictionaries. """ diagnostics = [] lines = stdout.splitlines() for raw_line in lines: parsed_line = re.match(r'(.*):(\d*):(\d*): (\w*) (.*)', raw_line) if not parsed_line: log.debug("Flake8 output parser can't parse line '%s'", raw_line) continue parsed_line = parsed_line.groups() if len(parsed_line) != 5: log.debug("Flake8 output parser can't parse line '%s'", raw_line) continue _, line, character, code, msg = parsed_line line = int(line) - 1 character = int(character) - 1 # show also the code in message msg = code + ' ' + msg diagnostics.append( { 'source': 'flake8', 'code': code, 'range': { 'start': { 'line': line, 'character': character }, 'end': { 'line': line, # no way to determine the column 'character': len(document.lines[line]) } }, 'message': msg, 'severity': lsp.DiagnosticSeverity.Warning, } ) return diagnostics python-language-server-0.36.2/pyls/plugins/folding.py000066400000000000000000000155621376456405500227040ustar00rootroot00000000000000# pylint: disable=len-as-condition # Copyright 2019 Palantir Technologies, Inc. import re import parso import parso.python.tree as tree_nodes from pyls import hookimpl SKIP_NODES = (tree_nodes.Module, tree_nodes.IfStmt, tree_nodes.TryStmt) IDENTATION_REGEX = re.compile(r'(\s+).+') @hookimpl def pyls_folding_range(document): program = document.source + '\n' lines = program.splitlines() tree = parso.parse(program) ranges = __compute_folding_ranges(tree, lines) results = [] for (start_line, end_line) in ranges: start_line -= 1 end_line -= 1 # If start/end character is not defined, then it defaults to the # corresponding line last character results.append({ 'startLine': start_line, 'endLine': end_line, }) return results def __merge_folding_ranges(left, right): for start in list(left.keys()): right_start = right.pop(start, None) if right_start is not None: left[start] = max(right_start, start) left.update(right) return left def __empty_identation_stack(identation_stack, level_limits, current_line, folding_ranges): while identation_stack != []: upper_level = identation_stack.pop(0) level_start = level_limits.pop(upper_level) folding_ranges.append((level_start, current_line)) return folding_ranges def __match_identation_stack(identation_stack, level, level_limits, folding_ranges, current_line): upper_level = identation_stack.pop(0) while upper_level >= level: level_start = level_limits.pop(upper_level) folding_ranges.append((level_start, current_line)) upper_level = identation_stack.pop(0) identation_stack.insert(0, upper_level) return identation_stack, folding_ranges def __compute_folding_ranges_identation(text): lines = text.splitlines() folding_ranges = [] identation_stack = [] level_limits = {} current_level = 0 current_line = 0 while lines[current_line] == '': current_line += 1 for i, line in enumerate(lines): if i < current_line: continue i += 1 identation_match = IDENTATION_REGEX.match(line) if identation_match is not None: whitespace = identation_match.group(1) level = len(whitespace) if level > current_level: level_limits[current_level] = current_line identation_stack.insert(0, current_level) current_level = level elif level < current_level: identation_stack, folding_ranges = __match_identation_stack( identation_stack, level, level_limits, folding_ranges, current_line) current_level = level else: folding_ranges = __empty_identation_stack( identation_stack, level_limits, current_line, folding_ranges) current_level = 0 if line.strip() != '': current_line = i folding_ranges = __empty_identation_stack( identation_stack, level_limits, current_line, folding_ranges) return dict(folding_ranges) def __check_if_node_is_valid(node): valid = True if isinstance(node, tree_nodes.PythonNode): kind = node.type valid = kind not in {'decorated', 'parameters', 'dictorsetmaker', 'testlist_comp'} if kind == 'suite': if isinstance(node.parent, tree_nodes.Function): valid = False return valid def __handle_skip(stack, skip): body = stack[skip] children = [body] if hasattr(body, 'children'): children = body.children stack = stack[:skip] + children + stack[skip + 1:] node = body end_line, _ = body.end_pos return node, end_line def __handle_flow_nodes(node, end_line, stack): from_keyword = False if isinstance(node, tree_nodes.Keyword): from_keyword = True if node.value in {'if', 'elif', 'with', 'while'}: node, end_line = __handle_skip(stack, 2) elif node.value in {'except'}: first_node = stack[0] if isinstance(first_node, tree_nodes.Operator): node, end_line = __handle_skip(stack, 1) else: node, end_line = __handle_skip(stack, 2) elif node.value in {'for'}: node, end_line = __handle_skip(stack, 4) elif node.value in {'else'}: node, end_line = __handle_skip(stack, 1) return end_line, from_keyword, node, stack def __compute_start_end_lines(node, stack): start_line, _ = node.start_pos end_line, _ = node.end_pos modified = False end_line, from_keyword, node, stack = __handle_flow_nodes( node, end_line, stack) last_leaf = node.get_last_leaf() last_newline = isinstance(last_leaf, tree_nodes.Newline) last_operator = isinstance(last_leaf, tree_nodes.Operator) node_is_operator = isinstance(node, tree_nodes.Operator) last_operator = last_operator or not node_is_operator end_line -= 1 if isinstance(node.parent, tree_nodes.PythonNode) and not from_keyword: kind = node.type if kind in {'suite', 'atom', 'atom_expr', 'arglist'}: if len(stack) > 0: next_node = stack[0] next_line, _ = next_node.start_pos if next_line > end_line: end_line += 1 modified = True if not last_newline and not modified and not last_operator: end_line += 1 return start_line, end_line, stack def __compute_folding_ranges(tree, lines): folding_ranges = {} stack = [tree] while len(stack) > 0: node = stack.pop(0) if isinstance(node, tree_nodes.Newline): # Skip newline nodes continue elif isinstance(node, tree_nodes.PythonErrorNode): # Fallback to identation-based (best-effort) folding start_line, _ = node.start_pos start_line -= 1 padding = [''] * start_line text = '\n'.join(padding + lines[start_line:]) + '\n' identation_ranges = __compute_folding_ranges_identation(text) folding_ranges = __merge_folding_ranges( folding_ranges, identation_ranges) break elif not isinstance(node, SKIP_NODES): valid = __check_if_node_is_valid(node) if valid: start_line, end_line, stack = __compute_start_end_lines( node, stack) if end_line > start_line: current_end = folding_ranges.get(start_line, -1) folding_ranges[start_line] = max(current_end, end_line) if hasattr(node, 'children'): stack = node.children + stack folding_ranges = sorted(folding_ranges.items()) return folding_ranges python-language-server-0.36.2/pyls/plugins/highlight.py000066400000000000000000000016441376456405500232250ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from pyls import hookimpl, lsp, _utils log = logging.getLogger(__name__) @hookimpl def pyls_document_highlight(document, position): code_position = _utils.position_to_jedi_linecolumn(document, position) usages = document.jedi_script().get_references(**code_position) def is_valid(definition): return definition.line is not None and definition.column is not None def local_to_document(definition): return not definition.module_path or str(definition.module_path) == document.path return [{ 'range': { 'start': {'line': d.line - 1, 'character': d.column}, 'end': {'line': d.line - 1, 'character': d.column + len(d.name)} }, 'kind': lsp.DocumentHighlightKind.Write if d.is_definition() else lsp.DocumentHighlightKind.Read } for d in usages if is_valid(d) and local_to_document(d)] python-language-server-0.36.2/pyls/plugins/hover.py000066400000000000000000000025141376456405500223760ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from pyls import hookimpl, _utils log = logging.getLogger(__name__) @hookimpl def pyls_hover(document, position): code_position = _utils.position_to_jedi_linecolumn(document, position) definitions = document.jedi_script().infer(**code_position) word = document.word_at_position(position) # Find first exact matching definition definition = next((x for x in definitions if x.name == word), None) # Ensure a definition is used if only one is available # even if the word doesn't match. An example of this case is 'np' # where 'numpy' doesn't match with 'np'. Same for NumPy ufuncs if len(definitions) == 1: definition = definitions[0] if not definition: return {'contents': ''} # raw docstring returns only doc, without signature doc = _utils.format_docstring(definition.docstring(raw=True)) # Find first exact matching signature signature = next((x.to_string() for x in definition.get_signatures() if x.name == word), '') contents = [] if signature: contents.append({ 'language': 'python', 'value': signature, }) if doc: contents.append(doc) if not contents: return {'contents': ''} return {'contents': contents} python-language-server-0.36.2/pyls/plugins/jedi_completion.py000066400000000000000000000162521376456405500244230ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import os.path as osp import parso from pyls import _utils, hookimpl, lsp log = logging.getLogger(__name__) # Map to the VSCode type _TYPE_MAP = { 'none': lsp.CompletionItemKind.Value, 'type': lsp.CompletionItemKind.Class, 'tuple': lsp.CompletionItemKind.Class, 'dict': lsp.CompletionItemKind.Class, 'dictionary': lsp.CompletionItemKind.Class, 'function': lsp.CompletionItemKind.Function, 'lambda': lsp.CompletionItemKind.Function, 'generator': lsp.CompletionItemKind.Function, 'class': lsp.CompletionItemKind.Class, 'instance': lsp.CompletionItemKind.Reference, 'method': lsp.CompletionItemKind.Method, 'builtin': lsp.CompletionItemKind.Class, 'builtinfunction': lsp.CompletionItemKind.Function, 'module': lsp.CompletionItemKind.Module, 'file': lsp.CompletionItemKind.File, 'path': lsp.CompletionItemKind.Text, 'xrange': lsp.CompletionItemKind.Class, 'slice': lsp.CompletionItemKind.Class, 'traceback': lsp.CompletionItemKind.Class, 'frame': lsp.CompletionItemKind.Class, 'buffer': lsp.CompletionItemKind.Class, 'dictproxy': lsp.CompletionItemKind.Class, 'funcdef': lsp.CompletionItemKind.Function, 'property': lsp.CompletionItemKind.Property, 'import': lsp.CompletionItemKind.Module, 'keyword': lsp.CompletionItemKind.Keyword, 'constant': lsp.CompletionItemKind.Variable, 'variable': lsp.CompletionItemKind.Variable, 'value': lsp.CompletionItemKind.Value, 'param': lsp.CompletionItemKind.Variable, 'statement': lsp.CompletionItemKind.Keyword, } # Types of parso nodes for which snippet is not included in the completion _IMPORTS = ('import_name', 'import_from') # Types of parso node for errors _ERRORS = ('error_node', ) @hookimpl def pyls_completions(config, document, position): """Get formatted completions for current code position""" settings = config.plugin_settings('jedi_completion', document_path=document.path) code_position = _utils.position_to_jedi_linecolumn(document, position) code_position["fuzzy"] = settings.get("fuzzy", False) completions = document.jedi_script(use_document_path=True).complete(**code_position) if not completions: return None completion_capabilities = config.capabilities.get('textDocument', {}).get('completion', {}) snippet_support = completion_capabilities.get('completionItem', {}).get('snippetSupport') should_include_params = settings.get('include_params') should_include_class_objects = settings.get('include_class_objects', True) include_params = snippet_support and should_include_params and use_snippets(document, position) include_class_objects = snippet_support and should_include_class_objects and use_snippets(document, position) ready_completions = [ _format_completion(c, include_params) for c in completions ] if include_class_objects: for c in completions: if c.type == 'class': completion_dict = _format_completion(c, False) completion_dict['kind'] = lsp.CompletionItemKind.TypeParameter completion_dict['label'] += ' object' ready_completions.append(completion_dict) return ready_completions or None def is_exception_class(name): """ Determine if a class name is an instance of an Exception. This returns `False` if the name given corresponds with a instance of the 'Exception' class, `True` otherwise """ try: return name in [cls.__name__ for cls in Exception.__subclasses__()] except AttributeError: # Needed in case a class don't uses new-style # class definition in Python 2 return False def use_snippets(document, position): """ Determine if it's necessary to return snippets in code completions. This returns `False` if a completion is being requested on an import statement, `True` otherwise. """ line = position['line'] lines = document.source.split('\n', line) act_lines = [lines[line][:position['character']]] line -= 1 last_character = '' while line > -1: act_line = lines[line] if (act_line.rstrip().endswith('\\') or act_line.rstrip().endswith('(') or act_line.rstrip().endswith(',')): act_lines.insert(0, act_line) line -= 1 if act_line.rstrip().endswith('('): # Needs to be added to the end of the code before parsing # to make it valid, otherwise the node type could end # being an 'error_node' for multi-line imports that use '(' last_character = ')' else: break if '(' in act_lines[-1].strip(): last_character = ')' code = '\n'.join(act_lines).split(';')[-1].strip() + last_character tokens = parso.parse(code) expr_type = tokens.children[0].type return (expr_type not in _IMPORTS and not (expr_type in _ERRORS and 'import' in code)) def _format_completion(d, include_params=True): completion = { 'label': _label(d), 'kind': _TYPE_MAP.get(d.type), 'detail': _detail(d), 'documentation': _utils.format_docstring(d.docstring()), 'sortText': _sort_text(d), 'insertText': d.name } if d.type == 'path': path = osp.normpath(d.name) path = path.replace('\\', '\\\\') path = path.replace('/', '\\/') completion['insertText'] = path sig = d.get_signatures() if (include_params and sig and not is_exception_class(d.name)): positional_args = [param for param in sig[0].params if '=' not in param.description and param.name not in {'/', '*'}] if len(positional_args) > 1: # For completions with params, we can generate a snippet instead completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet snippet = d.name + '(' for i, param in enumerate(positional_args): snippet += '${%s:%s}' % (i + 1, param.name) if i < len(positional_args) - 1: snippet += ', ' snippet += ')$0' completion['insertText'] = snippet elif len(positional_args) == 1: completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet completion['insertText'] = d.name + '($0)' else: completion['insertText'] = d.name + '()' return completion def _label(definition): sig = definition.get_signatures() if definition.type in ('function', 'method') and sig: params = ', '.join(param.name for param in sig[0].params) return '{}({})'.format(definition.name, params) return definition.name def _detail(definition): try: return definition.parent().full_name or '' except AttributeError: return definition.full_name or '' def _sort_text(definition): """ Ensure builtins appear at the bottom. Description is of format : . """ # If its 'hidden', put it next last prefix = 'z{}' if definition.name.startswith('_') else 'a{}' return prefix.format(definition.name) python-language-server-0.36.2/pyls/plugins/jedi_rename.py000066400000000000000000000032611376456405500235150ustar00rootroot00000000000000# Copyright 2020 Palantir Technologies, Inc. import logging from pyls import hookimpl, uris, _utils log = logging.getLogger(__name__) @hookimpl def pyls_rename(config, workspace, document, position, new_name): # pylint: disable=unused-argument log.debug('Executing rename of %s to %s', document.word_at_position(position), new_name) kwargs = _utils.position_to_jedi_linecolumn(document, position) kwargs['new_name'] = new_name try: refactoring = document.jedi_script().rename(**kwargs) except NotImplementedError: raise Exception('No support for renaming in Python 2/3.5 with Jedi. ' 'Consider using the rope_rename plugin instead') log.debug('Finished rename: %s', refactoring.get_diff()) changes = [] for file_path, changed_file in refactoring.get_changed_files().items(): uri = uris.from_fs_path(str(file_path)) doc = workspace.get_maybe_document(uri) changes.append({ 'textDocument': { 'uri': uri, 'version': doc.version if doc else None }, 'edits': [ { 'range': { 'start': {'line': 0, 'character': 0}, 'end': { 'line': _num_lines(changed_file.get_new_code()), 'character': 0, }, }, 'newText': changed_file.get_new_code(), } ], }) return {'documentChanges': changes} def _num_lines(file_contents): 'Count the number of lines in the given string.' return len(file_contents.splitlines()) python-language-server-0.36.2/pyls/plugins/mccabe_lint.py000066400000000000000000000024271376456405500235160ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import ast import logging import mccabe from pyls import hookimpl, lsp log = logging.getLogger(__name__) THRESHOLD = 'threshold' DEFAULT_THRESHOLD = 15 @hookimpl def pyls_lint(config, document): threshold = config.plugin_settings('mccabe', document_path=document.path).get(THRESHOLD, DEFAULT_THRESHOLD) log.debug("Running mccabe lint with threshold: %s", threshold) try: tree = compile(document.source, document.path, "exec", ast.PyCF_ONLY_AST) except SyntaxError: # We'll let the other linters point this one out return None visitor = mccabe.PathGraphingAstVisitor() visitor.preorder(tree, visitor) diags = [] for graph in visitor.graphs.values(): if graph.complexity() >= threshold: diags.append({ 'source': 'mccabe', 'range': { 'start': {'line': graph.lineno - 1, 'character': graph.column}, 'end': {'line': graph.lineno - 1, 'character': len(document.lines[graph.lineno])}, }, 'message': 'Cyclomatic complexity too high: %s (threshold %s)' % (graph.complexity(), threshold), 'severity': lsp.DiagnosticSeverity.Warning }) return diags python-language-server-0.36.2/pyls/plugins/preload_imports.py000066400000000000000000000024631376456405500244610ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from pyls import hookimpl log = logging.getLogger(__name__) MODULES = [ "OpenGL", "PIL", "array", "audioop", "binascii", "cPickle", "cStringIO", "cmath", "collections", "datetime", "errno", "exceptions", "gc", "imageop", "imp", "itertools", "marshal", "math", "matplotlib", "mmap", "mpmath", "msvcrt", "networkx", "nose", "nt", "numpy", "operator", "os", "os.path", "pandas", "parser", "rgbimg", "scipy", "signal", "skimage", "sklearn", "statsmodels", "strop", "sympy", "sys", "thread", "time", "wx", "xxsubtype", "zipimport", "zlib" ] @hookimpl def pyls_settings(): # Setup default modules to preload, and rope extension modules return { 'plugins': {'preload': {'modules': MODULES}}, 'rope': {'extensionModules': MODULES} } @hookimpl def pyls_initialize(config): for mod_name in config.plugin_settings('preload').get('modules', []): try: __import__(mod_name) log.debug("Preloaded module %s", mod_name) except Exception: # pylint: disable=broad-except # Catch any exception since not only ImportError can be raised here # For example, old versions of NumPy can cause a ValueError. # See spyder-ide/spyder#13985 pass python-language-server-0.36.2/pyls/plugins/pycodestyle_lint.py000066400000000000000000000061231376456405500246450ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import pycodestyle from pyls import hookimpl, lsp try: from autopep8 import continued_indentation as autopep8_c_i except ImportError: pass else: # Check if autopep8's continued_indentation implementation # is overriding pycodestyle's and if so, re-register # the check using pycodestyle's implementation as expected if autopep8_c_i in pycodestyle._checks['logical_line']: del pycodestyle._checks['logical_line'][autopep8_c_i] pycodestyle.register_check(pycodestyle.continued_indentation) log = logging.getLogger(__name__) @hookimpl def pyls_lint(workspace, document): config = workspace._config settings = config.plugin_settings('pycodestyle', document_path=document.path) log.debug("Got pycodestyle settings: %s", settings) opts = { 'exclude': settings.get('exclude'), 'filename': settings.get('filename'), 'hang_closing': settings.get('hangClosing'), 'ignore': settings.get('ignore'), 'max_line_length': settings.get('maxLineLength'), 'select': settings.get('select'), } kwargs = {k: v for k, v in opts.items() if v} styleguide = pycodestyle.StyleGuide(kwargs) c = pycodestyle.Checker( filename=document.uri, lines=document.lines, options=styleguide.options, report=PyCodeStyleDiagnosticReport(styleguide.options) ) c.check_all() diagnostics = c.report.diagnostics return diagnostics class PyCodeStyleDiagnosticReport(pycodestyle.BaseReport): def __init__(self, options): self.diagnostics = [] super(PyCodeStyleDiagnosticReport, self).__init__(options=options) def error(self, line_number, offset, text, check): code = text[:4] if self._ignore_code(code): return # Don't care about expected errors or warnings if code in self.expected: return # PyCodeStyle will sometimes give you an error the line after the end of the file # e.g. no newline at end of file # In that case, the end offset should just be some number ~100 # (because why not? There's nothing to underline anyways) err_range = { 'start': {'line': line_number - 1, 'character': offset}, 'end': { # FIXME: It's a little naiive to mark until the end of the line, can we not easily do better? 'line': line_number - 1, 'character': 100 if line_number > len(self.lines) else len(self.lines[line_number - 1]) }, } self.diagnostics.append({ 'source': 'pycodestyle', 'range': err_range, 'message': text, 'code': code, # Are style errors really ever errors? 'severity': _get_severity(code) }) def _get_severity(code): # Are style errors ever really errors? if code[0] == 'E' or code[0] == 'W': return lsp.DiagnosticSeverity.Warning # If no severity is specified, why wouldn't this be informational only? return lsp.DiagnosticSeverity.Information python-language-server-0.36.2/pyls/plugins/pydocstyle_lint.py000066400000000000000000000071451376456405500245050ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import contextlib import logging import os import re import sys import pydocstyle from pyls import hookimpl, lsp log = logging.getLogger(__name__) # PyDocstyle is a little verbose in debug message pydocstyle_logger = logging.getLogger(pydocstyle.utils.__name__) pydocstyle_logger.setLevel(logging.INFO) DEFAULT_MATCH_RE = pydocstyle.config.ConfigurationParser.DEFAULT_MATCH_RE DEFAULT_MATCH_DIR_RE = pydocstyle.config.ConfigurationParser.DEFAULT_MATCH_DIR_RE @hookimpl def pyls_settings(): # Default pydocstyle to disabled return {'plugins': {'pydocstyle': {'enabled': False}}} @hookimpl def pyls_lint(config, document): settings = config.plugin_settings('pydocstyle', document_path=document.path) log.debug("Got pydocstyle settings: %s", settings) # Explicitly passing a path to pydocstyle means it doesn't respect the --match flag, so do it ourselves filename_match_re = re.compile(settings.get('match', DEFAULT_MATCH_RE) + '$') if not filename_match_re.match(os.path.basename(document.path)): return [] # Likewise with --match-dir dir_match_re = re.compile(settings.get('matchDir', DEFAULT_MATCH_DIR_RE) + '$') if not dir_match_re.match(os.path.basename(os.path.dirname(document.path))): return [] args = [document.path] if settings.get('convention'): args.append('--convention=' + settings['convention']) if settings.get('addSelect'): args.append('--add-select=' + ','.join(settings['addSelect'])) if settings.get('addIgnore'): args.append('--add-ignore=' + ','.join(settings['addIgnore'])) elif settings.get('select'): args.append('--select=' + ','.join(settings['select'])) elif settings.get('ignore'): args.append('--ignore=' + ','.join(settings['ignore'])) log.info("Using pydocstyle args: %s", args) conf = pydocstyle.config.ConfigurationParser() with _patch_sys_argv(args): # TODO(gatesn): We can add more pydocstyle args here from our pyls config conf.parse() # Will only yield a single filename, the document path diags = [] for filename, checked_codes, ignore_decorators in conf.get_files_to_check(): errors = pydocstyle.checker.ConventionChecker().check_source( document.source, filename, ignore_decorators=ignore_decorators ) try: for error in errors: if error.code not in checked_codes: continue diags.append(_parse_diagnostic(document, error)) except pydocstyle.parser.ParseError: # In the case we cannot parse the Python file, just continue pass log.debug("Got pydocstyle errors: %s", diags) return diags def _parse_diagnostic(document, error): lineno = error.definition.start - 1 line = document.lines[0] if document.lines else "" start_character = len(line) - len(line.lstrip()) end_character = len(line) return { 'source': 'pydocstyle', 'code': error.code, 'message': error.message, 'severity': lsp.DiagnosticSeverity.Warning, 'range': { 'start': { 'line': lineno, 'character': start_character }, 'end': { 'line': lineno, 'character': end_character } } } @contextlib.contextmanager def _patch_sys_argv(arguments): old_args = sys.argv # Preserve argv[0] since it's the executable sys.argv = old_args[0:1] + arguments try: yield finally: sys.argv = old_args python-language-server-0.36.2/pyls/plugins/pyflakes_lint.py000066400000000000000000000050741376456405500241230ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyflakes import api as pyflakes_api, messages from pyls import hookimpl, lsp # Pyflakes messages that should be reported as Errors instead of Warns PYFLAKES_ERROR_MESSAGES = ( messages.UndefinedName, messages.UndefinedExport, messages.UndefinedLocal, messages.DuplicateArgument, messages.FutureFeatureNotDefined, messages.ReturnOutsideFunction, messages.YieldOutsideFunction, messages.ContinueOutsideLoop, messages.BreakOutsideLoop, messages.ContinueInFinally, messages.TwoStarredExpressions, ) @hookimpl def pyls_lint(document): reporter = PyflakesDiagnosticReport(document.lines) pyflakes_api.check(document.source.encode('utf-8'), document.path, reporter=reporter) return reporter.diagnostics class PyflakesDiagnosticReport(object): def __init__(self, lines): self.lines = lines self.diagnostics = [] def unexpectedError(self, _filename, msg): # pragma: no cover err_range = { 'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 0}, } self.diagnostics.append({ 'source': 'pyflakes', 'range': err_range, 'message': msg, 'severity': lsp.DiagnosticSeverity.Error, }) def syntaxError(self, _filename, msg, lineno, offset, text): # We've seen that lineno and offset can sometimes be None lineno = lineno or 1 offset = offset or 0 err_range = { 'start': {'line': lineno - 1, 'character': offset}, 'end': {'line': lineno - 1, 'character': offset + len(text)}, } self.diagnostics.append({ 'source': 'pyflakes', 'range': err_range, 'message': msg, 'severity': lsp.DiagnosticSeverity.Error, }) def flake(self, message): """ Get message like :: """ err_range = { 'start': {'line': message.lineno - 1, 'character': message.col}, 'end': {'line': message.lineno - 1, 'character': len(self.lines[message.lineno - 1])}, } severity = lsp.DiagnosticSeverity.Warning for message_type in PYFLAKES_ERROR_MESSAGES: if isinstance(message, message_type): severity = lsp.DiagnosticSeverity.Error break self.diagnostics.append({ 'source': 'pyflakes', 'range': err_range, 'message': message.message % message.message_args, 'severity': severity }) python-language-server-0.36.2/pyls/plugins/pylint_lint.py000066400000000000000000000236301376456405500236220ustar00rootroot00000000000000# Copyright 2018 Google LLC. """Linter plugin for pylint.""" import collections import logging import sys import re from subprocess import Popen, PIPE from pylint.epylint import py_run from pyls import hookimpl, lsp try: import ujson as json except Exception: # pylint: disable=broad-except import json log = logging.getLogger(__name__) class PylintLinter(object): last_diags = collections.defaultdict(list) @classmethod def lint(cls, document, is_saved, flags=''): """Plugin interface to pyls linter. Args: document: The document to be linted. is_saved: Whether or not the file has been saved to disk. flags: Additional flags to pass to pylint. Not exposed to pyls_lint, but used for testing. Returns: A list of dicts with the following format: { 'source': 'pylint', 'range': { 'start': { 'line': start_line, 'character': start_column, }, 'end': { 'line': end_line, 'character': end_column, }, } 'message': msg, 'severity': lsp.DiagnosticSeverity.*, } """ if not is_saved: # Pylint can only be run on files that have been saved to disk. # Rather than return nothing, return the previous list of # diagnostics. If we return an empty list, any diagnostics we'd # previously shown will be cleared until the next save. Instead, # continue showing (possibly stale) diagnostics until the next # save. return cls.last_diags[document.path] # py_run will call shlex.split on its arguments, and shlex.split does # not handle Windows paths (it will try to perform escaping). Turn # backslashes into forward slashes first to avoid this issue. path = document.path if sys.platform.startswith('win'): path = path.replace('\\', '/') pylint_call = '{} -f json {}'.format(path, flags) log.debug("Calling pylint with '%s'", pylint_call) json_out, err = py_run(pylint_call, return_std=True) # Get strings json_out = json_out.getvalue() err = err.getvalue() if err != '': log.error("Error calling pylint: '%s'", err) # pylint prints nothing rather than [] when there are no diagnostics. # json.loads will not parse an empty string, so just return. if not json_out.strip(): cls.last_diags[document.path] = [] return [] # Pylint's JSON output is a list of objects with the following format. # # { # "obj": "main", # "path": "foo.py", # "message": "Missing function docstring", # "message-id": "C0111", # "symbol": "missing-docstring", # "column": 0, # "type": "convention", # "line": 5, # "module": "foo" # } # # The type can be any of: # # * convention # * error # * fatal # * refactor # * warning diagnostics = [] for diag in json.loads(json_out): # pylint lines index from 1, pyls lines index from 0 line = diag['line'] - 1 err_range = { 'start': { 'line': line, # Index columns start from 0 'character': diag['column'], }, 'end': { 'line': line, # It's possible that we're linting an empty file. Even an empty # file might fail linting if it isn't named properly. 'character': len(document.lines[line]) if document.lines else 0, }, } if diag['type'] == 'convention': severity = lsp.DiagnosticSeverity.Information elif diag['type'] == 'error': severity = lsp.DiagnosticSeverity.Error elif diag['type'] == 'fatal': severity = lsp.DiagnosticSeverity.Error elif diag['type'] == 'refactor': severity = lsp.DiagnosticSeverity.Hint elif diag['type'] == 'warning': severity = lsp.DiagnosticSeverity.Warning diagnostics.append({ 'source': 'pylint', 'range': err_range, 'message': '[{}] {}'.format(diag['symbol'], diag['message']), 'severity': severity, 'code': diag['message-id'] }) cls.last_diags[document.path] = diagnostics return diagnostics def _build_pylint_flags(settings): """Build arguments for calling pylint.""" pylint_args = settings.get('args') if pylint_args is None: return '' return ' '.join(pylint_args) @hookimpl def pyls_settings(): # Default pylint to disabled because it requires a config # file to be useful. return {'plugins': {'pylint': { 'enabled': False, 'args': [], # disabled by default as it can slow down the workflow 'executable': None, }}} @hookimpl def pyls_lint(config, document, is_saved): """Run pylint linter.""" settings = config.plugin_settings('pylint') log.debug("Got pylint settings: %s", settings) # pylint >= 2.5.0 is required for working through stdin and only # available with python3 if settings.get('executable') and sys.version_info[0] >= 3: flags = build_args_stdio(settings) pylint_executable = settings.get('executable', 'pylint') return pylint_lint_stdin(pylint_executable, document, flags) flags = _build_pylint_flags(settings) return PylintLinter.lint(document, is_saved, flags=flags) def build_args_stdio(settings): """Build arguments for calling pylint. :param settings: client settings :type settings: dict :return: arguments to path to pylint :rtype: list """ pylint_args = settings.get('args') if pylint_args is None: return [] return pylint_args def pylint_lint_stdin(pylint_executable, document, flags): """Run pylint linter from stdin. This runs pylint in a subprocess with popen. This allows passing the file from stdin and as a result run pylint on unsaved files. Can slowdown the workflow. :param pylint_executable: path to pylint executable :type pylint_executable: string :param document: document to run pylint on :type document: pyls.workspace.Document :param flags: arguments to path to pylint :type flags: list :return: linting diagnostics :rtype: list """ pylint_result = _run_pylint_stdio(pylint_executable, document, flags) return _parse_pylint_stdio_result(document, pylint_result) def _run_pylint_stdio(pylint_executable, document, flags): """Run pylint in popen. :param pylint_executable: path to pylint executable :type pylint_executable: string :param document: document to run pylint on :type document: pyls.workspace.Document :param flags: arguments to path to pylint :type flags: list :return: result of calling pylint :rtype: string """ log.debug("Calling %s with args: '%s'", pylint_executable, flags) try: cmd = [pylint_executable] cmd.extend(flags) cmd.extend(['--from-stdin', document.path]) p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) except IOError: log.debug("Can't execute %s. Trying with 'python -m pylint'", pylint_executable) cmd = ['python', '-m', 'pylint'] cmd.extend(flags) cmd.extend(['--from-stdin', document.path]) p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) (stdout, stderr) = p.communicate(document.source.encode()) if stderr: log.error("Error while running pylint '%s'", stderr.decode()) return stdout.decode() def _parse_pylint_stdio_result(document, stdout): """Parse pylint results. :param document: document to run pylint on :type document: pyls.workspace.Document :param stdout: pylint results to parse :type stdout: string :return: linting diagnostics :rtype: list """ diagnostics = [] lines = stdout.splitlines() for raw_line in lines: parsed_line = re.match(r'(.*):(\d*):(\d*): (\w*): (.*)', raw_line) if not parsed_line: log.debug("Pylint output parser can't parse line '%s'", raw_line) continue parsed_line = parsed_line.groups() if len(parsed_line) != 5: log.debug("Pylint output parser can't parse line '%s'", raw_line) continue _, line, character, code, msg = parsed_line line = int(line) - 1 character = int(character) severity_map = { 'C': lsp.DiagnosticSeverity.Information, 'E': lsp.DiagnosticSeverity.Error, 'F': lsp.DiagnosticSeverity.Error, 'R': lsp.DiagnosticSeverity.Hint, 'W': lsp.DiagnosticSeverity.Warning, } severity = severity_map[code[0]] diagnostics.append( { 'source': 'pylint', 'code': code, 'range': { 'start': { 'line': line, 'character': character }, 'end': { 'line': line, # no way to determine the column 'character': len(document.lines[line]) - 1 } }, 'message': msg, 'severity': severity, } ) return diagnostics python-language-server-0.36.2/pyls/plugins/references.py000066400000000000000000000016021376456405500233710ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from pyls import hookimpl, uris, _utils log = logging.getLogger(__name__) @hookimpl def pyls_references(document, position, exclude_declaration=False): code_position = _utils.position_to_jedi_linecolumn(document, position) usages = document.jedi_script().get_references(**code_position) if exclude_declaration: # Filter out if the usage is the actual declaration of the thing usages = [d for d in usages if not d.is_definition()] # Filter out builtin modules return [{ 'uri': uris.uri_with(document.uri, path=str(d.module_path)) if d.module_path else document.uri, 'range': { 'start': {'line': d.line - 1, 'character': d.column}, 'end': {'line': d.line - 1, 'character': d.column + len(d.name)} } } for d in usages if not d.in_builtin_module()] python-language-server-0.36.2/pyls/plugins/rope_completion.py000066400000000000000000000074241376456405500244560ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from rope.contrib.codeassist import code_assist, sorted_proposals from pyls import hookimpl, lsp log = logging.getLogger(__name__) @hookimpl def pyls_settings(): # Default rope_completion to disabled return {'plugins': {'rope_completion': {'enabled': False}}} @hookimpl def pyls_completions(config, workspace, document, position): # Rope is a bit rubbish at completing module imports, so we'll return None word = document.word_at_position({ # The -1 should really be trying to look at the previous word, but that might be quite expensive # So we only skip import completions when the cursor is one space after `import` 'line': position['line'], 'character': max(position['character'] - 1, 0), }) if word == 'import': return None offset = document.offset_at_position(position) rope_config = config.settings(document_path=document.path).get('rope', {}) rope_project = workspace._rope_project_builder(rope_config) document_rope = document._rope_resource(rope_config) try: definitions = code_assist(rope_project, document.source, offset, document_rope, maxfixes=3) except Exception as e: # pylint: disable=broad-except log.debug("Failed to run Rope code assist: %s", e) return [] definitions = sorted_proposals(definitions) new_definitions = [] for d in definitions: try: doc = d.get_doc() except AttributeError: doc = None new_definitions.append({ 'label': d.name, 'kind': _kind(d), 'detail': '{0} {1}'.format(d.scope or "", d.name), 'documentation': doc or "", 'sortText': _sort_text(d) }) definitions = new_definitions return definitions or None def _sort_text(definition): """ Ensure builtins appear at the bottom. Description is of format : . """ if definition.name.startswith("_"): # It's a 'hidden' func, put it next last return 'z' + definition.name elif definition.scope == 'builtin': return 'y' + definition.name # Else put it at the front return 'a' + definition.name def _kind(d): """ Return the VSCode type """ MAP = { 'none': lsp.CompletionItemKind.Value, 'type': lsp.CompletionItemKind.Class, 'tuple': lsp.CompletionItemKind.Class, 'dict': lsp.CompletionItemKind.Class, 'dictionary': lsp.CompletionItemKind.Class, 'function': lsp.CompletionItemKind.Function, 'lambda': lsp.CompletionItemKind.Function, 'generator': lsp.CompletionItemKind.Function, 'class': lsp.CompletionItemKind.Class, 'instance': lsp.CompletionItemKind.Reference, 'method': lsp.CompletionItemKind.Method, 'builtin': lsp.CompletionItemKind.Class, 'builtinfunction': lsp.CompletionItemKind.Function, 'module': lsp.CompletionItemKind.Module, 'file': lsp.CompletionItemKind.File, 'xrange': lsp.CompletionItemKind.Class, 'slice': lsp.CompletionItemKind.Class, 'traceback': lsp.CompletionItemKind.Class, 'frame': lsp.CompletionItemKind.Class, 'buffer': lsp.CompletionItemKind.Class, 'dictproxy': lsp.CompletionItemKind.Class, 'funcdef': lsp.CompletionItemKind.Function, 'property': lsp.CompletionItemKind.Property, 'import': lsp.CompletionItemKind.Module, 'keyword': lsp.CompletionItemKind.Keyword, 'constant': lsp.CompletionItemKind.Variable, 'variable': lsp.CompletionItemKind.Variable, 'value': lsp.CompletionItemKind.Value, 'param': lsp.CompletionItemKind.Variable, 'statement': lsp.CompletionItemKind.Keyword, } return MAP.get(d.type) python-language-server-0.36.2/pyls/plugins/rope_rename.py000066400000000000000000000034531376456405500235520ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging from rope.base import libutils from rope.refactor.rename import Rename from pyls import hookimpl, uris log = logging.getLogger(__name__) @hookimpl def pyls_settings(): # Default rope_rename to disabled return {'plugins': {'rope_rename': {'enabled': False}}} @hookimpl def pyls_rename(config, workspace, document, position, new_name): rope_config = config.settings(document_path=document.path).get('rope', {}) rope_project = workspace._rope_project_builder(rope_config) rename = Rename( rope_project, libutils.path_to_resource(rope_project, document.path), document.offset_at_position(position) ) log.debug("Executing rename of %s to %s", document.word_at_position(position), new_name) changeset = rename.get_changes(new_name, in_hierarchy=True, docs=True) log.debug("Finished rename: %s", changeset.changes) changes = [] for change in changeset.changes: uri = uris.from_fs_path(change.resource.path) doc = workspace.get_maybe_document(uri) changes.append({ 'textDocument': { 'uri': uri, 'version': doc.version if doc else None }, 'edits': [ { 'range': { 'start': {'line': 0, 'character': 0}, 'end': { 'line': _num_lines(change.resource), 'character': 0, }, }, 'newText': change.new_contents, } ] }) return {'documentChanges': changes} def _num_lines(resource): "Count the number of lines in a `File` resource." return len(resource.read().splitlines()) python-language-server-0.36.2/pyls/plugins/signature.py000066400000000000000000000035121376456405500232530ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import re from pyls import hookimpl, _utils log = logging.getLogger(__name__) SPHINX = re.compile(r"\s*:param\s+(?P\w+):\s*(?P[^\n]+)") EPYDOC = re.compile(r"\s*@param\s+(?P\w+):\s*(?P[^\n]+)") GOOGLE = re.compile(r"\s*(?P\w+).*:\s*(?P[^\n]+)") DOC_REGEX = [SPHINX, EPYDOC, GOOGLE] @hookimpl def pyls_signature_help(document, position): code_position = _utils.position_to_jedi_linecolumn(document, position) signatures = document.jedi_script().get_signatures(**code_position) if not signatures: return {'signatures': []} s = signatures[0] # Docstring contains one or more lines of signature, followed by empty line, followed by docstring function_sig_lines = (s.docstring().split('\n\n') or [''])[0].splitlines() function_sig = ' '.join([line.strip() for line in function_sig_lines]) sig = { 'label': function_sig, 'documentation': _utils.format_docstring(s.docstring(raw=True)) } # If there are params, add those if s.params: sig['parameters'] = [{ 'label': p.name, 'documentation': _param_docs(s.docstring(), p.name) } for p in s.params] # We only return a single signature because Python doesn't allow overloading sig_info = {'signatures': [sig], 'activeSignature': 0} if s.index is not None and s.params: # Then we know which parameter we're looking at sig_info['activeParameter'] = s.index return sig_info def _param_docs(docstring, param_name): for line in docstring.splitlines(): for regex in DOC_REGEX: m = regex.match(line) if not m: continue if m.group('param') != param_name: continue return m.group('doc') or "" python-language-server-0.36.2/pyls/plugins/symbols.py000066400000000000000000000123711376456405500227450ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import os from pyls import hookimpl from pyls.lsp import SymbolKind log = logging.getLogger(__name__) @hookimpl def pyls_document_symbols(config, document): # pylint: disable=broad-except # pylint: disable=too-many-nested-blocks # pylint: disable=too-many-locals # pylint: disable=too-many-branches symbols_settings = config.plugin_settings('jedi_symbols') all_scopes = symbols_settings.get('all_scopes', True) add_import_symbols = symbols_settings.get('include_import_symbols', True) use_document_path = False document_dir = os.path.normpath(os.path.dirname(document.path)) if not os.path.isfile(os.path.join(document_dir, '__init__.py')): use_document_path = True definitions = document.jedi_names(use_document_path, all_scopes=all_scopes) module_name = document.dot_path symbols = [] exclude = set({}) redefinitions = {} while definitions != []: d = definitions.pop(0) if not add_import_symbols: sym_full_name = d.full_name if sym_full_name is not None: if (not sym_full_name.startswith(module_name) and not sym_full_name.startswith('__main__')): continue if _include_def(d) and document.path == d.module_path: tuple_range = _tuple_range(d) if tuple_range in exclude: continue kind = redefinitions.get(tuple_range, None) if kind is not None: exclude |= {tuple_range} if d.type == 'statement': if d.description.startswith('self'): kind = 'field' symbol = { 'name': d.name, 'containerName': _container(d), 'location': { 'uri': document.uri, 'range': _range(d), }, 'kind': _kind(d) if kind is None else _SYMBOL_KIND_MAP[kind], } symbols.append(symbol) if d.type == 'class': try: defined_names = list(d.defined_names()) for method in defined_names: if method.type == 'function': redefinitions[_tuple_range(method)] = 'method' elif method.type == 'statement': redefinitions[_tuple_range(method)] = 'field' else: redefinitions[_tuple_range(method)] = method.type definitions = list(defined_names) + definitions except Exception: pass return symbols def _include_def(definition): return ( # Don't tend to include parameters as symbols definition.type != 'param' and # Unused vars should also be skipped definition.name != '_' and _kind(definition) is not None ) def _container(definition): try: # Jedi sometimes fails here. parent = definition.parent() # Here we check that a grand-parent exists to avoid declaring symbols # as children of the module. if parent.parent(): return parent.name except: # pylint: disable=bare-except return None return None def _range(definition): # This gets us more accurate end position definition = definition._name.tree_name.get_definition() (start_line, start_column) = definition.start_pos (end_line, end_column) = definition.end_pos return { 'start': {'line': start_line - 1, 'character': start_column}, 'end': {'line': end_line - 1, 'character': end_column} } def _tuple_range(definition): definition = definition._name.tree_name.get_definition() return (definition.start_pos, definition.end_pos) _SYMBOL_KIND_MAP = { 'none': SymbolKind.Variable, 'type': SymbolKind.Class, 'tuple': SymbolKind.Class, 'dict': SymbolKind.Class, 'dictionary': SymbolKind.Class, 'function': SymbolKind.Function, 'lambda': SymbolKind.Function, 'generator': SymbolKind.Function, 'class': SymbolKind.Class, 'instance': SymbolKind.Class, 'method': SymbolKind.Method, 'builtin': SymbolKind.Class, 'builtinfunction': SymbolKind.Function, 'module': SymbolKind.Module, 'file': SymbolKind.File, 'xrange': SymbolKind.Array, 'slice': SymbolKind.Class, 'traceback': SymbolKind.Class, 'frame': SymbolKind.Class, 'buffer': SymbolKind.Array, 'dictproxy': SymbolKind.Class, 'funcdef': SymbolKind.Function, 'property': SymbolKind.Property, 'import': SymbolKind.Module, 'keyword': SymbolKind.Variable, 'constant': SymbolKind.Constant, 'variable': SymbolKind.Variable, 'value': SymbolKind.Variable, 'param': SymbolKind.Variable, 'statement': SymbolKind.Variable, 'boolean': SymbolKind.Boolean, 'int': SymbolKind.Number, 'longlean': SymbolKind.Number, 'float': SymbolKind.Number, 'complex': SymbolKind.Number, 'string': SymbolKind.String, 'unicode': SymbolKind.String, 'list': SymbolKind.Array, 'field': SymbolKind.Field } def _kind(d): """ Return the VSCode Symbol Type """ return _SYMBOL_KIND_MAP.get(d.type) python-language-server-0.36.2/pyls/plugins/yapf_format.py000066400000000000000000000032151376456405500235610ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import logging import os from yapf.yapflib import file_resources from yapf.yapflib.yapf_api import FormatCode from pyls import hookimpl log = logging.getLogger(__name__) @hookimpl def pyls_format_document(document): return _format(document) @hookimpl def pyls_format_range(document, range): # pylint: disable=redefined-builtin # First we 'round' the range up/down to full lines only range['start']['character'] = 0 range['end']['line'] += 1 range['end']['character'] = 0 # From Yapf docs: # lines: (list of tuples of integers) A list of tuples of lines, [start, end], # that we want to format. The lines are 1-based indexed. It can be used by # third-party code (e.g., IDEs) when reformatting a snippet of code rather # than a whole file. # Add 1 for 1-indexing vs LSP's 0-indexing lines = [(range['start']['line'] + 1, range['end']['line'] + 1)] return _format(document, lines=lines) def _format(document, lines=None): new_source, changed = FormatCode( document.source, lines=lines, filename=document.filename, style_config=file_resources.GetDefaultStyleForDir( os.path.dirname(document.path) ) ) if not changed: return [] # I'm too lazy at the moment to parse diffs into TextEdit items # So let's just return the entire file... return [{ 'range': { 'start': {'line': 0, 'character': 0}, # End char 0 of the line after our document 'end': {'line': len(document.lines), 'character': 0} }, 'newText': new_source }] python-language-server-0.36.2/pyls/python_ls.py000066400000000000000000000443571376456405500216240ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from functools import partial import logging import os import socketserver import threading from pyls_jsonrpc.dispatchers import MethodDispatcher from pyls_jsonrpc.endpoint import Endpoint from pyls_jsonrpc.streams import JsonRpcStreamReader, JsonRpcStreamWriter from . import lsp, _utils, uris from .config import config from .workspace import Workspace log = logging.getLogger(__name__) LINT_DEBOUNCE_S = 0.5 # 500 ms PARENT_PROCESS_WATCH_INTERVAL = 10 # 10 s MAX_WORKERS = 64 PYTHON_FILE_EXTENSIONS = ('.py', '.pyi') CONFIG_FILEs = ('pycodestyle.cfg', 'setup.cfg', 'tox.ini', '.flake8') class _StreamHandlerWrapper(socketserver.StreamRequestHandler, object): """A wrapper class that is used to construct a custom handler class.""" delegate = None def setup(self): super(_StreamHandlerWrapper, self).setup() # pylint: disable=no-member self.delegate = self.DELEGATE_CLASS(self.rfile, self.wfile) def handle(self): try: self.delegate.start() except OSError as e: if os.name == 'nt': # Catch and pass on ConnectionResetError when parent process # dies # pylint: disable=no-member, undefined-variable if isinstance(e, WindowsError) and e.winerror == 10054: pass # pylint: disable=no-member self.SHUTDOWN_CALL() def start_tcp_lang_server(bind_addr, port, check_parent_process, handler_class): if not issubclass(handler_class, PythonLanguageServer): raise ValueError('Handler class must be an instance of PythonLanguageServer') def shutdown_server(check_parent_process, *args): # pylint: disable=unused-argument if check_parent_process: log.debug('Shutting down server') # Shutdown call must be done on a thread, to prevent deadlocks stop_thread = threading.Thread(target=server.shutdown) stop_thread.start() # Construct a custom wrapper class around the user's handler_class wrapper_class = type( handler_class.__name__ + 'Handler', (_StreamHandlerWrapper,), {'DELEGATE_CLASS': partial(handler_class, check_parent_process=check_parent_process), 'SHUTDOWN_CALL': partial(shutdown_server, check_parent_process)} ) server = socketserver.TCPServer((bind_addr, port), wrapper_class, bind_and_activate=False) server.allow_reuse_address = True try: server.server_bind() server.server_activate() log.info('Serving %s on (%s, %s)', handler_class.__name__, bind_addr, port) server.serve_forever() finally: log.info('Shutting down') server.server_close() def start_io_lang_server(rfile, wfile, check_parent_process, handler_class): if not issubclass(handler_class, PythonLanguageServer): raise ValueError('Handler class must be an instance of PythonLanguageServer') log.info('Starting %s IO language server', handler_class.__name__) server = handler_class(rfile, wfile, check_parent_process) server.start() class PythonLanguageServer(MethodDispatcher): """ Implementation of the Microsoft VSCode Language Server Protocol https://github.com/Microsoft/language-server-protocol/blob/master/versions/protocol-1-x.md """ # pylint: disable=too-many-public-methods,redefined-builtin def __init__(self, rx, tx, check_parent_process=False): self.workspace = None self.config = None self.root_uri = None self.watching_thread = None self.workspaces = {} self.uri_workspace_mapper = {} self._jsonrpc_stream_reader = JsonRpcStreamReader(rx) self._jsonrpc_stream_writer = JsonRpcStreamWriter(tx) self._check_parent_process = check_parent_process self._endpoint = Endpoint(self, self._jsonrpc_stream_writer.write, max_workers=MAX_WORKERS) self._dispatchers = [] self._shutdown = False def start(self): """Entry point for the server.""" self._jsonrpc_stream_reader.listen(self._endpoint.consume) def __getitem__(self, item): """Override getitem to fallback through multiple dispatchers.""" if self._shutdown and item != 'exit': # exit is the only allowed method during shutdown log.debug("Ignoring non-exit method during shutdown: %s", item) raise KeyError try: return super(PythonLanguageServer, self).__getitem__(item) except KeyError: # Fallback through extra dispatchers for dispatcher in self._dispatchers: try: return dispatcher[item] except KeyError: continue raise KeyError() def m_shutdown(self, **_kwargs): self._shutdown = True return None def m_exit(self, **_kwargs): self._endpoint.shutdown() self._jsonrpc_stream_reader.close() self._jsonrpc_stream_writer.close() def _match_uri_to_workspace(self, uri): workspace_uri = _utils.match_uri_to_workspace(uri, self.workspaces) return self.workspaces.get(workspace_uri, self.workspace) def _hook(self, hook_name, doc_uri=None, **kwargs): """Calls hook_name and returns a list of results from all registered handlers""" workspace = self._match_uri_to_workspace(doc_uri) doc = workspace.get_document(doc_uri) if doc_uri else None hook_handlers = self.config.plugin_manager.subset_hook_caller(hook_name, self.config.disabled_plugins) return hook_handlers(config=self.config, workspace=workspace, document=doc, **kwargs) def capabilities(self): server_capabilities = { 'codeActionProvider': True, 'codeLensProvider': { 'resolveProvider': False, # We may need to make this configurable }, 'completionProvider': { 'resolveProvider': False, # We know everything ahead of time 'triggerCharacters': ['.'] }, 'documentFormattingProvider': True, 'documentHighlightProvider': True, 'documentRangeFormattingProvider': True, 'documentSymbolProvider': True, 'definitionProvider': True, 'executeCommandProvider': { 'commands': flatten(self._hook('pyls_commands')) }, 'hoverProvider': True, 'referencesProvider': True, 'renameProvider': True, 'foldingRangeProvider': True, 'signatureHelpProvider': { 'triggerCharacters': ['(', ',', '='] }, 'textDocumentSync': { 'change': lsp.TextDocumentSyncKind.INCREMENTAL, 'save': { 'includeText': True, }, 'openClose': True, }, 'workspace': { 'workspaceFolders': { 'supported': True, 'changeNotifications': True } }, 'experimental': merge(self._hook('pyls_experimental_capabilities')) } log.info('Server capabilities: %s', server_capabilities) return server_capabilities def m_initialize(self, processId=None, rootUri=None, rootPath=None, initializationOptions=None, **_kwargs): log.debug('Language server initialized with %s %s %s %s', processId, rootUri, rootPath, initializationOptions) if rootUri is None: rootUri = uris.from_fs_path(rootPath) if rootPath is not None else '' self.workspaces.pop(self.root_uri, None) self.root_uri = rootUri self.config = config.Config(rootUri, initializationOptions or {}, processId, _kwargs.get('capabilities', {})) self.workspace = Workspace(rootUri, self._endpoint, self.config) self.workspaces[rootUri] = self.workspace self._dispatchers = self._hook('pyls_dispatchers') self._hook('pyls_initialize') if self._check_parent_process and processId is not None and self.watching_thread is None: def watch_parent_process(pid): # exit when the given pid is not alive if not _utils.is_process_alive(pid): log.info("parent process %s is not alive, exiting!", pid) self.m_exit() else: threading.Timer(PARENT_PROCESS_WATCH_INTERVAL, watch_parent_process, args=[pid]).start() self.watching_thread = threading.Thread(target=watch_parent_process, args=(processId,)) self.watching_thread.daemon = True self.watching_thread.start() # Get our capabilities return {'capabilities': self.capabilities()} def m_initialized(self, **_kwargs): self._hook('pyls_initialized') def code_actions(self, doc_uri, range, context): return flatten(self._hook('pyls_code_actions', doc_uri, range=range, context=context)) def code_lens(self, doc_uri): return flatten(self._hook('pyls_code_lens', doc_uri)) def completions(self, doc_uri, position): completions = self._hook('pyls_completions', doc_uri, position=position) return { 'isIncomplete': False, 'items': flatten(completions) } def definitions(self, doc_uri, position): return flatten(self._hook('pyls_definitions', doc_uri, position=position)) def document_symbols(self, doc_uri): return flatten(self._hook('pyls_document_symbols', doc_uri)) def execute_command(self, command, arguments): return self._hook('pyls_execute_command', command=command, arguments=arguments) def format_document(self, doc_uri): return self._hook('pyls_format_document', doc_uri) def format_range(self, doc_uri, range): return self._hook('pyls_format_range', doc_uri, range=range) def highlight(self, doc_uri, position): return flatten(self._hook('pyls_document_highlight', doc_uri, position=position)) or None def hover(self, doc_uri, position): return self._hook('pyls_hover', doc_uri, position=position) or {'contents': ''} @_utils.debounce(LINT_DEBOUNCE_S, keyed_by='doc_uri') def lint(self, doc_uri, is_saved): # Since we're debounced, the document may no longer be open workspace = self._match_uri_to_workspace(doc_uri) if doc_uri in workspace.documents: workspace.publish_diagnostics( doc_uri, flatten(self._hook('pyls_lint', doc_uri, is_saved=is_saved)) ) def references(self, doc_uri, position, exclude_declaration): return flatten(self._hook( 'pyls_references', doc_uri, position=position, exclude_declaration=exclude_declaration )) def rename(self, doc_uri, position, new_name): return self._hook('pyls_rename', doc_uri, position=position, new_name=new_name) def signature_help(self, doc_uri, position): return self._hook('pyls_signature_help', doc_uri, position=position) def folding(self, doc_uri): return flatten(self._hook('pyls_folding_range', doc_uri)) def m_text_document__did_close(self, textDocument=None, **_kwargs): workspace = self._match_uri_to_workspace(textDocument['uri']) workspace.rm_document(textDocument['uri']) def m_text_document__did_open(self, textDocument=None, **_kwargs): workspace = self._match_uri_to_workspace(textDocument['uri']) workspace.put_document(textDocument['uri'], textDocument['text'], version=textDocument.get('version')) self._hook('pyls_document_did_open', textDocument['uri']) self.lint(textDocument['uri'], is_saved=True) def m_text_document__did_change(self, contentChanges=None, textDocument=None, **_kwargs): workspace = self._match_uri_to_workspace(textDocument['uri']) for change in contentChanges: workspace.update_document( textDocument['uri'], change, version=textDocument.get('version') ) self.lint(textDocument['uri'], is_saved=False) def m_text_document__did_save(self, textDocument=None, **_kwargs): self.lint(textDocument['uri'], is_saved=True) def m_text_document__code_action(self, textDocument=None, range=None, context=None, **_kwargs): return self.code_actions(textDocument['uri'], range, context) def m_text_document__code_lens(self, textDocument=None, **_kwargs): return self.code_lens(textDocument['uri']) def m_text_document__completion(self, textDocument=None, position=None, **_kwargs): return self.completions(textDocument['uri'], position) def m_text_document__definition(self, textDocument=None, position=None, **_kwargs): return self.definitions(textDocument['uri'], position) def m_text_document__document_highlight(self, textDocument=None, position=None, **_kwargs): return self.highlight(textDocument['uri'], position) def m_text_document__hover(self, textDocument=None, position=None, **_kwargs): return self.hover(textDocument['uri'], position) def m_text_document__document_symbol(self, textDocument=None, **_kwargs): return self.document_symbols(textDocument['uri']) def m_text_document__formatting(self, textDocument=None, _options=None, **_kwargs): # For now we're ignoring formatting options. return self.format_document(textDocument['uri']) def m_text_document__rename(self, textDocument=None, position=None, newName=None, **_kwargs): return self.rename(textDocument['uri'], position, newName) def m_text_document__folding_range(self, textDocument=None, **_kwargs): return self.folding(textDocument['uri']) def m_text_document__range_formatting(self, textDocument=None, range=None, _options=None, **_kwargs): # Again, we'll ignore formatting options for now. return self.format_range(textDocument['uri'], range) def m_text_document__references(self, textDocument=None, position=None, context=None, **_kwargs): exclude_declaration = not context['includeDeclaration'] return self.references(textDocument['uri'], position, exclude_declaration) def m_text_document__signature_help(self, textDocument=None, position=None, **_kwargs): return self.signature_help(textDocument['uri'], position) def m_workspace__did_change_configuration(self, settings=None): self.config.update((settings or {}).get('pyls', {})) for workspace_uri in self.workspaces: workspace = self.workspaces[workspace_uri] workspace.update_config(settings) for doc_uri in workspace.documents: self.lint(doc_uri, is_saved=False) def m_workspace__did_change_workspace_folders(self, event=None, **_kwargs): # pylint: disable=too-many-locals if event is None: return added = event.get('added', []) removed = event.get('removed', []) for removed_info in removed: if 'uri' in removed_info: removed_uri = removed_info['uri'] self.workspaces.pop(removed_uri, None) for added_info in added: if 'uri' in added_info: added_uri = added_info['uri'] workspace_config = config.Config( added_uri, self.config._init_opts, self.config._process_id, self.config._capabilities) workspace_config.update(self.config._settings) self.workspaces[added_uri] = Workspace( added_uri, self._endpoint, workspace_config) root_workspace_removed = any(removed_info['uri'] == self.root_uri for removed_info in removed) workspace_added = len(added) > 0 and 'uri' in added[0] if root_workspace_removed and workspace_added: added_uri = added[0]['uri'] self.root_uri = added_uri new_root_workspace = self.workspaces[added_uri] self.config = new_root_workspace._config self.workspace = new_root_workspace elif root_workspace_removed: # NOTE: Removing the root workspace can only happen when the server # is closed, thus the else condition of this if can never happen. if self.workspaces: log.debug('Root workspace deleted!') available_workspaces = sorted(self.workspaces) first_workspace = available_workspaces[0] new_root_workspace = self.workspaces[first_workspace] self.root_uri = first_workspace self.config = new_root_workspace._config self.workspace = new_root_workspace # Migrate documents that are on the root workspace and have a better # match now doc_uris = list(self.workspace._docs.keys()) for uri in doc_uris: doc = self.workspace._docs.pop(uri) new_workspace = self._match_uri_to_workspace(uri) new_workspace._docs[uri] = doc def m_workspace__did_change_watched_files(self, changes=None, **_kwargs): changed_py_files = set() config_changed = False for d in (changes or []): if d['uri'].endswith(PYTHON_FILE_EXTENSIONS): changed_py_files.add(d['uri']) elif d['uri'].endswith(CONFIG_FILEs): config_changed = True if config_changed: self.config.settings.cache_clear() elif not changed_py_files: # Only externally changed python files and lint configs may result in changed diagnostics. return for workspace_uri in self.workspaces: workspace = self.workspaces[workspace_uri] for doc_uri in workspace.documents: # Changes in doc_uri are already handled by m_text_document__did_save if doc_uri not in changed_py_files: self.lint(doc_uri, is_saved=False) def m_workspace__execute_command(self, command=None, arguments=None): return self.execute_command(command, arguments) def flatten(list_of_lists): return [item for lst in list_of_lists for item in lst] def merge(list_of_dicts): return {k: v for dictionary in list_of_dicts for k, v in dictionary.items()} python-language-server-0.36.2/pyls/uris.py000066400000000000000000000071551376456405500205620ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. """A collection of URI utilities with logic built on the VSCode URI library. https://github.com/Microsoft/vscode-uri/blob/e59cab84f5df6265aed18ae5f43552d3eef13bb9/lib/index.ts """ import re from urllib import parse from pyls import IS_WIN RE_DRIVE_LETTER_PATH = re.compile(r'^\/[a-zA-Z]:') def urlparse(uri): """Parse and decode the parts of a URI.""" scheme, netloc, path, params, query, fragment = parse.urlparse(uri) return ( parse.unquote(scheme), parse.unquote(netloc), parse.unquote(path), parse.unquote(params), parse.unquote(query), parse.unquote(fragment) ) def urlunparse(parts): """Unparse and encode parts of a URI.""" scheme, netloc, path, params, query, fragment = parts # Avoid encoding the windows drive letter colon if RE_DRIVE_LETTER_PATH.match(path): quoted_path = path[:3] + parse.quote(path[3:]) else: quoted_path = parse.quote(path) return parse.urlunparse(( parse.quote(scheme), parse.quote(netloc), quoted_path, parse.quote(params), parse.quote(query), parse.quote(fragment) )) def to_fs_path(uri): """Returns the filesystem path of the given URI. Will handle UNC paths and normalize windows drive letters to lower-case. Also uses the platform specific path separator. Will *not* validate the path for invalid characters and semantics. Will *not* look at the scheme of this URI. """ # scheme://netloc/path;parameters?query#fragment scheme, netloc, path, _params, _query, _fragment = urlparse(uri) if netloc and path and scheme == 'file': # unc path: file://shares/c$/far/boo value = "//{}{}".format(netloc, path) elif RE_DRIVE_LETTER_PATH.match(path): # windows drive letter: file:///C:/far/boo value = path[1].lower() + path[2:] else: # Other path value = path if IS_WIN: value = value.replace('/', '\\') return value def from_fs_path(path): """Returns a URI for the given filesystem path.""" scheme = 'file' params, query, fragment = '', '', '' path, netloc = _normalize_win_path(path) return urlunparse((scheme, netloc, path, params, query, fragment)) def uri_with(uri, scheme=None, netloc=None, path=None, params=None, query=None, fragment=None): """Return a URI with the given part(s) replaced. Parts are decoded / encoded. """ old_scheme, old_netloc, old_path, old_params, old_query, old_fragment = urlparse(uri) path, _netloc = _normalize_win_path(path) return urlunparse(( scheme or old_scheme, netloc or old_netloc, path or old_path, params or old_params, query or old_query, fragment or old_fragment )) def _normalize_win_path(path): netloc = '' # normalize to fwd-slashes on windows, # on other systems bwd-slaches are valid # filename character, eg /f\oo/ba\r.txt if IS_WIN: path = path.replace('\\', '/') # check for authority as used in UNC shares # or use the path as given if path[:2] == '//': idx = path.index('/', 2) if idx == -1: netloc = path[2:] else: netloc = path[2:idx] path = path[idx:] else: path = path # Ensure that path starts with a slash # or that it is at least a slash if not path.startswith('/'): path = '/' + path # Normalize drive paths to lower case if RE_DRIVE_LETTER_PATH.match(path): path = path[0] + path[1].lower() + path[2:] return path, netloc python-language-server-0.36.2/pyls/workspace.py000066400000000000000000000250171376456405500215730ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import io import logging import os import re import functools from threading import RLock import jedi from . import lsp, uris, _utils log = logging.getLogger(__name__) # TODO: this is not the best e.g. we capture numbers RE_START_WORD = re.compile('[A-Za-z_0-9]*$') RE_END_WORD = re.compile('^[A-Za-z_0-9]*') def lock(method): """Define an atomic region over a method.""" @functools.wraps(method) def wrapper(self, *args, **kwargs): with self._lock: return method(self, *args, **kwargs) return wrapper class Workspace(object): M_PUBLISH_DIAGNOSTICS = 'textDocument/publishDiagnostics' M_APPLY_EDIT = 'workspace/applyEdit' M_SHOW_MESSAGE = 'window/showMessage' def __init__(self, root_uri, endpoint, config=None): self._config = config self._root_uri = root_uri self._endpoint = endpoint self._root_uri_scheme = uris.urlparse(self._root_uri)[0] self._root_path = uris.to_fs_path(self._root_uri) self._docs = {} # Cache jedi environments self._environments = {} # Whilst incubating, keep rope private self.__rope = None self.__rope_config = None def _rope_project_builder(self, rope_config): from rope.base.project import Project # TODO: we could keep track of dirty files and validate only those if self.__rope is None or self.__rope_config != rope_config: rope_folder = rope_config.get('ropeFolder') self.__rope = Project(self._root_path, ropefolder=rope_folder) self.__rope.prefs.set('extension_modules', rope_config.get('extensionModules', [])) self.__rope.prefs.set('ignore_syntax_errors', True) self.__rope.prefs.set('ignore_bad_imports', True) self.__rope.validate() return self.__rope @property def documents(self): return self._docs @property def root_path(self): return self._root_path @property def root_uri(self): return self._root_uri def is_local(self): return (self._root_uri_scheme == '' or self._root_uri_scheme == 'file') and os.path.exists(self._root_path) def get_document(self, doc_uri): """Return a managed document if-present, else create one pointing at disk. See https://github.com/Microsoft/language-server-protocol/issues/177 """ return self._docs.get(doc_uri) or self._create_document(doc_uri) def get_maybe_document(self, doc_uri): return self._docs.get(doc_uri) def put_document(self, doc_uri, source, version=None): self._docs[doc_uri] = self._create_document(doc_uri, source=source, version=version) def rm_document(self, doc_uri): self._docs.pop(doc_uri) def update_document(self, doc_uri, change, version=None): self._docs[doc_uri].apply_change(change) self._docs[doc_uri].version = version def update_config(self, settings): self._config.update((settings or {}).get('pyls', {})) for doc_uri in self.documents: self.get_document(doc_uri).update_config(settings) def apply_edit(self, edit): return self._endpoint.request(self.M_APPLY_EDIT, {'edit': edit}) def publish_diagnostics(self, doc_uri, diagnostics): self._endpoint.notify(self.M_PUBLISH_DIAGNOSTICS, params={'uri': doc_uri, 'diagnostics': diagnostics}) def show_message(self, message, msg_type=lsp.MessageType.Info): self._endpoint.notify(self.M_SHOW_MESSAGE, params={'type': msg_type, 'message': message}) def source_roots(self, document_path): """Return the source roots for the given document.""" files = _utils.find_parents(self._root_path, document_path, ['setup.py', 'pyproject.toml']) or [] return list({os.path.dirname(project_file) for project_file in files}) or [self._root_path] def _create_document(self, doc_uri, source=None, version=None): path = uris.to_fs_path(doc_uri) return Document( doc_uri, self, source=source, version=version, extra_sys_path=self.source_roots(path), rope_project_builder=self._rope_project_builder, ) class Document(object): def __init__(self, uri, workspace, source=None, version=None, local=True, extra_sys_path=None, rope_project_builder=None): self.uri = uri self.version = version self.path = uris.to_fs_path(uri) self.dot_path = _utils.path_to_dot_name(self.path) self.filename = os.path.basename(self.path) self._config = workspace._config self._workspace = workspace self._local = local self._source = source self._extra_sys_path = extra_sys_path or [] self._rope_project_builder = rope_project_builder self._lock = RLock() def __str__(self): return str(self.uri) def _rope_resource(self, rope_config): from rope.base import libutils return libutils.path_to_resource(self._rope_project_builder(rope_config), self.path) @property @lock def lines(self): return self.source.splitlines(True) @property @lock def source(self): if self._source is None: with io.open(self.path, 'r', encoding='utf-8') as f: return f.read() return self._source def update_config(self, settings): self._config.update((settings or {}).get('pyls', {})) @lock def apply_change(self, change): """Apply a change to the document.""" text = change['text'] change_range = change.get('range') if not change_range: # The whole file has changed self._source = text return start_line = change_range['start']['line'] start_col = change_range['start']['character'] end_line = change_range['end']['line'] end_col = change_range['end']['character'] # Check for an edit occuring at the very end of the file if start_line == len(self.lines): self._source = self.source + text return new = io.StringIO() # Iterate over the existing document until we hit the edit range, # at which point we write the new text, then loop until we hit # the end of the range and continue writing. for i, line in enumerate(self.lines): if i < start_line: new.write(line) continue if i > end_line: new.write(line) continue if i == start_line: new.write(line[:start_col]) new.write(text) if i == end_line: new.write(line[end_col:]) self._source = new.getvalue() def offset_at_position(self, position): """Return the byte-offset pointed at by the given position.""" return position['character'] + len(''.join(self.lines[:position['line']])) def word_at_position(self, position): """Get the word under the cursor returning the start and end positions.""" if position['line'] >= len(self.lines): return '' line = self.lines[position['line']] i = position['character'] # Split word in two start = line[:i] end = line[i:] # Take end of start and start of end to find word # These are guaranteed to match, even if they match the empty string m_start = RE_START_WORD.findall(start) m_end = RE_END_WORD.findall(end) return m_start[0] + m_end[-1] @lock def jedi_names(self, use_document_path, all_scopes=False, definitions=True, references=False): script = self.jedi_script(use_document_path=use_document_path) return script.get_names(all_scopes=all_scopes, definitions=definitions, references=references) @lock def jedi_script(self, position=None, use_document_path=False): extra_paths = [] environment_path = None env_vars = None if self._config: jedi_settings = self._config.plugin_settings('jedi', document_path=self.path) environment_path = jedi_settings.get('environment') extra_paths = jedi_settings.get('extra_paths') or [] env_vars = jedi_settings.get('env_vars') # Drop PYTHONPATH from env_vars before creating the environment because that makes # Jedi throw an error. if env_vars is None: env_vars = os.environ.copy() env_vars.pop('PYTHONPATH', None) environment = self.get_enviroment(environment_path, env_vars=env_vars) if environment_path else None sys_path = self.sys_path(environment_path, env_vars=env_vars) + extra_paths project_path = self._workspace.root_path # Extend sys_path with document's path if requested if use_document_path: sys_path += [os.path.normpath(os.path.dirname(self.path))] kwargs = { 'code': self.source, 'path': self.path, 'environment': environment, 'project': jedi.Project(path=project_path, sys_path=sys_path), } if position: # Deprecated by Jedi to use in Script() constructor kwargs += _utils.position_to_jedi_linecolumn(self, position) return jedi.Script(**kwargs) def get_enviroment(self, environment_path=None, env_vars=None): # TODO(gatesn): #339 - make better use of jedi environments, they seem pretty powerful if environment_path is None: environment = jedi.api.environment.get_cached_default_environment() else: if environment_path in self._workspace._environments: environment = self._workspace._environments[environment_path] else: environment = jedi.api.environment.create_environment(path=environment_path, safe=False, env_vars=env_vars) self._workspace._environments[environment_path] = environment return environment def sys_path(self, environment_path=None, env_vars=None): # Copy our extra sys path # TODO: when safe to break API, use env_vars explicitly to pass to create_environment path = list(self._extra_sys_path) environment = self.get_enviroment(environment_path=environment_path, env_vars=env_vars) path.extend(environment.get_sys_path()) return path python-language-server-0.36.2/resources/000077500000000000000000000000001376456405500202415ustar00rootroot00000000000000python-language-server-0.36.2/resources/auto-complete.gif000066400000000000000000001543541376456405500235220ustar00rootroot00000000000000GIF89a#w!ÿ NETSCAPE2.0!ù,#‡ (7#9/>0=  $$%+&+((("/9,-0$1##0:,15+3:4./1.08.79.8434669;51<0;::; 2M5V6X8[4Q7X :Z>]=a*7A+8D*=K>>DMS{A^CkGqItN|B`EbHd*@O&CV'H_)@Q(EZ"Je%Mh(Oi%Pm+Rk$Ts#Wy"Z}0Un3Xo2Vp5Yq:\t>`vC:3@??C4BK9IR>QNA3VH6\L7`M6rY8dp³Vœ’@ª@^(|ÃWPChÐðÓdáY6°‘3üe{Ì Ûº'”ïUe ÷3_bQ†#p#ë¶‘€TÔb ó›þ¸!ƒ€P1߆~Ò›¿@£aÍÿî¥Á"Qmoñ Un®¢ ùCáýæ‡U¤®‰Ü¸\þ`Ãû)$=ÌóF0 oTà·"^rxÄ6º±f¤‰§ÂDªŠ'Láü ŠÂÉ·Ëßå 2†6DYÐÎ@¤ð k|ƒrR(Æ7HóÆJZÒ_qŒ‰è&‡¤©$@§¨…$`G<¢cH, n„!¯°Åf8H‚„aI  "…µçJÁÆ7°Ç+Çð¢—L¦2ÅÖÀeá™/*Ê+¸AMý%…wÄ Çp‹à=ƒ‹X5oÁEZD•Ô´BBÆ1@ ߘÔ@¬Ç¼ .óžø”ÛÛ2‡ÿ ìRþ, L³Ëbx#šÈ€2™Ï†:45o#ƒsG¦ñ¡ÍhQZ3$„á@XC£4JÒ’Æ„£&M©JŠÒ•ºô¥ol)LgJSíÉ´¦8ÍéÞnªÓžú”mù“œ—‘ŒSz`{µW“}'¹”L9A¼€zjДR‰ ï”Vy•Ž'”‹ˆWv=9|e‡”X9–d9xZ©8\Y–j¹–y–‰“–l—réŒù—sy—xyu™—|Ù—Yè–{c—~9˜„ù{€©7'H{Fi~ž§{¼‡wRP•…9™yy˜ys‚ɧ|ÌyÎ}|ç‰y—ÝA™¤9—–‰7'~üH~Œéxo¸~Ô‡wPð„¥Y›kyšXçw÷7ûך…ç(€h€¨€¾è€ì² y× É0 Ø0 ‚i›Ô9ˆ¸iw~—‚+(‹¾Ix18ƒ5xƒ ÿ¹ƒ=øƒAH}Gæ }˜„Gh×ð”ÕŸÍx•—w^†» †dh†Ý9xiØkø’¯‡œ0‡ì‡wi°ž 0 Ö0‘òù t‰O±¸ˆEЈø…‘8‰•øƒ˜ØšH x   5yŒ ¡(j{Éûç‚,X‹·˜‹Ü8 ¾ŒÂ›#ª &º ñ˜¢>z…ôIzx×›ÓX‡Ú8£ßŽãXŽçÈ~Qw·£;ú£X‚A{Cš û(~þøxùƒ›@xg˜ y ɸ” ñx¥YZ§¹¢ù‘ )’()&Ù§R ’,é’“‡g€ª“€j§ŒÿÊz[Z|yW”F)–39•M Ÿ›§„–º”*Ù¨žjz“æFÓ¹w^Ùy`d÷©ª z¡ÚF£ºª°—­zD¯«¶J–³jDµz«¼ ”¹ZD»Ú«ÂZ‘¿ªAÁ:¬ÈʌŚA‰i”LП™ç˜É:­©·¬„™™‰ Ë×|Ï›†gÅ Ô:®Šg­Û“šá7~g蚺w YxJyä:¯†g®Ú“šø§ëú›ÿ€X€˜€ Ø€èЉ ‹€w¼0 xç ÀÀÓ` ¬1 K¯ûwöš='¨,è‚ÐxßIƒ6ˆƒ:ȃ>„è±DÈ TÉ£Y©Sp±4Ëwÿë9]ˆŸù¹ˆü™xÿ ¼¸‰ÊtÈJ‰xG±.»´ñZ³N«w7 ]J¡ ‰’ˆx”h‰J£œè‹F‹ òÊЀŒVMû´OµùØ¥.J‹ÿØx¸¨‹—´j£Ó§”U©´½Àœ ŠYŒhë´j«‘]*ùg¤×˜Û8·Ý¸¤âHŽæˆŽê &`„i…Ø0Y°„xgÓ¨K³ƒ;”]ú¥ýø¶‹7¦Y©¦Û¦X ±wè‡Q ±Ö0 =ʲœº;º[‰wyª§!ùw;iÚ§‚Ú’/ùw†ªwÐzgRð•}w“}ª¨9I½¼û©¾‹–‘ꬔÿªwJ¹©‰©¡•ä;A’¹½žÚ½o©x¥ –d¾ì[§î˜õ›¿íw¿ˆ©¿þ{}ü{™ÿ;ÀÁÀ¨IÀÜ{œ› ÜÀª·ÀØÙwŠi{[x>СÜÀ\Ÿ}—­Úº™Ç}€£y˜Á¼ÁBÚwª©®œwrÀ Àw&¼ (¬Á+Êw»©¯¾ÙÄÙÝx •˜ —}5p œ` '¼¶¶µË Ñà Ð9 Ú{ëå@Ð`-Rc©Â\ÚwËzWÃt ™Ð–€Ä—ÐtÀ–À B| d š 0¾ DŠ ±¼`½ ÇXìz àkâ h¸ÿšÃ÷ †úY†ëJ4 “ Ã3Ì&Ì %`'Ì y…¨”©wÖУ…ü{Æq¬ª(ÆÊ¢¹@µŽhµîj‰” “1(xWÚ|ÂÐ#Š¢¨JI›yg H˜ÊÀ§ÅjéÊÝǶ³£W~€Äƒ6ØËé6ì·•¶Å\ÊÈì{Ê\–ÌL…[¤¨»wp sà9Ø¡1| u€‰tØ ¹iS°=y¶ßο7΋,¡¥Ëaúwël‰“ “% ÄœÀ pßȦ6̺zìÏxg à Э'ÐaŒ§)¼‚75ð˜-Ë‹w7ÉÊmz •ål‚ßÿ;©/=–Z¬äœÃ7-—1}•3Í…=}—?m•AˆC=—Eí«u¹NýÔPÕR=ÕT]ÕV}ÕXÕZ½Õ\ÝÕ^ýÕ`Öb=ÖbMå@ÖhÖh}Ô°¨ÖnýÖp×r=×t]×_=åv½×iÍÖdUí‚-Ø|]؆}؈؆}Ú0ÙŠÙUí×aØRíà¬E bÍpàP=8 Ù¤]Ú¦}ÚTmÖäÐ !à ÍÚ’MÙ`cÙQí¬ Õlm Õ° šÀOm ‰ÛÆ}ÜÈmØ^ ^ ‰°É Ö²ý5´ Õ Ð¤ÀšYmœð¾ÿ ÜÂíÔDÙÑ]Þæ}Þ_ £ÝÕ  B€Þ[=Ý^SÝO}Ýùê½Õn è°‘ð’ x°, œðའ@ Ô0NÕ Ô ð}áŽÜ;   O‰ Áà !°Î Á zâÁ ¡à &ž( CàÔŸ¢ ‰N½ €â^àÔ^ð Áð 佟 7`Õ/ (þ <þ A¾0 ?°CÞâïMÕòÝ5´m æ(¨‚[~PýÛ›px ° œ Ž`𜠒°à;À×P=Ž Ò@Á€ zá†~èŠÿBP ðÔŸ [0ÁÀ éB€^ ×8 Áà?Ý p—^ÁðãBÐî½1 ã;°èÀ¾ÀÜNãëMÕ] ŸîÚ¢àç§¾ êönã4¾„ Kë^ Ví¢Ápå¡àç­>…>ÙÌ®ˆdX¡³Œ¡Õx`‰ NÍÝÞ½¿Ü-Þ0îÿþÞ;€îì~ó8ÿÖîîè„`㮞ðä…ŽïOý¢ ‰Ð Áàï”~ê”>ïþÔ.â ¾ñX  Š`ï7¾ÁÝð-öSÝå\cÙ-ú̶æ PSÝp€à ½ÚÎíÀ-+î1OîPó4oó9ø‚ÿÕ;ïó†ïÔ éSÞÞ5îÔ’îðÏô·Né_ð ðQ=[àðW­²NޝãQoâ;ð ŸðÔ…P¹nö[ƒöå‡Î PÕ vàv>÷qpçwÚîvÜp7` ž€!à÷}øƒ¿üÌ?Õ!ƒ â¦þ .ï}/ p¢0å§ÿž0 ×’Ž/ ô’ïôÁPÙOé‚àÞ ÕêKoÕC° àõßÞ“îÔ0°/!:yÚPPT0!7 ÐÐáCˆ%N¤XÑâEŒ/B)X$—R!+ìZ ÐdÁ‘8­|$¢àŠG›8åÙàBf¤Mš8äÀÖ³ç'ž w`KxÒèQ¤I•.eÚÔéS¨Q¥N¥Zµª§`YƒýÚàiPÁO_¹hýôBáØ` 6„ø”µ-Ž ¡¸œ»m°B@"«0T0¸I iíB¡¡`* îÐ*j‡ÂƒEj¤\ÙòeÌ VÈeʳg\%•ŠX±b)iVU¯fÝÚõkرe+ÿSÛMAÜ0«PÅ ÅQkß6ù)‘I0btPÊ0ósèÑ¥à¸AÃ&Ù³?ð0ÛûwðáÅ'_Þ|Á!mGu>Ýý{ø«ôP¿þyüùõïçßßÿI¸X½ø 40ºùþSpAtðÁÖÚ;pB 5ƒðB 3ÔpÃó$¬ðCJCK4ñDò0D1Ec”qÆòVlñÆ÷^¤qG{ôÑ)q:ŸúÀ°n{Á°A.ªˆÓI˜T*ÉÿŽÜK¬|ÊÉ“@ÂKC؆ÇB0Ó*)Á[r© ‡”Ó²"›‚fTX&” –ù ©AŽ“¯`n€­ÿcò"+ÉLº³7Ú‚aæ¸D˜It©=ŸÂªPÆ‚9Î/T»3ÏL…*DOº“§@‚Ì n…™e/d˜áâf6ø„Ϧ`ÐJ+/p`fÀï–Î9›}®N¦D Ŭ!àRfÙ£``æ‡Ù~åâÉÖR=ªa¸hS¡;ÁEêf^™BÖTªÚ§„àâØvå3Ý¥ä=JZjá2U*q X‘2ÙX-í‚ aŽ oen!‡!|–)e<þaañ®eÖY”+ƒV©A–1æ8B26y/D¥(q»ð"Q1 BDù$cá”OnD”Nˆã"¹À:Õ¨ÿ ºåÏ z=¼N$‘K…E”P7(dc£î<:¢ Œ‘CaÆ“!a&”PoðD”D̬ºQnˆyB¼èD”¼6à€pE†ôÝõÖ.™?“R¦„[~ñŒ¦ÙæF 2›qí9é TPä6xN„¸Ÿ]^‡.™à@@f_/ ¥“ ŠðÛpHdõÀ:^‘æ7"âÙ‡ÈëׂžŽZ)/.ÝÀØA~Íx-¯;1Ô¤Ä= E³AYo‡Oz‡_»@fÙ‚þ„á8Sö_>ªpÁøÊÀLV©Bð*!Ÿó3Œ3)_)ƒ¼ÚÁ»–AˆcXŠ{£Ùÿ¤ô6ã$Å Ìðž<Ñ ]m@œÕcì¶6KIïnTÛT…'á]u†bà f¢jÜ‚¶‚Aˆvð³XÄ:Q©¯è-@ì•^$VÂ`e)^P2êbP…Çè(f€¢\ã1q e¨`a¾s#2ŽmÕ±c†"µ9“ ¢Wm2Q%;òŽwr#­ÄD ã ÙÁ($ƒTao„‰ø ÷¼g¬eÀð1ÁÀ\0–.êÍê‚ÂXv@BB(Cgb†0ÈŒe}"”³:_Aú÷?`®L)¢3  Þõ…‚ãP2}Œ‚$š;(ÞtÿµCï@† <1Ë*І4¹)!l« ÇðÄ R¸`$*-)„2°ˆ”;ÏŸÀ¦ —Å/lÆÒ0éÄÁƒÓÄen@žx!²XEÊÑX+È ppÑÔèe…: 1ɘˆc&3¡ÉEA¶ÀŒ¬vÌ(Ö±îuwË0SÖ`@2…¼+mÙËÓÍäN.¼´aC¸“¡ØÕË A1¯„”Ú.•I>u3‹³á'™A4ft!9X KM"ŒNtu.ìzA'.õJ!Ìô§¸ŒÁU/×8_S®fR<ÊLAh Oxâ“2ÒÎT !ƒxB˜ÄøÕ½wí•ÈðÕÔNÒ=ÿ°K‚¸s6ЉP½IU®{Ï£ðKmÁèçde¨l¢P±;€lAšˆ­_¹s=#,HDï¹M“¬}¸ì¨ š8;ÅrP!˜3Þ± fŒB,LŠåftE…øÉ$#ìár­åî• w*N rKQZP„¢Ÿ÷;­çRdT8 híýÙ~®±¾•›¨÷ ¢ ?)ã\o]ûQûÿðÀ_Ô+«v^f~aa#”ñ^.õ z7™TݲSëë*WXLUô®f qÑÒó©‰Â… |®ÇZu=׺5 ì%ÓÆ7OÖÖÄõ.A‹öWýÛ,EÀË †0p°ƒ%nàŠššß5;C<ø1‡e32vpƒy†ƒˆ^†%+80÷ò‚ï~æfZ0øÄ,Kl—ñ¡go«fÆW òŸÆæñ‚5ª Æ¯¬B•Á…åîX¢ …Z”Š»ÁÙÆ6X£éÃ\UV‡\ãì*µƒ…+/áÒY>ÂÀƒð×>a nAmð‚Þ,:)v‹»ÿ߃n:·pl‹wÍó•§A­/„"£Ó•3~Qí@äó«ËÒ³²³Jë<Ý Þ(4æï`dì†>´œmúÂó8)ß@ ŒÛ´Ì0 Þ7 ™±…ˆò« ‰z¤,e¨p¢Õ$Co6ˆ2ì.tA`7f̪©ãe3Ü~ ¤Ó(koØzh>*f„Õ$n·"«ä»½1Cã«ÿ *xVÅcyË…ôò¨Y!/xçQÀô@Êêî»WÂ’â$àM& ¤`<4m•îÇàÂc«``}Át¡ Š`l"춃€â|M¿£ü£tß(]*»ª‰G/ÀÁs>ø³Ë9¿ÁCÀ¦À¿äk*«@á࿜rÀ x‰+ã›+ä³ .p(Ù0ƒÁÖ*–tB¿òØ cÈ P!0S³„(„³k;1§Ø¸µâËÀÙ@ u ÚPDªèçÛAôA¹B'œB*¬BéA()´B.ìB/ü,Ì (C3ìC?ÌÃ0à !Ã?,DC`€¸„Là„L¸=`€¸N°od€5è‰i€‚i˜ˆk‚, kÀ†ÿi˜30GÜHŽìHYLG—[Ã%PRÈ…\h‚k<Ã`Ü:ЃLÀGKÈKh:`Kà}ôF3À^È‚‹d)À†+J¡Ì€,jÈ-0lJ§|ÊVDGÌ J,…]¸Ê«| (‚"ˆ€”4CF@ 0CmäFFN(ðÆa°†2<l‚ ʺ,Cp„J½ÜK¾tD©œÊË DØJ®T€]X¬D @Ã=X N „²d€9à9(ÕLK·,†2Ô¡¼Ë»4ÈpìKÑMÒÄÿL•)C@I“¼€]xÃðTEÉä@°La„€pËÐÜI)€ÿlи¡ÄËÐ,MäLNå<ÃÓDMÌktG'ˆ€×dC¸„9ðIàÚÔÆK¨U¬Nh„íF4À4Èh°† ¨lð… †âd€óÌ)°€åÌOýÜËætNŒ€N‰ê\ÃëtÌIˆÌ HNน¸o¬ùÄkÈ‚2ä…žˆ†ù4h艌ÜO QìOÿ´BäŒÏ7(7„x4„‚û<Ã(ˆÍQåH-QŠ Dì(Å ØQ"-R#eNÕÂ#]R&]ÒMÒˆ€Æ&R*]Î'…Ò‡Ò*ÝR.åO,¥(S1S2-S3=S4MSÿ5]S6mS7}S8S9S:­S;½S<ÍS=µÓ+ýR?ýS@ TãëSA-TC=TDBMTFmTG}Ô‰XTHTJ­T?•TKÍTMÝTIÄTNýTP U”ñTQ-US=Õ!UT]UVmUÊPUWUY•UXU[½UQ­U\ÝU^¥T]íU` VCýUa-VcMRb=Ve]VgLVf}VhÔhVj…Tg­VlÍÖ¹VmíVo-nýVq×ÌWr=WtµsMWvmWXWw×q…Wy­Wm¥W{Í×iÅW}í×eåW XaX-Ø]%XƒMXZUX†m؆@X‡ØP…Xÿ‰­XM¥X‹ÍØIÅXíXFåX ÙBY‘-ÙK5Y”½×”]Yj%Y–}ÙttY˜YA”Yš½Ù ´YœÝÙ¹ÒYžýÙ”ñY Z9Z¢=ÚmEZ¥Ø¥mÚM5Z§Ú÷€Z©­Zè Z«ÍZËÀZ­íZŒàZ¯ ÛH[²…R°-Û²=[´[µ][¯m[·ÕZ¸[«[º•Z»½[§Í[½]Z¾í[¤ý[À%ZÁ\ -\ÃåYÄM\œ]\Æ¥YÇ}\˜\ÉeYÊ­Ü”½\Ì5YÍÝ\‘í\ÏõXÐ ]]ÒµXÓ=]‰M]ÕuXÖm]†}]ØMXÙÝ‚­]Û XÜÍÝ~ !ù,v@€(((Œ©Ëí !ù-,v@‘’…(7!!!((($1#222:::MSzDDDLLL[[[bbblllppp{{{€”””œœœ¥¥¥®¯­²²²»»»ÂÂÂÌÌÌÓÓÓîîîòòòÿÿÿÿÀ‚pH$b0ŤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿Ã#xL.›Ïè´zÍvÞðxü(¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Šƒ xt‹‘’“”•–—˜™š†›¢£¤¥¦§¨© ª¯°±²³´‘oŸµÃÄÅÆÇ› žoÂÈÖרÙÚpŸÎßÕÛæçèéšÝÍãâä¡êòóôõìïïåöüýþÛ p Àà€³V÷ý[Ȱá«¿"V8¨/žÃ‹3ÆR¨±£Ç’8‚I’ä„Þ$8™2ÀÊ"KÊœép€‚L°‰S§Mÿ1m‚ J´¨Ñ£knî¢t€ H£JJµªÕ.4³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼ùó€ø`¡À… Ð7>°Áƒ†ò?cõþ9`€Œ H bˆX‚ ¦ñ5xƒFa…]ˆá_nØk×~ýyõÝ'¢_ê±ç|'¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)O!ù-,`@§ã‡ /<0>1!!!!(((%.7#/8--0,154./:* 1.03-9313659;5180><95::<5V6X8X 4P7X :Z1F1I0A>]93@?6I>>@@^B`EbHd!Jf%Mh(Oi'Pj,Rl0Un3Xo2Vp5Yq:\t>`vG'C:3H?4} A9JO>[NA3VH6[L6`M6jV8rY8d¢z?¢{@Ú è ñƒ`’i±o¾œp¾ŸqÁ¡rÃ¥vÉ©xÏ«yÑ­ƒB´ˆD¹‹C¿EÅ”EÈ•E̘FÑœG× HÚ¢Hà¦Iæ©Ié¬Jƒƒ„††ˆŠŠ‹€šƒ‘œˆ•ž“““——˜šššŠ– Ž™¡’¤ŸŸ – ¦˜¡§¥ª¤¤¤¥¦¨¡¨­¬¬¬­®°­±³´´´¶·¸·¸¹ºººÄÄÄËËËÓÓÓïïïóóóÿÿÿÿ H° Áƒvê”°¡Ã‡#JœH±¢Å‹3jÜȱ£Ç 3. I²¤É“(Sª\ÉÒ$€—0cÊœI³&Í…6sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]ª´H‘˜Q|üÄÉ´ªÕ«X³jÝʵ«×S4ÕÔ fRU¦vúʶ­Û·pãÊõšˆÔÌÈÆ,BAíÜ¿€ L¸h”R¦LAP„bR¤ž ÊT©QeH‚<åe‘Rš§½¹¶°éÓ¨S«ÆZªÓ'‰é]T)¼3©®^μ¹óÕg;Aþr‘Ý—g(@*óöà†?ÿÞ7yéçèÓ«_ϵJbS±«_— ÿ%f³àɇ7U^¦rö(à€;Dh¹`r”_wø¦Ÿ~@¢‰düGà†vØœ‰a$¦$8…)Oˆ(¤PEo/ùàC)‹ø0û•7Š)£ièá@)WƒïÅ'ÛŽ¦DÀŒ‰‘²ï%É„8°cç ©å–\jå Úd˜GùØå™h¦yš™j¶éæ›Xð rÀA›pæ©g‡)ÁÁÀqİ#µd衈&ªè¢Œ6J  ´F¡ŽVj饘fªéCnÉèé§ †*ꨤ–jꩨ¦ªêª¬¶êê«°Æÿ*무Öj«§V ë®¼öêë¯À+ì°Äkì±È&«ì²Ì6ëì³ÐF+í´äJíµØf«í¶Üvëí·àk-¯(€A¸è¦«îºì¶ë.¶ãêÚÁLpn¶d¡ï»üöëD¬ì/¼@®[ + ñÎ{"‚Ø‹ï$œ„rÁwìñ´Y”ራAi˜¡Â®-Œ¬ë ãJŒÈÌ|P`‹…Æ%÷ìóÏÀ®à2оžàˆ ½z°ò®ÖÊ’y¢H++à‚7êŠn£œ®D°„Q”aÀŒ›úXX6G0NhHAw™GÀ †ê[ ‘D`‘@%ÔaÈ ½® ÝÌW J]2^¼J@!xÀƒ6"X– F1 œ@ 0E\ ÿ º€—xc€ØK$T +T(*̆úŒŽÃ®¹+ˆ^ÁµÃ ñ˜S 4`‚4HókñV¨¾¥At™'xHp¼¡T|U”ŸH ¾0»JØð‡™âÌR(ÐÆ«4dÍ}XÅ&Þ¶¬ñ®{Y»£'ÊUµÀoŽøå®@ ®‘9äœÝÈP°f.“7%f¯ÎQ^™! ©žâ< ?œîêòS‚Ý= êŠxÀ ñÎxêÊö‹¬ýZ Yû½Oyf{5°‚ ·+ólF@Þj@®ÅÊt¥Ôu˜Xî„ý·0TxXî•€8=ȶb³6ì,ÿê™È„0† `"·¿ºB7±•»ÉZY °ÈšÍ^á®Â‚_&´†L(yX<>#M𿺖á¤ÍÂ±Ž³üˆ!+ÉNÎÄ3‹eCò–4ÿ˜ðk·JP‰L$Á i3C‹õÒÁ:b 'ÈÄióK_f¥ ™ü^.¿_Õ±tÙÒs0ì,4ÿ* HtqLéfb¤ÈDd,E놂Á{Ìéa‘ÚW‡Ntôʬ,K`Æ ô M`e%$á‚öÖ.±D`NÏÆÁ®p†K,{º¾–{uLLB{XÀ£uµÃ3dÓÒJXBÒ†Ãa!e˜C\uÍ`‚+l“qI.Í`æ^© çÎB Ä`Iµi!eKÓÀ¿Ã†+» t'í°p\ÝËi’ƒX€62Q†ˆ!h¦ ÊNÈÝ»o&Èv —@†4ØÔ}ÿà Âlþí¹@Ö%²Páj_;…˜£µ6½í«ƒ›¼`IÞ!»+ 1,ŒããLPr¥‹ÏfÀÜ®ÌP‰½ÕK¸ÈàI¤ƒsa'ƒÐ9XÑqCW/¶Ò_€7dSWÞÃZ•+è+èYêø7ä‹…%” .8øËv×ió* •pÙh½í*‹ðÓ¸y ^eí™áXÀ3áŒJX ×á”/8zk ™ˆhŽË@;Wà˜OC°'N?+ŒâŽwy©s\{„Z—À+A2±…{g H¨£#°xÑSBé´673A¶‹‡aøiûZË.²¸_¢º<|ÿâ¯=Z;ÏM¾}MCŸ+_—®ÁF‰+T‚;u%*ôLˆ!ý3Ç+W6íWû×a÷gø‡cõ(d ø•€B* ˜Gh†l¨¤',r·+† µ·2ŽsŽ€ ,¤v²‡ Xð˜Z©‡†Ç+:ÇxVjL +´h98y[Ó=[£ždg¿w{Åó~P ÝT¼czK– c]ºR Và™i”P¼¦KŽ dŽ \üs º·pº£+“`8®÷zøÓjEˆ—P0VØ>:¦+Ñ·?iP¡†º2|ºjK£p¶vK'0ˆó5íw4½Rƒå8¨ƒûÿ£ƒi +H &Ð~G— €&hI Ãk/€˜9ûfO-ׇ˜xx:Ö~³…›Ø‰ºƒcH³”È+üä?™eüseØcJ¸‡Wµdshé– J`…(c§¸+P9àz²8dpe3¨ŒÝdƒu”c9Öc—pRNˆf.ày9F0ÁÖjrjؘ •0yõÆ+8y{öV°‰^ChзÈ7JVgç8†76‡ü3Gi·G2EØzçx>s}¦g¼¶4¨gЏgHÈ+yF™ÐhÔH‡‹xظgS˜[utos7 Y kxŽI@½m¼òcì˜ Ð7»Âh'‰I€c/ÿSŠ)¤þˆ>©gæˆéxzÁØrŒ¶‰çsÀ£}h"PWÕRhË¢ˆ‹f͸»U™T =Øøw|žE„ã8‡(‚Y¹0Nø+íèvðødºrh,)J¶Œgɾ‹ºâ8E˜„k8‡E˜••% íøzå·h°—í‘|³gHt"™,l4—ˆÕ¸ˆW™•¸¨sfsoCɃº†z‚™/W–HÄ’»â¿h<¼ci¡6D™0š8Iw¥hX`­¶+–¶‹>¦oáåE¹4Œ†cB¸[A$Eè”n7ٜۦš' ÏWŒ€Oꈡ¦tZ –+CŽJFu˜õ…×ÿù5W@v:teli"p|%°‰èS Œ€›¶·ÿd­é‘7‰vמԗ„g@Ø—éz8†#Ð~¼”‡©+È–—'ɘcˆ`,g@qÐE•´ÒifÛù%5í§tUZ‚h…z"%jý‡^ÔGj8f±5|Õ~ãtq&€¢# ¢³‰šVˆ&p¡,´›ßÙcàiâ¹hPˆìœºÂhëéH8&utˆ?É©c¨§#•Ê•uU ÒTàx]ÕV0^É?9æ™@McI2J dÊ”c”€4Nh6é÷¦ ºgFK˜cݤ—cf d “c•°2 W¢¦Ÿÿz|me¨`:Ú·fí—c9ˆ§:¨=Ž€˜Öl”ÐzŠ=v•ÃR>Á⥚ª=bš¦Ÿ…gè˜ÿŽzm¨—c[À7ØxRjZoJpŽ G úxRµJ|·—“žH9&{¸H¤î8ajjet …¾‚©ÐS(Mb– •šVªf´I2— ÌY,’)8iø+)v,"eƒzD›xb&¤¦–4P˜QWGé·+åÚ‡4¦b$¯À‚NTbŽa0qös”ÐcVŠÜÒ¯öê+&fN±é¯A´S‹®öƒBý°¼¢±ÉÖi²®Ò"²Éraãª,I ‡ÙâCDœó-çhVÿ(°áz”àyÒC$×<ü³fƒc?HdÉ_+Û1@²øÂ^îR³GF4`ž×’®þÅ¥ ¶µ\K4KÛµ`¶ÝÒ) P¶f{¶h›¶j»¶lÛ¶nû¶p·r;·t[·v{·x›·z»·|Û·~›dû·‚;¸„[¸†{¸ˆ›¸Š»¸r¸Œû¸¹’;¹”[¹Šë¸hÛ9°¹›+{ûl S0!`¹¦{º¨›ºªû·˜{¶o𺰠 ·UÐ l›’0 Cà¶B p¶ E°ºÄ[¼Æ{¼‚Ûºf;0Tlp~à¹wû P»m ºë¶G0 ¿k¶0 Oÿ€¼â;¾ä[¾g«¼e; ÀN<@AÒK· ˜¡ ¶›S°T °»e‹½ú›‰€¿‰Ð øÛ U’PÀšP¶D ‰5l¾<ÁŒ¸è›8`l;:½vûÀO £`»O0 ‰0 ÝË¿f»Q0U¾ P1üG ð&|DP¶Û QcPÁD\ÄF|·ŽÛƒ°ÄKÜ 2°\· e+ ¶›ÂR 5¼¿Ùk¶G0º£0>< ¥k¶ Ã`¬ÆGÜÆnüÆh¸ôÄPlƒ€Lü `· °e ¶K’0È’Ðà ÀÂe« £ÿ  ¹KÆ °½g\¶i¾kìp|ɘ\Ärì;0|Û ~ŒÀ¶;Èj‹½Ã{È£p Ž\£`Éh< Qp¶œÉ¸œËã»É2À¾ Ê{» C0Âö;Æ ceû½0_2 UŠ0Æ^\@н ²|˺Î⌺›|ΫX|ë5 Q¶ÌÎÚ,Â&œÀήÜÂl¶÷kÌlÆãüϹë@nPÐÝm+@°Ð -CÀÐ }Æ@ÉeKB Ëlû%|«ÐíнÐÐ"=Ònë¸À¹›K½k‹½Îu\l¹,ÝÒYõÒ$ÿ]Ó6m¶ü¶©Â̧»Ó7ýÓ6Ó@=ÔDÎB]ÔHÔm|ÔJÝÔN]¾LýÔR=ÕªÕT}ÕX-ÐW´¶š‹Òï‹· ›Õb=Öç»Õj »±;»yk½dÝÖY}ÁÌë¼ÐûÕtK½líÖx-Õp½¾ìä¾v¿ó[¿1<Â8œ°ìŒÑy]Ô ¨  Ð ¨ D}Á¼Áœ<Åt Â"LÂ&\íLÏ´L‹Ð¿‹]Ôà¤p ¤ Ø?ÄLÜÄt,Åt·U|ÅY e £i|À§-Õ ®ýÚf=ÇP,vŒÇK¬Ç|<Ê€LÏ’PÆClÜMÝØI½ÉìŸÿÊ£ŒÅô\¿%ìÛÖŒÝN­ÝHÍ˾ Ìz+ÌÄlÌQ@Ë@Ô›ÀDSPØèMÔê]Ôå|Îî·êÌζûõŒ©ìŠœ5üÝß@ýß•mÖmÐn€ÐlËÑ íÑ-Ñ!ý%}·©¢Í;ŽÉ,ÔV}äL¾¶InÜl‘âM>ånûä7½äTNåVÔAžå^ζÃÒPþRþå^žÚ«Ë@å\ýâµ]ÁaO`Úfþ¸ýØ‘=ÙÎægÖo »ˆ»ŽœÐ¾ ¼Â ·wÿ­ 5ζSRçY×Í;Ts¸Šþ¶ÛkäßKÉnûý[é1ζ÷ìèS¾×ìë×u õ ¦l¿ø»»Sà ˜±¿û¿˜À\ÀœÀ±¾À ÐÀïÀ Ý :žš@£PèaQ¶É®ë A½CÐìƒ.ê‹mÙÌÁš=·ÄÆ\Â'œÂà  EpÔëÂ0,Ã4 ¾7œÃÞÎÃe ÄBœðÑÈc\ŠP½‚m»@p}|ÃëÇNœÊÔž×°ÛN Å´m··MÊô [ÜÅÄ^ãa<ç Î’|ÝÛ«éf›è¼¾¶ËÖwêÇ\[ìÀ _íÇít¬ÜwÿœÇ{\·,?ÞÄ®ê„lÈ•n¶ŠÌÈïϳ òÛ[܉>Êÿû&_¿Û<ècpì„\Ë-×Ü;Þ=àxñâ½êh« £¬Ê¬ü¡ËŠÆR_Æbžè–àζ{¿lo¶ @ú< !>õ ÿò½ÌN¿Ì· \ÂmÌÊÌÓ€üЪ<ÍÕìÈØ‹ÍÚÌÍÞŒögK? #Ä> E}œó]Bàì>¯ @ðª¼Otn÷oýòæ¨3Ï@㈂Q [ŠŠ’‰K®¬b®‚MQÚÞèZO­N +M¶ÁŠÍ#®Mä\ÆèÇN"¶®0Aú‰N:1ñaO°Kú‰›£® eÿóÐSJŸ/"â bHŠHZ žÐ$d Ѐē"ŽWj¸Õ¢z B )Ìú"‡ öz–¸$d‚jŽûð±æNF e˜±Æoì¨o¤ÒòÁC¦9?Ä;KqäÚ[oJ(÷úò. | Ã=w³œê¹Í7Cz ×Q¦ø&ÔwsIK|7ŠQŠØóuä¥ÝDec4¤"$š"Š ©1¢üB®ëä»/JñPI-UfWYÕˆ·CÊUW!xuÕ{ø1R<b‹•– d¡•¨ÙœžÕ?¢ûÅO€™_F¾néÄ[tIúø@‚‚ì)xÁÓXƒŒÿ9øÁ¼x„#¤‹¶˜½]„a#a âAŒqæ3á˜ÇðIÍ…;|aìT›ÙTèe1{÷xxDúÐ ;;Ž–4¡I; è„–èÓ‰æ (›X;‘@$NЃV[O{RÈ­u­?£HĈŒBDHDñ”ˆ'("fa|àüêæ ¼Mȉ1] 9…QTA –kÖ|øˆÁåÅÈq4²Ž8RÈBŽAŽ’àd¶c¤G^py¢“R£@‚ÉQxrK£ã@2J.MÆ©Hn—,Ý%p?@`I²AP'‚%—×¼E™²#Ñ‹ЏÔ#Pï!F#S1ÿ>Q‰ÏT qߪZ¥+.DV?ÀÕùÚw>kJm~õ[L’¿ÿeg'þ‹ç(ܙ΀‰p! |I+A²@†ŸÓç@ Ê‘‚T¡IèBÚ±ð¡MbD)zQ‹˜°X98#F­ ÃÎУ õàÊ‚ØÑ‘>²¤Åi"J2M4â!P{&(pòƒåž½HTïzyØ^÷ºP£ ‹ï{•X¾A¤EY„¹)‰=âP‡õÖ} bR6´ì(š`.Bx`#˜ºyÐ3ŽHµ9ì)N¦à‰æ$ (‰˜¢v¤IŠ!¶"ö*O «(¨W3ãF¢7…!àØ:ll*(¼%¶°a7‹ˆÂÊú°²ÿa2klãÀ#PD! cˆ±Œ·j·»y•¨ áw2V)9 .ȦPYð(}…|r„«l ·Êˆ’‘³dF‰éL¦®vu2™"³å.Í£X³y$Ñ7§f”‚•ìä®C²ÃD®MÖn¨èÍÅ!ªtxíÈÒ²ÑBBðƒN4BH¹»lf‰N´ :‰ä“ g­§˜íÒ)jþtŠŽYÚQg„kñDuRÛ#ZEÊO`êQ¦4Ì¿gæ‡×½†³çMò©*·®‚•¬ˆ›ÞÌV!¹í¶_EmÁ×~ Qîÿ|•vëïÝè¶ |áxÝìZåº>È7½ÝboÇàÿ÷ÞÀ ž<ƒüu W¸çæ‹Â† œÂÉï~m™Ãˆ»«¤@Lð–7RD¿e]+å™Ç¢a›vŠUNI,G‘ojÆCuéAnœcœ0ÙïÔé\ó [T \ÍrÞLž.:ä³ö/ÐÇ;ZI•ÎÇsªÃæd ØéA÷דH9Ø@àÑÙ4þF1Ì­?]è³uHJ}êT»À5ÚÓ~¦_;/Øö(Š=hóÜîw/“l±ÍMö}“Û7LUFÌ©xU!šð!T";ÅîzÂX#ÉüZ'ŸÁ‰WdßýÎÖu±úyË0õSýêùÕz×ë ö±¯— ?@û¸Y°N°Õ¼@zdÙɸWwï{ $  xà‚t ¢¶½ÿ\ó«Aæ dßàBjp?KŸZó BîÀ…htÐC’Ú” $ü Ðpð¢ÉæømX­øyCþ/h.À#H€.°ø÷C­D‚1¹ð«¬ë ˆà±(°´8š£:Ò:ÿS ̾ø‚=@?P@ƒ…Ÿû3þÑ+¢VJ–D@ DR$Fê@ŠQ¢ øí3<Ð>$ˆÅj:ù[Áf!XA¹7Ò$»’N³AÕ!ù,‹@|㇠/= (()".9--0&0:-04,2:1.63-911453:80>99< 3O5V6X8X4Q7Y :Y1F0A>]>c+7@,8B*>N75A:4B?6I>=B>9HA^B`EbHd(FZ!Jf%Mh(Oj'Pj+Rk$Vu"Wx"\1Vn3Xo3Vp5Yq;]t>`vA9KO>[DDDEEHKKML@WNAZNNPPA^RRTVVXZZ\RAa[Hl^^`@awCcyHf{Ki}PmaKtfMxgPzkRbbdffhjjlnnprrsvvx{{|Z_”`•aˆek™ n©y´}º `†!a‰ }ÀOl€Qm€Up‚[t…^wˆ^xˆnRƒrV‰vXz[“~\˜czŠh~~~€ „ÊŠÓŽØÜ…Æ‰Í‚Â†ÈŒÓ‘Û•ã˜ælŽn‚r…’vˆ”y‹–|˜ƒ`h¬‘h¯’i±šn»œp¾ŸqÁ¡rÃ¥uÉ©xÏ«yѰ{Ö‚‚ƒ††ˆŠŠ‹€™ŽŽƒ‘›ˆ•ž“““——˜šššŠ– ™¡“¤žž – ¦˜ §¤ª££¤¦¦¨¤ª®¬¬¬¦¬°«®°´´´¶·¸·¸¹ºººÁÁÁÌÌÌÔÔÔïïïóóóÿÿÿÿ H T(‚*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç„?ŠI²¤É“(Sª\¹€Ë— œI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“Ò”©´©Ó§P£JJµªUžL¯jÝʵ«×¯`©f K¶¬Ù³hÓ %e锪TcÕÊK·®]§n-9¡÷®ß¿€×=…j€Ë¾‚+^Ìê)K/7žL¹²eš§(Eu¹³çÏŠ3oMº´é³¢s>ͺµë«’_ËžMÛgìÚ¸sç¾­»·ïÎ C²N¼¸ñãÈ“«®¼¹óçУK·8‡õëØ³kßν»÷ïàËÿO¾¼ùóèÓ«_Ͼ½{öÕ#ÈŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨àñ-èàƒF(á„Vhá…6Xß x€† †(âˆ$–hb„ÊÇ!† ’FLÈ‚'Öhã –@C #H˜‚ 8öG 4”0 ®è¢,È Äá¥Lä•XfY_ ’Ò ²1ƒ}Hü¡å}â% óÉÐ 6$ˆ-pF"6Pà Pi噀Jâ ’X  FØWB ‚Η‚$`Ò—Á›<rÈ !Šð '}UÀFzÀÁ’œr &=Ò ŠªDÿ È)¦tRe£¸æ a "É€Ù ò lü! ȇB’HBFŸÊò‡ò±pmG¶í|ŽÑ´~~üÑl~%@+ÉçþAlÚ‚9F´°‰¦¾ ù~øAé œÈ aÈ kxZßzè!ÇyH€ )HAŠ$ Á FŒ’Idœb†§ÜªëÊ,h ÷ƒ¡ˆÊW3´EÐ I¢@Ò 0° 02 úf0ØÊÇ 0±3É’ ƒ$4žmù‘‘/ a8݇|^Ó»s F0Š HH2 \ÀÄÀ}°Æ"˜Ðð§óAÿ ‡•Œ°*d\œ-ᘌA&جrËGΟÎôÕÁÍðFÐ:›[y¢õ!Ñ´’!_|læ±BŸ‹†ví ±G@( @búÕF¬«ßÕ\ÏÝ!2ÐÞë±Å|,œÒ &Ð_Bò) $J lrúã’wï½|”ÏgùÍcK£Üg9}¢ËGú˜$cK·$·î ÊJb†¡iŠ¡3 çb¾Lð;IO>à äC¬ Æòè±åɧ§ÈÚ|:1 ùøAq™Ðžæ¸÷½¶,|DB*p³¬m.:; |þ:önjÇZ·ÃùРµcWÛÿà‡@ìÁ~ç*Zë,@8ÏExõIàK8ÂÅH ±¾É§‚ôé„(`#”!ŸèÄN¡86œ‚*  MHG\¡0{èÃÚ–¨jŽF\b J Bùð(0WJ †?”€|p$ °V?²-qkú1ít¦/.¹M>) Á"ý0-­IBm4à|, # a@‚˜Œ'„C ¡ö±‚òè“‚N¨êfB™ª@q½ lBU£ ŸêÈL;rLxøª\˜5øjYÂóUú"À‡hE+}&ÈßšÕÃJšR†õñV´Ø@ÄŽPt_´Pi¶à!Z)‚@†pÿ%$B ƒø€”ü“ÚÍg,ð]¶ØÌ†B. Ý) ˜ ¢‚èûG \4C ´Ï°F4áp¨JWÊÒùÁ’p"‚R4  j©NwJǨEjA4å©P‡JÔÿµ¨HM*RªÔ¦:u¥L}ªT§ú½¨RõªXÍ•U'D‚ òg\Yz% ÐÀ«üëJe*"³¢µ@dÀV%ĉ°E ckÛ'ë“N 1?¤ëRÇèG¢>¬.?Jƒ ØZt¢2,PðÓÉ ® ꥾*´Xû8²⃠I€‰Nh0(˜k„6¶¾&Š “0c‹€Qýÿ #A'æ…X IV?ŽEç&ñWû”ñ­úùmr !×FH³"®q€\ÿH×HAû Úû€ e"Vý¿<­ jKa‰°!†*›|dÐÎ1Š 0ø.²%#«†Ž- öÓ‡>0öXHèƒÐfÀ¯BZ` ^š×wÁ4æÂ°d°@ þÐ >ük>l8Bfçß/ɇÁŽÝ®•(1pâ]±5‚6,j¿l˜V ü³úÔ6¶ôE2!™`ƒ¡Æ ?´l8ðÄÐ3¡€P΀ÚЉ? ¡Ææ²ý‹„€×Kj»r–åSƒ?ôÿ Øì¹x±´¶Ï&:lÇò!ÓšÛÄ6ͦK([]¦Ï :±2øÕ|è„䛦p :Áo†3±}(t_MÝNø•HÏ&6AêŠs¬äÿ6ƒÇåÜe3{Õ­F"v‘Õ‰BʧÝéf8&An1h¶—ÏVc>-rW߇¸)ðC'ÆðS‚Sº>½“:‘ùHbl3è Ô8N4 ›tU>NG Œbí|Z ¦$òá»vlXåc´k×¥Hfô«K)‰¦‘A{,`h'Œ0í-œ¹$ˆÓÌÜú(›^fÇn{×X‘!`š‘Æ>ŸËg~QqžO2AìV>™(e±F yÀy¢ø—d§^õÉ÷aêJ.üì-ùŒä¶ËîÔµñMtÜtã bõ{CMûQîXè™'øb›íô)¾þ€DÏÛnó­›ÿÀnö‰Ï»FÑí#]8óþé¼ìD&îq›ÉÔõÁ«öI”R¾mG@j÷D§7uõ× #3nÙ"ôq õWCha›P¨—€3¥åqF€]¢\PJgã&Cxv¡çXž–5Ç)À8If(œJ0¨d‡]l"ÈN‡Å _¶[¦V,fBõg&¸Õ ða¼×:{€´3x(¨/Æ7uDÖ8QØ„ ÈàJÓwb8xèq}€Q( õ‡D/¨€Jc7 …D~4|c€ ó!pøÑ~V¨oðç(ØWHpQ&@:ÈtÁU8îv“ÇCÌ…ìÅ1jÿW—6öˆæw¸J#‰óÑ.&SÆ'“°”8u?3qÖg.ÖB£7(Pe%èxÄ—‚3v[§/0³tlX\ôÒjc]½ô†ˆ Õ{à\~°þ'„ÅXs€VPøöV F6™ˆ&`ÇZ¡7|TXv\È—g0vË·Y¤¸XPˆZH’0 0PPf·X>mhWä×#ÃgÍâiº˜‹Ò÷~!5 ½Ä5íXP7mE€J7ŽE%Єaã-d³:GÆ# ,¯¤3 e$} ,€}ç#BùAk’ góñ‰PœÖ.“€{%à’F [gÌÿµ˜€3À f2mgEŸ]æ’4€€0jÝT(z“N´”MIš5™ðyx% ™`sš³t%mFâXù†G;9y“`lð‹€[0b€QÓ8nc@Ö6¸‡—f^ƒ× …ŽU—wén"Ù…2I“y‘ÏduP‰rH$•NÙ%›gq6ç2x'/›&4dpó‡ö±{È…aeSÀa€ot„’€ *T`$ò…*’‹Sf$ €gù—W·l õ‘ 0·É&ÖFq`(§€éÂKŒCqfbxZÆ… h›¦€+pvÓ) ÿgyž'žšE–G‡iØeÛõÓ :° ‹9mjdšçi$GXsɧoö³œT'Mh&ËÉs@4}»]Zu€oÖ…$sžÍi› (göIŸhžãéq“G™.¨FËY0€ œÀv( 8’ 4GPž'6𸡉%C0wçâ”—g,Åh£ú1aÅÐ*{’6ú–õQ£ÈÕUI FZ$°Qh¥þA˜u.x¹‰éè>µ#£îS±n¦5O ¬D>ŠH*)<ê>Lê]Rúß&$°…£ 2BÃ6ef ð:‰Rå“U ‚]þF }9†ÿê><÷mÆzÚ¨<¥{¾¶VJ©«Ts©ú1©šª¢ê  :ª¦zªR°ª¬Úª®úª°«²:«´Z«¶z«¸š«ºº«¼Ú«¾ú«À¬Â:¬ÀªªÄz¬Èš¬Êº¬ÌÚ¬Îú¬Ðê«Æúª ðÑz­Øš­Úº­ÜÚ­Ë:­¬ª,â" Ь:­Aà­ìÚ®îú®ðЬà*®KÒ$OÂˤ€¯«J –@«=` ¯[°{°Ï:­q"Ka'x¢¬úʯÐ:@«Dp ‹°»±Û±³:­•r)™"›Ò)¯ÚwÀw t`@ ªB  ¡ *žÿ€«ú6»¯àñ¬ú ”@ Á  DK ¡@«Jª ë±R;µT«­ K0ƒ0 Ã0<ðª/1xPy`CëN@ @ë ®¡ð¯Qp Rà§À³8àžð¯«J´Nà´N`AÀ·DP±r»¶Qµ†{¸ˆK¬W[7w“7 ãµ,‹°p •QP ¤°ª:R` ¡`–à 9˳ýŠ·€¶y+«z±!ÀªC»ªOp Q›¸¶{»¸«‹›EÔµ®úµZÀª:p wk –@  § •P¸ž  Mkºd‹º¤Àº©k½® »x{±?»Þû½¶ÿ»»Azã»­ ¼¬§€®­ê ÈkŽº–½ÐÒ믬Z½«»ªAp 8Û¯¡Û³´ ¾\À«°WÄ»[´¼¬ê ¡ðà¬ë žðýºN:@ t‹ó‹¯«¿×˹§@:0°P°¾à ÒkÀ0Ãï ®!KtBK¶«è˪9à ¿´û´¡Ûm±¼?ôɺʭ|¯±:PŒ­[ñD¯ß*îË,̰ºÕ×z±Nÿôð ²–òÌ:Í®ú£àï=`puP]ÞR@Îmß³¡³¤PÅ àÄé\¿I ÅG›´KÛ´O[»Z?ÝX¾Ï[›ëA`ÁA@åÚzy ¶'@LùfN dÀ0 @`çM ?àÓKéÕTlâ¿Ñ}nÒ þªVoöß`ù‰ºo‹³ë̖δ®J¢ ·­{ ým˜«³X½ú?}ëh û¨+û-˪¸où²±êÛ·íëÔÄÿÏÚÆŸ¿mûÔ™ÎüŸíü½[õÑïøÓå/ݺϳkéÖkÂDÅ$Ü¿h @KþÛí ÚaÀàATHÑÁÀ@=tB9¤©P¢r¸Ñ¡¥… ¤èÐqŠJG§¤,IEÇN9ið£Bœ9uîäÙÓçO A…%ZÔèQ¤I•.=À©SC ä€"B Ù™#Ô©S?FDøàë©P¡p4°Ö!O`Oé0@ l(R+ >{“]°Ÿ˜&\Øðaĉ/6øjÎ!‡”$R3èƒR/æhxÝŸ!t„`\ÚôiÔ©U'v jÎk5Yÿ]ÛömܹuënýZgƒÝÁ…'^ÜxoãÉ•/gÞÜ0rçÑ¥O§¾zuìÙµogíØ7wðáÅÏy§‚ËäÕ¯gOܼAL !J|)(ßÛïçß¡ùøèsÀ€%9á¤8剃°$ÿ"”0¼ëlH¤*2$`3±A)"`2ˆ™&4ñÄé®ã¡CÎ0@CQ„‡²BÐ ³ˆèàŽ:êÐ °$­A:#O ú᫼PtòIÜT\C3á CnXƒF„F¡â  æ‚(<êÈã€p¢D~X³"€0‡S,B¦¡ÔsÏŤÌðƒ5q‘€-qzÄÿ:Ÿ‚”±ò2 j€M&uâ )LŠb£›øôôÓÁüÔ« ˆŠ¡„’±$ÂÉÒƒ`5È:-± PsÕµ(Q3$•P.êáO(!¥Iˆ\EHÖJOÁÕ LíÛuZj}ªðFÍp ‚b€”¹À+Yo9S)ûH¡D‡¨Jz䦫Zzé5o* ±ÒŠ«œ†4à¶ÈS.°ôZ-ƒÖ‹”<ëu8×÷ ˆl²ÊÒ+-³ÖX׈+•¶C9Tïx’vd”Sªc•[v(–_–yæ¦J¦ùfœ ˆ9gžCf½žƒ®7âøæ«)üôûé)¤è§ QhÿªW  4A¤dpÄ}‚Â.½*iÞªÓ>­Â ­ÒCAœšÄKjrY"¸V{oÅTdqÐ cœ±ÆÑäȧ p\Rê^,Vù6')©´Ò,µ Ö /ÖaÌ2ÏLsMÑߌsÎ:ï¬è Ê "Óy©8å‘ H±¤ÍS"ù¯Œ=ñä"Ü8ýúòl6€‡5þ tPS:4ÑE}4ÒfëNSM9^rÎ6Èx‡ÜȈV)¢Èt%éÐ{ìõê* _ÂPu¼Uµ 6”b­lu«÷áD~ ÉëR+[]Šà:…ÿ#øAþª€V±Žµ-‹ÎbßÉ€7 †e~¤BFQÁœè€/ûà鮕-_m‹ 8ùV¸d˜B0À\R@—AÔÅ®ø^ò:ˆ&>ñº(1LNÈj8Cá¢Ð¢"¯4=4ݽ¨b}mE'þ˜C&‚ \TØ‘òt„Q„`Nø¢"RÐå,Çcãõ"61ÊXæ4L èÍ4Ò‡Ú[ÖÇ4ùÉíÄÌ… $etvVJTJ甩d¥u8ÙJX:g•±¤ån~f±ZæÒ6D“}FɘD&LsÔ¤¦ËF^-k:jä76•ÄmÈ Û0ÿô¶}È4œü7jöÐo-zQàdô:á1lN¡°Þá|¤C¢….:ˆ‹<¡KÈЉ’³\(0§9ÎäsGÝYJΖ¥®JWÊÒ  Rà@¡€ íÌt‚LQ–cÀó‚ËEñ@ø Ú‚7<}yÊcžó g€þU¡. õ"‡6/s1ȘΗ–MñE,8€‚ŒÅ€LÁä úì¦4çwŠúÝO%ú‹fÿþ7Ó‘…€èLØ)ŠDŒ<Ð9 Z†Äú ¬&…ß ùE»ˆUƒô VS¦ÕRq5ùŠGà„I2À¢ UÏ1•0Dˆ[ihCÿJp‡vEÙµ%!âdH0VT(šØ¤.¡ÀÁŽÅ ˜äqA›±˜Äl±‹oÍH˜ÆXÆ3þ <¥¬Èܘ¯¬È'Æ‹Y–‡Ä¿ÈE0¦‹'Ø"´0j!ØLhûÔ…)R.í­o_)1ÉD—G iF”ILÆ’ßùÌÔº»±ŽÅf6ï¥ïQDY_üe–ùåoOöÛ_ãä¿&ð€ à[XÁ:ûnÑ|¹à+3 bæUóøA¸jÖt[†à¦ÍÅx¢SVÛ8GÁqU(Ƴ§BauJaGJ LpÏã9$w È„«L¡«kCƒ’цÿ‚QðjÒ2''S"à´\(ò¥©LxhAïª=îyï¦À: P£ T&GŰ•ñ°(±©fY@N@¼\Y0wï²d6JX˜h„-0ñš<ñÀÀf9wNhž54À¼–™» t a:éôõ Šf´µgl]–[GmMnRéAS"¯ý–'^òqºÓx~ÊwðÇàòË(É L[Øâ%q&:XäJ²Œ‡YÓú18dÅtÒ’D»XŒ6IÌ[^£ÄÂx´«ýoW;Ù|Н'uR’ꦻ/Œa±º«kÞq?é¾<ÁA½í}ï{ÿ²0 Àw¿ío=àÿÈøÀsYpƒÓá ‡e‚N^MßE!B¾öp¡I˜Â[SÊÌŠ˜Xbø§Ûöè'Å= 7I%—Åç<ŠŒiLXûÓ ^¸ð .|îXqù’‹ñ “b„å/?Ñ꺣à ÊMl#œ\Á,és¸“×D‰G¨E£Ÿ ,J¥@2½éŽ&€MÁ§b¡ˆø Æ2ÈRé’=tÁ ðH^>çÀyyQœ¦Ú×^냄yÏFŽûˆ)1øµï^ 4GBqvŽÈäÐ,%¼áåÍö F)r7ˆªÊS¼c¡ò ðæ¿Õ)[±DÓž7‘eC?êј"Rsÿ®CR¿úÖoð[”hE?©GŒ†öµçä­¸/¥>‰€Q§äõ@y²Þõ™¢ñàc‚ÏåOè‘áuvNÂM’iWÛÚôÖÁÄyBƉw[ý=8¿zàþð7§Üó=·»Ó=bÔà>ÿ“‹‹Ë¿ê˜·ð7Ã?Ä`ì·m3@ýû. l¥…«ÀMB< T8 ÜÀRr8d£ˆ{°Ô&÷ Á=Ñ8­i¦Óp9,9 4 ¹&˦dª„ÁeÛž¿‘¹C ;è92鲃!…yá¾| Ox–%4' ë‰'ËAñp:Öi(¸ŠŸÓƒ:¸ƒ/x“02:’’¡»i’’°',M$ã(*¤¶s;œÊŸø90ˆ0–M1'H*X*±8ÕP÷23¡zCðÀ+>3 <ȃ 8ç+ H«ÈĘˆ¬É ±ÊDÜŽ€!ù,„OƒÔ‡ (7/=(()".9--0$1#&0:-04,2:1.63-911453:80>99< 3O5V6X8X4Q7Y :Y1F0A>]>c+7@,8B*>N75A:4B?6I>=B>9HMSzA^B`EbHd(FZ!Jf%Mh(Oj'Pj+Rk$Vu"Wx"\1Vn3Xo3Wp5Yq;]t>`vA9KO>[DDDEEHKKML@WNAZNNPPA^RRTVVXZZ\RAa[Hl^^`@awCcyHf{Ki}PmaKtfMxgPzkRbbdffhjjlnnprrsvvx{{|Z_”`•aˆek™ n©y´}º `†!a‰ }ÀOl€Qm€Up‚[t…^wˆ^xˆnRƒrV‰vXz[“~\˜czŠh~~~€€ „ÊŠÓŽØÜ…Æ‰Í‚Â†ÈŒÓ‘Û•ã˜ækŽn‚r…’vˆ”y‹–|˜ƒ`h¬‘h¯’i±šn»œp¾ŸqÁ¡rÃ¥uÉ©xÏ«yѰ{Ö‚‚ƒ††ˆŠŠ‹€™ŽŽƒ‘›ˆ•ž“““——˜™™šŠ– ™¡“¤žž – ¦˜ §¤ª££¤¦¦¨¤ª®««¬¦¬°«®°´´´¶·¸·¸¹ºººÁÁÁïïïóóóÿÿÿÿ@€ÀtN8uŠ Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠ9²€É“N 0Ag€‰ QÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£Hg¾liÒD̤P£JJµªÕ«X³Ò¼Ø£«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·n\®òêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇ#3Æ+¹²å˘3kÞ̹³gÅ”ùfXBÃçÓ¨S«^ͺµåÐyGGaäÈ̓ šcœqÍ»·oÉ*rè@‘ÙÅß„SäÈ¡"ohÙµ!€âˆÍܗѬª€¼»÷ï|U`ÿ24¨Åã88ú6)Þ/Cäc8·Ø#¯…A@ـͣTFÁÚq×Þ®†&DfÈ}©àB‚z¹€‰yzQfA‹4ÂÆ'‰ $A¸—v”q vL€&­´â q9 ã(Ò +£lGá@^¦B!†`RH!æ ’C^JNG…`"Èyµ0&˜¤A`”†BH^1x)‡^)È%¢!Ç•„47„B%`*\‰I o²äaš‡–…Èç!EYÛl8‚Äm0Â%òÅ €àQÇx¢JK¨‚ÉM’é|2A­¬±D+>ÿ)묋aß5ÔÐàƒyñz¥9`á– C qL°B † Qƒ àÆ—yÅaH K»*&MÔ€ÉnobI`iƒÕ’W¹| ëÂþC˜àPø‰ÂaRpDòa”š¨×¥vpÇ 2¦‘†§`*ìI*|2J¯±ÒjñŃ»¯øŠçƒì¬›CÈWÔb€ yÉ!Ȫì9™ì›M4Ñ ¹„Äpó ¶€%,{»Äœy;î|Õ7Á†úžäÈI[ zÅÐÊ(ždÝɪ­˜ò°)˜JËclöÙyi¬Ǿ¢ÁänKXâÇ{¡œ—Êé­úec®ÿ:sa-D‰É ¾wF°)¼ +ÉÑä‹ÒÓ&E½×¥Tç¥B+àê5J&yñ'cƒ\6Ú¨ÓªvèMLp¯à†| C—NÙºCA aŸEvÑ€†3ŒbkêƒuM¶× LªÒédûŠË.a¡‚0ÈB ˧DÆÄu÷‚ƒQ" û\ F±öö8 JþÄ0<»QpÉêõMƒKA½„y¦9¸è X eö Bÿi0ŽöBaL€Ø*{Ù<‡t"üÅ„+ŒOpË ó …ëa;úy£„–šâ§ŽbŸËÁÚ<ŠÂÑ£Ò—×piö‚ÈF.ñ‰—7Õ'¢€y9ó˜ ½›Lxù Ýa’Õ· oÅ~ù© 1 4ô²Á|Ùaz00 'äêÂqb >4ˆ‚J-ºš ³´Ux.˜ÐIõrbó ×€‰®ñB¿™—„»ª¬®S\BLP+ c‹"G±„&ªÐGM ªÅžò…È|úöT'ðOzâ( Ÿ0šÃm½@\âZ¯^äð‰¬À¦yùD ™Äá„ç@½‘ÿÅ¡Êlg3|Ì&® òÖ—+å æU™ !J‡ÂÒ,ë²yj€#œ7¨Éê+©4^µ}ÿøÛáÞ‹ Uˆå]œgŸY&ôœëo{Sm €Ý—¦ª—/ÈÖá(ˆãáK_š= v; AÐqg¢„lÝ€’#ݸqKäÌvû(TÕe0­}/p;îþÙP(!䂟Dzé%LÕ@E€ ˆýö.×ÎñàÖøB/³@D^gü½ ~ÎlßNLùÆ| ´ B¦‡–òüÖû¥aÉXÂíËCýÿà‰;ng¢€]OÏÑà ½ðù/f~†>©˜GŸM¨ä R0{cótaw£m ÷;GÕf5*㦦p¦n¢n‡§€¨urY°ôsy‘ à€Ìf,ötnÒ%{Áq8ÐÏåy×s¢71ÜFm‚r+ÅV~@Å''†KµCèÇPú‡H67IEpw»„¯¦ß´J gíDXëò ú·ÀsmòÁsÍçmÕ…ÀmD‡QˆPÉW…¸˜ 5 ÊÕ2è6æ7O]G<§^Tra5HƒK‡vô—ö÷l™0H|ÖdJÐĆ •*`|èb&ëÿ3Á(%)f*“ •Ôƒð 1Ðö¦…¤R:€áb˜À^z¡ V'™s* ŠKPS€¥^GžÐ8 ìÑdå´¸T{¥Š9ІÀa\¤- r gÑsŒÉ˜…ŸP™p*pŸk Sl*0eͱPs†?·Èp|¦ƒ0Sx–ä„]†)e(só¨``ÅoYXxÊ·Pð(hæ‰Ö犰‰“ØDÏÆŒ¢¶<ΨŒãAqr¸^Ès¦'–,i gz|˜4‹±Cß´”÷J`Y£ g‰|˜à ­££Ðlõ"—Ɖó]‘7)°wãÿ¨Ð&q°x|ñ ÷&œ'“Pöi£ðx¢6xq¢Cóiì‰7O!÷xÀ81@aƒàÖ”˜8ê%[yi]yQàxií'~×E<Õ”&ƒ¡`M¦> )–Í|¯&ttö7EÙlya|ìQ”¶6š£%ú£B:¤DZ¤Fz¤Hš¤Jº¤7¤*Ê!À¤R:¥TZ¥Vz¥XJ¤Nz¢ 0µñHúU€¢F`Yz¦hš¦jº¦?º¥]ÓQ`¤V  sj¢šÀ /*œlú§€¨‚ФNŠ0týñEZ§wÿzBð/š­à§ƒZ©–z©˜Ê¢NÊ!"&!"$¢¢2ÐaЀ š#šà§Ep 1B =`¢•«vzSÀ•p¢¥  ªÐ œàp ¿ª §&š1r š©Îú¬Ð:¥›º(ò(‘2)A ¢4€)~°p¾:S  »:“P¦§ §VÐ W0­p«=0¤ §&ú«S ¬SpF€¯I©îz® ­;°Û£Óº/ýò/”¢­§ªÐÐ ›`V° ª`¢?`WÀ §pœ@ ´z«xJ¯@®õz&*©#p¢¾j¢TÐ ÍZ°2;³4«¢ÿ›=•“­)º­_p¢?Ð óÊ œ  p­p ›°¤ É*²àJ²ª€²%+µ*˲ô*©DP³Z»µ{³&A9£³(ʳ':­0¦(J D{”бœÀ´0 N›§'µ'k¢FÐ ³Š§‹«0˵€¸—Z¨×ƒ³Û Û³'J §@0(K ¤yÛ±Êj?  ðÚoÛ+k·S‹±­?à§Up¶@ N+¸¬Ûºhº¥#ðBû!C4´¢d{¢>@ =´«’º¬ûœ°¬·ú«=Ô±  ºP«­0 à«ú®fêºÒ;½Uº¥&ªG|äGQJ£?ð¥ÿ›¢?°·=Ú?¦Ô›¾êK¨ô±¢¢DJë¿ò+¿Ö‹¢è;¿ø›¿¬[¿úÛ¿þ ¸üû¿<ÀÀ|À\©œÀ ÜÀ¯Û¾+ ¥<Á̤õÛ¥´aaжTpW°²(úTPÁ$¿npJlШCʨq¼Y‹¢ëÊÂ%\Ãû Á`¨û¨þ±‹*²?Ã'ÚÑkÃF,¸›Ú!ÿò©#"¶':ª¥zª©ú¼­z¯«{«¼ª{§AŒ» ²&J  «§°·WP¬B|Ä2± ¤ð§ ±à¿ÓÊ(Ž)’²°;Ë­Þ ®ª ®&k®èª®ìê®@Ü BìSÿP "»ªY0«À¼ÿJ¾J©j,³Ð®ð ®@¾ú{³üâ/ ¢ÇcÛ°±[±{»±n ÆŒÌňœ¢.ìÇ#ëÇ‹¯—\³ žüÉ8¬(“5Nl¢·ËÊ@+´C[´G›´»´M+Ëi|µL·O{ª«ÌœP»L³l<À^CÄœ¸e{¶)ª¶aì¶p+·²\Ä&ZÍôJ·BÛÍ\ûÍL¸ØóµÚÃ=伸û¸‘;¹•{—›¹"ë­p D0«àÊê³jÍtk´WðB0÷KÏkÏÿ »²+Î3ô(ýl¢¹»»лGû»Á{´N»®Ë{—ÐC1—ÿÏô: ÅkÉ-°MÇ8|¢ØÛGT£Ýû½á¿¬£ I½ÓÐÚÓýË¿ï+N]Õ-ÊÆ±0ÇýÓ)šÑVýÕ' ÕÀœ4`]Ö1*Öù»ÀfmÖh¿j½Ö`ÝÖóûÖpmÕ½ Â>MÖ¼½u½Ó™¼Éz»Õz¢ü¥ì²Œ×;Â}½ÆmüÆq¬ÕcMžü¦n *LÃ?êÂ“Ã´Ü šÝØ¢}¤…š;l‰êÃDZË]Œ¢D<Ú°­¤IÜ©!ÒÄ¢Jª¦ŠªªÊª® «@›Å¶*Í^| `̶c|´fŒÆ&zÆïj±ýÜ-ZÇÕŠÇØÊ°€Ð­ß®ãZ®çjéÿJÍ…ü®Âm¢ŠËx:º,ÉËKɪ] D@h Ýô}¢ œ°£\̰­zà°+±k±«±ë±°|ÈÓ\Í«L·¾šË­0Ð •àõ]áöÌM£Ï9;Ò?´Ël´H«´p›NËlÓØ¬ ÚÌÍÊú®ŒmáÐÎ`KÊ'zÌf;ß&ŠÎl«Î&Ê΢ëÎÔ|â·<Ï*êD « ãÏφËÏ{¬¸9þÏ‹Í}´Ý ˜«¹wŠÐ ÍÐÝ }Í×LÑÑ#€> ªI®ä°íÑ0D»"ýä(ZÒ1»ūÒÂÛ¨.ͼ1-Ó4âq›Ó>@¼ª€ãl.ÚõÿÔÚKÔÞ{¢à«Ó¬ÜÔ8ºÔžl¾^}è-Õ£DÕ˜Þé–jÀ—î颾¦t=ꦮ¦¥~ꪎ¥©¾ê®.­\ý겞¥,Á³~ë²ë…­Á¸ÞëZúÓ–ÙrÊ¢XÀ¼Sʧîëu]Ú‡ŠÚ=¼¢Ö,¥’šìʾֳ½ÄªÅL© ¼BpÐ{°×ýWÆçŽ«§°ªª½ ¼e·ÅʼÃZ¬Çš¬Ë³ÕîÔÒ}Ç×Jã0F ¹F`ú€ðà­,}ëðà­ ÞÝ·«ZEßÉ[D ËûúàýÊÌYPŒÚû~É÷-Êa í$ î ÿ° ñÿݱë:«gìެ)šÌ®)Û xÍ[«Ó\ò»,ã㬢ÑÎò¨z¢2ñ.̨f›¯i›Ì>Ò@_·éªÌnôô®ô+ðM¿Ü«< 4«ŒáR+ºIм ›·ä{ »êõVÍä~¸+JâEÐèd¢§kB`¬A>§.Ì ªPpÝ;º@ Wÿ³¤ë§8 áD`ìvßÍn>»Ò,ê¾µïè¾°Up«§?§= »1©ÏK¬m¯¼ôþ¼­P ™Oω¾GBÍ×8êGý¢>Ðè&j¾1:? Ø·¯Æš¿Éßü+ êÎý)ÚêÒŸüÔ_ý™ýØïõÚÿ¿ý%_ë¼ïýÙ¯ë^Êë;êU éâÛ'œÂîԭðâÀ @¾þ™ŽÃ:ÌÏ®£I`É S $XÐàA„ .dØÐáCˆ%N¤XÑâEŒ5ÐÑãÇ=YÔˆÍ)E(‚¤`„SFÂLò¡Ïž=€ü|8ÀéTÌœTµRuŠÔ@"§ˆ^ÙØÔéS¨Q¥N¥Zµ!H¬E ‡GH´aÄŽË‚©²4ÒêÇ@þìùÃâ@‘)­ ’wR’"z´âTdR+™V/fÜØñãÇY³n=Ð5e8‘N8k°§ÁT®¨:÷Ï >ÐKõÞWZe±ÿbEÕ$ȹuïæÝ²d¬”-§,àˆxç‚UTUiUI“¦Ò€ô|íºõÀ9„9m¯âÛûwðáÅ#R8âÅ£%(¤)MªT1…;Ý`õÕ­º”ý`ü°ªòB"h‡F† θXƒꇡˆˆÎ¾ðá‡V®ðÁ¿TÑä‘8¬$°°p@[tñEƒ Ôª 9õŽhD¬ƒ|: U¸° ¶Z1²Cþ†:e åŒT%1£”rÊÞdìˆ2‚hä‰GÞH$„ÅøÁ*Ë4óL«¬K×àD 4ã”sNÕd³ éÔsO>w³³O@42+ïôPÿD­èOEuôQ……tRJ•Ô À¬tSN˼t ¢`Ä7ò¼È* ]ˆˆ+® ªˆ SZk%èÒPI…à(aCÈ‹"h… ‚àÊ„ªÐÉ‚8\ÑVh+•t‡GnL¯6Ù£$fÍð:†æ»/ `£5÷QII2 %•Xb¤É&œtâÉ' zª¨£øRJ\‚ˆ”Ÿ~à¯Pˆzõ€)öÝ+)#¡;wb)Óõ ,±È2ëÝÔbË-Óæªë®¼ö 0Á3 ±€™bK¶³hÎU8á«•Kˆ¨¤2I!…ˆ$æ xè-¾,³Í#è³ÐF‹î´RË6ÿüb›­¶ÛZ6ÈÙdrŽ%³»Â Ù˜ò™ˆr‰V;@£\Ï å˜sºú¨·êì¶ãNëf[‰yɲXrY½9(‰¡Z¡dmÆÿk;%9ãØ=øä£O:»©Ö þR‹­ýîpÁ˜ðƒ~ØyáÆ[÷mÚÝnðÁ'¬pÈb7ìðÃD$ñQT‘ PJ!Â` ÛšÂJ|ɶ&‰à‡,DRñ™ v}{? ¥ÑFÓ‘Gƒ|RȺ?>’ÙÑZ¼I¢ Bɘ[ çó?Rƒ•2²î07Ÿ:€–¸ä%MYELdÒÈ~GüÀ[¤ cx€¸ Nä`ÿë.¸š†qa ÕFB¦ð\(Ta kÅBÆPZÞCH¦dxCH0T£*•c"`…Y±ÊU°’\EAW¼òUÚªÂ5e1‹ \;b52­jáˆ8ØÒÖb¨"—¹†\V$ãEÒU’Í´«%¡™Lzp ¡Ñ+'; œ‘Na°ÂŽÚ“ aD×»0€`wŸÉkxg+™Ê¿î„ÓÛá·¸pÞpœ‘3çŠÂ2Ü ä,ˆ&ú5šhf“aÕüÜ5õù<Ó¡nk« ¨ a§ È¥ÄA*ß&ã#ušN/ n4qŠA>(Âl" ÇgïxHž^˜—?èµBzÔ³°ç–ŽŠ“†©‘µÄ·£ƒÈÌB0±YJ°,#•‚/‰#ETê¾jÎÏ}õ[Ÿ^€*K'õïH Mj hÀ.})##øÁŠ%AƒD°)ÄR'ØV^0ƒolaDBSV±áábûÿÆ>V²Ý“‘ª&{YÞD³›UÌmÈYЦi©Ù!©ZÔn$‰KìÕ¯S‰{¦6©X´Ö³µ­ª7²-ì×Eœ•¬±"2sŸÁ¦pŠe=)6© ÊOfÕNüOH 胠—ðV©•ÉÅ$©1s>”¢<…¬€N#üD0éÕ„ÆH0#0g- Ë\ü íº°—H&Ç ’L+,ó¼"èÀv{÷h¢6¨¤/ ²»€ä×­KNHËé߇¥¶‡ L¼Bo¤ï$ìQ £Gv’«ÈB âa ’­D@(AJ|âíˆ2)9GZ‘ÃL¥¸±W÷yŠJÿˆ¤±nŒã s— M _Æg‘«I«Ê—‘’¸YýÀH¢¯ e®Dˆ~ðæ7 áxp~³]@W;KäÍàHÜLg"ü™Îg^›`5˜•UÑF:°Tˆ»è²æ™ÐCìBzpiLg:Ó§}Ê4ýiLOšhšu©I]êIŸÕgVõªqìÙº:Õ£•¨L»‘$XX²îèjݰ«Öò9"X€gTFÀ íñú„K¥VmSÂEÜV„„Ê•=4ߦ±ÁŰC®À\~¡•CÂà@„¡aòÑãZŽk$NÌj˜Í¥öµÍIŒMrcé{M9ÑI¤pÿ^KòЇóæE•XRBÙ0²CI`½ïâ£ý’ÅÑ-Aâ3jÌ €Ã@<Àáù4LHDX°Íðiqlc|Åá…HÇ¢ —×ó#A8|Š+ ·1-_sJËܯˆÍ<¼ˆ]ðyHô e­'.ç²­ÊîÇ?0sdÕU!œêáðÕ….¢0Ç嬩D]¿­KQ9GP½ˆÓ³¿ðœ \v{ú¨a‚†0w;­ ¸¥¸Æº=tþœ)o÷„DÓ ™Þæá%è8ƒ¾òžg< MX„$Òëkôbú¸ú#íºôª´B@ jÒKÅ·ÿÑ´°g?§Vÿ^²Á¾c‰_|Åù½u<¨$¿üá;¾´=lÌÿ ýeK¹Ö¬m"c¬ýQ3;‹×º­« þðk_]Úæ¶Eø`n¹à·}ªXQ£k!Rì'ÿI¯‘„VÇâB?GÁ·ï¢¤nst„=è2ð "ˆéQ%V²&k☯Q@EÙ/£9„ˆˆÚ™)¦ & qÉUø+[&´¥#'¦›?øƒ ˆ®*œ"˜'sA¦8ƒÐ0½a ”€!ù,’@u㇠/="""(((".9--0&0:,05+4<4./1.53-911353:;5180>99< 3O5V6X8X4Q7Y :Y1F0A>]=a+7@+9D)>M75A:4B?6I>=A>9HA^DlIrNyQB`EbHd*@O'G\'H])AR(FZ"Jf%Mh(Oj%Pm+Rk$Tt"Wx"\1Vn3Xo3Wp5Yq:]t>`vC:3B9KO>[NA3VH6\L7`M6rY8d“ õìY3µaÑÊK·®Ý£KÊ<“%%Y³qï L¸°ÜfÍÆŒÉõ J`Ã#KžŒt€³f%Kò˜²çÏ C·l¶KfgѨS«–Ë6 (¹»¶í¯†µ}ÆLöíßÀƒ?°$ÌÙ“+_ô4óçЗ;N½úç… Wjßν»÷ïàWfÿO¾¼ùóèÓW¬™¤½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€˜{$¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†H!‚"–hâ‰(¦¨âŠ,¶è¢„$¾(ãŒ4Öhã8ž#ƒ á£@ä(äDiä‘ î¸`(L6 ËHF)å”TVi¡’ ÆÒ€'\ñJV†)æ˜dÖˆe‚±(pÄš@|¹a$’Ìa‰%7І%—H2ƒJ$³ 3ÌŒ¡ 1´ÃŒ1”©è¢Œ¾x¦DàÉ+¯ᦆ”\r $’ÜÇ%”ÈçK*-Ì8‘`2ÌÈòÅ,4ÿ*무vã'±äš+ „—f˜) & É%xÔ0Ç%v”†ºê.µVkíµ’Øf¯¾ º†²À†”XÒ‚™jª)¥B±ª,«–í¼ôV«m¥”¾ò@,!–›º—Ô1à 5Ê 4Œ ,\ï×y/k¡¿ ú« y®Ñ%1”:Le0#Ū G¬òÊHÞ;—ž4€ñ‡»¬¦”l(3´(è0Ë@#‰ ¼ÊÑG»¡K4Ý´P8íôzƒ ¶»D*!uÓQ­„Ðd—­aŒüèc– èÛpà /…íJHLÜxjŒÙ|÷ÿ-M\k˜_¢F0ÕF ßðÅê÷ã? ùä”+*yå˜g.%{tîùç ‡.ú褗nú騧®úꬷîúë°Ç.ûì´×Ž:ç¶ç®ûî¼÷îûïÀ/¼é¸ƒžA h0üòÌ7ïüóÐG{ñßÅ)©â@¾Û°‡ôà‡/¾í+øðC ½ÏÀÃøÄî¹õÙC`©’÷»ó¡Lì÷ïÿÿ [Á-:¡ Ì®=]8ÀÐáÎAP…( @BA°@î(0ýñ¯ áózp Ô®WÝ f ÂÎ=° ¦@ 0”bMÐàçΰˆ<0⋘€ ÿ¡©<˜`>8 „aÀ t‚ËÆþZHÅ*înœèÄ-8Á jÂûâ QNÜ"èœ 4q‹[ô¡ƒfì'6Ñ9ÌÑžS!ÚÈòÁlÜÄ :‡Mp"¤[o‰ `€`œ€ ȇ6r£ÃÀ ±@¤‚ Ä)„@ˆ‚. šj„",AE\"Џ„"&…Løà ÈðÅúÀŒ?\S´¢0‡ù: Ø ’:Ð QØ9f²Ñ >¸E 7P MØ@…˜ tÐ >è“Ø@ú@Ç΢:¸‚4wy‹,èàßsdÑGº>\Òz0§&:gÿOIJsW`áè6)‚3$@)uè9T.‚HÁ%*a3̉’ìCzŒ øBÍ &1GJÒÓEósÌtb 5ÑÈ hâ{Ñ$èRú¹,”·ÀBç ‘‰]2pŒÙtd²`ÂznÂE e€ZèôW@$é:T d¡§¼„Õ¸žó’šÈ,ðµsYè&ëHn•éT<¡ªq€)˜ÀÐÎyÖsÈÔÔð† C*ð3:Zfø€Ép-l÷KEÙNš(sWŠÛï °*Xm;—‰LÈ@¦XÁ8±Çf‚Â6€§`ùyÝy–î H&8øÜ ÌÀÞÄåy n—²Ð F1AXu ¨ BB‡­~®ÔT"&ðK@ƒ¬ ‘ ò÷Éý½ÅçÞ¹Eff¢ÀãÏè9nÞ®ÈDÛhWiDî†YÌ[Ñí±ÿÔÕD'ŠJÂÈîµÅž£ž @TlAƒ Eð—:˜£+ ¤ZGÉBùÑ#Ý€£M‡·Ž,˜´ì$ÝfÅÆ“™nßL’º 8€­ðÂ$éV»úÕž»Â&n¡]ÕQÏs€”ë^ûz¿él"ënýëbûØ #6²—ÍlW+»ÙÐŽ6[Ÿ-íj[»ŠÔ¾¶¶·Ý¿lûNÌ=]+Ì 0ºðA¸OgnW×Úyé^wë¼Ý»`äsVاsKü¹ ƒº¤ÃéiØçi⧤çîlðîÐù@?`ÝÁO'aóŽç®Ý „Nà1Üá]&²@oÞ#ŸþÿNapq…†ã[Ó¥³B!@ªaD2á½›xéÞfÚáà¡ÛÀä]:á»K9ï6Þñßý<èCÝÏK.:b`Œî&úº‚sB 388|‘Ï,Äý̲œù`ÂBèÀêd$cç®ÀÅß"¤.í„é4¡ —1 šÈf6щc€Œ¤Õ;AN¤#QÎ}ÀÀ 8!ŒLèàs…À‚&ŽJ÷vnðŒ/*æ˜Â=ƒý&RXC¬0î…xãoMЭ½®Ç@!Àéƒ>\Á¾(„ µÞW¢…ð;ö`Ê Èß ! Nd¡õ2ݽîéž…\€}~ÿô;÷Nh" ÿÜá¯ön†[Öœø´çT_úÓg“µ °ë­N÷M\~â·Yps 3u0Æ: »7s}  ÂÐà ½°¸à °¦Å•O:—v— |ðo ×Ç|°ÂÀ ´ôoÔ÷[7wÂ@t£½ ‘:ÀPyWðp™À€. |à€˜Ä @x Õ÷9= ˜ÐÿÆ™ Ðt9ØFè { w§bGˆ~Æes¿§ayeƒ3çLÇ&È„ ¤ ÁÐÀDŸã€· ½€S=5½P>À ¨{6è€=€¾ÐN½pZ¢ã€Œ‡qˆØ% š`Lÿ×9À0tÂðo>ðpØ ÀpˆRö° 0‰M§ @(„‚Ôuÿ6s ]bè…ø=¸ð‰{ÀtW„ðµ¸5tc€£ö:—@ ZÐ9·°O=€>6_| i$ÂOOçSmõ€&ÆB'ç9!h@ÁÇ`„ø‚wGnÃ3Iõ{¾@€#¸b·PN}pV6àhÂpIxy€ˆt*°æÄ@<:@(IبŠ0pøÆD}à ÔƒTž“ ¹Bé·S¾ ,`sã +F(>€~•& —7qÅxŒ© Å(|+ÐW¡ÃFÙ¨T€Žõhb‰Åÿ¨Swg@:ÀD0iBI8‰~M7S—@ó9+Nœ@]©T T¸P‡¶ˆØª8H% ‚¢Œ2Aj®³q胓8‰ ¤gY˜€pÛˆ +–v`„Œ(YÛ8= FÅx– KwWGÂÐf¼p–v‡—Gø9À`É— Õ58‰W Šdt°›p–þ˜©˜øpOh3ðQÁgBÙ9£Ù—Â÷ˆD–~<À˜q†pÁp}6§aÄ@f‰™c4‰µð-T˜À˜HU“¬‰“)ŽLœ|iVˆšùyYs9‰š i2P gI]©YšP¸°`WéXÅÿx|Ð žs‡£–/!–­C–á$ Yi, ¯É2ÀsEHÓXÇ…t20vR¶+ €ž³†ò)Sâøžƒ%Рž£H•÷n‘ø‹˜p ÅhM¸ƒÂ Srô9†à = Íww=7¡ RÕØŒàtL W§é9,ʸqà qòÉh.ùž)´ ˜—·ùžñ™iä¶VІòxüä òÉ0ž˜~ãYŒ¼‡wL—KŠÕØ“w¡ W“ Ÿs ¸ +€|¡£ÝI•÷v•è3žè—Fè‹iJu¡ãž‰ 3`w˜„V —Y×+œù´GüôS¿g%`F#ÿ¨8… ™6Hšà 6 ïxÐÅZ¤ƒ‚·Ðtž3¡à¨H¸’+ ªWPs}‡~H‡ ½ = ”„ꆘ)t¢¡js2Ð (f+ YPk¾ ¬}Àt%à œ©ù¸<à ­èR-ºO8Hç†ÿõªwš§wH£0s ºš†¤wÇ*À„%’é* ®7s’8¥Îig®è:†–úœ¦Šª‰º¨Ræ9´žH]ŬÿÚkÊqî9žI˜M}P‡ž£ž.Áž_åø˜´öH“؆Ž5s›Ø ´ejPtI©Õ}Œ9*@—Úú—'i:…P˜ ã ŠÿéH—Ù—˜Ä„›( Šé‰}iHŸ“š›È@0˜òg³6‰I/ˆØ—5`bµ‰Ž…~x‡šS{ *Àt×:‰æI´œÀ\7µ¿…ÀЯ2 _,€±ƒä±ð¹“o8XÃÇ?£ÅˆcÃPÎ@Ì ÃÆ<& Œ9"œ —•YWåÉ Êm  3àUšÃl º`ðü RèlÄ·ü3íÌ ï< s}ÏeòȘãÌàµY½ mÐy"S0 ¹ ³0Îm²ÿ0ÑêŒ28ÝËÌÀȶœ ÃÌÅm% ]9Oì]#-^L0Í],™2k0’Ï##‡b%#K VÜ»°ÈTcÑ S*ePVm2J` òÔb2ÔÍÜÏ 24FA7–crÒ òÇ¢)t`Z¬7{ãr(VÌ*o³7`­ v /ØÉÌj½Ö–LÔn­ }ög–Âò-ð/ B@½5"Ò4EüØBÙm=jrj©FÚ¤ýÈÒ`ÚüŒÚbϬÔl}É“]Ûº­ ·Ûa¹ÛÀÍÛ°íÛëÜÁÝÛÓÁÆmÌùüÎÄ=±‚ÂËíÅȬÌ;}Ú¿Í#0¬=+Bà ÿŠáܰ3ÝŽ É’LÉÃÍ7<Ü>L?€0Ú%2Äl# â. òÊòmÞü"O,A$ÅUÄu³ I€Ãý½àþíÖaœPd|C%­ h ÕÔÌÆn| plr (tlÎŽÎÎ'‘Ö³ð †b S2‡âØ þâIâà™üI¡4JÒ<С<Ê¥|ÊÊ«ÜÊðÊcË"Î ø0_pÎAœ ÌP_  ð2ÌeÃ` û ã .Ò…P4tã&MÍÖŒÍÚÌÍ–àÍà,Î@Îæ\äGž ôÎÉÎÔbb ¨ÒæXþâ"-š¥Pž vmÐ }( ½7Ãÿ0ÓmàFÎ oNÑrÞ0­¼ ”>6yŽå{nc­Ô(- *M0-ýÒÓi>Ó5Íè îæè|Óêl ||é°^ÔßÅçá5^œÎÔþÔQÏ@Õ{sÕYÎ À ¶\JP2JÀ5¬N-²Ësëz>Ùp]cs J·ž x­.{Ýׇò×­EüÊ­b¶7` H¬Î Àä€B ÔãXRÙ€&h¢ÙœmžÍ  "#°â=ïü}&ªíŸðS"9´­ð?$Êýð/$?ño&¹}ño¿ñO#'ŒÙ?ò(âÂÛÝð%âÝÞ‡ãïåMòY>Ù=ÿ,òßW"onßžßÌpó0ÜÿÅ1Å~">â ’à?ó²m>ÆPÆn®ÆþÆq<ÇuâŒ~ägÖ râ)¾âzãØcÀ*É KßĘÜI4ÎÉ^®   *¢LÊ—`ʨ¬Ê7 äBNä]¯ ä«ÞäOåMNåV>ì´`PÃkŸÃZÍ]>õ \Íל͔°ÍÝ<Þg>Îò¬äY³ó òèétnçF-´`é¯Ã™Þçqè—°Ô‚ŽÐ—Pè íЉÑlîè«ÞîÔbÈ”^ée]È/ßú*üú›Žã´О¾Ò¡Ó2 §ú©ä¿oú¯¾ ÿ¿çȿ²~Ô¶Îü ’M­ëRÝëU ìZÄÃ^ìÇžḭ̀ìéÏþÑ/#@Jr%3PÐàA„ .dØÐáCˆ%N¤XÑâEŒ5ÐÑcÇ$GŒ@*SPQQ˜ãR›ƒ/$]¢IÇ@f93à`—Îd ŠÉ)Ë€­œI#ØÚU0WÓ¹’3 $YÎda6nåÚÕëW°aÅzýø1$B*¨¶¨D*Å-Œ°$Â%g·ŽX2â`’%Æ&\ØðaÄ_ËzÔ{СV^O¦\ÙòeÌ™.ÉP°fСE&š3€Æ¥U¯fÝÚ5ÆÓ©_Ϧÿ]Û6èØ·uïæÝ[1gÙ¾…'><·Âo‹/gÞ\ôñƒ ºœJ%è3âbîB3Æ Âaî:'_ž5tÒ«C0À% ¡‡—0ƒb ŒÔ1xé›çß7pƒ‚P¥$ $€@T B¾ý J&?ǪˆÏ? +< º&LA ¡”Uš@HŠd¤0 c1àI äJ>H K.qÄ–F§% #§Ÿês‚†Ù©GÆ æf’ù΀/®Jæ‹‚ 0&§\,ÔrK†0$d@Ra)S„ DD„lI&‰_Œ¹ëƒK,±KbˆãIæ€1(h‘B #sd†–(®Ò€ÿ’âG!Ë”Ħ `Æ–>™Q€a†¢ ¹ôÔS/ V8$àÌ„0æ*$á´äH Æ:jˆä’N cŒøñ.0D”È‚æk”¡áéfÆãÇü2…bÂO«­0TQ*Õ„Â`&Ë‚à|Ä Yi2·œŒÙeÕ §C=ÈØ‚ÊàÉ{ j~w¡²Š«˜™ÅZ‚ýö@mOES¤d®4qÅKÆ-hVKn˜a†<ÈeƒúQ¨/„M† ý½7_YîMh Z˜y²`˜›ƒ.TžÈ¶@La"¡uZb‰ ¢ÃÆ5â ¤ƒ\ŒIŠd‚Š‚™2"ØñÐÿ_ˆ¢Ç”‚™/”h÷dž¶–¥®2B" E2f¶‰Co$QR‰%„­/u>èD̄π‡ ÊYtÖ‰«xò6)®óÅ÷䤒éñÊœhiûrãDK-¶ÜÚÈ<0¨»¬+òú«tÌ[ç =ƒ‹ÌuÚk¿Ps…®³}wÞ»‚½wàƒçêwá‹7~"âW~ù„’gþyå“Ozêÿ]:꬛,»ñª÷Þ5ôÔ„=÷àCŒÞïÓ_mæM2A°^::= 3O5V6X8X4Q7Y :Y1F0A>]=a+7@+9D)>M75A:4B?6I==@>9HMS|A^DlIrNyQB`EbHd*@O'G\'H])AR(FZ<@E:CL7K\9HU8M["Jf%Mh(Oj%Pm+Rk$Tt"Wx"\6Oa1Vn3Xo3Wp4Yq0[x:]t>`vC:3B9KO>[NA3VH6\L7`M6rY8d¤,bgÝ'XuûW`­àÕ‡ìöëoþ,0~lðÁÀiµÁ 7ìðÃG,ñÄWlñÅg¬ñÆwìñÇ ‡,òÈ+LòÉ(§¬òÊ,·ìòË0Sl²Ã!D€‚1ç¬óÎ<÷ìóÏϼpÍo3L&„À²’íôÓP“lQÀ°òMD-³» }4 ¸1Ì%(ò$ät õÚl·í° ÑÜB‹!sâÄÃkØâöÃ&{ÿ01¼`ð—3…'s°Újïíøã=; #ß’ÆÃ6 ùÂ}Œ0—4à’ ¿óâ ç1 $¤Ä2Ê1„‚ $1lE8îqC÷·˜S7io.üð)Û`Ë-ÑØb Ý´@±póp‰-ÑÌ2ÂÂBÐM4”,Ný-¶Ô²°áwÂp l?‰â“t¢}-6, B-¶\/± ÚG#Ë Øâüä£Û$¶g #D ÛÄ.1 34Á Â&Nç°= ¨¢€F‹Pˆ"¢ØÀf…4ˆ „9,‘sx0ŒaÇ@`„.a ”³ÜÂt¨=4@!—Á3ÿha„%pb7XÂ-&±n`N „øƉ[,! @La4Ö°„h4Û³šÄ(Q@#D‚Š´XÄ!¤AsK`KR° c„nDÃ,8 µ‘€±x𔸆86€ nìð…2Œ¤$+öÆéw—£Åþ6@‹¦ý0~»dÃÖ0EDC ëÄ,R¨·è‘kXåÆX #Ìr’žÊ.¦Á~“£K†á’J˜/…¯¼˜¨ KP·ÄkÀÿ?NðÁäÚ<ð…M¼„˜-1fÃ,˜Ì…-“ƒd¸!…Õb‘ب&'¯©ÍŽÊ›]Ã>ÀÃ/vÒvÑcÃlq9‡¡Œ-åD)ñJš2 h¸åýÖ Î…­á²ˆ'ÿ”øJ ”èÛ„†a¶ÄÀð‚ÆP†uà@àC ^ç nÔ æX$'Ì"Œƒ£M«ð@ºYÐ<ͤI›7NÔÀ"]Ø,f!PŽÀ’°… ø9 ÁÁ‹ðTcQÃ8±4Øò‡N„[O70(üµÝc4à˜Tn@,èEà@Ì2à x˜Ù°pA¡Ø@ Ýó iÿŽ@îÇ8§ÖÞ®5 ëbòt8‹¹.¬ È«Ô rn`ÛÛ9o@OY\Ϧ‰Õ¬J!–¾í •·˜¥äþ™ÎÍ2Lh`€„ÑbhÂ)0ÛÅbC. FæøêÛþFrü¥úº1Ü À ðvñùEùxkÙÂÃB`MЀ7Ìá3, µˆR1&4†yÀ™‡WÌâ´^qw+q‹gLã;LÆ6αŽ9ŒãûøÇÚì1‡Läá ¹ÈHNòڎ̲è´bNà' G ßµ O®•9ûùc³Xƒ˜U¦3²ùr”FölfO œpd ¸ñ¿;¯,ÐëóvE& 7?lióÄP=k;§ìÒ*Kô¢[ÖêWÇúc­ž4ÄjÀ‰¼9ï§µX§ ªØ 8¡ÎjÀÆ×° Ê­ñ¸àå8±bKOz KƒòZj;Grò£-8½5ÐâˆN¨Å-ò ‚IÈíľ…mm;ðRC°7f±„†qB ´¨¥¸ç¶°xë{–jßå$± k¸9⵸ :‘¹os¢{°7–í[pœÿp"(‘l`ƒ”Cö:oЉ[p‚ÝjD'ô&„YØ| è7l±†ƒ2å(÷†Pl¹Á±ç?_XlA‹5(ºaõ¾7¶—ødÛ¢Á ÃøÄ+~ÄIŒð­'¶¸kQð @]k(µÃ‚íY%z)5%hÁ 'pׄ4°Pt<#ª¯èYL¢ÍÐFÑ'1 IpÃ"l³Ð[ÚçpsCÖ [Â5¸ñï‡icàièó,ôÎImL‚ï´†ë£1ô†9² D›o0 nXb×§§í±! À—³µ·:MIÝrÄž“ô¡†‚®o@yÝëÛ Ä-t×0¾Gñ×0åÿ*7p N@ÁG9éùî`c‹×¨(Äø®oÃÿýFå-Рë…i#ÖÜÐfPÐgw ÚPxÜpÀÜP –€»F ®{÷xB•mjyåSÐÇ|ï×4ÒЀ’ k‰6{^5€' £çj CwÖ1‰v7 À l°0ÑFN`5FàU“° ×#ÜpF½ÆJÛÔw”¥9•Æ0G7/§Wò×yå&e sq2·ÔrØ w‘—YÑ0E”PMFÀ_Ü·Wpîgk5ÀT¤7ªæ0®@Fˆgf¦;”€ tãñ3„ s‡y˜9W—JØP7@j ƒ ™õ<„‡P`uÿÆ h3XƒsH 3s6°N£= 3 ˆKÜ`…cHYø3ˆJåF7K ;žH9·7thu»† 3†}v7qÒ06àD¶ T~ˆK{øJÒ0~$h„†ç?0yã‚ !a“hVcx€zƒxÕ²`gI( ™um#@{úPI¸«è<3XÜ€Bå6>ܰ]ÖPäf޵×0Ú€‡¨ŽŽä£€i€Ck`µPløŽnˆý×g÷E†gCÐH/G9|¸0¹Ž0ײuuM ßegÛPt¤†xÏ£7ÔhÑ€ÏÐv›øJ² ¶4ŠiŠ…ºö’êÿhÄg‘Øpý8†á€´€`Bð Õ(T9‘0„ÒWÅÈO3˜“p S~㌠#OÄ kp`7P9 B j‰$?A8‡5ekBmÀ•„6€w “}` JP؆ 0°— ƒ?×eÿׂ²P—3HD†—zÜJàÓ0€ N ;Wn«˜ éHC¸ƒNTCÜNÉ0š9 ý—hNég`©_œØ•—S ²à%Ù•_y`R6h°}`önj„ `y •nwuQ9ƒ*gnºv‡¹ C¸Š‹V˜z6Šnç–  Ò°6`só™K)ŒeVŒV•Vw=Ç‚×)lÿÕs( C`åw{h  }F 6ð’g”>jÔJ-g0@=‘ ¦$ ?´€ F ]X„>¥QcyѰk ˜P }‡?Òp‰6¡i0jëfu¶& × N° zs{Xf—S™JjBp „]6 ˆ8‡·0b,ꢔ k0€ ¶ðŸghM€ ÈI›i½?}Æ}mÕ¡åyžå'š#jz) f›å6 5 {0p‰WÊ jœmÑÕ¬+6—P`Ó)¼+à Ý`g ÑU ×d×z½×|mÓ?¾+8À[8SPÕ3ýÖ=t­Ñ`}ýØÙ’ÝÑý¼w$½¥ó†}ш° †P#ª°?ÐÀ±`@°èëÝ = ª}ÉýÊu}Ñbà€ÑrMàÀÚ+À è2“ÜÂ=Ü8]ÙÿÛ@A´Ù+° =P# ÐÀ¨°sÐ q âP +PÅwÿ€Ç°½²Ñ[0Ð0xM ‚Çΰ“Â!ÝpÛÄ=ßô]ß%mÜ0lG¢³ÜíܧÐ+àK °ðO>°c`w0Ä+PÄ á=ÞØ+@ ãpÑÕÀÝ ÁàNöâ">âøÍÅ€ÌÜÎííd J0)œ+0ÌíÛxMámáÔ M Ü=Û½áÕÀÛ#^äF>Ù%îÇŤÙý *~Ñ,¾ N0åNÐ|Ñó±RŒåá-¬Ñ:ÎÝÎáÓpäf~æ‘ý×KÕTJ¾£ŒâNŽÑ>p ÐÐ 3Þ ]pÁ·í <‚×[`Ó@`°\ÿ ¾-¬íã=ÎÝÍ`sÀqÐÞh~é˜ÞÔOm¡5ZÍlDÝäO~ÑK0ͱ ÖýÍ·ÍsÍÍxíÞîÑÞ®í-]P»­ÍÝ[0ëõ‘é¼Þë=ýÔ+àÎî_mMÒAð ~Ñ\@\ÐÕDÞÒ]0˾^íÖ^ÓÀ~Ö ¡~íÞþí¼ží-ìAÍÜà~îèââžîìÞî$nÖîïòNßMÑö¾õ~ïú.•ÏûþïÐÁ¹R­Ð”!ºw!uP/ùl'ßð|¡ºoÖ®{±«-ÌÐ\’ÜÏïð½ 8‚ÝÁ;Ãûºã’[`º¿òÎû9—½ÓÈxÿa½«\ÃÚ˽±à½ ¾ª=¾ªÄ'¯ AÌÍ ºý.“Rè\óK+oÌþ»@È-À3üÅÏ­À¥MÝÁd0Á PÁupÁ@o'•žÄ®}q@^’Âw0ñ ¿ª"r0ºOßÉ[LGú È4lÃ8¬Ã®ÀÃ>Ü@,ÄD<ÅHlòd¯¯Äã ÄB’t@"?â Ñr÷ÅÜǤµä¥LÈdlÆõ‘ÆéÒ ìÆŠ_öwÑøp ù{2ÁB-I? ¯ùzÌù\õ‚ ¦Üc¼ †,'‰¼È ÐÈ €ËwÉŠ¯ò«ö¶»Äà ¾zQb oû·ÏÎk.ÊQÿõù§œóªÌÊRœ¯œ.²LËI\æ b ,À“ÂÊ2ÉKìÛq`ŠÞÝÍоØ $XÐàA„ .dØÐáC‚$N”¸…àŠ^¼0,¶ Œ03“ÄúCPǪX) 58cÎ%8p ,T{9®Â@:.™5€æÒghÕNZašOo ¸Œs9nD¨Q¥N¥ZÕêU¬YµV¥HÑbA3ÂÚÓä+Ô8" ÌÐ%CÁ._±®è²‚à–.¶îåÛ×ï_À÷v(— …MÇàfÜØñcÈ‘%3&\1¡ÞÉ™5oæÜÙóÕÊ &]ÚôiÔŽCNÝÚõkر®–ÿ]Ûömܪ+³ÎÝÛ÷oàiœp6øqäÉO'8áM°a™0;Î@ç­˜:uÀÌ0ç­rðá_3oà<:†n†]ºÙ¸‹91 æ­¾xüùI3ŸBLã àb¦pï>Æ©ï°3ÚÓïA!cî `„¹¤Uø¥˜/ "c2ØO8aTP‰Å•"–XLÉ¡.ºy© êp‰¦ø\P n`±:¼ÉÆœq¶k ¦Æ‰C 1Àqiš«´’¡ 7™à’aBÂ$*6é° hÆÙ"pÞ:!X`A‰e•BVŒ@ gÈ #HÍqf ){l@A‚ÈбÇÿ;üüP(1ÌOs¸h ›nÄ8£Ä+3Õt¶ÝúbSØÄ˜ Ó ÀajÈ5a9¡"€ñ"R‰åç¨c›t|KýQ ÷5ç&ObòÄœ:èб>JÅppSj#Ì2@Ž<Õ 9Ì¡R 5OHÖ”Ê=¤%pªQµ‚DojIPB *V ;bj ÞŽªfßjž<ƒ)sš©v௠°#·½h)C41q’–#†¢¦é&Ç^]2Øqì°Q{ñeÆ^ƒºpÆ% vY9þ„ ã`-Æ ƒÔÍ€W‹Â%ÈûÄ•¦g 1Ʊi sîÈÀFA³ñF ÿ+à‚ sâà‚Ý’cš™¶î°È1,HtÈ—ÓŽ<Œþëè£ J4¾ Ò}8bpA)—•;îÆ¦˜y)X0˜Š©[Ÿ²Æ÷Þ’}G)]rFmÊ#O °Æ*˸ªLØÁ„*p« ¼´² ®»F¯|õÜ.1ÅX—}öÆ\h:Ús×]+Ûw÷ýwÐ:~xâ©ê½xä“/èxå›/¾÷✗Þw׃N:Ȫûnzî]#ϼLÐS=Çæíþ|Ôøóo£,ð@AÑ¿Ð} KPC©J…Î6áê0ZÅr´£ûtã)“Z "‡©D™h“Ÿd€wÀ~´ËÒÿ–ºÔ€/…iLRqEJP± E0bE„€Ñ Þó§@ ËG}ªÆâ09Ýa AšV“1¼ÈÁDE* ),*%D‚ÄPˆ"Ô)¾j°â/BÝaÛkLè@‡•ÅχŽÐ;Ô±€Ø@«3€fª.%H Ë ?´‹%÷Áb}NV†ñ«’#dÄŽw@"X@ý@¹6f+aq„Š+`±”ð+ tt“8Üwh@²¸€cr…œ €ÐDšÃP‡:€<òe1›™kv3ªX“ ÄœúðWð€iNƒÚ¤º±‚DÕ‡iÎh‹³ÿf1ì„•¹ 0‡wd`‰tG"Ù‘ ºŒmÙÈÛ@RaŽ«N)aQàŸPJ0^:r 4Jy—$e›‚Y@ÞŽà eè;Ù"îRxÉYÌr0tA£Õ6ªQ» Äs HéÒ–žÎ0t±K2úQ0¼t£`ÀÝ@!‚Æu¼#hGCßQÎw!º$˜í`·˜ƒ¼'qKMœ6ÃO¦2U6•ÊDSN NãÎxGß±…tu¢¨RÈÌzV´¢µ¦Œ©@ZÝzÖRµ! PÀ7J† vu¡ ªX ù² 8Cã× ‚ƒ¯ic^`)gÕm ¨c¡ZåªÒ±€ôu`ulÚè:Z6Ôí#ÕÆÙξŒ®ÀàB€A(@³›ks8—Z—ÑdˆCÀÚØB²¶åyNtÖíáÖ4V@sÓ(€Åžv¬àßzâúó)—4Øâ.å!ù,››lM†+(.--0,05+4<1.63-911453:80>99<+7@+9E)>M:4A?6I>=B*@O'G\'H])AR(FZ'Le&Ni%Pm$Ts"Wx"\B9KO>[AACFFHKKML@WNAZNNPPA^RRTVVXZZ\RAa[Hl^^`aKtfMxgPzkRbbcffijjlnnprrswwy{{|bŒi—k™o£q¤t¨y³~»"] `‡!a‰ f‘nRƒrV‰vXz[“~]˜~~€€¾†Ê‰Í‚Â…ÈŒÓØ‘Û–ä˜æƒ`h¬‘h¯’i±šn»œp¾ŸqÁ¡rÃ¥uÉ©xÏ«yѰ{Ö‚‚ƒ††ˆŠŠ‹ŽŽ’’“——˜šššžž ££¤§§¨««¬µµµ··¸ºººÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¡ ¦ª«¬­®¯°œ,VXC¢0‚/22…/±ÄÅÆÇȳ¶+XA 1hÒ]cj$…1jÒÉßàáâ¢YQéAYŸÔÞÙ…&ãøùúû‹!UWA¨s@EKC˜ì`%IG @Ù± @‰3jÔ”é èKÆ2ÕÍÓ&ÈÙ3ey!ƒñ Ç42žùÀ¯¦Í›¤B! ŠB¬p(r°‰N”<À‡(J¸èbÂÄ™1¸Ép¡&d€‘ƒ ¸øâ5Œ.Òt ãl‰2gÿ¼áœK·n$éÙQCG“  '.Ú²|) Ä@&ÿ ¾ˆPH0ä¾=õ~ ª£€ƒY2£ñúÐ³ŠŽ«í¼SÊp@Cýq€ÀÎËU_xU¥Àh¸GÎ`„‡0A Oqƒ'@ øJdb­¶¨¥ !à2AÈÀ dèŠù¤‚-4¸@$8ÖÔ¸-oõä'AŠ4t€%db£ ä 9ÌHð…ªÀ%c_¸H©T8´…$1©"°B QÑo "A *ÈÃ!/{é‹ÂpΩÁZJ|0€x°X0€À@1@[Èô‚-pɉ4Œ #¨A¹dØÆM!­ÿe‡€v¨D‡Â2ë®Â9HrGŽ´%ɘågc¸a Tç…NÞê“Öâ”ÓA”’@‹ÁÀw.°€0TFÕh‹4¸’ÂÈ8´¤dº@KC|À#3ôå¦ÐÖü'@…ˆLâŒø†‚¬Aœ €0¸„x+ÁY0ÂÒÁ $ ‰<Ð xÀ•Ù”Lƒº &pd$8@L¬%ÎM±ÈE›!b¢\¥¦4fD$Ò„)ª$ÖI©D€-ɈI.Ð&6Ó#4ÐäX%«è­`—¥-ab¨È¼ÆTŠbâ»#DˆªÓ[ONM*)¾'ÕªZõªXÿͪV·ÊÕ®–-{^ k"º'©U„O}bu]ûœñ>U0­ŒÓŸ:ÖÑ?S¼®fSà®Ð«!>b IfnàA&XÀ…Aao(UJY%#l¤V ñš(‚+ˆs|„ Â„á0:ð æ‘EŒhƒ‹*œÇJ0¶¸.œ¤l  Ç„ùÕÊÀ)„ ì >Xd¥èÚú­¡Íýd+(`*­Nx‚±ÙÚØà•<:íUÈÍBøìg'c.¡œ›YÜ2†ºPèÁ2 M©Ðã 4( ƒƒ*úˆ—QäT›9ÙF‰èÚP¬Á œ@}Ò€Ÿô(C“úéó bªŸžàJt¢ûê¢@Œ4: ÿè·HÙ£ˆD®i€&´P鞤†(YØP<•Ý!Dð×Xµqg  xçûüÊ;ßÝŽÆ:’m,ª¾˜JOEÄEM|&B=(JD-CW*TL,[Q:BI5FS8Lb7Ri6Yu-dY0i]1na2viAY VC.D0F6&@>>T<+P>6G7FR>QGE:TA.VG7cN8DDDADIEIMKFBLJALLLHMRMQVTMHZBXUSFSSSRTYVXWVXXZUS[XWYYYAN`HUgM^pU\fR^vTanXgufMAiVHeZTtXJfIcxTuaaNhfTtcNufWrs\cccggifhhkfdmjcjjjclsnpogrztlc{ufwww;d‡>k’?p—@o˜Ar›Ygƒ_pŠCx¥G°gu‰k}’s{…q’‚6…v9€d;™†=¡>©”?±šH…·@­—A³C»£n‚—yŠu†š}{Ž¡}‘¢LŒÂN’ÊQ™ÖEŬFʰƒ – ©¸^N‚_PZ~…hW‡p]•jXp]‡uf†}u‘|j¢s^©xc²~gÌÛÁ#Í5+éö‰^†aŠ‘c™i–¤o ©r¥°v¬¸{³‰Šl‹‚y–‚m›ˆv˜˜w Œx¢’}¸j¡¡|ˆnÈŒrÎuˆ‡‡„‹”Š“›”‹„™’‡˜˜˜‰›§“œ¤Ž «™£ª˜§°œ©°¥˜‡¤”¿€º¬¡«£—¯°‡°¨šµ¶Œ»½¦¥¥¥­±«²´±­¥°¯±³±¨¶¶µ²¶¸·¸·µ¸¸¸¶¶¸·¸¸¸¶¹¸¸¿À’½ŃÀÊËšÎОÐÒŸÚÛ¦ÇÇÇÒÒÒÚÚÚçççôôôþþþÿ1H° Áƒ*\Ȱ¡Ã‡‘`˜H±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ÉÒ$Ä—0cÊœ±¥Í›8sêÜɳ§ÏŸ=i J´hA‰@“*]Ê´©Ó§P9JµªB¤Q³jÝʵ«×¤VÊ5Šõ«Ù³hÓªÝ:¶­[˜e×ÊK·®Ý õí{‰Á_µ·€ƽK¸°áÃYZáǡuq)(Fò@.ÿÊM.h%Ê =uFÙlÀŠ•À M@“·š †ƒËžM»6J†ýþéôAŸîÌ0øÖ-oÅï§ îãçO÷¾ëþ½î«µBòôi×'ïõUÛàËÿ_1õò(ªýƒ¶"º=ÿªa(çK”ÌQ îËl¢\ü:ÿb€Z‡4ÛmÍB±‘çàƒ¢ÕÐrõÓ þ÷>€¬0P_é×AýðƒA?ÕÑ÷˜e— >ë0áŒ4Ö˜C›?<úc5Ímøˆí³×@úŒ¨Þ >²ˆ‹ Ê#£TVieNòSሢ}ð‡Vø‘" tâ^Vü#Ï?¡9i‚/.øÝ•tÖigHyùˆ ê•#†˜ÐÄÇ…zôÅO¡Ðø£‡û­SGtròóO?¹YvQz—Pƒwvêé• Á Ñé¶& œþ!§Þ‚ûôÿä©¢¥—®Öš¦›~êë¯V:„‡™À¯+{)¯Œšh±©—®3q ìµØÒ†ZŽ™[uÔÒdm¶ä–[ju´IÐÐ@Si¸2kî¼ô~ï½ÕÖ«ï¾gáëïKòò+ðÀAýk0l'¬0P7ÜëÂGl“Ã%ñÅ»TqÅgì±ÇsüñÈ$_2Å—¬òÀ';œòÊ0×Ûrà aóÍ8ç¬óÎ<÷ìóÏ@-ôÐDmôÑH'­ôÒL7íôÓH3;óÔTWmõÕX»)uÖ\wíõ×`g½uØd—möÙh·5vÚl·íöÛm¯]ÔVˆ!7Üxç­÷Þ3Ýÿ-bXÁ´|nøáˆ; žøãG޶ßD9.ùå˜g>5åCY®ùç ‡.çBy.ú騧é4™®úë°Çþë11>ø²ç®ûî´ÃT·À¯¸ûðÄ‹Þ{ñÈ'üñÊ7ïüëÌ?/ýô™GOýõØn}öÜw·÷à‡Ÿøöâ—o>Õ䟯þú §¿ÐDb-¡ûô×ÃXp¼cV½!ÌXZàEýxºû‰åKœUH°„±¼!Œàç è–ˆá]DY‚0„ñ‹,aÃðÆ/ê!@7#õF òzÐC…!Á0Þ0ŒzüâƒÞ ‡0†Á…@ÃHúM9ÿby,ˆ zÙG9$ÈD®Q°- œJ´à‹ÿ€ õpÃ0‚ÑB ¼„„ êñ Z‘õ ‡´°Š0¡dÉR%mw»7¶&Dpºä­pñæ[…XP¶ÃM.ØŠ›o"W¹ÐÛXL`‚^0ºØ s»ESee÷»]ÛnAàÞòJ×¼èÅœxÓËÞ«­·½ðÙ{ãKߊͷ¾ø5Ø}óË_xí·¿ÖšÕ÷\ˆgàˆ@$<Á!jhCÞõ — !OPC€Ùw_ wªK$«>ØSg°‚ ®x…C\A‹gx€ mxÅ3ÌW,cÃë›ohÃI”r x´2Nbb«¸~Æë /ÄÆ8Vß|Ÿåº¡|@‰ñR丢µxÆ2F068CÌÈ”Ìd' ÿÅÏ`’½|ã(›ï½É…R>ê#›"½êU«Š!¤ J@ñ3Úðg¨ÂmX4h±Œ¨™ÍÁ@“ òŠ&¯aÑɰï¼81<œT™fz^‰¤ëÕuØó‡8ôä:§ØµXÆÖÀŠgáÒKÎô¦ƒãŒ6 „´5‡Ç2šä=F‡|¼Ú‰ ØÖßÚ ­WÌÂË*vÆ2RüŠWÙkö‡†­iCYÙRfv¶¯-ë˜ø‘5uEÈ)MUgÒºÛ*6À­—qâƒ(áç^·†ƒj¼¢ ÑÞàM½ý¢Ú(?ôŽ BÝŽW×ß[>È­®âT4Hÿxô@Fg$¨{³@™)=$8#þæ'ŧg[ˆ·(0R)>‡"'dä®pEp\ñŒ¦CÆM7¶šÏ¬â#,£é´P÷A®¼Ýî¼y=÷Ú ”@ë©@ Ò¬?†øëÎ ûó¦êu¸'OîvÏ;Uð®÷¾…ï~|L/øÂ;„ð†O|B¯øÆ„ñŽo<äƒCÓ‹GÞ ¼TàËo8óì¼K­!®ãô¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸Ï=íËiY ôÀ#¨aõ ûâÿøÈO¾ò—Ï|Öºj™_³±}×,* ÍϾö·Ïýî{õ¾O$ÿ`bëVÝpßO¿ú×Ï~õÛ•j“¿ÔuÛúû¬ÃôíÏ¿þ÷ÏØ¿þøS]ùSm.õpò€ý·€ Ø€Þw5“7S×dÿd€¨& 耸x{èäU}0‚˜³W±ÑpÚW.肳÷b Ç`ÖÐzè }°zY@øƒ¹÷ìe$ˆ¶÷0‚ œ0{Å`³÷ J8‚ °·Œ  ­ ëÐ b`§' „jX{B˜^DX„ H{\×°ÓPpƒ±·…@ÕP ~PЄ®g/€z&˜zèpzÇÿ‡k‰l8`íõ†p¸ˆ«§ ,xzÜð‡§ H`R`…©÷VÀ§ç(`XRh¨À§‡[`+°ƒê V` Ü`Ùð‹Œ°VRP‡¿È ÇPh°s°ƒcX&¬¸±@°'’Ø|â`¦±ƒèӸŠ€fÈzW#zÃe‰E#±†g zêpz…` §È€›°N[0 §7‹©‡…Û ©ˆHi `P ÀÖðˆÖ I(\0`$iÓ‘9 ŽF †Ü0Ð# ‘ëÿ€…ÀÐ(Žã¨|RxÀÃÜ€‹Ÿ¨y0;ÐzóX‰$xlj©§ `ˆÝÐ.ÐP ê pzåP‰8‘}¸Ÿèƒëðˆ>‘@‹¨Ç y—pzO€,“Ž˜‡$9–\ø +™–¸xé §wv‰…zxcù“È'…z¸¬°k€”9À‚OИª÷”Cx€üPò[I•¨÷‰†ˆ…#¨`è–ëð  zkp§' ¹ †¨'‘o™‡YÙv“†‰—€9’à–RÈ )’§‡— ›ëÀ…ÙÀ‡¨÷¸è˜ }Ð.¦W™©g‹eà””ÿ8„%x¥iš§†hyzê›`è…§·e‰z³yz­†yzÏ™z¼I—`Oæhé›"ù—ëœË˜x Ði yXŸtyØi|Rš ¸zœ¹8!È"H°E1ædGáfmðb1UýÖ5º€P¡©è™z€øG p$ вY–ÉÐ…é9ë™ m‰zÈ0‰¸ŸåŸÄy ÇÉ–Ê™¥Ì)˜bx@Ÿÿ)¡¯I¡ª{)›×‰Ð ¢ãy@ú#u‡ffiC®Ð whu†nÏÀ`«Ä1Ê5ÿP+8z€ý£¨ÿ÷ˆ Àà0ˆ° ¯ hP êš§‡…}Pš(Œ0 7™Lª’KxƒRÒP °wi z™¥Lº¥´x¤€è¥Ñ†Õ0a˜“´9¡gj¡·¹©¸¨#ÒP ù §UCµÃV0øwj#GHÖºf‚Z,…ê5¼g£™Q{Å`JH‡ìÙJ¸–¨× FéƒÝp“`ÛX‹SWЬÅP#ȪÍ)«Ö€´ª YªGp”ºJJ˜fHtI¤ÃЦ€ j ˜J8Ÿ›§¸z¸r­jðt vcOÐ ÏÐ NF ¬puËP)ÙŠLç ”jz)áÿÚ5å0Mº£·—³&ˆŒ –A»z0¸}åð¦«!jÉR7ÞE¢R‡ÏÀv¬@ ,÷ H cçvf¬ð¬à²}jr&fQmpPMÏ×5÷W íR C›´r;·Dô¬caAèóg)šaÍ€ËÐj€pÀr ç }jd1n1 Šj6B[´t[¹–ë¬T­0q\”W­¨A ©Ðbkökà –¦iRWl"×§]önw³\s¹²;»k·bA~€ã¹Á­ÎðeÎÀƒKfð &jªk,¶¸÷ {‘ 6´½²»´U¡gÀ¹Ô²f´°f7Vq†½ÿökÆ+uafOÀ`¬à 6#n ñ¼_#½ðK·Ô[¹<ÿÅÃ;a]iQGÍ@¾ñfMÇ#pub&²[G¨k»ñÛÀÃ:¿Õ;¢ÃgPÁ £ œ5ÜÁØ ÁæU|/H¹µÇ Ùz#´ÝâØƒ®÷H[ƒ¤êÁ¨—‚R‡ë€!r¯ÈÂ\3Q »p @lBLÄA<ÄE|ÄK¬ÄIŒÄFìÄQ ÅLÄï«{0… `Š´Kªz:…dð¡¬G°¸™†­ †éÛÈ…ðIé—Å#˜ˆ$™±ËçÃYCÄ¥  BP |ìÇ€<}üÇlÈ„,ȇÿ<È…ÌÈŠœÈˆÜÇWœ{ðø`—µçÅ®÷ˆÐ‘š¹zø ³ÄyrìzŠÉ}zŒ5}ìÇA¬ ²lÄ´,³\˱ŒË¶¬Ë·œË¼¼ËÀ<ɸ砨Dž7Ø T`Q@¡8ŠSŸœ¼q`oúÁº©WyzÊÌÌ Ð(Ô¸ƒÝøáŠ>¸Á8ŒÅ˜Ÿ®‹C„ŒÊˆÃÑ+PêzåhŽè¨Ž§×Žïˆ´¨÷ÊÙU|Æœ—œ0“ àxØ„\h’™l†œ HšzØœzö샭ÐWY . “b¨“<‰“ÔÉ ’̹9ÐyÇ&‰’}¹­ÌzA9”Eÿ©°I¹”M)Ë^¶÷ï€z]Éš N’ë ð]9–Ÿ(Ž^,Ñq\Ù|zÆ\ÔfˆÔ‰Ø¥xÓŒ ¬›—ÄŠ€¹‘÷¼«¦,½;Ê»y›“éÜp™¯©Ö§'ÐØU{>ýÓT]¯èªëp ØV † m †tì®R­zÆì×Ù&ØÅùÕ[¦^½°"i›‘™›šœñÓª'…ÛYzÆúž:m»ðµw½Ú>}z¬}×Tݯ†Ã Œæh«: ;@Æt9Õê¹`Û¦áƒZýÑÙl•}¥yxŸÍúœ›½Íð›Ö2]¯¡¡µØ¡ÀÐ;ÿMXS‚õÚäMÞT ¨¦Šè©JZ‹CäÅ«WѨ—¨ÞBÙºJ¦Ì-¡Îm G Ÿ¶HÓmˆðëÙk=ÃÞ¹lꦮG×3Á8^2ƒUÞ¾ÚÄÞ§Ç…:P H(†ºÕ€…^ÈÉr€“‚xÈΫ®ß[½Ü¸(¡ˆ æp ª¢:«ÈIÝÕ="Ð.Î̤ ~¬Éº¬ÍZ»™ U¦U帩á§ç«#è°G‘h9Íömà•ª„`UÞ°f˜Ü99ŸO@¤ þª Ì9¯#h¯ ^°@¿m „Ù,…;‘¸øˆx|ÚMîä7ÞQ~áþÿ—ª´Ëw´F·«l|.¦aX‡~葞éÌ7éþsxué ®é¢^|œ.Økè .壾ê¶Wê1a‡•ê—Îê´.{®þߤ».%ë³^ë¾.èS£¹ÃÅë˜þëÆîݨÝ^Ä^ìÇþë·Î[ËÎìÍNëϾ[Ñ.íÓ>êÕN[)ÜíÞþíàîâ>îä^îæ~îèžîê¾îìnîÛ>[íïò>ïô^ïö~ïøî‚ïÞZ×ná¨×ÚÙ.êûÎZý^Þ® ÛŸéÿ>/Ð=`b 0 [?Að.8 ñ"ÐEG7€±@FQðØžð4¼ðtDSóe…ÿ £ð£Pñ! ”@ (Ÿó“@ >*C7’0 A¤P1q’p*è,¯ðß=ßôz+ì1a 57Ÿó;¯8ôã5 EÏ XIo R?õæýïx]õìòÎ{]Î5 ¢  ðáõa–Pø–ðñ@ø¢ :06 …ÿõö ó¯ó¤€ 4@eô¡hO"@ £pó<¿°Û"€ ­ó ˜ ¤p Ÿû™àôº? $ïöÐú¿/™ £P ”ö€÷y¯ÚÏ÷ ì÷öa•ÿ>„ß/?Šoùâo € 4ÿ<0þéÿ:Ð 1 ™ ’Àü ¤5”250`© jåCá¤Q8‚Œ R°Î>. 5näˆ)ÓG¤J"õèÆ(Io!U£` ”5 aàÅp4ùñF‚ï„%ZÔèQ¤D×-eÚÔéS¨Q¥N¥ZÕêU¬Yµnåú”ãW°aÅŽ%ËCY´_­ˆá"fEÚ²¡}µH£ˆ=Y2 BT C!z¡@ì(L]ÕÀ# !]D¨‘¡C(¤tÉ"F¸}Ì”RR¦‚  Ñ²àÍ @&1ÿPš£Ô“îæ´ëoàÁ…'^\jhäÉÓžUNÖ„˜³Ï?4ߨ@Tºv öe (¾‰ÊFA䯇õ(uãQ¥'ͯIèÂÑ.<ý9#ÜÖ&»d$ñÌ€ *c͵Qšo’6Û7Žzë­@©f¡Ä㚣Œ“ rš‡‹kÖe¨ d“E”qƧŽÉ¢‹Ëáâ NŠ£îG ™ò«þÃ@Œé†4 í6²D…,)¤ @ÂËÌK¬4àDDɬöÞsÌ=Žn ¥>ü~(h 'Á¤ öÑ#´Ö0ÃÄ´ÜT+(À×rÓ(Ì ÒͤæàPÿÈæoàÄ(Ÿ2k˜j´Ç'X¨1DH#RPã"Xàu.P J‰SòU¸„„µ çLÀ`$_Ï vxA!AByá×,3°¡»-{aƒDøj ‡0DYÿ$Sµ›pÐ ' ¡½îËd’jº$N"ÓyÊ ­L. Á‡Qh#é2¡D!> 0ó‘ h¢¦l5ða²“|a5EÊP²Q–N½T©P™çP2,utLâf6Yœ<ÍxåßX9àœQ³Ùø“u0ÄÕYs«ZX1ˆB  ßz5ƒ.É;Ï[PÈSàXò²4õÌË,ÿõ°óÚÆ0 ‰R0éöµQH©¨ Â&†L¸¦d…ôØGè´`âZ‚N ;ªAÃ&…&6dÂo(¨Ó2Á¬a‡‹RG‚S‡bOí£ ¬Èf)p¶@a…O׉…Œ?VH!ôu¦A„+¨¹âœ¥ü@á3`ªš@ÀöKAÖ´©'Z]*ÕÝcŸÇ¥ÐÙÂЗŠ ¦æèCt2üX¡n¬‰1ÖQžùé©/ýÔ»Á< F˜Šeõ)6?9 rP8c0ÃÐ4ð€EÖÇ ZazÅPÁ®`«èLfY`A0ð@@<ÓH^ð%…4@‚ 3ÿ.˜Ðà>ii Ðä@}@90áF&«½MfM-¼ 40–Æecg(J‰€dX‡:" .4[ȪO à:Râ  2(šXJïBÖx±)“«”c°’¡ª¸‚m°Ž5ünFÐ5FH1@ƒ:*, AeM|¢ÊFf.¤l~°  €s¨ ƒ"ç÷›8` € ·ŽF]hŒØ˜ò0€$° ¤à,myK\ÎÊ“ÈÄ(Ø6¤EŒ2J£È CelHÑ:Ž ©&Vjðâÿ°¹TaqT¡c£SÄØ? ô•;ãðб¦Ô£Bç1 ð‰É5b)qPÀ9òÈ>úQšRä&:±”'ì.šK¡æ:œ÷AšTã67Ö¿uÌ¡GÁi”5*Ú”‹.…9€]Z Ë\ö,¤Jš@AJ±‹[”Ô'M©IQªR–Âô¥.méJgjӚƔ¦2ÍéMuŠSž²T¨(ê-Š:Ô\°Â¸8*QjT¢ê¨º°E)nqŠ`eTÄ,ÊÅÞ!ÅJ•aàB ‰¦„ÌâŒ(eD.pAˆŸL+BËñ,ŽSz,âÐÉ)râ­ÒLëËœrÏ¥äs h] X—’…ÿÄ5’ÈÆbÓª© °•sd tSØCŒ~£hüÁSøƒÇÙh@ôà8'HG:¤ZÞ.)-….„`Õ ôö·¼õ-p…kÜâw¸ÁM.s—{\å"÷¹Í…®s» " »ÚÍîv½Û]ðrW¼ßoxÉûÝSèb¦Èj‡–X”2:J(`G…+˜¸ì:Â=,¶ˆ´B4š¢Žt 73#_ýûѦÊv_ZðÄî±kàoc…<kŽÃýýoS6O`HÒ×tpJÁ‡R• L´í¨¢[%åÈeé­oMª #¯ÿÉB8r’‹Ìd%;yÉM†ò“©|å(WyÊYn²)ìe]€YÌ_&s˜Ë¨£¶œ+‡:rÍj…­hEiË`á%¯ pmU†¤c'[ÙËþÑœßñÖl¢q€ΑgJQÒ ÕhbŸû+EÜáWÌdÀj ºÂ€ö±„#mâ`Ù(Æç—*0b#@(mXTÚPÿd¨Fð6ìgÇŽÒ¨÷©VýgJ¾ ~@ƒ·n@RÔA6bñÙß´"Ö0Ô6Äá©n Ø„U¿¥Qfþ˜Ù+œyÍm~s…8û±í¡b°(¯ÚêP¡ЄZ ŽÅ ƒ8äµs€èê¿Yoö f„pSºÑ⪿ød-6À‹Ýy(TJãb 6ÌØu$|ÅèùÂñ÷'@ØP‡ÊÕ¡È+¢³‰>/öVÐAuÁÝÆÀ©åç©à-B–|å-¯@¿cݨF9|ÃUÅÓ¶3µ-£rTcCO9½SZÏ”×_%öS)Gá×1ûÛÛ¾+ÕXÿ78V³Ëƒ…òA~ð¯ÛÌ[h+o”–E_úÓÏÊñ¿RüæüŒ-I²~÷‡œüÞp%M0ùM}ô§úÞ×ö“S+ Xá?ì§.ÁÏõç_ÿû·­÷Ýœ°‚‚øè¨?´¥ûÛ þ[@ä?ü¿Ð(’Ì•¬@IÀÏk@ Ü@–yÀzŽø€µà> ,A`ÂÀá@\AñÀÂ1AœA AÁdAÔ?uнápÁYz¤A!̹9k4#,¤[3ÂÔ¿XÈ@h&(±k t0-¦(†)iÐ Ô[ù.À!Ø·P-]Šê¤$¨/í£!-4‚k@²Ø"G¦µkh4p¨Í%ý&}RHUY4гã,)´ÆkÔåÄÓŽÙ;`ƒ¼â¹”d C¨èA”¾k,@»JáËèÑMµÍ¥Ø; zQN-¢qs°ýëÊC¼½$¥TäP¬xÔ sÅËË€À °Ø8šQ:>:h‚Wi4…°ÐH|‡Fƒ/­°Ãߨ=Ö³CsÝŠtmBDÖÐÈ 4€çؾàó‹_ ‹ñ¨‹!‰ƒ|P±¨€| `M1èÖ‚¸=IýVÍÃv}Xˆõ ÿ”Á̃(À€¸²<P{ }UˆƒáƒU{@å(yØ·‰oeX¦Ð¼ˆ­Ùšu×å˜ Â#)@œKQè’_¢‚„¤ P˜ê({xÚ(b°rȇ|¨‚‚@†§¥©½«}Zˆ}„ø€} […¨†±E™Y›}[vÅÙР@  x­¹BxKbØõc¸×樀8@†~•Ú|@8À‡q(ˆ-à×H(€{ø†8 Y¸àÖ9i?}¨(‡³e[†W¸]]”[¸ [.0.8œ9îøÁQ(„¼pšÿ‚«Ùׯ5bÈ0­U€-Ø‚HÙäàÖ:ày ݶ†ù ‹ÔuCÖÝÞýsÝ´€ÝØ¥]œ›‚8–8ï@D€’ß ^ áדZ©µå Xp^äÝÀ€ÑÙìuXî `õó^´ØÙ4ÌÌâ‚ÈݼE\Ápßßù­à‚XÞûe†äà_´U³í`@0C±ø_Õ`^¿‰¥X Á‹ÍXù“¼¼ „ èÛhȀ؅Þ!)&øƒ|Ø‚&Àù%^ú5€&h‚Çm‚¨5€o°"®€Ð`Y—ݘUÓa°0án šMa16‹Fšÿè.¨Ýš›QHš_y¤!àõa )^«µÚ-8bùeâ<~\ÊÍã“ýÞ} aPØÒ=]òâ¡€Š cHîPúSà²x J¶% âX˜´(-ødPåPfcêeSelMXw)n½^¸8BXŽeYžeZ®e[¾e\Îe]Þe^îe_þe`¶å2ŽT²â?>æ?%%)dnæ|˜Üœ fižfj®fk¾flÎfm]abhçp^bqçKÖp.gr.gxbødäöŠdy¾Lë;çn~RxŽçyÞç¨æ{þç9‹‡xðb0`~Naþçn–y袀†Žhÿ‰hŠv褀hy€‡ÝÐh¼ÄƒFhnVh‘‹Š¶hxÀh‰Žè’އ”n锿è‡Ni‹V¾Fá„é']i—ÞiŠÞiŸŽhŽF鉦hB©i¾iœFjµç°ç´(韎j©žj™&ê`2ê·Eê€WîA1[œ¦`±e‹ƒmÙªhª^k¶vé’ŽR¬ŽX­öà¤À#‘?¸é‘¥¼|ø²¨†}x›´nè¶–h Ñu(ìŸ~뫎kâ°.È‘2œ¨nàƒžœ=E‰ä ÓÙ$yLHÊëWÜ‚{«UæHY|È{À§…Úù­Ú«5fðZÖnmá]EÆ%ÿÅVi\å¬løé?`„µV놶ê¢vlà•R9•TY•V©¯ãœj;¿È é¹ÛЦJ~‡-‡Æeæ€fÀÅeÜø}ÜÈÜ&àWfˆ8 .؇:h—êm†6”ØX(€Hìæ#¶fé¡èÆQî–y™˜™™š¹5%g9If?§.íæцD~o&%fVÙëâ=Þä5  h؇HqRV üþGk‹èÉùnx†.&BÆ,°†Þ®èGp®¨ŸûY-OaþaЇäJºIz>¾ áÚÅpîn\èk`f® ñáåã$>ñ°‡±ìèåíÞÞ˜ÿ4hp]‡d€s`hËbƒŸ´Hüöq‡r®¥QB”RjGïÙ$xÜŠ¹Þˆ Ïp4ä×-Pâ|ððDçOâ#öò¯ˆ‚}‡¥è_2Wì­ré5osy°,ypüfhgè·ó¬è5#ÎSJÎV’háÏ&Ã|rœã×o(ÆÅVf.ë+â!.b.GYr b°„B.ˆrÐZ üÎô–Þt7Gwøtõ.uS§ ÔR­üñ”1žC‘'V§ðW9ã\  Ñî3äWÛ.Ø]×<Îã=vô$6~µZ JvæpW^ ü>¹2HéĆöN—vj·ök¯ól/E›±é^Šÿ·ÒsÓl¨t…†ß*dHœó:3‡ˆ¦¤OºhŸvPGøªÎ¡…‡Š]ËT·†_KžŸÄR€¾ ÷¿¤n±ÞÇP—¢›¶jc‡Q‘8Š3ø#Phàt“uÇö”_‘#909OÈZ(иšÇÌ›WŽ nñ!´öbhUŸcÙN?%6xºs”¤Wi:Oî¦÷+Z¢U¼‚ü«Šo ‹ïúWDøÛ«=/vHiÍk{·GnšŽû¥à=û½Än¿iįüûÅgüŒéû\zuÏÿ|Ð}Ñ}Ò/}Ó?}ÔO}Õ_ýW·dׇ Ë}©.i˜Î|Í{ýÿb}Þï}Ð_öYò}á~â/~ão}݇}Ù_~·Vk¦¿ýÉ}Ý?~ê}ào WŸüKg~î?nfèÚ?èÇ}Éeuu°ï¾¥6ÀîoÿãFs…ÿè/äàêlÄ5~•ì·Àœ ²,hð „Å”ÃPPĈ'R¬hñ"ÆŒãÅ“øî#È"?®+iò$Ê”*W²léò%̘2gšThó&Μ êTøAŒ1~Xƒ.=m~ºô)Ô§&âðL˜ïOÔ¬õè«*P#ذbÇJì(ÞÈ´ Q¾£éö-ܸrgj­k׫V C…\!oÖ¦vÜrÿo\¾|qˆÚC†/Ÿ= %ìQ.!˜=r‰«`v/1eÀ£ÈÛ·Oú £O)4Óúê$ä¢Ït9Qôñ†¨ÇÀ@d+–¨š»áÊÃÆSëÜ$ɹҧÏ=–¥K¹’å¸Xᄲ÷.×h.ßS´V¾“–l¾|œ|ó¶„˧Â@‰ÄÄâ0ÃP!2ö]–2pà3ŽMÄÇLp$TŽ>bˆQCëÈ#„D±4\BBqQ4ÀM¡+pÜrÍŒ€M‹5VÔœsi­u=ú7ˆÁç¨s%`MIê€À˜]ïY¹Ó{ê ä—Sƒ¹ÿwe]ñ9Ø„bøhP|÷@L>€Œ=U16A¨eûXa‡X±O5QØ$Ï:\xÅUUÅÕØ /dKXh#¥ᘣŽ?jºiJ¬pNÙ€À'ë<`HImÀÃ9ë”3Â’29+Aèe¥¥&ˆa‚y_Ò Uš¨p•™t )àšq&+'6YqÛ> €>Õ² T#› Õm5!:Ð:Â-÷ΰ£ŸÈƒ*¬ÆºÜXQM+LA#,]¬+½4Úh饘†Ä)œ€/¦áp,²Ž:Hj8œ!믳Ú•–?©Øk—/ß –ÿ™ßb»,ÌsÖyS±>%ôoD•SŽ Ý«§@\u©èrâFYå°£N`Ñ0È“ Œ1€1€æÈB*DO pÎÀ,RÂikºØ1€h”4êÆq™ æÇK5•âP?YÑTÉuùzwNñ}SB€M˜Ù²@%4ñG>[4f—)k@f’'ˆP×vë§i¿ù È +X(Ÿû(%P‡ÄfEk«E14Õ´$'±@îò¼h Ö;@„ÌÒ“!ñ•š}öZj;ßã7KFϤIANl7áïåÝJˆ_ÞÿEØàÙÛßgÍ.N›‰%¶Eå0_bè­ÿcZ´UÉ£Sbà!êL³:@ Pù„V“+hÜŽwY’#¥)kÖ€H<. y@ÇXRٖǼç‘p.ê€Æ–æ0h˜£$ÑCöÌG˜íÉð&å«áAÒT5ÝmVQªU++X!o>äÕ ’€2LÄBOX€•f¬ LEØ`<ñH°E+ØÙJ(F· #ns[×Ö1ª1 $;Ãa]hG„ÜpŽyÙq†-Zyñ0GD`Aª6`Y'°¦ˆˆcÇËà À´}Œ#&cŠdczÓÇ`xNšäƒuƒ‰ó’ʧÔ1• \ ÿ눂©Fl@4À‡¨ ” ˆF1" v`-€˜¬.è»·2„a^ó2)Í•´"ÖxÑ6”–n„²$T@ª‘‡ o\åRäˆN¢®î|'<ã)ÏyÒ³žö¼'>ó ¸£ð³Ÿ°Q1 £”"Ç0£Œh„5.ÀHŒˆˆÒ^@)yTšm™&FQ‚Àˆ %YŒÐÂ’Ä¡2’]ú©R}²´¥îTç:]*Ó™Ò´¦6mŠJýI)W•Y‡O¯l¸jR Ò"'úE‹f´©'©†91V •€£nLiNrÓ­¾¦ëü*XÍ7Ѱ` ‰„Iÿ6¥Š0ŒN}kÚª¯Êµ®v5ÏXÁ"Ž:¬5"híBChÑhµ°?º«MèŠØÅ2V'y}¬Ÿ9X¶²siìA‹ÙÍrö+ýìXÚÊTË’V.ˆfO«Ú»‚¶µYêdyTÚÙž“³©]-nÁêÚÝnÄR±¥,mƒË’ÕÞ6·ÆM%o“xˆv´Â}îpU[ÜãR·†5úv•‹‘wÀƒ¹–!tÓfìh‡;ÞYÇ4Ñ*Œé!ª¨”nuãÛX/BÀm PfXІ.Ú$hùmx¤!éHIŠÕîÎûQ¸÷%Ä•/„Y»œxHàÕ°ÐW@Ш”ü-ÚÌ)OÿŠÁ£*Õ©ÖŽèÀ${A•N;ÝÓØJ^”À!"Hk¨#¥ë‚OÁ±…Dá¡à@¬°‰wmÁ+èY$ ⋊xS k˜ —Ɖ•Dlëý "bÜÙ׸̃¹qŽåñA-à [€ ÜQ1ˆ P,<.lj{¶ó$3Û)WalsÜäV’…i¢ËiLlæIÃÍAÇ ù‡%û.çÕ"(ê‡hpÚ2½üÚæ‚·Ðjód¬NR±«ƒÅä/¥s-ÖsI”Ë%.”ÀÓ ÀöPÐR[h ø‚„`¥ A³ºÕ®æÔ Sø°¥±ðÿ$Îöïn-c]“ûn-z‡P‡:ØáÈ»bp…L“ lP–Üay.?K2BK8AP=K_O@5\G6GGGHHHRNHFQdIVdWfwym]eeekkkks||{zXdcs‹‡}u€v’€u‘ˆz……„ŒŒ…–ˆ‹‘•–•™™™“¢šŸ¤§ž¢ ž¬¥–¤¤¤¬«¤®®®´°ª¹µ¯¶µµ¾¾¾ÂÂÂ×רþþþß@„pH,…ÇplZL1›tJ­ÆtºÛ¬J%v¸àêJWÉnÁCKxm›e-Zhb‡Ý:ÜÌFí\xz{r]B€`‚ƒqgRCˆoƒ„TŠ“ŒŽ‡—S™š:8œžŸ’{XX[H¦R‚9©35*3"®¯xŒ{&*1¼¦x:d[)2 Ʀo'8/p60 Óž1%1'Ì:.!à—32 -+8X2îž$ <˜¸P` ôó4âÀ (¤Ð˜°ÐÔ -ú 0ðÊSÅŽ\‚!ù,ÖiìX‡   * ' 3%2#)$6# ,%0 2)"6 7#&%&#)5&1<5*#;3'767,A-B0D+/A'8I-:U5=E.A[:BJ4FR>Ma:QeC/D0G7&D<6S;+Q=4JC;UA.TH5bN7IIJHMTLPWUMFXQLUUUBN`IUfL_qU[fS^xTanXfu`O@iVIf[Uq^MlaVtcNvfWigeblsfryumd{tiwvv[º\¼^ÄbÌ cÍ fÐ jÒdÌiÎdÍkÎmÕkÐrÕsÓyØ'kÍ,qÏ$qÑ yÖ zÚ*sÑ*Ø:tÎ2vÐ6|Ó<{ÒYg‚_pŠgv‡j}’s|…p“EuÎExÐU~Ñ&‚Ü,…Ý.ˆÞ4†Û>Þ=àn‚–x‹t†š}z ~‘¡D…ÖFˆØL„ÔOˆÖN‹ÙG’ÝS‡ÓTˆÖQÚZƒÒ]ŒÕW“ÛBŒàK›âP•áP™á\œá[¤æcˆÒc—ÛdœÞo’Õk–Øv™Ùz Úd§èfªçk¥ãl®és¦âu«åu¯é}®æq°é{°ç{²èƒkYˆp]‡ue†}u‘|j‹‚z—ƒl›ˆu y¢‘}†††…Œ”Г𔋄–“‹™™™‰š§”œ¤ «™£ª›ª°¥˜ˆ£œ”¬ Žª£—°©›¦¥¥¤­²«²´±­¥°¯±´±¨¶µµ„¡Ü¦ÜŠ©Üªß˜¯Þœ°ß„¨à…¹ì‰½ð—¬à—ºê›·ã˜¸ä›»è¥·âµ½äŒÂð›Âì˜Çò«Äê¤Éð¨Ôö¶Äæ³Æè´Ëí¿Àæ¹Ëë²Óò¾áúÅÅÅÛÖÑÄÌéÉÔíÆÜôÐÌèÚÔêÖÝñÄçüÌàöËåùÊëüÕãöÐæøÔëûÙäõÝíûÚñýà×ëêáîãäòæéõæìøêæñëêôçõýõíðõñöõôùôüþøòôøôøþùöþþþÿ H° Áƒ*\Ȱ¡Ã‡#JœH±âAªtÛȱ£Ç CŠI²¤É“(Sª\ɲeJ]ªd 4Ⲧ͛8sêÜɤ2z J´¨Ñ£1"]Ê´©S¦ª˜<™JµªÕ«X³jÝʵ«×¯`ÊK¶¬YªMΪ]˶­Û·pãÊK·®Ý»x×j¹”é‘•¹e—ñòõ²?Úʚ屫ÖÀAÉK¹òÝNÿ2gžôUQ³)^åhÎloñÖhÿæ³ôoXV8ÿÆ=‰ãlÌ(÷ø¶Ì»7ÛJÿäù¹rÈÝ¿B^“ù«â5οk€yÚ÷/ÒÖtñ¨ÖŠt¢ަRÿ¡â»¼y±QÞåãBuÎ?hS‰knÕMÆ·»ýI];ldXå\1T‰±> i!M;åó„ÔìÓO6†Ì‘MS }~]T5`UÓüƒá;TŠóÏ3R8sO>Ôò#WdVŽ4Ôqg1˜ŠéÀó„{ú8³Î™O$“5èZ£eÎmãŒ3”Ìñ$>³ý'û€×w.þ ɧƒHqO= ÞãgUÈüÜ{×Lõ’S}ÿI“Ž`ÆÙW²—9®‚'9“5RÝO¼9UŸ¸þcÆmÝüÃ…¡áAñNv‹Væ\xSaÎ4”ÒsÜÂUÇ?š<`üc UÖøCc¡ª>!,¶¸ñJ•¬Ù‚æ3šùÆÈëë?VJ ±Æìç;§>ÁZ!†2‡+¥ÕRæÜ3Ÿ’1Y2Ǻ|F¾7X`q9ι6U˜OñL"7Ã^ ¦˜Wn“c6n(Ü+œ6Œ0” ×KÕ¼/O\±ÅÿèsÏ=·rLÕ÷ÈSä[S8Õ¸Ï\‘)Uìtìr¼ß 3Õ×¼îTˆüãgª=?¡“ü&±BÛœ0²æðÿ#q˜c$mØK×u­URËÍŽ=aÈõ>”ð¡ u¶]ù !WLUªÊ˜‘¹‡$*s¬Xf¢I5™uèœ<‡0¢sv\°sëýÏ6ö! \8‡¤Ê«à„>×áUI}E¢“ôÁ‡\Š<™™pSIÁfÏLæå“ÚÌ6eÓ·Þ;š¥ePµuÿØcÀö¾™Å>³ÿ3‰×Ja&¥»N•jfát©œÄƒ ñ›£Ôw4³œ¹Ì˲ÊÂð—¬XÁzOðBÞõ(„¡qk¡©B/lÇ ¡GHšð„(L¡ WÈ»8á‡pB gè–§ÜD™†FlÈÃúð‡yÅ?ÿdðñˆHL¢Pt!DшJŒ¢q¢‹*V‘%A¸ƒH¬xÅ0ñpbwh‹!ø5ÈH”°]xä€Å™2Š%Ø1±£×€Ä„1Œ `…J ÆÀàaÌ/¾øÇ'ꀀˆä³Fø Q s\ŠÃ`übD@AðŠW(¡àEJyÉ´R+ÙÈ"ž{8‰‘‚pd‡¡d  Ç)>À˜ñ¤m!ƒ È`Å ¬™I`ÐCÁ07ƒtd™vh""‰hˆ À(€1аqg¤§PÿȵA7“° Ð@#¿¨Áª)<&Ó&¹@)C’ XTóìÅ à ŒRlÀ4§NžÉ‘_â¡PÀ &”%ËlæGn€Üàk¨Ð`Ô%0ÂLÐ’ê0˜Å ºjJ€à˜è[ÏHH›‚§æìÈHÐSŸÊ’˜Æ ëF*PJ $V¨Àˆê[ ùKœr¢ž æW]Ò ‰†„¬b… €ÐÖZ@–0˜èNü(0ÿγN=ë€ \à¬[5æ(ó‰X,V2ãh4"T¥rmµìF0UR0“#(Á)ϰ²ºt´.‘ìX€Udd#¬í$uPWá½€?/º²^à¢õfЀÇv$§émš(o$W#˼s#›X`@w¨—…fTC€n£Úwá]ð’Ö´ã5€,ðÝôn¸€G ÍŽ¨ ÇÔÅ) \h„¿ ÁG¼´TˆŽcZº`?7ºÞHTQqÓ ÛínK=Þëzµ1q/&À¯æÄ®ñd \9cò¯X&(iI¤â4ÿv4KOðÅ\ÀC€Œ­ÜÜ?XºÀPT±‹¨þBXC+2ÀÌ(sxÊTfIi1`^lJY¬èmë/ðÊŠWXX'ÙÉÃH7þ"—@!¿éãï’‘˜'0„xH¨âNüŸ#«Jrz`¨½E`‡¨ÃŒ€øXÚ w8Ò,ÂLVYd¹­¿L¥Stá ô™.aâ+˜¨Š<ÿÜ7D7´×J+êðÞÈŒ7ÔÍîzÛ[%ä¾5½ïÍï~‡„‹þ¸ÀNð‚üàO¸ÂÎð†;üáxĹHñŠ[üâϸÆ7ÎñŽ{üã ¹ÈGNò’›üä(ÿO¹ÊWÎò–s\â0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@×¹.ìø Žäâ}Ê·uŠôN!$ªX‚‚i~ŠÜ`‡º¸Á \ýÃQ‡‘™|öSR`åG»ôÁo\ë‰+ñ·b àÅ/* €£bš‡CþÀ,~!ŠÄ]ìMé-hÜa´s¥ Ð".Ívˆƒâ¼xë,zLl¸‡¿¨¤A= í&.lPÐ|ÖóžÄmÅ6gàŠ<– ØÁŠ9"„¸ –R>{[ÿ[ö¹ã^“½úFzAz|ndç<ëIP$t +À0ˆ_PYŸ¾ô¡¦59IÏm ôÄ5Øÿ ÛS`CöAú‡5£¢§G-0/路<ðˆFÈJÕð·¯Eåƒ7TPTGuF¿¤Rjn4U2à²ÕP©@l¹ç`»Çåœ'UîdU w,58C•ÍF2°ÙöN¿0@¹”ThTn†RpŒJžS3X*•KäÇC`¨ôG`EVf…V½WsUÈuAV…4d³Ð AàP*]VFY&™4w° ƒµèè~¡fvØ3ææwR˜Y°œÇ1!hbE€ÍÔYhy@N±$^`øyµ* ]ÿèVHÕ[îOTȨ…eUXv®%K5ðkDñV•膙u]º`gÑÕkoH-Veh]$pVþ7„–Wºe膆gJ@cJÖRÖuwå4{~Ø\ªhlhÀÅh³à\äÔVæ½õ[gUf½0l2pû†¿  J€TéGhRV^çubOV¹P‡WiQ…  20¨hdÏHI­X†Føeiñ €HÀ]…—žÈC öi–QŒ VRVvHø%P€ö†m`¾…_ó„ :FÜ·½ v àFd%b$æE bFQ|5ˆžÇŽÌÄyÝÔ…ôÿø†‚6L*P†Lö]¿ð +f]i`EÐV™e6}pÇ xX ËÔM­ {–õXÑx‘È‹¨C™t‘¦qw|H‡'&cXf+ yu‰ÌIYvÓÇeöÇÖÅwPFÐ_ÏUž´iÆV9ù`¿tg*À€¿°®Ð“Ÿ&hþ•I©^G0 ¥ÀR 4w‰¶hyI ° £Ð”C6`‡‘¿ØLöÅ ™w`ÙVžÄJIWh¦f¿T³0 eæ¡°0d´Ž>` öhbµiÐiIGÂöG"vÆd°ð -ðu.ðkÎè`ž8 `$0¹ÿh ,¥lCQ¾ˆ…wÙ—lÊÆ}‹F˦dF G¿p˜ü¥¼&‘bU Ãæ[‚´0à‰^Wj¦„jª†^ÐY—&±e‰Ä Ðefm¿8mKa ãö ÛÈUùX\é_]´â#cúס&ª¢ÇäU'êEšž¦^E‡pÖS¨cA·£!1 .Pz³Ç£B:¤DZ¤Fz¤Hš¤Jº¤<ñ 1jCgC¿p=WGw”Gz’Ñ ÀêV zdG‚$J™D±IÁyˆ$,ú¶pOz£¤K¦t„ Š[Ú¥à¥é‹F¬ÔJJ˜Õœw­d&ÿ§NŒ@$^"Á¥`G©"u¨N‘‘[Z|õ|ѧ|@ÀM¢°MOgJC|ÖOÿ„¨eçI…¤}$À}Ôg|àÄI åRòªuO¥zl eiòÅG§pT$|>Qø”ºC½°§ã„©M¡–}4££èNðDv`U ŒŒfÀàc3`UmÅTN…iiÈc8ø‘gô‚eU‚ÄTHQÆ­Þ ®ˆx+5edçTk ªGU×C’êm0Ùœ¶ðú‡6ô PåzCö]ÒUn6]!OSVZj”ZO¹(­À°®† / †ŒKy¸‡!˜özœ)°±;}çÿ¸W¦æWÄÄWø7ŠwçC¥µ¬QÀRÃTZ#6Ó%UP YÅ ?Ð`éˆJ]¹èMjô KpVxåF$k²¦JÑM6Œ³ý(³¶µ´„[Àµ[˵>«Dë¿@ô·+–¹uVOKÔ ¹éxYû¶ÃDHsÖ¶uËd{”ÞÔbæ †ûl[§Ü¥µ«F‹_jt¨´©G´"±·}Ë·A²¢ÔbèÕ•Ö…‹«dp›duXµ'¶²;ˆb•~c³» S¹ŠY½õ¹Œ»´ôb(jºj„ºG”·Áºý躻HA­d¢˜ ±¼p»™•»½ÅJJ0¹(hâH¹ç·IKýõRc6dÆš¢Ù”=‰‹{ ¹K¿dfLÒ L6`J4i•¦· U„ [;]¿ËšªdzxÄdú¿Nb:QeC/D0F5$D<5S;+LB8S@.TH6bN7JIJGLRLPWUMHXQKVUUCN`CScGWiGYmITeIUiJXeMZmL_qTZgR^wUbnWfv`O@eQAcSLeXJhUEiVIkYFmZJgZTq^MkaWtcNtfWigealufrytldpqo{qc{tkxmwvu?ƒAˆH—R«Z»2k´^ÄbÌ iÑeÍmÒsÔ$jÍ,qÎ(wÔ9mÎ2tÎ5yÑYf‚_pŠMp³gu‰n”t|…p“BsÎC{ÑS~Ð+…Ý7†Ú>‘àn‚—w‹u†™}pˆ¹}’¢H‡ÎF†ÖE‘ÞZ‹ÎV†ÔX“ÜKšâWâY¢åc‰Ñh—ÙušØ`œàc Úy Øh¦åm°êwªäw²é„jYˆp^…tc€vmŠs`yi†}v’|h‹‚y–kœˆu›} ‹w Žy£”~‡ˆˆ…•…’œ”—Š’›”‹„Ÿ‘€””““–˜”™œš——˜™—ššš“¡ˆ—¤‹™¥‹žª“›£ «˜£«š¦±¥˜ˆ¤“« Ž«¤–°¨›¥¥¥¢¥©¢¨®¨¥¥­©¢«««¤­±«²´±­¥°¯±³°¦¶¶¶ƒžÙƒ¡Ä‡¤Û”ªÝ–°Ö…ªá‡¸êˆ½ð›¬à™¹æ¦¹ã·¾äÃð™Ãí–Èò»ÊܨÄê«Íñ©Ô÷µÈê»Òì¸Ùõ¾âúÀ¹ËÄÄÄ××ׯÊèÉÕîÈÛóÒÍèÕÕëÖÝñÈåùØæöÚñýà×ëæáêééôçöýóëîõíñüýýÿIH° Áƒ*\Ȱ¡Ã‡#JœH±¢E‚/jÜȱ£Ç CŠI²¤É“(52#UÆ•³‘ÊŽCÆìá!±PЕðŠ/II´(J1(=pè¡)&‰)áC+<ô`OÂbbH&¤Ù@ Œª]뀾¤É —Ã* ¢@’ š*¬Á‚`M…Ï¢`—­ãÇ£]xðr °J’º1¢G,ƒc0èÑg #~$3(ÁbT |dD  Ñ€(xÐc—°Àr÷éÑ9nîC¨D€áD c‰Ã(-Ô‘1)H<ÌÖXï=€>ÿÒ\š)~˜ý¶‰ÁhÅà ¤‚WÉh0ðÃ4ËÀë ÔZATL4¢ýpOD#„ÁËb½D“B Ð@3â!˃0lWƒX °€!@(M „rÛqg”T>!DÂT€l—ÅÐ2€Ä ‚ ÓÊ’¶DCA-£@aáeF(æ"Aä cž€È@;4ðÒ‰Zfˆ•£ HˆÒ`8š:Ì@6˜YEƒA~„ÊôQÌ_# ¹NвƒÆ]ÀÈHv@²„/ÇPF@ pÖÄ À,¦`Á™éƪò¬HÂI1¶¼+[1ÐÂÅbÍ|4¾5“ÿts•²E‚±ä2H¦,0\E“ƒRÔXÐ0>1V‹,@ÝkSP€‡›¢€RX%÷ÊϬ²kÑØðãéw+ƒY¿qß&Iõ ΰNu­HÇä‚ÌAÏæ3ÆK„|IÌôŒûóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/þøä—oþùE1#Ó1ÉC„… ©/Sû £ÅvB)$F ÎëÔ'ú aÉÖâ"­mms¡@çð™ˆPÀr YÚT„‚!$up4ТrÝ Ôá µ¸  (Œ†NX€ß%¹ÈÅ`&B!;0€-rÑŠ5ê ‹QÄCÿÖó*‘‘"Xù_ÍâE®ðdÄé~4Ãà äÑBz¶ƒl $ ŠNgðC å0Ç9@±v´£ËIa7=àÅoBvšÔ¬F8Q$àùŒÑ±„x<â!Ï@Γçq„‰Z:DŠ º4Å-¢¡Y°ÈƒŒL^”‡²ÈFঠ‘‰ò£¹ÈJX …ä ˆ@‡8†3Fƒ3ÖgTGq`vˆ†h§ Õü`‚Gp0ÎFùðƒC–j€p÷çjŒ·GVe*‡•ÀŒü°?GhÓ˜h©6y«Èƒ6hœ°kS÷v– »¶‡3¶ko»ø‹0úÐs”Ç—Ðo(÷vÕ ˆƒ†šÀi¤f€u1؇Ôx‰ø ’ðio Çñÿð¤fzùöeg }gŒj⸎ÄFj”–iñj3ˆf Œ{Sæ|&‚&‚è ‰²'#8c“ÐoîyT'RÇ‘¨”íÀÙ9Jvçpv˜–ZÙt–Öi~†`Æ•}9sç’Ny}Ée6y}sÐp pçl÷j¢Hdq uÑ·€–nòØw“f‹QF‹Œ „;tÐcÐŒ3ö üP@xš9æ–—ak7vS š›5F¼9c¾)dÁéctð‰Oés=gœF6•56µèkU hÙ°v@&›q)‡¦йÜÉ#ÇnâöcÖÿÙâÐ Ô`hÚÙîùžð‰c² vÔ ¸žj`›ñ¹Ÿü ²Éfp_wž™Ÿýy LV>¹ÀKÒ ëÀ Åwcv ´ 2Ñ ÊJ¡þ…<5Á ¹°~¶ªbÑXŽÁ ¶Ѱ>ô# º$´£í%@e@@TDÏ0a ;Z „ Ô9îA t_Ò9.0<‘`ŽA*š&„B*„,äB³¤¤Apù[(a0C·`£QD^† ´@ 5s+ÜqK ñ£ |Ú3nZ´U^µ‘åñepC€FRÿÐÀ 7p^Ð8Z' «ñF¼5oJ(mRE#0>Z¨5¢ÔqŒê¨k4©¡ESôX`)Pɱå|TO> ¤Çò aZ Jˆ-?ð8d^.Ð5  *-RÀ> ²‘J©¦â.‘/“"+Ò"ÛÁ Øú8/€+'Ï­*B­`­äH¸â#º0"ËP¡§Äs0z4*EDƒE¬ßáÎÀa´]º°’S”á’:ðÃâr:q* •u2yâ _âYD5Ю*C±/á°M±ÿqLØ„+ÇÿT)î§Ü±N @ë‘:ýâsr#p´#p8'A `.Î^d xZ2+ X e #ƒcà ²ö’Þ2½ÒE;µ²Ó²érµXÔP«P‹E:Ëz¥Ñëq·T%JkÅŠ)!µxPµk» %Ð]ë±Z Å:/½°™bh‹Lj«lk9@e.–SDr ®6³ q·y‹·1¬X:XU2‚$†ë¹ˆ{RA-Yб_ ®»k% 1Ó N2²ÀÎð*•âV{»jõ2l%¤;T¦k#u‹ªÛ8¬K®‹¤ƒÿà ¤TÎP»qò¹•µ€ Z=ó%LP`ð :57aa7x# °â[gcðU£1Í{E–SXcpXÓ+ o7¢Z¬õà 2Q WûVk1¨ £3qA1»ƒÁ¨À¶s\€û\óZŸÐ9 €¼;˱¨ 8ó5=";À¼‡{E¿%ó·Ó:¯“/Û¥™d]I1 ¹¢^Á¦ÊcHP<è5Wì¡Z¼Å\ÜÅ^üÅ`Æb<Æd\Æf|ÆhœÆäƒ` &öÆpÇr<ÇtÌÆ æÆtœÇz¼Ç|¼ÇjüǀȂ<È„\Ȇ|ȈœÈŠÂœ=˰5¼È @ Rº BàI+ ]p¥!ÃÐú·!= Éñ4 à¿Î ¸ |¢¿»±°Q¿'á°,p'¡€i1 ÉžÀÎ ­R)B4—Ò&ÀÀÞj@Ë…â&ÂÀ°ƒš Ë É§L𻿫ÀgõIná¯$þZª`•qy*%}eÊZ°IqB»µ¹j]@U'ñ(NUé¼Î×Ò½¦<(cm"»!ù,#¥$†  $ )$ 1##*#4'8%03) ;(;=?4>EGGGHHIPHG\RMDTfU^k[lyjc]rg\wkYkZhhhuuuyyybÌ cÍfÍ hÍ7}Ô:Õqzƒp“@tÎ,…ÝZ…Ó@“áv×y Ø{¸íŽ{l‚yƒƒƒŒŒŒ“˜“““˜——š™™‹œ¥Žž¨œ¡§£££¥ª­¨§§¨¨§­¬¬¢¯·¬²³±­§°¯¯´°¨µ´´¾¾¾ƒŸÚ„¡Ú’©Ü˜®Þ€»î­¸ã¥ÍóªÕø¹ÎóÄÄÄÉÉɨרÅÅæÞ×ëÞØë×ðýÝõþáááõíðþþþÿ€,\\U#†‚0#P[†M\Q\&‡\‰‹†YV.\I“•Œ#\J$YWŠŸ\-'O\+#ˆ§†ƒ³L¯”±#K(»X[$°–#%†#1©ÀŸÄ¶N‚/¸ÊÐÑÒÓÔÕÖ×ÄGÚÛÜÝÞßàáÚA\Sâ<=ƒHAà6\\ìß2\ó )ÛD0y @ß>.l8bÄA€#<ØÁÀT@” ãA :(r¤Á‚‰ç ™pàˆP¦ä2#À âyÜ9ïB >r¬pp—G‚ÝG…h$!hÜ’Tè-g#·õÀ±µG±\âj+¤R)ƒ¤èõÖã ©íÂýèÑãǶ@!ù,ÖŠìQ‡           *( 4$1 &"'#+ 4$2(<$   $ -, +%01 2' '") ,$6 7"$#$ $0#)4");*,;'1;6+$:2(767-B0D+/A(7H-JJKJMSNRUSNGYQLUUUPSYZVU[XWYZZAN`CQdCUhFYkLTdIUjLZgL[mL_qT[eR^vRanXftcPBcSKeYKiVIk[GlYJg]Wp^MmaTtcNvgXhffbkrnpoer{skbzshxxwS­ _²_ÅbÌ gÑfÌmÔrÕ$jÎ'rÎ'wÔ6lÏ8sÎ7{ÒWeYe‚Zj„hv‡k~“s|…p“@nÎ@qÍO~Ò*ƒÜ4†Ûm„—}‚Šp€•q…šuˆœ…’}ˆ‘y‹›}z ~‘¢H‡ÎI‰ØJ“ÝVˆÔX’ØLœãUžãY¢åc‰Òf”ØvšÙy¢Ûk©åu¨ãxµë‚kZˆq]…vf†|t|i‹‚y—„n›ˆu Œx¢‘}†††…ДД™”Œ„”’Œ˜˜˜‚”¢Œš¤‹žª”œ¤ «™£ª›ª°¥˜†£œ•¬ Ž¢ ¬¢’«¤›¯¨š±©œ¥¥¥¥­±¬²´±­§°¯±³±ª¶¶µ¸¶¶¸·¸¸¸·¸¸¸‚œÙƒ Û˜¥Ë–­Þ˜°ßŠ©à‡ºë‡¿ð™¯ã™·å¦¸â¼¾äˆÀî‹Áð—Âì˜Èó¦Ãë¨Õ÷µÈê´Õô¾áúÅÅÅÛÚÚÍÉáÈÑìÆÚóÐÏéÛÖëÕÜñÊêü׿÷ÛñýàØëçâêëêôæøýóíóüýýÿ« H°`5k‚!Âxª±¸  –˜ ˆa ‚!Õ@Æ`µ' ‚ð!ñBÇªÝ L –m& tb£Z›”Õn œ)ŒÍ%„PCÀH`2™LJJµªÕ«Wßfò)]ºž lÓsà2e¦"\ËV Û¶!3Ô™;L ‰ SòN1óô…Þ)A °!šA”— S-^½ad ŠèÉž?m²”,,V€bYøXºÈ)T¬¨S«^=Pƒ]8hÑ¢ÓØ²Õ˜€aØäÛßÀ†ÜL ‡ÏžQ[àe 2± ÂÌÔqØr5%[«G.–¨fŸ–Ÿ`ÿ*”3.6C †´é¨¬ãËŸ_M+ׂOk$+PšŠ ШÜ€k g,ñ‹QMØñ è…Ù$ô„{ìQ‡ !‚ 2è w”7x*j7.ÐE <ÒË ã^5OÁGß@Råš `í2P~ñGÍ ðò h¾H`5$ü`ÐC€Ô$!Œ]€m+~ùe  „å—[rö]N+Þà“NÕÌÒ–x‡Ì _>ðH5Ò0eš&A&ª(Aq¨iÙSÄ$ÙÓLjâi”RVõÌ4I#V¢Ï¸(w£–jê©aŠ)ª¬¶êꫦªÿ*+¬´Öjë­ɪ*®¼öêk¢ºîúë°Ä+`°™«ì²¾"»*³ÐFûª³ÏJkíµÀR›,¶Üv«š¶Õz+î¸%gî¹è¦«îºì¶ëî»ðÆ+ï¼ôÖkï½øæ«ï¾üöë.¸¦j ¹Kppn˜ðÃ×..Ä/+ñ”glñÅÀåz°Æ óÊqÇ òÉ´Ž,,Ê,³ªò¶-Ç\ªÄÏtøËAÖ8£Å0$³ê)AÎ`Q—,vH¥Ë—|*³U·X‘ŧÏ`A'Ù‚ûæ—cM¿½jDvï]fÐ-#¨@IKSuÌ2Œ`A4Ô°P Ü÷#Át€C1ÔÈÿÂÀÛ\;ìªb46‹ƒ@—T£  h§m,DsÌgŠRMŠ .5%¼½,|âÕ5L%3WÔPÚ³„¡‡ë‘÷’D TøBEoy¸nFoÅaôÖ£ØAÌ@q/Pï5<Ý_ë¯ 4 nF{ïx3ÅItA(õmÆ>{õ!ƒúƒZ»ê1cE =¤'Ÿ-˜‘wûË1€#ÕpÆ_"R‹´€ ¢ª ¸–€3¼E,OÑ’ jPcÀ ¦6 ƒ4ÈÐ-P,´`P0… ÂÆ &ðA.øt8Ü$/éj²Â\!€[ ÿ@… òÀ'¸ŠÀ>Jí ÔHªà¥’x„:F€@¥A2ÀB& j| \ð’ýâ#(‰€=€ \àÂ#„:$€W× 3œ§!y+†4àPí`¦nalpÐÄ-…kCéì&°›9âB D† ¶€ÊÚ¾0”€‚tˆ‚ÈŸ9AR2š €'â„âµá–’¬F %$Œ‡É$X :lâGùAÒ‘&ScôÀ0V°“UÀu ¨Ò›ÖðÎ3ê°,Œ3–âI5V@:¤Ð(=°ˆ*D)óPH¡£2ÿJ vÀp™I&Œ¢ŸH¡r’ˆ-…"+ #8*xÙѤéÈG¤Ñ€LÁJ‹5t¡’ìF¦ùJXÌÂ1mS[ÎÀ!á8¢,£˜ÎÙ"±%ÅM)Œ…–þb$æu@M_jŠ(mXhÓM4*”…˜$tN–AÑ<ú‰†§'?M ü¢—ˆ0C € @ûX#²$Žp@ô”ÙÔF Ï8o .qt¥«)M`ñ a<+ê ÈhØž¤üðªa”F˜‹=YjAÔp¦Ö¸-3´3¸0Œ7¶½øÝOzcÑÌ e2o &^AãZ±ÿ!ámÖÃÃRúj@MÄY ,ˆMš0#J¥&¡þ“@‚Ë(¸2ä€ÂV2Ã/ÖÄ „E3qA¦2Ž`ðd;ņf ÂŒÀŨ *·݈˜Ë@@v1‹Ïæm ¿€*ÐÉ$c/àE-Nð¶Ú²A9øEIˆB˜ÉŠ1‹€$>±0@0àkŒ˜¦ȵcA—Ô¤_4Ò¹àÒ“šv µ§h!ç5–€5&Øi¢'Ñæ,fÈAŸÈ°Æ" ÕPÌ|œdƒüIM‚35åöÝ_zÁò¨A^l€ÿ8a(5k±§±òâNu'.y L.}Ÿ°ƒæªÆ?_ƒ@Ü€5º R¯u_ V düâkMH¥’ÚÞ¸ÁÀKΨžñ‹›•kÓÕ5ATVkÊЮƫ¡ãó$‚(ÃÔž{YÏPcpaƒÔ‘œ°u½kÔÌ‚ ´›¬°eFì®-ûÙòiö[ MíÕüáÚØÎ¶¶·Íín{ûÛà·¸ÇMîr›ûÜèN·º×Íîv»ûÝðŽ·¼çMïzÛûÞøÎ··Q}—Û‰xÀáïl Bà‰ xÁþîV¸âá¢ø ZAñV°‚Ûƒ¸?±mT<üã¤ð7 úñ’—|÷ÿvÅ6¶Ý “—¼‰`¸¸)1ŽË<Û$/¹>þ —ÿCáØÎ¸?ð±qmßÃçìy?ø!Ц‹Â÷¾G=Xþnˆ¢è(yÌoîmSü#\ßö9þ¡ pgœ‰8»Í¯}Ë|änÏö Ð|Œƒà•`‡+æ1upŒƒîòHD+æa÷kuWGÌÕQrv„Û-ûµQñ¤ÿ¡íÀÇ<.~í¹ãÃwÿÃ8V.qu”Ýï€<áQ~mÌãCeÿ8Äx{¬â£8º=Ôv¹ÿ#î׸ÍÕŽí¶ß|äSÏöÈ+ߎLÝëÿ°GÒÎÆ—\øøÇÊ×QyÆóCô$WGÿÄ!ÿõlýò'Ï>9$žæ;ÿ÷(ǵ{Þ øÿ£ú&ǾöÑÿqdÿöÔ7$§ £0ÿ ë×{Ø6v±·mW~Ø& KgsRw|$ÇÈ„ð ÿ  ×f_çu h„ðèƒðòç ±ÇWÚyÙÆ}À}[çÿ°xmàð‡óWu$h‚;˜‚òÇ}7rû0„†ðëçu’§€÷{ÝÖü@r’0…K—|GWwu÷xù¶|ó0†ó@éƒ×F U…Å—|^—…Ðò7qà G÷‚Àwm2ˆm4ˆÉ÷-G gX‚æ'<'„0ø†×&‡Ð~ãÿðˆÙÆ·ˆòdžR¸€d·oÿ‡= æ÷ꊊ§txmÜtýg‰ðçv^gsrÙ'}w¸ŠT…€ûðýØFy©@ƒFgyôG‹ ˆq(˜ì ‰qLjªx‰)˜‡·‰A‡lWŠwÚÖƒ“0yÿ° ª8‰­(qr¨†õG„/ˆ€DÈ %· w†ˆÐƒ' à@“Ø„õ'ŽÔxŒðç pÄèÏx‰á‰ÜÖsœØl'ú¦Ù¦†ü  ­@r„ެøI(‡Mh¤à %÷‚d×oäGg€ûÐÿ0H =8uI‘$Í÷ ¥ptÞÿ@ŒÆÈˆ-'ùô0ÎXy`÷§ H©m=— ' 9 ‡|Ûf 9ÇtÅø`˜ˆÔ8rò׃ק‘p %ÇyzèswÇÿÀBºx€$I•%g••sòÐûè†ýȈ²grõŽØÆˆ€`€þp‰Ùæ•%t‚>gð§ŽRhP§n‚`†9áæhù%,Y ~ mŽÉ™Yn`„n“)˜¦yšéf™i‰™ÿ ›‰š°›²Émª‰T,éš³™›ºišµi›­ùš»œÂYp½é›¸9œÈinÒÆ0­" ¿°šH¥–ïPmʲœÅf*ιšS –.‡jÔ)2Ö9m­ÿB ÏÉBð°Ï {  —öÄžÎv)‰Bž+ùÙð jÉž±æž¸ŸâY™¶ôù²’ð ïàüy+Ó ò¢ ¾@ `qŸæyiz¡š¡º¡îò `Qj{` ÿ`¡Z¢&º/þIi¬!j¤ö%—  :,) .?Bjª 1š2Ú‚ ØàŸ#8Vq.9ú+Ù =ú×P¤Jº¤<Ú¤G: Iš ×@ S:%Ì9¤Ýâ¤Oz Qº¤Jª¥Øà¥bê¥UФ^ú¤+ƒ¥×¦cÚ¦MÚ¦pª¤UÚ¥LÚ¤³¢¦kê¤qº§|Ú§gj§Î‚§Ë¢§~Z¨†*¦ZJ-‚j,aÿ¦‡ª¤5³7ó¨qš¨º¨LcX5X0TSiwpc¨U³6”ú¥W.P qªP¨„ê¤Á‚©S±6mó6q37T_s? P¨qªEš79²ÐP pz?`¨Žú¥€z§´Z”c9˜3šÃ9#€¤*–ÂZ " Ñ ¤¤ ǰ;EZ ‘± PV §*«º2­?úcR$ÿ3Jp&9X!¬ ”Kj b  V¤o pà€ ¬ô*­ö*KnGrDG! P¯±ÂÚM™0¦ [®ÙаÊjÍ*¬Eú¬Ù0«;Mò¥\ ì•!ù,Ö³ì‡           ) )%* $ - " 3",#.4 %#*)>&0(<#  & ./. #&(02 '!'%) +"4 2%8"=* %&"'/.( ))) %0!)3$1>1& 5*"9+$:+)?7,44467:865879;;;,A,@&6B'9I,7G(:I,6T5=B.A[7@F=@B:CM3FQ9GZ8HTC/D0E4"E6,H5!M>+D<1A=;X?.JC:QA/SG6SI5UH8^O?EEEDCJDHLKFBKHCMLLCJSLNSMPTRNLXLCTPL\RLTTTSTXVXWZYXCN`DTbGWiITeIUiJ[mT\j[[cP]uY_San]dnVhz^fpYhu\mz`O@eQBdUNoWMkYFm\Ha]UhWSi]Rq]MobTme\pdVsd[viYybQ~kZbmwfqrhqrjr}qomzobxohwqg|sksss}vpzxt{zzYe‚Zhƒ_pŠbsŒr{ƒv~Šx}…p“o€–n…špy€Šs„–t‰„–|‹š…jYˆp^…tc€wmŠs`{lƒ|uŒu”~lˆ{–iw“„|‰u x‡‹‹Œ‹†’Œ˜‹“Š‘™—†‚—‹ƒ’Žˆ–”‘“–˜”™œš——𙙀’¡‹™¤‹žª“œ£ ¬’¡«›¤«¨¯£–†¥š¢›’©Ÿ’¬ £ “­£”°£“±ª¦¦¦ ¦¬¢©®¨¦¦¬¬¬¢­²ª­±­°¯¤°²¬²´±­¤±¯¬³°¢´±«¶µµ¸¶¶½½¾þþþÿï H° ÁƒïÙ[Ȱ¡Ã‡#JœH±¢Å‹3jÜÈQb vI²¤É“(SR É2¤Ê—0cÊÌXÏ]Ì–Ù­Û¹Ó™öê¡Ê¨Ñ£ ™Zªmaª§©`AœW¤„º‡Ã–ju¦çA†-ôó¤(Wu‰ K%Râö´{+Ѥأçà.ç)áêC.kêêµ Œ'Ö"WcWÖd—,iв&펀séZ< ›è‰\£(op7yCJ„^x™dcÇY Ê»ƒ„É¡…àà ÃǦOŽ´éÖkÌ’N ë]b²$ÏUG>ÀÁÖP­é…¿øÿYî ’+hîîh¡¥ôõèà2î)ùòRL’@'ïÉf G‰L¼b1G`…!§EtNzI›aöÈSØlµtÛ@ö°AõÄÀe0…=¤@ƒ]„ H`C ‹=dŒNØ3I$àÁCÞ5´ƒ ö|³yÀ"AÙ€%VaO,DÏ«\é"Œ2Òhc’ „ Ç äâe z¼ Ú3b€…" F”ÚjÉ“CM1Î ²Ñ†™†*ÄÂtÀ‡ñp€-U¢iˆ0Ôñسɣ:°Ø(µ,´IseØ]i ¡¡A™lÁ1¥íüPÅ[òš¡Æ%ÛÓ‚vŠÂ‘¥©²CÁBÁ²ËZÂm©ÓjhÎ=R@7 ÿÀ-jM4¿ãÐÊB•4™½šH>ùR”=ZIåÚÍ ñdÈ¬×øž¥(0´:$ý,Ôk3¤2žµü²ÜBz®‡•³@Ë£¦‡¾ñÌF1 ) è FÉØT° ¦„ç Ôä³F> (s‰˜é^Bï/ŒO€“ =¼=¼ …5¥, Eê#@ԴζB(£L3¡´1r`6©ãˆÝî1ƒ-¤K´qûmcnêÛ×b41(@ú 0‹†ìb-„:¬‘\r 1, Aî€aÁB º$¸-Æ8TP©~Æ‚ÅÔã h‚þ"©°\€m X Ñjב~„”!ÈF&·E†åzøàâB°èv8O#f\¢1bEÀK ta‡¿˜0®ñŽ(kãG¢ºÌcŽt´#I=&¤!}DÊ[¸0Š‘¼‰!Yò–E&Æ…u|d$7y’€!ù,Èjû¥‡   ' ( 2%1#))<&* %1 1)"5 6#&&&$*6!3/&397+$:3*4446786:=964=96:::-A0A&/B'6G-lÅ5uÈ3ÐZj‚ao…gvˆj~’sz„y~AnÅI{ÊT}Ç5ƒt;š‡?¯™-‚Õ7ƒÓ@±›B¼¤m€”zŠs„•s†™vŠ›y…“yŠ–{ŒšJƒÉIˆÒJ•ÙZ…ÊRŠÑX•×a†ÊfÐh›×y—Îz™Òi¥Ýr£Úm©àu®á|²âEÆ¬Š ” ª¸‚kY‰r_ˆwg„{t|iÌÚè÷Š‚z•‚m—†sž}¡y£‘}‚‚ƒƒ‡‹ƒ‰†€‰‚Œ„•‰’™™Ž‚›’‡‡˜£–£›¤©¡”ƒ •‹¤™‡¤š‰¨š‡¨ ž´š‹©¤™³¨˜££££¦©¤ª¬©¦¢«©¤®®®§­°«®°¯°¯¬°°°®®°¯°°°®¸°®±±±‚˜Ï™Ó’ŸÃˆ¨Ø“©×•²Ý†·âšºá¥·Û´¶Û©½á™Åê¯ÁÞ©Æå«Òí¸ÉäºÕë½ÞðÄ¿×ÇÇÇÇÉÞÔÌßÓÓÓÇÌãÈ×êÕÌàÕ×çÌãîÂáñÝãìÚìóÝðôàØÜáÜãèåêåíòëòòñìëðîðòðìõõõÿ H°`°t5[Ȱ¡Ã‡#JœH±¢Å‹3jÜȱcF]°xYЊǓ(Sª\ɲ¥KˆZH’äñ²¦Í›8sêd(RfAX;ƒ JT(,Ÿ]Ê´©S‹È|JµªÕ¢R^ÝʵëʬS" ó%–2›ÈÒ¦½è¥ˆ-VE4öËCG¼êí¶Ê.€ç"©$ ^¼@Å'*Ø  NÄ`Z4 ¤×B öŠÎØ÷ä(n5S%À.‹O\Ä|D—®)$šHƒCd—-dåz´qÒ`=2‹àìB_ò6#ecÕ »HÀ£p³)6ôÿðÜs†Ä0XhìÇv™ý àz.¼˜ñÃc Õú塊˜€Ø[,tß&Ø5Ý^€°ǽd òà2? 6ôàÜC¥u„™1³P¨ñ@r1äEÜvC? y ™×d½0³5Ð3@ÐÄ-ÄíbL`1€É<Ù+6ÀÂy3°ÐL.DF6™>¹D…-aÆCAp‘ˬ‡Y X  D%rD!  ,·0ãÀzÍC€o?ÊÖ tÒwC>2DÙ.,:ÖÌ œÕåp®=Éèi‹XÙL“ }Zƒ¼,TÃÊ@ÿ#Œ²©f¯­ØëábÂY:ÔêPŸµÀ A& Æ”¹Ž2ô„ –k3ìÙ£³ ]ªCpŽYܧ§†:À¤˜b*ªÍ|J—ݺC: jkJæ1yOØÛ 1HGbr&F×3ÙbFC?D›,µÍ\ÊлåqÛÌ·½è@†zFn“¦n€ºç–›ë§h[м_ìï½aV@’¬½ÆH`ÁˆÃÜðHÜOjKAÍ[®ì °È“ž:€oO@2J}l.º#¯[\»^ÖÚBNX=-½/ÃÌ®I#šó<œÕI¤ºdA€žiÿÌD.G,[ä÷€\ÐBæµ"›ð…? €j˜Y` kÍ ª“%‹LòyÄù Ð§§±Pˤ`fËõªÛ?®ÇLØb[DÄrDJ‹¥¶3Y F¡CÁЙW0V€w”.&~ í.˜å Ñ/ȧk*3E®gýB¨ fB2fF«Ò®Çüµ´H¯â¼Ã åÞ‘m­¦ÜEkq”?Zä§ï•üþ  5Àð€|òÈÀ…°Lß#HA[M°‚Í3ÈÁ®lp"jÙ_F À¼‡„ð~ÑE(„‰t¡q;U\:²|A J±áJ˜’JÄÎK€-ÿ4‧9DcÎ;Ïò$˜[cƒˆÆ^SQÆ24tã›'-~(ñaD@Ût>K¤H%ò­[èBEÖCˆ£Šôï{ Aa"+œˆ"€WÄ —±`7 !…„ ×Œ56 <ˆ›ZÖŒŒLAý9ätd ï$ˆ’ÐðHуf̧>·¸OýÀ#Ïè‡?þÁE%‘ eÈ.ò)@$"Ü)Ð"ÒCÉ÷L BkvÃ" Akd^4æ zQòI>ø’Ž” CPGKúÔ™Ò€5Í JbRqnd‚íÈ‹QšRÿ ØGˆ¸ Nr¢“2“ÿ'mõln ¦0 /cЮ9ˆ&3@C1*e*¢%™vDJ´ u%CM–*/Õ“V«ëèæ ª&в¤¢àI»fTaW½úÕÅäȾ ´" æB€(Áœ‡ —Ð,gAJšÙ"¤hQbU¨à¨æ”æ²jÎdÖbH¶B–® Ö“xFÒ¿ü0#Ö499M«ZsºÓ@ VPŠê“!#TŽc âÆI–Çi¤+†Œ Uq²n=g»j“$¶wqõ’*š=0³šÝŒ!9Û™/³²ÖΪõ¢©½ˆÁ‹'6PÀ)âiJpJI.¢EO«ØeX´ÿYUk» EŸD´ìA–‚_mãÌä6 ÀM"6õ¬r…IL‡P¦ºŒfü¦ È0mÜŰ…/X¡5.XQf¢«§Âzô°V}U!’Ѥ…"Nq[Û *ø$ JÂm[3fW»Û%³ËU.ÙðÈ•Á €tY$D>Ëy¨æwcϰë{T=_ùªE€c¡ yÊ+ÌcçëÕÅ´¬¥Éjßû6+•/„a†Å‚î1'Éu±goÌc—äXÇÊí±Oòc ïxÈHF€ä$;¹"EfòZŸLe#EÊ/®²–Ϻd,wvË[޲—Ó æ*‹yÌl-³“ûBŒ6»ùÿÍp޳œÝl›:ÛùÎxγž÷Ìç>ûùÏ€´ MèB šÍsN´¢élèF;úÑŽ´¤'}h° ùËͨš‡|f4/$Í›¾q”­aKƒ:Ô{‰ ü`µ’ÚÔšFuª ò‚A´Z­¯¾4Cb-ë €œ 00ˆApBxÁ@\kÏ’ºÔ;>u¯)X  +X€ ú0¨àËförŸmäicp$µ¾5®¡íìf»ØÜD·­ ÒYw+—dQM0„]LY'ËÐ#¿_ãí2D`ØW’UÁÔÏ@àA!X"ïÐ{Ýì®·5XÄ^H#]ÿÎ Ù<@µÎ!ªÿ Ób†×cˆbàÍa@ :†qx ¢N¼ˆ¸Ç} ä0͹´o‚œÖsUmˆ/tT]Éà4¬B§š„¹4ëù5°U ø¡ØÊúºL 0@e"0³…þ0’îÁ(C9!†`I<´àsX©DˆT °’oÔéYÊ<ñ.õ|@½gx^‚¦ãƒ,x` ÷ñ‚ 4Óž÷8”ê;&ýÃë1‚$VS:p~ Óߢ Èÿ€1:x0 `DîCYňE\ùçQÑÂ.ß.‹“aëA(àE'H¥(s1´Ì  ,Ò± ý“/ ·eå2 ©°‹½È‹2𠨞0fÅI@fž³‡a¸7òˆ…^Ù堯 ”a“³E‹q]•~Ÿq† Á~ŒE/Q¥_JØ2ž¸1Ó ‰UU)V€WÿBd²{a *ç<‚±#"SY6“(:|$‚ ¨à ‰y §à § h6 q‡ t‹õ5*ˆ^¯â5`5ºõ;ºÀ3§auæv‘Ø–‰ò   ÄEÄP»¹Â Iÿ+ÒXçåw_S5W£ïØ:59Íà[`Z áˆÌ ÄÐ\ Uˆ+¸’Þ¸>y\hicv Pºê¡ 颺Ñ7”ëq`Eb5 µ<¸ð‘ŒÓ‘ axIàø/¹Áº@ ­Á42÷^´³ ¸² .© ,r€£%V%U•s9Ðl‰Ráw ¨3]˜Öå>ÐååÕRy ,Ò ÍÒ`²0-Å_¶£ñ.6 &>‡"( í< €H“aè3 P,”Íð ­AYÆ[ƒºy1èÓ¹p”Ä<×™H¼S'R$u¢œÿè“×"=¨1DÂ)^âƒ`‚¡`ƒ³žù¸œÒ¡,ÇÕRîcb[Ùe^Ö ¶ G¶Wª“ÉÒ}y4c*A þåê6fc¡ óô;J¡*± ü)›*A›°vSqPõ—ƒð& k1 Õ1!y¢W‘¢¦£ñÆ•úŸ4Ú@}¡iУ>ú£@¤B:¤DZ¤Fz¤Hš¤Jº¤LÚ¤Nú¤Pú£;¥TZ¥Vz¥Xš¥Zº¥iÐ\ú¥`¦b:¦=ºnÀ¥^ ¥o lʦk@¦@ºm*o §vŠ¥j@ zŠ ryª§zÊ£qzùЧ@ ˜¨‰úLÿš¦Nªöð’*©Û¦˜` Az “*©î`¨wz¤pÀ žú©=ªõðûðñkª’Êuê£kðù@«£šó°©ÿ PjªøÐÂÚg ¦ó™úÚÐà ÿP¨¤j¤ŽðŒ­AÚ ÿ F:«…Ê­£z¬j®áÚ«Yñ«õ€¬qê ñðÜð¦`–pîݰ Ýðæ ”ðï° <ªÚÀ¯ß jà úäP­=ª©ÚÚ£‘°«=:ä°®˜Z¦êúÚð¦Ý€ ¥J“@¯öНúʯ•±ëÕZ¯÷ú˜Úïðïð Ö ¤l°«ÿJ¤ÞZ¦¶ê£Ç¥ŽÚ¤¦Š®>jªÿä ªj0­0+³¹JÞ°úðßð²˜z´æð´ø°Ýp°ÞÀ?ʰC;ù°ùÀ /[©Dæð뀫¼ÊªûP©Mû´Q;µÿ€©e{¶§ª­¹Ê·ÙÚmk%;³>Š­ ¤³Ê’ ¨jÐõ­¸*´Nú³LjªKšë™ð•Уˆ;­2Û£b{¦š·r jp ”У§“›¬‰›䫵ۧjpüÀ¹ÿp  ›q0qÛªt›¦ë¹©K»üð~Z«:»›p°2;­ k¸=Z³7¤ä@§ªeÿj¶ôð<:ýè|@®Ra®ù`ðkn þP¬p ¬Ö˳è:­àkª¼š§Úà / »= ¤`ë£â°»òÀ>ª©|@¿ÅʳÃ;·±›üÛ¼¼*¶Ü°Áõ«ì¿œ­Ø ¤ˆ‹³û»r‹Â¤›ÞÐÂÞp«Gj¹K´@šÀuÚÿ° Óš¸<­°ë¿j«ø:Àüµ"\ªòpÿ@éà£+ 6 ¤Â¾t»¿ÿðÃõ º‘«¹šû kðÁY³;­º½Š{Âá«ÂE\¹¾ú¤4ü£Øºë¹;¬¿=êà ÊÚ£›pÅk¼°GœšÙ ©ø` {Å}ÿ¼¾d« n07{¿U|Ç~ Âèuº¦ Âù;ÂpÈqŠÆ)ü£ü¤2<¤â:®ÍK¹Òk³‘@ ëuLºVŒÅàp¿ï ˜ª°{É”Ái ©ß@ ˜pªzÿÀnû˜ðó:½ù §‘»å ¬‘¶ŒÇ ¬©æÀ»ü¶`Ì«Ó:×KÆ® ‘Ê’À¦ Ê´ì³m\¤©œÊ«¤Žµª*Çœè`ÅýÆ}üü~ Qû¹ ¼©g‹dðó¬ù°ÅÚøœ^;§êÌúP©ýLÉÿ·ØÊ©}ÚÑì§Æ<¶žì£ýþ«r««j\Êl\®‚ÿŠÊó¬ÊDªnÀ¼PºoàÒ~ ÔBZ ý<ÔZ?ªÓÀ¬oÌIêÓN=¤kPÓ)m¸;*®6}ÓU=ÔEmÔŒ€Ô[Ö¤zÕô ¤7ÓJJÕbJÔ½ÊüÕb×pZêðRqÖ5×jí§XmÖ}=¦lÍo Ör]ØhÚcp×g=´zÔóìØ½Ö]í<ƒmØ–¥P AÐb7ún;¡ m-Øÿ` 9Jq6ÚÙM¦ ý<½©ZÚa÷=á¨`;Ñ”Íí~Í` _0µðÚ°M@ˆÍÙµÚ±t®ÚÊLÚŽ8ÜaTÜÆwÜÈi8š¸ý_ðÉÿ Í Â-ÝJ&‹vÞè-gw¦hV Ü­/έ۔6ßô]ßóhéßù­ çmh¹0(µP cðÝÿP ö}àžà~&£Ö­c±X£’ªJÞawÚ >£'¡ ÜãmáùiÜk5 ÓS$. Ôâ)®c%>f»öYPÑŸ Nd`AjÔ€qÏ–ã*¾ã'žV$žã-îj$äd†i3¾}a ;LÓãNþl;N O>å@îãS®âž}ä8QNåTžâ^æÏVâ^¾ä¶Ý ªåÊå*.ænþæpnãfÎdjnÚY±ãqžçz®ãs^nu¾æw®ä{þlÆo½=è_ÿÞæA~ãY~¢ çpìq_˜ Z KÍ@ ZЊÈU㈮ä'À aÞ\çm.ç+d'êr0'3Ws~i”éñv‘äÎ"#Ð*^@¡áå4ЮäX®êæ¦u0¹—^7)§^Íð‘–eœ>èÍÊðlr÷ ‚Gj¤MO@×èQNìÓV{·—{ø¸7b±H@Ѿçʧ9. ÀÁ VCjçäAµ åDže½&Øžà!ì1W‹²¶>è!8åôÞ ö.ÖðëÁ>åý~ݨF•XɧQ…ßîzþ #Ãðõn ±ñ ìÿäŸÝjÆ ¤‹³X¡ÿ#XëŸçÊwNÞÛ ÿðÑpò)?å~¾iúÈ‹áÕ’Måû>sOjr×$¤-?/ñAïä©.î[&•¼€ñ»`•ÏWÄa¢‘ðƒî•`9êñ ÐQF¨s?_”…PíYêŒÎõTvš©¹š­‰îQ8QMïožfïʃx?O Fw÷yßèT¶ òùžÇu³PLâN?ñš ; &ï‡þøá®÷U¦¡ÚC7ÿø®æü>ôÎ'Pû¶û¶_¯¿ûAê¾õgNÞ3ƒûÄ_|¼üû.åPÞç_ÚhüÐê]ü³ÿORýØ¿üZ/å’ÿ_ýÍ0EÐ ÅGÙŸýÊÏçÇòÕ?Z ã?åýç¯ãéo䨽þíÐßÏêÐÿ¤Z TcÍàA„ 4æË­…%N¤¨šÁ‹Ò4näȱY³EŽ$YÒäI”)U®dYR¼>£IR5…Üj)²@+µÑ¥®HÆèªH± ¨,ôjZÕê‹Ö2väʵçW°aŪÌÃʘQH À¢ÌjPj“¯‚T(з€u|û6ƒuUáS2½<°ðÌðãŠÔ²níZyìeÌ™UV1 Œ€]ÁÞ6k€·Ù.ffݲ@»vºüÿ\ÀZAÈÖ¤¡ulpTDÖ–Ác‹Ab € ZXÓ •H#)92ˆ£)©÷â±Ê½å©^|m"—&m泸Рɵ Zvùe—mË”¢2:Un•Š—ð*¸`žøèŽªÑHii¨¡o­ó6Vÿ0¶z»8ý5PF$£²À–¼`6»e™3”F]’Q¨e*µaòÒŠžžx£½5¢,¡¨µòÖiª­6œí‘/‰m^Áš—ÞW«*ð'v&rÁ§¦ZÃ;÷œ¤Ç‰Å¼)c’ˆj(‚à9òÁ ßœóÏc·:ôLG·ýXÉ^÷HvÞÅ¥ýÒÛƒ7lpÝwïýø+7Vxæ)j½xY‘—¾;åûjþz‰ˆ‡öé»×¬ú´±?s׋÷þüÌÀÏöÙ¢i¬Ûž{ôÅ})¦™jº©™Y¶øZ$bhae,Q_n¨á\%"VQE\¥iDP+Û«ßÅÊr–¨…-n‹ÿFòƒìB^Ê;–HÀ6/8 —«Êð©ÈIcM+ßë*8.Îx4¢Kiz5`ÅÅ„Ã"¡€*ߌf Asóð@h^(ð  lB{ Å(xCZ}'<ã)ÏyÒÓ tæ#Ÿ9£kªWB$Zc@DÀƒ ÌXl€/T AÀ3 äƒ?rk"ƒ×üÀ(®•èD&RÑG¢uF<‹ˆ¿ƒ£A–‘guáŠÖ³Dƒ7jT¡Öpá§ž²ˆ àt‹Ôžùi8tqi$ë3€è¸7}Êqšá…"AÏZOxpê´Ò B5Yÿã°ˆ<z·Ä˜¢å(H‰dÏŠ–!€YDÈ(iV`'SšA˜€ ¤Š1ˆà–àMš™äA?û‰M¬ÔRwÜ—­r•]‰än:xá99™%ÅÑ §4H4© ÇØ UÒtu–¡&©Mfj¹Û&AiU®sí4ê2 »*0€x9”vÕ‰hB|E‚[taÏšc t1 ²[8׿n¡ ´j_ôLŠ%qÌc ÙG¦ËMÎÔ€(€…gQã %Š'U‚q+&Ñ *cS›Ê9ú=5DËTbʵ4n&X x;ºÁÐSu“H&¶ Á¶Usouª\­¤¸‚@v;}Ÿ Ëظ:– ”]deiIRÌfV³_b=û·6u´r2¿ÓV%µ_\-AŤ¼ÂDo±=HCÛ¡Ú>àãnwëYßþ6\Á%è}Àgh´²ÓЦr-ÆÜ[Z|~áŽLÛ‰5e†»¬uµƒÝú!Î-@@!ù,Çj¦‡   #$4'5+> $ $$$#&) (&&(+(&$)'(+(&***#.=*-0$62%0>%<7-13*2>0-+30-5554687?7688864886999,@0A /@%3A,5A-8B16@4:B:>^<;c~/,s0.@?B@@>BBBDGKFIMJIFKKJJQITSSTZS\XVZZZZ^`Wbo[co`]Zcccdidjjjlmqkqknptsssuyu{xuzzz6„t7ŠzG€":“‚<ž‹= Cº¢‚EÄ«FÈ®FÊ°Ž – Œ-)ž)$‘1.œ8%§ ·¾¹¾ ©!­$±&¥("¡.*¬'!­+(©3#±& ²^N·_TÒÛ× Æ#Ñ"Ô/Ù Ú"êäìòþôô ðå á(è$ï#ë(ƒ„ƒ‹‰†‹‹ŠŒ‰‘‘‘•˜•˜——›œ›ŸŸ Ÿ   š¦¡Ÿ£££¨¥¢«««¬­±°¯¯°¯°²²²µ¸¸»¼¼¿À¿¾ÁÅÀ¼¹ÂÁ¿ÃÃÃÅÈËÊÆÃÍÍÍÓÓÓþþþÿH° @6„XȰ¡Ã‡#JœH±¢Å‹3jÜȱcÆ„ Š)2‚Ç“(Sª\ɲ¥KˆHÊ©à¥Í›8sêÜÉ0äÌŸòJ´¨Ñ¡€þz´©Ó§P+&U*3ªÕ«XR­šµ«×¯*·’L¹!B¦/ª½h$Ú†˜tè Ø»ÅŽD“à…‹æJ-(àíCLÈ`BĤ B”å°¼˜3êy’1…µá²Å¤ öý+1Fgžq³A ,{`ˆzaÀßF­ÀqˆÀPn˜Ô¸äÄ ?8n„ƒƒ 9€(aˆí6„ÿ”{|®xàÆ34@Nž¶Ë¸ÝMJŸ«!ùnˆ¶ zL*ØaL}¡AÂuÀ tßBÍ5tvÄ…Ô€uØÅ¶]€N ^&%PÓT hbh—{,%%W ôš‹1E†_~ykj%„ák!|P C¥1Àбõ× CŒmÀk!í&âBbXSMv‚… MÒrz€˜PÉ¢JI1•ÁÌx¥f:„cŽ%ÅŠ 霦1T$–²…€€F:è×­‡\”M¹ePZ>w–\†0%WÊÁŸÆyæIü%´\›ÌÑœígjC˜.y`Ÿ ýÿÉØr–fúœ¡×y0^w 4ze•9i°•^Jh“œ*àé§uú«™¡Á*'ª'H+jꑦÅfœ+ÊPl¯!¶\B]þ i°’R*Û” ô™k²Ë2»QR´>n¡@gyØe×u¡! v– m@ Z4F !h‰m eéR¹®qvº›Z­€"TcÂ}*k/JiùÚ£{ãœ(16Ðg m7PFYh!<Õ@Þù6³PŽËqÃ:fókŽöUànôž j úÆ6´ ù‹¦Ë'Ðù¾ÄÁ‚R{¥uÙh§}ÒÙj·ívEl¿-÷Ü ÅM÷ÝjÛ÷Þ'ëÿÍ÷ß,ú øà˜ ~Q†Yk!~¸Y†ûrdK4áe`ÖÂåmÞ’á‰vuâ *‘OI‘CbуǥÇ.æ¬ÎüAX¯M­G­–¥`F¦G’Z!Õ;.Õ9J;EcæzE˜29Úy—ÿ\e6"—¯°^Çcw ÕbyX®G•‘¡ˆx˱§ÜwÜ]·ÆÉ«|Ðgß©»w½ÆáHDóÆ(E”1ÝÁÂ=¸èì9GÈÄGž)©OE$KX…Fƒ Ÿh'C¿Ã[ó"MeF zàËpt’ÿ9ŒQ¹úN™r$þª d ´¢%¾¦X5a™ÿ2²G%dUI²’ÐH×6ú=&Pk"•x'þÁŒw1‰h6g!½hd¢SÝBȪšlÑ,";EÄ¢¥I T¤ìÄ·:$TUœz³Âü´P›#Sº³€¤à~ €*2É.JŽ3µ?¹ÑIŒbˆˆæˆ4¾9ñ!?ëd åº>Ú¦…¶êRŸ|¤BÉ$pŒ!TO`5µ¨VͪV·ÊÕ®zõ«` åE‡JÖÚÔ´¬h5åf‚…W(!­p À0ý<„š€kZÅR2À®©Ä+ ×²Ê„ d0ƒ\`1¡ bC èä&¼ ™+.QX•ÊÄ 8pd €t 2ˆ(Û"¼b¹Ä+òÚY“ÿÊä ±_ë×R„ —ÀlmG*“äv·ˆkak‘´…!ÎåhNâ]òA$0œ;©ê"”²(À¡º  Ò׿&÷!–®D¤°&àŽbàÊÃxÓI“9„¢ÁÙò\¤H¨˜y! j@ƒ$e°Á ÀZ†–°¹Ä*¶àÆ\†ŽG!}ÿb_úvòCúÅcŒ)$… a‘ Ì`†2Àà ax¬qSuWÚF¸ÌZÙ4D¯|ìÌy ©€û°GŒ±úï†é©ë E4FN–#kŽ!SrÎ"D¦ÊíÑò-‡&AÝAqFb³žlÆÄÿ,Á‚ÏùêãeFª• XfÂV·VDH8ËèTpËä&Ó1Š€A«-@t»é t‚© ‹ÉùŸô"éE:Aé3“2«ÉåÓÒ`ŠLE"… ¬[”š1â´‚¬(b1’K+'ÔûŠòޫЉv8g2!¾æK]Ú å뿎¾,@$½‘]¥“¨ƒ(Ê$éxŒ2v#3ÙHÐÐHga×âÈOª¥ ÍT¬_Cdr†Dü¡Þ÷¶7¾Ñ`?܇P"ñà¸üˆ›5 Ýt8UEMÇÄ4KHædDeÚqÊV³áè ©L“ºÿ<žP¥qFQü5šæu†!I·" ðœÏr<^kU@%‰"t‡¡èCwƒ"~ðF!N‡úӣΠ¢êW·ú"r‡ª?\cGä£<{b|ÝfÍ âgÚS1ÁdØøt˜m¯±R»êΦv)¨i‘Óôɬ›+Ê„’G¥ úHømÆ;Þ†hC" Q‡CâˆhDå/Ÿy=džG"èð?Ì:ư…H^l¾‡ ÜãeÎ3×°„ Ñí%gÜÒÈ®²LS6e“É•r°'ù\ ‰Z¼˜‘3H;ݹFš”¦ê _pQ&ÜΊ «¦¿ª¿vÿjÃËž¼ÆÂ‹ÚÇvh[¨r|؇~ø‡€ˆ‚8ˆ„Xˆ†xˆˆ˜ˆŠ¸ˆŒØˆŽÿøˆè/8‰”X‰–x‰˜˜‰šÈ‡’¸‰žø‰ Š¢È‡°‰èˆŠª8Š¨Š¥ÈŠ°˜‰&0‹&P|H‹³(ˆ3@¯è‡¸8‹°ˆ§ØˆDPŒÆ˜ x(ˆ'`ŒÅ¨½‹…X)ÒȇÎHØèŒ¸‹»h»èŒ* Œ{øˆÅXŽÖ˜‰3 ÌH(Ž)PŒëxXDŒöˆó¨ƒ(ßxÙ‡í‰ÃȈDàŽü83€ŒP*€ y)P‘3 ` 鹑¥8D þxÍè&’|‘!i}()°‘|˜Ëȇ"I‘‰‘ÿÙ}¨’5I‘(ð’3À’%°‹*0Žûè‡"PŒ„¼HMɇùˆ¹ˆ ˆÏ¨J‰Ï(Å’Dð’ðH‘! ’bù•#Y’~¸‹Ù•»èÏH”i”I‰Œáè•`¹ŒZ ’ÁX—ň<É‘G“ù(ˆL9’ZùŠQéˆS©ˆWY”ÐŒ ˜~ù•NYŠyI9Ž'À’$Ù”‰Ù‡hÙ‡óxX‰˜¼x™b)ɇsÉ•–I‘™™¤ù”J$€’ø8’‰™JˆXI¬É\É ©›†¸˜‰Ø˜Ð8¯ˆ)›©øøŠ(y&`‘ž©~š‚)ÚY’Ìù‡«ÿÉ›t)´9ŽmY‘µ©¸9˜»é‡ýøO™”јžY„ˆœˆX•ð©Áùœîé)yž\’ù™|È\ c`”Ö™£)žrI™Q9Ø8ŽÊ‰žì9ŽÐùž-Ù›HŸÁYŸÚÙˆúyˆü)šîy’“ézžÎ)˜¥ˆ é ±€**ñùÕ¨–p›å9 Ô‰žþy©( º–ƹ›= ˆ"Ê›$jåèˆ): D0‹ôØ¡Jj¡’#°’Íè™Y͘³ø› D UPÍ获™¥'©X‰I¡æY¤ª%p’Ú‡íÙ“º´ø‡I‰©è¥PÿY¢Œx¢†x¥XzŽLDº¤^Yš–}X§Çx ЦX’Í錶¨•!©§—ú¥F™©3º¡P ¢…ê•GœÙ8¥RY¥™˜¤ˆŸ‡ª0ª±€è«}ˆ¬Š¬…Ú¬‘È«Î:‰Â:¬múÑz­×©Ø¬¢:¬Äj­Û® (šÀ XðâúˆÓê­Õš®îЉ2ñ °°èú®‹¸®ì àj¯üj¢$A• ?17 Ñ­ÞJ­±@h˜‡M˜SmS°ÔJ¬8Š£ ˰óFM€H0°r±DÀ Dšp /R±[7$ óʱoS°mz š@¬g¡…'kñÿº²|Ö±€£ÀÁ¦"{ 4[³Û7'aU´P±ð"0;ª¬`´Nû´P›TXµT«mQ> U»µ\ÛUxˆFu 8 ´&[³_ëeHB»gKFµ¶Ѷh[¶k+·p‹7v{·t“·z+7|Û·nӶΕ]€›õñ1’1<Ã%êXÿ GA“ ¼¯`„\—€¯~\È «R ÿdr—À q 6F˜¼ü §ðƱǚ€ ,0ÈœlÈ?ÑV¡L!0Ê AMp©¼Ç˜< ´ È0¯@Å\Ë(;¬ ° 𱯠¬`®Ùô ¯ð §@Ê!P ×\ Ѭ Û\ÉÑÑœ ¥°ÍT“°Í¬ÀÈDÐίÀ [°mõ í¬Ê¯°ËlÉÀ¬€ ]V‡Û]ÈáP!+§ÐRp ÙTѯ Œ‚µñìÍJ€xµRpÏT Í¶µ&[¤€—@m¥ T`ÎHÿ@¡°ÈÚ¬˜ TÐÏ{,[³ŒÎÆÇ§P =Tü…¹ÿ%ùƒÁkQQ JðO¸<¦¼¥àÍ qÕ!PÒù\ÒŒ¬Ò¢P ¢ Ë aΓ0 ²…YHàѲ…ȯðËTð þ ÔG-ÌÎyýS#†º£qbIf#/„†2QͰ`ÑQÕñ  Z\]Òï Öq+ aŸP ] ¡ Ó¥P ›ÐÎMP׿̧àÒƒü AýÊDmÔB-Tl¶¾1¡4¢ûHŽ;H  ° °ÐVN³YXÙ“Ñ]Ü!@ •p ÁÎøÇ Ÿð@±!¦€˜MÐ ¿¬¥ÿÀÚ-г{lÐ=Þ?Õ¼©ƒná%J“ R ›£|Ú÷<Îäü M€–mÙ!ð £PÉÐý$ñ¬à–UÌHp © `ÊH@ §àÏIðZ} {ŒÌVÐáBe}Â,МØ7£²+ö|Í!àZۼͥ`YŒlã  ¡`à¥ð* ¡ ¯0 ©  P§°Ížp RàWð ®ð ­ÀÚÀÊ®lÌš° ¯ Wêëfù×s&.½œbe oµàG@EÀ%MÐ °3`H`#‘<Éèý—°áš,â:•¿Ñ~'ÃÁÿ!À€ræ@¿t;+2(0ÜÇ{Éi¥ÀGtDÆ1_ƒdP½VX1¼‚Ÿœ_…-Öä–éƒÌ ‘'ë<@ë‡Pë}€Ž ƒÐ}WÈ(Hƒ¬>0»ma<ÄcLÆÛ¿ùì `DzgŒ; ÆØÆi| …Ðkà>°ßˆPvà¾Îðu<ïôNÇCÀqÅHg ŽÕÎ+ÔnÅw¼ìaLÄq¼þîŒB`ŒÛãCÄÛ.Å—îâ^ŒáÎëâžññî| ‘ ïõ>ò$¯Å áŒ'_Ä ‘Å/qJA•ÒÉÿËÌ;ñ·á\Œ„Kó6aó_ôYqôHg«þ»ô±Ð òßÅ 8ã{É~JX4:ñÔœÔþUKORr†Mô™¶>1Á„Á)µü×ÄØŽ!$„rnYOêþs,£d÷!gŽ1¢4ÓÑ÷[Û\gÆÑC2xw&-D(;r p@’_W‚GâlÙ^ß·ê­O†~è4¬ÁÖ²nf§'*|¦Ar1¤Á$î"ç|u¯-”E¾Ñrr0*¦Ár‹òô€»å;gÃ%wvñ%¼A=ò\ Ó(˜~ñ'Ï+¯·‚^?7ŽÿTûŒÏ;Ó¦ú”„ bM¦ÑèA‚ÃnÈéÖg(e"¿®»üQv2ç;€˜t»gáE“x¹ lˆ€Ã‡6˜Âa>¤XÑ¢DŒ5nÔhÑãÇX,(± ‡%(àâ‚ BhÀ¨`Hœ9uîäÙÓçO A$(¢D(.$”ãS¨‚N B§RªYµnåÚuéͯ^CD%›QìY´iÕ®eë´lÙ¶qåÎ¥[7ç[¸võîåÛw*^²`ý&\XïBÀPfÜØ1Wĉ9*x\Ùòe $C€ÙóçÊ*7OÞ°ôiÔqKkÝÚõkرeϦ]ÛöÓ€!ù,Îjù¥†%("!3"""#-#!+)((($73<$#222191;;;l'@;>F>4t ,WN,YP/j^0k_0k`2seWJ ddrCCCLLLTTTRYRYZY[a[cccflfiiirrruzu{{{7Šz=ŸŒ=¢ŽCº¢EÅ«GɯGʰ †— – ›¤   « © ¥¹°L=µLCÇÔÜ×ç éóô ü‚‚‚‡‹‡ˆˆˆ‘•••”˜”›œ›¥¥¥¥¨¥­®¬²²²¼¼¼ÃÃÃÇÈÇÌÌÌÒÒÒîîîòòòÿÿÿÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£GŒ$®8ø˜l ‹ PaBY¥¸Â ¥10Z´° ÈËRPQbó– ((P”àJŠEJ®°,ZëLF¬²áÇ®[¿Žíº#¶qßÎÝÁô*"™ç(r‡pâÆE~„¹óåE|KŸN½ºõëØ³kßν»÷ïà-Ð’ÅI‚'Y´„·Å€ –)z××b %¾|Zãïßʯ¿ÿþ³ü`,èÊxZ¨g ,.ÈJƒªa„¨LH¡)ôÙwá)¸߆§ŒWÞyéhâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äÛ$`ä‘H&©äÿ’L6é$“JD)¥O"9¥”QDQå–\véå—`†)æ˜d– åh¢I%—J¤©f–fÆ)çœtÆù‹ä™'QŽà©§Jd &Bªp‚~FpÅ|6¢DW”°§ ‘…‡(A!Sôu W˜à§SúžMP1 ˜ftœ©§„ˆà*@ª©PŠ‚ª} Â"ÀÅFV\A'@WX1ŧ ñ,‚x`µWDzˆQHQ­¤Ð¬p%`nµÑ@B³æ[Â+ižU,¡ìFLüDÂHQ™0¶°’ 8+Â"%q$(!BÿHL€… LkNˆDj Ô‹gW /byN!Å¿ÍZkTQ@@6DE:IIk’?p—@o˜@p—AsCv£Dy¦D|ªG°6„t7‰y8Œ{€d:•ƒ;˜†<œ‰= >¥‘?ª•G€°Hƒ´I†¹J‰¾@§“@¬–@®˜A³œB· B¹¢LŒÂN’ÊP–ÑQ™ÕRšØEÀ§EêFÈ®Fʰ^N‚_PZ~„`QŒeT’iV”kXšn\p]¡s^¥u`§xc¬zd±}f´i‰^†aŠ‘c–h“™h–œk™¤o ¦p¡¨r¥®u©°v«²x­µy±¹|´½~¸€€e‡ˆkŽn’“r—˜u™šwœœy¶€i»„l¡¡|ˆoĉpËŽsÎuƒƒƒ‹‹‹”””›››¿€º¬¬„¯°‡¯°ˆ³´Š¸¹Ž»½¤¤¤­­¬²²²»»»¿À’½ŃÀÃÅ•ÅǘËÌ›ÎОÐÒŸÓÔ¡ÖØ¤ÛÛ¦ÜܨÄÄÄËËËÓÓÓîîîòòòÿÿÿÿH° Áƒ™’°¡Ã‡#JœH±¢Å‹3jÜȱ£Ç Cv|‹‘cd‰HåÔÊ—0cÊœI³¦Í›8"ÀåJ‘Œ¼+§Ñ£H“*]Ê4)‚|‚<+Ö*GfÕBƪšË0¯^UƒõA jÔÈ Ì0kL­jª²"£&k’„ÅÂ…§&À³hH+õ›^hM+^̸±cˆR?6’*–@$Õ¾Ìru¯Gd½ @¥ª–l¨F- M  ²‹¤Â'áŠ]iÓwM¸(°„Ã@š4,jŒ=^μ¹óç#ƒ“sƒWdŒTkÐ9Àj NÍÿbYMƒêja Rw%œ±'€Sþì‚âѮ܇ο¿ÿÿÍI÷ÑzX— «q—Zi rUÕµÚ꥖ÇèqŽá#à襀(¦¨âŠ1 èÖ¡‚àvÝ•Ö**‘VMY« Eã=ôß|#P{Ñ„óÓ@Qdx‹PF)å”=åÓûqÔ@šÌ’A1ÎÈ]5b4àŠJ`TF­ÐbÀy>5HleAQ¸BÑH34á &1W<@ÌoT&ªè¢ý•„Å£PuÔJ5”²†x2~žµ¼… …¤Bi-ÂY™”Rpr@á¬ÿ1a&2jë­¸æêQ|pg¾r„@QÜy 8‘ B'éêì³ÐN9†…4]‘¤ˆÑf«í¶(ÆM!¸±ÆÜ–kî¹è¦«îºì¶ëî»ðÆ+ï¼ôÖkï½øæ«ï¾üö äú+ðÀö>pÅ£…¬ðÂð>À=1,ñÄ놀EÀg¬q®oìñÇŒZœ,È$—œ¢&™¬òÊü ¹$Ë0ǼØQ<`³Ì8ç|”Å>бÎ@-ôÐDmôÑH'­ôÒL7íôÓPlóÔTWmõÕXg­õÖ\wM54Ðx-öØd—möÙh§­öÚl·íöÛpsmSÜt×ýØvç­÷Þ|÷ÿí÷߀«=÷Ⱥ‚õá! ’ÍOý\%9C 4DiÁY2ÁE<ÄD ~åyúANT.ÐèŽãˆ<$„gd3¬Ïty1/Ì&y D2ŒqÊ0N<äI/¥ jÐð9ýA¤/Ðô…p(íµû‹€?9ÒÝ{ånän„ý÷Ç ú0 „€0Ñ;~B¦»ž÷6²¿þ ä>Ý+õ+ò•o`(s`D¢g GXàˆAæO˜¢Ãðâa £¡{þôÇ¿\@Ã'ì÷½"$€òóž(º@Pxᜈ¡(ÿ. !ø¢„Ãð^Ò^œÐüß@øÀŒíé ð‰o¢0„´G/`”U•2X.¡xÃðB„‘‰pa])|Qæï€-(‚Ñ„-Àq MÐBõbFp‚xÔÜ0¸À„`„B…ÁÈB¼˜< ¾BÈ‚P±ŠëIÊFò p`È”y€VÉÊà~ ñ„/ò‰ãar [bìÈÂþí’"#‚C„dAè'†0Œb˜]@f˜0 ÌõR † ÷7Àƒ|”³˜!"Ÿo¸Á‚ê{%®À΃5ë °Lˆ'ÙÁãõ(F8ÿÍâÑ—yì„ R̃t`ÔôÅ‚€@ +¤&¯€ƒ’NxÝ4È7Áɰ!ó!‘F4®u/‚1V"£1Œ-xb‘ðÂ0ˆp_ “©±+^àXt!‰ ÙèUû…2„½s#ßðÓ ”¤‘ß¹’ `i'ŒŠ€ÃÆP§Q,b_Œaÿ/¾ˆá(šjè%‹‚-£L³0ŒÊ1†!Üe?™WFÚ6C¨m0€׃ˆÏª›%˜â>r³@.’›ˆ:ÀÛˆ )Lˆpz'àB áDÐòÉî£ÙUYwmå†pd1îͯ€9²_gxÀ¾Hàœ5¼1øÁް„'Lá¶ ®Â€s0†7Ìá{øÃnK°ˆGLâ›øÄ(N±Š³e±Ï®øÅÛºÝiaLcgE!.ª±Žo…ãÌxÇ@žÒN ‚…ùÈ+zB¡Pöü"ùÉÌQ2;×id([Ù?E¾²–W4Ê-{ùË`³˜ÇLæ2›ùÌhN³š×Ìæ6»ùÿÍp޳œ›³“žUyÎxvÈN<À¸<û™";ÙîŸ ‘:óÄ}„Nt`B@Av*úÑ ‰ ¤'MISZÑ´R:/Mhž­ќγ CMêR›úÔ¨NµªWÍêV»úÕ°Žu¿æd‹Œ 5XÁJ@Àq;èA²a[@'ß BÀ 8À Ye݃=ê¿+Y"‡•TbùA%z}?âη .qƒ‡øÆÈ'¸D ²GX$0(1Em:_¡XO™‰!º-’o‡{Ü ºõg‰v;DÖ;H¼S@rdó®H%zP ´ßˉ`­B8Dbÿ(Á@> B’(ò†“C"a$&!‰7$Äàw¯Å} Fœ` O·@Ðð‹Â–è¹=.F¡–0zâKl\ .p„#qÀ>Tℨ€@PÀˆKXâèƒ#.Q G4ÂâÑ`¯@Ö𠽃|)8.É\¬‘7LÂ$x VNð´à +XÁ#ð ôœ3X|&O‚ÐàçŽD 1î\â* „#Èt‚0ÝáD%Šm‰Œ°H¿Ä\ЈF ÞŽpAä ¼àö*±0‚ůÄ"\ƒ@lý•è \@ú00€ù;ÿS,Öä'pµ#˜ÃAX> Ѐy@Då'xR Fð¡‹0nŒà<ÀÇÑzñzQ ¶ƒ°·—NÈ'8p o9P >0?|P „P€` h_WÅ^ÅÐâ7~\5dA‘Pë×x40 ˆp  ’0  k0'' 6ðsàtãVw Vxl €K×tÀ€P ¸'€  (oñÆ}#È ˜| uVh… ÐW-Ø}0Xƒ‰!i8ˆ~G… +gDÈ.w1w ÿ€@'tŒÐá— v X : oø±ÇÊòq_˜|7p 'oÑF؆¾¶ŠÁ–0áHÑqOÀz¨>âäFØ *'r %0`…+ ò'4  †`#€q ?‰ã¶– {0Q–°) tŽ )plŠàà@Wz§‚Í6oа?p jt"ø•à à঎0P‹‹@'€…¾48Eà·‹JÑY]Æ p“ÀsJXy0 ‘ ,p„’pògGˆ„º†;ÇsOˆ”…Bÿ‡p <Éè(âx —€gg†'0wh·ñn¾ÿ×`TÌ9Ö  ñ ¢µ”þ…K‘cM10—É—ysrÐkpP’ðu € Êa ×à Þ° P ¼` i ÙÐ Ü` „×ñIÇð )Ÿ4ai‹1’@%€ùy°2 OH+ r°à‰`¹°œ ÞÀ e  Ì U`Üàe€ É`æ9íQuÑEaAÓ&¢1A,ŽQŽ20œ#0 vð~† ˆ <ØÊ™ž¸Ð Ì“ Ø0Î9a ¼`íÑ! '²wº¥3±gŽñ’Ðk,0œ‡Zw°¨‚ÿx¦išœ<¸§’J©0§a§x*ŠSÚ§€j¿Ø\Úk_J$0 ÅXhêkÚ£”:©rúœ™ú ïC™á[!mŸ Xô%0 o…0œð†@ 20«º°lÐ V°«•*J Û K€  ØPK _ážáØ áp¥½Ê]XjL!ù’@œ#P’<÷yŽÊ>ê ë U€­°ºÝ°Þ° Dº Ý©!¼*×Ù}íú®ÛÒ–Av)Pû± ²òZ![²{›«›ch± à °û²Þ€Á1ÿ‹°7°ÍÀ²$ãI@ ´Ið³A I0r A´A›JP´@ ®<µR;µT[µV{µX».k©.³‰´½åµYûæ÷(º-­ÚËp ï¶F1$'a~`K%åI>ÛÀa zqgn ’æQ¶bÙРݰ j€ ¼  Þ` P š  Ú ú ÙРú3ð ’«}k€E ¥¶bÞ0 V  "c¼ÉÀ¼à ·i³‡+Ñ:­Õz­ü«žÎ@®+¼ZJs[Àc[¼Œbº—Ûºœ¿ñ¯;°,g° ÞÐ  ö±w+ Â1±µ¥»œPž:\;gÄå“lÀ½DœÄJ¼ÄLÜÄNüĨ9jèÒµ)rRª[Ð/ƒ®Òüvic›0é2Ä‘¶J¡Ѐ1/;ž:¢¢x Ò%ò-“vÀÛåR·q·J¡Y÷ÑÆØ&"b"žÿk 7ËåZη1ºÁ…¼,äâÅöÔ‘F^޽fl½Ÿô‚àMlÄ%ýjàGý.tÅNÓç~Î4€èJ3è„~4ÊN~èIcèoÆÃ§æèf6ºÚüݸ“j’Nf4£Í;Ñdކj™>f§Í"œ§ælÞfÚ ¿ÄRé¤ãNÞæa¶êƒ§®~i®à îàkFëƒ×‡Œ®3¤ÎÙ<áÁ.06SdPÑéy|ì9áÀÙYdììCéÔ~íØžíÚ¾íÜÞíÞþíàîâ>îä^îæ~îèžîê¾îìÞîîþîðïò>ïô^ïö~ïøžïú¾ïüÞïþþïð?ð_ððŸð ¿ð _µ!ù,,¡@€(((Œ©Ëí !ù<,N@‰t‡  !!  ##"!&*!('!+*,&$,)%((($,4%/9"1.#40&2<$95%=94,)8.*11,<1,553==4;;;'4@(6B)9F+=N,?P&B=(G@)KD)OH,AS.FZ/I_*SK,XO,[Q0I^1Lc4Sm5Vr6Yu8]{.aW.eZ/j^0g\0j^0ma1qe2uh3{m6qA4.C60K;4P?7Q?8@@6EE:II=VB9YD;_H=DDDMM@KKKQQC\\JSSSZZZdK@iNCmQEpSFtVI{ZL`aNeeQkkUnoXrs\bbbjjj{{asss|||:bƒ;e‰l’@o˜@p—AsCv£Dy¦D|ªG°6„t7‰y8Œ|€d:•ƒ;˜†<œ‰=¡>¥‘?ª•G€°H‚´I†¹J‰¾@§“@«–@®˜A³œB· B¹¢LŒÂN’ÊP–ÑQ™ÕRšØEÀ§EêFÈ®Fʰ€^N‚_P„`QŒeT’iV”kXšn\p]¡s^¥u`§xc¬zd±}f´i€€e‡ˆkn’“r—˜u™™vœœyŸ {¶€i»„l¡¢}ˆoÉpËŽsÎu‚‚‚‹‹‹”””›››¬¬„¯°‡¯°ˆ³´Š¸¹Ž»¼¤¤¤­®¬±±±»»»¿À’ÃÅ•ÅǘËÌ›ÎОÐÒŸÓÔ¡ÖØ¤ÛÛ¦ÜܨÅÅÅËËËÓÓÓÿH° Áƒ*\Ȱ +V #JœH±¢Å‹bܘ€Ç CŠI²¤É“(C>Lɲ¥K–tíʲ <†¤lòä‰Bž@¹€R“+GÚ|I2èБDnzÂÔcLQ@z2ô1Ñ¢”ˆZðñÉ"PDP&Ò„”É­UEšE;òW‰âÆÜ.Þ¯Š‚RÒÀ§´'×¶}{7náÃ!ÚíªW_­E‚jSQ>ÒDtêàLjPh Ô¡ÀxÙ–L*Òo#( E)p¨u# yl ê®áÔ4Þ”ùã‘]Уc)¹7ä“]AEò©€'  ðÿx´‰€iÂ\äiˆ“ð‡4Y<òºÇCÒâ ê‰OŒ˜æ LDadA² ½5¦“G \!á„Y‘T]I‰lâ‘"_)脽épj@#ù±D[IL|b€&‡ðʤ…‹ʃú!¶(óÖXaK(a¤K`@e&% ^àÉ&.²Èg9žÖãˆ!"[J+’t(:nâ„'L@§é‰Œy””C:tK^FR”P~ãH>€òæs‹@bZ( @˜$uÉ"<¢HšxôŽ:¢§ßœ€rT~‰„Á©¨þd!“~Õ'„|ÿ2„ý0‡U~ Ÿú´f P’B  4ÀA]<(Ö#„ü„9Ë‚à‡4L‘Ç96PWµ˜À ÀÛÑ<ï#u/ªÐâ…Ü"ïªw½Ý’Ò$Ø€Naè€ pU  ¶´·µJê@"vCý¸¹Xˆ7= ÈðHf¹6hð§–{Y l@ƒë¦øÅ0ޱŒgü·¸`À%YA ´è² X°#±lÆŠ%>‡¢T‹À:°R?ÈÁ /›Â-2p’ÔB á–«2$q¬P @”Ìä’Ð5ÃÀ€,)Pùÿ#°°D\VáŠofPcAþʰd—!_Ø\öÀ=„¡e…¢-àIÄB¸¨…<‚ E[¡Ñ³¸…-í(˜°ê#úÒ­GH‘ Qߌ~ƒ|Ëä9ì+è@#@‚>|evL¦P‰){„¸À„h a ¶PƒG2 Y”b kvÉs@h]ŒÂ“»ÐÓÍ\S¬`ÉøƒP)‡šz„.°™”ßL‰[¥²øˆ•·ìX`¢*Ï9kH\qm$ŠÂË6ã‚6W‚%<cH8KÏîš­û×ñ%"€yƒÄÞøž_d¬5noîÛèÀ<0t«Û×ÿøÄå}å‹s¢*$@¨A²-Aiø‡%`rˆÀV°‚˜ÜeBn‘„ `å)÷€P‹JÑ(…,”±„Îv–HX‘í¥uá؃˜ÌBð‹ Y»oA÷[ ê+BÝé~ cׂîon Ènþ±†de_Zø’¸%@‚ä'OyÊ÷·f•Ïüä‡ì#Ú àiË.FOú[þôU°™Lz\°þô©ÈÛ~Ú×þ´·}~ÀfÇäÞö?‚îkuÿøÈO¾ò÷æãÞ3…ÎgÜÃMr * du¦œš£€Zd%£€Nÿò—„Y¤âµ°¾Ìe ZàHô¢ýèHOš³ˆ´¢{:RìÂÔ3¸ð I` ¾¶z¸@ TÀ °k½ÆnÁ6lÅÈ– S %¡»på38ˆzg}«wo!1}íöngq& »À,xyèkp ß·z—V‚(‡w)Ør&á –áú8˜ð· ‚G(&¨r;8 &Q»à ­Ð º@ ‚#€¥`˜€ C¶zêçI·tM÷tLgªÀu$!J„· ºÀ}v#€ù—€`˜„1wuwweèTðw¶Àf¬ ªr< ·7ëf·|%1}ˆx?0¬¸ˆ‰’8‰”8ÍW‰Jˆr%Q}[s¬à†e³}'á}[#J€õˆUS~ç—~Â~îò' Xçh&i€ú' ½W®®`Pj±ºp,¢º„"¡¹nQ¹ ¹ Œ @vZ#€h€T†€ È€˜ƒHl@¶`HŸ´K0 ?Ñ Ù÷I…ÿfV%á ®°Wpm~’Lj!ù,N@÷‰‡  !!  ##"!&*!('!+*+&$,)&((($,4%/9"1.#41&2<$95%=94,)8.*11,<1,332==4;;;'4@(6A)9F+=N,?P&B=(G@)KD)OH,AS.FZ/I_*TK,XO,[Q0I^1Lc4Sm5Vr6Yu8]{.aW.eZ/j^0g\0j^0ma1re2uh3{m6qA4.C60J;4P?7Q?8@@6DE:IIl’@o˜@p—AsCv£Dy¦D|ªG°6„t7‰y8Œ{€d:•ƒ;˜†<œ‰= >¥‘?ª•G€°H‚´I†¹J‰¾@§“@¬–@®˜A³œB· B¹¢KŒÂN’ÊP–ÑQ™ÕR›ØEÀ§EêFÈ®Fʰ^N‚_P„`QŒeT’iV”kXšn\p]¡s^¥u`§xc¬zd±}f´i€€e‡ˆkŽn’“r—˜u™šwœœy¶€i»„l¡¡|ˆoĉpËŽsÎuƒƒƒ‹‹‹”””›››¬¬„¯°‡¯°ˆ³´Š¸¹Ž»½¥¥¥¬¬¬²²²¼¼¼¿À’ÃÅ•ÅǘËÌ›ÎОÐÒŸÓÔ¡ÖØ¤ÛÛ¦ÜܨÄÄÄÌÌÌÒÒÒîîîòòòÿÿÿÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£ÇŽBŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³f˺vå餇ÈDX:å€È!P¢`X9¤ÉÌž6C"Uj²ˆO©NEºÚµËhÔ¯`ÃÆÄ)jÃHO‡D*bÄ2$P DBaªÈJEšf¢ý:·®IHiCâ¹!TW±ˆ+‰“ ɽ‚Ù` jÁÈŸìª,rTÌš¬6ïÈ-‡«^M³ñãÀIŠj“…R>Ò´TjåË™EVp ¢É‚MÇ„ì(ÊÈFR *î¨BÈ›rƒ Z$M»7Áÿæ,µWÖè#áÊ~W”®GBñ¡”"Ÿ €*JH›à›eŒ#žñD"áÄLó…„$ CxÒˆož4Ñ„!uR$›ô0l’d^z,"Ö0ÆhÖIñ¤È&!-‰O<1ݧf à…b5ñÉš Ò(@‚dK0(A  <ˆl&­Øâ˜Ÿ1±Ä™K0‘|º8†’"ÆÆ–'›èÈ#·Yù[C˜ˆr`aÊ•›<áÉh9ñÛ•Öi€ YyfjdV*Ózí¹Ç¦›6²%gMšô(†øIV0#‘¤”Åk¾ÿÔI$ŒtÉ"£9U^I`YUŠSHZ’˜–&ûRÌ6{^I5š´Vdò ô _HÂÂï›4ƒuZÐÃ'…°¹Ë0-ÊŠ\€ øPÁ&HúZR¸ã€ïQl—²ÊY3š”ˆ§‰àz@¼Åµ*½òJå (lí°IqüZR\4ŠO WzÆER†ÐÃÅžt²­I…QjðÎ6á¤SL `àqK`ÐJLì²JX`€ÜK`ð¬I[éÌóÕXGÅÅ."gíõ×`‡-öØb}döÙh§­öÚl·íöÛpÇÝÙt×m÷Ýxç­÷Þ|÷ÿí÷߀.øà„nøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褗nú騧®úꬷîúë°Ç.ûì´×nûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ï¼L%,v!0õH5ÜpÃy*hOÁJä" J ØI"ÈðU´°{±˜ h„”ƒ Ô›ÄF„œ/ÿ„İR»HXIB@ˆ˜ {‰T@’P袳sŸbà'?ú¡Dù»Ì ü§W°"%ê'’0&‚¸I6 )ÙI0%¨Ãþ  „¤ ~DVôèJÿ(€ùQo~„ÈCD‚Aý…$,!15Ô…ï‰1%€€vD C‚‚=ìáŒQƒ ‡ „Dy Ä Ø5ì‚؃HØŠ¥‰$ ¹ð£ê^x‚.” |(C$D´À!I¤Và‚!îÁ nÐýn@ˆ {¨_GEà ‚èÞ r,¬‹‰„@ ô ‡p(PC°!!Iƒ j€‚<Ä—‚À Tà†/¦@jP F²Š”g­`Ý é˜¡‹„0’>”¡H‰ ò5à~y؃ l K„d”")eˆÁÿÊÀ­|eH~‚œA ˆ$À € â0O6 B38hIÆHQX3$HÅ´)¢dà8†?è0zhAÿƒ!ƯˆôË£ÞÀÓïŸOŒbô‚À•ì IÞpÏpšMÃC©€.ò”§ ¸IÂQj~v`ÉÆ’/¬t¡1¤ÃH:@†? à$D4bÔ`Âù BRU‡ž2!Á¢HŒB„€€ê#?§Z½ÅŽÄƒˆ@IöÐÏ‘´âƒ"1°Àº>| ˜ƒP‚?€“.p€Î0‡8Àþp½ÿÄ•~h„ 04 $FàÄ=¼aß»Ã&€"À‚̨ù”KÞA9 T‹Q6 @Aü‚ë†P ²xˆC|ŽôšÙ\á˜À¥ 8AàÒ—.ô‡@¬éIqS#€ „Hp~’ÜB…÷\#SCpG6*à¬^üÝP€–ªH(À!Á„`êO×H4Fõs á;pà­"!À$@Â8àÆ2‰@œè’ê²7DâÉB05 àU$iˆ(pCpaÆ„àÉ&aßóÈæ†)ÒuË’³Á jÀ`0›ùÌhN³š×Ìæ3#àÿ8F \ɨhà µ%É‚Vr=I}žá”´t_ø n¡• “ '"-“¤:—}ž0èB£¤BK¨ç‘L¡Ñ"Å%f² W€][^ fhBûØ 3õ¼0ß>ðA 6¹€,†}L"ªÀE-Ž’L û ÆžÅ-l1ìXݤM$Ù{CBŠ\l[xøC>P[Ó%`j*ø %ð4M @K0:$•ÀE&¦@ T„$ T°ÅB¢)È¢T õKÖ“EÆèbÔܧ„÷·€„î ÆÐÍ9¨5$}xAXêJÜ".–ÿ…HMéÀ"—ÚgIâ ˆÿQ—^þ@=Úçr ƒÐà r‘ƒ…äøVy*¡ô°|$/yÃCôpæUœz÷€ñ“„|ä÷^ºÒ™¾rHC2aŸ¶G„- ¡xD B€sXÀ‘|=*‚n¡!€ìbI‚P K¡Ø(…,’ „§µ¤Õ¯æÚHX!qãy€àà Ýù±’EÿJ¾qÁz\$ñdÂ-Z Lü»·»K’öv‘d:âžlH ðØ%H‚ò—Ï|æÏ,Íþòù’>ŠÐm~‰hÏúÙsVËÿ¼O{ò·>Ù € ö·ìw¿€Pj™Äßý@‚üÛùôûÿÿ€8€8:wV/ÑX€«t)q U°Iãj h)£†€µ +1 \!@HJ0 ©p µв ´€ °pÂFlƆlÊÆlœ0 Ê6ly>¤° ßö3A¸ð J` ÷6~¸P UÀ @oöVrúÆoþ&Ç T0(±2çA>h@h…²ãs$á€&‡rJ÷t)a  †[HH§· ãmcv°w†f—®Ð&;8sm@¨·†…Xd8vxH )a»ÿà ­Ð º@ (@X  ¸Àgãg‚!xƒWx‡§ˆ©¦ ”w¨Ñ{«  X‰cˆ 6x„Ÿxˆ"±z­÷z¤UP ¸p µÅ ¹à”s®¨$w¨VŒdã€ÊH7@ Ï׌Ò8ÔXÖxØø7K0uXÐ{cr[0ŽÈåñ@¤ÃŒ';ƒ¬P[55W)ÐB@ ®p   ¡@:¨¸3³P"Á±–põ˜Eõ؃£Œ’‚#X‚!‚*È‚.8l²yÇ–lË5xƒ²gFP5ù˜ÞL  ì" \¡ ~XK \ñAFÿ 9‘ +Ùœ§ ®`M¡À“ýF  œ· ヤÀ ­° º`Ž\.y‚O •ï…9ñ”Yk$Á{’„BH„f„H¨„Lh‡OØo …¶@…VxÕÄL0 FÑ XMàˆ8·Y(á ®ÀXq/Â0b0™[cMF€¹`së‘ L° &—»À X ‚¹ £°¬  à“Y°;¸õÈ KÀ•!“SÃpa‰ ^xˆaˆˆvxrr!†(1—ÏçJHPý¸£TÓ Kð,ÈHÕ÷U󮉅Ä(«ø|œ·[“œ•¯“ݸ o—4Y$ ¬ÿH –÷‡rx t8‰˜t¹™‡(6©4F£€"s;•æxZÉ6b‚”Õ$ùJØ'—ñ{È Ú L°º  ‘¸.øéœ-Äš$áš‘ˆƒ(›´Èžv˜‹Æˆ+aعšÚ 'ÈÉޱó£ ӬЧõ§Ô„Y!Â\‘ Ì2Ÿ[Á.†¡2'ø¨ü89ǘŒé±H @û¨€H€€Òjm42­«Á§„Ä)­SSŽ"1•Ѹà ½@ ° ½à £ŽÉ2”N<*É ®À­ÉòŒéj)XÀÑé;à üš;³®ë5 »°XÓ°Ë3±3±›,ëê òz±c±[)û±c²"Ë"$[²èQ°‹²¬A«úº²,›ëÚ®ï¯!ù,=¹lAƒ+++333999žžž¤¤¤»»»ÀÀÀîîîòòòÿÿÿˆ0ÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûï4ÀBQ v x ‡xzxŽŒ‘”wz –v’—š›žuœ‚Šx„†¡{} !ù,¡ê76ƒ+++333999žžž¤¤¤»»»ÀÀÀîîîòòòÿÿÿ`0ÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ$`¡( ŠEp€HÃÁ<œÍDtY›f § wPý–Ïí@úv<$t¿yTVX !ù ,N@Šà‡  !!  ##"!&*!('!+*,&$,)&((($,4%/9"1.#40&2<$95%=94,)8.*11,<1,332==4;;;'4@(6B)9F+=N,?P&B=(G@)KD)OH,AS.FZ/I_*SK,XO,[Q0I^1Lc4Sm5Vr6Yu8]{.aW.eZ/j^0g\0j^0ma1qe2uh3{m6qA4.C60K;4P?7Q?8@@6DE:IIl’@o˜@p—AsCv£Dy¦D|ªG°6„t7‰y8Œ|€d:•ƒ;˜†<œ‰=¡>¥‘?ª•G€°H‚´I†¹J‰¾@§“@«–@®˜A³œB· B¹¢LŒÂN’ÊP–ÑQ™ÕRšØEÀ§EêFÈ®Fʰ€^N‚_P„`QŒeT’iV”kXšn\p]¡s^¥u`§xc¬zd±}f´i€€e‡ˆkŽn’“r—˜u™™vœœyŸ {¶€i»„l¡¢}ˆoÉpËŽsÎuƒƒƒ‹‹‹”””›››¬¬„¯°‡¯°ˆ³´Š¸¹Ž»½¥¥¥­­¬²²²¼¼¼¿À’ÃÅ•ÅǘËÌ›ÎОÐÒŸÓÔ¡ÖØ¤ÛÛ¦ÜܨÄÄÄÌÌÌÒÒÒÿH° Áƒ*\Ȱ +V #JœH±¢Å‹3jÜȱ£Ç C:„(²¤É“(Sª\Y€Ë—0cÊœI³¦Í›8c>Ìɳ§ÏŸ@ƒ J´¨Ñ£H“*`@×®\0›ðxÉcHÎ&Ožx)ä ” 8…0±¹s¦Ô£]¿Î$2Õ¥X˜®víÚº´®Ý»xóêÝ;³©( 0=z™hQND@-xùd("8i"ËŠ¦à£Ï|4Ø¥d˜BÍåKº´éÓ¨í6Ýó²gÂRÓÀ'È7?×,+ÓµQÛ¸_nåLx2L-£S+_μ9êÕ­;H ¨M\FùJX·³kßÿ~I¡(P‡b{6N“wt— Àd¥À¡ó(¸ä±i;¨ÎÀ½t&Ým"n/!G—s 6è ƒGÈ%á.XÔLOô@(Q ñI!< <<² àÑ&Üx.-âÉNŒøÒMPFS†.òÈŠXò„ž0ž'L0…KºÉ&<Ü'1)øà”TVÉWd©%`4]HS"›¸¤ˆaK:áÄ}:¤(n¶ @#;òäML|b€&‡ðÊÄ …ŠUkº´(5Ú&ÝLRZéè£ eÀJTªÄX¨ k5%"ät†y²É˜‹,’] á­È&‹ˆ°‡Óœ3]ÿŠ ›8á ÄÐDx‚êW(²Ž€oŒ&é±È&ûR„R¨)§_*xÎä(¾"ù‰°ÈÀ"Ø„…™ëL@²H'(‚k#.=¨ *®(, ŒU±25ªì¿W‰ÁÀ/(“—3ö„|2„<€è¾†ìPï&Œì Ÿ‰ðð !šî¢„Kçʤ(N$â#Q€Ò›ÄI¯Lk @Ì @ñŸMþìóÏÇúÅåLˆH‹ˆ»¨|^¸/µ¼²[ž€b˜›œçH½21 W$W†“ˆ0ÊT ˜w]š¨.RÀCÔžt"ñL¡ ôÝx?ØÔS@-ÿpÖ<pÁw5-±Ë*/•ÌS¨ç“T¤À ­° ºp•[àŸ‰‰¿ œSvNñ›¶„q1‚v‹²H‹ôf‹¸¨‹¼xŽ¿hv Œ¶@ŒÆH6ÿµK0 [Ñ …hSð¢ç_5á ®°WwXÒˆY¡‰›sSEp¹z’ KЂ¨w¬p¢ Ÿ»0 JÀ º€¯‰JÀŠ`–¬ Ìé¡)9u¸ðŒø(ùxŽ‘“çÙXãÙƒufÙ–2 y99­ ã/à4„Áõyå,ÈH“/Á‘=˜€Z ¡ù_0.¡é”»°}†cK¢Ð‘1Ñ—Ñ vá8Ž·PŽ0¡´‡¢êXGpš‡³M1 ÈÁ5ÀŠÀy•4¡œr|Ò 65–=:2榢Uæìø¾¹  º "s¦Ð¡uY9ˆJ‡òÿH!Z’[zŽ*ioýˆEp¤:¨{ЉKКˆ¹ «0£GÀŠ«…=˜ s “vz¨•§ «pt«°©%~ö£Î‰ŒÍy€0uˆ Éà0‘ñ7èh‘I[° €lÊ,¶t[ €ž.a–F JÀM:V[à¢@ ºpÈÈŸªª§®Ú‚d9«0±9[ÀJ Ϻ €ú›Jð¤€-è—­‚é‘Ü’JH $ù¶G…)Ù¥+Y Uømǹ `ùìxi†#šlª­ç&¦ ú¯)¬¡bê©Z3!¬À®då®5µ_Јr‘ #¦q12¢ÿñÉøh©–lÙ‡7™“{¡GàEkI–pG‡Bûs]2´y±®^t3*´’c•/1œA9‡[©´É«J :?™µ©q[¤_{¶h›¶j»¶lÛ¶nû¶p·r;·t[·v{·x›·z»·|Û·~û·€¸‚;¸„[¸†{¸ˆ›¸Š»¸ŒÛ¸Žû¸¹’;¹”[¹–{¹˜›¹š»¹œÛ¹žû¹ º¢;º¤[º¦{º¨›ºª»º¬Ûº®ûº°»²;»´[»¶{»¸›»º»»¼Û»¾û»À¼Â;¼Ä[¼Æ{¼È›¼Ê»¼ÌÛ¼Îû¼Ð½Ò;½Ô[½Ö{½Ø›½Ú»½ÜÛ½Þû½à›º;python-language-server-0.36.2/resources/document-symbols.gif000066400000000000000000001107511376456405500242410ustar00rootroot00000000000000GIF89a¨w!ÿ NETSCAPE2.0!ù,¨‡     $$%!%) (&$*,*&$($(,(%((($,4%/9"1.#41&2<$:6%=8)04,38.8=4,(4+39.8:1,333=1<;;;'4@(6A)9F+=L,?P3:@>>E>?H&B<(FA(KE)OH,AS.FY/H]*SJ,XO,\S4@F5BI;BH0H^;KT>OX?QZ1Kb3Rl5Vr6Yu8\z.dY1ma2tf3wi4{m@>>C4BK9JQ=OS>RFF;XC:`I>CCC@@JNN@KKKFDQKEUOGXOHX@S\TJ\XAV\C[VWGSSSZZZBV`DYdG]hH^jZMbLerOiwPlzSpfLAkPCuVIbG`dJdhJgmMjaPgbQihTnlVqnXtqOnrQouSsqXvw[{yUw{Vy{Z|ccOijTuu]ccciii{{asss{{{:b„;f‰=i>l“?p—AsVt†YwˆYy‹Bv¢Dy¦E}¬G°~_`‚5‚s8Ž}:”‚;˜†=Ÿ=¡>¦‘?©”]€’G€±HƒµI…¹J‰¾@­—@®˜B´B· C»£`„—d‰gŽ£h¤l•¬nš²pœ´s¢ºLŒÂN’ËP–ÑQ™ÕRšØw§Ày©Ä{­È~±ÍEÄ«FÈ®Fʰ€]N‚_P€Y}†aQ•kXp]¡s^¤ua­zd³h„\ˆ^„a„†c‰ŠcŠ’d–g’“j•˜h–šm™ŸpžŸp ¢nž¤o ¤r¢©s¦«u©®x­²w®²y®´z±¹}¶½~¹†‡i™™w¸‚j¡¢}ÁˆnÉŒrÎuƒƒƒŠŠŠ”””›››¾€º«¬„¶¶Œ½½‘¤¤¤¬¬¬²²²»»»¶Òƒ¹Õ„¼Ù¿Á“‹ÅäÈçÉéÍî“Òô•Õø—Øû™Ûþ½ŃÀÈÉ™ÙÚ¦ÄÄÄËËËÒÒÒÚÚÚãããêêêôôôþþþÿH° Áƒ*\Ȱ¡Ã‡‡˜H±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8kBÜɳ§ÏŸs J´¨Ñ£H“*]Ê´©Ó§P£JµªÕ‚£jÝʵ«×¯`ÊK¶¬Æ«hÓªU˜Õ¬Û·pãÊK·®Ý»kóê½Úö®ß¿€ L¸ðؽˆóìk¸±ãÇ#Kžì·a>};øó¦¸³CÆ”C‹Mº´éÓ :Ù·‹ƒzú`)˜Eö@,ÿÊÍ.èdɇ=z.Ù À‰Ï ;t;g®[† QKŸN½ºõë^öûÇ݃|Üsÿ8žû¹áÿ'¨oŸ?îú˜û÷\s>ä ;œÃÇß¹çla'à€hà#%×Þ|óO7Ì·Çÿ|s9þ`±Ä?ä,a>v@N…züã%žˆBÝô×_7 E‡àŒ4Öhã„5ÔÞ@üôÓG~øO>~|0fߤ?ñ³ÏýÜWŽ?¯­xÐ~.âcNŒ8véå—`†©•Žû ´?hú³¥7ïýƒH*‰Ù@ùô€ƒ¨i%BXºx—b*è „Z™<2)œéD9ÿôç‡ý%fNüsÎ?ÁíiP‹Y ¡¤–jê©]ZæOx“[#úÿÁM…X@º‡fûÜÊ?{¢9zÌ'ê>ÿTê©Aúù `B2¢êì³ÐFYCšxÀ|Ü™s@å‰Àˆê¹Ê¯ý´©í@³&y,²Ë5·,³ÒÆ+ï¼ôÒåÐFÔï~ÀoA¼ëë“Nä;ƒë­ûS³õ6ìðÃ…ÜŽóã¦ÂS1ñÆwìqHÈéÑ)AtÃ@/üñÊ,·ì2Ê)ÇÜ“Æ/×lóͅʬóN4ãìóÏ@#¸óÐ õôÑH']ÑLëôÓPGZÓTc%õÕXg XÕ\­õ×`‡Ý×U{-öÙh§MÙT›­öÛpÇ ÛL»-÷Ýxç 3Ý;;ÿ0Ä߀.øà„nøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褃.0Ù4¤®úꬷîúë®3*ûì´×nûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõ¶ŸÎ5ìÜwï= ؇/þøä—oþù觯þúì·ïþûék_uê%Ôoÿýøç¯ÿþøóíÿÿ  HÀð€”ÕèG…5ðïÜ_Bð#I]…‚C 7ÈÁzðƒ áh8! $ì ý€!ºpm(†ýâ€rœC{›JôÑ+úð‡@ ¢ÿ‡HĦp*È‚°ÁªÐ Tx¡ï׈hÌP!}ÀáõpÄ"zñ‹` £ÇHÆ„tñ'x ÓBƒ5HCɨŸ¦z0£2´ƒ3žQh@¡~À G=ž…úAaÀG=ŽáiЃo\ÃB²3?\»ÑÃeÌ,` øÐ‡Æ€rðÇ“ÈB>È¡}¨È­ädÂÊHËZÚò–¸Ì¥§Î8•5¢…OXÃ1ZX‚5Ô£ ÓpF M <6Ò%`C=‚ÑHbB¡ô˜„q5cgX&©E`AßÈÂ9òဖ# æà!Ö™oèƒ3©Üƒà;øÀ{¨}x²§€åsôiP†õ¨HMªR èП@Ô*­E!Œkj”˜ÒŒB1!ÕzDñš^0)1K@N”µh ÝCÅôŽ'9Ý)lôa$ vC‹=-êR÷Ê×¾úõ¯ˆiªOžêD”à¤ÅôhU3Hz«õB ®Åû!–¬ Ñg•îªF—ÂÔœ3­éMáJ¹ò³®t*ˆ ØÖºöµ°mi“F&ÿÂ)¢Ox‚0¤‘[Šc±­#*ÚB9Ôà LhÆ4 éUüw P0ÁBdÊ ~õÔ9¬ìMËñ(`?X°'g0W.Á@=í9¿…êU¶ð¯|ç+FÁîä„YÈo•œèŒzø›Æ¼|4‘!Ìù†>È1å6»ùÿÍpVK•=uåzAZæU°À oxg Aõ7ÎÌ=ôÙ‚qN´¢ÍèÙúï{Ž4øàGéJ[úҘδ¦7ÍéN{úÓµ›óž$MjîúÔ¨NµªWÍêV»úÕ°ng£gMëZÛZÊ¢¾µ®wÍë^‡1×¾¶°‡Mì&f"ÅN¶²—Íì½HW/ÀB~]Óìj[ûÚØ>ȳóÒ¨‰,1Ûà·¸}½mÄ| 9·º×Íî(—{/ßn·¼çMïø¾;/çÞo½÷Íï~õÞrF¡¿Nð‚Ûàh)2¡ Îð†;üƒ/¡e÷ðŠ[üâŒxUÎßü¦ã ¹È¦ñ‘›üä(ÿ`ÉSÎò–»¶t•ôzF>¨,Î>WdŽr°MŸ 7»à_Œö‡lËÛïŠöîrÐÝ*ÐÃÇ¡½w·®H Z§ÚwH9øÎǸð<éºÓbZD¨•ºi9ô‘r<~*Ž'ˆ…û™¯»êÔÏÑd?;yÓþÈÌaýqfoÊÉ;á2ç8‡MasÉ—ɇôw´†’H å(UÏz×Ã&ú=\ÿ\/ãwÀ’í á<^1yb ®ˆÇ<â ¨?ñ@Çð ± Ÿð )0"ü)îk{ç`u°´{Çq|ú|ˇ%ë|ñô¡IØJ¸‡YJ‘ÕJç±ZÉzÆñ´ä‹ÌKù²cfbB(ÁƒJÂ*ÿkÂá/'„žWñ¬Ð"ð-à .ð,À¨0B,:pÉðÉ"P;@ÄF @0 B°•ð p± *à>•À 0 åDÊaÝ@PøPUP4hƒ*’°´w•N.(‚$Hh;t)}(’Ì:YDêÄ„•Ne›¸ˆƒá,΢¤VZJZ¹(¿Š¼È{qn r˜×› ƒ€1L°; šʬP©! QÄÑ Ÿð?ð³ PÑa¤9t̲)0¥ZDE•PŠ‹ðÛÆ¯±‰Þ ‰E Çýô dÿf…Nð#¦äÎÒeÒÜǶ©|}PŠî¬WcW´š¸õܰŒL܈µì  <àÏ™¼¬  ˆ€  ‚° ¬ » :À«Ð¬LV, “ÐÖíO¼ËáÑÆ\ÌK™‹t—WúÈOˆH½qŒV, gJy­‹°üáÎa†C™È¬/¢ôÏ‘E^·K³M­/£'±h‘ ™\— 0L]=3œ ˆ° °tÝ € ” 0P ±Å-‰ó«Å,æÓç¥4¥Ò}šC9‰á äÐ)‡Í„ç@ˆ›¨R””–¬E'¤DXÿ9ÖH2†œJ} ½™í°›µFòÔWñÕ.p9ðÂ!©0!˜p À«PÐ ° ‹€ 0=«P‡tí² Ì*àAP  Ÿ°Û€Ä/€ÁÛ‰Ìa{àYäö PëÕ^Ëéš°ySKÐS{p^‚]œú«97¤"Ó=Oæ zˆÝ8$SαLjéø-³)zøÞÄ=Âø{Þ%›Þ:ÕqÚˆˆÀ A<Ö¡Œ ¬  Ð`½ ™PÐ$Öa½»ÄAŒÖ²ÝÊ ãÛ @I< ± ×Pž ³ ¡¾{SC­T™¬Äz¨ôŸ¡ÿt” jSZb*xšš¸b’ã’­Á4NÇLˆÝ’¨Ÿœ©¸¡>Éä…¤ŒHÏPn±R>Ì{0uˆ Û10>ë>!(³N(0“ÃËSº¼L¦õ‘FPJ¨µk™ÂýÇyDSêSJB+}ê0›ê­•fk–’ú&ÜzˆŠíØ®í€ehÞ€h¿¬ïŠ&ïô~ïnfïø¾ïP¦ïüþï/æï?ðñ%ðð¯•ÞŽëqßð­•ÞiÄ(ÃáðïWæN²)£Ò` Ø„QÔPà` ÁÃà_Ñ A‚4 UPñ0lŠÿ¸L³}TÂP¾pDõ``ô`D*¯õPDpGóPŸÚnMcóg0ôPGiõpEÏaóv òQŸöi‘ê_[õõ@A uÌ@Ç@ õ õ  þÕ hÿ þ5 E ö„O©ÎÞDcóBÔ6ÿôŒ¯õ%oô@²WÎÐ …¿ù>‘ê„éöËÀqPE`óop¾÷`VÀ@ q°÷ËÀù¸ÏÁˆQdQí)6 þå ‘óõ Ó õ@ï_ΠòE Hõ ø¹ý að:cóD h?°ÿqýã¡@ýÒÞä3Ö_þê¿çŸ2 ½¿þò?ýó_ÿ{ÕþöŸÿ„ÿúßÿ| $XÐàA„ .dØÐáCˆ%N¤XÑâEŒ5näØÑãG!EŽ$YÒäI”)U® )åK˜1eΤYÓæMœ9uîäÙÓçO„.E ÔèQ¤I•.eÚÔéS¨Q7 ¹$ËÕRµnåÚÕëW°aÅŽåHÕ£ƒ,Y­š%ÛÖí[¸qåÎ¥ —-ÇY¢½[×ï_À&\ø`_°,éàĉaÈ‘%O¦\ÙòKÄdÁ’åÃeСE&]:pfŒyæu`ÚõkرeÏžÿ‰úâ,diMÛ÷oàÁ…·m1o‡xgÞÜùsèu‹W<`õêçèÙµoçÞ½çt‹DÁ{'_Þüyô ǧgßÞý{ø ×ǧ_ßþýæóñïçßßÿdýþp@ +@TpAuB°A#”pB¤ðB 3Ô *jCC±½²‹ÞFTqE™+1¡ãp"·k´ñÆÒ^DèƒÇà G ƒ’0Âm ´RrI&› «HƒòúÀÍ”tòJ,³L Jƒ”Ë¢J-ÃsLœ¸DH52ÓTsM“Ì$9°è‘M:ë´“º‘:ûÒÍ;ûôH>u ôOB qPÿCUtMDuôÑ+…tRJo”´RL3ñRM;õBN?uTC%õTTéT¼Øá†ZØ!8ȃƒ†¼9‡Ã|üHõW`ËÄ ÌòâÌÊ©V¡U¡XÉ®¸ç †–ÐG‚¸ÉÙ`»õ¶ÍÐ"v·%£‘£8@Ù…!„#ðà¶ nò¡ê}öøv_~Gzñ€Ö–@µÝô⨅TXQ„]Y…D`TVIEÂÆž{Ö¹gZ¬ùøk À{Rnb <ìçã;Â盃Ì!§ =ð¹¹_ž{–JtLàŒX%‘.a…VDRÉaAx€ÿTaa„„±§š{ª±ÂÉã ®ñ让 {¹"åbõñÕ rð)¨}Ìñyo¾Õó(h,:Àb·y'Ê• aiŽÞa‡DR!@ Gi¯°FÀƒ>º&¨ ×¾ B_M±› 'ºé£oÚkº7Ü'|#Xu‚¥w'¯\¡Ë;˜¶qàxœ—«½t¶ª~`Öé~½v½Ø/}4X£VU„¥Ö!Ê-‡ƒåÅ!ÝìDˆtµ¯¿€™k.§ %ô[Ý# ¿tä´L©sY(׌8ò€UâˆX.   ;0žÿûàG6ùuÍ"“ž€‡{ä Ðß=\R¯{écvÁ›Þ xÃnéHOWYÍUPÔ<¬b5À0Á V¬âx\"B.÷Aæ…ícãƒéFv<´Ð%Öà@´¥¤âPŒ¿ZÕ‡:¢€ À ˜@‰Ð“QDW¼šÛí,SÝQ{ÜýøÇÓRƒ´ ! yȯä‘‹ddGÙHHFr"”d%-™JÖd}èv4¢‡9)Ä›žé#|”#ú Ì1Ó|àäøIÍáÉþý³šÍæ6biMZ ½6“p\p3–C¸†AµPPõº H.rqm𢖈ª6rÁU„ܬ¼È†6ZI mp3¢àÅ5®+<µ¬±|(Q ¢R‹ö(ß+HG}RÝ´TÝÈÈ‘ÿÅæM!KÐ>–‰=ÈzÞXØCIõ°øAÜÐCJãVÇ”aPmQc©„m¸ÈÅ@h 2l#CèE/òÖ!ìB@’€‹p„±Cl×147¹AnnËÀ lÞ‚•e0ê@’ÐÜ\æv·½@jWÛZ‚ÔM°ëý a bØž õœÝt¦O“òφ QfÜžÙhb¢8Ç®À }dÀu,'7㊠Üv¶µÍmp;Ü$l£•®å@ÀI^ìb ½ðfU¢‹é„¶ã¤Em „2”Ae È8Rá W!®cowâÞÀ—'ò•ï9̱àÿ™!ýp“Làšâí3HVÈ4µk××vÂ9Îq†ðÛ/{xºØU.6ýŠÜ„Ðv.Cm—»‹¨ÒøŸá.—¢^çÙ&@æ¨GsRÏ, ¤ž)~‚~€ä°“¬¯GÇmÀJm‚]Ó„LsªÎ½/NLá:“ÃÛ¨%‡ òá2§ÚÄ@qšsÐ!´YÓ›q5|ãP×Y!æøŸž}-“&P£qšR&âšvTŸçøÞf'Ó, ؆õÔ‡'—°1&Ò‘~2cˆÀŸ™î.vq Öºuf岨_LêßÖ²Pk,LfºfWIÈpŠ B[XË ÿ· fç20£fàî¶óŽdøkˆc†#;4Øf®B4ˆVËÌÂLõA|`¤ùÈÇΨd“”¤åØv€¹=0cê#sâb•Ëá1d Ü4ñêìówÙÔËÝ&7 €o^xs»à¹§‚ »µ ¸˜í6¯Qëæݨ@עΈ‡%ÆÞ •@+(Ø÷²qŒYN‘p€O/¨‘ à5#úd°Øý>Ë”ö# ¥\8 P]”ûï‹÷ ÙÒlotãìÒ!-h¡PÆg^*Ž×|ç;ÅyχžR }éEzÓ§žP¨W}ëíTF×ÇR¿$Vœ|X8ÙçžNîüÿ’Àð¢8P÷ÃïF€q‰ŽøËgÔß%|æGŸL|Vî¥ý!ù8Øç~–Ü›Àî‡ßIÁöLkÄ…@ë‹_ý"ÒáÅõ⥋³~ýó׎üéÙÿû/þùÿÿð?Àû@<@ø0@\ÀôP@|@òp@œÀú£@ ” ÌÀ‘@ ì@ßà@ AØA,AÒ ALÁË@AlAÉ`AŒA"‘A,•¼Aþ€AÜÁ·ÐAüA±ðA ®B"<¨0B$\B¦PB&|ÂÁ‚B)t'œB+̉*¼B-¤‰,ÜB/”¸/ ÃC2.,C4‰3LC6܈€!ù-, Ô‡   !   $$%!%) (&$*-*&$($(,(%((($,4%/9"1.#41&2<$:6%=8)04,38.8=4,(4+39.8:1,222=1<880;;;'4@(6A)9F+=M,?P3:@9?H&B<(FA(KE)OH,AS.FZ/H]*SJ,XO,\S4@F5BI;BH0H^;KT>OX?QZ1Ka3Rl5Vr6Yu8\z.dY1nb2tf3wi4|mA>=P>6C4BK9JS>QFF;XC:`I>CCC@@JNN@KKKFDQKEUOGXOHX@S\WAVTJ\\C[VWGSSSZZZBV`DYdG]hH^jZMbLerOiwPkzSpfLAkPCuVIbG`dJdhJglMjaPgbQihTnlVqnXtqOnrQouSsrXvw[{yUv{Vx{Z|bcOiiTvv]ccciii{{asss{{{:b„;f‰=i>l“?p—AsVt†YwˆYz‹Bv¢Dy¥E}¬G°~_`‚5‚s8Ž}€e:”‚;˜†=Ÿ=¡>¦‘?©”]€“G€±HƒµI…¹J‰¾@­—@®˜B´B· C»£`„—d‰gŽ£h¥l•¬nš²pœ´s¡ºLŒÂN’ËP–ÑQ™ÕRšØw§ÀyªÄ{­È~±ÍEÄ«FÈ®Fʰ^O‚_P€Y}†aQ•kXp] r^«yd³h„\ˆ^„a„†c‰ŠcŠ’d–g’“j•˜h–šm™ŸpžŸp ¢nž¤o ¤r¢©s¦«u©®x­²x®´z±¹}¶½~¹ˆ‰k™™w¸‚j¡¢}ÁˆnÈŒrÎuƒƒƒŠŠŠ”””ššš¾€º«¬„¶¶Œ½½‘¤¤¤¬¬¬²²²»»»¶Ò‚¸Ô„¼Ù¿Á“‹ÅäÈçÉéÍî“Ñô•Õø—Øû™ÛþÁ½ÅƒÀÈÉ™ÙÚ¦ÃÃÃÌÌÌÒÒÒÚÚÚåååëëëõõõþþþÿApÀß·è㇟¾ýò(çÏA‹3jܸñ¾ Íq$r ¤É“(Sª\ɲ¥Ë—0cÊœI³¦Ëø„ù~ûŸHŽH“*èäÇs#mJJµªÕ«XKšûçg'F}ýì÷óÉ¿sÿö,]Ë6a7§»EÍJ·®Ý»xO–ûǧ྾ÜüñQøÏÜž­rìû¶­ã¥š>í07¯å˘3£üWn ¹ÿžxûÇMa? Í‰ÀíÏǰ9vèvÎ\7Ê•5ëÞÍ{*î~Ô·ïÀ‡>‰Í¼ù@’½£KŸ®2)ñ‹øátÎ6têàÃëÿNºGmBݸ­îÎ~éwñðã×mO¿þÅ÷òóë·i¿?}üû( KþÈ€&˜  Ɔ ‚ê×à„m=á…âQ¨¡Rbè¡t†¸Q‡–8žˆ(&D¢‰,Z–⋬ØâŒóÁˆ¢Dä¨ãŽ<öèã@)äDiä‘H&)$…54éä“PF)å”R:`å•Xf©å–\véå—`†)æ˜d–iæ™W2Iåšl¶‰æ›pÆ)çœtÖ™¥š&ä©çž|öéçŸ|Ú(è „ؤ V°袌þ©Ñ~Dº^s"W襄:ð„Â9wh0Ò4*êŸn£§F”sÎCÝu Ï`˜Æÿ ãZ<‘…¥Ü…£öº§#Ñœº‘¬rwÀʪ,…Xtk{5°!4ÊäùÅ4àÐÓL=¦Þñ 4õDEžÁÐS4RäÅ4Á€S2_HC=Ó²Á±ëý‘>ød1Ðûšƒ0¿ç”6ÑG E>äøôÇ@ø$ðrËfÜݳìÕÈ„jõ¸1Í3åž ·ñ>cBõ¯ÈQÔCm ƒÂÆLƒMÜ[lú|£Å9ù8àj9Z˜ó*Hká>Þ ¤O°‡>æ4qEkq°¿—ÍÇÝ}*2ÉM<#Œõ4‘² oÄÝsžnÔ3nÍtðÿ ª°á;7úX¤…>{`½Üá|€ 8OÕÀe½5Á[ƒP1eX“möçm¡k &ü=rÜÈ S³Ü"Ã,…1ÉäI2¯5á·È&½Ú[=ñ*±ù·ðMŽ«°f®µ> tóõòžƒ.}R¢{Jºél£zÜåâmwëõLaBͼîizîÃ>P7ê¸>ËÝøã‘_yòÌ/¯¹>œëýô¼H³n¥“´A ÃÆ³·=¹Õ£m Õêñ†&8cêªGùô4A6Dá97²Ð­Ý&bp\9žPŽWÀ#Y˜ZÕÀ¢ý P^æˆö,¬ê â¦ÿ´@D‹äêõH¢ÍH†c£f(h—»èa; #‰à¨"ùøÔ¶$¶#ø†O35Ÿ@Xãâ v0|äC.[ó‰Ät˜?©cAÌ£Õ¨`DãÜÙ«¶€à ¿)‰ç/±(M[‹Iˆ•,=Zrt¢:Ÿ¯üÔU}#ç‹ðá 7â*)µ#9.ÉJh‘®Q_˜Ã&Õœ,pÃ0¢æ¼ÁS’ç–]i¥0­×¦b³IvJ¦2—ÉÌfzIMnj暜IÍjZóša¦6·ÉÍnzó›à §8S’qšóœq@ˆ˜#¢óâtJb+xÚÓœ ФîÉÿÏmÖ³ŸÕf>ÝЂê±œ2¨Bó¸H_.ô¡[äÒÑŠf,ŸD$â>-ÊÑŽzô£ ©HGJÒ’šô¤(M©JWÊÒ–ºô¥ô)'}ö)&P‘2wpºQ TCDÃã²ÎA¹‹,’?mN7œ«e¡ù8 w”7!t !Ä ‘9:S6¬ùò '›ã€¬QˆRuN {ÚŸ²65«òN3&9…i¡l… ò§Í‘-ÌG9Ò´"$ŒCûôQ|P`\Xä@‚›?ÔFùXbJ ×Þ,‘4ÂJ“*Ìÿö_©…&·/®V,©HéAŒ#G>8%µ$˜O81ÕºŒHÆÎq/ì—‡µŽ5›°Oè†âÿ'מç.Ô/6Ä`At]ß&б,ÀSü<ù`9p2JÂú@V$²åÚ¶ýºÚºðkfRƃõOjY¬³À»eDŒüÚû¾šš…} rÁ—8BôÅ^˱jÄò‰ÿ7Ä"[7Ê%ûœ‡¯sŒlÕó?7ÔQÜv”Þè7È´^QÜy°ãõáU€ÎaBÕ,ð~öñO°&á0€à‹)–ð€Ð-  ŠЙ#°ð ø96ÀŸšµ0,p ¡00 ’°?ð 1p ž2϶O¸9abƒs¾c4cƒg ¦pS1dÃ>ß0`Ë“_ûâP®rئZZÓ D„"A,äp4"6¢Ï™}I|ab|Ðh|Y„ "ùÄ4uݱ „Œ‰À<°œ Ÿ®« "Išñ ¡@ µ  @ ’P¦nq`›‚'г9hä?u¦‘f“npff§lnißÿPJ-ö‘ÒXŦ6å_ã§Ã—‘„g‘²gÄDD•w(ök¡u¹À =`¥òÉ®À ‰  ] ƒÐ ®°  ;p˜ìY ›”P ÄJ§ š:vš§Ð¶>“&_ÒÐ#m|†¢È¶¢vGldžÍywüÒ”Åö<øR¨ÔZ<‘dmæFÄòSâf#ú˜‹ì± ò™™0‹Y!µJ޹ !‰Ð ÀËú °–0 0’p a›wºÄÖ§üó§»&†rXµ—Îç|ç­Èá ä`ÝzXg‚ƒ/<—©Å£0+‡‚sâé0~ÿ@“ R‹+¥Üq«/p:@1«@"š ЭХ!À Œ  0>  ­ dËú´°¡+ðBP 0 ¡Ð°0š0"Y­åù§|ÐNÄRm¨u$öCöw çL°5|€CÍÇ;jÇvL¢'kÅ^+û‡s؉UÖ•S9xE93€”šX)"EDéÙ®À™»ªŸªà ¬.€«­° ]Z¸š«y›É™>¬†' Cù @¤Y ³¬P @ µ°ɱ”‰ØBþsƒY cG?ÖG?á'G{0¸-V| 5ˆÿ‹¢¹Gº)b–*JÏ㽞œ"†~ð®û´•Si­r‘õñ d‹ð¶ñüûà¿G’HÑ-Y”DÍ¢s•ˆ§Jy¡ÛJÑ+ • ™Jú€eX¨Z©Ê—M(h)+{L«!ˆ„Øw˜‡-|Ã8œÃ:¼Ã<ÜÃ>Œ)•QƒùØÒ,VRCD}ÔBÑí¤Ô!RÓÆAªNM‡”ˆ<;Õ ^VíÒX•ɨ)2ÝÕ ‚Q›ÂÕbÍd|ÖþVêTÒjÝëT+ýÖy9×t}×x×z½×|Ý×~-II͵Há< ÜÁzÀIá L§íˆyaÍgHeÐ ˆ½>à ›Ü÷€¼ƒ“4éX+aM+Pzíp˜Í‰€¯Ýáy`ÒÊWfÕ†cD‚©Qì¡™®°±…€«‰0°<  ­° ª° öpëp¡ Ö`Ý÷` ÿ`àí‘ö Ö¯!¹Xæía­Õ 8ÙÍ¡­ $ ®€Ø‰° : ™öú÷Y- ´öP ÷P ö€ z€ ž .Ú ÷XÞ•“•ã–Ä2qÕß$DvôÍ:à “Iû}ÙŠ ¥Š° ñÉá  Ö ‘}Ð÷ á×á÷äb!•nñp™·Öhâ$¯Ü±­¦°ßYÞÙ‰0Û5¾7þ¡] âpÓ=æ] C^ä.m^­ >•r©aPËñÑÜ¡W#°ßö½®jãâÀc.DNá ÿäkŽáoþæ5·Þ‰ÆUèLVòÕ§ ¥ÿÄÐ ƒp¤‹Ø™˜0 _®7Nènè îÙ-äypz Ðè÷°;Lh"þ¾××Àý¹MÍ=€«Ì™  ¥Û ò™ óŠ©^ènÝÓÝF®Ý÷¸¾ —¦#ÞŽÍ 0fš¿Ü‘NÐÝ¡”‡5¤=ïô^ïö~ïøžïþ˜¤~ Žk±n¤騆G@d@†ØÞ¡²e°q¯ð o® "ÙîÖ¡û"a(ÕKªHá4 Ãݰ fpÛ *¿ 2ÿ¯ ·Ðfp ²òŸ+ßò/vß^ ¨mD´b+þþ""Üg‡ å‘Û=Úó=Oº° dØ;?! yõS¯Û(ÙVCôÎrô)•Là^‰ÑW˜eï}q‰ ã×¶/$$%%&( )'#(-+*,"+2 .8-,0 0<334668<<<3C6I9L?Z;S>X<4DA]@[Nv Q|CbFhIlLs(FA)KE–u@Žf¬Žh¬˜m¸p¿§wË©xβ}Øè¬J………‡‡ˆ‹‹Œ’’’——˜›››£££ªªª´´´»»»¿¿ÀÄÄÄËËËÐÐÐÿ€‚‚ƒƒ‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª¢ˆ‚…®ˆ…‡®Š«¸¹º»¼½¾¿ÀÁÂÃÄ›­®°²ƒ´²·ÅÐÑÒÓÔÕÖרÙLjÉË„†ÎÚãäåæçèéêœÜƒÞßͶ™_ëõö÷øùúøí¯±ðáäa¢·¯ Áƒ*üÔ¯À»eñ=³Dp¡Å‹3j×𡬈‰"ÕÈ‘ã F7ª\ɲ¥KPÿA (ñ ._¶hñò…Ê¢”/ƒ JcLekÕlÄâK–“‹¤|±hÑ«X³jÕvô[‚&BزBŽ-X¬Œü¢ÂêÖ·pÿãÊUÕ5©8FmkÔpšå‹^r¸K¸°áÃêÎT’ÑŒ/(¬xYäå/©ˆ3kÞWñGš=ŽÌeÑeÀ7s^ͺµEÏ®À˜ØtFj+VœRa«ÚµïßÀÓÁž:¬#.Y HæBÅ‹—UƒKŸN«,±‹Ïvô TG½«‹Ožîu™ŸwTƒ§,[¨þ,O¿¾}RÙi»ÈÄ )RäÀJ÷hà”äŽzÛ „àƒ¨àWûEhá…N(vè!yVøáˆ$R"ƒ¤¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H yÿR‹yåä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™Kz%šl¶éæ›pÆ)çœtÖiçwbGƒxöé矀*è „j¨G$4â@†6êè£F*餔ž™€$À(3|Vêé§ †*ꨤf "šnJH§¥¶êê«°Æ*«›§’@!¸Âꬼöêë¯Àº@2¹;l°È&«ì²Ìú9l±ÐÛì´ÔVkíµR> m®Òbëí·à†;«¶¸² ÀX\`! â¶ëî»ð6Jn!5°*Ü`… QjÊ€ 0 ª¥ñlðÁÈÎ+@ UÕ[ü>™@]ü[ÿ^1°+p1—‚EŒðÈ$—,‹?Le?Di "‚AÍW*\ _ÌPÄPbŒ‚Å  à…ÅË8ðE \Π… &G-õÁQA”%> 0ˆAÁ ô`@ÎÄÒÛ°2@?‰1Òí•ÒL_Ì€ˆ˜0ÃÐì ‚Â &8uÑ~' Â  r·$>õãOª@ ¢€×–`P^@ç Ru“W>pvY²€ç®Ä؃èÐÃì‚ hË4\  ¯Èß$€'üƃÐ]€Ñ_D_·`ÑoñÔ»UÿE™ðÀ8EϯÿZDïZD®þú„nvÈþ 1@öú±ÁçAÐÁû0 ˆ ¼Ï¡k6Ú Â€¦+€#€;Aè@½Ë•¹L<,´Í+ÃÁêD‡¹%miÞIÊgž%G<1AS¬à€Çl¯{JÛB ½>©àÀRIû†HÄ:5 (ºæ œ­‰¬ÜÇ| œ "0Å (l:@@zÀƒ(J05ë@ËÁ | ó«`:àF+)LÊ£¨5'…p„Ÿ+!ÜA7žÝÀoKKMßc‚)|Á‚È ÷®ç¼`  Ë ÐWÄNz²ÿM à0G€ H @hEë¢è5 `±j´,àÅb±u®Ô€)ˆ¬±‚×ä˜5^FIa_¹Áe<%ã!UËûÝÚÂA(­$Ä^L /¬.5“ ÜÒ!L¢eZâ'×ÉN0Y ûÄ>P¿j•peU&±­2ŸAhÀ*¹¶~ø’~Aè@Žè˜EјPRX! ðŸ$`W3aFIÈ¥à 8D^öRÍäÆŒD_ÂYÉr@ ÏtÛIÓšfélð ÐÆ”ÑŒøÔgÕ:`9$С¸å=Ϧ€+FpŽuLêû¶F:fWšÿšFã¶¢­@£²pÞ¼0ŒÕ2}NöL`ðé+z,g\º—,Ø |ê´©^÷ú f@hÀ5k­|eØ*ÐxQw<ˆÀ€€ÁÖvMÅ"" ø9x³Ãœv3& UZm&ň–1æ â{L3õ¾à…ˆ¡`¬[Ø ÔTÀJò1PÚÇæŠÉäÀ9XH'_—Ë\ѹ¯µ«e2PGZ&6‹Ï?)6TÎnD­æ YÊ¢‚ºs •j%ˆ[k«§MÑF%˜`uBÄv#8>  ^p-"V Hb, ÍM0_  @þàTÚÿ/=û <øå2’zál¥m[Ýr“òœR>,àȵÞ Ô”tᤤ Žñ^'OœÉI:Ý7>`X;~8ZðÓr`,Ô­n† %Há T蛌§\SÐ V}/•·Ìe½f™[AÇ\²/ã*ÄdN³šMffZ„yÍp޳µÚ¬+9ÛùÎá¢3šñÌç>'KÏoö³  *@úЈÖµ<%h ¢‰Ž´¤ãdh—%`E(ÂétŒÉ“µ¨·Ti'9ÓEˆ iWrÔ°Žõ”J]ÛâV·1ú”ͬ-\”Möů~Á_¡;=Áf6ÞžÑ4â,”øéX_®ÂÌ¥¼÷8DNC.ò‘³Nvšê¬,ÈÑ]ö¶óùì…(úÑÝNwd¸^q_{Ý÷i¸ @îlç»àe~wÿ=š Z€ÀÉÏøØ\RAŸrÐøÊÿûÃx³å7¿fd2šó 'ü¶4߯# añ¡O=äDn«#D! §oò fOû±«þöâbýi]ÿzØ/¾›<¡­¶ ¥L÷ÈëÀûÞ'aS8ÿ†Kl(ü´‹ó´`ð–üîkѤ÷Jó_Ÿ„€ÌôŸþó‚_۟㩉^^½OÿR±¾½Ï¿þc¿Œé§0x„<'õé”{¡×W (*ˇQP~  Ð|Ï'}ÅÅ3V03pR»!,°:ݳ€"È€àwf[•%PÈX(RæãµX`>L‚#˜ÿƒ•¢{ñ0È‚åç$Ó÷Q÷–_†3VᤃL()<p?ÈHÀýW\™DVE`c¥)p/ðRÐGM8†…ò„Ô§¾÷‚Ã>^PMÇ=øâiÖ3dX‡ÎR‚nV%æG¨7lå HH}h‡„H+xXgV‚‚ä7ˆ…؈“b†®€‚.舔H*‰ŒX‰šx(‡8u›ø‰¾r‰ 8Š¡"ФxŠ”bЍ¸Š¢Š¬øŠ„⊰8‹"‹´x‹vr‰¨&ч‹¾è$fèh.Ð.Ài`² ø‹ÊØ d pKÀ-ÀJp™ø$R׸Œ¨Èƒ NÃÿ1ð2 `(`8,À(*`}¯õë(5‚Csȿȃ á8Žå½ö=á³}A[Psm^€=˜tÎQ=Ɉ¯¨PpJ ÔxyBe‘eÑ”—.CT@\TàBÐ3y‹©).ŘVãtMŸ~ó4ÀV@’à$m”·’³(‘Ö(“š‚‘½æ<6iaÉ=éR?É”A)”ÙŒý"O ŽYŽçxBL³”á‘‚À“>¹=7Y•V¹ŠOøŒÑéj5ù”G•mQ*°Q¹hI•ky•£g‚–ÃXŒ&\'F—iiRphÿ–R`‹ù—l‰•T"_Û( I'™øh‹šÙ™˜y虢I&œ9𦉠”yšªIj©¹š®éc ‰ˆ¯9›³Öš´y›^Qš¸)™ffn&x»9šfFX Áœ_öižxœ·©0 Pƺ 8plÔ ;8Ü çb‹P×É݉dö%שàÙØ‰Ps˜"žöEžÔ‰d‚Þ޹& Ø™8ñ)8øyHæžæyó‰  ñù ¡:¡Z¡z¡š¡º¡Ú¡ú¡ ¢":¢$Z¢&z¢(º¡Ã¢0PÝô+2Ä x£*àÿ,°[Õ6ºsÖg 4— £‡ÙY£æ¡À*€(`£Ùé8MZD ¥P¥Õ„?ª î8¥TªšâØ©&Ÿ(°¥)š¦jº¦lÚ¦nú¦p§r:§m£ù¢nÆ£7°¢,°§@QÚy†@Qhup7ð›Ã’†:,Âc*Pz:,þá1ú,706ª‹ÊV3 ©•*£{êƒÚ¨Ã’¨+z5ÀV}jþqQ—jp1 éx©¶z«¸š«ºº«¼Ú«¾ú«À¬Â:¬ÄZ¬Æz¬Èš¬Êº¬ÌڬΊ¬ )¢+3@©š”JÕêªTaTqû²ÿ¢ð­Kj­K*ðâV«—jR*pªèÊ®RàróJj°ÜÊÃ1ÇbB”Ç£=i«T ©Ïº° Û°û°±;±[±»¢±¹Ò™+7¸"Åùw‰ç4_Qtl¥( äã3õ4ô²5Pœ9à±ûjt…ë ZÀ² +{³ÅÉ4+´5[².[Y€w´ÐB´ÅRY`.¸r¦›V{µX›µZ»µ\Ûµ^ûµ`¶b;¶d[¶f{¶h›¶j›PJ#¨¹2Ã.r[ÄÇAQSìB&@\à0Cê1‰£v7«p9pÿ[\à…Sx§¸k»²;»´[»¶{»¸›»º»»b¸rIÅò¹ÎÁ/6¼7ëcõŸÇ3|^P/í!ƒd%[à¢Ó+ÍÁ¼Žk/ÏQ °½û*ƒd±0^ðíñ×Û[)[4|*›2H³ç[,–[,·¼›¿ú»¿üÛ¿þû¿¬¿&R˜-ä^L²ŽÛ^mŲX;ÒªµÆƒÀ¼¾±yÀ É3ÀÜÁüÁ Â"ÌÁèSƒ4 ¸’`Y[_ð`€¯#Ã2<Ã4\$Ã6|Ã<JvH…€DV`[[JæÀ8\ÄF|ÄHœÄJ¼»!ù,Ce‡/=0<$$%(((&.6,-0111:::2I5V6X8\ :Z1E2I0@=]h@^AlEsHwJ}B`DbHe`yCCCADMKKLFFQDJPIHTNLXSM\SSSUUX[[[[PdCd{Fh}Hh~`SgdTkgYnhWomYsp[vt]zcccmmmz`tttvvxzzzM‚P…RŠU‘X•\›^ a¥d«g°i´lºLk€Pn‚Us…Xu‡\w‰^y‹`{Œf~|`€}}€g€‘k‚’qˆ–v‹™yŽ›}‚c†„dˆ‰f‹ŒhŽi”l•–m˜™o›œp¡r¡«v©­x«°y®´{±¸}µƒƒƒ“““œœœƒ•¡†˜£Œ›¦Ÿ©”¡ªš§¯ª±¾€º¦¦¦¬¬¬£­´¦°¶©²·¬µ¹´´´°·»´º½ººº·¼À»¾Á½Á½ŃÀÂÃÄÅÇÈÇÈÉÊËËÒÒÒÿUH° Áƒ"XȰ¡Ã‡(@€@€Š3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›/Nœ±§ÏŸ@ƒ J´¨Ñ£H&\Ê´©Š¤>'V¼ˆ³ªÕ«X³jÝʵ«×¯`ÞԹªÙ³hÓª]ÛS`‡·pãÊK·®ÜxóêÝ›7c  L¸°áÈ+^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C@µ"ßÓ¨S«^ͺµë×°cËžè6F»¸s×å‹ ˆoØ~‹N¼¸ñãÈ“+_μ¹óç‘IgœM½ºõëØ³»v fîïuuŒÿË[ FÀ1þ…ξ½û÷ðãËŸO¿~aéµëßÏ¿¿ÿnµxÆå…wo¡z¯g߃F(á„Vháeø™ö߆vèáN*ܰÆg¼UxrÆ!ãY‘†‡¬ÑÂ[_rˆ3vÀ_àqˆ6¬aˆ!#â  ƒ±#‹À0QKþ˜ð‡ p´Â…\véå—`†)ædðá™h¦I ,äP‚8²hÔxÂ,™F9F¶pˆ!>ä F 6”Á† 6¬päN00‚,’@ŒüÃŒôP€ ‚¸Ä006À†ªÅ90æ«°Æÿ*묖©æ­¸æª—[_ÀyH i€Ã!+ØÙÁ¿ŽÁÆ[:2£ VÈÕ+y§-¸“Œ PŒðÐ#.i&,òCEn”ª˜A’ê r«‡iPˆ—e±ˆ ´öëï¿CÇ€0–Œ1 ă] „=LfifêjñÅòêk e„!h Óòé,%v`Ã! jƒ´vðèDn 2‘ .hB4÷àÂ"= «nbñ¢ðî( ò®a,ÅeNðñAÀPG-õÔ—1Ð3ÁØK0 ØM4!D`D(áutc¬öÚüiüVœ)áñ¯5¾ÕgÜöù,Êryÿ±l‚§ý-̃ûm¸ã–{.é.ïÑðXÒK/ 4l0N„ A‚‰àÄ€`9è €àÀNh.ælàÕ´×n;}XÀ𠜽À 0лî 0`YAî»ÖÀñ‚e u`¹7PLŒ-Jdï|Hf+Ûä—?›,„ÁÆ +À-÷Çxz‘Þ!»Ã hü-è€q!kC '@ ·ÚƒpË È#L`FèÁzèÔ§‚J1@ 0P0‡¡ÜBPˆE˜P Ñ— ±ˆ§ÅÁ„‹Ä"ð„&M†&,Á4À&"{¸ÿ‡HDä!lM(˜ ÄX  cÂÂV&„íÅkB¨½ Q “^ñÀEÂ\  Í󢼘# A|i3Ÿç¨¤áxÔÉâøáÁG†àŸðˆ‡•u`rÁs80B‚Ž|d&"8F ¢[Ð –ÜàÅÄ   € 9¤)ƒ „8°‡‚`vØ ÑB,bp‚ ihÃE"@D·°ˆ,T€˜A,¢2—ÉLËP| ‚@„éUs^BŽÐ", Mè]˜`m¢lGhÀ”ljíŒ+a®é<&.Q{  'dÆGÿÇ~ú“6*øN¯NÀ¸¬  z \€²ÜrE´å†- @€€(I ¹ÁP.‹ B`@ …),Ât Ð׸° æ…¼ü€PB,~ ›ÉÓžúô0è¼ÀÙžX0&xSŒØ çÎ(Ní5@l^Ü Æ3A¨…)Âc&XîôcøùϲšÏ-º YvCóÀa‚ ¤ Ü7ƒä `<ˆš #XÄ “´,Pa ZÈ…B¦ 3¬¡L•.Ø4uÌ’ùÓÎzv™ ›£„"<1ŒÓ›êRÃiµ‚&{H]í:%ÿ„Í›ƒÑj`žH„ LÀ¨Rm‚XCV³WmhÍM v°V»TmxC´U¥´ÁS¹(ä79¥½² ,¢°¯—¶P_(meLgjÙ𡮪€0?KßúÚÎkÔlÄ„ÀÄvº30ªeªÕp ¶ D5báDª×&pÄæåszB@âÉ6½}Æñ¸¾˜S6Ìá§°…ºSq"^0´”ò¯ ð"ž ƒ@$b@"¨ðÂ~ †S˜Ã.%Ë^›.öSðÃ"8kß"™VÙÌ/Äž*6§V©[(°Å4€ I°À˜ðF1Fø§õ¢‡ÆâYÙÊF=Ûü ²ðäÿÃp޳œçl–Ûy)p–ŠEv M^ôBñpX¦NÅ€èB @‚@ ¢rP„t9ÙʵwX("æ°Ù#{úÓcbÀÃ6ÁpsÌH 0k›0j&¸vaCjyGÆq†o0Oŧ`ØhµRGÆÍ¥³°‡MìaàØÈN¶²—Íìf;ûÙІ6²›˜ JU4c<€Òl€ "Œ¢7°R”ÖcFŒ ¶X Â Ž·¼¹$<±*‹©7a¬|~æ[=L„Óý˜iGûàO¸ÂÎð†;üá¸Ä'¾ìi'Ç2´CéàmD$¢BæÂblIˆ:”ó†N¹Ê)tÛBl95bŒ ë‚“†â8ϹÎwÎóžû<çOβ0‡9TnÐBÑñŘpa]÷ʧNõùP`/•ÁÎõ®{ýë`»²ƒ^õ²›ýì^ÚºØ×Îö¶»ýíÇ&;ÚçN÷ºÇGípÏ»Þ÷Î÷…ËÝî€¼à‹ƒ÷¾þð!ù,Ce6‡1>$$%$&)#(-(((#,3 .8,-0 0<334668;;;5U7X :Z1G1H3C6I9L>[;S>X4:@9?HA]@[Nv Q|CbFhIkDbHeLsayBBB@@JJJKFDQKEUOGXOHXTJ\SSSUUX\\\ZMbFf}Fh}Hh`OgaPgbQihTnlVqnXtrXvw[{y\}ccckkkoopsssvvxzz{ U„ W‰YŒ]”_˜\‘aœf¥MlPoƒUs…Xu‡\w‰_{‹~_`{Œg~`‚}}€j‚’yŽ›~‘ž_—Ë`—Ë`˜Ër¼ÿ€d<—t>a„†c‰‰d‹“j•™m™ŸpžŸp ¢r¡©u§«v©®x­±y¯´z±¸|µé¬J„„„‡‡ˆŒŒŒ“““——˜šš›ƒ•¡Œœ¦Ÿ©š§¯¾€º£££ªªª «²§°¶­µº³³³°·»³¹¼»»»·¼À½¿À¾ÁÃÁ½ÅƒÀÃÃÃÆÇÈËËËÒÒÒÿMH° ÁƒXȰ¡Ã‡˜8 Š3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦MŽ`ŒÈ³§ÏŸ@ƒ J´¨Ñ£ *]ÊÔRž-ÞœJµªÕ«X³jÝʵ«×¯'sî|J¶¬Ù³hÓF˜¡­Û·pãÊ 7€Ý»xóêÝ«ÀE°€ L¸°áÈgôË·±ãÇ#KžL¹²å˘õ²Å!„®çÏsù`Bº"f¿ŠS«^ͺµë×°Y2ÎL»¶íÛ¸s_f»æèßs‰¸qË×€¡F–L_F»¹óçУKŸ6§îëØ³kߎ—m Àÿÿc‡xc&É33§Î¾½û÷ðãWͽ¾ýûø5 ¹s'N[x‰’ ‡uHbG m­‰$uØÐV x¬Aˆ$oðpG$‘ð'„cè)çD%–L’ƒ]I¨È$;Ѐ"ü¡Ç òÕhã8æø}ùõèãµ™@ƒoø–’j°FÒ‘Á’°¡¡‘5HÉC´±Anà„2€˜^9XòÇTbÀ–²ƒ"–(Œ90ÑG!-”ÀD $`@Uƒêh衈&Ú@6ê裚™Aom!)là ‰ MfPĦa¶E„$ fy\”¶e¦izXb@;Xÿ’„–Ìk Tbç|ðù‘N<òç LF¡-ÐH,è«¢ÐF+­PQAHP € L0âVé¹è6Ê›‘–¾ÑF–œI¥ nÀQ©$àeɪFf°ª]|Lb× u¢×@+1C%IülGÅÎ0l3L2l²º²”„!1LëñÇ ?G€„d!0E`… L‚˜›îÍ8s·î½2¸ñ ª¼’ÜA–ཕª¿ç¹ °ÓiÎZ+š¸êªS¯ {1±w´@ÆÄî°CÅ„Ä4N4C1,Ð1ÅjCdS$ö ÔòÞ|÷ÿMÒ0Ñ,NøŠ+0ÑÈ.8EL @ÍœL‹gD@1Sô„ OT€Øœóê¬Û&$ mÜAàþÌ©$]\ê›’!ÃxLˆ/\¼ QƒŽÅªG $a  bÉ Ä9ƒ!uÐH#3èùðFÌвÀ=ù}­ÄWâþúŒè¾"•ṫû•Ðo@Š10PI›îãÓ á¾I4Â~K 8€¼Ì %ø\ &2+T€U¨ÂËJ A+|€qVxÂ90‘

)C+ˆ+Úªв*L°†/MÂ(ó˜wa hÖ` ï-4xfx*Ó€,à.1@¬NT‘Añ¡cjœ1B€7n-}ºZÔ¦+&T"m#ŠÁ*±€‰ôÁMüSßDþÐÿˆ(B9à$JÐ! „(œ¬@TA´ü$Ë(`Ê‘…ÎeÀ+KhJÍQÔh#EJËx  ,æÉD*’b"ó¥:Tæg–&¹Ôæ8ø_E˜Ð= $áßNÎÇõå ;˜ÈלàÎz@ õÓÃ$0çNB¶ lzè§"þ@C@² ` k{0 … N„ %¨` Q&ÑPô”ךÌ47Š*€®*{D1BR Z! ¨¤¼õI–†Ä¥0M,Îdꡦt©MôÐ'¼ÊELЃ ð—pnMk^Ó• 9‘£*ªIÀ=cωŸ…Äj?3¨ÿ$R¬¸Í­ÈPØr»,Á,#z²‰Vô¯ƒ³¤ ËŽ²µf(e ƒ9Ìæ>ðe¹fËÝ›5å»àuŠZ¢ÒYˆMBÓãèÏI$aN“X€m'Á„ûÕ/ÿÓÓ ó)Û§V¢K àWuKà'Æ„8¬à8—Y„Ä5¥[K2D•§‹Â*PjnÁˆ®„_¸QÄàÄ +Ü PD-0ޱŒg¬–ðÚX)0&/Pƒ51c¡#þ[_ èW ©mEЏ_ÇrЈDÞ“ ø³Õ‰8a“øƒW Ìå.†l¡è6:€ S£Æ=e˜«W¾ìÿ ‚Ã/ ÀB’e£©áé\H±¼˜Æ€´ Íî6f=ñ E’Äs XÞDîç¶oîs?ΈôPÏbÂË uWp‘Ráƒ$AKOÌ‘L#(éFšûê–ZÇиÎuÎM¨6‚€\e–ÿ@¿=€ä1jSjEÍìf_¥e-—VðÇq¤&æ­uÍín‰×Ua€úðø  ”íÔA2Y?ð!mÎŽ·¼i"€p¹±Þη¾¯îyûûߟ ¾÷Mð‚/§¼O¸Â®’üá?4ÂNñŠ[|1ÛŽ¸Æ7Þ8àã ¹ÈGNò’›üä(ÿO¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç"w8LJNp¿ýèHOºÒ—Îô¦;ýéPºÔ§s¡ýêÝ6:Õ·Îõ®{ýë`»ØÇNö gëh×·ÖËÎö¶»ýíp»Üç>s«§ýî‰];Ý÷Î÷¾ûýËíŽ÷ÂSï)À Á;þñ¼ä'sÂþò¬C¼É¿‚3œaŒ79 qÊ›þô¨O½ê¥nyÌ»>]š9ç=¯˜áó (ù*‘…Õûþ÷À¾ðQÞú×ßQ±ù:,De@rOòÝ÷ÞèÁFò\`ÁÿðÇOþò›ŸíÅ?¾ú{”|'@ú͇¾ô¥Oý‘[ß,€þ¶ðq1ào•€ç7€X€té·~ Xí÷qï7HºÇ{àÐ$p˜•0#ð}$€8‚$X‚&hr ¸€*ˆ èóW"g},P ^ðq5˜\P )Ðx‚@„Bh~)¸‚;Dh4F^(÷‚øy0Yà•à·{bà•À—?8„^ø…`8y~–MHX†fx†h˜†äc(·|gN&g}ø'…Y •Ð]†€ˆ‚wcX>jxˆˆ˜ˆŠ8Jˆrÿà†qˆr÷—“€=À”0 €e^à‡8ˆ Š¢Hu…¸ˆ¦xŠj‘Nà3@h¬å›UÑIåq*÷ˆ ‡)w(Àî 0ðq)@‰‹@Ÿ8ŠÈ˜ŒÊØs¥ˆŠÎøŒFÁt‹‚¶¤f1Ö¸¶t'ЃU8-ðqÆÈ}ËxŽè˜ŽUçbdîøŽ='Ô8h†€²8 p"ݨtà‹ƒ€• ê8YAÇŽ† ¹P=Ô8dZô ð&Ø“?öHõØYd ‡´]Ä‘“ÐU ™or@ÀYN7bp}“2©ŒÍÈ6 ÿÉô£­ÂÐELà%ÈáEÙ¹­¢Yù3’– n$Õ£sR' ¡Š† ’3¹•\Ù•6W“7–¦˜“oò< #Hg‰i±§õ–;€”¹=Ji Su´’Úd•Ú˜•ûè•‚9˜„9r`)–ˆyˆdI–†€i•’ÆÁ–‘bS™|ÉIi>)”1И Á™œ)7~9Ö¨•…yš¨Ù•‡™˜¬i†Õà Q=z°–iY´ EéE …0> ÑöØ*wé&Ð*zi |+›õ—œuqÎùœ·š­9ƒ–?;ЊM¶6Où“3”A= žQÿÖ­¢qɲR1ãC+}ðG–1'9€=›µ3 “iйŸüjÒI:c$‰ £EŠ ’/¢Edf¤ERI'–P —ù‘“`—€cd’‹t@•ÕŸú¡^öŸ:¢€–—É œ2f¢‰¢p? 1‘ÍCFk8q z£8:I"J¢].:D/@_B`Fc-EA.JD/MH/SM1AN3EV3GX4I\0TM2[S"Lg$Ni&Pj*Ql5Nbd„>fˆ?i‹@iŒMkAm“Bp–Cq™Pn‚Zuˆ\x‰Dw Ey¥F|©c|Ž€9ƒt:‡x:‰x<“‚=˜†=›ˆ?£?¤Iƒ´J†¸Lо@¤@ª•A¯™B´žC· D»£i€‘vŠ˜yŽ›M‹ÁNÇN’ÊP“Í_—ËP–ÑQ™ÔRšØ`—Ë`˜Ër¼ÿFÄ«FÈ®Fʰ€d<–t>–u@Žf¬Žh¬˜m¸p¿§wË©xβ}Øè¬J„„„‹‹‹’Ÿ“““›››…–¢‰š¤“¡ª¤¤¤ªªª£­´¨²·­´¹³³³°·»´º¾»»»·¼Àº¾Á¾ÁÃÄÄÄÄÆÈÇÈÉËËËÒÒÒÿH° Áƒ*\¸0@€#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0':dH³¦Í›8sêÜɳ§ÏŸ@ :ŒI´¨Ñ£H“*]Ê´©Ó§PCÎ JµªÕ«X³j­:4ª×¯`ÊK¶¬Ù³2l]˶­Û·p…>DK·®Ý»xóêÝ[rjÜ¿€ ,°+ßÈ+^̸1H¿„#KžL§á  ำçÏ C‹ ¹²éÓ¨ _Ƙ† A06_l0êÉèÛ¸sëÞý´têßÀƒ_]]±õk.Á.`±ª(¼£KŸN½zFß³kßN“øÄ®¹ÿÐì¢Ï Aš?‡x H‘ƒ<r`ˆõûøóë§‹»ÿÿÛy'Ñç‰WÞyç¥W‘sÐ qŠ*B7ªŠ*Aì§á†vS†(¢iFD ‚(&¨^Œ2Êp‚áªlòfèáŽ<öèãE Ž(䀕È^Š)*Hƒ4JQH¡Š}bøã•Xf©_Dvé¥VFp"’Ë­H„*E@äR6QVj)çœtŠÆå—xæéS˜à ‚ârÌ­(„*S@tfp¦9€%qÖéè£æu§ž”VÚÝ\¬õ hF Ê)Oñi œrŠ“@¨c¤¬¶êªW“Zÿ*ëBOH!Eo=`ëT5P„˜f”™f9°^ªr O~ Jª«¾*í´Ô¾ë¬Ø4 («Dñ2‚B¸ûÒAp6€’0;@ªnV+ï¼ôJ¥V¶øÞT@·qm"nP fKŒR£Œ—Ô«ð §•ïÃ45À¯@p»JÂÀÉ*ªpò¯Oþ4À%«¬ÊMR2'§4 Àª˜|ʯs’°¹F9@…%—HØðÏ@S{-ÄØJì­@2>AÅ*’ ²­«œ‚Ð(%WýñA! ´´$0‹ûÄ*–ós"êÄEPÁI¹A·íöÛ( M´¬F ´oÓ€2Чlÿ"ЧñÄàƒ¡PÖ¸($«4Àè,ý@« !@ @.ÎpwîùçÉ=w¥u Pú&§  Š%¡ŽÐDÄ»å !>Ê%I±Ê®  »®» 0D曃nüñ‹>ºž¥KLÅߣ Ð÷ßRDuÕ&þñ(ÿ.ÝÀ%ª@.9å–AüÚD þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€L Û§¼åáIzœ ®FqŠ `Žu–XÅ(W=ƒ€T ,€B÷f©¬A8ÅÞ¾6 íî«àÄ6æ­! œx@ÈÃúð‡@ ¢ÿ‡HÄ"ñˆHÜ_ø%˜e/…%…Ë`1å×#›Å¦$ F­q Ü% UŒ‚– B×ÈÆ6ºñpŒ£çHG÷-‘‰”Àh'0œÈÊ!×Gˆ¤ r)æ G‡Ôñ‘Œ¤$'IÉJZ€wÄã¬ht nýŠ-ªãÄ&V1 ¤ÝÎŒ„ˆ#/ÉÊVºò•°Œ¥,•x/MÚ’ @U ß…IX‚W!‚$Ò(‚¬r~0À!a€ Ìò™ÐŒ¦4§IÍþeò–ØŒË1ã—ÌCD"Ìt¦üh0†ršÓ ÕL§:×ÉÎv ñšÙŒ'[¶ù¾n~ó›áŒÀÄÙÿ¾;œÂ©P…)Lñ ûe)p§BÊІVžòŒ(Vèé>eÞó›‰hf2›?<”‚}XÂ:°> $A $í€T‘8ô¥0©LçQ‰Ú4(mŸ7/šˆøôËäèû<º>˜B§ AXpT-a êÄL§JÕªZ55½©Vy’Söá¢`½'3áGTõ‘B2`(JAL¤BðD'(ðUРWÍ«^÷ÊWøeu«€½IW×g€¯F¢§ˆPï™Q²~42P&²L¨b•PÅ’°¾.¨B} ­hGÓ¿ö´ IŸü’ „ŒN ±0¬k«>ÿ¨"¦:*hàMôèô,hIKÜâWš¦E­råB¿:¶±í):úX¨b ꣀK)À]|âð, ŽKÞòš—’É]®z¥ZdŠº@D>‡úØ|7 :èÄ)(ð S$ŸøhT‡ñž÷ÀN0Ó»^å~‰ëXé»>ˆBþÀ šj ¥r ªª‚GLâ#Á >íƒß÷ÓÖ÷S×·‚ᮯ0±ŽwÌãü¡8Å€]q= ‹Q¡öøÈHN² d­ yÈ­5²’§Lå*ÛÉM¶é“‡,e+{ùË^Ær–#ºe0›ùÌhó˜ãYf4»ùÿÍJVóš±90äÙùή’óœmYg<ûùÏrÒóžñØg@úÐô XhD;úÑÖQô¢G×hH[úÒ¸‘ô¤‰ViÍJ%Ä´¨GMoúa…ÎÌqÙ¤„eñ"µ¬g½SŸ_}.€Á#0Bø´I$± aÓúØÈ~L-o½è:À Ž` p€&< ƎÈ @„"0§Û±v¼ d¨AðUÔ•ìv»ÛaÌžt‰hO»Ú€„’$b,ƒYhHÍ…þ®èIÁT’â»în[Ç[Vó†„Ñë_k@ß ²®4.6* àv ÀÑ$ ƒ«b ÿ ƒ*lÃð–ÓÚá¯TÄ5sH´º_ÒzÖ4œÂãzDFa ’›œ9§®¬Õ}RbNÖ—NöK7Ýéxr¶!m}[Û‡ÖÞqˆýëaïùÏËÎwGŸí^Êõ® ‹g[M;W…dz~&J!UE/9ØU!ö½÷ýòþ;à‰”ê¬ºÕìÖ¹mŒµø½3ÊŒw—üÁ+tÌ»yšß¼:=m“ +ô¯Ï½¡c/{UZ÷Àï;ï{ ßÿøJ>ñýc|ä;ÿÝÊ_~€8÷üê—=úÒÏNó­Ï}RcÑž¿ÿøÇOþò›ÿüè?¿D€Õýö“]-I¿üçOÿúÛÿþøÏ¿þ÷ÏÿþóýÔç~xlðþw€˜€ ¸€ Ø€ € 'ñç€x˜õ—5P%Ѐ ‚"ø2D˜‚´VH‰¤.ø‚0è€&~€ ¸†ƒ:èõçf~†„;(¨‚D(j,èG1˜„J¸„ø×6¸€ €(r … Pi°@ˆEGS„^xiGÈ„b8†Kxz0žæOX%ððm`šQg¸- -°€ðU€~jáW„`sšÁ…HK¦ €Ð‡&ài€àÐgøoÀ $p†€¡šÁ‡ ˆZ¨:8°…ø¡!ZPzžv #+)k*ey ¹¥(T`*Ÿb8r Ÿâ$—˜[ "y$ †D·-Ÿt¥Â±4O[zv/é¸Ìá’*´,ÚFAÑ#¹±;¢4pÛz<º0ñ³¤;¦ `zZ~p©«@‡á§¬‹  ~~Ãó‡§m2k€$%ð¡ %A¢”ç7b±;¿+°ã¼q&î"ºØ[¥»½ÜÛ½çÇ=àYSl°pÛ2õ×1£ä£Þ»¾ìÛ¾îû¾ð¿ò;¿òô›š!LFJ•ô‡*–ôÀ<À\À|ÀœÀ ¼À ÜÀüÀÁ<Á\Á|ÁœÁc!ù-,CJe†‡    !/=0=  $$%"%) (&"+-($(((($,3%/9,,0"1.#41&2<$:6%=8+15,5<4+39.811.333778=1<::5;;;2K5U7X :Z2K0A'4@)6A,:E,>N,?P<4D&B<@^B`DbJf(FA(KE)OH,AR.FZ/H]*SJ,XO,\S1AO2DS2I]!Lg&Pj*Rl5Mb6Qg6Ri8Tl5Vr6Yu:\u9\y.dY1nb=`z2tf3wi4|mC4BK9JS>Q@@9dk’?p—@jŒJi€AlBršTr…Dv¡Ey¥F|¨G°a|Œ5‚s8Ž}~€e:”‚;˜†=Ÿ=¡>¦‘?©”G€®G€°Hƒ´J†¸J‰¾@­—@®˜B´B· C»£i’p†•wŒšzŽ›~‘žLÃN’ÊP“ÍP–ÑQ™ÕRšØEÄ«FÈ®Fʰ€d<–t>€Y}–u@„\ˆ^„a‰’d–g’˜h–ŸmšŽf¬Žh¬˜m¸p¿¢nž¤o §r£ªr¦­t©²w®²x®¶z²»}·½~¹§wË©xβ}Ø„„j‡ˆkŒŒnŽŽp‘’sœz££è¬J„„„‹‹‹’’’œœœ„•¡ˆ˜£ž¨›¦®¿€»¥¦«¬…²²‰¸¸Ž¿¿“¤¤¤ªªª¥¯µ­µ¹³³³´º¾»»»º¾Á¾ÁýŃÀÃÕÇÈ™ÌÍœÏОÔÖ£ÖØ¤ÙÚ¦ÜܨÄÄÅÅÇÈËËËÒÒÒÿà@@‚{Š#— ž7…ñJ”HŽžE‹â&jà-£@r÷Ðã0m^"Aà¡wE€—‚½|s Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕœlÜʵ«×¯`ÊK¶¬Ù³c~óBE¹xT¾Ð“&@½;+#nuÀ¡o_^¡Ýõ’ ½/Tâ‘p‡^4/ñèAïÛ•o0PÁó „ƒ« C‹Mº´éÓ¨S«^ÍúhV´°cËžM»¶m‰wæÑ˘#‡â,*¦ ¢¢dÁéÍkYWøH+éEþ"ÚqÙ¥—JöM<ñÌ3ŸâuG< ¬i衈&e›r6êè£5ÒÉ“w¾¢¤yî C7EðÅÜ ¨ p°Ç<_ªèª¬¶êêxŒBÿ*무Ò&éN¬ÜÙå+ô’™æ´éMWôù'a‰ù‰ªÊ~óê³ÐF+mU±ÖjíµØru«NSèêí_jÊ©äså: Í1\Åéùë°o¾“ÀŸ³nûí¸Wûî¼o%ûì&£žûðÄߺå½';ŠGajüóÐG“ëÊWòïÒg¯}ôÔ[ï}¶Øo/þø¶wÿýù´f%Âúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€L è>ó¡ïŽR'HÁ Zð‚Ì 7ÈÁzðƒûs Gø& ‚ð„(L¡ WȺð…0lŸIHÃ*™0†8Ì¡wÈÃúð‡þ›a ÿ‡8£ñˆHL¢—ÈÄ&æOˆDŒb„ŒX?DÀ$ œÈÅ.zñ‹`D"¥HFõPQ~!ˆ@t†” €àˆ‡ ÂHÇ:ÚñŽx\àËÈG[à~`.r†\Ü‚ (®±Å<:ò‘Œä#÷ØÇJjîõ‹ÀŠ‘†8 j0Æ"? ` cØâÈöÁ@©\ € ‚Yº€ c¤.wÉË^æ’– æXÎø¾ƒ“ž¥1ŽAÊ÷Á`ãðÓ8®³ˆÀÊ2‡5Ea("æðS8æèËršóœèÔ#ò„ÉNöÓ}ÆdÁ-iH0~Ï G ÿMažA9¬ñ‚#ÈC"E9¼9Q¸àó(D:'JÑŠZt~Àl§F7òÎöSa8F0uOgF´–]_<* ¢å¨FBÊÏ-¾ ¥Í©NwÊËŒnô§è(ûâIRLÙ³™î{¦DŸÉÒ•Ž€šš‡LÊÐF®”§XͪVÁèS jT¨ëÓ¤1:ÉÌPŽŸ'eªJ=1œÆt¦U]ëVçJ׺ö°«^e'X×gAæâõL$Z—ŠÓ•.aÔ85¤ ךÊÕ®¬dAˆ×¼s¯ëKãÃð€ÈO©(mj@«!ÍrP£±ò°*K'ËÚÖº6•µl%1Ë>+ÿb€³|­nwË[Ø®S¶À&{KÜâ7†± .i{Üæ:÷¹L®r£È\èZ÷ºØ½Ÿt§;Äêf÷»àÍîv¹KCï†÷¼è-îxÉ;Âð‘ï½ð½ÛzÙû@÷Æ÷¾øÍÙ|é{>ûæ÷¿žÖ~ù;Á5XOÀà`6 ø˜à [Xc&plj@Sôa=JX…ˆG̲4a‰Æ4‚zá»XÀ¿Õ0¤,ñaõL8D&p<²8"á9îàßùÈ0ʰŒÁR€>˜£HDh,‘`⧨‡'“¢±)Pq >|å@–ˆR±ŠM´@ÿ J`s*” €$t"©èD'd A ¨Y¨€B@3TA m8*p@Ñ]¨BOÒHÀd-€B#úÑ‹6´¨3VèGGzÒ‰^´¦ýgF‹nÒ¶tD=èT3Ú3¥34© í€J‹ú×À¶°‡MìbûØÈN¶²—Íìf;ûÙÐŽ¶´§Míj[ûÚØ^vV”¼d¯ðáHHl0å à|¨A FqP Ì)¹Àîô gN³˜° 'Ð`(@Ráˆ$! ˜@&¡‰è`ÙÓI¶€¸ð:U ð‚2˜Œ'.7¨ÍÄYºã^ÿ¸Â¡1îê;_Hù4~hU¥\Ð(ßxPnòB¼Ðq ÕÍqîLqÀÐlõ~ží¦;ýéPºÔ§Nõª[ýêQ§x·ãD @l…Ê¡@Š€L¸}xÀDHq ,h–È&:¡%0b2X€*aÄ}"ȶôí/è!+ ЃfôÔÄ÷E¨‰&œE>W`<ÈñòÃW¼iß¶ô 6/àó@4^>Ÿ€Ï¾ñßöäeÑ>¨TP|è€/PW Éî‡OüâÿøÈO¾ò—Ïüæ;ÿùоô§Oýê[ÿúØÏ¾ö±¿u8ÀFøºÿ¹‹€ LbfÀN R$XCx2¸ó-‘û³@´B;´D[´F{´H›´J»´LÛ´Nû´PµR;µT[µV{µX뜘²µ\Ûµ^ûµ`¶b;¶d[¶f{¶h›¶j»¶lÛ¶nû¶p·r;·t[·v{·x›·z»·|Û·~û·€¸‚;¸„[¸†{¸ˆ›¸Š»¸ŒÛ¸Žû¸¹’;¹”[¹–{¹˜›¹š»¹œÛ¹žû¹‘‹0¶ApD·@¶Xɵó  »²;»´[»¶{»¸›»§0b»¨p ‡·]b0¶WP\k§£»Îû¼Ð½Ò;½Ô[½tË»¾¶‡`sËtмaÿÛ] ›Šg½æ{¾è›¾ê»¾ì;¸A0f”лp^ˆ ‡p€£p ¦0 –¶ÎÀïíðràÍÐðàͰµé°ëÀ˜bë° ïàs°µñ0 ^‹\Ë,Ù¾"<Â$\Â&|µ{§€<` ¨à»‡P Bð¾„à(У`=À`» ë€ ðÀ é   yÐÊðv€)s ðИ’ð  r ë€)”»]ë T³µ"!(Æb<Æd\Æf\·C€ )à<ð¼‹H€ˆP [{ ¶ÛÀ \ðÄÍÀ ˜ByÐï€ [»ÇPìRlÿÐí€Åô`‘]—\Û‚|Æ–|ɘœÉš¼¾Gp £›/ ÊÂ{Û[Çw¶y,ïÐÌàÇéðÝÀ ƒ\ÈOÅî°ˆüެÅ\ËÅ›üËÀÌÂ<Ìž;žì;ðÂp §ëµvŒÇÜð«ÜÊ{L|ᄌ)†źœËÌÁ]ëÁ[{{€Ä|ÎèœÎê¼Îs»Ì„‡ðÂ` £°Pº¦ ÍÒÌÊz ËðÍ„Ì[Pð`[°yÐÍ ½µâ˵ä˵_ÌÎ]Ñ}ÑéŒì·¿Aà)p 1y ƒ°µ–àb« Û°Ḭ̈ E ð°í@ÈRìÒ.YmyàQÜȘ’¼æ¼µÌ+Ñ»ÑB=ÔD]Ô&|kܵ)Ôpk̶­kt¯kÔT]ÕV}ÕXÕZ½Õ\ÝÕ^ýÕ`Öb=Öd]Öf}ÖhÖj½ÖlÝÖš!ù-,¨<<QEE:JJ=CCDDDJKKLLLRV@TXBW\CYSSE]]KSSSUUZZZ[\\aaG_eIchKfmMkqPnvSsyUv{VyX{bbOdePllVooYuu]ccceeikkkmmqz{asssuux{{{}}€Y}…\‚ˆ_…‹`‡ŒaŠc•f’˜h•œj˜ mœ¤o ¦p£¨q¤­t©°v¬²x­µy±¹|µ¾~¹Àºf„…h‹Œl””s—˜u›œx£¤~ƒƒƒ……ˆ‹‹Œ““”––˜šš›ŸŸ ¿€º¬­„²³‰·¹¸¹£££¦¦¨«««¯¯°³³³··¸ººº¿¿À½ŃÀÃÅ•ÆÇ˜ËÌ›ÎОÔÔ¢×Ø¤ÙÚ¦ÜܨÃÃÃÇÇÈËËËÓÓÓÜÜÜãããèèèôôôþþþÿ H° Áƒ*\Ȱ¡Ã‡#JœHð€Å‹3jÜȱ£Ç CŠ9!€É“(Sª\ɲ¥Ë—0cÊŒ9¢Í›8sêÜɳ§ÏŸ@ŽJ´¨Ñ£$g*]Ê´©SšA£JJµªÕ«A‘ŽäÀcKŽZÊõXò©Ù³hÓš¬‰µ­Ûˆ (0Т܋u ðà¡A]¼ ÄÅø¶ðT>¶írÃ"‡/]||ùv¬eËe[ò飔@ /jC+m€ò—l «^ÍÁk7l¨ù"0›­_w!ÐÚï@l^ëˆæµz¼v³Áò0¾WKÇù‘Ö-XôP‚FîÞ<ÿæá]2X_cÌν2‡Êâá_ž óJ~ü”8`ò(ðŸI%¢€(yð^7˜Ä‚ð%šS]ôI ðÆi,¥6݇VµæA$P‚7F¼¹ñÞ (ö6Pl|¡nœ@>DÀAjàC$FЀs'DP>€è$\u1Ù'4 ÙdÀÇœ@Àsºž‚x€R~2g°!ižñ1!S ôˆ…â-yøä¦>ÉHÐL²A‹¾¡ÑåÀFtaІFÝÿ›d9‡[°Èé®}ÔÀu`Ý^<|Qzåðe™_eTlx•Ùňgr ¬w׺Iœ)Ez©Š‚ta› 9ä ‹hÒ h`:(»  qî ‚ø½ö>ºT’öÁ‡¥‚fÊëÀ:µÖ*—ÉæÉÈÁmž ©«@<i*wh°èC“•à\œÀ$Á$ßåQbuÑE %œðÈf–ߘ)Ûf´4£wÂci®©íeܦD¨IÂ>Ì+=šäY*õñÇIøA Žªúî+)À/iZòØ µÆC¹:Ѐ(6 [ph ññÆŽ°¹Æ¨>¨ÿQ.nαܦ‘½+bkJée–7(îƒv4[$l–•yÎ]÷Øå?ýÒÐÈÈè°À† ¢‡i@-4g&ý@‚DPz×þ;é…¨îûB Ô… ŽÚÚ Çº¬¬º +¨H\«È¡AÛï›"nÑ]\dd`qeì/_ä2å•çLåçÛØ¹ç.þÇÔF¡‚ððtÔ€œv5g„Ñ ÜͤR~èï:„½¤5Ýáp7ì'c¤"%˜6é8*ÁŽ`E£& ‰ƒG¢ž‰,è@!ÆXÈ”u—áFYû1“PÈÔð;äøÿ&ƒ<)¥L_@ßûÄ4”ð!±Ü4µs!ž•0!ÀP‚8šDIæ @ÒF«%´ 0Ãé. qHŽÎ̧>÷Ùÿ«ofs}ß‘çü©•TNt'iÀT7Ï®‰Ÿh ºrbÓZa¢(R *šð$PÓ=*š‡Jô¤(%™FWúMŽ’ô¥%M©Lg:0–Ú´s.…©NÏbRšúô§m¹©P·µÓ¢ê«§@MªR2Ô¦‚Ó¨PU R—JÕªÚÄ©XÝhT·ÊS«zõ«7ɪX‰’S®šU%S«Zך°±º$e=«\V¶ÚÕªoÍkGâ:W³Öõ®€Mª^›¾öu« ¬bg:Æ:ö±¬d'KÙÊZö²˜Í¬fÙyØÎš¤>š ­hGKÚÒ†v¨M­jWËÚÖºöµ°­lgKÛÚÿÚö¶¸U­gwËÛÞúö·ÝÊ­p‡KÜâ÷¸ÈÕ-p—ËÜæ:˜É®t§KÝêÂö¹ØÍ®v· ëz÷»à ïl±›¬@½}gUB$À¨9 ¸Ã5îzV¼øÍ¯~©kÀ½TéQˆB–p}ñ NñÛI"°™>ô¡ /1DÐ5¡À-qƒƒ7l!¥(˜@ îì{ßýšøÄ(¦-î(ØžGQ ÀÝô঄hØú¡• ¨ð„]Ò²<¸†#…‰Mr‚0‹ }X/‰·*\–s>’à÷¦ÉÁìLsËïIm—ÃÜe1ggÌaž¦Gû‚en¹ÿ`ЛS¼ßóGf¢!€¢(@&1˜‡($@AˆC’ð^&@!G€‚¬’èa3zÐCƒð‹Ê$òWƒÂ ez¤'èYb'8ÃŽ†´¤ (!pXIÀ8Àá'‚)XÀŽÂ’à’H­Z;îƒÕiˆÔ¦ÖÃHsÀã)÷õµW^í‰ø@n5d§ ä&7‘Nnrß |Pƒ‘à ur Ý|à»Ó­‡€ïÒ¸t»§ÍóÁF pC»þ~‡›Îú&žEsÄàÚâ@„ Ä`,ˆ 2…# EÿBB‡¬¤7@9ÿò•Ïü¨«@Op`Aâpþ<]ÂHÁÏô´¯:Rj8Û `ä¦dû*Á}À}|×w¬õw€ÀZ>0{FRäæèE<tì6m¨%y|p–goÒ—Z¸N®·7·N¸N2‡pˆ* WNè¶È#âQT{w{ ºÇ{°A€K&¡»w| °ÍÇÏ—P} jð„Ó¦"–ÑG€ÒÆäôgDh„Hu`R`Ø{&D€)±…/ál&q}n…A"¦î€(ad Q€ru€_ÃZ-ˆZ ×8ùö#·o™¦qÆy±t—ÿGn‰XCñ¶N@'*#xxù¶Nl0s(z ·>pirÇoaÀf4ˆ_wƒj‘ƒ>>¨†ÀÅw|à…I¸ÏÇ!{‚K*Á>™}¼è ³—d+Á†´h‹QGa ,Œ&ÑEÐugø-×]jü2b½tjŒ(ñw®Ã‡g%n_“€«ˆë4ˆèÖn’ˆs‚Ãðö2wiõ6Mä&8lÐ2“s x‰%H#œhžØn{ÓM&p~rЍhg2c¹·{­ˆ/N°âW‹Gx‹Ø7°C´” Ð#¶á'Ç‚äÆ 7 Šÿ— k `|#‡Œqÿ `q P° ì'*F°ïÕn¨'n åt¸Äs>âx)™‚rošFsâÈUª…€€ð•¬•‚ ø€ˆ+cû¸NôÖêöˆ¨‚ZØ®G$þ˜‰réˆVÒ —lGy' wäDns¦Öe@!óC{‡:¨®xŠaH‹R°‘J©ajG#f:©6…D× Æv*Š–š,`™uO h= ŠfBF *0qð{Jiš­±aPÃmSXO@ç` €Öc[YTªÅL|Á¬%x³÷|ŽøëÔxPyޏoõˆyP¸yŽÿ÷yIR—3¸oÖCn£p!ó€ È®§ƒI˜üµ• ðÄèÌdNó… † ”Nóª/ÌT_{áŸÍù[¸5näÖ.˜8ƒÙ‰oïvpë´Ú‰é¦oí†"ÿ&z$h— PpéFy¬×'2‰UBŸàµ SV†0:£¡!\'ð‘.7êe¯õsIâ¢áE£Üe-˜Bz¤K¤Jº¤¹…¤Nú¤GʤR:¥×¥Vz¥H¥Zº¥ë„¥^ú¥ÚÅ¥b*¥`Z¦fÊ cš¦.z¦lÚ¦s¥¦pªk$nZ§vZŒ‹…R¸ÃC5´wú§uš§zÚ50*óÅœ€š¨^*¨'ÿ5O:šŸŠ©Hʨ5OÜ!©˜j¥”QÀ¤£Fš© º › QkdRª¨Z€œ‚§t1ªÑ_I’ª´*ª>Ñš7 ŸÂokt°«„ DQ«ÆÊw?á€>0A€5ìS%j³€Ir' g¨1MÑjpöª УŠ;:úC:r¬èÊ]>ñí¶甼ap’njpä! ¨­É‰säæ"@—6¤V8Œš®û§?á™X®¡ ®A>|Àð„oåDKuÓNˆz@»›Z°"ë¦?‘!°‚°é!,Û‚'ðª@ǬÛÊvXh¨èÿF>«t"²#Û³eZ²mg"˜ˆ2ãzœ+/[l·³[85kèy°ê³T»¨·´o ã&³$9û°áziC³`Ëi|`nðzÐ$ãZµnû¤@ëd­¤iY´:2[ü·xÔpað7Ðy4j0¯º‚¡e˳ËEXŒÛ¸ŽëV@¡zâñyz #ðy,Ó†o耴A¸åf¨÷$SË\c‚†—.‚ð¸®ûº, °ô@0»­›X¨·ë€°Rº‹û©P…«€€*oû³†³»!zà¹K©s ©Oa3A6ò¥IÖ‹2Jrtzÿ¢Öv¼Îå;Öb9Àúª¸­È#¼MA½2Áx@/¡TàÊÉaV‚Ðgòš‰…õÅm Dk¾ç¬ù´b¾q©jA¿1A3À/!Xàå5¤ŠÜhÐk÷[ b)IÂ'áQÆÀÌåÀ ]çš@g€xp'aZ y`e@t &AtPxpFLu°ÄD|ª´d:'j«À è/ö’¥Ö„|Ðcà}Øhšâ‘.¼\0ìLkD"Ý€v Wø>¬3p$P÷k6d@s@2@dÿ03 ½S¼Â}ÀxxÔº}àd닲‚"Ñ}«fdÌyxÆÀ%¤\ʦ|ʨœÊª¼Ê¬ÜÊ®üʰ˲<Ë´\˦¼FÜñ_jñÆV 'u&!t0)a¿uÈA¼vÀ!rÌ0T™v4±(• ¾Ð¬ æâÉk¸d¢Ü[¶<Îä\Îæ|ÎèœÎ¨ì¨3Œo\ÇIÌZ Æ Èxp6pÏÁìÌ/‘ÍzÂyOÈxjùvþœP™fNÞ\¡Îâ¬ÎÑ=ÑÍÊóÄ>ެo\&AÎÜÌôüÇÏø¬Ïv<ÏÏÍw!¬'KÂrÐp ÿwƒüòleüQíYÝÓ>ýÓ@ ˸³N2=oL°y`û¬}0x@p$=Ò&Mt0@Ì"Í¢I%@/¿’2Ç! De[°f)‰`(ÁÂR¼Ó\Ôv}×x=ÑCýCåäÆxPy ÈÌÌÏ0}Ø;pÕ6°Ì&1v€ÃØ+Â*|Ñ6€‚po¦ xVN¥¹‡€Àÿ·Òt½[y}Ú¨Ú²½òΰÇQ#¼’L¡Àã{/å[Ú¥Ú¾ýÛÀÝ\ïü¦ÝËÛBÑ = ËhÀýÜwÝ\ @A|VW¼smÜSÑ8À\ÿ€¤Ü: PÊâMÞð\ÀèmÊ(Ð8 Î-(PÞ¤\ßÐß³Ü\§›º«k(°àþ>ÝÝéÖ(ð®8@ß§ˆ;{¦Ì®¿Jn\ÐŽGÊ:ÀË­ßîÊü=à â"‹÷¹¤àz&·jÐ?À8àÎy8ðÒ&@j <Þá@¾ÊÚ=ä¾…ÜLCßA×= ¶`pp¸AÊ=Àó]Ê캤 t>o<`áaä^¾ÎDæ½ Ñìê`à‰¨9¾¢k+Q>å¤\æqηz“á þåx.b¾çseäfnâV.PÞPèªÂâQÿ~§Ì®]@ÊðfæÏçyçxÎç–^×d®! Þzp62Û2›8ÀoÀ‡(l3èê© WÞûÖè”þåªË—^ë(!ÑFÛ&@¹:Àà¸àPzДÀ®›Èy½NÊ›ç±Þák­0ië–>ÑÐã¤l;cÊ'Àì`ísîðÞæ Í.놩$Ñ.í{ärnÊ=piÉ^î@n@JBAé®îaäÐ%pÊ(àòîå+v9pwïø>äŸðóÞ5rI;sÔO× ?ñù;`Ò2¸ñbNñÿÛó4«Ïçq:ò÷ñÙòMò*b(ßòi±ò0Ÿ_.ÿ?óOó6ÿ¢4Ÿó£qó<_Ÿ:ÿómØóBŸ\@_ôJi[YVfcö=ðø’ö¶ôCO¥F?õÁÕZ‡Z+Ún¡—n[€‰¸yøÖõQO¦T_ö~xªµ#,}z÷*¸x §ˆWx¯2öd_öSoõ’âZñˆe—ˆ–4¢=’Ž|`Šx¿¤zOõ~–­µ¡—ˆ¸ñ®hnì™øy¿ø@OŽ_iެùƒ'87@N_@¹^vù˜¯øš_ô]YŽž¿Z ¢ëT>P%piW†ú©¤«ÏúbÒùøxzP{zp&ävú‡¿ûJÚû›[±ÏõRÄoþføWÏü§èü?o]ÖÿâôØ?¥Ú¯óß?þÊþ3Oþèòæ_ëéOþëþíÿýïïòñ/ÿóòõý÷òßÿ¨ $XÐàA„ .dØÐáCˆ%N¤XÑâEŒ5.”ÐÑãG!EŽ$YÒäI”)U®dÙÒåÇ1eΤYÓæMœ9u*|ÙÓçO A… ¹ÓèQ¤I•.e:“èS¨Q¥N5ÙÔêU¬YµnHÕëW°aSr%[ÖìY´2Å®eÛVjZ¸qåÎ=ëÖî]¼+éîåÛ×oͨhԬ䠇K^Äyÿ.fÜØñA¨&Ö°AÑ¡#(>ÞÈÜÅž/š?šøðAŽŽ&DK0a"ñëŸeϦÿ ª>¹}tH“› ¼}‹ùà›kjØèÉ­¦C>‚ë ÛzËÚÙµo_ µƒòºðùẎ|ºHð¢çÄ=^¤TÃÇK‡ñ]pðé!!}ÿë‹; 4p£¨”ëˆ 7xè¡õöS£‡ù [$5ÜðÈ 68pc°/ô°L@K:ðDSd(A6:ÂMõøB.˜ã, I5’Óp<øÂ(qÈ‘T4òÈY\° Jè éL€Ž1tƒ  ËH0aBrL2³‹* =tø` >¾¸á þ~P8¿Ôƒ8ð!M ê è~X+Ã4´LÿDe,*t“ºÜÂàà;ßfd/7¸àÇ>ݰQÒŽ|PÏÐC5õÔ¸¤‚Ò£Nðà£PxÕ£fMŽÞûh¼H U`ƒåjH?ò }ýUXf›UjHPû¨ƒ-~QÙ!Õv[œ°õvYnãoË-q\tÓÈ\v¯S÷]x"`^zëµ÷^|óÕw_~ûõ÷_€x`‚ë÷àƒ Vxa†vøaˆïExbu#¶øbŒ3Ö˜_Š;wcCyä=6Y[’SVyåŒOvYX–c–yæ€_¶ùTšóåÀ 4¶ˆ g E¾yhD1 Ýèa^øÐ §zjÿŒ‰¶É‹#ృæ-á†êõàæí@.ÂñçøàÁ^(¡×y9š€ zo}¯ö;Å‹qË-‡ Î­  0¼ÍŒ“à„êv»^ø¨/·¥94{r¾;7øoÐ ¼ø€4ÔøYTà•KØB»õðÙ^8˦·q=JК=y'@Ô»=ï{ÉOqúóŸí¦@yIЂÔ–ŦBÊPi:4–¨DWIÑhZô¢]¦FUÉÑŽz”” 5¦HGJR`šô“(M©J3ÉÒ_ºô¥0Í¥L1IÓšÚT’8¥¥NwÊSWúÔ@ ªPóHÔVõ¨H=¥RñÈÔ¦:5ŒP¥T§JUNZµˆXͪV;ÈÕMzõ«`­¤X9HÖ²šÕh…¤Z×ÊÖ=ºu|p«\‹GW;Úõ®x½¤^CÇ×¾úõo€Õ `AGXþv°ˆí¤b­ÆØ7Æ:vhíŸd‰FY0Zöe˜å›f'ËYªyöf  ­h7KÚ ™ö´¨Í™j]ÆÚTºÖd°m­l=!ù-,B=„"""(((333===CCCLLLRRR[[[cccjjjrrr|||………”””¥¥¥­®¬³³³¹¹¹ÃÃÃÌÌÌÓÓÓu  Bhž(‰®@K¶p,¿2@EL6H• Fz ‰ B£BaHÁ å T‹'$"I$1D%à‚<"5EBÉѱÁd2ˆPM<î; ^nAA“`Z5—–˜3Gš&*+ Ÿ "!!ù-,3=ùŸ‡            * ' 3",#,1")$5% +$1 2)"7#&&& &.$,.-& ,("()) %0")4#*<).1),;(2;5*#<3)4455686:?864<84:::-A0D&/A'8I,:U3Ma:QeC/C0G6%D<4T=,Q=4JC:T@-UH6bN8DEEAEJDHLKFBNJDLMMHMSMQUQMJYQMTTTSUYVXV\VSYXWYYY@NaCRcEVhFYkJUeIViKYfK[mU\fQ]tL`qTbnXgucOBbQCcSMcXJhUEiVHkYFlZJfZSq^MkbWraMvgXcddjfcmjcmlmbltfpqcqzhrsjt|tldwpfppo|qa{tkxnsssstywxzzvsyxuzzzZgƒ_p‚gvˆj}’s|…q~’nƒ—z‚‹r„–q…štˆœ}„“}ˆ‘z‹œ}žx ~’¢ƒkYˆq\„sb€ynŠsaŒwhŒ{l„|t„~yŠ~u‘|i‘qŒ‚y–ƒn“‚r“„{”‰~š…p˜‡xœˆtœŒ|š} Žz¡‘}„„„€‡‹†ˆ‹ˆ…‚‹„ЋЅŒ”…’“—Š“›”‹„”“Œ”””’–™—˜–•™›˜——˜˜–›››‚“¢†š§Œ—¢‹™¤‹žª”¤Ž «˜£ª›ª°£•ƒ¢—ˆ¦™„¥š‹ªžŒ¤œ’« £ «¢’«¤š¯¨š°©œ¥¥¥¢¦ª¢¨­©¦¢¬¨£«««¢¬±ª®±¬²´±­£±®ª³±«µ¶µ··¸¸·µ¸·¸¸¸¸ÂÂÂÌÌÌÓÓÓáááþþþÿYH…:uO(\Ȱ¡Ã‡#JœH±¢Å‹3jÜÈqcÁ²èH²¤É“(Sª\)±‚Ë—0+ŒI³¦Í›8sêÜɳ§ÏŸ@ƒ Úsà‰š3wÖÐR%æ‰x½^’±§ƒ¨Õ«X³jÝʵ¾¯“ª«)(ìËdÕõ:ê’ B˜åÌvK·®Ý»6ë‘!S•fºt.µS¯žáÈ+^¼8žãÇ#KžL¹²å˘3kÞ̹³çÏåziq¦°{øê5-W.ž:ưcË®÷¹¶íÛ¸sëÞYP…Ò.'áëE¦°¾zÏžÍ^Μ6ïçУKŸÎY ð õì9r$¬ž>}êÊ5ÿ›ºùóèÓîüÄ={Ë%ÓWEŸ½ÂäóVÏ¿¿ôåŒå’=ÏÀ¤õݧ_~ôüçàƒÚ&`§ýÁÂŽˆ }Ž-Ø\„ †(¢d²ðÌ=ï=£á†÷á7Þ;­L2Œ‹ŒÙ†kæ–#d“K ÐPæN‡H6…#&M:hQC+²Øas‹(À•|d±´¡Ù7W†ù1—á ™¤€%”…ñxóÅ:ŽÐ’xî†S”RÒ›*¼PM<Ç”`€5å=–Ç_ Æ3Î ò€¡XÆ„éHÙ;Žá5y†ªçM|ö9[<$hÐÎaÝ à†a±8ÿQÃÒÔÓ cŒª&Ž!’ƒ\œ˜”<&N;8æŽ5èP$<]<Òp£Å5Ðb’E VH´ŸÐBDÀ…8Æ 5Ák<¬¤Áˆ6Ä!êyäh¡¯é¾ã…¹ñÄ’ \°CYB AæÂ ú¹˜›q$Öá"¸0†ùX#+ðÅ&ñH€^( ™`¡\8@ðˆñ€_Lã)5î € _(pÁ:=SrŒÌFØ»œÙ 3ÌÏðŸöÞ;˜[ì…‰6"l«H¢@•°†UløÝw„É– Ž0x3O=(ÿ‚‘ÝÁh<ÜÀF§R§ @±•ò©ˆâØ´pƳsϘÆ()Ekþ©c˜‡|À5Ž5QùhlBçZG&¨Ž•bÆÉfc„åSÀÙžâÓökŽô‚Ö”ŒmC·at„‰90Ïnc¯Œ^gæŽ©Üø§SxüÅ3€zé¢óŒã`vúΤÃi÷j^#øcS$»ìÒK/ššþ޼2{ªO=Ô±!a<£5È[ ôØ`˜ÇŒ nb“cæ0¸ÇÜázñ0…ù3?ÈxorXǰ/}/s›[_÷èö>í•.ÜË5>ˆ¿î7`’€Bÿ*%@c‰à–›ÌžôQ€IÐ긇¦d3 í0Ùp<€6ǘ€Ü.Öä˜q @ &\ÜctLåÁ¨sMÑCöÑP†ð»œšðÇÌ!…<œœ¨›ÙNî(P¦DRAÉ€‚ò¡£åÐbÀ8$u:­Θ*™<àæ€ €‰c”oiDÂvº0€À²U.(F,JÐËÑñS¡‹GûB7F30Cñ8Å›’Á‡À)Ó$!qcHÈÜ!Yð˜ŒñŒ8J'„@9„ñD}@9± @˜d0¨o‰Èd¶4Ä#Q€Þõÿ7…É[ðf,&p% ™é &˜<:x4Alõ®dƒÝor`œænÀdCŠ.Lü]N  ŽgØã;ö8'sâQŽg˜c2šÂÌAj3Sê¨Ã`ÝŸN ÀÒdüïxKTN‡JTÌìÔ1á Pcs«¢:õ©9êdd#¨Zõª;­àcdsÕ®Z5«‹¡GUãAýxõ¬EkbšŠÖ¶>U­s«\Ó:ÒÆh&©JõŒ@F¼ÆÔ2Þàƒ½ŽT™E耑Žù‘ÆæzVlÇ휄d'ÁOÝÀÕ¬™ ÁÂ8`ŒÎ„Àž”yç•°†$R† 8@âa§Ê¬uˆx—š4ÈXËÿ„ ¦ÜÑÜ ¤¹+[3ëƒä0â•ãÌg]kf<#2ódÿøÇOþò›ÿüèO¿úË|廿3í¿üJüùÛŸ3ñ¿¿þ“ÿýë¿ÿþg€ò7€è~8è   A_ÐNÿñ/õ€¨0” “° ˜{µÐ_PéðZ ¼‘€‘á&€:íó L°lгróµ6Wò${Y$"ÐKð`@‚fYõç~=€-ŒÐ½ƒÿ‘n€$3dƒƒÄ  QÓƒ®W ÐÙ`>é ðÒƒ*è{ÓK±„£&…À.WGâÀ,:5F/òT ²²ȰIä8`mppޱÉÿÅoXXk]÷Cøˆ f`@ËÒ,|0ÿ/i€:PÖ NP§‡EŠ&OùÕ.ü´^³‚‡]Ð.wÖ²m°„q°„p p ;ÖBéÒa–mxOF—]`22´ÔGlf5Q`8SS5W#5¹0ð*0)2DFK’FHÀ Šw…¿! ]Ž*"%ãíð2°Ó8EhT#W€ špð23Rƒd×h/*&äCF#cCãìF2s‹œÁ°€[ðÃed€ éV6gƒŒIÈæ¸r’&t·„×àzà-ñÐTw„¯“a&ÿBq–5ŽÃlæx ðÐv˜ŽnØ õ²@7qvŽ1 @ K˜ ŽÁÐÑæ†Æ:ã)Y9’3=«C“˜"p”:Hðfê"gn"Œçò ¹1;Õ4i‘iÓ“Q—‘Œs£ ‡lð“€pj"@u4oBy.)”=G0>Y@FzGå>tƒ7è† `…á)@lz7†…•ÏÔAy>¯V>ö3˜ÉRB1­öj±æW0dð Ó‹3ó 8&ƒð?³Y@tw—%¹nœi„’;pU°9r¿V˜~BŽc-DvßÒ £F’9H#`—ޱ„Ôÿ` àM“S=YY_¡ÉB-d?SÇZ §Œà¶/E"b5PYáa“[™['ÃoBtD”%€D$¹vŸaEŒä8sÈ—Ÿroq$“Ð9oªƒSMBc$•ßò æ–=–Ð|&,ÝrwÊ„í`rŽ!dP ¦GLj”D%MyôFq¤ƒM ‡ñÐ…q–9qðAèPbŸQ p4;Ýð)â Å—7sš‘Œñ° à›ð |@ní …;£&m° sQ@š,°ÀwðP)Äf€ Ȱ¡æ©:¦9Ôp¢!“2×°Kd4„[§M×àÃÀ ,ÿº„k ¢$u—©=¸¤K¼d•ñ©&>À ,'+tBg '†×À 0Ÿœa 0 ƒ ÐÜ@¥eç†ÚÄMhZ /‰w%@ƒ yéPp%†7˜Å 3PF ßè J§O8Æc–yO®²Pu)&÷¢Ž÷.´ NKïðPð4ð™“JiUPdâkSQgtòrgt—@@s›á*p%ŠfÒ¥‘ …8›G jÉQz’ñ ´ˆŽ`Z5õè0z z²–1zA²®ñykžàð Ï‘«ÓÁ¥2@Óˆqÿx/0;¬5P/Šx³³7œ@ûB;´X´F[€H›´¸´LûTð ²£Ò°‘Ï÷³ç‘¤¬¡Xë{ŽåŠÐN‘0Yüéï00›Ñ µ…Nk[Û †Ð[’á8 ˜$râ¯ýq[¹µ[½…[Àgë*¶‘±Û‰FpKµÊU\ÉÑ «Øõ=_š ^ ~ !y"Zf-‰¶ˆ%lµ¡¥Lú›¨p`9Ö" §x.„@Ür ¦ßÂô,†`°ô=”Æ¥L'ìâ.¬«‡YÃï.´k»V€»ô¢»Æ[ûu.† 8 ¼".äâ‰ÿRa¢‹¶šhººŸ¡ºóéŸÀ5ûQ©žÐ^€à1Q£—x·]€ÉÒd8¼µ£=^ÔGMó4_ø-.f€KZ¡Ã¸ôk¿ø{Ž?ÖbyǸa G32tû ¡+‰t·ê !°Hž¹|q[ì¶/„¸„œà-Ç•ç«*ç3Ì[h„|5t‚¾ s”c:Z9Q9•UùÀÊ"CK€Ã2 y €F{¶f~¶`0éæ¼&"ÿ6]À.†2=s†•Pj\æ¹ ÷iÌYU`í@_I”n”ð¹Â† ßXwö‘@äóB\i –ñ€šñÿP?v¼¸ìÄ0ÔÇËUj¯¶k¨»\Ÿ+"-Wðàdìæ¶¹6>m̰o\«;=è¹cѣǑŒ2Ÿ5„pZ MAŒªí%Zw9>«|¾\,{,ÉöôÂûbO—ün‡"_<îàÉÊÍ狪{Ê$6ŸwP–ñ=žàÊBÌQªAŒxËwKÀ¼“}´A)4£ŽQ£í lx¬ž¯ì^öÔqñðqÉÜÅ#²ÉÎ,ÍÏ|ºÔ¼ê;,€‹Š\íàÍšCÌéæÊ ðV÷yŽÓŽ€2SnÉ´LÍ'ˆª¨ŒÚKz®¤Fà Ëöät<'ù\LÇ”$a7v‘á ÿP ¬á }¼Â¶1Б »êƒ’ LG’ŒF,X5ÎJ'ˆwŽß&`±áÙ‚#ƒ2´@PãJ8:h!P,D ËŽ{ÔäB'ØewQJRyW¢cç3ÿ„X—ë9û±¢×µœa²'ûWv]×R;qý´©××~=y€ص5Ø„=W†}Øn•ØŠVŒÝØ^õØU-<Ù±'~ë—Ùš½ÙœÝÙšÙžÚ¢=Ú¤Ú’mÙoUÙ¨­z§½ÚDÕÚ®S°ÛÓ4Û´½zª}ÛŒeÛº­50‹’ ØÛÑ‚`@‚_°('a Ç ;fÖü`Ý¥¥ vKÜšñƒ,:„Eÿ(h~š8u,¥¹½‚Lè„ ¤“ñÖÚ]bH†f8¤†ŒÃ¥]´¡ìÆ6áiŸñ†yŠbÖ’Dv`Ó²ßï=¹¸‹3ËÍÄ–ñ€w¡ L!Œ«çÝOÀÅ'»Ð(s?œ3 ~‰‘i ™ °i¹šq’“ÁÇBîâ[ö)Vú\ªÍÕÜß¶‘—1ÞÇTã6µy›¼¨›µv%Úã5áßžQœA>ãõVäÎüŸ  0 Øó&"ÀgNNPîú=£š4ÐVî¤×¥R*«—Âíp ®ã]ú¥aZnsãÐÍBmå’¡ª¬®*g±ÿÊ8x÷•TÀ˜æíâ›Á »Ê¯q¤lލ^‰§—‚ŽâÑ:°«ÂœþÙI}ç‘ñ°‘!±¾i'q.›‚¨ÞêÅÛ´þ ¶~ëÿ‘ëºÞ¼Þë§7ëÀîÛÂ>ì¯WìÀ-ÜÆžÆÜÊÝÓ&·ÊßOŽÕý‚Ë^Ü-„Dh„SÖÀ-Xáœçã¶±„MŒ°Þt=ìñ]†‡JßöMÖsfGHíbN›!ÀÞr˜ŠÍ0Ö‚ Y wŒ@ˆíÜ^Ú½à¼èàÁø-!Îô®ï11æœ&T}Ö¾ïû%34ÙCD”Óî¨=âY¾‘™á, é˜ã’ÿÅñPÃo²h{ƒ$iˆŠ6—‡<7ž¾¨äwÇ­ ÑPl`Ù'ærº}ä ž›8¥kר.åF²ÊГÇ\Bæ S@ñÚퟹòJ'¬Æó™æe>À£ÍqÄÍžÂ8fd…$° @î±ÍænN SÊ89éMBÝñ ó˜Á¥^ ¦bú }Еã)@Òå£1E‡oïMè­úª‰î—”‡ð °œ×]îÕ~’&½Êa?=(žÂ-8ùý4,NÛ‰$°K¬Œä :X1oûèÓ]ª ?eŽIܯî-;-»·Àoîé‘ÉŽq`8œílXì›!mÿ@szð¥ýl/þt…øæOH¿žþ/«ýì{îÿþ¸>ë~%ÿ8ØÇí%øì„òæâ]‹WÐàA„.d¨Bˆ†Pc%Æj£ÑãG!EŽ$YÒ$ÉldˆèО‰ 4@‹W @¨ƒsÙÐg…‡' †ðñì£Ú¼sAèS¨Q¥N%YÊB»l;à ¥xî 1(ÉŸ ƒ A¶`*]ùè°Áå\Aq]j±Q Z0…õRCÇ!ª‰/flPV€6~Ä‘‡Ï€K§(-ˆ @ß‘i®=ÙÖ ­›Olé‚`GØÈ8ùüÜH….›àæB;NcàÁ…‡ä3a€ˆÇ1Mš ¬C+Ú!TÓñÒÍ0p Ѧ‚~¦9žŸOñš,@”fÎÃåÏNžš}„fÉÂkà6´u ° @¡($x"!ã îÖqç®ä.õ,î g؉>;œ `™¬²_Ø9HŽé^¹©$|*þ±Mà-ŒG1f €Áî°0ž)ÐâÈ#yòpI&CrGäSN¹ ¨+(›Ï¦À`©ê¬#ͤì êæ³‚ö˜žr BÇ´õâÉ£»‚ÔQ²I:ë<¨”îì³OÀ2È„`ä€!ù,;B„$$$777FFFLLLSSSvvv{{{„…„ˆ‰‡‹‹‹’’’œœ›Ÿ¡Ÿ£££¦¨¦¨©§ªªª´´´¸·¸¸¸¸ÂÂÂËËËÙØÙáááÿÿÿÞ  N’h0e­l»‚Q“k·Ô5D´Rª[«1@5ÊZ&“¤œl6—æM$€0€M ¯…âØÆY-‹)x0ÖmÀ›,·D xnzpe-\ ƒz…|ˆ€‹l„†‡˜ŠŒŽq*˜š“œ•\›{WW)§£«5 ¯±@mcO{ 3@½“ b¯*Çmº o¯+ÇGÄ^ÌÅÛ\@4)Wâ±kæ` ºÚïä,*æ=÷ø"R¹'¼ò*è !ù-,@DìU‡   * ' 3%2")%6$ ,%1 1)"7"&%&#)5&1<5)#;3)667-A0D)/B'8I,;U4=D8Ma:QeC/D1G7&D<5S<+Q=4DA=JC;T@-TH6bN7IJJIMTMQURMIXQLUUUAN`HUgU[fP]uL`qTbnWfucOBhVHg\Tq^MlbWrcNvfWgfdaktfrytldzsivvu@„I™S®Y¸]Â`ÇbÌ dÍdÐdÌiÎdÍlÎeÐnÕmÑrÕtÔx×zØ(kÍ&lÐ,qÏ&uÓ9tÍ6zÒZhƒhv‡k}“s{„p“GyÏExÐU~Ñ&‚Ü,…Ý.ˆß5†Û>Þ3Šàn‚—y‚Št†š}žx ~’¡D…ÕC‹ÙK„ÕN†ØJˆÑNŒÚH’ÞT…ÓTŠÖZ„Ó\‹ÕX’ÛBàL›âT™á\¤æbˆÒd›Þn‘Öi–Øo›ÖhžßwÙa›ào§Ýz¢Úd§èe©él¥äj©çm®èm°ëv¨äs°ê|°ç{²è„kYˆq\ˆve…}u‘{h‘q€v‹‚z˜„n›ˆu Žy¡‘}‡ˆ‡„Œ•Г𔋄“‘Œ™™™‰š§•¤Ž «˜£ª™§°¥™‰£œ’« ª¢–°ª¤¥¥¢¦«¢¨­©¦¢¬¨£«««¤­±«²³±­¤³±«µ¶µ··¸¸·¸¸¸¸‚¢Ä‚¡ÜŠ¦ÜŠªÞ˜®ß˜°ß…¨à…¹ì‰½ð—¬áœ²á˜¸å›¼é¯·Ü¦·ã´½äŒÂñ›Âì™Çó»ÊݨÃë¥Éð©ÔöµÉë²Óò¾áúÀ¿¿ÅÅÅÅËéÉÔîÆÜõÐÌèÚÔêÕÝñÊèûÕã÷ÐæøÕëûÚäõÞíûÛòýà×ëèäêãäòåéõæìùêæñëéóçõüôíðôòôõõúôüþùôõýùöýþþÿuH° Áƒ$ư¡Ã‡#JœH±¢Å‹3jÜȱ£C¿Š)ңɓ(Sª\É¢*,TbÊœI³¦M)8iâÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]ô‰›P£ÎÜ9•©Õ«X³jÝÊu¨Ô¯7{RéJ¶¬Ù³h•‚ÛÅ’¦E[Ζ™[fLÑ)–žùäŽP.ê˜ùôFnJÚȵ®•IUæ¦!C2ŠhZ•¢p"C¾çW(¶ô’Uú§ ¨›礼¡FFÊxý.'žMûèâ±bGÏë£Ñ»ƒŠBów¥è›ßþüéÄï#¡êäí´tËåCÿá´b¥¶÷ï@ãÿŒò¯PNxúÂÈœóïNDæÜ•ÔsÓïoÉžvZçî[™žÇ53?ùÖE6î¤ãÌSÜð³Ï7„ÄñÍT|ãL7òññÔ7¢Î?é¸÷Œ48ÅŽ;æä'"ßXŸ4²'£_|cã7ÑHÁE6ß¼§N=߀ÞZ8=™Rœf cRl¡…™€F >ÙñtI;ÿp3™7ÿ”ÃÍ?úˆÁS€¨. YøàS¯Ëcà32I³Í7*Ok[£E§9µÿC6ÀÅaWšcÀ¼ô¾Rò ÏüCµ]èaØÆVW|ÜÅX[­± êèC´™dˆíÍße#&nO-ãÔE;÷P7¨sß\÷?ò8¢‡&ÍýÇ¥5…p™õNGSF·ÿhRȇõÚ¥&št™†ÇÍSH$èG¹²™k9vßз1%]Ò8²¢“^zZ§×š©B²‡îFµSͲϮ>ÿÌ£áSàDfac¢RÞ€¥B¡ ašù9þóž}li€:˜œ¸À¬]no‚¡Âš2u,œ42åÓpˆ6ºó™MZÀËv"Cœ×Ie<ô«Î&7žha ÝŠH¸1ðð(Sƒëÿ®b…nGˆ&L"S`'…(ÄP†£B’§HÅ*:‘n2À™f PÅ.z±dWŒ×6²H d0¡ NpÊ×ÈÆÙ\qTȘÎÐø.¶ñŽx4JBŒQ †ã yd–°QàãøEKÉÈF:ò‘+Aˆ1$"HUX2‘ñ’‡. ÉÉNzò“‹LˆDtñŠWèBª0ä?6 ÊVºò•°lB(ò Eþââ€Ì8^Ñ‘ Ôa"¿8¥.y[ ÁÄ€A&¢ ã!§Ð,bI͇„‚KˆC°¹„4´d–Ñ…ê§VläË” d˜ƒ`P$@ˆLd³ F¼Iÿ Pà Õ (1 ;C¾IIfD¸€*\¡„ ÀAç=PJU¨È)Œ<“( ACˆ)PÓ|ä@zN•2ÄŸÓ´… 4 ƒU4$*ài>šÎ!ÈठÁòR;0D§<õi(2€ô€E@1B‘ƒfj™[]&  À¢2j4 ð‚èAvjÖ–>ž!H.dÀWhU6¸*1J¡ Ì©é£G`SbŒµ€n08ÕŸ¸EŸ©Ñüó!Ju<—ÙÉVÖ¥ø¨ ™Rb¼T7 *2°Ð ÿ€7€ÅH§ù‚ªÚ@²À@(2; Ö®-yiL!r Ìà7HC- € £ PF2–!¾À@hãÂÆBŠ]d¢Ó³íRòݘwèu,LÒZå2„Â|O`ÓÝb7#õBCêÏ’"—‘ –Hs—ë‰Áºµ;aW–Ô¸™V)€[èN ¸€ {ƒ¨” «|ò]³øÄúišTë ˜!fÈnE±_†D€5CšëÔ3Ò¿Ì,ùV×Z·!¸¼Ë#xY›ô,k_uÐ\ ôÕ¯À€Q‡„ÿËXæÄÌ×eî–¿*ýq];ßÖæØ*1(€ä(™Lv2„Ðá†4ר@“/ŒeX ÍnlCRЀ†ôBÃ@:‰ E¢s¤€È›’‚ýrÚÓ›¼3Jó<ßdú¸Ï†)*>KjQ'yÉ–Uô“‹ì ?„ÒŽ»’ï>ÄŸ$x…\œLá/¨F‰cЀF¨¬ nš]iS[Öý­5 nÍj¨»††V`¦¿Ft°…Ý„JT>örBéaˆ—¯4KŽ‘"ÈnÏÆG€tj”+ØwRëWø2Äá7ƒxŽñìZ'“%ÿgH( :ÜÙ÷€¼™ïDó»%B]­›+‹c[w¤ uå/Ž[Ë– ý‘E¿¹Ò—Îô¦;ýéPºÔ§Nõª[ýêXϺַÎõ®{ýë`»ØÇNö²›ýì¦Ú×Îö¶»ýíp»ÜçN÷ºÛýîxÏ»Þ÷Î÷¾ûýàOx¸£ýðˆO¼âÏøÆ;þñ¼ä'OùÊ[þò˜¯z/ÉK†äâ`~¥0v!ZÐ÷óQÅê@zÇŸ¢7h½/n ƒ& ä7c@>mþJ;Ñë†È)¨+;+»€À‚1 (€ª¥Ã;0‹aL{ù¼oeŠãìè`ß!¥ý%ÿ.îm|Ä{âÁÀî,R ‹a8àÐÔTïòâp<4 t*.lÀV°rÕ«2v A5®0Ul¥˜ÖB.pQÀæTß×ë´\ÍúÄV7Pe€Õ*'XX¥U\µVH€VK 8pPü§ZVØP5ü´UA•V 5 #àqa  ç×Ah@ {ÕWZEX†Ål-‘bå§HÍUU5†_°åÜ÷Z±Õm#5Y@qÏÔ[2P…Æ@©Ðrhk4Öh€Æ[¿ÅÌWY3 …"`e Ñ_u“@=0 4ðQ³°%[×5ÿp÷PJ0\še\5YŃ1P² XÍõ\Ñ•bÚÅ]´†¶Wl܇U& AS)àcE`ÄðVÍÀÐ^ ‡±†h0 §oxe j£Æ>h&d§ 1  ÈF Ae öqpIuQPf‹/C•$ ^ìc)v„XµŠ1aÆÖ}Ë•a†r„]t6wg¾`Ð>frÁWŒXÅ‹D6ЕE𿍠ùLÀ‡Œpå˨_v@dѧT ˜Ûhr²æ,vo³@[h]„ö)¶bÐåbÂÀr2pUfà “(„1ÿönÀvT†e¢I)v‘m˜c¸P 3 |v’ôÔXEÀ‹€6gpÉ色£dù€ôSŸh •á‘´Ö!/gV’êf]yƒ*vfZ… x33ÈÂ@|2 ‘2iMæ piœDæõ‹`û¶[€vŽì¶g)P˜)À‹»Fpõ ˜Fdg L`]Yé? qw¹|»_r /5T­ €†Q)©g#çZæÈ¿ M®|)0Ä H ŒXö ÃÀJ½àlá æ8aØ Y†•Ä–lËÖIþÄuð C°fÁÐ0åO:€mÕµ”{6 PFÐj¼ÿˆ_®™ ÷˜mæp°Ð™XVp³P •PÍGoöfŽYÆ« Ê —¯°Ne)dE†]À ô¹|µi]þä¯àp*µN×–m#E³ ÔæŸ°àp´ 1YÊi÷ ¡÷H+'; °{‰ SÃÀ¹ç(g’I…¡€0AÀ‹Ä` •%s<8Z‘b;|\ ƒ1's38~73sÐx30MÂÐjV˜y’ÄF !¦bæd£'ç!÷LÂ0qGp,ê„! aØŠ/ÍÉsfY?&ÇI¥ÄR! x*§ €m–t-Ñ ¥‚ºR{z¨¡¨ÀÿDt{J G— W¤v˜uZ˜j™·© -Ð È©¢:ª¤Zª¦zª¨šªªºªN7 jJM¾°v¡ÚI¿yJ¿0«‘wMK `ÆMuÙ€ 0“?ÅMK`NŸcÅIû€V? Ðzf 7ðªÉZPe•uÊÁÊ0¬qìJëUJw I~怯`zi­°$k.µœÑ­³Ð­ˆd°$œÀº‚=àN&ˆ‚!BåU¨WCÀV4ðVcUVŒä–N18ƒøUÕÈOqåTYE°ie°0HW—UAÀVÞt TeU-…Wy*¬(¬H¥¯¯Ä¯E]4©úÿ5‡W%®ð[s¹7¿e]¶…[»œÐi‘õˆäWx¨‡Ú˜N¿¦³<ë³÷¶¥EYÁ&®¸E]°Ð 5åGMPÂ0¢¶ðÍ©šÖJsÖWèp“SÝd×èŠN…PË”¿tϳ ±áH / çxQÓX×xRkhÚ˜·t›­Ëd_—_'`^Fúš-aQPY'…P‘6@&lÅV ÇIp”} é–f ¯úz >JTp¥Ð%^û¶Ä@¸É´P)In³»á¸Ü ¹µ{»ec&&–0«QòÚRe Ã@£K˜v%]« I2ÿ béy0»Ä¶¼'…NÍ<Å»në¬Hk]©‘â È›­J†¾ ¡QqÛW˽vF¯å¹õнÜjÀ !¸pû¶@›Ä@dv@»Ƽ9€]ñÕ€½ ¿Ë„·Øi §É© úšbù;Áé»L¯ÆŸö¾ûÀÑ7¯1|ÀÙ›¯¾›¬oÛ\П ,dœb:m>ú˜:9¸?¸IðQlÖOå6ÙÕküéŸË™H`oåë¶›ÂNmÓ¦RL »& æo–D•É §d · d7ìImÉ\*¥Ú$¯~¶Å/슊أϴ¢ûˆÄ²c~*¦UuR§Ð¥Sz]Ä"7 dwLÁ„,réªQÃÐjÙR9w3µ–¼õÓÆ³v!ù,;Añ›‡    ) & 2%1#)$4&+%1 3" )"5 5#&%&$*8&0:6*$:3)33467869<964:86:99,@,@1B>).C'7G,:T5t¦¬O?WãHÍâT#Æ;ì„ˆÊØŒK¬”üp3î¿öú7ÆpLŠc5› ’§=]æ#(ùpÙÛ_à ;ü…?7DÜê&}öQÉÞ¤ÿ*cÀO;~¾¨ ­nóš#üTÓrã´Í9‰•Œ†Î>2[Ï?†$‹ °¥K7?{„9æR2ZÆ;òd5“•Ê7؈:k„ÑMìkcô&~`Ì @ݜܣ‰áB²3ä¯u£ °þù¢¹‰©vnÃîf%$ݸúu͆„¡ùè>ç“.“šˆÞsnL¿ÞtnVb½åõÈnï°•XrGçÊ_±ò5Þ`äB£2Þñüqlœª n`C<ØÁ$iÀzY ÂP¿ì{ÛMøì`2qèëZæ›çÔÂö±ð})Ôžn@7‰ûC€úÛ“ðÁCJäæ8”C<ÿÚQ°Þc(ž?ÀĺÍçC«´ñ³sÜÇ ï¨‡~¬W)häfùØÆ’B˜GäãQ0Ë Àó­p}üp!±*%͑ý;?ì`CæML‚’n€¨FØшAbØDȃ|èD>ô±‡1„Ï‘0™ãà$%jì!UúØ„$Æ%È0tÀ?ôá-cµ#xÂc 7:š2Žîã‡7N¤9+¥#¢àGÓúøGbo7„TCÍ0ÑoùæˆT"§Y·{܃N…xÍL$k.7uÈ“ëàŽ ÝÃ]»¡X“ĬÍ)ŠNPZ‡ õ$º[Êñ[5ËŸK¿‡òkô¤ +²m¡‚îÖ ÍA‰¬ž™"_0qÓ`€°b¶5†å;ꡘ»!ÿÀpÆ7N,ƒÝœö4~ RdÓ»Ý$~9|abƒwßÝt²}ð]ÃÛ×àŽ+Ž¡€ì†£ØÅóAÎòXá꺘±ÚÌ$ü\_ï0€Ü9Çõ&ˆ0 Ûl½Íº…¹»oNs›×ÛÝ:÷E{}n]íD/zZŽt\`fzCˆ œ(¡z΃4d¿øîÒ —\×Ä((wÚ—Wþò2–»§Ó^óRßýÞ;0¹ëËö¿ýÇ‚O ¯…Rð (¾¾`ŽŸ=u³ð9(¤À p‘…fãMÀE‡É}à =Ǹ‚q Í‚ƒ+ŸùÎW½ÿëslw‚ÀŠ0«•`!¢ö…íûÜ |ÿeÅ+œ¾sß#[Õ6 ™ÕWÅW)7T0M)ðe €]4Vz½¦]ÓtŽF ÈD ˜w†a¦F~¥6s¥P>ÆnÂ`Ld°5ggÑaL”v½Šçg÷E€)!–a~±ƒqZ.„ yBX„F˜WDx„J¸„€‘„Lø„PXN…TX…F1…V˜…Zˆ…ZØ…QÈ…^†J†bX†AH†f˜†E‡šÕ†nø†p‡r8‡tX‡vx‡x˜‡z¸‡|؇~ø‡pȆ€8ˆ„Xˆ†xˆˆ˜ˆŠØ h¨†Žÿ_øˆ’øY‘8‰–ÈW•x‰šˆ™¸‰ž8ø‰¢˜_8Цh¡xŠªø©8ÃWeFÄ >§WÉ e²H‹Ë ×¨ t¢ˆ <ðZF AÀŠÐ\¥øÈD côÇX.ptÑØz¾hlÓešøm € Ê` Pdg­††¿  Z0ß{õk°y€÷cÖèt[¼ j½8‰UpÈ€oæýhŽËÈýE` ah‹ðkWb8 eÃPf Möd ¡ 1Ðe±ÀF\Æ]C0P`ÕØt9±¸ ᘒøð8F ÿi‘¡r–dKf ?`pX¦1€a8Y‘ކ‘NÆÚd*À\-öb1FÃÀø§J€M–Qä¶fmö“tfgIqŽ€·Aáòk`yì'BÐ`ºõiB j¤a‚vè[4ðj;à`C!+a‚P¸Å’3qéÕƒ™±ÆàHh=0z¿sï8€fdJ  ?Pz›öi¡Vr€f{ K–މ–m 9 6{e0 g¿lövËæ|HÁ–:W@‘oÞ'Q‹0`sð&o¤'_fÖökBÇ¿E–?ǘ÷ÿ“l~&Îùr°†6{P@`9wð¶oÞ7a2’»oô e0°Ýd£ök³GɈ7ƒ€çs·Ðp¸EkyK± °˜¼xìF V l`s3טËPζ S`m&¦ÂV˜5ºÐ -ê[+ ÊàQG~–=Ç¢£Gñ)sÙ¸Xwñ6y²øq!×lÄ _8`ÃWÊ` †æWÊ ¹ÆÀ¨vP¡9øé‰t¸‡o 7À:~H#Z¢ÁÐ^*Àu„@£$7M›6£@ŠŽ;·w,êrþ×s—v0§]\wct¢ÿØœvË0 D jàYŒ'SÓ¤2 †F àx`:faÙ¶¬fh7l ¢çW`ü ²GÊ ggbІ€lzÚ=ÆbŒW^ö^‘j¾Ða§ J€ ôV`}÷ª0g’8V Y·¨­߸“W yœW ÊàYÃp|O1 ý™ ;7 àCW‹ *|£%¡Kab  »e‡ ªºsɇ¸Çöª­gb`¥gm쇃` /µ« !;÷«VYн` „Fnáè~ðç°kÇ­°Þ™Hp ÚµzAjp_7 ¨@ðÉzÈfb'P ÿˆaÚ}Óçg+Ð í8¢Na®µ`h³n€Æ® € €Y—œò:¯$¨Ð8Ÿ;§ È3à¡ ¸ ¥  Ôº ·@hœº•’æ¨IðkÂ5ž@F©œª›Ã@©0{¦`LÔe¦ ¥7—à s-f·W]G ¢‘© ÈDè£ 8¥MªL„]0¯ jƒLô¡Wø´LY>8Éй¾Ø¬>jmºg1 ˜å¹>„¥Û¬{Åk ¡ «+»g1€œ×Zk¡œ”ab`šz«ø„¼K˜ÆNùxÃk„Å»¼Î yšû¼Ò;ª0½ÖËŠÑ{½Ú ½aº½¨ ¶ÿ«ŒÝë‰á†Ê{mhº£X\Ç•\Å%•@‘ ¯Aa Ww¿Õż{§Lä–ƒ¡^Bah•¸(Z Ž_óE{7òË@¿„º]M±¿'€YœK&í¸` «©ð¸•ŸEñÀ³ÁSŠwR˜½FA®‹G‘eEy”IfPÀéd tÊ@ P“¾Ee[÷’˨þØdZà eQàhÊuJ8¬Ã¿ÀÃוfÅQP‘°… Evd Exj6¿7©Â„ª¤N±¿@ “Æ–™›©s¤Éip±f¨ ˜äæj9kȆj‚fÄHL`y«0°ÿÉ0‰™ÁËiØõw-pÇy¼ÇàIiƒæa“¬qƶùjÉX&Äp`Ä·Pu8Öo\Á.\n×fvÖžŒËôÙn 9J{º•Ì%¤ËÊ,¤4‡_0€æ—’´\jÖ‘<›Ö¹¼Ëg›npL_- “êšZf @p„v“ÁÎÖ€¼È[‹ÔKuhz7€Èpr¿æ€+Ì/GºËp`ì(lÕæ[,Ü…Œ[ø­ìµs'G¨ÏÍ÷¦Ï¶rÂÖrö†rqGÌ 5ʤL7©Ñ@!͇À®<¾Ò¨‹n÷œsªàÐHŽà<ðϞݫûÿ<¢=W‚ÚÑ Ó)cËpÓû\ÑìüXßi]_IÝn­¬¿¯L0\jý™Ä‰pÒÑÓ3æu°¢R Э\ȆFj§GO`mÊzÕÍŠwÃn<­Ò¤gyV)c,|`$|ÑG—ѽÂlÒ¤j€l¼vÐ ZP)iÕùìÓZ]³ÍGºç—~@Ñ^J`\ fv\ûj²p³ÉVÎ#[²üyðÇÖx‡ÕC™Ë×|6×ýÈ%Zß•ûiP šu úŒsgáÆBQ·L„e¸|ØY}¸P¤k $Èœí5MÁyg͘¹¦ÛsYfÅÆD*ð›öÛ¢McÍí[¿=Úzÿ "_0=j_ÓTÛËÐÝØ+ÒkñºO¡¾L»BáÞòM¾Þ«O}ßÒÛ¼ú-ŠüÝßžøß®‰>à–Xà.‰žàŽ¸à ž†þàe(ˆ‹Xá~ážáNáÞáþá Þá.áa8â$Þ…&~âY˜â*^…,Þâ_˜ß0~‰/>ãLXã6>†2˜ãy%ŒÄ(‹Çx ·`F RºÅÛŒðŒFÀ>ŽÜfŽãèaÃ0`¦®”¯ì½鸎ͷ­D¡ÞQþÿ;BgbÝGz`ÄNûåI‘wÆXV`¦ eDleg^]ù•Ð'–•º ®ÆžlÿíÔtŽ¿æ¿<(Ú(ÈA ç¾¼é›çm7ú¤ PÙÎea̹‘úLwø\éf®E]ÙSÍ×Õ[j¡¿Uêw·×¨®Ê€ Wš¥Gº©ä;Î7JêKWë·î—Š© ÂI¼pªŠÞ×OaªÃLJúzÇÞæú ª®®ìZ_U§æÂ 싎ôj¯øjvj6KÞÉìØÙžBK´çGK‡Ns…êf1‚ ¨e0((éoÇïI¹J̸Mî[&uŒíü~»¸°ƒŸkðh»¥»jã¿aßñÃõñ Z"?ò”ì&ã(Ÿò:^î,o…ÍûŠ[ÿ@é/¿@^ŒC^¿Ç84Ÿ¹.Lîä5ÏS^åâH޶Zz˜‰îåÒîa® c~¾COi.ÂEŒ;m¢VŽE¡œvŽªÂ•”3¬v< ;¹‹jùr<°ê•è`Ièûp­vÁIîOÏþ–p l<š'kÙöoÅLõ•~é¿©émyÛ+/êC±ÌfËÊwÕ°ý…aý%e#¯ê@A¡¿ÞÆ+ë&'ƒ`ÏÄì¦ ~æõ·žë»n¬ ’§ïø?Ocúh9]¶5p÷Ÿì˜*Â÷Æðq+oÏ&©e&VÕ‰~¶Ë€˜ÀÍ¿íݾ®†ÿÜê:7ì>¿÷Lqî÷š¯€ý ƒ]Øx° j±ƒpêóEkïܯs €¸`gZÀG \VÐàA„ –*ÀaŠ_Mpˆ¡Ö2U|8 €Å 0'Ž$YÒäI”)U®d™’‡H BqÈ ˜Á‰4˜µr Á– qá*–°XÑ‚}-Cj0#  Q¥N¥Z5(®^{áRÈ WD–? XM™ ÀR„P (@FÖí[¸qå¢;Wá0#7Óök×ï_ÀGÖ\ØðaÄ 'fÜØñc’‹!O¦\YñOË™5ož*™ógС zfyÔ´hÔ•Qñø–XŠ ÂºÿÒÖà0+}O’^ù@'=UšR’Ú8Ù[2@h€L™,ZVeúA gUòVùàÄÐ,ØF ÁqôS«@¦$uN–°Â 2ï>1K} Âà¨é”¡„~Ðk8HÁ£,( ‡A悃 $ #$$#%)'('&(+(&#+(&)))".>+-0%0>-03*1>0-+41.666468688863986999-@0C".@#2E%5H+4A-8C*9J->Q16@3:C2=I:=C8>I7@F5AK=BF»®Ë # /Î;wÛ¯·*´Wî«À¯¿3Mo¶G ­ÃC;]ºA0sÉXg­õÖîöÛì [›Ã«7?<Ël°@ÊBÔIi“7€p¯oŽV÷™}&pƒ £e:•DI« w®xç¦È]+›Š+ªbe‡sšàu'p¸¯½fÊ¡ž•;.£jgË–6k³ÄçÊmƒß•uþve€gvù¦¼¾=A”ÂËåå|6îx ó 9žqf†wå³cî'“D¶Y¹Ü7 ›Yè±NzÊH$Х܍'ÿºã“rß÷ÿÜ™1i{ùÃ#î{ŠÀ“/¼åxÎåíx¦¯üŸïgV7ôÒO/ Új#]ép ÐIoSA®Èg·¹!PJz\ùâÄ¡J­ˆIâïT´>ƹ‚ðS£Ä7äÕï~aÊ_ëðÔ"6™ tÿ]ˆ½&µ XMªÝ¦Š«&Mj‚p3•ñàÖ'ðÍq‰c û|w§ø±R–ú^\pB~I…¯[S“VC=ØXO€¥Bÿú·ÙÆŒÿA£×(.¾æ‹`LÙØHÇ:¢Ð®±Þ J7­iÙñ€ [3º˜aV˜p€@:ò‘þ$kÒ–2)T¡t8 ÉÉNNGÿ™ÖÈP+PA†I¥*WÉÊ€ò"`à ¨`…µ¡•­Ì¥.w”WZ$À”)Ù€K^ó˜ÈŒˆ/©|PaZ§äˆŠù`n–‚ø  0€Ñ>’¹J •„°Q–™  ð @¨Yp3"HÅ=%âS0à (€DòyM P`ÀAÉ™JœâŸý<…@‡ÂNŒô³Ó$ÇD1bϘ¿0ÀD2ðQ,àŸ ÝeJª–Šr¥Hh3G6Î}d€¦×è=½™Ó}@`£Ú€:? Αéã¦`€>Í <À›Jµi>°Ò¤~$§Pÿm@N@šÒ3¥=é'LâšFU›KýÀM0UeÊÂ' h«Z…ª9T e@UÁÙÑ|.ô?UH?§Z×Hà®HêI©êÏ €›hU! ’ê#Ÿ Èç8ÑÌšœ` ÊJ¿ú$U(¬HM«ÔÈÕ!.½H\÷áÇn Ÿ U€H€Òº.Õž~}H`ÂÛ æV¤$ÍébG»ÝRu¢‹k>kSÊ¡, íO® Óö ˆ€HÅéS‘B$¶q(*~kXA”µƒp-@M±O… ÷Åuè *Ý},w£idý‹RËÊ¿ èçBM;Tíþ„¹1íÿ45Sñ*¤®õUzë‰QA Ò¡fm@] `Vö  µ/PMËMÓtª–%ðs+`èø£ íéI¼;(ÜuˆiO1T ÓÖ¹n\Çê_ó–vƒýLJÐ×ú¨¿ÐÇ6Ú£²ô¿4žñ¢kÙº.ø±<.­P +Ä»1²šâ‡l˜"ÅuH•5@Ž©æsš+=hGWšVÀ¶÷°ò©kù,ßùŸ.¯˜«ÄØ¡©¥tš}ÌfŸôÓÀü‡i©idJç#ɰX2DÈáOЂ„º:ÝG–í‹ ü•©§£Á,éH“T¨1Ö€z×¼é5wÚ'U=±¨³ÿ» ÿÚ@Õð[SÙc[ûÚû¸3¶·ÍíŸh»Ûà·E¾-îr›Û•Ó>·º×mçt³ûÝê&7¼çýcyÓûÞ)µ7¾÷}L}óûß¹œ0Nð‚üàO¸ÂÎð†;üá¸Ä'Nñƒ ¼âϸÆ7ÎñŽ{üã…U2ÀG®]“üäƒ19ÊWŽ•³üåBq9ÌgÞ™Óüæ±9ÎwNóüçí¹O:àáx`š¹,æÑõ‘MˆXsæØfN΀E欆¶>8½JJ/[®f* òºþb¢ f¶O\NP+Z \§¶)äêã°_Øê§aYžP¢`£è­×îîÿð÷ µ€„qÚcŒ,­N…j¡‹*âoîCòYé/¾®M'û”Ùý‡ä§îø³šSôK¼RÅéÍ©z ôêã¥LÓ¿®•9í@í}BRA´÷÷ê,+MS?²ÔY"*—pwýyöæ&õm,uýõ‚³!…oë:Ôº{ L>0ö•=ß‘É×ÈflR)ð먺xïUe€c¹YØ8ö yÝkD½©PŸd]Ÿ=vZ_‰Ös…×NÆ&d°FP†tÀÆRÎõ ʵY¾…]ÔÄ}ÕVÞ'X°ö$eV]x͆bè·\,Õ{(k›aÎEP²öOHæ[¦µP`ÿuá]p¶l=E^7nè øfÆcGç{5fy†kW‚ð ƒ—Où€[jvßW€ÕeFk‘‚¶QÉõyOÅiAØ„¨T¾—`þ$=ÕŒæ{¨föƒ8É—‡œ']…e~K(i³uy›•WfEM¬pPH\ßÇ€9æ÷õ`(fýTf…{hvƒ¸l$6|D ¡ƒQ®NC†wGmÈ7„µYˆ'Tœf`,”vŽåj˜€Ô‚Àä\‹hh 6gER h,ÅgŒ…_a‚,µR?X‹"µeˆ'Q¶¨tj¨9ƃgfj‡Âx|«(ÿt‘P ‚u…$˜P +ˆAhŽüçŠ%‚¨ T£õ‹hX•…iÎ7MhZóDREíˆY”èh¦jÀ_™(RyÅh~æFR"Ve=!S ØOÓÔ÷¦FZ°ÅŠ‘PuM±XRšEbðhwàXzåŠÂv ·ÖOõ%aühŽe“¢Ö“ý7WZç_Ð62 ™](9n‘„Øj.H_Í–’a¥^÷TU(¦f¸ôläg€ä(‡•6È•uF’^IZ_‡Ö¸â˜Õæ §&ed¹>gPø Vt×V—vé‰zÙm|ù—<˜‚‰s„Y˜4w˜ˆ sйÿ˜,çr@p­4p‚iNEÇTƒ Šþu•‘…0—A—j=1l¦0xfaP‘”þ„–ÆÄg¬©JÃQ¨ Šc6[v|@ •9g’éjÀ´–C] ‘xUh ¯©KŽÆKnµõwµÅ™2Vs¼YOLö¯7{D¥Tl…™ ˆ€Lõx×ÅÔ…ŠvOEÅUF{—÷Wã$ÝY‚à™žè…ê©wgµKAÍ9u·)’Õ¹›]©ÙX~x)”Šubš•Tõh‰Ù7YåÉl 0^ôåXiõ~Sµ÷ÄcŽU Ê ZX¬¦e'6¢øIvº´œ‚åuRFgÑÙ.çblÅäPdÅÿ‚› N+|Ô…šŒNÂùŠÅX÷X›ŠVd(¦¡´Õÿ¹£ÖI]VPÑèŠÊ7†Ç´Ÿö¢®ø¤IÕV2Éx*š!£ß”OËÆ~ Õ•[;…®¤-XÕ„9f¦¡¤OzPd¶¥¥_î%PÂÙQÉiL*ê ÕOuæX¥‡{£Lv_ –œ{ʦú @Zæ)¥ÈŒQ§ŠxÊ¡7F©dš¡0%¨j§ŸIÅO[Ѝ §:xÆdθ…’ªÍõ7(–é§gÙEK%ŸÇ†ŒÑ•«“z«cÆeZVªÜ4¨„zªKz¨[ú¢ᨠXÊV«kz«¬ÅhoúQu–ÿP¾pbà4‘}¦fØ*P¿0M÷·«$E©{v®Ú¬š©ôi¡æ7­» £°:š”n§­sE©YGº†Š¯¸^ ‘u–'”'ÖLŤ¶k¸æ”óê‚ß§œå–¬¨ŠÙ–¡…–$똄7 (»²%©²,û²ù²³2Ëo4[³øv³8Ko:»³ðÖ³>Ën@´ñ& w´H›´J»´J{qLû´PµR µCK´æVµV+nX›µà¶µ\Ëm^ûµØ¶bkmd[¶v¶h[oÿJDW‡k[Q÷SçMCÅgÅÄgÀy^mÛM³I–>·?avä—v[÷YH›ã(ÿ¦Ò¤”xµ•᪂»}WW€WR °Pù€Ðº¸¯W@U£âZ0Uä9¹=Ñ{¾ºº H…âúª.kÊ÷ïz‚êGY¨Ûÿ‡ õEŠ[*§´»¥‘&¹¹«Üøš(yœzØ·b§™µ;i!{¼Øô{pûyEx{˜aÛ*½ÔËsö )Veµ·¨ö¹£9­‰çhÃe¼ß;ÛøwÞåO:ŒZ(„±k戎ÊfvŒ]àú¾'ùQéAI…ŸgšÍ›¿ú‹ Œª~I5Q¿¦™ÌŸT•ä:Wû¾æÛ²Œë•âh¯Lqi"¬½Î;ÂB›Â*\´ ÜÂó¦¶0ÌJ2<ÿêTÃ6l8œÃ„aso{Â<ìtRG[vÛ™Þt½ÀËÂñóÄA¸h—TÙ=‰¢\ùÁÑv«¸N,•+¿˜»P+Å,Š¿Xœ‡GˆÁÇžÙIŸ1%WâºÖ[£Ù¶b|¸Àg|³ûŠ šõ„Æf§*¼»§pO}\­JlÙ«ÆQYY‰Ö{Õx¿#œ¼w§À"»È~§™„|ƒÉY\fê¬<‡¾ŠK¹*/,,ªPÚÊ}‘XÁá[ŠOš—aоcª¾B5«seÄ€mWyü¾ñ{¹@¿eLRÜë¹®àûû¿è Éöë,ZUrœ»éœ¼P¿–QÆ™ÿÉ© ¿œSëeà“ø»ï;ËU mãû··ÜÌ@‘kI²HNA9Ã%LT_•¯ñÜ †!Ê+ÅÅ]|uš¼D'Ž b;ÜÐgñнN=Ñ%WÑ VÑÎñt]s[·Ug(Jt×,m­}ðìV ÃPì|³f‚†–Òè¶Ò~ì›éˆh˜Ã_|¹ú¹µÌˆÿ|#£ S&y ¥{#sPˆ¦ž×™ŸLÇthÇœKºùlƸÌM‚ãg^"…1¹~ºw#lȺÙËÁZÔ© jÖi[>ºRpÊ9(f]h©-lɰÕV”|Å[mxc‡PnÊYoXa•OeX@¤£Ìº×‹[!»{,[æ€2J“ ˆŠ‘†}`ºÎ¤™ )ffùH—§,×DeÅi¼|Ú\Ìó›Õº5Ì!ù,<@ðœ„"""(((222;;;DDDMMMSSSZZZaaakkksss|||………ŠŠŠ”””›››¥¥¥­®­³³³ºººÃÃÃÌÌÌÒÒÒæææîîîóóóþþþÿ`L“hžh¨`=¦‚hmßx®ï|ïÿÀ ph#Ù“ ‚iJ¦ÅLiI¯Ø¬vËíæŒ5IÉ4Y†©2650¯|N¯Û},ÒsiM'V ( w‘’“”B$ j  P& ‹"2…'~•¯°±’™,'5¨´-}²ÄÅÆW$Mj"¹'©(¬®ÇÞßà5$¿Ð&qŠŒ'Žáøù²˜Ήpp!Á(`p€C‚5P¼‰£¯¢Å;¾–5qÀ@ Zš`xÀÁÊŸ)"\ÿD¸È²¥Ò!ÍЋ(]êÜ)Lš<ƒ Íâ“СH“î0€Ó§P£2 ÀAªÕ«X³jÝʵ«×¯`ÊKªÓ®T§•]˶­Û·pãrrT©Ý»WêâÝËw‡Þ¾€‹ø+¸0^(^l·À»xŒ# •¶!€k$kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨àY‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“ë…!ù,,²‡  !  $$%%&( (&!+*($(+++#+3%/9..0"0.#41&2<$95%=9+04.;94+39.8666778=1<::;'4@(6A)9F+=L,?P??E&B=(F@(KD)OH,AR.FY/H]*SK,XO,[R0I^:SNRCCDDDJKKLLLRXAV\C[SSSUUZZZ[\\abG`eIchJgmMjqOnrQouSsyUw{Vy}X|cccddikklmmqsssuuy{{|:b„k’?p—Br›Cv£Dy¦E|©G°||€/†u5‚s7‰y8Œ{:•‚;˜†<›‰=¡=¥?©”G€°Hƒ´I†¹J‰¾@§“@«–@®˜A³R­›B· Cº¢LŒÃN’ÊP–ÑQ™ÕRšØEÄ«FÈ®Fʰ€Y}„\ˆ^„a‰’d–g’˜h–Ÿmš¢nž¤o §r£ªr¦­t©²w®²x®¶z²»}·½~¹‚‚ƒ……ˆ‹‹Œ“““––˜šš›žž ¿€»£££¦¦¨¬¬¬®®°³³³··¸ººº¿¿À­àÖ½ŃÀÃÃÄÇÇÈËËËÔÔÔÜÜÜãããèèèôôôóø÷þþþÿ H° Áƒ*\Ȱ¡Ã‡#JœH0€Å‹3jÜȱ£Ç CŠÙcÉ“(Sª\ɲ¥Ë—0cÊ”I±¦Í›8sêÜip¤ÏŸ@ƒ %9³¨Ñ£H“ÒäÉ´©Ó§PI„”+PB¦jÝ걤ү`Ê=91¥š£m=ØrØ·”ð³Õ|‹9›¸Ä‚~Æ9i€Ò ú6A¿ýñB½±).!!˜b5µkB##!àk4úr À,¥"Ñp¡‚ŠO÷èÌŠe Å“HQµ%!)&3Ö’vh€XÈ¢}Y/’+ôp#-z…´šʱ oZ Ü¤¹8Í &ù–ž°Õ®£a®ƒ&ù™½Ø™¸@ â£.QLH¢E$̰$‡f÷,B&ù\R#¯Á]&“öøAIƒêgk†›äJ¥žh¡]šóœÅ{fG°ä8‹ÜÐUêäJ%dŸ”` M…"'gÐÉÿÏ~ö1žåø@„Ót+óŒ\ìi8é³–þŒ¨DsЊª3¡ͨX&ÊшZô£—ĨFGš”Žš M©ÌDJÒ–Îä¤0Õ¥Jgê–ºô¦.‰©N1HÓžjŦ8 ê„vJT‰ùô¨AªP—ZÔ¦š ©P%ÊR§ú§ZõGQͪ'©ÊU½\õ«¼ÔªX3¢Ô®¶¬h¥ØX×j‘¸õ­p«\çJ׺Úõ®xÍ«^÷ʾ¾úõ¯€ ¬`KØÂö°ˆM¬bËØÆþ•­¬XKÙÊZö²˜Í¬f+ÙÎz–¦› ­hGKÚÒö³¨M-@MËÚÖºöµˆU­lg»,ØÿÚö¶¸%mã'Úúv²¹ ®p‡›Xïp?ý­rAëX+X!˜ìkЃ6Ð× >ˆ}ª.u«k]êZׯ׵ît±ëܹDw‚Ûe_”‚E\â·9èY®|{JXè ¦h…~EŸLèW¿5RÂõ;žVˆ‚ºXh…p°;àVhAÀÿ]Ź6°ŠVP¸Á¢øS…õ‹" ä÷¿ÞD„íÛ^Ü>3¾óM1H‹!Vc…AqOw¢Â—ð*@Ác$$¸ôKð‚± `7´«èćƒUá tâ6­ (2`ƒÌà î„~¥†dE¹ÄÁ=qrULæK ¶Å±,¢L]$è·ÿ þ“‚œá¾þ¸Jru[1©¾Ò™}ZÅ…·ëßb­è°øŒå`ú÷‹&……¸`h0ßVÌeδ:‹æ4öÑ}Í/ç,-³K¿«Hu”ÜeïÉ©f¢Ùg67™}…f)Za[8¿—àB…¹àfTw¼–¶-¦5ÍìÇÝ—L5 ,¨Ù'jÿXÖ«Ð)„àM ºÂC‚~µí³Yc ÖŽºu ½ë^ù×4”pcý6)ÙÊ~ïМÙì~s寎6`}ïbÃYàÙ¼ÍÍ>!ƒÀ{î3ûþŒ-×Hݹ®¸«ãÄèübA@ž7±©ßô⻵=ÿ|Ûåï–k寸”‹\ ã(gÜëö«ŽEÁs»ÂáÞ/ϼãçãq^8|¬ì¹ü>ìÍkö–Waò“›ÖåX_kcñû_¬äÜÏ .p‡/‘èWÿ÷ÁÖPû^i-l8äXž ¢…hTÃÉê®ÍºÞ³JY%¨ ïð;~ K„†Vï¥Ý»âŠøÆ;Þ±‹üLOùÊŸVò˜·¨å7Ïùcfþóñì¼è)úÒ›yô¨Ç»éW/³Ô»ß—ë#‚ÚÛþö¸Ï½îwÏûÞûþ÷À¾ð‡OüâÿöÞ[€Ï”ÀœÙïýøÐ¾ô§Oýê[?÷ÉÇöã|½_ÿûà¿ÿøÇï{užßÝ÷7ù×Ïþö»?øêä~ú]þþúÛÿþâfà—9ÿ~ãÿÿ€Ãgf½Õ-'€»·¡ g ø€í·[9b€ô÷}E° [0|‹–µ'bZ‚ã—|J ?üG™~WÐ ˜°µ7YE`{0(ƒ!P˜Ð 28 Z6ƒ¶WKPƒCpƒKà€F(‚JØ{Þx+Ç"(Èlß·‚ÿ5K°a«p!p…ÿ•d7nCp .9ˆ·w «P v·:X{ ° E¸„rˆ|QX‡~KÐ —P¬±‡Z–E@ ¢0gÐ W@·—Ù†„µÿGv PY``Dd!0–8‡šv؉~E2[¨`[°Z¦œh«Q{lÈAX «àжGvf"676‹¦…›8‡žè‰ (ŠT˜j©vHPw«À!Њ48 ˆ˜{d‡´˜`YpŽØ‹Jø‹ŒÊ˜‡—ð‚38âX)pȆJP{B€hY {dçŠZ6 qc™€¾¨uŒ  …°(5¤‡ýˆW@ §ð>‰vŽÖB\ „«0d§X{Ö&‹ô(‚Ÿ•Q¡i€w ™nÀoXÐ!„@‘|n°Av'ØCƒÙšôh\±!^¹š1޹,<—pp)àlðñ4;@8@I‡Ä I –Á–A!”‰Í‚åšÚ©‰›…³é}ÿða›au€ `]ž~Àq~€Ð•m œ±‚@y ÿ)ÉY| ‚À|0A‚p™‰ã Øy< ƒ šv0Ôi)À wkðŸqà–0y@ƒÀ°|@ ºÐR†X°c³<Ú”M˜ Ê2 à0Ð'Pž·(Ð&`}@÷é0¤¥À1ŸH²Ÿ‘„°%|@ l@5€— q€*°€)@xÉ®Ð+°„)°{0 É)°¡ lÿPš¡‚p)q ¨‚€)°n°¡* k°)€oˆZà z#3i•ª;qIûQ€^éa°æy1Pu0¥à €~@ ¡ŸüyÀ8€ˆ:Т`šÀqV°§ѨQ„0 iI":ПŽ‚Éʃ6Эñ¡qsQPZð8ªz¯étI燘 ²º¤1u0}«€~@–á 3७æÊnðû¬iP y:±Å@ ³€ `+´p­|­~J ªæªäj ¡‹± ÿ‚P£¯¢º …¯@«AÏ´Þ¹ àKŠrå)ñ›$èIÑc°Äzy°A$‚0Á•z z° ±0)Z¡ ­@„  ‰—º1y›80¿™| ·AˆW¢–„ªA»¸ÿÔz±Y´Z±b(`/@ž~ðs `€« f0|;`_]i[ki0tJi0 mÀdþ™"ðœp@:à´Ð” Ñ®tyg šwÇé²Â[®l ))p™ÿ0n@¸€q Ï:L®P¯Qª§º,Œ;¿ á=óf˜Å¹0`Ÿ ;¥} '°€@¹  «°diõiŸ«µ_Z¬À’™ ÿ)£;{0¡‰Œ´ ¡ЙéAm™Ü@1J0{¤yp¼‘ÉŸ+°Á#j;,£Ð©š¤jªöJ¿FÜ=${êñ” ±‹ÀY{Р³ ÅúœÒ*ui "ðIJ—™€bÜ•€¢¡åjbœg,nŒI sPG¼ÇQ“PÉÅŽaÆZáp0^‹ZM«ÿ€5aTÇÇFå”´ÙCQ¹,‚<87¼ŸÕnÖ2áL4D 'U³f9R â3!PFÃ1Œ5©O7Ù@ 9/<‘’úXxA5§_Óñ_22``ÿµ d!`ŒË1ËäTË›qËB’˪ÃDgDÀñÓ B™`ÁDï± èrò7° î Í5!•@qÉz—È­°)Ûœ-Ø"ΦiaµÆ*èì`±ÍXàfš±òlôüöœuø¼)ÅFŒêìd¨¶)]ï±)…=ó"`ÔÐÑüÐ#ÑX7ÑÀƒÐsÀÊ×›#Îÿ 2áf›"l›` MÒaÒ'M ‹‡ÏpAýø\¢ð7ýˆƒh ­‡¬ ¤ñù 1­ðÒâfÓ>-´=xù+y:ôÕ-çV É"Dða d"f¦° ìƒÌHF5ÀÎ[ÍÕSÊc¦xÖ¶bÝoOápó­F…-ùQÐçÒÑÍÅ|×~‘r ²×4e”°ª N`T` ªð …` ª  “`1©  •`>²³&{Ï»tÌm;ùE×ý]}A˜U`Ú?€ª `MàO  GL GàR€Ú  TàMuhN›£}²ÿ»ýÓöÊr¿UÁÝI’ OOðêMÝ pÁ]¨m‡á­ªÞ#Ì1o¬ܪàa T Œ ª°Þ Ð¥ ù}¥] ?°ÝûVýÝ3>ƒbPÜÍm–ðÁ­Ý"¾Þ¢}©0àñ‘ žá`¥Nåýáªà ªðÁ ` @p  –  O`îuøzP^b4þ×4Ü“PÚ†`Ä­ ’P ë½Ü¥ ¨ý«ÍÚ…QžæÂ¥xÁíßað–çIb@Æé§æ|~i{׿@-}>èy·w “ÿèA茞xŠÞ}é¡õè¾XÒõ]âµ]ÜÆ^Ø”é’ny”î|õXu7`ö_~bmHvd æ'ŸNz¡Îz,æbu  r\sqðÁc ­_— b«@<6cšòê°ë¦wfd2XÝ]ê¶pô'/Bm­€lÆîxȾzœm̾qFŒ«… `_NwíÇ.¿OHÙÙ®UÏV3žXz¶vQ¦5½J 9xånîØ>Þõ£çëÎw~pïXñ>h}…\'•Ø Ð•ïúŽxÆE5ÿîY0's3'X_a<' \¶ ¿®_ø^íßxÏD 2ñ‘åX?`~beHv.ÔNb#ÿ{ö*(Àħ(?V¦%Îux3ñÏ4oþžóôõóFïWÝ9ôD?yGßôÉGʇóKUMïôã„Ì—èSÏ\Uÿó\¹õ:ßõ^öz'öcOö)-ã3Žöi¯öWÅömïöN÷.'÷oO÷þf÷V…÷y¯÷MÅ÷€í÷EøÍæO¦°‚Ÿ¯„_fM±¢0 C7H`C@…'*˜˜ —OÂ|¨QØÐÊ‹¯ôO[Mñaù,ÛÿåPê(2`¤oI­_ p9­@ݬG‹ú™Ö  6#:XcBiÓhx ïݶ¡‡è28¼Vú¦ïûªå·.[ã\µÿFlðÑk‘Œ!ÕAˆn77Ø‚oýd†ýżkíÂ`o!þ‘ý¶áÔkæaÂSúì$XÐàA„ .d(ÐÀCˆ%N¤”¨‡¤HAܰ`B2µZb`—‰ L0pÀF!­6µBRÑæMœ9uîäÙ“gC A…%ZÔèQ¤I•õ¹ÓÓ*%´´ÊDäR++XZqÙJ‰IQI `j”L$3µ<ÕjeS¸qåÎ¥»Ôî]¼yõîåËnE%«Za10³UÎÆôðj+!\›5%X&˱[ÿnæÜyn_СE&}×sÄ1©šuD­-ŠZÿ dCÄ«BNïæÝûaiàÁ…í{óE‰HµêdÜùó¸Ä¥O§^]!t¹Hj¢Ö‚evðá+Z'_Þ`qK1‰!†h4 aµh¸Às=QPTwµ¢X²NV©sãH=ÖÙ:CY%‹"®ÚÄŠ™¶8ƒª%fÂ"„UHÁB­Nâ‚‹”+BÅ“ã"‹KU–9œ9ÞylâXÌBë„=¬!vÅôàcK¢­Q;x•"D]®Ì, |vé°!%{ðàZ4ÙÀ"” bÕ%7pÇœ¸:å”›W“pÎGÓ<„‰ÄâÒ3>_³sÔûú|ˆ-=P‰K´0ýôÔkÇkvÜ÷µ}÷¥r÷]lÞƒ/êwâ7þx¡!ù-,/=‚!!!(&((($51+UL0maGʰ 8:!æÒª½x!ù;,/=C† !!!&% (&!,*((("0.#41$95%=9.;9222:::&B=(F@(KD)OH*SK,XO,\R:SN¥?©”@§“@«•@®˜A³R­›B· Bº¢EÄ«FÈ®Fʰ‰‰‰¥¥¥­®¬»»»­àÖÀÁÁÓÓÓîîîôôôóø÷ÿÿÿÿ€::„…†‡ˆ‰Š‹ŒŒ‚‘’“‚–—˜™š›œžž‚¢¢Ÿ¦  ™=8›˜‚7¸¸¦˜%˜/¹*—#>7›%4¶:,/ ¼—(+˜+ 7—;:žÊ¥˜ Ì—•)Û—571–ô5â4554h@À4 Æ¯|ŒÀ¢† {”¹°QcW€ _\ð.^€7>HhAc("d¨•€B *À4áF­"|„¸TáF‰ 3fPFc‰eP@ñÌ’‰Ž—bÐàÀá(„6P,ÈOS-ÔåÜi‰©¥ 7(Óà¤yMøÔ€j  Šx·–Ðw3@×K„áÁ !c/ýíAÙ„º&àZ2`ƒn€'6 ˆÀ¢†€²-0h!£Ç *ÌÖÃÊjü 9@AË%lÈŒPB ¤ ñ9À¼ Ò±¸áá‚ ãr\ÒÁ‹’Ê^÷ØÒ‡¸(,@‘+†ônÔè»`†eÒ“r0€1d¶SàªñxÁ ¸Dv‰3— PÉ& < ‹%(ð1¦† +®\â „—,  &&ÄÀØ„(aˆœ¨À‚ ™¹S‰ØŒÈb&t°Aq–<2É$qã6îØHŽBèè#$!ù,/=C† ! !%$ (&!,*((("0.#51$:6%=9.;9222:::&B=(F@(KD)OH*SK,XO,\R:SN¥?©”@§“@«•@®˜A³R­›B· Bº¢EÄ«FÈ®Fʰ‰‰‰¥¥¥©©©»»»­àÖÀÁÁÓÓÓîîîôôôóø÷ÿÿÿÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽŽ’“”•–—˜™š›Ÿ œ›  •=8™—”7µ¶£“%”/¶*“#>™7—%4” ,/Ï ¹’(+”+ 7“;:šÇ¢ÍÉ–)Ø“571’ï5ß45544”5xpàc%5lÄ pÌ…¸Là÷bR0Ië&u¸ñAB Ô@!ƒ¬ZÀ P¡¥ 7dá#Ĥ 7JL˜1CÀ1N €€ f’LLÊ() „B(`Å‚JL›ÑhqަMkH3ÜXpLC‘Ú! Pc);¶4ëT¬˜{µD=™² $9€ñêVÎÇ&Hª¡TÒ¤lnzâÒ€,j°Ö‚’2züØÑ``ÁIG%a¸ñà˜,€ÔJ89@ -#”€ÀÃ)hlànÂs,nx¸ ĸ“4xCð䱺)v¼Em(lÅ àÝx̰¬€yBV¬SŠZ5/¸A£VcIËLòJ& <0`' RCCCKKKXAV]C[TTTbG`fJdkLivSsyUw|Vy}X|aaalllrrr5‚s7‰y8Œ|:•‚;˜†<›‰=¡=¥?©”@§“@«•@®˜A³B· Cº¢EÄ«FÈ®Fʰˆ^„’d¢nž¤o ªr¦­t©³x¯»}·¼~¸‰‰‰žžž¥¥¥­®¬³³³ºººÂ½ÅƒÀÂÂÂËËËÓÓÓîîîòòòÿÿÿÿ€UU„…†‡ˆ‰Š‹ŒŽ‘’“”‡‚•˜™š›œš‚¡¢£¤¥¦§¨©ª«¬­®¯°±¤‚µµ²£  ¤ZR¨ ¦¹¾[5ÉÍÎÉ‚GÒÒ¯6£@Ó;¢3\¨G¦6D²;¤Q[Ïðñª‚=@ ¯9<£< @é êJ•Tã( À5jA¹XEªŠÀe†¼‹CÒÑOˆ"G„HÕd‚ˆ)B„È„QŠ` @Ñ¢¨EŒˆ 0ˆ¡,´"j>z˜ 䈑p9ÂrÃV¨Œš¡EkƯ°6v àሠ>ˆ P$ Èÿ\ð䆣,A@¢0±aaÈãˆXÀA.@‚ 9Ð…ºQ„ƒ!> bÞŠàÀ`a-£hp±¶u+±¢„éÐñ„OâXJ ý9”†# ÆmÀöƒGÉŠø Ãˆ ÈK%%µ¨Rh¸Ÿ v(–;x¨×mÃ$ß¼G],”pQñSW:úç¡ “zêàAW‰²iÞ‘çà<Å€8˜2=!q™‰bD(JM¢@GH021`-’ÒúB„‹¤Xq(&РÃ@jáX6q6Àÿ  ð‘,ÔÃ`€ÁH¡\áUØâãa€@ýI ]EX`€Ø,`Ä 0€cAø n#r!ž(ª±äƒæ1—Ã4B°HT½ÇÀFS£ÒÌÀ7áÀ¨ƒ4mÀÀSñŸ(爒À•Òt„£D…²*U µó « J莽IPŒ HÐM,¿#J¯¿ŠÂ€ˆ“AJ¯ŒB€È–BÀ2¶V+¤µ¬ìЃbë­3 |‹Jp¥¸è¾r‰'ì¶ëî»ð²n¼ôÖkf¤«ï¾üöëï¿,ðÀlðÁ'¬ð+$‘EN4Ê Xdñÿ g|Ñ X¤ ‚ 7 "°P‚Æ(?ÃBLjâ@1HœòÌÉ  ÄÃLÈŒÄÃOŒ@óϱ/ˆBÀM0ôÒ«Â@áB´Ð€ÍK0­õ)-<œEP±Å>om¶³È  @PìÙpÇ-÷Üt×m÷Ýxç­÷Þ|÷í÷߀.øà„nøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褗nú騧®úꬷîúë°Ç.ûì´×nûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/þUøä—oþù觯þúì·?3_x1TxñEòhÑÅ,ÿÀý[üš7@æP€÷3`•¿/,0ydà!8AäE\^ôÇ? Æo~õûB !ù,ÙÃ&ƒ+++333žžž¤¤¤¼¼¼ÀÀÀîîîòòòÿÿÿ:0ÈI«½8ëÍ»ÿ`(Ždižhª®lë¾, $„P$ <ˆ1À’â ÈŠ’#RYd/™"פV‘Fk!ù,÷Ð €„©Ëíc*!ù,/=C… ! !%$ (&!,*((("1.#51$95%=9:::&B=(F@(KD)OH*SK,XO,\R-aW.dY/j^0i^0ma2tf3vi4{m6qTTTaaalll5ƒt7‰y8|:”‚;˜†<œ‰=¡>¥?©”@§“@«•@®˜A³B· Bº¢EÄ«FÈ®Fʰ‰‰‰§§§©©©ºººÀÀÀÓÓÓÿ@ƒpH,ȤrÉl:ŸN€tJ­Z¯Ø¬v ¾`w‹p$ªƒZ,[¸® õ«Û1ãiæCMÙIS6 Y 0W-T&)yR"%T%0S43Z‡b‰V#˜S.0+ R¯.Ÿ-..-- T.| 6T./±‡(/.x¼)SR«S0'-."r'*T0r6S0,,‡-B p ‚FR@LÉ&eE‹ 6 ðB„‚* µ8qŠž=K)ÀPp¨qZ!àb!+–-H”˜yñC-y2J)àðÁ.¥àsp‚ ¥h@XàEІ!®p`ÂEK'¨HÑâÌbÆ@J™ƒÁ!9À4¨”ì)€/Ú9øà@F´¸ À¦LÀÈ A‚,)4dL©àéW‡RèdTéJnˆ°³"@‚W0\àTÀâ" ë0¨P—u\U£E¤RMñ‰Þ0¸VIJš5S„—¢Àë+‹KŸž…„‰Q©kß> ƒ¾R ˆO¾¼ùó‚;python-language-server-0.36.2/resources/hover.gif000066400000000000000000001071601376456405500220600ustar00rootroot00000000000000GIF89a˜’w!ÿ NETSCAPE2.0!ù,˜’†  $$%+&+(((2*28.79.8444<0;:::??F@??C4BK9IR>QCCCKKKV@TXAV[CYSSSZZZaG`dIbkMivRsyUv~X{bbbjjjrrr{{{Z~‰^†aŠ‘c–h“™h–œk™¤o ¦p¡¨r¥®u©°v«²x­µy±¹|´½~¸ƒƒƒ‹‹‹“““›››¿€º¤¤¤¬¬¬³³³»»»Ã‚½ÅƒÀÄÄÄËËËÓÓÓÚÚÚãããêêêôôôþþþÿ€ƒ„…†‡ˆ‰Š‹ŒŽ “”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±¡´µ¶·¸‘²»¼½¾¿ÀÁÂÃÄÅÆ¾¹ÉÊËÌ…’ÇÐÑÒÓÔÕÖר¿ÍÛÜÝŠÏÙáâãäåæçè“ÞëìÍàéðñòóôõéíøùµïöýþÿ ÕÈÇZ†ÐÐÇп#JœHq# @€X(0È ….|d…$DXðÁà(HÐQ‚:rÌHÀèaÅŸ@ƒ ꉑ"HCðÔd€L‘êXДMB?€ Aú£@"<ú¨©(Žh{èàù¨Û·pÿã´™5€Df,øúá‘n ±È†~Npã¯"!<ŽLÑŒ´ig,ò)·³çÏ ¡5Ê:(ˆ B8&â#Ä‚A kú„P „ŒÅ1„cåCg1÷ȱ9´ñãÈ“» dÐÑ!Ї§±•H±gäCH¼ ¤ÿF³ŽâÊÓ«_ÏžóÒµ_(ðZ" ²'"(÷A Dè@„Kãr™pšµÕÞ‚ 6øVAC€ &]ÐX2üeÁ}$D‡2 ñAŠåàÁW Ab–yl%™ƒ4Öh#=øÙ_!•à DåTYE¡ $ QÝÿƒd([‹.â¤SŒ2Þhå•Xšãȯ ’€T.f! PI"nt9^WA‰ËŒYÆ)çœÈ4D™AXçf2pÒé矀–R“RÀ 2²ç›6ê裟,*)£Vj)¤“fJKŸ—vê)š†Ú§Ÿ–jªr¢¦Z婬¶ªžª°:ãꬴ‚ë­¤Öªë®Ýk®¼+¬<¾Â ì°È&+N±ª«ì³ÐFÃlª4`íµØf«í¶Üvëí·à†+î¸ä–kî¹è¦«îºì¶ëî»ðÆ+ï¼ôŽkæ´øæ«ï¾üöëï¿PÞ ðÀlðÁ'Ü¢À 7ìðÃG,ñ¾ ûêÿg¬ñÆw¼hÅÌ Á ç íT0‚Ç,·ìòË—œÌH`šÜ à@;°óÏ@-t¦2ç2G7wó@ -œ0È/Ä` <¬¬Á +ðÀ‚ƒl°Ã[bÀ ÄÀƒ PÛ°ƒ /@ È ?üàƒK7÷”šYÐCÜ8 í÷߀]´2IsCÀ%´0<`ð‚ ^°AÕ¸°BðÐÁÒŠ€;hP@@BÛH?Ì`.}ðMüpA:èp îûïÀK÷€îuNw‰›nø ?@’d ¾÷Yð‚LUüp1¿mÔ/y$ÈŸó —9e˜ã×>·³BlÀz(ÀÐ2 ü ?À™jðƒ˜dð‡@ ¢>6X‹£Ý ;Û €Dð„"|6@ ,<ÈRh¯…„ÈÀ €€õB®ÙËy¡ƒô­I‘Áì„HÇ:ÚQD¤ÅÈ.ÀGß0#<$è 0½*`zˆÙlPÀ” 1(à QÅ@V µS ‚Œhÿ{‹[ïîHÊRšòy,VÏ 3 •ÌÀLÌXø1 @*OÉË^n—·âÀbJЗÈL&«d 2 A‡”IÍj^™Ö̦6·Ù/lró›à §¦¼Y™ù˜óœèL§:×ÉÎvºóðŒ§<çIÏzÚóžøÌ§>÷ÉÏ~úóŸ ¨@JЂš“œd1¨BÊІ:ô¡¨D'JÑŠZtž­É|ÄÉÑŽr3£ˆP76êÑ’šÔ— hG,ÀÇlƒ¤'©Lé˜RvÐg6{é-gÊÓž¶¯¦ùXÀ̘ ˜úô¨HýPñ‘Óf5©Pj˖ʡWÿ•ªV· 1ªz#$iV¹Jֲ̫#½ÎB6V³ºõ­øB«SkfNÂõ®x–\™!T>ò‘¨¹xj^KXIíUU‚-¬bK–ÃR«­Œ¬d¹áXQ%v²˜Íl.*ª‹zö³  ­hGKÚÒšö´æä¬¦PËÚÖºöµ°­lg‹OÕjö¶¸˜msËÛÞ2k·¾ ®p5\[ˆ”`|,ÄÄG–Hˆ˜ã pØáZ×`Å…„ [ YQà‰¨! BE€C¨ACeØ0&9xã àÉëÚaÙ}pêC_É ‡„x ¡VG$ BXËÌdÙÃþ PƒÀÿÝîKaÝ2¬Õå`(û&¹ â>XÀh Àþ*—‚ ™¡AÐâ’½È-'kB qÜ nå%DÀ€Ô >@ Ü~ÐÄH D¾Jâ†C”,y§²i…§\™üBbbb.3r·»…  o„qíB`˜˜>8‰”Ü`nàÉ›=7»IÀ­éÈ /õ¼lüA x‡Æòù| .p×`† &€ áHSùÒÓ’òYšÑô­oÉ `݈*íšE@0ãeÆëÍ|yÂäÕóí*½V@ãî|„1H ’ æÆX2Od‡ó⽘Nv±4ÿ}¡føx¥—~€![ 8ˆ[‘±ä¸sÕÓ– Œa“gÉäÐܵn/îžô€Ž@¥Ó¼·À#•.ö¤ ‘oeûVÌ6„ Ÿ‹Fúga÷µñüÆÜà·”åÙrE-E‚Ãa5ehîAÐà°µF€(œH:Ä’ƒÝ•{O6D”ÿMóP¼L8ê6Ì\9^%“(y]¨{^™Ä­K=—@HÌ–Nz@é=îKnø’´:m>7ÇqGm‘“nX) #u „f­K@“ áH¸æpŸÔÍý:¦m„²‚䯵Ëã&7ñÙðÜצ`uŒäÿY]Ûæ»(9¾õ6–)¸#ùzùžòÇM~n ¶-ßBÐ÷“qýÂòq\nä2LÔ.„ÈR͈è’"¦­‘K5ÅÞ®?DtÛD]Ñû~<¯L-«Ùÿþø1ØB eQùÐÿWðƒöüè[__ÓÚŽ³ýû/[‚ìýòû ü,;oz×»ó»_Uè¿üOÿùÛŸ£ÙjýïÏÿ¿M»kÕ¨LÓ—&4€ØKÁ'&4€ ø€¤p4ÃXJVvqXGh"xø&ø>ÜW'¸‚de´V,ƒ?%ƒ4ÈQ.Xƒ8(ÿD7˜ƒ<ˆA;؃@8ƒA8„¼ôƒDx„~c„H¸„?£„Lø„,ã„P8…#…Tx…]……Zø;V¸…^X0]ø…bè/a8†f˜/ex†jè+i¸†n˜*mø†r8)q8‡v%ux‡zXe{؇“‡~ˆì@p‚Xˆ©Bˆ†˜ˆ“‚ˆŠØˆPˆŽ‰•‰’X‰ú@‰–˜‰ë€‰šØ‰ÍÀ‰žŠF#Фˆ XЍا˜Š¬R­øŠ3‹²h\³X‹úe‹¸hj¹¸‹Æ‹¾¿è‹«Œš8ŒÄh‰ÆxŒ’˜ŒÊèˆÌØŒŠøŒÐhˆÒ8‚XÖè‡Ø˜{¸Üx‡ÞøsÿŽâø†äXŽkxŽèx†ê¸ŽcØŽîø…ð[8ôˆ…öxT˜ú…üØLø‰„9DX„™=¸ ™ƒù5‘)ƒY‘,x‘y‚¹‘Ø‘y ’8’$™€&y’˜’*Ù,Ù’÷÷’0929“ïW“6i~8™“Þ·“ù“Ñ”B‰|DY”¿w”H)zJ¹”q×”NYsP•ÿ6•T©lVy•˜–•ZIe\Ù•ö•`y_b9–×U–f9\h™–Áµ–lÙ[nù–¹—ry[tY—™u—x9Yz¹—‘Õ—~¹X€˜…5˜„9X†y˜x•˜Š ÿWŒÙ˜nõ˜YV’9™\U™–©U˜™™Qµ™œ™Tžù™Gš¢ÙS¤Yš3uš¨Sª¹š&Õš®éQ°›5›´N¶y›ß”›º¹M¼Ù›Ùô›ÀYMÂ9œÊTœÆ‰LÈ™œ½´œÌyJÎùœ¥ÒyGÔYutØ)DÚ¹@ÔÞ™Aàž4žäù>æyží“žê<ìÙž¿óžð8ò9ŸSŸö94ø™ŸA³Ÿüù3þùŸ/ Ú2Z s Ê1 º Ó :1¡3¡ú0z¡ “¡š0Ú¡ó¡ Z0":¢S¢&ú/(š¢ý²¢,º/.ú¢ù£2:-4Zÿ£År£8z+:º£°Ò£>zˆAz–Cj]@Z¤™r¤H*)Jº¤{Ò¤NúˆQ —SÊ[PZ¥¿q¥XJZº¥ Ñ¥^z‰aš—cŠY`Z¦ƒˆ¦’u¦jÚ lÚ¦Ûð¦pKsªXrZ§±ˆ§ˆ©§{ʧ‹é§ ¨Ž)¨ƒJ¨‘i¨‡Š¨”©¨‹Ê¨—é¨ ©š)©“J©i©—Š© ©©›Ê©£é©Ÿ ª¦)ª£Jª©iª§Šª¬©ª«Êª¯éª¯ «²)«³J«µi«·Š«¸©«»Ê«»é«¿ ¬¾)¬ÃJ¬Ái¬ÇЬĩ¬ËʬÇé¬Ï ­Ê)­ÓJ­Íi­×Š­Ð©­ÛÊ­Óé­ß Ê®Ö)®ãJ®Ùi®çЮܩ®ëÊ®ßé®ï ¯â)¯óJ¯åi¯÷Š¯è©¯ûʯëé¯ÿ °î)°K°ñi°‹°ô©° ˰÷é° ±ú)±K±ýi±‹±ª±˱ê± ²*²#K² j²'‹² ª²+˲ê²/ ³*³3K³j³7‹³ª³;˳ê³? ´*´CK´!j´G‹´$ª´KË´'ê´O µ**µSKµ-jµW‹µ0ªµ[˵3êµ_ ¶6*¶cK¶Å!ù,u?„%%%(((333:::DDDJJJ[[[bbbppp{{{ƒƒƒ”””›››¥¥¥²²²¼¼¼ÀÀÀËËËÓÓÓØØØîîîóóóÿÿÿ†`aaÙ ®l«1]ßx®Ç™½ÿ:@HÄ Å¢p‘$ Í߃‘QÀH¥ÂF`„Œ–¨DŠ(¹-ÉD  ýµaïyJg»3]}} 8w ‚{0\ˆu“]’035QF#'C§®¯°±²³§!!ù,C.:!„!!!(((333;;;DDDLLLTTT\\\bbblllppp|||ƒƒƒŠŠŠ”””ššš¤¤¤­®¬µµµ»»»ÄÄÄËËËÓÓÓîîîóóóÿÿÿÿà4 dižhª®ì ¶p,£b`ßx®ï|ﵟpH̋Ȥî¨l"™Îè*­.'Ö쎪µr»Ò/Ø)+Ëæ'6í]³Ã£™¼Øh$‰fszÍÿ+(oEˆQŽ‘M“6 ”7 < — ›6: 8 7X ˜³= ³ øÑÊ 7 ÅkÆ À<  · Œñ “ £×ª6`(` ƽê!j€6 ²!êAÐnˆ"ec1Æ9¸0 €‹Y4›ñ8«]ĉîž ÅÇÎI¨`!ŽûÖ ¡¤Æ00 à€ .3R¬ÀÜØH0ë-x p`Ö«ôZʃ‚´(X(° ¢ \x`€‘¬S-\0 ÕeÚxZØ¥» ³êÅYC¶Â€ Xj£À¸Ÿþ0°Yˆô\òáÂÎ¥p„!ù,n> „%%%(((222;;;CCCLLL^^^yyy‚‚‚‹‹‹™™™¥¥¥±±±¾¾¾ÄÄÄÎÎÎÔÔÔíííóóóÿÿÿU`PQ ÑPÕ 4=ÅÌDEÌø Ty¾÷¸Ü5@Ñ1WHTžÈ#Ј*’èAYì ÑA¢Ø=ƒH¹Î9 ×ìÌ08$” ò ÙQ'<!!ù<,C.†#"("""((( *5$.9--0'0;)3=114668::=.7B2;D6>I>>@;DMAADFFHJJMDKTNNQKS[TTTVVXZZ\PW`RZb^^`]ckcceffhahnkkmdjqnnpmsyrrtvvxsxzz|~~€|€‡„‰ƒƒ„††ˆ…‰ŽŠŠŒŽŽ•’’“––˜”˜œšš›žž ¤¤¤¦¦¨¦¨«««¬¯¯°´´´¶¶¸µ¸ºººº½¿ÀÃÃÃÆÇÈÇÈÈËËËÏÏÐÓÓÓíííóóóÿÿÿÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍ΂ÏÒÓÔÕÖרÙÚÛÜÝÄÑÞáâãäåæçèéÅàêíîïðñòóåìô÷øùúûüíöý H°`­*\Ȱa6„#JœH±¢,ˆ3jÜÈQÆŽ CŠIí#É“(SªÄer¥Ë—07¶ŒI³¦M‚3oêÜÉóÝ*J’àP€#‰WH“*]Ê´©Ó§P)1‚ƒ¨X³jÝʵ«×BË ˆK¶¬XJ˜];¶§Û·pÿ‡±@É\¶qóêÝ;ëîÚº~ÍòL¸gà²u=€ [¢ÂÜg L(ˆ…á…X0€ (̹3¼¹'t˜­»£Ù",;£pC¬;d18"³íÛåæ¾bV€¦Çzˆ zÙ€¬]`ýaViÜУó äȑ؊4 ¢ƒ3¬QN«‰"Ökð@ÄÈ‘!DFˆB‰ýà7„9!ÖCÖ©PÀ-=ØÄEH Ö ¡ !Äe¤`]­Áb!³ˆpÄdÒ…(b,@¡Á30€±DhpD ´@^_EìÀ 1àÀ91ÂÄíPÄJÿ#±‚X#áƒ=À-Ú€"¶ AB €Á hD˜¬Ù AuÊá -d8âœÑ½ˆÁfÁ€´g àR@Ž@V ¼‰…@2Ô%Dpb9 åeX†‹~&˜žktŠÃX8™‡m¾9Krt¶zÛè‘" ÌØB°Cƒ ÖRÀ ÖñÂXˆŽåÀ.Ô¤ƒ>iéŽ]Š¥ ± P‹;”&Aœ9V7ƒÆ™*œrºj.gØ 'gR °¶È8p€XlàbÅPÄX ñ‚£ÌJú,qÒ0ÛÁĬ°án,ìnfaÿ©GpˆjžöÆâ!ˆç†¬—´`,2ʉ { ,¬é K/dà@ G¨U GŒpAô@DIWAŒZðã3íðŒ²<, ƒ"0æn2€zȃ*Çœs0Šlv\ÕY±µšrl‚0[(Ä*ìXDHBøpDHüPÀÁ¦Ó?BÔC3ªušey›…'a¹°ÉÖçÙœ»Å 0ÛâïR@ž¾ò½ÎåC9uØ€¾|>74 Ï"…²TÆ{f¨w.¼[6QDè»Ì®üZÃ7ïü-"¤Ð«/ËWßÖóØg/ŒõÖkïý÷ºp_=ÿøä—O觯þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀ®o8€ÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHÂšð„ ¼Ñ1ˆÂºð…0Œ¡ gHÃÚð†8l  ÁÂúð‡@ ¢‡HÄ"q;,FÈÄ&:ñ‰PŒ¢K˜Db,qŠXÌ¢·ÈÅ.º°ŠÃ¸¢ÇHÆ2šñŒP£0ĈÆ6ºñpŒãÕ 6*`À€ q Ø öhÁøñ 8¤õ(Ä;æq ÀcÙ@t@‘r̤&+HG`ˆñÿ%‚@ÐDÐ-@¡ èE¦`$½4ðÀ$ RÙ Àr‚£´ X‰z¥"ø (o9J¤2ƒ¯l (?`Ah“›Ìf;ù 1ÚÀ{ì@+K A !œ @HFó)`!hËvJ0&2dT`ÏŠó‚Á9!‚ØàðA?(I~3œ­t¦ß¹@ˆ`¡„:µÉÑ,rÓW<lR™j’ó&° hyüR$h ZàǤÀ3è"[ ‚Ì€)…!AðM(pÏ| RpSH68 œ²pUÿm ~©ƒšò7õ'zºÒZ@)Ð@º€ dƦœT[H ¨à¦\¢f DÕ,ð¦0øÀ3pN´””_à>Ê@‘Ԕ(JUÊRvÕ)ðã+SúÓ0@¨€ làBÊu¦`À FÍŽºv‹íÅEИR¢äìe VKËÇõaº=À z‚Õb€°ÄÝ/S0JÁ™I&R#(Pg–™‰,q ”@ÝÔ—.üVÚr»ùBkm+×]f ¬•@m™‹ƒô±(»° Sf¦™éAM ÖÃBu‚$èAŒÚ@ÚÚöúååÿ.yË@Pξ…ïLPšÏsÙâð K —m}­Š±Ûé8P²¸•Lˆƒ ö¨õ=€ ê‹ (° l2Aéc“ò™ÃnRH[<.L6 wƒ Œ•ư¬1Z{P`±¶v3 ìzMYψ¬>€™( …Ò8•Z>€ b  Hõ0H3aYX^Š*Ðt¦;¤M€ƒV2Æp¦éŒ!lãâà° ä’öhNhT {„ИH¹îŽÀ+õ[¼ 1"±æ,Q‰Úõ™ÑÔ€rKä–Y#îªÁ;]âú¨‡µ-m U3ᬰœu‰ÿ\ÞZZE«<3„Éüì3gf×øõ›§ l+³Ðz&pyÌ@]—h‰'X´£ŸáT«ú° äÁW͹Ô_`)Ðhºw ‚3P£¢xI­ S³;•¥d@'Àp\ž´×¯Û ôä=‡7¿&.Ã'°Ç^?PÛ¥± lyìoϰÌP¾Çf;Ж†6¨´7|q3«Ùظ´ a8UæWni¸ù|X?{–H_ Ø•ÙžÚ™ 7ÁÆ­À<çdîK©Ño|6ý¥0 €“ üìC$x. ¾mrÓ·6€Á«Ñ:â]žX½¿5,‡‹ h¹×‘1´Alÿ–=L%Øl0P²=Ѐfƒ.^§ ´%ãA`gRÎ T3.ó™myÀ×¢öÖïÏjƒ;wè†U AþO‡s¡1àÛB^œ­W|[p÷¾ŸB-€@‚1`&§º9ï/FÑN}ªlïù'0kìÜ~„8,áKèŠÛúÙ¿†»|ÙÊ^[ÀD 9 D®fsË=ºîÁ `¹€Õú2ÍF\–åþ7~$P¾Ds¢ws`µl¦ÄsªwTóÃEe°×e —Ld•{À}%â} ¤þ·gO³æW‡€»„V¨@²dÕ7ƒ4t}·°QÿöAÇPTWA @uû7qœÇX¹”t ¤`„AøWú׿TY „„ ´ó4Aƒ„MtÇ]°nÓ7B:AMØ@‘¤@fBHY8‚€IZHƒtøB6h 8hAуB%O1”m"@fb„8¤aÊ5d"pQ@"@K*ÐZFd&CQ‡–hDwX y8DT(Cƒ”v‹èc\Tv—XŠD”‰´°‰¦¸Š¬ØŠ>„г Š®8‹´X‹T„@¶˜‹º¸‹"‹½Ã‹ÀŒÂ¸H¸8ŒÆxŒ¼è‹”ŒÌØŒ®¨Œ° ‹Î8ÔèZÐÒXÚ¸ptÙÈàŽ^äÿâXŽæØFäxŽê¸Ž°UŒìøŽð8pîôX?”ŽAäHHqèA”CŸèBJ¨I‰$Cý¸f8‡ äH%d:j(…^´G–¤·¨ l„k æ†xBÎïgÒFA"@/&Yh!CeÖBÃvA*X ‰¢È@ùÕ‘ D&„"ô’ ÔKöæBb!0yA  & tR„º¦Š$w@HFéAÙâY,E ÖE5M8.8ÑCh9BTÆ;'#9A+n3Ð)o.´’(Ô’äqUx•ölô`Äs D—`ÃO1$fe¹A'ð“?6” 4LW(Ae&ÿYàçA@ Ä 6FeQex‘ÉpE wjvs-ÐêäWlèUhÅW˜Åd4W=Ih™Õpf SU6Az)\˜5SítYCI-RÄ'S*pH)µN D8uz8W ´ih"°š_µW}Õ` fUSE›39w)`1fvyÂ) S­¤>×@—Õtv…W ¤mÑÉšJ–„oWs•i¿•⹟×tS3pV♟ ”>Åy °© (¢% £‰®–„'EE[¦$|8uV¸öXVøœyôLºõn¾¥p•É@ç‰KkjåŸ0µVmE¹T'ÿw„¤³'X‚§@ðM_¥' SödS8¥S ÚU30¡" Xº©@aˆY~¤&PU.ÐN?º¤çôY¡ @4 tZ\(‰„ s ä[º½äá…Tãal•0)P-ÐK0é\4 bvf8Ð'¨™Ém¿…Yú§½Dšiº\%"§¦¤[vz鿦%²'óU[ bF¨xª§tÊ_wú"ƒ %¨„Ê@{E§kY”Û©@` p`%U˜ç£ƒaöåKÄ—yr÷©3¶ª _d"_¶µ<Àç›™÷"°9\ßE Ð7Àa•‡u7À\x×­èEv¥aÿìâ–ï—@æ”à6cÒj Ð!Æ!¨;—fãYOöU8à™›º`tj–êÕ¬Êxÿe$W]&zø„¨ ¨@Îe©$EhÃy“Äe\„µK“ºZ8@_N ˜1Ѐˆ:ÖKÇW²¥Ä.:XbÊ%ƒ„¦½ÚOßDJ÷Ç\DÑhZgsF“,D2HNª^frV 7¡t›OF©\gZ÷¬>¦\&gŠFšy&³Ðf4û™‚'P>öY ; g–³ñ ’ˆD\AëY@@´‡¦¯ô6\õÕj¸i¦Úfe赲Dz6§W=Àc¥¦ ¤¦VÖZÄeMxä¶ à…SÚÿ­µ–L`óˆ…¥;à–“‰f$”ƒûc~•’€KX-Y¯Ï&Y¸éP0 p=¹ÌjªÀVsöúl 4«\µ°À÷—n6ÅØÔc?VkR»w#ö™d/{µàa‡%PÆg|´…˜æY= ·ä² t…;§ü^ l/B«÷o­W"=kJ?û,X"ˆyh‰•’ÃÆ½i–¦iöNHEoƒ× dúY»j…Ù@ébnëYºñù¾>u¾ê¦¾¤pÐj ɺ$o°zN|é¿áÛ‚dmðVJð¾™—fø´k¼dnvƒÅ¸‡Xr™’ù‹gl¬j©”’Üz©¡kÿ™T£K;ðø¶–õµÁ‡ref¯¿TO’¥p’6­e&äé–l¨lµÆBÃ6pº·7°¿¦—¼ÁâY²Æ‡KbÖ¿P&½ä²B¹@g|RœÇ*—sg¨*|7€«ã»·bfK=Æp…j´Z¬mÌr¿¿„TH̰¦ÆV»n<Š$—Ç5Çu¸@{f…7ISK^…ކzþ@ÎÙJ¢”¾Ó«ã”½öXAÁmЍ=PåcNC0ÀB1àÛ%4 6®"tÂìBé‹Ù²ŒnèZþè|~êuØ‹X¨7äå/dQMJBƒîY6YB `¾~ BúÌêÂ>욉 ßHìÈžììÊÞìÎNŒùìÒ>íÄìÔ~íÉní›*ëLnÿç{Äå”ÖN>î*ºê7älHuŒU‘äê9ÄîîNäê†ôU.îeD‘—äA«Aý.äòŽ–\Y’'YhF7AË$J¬¦èd•Ù&`r‰Û3LYÒ„•Jž¾°Z‰…~—Ç.A8Iñ¤•‘äÜMdvˆÄ.ø¼AS‰ïOFYI»“Ô‚x[Ac(/ðÑžB¢lyðN5N ?A`TÃñ76C ¶êpyfR•®H˜Ùô¤ò ô`Oîõ@Ñ,A;D*O°ë™RÿlI_F—ùõ4õBASONc¿ìŒ~›¯t£ å”Õt äXuc * ÿ,ê¢4ºK/ËÑ;Z€Ï›tZ¿*&p`”ßNóiJ` 0pV’¯@Èya%­Ó°tÑ;O\ÚK+M8ó'w†6›q'ŠíéGúú &£¤l8¤6ÐN ÚJà~䈾™Reiž¯Vé›ßßYây¡)ƒƒ66&ƒ'-6 „ )63 -33$ƒ"-36) &*6.¢†›@ 0. 44‚06'ž½„ƒ-8=ÿ-„""–-£.—‚=‰ØÅÛÜàáâãäåÓÝ8‰ƒ)@ê=8£@¦@1Å"ð‰8-Ú3=’€´ ˆ8€HXäC ð)X¬-€À8ð#Å$ôØabÇ3楉#¼"€´Èh‚BÊ:fyBcF ¢aË`£Ç‰fƒ(È2„4B.þÄP¤²fÊN(c Ɖeýd¦üpF›X`²äÉv\JPŠ¡ë×Ú¢ô &em„uH¢Œ-Rj`І¬bQg´ÜŽäŽ ØZ>ùÐr,]Æ‹<•/™˜Â@| {,ÿ 䚉‡ËlÚ8ÝÂÂCK~žà΄ÅuƒT³v ›Ð¿)©‘Y8QÊ–/-¨¬×ZeHO¯+K)¶„Œ,)SvmØ0=Љ©4¶Æ¯­?ònÜ|c΀ž :„¸„ @,C<~…?öcqdõ!6ÀÀ=ˆ P1 E„ô0Cr@á°bkï%ØÃ#¾H0„ æGèÐÀE.²ó^ P%’~ÅÐeá68æ15SP #ZpÀ‡$Œ¨ÁÐ ;lØÉg÷(fC% ]^‚IL)Û|ðÙ?ñôÀ Xt¨€aƒ¸È4 „XLÿ”…ä@€Påš ä¢hŽH¢SSâ<ÙS$<Ä6ˆ ‚õq9Iz›–ø1Pº@/€Òé Ÿ¦ê6L Ô m~3œ”_vTŽÆ!$eLä‘÷¥@hð¨zü|ðTŠJ2IH¬´Ðú÷$€ÝXàºâ Ã ‚ì0ùÛ ÓÕ[!ûÊÏPõNGá $ìðA™3˜O‰'¢Éí ÚQ°C¿ ¶ F|õ[^Qþ„æÃõbÖC†›.¼ä6NjS ëÐu¾-ÄÔ¯ $¤b3ë{OÄôÔïAJAHWÌ ÎÐ Å|˜ž@4|n)ÔökCè˜<ÿʃP‹$Üê\/ IWaýb@õšîrT¡ŽÈÖuö€Áyøp¤0«Hºêµ,} …ÚŠ,+e1pÜÔg¢äA ÑÛ/lK46]C´VC+“ù/|Ýnƒ6I²Tû¤¹èÈîèà”}(r#›ÍÀ 7H0ÁëPR˜/6J}ðú*…ÑÑ8†ðg( ¥B¢äPËëHÅ;ˆ Dá’®¿®À 8d ?¢i|ô4¯Ã „Ú¤NHÉÿ…ÈB‚Â;à%Ëí¢L Â¥f˜¯38¯û³þDŒ“½˜Ÿ`ˆv(|†~L2Y)>t¡×A€pçÄù««1©P$ÐßíÐÿ5TÐz·SÀ¾²mÊdQYÛß Ñgéà èö»yP©c`’¥BÍ©"V£’ó¢Q묋ž¯÷™–0r`ˆ¶fd >q#|ÞrNJ `¢Â\R Ý·H7:Óá uò %àì~³3A¡l £q¢Ó@¡ó»‰àÌT¸~Ä¥åp@P\ Š™>툣ò#Y\¢…œÁ!ÿ‘ < |™kÒcˆt/cá, !O-Ú¡ ­kSœ… òd¿ËA+6JiÖ‡X   >da©…9k–&à€žlÃ(®³ÿEíPdaÂ$“]ºM†ty$’T>†›â¤v¶mƒ^ÐxYd¸*ÁŒX6$[úb`ˆZͰXg;Wh ™„kp@ØŽf”`3ðÖ‚6~†‰—8å¥ÊÃÑ(6„Z6@b{>pºÄ¢ŠI<˜"%0–OŒê"#Ì(4bS`«Ù¡d·¯DPÀ"M™U1\€¦ ¢ÁëGJ@DŒ,U¡Ûhˆ¬ó/©jC?$ O§NªHÈE$²,’­;Yd€c4ò—}ä¦@ÝЪ%Þ¯jòLSÆv°"âœàgbÝ–4àÉ} ÐxH†ž p ÿ 9gQòU--‰cëp+?Àù«&B­Ó)Œ ‘±æ`‰eQ3")·½Ì4¿e„±´Ó9mkR+Ueq­]•2@T Ú€ˆ,LÜÒZE¹úH1—?vP¤…YÀ"e£`”rG—Š‘W2]M¿ ˆŠ¼Hz×k ˆŠ¥ÔœyšØ(À½Ûê–â»% ±wyçݯæXŒú¿¡Ó/! ü]ø8ÀÿU/zÌÁxÁó ƒAa1vø¿#˜A«mâÃZ@)¡¶€äadÃkÉ0ºP ´€ÀF¡LÌ ƒ˜¼1 o9Æûã"ùÈHÿN²’—Ìä&;¹ÂOŽò’!p™„ìÀ¿E† s.'e$D=˜‹š¤ÌÞ yD&³š×Ìæ6»ùÍä]–áLçµ8ê>þ±Œ9¬`2+@["˜U0ë 3Ÿ9i&´¢ÍèF;úÑŽ´¤×kèChҘδ¦7ÍéN{ºÑ•>t¢?MêR›úÔ¨N5C}æQ«úհ޵¬g}jV Ùմε®wÍë^7ÙÖá5còNÍ€>£kÏ›M7Œd n_Ró°ùü_e?ù¾nž6º˜=ã>C;Ê @E+€ì&;¿sV3°ej:’WzT7‚ÓÁå³ÉÓ!Ä,’!&÷ÀÂè`-ÿ’að"’“eè•Ùø;ƒ~["Þb„:’*ewhß÷&ï]‘™n#gdJ1Ás,Ì{ãûY¯ xÁ°r¼–&G»þ]‹?9ŒèB¹½¾é|À8Ès‘Ïr€õ¡b<ÿñ‡hž¦ë@ô9Bþcón]cB_rÕ·ô¬ïtHwr¡TÀ€‰D6éÿ}ØK+T ñ}W§ÜPJÇ‹±n2ÎÜ¥(éÏ»m§¤á·AHM²Dˆ€ Ø‹!hpÇpuˆiÉ–_õâZ¹œ4Àä¡ðœ€!‰±ÁS°9 -Ý"»à† ºXRO€"~¿…7Rp‚!…¦Ø &ÿ!ðT(ƒÄ«§AëM70U&ëT ¤àòш0ÀU°Â…˜„H  õµ*“Xã4| ”‹€ˆØFÔûÚhÃkK' ù¹OAÇÀÀøØý 2 ]Bš@«W Ù—~Ù Ó°H­0lɰ Í|%•&‡«=@}³W{è·H)ðÐy–Pˆp ð\ @y–— ¹‡.ÚáL¦yù²¬Ð.`V%ˆ=ÓwÚ2>dS1's'ˆ¥LHØw-¨"Òp?Xów¬¡‰¤m¡ ÀNF±êaíÁ!ѱ „•ðÿŽÁMçaX¦ÔÕ±*î äv¨RÆÚAöЫ1AAFqPr()a „@-×0²íV7v “áàÁ 3p$Lw(.`¨ ²†ìaK2At·"¸_b'–0PHù°<h( ‡/ÁBñ0eòo?ç#%ã¡n„xˆ1‡ Q0‡â‚q"Å1~1€òŒ& .Æà-ØtBŽ^¨3bVÄ - PI³%ëñ0üà‘V=p%qHÅ0î’ÿr=/GwEˆf·7ò'ë$B8 Já~Ï3@âyR$ P±RÿWµŽ\r-çX^RÄëP&"8á9ÔÒw",Ed,#’9b)1ñQá “D2G"!#“’|QD‚G5á˜t"e3a‰hÒ,˜-’ÔR Kùˆj‚-!Ñ#õf6ÂWÝà$‹BnIˆ?¨ð(éã|•¢*“ Qá+y+9Ó QI%jR;m‡b 3Jf29dñ‘ ‘%[]â9aB_c²ã‘-@OYo³b'&áR ÚF„ÿˆh‡úc1+ä$rg3»µ*Ïsp'$õòÚàVÓa•Ãv…©ø ÿ6#·éÓ/7&9#ç•w'‡ƒ˜`S/T’F  8õD75„)g5…ãHÅл)@p0á-ùr”õ,Ÿa2Ú1^팴"# »¹q€1c¨~d¥?)JÓP|aDž7„Í9,4 ›2?|“ðž 5Ó¡w×yNñ~טÖ<Ð9Ÿ@Åï'œc†8‰‰PÚb10#3B #2;øñ‰ †åvÊT8ƒ8ƒkTš¦)JѦWf·_¬IV÷ÓŽ42&>8¡6Oò½ò:Å>\öo;PtœÅi;NÚšÇù!ŠFÔ $=óS«Ó:·s.ß3ÿ—Ù¥wRoX…"; cj”hb‰æéeöãõo3‘ àDê¥Å@=Öƒ=Ýð*3”Zg•:…òþI6a:±A8ÊëB‚Šô: 62\JD^öR™ž'†z=ŠÆÑ7_l¢˜‘Ò¤¸£o Å2…¡W'ʼnÃ’&"Зn)P ^s6:sÏ„UáLÐô}¦a\AVÆô¦°©<1Pëd÷44€$¤äJKÚQ ËD…Ž‘V:Gu¤'Zšq!XG³"Q%NŒuZ"eQ(Pžd©£™p¯Ù «ÓQuZ!·„ÿ§…Óχ](ñ#‚+å´Qp®†x(“TŸš2À €Á Ä3#²ŒtL{7À¯½g©H2¦êÄNJhNä¡K¼¤¦õš°*2uïÒ(P pªd%@IF;û•,ô¡áH®°4Lj*—:D&3 ²ˆ1GH—Pi’—£mw•ßUw¤3sKå½ðXÓæÅy/?"ˆ2¤ø1W §kåõQrZ,’P(_Muoù’·A¥ÎE¯Ž5t$\YU\žždj\5VÓ¨B[¹ó04WiLBƒœk3\Õq“\/º £¨êšE‡Zl5 L¸—ƒÿUz{•„µT3àcvÛ Âc­;Eÿi¼a„³0¦¸º…»¢å3ºs¹(ÿ"‹ûÿ ¾«UQ;CEY Ï%«…«~«%šY ’<Ʊ»ËNüð6A“VbuMè¢h×¶6Z:Âþ%a=Ö 06ÀñEÀš³0ÖbÉú]Ü`¥ôb{–ÀÜÁE3w'6oHÖ©°!Â^(¦Á=†_ÆÁö…¬aåFÁÛ€bÌ 4†À,¬a7 %y‰^0VÃßeÂËsa4ÌÁGæ¶eäku¦H|Xð@»KüÄäõS>pLPLšËZÅmvnXLnÏÐw[üÅ0‘`lÅ¥I£c|ÿÆhœÆj¬dFÌ.f¼ÆpÇr,Çm,^s|ÇxœÇtÀ—¦Ç~üÇ€ìku\ oȆ|ȈühƒT|d ðr“<À ¼`úuÊ•¬k«¬n|lFPÊÅõ¿Nötqì9…Ü}øv‰˜©&E!ÇfWs€™²aVÿÕRÂoË‹^¸Ìu ¢gËóËŸ¦Ì„ ~®ÀfTÍU‹˜mFÎgõ_¼¼dà ë…Eª&EfgÌj+FóL4Drc‚M‡ÜLoäE]ÐubÔίF@UãÎO¶Èb:{ȤGÿ †‚$z¥0z’¶Ûpx¤"P Ñ6HA~™—|W4ñwy>øl¬€dã$ŽÄ•2 —³…Úg| p5’ MÀ ZÒ_‚ |“ð-S wÑCÍ-= —0ÔX¢Òô&-°zz”ÑC݃ܗšÀ xvc—€D!%µ¤¢pGÎðì ¿`&’°Ó+‹ äæ!"@|6 ‚óÓ>KË #× Ò!Ÿ yf²:à¨'ðZÒ‚byør²§2bJØGm^\ ‚Gà=M{¶§4Ðp7†¾] ÿgœ°z3 ¤­éEÚ#¶zÌÐÿÍáÔÑ`Ödñ×Ò4>¤Líd m¦ƒrc±`íÐpi˜§´*a–tHpÓ‘ š³X‹¤èŽJHÝL‹²¨´(!š¹zÁËUa0aÖ1Å÷¢'P¾*õ0Pâh´ñ1ýúlbÔMl()ÊÒa?r4‹ù‰“xÝ ô¸‡+7à Ê Ž…o¸B1ú sÈH-× –Ä1w¢\š$Ídâ€R‡XÏÁ…ÛÒ„±há¾_HEø")×Z<¾Œ6Báih¿¡‡Ö˜>¦Ào÷ÑÑä°ž?a"wÃ!UaL" .ÿãr„N1"-ÐkgdÉ=dïÂÄQR³„¾±Z+"yoc⯪!ÈÙ•Ôò S¹ ɽú #èt× -¤&Wâ™xÒl-\ÍÐJ¿3+7B&"ç¸ÙJ0Ô³±çy¾XXrNԜޠáÅŠ:’™áñÃ"nž„;¶±–@?U)˜ú"6uiT‹øˆ¦â ø !ÏE4tbÁþ'+ëFF8÷£d‘ë阇²—Š"/hb2#ë1(d“áÑ Áš×+¿BîýP$‘Dr÷¾¢1‚=âžä¾cõdŸ&òìÎdon„±CB†µ›æl¥ÃY/—ãHÚÿ5ü©›âÉ ªyè‚ãèð9ñFƒ4JCG“P 0LB4ê êO’:0\€bWÇ`1-£0¿€ò`³rš‚& Ÿ1â2Ÿq"«Ód(‚К1ðÂ4Š39°z_Ñ5ÐàHË.%Í.»qN Ø Ô^>?5B/¢_G¡©#CàŽ9/DòMK!¡JS/B$Õ÷–BòN"h’:»óAßï'Ë­K$D\f¯ç霎vnµúR;ðsòð8tAØÐ«íÃ@=zèŽ*5Ôrc¼L¯¡^„@=–!h¯÷'o£JôD£^Kˆï¤¿1‡0r³±%†P×wƒ¥¸ÿÃ*_ŽA¯¨ÎR¨Õ£ªQ»@÷ö¢" n£Ý¦ë¡z?õ‹êîö>íß®õ@ØÀ¤‰//’ž©Õ¯<­;gï¯Ð¹é²`?DÓ$ÂþŠót v¥ð“÷­:Ia;ŒdP6 =6@*‹ @- @‹8-„‚=$Œ3-‹=&’ˆ).@@0-88; Œ@& §©«º@'0@ÇÉÈ®)@Ï3±¹Œ83 @"@ ";‹36•£=3&¼¢Ò=„êì蔳—…š$ @ê"€pJ·ŽQ b1`Ô¡‡‚FúøÌÿ@‡Cv"$И$éC©P&ôÀñÁ˜9l‚>ÈÂ1Ê“9;,hèá°¢TŽó”«ã;(¸œÕ²Ü=@°s8†N"j¾ë´«×2þÔ5¼W ˆ HÔPQjËã0íÛôñÀ·p;ß‚xôaÇ$FŽZÀâxl‘1QÁ!"\ÇhÉåË͝»Q@…2‡–‚„1:iÞÌy3 C‹Mº4€§š:¤`÷ßÍ&}â;p¯}Iªï3 =D,bd‡¥Zã Ù†¬ßÁaÛvάú€¶S,â&ü×E3mÏXðV9ç®ÛÞ±Ý( =Žago¯ÿ¨Ú·_‡wµh~ûŸ¶EÇPM´Å—8LWÓ âõà_¨½S– ÚßH °tm­Í€S'„Àp€?Šð´ˆOø3 §¡'è±ØÃ08ôpŒDõÐT8×ÂU¹e ˆdsa4ÚfÑŽgí„nm•8œ@Ó3ßýfу¨-Pc±@p”’†Õ”˜‰O.ÐÖ;)®8—­7AgtÖyÀg¦å©çiœ)ðÐ" ,ÔçŸA ¨š)¡¤ ¢™¡ª(£Œ0 fŠæ†(#ºi£tþ©€£vBŠW ,Àˆ¤Öi* žŽx© ´ð”4&º(¢¨~Š)¥›€#ÿP¾n,«Ç6²+§š–+¢´ð7h¶À¬©å߯nÚí tZZì§xîi®h¨«îºì¶ëî»ðÆ+o»ÎYÔƒdóæËÈ3ìu£ï¿òN@S‚'}ª“]Ú¬ð¦åž{nº G,ñÄWün"ˆð¬Åãbñœ‡¬Y8"|÷)C,²Â ;¼§Ê+Ç,óÌ4×lóÍ8çÌnË.ç ³Î@-ôÐDm´È<÷\ÚÏG7íôÓPG-µÌI+=ÓSg­õÖ\wuÕV‡†µ×d—möÙh³¶žc3‚ÁªiÓ 7¢ ˆš¬¯‘ =êˆÑ¨Ûªu/¢@³ë.°qážîM´á:+Ðÿ¨„×ÉøÊ`¯Ýv(ËkB|ãý ¶‘&J,;µ{\g$óç$8æ«lv2hŽJn¶kT¼·/ò9ѹ߬%´ƒ®’õÎqåa_î¾ñªÔÂéxN¥@Sw*îëé‰ÓNÌoI‚º°Ó)A7¯Q8÷ºÆÛžù[¼gns8 ©ûIíWŒ¼Õ0Oƒ ¢D >ü©Ñ…Æ' ü/aœ±Á ú„¹µ@3˜D`ƒHÆåHÁŸLÐA]°œ@ÎÿôÒ‰h-.X.ØA¡Ü¨EѨ•‘²80É(ügHÜI)0Z`€Œˆ'à^'ÿ2“–0â„ä Bˆp8%lÄóÊq"²ðMˆá µ(3zJ)ø_KLp˜€Eÿø€•pq€TØÀÌ™! 5 €$jð….° òG Cv@Œ #"Ù;øu „ þG›rˆ Õ*dwX+¦ð0 hP­4¾¦V€!_‘D#†°‰«rã“ÈŠ(2V‘´'j¥ ž’„4è›(g€¤Wì±<`ß®ÃiÝÒˆ(¦ ¬°ý)Me ˜‘ ì’¡AãNÇ`‡ Œ!œÁÀÜìÄTÎ7Mw$"A¢`ÏZáE dæq¼K|ZÀ ‚%ÆJM’Áÿ€o´g6N­w¢øï˜Æ$0’ŒD=¸€E¢Øƒ@‰“œ}BqOàŒsü|Æ?Ðõ`¢8è8qЉ·|ΡãtGqàQž2B®0†vN—Ä%ºBQaÉèÃÇçGš¨P š‚u&« €$nJpÕ«oB ž Ù¥`,‰Ï(²ê \D2D‘ À¯{µˆ xb°ÝÁ¨:úÑ€à¢4Ø5ˆ<#$¶i<«ñEƒA)ðì2¢j‚VDƒéê}àÖè}ã4]˜7{¦²€0'œåœ…aU00ù…§ÙX„ 2Ù©ÿ”ï¦û<§Ž``Ô€0€‹ørÍšI\BõÔm  nPÀ;ÑOE5ô×»xô!ˆ@™‚ˆú0‘oé´RwhÇ´×qs)øÜš³Â!„¬;ªzú”»Bñîy³ŒÉ¢8aª9€tÛn÷ßÊ.îqSD„ròsÈ$‰ÇÃqOÁ¾1ÑFõèkª²áPT×_S<'=ËËŒhÀ¯á¤‡Â,8½"XïvM0*ˆä)˜ý²I´$»0á®r:öLºÁŸQ­4‹ÉzT¶kó™fNP:>gs¸b²ÖCr„˜7#:'#´Ý§æÿ¶ 40`ÛÔg6Þ³Aµr´Ð2=dð;€ p òRÉ'Þ ´Çv‚@›€ÍظFqãÉç«ü9жt¡y±&ÈLgѺãnCLÛ&]²QÉ$ÜgûT Õ^9̪‡ê ˆ‘h „@¢Ý¡¼IšŽ‰~R0Q;ÐÒr^ÝÔ34¿ˆ1Gî‚ckù”ŽA·a^œzƒH8&*»@µ -.çÎ;€ ÷ neçnïš­Ëj[RˆäÖÏ`ÎM'Àp漈‘9˜l†åI S;d7Ãçâ·I÷§cÀl°-F?¤z³~ô1&îÙü§¼ÜÆ®ó¸åÿg ÄGú’ºâ}9 ÆgÎqx³j‰È‘B¨§¼Ïh!:¡J܇œŽ“ÅÎ7.ea'ã9ßÝQî<·‘Ø1¢{…ÞT# qÚgò‡ ¾žó¶0âÛ¡w•A%í&Æ€šDÔ7^óÒõQ0Ù 6I0psrß8€DÉ÷%ä4ÈÂÌoåà Gs𗦙óÙ ’+É…ìÈÑd÷áfr'Ø¡$žâ½>Lë@P ‡¤îù¢Ê ¤0O‡4l0¹œÀôhÌo~<.׊ƒZñ kÐFöš©o©ƒîÝ÷~A:H’âǺ¡Žîóÿ7ªý£(ÄO‚2“ ;æ8Éаs ljÁðaÐ xñ{Á% ‘€Ñ÷>àÐÓV=10r¼p€¡2x7 » |·~'nÃm4Ö67À5Ò •q1 ;€š´` ¸pP‡`—w 2A°Φ#-Ðm9 z£w5›‘lìæf¹ 8b{ë!‡O˜(èv/át~VÞÃgþqhDZ†8ÂÎ1Xñ· )‚n3Iëñr—VQÐ1 6'$¶A$Äa£ó!á÷s¹§†B mØjqÈ`ð—|¾ Ü$ è&sÿ8à¨q: ÂÖ‰ù‘Ò"Àž¢%g—t¨ªh|Ïu!Ÿ8mÔ&b P¢mÛ%&˜F&Ì &QÁCâ†@à8ò‡Ô$8eXOqRR¶|JÂÉQ"Ïu„ŒÀ…W¨",rŸ›¨<;S…¤¡2ð#¨T_œ!.t2\œÁ ת")Ó'ùøBÚÓ ½r"ë*û(8srH\ðbY£R™,ÿØi,‰J‰³,?aT©"<Æ‚‘…9´ÁBYÆßò)ðø) ÀŒÒ'Ç¥ *+%©& dÆp'©6èˆ.‰’ öê" q31DYÿ”!CT+• ;ÐOcwï’ ú¦3ç00£1 é7‰”ðR‘`¹0Е³ P2_é4bY,øG4Wù0c9—tY—v 5qi.æx—|Ù—~ù—ò’—/˜„Y˜†y˜¾"˜lƒ˜ŒÙ˜Žù—Š©f9™”Y™f™¦3Biã.•ã¢(g¹–›¢8s98wr[f¹°—ÃÃ<Yši>I<¤+¾4/¹1™7ù‚™¤—c—£¢³Š¶AšÃó=ê’:´ðœPE ³zòió¢„4ùw ú'Eœ1dë¢O½)v›1hU·–åÓúd½Ù:® /`ÿ5G$À”Ì©.íé‹ìCŸÄ©Þ Ÿ=é“ýI=ÖcVíÖ.5·™ˆ²x&,1wÍ0ç3`óbò$9Ã\ÌÑ`(jœ!ì’O¡ a¡°s™$€SQu"¢CA¢}Ä@“o¨yÅs!í£â/­P;jú"œé¸œ&P „@ý±e?¤± ”~H!9HPÑA”P+Äã-°¥ ƒLõô×$PC‹ Kx@ÆÄC&ÔÐE"„G3@ nŠ^'ÀDKD»¡MV4¦3PÛ‘ ) ^Ry*ÐAO¡¤ÃfX€Â qÚGL°¹Š6@ T2L„Mº¤&Pÿ¨.+°Bs#¸°4’šLš¡Ú¡$ÄL-¨‚ ©"@Ф7b¨-ôC´ dªBEôF4%GÃQG€È åP«OåJ'€K#S¨3€-pI4AzÊCäE±¶*½Ÿ®à1)´¬w¬κO!ô\MêJ¾ÊBkÔ«ÑeE#7îé«Qä¡"@ÛtŽ "˜Y "Sñ e+ì@FUŠõ `‚/‘±ð `—»|œEPzöUaZAµXDõQö÷›• 3PZË'SND1åOÒ0X* ®à ÿ Úq® Ó3lă f{íá,bTúZ)±ÿD"ÑaA"Û ò±<5TEÕ²^ÔèQ)=pã4… ±ZÇqÖàY88OxÆà_:[–ÅѳåP°À°&ÐWwZ(ñå±Q²ï[¼fkk -ж+qex³@V}0 †õZ4; IÕ¼•#@·4E·c‚»907PTlû9C5N<¥¢ " .`T*[ÇNõ`´¥÷™˜ýê¯FJ<5°¤8=ï`a_ÇrûÒs…°S#‹ò=ÁE'»AAÌQ=pd Ö C,8@$û¥Ûø×ë\ f_•`f8Án‹ 9K К×U©™g âÿýia"AŽ0½81ŠÅ`Uéµ`›"ðÐÃ(·Óµ—€¼“ÅCã0Ë‘M‡b¾è;êk–Ôô¤Pzؼ«½øb]‹0†{{Œ7W¢2H%ºf|¨‘+â Æ ¾e&\™‘;ä nM8Î…Š^’¿`@̵:qÞÕß°Áp‹êá1ñ…[К‹@J.µË'ºsAb"‘ö6‹jçkºµ&ƒSQ±Cç#ou²¼4¼ å†kïfu-h¨fyOÇ‚öw¡pþÖ"QG9ë ZÚ8€xÚ!šF&zÜŸ æk¬ÙƬ¥¨±Æv¡ |\ÿÆ–9‰¡ ÅQ•3ðǬ”L%Ógri| kl÷ k!<=lsÖÙlœ”±fŸæÆû–AnÓÇÚu¹6<%â¡=ÌI áuúIK«<Ð˰ȦªWÈ»n9ÅÿÚ7‘;E4¼±uG¦»6{c@—B‘Çp³©¨¼ ƒGsö÷xV·q½6tôlÇÁ·Ÿ7s ×sá)¢ªGH…@<}È3ÀŸ½†¢Ñu þppv;çcd2Gx“,!(£¢\Nç<Ør& ±0‰ݬP˦܇ߡ]ÚÅÎíΆ#:ru"\Ê$Œ}Ü|ËÂeSñÏûz°çÿl;}žÎ6NÍ8·³~¶Ò>¼†ŒÌ?“[Êt9 Õƒ mV¢v8°ÍêB¤V˜cµ0"B à<;-!0€­WŠŒËqäÌ ¦qb„· 0P"šÆ/½rǃ>Ø@ØæW# píøÌg…30…"¢vá)ñ¶ ÿ¶ Ä` Oñ£_ZÛHK; 1¡ ÔÀ „1ëƒ×wÑ„2eqɾֵµÐ×a[fž=‰Í bˆà§LA95ØXØ~Ú=˜æÈ·ÄÍRò~•¢€1= Ù<õ„–=…CÔÈFíQø§O²\Â$ÿmQÜä!4 ßEk pzPQ;Üà¤6ZÇÀ}{!jŸ(l=ÖÖ¼œèfìe‹»+(S1ŠBB)¬1Ðm¨6×8X §‘ Ø´Ö².•*Ô¨áuæØk‘Èg“}ä¸O!RâÑÇfeTщeeV„+\²ÐiU™á‚c’WÌxÑþ˜ ËÇÑUkÀÈ¡s“ûÑ9Pз!SÅ ˆ°å'[ùáÌh›H¶(nèaUn×]ÔÙ4$˜ó…¤PŽ%®Š¨õ½©Qјxë½kH e?ÐÑ´– ú¶vÑÕns(ÚÈYR².d- ›‘,‰(‘î* Éò2ÿé&V ª›Áéu²“#Réþˆ-áT•xÞ’³ò ˜ŽéŸ.ê3i'Â.è‰) ém©œ)y(bš€’Ε "øU'm)‘+Ù‘Êùé ã騞ì-tà„)•PsÀ®.hl™6cËëb0 •¦þ˜.6†YìCÓb°n’«‰í!ã‘êÞ.án»íïò>ï6óîTLïøžïúΓýúžûþïðwí_ððöîï¿ð Ϙ 4 4Ï™-¦,¥™î©zî·>¢é™ÕÎ.“#/»R{™7¶)1{Ó›ãròR\»*cœ`œÓÔæóõ©ð¾‚¡áÄ+ƒ*·—öiÿ×GÉœ<'3»ãbžŸ¢JOôÅâÁÿfñ‚Ô 4JO'¶'£ãrú$1oQ¯ãÒõ-ßïÖr °£#R¹Õ£óœ!õsl_'9ªkMÃub?(™î¢öv¡ÀÐN_,`0nÿ.ï0øCÃ÷›ÁZ«.Çá¢^=ª.?öª21É¢hï:Þ ;¤M_t¦äA$ô àI‹0¯õ¥s£ÁB#·¯¥÷¨BALi F¨Z $LþȨ[6 -rKÔD›w'?„  ]sÚ Ïä¨MTû4tJXšJ«T-0”4ШÕÐ7%ÓùfÛÏ·ý}Ônäýbê®bä_=¤ÿû(ôÁMœ@ ¤¦lzVºàKF$õµLÂ-60)0-=&-“"36$ )63›¢ ž1¡)›)"ŸŒ.43¢&64 ›"&066@0¡¢Ç88@Æ­'ƒŠŒ¾Ç8"š®À©›¹4Ș’Ô$‚- ›$Ÿ)@ . «¯3Ó˜")•¢ÙæèêÄm  Áƒ*€™¹Õ«‡‚‡…TÍ’‚ 3ÜÙ8&±GŠ@v¤è1òcH -A¶Â;Là xƒ' ˜ 6óѨ9qô H @$Ý®‡ÿÓ0˜ C &‡…RzB)Qø8Ra‘­ 0ÝÅ8Ƈ HM(eJ¢M?|´ ÂW *°B*7£EÚŽý,N€IÍâµÇkSê´8jâ&»®zŽô5†šC]@‘ ¤ g y¢Ç C;H‚õT3P³À¨9q x¤Å¡[(žÈ´MÌsprS‡¶`7K8œØsQ¨’6ÚHaa#d_1ì0 Û.R&9µöSkà'‰'ªƒLŽlÔ˜Sœ@M ø9í îEuŒ}%Ð@ e¨aA Xd<ÑÅ#ðÑs±öQ!:%Sâ‰$öRÿlðUV¸m ›¸@?@Ô¸€IuÕƒÃmñ Ò1éÙè|"hÀŒV@hbe ¸2ž%Ê5 I$¬é6[8áš›Ü0ÒqbÙ(mbÀV Àp™n•y@ÎuFhM>y™*äÖƒQ_&ã!=¢ ð×bu±F¥•¡0å1fš§j7*MFQ“ŸÑÀ€t’Û×u D!xðUšr*`q=fE!"Ó(¥êÀvÖG ´›•5ŽYßHKnbC Â*yۘ߮dì&.œ:© ïø—`¡§Q°Ò“•ÝH3[î…=m¨oBŠó!ÿ²ÊC9yvÖºÔä6ð&y.,%ÒD/¢TEVŠYà­É´ Q‡lM&1e=j”*½E¹l#ËË%—nÝ0òtômlíÇÈöèä&ÕÑÙØËÇäKm×±(gªÜ³gÉHRògg‚E9Á7rn ÙhÕ£ ôiUJ9¼I$,K| ÊL¡ªJm2¡#Ÿ|4í Í­¹ŠÀñe?ãV0—C,|ëQ•°uïÀeAp5Û×5&mŽ\â&(I\ªQ']Ìøº r–äȉB!ç‹Cо¬3ta·¢Ô–,À9uZ¿8#ì÷µTSïƒÖDB¥ÿcÅ·Òù‘ÿÆÃ´žD_-ª ÅOÀóÔC™ro‹ù‡Aõ¿ì–[3Ü AõÈÙ<æsoèWgùÜá‘¥Û`g²žô€Ÿ?/ݬèîûWN a2äˆÊ52IõjÔµ(µLu8îEÂ{àK °fƒäIMnT»Q¡ @·A[î´•IT¹š G4qXÉ-hÔmv‡«w8I=H“µ„-ÆØ`zÕã™(rƒóM F… Z9ðº\=ŒSÓ›½P‡¯ÕµN_ýs>ÀR}K°Á€ZЃPà'<ÉwÇF7Âq&n\¾Ò /Œ+±À { ìàX(kÿ¢;4 ‘` msQÔSµŠ"^ð°àÚf ëà(Pã³ € ÀàNT“’"Ý„35Áïi³Áü“ eLà#بIˆ¬T¬Ü Pºlšû ÁÉ¡€0{B£L€ôGlu-8ØŽI©žÜPðiŠ„¨8éIC€D?F‰©H mZ ֥ØxE)ºj"ºÞ$KZ&chÛmh˜FLa¤Ÿ7zÀ"l(Mßµ¢6¯dÈ’’Ç`ã¥fƒ:-7ÌÉ€zÒ•.>1øÀ0\vº‹vñ‹û #2 ° šØ@‰âJ>0ü£‚›cnjš’P ƒ½I›Ýÿ`«`€¥4ÉAF€D“THä§Ñ<À2Uì‘éÃpŒ&q5¶Im‰-/ƒ Xp”=á4›9›ÈÎ`ù•ŸÚàGø™d µMÀ‡G¢RA*éúa†‘e89&™”GÊM 5%Œè2÷RºáÖL]+s¾øŽ5þyÕÇ™= ŒÇë…,Ë€–³.4yD[] /ÆBñd|õá#¯6‰À >„1ÄA¦Ѐ¡úíTiÕQl$% ‰bn$ÐÒTÑ£ { ó[垥RiL1P-|õL €©wÅ^d”—„˜]Á+^Bàx[@w ¾ñªW Hïx=¤ÿ_ï*à½û½üÎk×þŽ"Àþ °||!‹ác@}œßû2ø>œÀ”~ä&ÃR’p{œà .ü11}Ü^H8À«¨Ñd„¨â|aWCÚ­±ŽwÌc ³Ç@²‰×*ä"ùÈH®1ÑB³$×@—s²!à eì`Âöâ’c){™Çþ²˜k<ß1›ùÌhÆo‹Ë|æ hÀÂiÞï@ šöXË[FH—ãÌç>ûùÏ€´ Mè"ã9ÏÙs¡ÍèF;úÑŽ4 h×IúҘδ¦7ÍiHSÑŠî´¨GMêR›úÔŸÎs¨OÍêV»úÕ°sª·¬hÿ„v¿Hñ‘/Òˆ³°™ÁhÈâWß_ÇÚź.²±‹ 8÷xÿ ÇEÝl›ÇÃþ2­.²l$ÏúÆÚµ@µ®`w`™ÁâÇLvð8ÍÄÌ™áH®ùnQÛBQF£ÝFê/)ƒ¯{óÃŒü žL×È XF Ì(NÁñ6ñµË¦ãL‰â¨âøÈ´ß‰óøÛØÕîUɽß[ö˜äòQÁ¬D°£;ö¡·Ë9m—¯,ÛÇż« œÀAXŽR½y¬µ¬<\È„b¤É¾é£ï×É.÷­®©âåÍe›((èöKõƒ¥*½Úz’Ñû6°ÁÎò ˜@ÿ6pÁYÚ™‹&ÚHœhÄ~2@Å&X#¢´•A,µ'œcMŸ(€ "R\J&ÀÄο‘läbü™0Z ¦òŒGn‡»Ü‘‘Øï,–ÿD²% ˆE¤OjË@ åxÌ£õxN*¥:‘E.ø€€fsßR„pŸA‡p‰t Ä?ÙººT7_-‘_¤øÄ_T1Œ®`à~DÅD ’¥ñ«£Ú‡ç9o£tàü(<ÀeЀpAÜ«…°ë"…yz7(¦Ç~'{f×3¥pS zwÏ`wá÷yÈÐæ÷FÄà’ -@ÁM$[¾%m-`ÿ ) à€5R~×—e•Æ/ÈP’° ò©±"Ò qÑ¿å Â'ó12ˆ_î` òãe‘P›@(|1-ÓQ1—:‡¡p2nQ@âÖ8°`ãRÞ4<¨=3P·ÁF' …øXðt ~ .ÿñ Ð Œ³ šá !rU0äŒðß—ƒÁcÑ aTHVZdu‹vqH00`!Á)°ý¢yN¡'+ôq!†LµQ¡µ&þˆHhƒ¡Óq ²ùFc.ƒ73€.5ñgh9R!ÃS>Ô!Wó…¡8ÿ¢`%0à-À‰-€CA¬a0 éÑŠ¼ÁHPcÉþ1 x`_÷E"gÑw/² ‘"+¡WC)g1 „½r"? ‚%éûh`…ó&…b,°CvUÀõØÎ1ÎR‘÷^š‚Q>À3§Ñb‹3.p/â .€Ø….ð~»Äazw#òQ%ܳ<’(éx ¢"C’&‘ é á°#=·vq=Ÿ3‘>´ Vƒ§Ú‚HÅq+§ñ’W¨:¢B¥ÁanB#Rò+qíf %’F7‰‘e’÷‚²²mÇÀÿ)‰7}r,Î" ¹¶ ‚ÐCbB'MòP³3ð/ Á)Ñ'. ¶Ž­ÓŽ»×9c“79ˆs\¢™ÝãC8ãž!?iC$…C-€"ЅøÚÓ!Ã#2em“© Vƒ232Ôñ–¨$6˜9›O’——t?c])ÙQêðn-•ü!-TR“šÔpÆaIh$\(}b žc‘X¦™SW„ • ›S¥œD(JôsÇp¿×{w’3ãn4#1 @:G'pa§„™PÈEx“ÎW6œ¢ äI0%ÌáRáY:؃˜b¢8À˜’À)ß Îv ’É:”YVA“ ”ÿ™¼i+v…*VÂ3š· ?T<áã7;ðÏÐá W–Ð(HT<í¥0ú°N43d>裙LAîr+@*¤¢@(‘125ÆYÈ9pC„ p±–ЙM&Àqvœ…rcr O7åPF?1$åàˆ$dÜå”áJGZ¤â0~c*#-ZdX½8ÚWàóJñšÕC Nzp8V1%Ó¤ÃÈEœ`BWˆ<&E˜åƒ§¢pJ y#0Jˆ9 ˜ @z+LäDݦ:/¨g¼eN ŠQÌ}È¢¤á*`JÎ1»ý(«†ÂV5±MD§"çÁ8*ÿs²W<"I.ÊŠ&þæ6J¥tJèg8”bÕDvÕ*DVò@S)FõA©X:É9Lfê$»Å{w¡2Ú©R@*àUiy¢©@C9 Q†&pøå¬žºó‰ÚjJ¨ÄÀ6€åÄxˆq £$0>°.3 §hb¬žd¨jå~¤?‘¼ê2î¤RÔ„“jR:ÉNÂ)HúË­ºnÆù?Ò0p=¤ZþxC¶±wHkd£ ZQ‘ùª¡]°a\tXì&"´W¸‘9å Vz$½š){0]%’HL&…fèRùHÿUóW4±˜Þ”òHSƒ«9—9Õc÷våVM†FŮǠ’е¥È0)–Uö* z;¯Võ8:2$ ~zbD‰ÐRJ5‰éÚ·J#V€‹#çÙS6’9ˆÛ©€à?5)•µ[kõ!B%˜4YXÇFRŽU¸jR"0Zó* EE³|ãC£‹#ž1rSK6ZàÇ5Í’7½6q\Žä‚ZË!‡g$6^8`ìåŠ^õkb/†aç†)öKa†/ù‹'XÀ¶¸Ræ§$ä_dæ“05$A’rö¿Z1bç^‘+ÜÀþµaïÛÝ€ÿ–ZqnâÀÁ%ì]ò¥^ò‹_øål¼`1¿&Ö¡)5fœyl‘¶Qwd(AcަšF*÷ûqØû¼8|d4 Fc–mGÜÄæ—Öa6mc–¯UâÄÞ¶¾ì‹Å\ÜÅ^üÅš–ÄÙÆd\Æf|Æh&Æ8†ÆlÜÆnüÆY«Å«Çt\Çv|Äjœ!s|Ç|ÜÇ~¼iy¼{lm 'ÁEÆÄB–_:6:†È†µÃ@Æ]Z±”<’}mG\m–|fŽLÇÌe‡WcA”;f 2q]ÇcbšeFlBuæfbé–9F´ñ*@Â4TcFe É þwqùÆcÂgCI g¶ÿÊã5xòèÃj‘c"àË;jøæ]ÇìeŸ ƒº1Èò!æºc „ z™:@&ªö%­jÎS‡Î&gbWµ>˜XÖœVŒ˜q£A ¸C\ê`E=íztÝÑlƒÿ€&’vX7ØvÍÖ!- P5R‘' *mxæÌÔ·Óqyi²p×.:Õ Ò5By ó<¥“’¹Z"²ð j)ÑCÓzqwd½µ±X´¨¶°AÀð!ÉìŠd‹ÄPŠÅà1希îáŒauWÜð¤.ÂÄÀ…^ø¸US™è4(/ÓíÕ 3±ž+ ƒå¡°±ÌŹ;Èš\¥ƒFX;q ‘‰:¡•á‰Y¯1ŸçµðûÎy˜ <#Û+!1 óݶIadêÙ#\ƒu:½óm× 6tñŠ0KF&~è&’6žqŸ#à’ü —Cõ9_XKØdìÉt°4¦3jìBO£á^3…ÛI¥(óíîãî6pÁqƒî£ÌÀï0­¤™¢™j:œÄ6•›Žç Í[’ðJ0ö3¸:ÄGå]†²€¨Æ£A”ç®I/:b¢§; Ñyé¤Åƒ ¤RRª±÷΄B‘DZÿ=>}úï€nöu3,féQrU ô7œû-ýÉ)*ñ·€õAñY'R¨Ä)´eõŒZw/êÞ|HÏ-ä™Qù,o]„¥1”O“ƒö…0öÜ•.„Î-›=j=I?íKn÷©;^[¢ÛNõ?)ÛGäMiH ]¦&[2k±Z™Jµ=Ë?‹Jò åz®•)Y2Ñ}­Ë>ö‘±V¢Wý­&J˜nMÒ„‡“q¼ ã²ÚO ¯ß þ|âNÍ= @- …$=Ž=&‘ -@ @).@ˆ˜ @ˆ-ŠŒ =6ÿš*"‚£Ž"@‚ˆ0)@¡µ¤¦¨08Ž3-Ž);3=;ʶŋ¿3–Í&ã£Ç‘ @3=·8ä$@ 0‚=ë&@&«6>FkÕ&G8pPÀ°£ŒÑø¦@-Zí{4Á¦‹Ëš¥°kÖŽAª\É€—0cÊœIÀ1ˆ »• H!G€ˆ8ÐÔÎr@ΑkçÆ8|î°@ËÆµGz$}æ¨(&>Ý´$á€>ÑBЄ -¨˜~é’÷h Gvøœ±à@õ@HJmbÁôà.EaÆA–(Dh&(Л ËBBމ'è¢ZPB°X@=ÀT ` !*ã÷ÇÈ‚‹-ÅFc1‹ ‚Àœjˆ-Š‚ 86%éÛ%ÙáGo¥7¦Þ Ó^Ç:UJQʇ"Þ€ xêΣTpìúSThÀP¶ða…,s°ƒ¡@•­‚ÈA/Û4šÊ#¿XŽMÂXÙ~d“!¢Y2` ¡Á‘j›0Î@IJIG ÜZ@p vúA‚YpFsvJ›§rhíð%‘sùNXnÑiüfYËäI¾|†& èBMvÐþŠ£ÿ|éEs„“4+–À¨¾éDî¨âG)*Úˆò’eÊÛ‰ |ðc÷§Gàþë¹±Tÿ%mßúÝ,Ë5¾ äR•TŠX[-ZHØ*î/*™Ê7¼Þª-ëÊcÓBº: pÛfh NñU\T¯¸Æ7Îñh]˧Ÿ÷mTÿÖv‘ÃKüÊB¸0Žú)°~/æ—4ùqño#_|ã'¢É1îð[mYÎf¸^ŒD~8€Áð0!=–eÿúÜ—`„>7zÜDyÌã<8 A ‡'`¡7Ðc ) À÷ Ÿ:b1`)• D|Áã6 4ŽaŒS>égBâð64PwÇ×HɇrGSÄ@- B©t&°;– ñÐЄb Aay¤ üÀDŒF Ä€$H“ÂBS…=Èÿ‡  yô¿OCdF aJoQ„„TF‡t¡FÅE^F‚¡8Û ºÐB¿ã Œ"7Q!B0‚At Q1% DT9u±Ÿ&)@p#B(D!”JNøáA.ø‚úƒ/—z«gK" Ð †˜  @Phh&÷ñzÎàeÁE$Pš@EšÀ'¤8crIBaIôÐuã× 0F¢Šu ¥d NâDNç ™[Âd1Ué`L‘G a$YIã –lÛES¼QQ¹PŒR8øzD³£šÈHœˆ-5Šõ||4ÿ—R^qâ@· ‹ñäÔdÏqmUv Â0J¢Dé@Ù—VB< ¼6°TMõ \qŸåkó°@M„èIT‰qÐ |RsVµgfÆ¥g6 -ð“!ÅEBå{÷¨5ùÈ#ÒtyT4‘å `Á8FÉy ¼”0F¡íd\ו]P±bE« b‘$ábe=¦T•ÛÕ]Ë‘âT ‚h²#¼5)YI+©ˆÀ c…‚×Ñ7É’¢c["Ñ„DÃcc ‘& [Ñv”8“”[â pŠöØSq`¹„¶‘D1ÿUI"03@nÐc°a– C@ðd2£W>°¹ðšÀ ž X˜ –~Q S«ø–ÉRv6ÐbƒåDc•Åaä·§ —§Ëò®°€“ a8‚Q‘É ¾ öÑ W” Ñ ÖÆ™\ãv+Ïa›yIî!m¦SªIU‰fãyé!)²Á$ª4ˆ–g°¶½1c=à k‰ ZWù³önvb™v „õ—*á³Py##¯†ž=ë ™ä 4»áü0´3JAú‰”üY0°wÝlÍ%Â>ÚÖwWânZrmî¶|!Øv íV!š"¤²¤©B#G’¥Û6¤øX¤dz¦h*!ž™¦lÚ¦ ±¦n§l §rZ§CJ§vš§šˆ§zÚ§lǧ~¨d¨‚Z¨Y——¨Šº¨ŒÚ¨Žú¨©’:©”Z©–z©˜š©šº©œÚ©žú© ª¢:ª¤ZªŒ!ù-,C.€®¯­„©Ë!ù-,C.€(((„©Ë!ù<,C.€®¯­„©Ë!ù,C.€(((„©Ë!ù,n9…((( *5'0;)3=333999,6@3ÊœIâ…0Œ°‚ŒÀ@oDh*•)ACŠ(9I((€E€ BmPâ‚Î¥`£%ÐÀ=¸p°¡€ e7dUÁ¶,… 4là A×06døZ¡ï 6X(듆 8l(9¡¬†’"ómBYY=(á€Cʰ¨•eÈ  Á]ŠÆËB sSl¸   ,¤mRxƒÊ_4è)¢ 0lˆ©"r×]„"""(((333;;;DDDKKKTTT[[[bbbkkkrrr{{{„„„ŠŠŠ”””œœœ¥¥¥¬¬¬³³³¼¼¼ÃÃÃËËËÓÓÓîîîòòòÿÿÿÿà Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:Ÿ¶€tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßðøV$¯Ûïø¼~Ïïûÿ€Ut‚…†‡ˆ‰Š‹Œ€„Ž‘’“”•–—˜\™œžŸ ¡¢ƒ£¦§¨©ª«j›¬¯°±²³“®´·¸¹º»h¶¼¿ÀÁ²¾ÃÆÇÈÉ’ÅÊÍÎÏÐrÌÑÔÕÖ×XÓØÛÜÝÆÚÞáâã¯Pæçèéêëìíîïðñòóôõö÷öäúûüýþÿ H° ³ ¨,0À‡S`80åA3jÌÅ@ ¦¸Ð€Ï ¦ÿP˜@¥†cÊdåÀ‚Œ ©$( G€€“)œTPeBÈ™H“ÖA`–. °àBœ^z¥ªSX¸€Á‚¢(`¸Páh³ ¤$¸ ÁiÉ,"TXËðS ì-K1@§jƒ.¥D¥#§©P!°,° Ð6,†pµraP Aªˆ­ø=z@I) 0PH@áF,{#\>pØo @P ò“Ä¢”"Áf•Ü£%kßÞ¥-‚߆10ð2@î<³Œœp|€ÖŒ| ßÂQù·ÍcH˜;ýçàÁÅ@V)À@GpÿD L@uVÅÝ„baÛWRð™”2À1„ÅaN¥&|ShhbgRŒtWúùgEˆtfe@n¥5%€_¥`G]|SYá‘Hƒ8WãضYHÀX‹Ôõ|¿ p‰öÙø¢x1JSIQXSXðäMbt˜‚”Ò buVÑàcHö©h80‘\N…ãYà‘PN¥èdõ(iXP@ƒG`À°™0rökRá×('@u @– `ð‰I1TQ÷ùé«RMaØâ¿5¨•ˆ'‘€—Na`¢jƒÁôé_P5ûÿŒ¥îu—šlJ1@]N]U¸¾UYbº™.Áôë»IpŸ¸´í²´·…óÎÑoòú7À¿Sðk…D…½w¼ GÁÐÛðÄ‹²@"V¬ñÆwìñÇ ‡,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ@-ôÐDmôÑH'­ôÒL7íôÓPG-õÔTWmõÕXg­õÖ\wíõ×`‡-öØd—möÙh§­öÚl·íöÛpÇ-÷Üt×m÷Ýxç­÷Þ|÷í÷߀.øà„nøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.úÿ褗nú騧®úꬷîúë°Ç.ûì´×nûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/þøä—oþù觯þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€L ÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHšð„(L¡ WȺð…0Œ¡ gHÃÚð†8Ì¡wÈÃúð‡@ ¢‡HÄ"ñˆHL¢—ÈÄ&:ñ‰PŒ¢§HÅ*ZñŠXÌ¢·ÈÅ.zñ‹` £ÇHÆâ2šñŒhL£×ÈÆ6ºñpŒ£çHÇ:ÚñŽxÌ£÷ÈÇ>úñ€ ¤ IÈBòˆL¤"ÉÈF:ò‘Œ¤$'IÉJZò’˜Ì¤&7ÉÉNzò“  ¥(GIÊRšò”¨L¥*WÉÊVºò•°Œ¥,gIËZÚò–¸Ì¥.wÉË^úò—À ¦0‡IÌbó˜ÈL¦2—ÉÌf:ó™ÐŒ¦4§IÍjîÐ@¾¥ ¬’È@$†Jl€œ¨Äæ+ÕéJv¶Ò¬„§*±¹o¾Óž÷\'>ã¹Ïož³•ç8ç™ÍmJ ›!!ù,y{iiiÿÿÿ „©Ëí£œ´Z&Â)!ù,|‘€ ;python-language-server-0.36.2/resources/linting.gif000066400000000000000000000724751376456405500224130ustar00rootroot00000000000000GIF89a^¯w!ÿ NETSCAPE2.0!ù,^¯‡# )4 3  $$%+&$+&+-(%((( *5&-8--0(.8'1=-2:0)'4,)9/+5&02*2;,79.822-;1,335559<0;;;4::;-6@/9B3;D>>B7@J;BJAVJ)1B5/D60F81@??L<4Q?7R?:C4BD>BK9IR>QEE:JJ=VB9XD;_H=`I>BBDFFHLCEIIKNNQRGGRHGVIIZLJV@TXAV[CYSSE]]KTTTVVYZZ[U\d^^adK@hNBbQMlQDgSPjUPqTFtUI{[Ls[Sz_VaG`dIakMivRsyUv~X{bbOdePllVooY}`W~aXuu]ccdffhkklcipnnpz{arrtvvxsy~{{|~~€‚†!˜-=‚]MZ~„`Q„dZŒeTŽj]•kX›o\œp]‚hh•o`žsd¢s^¤vb¦yf­zd­}i°~jÜÜêòê&&Ú7Rêii‰^†aŠ‘c–h“™h–œk™¤o ¦p¡¨r¥®u©°v«²x­µy±¹|´½~¸f„…h‹Œl””s—˜u›œx¶j»„m¾‡p£¤~À‡nˆnÄŠqÊŽsÎu‚‚„…†ˆ‹‹ŒŽŽ‹“’’“––˜››œŸŸ ž ¤¿€º¬­„²³‰·¹¸¹¢¢£¦§¨¦©¬«¬¬®®°®°²³³³µ¶¸¼¼¼¾¾À½ŃÀÃÅ•ÆÇ˜ËÌ›ÎОÔÔ¢×Ø¤ÙÚ¦ÜܨÄÄÄÇÇÈËËÌÏÏÐÒÒÒÚÚÚãããêêêôôôúññþþþÿH° Áƒ*\Ȱ¡Ã‡[ ˜H±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—&!ÊœI³¦Íˆ0sêÜɳ§ÏŸ@ƒ JÔâÍ£H“*-(±¨Ó§P£JJµªÕ¥X³jUØÔª×¯`ÊK6çÖ³h—v-˶­Û·pãòLK·î̵róêÝË·ïØ†Ñ¦ÉDp-–ÝÃñú]̸±ãÇ'ú F- ƒfØ$)¸DóÀ$Ù|m.èc4fî À‡Ä 9¸Ì†Š!ëÞÍ»·^†Ö² à šðÐ> Äñl¯ N£vMø4Á²Ý& ¶BÞ‰ÿ6ì6WßèÓ«_O5öôfes";4Ùf!Øu-ÉŽl»ì`Ð4r°K~fdó .èB®Œ7ž+ åÆÞ…f¨!I M7P5Ö°ÁÆfÍ DØ,MS AÕPƒ€5ÝùrÍež„ÏSá†@)ä1ä!Á]£ä5>ÆR]6Ï0°b‹‚ 5È“9"´£„ÃüHä˜d–ùX‡Ô|ø¢j 0¢¾dÃÆ”Z#ÐŒ‚ùÍ0Ù¤Ö¥AòHáyfjè¡mv ÄÚ¾ÁJ~IĉaÔ\ÊÊ5h@`0fd7(5ÙØù§Aài^B"êê«°ÿÕ~ "pÁ ÀÁrÈp t޲â©5Oæ:Ф,žŠª+ÁÔ¶*«±F+í´f5„@Šqij l[Ïz*£Ø$_tÊÚÔ*µì¶ë.F°IÕ@™îQ뾫ï¾ÑÂf†Ÿ1à +EÞ[S¾ü&¬p™7¬îÂG\¨ÃË„°ÄgÜ[Å7t±Æ ‡ìWÇ$C+òÉ(7VòÊL¥ìòËy±,óÇ0×lóS2³LóÍ<÷ÜSÎ+ïìóÐD¯tÉB­ôÒ!M2-D-õÔTWmõÕXg­õÖ\wíõ×`‡-öØd—möÙh§­öÚl·=v¸NÇ-÷Üt×m÷Ý2Ã÷Þ|÷ÿí÷߀ó­wà„nøáˆ'žÔà9ÇP„âG.ùä”ÏK>,ÁøQ]d’–ŽT.ú褗®ÕæH!°„I”›U1¤ÅÅ%¦×nûí¸›—µ®Õ ˜`"É@3h‰-“ú–XbÌ% ÄE1Å@?КtÁ‰1‘oK1™hBƒB®L3M4©íâcrÃP˜Ä3æû’ûüô×Ï1êJùž•D@‚É@40F4Q‰é!€ Ê›A&,#à Àû2`ŒblÁvP !>( !;˜†+’À†Ô a¯YÂ4–€a c f0ŒýfHÃIÑŸV¸ Á*À^ˆ1ÿ`@d¡ p„&â@ LÐ[0%3Xh Å1Ì.ž!ÚXƆ` £‘‚C¤è0+S€!á Q‚ôÀ#†§FcÄŽ‚3¢óEƒ…ˆE480 a1(0U£"Éȃ”ñ(gÄJ}øˆ6±ˆTÀ#<×@cD‚±+–Ø,A<ñÁ4‚1 ×ù`Ó`M#gIË>²&¼k”°¢€ ØA¸%-IDcpA•𜌡Pbxb( ¢…bÐ 3ˆPTŸ0 dÓß±¶Å ÖòœèÄÝ-i’¹%¸GJ¡„1æYA ±’@"8±ÿ=[ä˜''ò(Mƒ ³Æ0BBTèG@€ ÓèÔ@àg>¦ó¢¥Ü:6;x ›ø¨RàšlÎ"ð|°ÑŒºô¥sk)к°GÄ$•†„©Nwj8™*«‰ƒ"T•¨¡#jÔ¡õ¨OujP¥ÚT¦B5¨‹h„rÕªòô«`›OOEÔ8$âq(ëYÓZ³¢U­omëZáÊV·Öu®r«]éJ×°úõ¯$ëŸÌzÖ &¢°F=ì ‹XÂ.6±U,cëØÉZ²¬f7›.Árö³  mB<+ÚÒšV³¤=­jW ÓÔò1›¬­lëG‚´ÿ0 îüâlwË[ÓÕ-nšëzKÜâJî·uÁ`kÜæ:—oÈ¥ËpŸKÝêÚ-ºhQnJ­ËÝî® »[á€æ¼KÞòr ¼Y1¥ëf™„öº÷½ð¯|çKßúÚ÷¾øÍ¯~÷Ëßþú÷¿°€LàøÀ®/z—bJ´i»‹LÂ&Lá [øÂΰ†7Ìá{øÃ ±ˆGLâ›øÄ(N±ŠWÌâ»Xà VŠrÝéNæŽQÂ/αŽwÌãûøÇ@²‡,â¯ÇDN²’—Ìä&;ùÉPn±‘U‹ä([ùÊXβ–·Ìe Où´UÇLæ2›ùÌþ²iÃŒæ6»ùÿÍp޳”‹Ëf9ÛùÎxγ›Õ\Ú:?œÓàÛàç'á o0‡}a>l†´ °ƒ&TyÆ“žpš „Lƒ¸opôˆÀ«¡ µ¨õlâC«XÕæ@¨]|EC™Ï¢õó0vñƒGƒ"öE©7ŒFÏ‚Ã;€ 7 hó›ÑæÆðóO N"Ÿ1â[ÄÕö4‹Ÿqì {»ÂÂfuˆÃâsS8Ýv÷ˆëckt#ʸ­®Ë­cAÿZÄÿîð0ø­á®ÃÃðÅî#a_´áÕŽÅZ1B3DƒÛ¸øH8b aÚ#öÁt<ðtÀÂÿù„®n šÝ(Ny…YN‚i”ZÜÍ/ìN|×e"èÜ7…›˜_€àÏø´†üÐÁ´a+!0Ãøw`9aˆ:~,5-¨gp  Ïù,†Aá’Søæ{’ Îl‚[¸G»ÇWh [<0¬ÜÅ„ƒ!ž¦O˜TöN¿lgÒk‡ß3DÍuÂãéo¨ð3Þ@¬ƒœðÏ0üØÏWvA'ÐJ÷+§ñ <€Yï: bÄÇ àú3z­zóÑâä6E½>a‹ƒ}Çf|!¯ô`H<ò¬§|´á“NC² 0-šu>Eƒ^ôd7{ÿ̓Áÿ}•ÓüàÎz “ŸôlÄ£þ »‚ê†Çðñwÿ‹³²êÙ†zC· à I |Ñ–o3aJ¹aŠ$tN¬QÙwR'W>$q¡Wl J¾`Œæ7 ¸|°ôhð °tUÔ(¸th ³p JÀVs®ÐvüVN®`à “Fw¿P„jPaI BäAm]WQvBˆ7 `wt™±s s»Ð™÷g$ˆJjK“Æh±pBǦl®pBÔwa GaIˆXmŠw…Ö18ƒMÑ@‚å”y÷‡±àzfƒ¾Ð3èƒÜö»0 ‰ÿ6 KðÄzm0 ¯aj ‡wpBÑÐl |8 gKŠæv%WˆÈ÷ÊÖ j`>—LjoÐå3lŒ jà #g‡Ù–‡4XsÑ€°´R؇Uȃ>„MQghk> ´AaÕ6 MÀ ]xa̘‚fwB$Èh<0Šfð‡˜~`˜™¸‰ 8 \²ÄHè…¶E‹7 G ‚wB#'±ätŽØÅÀÖ‡ˆÖˆ; UÔk3§xƒÇmÕ¶jn‡t'òÃ8aB˜aá1 Yo$ GGaˆmÕ K`Šfp俢VsÃVs»Pe.ÔÀ§e ö ÷ ñÿG†v|Ø E.4aäFa*™öг€hÐð  HhБà ƒôå#hÛôÈ:w‰¦B»€há¡aJ€h¾°ˆ'ôm'´‡Uôgå–Š4ù6ù8mxa‡h˕ѓV”FsJèm&I(ô 9‘~iomÆ S QxøIÈH©”Lùg‹Hacù¾Ž5!^6&Fïèv‚$hÏ pÓ h5{2ù5Ç '¤h¯B=Ò,Áàz\‡>©¸BѨƒ ¶ 8V‘gw&G~vÃVm¨B¼Iaç ³`)‰…Mim]ƒÎVa0ç ÷•÷ÿö›`wy'TmTÈm¨Èo‰ù,’¶)q?@QÁ0mà9aʶžHx¦JßÖ›´Ñ,õgaåÔ#âA‘ûˆ ¢&ƒlÏž÷”ëW—N´‘—¾À˜D‰î©E©’ÓY( Âi›ÖžvŸB‰œ¦¢±Iw!„—ét»VaJxž)æµ4š9¹ˆÕö f×›¨¦ŽÆŽh©ùHÊ »’ƒgp +¥¶+ŒöŸ5*”*Ë6„ÈÉhUV> Q‘øš%‰BÔi}É¡`Â0•ÙF +Ԛ♢7™“º¡Ï° 'q빡ÿ V Qia>PNp•Ðÿpx–¡‚VN€¦æõ6„‡ø³`–_Ú›Š¶+ ™:”*zŸs©©{:aÙt§x*ZaíI¨‚êš6¢ÖÙ§i6 mТáùg½ªa¾Ð¨ò·B±Yƒ6g¨nHpo¨©®•¬3^´4š©yuêWsyI}˜> Ú‚|$0Œ|Ø™°lRy$†KÇ >Àê…Ga` PɈè‰ÌIf AØ©ç ÷¨Öˆg°N ÿJiÓÀ ;vùWa¶ŠBÚ¢B¬Ð:;0B;à˜‚æ M@ås¢Iб½Vª÷VN¬`q©*”N¥¨[H­/$a!ä ®ñ‚(ÿˆ¯Ž•ŽèMX–<°!häg;0±£è#b‘Òv¬§ 6³;wMç§·Š"K•¥m'kô1®xZa-k´0û®Z«j*¢Ûjsøª¯+ç J€>ð8ùŽF¦§q„Vmp°Y·w¾°°ô3[³†÷^¸LÛ¬ ¡\¡FºÆk¸m«‚]‰HSY>æ¥u>Òl;°z«ÔÖ¦›6u°¨ª«Xaó ‹ Ðˆq'hÉÆ¯nhm¡‹HæsoÐfm/gm,Ú›<°¦ÓÀlhmK»]HQ©›»æó»zowrza°åãh:¼æ£x¦K}g`»¥æº]ÿGˆ–+a@ ½VÙl‘ø>ÖÖ ¶¹¬Ç©WmÝ9çàW €f˜±èº†éª¿Š½y¹½“ºs ¼Àûà;¤PNMëž´‹qà{Ö¼àG#牙;aÝkmÃf¸îkv‡aJ Fºvº·š£y¿úâUe(¬r”¶óêtKàzWŠ[|‰afÚa™Ãš:+»-¦\gb;¯™Ã¦•’™>Ö™FP •Ê…ÄK'æJ0Ã^VÃÅ7ŦCŒa?€mCÖÃ$ö³Vla?€Å½éd ¶‹}éÅŠû-ëHRË­f¸Ôf{—Jdõº-—cØê Œÿ&ÁNöª‡üÈfœ%–ÇóBcÞâÇVB¶¬KÖÖØÆ|b² 3xeh€·£¼Ê‰ÊÅ÷s#,š«<Ë´\˶ktv˺¼Ë¼Ìj”üR…ÖËÂ<ÌÄ|e¿ìRÁ\ÌʼÌÌÜĹÜÌÐÍÒìbÇl[vÍØœÍÚ¼ÍÜÜÍÞüÍàŒÍÉLa ×° `#Ù0ÍìÜÎÌ\ÍÀÎò<Ïô\ÏàÌ_§t è“`üÜÏþüÏÐ=Ð]Ð ÏgÑ&•Ó ÝÐýÐ =Ù0]Ñ}Ñ­ÈæµÑˆÐ[¡ÐeðIá:+à€ÒNà7@U°±Tÿ@.°à @O@`ÑC CðÐ ]ÑCpW@ =Ð= TÝÍÑZ­\®Ò¡Í a À{  `«°`£àTЫqi} «°8P×?]Ñ© `¤`ÔHÔ}€° WýÐ…€ ðªÐc° €Õâ´ÕœðÌ€ëu`m-`  q ¡€ÖjÍÖ ðÖqMÖ¢ v]„ × Á×+p€ÝÐL =Ø P‡íÐG­ØíØÙ“]Ù—ÙYÝÙн8uA.‘t ºÐ Í ‘ ¦ÿp ΰ 5¸ ÉðÉ€ ÍÀ èÝ ÊÐÞæ=8i½Ö«ÐÚV€ ‚° ¨°§Àß8@ ÛQÛqy° « >Ûºm× =ÓÀ¿MØÂÝz  }Ô®á >ÀÐ=P x  « Ù ðÈÍÐ$0 «0 ¤ Ù”mÙ˜­ÙÑãGQÍÝ¢:¡}Ð Ëð à d àm ` 6H c=eà ·€È ð_ ·`š7PàU l/@ |€Ò«°,°à "NÛ¶ T° Tp© U0ÓMáÎÐWPÔPÿ0 p©ÐáÙ@ cp«pè©  =« PXÀÐ,þ؆Ýzâ °ÔR}€ã:¾ê3q̪s2ŒAþ É¡ ¢0Ç +]b}äS>Þk° Er ·>V  QqÍÖTwr>ÛàA„0U€ìá³P ÓÐ ³  «ÐOpBP…`誥¾ EíПÎа ŠÞª âýܬÞﱑ«ÁâKäG¾Þ¸n ÑëRÞ QëÅ.V@ ×Ö|Ð?àÉ1çÓ^çÔþ÷­à À0 Âà µPÑ  P  uÿ ª ÊÝSpã˜>âòÞâ$° RÀЩ ïÍïþ~ôŽðîµq?^Aî ‘ ÅNì åññH®ðÆ×® w`ñQà-MÛy0í‚0T íÁÐ"PámrOÙ0 Ámé‹^óïžÙ óôÞâCoÑFô„ëß Éðkà e ñ6pÍÐ 6ÀXõZ Ép6°ëñ_¯ÛV€`>=¤+ú§à*ðÖ«ð@ ׎> M€Ñx° cÙ Ùd° A¤°î{Ѥ ¦ÑÉ/’Nô=ø…ô9:ЪAÿ® Î@åÃ>ñß_þkùe ìqË Ý$ý¢/úÙÎà© Ó¡ç«Ð±0®Ö ‚V­"¥ÀA„,L3báCˆ †¬êA!” ,%c¡U"6’j =L¦J…gäB_¾ΤYÓæMœ9uîäÙÓçO A…%ZÔèQ¤Iw’PÚôæ‡fajØpzÁ A+l8póåׇ#²9\‚X´H@@³ê[¸qåÎ¥[×î]§Lñ…fï_šhG0ṉ̃‚/v ØñcÈ‘%O¦œPoe:ÕÀ\×ÂB9Š}nzôBÙ°í’ÀëZ¶Ó¥E“6ÿM{6èÛ²cËiÜÙ÷oàÁ…¾<!äÉ•/gÞÜùsèÑ¥OOŽÜD)æXÇ®{öí×Á÷.¾|÷ðèɧO“ú{øñåϧ_ßþ}üùõïçßßôâŒà?ÿÃ.»"80…l0„A #t°B /\н;ôðCCqDK|.@STqE[tñEiB1Fk´ñFsÔ¡wôñG ƒrH£z$òH$“TrI4 %¢\&«´òJ,±t²((9@,ÃsL2cÜ’((³L6ÛtóMÈÎ Ê(}`N<óÔsÏ¡ä à ‰$ø4ôPÿDùô³(–X3QH#•´ÊE‰jôÑI3ÕtS+ýIP ”SRK5UEO}AÊ$î<õUXcS.5eµõV\ãJ5W^{õ•®]vXbÿ,öXd“åRYf›u¶&LŸ•vÚa£¥öZleµ6[n»Õt[o×OpÇ5÷Ü2ËEw]v™T·]xãò]yëµ—FzïÕw_óå÷_€+ó7`‚ Þk`ƒVø-„vøa4!–x⦦øbŒ²8cŽ%Þ¸cþ8d’¹d”õ=9e–ã]¹e˜Ñ}9fšÃ¹fœ±½9gžŸÝ¹g “ý9h¢«-úès‡Fzi[•fúéS†zê…M¥¦úêH­ÆzkCµæúk<½{l6Å&ûì0ÍF{í*Õfûm$݆{î å¦ûníÆ{ïõæûoý|ð'üðà G|qÌgüñȇ|ò¿$§üòº,Ç|s¸4çüs¥<}ôeI7ýEÑOW§ÔWwý¦Ö_—=¡ØgŸ½vÛ_Ç=÷Õ!ù-,MT‡#  %$"+&$-(%((( *5&-8(/7(.8'1=-2:0)'4,)9/+5&0<,722-;1,77045<<<398=-6@/9B3;D>;@7@J;BJWI)1A5/D60F81L<4R?7R?:D>BFF:JJ=VB9XD;_H=`I>F@BLCERGGSHGUIIZLJSSE\]KU\dX_gdK@hNBbQMlQDgSPjUPqTFtUI{[Ls[Sz_VbbOdePmmWooY}`W~aXuu]bhp||asy~ƒ†!‚]M„`Q„dZŒeTŽj]•kX›o\œp]•o`žsd¢s^¤vb¦yf­zd­}i°~jÝêò‚f••t—˜u››w›œx¶j»„m¾‡p¢¤~À‡nˆnÊqÊŽsÎuƒ‡Œ‹“™œŸž ¤¬¬„³´Š§¡¥¤§ª¦©¬ª­¯®°²³µ¸»¾ÁÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÚÛ¦ÜܨÀÁÃÒÒÒîîïöóôûññÿÿÿÿH° Áƒ*\ÈÐ ‚‡#J„¸Aц‰3jĘ@’ ’h@Ž%q4Táã…"|ø ¡Žr<q 2fH  h#ÆA‚pÀ¨ã‚:œˆŠ á„AEª³Š@ÞäLCVÞ°¨Â+…;ÞˆX¡–'Æ6XxA3´¨Q‰A°¼¡*±KWÜ 8ò¦AU„ˆLX؇Lׯa 5+€!7k ry›0®u!ÚÈ/‚.|#ý‹q0FÈ3v,PMBP¨óçÏEþÔ$è¸@Ì‹W@èìÍ@ØhyÃF„Àk¸¯ÿø9ôÀÑHyóFËNÓ¨×>Ü`ÈFë¼°L™òè~ýìmaÁC/¤…o†€¶=ÄÁoœÆa‰-ÖØc„¨AÄ)PƒX ”!tÔàÇ\0ÄtA©ð$ücXR”€F%½AÅëA Py¡'oø BYÂ@à’]ôÙ÷PBéÐA´ÑŸ"hÄX¶¡ÅC3¼Ñ†:ñƒ„íõ "€ÔSA$ðØ(tUVŒ(ÜÀ@f„DnÀø„Yaù°’; Z‘¤ÀýÐèALÈ1‡!xÈF0¼aAŠ´*C]\ÿéÆv¾!TDp>dÁ["à†‚õfП"cÆ „¨¢†@eàUVT;DŠ–©‘9\wyèaÈyÌÑnèàÆЏÑnôpašâÚ oððPÀJ$P¢h²ÈÚ‡ÌBkÖf@ñ¬AŸ©$šçiqä§! A}y᱊œñÚ™\º[«c¥«kƒüfô/A¤@à b¤p@ÁJÇ4¤ÐgCÑ2ŒPÄN¡‘…H Å$„@Ö%<€§ÍgÈ EñÆ&(roÄ€±ž<Z¸€h70f¿ TAD ¢·ÞK$ý!ȱ… DC zƒRÐA{Ê^/ ´äV D„_°ÝhHõCJ\¤Qš/< HT lÁ^'<$Ã…ÉÐÆy½ðz-s”ðíÌ@AÓÌB@ÁÏÓF‘Ea°”ð-À­áîüóЄüCrL¯=DÑwï}H<ÔD_„Àøå?ô"‰ØÑÀˆ(’þù䛾ýõ‹Ÿ?ýó7!Ð  HÀð€L  ø 8 pBÁ BP‚¼ +˜ARƒÜ Á°Àšð„(Là!Ȭ-|a ÁÀBÒ†6¬¡ sˆÃ¾€!ù-,MT‡#)4  %$"+&$-(%((( *5&-8(/7(.8'1=-2:0)'4,)9/+5&0<,722-;1,77045<<<398=-6@/9B3;D>;@7@J;BJVJ)1B5/D60F81L<4Q?7R?:D>BFF:JJ=VB9XD;_H=`I>F@BLCERGGRHGVIIZLJSSE]]KU\dX_gdK@hNBbQMlQDgSPjUPqTFtUI{[Ls[Sz_VbbOdePmmWooY}`W~aXuu]cip||asy~‚†!‚]M„`Q„dZŒeTŽj]•kX›o\œp]•o`žsd¢s^¤vb¦yf­zd­}i°~jÜêò‚f••t—˜u›œx¶j»„m¾‡p£¤~À‡nˆnÄŠqÊŽsÎuƒ‡Œ‹“™œŸž ¤¬¬„³´Š§¡¥¤§ª¦©¬­®­®°²³µ¸»¾ÁÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÙÚ¥ÜܨÀÁÃÒÒÒîîïöóôúññÿÿÿÿH° Áƒ*\ÈÐ`‚‡#J„ÈA‡‰3jĘ'ÏÁJ04\X€9œÌÑpÅ Žøñ£„ 9 @Ð@F1Ì !1€¢iÒã `ìH€bj‚Ž) 2²P͘…UÜ òæ€ gþ¸ò¦ÅÀa£(äñf‹¶>1¶É’à š¢G‘J’åU‰^¤$Àâ&’7®z4X ……}Ê€KÖÀÙ´pã–`¹ éŽXâ ÷&ðò7¢QÁ cL¼¸ñãÈÕô!(€:þhäOA‚–=¹„aǾñ„Í–7lFÿd±<‹£K<=À”7o¶ôTÍÚíC†nÄæK;*õŸðqqÁC0¤!…o(–Àº=ÔÁoœ†bŒ9™d„¨Q*`Ã[ ¤!tØàÇ`@ÄtQD­%A#YS˜€†'½Q ïE Pz±'Ðoü°BZ DS^øé÷DíàCB´ "h !Ä\¶±ÅC4¼ÑÆ; ñ„‡ù & TTB( Ù*¤WœhÐ@fŒDPnÐEZdýÀ“<IZ’¨ÐEéAMÈ1‡!xÈF1¼qŠÄÿ:ƒ^léz¾ATDt>tÁ_&à†ƒgР&B£Ê Ĩ£†@h–Wd{HšÖ©’:lwyèaÈyÌnìàЏáo ø°a›òaoôðPÄJÔQ£![h³Ì*Ú‡ÐR›ÖgD1-en°dÚëm±ä¨%°A~}!òŠœ1Ûš`Ê›kdµëk„g40A¨Pà c¨€@Â+JÇ5¨hCÕBÌZTDO¡¡ÅL0Å%ˆpÖ&@€¨ÝgIñ'(¢Xoȵ®<[¼Al;pfÀÍ;@7@J;BJWI)1A5/D60F81L<4R?7R?:D>BFF:JJ=VB9XD;_H=`I>F@BLCERGGSHGUIIZLJSSE\]KU\dX_gdK@hNBbQMlQDgSPjUPqTFtUI{[Ls[Sz_VbbOdePmmWooY}`W~aXuu]bhp||asy~ƒ†!‚]M„`Q„dZŒeTŽj]•kX›o\œp]•o`žsd¢s^¤vb¦yf­zd­}i°~jÝêò‚f••t—˜u››w›œx¶j»„m¾‡p¢¤~À‡nˆnÊqÊŽsÎuƒ‡Œ‹“™œŸž ¤¬¬„³´Š§¡¥¤§ª¦©¬ª­¯®°²³µ¸»¾ÁÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÚÛ¦ÜܨÀÁÃÒÒÒîîïöóôûññÿÿÿÿH° Áƒ*\ÈÐ ‚‡#J„¸Aц‰3jĘ@’ ’h@Ž%q4Táã…"|ø ¡Žr<q 2fH  h#ÆA‚pÀ¨ã‚:œˆŠ á„AEª³Š@ÞäLCVÞ°¨Â+…;ÞˆX¡–'Æ6XxA3´¨Q‰A°¼¡*±KWÜ 8ò¦AU„ˆLX؇Lׯa 5+€!7k ry›0®u!ÚÈ/‚.|#ý‹q0FÈ3v,PMBP¨óçÏEþÔ$è¸@Ì‹W@èìÍ@ØhyÃF„Àk¸¯ÿø9ôÀÑHyóFËNÓ¨×>Ü`ÈFë¼°L™òè~ýìmaÁC/¤…o†€¶=ÄÁoœÆa‰-ÖØc„¨AÄ)PƒX ”!tÔàÇ\0ÄtA©ð$ücXR”€F%½AÅëA Py¡'oø BYÂ@à’]ôÙ÷PBéÐA´ÑŸ"hÄX¶¡ÅC3¼Ñ†:ñƒ„íõ "€ÔSA$ðØ(tUVŒ(ÜÀ@f„DnÀø„Yaù°’; Z‘¤ÀýÐèALÈ1‡!xÈF0¼aAŠ´*C]\ÿéÆv¾!TDp>dÁ["à†‚õfП"cÆ „¨¢†@eàUVT;DŠ–©‘9\wyèaÈyÌÑnèàÆЏÑnôpašâÚ oððPÀJ$P¢h²ÈÚ‡ÌBkÖf@ñ¬AŸ©$šçiqä§! A}y᱊œñÚ™\º[«c¥«kƒüfô/A¤@à b¤p@ÁJÇ4¤ÐgCÑ2ŒPÄN¡‘…H Å$„@Ö%<€§ÍgÈ EñÆ&(roÄ€±ž<Z¸€h70f¿ TAD ¢·ÞK$ý!ȱ… DC zƒRÐA{Ê^/ ´äV D„_°ÝhHõCJ\¤Qš/< HT lÁ^'<$Ã…ÉÐÆy½ðz-s”ðíÌ@AÓÌB@ÁÏÓF‘Ea°”ð-À­áîüóЄüCrL¯=DÑwï}H<ÔD_„Àøå?ô"‰ØÑÀˆ(’þù䛾ýõ‹Ÿ?ýó7!Ð  HÀð€L  ø 8 pBÁ BP‚¼ +˜ARƒÜ Á°Àšð„(Là!Ȭ-|a ÁÀBÒ†6¬¡ sˆÃ¾€!ù,”I$†! &#"+&%((( *4--0)/8+090)'4-)9/+5&0<1-22345<=74:99-6@/9B3µp«Ì…¢%ƒˆM¤& Ьíl€¨‰’:Ä€D‡> )báÚ?JŠ@Ò¡`à@Àµ—%K>½úôE üá"$»íݵs÷¾=!ù,‰8Õ,† 3 %"!+&$-(%(((0)'4,)=$#9/+<1-222999J A5/D60K;4Q?7VB9[E<_H=`I>TTTdK@hNBlPDpTFtVI|ZLaaarrr†ˆ‚_P„`QeT•kXp]¡s^¥u`­{e°|f³~hÝêò¶i»„lÀ‡nÀˆoĉpÊsÎu‚‚‚‹‹‹›››¤¤¤«««³³³»»»ÀÀÀÒÒÒîîîóóóÿÿÿÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåˆDC;ÄB4hpèÌZíÑ¥+Ì”Á ÕX¼ÆTàFjB’Û¾‡ÞØ™ýDà+“– üyA2g­<À‰„Þwÿ^Єnà ¹ù2à à ÓUw]v³]àÐA6¨@$À@dƒ §ž 4¦ÁxP!ø5ø`„‚gƒ| ˆƒ´0ÃÞ‰VLàAt ö8Ì‚,° ˆ7ðXH;ìÿ;èp8(‚ àPAC¹Açœ àbsüùhf1@ò·u‡äÐCAøÐÇ4‡Á ÎÝ`Àvk^'Üa^>×bC™g& ð  ‚t %"¤§H ,´€© ÉAÊ –Â8Hs… ¡p¨¢¬ê" îÑ0AäF3™ˆ†Š˜€Ã¹‰f+®º†jÈ *¼@®x°_«ÐÚ‚k‚ˆu¬ðÝ ´&R=rÚÌ–í¶Ý ·[!N›£ 8ØPC ÑÖë  l ¾úBR@FÚ+ðÀ|È‚ˆà  0à /ÜðÃK1^Ä[œ1Æ'lðÇœõÂ$ÀÁ#—|rÊ&£LrË,¯ü²Ì*»\sÌ6Ãp×Î<÷ìóÏ@=×0˜ìÑF#€4GÍ´ÒN7ôÒR?M5ÔI ­õÖ\wíõ×S!ù,v6ƒ(((333999žžž¤¤¤»»»ÀÀÀîîîòòòÿÿÿJ,U„Q+èÍ»Hr ^ijÃBž,'µ°öÆíLŸö]溻ü½]&èáFb2˜Z„Ðè(¡X0ϬvËíz¿à°x̘Ïè´Z!ù,M&>‡+ 3  $#"+&$+&+-(%(((0)'4,)<$#9/+2*29.822-<1,222;0;<<3<<JJJ[CYSSE]]KSSS[[[dK@iNBlQDpTFtUH{[LcHaiThvRsxUv~X{bbOdePmmWooYuu]bbbhhh||asss{{{†˜-= €]N‚_P„`QeT•kX›o\p]‚hh¡s^¥u`­{e°|f³~hÜêòê&&Ú7RêiiŒaŠ‘dŽ’m¤o ¦p¡¯vª°v«³x®¹|´½¸‚f••t—˜u›œx¶€i»„l£¤~À‡nÁˆnĉpËŽsÎu„„„‹‹‹–––›››³®¿€º¬¬„³´Š¤¤¤­®¬³³³»º»Ã‚½ÅƒÀÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÙÚ¥ÜܨÁÁÁÍÍÍÓÓÓîîîóóóøõøÿÿÿÿ³ÜˆÀ'A= (˜L…|* øááC‹ÉYp'Ñ"‹ ,`Q¨ÐÇòºò„œC+BÊœI³¦Í›8sHÐ Ÿ º8œÁgF.a LäSäŒ9…é¡0óD ò豨ç‹oVPxsè„γhÓª}(°ÂƒbÄð¡"À-|øˆ©»´©Å [Ñ ÉâaC,,9äÃb!Çâ¬L¹²Ì^THhÂæœm8q‚óC9†€¼p‚ªå×°ÑÚøb9ôÙ*ßÄÞÍûf•)¹ü¡ßÁ/®¹ñ"‹’/—î\¹,MN7þ»·wË„ÿB%üøòâ 7¯ýy‹Î³_Ÿž¾üúè¿ë§L¾¼q*þ) ÿØX 8à‚ûE(áM-òÑ„fØ›mvèád~(âˆ6…Hâ‰(šˆâŠR°ˆk,ƨáQM%ãb”ÈF]ˆã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)ätÖiçxæ©çž|öé矀*(žxà1衈&ªè¢ŒÒY¨œ>*Ó´‚j‰æZðÀ%Tp»û‹G}HØñÇ8<¤Ãv "HÉc¢òÈ0†„±üʰÆn¬±ÁC$¨‘³­MRÁ„n<+· L10Yä0Ä$‘HV´Òu€† m¸¡­][4Ánœ»úÒ¬1!iä@†¨°Ã°ñ@H*øÿñGàðG9ä`ZH#Ä@1$Äl ±„¦n(ÁÁÑ]6Ácƒ0ŒÀ†häúÔ1=ô‚­-¸@ k€ôõç¡þÂl´Ð‚ šS­mâ‹7®ñ‚$,±è òpÖ‡jÑ2 à Ÿ¿üÐCÅC1´q¸br¼t‡pÌä 0ánŒ`>úêÓêÐÛœÜ »€u.$…JƒLž—·A$„|Èõ²‡†‡@+ÉZ64¡qÎ"DsÛdò†B¥r˜IÀLе!tÂ`%¯ÍMÀ Ÿ ’Ba/Xx‹^ÿ!h=¦å‚ý *8©6ä„W{žðô& ˆZM¢…(pQ £¢çú‡0~Õ0‡ Àa °CšøP^"HÁ Æ ‚Qˆœ©ÃR ‚æå‰D˜ 0Ð0hp™5t@Ïrƒ€†óÕ„u6A‚dÀ,m1k’•ÜÝm§HXU1›ñðÇ䀰„åîȃê=$Ä ,¥@š+}Hc©vÇ7Œë!gsƒ²€37 ’59@b&“ou àb&Òž)Jg!®˜ãê@1Ù°†#¬2F„<$Z0?z‡îÔ !ׇÀ¯@JBñÊu˜³Xæð³:ý (@ÊÏB5ê ÝÓ0*d` mèC#êPˆ2´¢èE5*Q‹v4£¥‚AJR’6Ô¡t:iR  •.@¥,EéK[S—Ât¦2Ui¡!ù,`!…3%"$,$++++2&04+39.8333999AU G3FK9IR=PZCYeJciThvRs›Z~Üéòb‹‘lŽžuœ¦q¡¯vª¨{¥°v«²x®´y°žžž¿€»¤¤¤ºººÄƒ¾Æ„ÀÀÀÀÊÆÊíÚìîîîóòóÿÿÿˆ@€«5*”Z®ÀÄh:UkÅqˆH§èáD 6.‰…ðÐl„.ª‘tN@Nµ¡Ý|Ç›^])ºò{'jzq'(qB.{~NB“qB˜Mœ™˜ . £§˜¢mª«žN . –q ),&»–BDFH¼ÈÉÊËÌÍqA!ù,^! …"3$$($(+++8.7333=0<999AU C3BC=CK9JZCYjLh’Z~Üêò–h“°v«¹|´žžž¤¤¤ºººÂŠ¾Æ„ÀÈŒÂÁÀÁ×ÌÖîîîòòòÿÿÿb@@‰´1pH¥@ @„H"ÏóÈ(%PB)|B)¢T~áÒ£ø0Å貆Ž+×u¶RXJêBzIƒ %‹ J %‹Je% !#ž{CEG~A!ù,CšH‡# 3# %#"+&$-(%(((&%2 *5%,9(&3).=*3=0)'4,)=$#9/+5&022-<1,222:;4999-1@34E66H4DCNAIRLAZKS[PD^SSE\]KTTTTF`WHdZIf]JhPW`T[b\bjdK@hNBlQDpTFtUH{[LbMlfPplSvsW{vX~abOdePllVooYuu]aaadjqhnujpxz{arrryZ€tz€{€…†‚ˆ’™2G€]N‚_P„`QeT•kX›o\p]ƒou¡s^¥u`­{e°|f³~hÝÝêòê&&Ú8Rêii€^†‚_ˆŠcŽd’g”’h•–j˜šlœ¥r¥ªuª¯x­°x®´z²¹}¶½¹f„…h‹Œl“”s—˜u››w›œx¶€i»„l¢¤~À‡nÁˆnÉpËŽsÎu‚‚‚ƒ‡„‰‹‹‹†‹Ž’•”™–™š›œ™ Ÿ£¨¾€º¬­„²³‰·¹¸¹£¤¥£¦©««¬±²³µ¶¹·¹º¹º¼½¿À¿ÀÁ‚½ÂŠ¿ÅƒÀÈÃÃÅ•ÆÇ˜ËÌ›ÎОÔÔ¢×Ø¤ÚÛ¦ÜܨÁÂÃÆÇÈÌÌÍ×ÍÙÓÓÓîîîòòóÿÿÿÿH° Áƒ*\h0€Ã‡#JœH±¢Å‹!2Üȱ£GCŠIrâÇ“(O–\ɲ¥F-|¤œI“ Ë›83̨¦Âx|"ÌI´èK ZÐì—'¥~ØЃF³æd`CP >»jÕçUÐ%þ¼úB`“V­Ø2ðë/W¯øtýÔJ  3õ굫 ƒR¨²ÒÄ H®Á¦hÜ’Á†{z2àñ*‰ ?od1Ûõ¯²à¤™0XK~ÜyÀCÏ_Þè•)ˆ* ¬ôÂ@H/! T©B…1åç$wjæ¼áO–¯6diÕ€A’Vðÿ˜äU[À–ä¹p·¦!ìbLJW÷U©‚@ ½?FéQ·‡!dÇÞi¯ˆX›½¢z6¬§™B ¶ r h²Ë½T"» ¶‰dþ•H€ nrÇÀÙå1‚ç£AM̸ÐBä’‹@»Ò |ÝPa&&‘eÜ!P·bÚ½ÂÄ~Œ§DgX"z7´%!twÐ [Ô0*ª ¤J/§ dIXÒË Jæ~¼âç+­ð^Y„^Ÿ|òÊ'6°‡ŸŒ ´€aÙÊ+? dœ…2 E/† ô˜ˆ$êibGYÒ@ÄA™1ÿÌT'Apà û ÄÉ.¹ D ðgj‰¨N¨SWJ/˜(4¬‰ä…pDËÀ´Õ Ù^K­µØ0¶à~+­¹ÞvëÅu¤q®ºÔ>[bµ^Äq‚ôÚ‹oõÞ›¯¿üê 0ýî[ð¿ë‹ðÂß+¯õÚ+m_Kñ W1Æ ”ŒÆgÌñÆ"—lqŧLÀ` òË0k‹/ª¸ óͦÐ' "Î@-ôÐDmôÑH'­ôÒL7íôÓPG-õÔTWmõÕXg­õÖ\wíõ×`‡-öØd—möÙh§­öÚl·íöÛpÇ-÷Üt×m÷Ýxç­÷Þ|ãÿ¤À߀.øà„nøáˆ'®øâŒ7îøãG.ùä”W~xß%þ-ÒRd€Ó 3ˆ>DF0qÄ¥`„+XtÁH@„ÅÀB0Ä€Sê«O$Cì ›^ºCš‡dÁ-P\äH!™!ÉHL’@H0’‘hL"ÃC0HO†EEL’B ÞW ´¡ýMܧ/ãKO½õ%ŸÑOXpQ,‰ˆÞôª‡ìio9€$¾ú‘Ï|0ŸCv €‡¬/lxßMÈÀ‡ƒõà$ è Ìb·¸"" GĵpAB1‹Y8Á!P˜E(na‹‚<¬¡Íÿ$b?bk˜$Rà(…™ªóž#AB#’½Hï hjïHP[V‘#œ%La 8™‚Qà $±@I à¨I î rÇ LâtˆDJ%"HC8d÷´'L%€šÒÔ¦‰|)>ß×S2ìT" +AÓè6¬Á!Fð(E F‹´ m8¬0ø×[z4‚€œ%X%ðÕ@¬ä,2p\Há¦\}AnQˆ(À­m…+(f‘ƒ´#=5àG‘€€ ÿ a«h„R€Û2gqÀÓ½^Dv¹_Rê7Cw¡àGíÀíH(p×f…Ä&ÞßZ‘•b®?(„ ÉF‡pAo¨qnœcãXÇ<ò}ÜãÙÈE²‘g¹&;™qo˜Àâ`‚.DyÊU¾2•­,å-k9Ë]3–¹<æ/“9ON³š ׊™àom¦2œÝ>ABBDFFHIIKNNQTTTVVYZZ\^^`aacffhkkmnnprrtvvxzz|~~€‚‚„††ˆŠŠ‹ŽŽ’’“––˜šš›žž ¢¢£§§¨««¬®®°³³³··¸¼¼¼¿¿ÀÄÄÄÇÇÈËËÌÏÏÐÓÓÓÿÀ„pH,ȤrÉl:ŸÐ¨tJ­Z©€¬vËíz¿à°xL.›Ïè´zÍn£…î¸|N¯Ûïx:<Ïïûÿ€q{‚…†‡ˆ‰j„ŠŽyŒ‘”•–—]“˜›œ‚šY#))i ¥aj£c ©s¶c ‘_®ž]ÄÆZ #i)%#¥¢¿`´j )¼a¤s%d!|fé_ßÙb!¥ )òYÌ#íiç¶àÓ×eÛàÆ` 'Ç™ ø¼#kb—ìicØ(ã@.üüâD ”Ȱïă&S˜(aïc– &QhȲm€9ÿ*˜<Á ‹Ð'*hAÌBG“À@3KˆˆJQM‹Ã0J”è`´Ä4³F–<™2À†Q"¸hpb\Š 0G™8ñ@ˆQdu¢„:/ø¶Z•Vå„'†šhÜ…®NPâƒI²#Y†@àè Œ-n>©½ôÓ"ª‚´8e]HAÀÀƒ#<Ðb@‡ vÛ¢¥õ4)44ð¼9E‡«–&À‚½Ö±§mbx‚i;”hð@ƒÆ”¿€0â0†´6|Ñ,…íè­]ðÀ ‡=€”hàpÂ¥DB HxöÀ8‡]4Mo%ÿI ðÀ[ÂÉÕ…Ü ˆKoE4[3íHA¤tÔáÓAfmüwÎ7€Z…fQ\ðÑ¢-%œ —i¨ŒBĦ]Sd`©¥JXí”9¤¤ÆDT1UÁ9Àe¡^3AZÀriÑ7ÇM0MueaØø¤Þb~H‹F^ Hg  t$ôâl´H  •XYA ®Hãã—[¼cœPJg¼–…EJªÚ_}þ@Ë(ÙDII¿Ø…Þ–ièÚØ¦œÀ’1} hžsÂ*lúSj/d ¨XIDúh3I T^w¨”¸úñƤ 9G6òˆT„!ÉÈFúa‘ŽŒ¤$åÉIZò’f¸‚&7ÉÉNzò“  %(ƒ!ù<,MR† 3 %#"+&$-(%(((0)'4,)<$#9/+22-<1,221<<3J B5/D60F81K;4Q?7FF:JJ=VB9ZE;_H=`I>SSE]]KTTTdK@iNBlQDpTFtUH{[LbbOdePmmWooYuu]bbb||arrr†€]N‚_P„`QeT•kX›o\p]¡s^¥u`­{e°|f³~hÝêò‚f••t—˜u›œx¶€i»„l£¤~À‡nÁˆnĉpËŽsÎu‚‚‚‹‹‹ššš¬¬„³´Š¦¦¦­®¬³³³ÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÙÚ¥ÜܨÒÒÒÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ†PP‘•–—˜™š‚“žŸ ¡¢£¤¥¦§¨©ª«¬¢¢)­£¸©"# Ÿ""¦  ¥´¢¿Á£Ƕ¼»¯¡ X'§D>§3H$I$B©"5IŸè1¦!Iô¥Gjȯ(yÿDáȇN;ß@0Áà” çÒ­+à^TÔµP? =y8ð)  ~ 9ræK†“pœDDJ+8¡B¥„§Tœ`¹bÔG•¥Dj¸Ñ‘IŒHð”¡HVjžh†*éi€Œ$In8Û'eMZÿ<´€  îšE«Ö…!$$É@¬§B’‚ÓáN(Yˆ˜øq@â<¥ÈÒ¤Ã*” ÒÄ„ ¤0Œ@aêu2* ¡+ÉŒ g„9–0ID`8b@„`óW®§Ô>€0Â(ÀÀ…÷„òȇ$v×Ì1„ÂÙ|ªY»†…Ê.PáÆØt…Ô¤¡õ xëˆp!ˆ×Û'8ààÉHà L0¡ÅL,1JI$Pƒ $A‚ 6(M`ÍÄ$1]H¾…“(ñi†j)Ìè‰~ü áÉ; CC @‚e‚¾‘‚N£(1‰ÿQ@ÁÄ(!m€„HH`$’(9#щ $Ñ G´Ê$û“Ù|6ÖˆŸDðW1è _"ˆ—'8Üà‰"’r@\¦ä€C‚êð’ž¿‰ˆG[~™€— &)dJtXøpÁj¢‰_TppÁ{©ðØÑˆ$Ð Z0„ ´*CDàN$0„‚¥4gJ I°N>ëäº+wH†òj¬®âPÀƒQ E™ž˜Åµ×®Ði ÷yÂX`1‹*¦šÊ ZGÃÝItXbé€UCØZ *HõLPð¼hÕ‹l;¡ ×.kìa ÒÊä0” ´ÊÊ úðx([¬ŠªŽÑÅ ‡,òÈ “lòÅxÒB;¤ ÀÊ-«Ì²Ë0Ó<³Ì1¿|³Î9׬ò$›-t";(à¸PôÑI/´ÒF?ítÓQSÍ4ÔWO5@íµ×G#-H،̓Øm6Új§}vÙn³ýöÚL!ù-,MR† 3 %#"+&$-(%(((0)'4,)=$#9/+22-<1,221<<3J A5/D60F81K;4Q?7FF:JJ=VB9ZE;_H=`I>SSE\]KTTTdK@hNBlQDpTFtUH{[LbbOdePmmWooYuu]aaa||arrr†ˆ€]N‚_P„`QeT•kX›o\p]¡s^¥u`­{e°|f³~hÝêò‚f••t—˜u››w›œx¶€i»„l¢¤~À‡nÁˆnÉpËŽsÎu‚‚‚‹‹‹ššš¬¬„³´Š¦¦¦«««³³³ÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÚÛ¦ÜܨÒÒÒÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—Œš›œžŸ ¡¢£¤¥¦§¨§)©Ÿ²¥"# ›""¢  ¡®ž¹»ŸÁ°¶µ¡ Z'£F?£4J$K$D¥"6K›á2¢!Kí¡I6:éÏœëðyÊ!/ܸr¢˜`0ŠJpâÈ8—.)JÜq"8¯š<ؤ@ÿ6aÔ¨ÒdÁˆK&j2Be   X±RBÓ +P´déùãŠÐ@”x Ž%H$hÊpª3M+;qÔ4`Æ’%8Ñ“ð‘¥.Hî; `Æ Nnÿ»~ «‰BJ–ÈUS"KˆyyP&€-FL¹ ŠmšRlyÒ¡ŠJXybÂPF 0â3¹ŠÔµ„Ư °fÔº€ˆ%"0$¹  ¤i:›VSg@„ÓÝÛ¹wkú˜äòYê(BÁ«¼Ð£Ko²‚m“6n$ã\å3*C\áý #9!n‡ÈN{SŽšŒ „{°à„\DáDŸT°D6Ü€Àüà€Ì,q•J³`ÀÊaTÛ'Fxr^dZ|–BŠšÀ'_š @85Ø`ãU}ùWÛV Äô RHÁÅR8ñ F(‘‘ÿðèãGÈpÒWKÜ@#z_''¦ÇâŠîQQb*2R€ 0z‚‘•þ½¥I8h"† €–(:ä Cž;˜§m~d˜lV&P%`)Ê–X]À?\p˜^º÷„\P)eÊø 4@B”qƒ¤Îpœ³D `(ĉ"Ã$#9°Ê:˜Šj©90‚^¢Á‰ Z4Ûì )d¡b{šp€E³­˜Ò©?~•/Ó%±Ä>~&NO-QD«¡ BRÉ,Aø ûÕº¿šÓ‰nãŽ&nHÄÒÀ©Щ¨,ÐÀ¦{¢0Ã¥L`ÃWlñhÅg¬q*hÒ‚AIRLBZLS\PD^SSE]]KTTTSE`[Jf\JhPW`T[bY`g\bjdK@iNBlQDpTFtUH{[LbMlfPplSvsW{vX~bbOdePmmWooYuu]bbbdjqhnujpx||arrryZtz€{€…†‚›™2G€]N‚_P„`QeT•kX›o\p]ƒou¡s^¥u`­{e°|f³~hÝÝêòê&&Ú8Rêii€^†‚_ˆ‰cŽd’g”’h––j˜›l¥r¦ªuª¯x­°x®´z²¹}¶¾º‚f••t—˜u›œx¶€i»„l£¤~À‡nÁˆnĉpËŽsÎu‚‚‚ƒ‡„‰‹‹‹†‹“–”™–™š›œ™ Ÿ£¨¾€º¬¬„³´Š£¤¥£¦©­®¬±²³µ¶¹·¹º¹º¼¼¿Á¿ÀÁ‚¾ÅƒÀÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÙÚ¥ÜܨÁÂÃÆÇÈÌÌÍÓÓÓîîîòóóÿÿÿÿH° ÁƒGò %™`Å:Hq`€‹3jÜȱ£Ç Cf eGTœEðà…§ƒÀ#¡Bµ¨aÏ”>¢êÀØS)Ôž=6 nXõêS$W®Z=Y‰Ó@PèX…TÓ‘X³jÝÊqϘ ¦˜Ü‰gÁ QSdèÑ#°ƒ¨PEpÀi`cP nˆµÃÕ#Tœ,€â*Ç®x,ð䉇“¨\#KžœÏ¢2L Å`ÁPâì8D”K·E NaK‘a W^ tÐ**&V?uÒá@ åßÀEÒyãV3ë³äØhCŠna¨f}á‚IH[)^©ÕW‹:ÿi…4ÒÕàèÓc”C<óæÎ82ËmÖ4tçЯ>qA«¬"Ðk›¸"Û@1`§ƒz Ç^qb‘Á£!ÊòÑ~YhCäZ/|À‰'yâÊ&1¢ÃŒ¸Cƒ4N&Ç€6E%•ˆR‰t Ð!ŠÒÝ÷A†"  Å‚XvÛ-@…+K DUyçÕ¨eVªåÁ@ ¤ˆ•)C±Äâ@ 1ô6$­ä51pàÛ–x†4™|VdA:pâŠ#eæi¨Gk¤1@Z´¡¨@X$ºè‘>J©¤bz©¢ U:)l¸!F¦–Vz詉€…¢X¨¡*«®®ÿ:A«¯Î+¬µÒºj±Üjk®¾êŠê°@ª†«Æ"Ké±"$Ûì²Ê¶m±<+­µÌ:{'±ÜniA,t+î¸a@”'á’«î°4$‰˜H´î¼ôÖkï½øæ«ï¾üöëï¿,ðÀlðÁ'¬ð 7ìðÃG,ñÄWlñÅg¬ñÆwìñÇ ‡,òÈ$—lòÉ(§¬òÊ,·ì²– Ä,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ5k¢ ÐDmôÑH'³Ð/×ÈôF0qp&¸ =pu"­D`D@˜ðQ= xÄ ¬Àp^ƒÍQ fW½µÖOkÿDA*J€Dˆ }ÈB$’@B"a$ÒF+ÞÅG?$B ’{tH˜áøow¾Q—ޏâôÑIPÒ(€~xâ0îø!€È䡎¹æ+˜~Q `ôyeŒþ›ïÀctó©ßžHîB2Š*§¤À%¥”‚ÄEJ”rI*¨Œï‡)臟îFªãθ!d$b ±Pˆýs_½F»ˆ¼ˆD¡m™#Añ¢gWÔ@y k^¼à…ŒPp€<àEL0! "— Àÿ.RA$Bƒ¨Þê°§ U" PAh°À]„ ª° HQŠ\ ¥°Dÿ’0=ެ 0A¦—8/œ``¸Z"¾PJÀ¿`„Da‡CF„HÀnià/òƒ¹õÀ‚!2ÒÁ.~1Œ)Þ!zÐ!`1zf„ x¹#&q‰­ÓD)´–‘¿.8ô^NQÄQ‚+œÞ—8 ü ‹?ø£1R†2\$ˆ(¢F¤ I¸’hGN„a HÄ JyÊTÆ-ý“^€DÀÑw[ÔHö6âȦbzLxæE,‰ÉA\¤q0ÂÀÍþ”[  ®ÇEmEšG|çDü'9‹×¶× ³‰àZ‘ÿÌŒí’~³!$¥ÍJ“£Ãf¬ 5Dè“”¼HÈp ø²# pàGÌP3pô Ì£(}Y¼ÜÙSŸÈg ÀÏŽüóu*˜A*ü t E´D)f FŠ›ºû¥P!Ô3ƒ Žê…B˜`ŒKÄ 0SzDéB"„¸Ë%nªUÍ#95’Ô¥"µ ]ª €^$ ªˆk\£pS&Pò"38E*R15¬¨¨,à!–ÇC$t$4ááP¿D ª9@ÞÇΙÀcl+ÖÅiŒ‡M¢aa.°u^D=ªV$PŸ6ˆµ®Å QUÉ×q5-=¶….b…5 a·èíoyë[à ׸Å%îpƒ›\æ.÷¸¼šÒ¦K]œ¡!WPC®pÝìn·»Úå.và ÞïŽ×¼ÞozË«^5H·ºð…ovµ³ù† ¾Çº¯ì‹_úî7¿ýÕ/ÿë_û - !ù,C4Q†3  $$%+&+(((2*28.79.8111<0;<<QDDDKKKV@TXAV[CYRRR[[[aG`dIakMivRsyUv~X{dddhhhttt{{{˜-=Z~‚hhÜéòê&&Ú7Rêii‰^†aŠ‘c–h“™h–œk™¤o ¦p¡¨r¥®u©°v«²x­µy±¹|´½~¸„„„ŒŒŒ’’’ššš¿€º¢¢¢­­¬µµµ¹¹¹Ã‚½ÅƒÀÄÄÄÌÌÌÓÓÓîîîóóóÿÿÿÿ€‚ƒ„…†‡ˆ‰ˆŽ‘’“”•–—˜™š›œžŸ ¡Ф¥¦‡Œ¢ª«¬­®¯°±•§´µ‹²¸¹º»¼½”¶ÀÀ©¾ÄÅÆÇÈŽÁ˧ÃÉÏÐÑқ̴ =DC= ¤ÎÓßàáÈÕ¦ DGèGD܉Þâïðñ­ä¥=éé=Šîòüýþ³ô»wdˆ¾* ( ºƒ #J|Ç0‘=‚ùÚMÜÈZEDæî­ƒØ±¤É]Aö¢Æ“0cºJIoŸÌ›81Ñ$g3§ÏŸÊv2ë ´èM¡C*ŠtÑ¥P76 ö4ªÕ„S…]ÝÚ1«­ª\ÃRôJ ¬Ø³ÓÈ–EË–ŸÚfmÿãŽ}ÛM®ÝotKpÀ·¯ß¿€ L¸°áÈ+^̸±ãÇäL¹²å˘3kÞ̹³çÏ C‹ ìAÒ¨S«&ÝR -VËžM;Q‚H9بͻwj7nÄ!Ç 2ŒÄÞP£† q(Rº 9:ì0£8"8rD°˜$ ’‚ @€H¾ GÊ ñM¿~µ^ÜÁH†4LGÊA€C X`„Àí@F±% âEP"$ÑÃ! B€A@|àƒ}0ÆH öW@ <`DA´ƒ "ð B#ÿ)$Ⴣ€Ä‹A1J6 ã–\²d6¾à„<:¨à. ¦¸A’&BÀå!‘b> ¡@<ò彨å [~i£ cîØ£‚¸àZ‚FD!n„p0¤^ #H“C$Á!Ðy¡¤ÒWÀ%äpÀ‡&Ê£@ƒk¡A3è0À‘”¢A$0Ê!ˆÀC1IÌ'(À‰¥V[Û Fda@"ºì°oðB¶;¼Ék!²a„ˆœX焃Ĩµür© {]À0ÁðZÂÀ.õ+q}ÄIÖÿö9ñÆ« È)œàq ‹, +˜LrÈ#—Ü2Ëü²Ê.¬ &ŒRóÌ÷¼™È# ÐÀ@ M´A]´ÒH½ôÑICítÓLGýôÓ>g}YÐBŒB×$Ý€×`s=vØe‹MöÙf¯í6Úgk-÷Üt×m÷Ýxç­÷Þ|÷í÷߀.øà„nøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褗núé¨÷ Kü`@K0‘úé ¡ÄH³ÓÎDĹ“¾zï¨ÿ¼éÂï»ìÆŸüè«3üò ýçÒOßyõÖoŽ}ö™+°;÷œ3`û-H”oþù觯þúì·ïþûðÇ/ÿüó !ýøç¯ÿþü÷Ÿ~¬ ‚`Ç„@!ù,oChWƒ(((333999žžž¤¤¤»»»ÀÀÀîîîòòòÿÿÿ´0ÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,$rÉl:ŸÐ¨tJ­Z¯Ø¬v«Ez¿à°xL.›Ïè´zÍn»ßðøšK¯Ûïø¼ž+ïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤l  ‘ “ ´“§•º”¼¹®½À’§ ‘¾ÃÆÇÊȯ·“±³Í¨ª¬ !ù,MRŠH† 3 %#"+&$-(%(((0)'4,)=$#9/+22-<1,221<<3J A5/D60F81K;4Q?7FF:JJ=VB9ZE;_H=`I>SSE\]KTTTdK@hNBlQDpTFtUH{[LbbOdePmmWooYuu]aaa||arrr†ˆ€]N‚_P„`QeT•kX›o\p]¡s^¥u`­{e°|f³~hÝêò‚f••t—˜u››w›œx¶€i»„l¢¤~À‡nÁˆnÉpËŽsÎu‚‚‚‹‹‹ššš¬¬„³´Š¦¦¦«««³³³ÃÅ•ÆÇ˜ÌÍœÎОÔÔ¢×Ø¤ÚÛ¦ÜܨÒÒÒÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§ˆª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÿ)À̵"# «""²  ±ÀÓÕ¯ÛÊÐÏÄòóôõö÷ø¯ Z'³F?³h( @b‰$ˆÔac‰†UÊb‰„ c%±@‡Â_ 3ºÊ1Q AƒùRª\ɲ¥<&Ì¢$àÀ‚* @‹€’‡¬HR´ˆA¤*Vmãc±Ÿ­0-ysIN—X³jÝZÏ•-X,€bÅJ U'¬@Ñ’åì+lÿË:€e'B$8– ‘ *ýèTùºJ¨ª3–,Á!®¢„¢„pñ ”cS3f°ÊŒX1cUŠP²d"€Á«YB¤Õ“W¹ÊžM»¶«-FL¹  ~ªRlyÒ¡ŠJXyb„ÔWF 0BjÁŠÔ`¶„Æ„Ä C j€ˆ%"0$¹  ֩’LYUt@„•èóé­§JQI|ð â¦C$6QtÓUgÛ„V¸’ñ¬²O?'Ö X¨Ò‚<„ ÀØe‹M¶Ùh³½¶ÚiŸý¶Üq·-ö×xçÊÞƒð À =@à‚߀ Nxàƒÿøá†+Þxá‰CÎxä=ðmùå˜g®ù數ÐCà‚xú¢Cú禓Žú飗Îzꮫ>:ç´×nûæyç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/þ‚øä—oþù觯þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€L ÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHšð„(L¡ WȺð…0Œ¡ gHÃÚð†8Ì¡wÈÃúð‡@ "ð;python-language-server-0.36.2/resources/references.gif000066400000000000000000003251201376456405500230540ustar00rootroot00000000000000GIF89a±¦w!ÿ NETSCAPE2.0!ù,,±¦‡   * & 3$1 "7"($561% +%1 2  *#7# 7$$$%"&* (&!---& )$)))"+++#*5"1.'496*$7-6;3)44456859;865>1==84;;;-A0D(/A(8G,;T<>E8=Q&B=(HF-CV*TK,^T:BI3EQ4HS2H]9FT9GZ8JU;K[>S<+Q=4G6EQ=OT>RJC:UA.TH6aN:dQ;BBB@DIDIMKFBKHCLLLGLSNPNLQUTMG\C[XQKTTSSUYVXVUXX\TRYXVYYY@NaHUg@YrB_zL^qU\fR^wDa}TanWgubNAhVIfZTq^MjLhqOnqQoxUvkaWsaNvgWbbbcgiejjmgflickkkblsfrztlc{sisssprzvxy|vpzxt|||;eˆ>k’?p—AsYhƒ]r…Cx¥G°gvˆk}’s|…q~’6ŠyW‡~;™†<¢<¦‘I…¸@­—B³œBº¢nƒ—y‚‹t†šr“}w ~’¢x£›LÄN’ÊQ™ÕEŬFʰ€Y}„kY‡q[ˆp]‰ve…|t|i„\Œa‰’d›i—¡m¤o ¨r¥²x­»}¶‹‚y–‚m›‰u Žz¡‘}ƒƒƒ‡‹‡ˆŒˆ…‚‰‚‹Œ‹„‹•Š“š•Œ„˜“‰“““’–™–˜–•š›˜—–›››‰›§’œ£Œ ª™£ªšª°¥™ˆ¤“¾€º« ª£–°ª¥¥¥¢¦ª¦¨§£©¬©¦¢­©¢¬¬«¤­±­°­¬²³±­¤³±©µ¶¶¶·¸µ¸¶¶¹¸¼½½¿Â¾ŃÀÄÄÄÊÊÊÓÓÓÜÜÜãããèèèôôôþþþÿ5„H° Áƒ*\Ȱ¡Ã‡™˜H±¢Å‹3jÜȱ£Ç™hI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§Ï—ƒ J´hDH“*]Ê4äϧP£JJµªÕ«X³â4ʵ«×¯%6K¶¬Ù‰"µª]˶­Û·pãJK·®Ý…bÏêÝË÷bZ¹€ L¸°a–w+¦›·¯ãÇcÿžL¹²eË2gær9åâÏ ‡6v̥ݽpW «æ(¹³ë×°cCýSòç™õrëÞ½ÛjCGÆ„.ûºøÃÑíÝCªa´‰cøí³'=õê²(*†Ð°±µìïàËÿ?I›äfܼÓçö½ðŠ1cWP ä2æJAúöC\–(?Á+.¸0¹àßþrq>c„0щŒQQBÇÏ9ÆÃ üÁÏsiá„XWEc€xEËÜã" ö„Ã]FÞ§ãŽ<¶IåŤžzì)´ 4H¦‚#Hò7“H:âB“Ð$ø^“Æ 4. ´Œ# ÖÅ Eúðc&˜Ô™yޤÉO<.˜i&„82#Vt?øÈ úà£!‰/¢p>2Ò¨uåØã£Fš D´A„ æáfÒz%ÕSdB(¼×åÐüá––!UNIH—1ÿI ¬ÚM!pqk˜Œmd(>WhP ?˸Ð?„ÂO5„³O}ü f‘‡Rç>¦öÉŰ\0,£/ºpè=öÚ­FŽJªîºìÒ¤Ù$°AÂñbªA0yÚ©¾$ñ “1õ3Àk@0J¿Â2ËŒ1FТ«1-¤ªAŽ,CÐ2Á}¹*4òñúÕ˜Ý#¨ùè“H"Ž,+¢=RNÔ\5…³¬Eq’˜?Žìù\>˽X‘¸ú˜ËZ»H'­4KAAI”Ž„ïKþjÀi¿èé«ÛH[Ÿ”°—T:ùÇ‘Ð8"ßű*BÆ!êÂ2‰ˆ¼ G&OTæ>xïÓŽÐìÿcf=ÛíC3EÐlxQœv³F—¸Ð)Ѝ‹è.mùåIÙÆ$mІԚî»éLðÀ§{Íp£q( Ð娆ñA‡Ì±~üAC Ü^‘dÇ'3A"úC ›UɈËF•ë¡ I|É RDðAxP#Ž®*‘APŸ‚H!dÚ( «)VÉ‹]i ›(‡‚1äЦ¬Hì:‚¸Rjoxú¸Ñö4.È2|„Ì¥.3µ’Ð`‘4qd§ø™÷G(¿ÃãñÌ"+La3—’®]ZóšSée~ÉH™ )=Ä\ ~7É?(i™Ìœ&Ág.ÀmšÔĦ<ç™MÍØÓ—Ý„ :÷iÿQÂóŸI©&=JÐòó Bñ'@Úô¡UB'ê…2ô¢¸Œ¨F7*QŠz4!ŨHÑÂÑ’šTRMiXFÊR§œô¥0 Jg‚¶”¡©NwšªÔ¦7hNyJÔ¢ªÅ§)jPá9T£:õ©ðCªG•ºÔf6ªXÍ*N˜ÀÕ®zõ«` «XÇJÖ²šõ¬hMë)«ºÔš¦õ­p«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯w]k_2;Á²õ°ˆM¬bËØÆ:ö±.H‰aKÙÊZö²˜Í¬f7kvRd²œ ­hGKÚÒšö´{—*QËÚÖºöµ°­bÏuÐÿÊö¶¸Í­nwËÛ‹T«¶½ ®p‡KÜâVö·±­q—ËÜæ:÷¹fAîj¡KÝêZ÷ºÕ•îg±ËÝîz÷»¯ÕnäV3ðš÷¼èM¯^ÄË=È„àaiˆzçKßúÚ÷Êo~•K–Ž„>ö °€l]üêw¿áJÃ- Ìà;ø¶>p|^à[øÂ&m„ÌßÎâ*à ±ˆ»aýv˜,(PÒˆWÌâ‹´Ävo<ëâÛøÆ}1‚NÌ”¤œ8²‡¬Oø1.¸Ÿ’Lä&;yÈFæñ“§Lå*ƒ$ÊVβ–·ì,sùË`Þ²‘™æ2›Çc>³š×\ã4³ùÿÍpư›ãLç:xÎvγžÁ‹gÇ”÷:2(BpàpàЈvY:`XdŒÆÐˆŒÐŒØ@fÑ@<±çN·Ï{ññýä«HÂpÌ`ÁêV#)Gx5E6ñ‰OxBÖIÃ9^yxÂÑ1B'–‚„@žN6oA­—3þ—½|EªûB‚äà¡°6°? lãð·¸ÇMîr›ûÜèN·º×-nw´ãÝðŽ·¼çMïzÛûÞøÎ·¾÷Íï~Ó;ýSöy™Ý—“™)x„+\Á PDÚÁ( `+Ü­ðÁDpЊ…O[#ðDEðŠWˆÂÿ9Â(^1 # «`·ÌgNóš§ÛÝþιÎwÎóžû\Þ„8Ÿ%Œ ƒë%@+ҋ‹ ƒGz"߸ÓqÀŠJ€¨>äÓ«.#!§`QìOŒÂxÅ&lÀSà 6»Üç~îŸÛýîxÏ{Îi+tì\/ôQ±^Z ŒD}"$t%@quT‹ "­¨„ Б°OD£8Â6ñŠp@í$0ÓŒA÷Ò›~Ýà·ÞWÏúÖß=Ò}çîß÷’d£'Å®øúE_W€¢¬`¼ ±ðV< Ï=ØE>–wâù¿6Fñ ~ìéݧϾöÃýŽî¿ç®¿ÿøÇ_ïpÄ^öDÖ‹|lû¤´âã$.‰‰ºžáÿV T ’_ð^àÚ¤ɤ0 ïö¤Q¡í0  ï& Y°¥]ê¥â'Œl¢¦@¦«ú  Ê¡kʦéGôe&Ð2Ωö0¦íp§äö€+nÏ@™ž9ˆ 6 nÅÐŒáv¦å™žŒú ÀŽy¨ðpHŠ©KÚ™›Ú©¥çÊ™SºšKððæ˜è€ªªÊªã'Œ¯]ºàÖ¨¦¹J\FÆ« :ÍPqzù0¦ÆZn饈Pp¨†9Ò`˜”ž`âÐ ™ð ±˜× ?°‰ »è‘Ð(Í ð: åÿÚ¤žz®Äk0 ¡ºšÌÈÐà°šôún\j¯­ ªúš”%ÍP :ok\{I&eœË`}-Å*sÁ`ºH×nì E蹘À³ðð ± @’>ª‹ÐÙ nc[„"  JšŸçê¤éúŸì°Áù³ïF´E¸Ö¨¥H J~ˆ òV¦©‹°U\W«¢Fc¨uÕPa+síÕ@åÖé åæ„ú˜ÿXsNxèà„­§»“û»÷Ö¹»««aC-T& »@ó€±À@Ý ñº@ôð &ð¼Ý0ÀÿÑãÀ?¤¢Kø€˜Þ¼ì …Â;\Ÿ‹dc 3†¼Ùû¹@,`¸€O€ô€óO°Ûkó°ÿ ¾á„äáÀ°ç+wMè}% í»Áø¾Â¿}A¿R¿7eôà¼м`Q€ì¼@&ŒÀ¡§òVÁqwÁëËÁ>ÜÁÜ[ ÌW!)¦~-eÂO0À°à ó° Ëë¼!À Øë ÛË¿óà½KŒ8Œ}:ls<?\ÆâÄBL¼QÄ_¢»P&,À x`Âà;ÇÎ[½a°À%ò¾à Ʀ7Æf\È®‡ÆË¦Æ«ÿAÂIL½ð{@O`Ây ¸pÂ2ÌMl,€%ð»À ,ÈLȆœÊz‡È»5Ä!xü Ø‹ ‘¿ÙKÇ<W¼½O°Å\\ʦ¬¾ ›Á<¬ÊÆœw¬¬[®üZJlY<ÎühÑ\"ÎlttwãÍç0Ææv`·³›Ù<*šoßÀ_I‰ö†4ð¯ð6 xÌ· áÇÒ¦Èô5n8WÓé‹ÓŠný ÜP•XÀ |Ë* ·7íÓïÀ\°»ÞÔñ†Œ±J•”Ä iÙ”¨•’¨•\©¸ •X;Ù“?y ‡°(ðc*”™ÀFyÏNoàЭö&–cY–gùnjÉ–î,oRÝÒT=_á~ÅŠÕë+[ ™ ­©fð¶½ÈŒ YÊŠÓ]ͨÁn o‘]‰«ÝÚé §™šF»‹¶)›Zj˜©™R:N) èà™Éš›ýسɴò¶›½ù›‰;œÅÿyœ¸ÚÙ¯åÒKu»vP*aî ÚðFÚNhÚÝù´Ú0Ÿ+É Úé ð`‘_ÙÐVpÛ=œÛð&«IßIyßåÚ®×Í z´6 ä™©•)ÙW ImÝðvÒFÝL;¡eº š¡o¯Š0Ruâ(žâ bcÙâ»XæPéo5ÓtK¶ ²PcÐÚ ð²ƒ˜ÒHÒsЄH›ªñFà:Îã>žàŠ ¹*“¸™£ùʧ8›®þÖØ o`*¦²j¦hê–*¡âf~æhîÆÏlî/®Xæ­XúFÈà™÷,<9–kð²-.‰@³ó&àí8ÿ½çãôN> G峉äN´S[¥Y×[ÞNo®:q]¦ïF«¶Ê¹âZmÎæožXqžXûVÌJ.oï oå žY‰£þ =û)o†Þ:ëïV¨+¥OŽä>å™j ;ÒØšé›¯]N¸ùæœÞ¯ÕMâ§îZäMô«do¬­ŽX=ëñÆŒBP ¸(†YÕ€ŒÎØÐíвo‘º2ƒð¶DÀŸÑ¨î ÆîèÈž´G› Ç€Ê ²ÎP²Ðíœ>$À0t®Õ>›2ÉOµSËÙÛÞZÝ>ô2øã~XåÞôƸNiì0™¸ÿ.ïíìšž¡Ã¸!½¸ºè¸K ¸³©Ò*¹k ¤ ¥Ü0·€•'Í©„{ó›~ºˆì•{¹2™¹)mê¯aé§µIA¿¦'ÏV®wýnêðx‡ögÏö‰]Z^ægJF d¯Fä÷|_ÆsO÷_Ð%¥mâ®÷(ß÷Š¿ÁZu¯we_U‹_ùÀÛø¦õøùf1ùKeù o¯˜_Zšj¶ô^†ŸžT¡ßú¹9ú^Ot`I6j2=«S®¿ûÛû£Uú|1ö’øfÏûÆooìívçû¢ül•û-Õsç ÁÔ¯ð|ñööÍõfÞñÿæ d€¡ÚoÓ/Á›oˆ ˆÇoëP@¬ÈÌüœåüUý,UîÃH™ ½o4/o'-š е“°¦ÝÁƒT,\8áC„uˆÈÑâEŒ5näØÑ#Çu%xp@î£G)U®dÙÒåK˜1eΤYÓæMœ9uîäÙÓçÏ™® %:P¤6Ï ÑÔéS¨Q¥N¥:UÃU¬X œ´(AF5°Ôεë±àÅZ I!”% Á‡TL«æ¬S•ÈàÚ×ï_ÀC:ȶŽäÀÀ de\ÕñcÈ‘%O¦\ÙòeÌ™5oæœùСAMZ:æÒΩgÝ XˆÛ¸dcÿ&X®dgLg-.!‘á[·ÂR9€¸‡V¤x£®v\¬µã¦Åfýªƒb»-&(²dkWûvîÝ¥§ c²Ý:1(\BˆÈŠ/ØKlÀ‹³o @ Ñø[ç 9 ¦…¾@Ì¢ÅV»*5;ôðCCqDÍ>-4ÒLSqE] ì5ˆ†Àv€„1@` &ØŒ…àzè&ñ#mjk åjî " š,€”3 p` k¶@2.À«%0@»´p,`ÇoÌqÇv¦¤AŒ/­» €/˜À!?|D£€Ô!pЃD ¾ÿƒ¸‘@Áv¼ ‹4ÒÈd› x¡møa†À¨EPCuTRK5u'¡Š"*ÅS[u5¥³­ ud¤q¾ÚIK•Láº:‹ú "'Q29! `™e‚¹‹×=•œ‘LØâ„“ øRâZ¯ÊtŽsݵ׃†1@Y@%!Ô¡¢ƒž©ŽÐAÁALÄÖ@ƒºhtZ%Õ¨ãÒmv”Š\1|ua†vøaSUõ V!¶© ‹Zg¬ÑØMùu»ö"Hö  `0G .mgÉ· Rˆ¡.içׯH›•¨6ƒ-u¾ j¡œHç…øø GEx¹¾+›ÿ> #½xm¶ÛvûT‰U­ømºez±Z„l]:dZ“ccˆ¡í`n²æ–ZbØvúÞA´ð|>HYA3Hòvˆ¡Á½›î[Àå8‘=[´(`¢¯³p® mì ójÇl('!uÅêÖ}wÞ{o)î¢æö}÷»côx›&›3ö!:¸&œpžÖð“™ó ÚY^vvªó%@¨œpŠno!¿9§s¼ŠaÊ4®©ƒq²Ø+§¬>IV=1ÖuíBŽòßAh‡ F©mx d`_¼U9wÅ{ˆÞ6S°CÈ„ÿ3Ä”, â­Khödö$ÄylÈÄ3ÇÌ¥Õ@ĺ‡¹¢¹ü2˜ÚeX™A3‚q@%¦àÆüö¿Õ `záà†[ÀVÀÙ]Š%@3ªºÜIPŒc$ãO h”2¾íE=0ž5ô•¼1Qj!<È@²d„‰‡ìÊ„qAB¾+îˆÉLÍÃaŸ²ƒàz@ òF fî.fªH;‚qº‰4S‚4@ó } ΊÿÂDÌ&#†ôñ"ide+]ù»‰¡ñ•û¤FÎq¡Zd)¹¥-Ë‘]B$˜f.ù—Y&S™<#Å–é°cFSšÓ¤&5ŸÿyMl¾­™ÂËæ¨ªùMp†Sœ'éf9͹°fjàœ¦g;ÝùÎj®SžólQ:é)*xæSŸûÔ=ýùOžØ +âgA zP T¡ …‰@Š1„FT¢ü|hEêP‹öd¢åè83úQb¤9éhIMÍ‘¦ôœ"UiMNúR˜f­¥3½&KiêåT§;åiO}úS U¨C%jQzT¤&U©KåéMúJ›>µ%L¥jU­zU¬fU«[¥žT½Jƨ~V1%kYý"V´20¬b5k[ݺ‘´Æµwkýê[íz׃ÈU¯u£«Wñú×¶îU°më«T{ؘV±+ìSûXÿ“.V² k¬S!{ÙNV³®ªìM1ûY„nV´¥ê,MTŽF,"΢¨¹q<­ÕU!0’ G”"¶ µÈ0À@†Ýšc ]F{ÜP•v¦‰1äB2p–ÉMCœË*X)†8„·É &(vd@'xZb{Þ)·¥éS hSÃ@Q·šDzt©`]o}©’ŒÖv_vudŠXPà@6 ô&8)êU)`4(„ô)Ž2ÄÔ# oäÇÚµÅü“í¶ÃééÂ3h%ŸéÌË"w€ÚÉûÊìiá}q;æSŸBi˜Ã:|ˆýȦLPÃ}4ÌŸvtÿøÃ!憅¯PÉ$§g=P vàI¿oèÓºÌà‘A¡áÏ„ú…ËŒ(XÍ>apJC$8ó_>’ù°%€1HXÁ3y"#ŒÁÈ”ª€„=¤<ßZì‹_‚$úeÓ’`§GéYDH`#d!¨¤Øq§'la!Ÿƒ ¡Ôéê’€BȆ#šŸð "."–pf°ìë“5 …ø4Ì"2"$RöKˆKI ˜†C!È¡b‚l°® ZkèmxŽ9ðœ1.ò"×*À´½ԫİLÿ` ¤'p.)ð8ªKˆÇ³…0€à·àNÂ2p`Ÿ!8h·Ç{n˜$Jò£I2€J2—…íX'€8Osº§¹¤HÔ¤:DœÇk.DºFr$b À@ 9E`G)%óK%Ú+ø;C¹"°ø%X^ÄðûšûIb”r‹‹(F²øEeä¥_̈^zeŒÆÄø¢!©z±E3Œ¥+x6ºÛ§_!4гð¯¿ÒÆÚß*([±¤3ÇÀBG¸SÇ´’G| 'z¬GnôÆÜËG€œ¦} 9{D«€<ÈcH+H¶BH‡„"…d6†¬«‡ HÿvPE‹È5›H¿ŒsØ©x4&vÈ©gDH[H”ŒGXIG0= ±Cˆ`@IšÔ$rÒH5ãHÃr Å‹³O:—œ´Á¡ÝÊ'nHŒ”& `¾¥…¹—‰’€ˆ$P<·ƒ+œT0t,׸а(IBÁ!¶„1X½¤§§k'„ëE‘(ŒÁ¥Œ¬ÔÊ~$¹¿À¿‡Àýà1!#2Š3„òX³­öàH/0‰:ÀíxˆtñŸ´€‹&³2(ãË Ó·Jª¼ðÁ¼°ÂDˆîø¬ñL;X¨ˆa ¯à±q DIƒ)”¸ì4¬ãŠºL°­´,×À:l€ÿ/ GàcÃ) ˆš»X‹é:¹;Ð.ÌòÊóñ ƒ»pˆSË4Ø4%€‹¥1NäTNX /1É‹ªt€2¨k1 ±qjK‹0×R”šKdÊÍóÚMÏrÊ¡•>‘;˜C%¸4Š}1ˆCØ/Šs ±<7>Šq+ÁÂ7}»´ðä ZPA)ÐûÄ)¸–lñ783àÃ"qÒ—Ø<{Á—BÙ—~Y:@E0ªEÿ-5-×И¡à00£™„µÄœa°¢³`FHƒX£ÐÛŒÌ %¿ƒH‹l@:ˆøÐõ1&uRƒ¤Û³XKÿw²O‹Øš®Á$éQŽøQä ÒåêÍÉsŽ"YÒjiRÄ(ˆðà.J¤*­ÎK‘€&<-³* ¼‡ðÒñüS1%ˆÊáƒàÏ4-¯v‚ÑŒ בËÛ¼I;RnT§oÌK¬C¿ƒøSðÓrSGiCT‹°Rñˆ–ò‰ð¾ƒFÌ)õÔÉ1ˆ^=ô9S„èT­OOÀ×UÛ ŒS­6) ò#Ø€\“ŽñŸ0 Ô5 ˆ†r :\J—7H„CÐ ÔàhèØø#ÄÁ@YC°‹Å×c¥×ª¡&äTƒXž5˜†|Ò`¬@)¢žÿ*"Uk½ÖÍÊVZ#‹àÄ‰Ø Y­·K5$°·PÃó|ˆ¾aP±=$ĀĉØ9ò SK%×]…Yõ‰vp"Hk§]ªQQÂ¥ ÅMŒÕ,ý((jÆ“8‡ì j$&fLKhÄÚ‡\Z¦MU¼¬H°ÍH®]¬¦Í¨°=[ó[²õÚUE[·5Uµ¬²µ¨·­Ûˆ[ÅšÛŠ²[¾ÅJ¼Ý+½}¨¾ÜUú[ÀeÛ$\ÅmÃ=ÜXRÕÄ]ÜÁm\½ \†’\Å¥\¹²Ü…â*Ïý\Ð ]Ñ ]Í+ÎU¨ÑM]Õ]]ÖeÝÒM«Ó(Ì%Ü×E«Ø¨ÙÜÚýªÛý§ÿÜíÛÝå]ÄUÀßµÛàõªÞõ§â5Þã}ªä½§å­ÛæuÞáEÃèuÛéuªç¥§ëÅÞ쥩í§ÓJ­ÕêÞjò-à:á"®DA×rBÐZ„ø^ð­Þ\d¯Áy®ŒJó%”î¾ð¯iÑ;Öƒ’œÚÂ¥_• _yÂ_÷bøBà¤íßü0#’‹I O!,„[)^'“€÷kÐT¯é°ÙqÌg¥à“Ð2.Û“/ 3„èSH úôÑΨ>§ºóIbYÄ ºèÜ’†áð5`[ˆ¶½¤@RÚaû]Ç¿¶‹0Öò›`%ö Œ‹Vz%Á»­b+~Üÿ¯å “Ûb+*B/þâ`²£á³C³™É7*6c‹úasª»«äb7.U8öÔS½…(àWeÂ’߇ÐãâãrÒ=Þ›´Tȼ'yãAÞýã¿ù¿BY”Ž)Gvä…‚änZÀWt@”ÀL9W0{’ueäLFˆ+ÌBØÂ=ñƒ葂«‚ù)cR~(SΦ4\Ã6tEp±ƒ@Ù“›eÁ$¸5FÑ2!A=å`®¨aÆ&]¬†_ôEgkô#l$”læ+¾Çp–Çs¾¨t6Èu6Çv.åwnÈxÞ®yV¨m¾¦{ö¯|¨}~¦~Æçþ§€^¦æ­‚6èz¦È„Ƭ…©ÿ†îÈÀ@-ÕzèAßà.‹ †1à2Ã:hz:heb®ü¥SŒöˆÿ/ñ"/’ùY€hˆQ&ér2édrà÷€^é ö 6°SA1‡»Hb…ÁéuÒéY*á–0#ëKoá‚gؘ2D81›{–á.«a<Ò óñ£â‘vꕚèô •Æö¨”à€r$5:ÙXe†c&%(þµî ¶~j·æJ¿Ðb‹ Ñv8PkˆBó ðÀ)²„æäÊ”‰ëÏÂÎéÃæM¿Xc‹8Ò¯)–µ¤6¢‚vQÓu–ã²ë2´Ûž;«Îöl4n[®ˆ’‹ˆTÿ>UÒ§!¿L1*8ë{.dC.`"±ì!æÚÆ&¨~%I¾tIW½¼i;”邨ápÞäé?On‡ Aì„jîlznWBå|À&oUÃÕn¤]êƒèƒ…PéY®e-äB]>0„j„½ãïVïgbïV*fTN'F2ç‰QgfÅç‘æ ÁA†(¢›Vp¨úì­Fo¶ˆaR¹_Ô>Œg()gЫ†¢dnO&g%ibífP þ¤_pÒcú†7 @;ïqãúqeºñ4RrÄbò&ò<…òs”òYrò2²rÀÂò,§òõâr¼òò¿íÿÈs·"sWÒr2 Œ¤°Dó-þ­f_SÜùBHò0Ró2bó1z‘ÁQ›ôˆ`xƒoiëxéiI—iV”ðó4t1z¯DpýˆOÄh¡0¢&0£Ö—Fmn¡qI— J— mÝv@LÅ´o¨²+kD¸.¨Ì´ðpk:ž0›8Õþá5¿=u1JuÚÖ¢kÎç$uÐ5æAÀ“R85<ÑïÎä¿6×Ô2Gû¹7öáAö¢ ¥–8ñÈ‹:L—‚ ö~c, ¡õõHwTóãÉ”Xþ€R)=T¯ µ°3 'ƒ¨‹µ'jí96»ÿ9ˆm„ˆœ³¾|×÷"wzøßA-ÔC½Ò+?Í >ï_ãV=DÆæ‰Ô¾NpŒ_ _ m[Áú»¿L4 üQ¿xï.éä Bˆ èAÌã™w~w3=ÄsMWtˆÂ)¬B‰0qp”":¢ŸÎäYÀÂÿÎå¢ßY¦~»¥÷šŽ…’5Ù56n¨ƒˆðBÏphvÅ2šC ÷³§›´÷§ÇªEñ8ÏdÏ_ò¿Gû¦×V9«Ægz3'ÞÈŸÇÉçÀïËOóÌ×üÇ©úëü˜ ‡ÏýÊ×+c }²2†ÓßÍç+`ý˜º‚×רçÿB ý“"„ÛÇýЩ+0†Ñçýƒ c°ýßç«à_~ç·ËÔ~é×ÆÜŸ~ë·í‰Üëßþtl~îÿþÊõ~ð±ª~ò?ÿ12ô_µöÿ3Î~øŸÿµ~ú¿ÿòwüßÿ{Rþ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒþ\éè±£"G’,iò$Ê”*W²léò%̘2g:äøÑcHš:wòìéó'РB‡-úÐæÍ+92mêô)Ô¨R§RŠôæÒªZ·ríêõ+ذ#¯~Ì*ö,Ú´jײmk’,N·rçÒ­k÷.T¸ ñòíë÷/àÀ5“îlÿø0âÄŠµêUºø1äÈ’'§ll–2æÌš7K¶Ìù3èТëzmú4êÔy ;Víú5ìØ-KË®mû6n†´sóîí[õî߇ïÌúrñäÊ—ß Îü9ôèaK¯ný:SêØ·sïS»÷ðâÇgOþ<úôÍ«oï^<û÷òçKOÿ>þáöóóï_{¿ h€x f"¸ ƒˆ)Ø „âõ „Z¸…j¸aWrø!ˆOy"‰%Zuœ‰)ªÕˆ+ºø"J-Â8#ÉX#Ž96t£Ž=ú8? ‰cCùb‘G*ib’K:ùa“OJia”SZÙ`•Wji`–[zÿÙ_—_ŠI_˜cšÙ^™gªI^škºÙ]›oÊi]œsÚù\wêY\ž{úé[Ÿ z[ ƒ [¡‡*ŠZ¢‹:Z£JªY¤“ZjaÈ]ºir•rú©až‚:ª_¢’zª]¦¢ºª[ª²újZ®Â:+X²ÒzëV¶âº«TºòúkS¾;ìPÂ{¬OÆ"»,MÊ2ûìKÎB;­JÒR{mIÖb»my(rû-[Ú‚;.Dâ’{îB梻®Aê²ûîFÞÂ;¯ˆòÒ{oQîâ;®¾û~Û¯¿Ûðµ<­Á?›°ÂË2Üð±C<¬ÄÿZ±Å»bœñ­s<«Ç¿²È«’\ò©'£ÿ<ªÊ+ڲ˛Â³¥3Ó,©Í7;š³ÎŠòܳ¡?-¨ÐCûY´Ñz"´K3-§ÓO»µÔjR]µ™Wc-¦Ö[{Ùµ×Z‚¶•c“-¥Ùg;™¶ÚJ²Ý¶‘c ¤)ÜË}Ýu7|·Ayë}0ßùýwÀ48áû>â‰ß»¸@;>/äH>ù»•_Žùºšs±çŸ+ºè“^º¿§£Ž¯ê«ÓÛºëðÂ;»³ÓŽ®í·“›»îàòÞ;·¿­ðÃS[¼ñÐ"Ÿ<³Ë3¬óϽôÀR_=¯×c«öÛÓÚ½÷°‚>«ã“ªù瓚¾ú ²ß>§ïéüóOZ¿ýâŸÿ¢ûó¨ÿþ7¨Ê!ù,:ñ%‡    * ' 6#6"%&7,&1 0)"9$#%%&+:$5:3)#=5*677-B0D(:J->W8<@8=Q%@:(GA(IC)UL+]S8BJ5GS?Nb:Qe-aW/j^D0G6!F=5P:+W@.SH5aO7dQ;IIIELQKQWWKFZRKVVU@ObHVgL_qPReTboUevhVIhZUp_MgaZrcNqfWkjf`lsdr{umeyriwwwT¯Y¸`ÇbÌ dÎdÐ eÑ iÓeÎfÐlÓnØfÐmÒrÕrÓvØyØ$jÎ)mÑ,pÏ%uÔ>rÏ0tÒ3zÔ8wÑ:}ÔYf‚iw‡t|„DxÑUÒ8}7‘~;ž‹?±š&‚Þ,„Ý4†Û>Þ-‡à2‹à=‘â@µžB¼¤D¿¨l…™y„Žu‡›~“£x£›F…ÖB‡ÚFˆØK„ÕN‡ØJˆÑOÜH’ÞS‰ÖR‹ÚY„Ó\‹Ö_ÙWÜBáKšãQ–ãR™â[œâ[¤çb‰Óe›ßn”Õl“ÙušÚcœày¡Ûe©èk¦ål­ém°ìu¨äs°ê|°ç{²éD©ƒiYˆp^ˆud†}v‘|g‰€yœ‰u¡{………‡‹†‹‹‹…‹ŒŒ…”Œ’”’އ—™™ˆš§“›¤Œ «™¤«¥™‰¤“« Ž©¤˜°ª¨©©¤­±®°­®±²±¬£³±¦µ¶¶¶·¸µ¸¶¶¹¸„¢ÝŽ¦Þ‰©Þ›¯ß˜°ß„©à…¹ì‰½ð–­à˜°à™¹æ›¼é¥·ã²»ä‹Âñ›Âí˜Çó¿ÀÀªÅë¤Éð©Ôö¶Éë²Óò¾áúÄÅÆÑÍËÅËéÊÔîÆÛôÐÌèÚÔêÖÝòÄçüÌàöËåùÊëüÕã÷ÐæùÔëûÚäõÝíûÚñýàØëéáîãäòçèôæëøëæñìéóæõýôíñõñööõùôüþøòôøôøþùöþþþÿ“¢€>Ä*\Ȱ¡Ã‡#JœèPX°‹3jÜȱ£Ç CŠI²äG"Ô€@¢ Š0cÊœ)Ѥ͛8sêÜÙQ†š ‚®¢I´¨Q…Ãò\Ê´©S›©@ Q`É“«X³jÝʵ«×¯`½6K¶¬Ù³hÓª]˶­Û·pãÊ=»dA6u 4 Ë·¯ß¿Yç L¸°áÃo+LXÓ¦àÇ#?AL¹²å˔ڡ*«–Lœ$]éìŠ2dÄ|ÙŠöI¦e‚±C”‹¹fg³}s‚¹·ïße+|X”t'È‘WêÛèÙ¾r’#¯—èªÚiþæÃäïXZ7þÄ5ÿymL'ööIξ=â ð;sˆŠ£vþñeÖÏ tÚ bÈ'úøCÉZèÀCÖke±#þD2ë¹gá…qÁW\dQ¸ƒOXÍá4W=;á¢U'øiSÌP|’;Úˆ¡UtÎ`õ†>÷¬—5ì£LQ\£?Ú ‡6h© 6쀑×Pˆ9þsMËD3Û xÉXh“ɉÎTˆášhm¡Í›Úà†5[6áˆ9óhÃEZ:YtÑh•Olâ<ÐØaVš¬àrÙøÎ5þäFV8fU?hPáŽ?ׄãO4Q$ŠÏ5…@IÈ‘CM^°ÿê !¢‚ã%:ï4G¥Ð¨3jÌ wÍ9¿²ilYo 4—À¡è=ãè‰>ßð©¡d^r–tkHöÐãßö¼£U°þ‰¨ÍUŠU¦Öiáq•ŒiM 3ÎXª²:oø3‰¬M¨:®MDJÆyÜøÃE°BᎂÇVœ¬„cqòM5ÐÆÎzÕÔcm|‘Ñá¶O‹Ü;_ø“ãUÙôóVè>p$WAaÏ8˜ºl]òF²i4ËŠšF¾¹!ÁÑ^B°ÁH7áNÒMpwH°fmÅÇ&$’ˆÁ3[µ£4#ox$>ÅWìÝ1XmêÍþø'¯~WMÿÝsŽdmŠF¤p¾‰FÔJ¯êòXÑ9½8Ô¸¢·ïX7cmoÙ\¯™l>öØS/°eaO<{¢Õ§dP8jãU&KSµ9¯sϹy?¡1W}¡Ïºï.>Ö"þäº §ceÑo'ÎtãOGxp®å¨7Ö¦`Xž0æ™_x±Yd¿N= ¦ígdÞs‰8Æ‘F£H¤/c5|3dtè'‹ÈdŒKÊ 'Ø@Δ’E<ÂCëI^¿|×8*ø#JÓF!¢Æp(bxû²žÖ²Ç¦í•¥{T V%þÐñu¦`ŠBN<q•(l#9Ñ€‚VÞ ¨u½ÁQ•Z²¤ãoˆ,Ž(?ÿê1Á|MNUXÐn¢U *èD´ô5–á!^V?²†=¶ÇƒdY´ ”œ-šîZ‘ N&ˆ…iå _MW® ÃÜ}á9rÂÂg*ðÆ,RØ£y˜Ó¥± K@Ž ÈBþò‘$Œ!!3–DÊÀ‹KXZÉNzR.“ä #E‰Hà’™Ü k>ÉÊV &”mÑÊX”`ÊSbr”?s¥.wÉ–>e¾ˆE-mi _\ä( †2—©Ì§8ó™ÐŒ¦H|Y”`s˜Ä4f0ÉÌnJó›à gS¨Ik èDç%‹yL‡,"Ýd¦8çIÏzNSCF Æ.ZÿMuúƒÛLæ2‡‡ £»Hè.‚1Œä"=F rà$t€9daÏŽz„Ié,.ÒžÁ)ä4(3Œ ŸþìF;ÚÒ$…!Ê|A:Ñ™mv䀂ñxD§µÆNŒQÀ ªF\ŠÎ ¨é<JñÙxÆ3!-­@-e`Ké,4 ,m€M½:Œ ±` `Uœ{‰6UPŒœUª€ÅˆÀÑh¦Ô" eëJ[ºSÊÀd]¨&€<Ó,ÀÀ jAŒš*32à3Ýš‘Áêá"·dàŠ`˜â AD‡`„`ÿ"HÀ"êZŠú€ ,l!ƒ¤*U·4X(0jpÕÊ`¤¦.PWŽèBØ•Amq\Ę 0Êj"ö"Šõf{É_Ä–ApZ§Và8FÕ: Nb@,D0F5%D;3P8(FA;UA.TG5`M=EEF@DIEJNKFBKHCMMMBJUNPNMQRLP\QKCRMKZKASPK^SC\RNVVV@OaCSdDUiG\oITeIVkHXfIYkL^qX]gUboUfuaN@hVIj]Uu`NseUjkf`kqfs{skbrpg|ue{tl{ovvtvyzxpS®W¶_ÅbÍ eÐeÎlÓtÖ$lÎ"mÐ+qÏ)wÔ6{ÓYgƒ]r…hwˆo•t{„r{‘G{ÐSÑ,…Ý5†Ü>Þoƒ˜w‚Šs‚“q…šrˆœ~…“{‹–z‹œ}‘ž}’¡H‡ÏJ‡×BÞZ‰Õ\–ÛLœãW›âX£æb‰Òh”Øs˜Øx¡Új§åwªåv±é„kZˆp]„tc‡{i‰raxhƒ}y|i‹„z•l›Šv Žz¡|‡ˆ‡‚‰–…“‹“–Š’›–‡”Œƒ’ˆ›Œ‚š“†˜™™ƒ”¡‡˜¤ˆ—¤Šš¥‹ž©’œ¢Œ «™¤ª›ª°¤™ˆ£”« Ž¥¡•¢¡ž«£‘¬¥œ­¨”®©›°¨›¤¥¥£§©£¨¬©¦¤««¥«¬«£­²®°®«²³±®¤³±¨µ¶¶··¸µ¸¶¶¹¸€Ùˆ¦Ý”ªÝ˜°ßªá‡»ìˆ½ðš­à›¼é¥¶áº¾å¿À¿‹ÁðšÁìœÊò¿ÀÀ§Äë¥Íò©Ô÷µÈê´ÖôüÅÅÅÔÕ×ÅÉçÈÔíÉÚóÐÎéÛÖì×ÝñÉèû×àïÚèø×òýàØëçàêèçóæøþôíñüýýÿ—]H° Áƒ*\Ȱ!Ak­U£F±¢Å‹3jÜȱ£Ç CŠô˜ŒšÃ“(Sª4âÈ—0cÊœI“ãÊ›8s>lY³§ÏŸ@cêÔWц&¤æl™Ó¤ ­±òjÖ [¥± ƒ‘‰” `ÊÝ8ô ƒh:¹jËÉ`âÆÍЊ¡$þˆÀG#15¨ƒòŒb c+ª3”€½¨Åúp€—C/NþµR«V±,ˆãEDg§QD@×â×°kæ´æÔk¿ dhŠG !¹ ¢q‰¡kÖʰH‘ä™Á¿z{Ф´''¶^›ÖB…"¹~ÿñ5m‰Ÿ%'‚ì¢V^,hl¡†«`"'hø¡Hª (pÛ€!SÄEp% óQcÊ "4§QNÆÀ…A]sÆcPpp€-¥Aœq×ø ØVtyay”!¡\L@‘ k¼LÃ^(NzÄ2# âØ/ DE 4Rs×PÀ' Xb—P@áÇ/PÝ/Ô 6LˆÓ/$2Ð0«Ä¹Ë4¼0P3Ì`fý±v!A,ä ¼x@#ù ¤5JZC >Â@Ñ(8B䤭Q¤$5=,59éEXQ Y¶Z\®QÿäI^ŒIC4ÔøÀjF9±YÈ@^ l Ç]£ì™Ù5¥ :5Ô°"Çt(/NÐå“ôi`œöÈ€Á…Ȧ¬ÅúiàR³W/˜UäCu®¶ q.CQ­Ã@jÞd »]SQ´ñAËÄç5¢à˳ìN[í5? áñGøòíjˆnJ¹èvJͧ´{Jk^H /½õb W"ˆÀȾ4ÃÁ¸òŠ“5!LàÜ@´P#š» ¬5רÂ×@Ç0€…ÅÑ€^0ñ5Îx;r¸&£pA ¸7BL ¸7Y—3F°:±ÿÒ…´b+¸¢+E¸@p‰1ð0ÈíP þ¶´À:Í+Ó VHàÍ  @/^(x§(vqa}Ñ,4Ð%JÀó£*9Ò%@»ˆ€#°- Pe#ŠÀÃ;ÚÒ%•Ó 0˜#Â×BÓЊØw/ùÂ3ýò/EØ.T;‹` Lu¬ŸÐ-QЧè'!g9]H€±(:—ŸR‡:F˜W‡:1ùHÇhŽà}¹ùX‘A Cà4%$ ÔH©r7“3;#%=ó34XíÇÎð2¶@ t÷îPޝÓÔ:§Ø° -—4XðŽ_èz»ÿ#„Ôð:‡Žµp:à²6Á %:>ò1 ÎPRÃ’Å»à"£6ÔÀ ;ƒø}y7[éˆd‘â!I2¹ `«P ¡x. 9“ÁA'íB*BòŠøzò·0 0““Y¸‹µSµ€Ÿ‹ 9µp|PÓ’sxYH&¢C:3x ÀèHBY'“É €‘ÉÈ‘ìA<ƃ=1–œ¢ U“-ç'‰@ @! €Á}`{Á‡ˆ›òB@á/¬ ×Ó=,‰:ô±ñQÊ9 3 P“YÇ…íC ÅÀ=v¦çÓ ´yœÀ’žù#rxå‚(_)@q!œ!ù,„IìZ‡         * ' 4%2")%6$ ,%1 2)"6 6"%%&#)5&2<5)#;3)667-A0D(/A'9I,;U5=C8=Q.A[:BJ3EQ4HS9ET:GX9JU:J\>Ma:QeC/D0G7&D<5R;,Q=4JC:UA.RE3RH4UJ:YF5]M=aO7dQ;JJJGLSLPWTMGWQLUVU@N`HUgL_qU[fR^xUbnWfucQCcSMdYKiVHkYFlZJe[Up^MlbVrcNufWggealtfryumdzsjstsrv{vxxzwuyxtzzz@„G“R¬\¾_ÅbÌ iÑeÍmÕrÔ%jÌ mÐ.qÎ'vÔÞ:’àA„¿n‚—w‚Œt†š}žw ~’¢F‡ËI‰ØJ–ÙWˆÔX”ÜG—âQ›â[¤æc‰Ói–Øp×u›Øcœàx Új«èl±ër¬èy´ê„kYˆp]ˆve…}u|i‹‚y—ƒl“‚s’„z•Š~š„p‰tŒz Žy¡‘}‡ˆ‡„Œ•‹“™”Š„”’Š”•”‘•š—™–•™›˜——›››“¡Š–¡Œ™¤‹žª“¥Œ «™£ªš©°¥™‰£œ’« ª¢–°ª¤¤¤¢¦ª§©§¢¨­©¦¢­¨£«««£­²­°­¬²³±­¤³°£´±«µ¶¶¶·¸µ¸¶¶¸¸¼¼¼žÚƒ£Æ†¤Ü•¬Ý‚©á‰¹ë‰½ðš¬àœ¹ç«»Û¦ºã¼¾äŒÂñšÂì›Èó»ÊÝ«Æë©Ëð©Ô÷´Éëµ×ô½áûÆÆÆÅËèÊÕíÇÛôÑÎèÛ×ëÙÞòÉèûØçøÛñýà×ëäàêééôçøýóíñüýýÿ­ H° Ak§P@d LÀ¬ ¥Öx Z à娴 öÈ €Ab^Œ ƒ„€‚]Öˆø‹Ô† ϦÙh1mš*¾¢-¸Ós€DB‰²°Ä–Nž¡´˜µ…O*zNóAB«×¯`ÊK¶¬Ù³EðúJ¥«´`áú%ö ]»¤Ø ¢—@i;ö€bئ1Cìu€¨ ʽù50ïÞ¹zîì¹ hÒ´H‡N“v@×ÍÓªîeÑlZ}”@K»¶íÛdúbÛõ'dØaï /8Í®d§9›f·Ú´j1c>¼ sfÍœã>‹}»÷ïàÃÓÿ®N¾¼ùæÕÒC¨^»ø÷ðã˾¾}áíÛ[Ë?¿¿ÿÿRw߀æ×^€&¨àv6XŸê-(á„~åà…äAè^…vø† ¤á†–h"}!ž§Þ]#žèâ‹Þ5È 242£¡ˆê]јˆÎЈÌt$†ELPLsÄc‘Bk^­2Bf0N(JTöÒ“Xš±G|ÃåGÜ .^¢7ÍK¬GPz>„9À9Í ¨0MŒõCt}±å4Qåå„`'L3§¡÷Ž#®wæ ¸àâϨ9Ü™ijèöàâ ˆ’õ#hʼnÚ4Ó Za@ÿéAÔôéŠgº0PTŒX# #ñJe8Œ0™5œ¦—Ù©÷©WQÕÓ¯Á¾2 )"ÀB‘[x1(K€1ÂE^‹¤ H@Ä.ÁA×4_ŒkD2£±°DXéê{Å,¨XÅ!0ÞB“Ä=‘2‚F0 –@µjuk„è*ÐO‹³€Il@"ÖDB @КÕ@>«U¿Hj̱ljBê¶O¹&€Id[äkÓ\ÑIìòÓZ© S=ý…Pÿò:µxsþ –Qkõô‰Rt 9ý ºm-^€€·­õÈôÖI, Ù‡BÁ_à_þ‘îGPùâ›ÝS]Ižs弌¢–VÄðÙ4F%ò¹xVÄ–Q^¸â ½®u¥1 0á†gRÀÅýú^ îÀK ôÁÀ;Ó €°¸¬'2A’þØ„çMnVÜVª'8Ô |ÒJZð½ð/<¡;àˆ¯}ïÃÀâ´‰r^¹A´¢ŒcIœšLP‚ÓÈùÿdHCc`ïÖ› k*H¹£-EPÓ€ß:(­‚§|VKKé´Ò–ž@cpX|”÷•¨ÈÀR›Ð\L‚BÓ4´€rÅæTâÂahÐ3¢qxGC¢¹²ÄžÜ®hÆÑ¤¡Ä‚$» â ­è9@}ÖÒ"oF¹¼kŒ.Ël§­Ã‘*28”c?æ•‹@ÆPìÉ(WÓš@2ÎQ²q pDÑ"ÂPÌ·4'¢€¯Š”ô #AÝlÒ7{q”‚˜Áž<£Uï¡æ˜Ídzó›à §8ÇIÎršóœèL§:×¹6¸óðŒ§<çIÏzÚóžøÌ§>÷ÉÿÏ~úóŸ ¨@JЂô M¨BÊІ:ô¡­çèQ~ÒÁŨ$aH賘 çEáépÄ Ý°D<áQ;¸Ÿ›è†#*JӅ¡ú°CMñ¹~øÔ§àØD?´¡Ï}ŒcžpðéIÝ)T?°a눧:~êSqØ“ýÐQwÊÕÞ”öÈiWé¹}8⬎ (E‹zTy u¨ïjžÚÖwNŽˆD<úRzÖ#c ì?ošSÂêT°ïÜ>â9ˆuø¡ èàF:왲¡ ݰG<0aÔyâÔóˆk?æÚYxNõ¥lHj[=a{ˆ#õé:<:vÿPV¥(G9ì¡ÒIÄÃëÐ)d%KY˲µö@Çaá°[zp#®¿ .béiXwV7µëÈî:¾‘Úr Ã“Àé:–ŠÐ}„žèÇ6ÜàSz”çs`;útø´®ï¤C?Àá‰~ü©£¥«TûZÕ²aªðHG?òñpôPíÁW6ÔC¶ª>Þ;Ú7´—Ã'ê<ìÛØÞ£èØ«Uû nøµÓ}çMûQ ’–U§‚èÇ:ÀM ¢§ü`CŽ×Ñßw(´§Úo#| óº“ý°„„£Ê(ã×ýýCŽÁ`Ò^yª–ˆD&.,å~X• œˆ²…Ï;Õ¹¶aÿ€½°pûR ‹ÃÃç…r™©<‰(÷÷îœjNˆApƒ¼1–¯>zêÔÔö£¬¡ÍqÝÙ‰w˜#È„€ÇKÍ¡#÷# †G–L„GoÃ9Ö”'ýæ+³áüÀ(¬»,`ÓR®P~LÔz,öÕûå1…ÝPóê—<G?äááS ™¯«Ž§9ÌÌã½¢¿ú‡%`œèwz¸ÑîÃ;s,KXâ°Þò¸ûáj‚:ùkX2JŽ5<[BõèeKûÎBܺ•k­íÚ;ÐáÂÿ*<’¬R_»ÉI&ö¯s \í~£Ù¨æk¾œäu$|¾YEt·¿íN’güÑûÿèkºó[V‘T±ð\ƒ!ú±—R7b ©–\Ÿ}åiGxŽÐ1Îï@¸Ðý0²Î±áÎ68⥷0?P;Ò¨{ØÈî0þlLèÜÙtèÆ \üßÔÎt¤(¥q·áir“?{Òï\yjÃß#ÿÚ2§yÍûшT¿y¨‘ 0~ß|^w¶ƒÀDÿòÑ ð6œX‘˜¯G£®pHtbÙ¾ûTÁáˆ÷nƒë9Æ„ãa@äXb>1±£ìˆùbíÞ¦1FƒÞè·Çsåo¸0&Îzä³a ÐûÞ-QáûöÀoŸ· `K$~ÀTïÇbAaŸnµØït±Oç¡Sì—ä:vCÿRz6Сúý`:úìS}Ðý̇}Ro=׌ÃÝݲΩÊí…®! ·w7—_r@St°Vô4Q(QtÐÔ…€ùæ×€°Wúô(€öf؈a6ç$X‚‚‚ó6o·¦&Ø‚.Q Hç@ Ùph,ø‚<ø‚ñÁ ¸Ð¥v Ì ‚®€ ÆÐMì´„V„>f „À î`DLx…É„êã îP„DVˆ…bø9Æ0 Hh ® …ý†c؆QÂMÓ„îàSUè†vƇz¸‡|؇~؇³à Tr„Xˆ†xˆˆ˜ˆŠ¸ˆŒØˆŽÿøˆ‰’ȇ¸0 –h†“˜‰š¸‰œØ‰ž¨ˆwŠ¢8ФXЦxЍ˜Šª¸Š¬ØŠ®øŠ°‹²8NÊ@b@ /“úB!Ðà¹h%¡Ðbá Zâ‹§ˆ G¾¸ I@“T"ª±@T!6`> ¡D_ ^³qŠa0Ï  "à8&²`¿ `°äX"˜“„ä2ƒQ¤v4ŠŸðÏ |"¹ `Lr7ä¨ì¸èƒ/ïB H0.å.âB.Z ÅR²Pq²ãÒÕ¤Xp;€)øè>Z±F» 樒ð2.IÀ>ÐP‘ÿù-#KÞ.ñâíB8 Š‚“Þò-áb‘ZA-,ð'ßR,î‚@G0)K¸Q Ðìø[y Ó0ã- ãE FóNðÓaÚr0CtÃ3$T<ã3Ó° À1@ÐICpù:Z¡-Ð ¾´’Éc˜Ÿ°=I“K#åè1E+€B=QW@{à)ðѰ`¤ò3xÙ3u6 àI ‚OC2& ú“¤b•·‘°`(‘á;‰5Z³216e ŠùŒZa8ÄŽ¿ W  †T=êø‰r@æ˜{c:Øÿ¨Š –@9”=! €CZQ G68d ÀÉ=‘”ÙE›yÙ©9²Š0=˜Ò8“(ê9àž™sÚ³E=¹Iý©KZaK6 <$ñ Ò3 +ºA_á;À#<ÐÐ@]À>Þ! ®@›PÀŽPHiÑêã¥R (¤ÏYEGC DP(ZH=AHÝã Ú@™´žÀ&D‘ž,Ùà¡©~ÿúI=ñ΃¤ÓÀ™xzD[±¥¥´¢{êþ@ÞB ± à”· ^s(Ây(ÐFAB&Ô˰+  5â ‘pªŸAÓp]qHLr¹ø9¸PMÚ“zØ]a¨_¬äEãø Š E¢Ú ¡/±@’X'TšD¶d ÚÌ`%I´¢7ÐÓ^pCïà Ò`…Ê@F¸ñ J:—à ðS¨Û£_F Y°8QGMP ѬyÚ<ä\PI7 Æê¨‡ÄB[PÒê© p]ð 6G£Ñ ¤ ðC¯ ×ÊŽKÿ0 qdKaC6AŽëÚQq¶PóFmôFy ¿ i´ p»²ÀP °[ôq »ø¼)@UÔ¼ : ;0QšKßÀY £Âp#d•0ã©à驨K)LÃô>Âär zð’ÐPP"pŽbK×’¸4¡¤yꡳTJŠrJ€CV@JKRI°8+@°Î¤¿¡ •¢„b ° ß'Up,ÄMó¡ •ºË–Jø»´!¼eÑ^A¼èŠ–Û1žŠ b¨=#>4‹Ô‹¢°Y’Õ»½ÜÛ½Þû½àÿ¾â;¾äKIÒ ¼%² |¨½R¯y¨M±8%aúBYbªà¥Z!¿T°° `&kù~&)`Œ/" I€¾R(‡’(‹b(ÒäEúëûû5‚n xS)¸p ³ «¢‰•Ø­%”["USР¿Ó©¿bD©‚¯‹“OíRC™^ Áò )Œ£‘òB/è¢.։ (÷È”Ny“J9 Yð'ÒpâÓ-Dì.G¼”ø’IÝrã²%§-,°“%Ò/†ù3¼ÁŠbÃZâã`Ò[90š:¡¸Kã0ª!šPKÿÓBC4/ ÅDÚ3¤1°é£a™˜©8ô×øƒ\ÈŠ¢2Ó1¬ÔÁDã5¹ 7óÃañE¶Âp;©0D(ûS§ÏÀŽ'´L¹ šA™©!-s‚$_À©¡£',žDê°ÁÝiH˜rŸùI™6°É¢aÂÌËŠÒžÓÀRƒ8“*52±–/\"!GàÃ$sRBE°™ 0.ãâ¨r @ÏpGEp”kA:Ê)£Z­±ÌÓð˜D7CQñ FZ’×ÜœÜD-G¹<¼cËZ!Gç\"X4ÑÀîÌÕTÌ“ö ·< ú2ÿÐÿÍ$hbŽ,}=^ÁÐ^­g2<=Ÿ¼Ó_QÑÓpÑ™“Ñ ”ËD€$v ÒQ|"éüÊ&íEW]Ç/-À/Mç: Ú“4½Ô6½FE'™Ð[íÓ²ÔšíªQ˜ÝÚµ‹2A]Ö¿:C=¡ FÕHÒ"=žpœÕÐÕIšÃ/-0³%ó cíL-'0 ñ¨£‡d¦PÜað¤R@QÁ³VE ³4KŽÆêx]Ó=!GQäѱ$KÑ0bI˜Ç Ð y( Ø’¡ô–¡¸V‚¶Z‘×·¶£W £c¢Zá§á$é¤Ä=&¸—ñ’]³ðÚdýÜÐMK<-G¤ñ50²L{DÝ&ÃÍÓ¸!ù,NbL‡      - # 3   .!!(&% 30  (&;*""# %) (& ,,)$),,,#+3%.9"1."51&1<#:5%=80)/4+49.82224:9>1<<<<3F%3@(5A)8E,?O,?P&B<'FA(GA(LE,AQ.FY/I_*TK,]T2HT0I^8LVRAB=OB7UK<[L:AAACJNJJJJSR\C[^UETTT[[[L^qSctRc{XiqdYLbG`eIchJgmMjqOnuSsyUvzVx|Xzbbbkkkrpg|ue{vl{osssv{||||:c„;e‰=i>l’AtXi„]r…Cv£Dy¦E|©G°cvŽ6ƒs4Œy8Ž}7‘~W‡~7—ƒ:•ƒ<˜†<ž‹<¢<¦?¨”?±šG€°H‚³I†¹J‰¾@­—A³œB»£D¿¨o‡œvŠw„’q‰žx£›LŒÂN’ÊP–ÑQ™ÕR›ØDêFÈ®Fʰ€Y}‡{i€|…\‚a‰’d–g’˜h–Ÿlš¡m¤o ¦q¢ªr¦¬t¨²w®²x®¶z²¸|´½~¹Œƒx”…x‚‚‚†‹‹‹Œˆ‘•’ƒŸ“‚“““—š—›››‚“¢‹™ ’£¢¬Ž¨£•¡§Ÿ­²£™‚§ŸŒ¾€º£¢¬¤”­¨”¯¬›£££¤ªª¯®¤«««¢­±­°­¬µ·´´«²´³´¸´µ¹¹½½½Ã¾ÅƒÀÂÂÂÌÌÌÑÑÑÚÚÚâââéééõõõþþþÿGH° Áƒ>qÀ°¡C-âÄyÁÐ /¿\dèÅ5ŒÜÌÅpàÆ/‡&ºyƒ…c—0cŽXè°&9s8팇ӣ!##+)$-)#"($ +$%%%"%* ('$),*%",($***"&1%-2*-2!0.#30$95%=8+04-392,%2.*2*240+:3-22215;49=;51;0:=94;;;+J5Z8`>f?h#:_47D5:C9>B8>H"b&C=?@?'F@(GA(KD)OH)CY)WN,_T=AD:H?8A4AL:KR>QDA«•FŽ€A²œW¯\¡”Y¦˜^­œB»£d‹ƒf“Šh–gšhœ‘zƒ”i •k¥™l©žm¬ n±£l»ªp¶§p·©pº¬r¾°DÄ«FÈ®FʰpÀ®róˆ^„¢m©r¤¬u©º|µ‚„ƒ‹‹‹“••œŠ•¢šž£Ÿ Ÿ¦§§®°°¯µ¸²³²·¸¸º»»¿À¿¾ÁżŃÀÃÃÃÇÉÉÈÉÉþþþÿH° Á!„Œ(xáÞºƒ3t qȈ!^à·+£Ç CŠI²¤É“( ~ Cð´—à 4ÅFЀ “Ìd°#wÝ벨ѣH“*©¬Y@ƒe#vIZ¹hQÝ“—µkÖNå>yz ÔØ³c¿aíªÊ;´pãÊK·®Ý»xóæí³†¨Ç0áÆ-ÓyÀK8qá¼@¬\¹oß:y-W-ªª~o³NsÜM2ØmŽ×Æ‚¼­k5ÇÛ.EíºÜµAÕ¾=†ÜukWvü¸êÝÍ»·ïßÀ£Êð8.L‘dÐ\7Œ.\ÈÚ¶M–¬H]c•#u¿]Y‰•ÿ£6úÛ °ßb] ;¨’,l棞ŽË›¶öå¶Å"†í¼,ײÄÒ•<ùÜæO=Á%¨à‚ æåDÐxá…0â ‘A8Å0Ѓ`“ÍX—|SZwße_TâaV‘\••4ñ Î6ÑDƒM9•DS&i­Õ•;øtu‹;™5hä‘H·FFÐsŒ“ΔõÑá‡]UâÍ7•dåxQasß ÿ}–€ƒPöb|•”ãM6pf“c9g©5–Ô¡ˆØö·ÀuaFöA 3„ ¾ ®r—k®á–"a®t§›¤Œ˜C·ê8Cr©ËÝîþÆ#8C:б]ïš÷¼uɈ(RÐsœ£¼è¯|K ÝîV»™¯~õ›‘ ¤6ƒ/^h Û¼¼@h%#ðj»ö‚í© .dÐ@»"2³î7.´\ƒ Š'ˆ ÓrÁ¼™§]È6XXX.dÛáYø5˜Ä‡#!þP6¸¼”nd(ypá¹ØË{Ÿ¦€ÚîFÄu!›æ‡4À©I–€ŠÇr‚µ†Ly€ñâÈ(»¸b§4rÑòF$!™.d[bhI&½Ú Îÿ‹¨+ÝR•¨.+(`å ¬VÈ6w`pkPóœ=ëaO{P± ^ ;Þå¡s–Rg¥à ¯vÜ/Råx–ïMs|,(ßùÒÈ·æ%ÍYcF¸»¿Žmp`N¥¬È›zåzFêÊXÍ‚½¶ƒ h^S¸ÂŽ“Ñ$%ÿüWä Vð‚Þo™;€Äp†5Ìr8eú¤à÷ÆMî ôÆ*æEWà€¬làkATøp”Y@18À›»²³uÝ{nw¿6C;dtec8€ã6Â1øû;,8½¥8C%D2*w8€Á/\DyŸ…Þg bÂ=°à¬jÿöJ¹Ëî–w`åã>÷Æ-®m2Èù ˆl;çØœj~–~{à¸@Îe°sjüàƒp8þðˆk¼àû4A IïË7ámÍ ½“ð·*¦< iW`>npƒ„7dsÀÒç,ÝM³N›ß4“@6ÀÑÎ ®1§k²Ù=|›‹ – Örbªu°¢GAˆMbö8‰œfæÌÕyÖ~ºž¥.ínP}ô#Ê®‘U±ÅR<Æ”g”•‚àÉøy8+)žñ¬t<#¡*€fS‡•☧ÍÌLw^v"ó™},ׂm € ïhÊ6å;­»ªö*Ë@Ã{Ý!ÿô¥OýNâžœ±{¼ØÐ‡Æí;ƒ_È˃Ã-ŒVµ²5ô'wÍw—Õ?VÒ,&-d³9±÷X]ÁbOã¥SgPÓVÂXç—Q±ƒLndJÀ8GõW@#4ô7f55£5UawKc¤‚µµ|½ñ}x£8¦U`¾Q[cƒ(Ø'2øƒB8GA8„Fˆ6Ex„Jx.I¸„N„)QR8…TX…Vx…X˜…Z¸…\Ø…^ø…`†b8†dX†UXf˜†j¸†l؆nø†p(…h‡tX‡vx‡xX6Ðq8‡d¸NˆhQÀ Wà…ŠpˆW¸K@…Qÿà|˜ˆUØ‚è6À…Z`R‡œX‡6À ®ðpè‡bh³p ¨ˆŠ‰ ·€]hŠp…6€Š|(…¬ø°X…™Š¨èZ¨·à …ЉÄè†Ÿè  (Šn˜.÷r0gÐÒ8Ôè¹p XXð6ÀÔø6`«ð‹° »ÑXŽS ŽÓÈ »€U ­pŽàh°` õ˜ú¸üØþøàÈ´p U ·À™lW;ÍèŒ+—Ñh®0Q  TÀ› š@ ¬€ÐÈ™@ ®¹0ŽÔ · ’é¸ ëX’í¸ ÞØ»0Ž7À³0 šÿðL  ¹  šà‘U° "iÐ8 ’D©¬@ «Pݨ É‘ 6‰“ ’"©鸔šà”ù•þhW9Ù›  héݘ šZ0 ¸“à¸n÷ehŠ©P…PðÖ0‹·À Àx |¸ ·p ”€Š±X…Kp ‰p·à¶x ¸8 ‰9…»x‰5°˜±¸‹–p˜ª`Ž0 ¶àRਨ®p ‡È ¨h TÀŠ®˜¸ˆŠ€I‹5°‹§à·` =`©é„鋎y Š š˜YŒZø‰ªyœP0 ®À‡Lp – Š`Npе™Òi…‰…¤†¦x ”ÿ` ä‰NðÿÐ ³p —ÈŠWз˜YŸVè˜R°˜™“Y™R¸‹X@XÀšW¾XîY¬—·)˜z8 ª€  Š——hšjy ©Ðžª Ÿ‰Y³pº =p™5à†P‹È™…šà ©©Œ³¨¢ìV0…Z0Ù§À‡“ð Wø`žh© –€FðkðíàŠ5…ð¡¹H…6𠵈PŠ¡û©‹¼È˜*Žà»èŠ *…¯` а¥©ù‰ º˜¨°¥ÀÈžX𤷰¤·£T8 ·°¥Ày Rà˜±yÇy¢É)™R8‹Ê覎Kp‰ŠS¨™Þÿ…dˆ—THC Eú 4à¦pº‰ ÊŸ5W§YZ¥T¸‹?Є ™¬h˜”°ª«™—Ṫ«ª–_ª®«”€Žmª¤¬¨©–)¶Šªš€ŠÏé§[(¨ ¨R·p“Š˜¨‹êœ&z†Ž:†:…’ú@©ÿÀ 4°˜…P­(…Œ:§·@®±x‹MÚ«—詧Щo¨NÀ‡³º µ€™€ˆ  :‹•9¯³˜Éú¦žŠ¤K Nà˜Y”hŒ(…Ž)§ÄŠ…Æª‡Èê¦+…Ϊ‡ ­ÒŠw9 *…ך­ÚÊ Þž†P¬ÉŸÕ*…„ÙêJ™VŠ™»È§§ÿ˜²Áº‰³ÊŠ®Éï:« JšÀˆÿ°… œ)K˜÷Œê ¼) N³›…³xø £Uè¬Êiµ k…<ú…¦ø®Ö:©$[¤¾  „0¢©Y˜¬ÀŸó9Œ2ªš1Ë©"ªy¹¬‰Šr» d[މЧ Š~;…6¬½mº˜k«·©¸¶5À¡Âº‰N°·m:µ²ø©ƒº˜[Î ®¼Ø§S¶eH4€­$[²—*…=À±v؇Jµ­›œ±Ë…°Û§{ȱ·‹¹ÄJºdhº¨›ºEÊ­¼[¼ÆÛ»Óº†À›ºg»­«{¼Ð½uè»c¸¼”ª­è‰ž¦+½ÜÛ½kH½bÿ¸¼kkðð 03°½ÞÛ¾îû…MH§E¤ÿàî ­k`¤eO¸„ñ;óû9G¤ òàZý›ÀÞf 2¿A@KL©þ ƒ ¬Àÿ+ó7LV¤åû¨UÁ |ÁqA`,è œ$ÜÂ.üÂ/ ö}¨Ã6|Ã8œÃ:¼Ã<ÜÃ>üÃ@ÄEÄ9œùGÄHœÄJ¼ÄLÜÄBlj ÒÂ*\Á"<ÅV|U|ÅZ,Y¼Å^<]üÅb<a<Æ^\Æf¬ÅhœÆV\Æ|‘¿{3;Æ—*,ÇÏ=c&fFèáƒ8³£? Æ@7–·*ÿÀeÅ5œeXqõ4åó„?„OæEt,äuzÑÅVä6}@ºÓ‰œ*NÃWSäÈb6ÿÃ~yÀBjw„c€}ðCuPVdËGÅwaxcEm KÓŽcrµ“Wip=Ù“W‹ór%ð…%1ps-P[•gˆCLÜJi4ZÒ€>|œYœHc1§ÜDµ€€v%Ô¨Ll°¼e%ôW`%ËFT°ZEô¾§Íb¥d^E­Ô?Tdh,ÿ Ñ_ÕOÃvW ´<-€vù£<ÍÃÑ-4B%t=Zkp#%¤<ÿl`@AU}WÑ0ÄI€TÛ&P\ÌËvá{‚¥K’×/`G~\GƒÀPijUË0UIFH'ÝÈaÕÔmc¤VåEVTH1PdìôT_ÅÈ$EÀœQq]fn­EsÆ P1B:@LÒŒ`½á4r ÚÌôS|äG« € ¼dÍL…ä~#ácD{–{±3j6!=F >/Åc]qI`tIV¢Ò]‘z^ñתæ‹O‰=l¬AvtIÓ¤IÇsàzNkáCéÿc°m Àk`E:`Þì÷P³TK®“KtñКãÅ-|î÷:>´}ÝdãqQÒV>ÓÚÆdƒÕ:Æd³ÊX$y·¦gÇ·g”EÒ>ªdÛû-Xz—ÐÆü4õ·{5XPSdSµyoÖï4Þd,ÖIf"n×–ç~ >~¶ýÖ+È!í{ êó×´U±sà mâEöCxlrr€PvôÕŒQy V°7 õ8osÝOÕâi°}]{=˜M¸Íº}Ëd$ÚHeàuÄ×É—^*^cälÀUGÊôMF DEãèZr§iàÝbÞÍ’Ç:yàPeu8þ§¿ïÝæu‘¾<ˆLäQ!‚Àb€4¾Y¯”6Óe%y@‚õÆ×`=UxDÛ 6H X¸Û>íæWP<}ÀB†|_µ‚"ÉOsƒ£YxGCVXø4 ˜S65(^2$¸CVcÈóíQ/ø4†nü7(þåqáÕ|V!]{>¸ƒ?[5(ßñDÁsŸ`_ÇŸ ë®“ÂÀ±Æ 2F±öRÎÇÆeò ‚= =ûÿÎògãò4ŸÀ6óO˜ó:ÞóiÌó@Kÿ]?ÁR¬*I¯Å¶i°aãak°`!5Rc1ÃK§X|ôpAbƒ•H’ccaEƒ¥3ß'avªòcAælDvñ"µæÿâÝ6YL6øwÄHrJU´5CT-.9ëŽ6ÄÇï‡\õêÓE´ñqq÷(ß´Ó.íÏÎ#/P;u€=€Ç¨£:ÈÆfåÒQ1F;äg(Ï.@1P:Çsù™iœÇ`3=Vg˜¿¶c>,4hg³i#,÷ˆ¿O+oŽïz@]Ó^=­BgÈt*ôWŽÜAô0úÆÿgúC{FmB­3ÓÌoJ;dF‹ìÓ_ý@Äk{%4‹¼;{Ôºl.…¯æFµ7‚–} ²ðaàA„ <ÐÐáCˆ.¤¨P,4²è3&€’/Äq@ÇA zÙ‡€‰A2Ö #@`A…ã <‘ Ï‰u ²à“åÀ*-ÀäòdÊ•›¾T`Ÿ ‹ ÜC Å ’r*Ž%[¶¢K U\¨`s K@"8àÂÝ B͔طïÞ…t Ü¡ Ÿ÷˜ ‹Ò X·a"£qƒ[œ uòô™y™u D¸ô-§ÝD–3åÆ e–ÿ v$`ܹ®¸M±OÒ¿I|½Q/`¿Éê>xññÁ²3îMP5k*ÐÀâòÍç74áÁEÕŒìI·4S§Ö®(ùbÆ-úÐnm{'sËêÀ´|î­ på й„^@¯õ”(é?ù «¯µÅx ³ðož’nl’P¬AÞÐ/³ÅR›;‚p¯ðÈ믱{\ˆ7 Áá2°Aå” Ä®h# TºPA ‡â0 à ƒÌX£HZXCp@ Ð>€#† j²5Pévxã“2¤ÏJ˜@AKÒã&<0ÿ=hÀ,á@¡ßäÀq‰ 17$“SòR7ÀL±Þ€Å ß ‘ÍP (¥ïÓOÐï T´N?u@¬<&ødl‘ÆAj5,ÃÚÙ €uV¤O[”Xp‹Ê#3ýËÙƒÁqA‹|+·pú¶¹sq+W@q¹u÷Ý…´Ý^zëµ÷^|ë•W¢|ûõ÷_€Þ7¢€ 6ø`„q¢„vøá€^bŠ+¶8Q‰ºxcŽ;+ã‰<yä‹A>€d”SNØd•[v¹_“Õyfšk¶ùfœsÖygž{öùg ƒzh›c&úh¤“Vzi¦›vº–_–zjÿn£¦új¬u³:k®»¦hk¯Ãöl±Ë¾šl³ÓvmµÛ&™m·ãænÀúXc 8Ü“Ûl74 N#6ÊC†GzC†v+¢Û¬ZÍÈð¼"Ï&Oy ú(´ŽÅâ¸è¤AÒ0t¨ËH5kñ±ÊSéÕ8ò¸u 4Xä…(YÒu‘×kM¨g¤N€1%ÀÇ=QLàæ3òz‘_8€Zà?À½<À üð>ã Å>¡ò­ tiûP¶9 p!ë™Ö¾Çÿ-$€4’Gf7Ðè Dlÿ >õ?ä^Ê‚ÃJµª5¼¬§Vù ¢ÀD#™Ò “ÂŽl ª»‚»I©Mû“Ø‚Öã6¬‰gªÜš@Á”|)ˆ¢&Ðd ðG‘*ʈ£BHD΃ø4!£™ŽzXƒ Æëy^Nd·mðsÐTéBÁ×OFFÇ=1â‘| ÕÔ©=j¡ ?5¼Åà´)”LPÉ•WµABúHIpט”§pÁX}4D0ÆÁˆc$J ‡Õq0OŒb ¦Ø‡ÿ7AI‰uzÃvþ#Ãúušð"7Ã8FÛ( p‚¢Ðõ¨ÜÑK®@e|j’›N4ûÔ<2…7fNœ`å€ÂýN±êBdB¼5œ ­k …òÐmôÈHNR!’d+!ei/¦*Ä}×tnɆû®=äR|/`>»[1·žwréU¯ÜØÛ^·½¾j“ï|ÍÆÞ™Ù÷_¸ü ×¢,R120o,Wª›‹¼°©cqC ô¦ß½S˜›€ænã‘ÿD™ýåus 8ÊšÕ=ˆ á²hsvÝ”ÀI\R‚æHÀ¶Âõð^ 42Œ$1è@w>·–HŽ mäÔÉΠÿ˜"Ò³^@]ÕÒˆª¹‰­±Yn<ˆŽjµVÀ‚2%! maÁ *Ñ2õUÉÚ}ŸµLêž ×¢òssãýLH&4±Éb@"ˆÎÄ;ô¨UÖ¼®  D ˜hUæ$¸!Ÿ: e,c“ ˆ;#7¼‘eÂP5‰Twc“ì*ì»d¹ˆdðj±h£ßAé:?ˆÂªHt#å=ô¢|eÖèÐZ}tjq¸¤„tèCáÒß²‚ë¹¾¥'V2`‹8ª#6ÇðJ%팛+O'K[BuJЇ4Æ"Ùd p8¸!6$Vo¿#1âNDŸòe‡¿ýad'Uuª²‰  Åôjw®½€G{Ý”Ü~“·µý in)÷-ézË"ûpãB’âÒ åªAÞ¶úž\j1S9ô 2z·¼k/ÏØLd¾·8¬7ß[LvðÜm2øyC:𥘠ý‚vóyÑþt¨G]êS§zÕý!ù,x7º† ! "%$ ('!+)((("1.#41$95%=92*2;0:;;;&B=(F@(KD)OH*SK,XO,[R-aW.dY/j^0j^0ma2rf3vi3zl6qA4AL:KS>RFFFLLLXAVTTTYYYfJd|Vy}X|aaalllrrr5‚s7‰y8Œ{:”‚;˜†<›‰= =¥?©”@§“@«•@®˜A³œB· Cº¢EÄ«FÈ®Fʰ¢n¤o ªs¦®uª»}·„„„ŠŠŠ™™™¥¥¥¨¨¨³³³»»»À€¼ÅƒÀÃÃÃËËËÓÓÓþþþÿ€‚ƒ„…†  …OG†ƒ —˜P.™žŸ ¡¢£¤¥¦§¨ƒ/„9@¯4ƒ,Q˜@/=¦4…FP©ÅÆÇÈÉÊ 25„5 @ƒLJ™¸…ˆ¦>…Q,Ëçèéêà@;‚>@>Õ=>>==„>¬È™ôÁÇwpáøN}9ˆ!ï†"vù!C@Œózðè&hIB,žœ\Dz¥Kc&ÜèA €0XRPᆎ  ¢Ä’€QL ²ä<àêA!F. *Èè%† vÜÀêC 4VðÃBIÿžjeÉË»xóbÚ°ÁjšáÌ[$‘*´U peÐä£Ã \ø¸ÁWÆ jXèˆÜA$Ž´Ð˺õK5b ~!χQ„ ØÑc’ Ńr `*×[Í0.s=p0vì|$Dîiר³ç% Á†ŒÇBÊÑ㢠ƒ ¸.Kþ<(¿Ð† õ_h ¶A#´°‚vxJP¼0@0pÀ =€'€>P76Ѽ#+ š$ä€KLsÜ„™ÉPá°²À4(Àèp‚ÅjƒÐe—D™É+í °€ÿ<óÜÆ?äb“¯$-¶@À ¯T(@€Drƒð2H¾R˜LF$›ó$ 1AÖeäx ¢¾i¹²”ˆ#ƒüè ˜×Uf‚üy!@ ¨!›t’祘Hƒ ?Äé§ †jÈh ¡¨¨¦ªêª¬¶êê«°Æ*무Öjë­¸æªë®¼öêë¯À+¬­M8QD Ã&«j   ‚²Ð†ªBÑVû©Ɔ`í¶wCp+® „㦛¶Eh«î»z5àÀ¡ðÖkï½øæ«ï¾üöëo‘,ðÀlðÁ'¬ð 7ìðÃG,ñÄWlñÿÅg¬ñÆwìñÃÿ†,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬s¬÷ìóÏ@-ôÐ PÑH'­ôÒë%Å@;Û+…'D-õT[ ¯`]µÖérÝuÖ`‹+öØ_—míÙh«½6pÃíµÛѲ-7Ùtk÷Ýiç ¬Ø#Œ=õÔ~ ËõLŽÄP¸áXÄØŽ?ìÔK¡¸–_Þx’wÍDçÉ 9RžìSs®ú°¿.ûì´×nûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/þpøä—oþù觯þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€L ÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHšð„(L¡ WȺð…0Œ¡ gHC !ùK,°Ÿ‡"4  #8!!,<0>  $$%"%( (&!+*)$()))%,3"1.&777-6333778=1<;;;+E 6G5Q+E4E;Z .K'8E'D6:Z??a&B=BNFPJRU[EkDfLp]agh(JC+AU*TL,[R:EL5FW0EY5I]$U|9La>Sb7Yu.eZ0j^ nm!pn$xt0ma3wj6q@??G6FQ=OS>RA?bbF8BBBGGHBJOLLLELQMQT\CZSSSVWXWXXZZZHCgDWi@YrB_zK]pRHn[MuM`nIawVhwjOAmRFqWKw]QjLhaOyfS|qOnqQoyUv{cWbbbkkkar~sss|||P'Zƒ,b.e’;eˆ6k–9p›:w©xÎBqšCx¥C²lU‚v[ˆgv…p~‹({6‡wnµ|s³z,Š‚.…8—‡4=¡:§•=²ž>·¢F„¸@«–A³œ[¿˜Bº£r€x†“g¹ˆa¼‘H‹ÃM’ËO–ÒQ™ÖXÀ›FÅ«FʰSá€Y}€i^„mb‹vl|s×~…\‚ˆa‹‰d•’d—i™n£žp¤¢nž¤o ©s©¯x±²x­º}·½Œª–7º#³,±“1œF—ƒzŒ¥Y•¢O“¡Rƒªe¢šA̓ĈÜ€‚‚‚‹‹‹…Ž–…‘›Š“““›››‹—¢œ¦š£«ž¨± †£“‹ª›”¾€¼® ™±£¤¤¤§§¨ ¨­«««¢«µ«³º¸«¥¼±ª³³³²·º¶º½»»»³ºÁ¼ÂȽƻ¶ÅƒÀÊÁ¼ÄÄÄÁÆËÂÈÎÎÅÀÊÊÊÆÌÒÍÑ×ÕÍÊØÑÍÓÓÓÑÖÚ×ÚÞÛÔÑÛÛÛÙÝáÞáäãÝÚäääãåèåéëëçæìèçéêêíïðîðññîíòðïôôôö÷ø÷øùøööùø÷ýýýÿHð^¼P¸ä ‚  ¶Fâ@$. ‹î·¿€΋öd¯`ˆ¥P`ƒ˜¢@ƈÙ\h,$ÂÆ¼(¬ vA`/6(C‹ZeÕzÿRƒ—º'¬Sc»Ðúß’4lV.)ÚÉ?v­ƒ)¨Çn'ïªÈ“S¥€®V­ÄNýJ¸ºõëØ³kßν»w²pXÿÁñ!l߷߯þUßý$„ÑCsaóÆùÒTžœ¦3AÆiP K#ÅHÚ‚ ŽfÚrè°ƒ„ÂüÓËÕü“Fÿ£@3ú8ôO3Ò­ÔM,Ѧ}À-QáTX¢r4&wAsèŒCŒ^}çã@)äDÞ…Æ‘HHP… (Yž繕žXëQ /ßð–Z*À%Y(±Á‹g½<ñ„Á¤Q /Oø÷~±ÑË@½ŒùY~Á,Ôàž|Šô U®O=k¬ÁF‡D#ÙJ è#LTÍtmF Å?løf<èÔè)7Ö³crÔiꩨ¦ªêªkE‰ƒa…ÿV”mMV•·úU%``ñ:V˜c>pek<€Æ°l,çÁ> §±œõRlŸÔöùçT€š>ÜêS Áè“Ú7{9ÚR0®MŠéJ”O¹}*ïr::U¬æ«ï¾üökdXV,ÖVÌê—z¶öze–[2ì¥Ãb+/svD!aß›iˆ$§žuN´GÕ–ÌàµRe <,I$ÔÐü³F£®ÄË?ØLE[ÍDåvs5úÌ4ïÐ,AÇŽ÷NçïÒL7ít¾®Â Vxy0• +5vaÓ¦|jê'šKé'S0¼p„¦LŒ­±ÄfhLL/zšlwiɣϠÿ ‘ŠÙá1§Ñ(;†s¨ŒK:ð<@Û?¼¤šPÈFôæèÈΡ¢C¾O—núé¨åK6™Ã se«ÂÜ¡ôDbl†X±‹5Ö1ž•Éw œÃò-šqß­üI(GÅ!¦ d˜Z5 hÕ4+Ej[l­a£<ú`ü[j{³›ýáçì¢Ãé©Ç/ÿüôÖâáPÃ3È%»ìíA ÆB…Ä#u{À™U@7á)$Ë‹ AšÜ‹O]Š2Ø’‹)‡6É’IKšÓ•ô M%¢@ ©Rªú¹ð…0Ô­ÆþÅåì©E‚‚Pà0 Ù¡ÿBAÖÈ7ñb‰å(gÄ&*§…1Œ¢§øB),5ìzÃÅÙegˆ!Ñ 0 ±ˆNDNî’€%H+pTçHÇ:âåHxÄ£XB EÓ™ñ€ôSIH8BÑŽˆL¤"ÈF…Œ¤$á·ÈJZò’ôs¤&‡ÉIzÒ“‡Ä¤(GIJ}mò”ìä'WIÈP–ò•°ŒåwPIK»©’•¸t¢+eÉË^ú’.µ &µn™Ëbnn—¿L¦2—ù+a:ódÆŒf+™IÍjRó™Øt4·™FdZó›à´d6ÇÉ÷©ÿÁsúS^ا@JЂô M¨BÊІ:ô¡¨D*I^¬Ÿÿ̨F7ÊÑŽzô£ ©H7w³Œô¤(M©JWÊÒ–ºô¥5b#LgJÓšÚô¦8Í)Ng¤Óžúô§@ ªP‡Z#õ¨HMªR—ÊTs¢¨©PªT§JUª>µªXͪV·ÊÕ“¢$`kWÇJÖ²šõ¬éûjXÅŠÖ¶ºõ­pͪZ×ÊÓ8‚%®xÍ«^÷Z̹®5’8“DÈ×Âö°ˆ­‘_à ؒ* !‰¬d'»×Ųu’ )ËÙÎz«–É'!ûÙÒšö´G m]ã˜Y¡¡öµ°-LU;I ÿ(F¶¸Í­nAJ[ÀJA¦» ®p‡»ÊÞòR#q—ËÜæ:ѸƒÌìØÆ¶YçZ÷ºØ ã¶ËÝìz÷»à$wÇÞòš÷¼ò‚.z×Ë^ôª·½ðïuß+ßúÚw·ô)9÷Ëßþú÷¿°€L-áÀ6êI Ìà;øÁް„÷kàX¥¹¯†7|Óü¦ñ®pÌpT>ƒ¼€`€ŠWlJÀ¨à7zQ•ü Sqš›$røÇnõ°‘;6Â6QÄ-y*BþPŽ2>?´DQÄ Ó€•ª.˜Š1´AÄ *¼‡kÌæ² Ùÿ„Õ i¼æ–$¢Éƒ” ``Eì9ÆžD!ZRH˜øù°çe0 Å-yñÐ.1å–Ü( mÎ4YßìDÛV—sˆC%*!‰°äÎ,yA"F@‹º“¨ÁJ^0‰Qã¹*‚n .‰E`%?àõ%­ƒF\âhD˜Yb€KX—nIŽík|YÇ®4 ’­fû׆´ ‰K c.w²! €j4£%iøÆ»5Mï¨rÚ„qHC]‰| '^ ªg ðHâ“ñðƒ 9HN®W‚h ¸À0€Ì­ãë¹Ï0ˆZLìx(èÿxj 0á‡m7‚_n üfDƒ óJ¾½,Â6¿„ŸcpnÀÀÙ1€AKšñ–¬ߪ·Ô—zïô5ä¶N|À$æ0•¯D%¾C"Îd´dwøÀ”3q,¢?øÍ]Àsš%mg‰aH£!åx×¹0!/ïxã•t€K"Dw–PZ*½h:Kܸ†©{©UÇ·f³Þï®ß:•HÄ$1vÈaÔ“8F]zä´Ù‚.D!büírŸy@ÞŽcš~%_¹ ¾¬ôÆ?[ñ:oÀ%¡{Ý7`×ì¶|âYÂôÏ{Ÿêt­ÿ'‘ûi¢iýÖv–Ã©í°’8´þ5ª~?>p‡J,Àöƒ^É"žß\ü€|@Ç  Pyц|‚‡ $`xÐl‰·x+Ql•·°}+Q Œ¶ƒ>ß‚=zór1r6zG¶d/ 7`j+!“𦖉°/zó—Ðx0vào jå‡wù‡n— r.à@  s¨x—$ðh†€ @1ðk&2o0x7f€pmLˆ Í}x7… 0s gw‡ÆŠ`$pw7Òy,ñtQ'‚zhS$(/¶UdeB õ7j—p«V pƒ¬6v ÿ@{±÷µ6j‡,¡ƒe‹@Àk¾§wÆfue,§D]ö€™XnJ'˜ÐPÆcÆPQ–1à‰Ý¶·Xn–fk†‡{Œ4Õ‡óbû6+ȱpÌ–ŒÙÍ84…W|XxC˜ZCczGÕ%‹‘F psˆ=&ŒêˆSÄhNHUƒ`ζŽôZá·ZõŽPõ@°QX UíÈMVy™ 9afa¶‘9‘Y‘ÕÒ öY)ÐÙ‘‰5n•uPé‘&YY÷ØY"9’$y’.W yV+É’-ù’6yV1ÿYV3I“5y“>ÉU99V;É“=ù“FIUªE”J¹”LÙ”Nù”P•R9•TY•Vy•X™•Z¹•\Ù•^ù•`–b9–dY–fy–_”G¹–G©–lù–6é–p9—)—ty—ôh—x¹—{¨—|ù—Þç—ž²Õà>øØikP'‡Y.â!€ù˜Jµf{! 9â)R)<¡¬¡‹™> ÕРЀ WE#ÑÓ ™¬)TlP Pš½P]ù1!45qU9"<áBA•Â(I¡&MÁm¢XØÀ ù A3XKÐ(„ ²ÔÉÁAÅÚ©Bÿv‰¶f QHÀA­¹ž“ôÕð °šß0Q1ðЫq=¯Á=³Q·/»ñœ¾©!ÄaÏ©FNÑœ J𨀠V  ñ Ø@=R`¡Í0:kPšØð[Z Lø Žy!ê8 Šib¡vÈž2]ïÉóÉSÉB!‚!Â!""B"Qq"–ö+r-ò"1òŸÙO ¢QÑ Ø€*T €1Ðð(p¥ „ sB˜¼k€ |ÓœÍpÐ Ð%ØÀ  Ð  Ôà ÕÀVj[¦©lð¦3Z¨p„!±œS’*ÿC(†‚(ÿ (PA3")GZ)—’)¼Á)8±!žj8ÚÕ ÕP «¹‡±hj&½@=P§hp¥f" ØÓ¡ì‚ lò¼€ @¢Ö‰p¥ÐYÕà5Oðªƒe«Ff¨Ê*ˆÐ𰹨)I4Ù²-Ýò-Á€ÿ@.”Ê~# Ä.¼ñ.ë­wZ®ÐPgŒb¥kvªð:ª£*®ú®£ú¦´ H@¯£Š¼ºK¡Q¯ðŠ>ú >¶¬û)òy¡ð)SŒZ°2-Óm33c.6ƒ3:c©=?4ž"eJºÚ캦É(]ÑªŽ“¡“Ú÷ú« ¨3ѯíÿÖØÉ.š Ü3qWïAŸ ;´4²°Q£X™{Ó7=8˜r3Â@8r8‰ƒ¤Ûå8#9©Q9—™£±žòªÉ3„ÊìÚœÐp`Íðn,ë³ZšžÎi¦(ª1¥PB=þ#Õ\¢*¨¾š«H@§Š‘«H´†[AVê2›õ­Có&ò¥J#¹:¡3Â®Ðæ¡kê³uÚFŠ Â ÷êµÍ0¡0b³Õ€imjº¯a¥Ši+ú ¤z¸ÄKÔAŸ“Ç êÉ.Íëµ…ë­˜"#TÙXò¤Ð[Õƒ®-¡@Eÿˆ ´Yã[¼æ;4‚iDHä<¨1²çû¾[•¾‚¸lÄyð{¿Z%¿ø»¿œ¥¿üû¿yh9À\À|ÀœÀ ¼À ÜÀüÀl•ª%\Á|ÁœÁ¼ÁÜÁüÁ Â"<Â$\Â&|Â(œÂ*ìÁ\ð.üÂ0üÂì4ÃÔ4Á+|Ã8œÃ:|€¤ÄpÅ .;<ÄD\Ä'ŒLÃJœL6lÄNüÄP  õ ÅXœÅCŒÄ¼Ä^ÌKM¬Åb<ÆCüÿpÅdœÆjüÁ\ÜÁ_üÆ™ä†{áa¼Ã RðkÜÇ8ÜÃ~È‚ÜÆ džŒ:`a ÿæXlqÇ9\RÀPÀÇ‚\É$ È–œÉbLÈ|Èžì4H È6!|E\ M@ÉšÜʌɮËEÌÉüɶÜ/‰,ÊÆÈiáÈ;¼Ê²Ì ËÂ\Ì*LËŒÂq½>na™·Íj ¦l ÈuÜ˦ìÄÀḻLÌÞÎ#ŒÌŒõ°Ìd1ƒ!OÀ†KÏ{a›Š±GP iÚZ`š%ÍKœË3ã²Ë­²ÍFÜÍâlÉ=œ ýÐ LÎlÎã€Îb!¹Þ£=¿QR H€­”#árŸHŠ«2Ó+Î Ð4Êv)8 FÊÚ~Oÿ¬ÐÈà|Ó:mÁmÁæ\MP!Ä!"Ú #’9ß úÀ !IÍ €.ß 1¿Q8£XM=*MÃö &‡rÍ vÐ4}Êð!p°Ó}œÓn­Ó=]Á?Ôd.*ä ”Ã8ÄñÿPlr×¶1ó¥ás(ñÜÕì¤ËO°2QÖjáË8ÌÓ%×j ךýÐsMÁmÑ"ýYФÝsJÒðPƒ=x èr2ó õ ÕŒNºŒú &fÖtÕÙÀÁœÜÞüÙ`΢=Úí¤`‘($97ó¦­=ÚO@±õrÛìÄÒ ÿö 2£È2”MÜn-glÞmÜÊŒH K(hp3Š3";"°!3úÀè‚8T ÚSÝܽN}`@ Ѽ|å­ÞýTlÅ.Îì-K€Ù ¾Ð;ª×© °[Ë!Þóß©±£HñÎNÔ|`DQÂ`¶m^áÞÜÃúðÃAü8nÌ>TaQR0ÞáÚ¤ÝbÁ!³Ùâ®ËíÛkõãXžå™äCòÚbÁõ BR¾NÞ­Ëã=Ó¿­åj¾ædÌåBò6dA1g>æàtàU^ÊgÍæz¾çFìætþçy!9ÞMÇoqã|~èˆÿ.Â~èŒn*†žÂé‰>éĽè~éAòè&œÖE–Ê”þénmé˜>êÞ¡é%ŒéLð Þê7-ê¤ëÙaê(üRÐÖ®žëÅIJÞëÝAë'ÌM ëÄ^̰îë¾.èsÜvŒÐElëž^ìÒÞÊÇŽì±NT.æVVNlë¬<íà^ÉÕn혎íT¾ÚŽæW^İÇáþîâÎëA‚Í€ß`EäþK/~î5^À. Jpï¯ÆãŽBdÑÌé®ÐlA¨¡7ГïËdçñ‘ nãήö~Ù¸~ð ÅãŽè@CëÜÎHÏb1ÏóX01¸'úÿPòb¡ÖosfO¿HeN˜‘:ÊÛV!_ôÀ]í$o½Ý=âáË Òl2'`1ócá­A.º½´ÁÕ=Hæã ÈCFö¡.ïfñÍ¡ôa1ÔÿPÔ“‹H½¡ÙÊÔN ÕR.¢œ‘!1µ7ƒï_?E–»ì0ö½=ÙöŽ¿ë]|OÀ¢âöañÚzÍ |Í~ Ø®Ó 2dá`ñúПÔÓý^øR$ʉOöŒŸç_ûÆ®öc1ù•où°MÚÑcÚÜ‚Úi Ú¬Íbq)ìñÙ¦ žÙ!®öŠû‹¯îÜnûØÌ _èÿ²Ü¤ìÜqÑ úÆïÎú?åOÞÃ!àýùÑ?G°¯ø’mýDΚ´ ú¿ÿüßÿþ»$XðÁA„ .dØÐáCˆ%N¤XÑâD^5nܨÀãG!Eöúl šãÐðú‡MJK),›)÷oÍ…%úþ ËÈF0}RÔû-Í7› e'ÒéS¨Q¥N¥ZÕêU¬YµnåÚU+’%aŲ'6,ªh¬e»VÀ[¸qåÎ¥[×î]¼õ.,Ø×ï_À»ö&\ØðaÄ 9.ÖÈu Ñl |ý£Ì­3ÊÿÐ]P°†2¯`™)×SPí_š¡ð2;ûØì/¯±eϦÿ]ÛömÜUqš]‚®¬YÎSÕ¶e‹×øqäÉTÞ¼î'èÑ¥O§^ݺsìÙµoçÞ=;޼¼"¯€Â“% +HAûñA{©õ°Q€_¶Ásïçßßÿ£z€7Ã*OªáˆC»» pÁ·˜“«7ÜP¸>éË:«Ó] ƒ«m±«2 ë„¼+`>0”qFïÀ»ë ±’/$)ˆš)G ƒrH"?¢ @³(¨*Aâh|ë)¢|â%ŒK:(ƒF[0ñòKZ:¤Ž–[¤‹äË?v‹ t8°«LN «F°„¹g'ûôÓ8í±H¨Ö $ÿ$zPFuôQ«ŽDRÉ%tËÉ>p‰'ª| ®D¶œQW\$’RCS:@ ‘\t¡“Zàºæ™»à<áÁ¸2@»K|ët¸øóXdá ´®A!uöYh£ö À:ë‚Ó²tÁc?¢‚ƒ’J$é®PáRA’J*IDEÞ w’ Pa’vßxºV¥»åL,y:[¾Ä–OdÉä’K2Éév¹ä–·ˆ5.>¤à4„aa@¡‘F 1€ ÷„C0¹diÄåF÷-kp]œb’õÂeéjVZ¢‹6úhh™lëÏ>xB†*ã¨ÄÿÞ¨W€tßRÖ¥C *y£ê•„ŽT°aßOú%ZLÍDÃKEY>!õÔRs‘ÎLdyK t¨€«Lú@›áD…@âÀ×A å79ƒK A˜K@áAP@áfŠù&.5Бægع z®¡‘¶ývÜs·Méâú,@‰&¤ø ÊIæ +ë·4°Á :$™¼80ˆk:4@}®èÜþÄ’Ll±L`É¥îV¦Ó>:]2‰ä“·Ø tFÀE¼8[, XŒ-à~CxèaKqðŠ þäòˆÕÁ¥¾PCìˆÙÉå  `-xA fPƒä`ÿ=øA†P„#$a MxB¦P…+d!yw)¦}+\S;ž¨`ƒr5ÏyC»èõ‹†tÉž« Ó0H$åû—ËòÆ/#¢Ï–Ñà —A˜Ldq‚Ó¯îˆü½å~ˆ0D Q€Œ]ï-Œ‹êøÆíD0.laíxG<æQ{äcýøBný JjÔÎ&aø$Bèúw¸¿u%bD C%)€"FÇ€¨Î.`‰Kd2:¹€D&TU±ba±N@œ ê·?6ú@÷ \xp Â¥µ„KÎâò‚=\ ŽÃ´‹áBG?&S™Ëdf3ù̲OÐÔïdÿèØ¡*(À Îõ9L¢ÀZ"0 ‚r @yÀ$Y7X¯‡—å'þ…‹]Ä¢L²jE.17èÐâ®x…@ 7\à¢b¼Õá0Ñ‚ |¬Ë€0ñ«·È‹—8 ú0¹K"…KO@@b5.­{1]:cFèÐDálzSœæT§;Õ)M}úS ÕƒÒtÒ¢ %7…K•l×Õ2À.JíJ„ó:ЮJü°øj—ئ½]€ÏKŒÐÀœWX`â3«—(Ö¾6‰q^âhÇ0/.}Ðßä ñ%-²À¬Z™Án¦'>­Ôu/e¬²Â#TÿòT²“Ý)d-{YÌ&“¨˜rÐ% ù) X¯A¢QHû–Ðz“ÒÅ+ü†>×®J:#*Q¯J Æä2f}}Kn—‰êV./rDcK—˜.g¦™å eKÙÖ€¹Ó¥nf7{\A}êg²å.‡¸“ÅKè»ãÚc•)x¬ÐË`o{“ñÜ"cëxï(È…a¼@ƒõ(ƹðm˜¿ú­n ŒÂë’W‚ÚõYw<îðÀ-P­‚-Œœä"ÓÙ¸Ç ¹¡üÄó€o'þ1 ›rãðP9ì[ƒ{8ƒ/à‡1.H…vô7„ÃЇt©ðXÈCê¶.L»ÄPÿ$0Kfò@’üd(GYÊ‘‚DöxƒG<‚ äp÷ð.XðËa¦` ¡å Þ”ùÀ©€Œ/àtÀ8üŒ$ƒ_ø‡‹ ŽœÃø™A0f ÒØTxÄ*ÈPgÞò£MA*Hã{Ør6zLdP‡Ú‚ >ò”ÒdTÆÔ«fu«Såˆè‘ !þÇ0@Ðe*…2ÙÜ‘i€`Ö™y„Õ¬›v"ÄþðÄ΀Ì0™ÉÇ9aÓií¦½ëÐX™áõ þ lA×ÿø—3ã*d#3vÄ?Šýˆx8ZÔû.0©üo€|¼ÿÉ}K_`}SÿÀA—yühãT˜Ì/jàéHœ Tp‡:ŒbdÛøè'ê¡.dÛ_8G=ŽŒ #Î7=C?àq„ìƒ× ø/ÎnÿÃTø#½í„s¡ÿÅ?²ABGãÆ(´ ‚hüƒüæútý-p°‡]ì>#¸ò¸­cú4è2nÀ‡GÈ› ø8 îniìÀ<¶MMìcÃÿà3þÁ `xÁ¦ž81N¿@Ôùÿ°1ôQŽDë4&'Ÿ EãàäȲ¦ùP}Ѐ‚|31þ!]Ð8Ø4Ð{×mÙ¯]÷»çÿ}sv{_°Ëh§ ? ýi„˜×T GflÍw/ž2ý þ?V>xÊPãŒG±M½ðëÛTô6¦1º)Xu‚úІ¢ü}ÄßÞé€]{Ùß^ÿ¸7rïýÿ<Ž²Ë£ÿª<.°¸.s‡zز¦ãˆ4.и¨Ú‹}Ø»¾;cï«3/ˆ³NX‡î»)sh<›Ê¹Ó‡t(³}h?~À<ø1i½6 º ~¸ òGs=œAÊÛ?# ªÜƒžlB'$»ßË#ÕøGˆ‡ì2uЇ,»‡B˺aˆÀBƒ‡„Ûƒx¸ Œ>›š‡~†ÿYx‡~ð‚†ü‡/ø»Nø³>C=€‡ôM‹†=h>G:AL‡M;ºr¨µAü‡- ;r؃¬C7B+¬·bû}p„#ìÄfJBï€&|BR,EÀ<º‚x Œ„»5{¶[ºû¶«6Ó7 R36³©MÐ5}†#èÅéC›?}8Ñ ŒYÀºB‡Ì ?ŒÆØ«±\ºà‡­cFʳ‡º»µ‰b¨5Oa‚€‚áÁ® `Rè†mÈ‚·ÈVèeÐ1…nèUH¬\¡G€šÔI·Ì#žÔ < Jã"J,ØŸz| #È‚,P{Ì©D¢ÔƒÄêJÄİ(K±lÌÂ_ÀÈ·œL¡ŠËì&8¨°7"Jx VÈH…m ´Ç (…L…ÄÒƒdHLÚ¼‹¯¤LÜÌÍN´Lì'øMÿ)pGì"ʃ,VÈ¢ý9Ι‚m M1TH…Ú¬N˜ZLÝÌNíä7ޔˠ/¢,…ƒn¢ƒ€M{)ÈVø€,Ø€Õ4ë¼Ï·¸ÍíÜOþì7uôï΂üG~,JætÊÖä؆؜Mü´Î²Ó ­P ½Ð§èN'MúŒ‹ ð€ë)8ÌýÙM‰ÐûœP ]QmQ¢ÑÐ&MQ:½QÍQ!ÑO¥Q Å ÕQ"-R#•  R%¥Í!=R'}R(ÍÐÿ\R* Ò&R,ÍÒ"MÒ*íRR¼R- S1ÅP.õR3@0Sÿ5]S¤)Ó3}ÓÝKS6S:…7…S<;9­S>íÓ ¹Ó‰’(±Ë<-ÔØÙS?MTEÍ @­‹8º4TJ=T]TLÍTÜhTºxT^©TPMDÕTR-Um±ßT&ðÌPmUÙ¹TSUYŽ)ÅLÑÌ'øIWÝÕS„ÕYýU`õN½ oaU^=VôÕ`]VSV»à€kBVi­Qã`VkmÖZ…à€8€&ÐÕi WåÕk-W6uÖ¸ð–(ÉLqmWŬVsW?EWàúTw½×bRVyÝW5¥W|ý×wÅ ~Ø5õW€=Ø|…W‚]Ø,5X„}ظ W†XÿuXˆ…X‰¥X½P‹½X„ÍØ ÙÜéXXY”=’-Y|=Ù”}ÙhYY–uW—…Y›}™Yq­Ù›íÙ"ÉYVžõY¢  ZdÚ¢]Zÿ8Z¤åU¥eZ©ÝÔl}Z«­‹¨Z­ §½ÚPÍÚ­ [®èZ¯­T°[´½ ²-[C=Û´}[©Z¶õZ·…[»‰µ[<­Û»í[È[½}S¾õ[»ÜÀ5ÓÁ%Ü·5ÜÃíÒÄU\´eÜÆ¥ÒDžܰ•ÜÉUÒʵ\­ÅÜÌÒÍå\©õÜÏÑÐÝ¥%ÝÒÐÓE]¢UÝÕMQ}u]ÚV¹]ŒÝÚu]ØÅÝÿÚlÝÝ…ÙÞõÝÄÞàMÙá%Þ®4ÞãÙäUÞ„dÞæÝØç…^S”Þ饨êµÞ/ÕÝì%Üíå^'ÄÞï]Øðß$ßòØóEßÿSßõÝ×öußÞƒßø×ù¥ß8õÞû]ÜÛÕ_iµßþ½Öü`±àfÖ6`=åß¾Üÿeà]EàÖ–`€£à žÕ Æà#Óà ŽÕö` á.Õ&aò2áÖÔVaìbáÆÔ†aã’áVÔ¶aÆÂáž×æá<õáæÓbb"â"¦Ó''~b'Fb¨uà%¶Ù&†â'–â ¦â*~Ù+ÆbÐbWUâ.VÓ/Æbÿ1nU2.c1=c(Nã¯åb6Y7Îb86[9žc­ã(¾cJ]c=ÆR>c?nÛ<d†äB6d…Ed+ã>^ä½=dGXE–äInäJNÙKÆdÁ¥äM–×NödÄåP6×Q&eÇ5åS¾ÖTVeÊeåVfÖW†eÍ•åYÖZ¶eÐÅå\þÕ]æeÓõå_–Õ`fÖ%æb6ÕcFfÙÕäe&ØfvæêähfÑi¦f&UækÎÔlÖfÄ´æn¾Ðog®çq®Ðr6g„DçtÖufçRtçwÆx–ç'¤çz¶{Æç&Ôç}>š~ög4忀®Ó&hÿèƒ&š„VhÞcèÿ†Ž–‡†hÝ“è‰~–жè6èŒ6cH&dŽgþè6é‘.Þ’6i-Ýè”8ŒféFqé—þ·˜–iB¡éš¾°›Æi"ÑéV°žöi!ê ¸•&j'5ê£>®¡Vêaê¦n¬§†j‘ê©~©ª¶jÿÀê¬Nâ¤æjõꯆ£­ëý ë²~ ³FkÜPëµ¶Thvë>…ë¸þ™¶¦ëÚ°ë»Õ°ÖklF龮߿l åëÁþ“¼6ìØ@ìÄî“Åfì®pìǦ‘È–ì­ ìÊîÕ¹Æì1ÕìÍ.¯Îöì0íЮ‘Â&m{ìÓ¸ËVm«0íÖVH…í5•íÙþŽÔ¶mÿfíÜþàÝæí¢ÁíßnŽ×î¨ îâNŽãFî§PîåNÖÑvn#…îèÒà¦nöíëŽáìÖnH±îîÆÚïoGïñ¾Îé6oEïôŽØòfïœæî÷Öêø–ïŸ¦ïúëõÆïÀ†äý¾áûöï qïýnnù6ðúFpöVð÷fpóvðô†pð–ðñ¦pí¶ðîÆpêÖðëæpçöðèqäñå&qá6ñâFqÞVñßfqÛvñ܆qØ–ñÙ¦qÕ¶ñÖÆqÒÖñÓæqÏöñÐrÌòÍ&rÉ6òÊFrÆVòÇfrÃvòĆrÀ–òÁ¦r½¶ò¾ÆrºÖò»ær·öò¸s´óÿµ&s±6ó²Fs®Vó¯fs«vó¬†s¨–ó©¦s¥¶ó¦Æs¢Öó£æsŸöó tœô&t™6ôšFt–Vô—ft“vô”†ô–ô‘¦ôŒ¶tŽÆô‰Öt‹æô†ötˆõƒu…&õ€6u‚Fõ}Vufõzvu|†õw–uy¦õt¶uvÆõqÖusæõnöupökvm&öh6vjFöeVvgföbvvd†ö_–va¦ö\¶v^ÆöYÖv[æöVövX÷SwU&÷P6wRF÷MVwOf÷JvwL†wG–wI¦wD¶÷EÆ÷@Ö÷Bæw=öw?ø9ø;&x66x8Fø2Vø4føÿ.vx1†ø*–x-¦ø%¶x)Æø"Öx$æøöx!ùy&ù6yFùVyfùvy†ù–y¦ù ¶yÆù Öy æùä:z¢/z£?z¤Oz¥_z¦oz§z¨z©Ÿzª¯z«¿z¬Ïz­ßz®ïz¯ÿz°{±{²/{§äN{µ_{¶o{·{¸{¹Ÿ{º¯{»¿{¼Ï{½ß{¾ï{¿ÿ{À|Á|Â/|(F{ÃO|Å_|Æo|Ç|È|ÉŸ|ʯ|ËbÄ¿|Íß|Îï|Ïÿ|Ð}ÑýÄÏ|Ò?}ÔO}Õ_}Öo}×'}Ó}ÙŸ}Ú¯}Û¿}ÜýÿØÏ}Þï}ßÿ}à~àß}á/~ã?~äO~å'|â_~ç~è~éþæŸ~ë¿~ìÏ~í§üêß~ïÿ~ðñoûî×û  õ_öoÿÓ/¼€(¹÷¯û¿üW|ø¿û%¸€'ˆ ,hð „ ˜ÀŠT·mašaÕM™¦Fuë¶jÅmÝX9ahò$Ê”*W²léò%̘2gÒ¬ió&Μ:wòTù¤' OH´åCBu³T˜!aº• ³ÍÉ3 “š‘Zä(ذbÇ’-kö,Ú´jÑþKô€¢k&¨@"€EÂXhÕ‰‚\AÎ-lÿø0âÄŠ3nl²mX$OP‚DAâ¤C²2 Õ6R'>8Õ1aP"Ymvìú5ìØ²gÓN ¬ä'O¤<1z8iI¬Â$ý*|¢F'Û<T0$UªÚÒ§S¯nýzãÛcåfî†Ê™nC’’QªÛD"€-t`xiTØçÓ¯oÿ>þ…ÚÅJ¡ 8é*2S €U§4„H#µ–„J8!…¶U˜’f6†)Ð!AZ€Ù…%šx"Š)"´ŸŠŠ×"Œ1Ê8£‰,¶è@pѸ#=ú(›? 9$‘EiSG*¹$“M™¤“QJ9%•ùAY%–Yj¹¥bWrbù%˜aЉ“—cšy&šiTfMDIñ¦ojÊ9'²IQ<ð‰uúù' µÝ9Q ô(¢‰*zØ 2¹)Å:.:)¥•ÕhL \@™n–zú)¨0aJSe‡†z*ª©`c@!ù,žd$„"3,=(((!3?3332F6F6I"4@#:I‘ž§œ¤©¤¤¤²»Á¼ÀÂíîïòóóÿÿÿP  Ždižhª®lë¾p,Ïtmßx®ï|ïÿ@U`"a ’ ‰<6Åjâ¬7lU™åÖ†/MûÍ32­0µ-š„€@¯ÛïuÑap$C!ù,°x…"4"6$8+=(1,=(((333<<<3B 9G ¶¡Aº¥DÄ«FÈ®Fʰ‘ž§œ¤©¤¤¤¿¿¿±ºÁ¼ÀÃÁÁÁíîîòóóÿÿÿš@pH,ȤrÉl:ŸÐ¨tJ­&Ø,`«½¯šMKF(f4˜±ŒØÍ€Í)§Ï…Šeb)',s )z(% *&sŽ"+, r6w+($£$*uB*E+ ªw!* +# ´ $,Å$B{ƒE DoL241Ir5-.bA!ù,¸…o…"4!5%9 '<,=(((!3?:::4C =J.A2F6F6I#AA5I]?TbcF8gK>CEEDGHFHILLLMNPNQQQRRVXY[\]@SfJ\n\^`_`aVgxYizabbeghfhijklnpqrttvyyz|}~€€xo‘}s”w‚‚†ˆˆŠŒŒŽ’“”›Œ™£– ªš¤®ž©²£’Ч˜‘¬–® ™¢£¤¦¨¨©««§°¹³´´·¸¸»¼¼±¸À½ÀÁ¾ÅËÁ¶±Ã¹µÂÂÃÇÈÈÊËËÏÑÑÕÌÉÓÔÔרØÜÕÒÚÚÚÙÝáßàààßàäããâåèëçæéêêîðñóóó÷øùýýýÿ€‚ƒ„…†…‡†ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤ŒŠ§§‰¨‚¥­®¯°±²³´µ¶«¹ƒª«·¾¿ÀÁÂÃÄŸºº¼¨ÅËÌÍÎ϶$%Õ"šÇ¹É§ÐßàáâãÕæç™Û«ÝŠãïðñò°åçö%˜ë¨í‡Ä$M¸\¡1¯ ÁƒŸ Ü[˜ÍÒ¾Tº0•€ MY¸0ê`F4jp I²¤# ÷bİwÑáÃCýY*¡Ñ‘ˆ&jhˆ`”G G&|fCñ%Œ ?ÔØp0MÍF*Dœ¸AÐAŠP'šÜʵsOÔd±·ÓåKD+Ñ4ó(¬5Sÿà|û¥ƒƒ%oÕŒÑñm?"0rúÈL—¼W"pA#X„š']#K–e/‹3cí]:k(f¡J)¸˜a{o 5Ô@!‘´ 5W&à@ÓƒB—/%2 ¢&HáÞÂþè¡æ§œ““+eï /™ÏmæLÈ3!J)¾Œ&íˆ÷Eœ?rà0ó%Âå*qùò(uHfjF@3EÃc¢u/ßÏæ=è÷LG Ö B ?l‰w„…ƃhŒá€ c¼5Æ ø±×H jÔßÄç@h” †ý¥¨b$ ¨™YÈJ$   H›]L¨A#"hà ˆÐZ† aÿY…ih_¦ +V¹b‹Ñ™ãK\v饗’0€‚M IRBœ ƒX4E pµpÜX†ƒT Á¥HK ƒ5QjÜàihå¢û}uŽ‹æ0YË—”v)Itè€9>bBG òF×s©Á…]7ø%j^l…µ”¾ÕD#=þÀè­Ê¡dY–ÐR%îÒK%@8˜2R‚`P †Hûc#hU‰WXëHjØ…ë¸])´=úM,Ã^*^À_@´pûˆ 1Aî¿\Õsî³ú¬[`˜ jP 0ÆbCÿzŽ”Dwl’À÷äSp°G€X×Ê–€€Ç0Çl ÓDŠ6·ûb˜ @_y¤† ÈlôÑ­¬[@É HBó–Ô˜jˆP1ÒXg3ÉÃbàõ×Àp^* =å[ XðõÚl·íöÛpÇ-÷Üt×m÷Ýxç­÷Þ|÷í÷߀ítÉnWÐÀyqXö˜M pAàG.ùä”Wnùå˜>x×m__¼%õ”-ðx樧®úꬷîzÝ›+ãÀÛ0ïÊh˜‘B§¿ÂïÀ/üðÄÿúñÈ'¯|ß±{3ûÛaÛøVÂjPAòÅg¯=ñËwïý÷Ý7ïΠóР .°ÚÈoïþö|{þüô×?·øþï¶ç`À 0ïöæ2nJH ‘ð>âÁ ^HB@à5 anË€ˆÀ¶¨ {³ ìGÂV2‘Û,À ¬°wy“ÂW…½åAeh ÔÀƒßYA/Ú=p†)¼mi0ÛVÚmh ÔPZñŠ~ !ù,M€…$(!!,!"+:"$%$'(&()),-5666789;< 2D"5H$9L&@>@@CDEEGHFIILLLMNPNQQRSSVWXUXXZ[\\^`_`accceghkklnpqrssvxxz{{~€€ƒƒ„†ˆˆ‹ŒŒŽ‘‘’“”š›œžŸ ¤¥¥§§¨§¨¨ª««²³³·¸¸»¼¼¿¿À¿ÀÀÄÄÄÇÈÈËËËÒÓÓרØÚÚÚßàààßàäääêêêóóóýýýÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´ˆ ¹¹ µ¾¿ÀÁЏºÆÃÊËÌͤÇÑÎÔÕÖ׉ÅÑǘ)Š'? 78Øçèè Ñ)"ѽ–>߇/@Ó"„ý ° cdžqƒ dhÄ8âAØ®¢EUÚrݤ·K>nÐ+ƒ#6ÑÑ…É|˜$A(ÅX $„ ?\JÔ± @dLpùN— DjàCƒ@bH0äEƒŽ Dü Ñ ‡Ž ¥b#Bˆ•ÿ’"ˆ+£¨Ý»˜ŽYPáa‚ Mut ÕÐÚq÷LŒáC‡ >Ld„C‡a •l #è_xC‹~´m‚…=,Yøò¸’?bßD'Tv-hm=køH;º¸qB¥qüè»ZÞÈËÝ\yŠB2 p}¡Ûr¡µÉÒ @V_|[ ¢Q¯ôÜW:¹á¡DR 'ià ܘB?¸€ÀZ:€ [‚¸ÄìU(ZFŒ÷ $p`L7¡P S š¤ÃS*áÐÍ[@àÁI%êÀÑY‚ å…8µŽ.˜Ä‘ ÆÄ#Êñ4Anƒ9ÿë|Gž“ ‚• 9VI†¥!¤Ìa…èƒPV†Y4¥å¢&`€(ˆ`H (d&æœè8P&ˆ˜¬I矀.r‹Nñ²‰t5@ Œ6zʬ„@~:j饠馜®‰  vjꩨ¦ªêª¬¶êê«°Æ*무Öj뭸檫¦¸@gè °ë±È&«ì²Ì6ëì³·¼Ø@Iü=4Ð'´à†+î¸ä–k.«ì€>¾„Ù·çÆ+ï¼ôÖ+ 9ãäÊ8 “Ú‘¼ö&¬ð ;»ã6 Ü*Ú¼ÿW‰ wìñÇ £úpiÛZ­H!•1DZBÀ5pòÌ4ל+eƒ€­}¾ÇQ*wE$¬åhÚ€L7h+‚ÍL7í4ª DÇÆ4 q2q1à À 8 i›pêhL l ð‚ü€C§Ø ‚̈Z°©<í÷ßçê›KI7®K° “ H¸’Õ’÷ÁÀ-Z@¥¦rwê&‘¨ÜÎ_Áøé¨?{Œ—…ƒkìÉÑ´Ûòd/ ,@ Ð$ h#h! F$$‘$gQ $K’†$Q †ž$$W$ –€’Ÿ©–Q‘±W¾ ¦¨ ´¾w"¿ÒÌ‘~h# ÒD•Ì $Ò¾jr‘Òç ©¿!üç¦ÛèAP„?€þþ!ù,Gjag‡  !"$$%&&(&)**,-..0-01234778599:;;'@+@V.CX>@@0EY5I]7L`9Ma=Qda5c8f˜"Œ „X³ZühçØ©RÞNˆ¬`7§ÆÀƒ N¼+ ·àˆ'®xË@°è1WCDk‡­€Ø†gnøâœw®¸þÝ DÝv°ÑÂÉèÝv dÄ.;šÏý… u„á¶ç¼÷Î6èjð)¸Ì&—Ç솷…‰pÃÉv@á4z3œ†%–` ÷”ÔŽ‚&C¸'‡ÂÉøîþûQß9Üê ïò阨ЀÆèÇqþ;@ð€†0. &˜Ç1ì¯ èßa ‚æQ 0XÇV@ÁAP‚-à„(¶±·‘Ax[ŽpÀÍG: N|!Ðû8°N|~@ bÒÿ@D¤‹ˆ.›'–Ȇ@a‰œÀÃ垸DE4@Pd‚ œ°±G0pcŠh¢¢ÇD(rqœ°Ã1±ºA‘VãEä•Ðm'L!R`‰5–/Ž€b¾Åð‘án+'@ ÄF:òk p&ZB¼  è¡•WÂc<ìcdÂÉÂGéA z3¸â#€F<8À+Š@ÀÝ3ËR2bêaBò4fBºŽ8A >E¦ÀuhŒÀ‰Â-˜@DûIÍj.M’SäÄ ¶ù< ¸åÆ:y²ºe¤$gWy€(¬<À¯¨0â!Ž÷ÔØ8!ÿJŽõ2…'àÄ¾ð…†€ œPÃô˜Nnh&J0MkZô¢6Ãæ”ˆ‰Žb¢ž“©"ÅÔ©1`BŠèc>Ǩ±)¼“Ÿ„§"Ω1–’tŸý¼#ò¸GNh£˜HAÔà=M˜¡§u[¡‰ì£PªË4úÄO $Oy: õH:~r”*­);]ÊJÉhŒŽ¬§ÆÁ¼›òódÿä@ 8A»º°)LÁ 8á†&•‚pèÛ¤JØÂ‚’Mp€ ÒxL¸†n0•àLÀ@§ar=Ž¥s¥c}©"`uÒÐQulx+IÆø¾ä"0‘#ÿ˜ƒ&Žp‚A ëCäÖ0„‘†MnT3ÛÄã-Ñûƒ‚÷Òx9x M€âÙ Æ) „^K_Š‘j,µKôîw¿x€ÔÚ‘—°Õc ±DKñ“§ â(׎ÊXNn f';£øsRÈ?÷´ §YN³#À=ïa‚ÿ{ М0ñ·‰àï!¦‰æ-vzjtßVà s€…†NA2ÜP2P”„p›8‘_I¯¦j´¦}÷6Bfx˜KÜD=€(ž¡¡KDaœÊ0Pº½˜ØØ'°éZ{®ÓœÈ0!01„ìú®VBÒ@‰Ì5 .ä01;p¶nl±/¶µ´‡kþ·=ƒC 9%$û¿ºƒz8m §ÓNwÞªÍÿþÔ£u>C9‘†vs"Ün£ƒ wgn}NVÝ'»;À 4¼-ÎíæÀ †{p¿- ÷¬³KªÍ€[¼mnó´Û¡‰U6“C †‚ÿ ©Úÿ&Dqà XXžœˆçÅg5vsÀ×kÔ]ÔçÓºö…Ó$ÌWGYîÒüèL+\Jàe0nx¥[ž{õXéXWš•5§±H‘ (ͺØa¼õÍýìhO»Ú×Îö¶»ýíp»ÜçN÷ºÛ]í˜mVIT0á»û½f•òƒÿNø•^WƒWœ ñŠR ¹ðBvŒ³J²KÉ|cnFâWþÙ%S/ä… ú0aN»â™ ^q² Є ´öÕ¸¸1å¸ç-øW*c½ ƒõƒÁ¸ ÐO n ®}ˆõn’´¤¢+—¿Ùê{q²´€…ÍVË,(V&©@h†‚ÿðû“õâjéˆ.—šX+Ä]1Ö󻢳Émæd”\•?ÓX1,§Ó0+PyµÁ^`vÐ0†\÷~†Õ˜à³0+‘3A!(Sû³†2ÚAÞÁ€vãq2ˆ’ (s~Í# œÐ~(xH`rõ3ÈÔs û“²¦• ¸°:)¸1ŽBBÓ Ø§1.¸*p ùTƒÊuƒhO3,ÙO@17€±JGè+{¡„K8 ü¦’C…f…9è4¦agö$LÚ3õ¤%Kуqâ]x ÙcàEb= `hÿè†ÊÅ|&ƒ+}JÓvá ߥ}‚`ñ C!†R˜B}iÁE½ ǰ`d(¨\¥×¯p…-`†Ms@D§10—/Ä —‡#¶øŠQ%y“WyAÄ„'3v‘iÈXX‡'xÔÑv/ÒDÓ¨\Õ¸)ÝXxy÷,}ŽæxŽæê¸ŽìØŽîøŽðò8ôXöxø˜ú¸üØþø9Yy™ ¹ Ùù‘9‘Y‘Y‘#‘¹‘ّّ’"9’$Y’þø‘(™’i’,Ù’.ù’©’2©’ýˆ0y“8ÿ™“ ¹g€@”„0“)² †@# Ž? ðŽÐ }ÐŽ=p  ÀMY:¹•\ù’ð  Ò° DiÇ€) ­°”ð Ÿ@ €ÐŽ4@ Syz 6yÇà]9˜„)‘À\@êø•ëˆ]ðìh]ÀëˆZ˜í¨‘¢ )s0E ‘$Ý6A`Ç`c@Çð–#€ Ç Çàù˜êX—€p\@ëø Žp™6ÀŽ?о4 Ç@ŠÙ ~Y˜Ò9ùDs zŒià× °µ ’ÿ=p^ÀŽš) YDc g0K j‘‚ Ápšc‘“›@ º Ž6ž`Ñ P—º ÞIÇ  à  µ@ W©ÇÀÀ¹œÔ¢"zà Â@< ǰŒ™ÂÐÀ#7ðÇ ÇÀ5P ±€žk©ž#@À e0½ @P ÇpEà ½@sp ‚š©Å€ $@Ãà ꨣqÀ¢5Z—Çð7À#\ ›ý) WÀ´p 4ÇÐ 4  ª€°£6ip {0¢‚:¨ðH€  \pŒÿ^0¡<àÇ` ^œÚy ’€Z ¤# BZÇ@ ¤p cÇ0 s yÇY¼` K0p w)° êXÂ` u© êx«j—p ªà^ÀœY° Âp꘶¹Ç`“P—ãyTð”„Ú­„j¨ÊŽŒ‰jA ;J’@4 5  j‘똞­ ÅP¯MJ¥ —0® «¶Ð¤y¬wY— ªŽ½ j¡Â ºÉ§Ç0 { ^ ¸àŽÔj­Øê­Û­?p  Ž<`£ŒY ½PœrÊœ? £?€pX °©ÿ ¯#ª‰ð¯µD0f Ç€®ªI­p k ‘\êº êˆÃà°ÄÀ Š©ºy¬ã¡8ª@  Žoà›Ô¶˜wÙ±j+¢Àq ¹¶Œ ÂÀ]ð ;ú§yв;Š Â€T ¿À­7¤G» Å0i` ÅI;e ´D€–¤`¯Ùš‚¹H¸Ð“Àœ€îªd U Ç€jº ÇUà®:ÐÈZÊ vÚ]«¡ç kû»„‰¹ÐX ¾Ö oʪ‚™¼rœº™B# s0ÖK¯‚0¤+ J¼ 2¯ê§;p jQ°Â€º`Q°v5ð¦Ç@ J¾`q é “z©Šé­ ¼Ü•<ð„»ŽÀ7ÐŽ8ð²ìÈ”™™(9c ”Õ;&°‘H8° ëh?`¶ë¨<`©|š¶ úÐ:Â? ˜ìx SÀ4\ÃñH”8Ì‘ê µ öh¨ÍÉ]€ lÃFlÄ9œÄK©|ÄPÅR<ÅT\ÅV|ÅXœÅZ¼Åõ!ù,Nr/…  $$%''(),-123779;<@>ABE%T-\2_4`4e;f> h>"iA%lE)oI/oJ0qM3sP6uTÓ¾™'è„_p6‚,>:„Tüó¥bÍšåYh!r^̳ðbÅ‹ª¸Ëiß.ÕsSˆLG8fh9¹FÙÊŽmN¸9©„”7m:¾a¡AhÈaJT4]/PªXïX8K,Ô¸!IH8,$è€Cæ8Z$xløFÉ5kPÌ$Åã pÿÖL@É`.™¢xób’Æ‚Špš»ÄbÍTª6á”ÛG‰nÖ<€ãF ‹Ah µU!(Ÿ3ä|À¨·´iGÝT°hÓ†…4¨†kVÌÀä›Û8èÈ § çÌ…Ú&ܼ•7kO+_>(µš7_‡jëN¸ ÊNÜêù…ðÄ—˜QüÀÍx*ÌÓ3?z ÏiO?}•¢Âœ46zšIº¿§iøTA oü×Öïx$ÈKá©ç ^é2ÞJ(aC2¢¨0Ó 4ÁR5Œu¤†2p5¶UJv´F8,Äõà‹yµsŒ}'ÁA2É5®2Á ñ=©FÈVLÀ¨$ÿQ¦¦BHÄWH€n$´ä•ë°×ÍèðS!J0Á%–d^Ó$†e¦©¦*·ÅKŽkÆ)çœtÖùàxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ– j¨¦ªêª¬¶Êª©°Æ*무êê­¸¶Z뮼öZk§æ*,®¾k챑RàƒJ¨°§dPñ© Fa­µD ÛªUT‘mȆ+î¬8l¡LH§_áÄf´°§=\ m {1Æd˜±¯ÚšPÆ ¨"aFY˜¸ã6ìð§ø@ àyÁÿ +èQÆ·PAÅ Ø` P@†ºzZPqPÔKDj= v,d¥§ /8‹'ËO ‚;\ gªD”áAªÔPCªÎðÓaF#|PÆÂ˜!¶ô ¶THðgkAgÛ‚y~ržZ-¼cŸ½Ã1 -6ÎJ ÅÙR»·Øl~îDª c NðaœMDg‹á& jÄÖ_—nº£ð@¬`†ˆìCd0 dØTT¬ç fà°gÞî ð¾P_<ÚÆ€ÁÅÚfèº<¼Ð¯vž‘Ýÿa˜P‚nUtÑ fü‚ª#‘çç¯?¡:˜[¶1xÁ ¾ -2|ÚÙ '×9OÄãžö†'4ïy:Ó–§¼IK‚ë2ƒ ö¾˜À I´F" °˜œ–*t $ÀßþvÈC=õXa#ƒÉÐAÀÍ Z¸‡0°Ñúžž"(­â5ïtÞñô3,… y¢ e&B¢ªhG;a†H†€ ý*ÃL8ÃTyà CU÷ØÃRÏwP› eÇ€¤|¡B"¢§¨·*R‹4ÇØV*tOZP×?3¡Qÿr%0÷<µ4ZÁ 8a RU3Ð U|Œ¥þ4¨ üŒ>6 ƒN`1ŽË$&ï6#‹çÈ+fñy\hA.;¨A%¬@ Ácfž>COv¨º!f€2€à e¨ ¬P†œð ¡Ó„@O®Éòž_ÃÇëK±Q¡f›™ Oªˆ7½MOLpf$© 6-$›bóÁš§%˜Áx*aHà±a•çPuJ1€àlg›>gê5)Fà¾[×&€'`% €QÏcY·YEòIƒÜ­DCUQuU ÿˆ¡®hÊU.ØJL€7ÀmPÆ¡׋Gië­«êª\õ€û@5:INT`€CE$Rp ¬çJ؇1€ pPfR#³Âá(¬d';+œÀ¬ŽmËWZd'Rö³ ýTÂZ£¤$…³p@hW;SY8Ñ=±Ïiáð…Øé¶¸m„*°†Žh+jx€sKÜâBCm¬X ã:Fˆ®t§KÝén `bGÀDd@ºÏ ïrªK^òj xAT p÷»Ñ¯|KSÞúNW H€~1€,@ீ‰2"øÀÙ²¯tÏ› h@2@B,ˆ Э>Îð(!ù,x„†   !) . %3 +$"#$&)*),-0+(?2)145=<5†:„‹ =7‹>/ =:•–..G<>-++'†6•'G=>¸¸<‹‚ GBœ¼ÅDG›¾‹ :È>FBB‚ -G=ÈFÈDœG@GñòGÇ  CGAEóG玜&àù€6ŽÐ8R"Þ „›G‹VÃS@ü!o…@†Gx `!ÄÄK¸°D.”ÌPAÁµyFŠ˜P s&† LÅû†¬ÂÌ™*8ÁD‚ßRh8Zrà Œ˜!‚< èPÒ*ìÀaáB rɈ‹«‡J€!ù-,"S†~‡4# 5"8%7 $: (;+=0>, %3 +$$$%&&(%(+(((+.2-380+(?2)334778::;'@)B+E-I5G .K!4B#1L&8C#:M*:E.=H&A18W49Y:<]>>`+BU:EL4J[9P_9Ma>SbC%S-[2a5f ’36UÃ*A¦9‚A †W½î Àæà»yîí+P„´†Ñò%ˆáˆ˜–¡jÞ̹³çÏ C7pŒÛ1 U¹1›:œ¿×«_¿f;Мº|¯Í‘ö×·&¸Œ±Ê¥Û•™°žx2{+ ×rfK08gv¬âãÈ•3ŸÀlú±ËÉŸûÿðæù«™lž÷Š,º½û÷ðãËŸORCécÂT_.è„^ùXæO/ûÕ6 °ô—†?>-8^Fe©ÂAש‚*Ç&á];ÉôÊw3A…f8Á†ÜfßM¨0sq033¨@°3o@pÌUAó}@)äDI”}Üèw?àÄ1UM°dÎ;½£ôü&L>‘ùÀÆ—`(н÷à˜Ì0vÌ+G‘t¨r̨Òfy{¥)Кm¾¹w?ª"Œ;ÖuÄåµy„0çÓKŒ)餔Vj)©™ÆA¯Ðó72åeAæ˜Ó=$¨A>Ç´„0°ÆÿzÖA‰R¨'¡ÇäšëYrRE®Õ]§&°Ç¤¨@o zÌ•l/1]`—VkíµØf‹RjÔijÐP=ú“£¨RÒ3–¦á3þÌŠQ¯æœ +UÖ+Ì “½à믯?&ðMƒAZžaœKÕýj+ñÄW\-·dÝ©@ý-ê5©2*ùÀeŽ?Åã*©ã¹ÍûŠä$&À1 Õâe½ÆyÌ>lˆó[ì|,yƒ–÷FÐÌ¥“K‡[ª`p#\g­õÖ\ƒ„ûÙwUA®½6hs³½â*˜Cn(c…J¥qÌr?tÃRÿ‡uÏáQ÷ÐÞuõÁÈ A‹~ õrñ’wwÄumùå˜g~› öída°qÛW&6P‚´mô˜•#4ç½Þz¾°'dqv±—»æ¼÷îûïFÙVïøÃ ðÈ'¯üòȧᮿªÔÈüôÔWoýõØg¯ýöÜwïý÷à‡•ä—oþù觯þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀÊoL ÈÀ.pŒ 'HÁ Zð‚Ì 7ÈÁb ¡GHšЃ(L¡ 1øŠ†¸ð…/l˜ gHÃÚð†8Ì¡wÈÃúð‡@ ¢ÿ‡HÄ"ñˆHL¢ ÈÄ&2p…PŒ¢§¸BZñŠV¤¢·ATxñ‹`£ÇHÆ2šñŒhL£×ÈF8ñM„ çHÇ:ÚñŽx¬£öÈÇ>úñ€ dIH;ÒÀ‰l£"ÉÈF:ò‘$b!ã8pÀ WðÀ$7éÄÐào,€:ÀIXËXPÄ(KÁ,!ˆH<â- %ÝP‹<þ <8JeŽ<8Öp‚4hA° ‰Ûà&77ÁÊ?fƒ|ôD9¸i ?Œóž†D¤LzÉÿÏ~úóŸþÔ€0ºÇøK”YJ¢À"À'¸Ç€Ã ŒA-¦ðZ˜Ã–,€ pO<£ MôD(Fah„"”h§ËQÏ=†" à„6Ìq |úŽ u`"JÔ¢õ¨d &A ʺ@C99F@ÂŽp(ˆ? ÂÐd¬aBް!žá4P ݇9ºÑ. ¬(2H€ÀUˆÃà°«,ºØnpà Œ‚9°éÀ@$bÑZÕÊVtÀ„°Æ3¬€@ âϘCéˆÌB‚‚Hë#Qîæ(5ARÿe#–”F©È ?Lcæ(Ç8Æ!‰>–žø©r™Ô©Ð®t§Û0.u©Ýa¥ºÌ"˜ÁLp[pkÂtÁ¬q&@‚x ÆÊ„gˆ“Ð-¼¡-€2¯v˜‚31€˜c4pƒ]c pÈB S(€WaŽ0qL°Jã;_ðÚÖP þÑ$‚-˜C8µ2Á ,@A†çà‚¸Ö°•í³QR„¢ÓðC(Ìq Oœ¢·ø±4^êÇi”ÃËò›ûÄ}î°©3TE>îâÃmR÷Ë`³ '°T6¼"Kµr·;ÕMBÐÿÖ€j‘ #°­€ž€G\Á º(@"°ÀÄP€X” R@ôEqÔ‚Õtõ† ~ð„ƒÿ„ÄNÎoøyN È›kwÂÛІγá‡Jd£TãàÝÇ!GC–ÆŽ2²øÜe»†*ƒÍd£ÇôB6ïð§^S#¾"ÅóG€æ–#pcËíN»ÚÕ¨Ôµ,a]ÒbÐ@±\喝y’oŽó¿>g—_ÏwÁ3®ðæ¡vF@8¼ÉÀØǃ_b$à3/Ox‹³¸‚瘈@°Øå2·/Íq,k?l¢õ~Ä„(ÈÁó=’ã}¼y‘žtå.=M·áÜf®"È|aÊ‚v ã‰;¨È€m~ fµqÃoð‡:2°.p.k¿ÿø“HÐ#À‚ Ø–û@y8€(à*PÈ ™÷}“—ïœÃ3ZàEBóœ—pLäæÐ1àVµSðSÀ vð$€ É@Ì€ 2@ÞaÐ]J T £Ö}¶yƒgre…ßÅà‡ÀN` œõr¨—@Ž  @J Ts|´ ãà ™@ õä ¥° œ0Ô„Ûà BÇ ÂE ¢ PÖ{¾§O9tê@^XCjs¾°6qô ð2¨ð" c`èAÐ0Ðæ[3~x˜‡At]{ñïpÅ~B°„¸ @UÐϰ døÿwW…@VŽ€rŽp.°j‡pLôÉP*ØôÄÀMÄ0—vq‡@]°Má€Z N‹å@-@V²x•x‰'zXEVþ6,pUÖvƒÀ@VpU‰pc°O{´ éT*Av\@'t{$ ó¤k¦N €…YxK7Ä…^ø…4†:"vùPŽïlvï‡n޼Ñ0jÊ÷Ü@ʦ‡ø˜3ćæP2KÅ~÷$Gsä"0ƒô1 ‚w1pyËur0^ä$>HH¬Ä 0 |T Ð 2åGÚøS¿‡@Á÷CjcuþÐT4ó¿47Âí8CjÆì‚@ìÿâú¸“<ÙvÂÄ â²Tt‡Cø$!‰…,wO¹”«t”ø4’P’>¤ þð A° àsë²sÓ ào H`©6"c} suÈÇ“n™ï¶ì" ^”EoD•䔽ç‚)ML˜ É—Ò•RÙCAà)Í«@u¬3†¹áÙ·6ÊÇ €–¯¡MåWò–ž‰‡d&L "ý1P÷hCEÉEª¹š¬™AXôš°Ùš²ÙA¢AFäûTq(C434C†{1CÊwŸyœá—|˜=”š³ùœÐ)E°9YÖ)Aµ™A¹$Ž3äôÀeÈžíÿæ“×5”uG˜è™žê¹žu•”KAPv3„ ª`žâyŸ_¦œwùCìÙŸþùŸê鞀ŸZ eôKmG§yžÚ ú O G:¡ŠK­† ¡º¡ÚDZ¡ ¢mô~„xöס(š¢* 'Т.ú¢0£2:£4Z£6z£8š£:º£<Ú£>ú£@¤B:¤DZ¤-º%€ G ¢Nú¤ Ê¢F:¥TZ¥Vz¥Xš¥Zº¥\ª@%° ¥b:¦½'¥\z¦hš¦jº¦lÚ¦Fª@B0d:§tštfê¦xÊ£;°§|Ú§~ú§€ú§y:¨„Z¨9š@_z¢uº¨Œÿ:Kwj¨ú¢:©” ¨‘z©˜Š§Kú© ZKp”©7/ ¦•šª•Jª¬ÚªY: °%ª´Z«ùôF¤ ÄpÝ`0Jþ°jÊ»P¬Æš ª ¨¸逬;àªÐ­DªK p­¶š­ÚÊ@:¥±1°£â€-:õàâ€yð¢/pÄ€¥P°«£¹PޝQŽù ªÊþ {Z þà‡þ@Ï*­{°:ú¥…¦ÛÚ°ÙÚ­EúÄàvð-Úyà«.:{ª]°ì1À þ€'ðùp0ÚRp[ TSp«±3ÿ)€x@/jë¢/‹±P€þ` a ©{š þ0|:­Ð dЧ‘Ð h°c ´¹°d0°{ú þ€¶b+£[¶ ±DÚ ²á '0±¯±<; ²O°uþ° ] áz) £ôÐ '€çúÎ ¶pyàèðúà«3 ²áŠp㶯±·'À§»°´{ÊpÓ}°hp²Á ¸ øpµ{°§Åðµcûºck¶²k«h;¤3` þ`€vàÍ ±àÃþ ¹y«0èÀõ¢²à²à·l{þ_€« ð`ˆ¬S`ù@/ÿ ·µ0r{¸Ò+ að»+ -뢚˹;p÷À{ð6bк}@å@;Ð þ€ Q˧hÀïP°°{ÀÒ:» ªµ;¤Í®Ë yõ°/ð2¬p´-zÂڳãô½|Ú{Í ½‰«±¿Ûð. ÂÊÁ.*þÀ 0ú¾L˯Øp ·€ þ°¼àÕÐ L»}Я}JóÐU‹ÀN ­ Å‹ÚÀBúÀ&ìúÅú'`ððñ@' Ã.þÀ3Â"¼Á%|ÂÛÛ-šÂô.zõ0Æ|4lÃH»›Ë´Gìü0Èþ¿>üÆ`ÄHÿ¼§cÐ…¼§Oɤ*Å”L¦T¤Í›Ær -Ji žD²ïzGp] ð`±jŒÇlÜ¢nœÂ-Š»]ðôТ)@1œÇ{|Ã{úÇ;À¯¼ÀÈU;QËéàepÄþº§ä°È,ÉÒ\¨ø$˜ÖlO•œÍtÉ@ú»³@»+v@²Í`ÆÎ$; 'ð à¸a «° ëú¢!ìÊcÜÆ(ü2y@²ïp³À»v ¶ÏKÆ'‹®Û¢8¼§òÀ­ íÀcðÌ­€Ìþ@:Ì;àµä€ ]ÓÒ„ZÍטڬÍÜü£Sp®€Û¼™Ù²–{<Ë ÿr C@šþPÂ.Ñ«-*·lÂû¼¯ApœjûÄpªçàÓ.Z¸þ€¹ ½z°uùÐ T½uü€ {êÈù€8ݯ"=ÖnJÒ%½”'Í) ¤S°·3ð3ë¢7ËÉ-*i¨ !p$@?š¸]0éû¢3УT%p0PJ"î<æc@&dDfd½å ¤ÐR¡°Ü|ädWX ‡¦@­ø:N«Ù}¥$ îàæv{¯¯ÁD~ät~äP@0ê䬧c´fk¸¦k¼v ÇÝçÁ6lØÿü Çqæ@æe¾ão´Kà¸7jC•^‘’ƒ!¢œ.f d >I"~s9·s=÷sætOnSæptØ æ 4æéNÄK |²ñvo—é›Þé¾N] D­5^H"þz:{³W{ü}ì~ {|„@3>ìpã9>ëuú¡’nv²± »þ½þëàŽT J ¡N솾GBH„FèH¨„L8tÔÐ Q8…Ux…nàn팊íe„ð?ð .S•+ƒ|æ`5páñFIP¢Õn‘¬çßÌÈMÏÈMª¾G¦0Oãà×ÈMÙˆ@Äð Ó]Ýü¾ÚjFó1ÿoÞ¤ù½Jà7€ßóÿt瀡³t‘¹‘)˜ ¤X¥=«À ˆÕòSüòÿ.óTð7` Ðίáànïó`ßKfíÙíõg+õdÌ|°öl_õõ°k ðŽ_Ï9l@fiö~ÏHcOöMiöØöcDÆ` ws ‰¯nð9À @¨@F ¹Àó ç1/lø÷¢ŸF/ø€Dø…é0ðhÀ Žðd@¯ð=p¯ß€:`À 7p|À =×Á†€1úÈF¥oúƒ‰úµêïdðzàú¿Á°Ë 8»ÿð}ÐÏq 8 =ðÓ?ü"Co"mÉßþIäüðïSÐ?FÒOý8 Ç ûøŸÓ÷‘Åpì`¦'„8r¡×+}0[ÑâEŒ5näØÑãG!EŽ$YÒäI”)UZÐÒåK˜1eΤYÓæMœ9uîäÙÓçO A…º¤s寄z˜éPÈÌ•=}˜‘QÚ ÍÁ¦z"ÌŬÂPY¤À,ÍQ´iÕ®eÛÖí[’CåÎ¥[×î]¼yé½é6éҦʎ >¦µ1fÌ"eÝêª Â°c#–e×òeÌ™5o6©×ógСEÞk´í_¦8'L}G+fò†™·?Rç!8úè3¢‚­åC€ùxØðŽ´½#Cá³Èܶ2¾­-"æcF>|àXÀOƒñÃ×ÿü’W¿û…pMùûíàæ‰i`e>¨ÖÑ8Ä@ý‚|SÇÆÔf@Ôynƒ;<Šü—.å‰PˆM"¡GH÷Š ¤Áci8EÔ¶„£õŒ{ƒÉ@ Þ‰ ù¨HÇ„Án MG«!͈’¬¥ËƒèòZG†øF"šÆ$AèX3 °Š¶©ã=ÖK›9Vö»Ñ®m ?*C¦Í‰›dÎøÈ‘˜ì^æø!¶fèF8f2EEü #‚#dÈ"XB'ÐFŽÐƒ@B™áKBR–I˜Âîå>iR—üáäoT‰‘%tLг$¦GìeË|…d—ËlN/}óÞèFŽ,f55ÿrL|] „ÌäæhœiMp ©ZiÔ.¿ÖMt†æ›ádg©ÒùNϬ³ó¼<íyyÒSŸvºg?ç’Ï}Lþ$hP*P„ ©  uŽÁ'ˆV)¡ðchEsrPáDT£1šèû,úÑA9ôK%)XNbÎŽ. ¤+… FMòY… | iMµRÒáâ)€z¦‘^¨#>¢æH|ºž”~‰¥Km‰KK­„Æ0†2˜AÕ]D”Ê ÃƒrÑ•V€ebáÈ1€´¹W$i8·0P¼¤*•©,uªG&À(}AÕgG¸døj‘»IH²2+IljÐPÿ¦(#¬8°M.¤¾½ÎЬ ôš à•f­üäŽáƒuÝa(«‡æJW‘ªÅ PEôŠ^PHd€…n{:!á"…=,z€uUÁ¨R#>ð!Û9,†É9 Iæ¹MŒv¤_Ô6"¨ ,(‡ìêÂ=,PÙÚù¼v¥uåˆ0„¡-X´U¯iÆ&@^ d"ÿÆ¡ÎÙ."ÄMH1‚Áƒ0ÛéA\ a*‹UÐ1² @‘¡gÀè­È„ŠF^ᚯ8F¾ò`fÄa~ÃØp p‹2xƒYà»)ù~”¾dcFÏ@ ½êÿ(K@/–À U,á³èCj《Šmt°Ht!=˜ÊVrŒcÌhGmˆÈ1TaP2;™Y'eüÀAPÅá"„•ÝXv*ŽÀ{Ÿ 9¶h™ˆp/¢× Lh0«ä1pï ôAÑ„@–É,Â|%jqËœ\(ã+8Xs›ÏêˆÀ5"d5kY3˜%¼"ƒâk+œápè%Ú¢CΈz¦4L@¯°ƺžŒNÌPÁ& ôB=XFˆaB!„Ã=èJÈ,fdÝ žµíè À7c:Ƭñ¼? TôKÈ ?Yd`ƒHØÿ%vFò»„#h[Ùb1£h«:Šh`Ú`vÕw»¸»8ÆÈ‹cà \åAªµÌŒVH6­(Ou‡‰Þ7ðy½üÑ^±gzC ÏiøÁ*˜‘#@ù=®L{ÔõVd ÇptÀ=ð…|¨ÜF†ôêàÞØEPef›aˆ2ã8ðö·‘ctugGиŒb̆B‰!1;iw½Í,NLÏTÌõcŒ Ê4@۱ġ׃W«Óƒõ¨/º^±ŒHŒ lë"*̈•tÖ€^ÜÅÀ,’y\V‹a¥gó'5XÏbäÚ;*ªãŸyJ=38Õ;hDذkL„U3I{)o{áàž ºÇ ï#j’-ùüT~?™?}쟳úö¼~ö½Ÿ‘íß³ûß'?!ù,x††  ")&0.?, $2 $$%-'#/("**+!.:41/=<<0A 2C'<<'@E(D-L-P/S1Z4_8@<:I<3T8&Y=(d:g>!F@=UE:hA$lF+nI.oK2qM3wV?ADEGIJJJINPPQRRYXVZ[[^aaxW@yYB|^Hc`^~aL{dSbddfhhkklqsr€cNfR‚hT†mZ‰p^‰rawixk‘|n“uƒ„„‡ˆ‰ŠŠ‹Ÿ‡Ÿ‘ˆ’““Ÿ•š››¡•Œ¦›”§ž˜¨Ÿ™© š££¢­§¢¯ª¦¬¬¬±®¬´±®´³²¸·¶¹¸·ºººÇÇÇÌÌÌÓÓÓÙÙÙàßàâââëëëòòòþþþÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­˜°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛܸ'ßàáâãäãÝçèéêëÄåîïäìòóôõÚðï ïöþÿ{¡$‰AƒJVÀ€à†D©’ð¬B0Ô"°£Çòz|ùf ˜‘,ày¨Á ‰oHÆl±2‹Å T¤L1æÈŸ@ƒNGdL‹p=†¤§ƒˆ‹ØœIQ„—)ß–Œ1¡Æ˜°¤hJ¶¬ÙaàŠýö‚˘1bÿˆœX‘åí%Ò°`ÀÀ <ø“cB0±€Œ‰q¶±ãDzҮ=aŒŽWÀ°02† &ZhÙ;f €3g x€b‚°fŒù¹¶í ’®…&cv¨…¢"AØd³wÍÞ4:J>5d:g> iA$jE*qM3sP7wV?CBAJGEKJIRQQ[[[iUGhUHmZLxW@xX@c`^cccnmluuuxxx€cOeR…lY†wl‰r`whŽxj‘|n”u–‰™‰}‹‹‹–Š’ž‡Ÿ‘ˆ’’’¢•Œ¥š“¨ž˜¥¥¥­§¢«««°ª¦±­ªµ±¯²±±¹··ºººÇÇÇÌÌÌÓÓÓÙÙÙàßàâââëëëòòòþþþÿ€‚ƒ„…†‡1@B7†K3‚5MFCMD+2‚+M6œI˜8M!M¨9/ML5+‚3M*2;>V )ƒHI?2%VK…–*J¨4VQ=M2ƒ ?KSV(³:GEåMUQQM0 ¸°"aI¹*妈8á!€•'X™HÑ 960b *­ ´Â‚Â"Ž b…‡•dVFTh @À@Š&¬ä„I`Aƒ 8¡ØBçK+GüüI@B”‰,]–€Ò Ð  Ü«X…J XÃj¥`€a±`¢ Z ¤+ î¹ºX!ù<,CceB‡4$# 5"8 $; )<!('>!, 3%%%&&&(%)--)'(((..00+)334778;52;86;;<'@)B+F-I2D4G6H8J .K!3D$2L#;N&>@18W49Y:<]>>`&@Q+DT/EX2IZ9P_:Na>SbI3)Q9.a5f="]C5kD*cF7qM6tQ;DDDFFHKHFLLLOOQXPLSSSWWXZZ[BAcHCfLEj@VdCXfFZiI]kM_qRIoVJq\Mu^Ox__`NanN`rReqVitYjv]n{jNAnSFwZHx^ScQ{hT~~aO{cWbbbgghkklbs~tttwwxzzzlUrX…{]‹dt‚k{…jyˆpt‚y‡}‰’}‹˜‚hXƒk`Šse†{v‘}sר~€`ƒa‘Še–Žf™Žh™‘h›šn¢Ÿp¤¡p¦£q¨©u¬­x¯­w°®x°³z³¸|·»~¹‹€z˜†|×ׄ݀؅ ݈ ׆׉؆؈؈׌ Ø#ב-Ø)Ö”4Ö–<ט?Ú™=Ö˜AÖœKÛIÖžQ× NÖ SÖ¡YÖ¦cÖ¨eÖ«mÖ¬p‹‹‹Ž•™…‘š‰”œœŒƒŸ‘‰‘‘‘——˜™™š‹–¡›£˜¡§œ¤ª †£”‹¦š“¿€»­ š³¥ž££¤§§¨¢©®­¥¢¯©¦«««§®²¬²¶²«§µ°­´´³±¶¹¶º½¸¶¶ººº¼¾À¾ÂÆÂ½Õ²€Õ¶‹Õ¸ŒÕº‘Õ¾›Áµ¯Ã¸³ÅƒÀÕÀŸÉÀ¼ÔÀ£Ô̩ͮ³ÔȵÔɹÄÅÅÄÆÉÆÈÊËÌÍÌÎÐÏÑÒÐÇÃÔÌÃÔÏÉÔÐÌÓÓÓÐÕÚÔØÝÜÖÓÛÛÛÛßâÝàäãÝÛàßàåàÞäãããæéæèëèãáéééðíìòðïôôôù÷÷ýýýÿH° Áƒ*\Ȱ¡Ã‡ õHœH±¢Å‹!jÜÈQ! CР頤ɓ(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳgÉŽ@ƒ ڣѣF‰*]*FCŸP£JJµªÕ«X³:`ʵ«W†HÊýJö¡S†ZÓª]˶­Û·8n€¥CY¥/h|`X ‡» # IìQHœP² Øýã†á± ÂÎ>ЇWqZôðëVñ3”D[ Wx qÆ ‚S†ŒÕN.ƒÙ@±»¦/ :û] ÿ¤!<âDã Ù̇ƒ ÀXÑ ò‚r  q_Ö¤0Ä"’ë6XD¾(Bô^ék_®"¯·é!n¬H%F¡üIDª ÈüFÀ’å€q Ø¡ž¤¶ø*@†,ìøG0*;Ðõc`<~°²’Ð"v>0Ã?àa: ”Ë`¡*Wé“ Ád¨Ü?hˆOáðv;ì¡@Ò tàƒ ‰8¼„”VˆAtQŽ&x  °@ Úà‚0£y3d”€åÈ‚¬ ¬ƒ€$v6L/²è^ÐÆ ˆAl Ú“úÒ8ÿDøA9ˆÛü¥p¤£–(Eà:a Ll"ט8¾Ñ ÿi"Q¥Å(&æÇ?>…%D€G! ÙÁtLÿXРxHàúXL¢É”|2%a\žÁ14ücr¬ ªPi© Áö Â…lÉih€ ‚Ð¥±¢Dˆ/QhAÚ…„€ ±i ád jÑ›ž@¬s€ ¿‘BX°¢ºF«ZÞ?´¢Ü `ÒFhƇ? *üØQ‰d¢7±!˜£øç?‰Œ9w;E\AÑQ¢e%!)IMòÉŽ5°¨ý ÈÂØ§5EIi=ù ÿ4Ò âÐG'‡ÊÛÞ¦¤¨ìèG,—Ê2ˆt€Ú Ê bàöÅ XlLø:`*€ ÊQ4Á‰GL$œàDÔÙ¯R 8ùdÿ‘± lÇ™!¡1Û’ÎÔÏ0©ô‘_[øö¿v€ ±#ŽbȆ-)oÍ÷9x" îÊy€“HÒ"bøG9Ä@ÂgÀÐÃ$ †ÊQ ¡"þ$ — ˜%«`E§3ÍjLzÇ2µ¬gæH·úÖ¸ÞIf\è™3—ÖÀ6Ålëb[-ÂN¶² Gêc;ûÙTY¶´§½bCûÚØŽ µ·ÍmX;Ûàw¢»MîräÛâN·º·bîv·Ýž¼çMïzÛûÞö^·ŒÝÍorÃ;×ø¸Àï­ï÷ûàÔþ7„|•;|à0Â'®l…Ãt´XNO"eÔb-=°ƒÈGn‡‡ß›¼ÿ˜äqSüåÀ¶8Nİ †³„´(‰Œ± Vã0öä©§ÒqÔ„ÊPÆ2ž‘ôd˜œÎà‚¼ñŒ^ôⲸAËÿ ó®‹Zæ6Ý#9—:›„ÎG¤->#†gÁXFÎ5Õ± T ìu'BÆ2ã"a'ùÞÏ~÷Eád@ô¼íàŒzs 8 ÷ãu ï0<ƒ”wFÖo@ulÝ·^ý£Á^4<ãô4ÃéŸa Шþô“ ÆêÅà :Às7I08H‹Ÿ£~õ“3Â3hqúeàTÄ?=+@ÓûÓ“aõ57Éâ/ï(£øR×A1VO:¬Þévàÿ¼íð |¾·¢O¿šIO a(Ù3V!ᛡãË‚1JG [\º$m'(±{|tðs› ó%|¶`ú  zd X€b°ð b°[Ó7oÉP <°Å~ÏÐ80 Äp\ð Go:° ¿ uç7TêWƒÆ~4ñ~®çaF`Æ` ° Æp¤å_”ó 6€¼g„½Wg°€Ï1mWÁ b.æ_ýg (Ñ7ÀÏÐÝGu:@~ uÕÇ‚ô†İ ; ƒ3T68‡…ƒ3¡ƒ`z˰‡Ë b2{Û‘…&áËÐz)A€‚Ø„y…œ#|>ÿ IÈgó%ˆ°…x^ØÏà |¸ =ÀyKç %§‰h(o½à Ÿ‡q¸JtØŠÃÖlQ‡ªÇ9¶Øv&D‰)Їÿ§{KèIóµˆ |÷|ˆd…”s”h‰]8~Ô·ÏPròyóÖW‡¤8o¼ †,·Š¬ àŽâ8ŽäXŽæX‹è˜Žê¸ŽìØŽîøŽðò8ôXöxø˜€cüØþXm7àÃçF° «¬@:ˆç¬° D?GS0Fç‹|Æ„ÁˆP Dpþõ|· \H‰0|?€‰Î8o¿° `À½° 7 Qǧø…Xÿ'~²€u݇yÞøæ”ByŽúX”Fy”H™”J¹”òèNÉUq€óç4wz´Ð1f°tÃD°tb0«wzÁ¨{h°dsçs%Á‘ÃÈz€X$yzei–'A’ÑW^x;@ §§ R——Ŧø É€ayz\ð“«Ž6®Ø˜M±µxð:—ÿ—ÿ÷½˜Âgwˆæ™as:ǧ”ç‚§9oÔHpˆÉB „Q‹‰ŠÑGJÀÝ$r Éå˜H‘TÂg=arÆYo­ÉBõ{#‘à „"Ç‘‚#Èp Q쀾ÙuÀ)šªSÿ¹ÇYžª˜œ©ó ¢ üá Œ5r ² ÒÄTPÇ€,Ýùr߉žê[à?pÃ'ìà'z(‚B(Þp(‰ò á("mÀÑ5YÀ П÷Ÿú¡A5 qÔ #0c0£0zÐ ¥°¡1¥ ECp¥ú› ž Ú£ #¢þ7sS7w“7ªÐœmDPñ7#ÃEÖÃ8š£÷&p¥Xš¥Zº¥\Ú¥^ú¥`¦b:¦dZ¦fz¦hš¦jº¦lÚ¦nú¦W ¤òC?öã ø£?”5P!@D£q£TZ¥; §„Z¨†z¨ˆš¨Šº¨ŒÿÚ¨& §oG1Gu$ð©¤{aj¡‘¡¨üf¥Ž:ª¤Zª¦zª¨šªi ©uP µP õP%ëp œ`Q¥QÕ4ùIû ªý&ª†ºÄZ¬Æz¬Èš¬ÈªªÌÚ¬Îú¬Ì*¢õFË)Y¾Ñ?‘ È‘z Y¿ÁY ÃÛ ¬¡:¨‡ª¬êº®É ­îú®ð¯kª˜Á]Þe©á5^Â1Q’›Ð Ïð$æúnè:¬ìz°ë*¯ »° «°ôº˜G1°¡'¬…¿p±û \€°È* ëðɰ;p¥U€ 3à°Ð°*»²,«¨ ±!±ÞY°…* ¨ÿB¨ÿÀ Ä 05ÿPZ`( í`YðsвNû´Pk¦C9µTË”V{µX›µZ«¥ˆZ¬²ðtP¬Zв ³ÅвPÄÚÿ v°ýPĪ ÿ€&ÿðWê÷µ€¸‚û¨T[¸D¹µˆ›¸Š»¸FÙµðøµÄº ÿÀ¶;@ûà@>Ëùà@ÙpHÿ°½·;À wkÑÐ1p¥·ðY0¸°» +³´›¹; ¹”;ý€t ´\`º½°Ü ðÀ]`¬\°ü°&€l𮠻؛½ÏZ»Ü[·›®‘ÿ;¹;Àÿ »° Ùð`ºé \P[¶ Cp¬ïðq‹ý XÊÿp Úû¿\ªÝ;Àð½›»â˳ÿà ü»°ØÐ°C 0J@P6°9À =K¬ø«¿WÊ¿¸À$\ˆJÀÝkÀ…Z¬º;¾ÿ Ū³Z°±v€ý€  p9@¬& Ó{¥Õ{½&œÄJ¼¦(̽*L¨,,¾;P¿½€ê ¶v;ºÙ  AÀS9:¼a`æÐ0ÀºÿÀKÜÆn<¦M\»O §QL¹aPô ;  ÐHÐ@ Á€Av`°Ëðnp¥ç ºoÉ’¬¥qL»sü¦ëv ÆÇ[: ÁÀüI‘´eÿpÁËÜͱÜÌæúÌ¥:ÐHC0¤Í @ÞÜÎÌ ÎÀ*Îã ;–Îÿ` PîÜÏ& ÏñÜÐZ ð;جHì  ÀÏþüÐÿ!ù,x˜† $! + !&. $$%%)--)',,,2)&210:65<;;0A!2D#7I%:N&;QD0&G3(K4*Q9.]C5aE7bE8fJÍBRLLÎÖ$ -S@Í­NSG†úÌ# M¦(ðDß”VSXd°pD+„7¦Ð˜kJˆ (PgèÄT¸‘AC,>RœòÀ…0H`"(âDJ€És8}Rž˜À³¨OCF0P”''XŒ à@S£²>ËÊ3!ù,x™† $  + !+9&. $$%%(+***3.,8*$50.<;;/@0A"4G#6I%:N'. ‹ ,ST)K7,‹/Œ !NV4 UVVDV ‹!LV:‹ 3JV*&VB‹EV=Œ<4HV-VO"8VN7::0£VAQV 1"GR:03) ?ÙCUOO‹ 2VBÙ¢Q&PñA€•$ L[ˆ„‚ @±Ò€”…VDYAñ¢4æ°bÃJ‰Q#*dÈ`Á€¾i'¬Äp©‰i~X‰ {t˜7~H¹ËÌÍ´?m~=)~rAg~xSÜ/ n| “P~7Îçèè¥`„Ñ~)}¥òS J~8“o|éýþ¶>L$º€ÅÀ ða£€„/ÿ"Jôt°âÁIKô<€rÂÄ -м²¤É“(Sª\ɲ¥Ë—“ÈœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³µ¡µ+Ö95A0ø@†L f‚ðàµmP°4ÿ÷Ì‘·¦À>$ð3Æ­ßžNjîñã$Á?EŠø‘1@±Ù¿}Ê•Y€O™½}çìɹ³Î=efN.烟'žSãÜcGæÞÐ2ü¬ñ“Vµg®Oøˆ0¸‹ŒÙ4ÜÚ¶ç=3Þ“Gž–™YŸÎ»Ìh–ñ“€ºqÐ5E ÎâÝ8Ý4;)R¾½û÷ðãËŸO¿¾ýûø“FØÏ¿¿ÿÿþ—ßPh € uà‚Å}*ø á„<0 S4Qa2uÀNYÄPSe°7”‡¸„bQ‹XX¸'ì'DW\QÐ…‰7M8ñ˜O0Œ‘×ÿc|ØÔ tGZÔÄ_aô' ,LÐß ,X.”¡ƒÁcD”AÁ0\6”R&Gà dçZ•€Ö41€LÐ0F€æðŃIðDrÕÁŽQ›LWf¹bTZ£\@Z:ˆš¥ì÷C ðyð(¤&Ž‘…¨µ—€¢¢W„¨O`®€PFZ <¡§Q%”!BEtí ÈØL™òdÀE–«r0A[D°B]ögÁ1&ÇUcÎ0ìn”ŠpÀ¯i 9€c| ë4kCÍÒP€ çe@ŒÑPÆ‘E‰PÆ"ð9¬ÿ ¤HS¶hP:èЦ>”1 lZÆ ýM°ÅDPÀ3È4Æ3ÁžÎ”Á•L,‚5”ñÁ}ÉôAw?¨/Ëe(¤9ÄŠtc ‡é~XªLÆ`ÁCPJp°2TAûÍ\³ÐÖäL?Ú¹pØ`‹àj55s LWG”Á@ðAch<Ç”áÃ~x)AÊPQÆj³¼ßkïç®L]\;óÏ8ÇZÆÏ¿> F()“ ¸ëN&å°ˆ_öDtEs­iXŒÑ VŒ!d° dH°ÁŽ©2±ã;ðÐêÿ«2 KÃÑÇ&W 8a4ÝHÃàAe `ì8ÌXœ1 P¬³¥"«J1¦]€ñ’®í'[€”XÁJµ`?U(C& *Q­`ëN‡µ_2ap ˆµÇÈ@TG8\ÙcÛ½bF9@•€:a«@“º„ÈŸ ¤ AXßìvX“0Ñus‹Õ)“>ͤq3RW,ÄEÿÈD€ëI Å–¡$ˇZé¢9$”À Š£çHÇ:ÚñŽxÌ£÷ÈÇ>úñ€ ¤ IÈBòˆL¤"ÉÈF:ò‘Œ¤$'IÉJZò’˜Ì¤&7ÉÉNzòƒ“  ¥(¹˜P–BkôƒiP©Iø«ì¤+K?°ò’³¤e,[ùJZÖò–”Ì¥/w‰Ë^úò—˜æ1‰Ì^v –òðC1a©†g>áÈf1Ms„'Ô2Hf)²©J\S“~Èfº ËÐdRá@Ê)MY¡­ë¤: “@!ù<,ëö5Hƒ $$%GGG^^^mmn‹‹Œššš¼¼½À¿Àþþþ”pÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vk\†‹EA¸ ˆ‚À<ö¥ësï gÏÕðx[GÏÛùxyz€‚~r7tqaa9o Š•Že q€ •e“< •šk <ž¢ haA•–!ù,,ƒ $$%GGG^^^mmn‹‹Œššš¼¼½À¿ÀþþþVpÈI«]Æê±VÙÕBx $,Àø'’[ëª1ê¾k%ß´nß83Ù¯N‡Ò"(ˆC`Ê-ˆW@à[LE€¨Æ;Ŧw/JÁ¡s€³§I!ù,-PHƒ $$%GGG^^^mmn‹‹Œššš¼¼½À¿Àþþþ¦pÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn‹ïbQè.ô­`À׳{}yX‚~…|‚ƒU†‹ˆŽŠ‹Œ’”„R†ƒssT œ§ w ƒ’ §w¥W²§¬} W°´ zs\§¨!ù,”‡4  #7! +=0>  $$%%&( (&!+*($()))+-1"1.#41&2<$95%=9+04,4<7-6333778=1<;;;+E4G .K'7E'E6:Z>>`&B=Ek(F@(KD)OH*BS*TL,[R:EL5FW0EY2JZ:Q_8Ma=Tb5Vr6Yu?Zs8\z-aW.dY/j^0j^0ma2rf3vi3{l6q@??a5f="G6FQ=OS>RkD*cF7qM6tQ;CCCGGHBJOLLLIMPMQT\CZSSTVVXWXXZZZGCfEZh@YrB_zM_qRIo[Mu^^`NbnF`zWiujNAnRFxZGx_SjLheR|qOnqQoyUv~aO{cVccdffhkkkoopbr}rrsvvx{{{P‚;eˆ>k’?p—xÏBr›Cx¥G°lUvZˆhx„x†6‡w:•‚;˜†<›‰=¡>¨“I…¸@«–A³Bº¢t‚|‰’LŒÃN’ÊP–ÑQ™ÕRšØEÅ«Fʰ€Y}‚gWƒk`Šsf{r‘~r×~…\‚†`Œˆc”’d“hššn¢Ÿp¥¢nž¤o ¤r¨­w°²w®²x®¸|¶—†|Ý€ׇ׌#ב,ו8Ö›GÖžQ× NÖ¡WÖ¨gÖ¬p‚‚‚‹‹‹ƒ•‡’›œŒƒŸ‘‰’’“——˜›››‹—¡“œ£›£© †¤”Œ¦›”¿€»¬ š±£œ£££§§¨¢©®­¥¢¯©¦«««¨®²¬²¶±«¨´°­´³³±¶¹¶º½¸¶¶ººº¼¾À¾ÂÆÂ½ÕµˆÕ»•Àµ¯ÅºµÅƒÀÕÀŸÊÁ»ÔÁ¦ÔÈ·ÄÄÄÄÆÉÆÈÊÎÅÁËËÌËÎÐÏÑÒÔÍÅÔÐÌÓÓÓÑÖÚÔÙÝÜÖÓÛÛÛÜßãÝàããÝÛåàÞäääãæèæèëèâàéééðíìòðïôôôøööùø÷ýýýÿ—<øÀ‰–芃à¤8ȡᒆ3jÜȱ£Ç  @²¤I'îÜIy@’M)&«¼$)¥ß2˜ÔúqÀ¦_-“ V²q³„fQš;M*]Ê´©ÓZê’f(gLÓ ²jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pã®}ЕMÚpxóêÕûuáÀ9ºÏá80FZ´ ÓÊG‡µæ„œL¹òä‘NïõÛ,¹Üf›xÞLÃç~NÜÌ!éħÉ%ýÜ}Ö¥àž;šýt9ÝÍÛiu÷¢Nµ}”)V¹È“+_μ¹óçУ£½0#Ë Zí¢ Ço÷¯%êÿbóÀ®‡ºÜ<ÎØMólœèªRp¾åûø-cnúÛݼøÄ4ý¸áF?¼(`Œ>õcLq$åSI°éò9 ao òÆpê”c‡WI§âŠ,¶èâ‹06ÇÆŒK\€Å ؈ÚÅÝVÞùUéÉG‹ë=0ÞFsÔBP-´<Yyºdß•Xr´_SêÜÀ<÷ÄÇöTÎ`$) /Jƒ R°é@ýÌÑšnó¨âž Žxω¼ã „j衈®Õã hE]V=šõ£VARÚ—_lÔ"˜•Kj4G”9ɆcµÄ‘å©§nÉT—$i¦Ï«ú@ÿ€.úl]kš¤ hpÖI’iº¥TÓj|ËŸ‰Á%•b¢Ì6ëì³Ð.×c hµ@ÞÕݤYq»ÕdÁcK„§¤LÖb¥”Q*ÔØD¨Æ‹ŸªK±úå<R€Æ¡&›$ÑÒ5LÁpO« >,ëpIùC¢²ÆEkñÅglñ¢fE3j ¤·Þje^DeÞJºÐ2‘+‡‘÷@bêÊ«seô*UŽ>qd°ë2U¸ù)‚R,S šî¸¡ÀúÌ!u¨3OB›Ñâ†f;e@ÚÃ`?`¢;Nø©NËj¬öÚl·-£V ܘ£ 2°E2É}™š`¡ÿKåy£Òפ¦ ­K¤Í;'þQÏ&X§nS}¶ In¢6ÚgÔÔ¦O°ÉÖÐ%åÄØ+Hö¯êT•¶Û°Ç.ûì^E Bu3Àð… kÝýWëR´DðŒëébedFŠ7Ÿã@)›h—Qõ$‰ÛlsLß0IÀY…ºÃ @˜øM Jûúì·¿1X"ì®–ïBz•be ©dÎ÷ÿüø¨ãžR¶ÖZð€½QŸûÈÀº(RÙÊJüx·½X°R\ÉàE °¡ ÄóŸó ‡ÀÝ< ÛW©JÈŠ9ð…0Œ¡rfDCnE”Žw˜8¶ð‡@4–ÿeHÄ"Qc÷ÉÿÏ~úóŸ è>qIЂô M¨BÊІ:ô¡¨D'JÑŠZô¢ͨF7ÊÑŽzô£ ©HGJÒ’šô¤(M©JWÊÒ–ºô¥0©LgJÓšÚô¦8Í©NYš•úô§@ ªJ ”­D¨HMªR—úPpeÅ LªT§JÕ?r  諪V·ÊÕ®‚ª^ «XÇJÕ«~¬hM«Zmš®õ­pkJP…Êõ®xÍ+EéÊA½úõ¯€=èUQ†²¬ö°ˆM¬bËØÆ:ö±¬d'KÙÊZö²˜Í¬f7ËÙÎÔ“  ­hGKÚÒšö´¨Ý™%SËÚÖºöµ°­le»Ú³ÿzö¶¸5iOY8¥€ 5P À€â×ã“ ( „ã'Mi"À”äà€¢!Vn·KUºÕ¶¨ë­RTGÔˆ<„z×Û>ù&9Äz>7DÅ)% ˜ˆD8l,P -Ê^îX¨”{ê„(Þ¥â¼?”À VPˆCLX| !LBHà’àAé.‡_ý¹&Q®Ã"Ñ^“ŒÈ ŽqTÛjذ= Ž€#@P’—D†xÄ# 1’à€ITÐH<ÂNĆKòƒHH% ¬ ç ‘ˆD"q“ ð À‹M„0c9ÿù=D˜[¼‚1¢$ „• ÁÜœ’ˆD Ðß@Å€†1ŽEËøÑ8…ÈAJxcHÜu.I|¼äL«€zÀž|;Mƒ0 o¤\’Hâ)(D"  A£ וp…WÀ˜d’¸.OÔ±`HuNò›ˆB¿ˆÀ á_’èy+@D!¢ ³`p^šY°“#&‰ƒ:dévÓÔ nEàq¦pš$  ô`QC¢0I#ô‚ô†Õ$AD"xÀƒgŸ€‚®€RžâDÅl vI¨M’H¢ùÕAh"á*W;‘ÿ(ÉèàãKañRjî’8a…îιL¯Zã‡=À5°7”i Cèý€dMÏ Ç¸Áª§ŒòD ‚X—¸ž-ìPœ$ P8u[¢q’ ÜØ(Èo¹Qžæü Ú ˆ"°Žõô ˆ.‰ÌÛTsû¦tí¹Ãæ e“Â=΃‘“ 3> ÐÃ#°Š#¢ífFA!"A’bÛ%iÀ!ÑgÖÁØóÕÆ$Jßëžù&'É땲e +%°W 4HL’rîïÀ7©¸žŠUyçá*P€ xL;4<6„! ‚!CžhÀúm€K+ ¼ÿÙ©®ç^£ˆ€*ÐA(›$U^A N\Iø€,Èr„€—Owôg bkçv'Çr+ÐÎ ƒ {p…PÇ:qnë|8RmeT¶4>`z N¦i¢ÆàP}N&}L×t¡ÑdN&u•Gu ë…Ѐê ]W`¦_·^ÇVö• AXn ‰ ^˜×_%õ§^SÆV& wF\h(6`g¥nìÖhøQ»Ei, ~° @y%an˜w0‡#%0v`PpèÎ]$ˆ†U¥gm'wˆ%ÿÐ@Q‹¸Ù•†–¸T Sƒ°y˜w‰žøV™S<Ð;ÐyŸxŠk5[ª¸Š¬ØŠ®øŠ°¨µ‹´X‹¶x‹¸˜‹¨²T&@¨ø‹ÀØD&€xà‹ÁxŒÈ6ÃHŒÅ˜ŒÎøŒ¼±ŒÌØŒÐXÕ(ÓHÖ¸ÁˆÙ¨ÜŽ&õäXŽæxŽè˜Žê¸ŽìØŽîøŽðò8ôXöxø˜ú¸üØþøYâ8Yy™ ¹ Ùù‘IS¡±A “`L¹/Nù+åsT’•Ù3i%AT“dùCšÁbc9¡±9¥q(>îP+ý @ h£&å"å#>H™UR@ Ë ’’Ô`”` …I „˜Ô 0ñ—)„i˜@ Œ E1˜‰I,q˜´n˜ÆP`eYš¨Óÿ µ0 r ² ò J¡’n Ã¾²'àµ`˜&ñ—«y3Ð0¿y>(Iº€™À Ð@TÔ0œ´PœRB Vb™ã ºA Ô  0ÔГÔÿ@ PÔà/ÐP àDcšî‰@ö&bB&¸Ùg’ÿR/øBó൑—ËÀ0b JJ!Æ™j$¡R l ˜ )¡Ú™Á ‰¦ ¡ô!¡z9é™&+Ñ™š4´¡hl‚ïÙ¢c/®+²B+¶‚+cê’`"¢±Ë¤Bú{Ka¢Á©¡Ð¤Jz:Z™Jš¤ФO ä¢q ¢˜n©¤‹æŒ•.¦ÆŸû±ìÙþ’+³yVQzÒ¦³'òÑ0K¢4¡¡Ë`ˆ C¡ pžaY={¨•‰‘WË '<ÿÂÏ™&ot¨bZ© ò3A34ES'à I³4úÐ4 @ úc´I¥]²á¦{r§ŽAÔ!ƒJà©ÜY:¡ÐPKpœ³µÊ·z¨$‘¨É¿ù'¹U Ýmœ–:­Má8s9Ÿ19•³$–9òQ@Usr™”ЩÅÂÐP˜»º Uù›y”r¢™I5Ù®ê cĉ:ª÷JÍZ˜ºÀY˜êI­Ë =^©f «=8êŸWIb,åó R<⇱N¡±¼‘`JyV”Cš;²ãc/3ýÐw$»²K5#JÁ.ƒÈ²2;³4[³6ÿ{³:»³<Û³>û³@´B;´D[´F´´J»´LÛ´Nû´PµR;µT[µV{µX›µL› \Ûµ^ûµ`¶b«µd[¶d *¶j»¶jkJnFf·r;·t[·v+b›·z›·wÛ·e;Tû¶‚KE~[¸†{¸ˆ+µ{»¸Œ›¸Žë´€;µƒ;¹Gô¸RÛ\À`¹e«3àS[šË¹L› ¦{º©À¸z› ­Ð ªÀµ¤k¹‘+µ”[» .K°ANPµÐU}[§p £0~ ¿@¶ÈJ ™£‹ µÀ VP¸À Æ µà£Ü«« º\ÿû ±Ðµ­Ü+ ™»;»Qk»î»> »ºKµPO0À{·!À ùë·ŠZ[åàJ ¿p*ð êÀ¾M[$PÖ{ Õ µ­à ° Øà ®ºà›è˵®Á­ð ê  êë¸ ü´ï»Â°“»ò»Aô{ý;·@ §À Ã;Áœ° £ Ã›ÛÜÀ Ÿ°¹£Ãžp §°¹M{â`ê âÀ¼p 9 ùk çP"Ìë âP"⬴W Ìû´œ0 ¤½GÌ I¼Äp žÀ ×ÀI £p ×ÀJÛœ0ǧ0œÃ§@ Ÿð´\« êÿ0¾‰œ 9ú ¯› Ø£èà ™ è é€èÀÁ\ êÐ 'œ¸)ì´,|Êj¿/ ÃVKÃw;f@½$ÀÄ?Ì $ÐÀÜÀV Çp œ ÄV ÁNë^ð ãà^ºVìWÑ * ¶0~À¼0àåà ^pcœ´¶ *µ#`Ô›´À,ÌüÜP¼›À¿ Æ#Àç,œàÆV`#æÌ$½M›È‹Üµß±à é ™à ê0 ­0 –\ÁéÁ–ìµÙ&<ʇ[ÊM[ÿÁµð9g’¨\ÒiQ/lspµ®|·$À 2¬´£0 ßÿü ‡,fp ›¹ÃP£`ÇO»œ´, pà ì0 ·0ÎJ+ÀÌ´e| ÒKÌ¿ÌÓ>Íì¼PuÜÜÀÕ@ œ´ƒüÍ]mÕˆœ ŠÌÈŠœ ² Ý©ð ýº^ëÁ`+ ꀾ½Ñ;K \ÁJÃ"R N£NÀØt1“ ´0Œ4 KYÁs&ý¾ª¬»J³,]ÃtûÒ1´£ÐK›ÚI«Ëp ¼¬Ó? µB­´ ÖÀ ºÍ P½£åpD=ÀL çð hí´^=Á°=ÌYÍÎ!€Î|ݨí f}ÓO­ÖN+ÐŒÜ êÿßÞß ©@Âꀬеzíµ °û×…ËÑL+Øá³‘30 òîÀù½ó°gY@[A+(;:O 0þâ\"ÝÙ¶ëÂD'ái £Ý·¦½Úª-ÓÖ-\ Ó°M² ÔN»â0Æ`ÑÛÀW` Ö0ÜŠ°´*PÍÜÊmÕþáì\½;}ã¨]ÖöœáÙ=ÁkÝÖ\»  ¶ªð è0Þ\‹³àµÞ­Ðï ß}+ßK+RnºÍÙÔs ˜Y µ™²Œ¡´ ]Ât¡»å€ßo>9 n»/,¼àN°Ò1,"p2n¶.Óž´|p #Фÿ0 WíáY µp`Æ0°¹¿ÜpT ~   Ò ´Ô 1ãP`pê «Ü_½ÓŒþÓìü Ë# ¼£Ðæ ÔÜ´ÀüLÐl]ä™èັ€¾­ ªÀ èåíެ°É±ð ¯ÑR~·T®´a!îð'Y>àýp>ÇP@RcÐ÷p$ZÑ%]±+NJS”ŸC&=ç”»Ê$óPµO@XU€v;×ðë ƒÞÕŸ0ħÝ~ þ´ 9ʼÐ ÜÛ PÆÀ-ÜI  yàÝkÆO;Cœò\ððÏ­ÃC|á#ÃÜÿÀ cÌ <¾´+ßÎA.ì«°½9ªÐ LÉé͵¯`¾tÍ×Ýë Ù>åíÞîá®æãŽ­°¢óð4>ñîî\±+ç£ð~ q÷æø>¹úîê K?µ«þçZ«0ê] 0÷} Ý`ðO¶zË ­àÉ¬Û àåm?·Ûž´l±+üí&ÍP>à"0Ë \/îÞù§ãþ÷ rö”ëàºjšø¨o¸Ô]¸‡ßú]›úŠßôiæºàf£˜SSžBS U±+M³æY‘9›/úƒûÙ”Ë@ °ýu;ëo·®ïúÒo¶‹/lÿášQ `¯ßÿÚsÉßq5Ò9Ä¿þ¡Ø±¡ü”‹ÒÔŸ‘ýöý×ßú÷¯µÛï dâD @ U–Tð`!C]ý2<‘ÂÐM¿Z 5näØÑãG!EŽ$YÒäI”)U®4ÉÁÉK˜/̤YÓæMœ9uîäÙÓçO A…µ™ÉèQ¤I•.eJÔéS§3|²¤ª båúÝÃZÕëW°aÅŽ%[öà’˜0¡®eÛÖí[¸qåÎ}+µ§Ù‘Nâl¤Uë!^À&LØeZº‰/fÜØñãœvy¦\ÙòeÌ™Q>à€V&dСE&ÍXòNÍ©U¯fÝZ,бKϦÿ]Û¶âÓ:]ïæÝÛwkŸ¤T©"åÀmäÉ•/<õ÷sèÑ¥õ‰DlŠÌµoç.:wÎéáÅ'P(ˆ*º¯gßÞíwœååϧ¿Zè(îõïçÏþÍúb@ 4ð@ pÁÁ‚Bï¸þ"”P¿ÿlb¯3ÔÁ ;, (ô@˜pD·«°&ò lC7ôðŰ~B  K´ñÆÚN¤©· âÐ…ƒzš] SÂ$“´¤E)É%J„qʪ‚«¢‰²ÄqK.Óq¦²Ø€FE’jÑE –¦–e¨©¢½È² (yæh¨¹Ó&“˜fŒQ¡Fa¨ÁEÿ*UÉ'ôˆ#N½.#•®/ ‚8 Y¢+ bˆ  3à…`ƒš'‚æL†8À*ƒ :}UЇ8S@ ) `h Z‚UV&¨qƒ†´dÇcˆ•=bÀ5¨¡äÙiBÐ!ÕÖ¤I»õ²JÉšƒriQ r©áEEtÉ5&cÒec 7Z†ÕƒŒ1W—6Éý#Ýz« Fr¡a¢!‚É­EE~Éu#Ý12Ù•x¦`@P&]J(I—OK’ÐjŽØöd‘¾Uyå¹Âë7 Éà'¨¡åãra' ©â]xéê SÙÐH_«Üä Í*à]FyÑÀ‰ÿeŒY]7À:i6ˆå€6ÈhbQ& $”™%†È%!Æ fÙ€†DQÖ»#–ûö*—ÇŠ™]j]†— Y¦ëƒ‚֨挎ޗøHާ~èTxÉ—rÇ‚lÈ" jPéXÐ#HFЊç.pˆd A"ï½s7ïoÞ{ï)p±W`\hЇÆs'â¥ÆbCh hÖÝéÐ->sjºÒܘȭzÚùÑ.vdŠ• Æøâ•¸6Ïi–4ö…™F}ÜuÏÝwüó¯ ø°„G·«¨H€§Ú‹óDp¼¡1„z”óž@怽 ½!{¼ðœ@Œq&ð‘n|B8Öÿ€@% ˆYRB¡†ð>CvR²ŸîJ“ ÆP†3¤a m@æP‡;äa}øC QˆC$bxD$&ñ´`bèÄ0MKت Z|­X½j )p¦MnèBè¤ÀÉUîi׃Úò†=< H´ ó0°ƒIŒ|"4Ô0a@C¸€Æ’ÈÓJd¸0TǦÕB’Ɔ“¤ä$•xILfR“›äd'‡øDP6±,K³™ÄD.]`¥]S‘òƇ¥‹kÌ׬Â*69{¼p±@GrÙò– ¡cÄÆ¶G&ƒ\Ï”y>5Ä΂,Éÿ5HÞO’©`J7½¹ý…Ó': ^°4¹JHê<ÈÈýJ#œGÊ©ÇáYuÛ'FÈ¡lê 6²yK ¿yÐT´¢ª0 M® ÐdÕ€”8ñGÎzvH`ð “³ C ÞÐÇ,Ñbè›ÎcÀG>Ä‚z°ƒ½~è‡-ä~yÌ'¹î›_O¥ð>u­÷¸ÀÅ6ú ³þÚUÏzÛј‡@Ö`ïúÑ‹Ìç^÷%æÿ|ïµãyÓ9ï¬ï?Œß` AõîÇ6Xïo:££õ²§ýzmï‹Ýg_ûþõ}÷“|9Ïyøch>õ†k[Bú–à7ô‘`zbÐ9÷üz)oùíç_ÿô Šœë}Œ ð 6ñ=$x=aÀ鳓~;r˜:òKLP¾  \ƒ0}P¶ë?Ø? Aö ’ú¿\yÀºø[ƒyÀ:g˜³ì‡1ذ뷸\¯sP;BýŠ')¨\¨¸»àµ5°„0¨³(ô¶Å[==“}‡Ђ~`" Cíû €‚ %dB5 ÿ1l{C;[¯[ è…w˜1ÌÃÜ[**8€3LÃ5 ÄhÃCCü6=LÄì󉀂˜‘p5AœÄ™ DE¼DLD2FÄ•áHBJüD›°ÄLER± øCPLÅJtÂRlEW°SDCULEþA.[D®YÌE6tŽ[ìÅãÒE`ô^ôEb”«` Ô¹òS&TA=T– ÔBÕSDmÔ×PT4ÔÌ8ªrT*ÔHeTß T²Ô)ÁÔ”TÌàT&Q‰ÕôTàUÕ“ˆ_¨ ÃSKˆJu(a!zñchøš= zA'TýUõ>V5‰ª K¸“iГgÀ›ñØB1DI“_Ýhˆ_Ñ 1Q‘ €‹Ö±(VcÕTªx\éŠd'&×òd×\)Á>iº!gi¡kÁS:Í‹”׃ØV‚ø‹RˆhW†$ÿLÙ”_Z†S5Wª@×î;Ö…ì—Âa#xI[z^ &›Ì“óy“c}%¡‹9ŸŒÙré˜á ‘á ’Q òÑ“-%8žt™ÑmUPžý¥tá—r¹7¹^ R]Ží=íˆeX†%à^“deƒe#:Ê€.(œ%ÂXZ€Wá½$—³AµÑÙ¶y›¸™›»Á› &:ú™q¡“<ñȨ-Z]€'™9Û90jЙ˜™™–sÑ ªMԫ弬Ý*²H‚`£†p‚*—¡¢†Z˜29’ Š[ÔQJ`×ò§Ú¹!yX“ÿ„5,Bh°¥m½£Z 9 'ø¢‹$áéݽXªÍ\”Ø\ÎUW• "–Õ%è™óÉURY[Ê€/:Ÿ1…Û}5ôõAöqŸŠŸùÝ…Þ|9rµàƒÑYß*pžƒxÞ •ê¥ë­»ÎíUË5Ú°IV^X¬ˆ§¨ÊZ8ÍZ€äaUôõ ò§)!j8¡øU!øù[¸á%ÞÈÉj ^ya_Q€/"“*0ˆçuár-`Í=àwK`øÚâ0°ýfÀ•6é‘ÂဠöÚep‚r¤%Î×}‚>ú#DÂ…?I‚`@ÔÁ…Ej¤Ž1™žžÈ]ÞÿÃ\& ƒ(Ú/b&°jÐ)@]&Øš6"¨¥“+Ú^æþaìU‰£-ƒHVèA¥ì•‚©—%è—'~Ý*v¦ej¦g‚†5&j²¦¹¹\by€ >‹\•å½`äóŸXBݪls™ƒˆy˜oýc’dA¾ ³ˆŽXvò•†=`Ò–E}2bž ©\n•Œ¢'¥ÞõÑ_N']’ ^Zîa[~3 Repç *RÞ”RÉfmÞæëæÀøfp> Sfu. vî4w®g3½gnd}6W~²|þg èvög‚öTƒF¯Nèç\èájhÿ‡.Lˆ¾,‰žh—¬h¶ºhŒHþ)Žîèuüh‹ i‘îF’'“>éjLégCh–ÞS—ÖŸ•ŽéeœixÃe›Vœn+Þi…îiÌ‚i Þg¡&.¢.ê&=j¤þi¥FT¦þ›š~j\Œj8Kjª~h«ö´ÉÈj¨Þꕉ¬öê¬ë_k²nI³V™©Nkc\koik·†+¸Žk´žku¬ën‘k¼(½ž¾îkHúkI lÁ¶ÂŽÃ>lmJì-YlÆ)ÇÆÈŽì“™ìǾkË&F̦lÍÞì^ìì©lÐNѶÒ.íO=mImÕ~ÖníÏ~mãŠíqmÚ¾ÛžÿÜÎíÙm émß®àŽáîù(îþ8nä.åæænîñxîýˆnéê¶;§¾njÌn÷°nîŽïnðïçoö(oóö ôî¼Ù^oÄnoîPoøÞ ùžï÷®ï½¹oÉoýFþþ=ÿþïm pæ oW _OpÍXpåhpÇ ÿ¾ŸðÕ®pÛp ïS ßð ïpùpßn+Ï‘?qIqÚàp Ÿ qÀ˜ñÒ¨q7 ' ßq²èñÑøq T! "/òA=rpYq%'&Gr'rñˆò&7q*ßo+wŒ$ÏòuÞòÄèr/·Z0_ ÿ1óê-s3Ÿr4?o5Ç 6osö~ó0s9ç :¯s,¿óKÍó–±s>OU?@@tûtBßsCqD§”B_ôoôºxtH§pIJ¯t˸tLWtMNo‹3ÿôõÌtR' S_‹QOõÝYõ&ôtWwnXõ®žuÝ®u¢hõY×õ]Gu\Ç _ ^wõaŠbOõcŠd'õeßEYvì~öqvirjÿk¿v#ÏvhöO÷vaŒvn‡qÄm/w>÷dLwu¯vowr÷Þˆwy¿uzŸn{EwÏw2ß÷Uœwt€p×ô‚—Æ~ø“Hø€Çwÿ†o‡?øJwxƒ_øˆ¯å‰ÇøŒO™øŽÏ ‹§xHyŽùäúxˆGy÷ûÃß|ÎOz¶?zП|ÑÇöÌÇúÔïvÒßûÖ÷øÕçúØ_òÎ/} ?ýÿÚw}¨Ç}ž×ýÝ·ý×_üàï,Ë/þ¾?~äßXå_þ•~çþæþ4Ÿ}²§þê¿}ØÇ~€~îdëûï/ ïÿ‘(ó ôOÿ”ÿ»gõŸ~ø÷ˆõŸÿR—û¿÷üüçü,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ pìèñ#È"G’,iò$Ê”*W²léò%̘*gœÔhó&Μ:wòìéó¦Ì B‡-jô(Ò¤!išüéô)Ô¨R§R¨ô*Ö¬Z·rMÊ´dÕ°bÇ’-k–`×´jײm{ô+ɳrçÒ­k—¡Û¼z÷òu wäÝÀ‚~Úÿ÷0âÄŠaþYø1äÈ’â©lù2æÌš7sîìù3èТG“.mú4êÔªW³níú5ìØ²gÓ®m›s€Üºwóîíû7ðà‡/nü8òäÊ—3oîü9ôèÒ§S¯ný:öìÚ·sïîý;øðâÇ“/oþ<úôê׳oïþ=üøòçÓ¯oÿ>þüú÷óïïÿ?€ 8 x ‚ *¸ ƒ :ø „J8!…Zx!†j¸auô£/£O?šx"Š)ª8\áÜCM+Ê8#5F˜A?1‚ÇA:Úø#A ©œ‡á=PE ¹$“MY$xNp …’îapŠ'Ü\SFniœÿÂÍ0“äæ@'Üpc ]^ÃÍ)Q8ù&œq"¥wS*ä{œIÄ&Ül€&eQ7n–qMD¤‘¦ži j„œ‘J:itrwçài%7\*°e QÆ¡\…º5š&¥­ºº¤¥Û-!ÅT±„œ‘Û)i0Ê5ždÉ塘9 «š˜yÊ®¯:û¬ŠöSbw³J!ETrꦧ”¡'¤Ýr9f×øš›DŒ2 ´íº«a¬ÞmÚžž¢87Dèy†ÊrYªôÀß+Ê» +a¼Ýõ˜ç™fj’[ŸÜ”âm„›&k²ÙìÂ!‹l`Ãê©/«¹a72º+ï¦ä:2Í5ÿWr…'Û¼3Ïâèc† ‘iÏEM .Âx4ÓM;]œ‡ ŠHâs!ù,t‹ƒ+++333žžž¤¤¤¼¼¼ÀÀÀîîîòòòÿÿÿ/0ÈI«½8ëÍ»ÿ`(ŽdJBE¢hÃ7(5‡z{×ë/_pƒR 5?â9Œ!ù,œŸ‡4  #7!!+=0>  $$&%&( (&!+*)$()))+-1"1.#41&2<$95%=9+04,4<7-6333778=1<;;;+E5G .K'7E'C6:Z>>`&B=Ek(F@(KD)OH*BS*TL,[R:EL5FW0EY2JZ9P_8Ma>Sb5Vr6Yu?Zs8\z-`V.dY/j^0j^0ma2rf3vi3{m6q@??a5f="G6FQ=OS>RkD*cF7qM6tQ;@@@FFHBJOLLLFLQMQT\CZSSSVVXWXXZZZGCfEZh@YrB_zM_qRIo[Mu^^`NanF`zWiujNAnRFxZGx^SjLheR|qOnqQoyUv~aO{cVbbbgghkkkoopbs~rrswwx{{{P;eˆ>k’?p—xÎBr›Cx¥G°lUvZˆhx„z„6‡w:•‚;˜†<›‰=¡>¨“I…¸@«–A³œBº¢t‚|‰’LÄN’ÊP–ÑQ™ÕRšØEÅ«Fʰ€Y}‚hWƒk`Šsf{r‘~r×~…\‚†`Œˆc”’d“hššn¢Ÿp¤¢nž¤o ¤r¨­w°²w­²x®¸|¶—†|Ý€ׇ׌!ב-ו9Ö›GÖžQ× NÖ¡WÖ¨gÖ¬p‚‚‚‡‡ˆ‹‹‹‡Ž“†’›œŒƒŸ‘‰’’“——˜›››‹–¡“œ£›£© †£”Œ¦š”¿€»¬ š±£œ£££§§¨¢©®­¥¢¯©¦«««¨®²¬²¶±«¨´°­´³³±¶¹¶º½¸¶¶ººº½¾À¾ÂÆÂ½ÕµˆÕ»•Àµ¯ÅºµÅƒÀÕÀŸÊÀ»ÔÁ¦ÔÈ·ÄÄÄÄÆÉÆÈÊÎÅÁËËËÌÎÐÏÑÒÔÍÅÔÐÌÓÓÓÐÕÚÔØÝÜÖÓÛÛÛÛßâÝàäãÝÛåàÞäääãæéæèëèãáéééðíìòðïôôôøööýýýÿ—<øÀ‰–슃à¤8ȡᒆ3jÜȱ£Ç  @²¤I'ïÞIy@’M)&«¼$)¥3˜ÕúqÀ¦ß.“ V²q³„fQš;M*]Ê´©S[ë’f0wLÓ ²jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pã®}ЕMZqxóêÕ+7ìÂsv žÃA°`Œ´h¦•!Î.mÍ I¹²eÊ#âëÇy²9Î6(øÌ¹Ðýœ¸™CÒ‰O“Kú½½K¾w4_;ÝÍ»i†uø¢N½}”)־ȓ+_μ¹óçУw½0#Ë Zí¢ÇowèŽ%îÿbóÀÍ®‡»Ü@ÎØMólœìªRpþåûø/gö½îݽôc Ñôã†ýô¢À1ûÔÏ1Å‘”L%¶ÌæD€N`„½…ÈÀ­cÎm^%ÝŠ,¶èâ‹0Æ4.q,p#v hww[ydZ´ˆCKVE©@’]U‘ž|´H±Þãm4‡-ÙBË’•·Kù…)&Gû5ÕIôàGs$Ø“9„‘¤À>½(uL‚JöSUô3Gl?Ñ³Žˆ„†H">(òvœŒŒ6êè£FJ–3\ uYùhZ Ùé]Bæ••¨\ ÇlØ2˜Uj4Ç–€aÿÉÆc¶œ:æ­c–ÉÔ™l¶Ï¯ûDÀ.ûp&]tš´KhyúI’ž¤Tk…VëÛ‰Á%¥¢¤Üvëí·àΨU hµ@™ÞÕ§£i$’ï.ïVpA-•nXi ˜\n©cáj0~º.Å+=ô”„ÐNN0ÓOsÖI-ýTÃÔi÷ÄÆÑìÃ’µ$—4Ü;%jk\¸,·ìòËÜRjiVÔA@£ºA²«€ÎË™W…“D™·Ò.´LääJÅá„cä= Ø¿GmYÂJ™³O,ËLw¾š »1ç;b#¸ÏhWÀ:ôÔË-nl¶S¥•l÷'¾ãÄ¡ëdÿ°-Ì€.øà}ùŽ:Ú [:{Úîse˜`ýzyÞ¬ô]©êB;Ù´Ô DµIú©@œE£ÀT 1CÒ©‘Z5 г¾²qvuI9±awÉ êýì:UýMøñÈ'¯|ºZPÝ 0|áÂZ7À-ýøºÊØC™‡Qèäg4:PÚf …ß®oÒ½½6‡ú#“œU¿“¬@„àßÔ¢Ë  Ø-MqEÒSKõ¾óœü$F#PÕdÊGAóåïw±¡VIâÖZ\ðƒ½ GHÂJÇ€=Ò §·½¸ÐqÌÉ F °¡ Û«`ùÎÂÝ< * €ÿjÕÃ"®Ì„HL¢ãB£&6q+"`aàtHEÐñЈXÌ¢µD¸Ä.zñ‹^¬¢ vE-šñŒÿ£×ÈÆŽñb*#çˆF.¶ñŽxÌc·àÈÇûÈ‘Ž€Ä¢õHÈBR:}L$fÉÈ@òŒ¤$Û¢ÈJzä̤Ý9ÉNzò“\±¤(5‚IMš²Pœ¥*WiÈQºR$§ŒeSÉÊZÚR¯e)eÉË#Þò—ÀTc†IÌbó˜ÈL¦2—ÉÌf:S™ìë¥4«%’gZóšØÌ¦6·ÉÍnzó›à §8ÇIÎršóœË€:×ÉNvrï^~k§<çIÏzÚóžøÌ§>÷ÉÿÏ~úóŸ ¨@JЂô M¨BÊІ:ô¡ÿäÀW JÑŠZô¢ͨF7ÊÑŽzô£ ©>9@Ïišô¤(M©JWÊÒ–ºô¥šLgJÓšÚô¦8Í©Nqš¢úô§@ ªP‡JÔœR¨¨HMªR—ÊÔ¦:U)G}ªT§JÕªZõªgdÃE¶ºU¬zõ«` «X‘ªU®vu¬hM«Z×ÊVM–Õ¬2uJVÚJ׺Úõ®i}«YCô)ül%x ¬`KØ ê•«|•¨ RØÆ:ö±•æaÏJ(TÁ‘ͬf7ËY»Mö"ÕblgGKÚÒ–ö³quŠeëgÚÖºöµxE-¡2€CØÿÚö¶¸«lùZ… æö·À nQwË›T†ÂM®r—kSâîÆ²?ûf™KÝêZ÷”hË®v¯ËÝîz÷¤Ú ïwÇKÞòÒѹæM¯z×[-ô²÷½ð¯{ãKßúŽw¾Ì¥~÷Ëßþú÷¿°€E‰_@øÀN°‚Ìà;8?¦ã@ìKá ¯5ÂJ™k'¬Ô *È¢@â @2,[8¥<ˆSNƒŽFƒÎñk1Lãþ•µùã°ITGÔ!‹<„’—܃Bù&9Ä’á?7DÅ)% ˜ˆDl,P -Ìd›¹³<MÿÕ —™ÿ$†82%°‚âu–@¡A“ø$xÀ;×aYË8±I(°ekE¢É&!‘ÎLéѦù}—á@êàH0%‰sIT`ˆG< §!ÑD€Ä#äìAô¹$?ˆ„$Q’ð@ב t‰H$"'0‰"åHÚ$@(6¯åCÒ+8ö!Jb@èº+À !‰H"].÷±€hƒtâxw¥çMØK;;"©%Ùꉀ !†3­Up0B˜À¬ðƒƒ4à­KÒIü …H„`nä Æt¾ó XÀ“¬@5ÿæÉ:ŽÊI"Û‰ @–±@h9XA ¼Loï`ˆ(Î#g ‚Ú+`6 V`’cˆÃ$qX‡°èMõØÂ´"2Hm5݈;0EÔ%™ h C$u€€I¡  7' "ÁØü 0w”w“H …P4V^’“$’¨@–u šHø×<@$ Q÷@D¢:HüR½[<½$CŒCÕG_W{?+Ó|€#jðuZÓ†Ð#Ì;<‚ÕŸA§q‰ßZò‰!†¿wo—;åè;I0w·„ð$‰{ËQe¦K¾ÙøÏ D ø èAÿ$Ø]ÎÛéó¤O¿]MãN÷n µI a‡PçAÕ´ ©óèá °}‡اl(P‘@$BW p‰nÃ3i Ès8 %e5¶l?y$ÁJñkz¦‰ÐJ †Fúâ;êׂºuuùö>kæ¨wA   FvÐ j†`  §Ö4 °fgþ¦uðïg}çm$‡€@àЂs$‘k+P‰V’à,À½&!ò™chÕ‚f}Ùy–· Ps@‘0P&‡P%°wÃ#z%uS炎ÿˆUiF[M6hz ²p gà`„²6„·‡{¢k²Ö{ø{ K†à‡J ÈWĦey·d.·AW ³Èt ‰ dØe%„°d·Æº& ÛFÎXnŠ6f¬Åˆ˜VeoÖC0…%± €ÜŽäåH2PÎç‹PâÈ;ãb%ÓUØs‘GñØ@Qû¸7¦ùUìgDBVƒ€€xYX ¹aovU<Ð; €¹‘õƒ±ô` ’"9’$Y’&yé'¹’,Ù’.ù’0)F)ùU&@y“Ìÿ5“Xex€6‰“@ \:iU<Ù“>”Hy[CIUEi”G™”PiZK)UMé”O•X¹YSéTUi•W™•`éX¨å•dY–fy–h™–j¹–lÙ–nù–p—r9—tY—vy—x™—z¹—|Ù—~ù—€˜e¹•aY˜†Y„y˜Š™•‰¹˜Ž‰”ù˜’É‘‘9™–i•y™šé‚™ic©b jc-t m¶™¦‰W¬EK![æ0(„2'{bF»P »Ð Õ€c"2Ñ §Ù›x¥›IñÌ` Ó…Z(¡#ãQ%R7¡NðnÀ‚KpT3$"P h ªý³7­á>ÿ5ÇÐ?¢1C#³:‹•MU¬U”¨>ÒW1è›ø)M â Á â`JZôžÑ:¢!;¦=µ6ïP,ý°ûÙ~3'æ "ûƒ?܉YRP Ìp›`›Õ p #Z 8d¢Õ 0Ñ¡:"J¢P * E¢'J-qp¢µnp¢ÇP‘ù9¤²D ý  Õ S¨õþ B ‚  !J±’Ò ÃÎRYn` $j: N !¦ýS›t± 6ª¥ÑÐWÕ`¦´€¦\R `B£ø ?A Õ  0ÕÕp$UP  Ä1¡ÿI¤Ž*MF q%[ £&lâ&ý'IQ1 Ó0hò¶q¡Ì 2s ¦JPu / UxJ|*RÀ(ª"s «;j­Ún»«²J³J«®£¨r²; «`SîÆ”ø¨Îú‘ÚŸ¾ÅÉ+¾,² ›ÑÇ©Wêšp"¢ÁÌp®èÊ‚Kq¬dº«Ñð®ðê;µ:£ðú®°ê®õ ä¬q0¬Š¸ˆ+ ¯ïæ*ZžÏz°š$œÊŸþ¹šÕŠÀ0CB$1“,WŠVaƒâ½C(ò12K¬4±«ÃY#S« €¨(Ê>'Ûcíǯ®Ã {ÿÒ#Q é¹±íw¨ÿа@‹F ›¤F ÍÊšW“56Á5~‚1½626bC û0iXª¯b³¡±„2²QIÚ®ì#¨êá§EQ«´ U°jú²$A¶`¶3šý;Êbú´¹U ó3§´5¦A;¸Z¤yû,ŠZœY:sp: ¡:¬Ã†;òÑAkƒÚà´í #ª¶¬šžbº¢Û¹'8º¢jÓ¡¢û¹“6·$Q·Kº$Ñ·#º ,ž;§óH¸¼û;  2æ9 )é#žÏb¼ãÙ¬ý±ž&Á!Ö²?ÿÁWÁËÜ3ÕÛê鬵:BÚ»Þ›UÃÿ B¼b2Š~ß{¾¤•˜4¢³»èû¾Õ™ð;¿§¾ô{¿÷ƒ‚¹¿üÛ¿þû¿À<À\À|ÀŒZ°À ÜÀüÀÁ<Á\Á|ÁœÁ¼Áœ üÁ Â"<Â$ÌÁ&|Â& *°Â,ÜÂ,L0¬J ŒÂ4\Ã6|Ã8œÃ$¼Ã<¼Ã9üÃ4<ÃDÜI3 ÄHœÄJ¼ÄÜÃNüÄLÅ,Ä\ÄV IG,ÅÜ\À Å(¬3à\^ Æœ j¼Æ©ðÄ<œ ­Ð ªàÁhŒÆTLÁWœÇÊS/K0CÑ h‘Å|-P Äp §ÿ0 #€Äp &œ `ÀÀ!Кë°‹@ÁÐ VÄÀ ,Áápɤ¼«àÆ ±ðÁ­ ¤, ™PÇ`|ǬǶ<8àǺmf0!Û|@¡üÀY½Õ ê ® Ú ®ÿ°³Ð ³`Öá¬ålÖ ¬ ê ÏsÍÄuýÀeÑÏ[a ·s­‰×ø=±Ëæ1ûLcñר?LÝ Ð < £ ÛŸpÕ`ØÈ]L 0 FÁ‹ÀÌ ìÌÓ~`Íë€ ¶ÍÀÎ Í\Ó¸ É—-Ù^á\ðÛ[ PÔÐ 3.¤À <Õ²Mã-ŽÕ™ Õ\­ÕÚ ²à ê ¯Þ§ Âê,²°°ÜÞî=Äc±ëp@Ã"R0b£N ætqœ8ESÐXó»ô‘"pYù]ÄzíÇc,»Ü×`!àLà9là¾À£Ð <è ÜØÿp á.ÁÎÀ°×Ð ”Þ P¾pÉæpþÌ è ?Á5þÍŠnÙ0þÛ!°Û| ê‚î =îà&ä\Ý\Ý ëà°ëà ©Ïë¬ðÁQÂß tlåJüÞœå÷³¨“1 ï Q°Óô°ÛÚA[A,Ú ‚1³3õ=ç1¬Ï3Ô'ƒÚ5º,ßaÁçìç8 è…Nè ëÀ®è$ÀèÁ‹03]çÉÙ,Ú×ÐéŠÐÀ*`Î0ê¤Þâüîï¿ÝÉ^ñ‚ÎãÉï³þÍBNä¼ Ö-ªð éÐ뜳¸ÞÝÉ®ìHÌì ÿ,R»ZÚëƒ 6j YÊ­±´ ýÁžË"ú" íM¯:æû,½àeî'»<)ÿ Ð "pÂôžàö¾À|€ #Ф0 .Þï0.Áp`Ó0ðÅÀ°ép+~  ÓÀÀÕ 1ä``ødLê6.ánoá¿ý @Ø#ȣй}áOýÀ“ýMÝC>ò™é DZ˭ «À éàò¥­0쬰ֱð ¯ÀÞ0Ä2ÏÀa!ï€(7ßíªÈÐAhsÐø%Z±¼¥’Y!1Ùy;m2æQL{m ÿ#º¬õWwÁO]U€9<Øú eOãŸ0ѧ°êü~ oÁ0 —<Éà ¤ì WÖ 4wEÀA0æÖ+àeàC0%JÑÍ¢E.§¸8U`—ÝNYìspÄÈnœ äÄiâÁŒÝF½”˜)“ªu±lfZî¡¶L±¦cµó•ºuêRÉz8ÐM¨Q¥N¥ZÕêÄVlåÊUÊ;|añuݺ«_Ñúíc»ž7ôúõ£çDÁºwd˜E»·Ÿ7ýâˆÃ÷@ïaĉ/fÜØñcÈ‘%O¦\Ùòe'™5g^·ÏÍæÌÙ,!]šôUÔ©U èbåj¨*`xÿXŒ×°U‡ Ñ¡ÃÄ ~뮹ӸMV­RíLÕªÕqèЉO§~5kÕÊf9(8ÖoÉVÛ—<à@«³»yÉš•²µÚÙøÞ÷º\ßþ}üùõïç?y h'Ä ÀïÍ´ÒªSpAœŠ7'ŠnB +´)B a»ŽªÊlég'ØèÇ6Ì«¦Š~N4ïÌŒƒ)öaѬwÜ0Kœ­ºë§½þzôñG ƒ2@{Zhac³í D0Á £”rÊ— 0c8 -ÔrK*»„jé*sŸ~¬Qà–¹úyç;dÒ\g»8æ¢%°jüzg®5·’BÍ!ûôóO@uìÍDL³Ÿÿ^63ÌÉ'—ðòQH#]mKJ)”ÔK0¥ºl¼­2Â.®4¨¢À­ µ¬³œàq«ÀlôUXc•U¿"°IFŸ¼tW^w­ô×ãz•2Ó¨bå‹,ñékVf›uöY®þ³U³S;PWa³Õv[n{%ªXˆC/Zl©ZtÓUÈZmÅU´Fív^zëµ—¸oiZw_~ûõ×2ò¤ub }ìZïUxa†Î÷¥#–xbŠ/CØ4Ô Ð¸aŽ;ö¸º‡'ªxd’K&ùb(©:@Š*ªâ€c–yæ/µ2ùfœs~åÓªBÀµž‚f¢‹î8d‰tVzi¦‡äY^Ô@¨"7ÿ£«¶z[¤jzk®»¶8^Õž€âj²Ëæ5k¼¾O¶Ûvûm¸ã†[mº|:5©a6{o¾§D»îËä|ð¸7\¿»¯’„¾w¼Á¿'6xHÂ+'üpÌíKÜç*üsÐ5´Ú âØ…P¹z ^üTÂØc·Äò¸)FJØÎ|÷Ê6Ÿê€*š8`øÐ‹7^ªÈùc#šÉ³e—R™‰ÆfªYµ¬qû[½ ²(šhªùþÚ“ f ¶Q©f˜aªÉEÞãÌw©¤n¹eª×?ôäõ+=š%ô…ŸêЧ@•^ô¢`l¨Æh@¯+@K20À J¡@äQ€ÿ¤®0Aƒ\± P 7¼«m– ÆÛÆ0†!¸í…G`ÛªA Rã}BPßä÷Cx5jC$¢Uú—Ÿ9TC‰´P@”X^ƉJ ub_`°2p\=AIKéÅy–=4U€A5Gö“;ÐëéO zH<"¡³c[ Û¦„ö ¡©mFDuGÕlZµK©`lcûXÿÈFV²_¥le-{YÌfV³›ålg=ûYІV´£%mi$Ô¦Vµ=b`4°„3.¡ Ñ Å/mÁ3jÑÑyªç†.t{]‰)=×:|ƒe.…K&@‹öôgdBPñÚ¶bDC cF4„‹ó%ªuŸ!sá¾@ⱉ¯$û^ø¾×´ó¥o}í{_üæ÷³ªå/j{ÔÊL*`yJÜZâ¾3F ácCž¨Äµzqg’ õ¶‚ܶB‘ŠM‚®'Lá®@·Ž[)¨  %B}'N£žZg áÁJÃz«ÚÞ]1XÀÂj%‚´¯þè (»BžR.ÿଖ1c ÉBžæ=Y˜‚; ©iå¶ùµp6¢b«´1EvÇÇiN+Tq¡ƒY„5òçãâ9Ê93£ÖF;<»Ë]Æñïî÷2ù¤)ëXE¥RWì¤Hˆ,2!g4c" XGDàüMª¹i®}òüé©îyw^>Hp4&4µÂ°XG6\áŠåP*9Ù‰+\Í p¬CÁ:¼ð’fHãÒ˜žŠ¦E}ld¬ÏV‘Ú›uÃXœèÄ&ªÐÆ@ÀqæTdc éH48Ò‘”t„ã8BiÅAü°Žüa´vœ3=çdÇ[Þ^öT@)´ Ì©ˆöNÀ¡ŽX¸Bÿ@qÅ:fÑŠY$ºBqu¢£ uìZÀMbvóïÝóæ8ÇI]ê&@¡sûî÷MÖ¡ YÈÂJy…Á ½“’‡)Ž>H2®A“^c<㟓s|þs ]èC'zÑ~t¤']éKgzÓþt¨G]êS§zÕ­îóOzj ‚6­3ÑŠu„cG&½í¢˜\Úµn5š)nñuè|çŽëùÕí~w¼ç]ï{ç{ßýþ÷¬KxΆM×¥½ ¯G¯HGÙÍžø¯Ÿ|'æF÷KÔÍî¹ÓýÝç|ç=ÿyЇ^ôwÿøÏ4Ö„­+Èð; G:Ì G/|¬HPl2ðV…êHÿG,^ñ ‰÷ú× væy¾ù¼#AùËg~óÿ|ç^úÓ§~õ­õzCTh™0_ÕÛ¤'? ÊPÒž Y %èôSâŒdLºÒÆ\Ýñ}üçÿù×çÿýÿ©Ë:3®‹5èH,3K³uX³ƒ¸…j <ú»û»;ý»@ý@ Ü@ÔÀÀÃ3J™@"ª@»[ƒbHA,†1À@çËup‡g$ð¹/øð\è@ìA仌A-!Á!2Á«Ë¶˜‹¶X \ƒ~å3†~Àyè‡yŸ‹v0è‡EøA1C2lº tøJC5Ô/ÿ6lC7|C84-Qê,½[¾\èJX¾0@…\pÂåÄ\¨åC…~xK@‚}˜僆~À„P„~øŸk‡z(CK¼DL 3l5ìDùŠCP EQÅúšCΪCå †~D$ „|H)ƒ{Hn¸„Cƒa8D$†F k؇ð9_è0ÈDcedFzÄgL¾T\E$ƒ~H‡`nèTàÅtÈ…D(”Bæs‡~8Ä؇kø¹+è_ˆGÿ‹¼ÈÏ›ÇzÜȹÇûËGA„Â~à’ì‡`@‚m؇¹à„ŒBæK—¬Aˆ”È~øŒ¼IœÔ;äHžÄ«xÆhÜÇ~`IåsÂ0hAK€IKHÈå ÈbX¾Àuô9vtÇœ¼J¬”ºQ"Ô‘ëI°ªJ}D†L€Iïé‡\,‡UäGuÀ”ÄBa¨Ë5sØÆ~ðƒ¬üKÀTºÀž¯ KÃ´ŽŸÄGh,Ë5˜‡4yÊ5‹¹xåsË~~8”( \èKŸC` LÑÍ  ¼')ðœÃ\Í©ðH Ä¿5°„0`¾Ø¤Áå{!è ؇q-è‡ÿf Máͬ((*PMÖ\ΗpM»sAèl>ŸÃ…z_€‡NíüËCÎ@NådNñtΫ‹Nó¬ÁíLOÑü¸€‚@€*h ϰ$Oõ¼Oüœ>öô –IMú¤OûÌOPÀË>©ÏÿÐÄ$Pmнû@MPæÔªŽ«PªÚI =L µP]$ ÍÐúÑŒ2P=QØP]Q‰ j)ÈøPåHeQÝ— ˜'X²F2ѕнQ!}–ÕÑu ýQz RþÀ©u R)U B1ÒÌ€7²HR%]Æ =[ØM …21•ü°)MSÿ²hÍ`ƒ%a’ –-EÑ]‚u `†~`Г9Ð"®p‚?5 'x‡wx%ó؇;í )q*òŠêRÓŽ˜ÌP ss9 -Ó TQ;‹®P‹¹¨Q“íHUzX2‘)x£­`T²À‡uHqx€Î0 è‡h°ÔŽdÙTЈӄÕÝP)X‡° Ú‘  ò*êq(}  À &˜³è¢­ “]àµH’~Ð"óˆR`7Ј7xbÝ cÅdQ ý ±Ð‹ciZ˜ƒ9À‡wx€*¤…UÁ ² sÐ [-•}¨†^ýUfÅÒuµ1ÿ[W™×”©×Õ*|Í×õ8‹´X‹¶x‹¸˜‹ºH®@‘wx—p­“p½Ój؇%@”‰·ŠWÍÀØžÑØÑÈÐîððò0ô0X=q – WõèÕ: ¹žš=¶›½Ø\9VžýO&Õ !Aéq‘8(•ì…$™°^Øî!fp—øà“©7LÍ ‹ÝŒNÕ‹OÍÚvÛZ²“29“4É“6™‹7i"91‹C µÐ"|Ì~@/ê&ºÛdcSÎÀY'XZOõQÀKÁÕ Ny  •Q9²¾­ÕjÈ€)8•÷]Í]¯*µR‰åŠ¿]8+]ÿ!‘²¨2‘«Ú=¶"ÕÑ0õ[Ñå]õYf‰ƒNÛŠ%°…Ì-Þd;^I^ååJæeMßµ^ð… Í ‚ÉÝ,]Þî]Rç _ö•ÝM_ŽúÞößþx_øõ&ù¥_ýÅû½_HÊßý `Ëè_ÿ-"`žô-`ú;`@µ¾ÿ#Öê‹$VUy—7V!ëL 𦶙¡º¡Ú¡0‡ T)À•-öRá:^€5î ˆÝN9°R€?h†&cÄ¡à3¾´6]1:¶²¢'š°è…QV€%@0Þªã;þ«=ª†hè£?R¢@$!(¤CJ$è…~B 'ÊÜ’úå­Øbàdx¢áê0(‚€$Z¢²žê…ÖÅäü0ãMnœN& f`‚éæÁ06`†Þ‚® è‚9-f8­h  ^×¶ie¶)¦cJ¦[^¦fz¦hÒc¶©¦kJ‹ƒ.QJ"î D…fbÞ5B K2ç9xsî¤Jº$ÿŸB¡&(j¶M¾æËæh¡hÔe+ ”*H"N«[¨:N¢9p‚ ¶#¶çƒJ(JX¨†rªÁÊ2в¨ÕyƒaÖ)ÚJ‹Ì] Ûâé:é*ƒjp‚Ý Ôí©a—˜æ‹¾kÖè½áhé…æ®À0'Ÿ‘zÝ&B°?x Ý‚åè}g<ª¢")¤B¥b*Ãzª¨b›~j/‚wÝ"&Úb2ªh¨‚žâ §N 9˜j!©j«.¬.fæ€`°^`´h²àU[¨øª8©hhi´f½â+!Ð2!¬j¬¸.,§òç­à¢R‰†¡Ž§ ¨†¡î$Ú&!¨…«ÿ»pêÙcÃf­ŒNìZì]þk)8†oæ)Þ’‚ê)á€Ëæ€È˜cˆ0øl¶É®íê®ï ¯ñ:¨\0/ô $Eâå «†8PjƒVo&@#» æÝb&€@ “f‚]j-;Ãoî™-© nþnâî&ãæ”j»À°T&°×õeXÖ¢%#fHì~i<61ŸÛpíz±›1iªèíx€ËŽðaFh9²k š#7âÕêa¢9¨£9úb§j/ðHZßü¸ ÃX#+ åŠðЋÁ©²·Qr‰œRo*rÕ)òÙæéN‘òVä'«ìŸÎqAl7ãö¶ÿVq§Æ€­j¨TÉòò/ßñ0?B_—2¯œÉx€u‚stó9§™1çóâõó?—™@tÍ%ôBÿ˜CGô©UôE?š:wô©†ôHo˜F§ôuµôK_˜L×tKåôN¿—Oõ4õQ¯—R7u)EõTŸ—Ugu!uõWç–X—u¥õZ×–[ÇõÕõ]–^÷õö`?›I'v6öc¿”aWv eöf”g‡öŽ“öi”j·öyÃölï’mçöxóöo÷›d÷ù%÷r’pG÷cS÷u·Çsw÷ð…÷xwv§w.³÷{g|×÷õâ÷~Wø •󟙂7øåÞ„Gcÿfxýø‡÷É4–øtGøŠ÷˜…Çx>søÏªy÷ø‰¥øWŽ'ùø1ù“G”Wù ù–W쑇y5•‚ÈyÏù™ù‹·ùÚÅù×ùžç›—zÃú¡€¢¿êšGú!Uú¡oz³9z¨§©ßyª§ùŸ¿ú‰Íz¢ßz |z¯gQ°çy±·«/{®9{¦OûªY{¶o·‡û¸'û¹ïк·û¢‘û¼Wš½ç{@Çû¿¯ÐÀ|C'üÂç¸ÃG|FWüÅ—·Æw|IïúÈ¿Ñɧ|L‡üËG¶Ì×|OçüεÏ}RýÑç²Ò7}UGýÔ_¯Õg}Xwý×§ªØ—}[§ýÿÚצÛÇ}^×ýÝg¤Þ÷}aþà¢á'~d·üãï¸äW~g7þæŸç‡~j—þéßê·~mÇþìÇœíç~p÷þïOú¥G{ñï¿/ÿu ÿôòg¬?ÿ·¬‰ù÷÷·ygþü,hð „ 2lè° ”'J`ñ"ÆŒ7rìèñ#È"G’,iò$Ê”*W’œò!̘2gÒ¬ió&Μ:wòìy3"ʼn,‡-jô(Ò¤J—nt Ò'Ô¨R§R­jõ*V„@ƒ`êõ+ذbÇ.uú1+Ú´jײmë"׊dçÒ­k÷.R³ßòíë÷/à¾[ƒâ-lÿø0b¼z;nìø1äÈSLlù2æÌ*s”ìù3èÐj) Õlú4jÍœ7Šníú5l™¤å¦®mûöØÕcóîíÛõ쮸‡/>TwÆßÊ—3÷Ü8ôèÒ="ÇØü:öìTŸOïîÝxõ‹ÚÇ“/?“û÷ôêO‡·hþ=üøѯ¯oßp{ò÷óÇNÿ>€Š•_ÈÛ*¸àQø „ž%È …žä`„jè\\ÂYø!ˆ"a¸!‰%¢5aˆ)ª8¢‰-ºŠ*Êh!‹/ÚxcM1裂5âø# éÈ#‘öù$’I*0d‘M~w¤’QÞȤ“UF¥”YšH¥•]ÿ‡¥–afÈ¥—e¦¦˜iH¦™mf†¦šqÊǦ›u"§œy–G§}Þ…§žúסŸ…²÷’ ‰ÆÇ§¡‚¨¢‘"H¨£•©¤™¶Æ¨¥…©¦¡JH©§¥’ª¨©:Æ©©­^ˆ¨ª±¾Æª«µŠ«¬¹‚F«­½v„ª®ÁŽFª¯Å²¬°É^Å«±Í"«,´R1Ûl±ÏF{-OÓRÛ«µØzû±ÛŠR·ßš+[¸ãªËQ¹çºÛ¶ë–Úî»õj•®¼ù @¯½ý·¯¾ëòëo¿ñìèÀ×kðÁ†&¬°» 7ìçÛ+ñÄvVl±·gìæÆ_ëñÇf†,2´$—ÿìåÉ('«òÊV¶ìr°0ÇìäÌ4çjóÍEæ¬s¬<÷ÌãÏ@§*ôÐ3mt¨H'½"®LëìôÓ!.-µ¤TWýáÕX+ªõÖvíµ `‡ÍàØdëiöÙ=F­¶Ål·`ÚpÇ)÷Ü÷Õmwšxç]ßÞ|‡é÷ßê.x–„þäÛˆÛ«øâÝG.Ýä”#iùåÐe®9œw^Üç ã(úè_6nú·¨§~[鬿èúëµÅ.{‹´×ŽÚí¸—¨ûî¦õîû†ÀÿæêÄ+küñ— ¯|„Ì7ŸØóÐ?(ýô—&o½®Øg_XõÜèý÷n/~ЗOdøèïGþútµïþ¢êÇÿ¯ôùô7mÿýP?¥¿°à׿å€YãßA4?’G€ üʨ>)”à âRAöƒ¢à“rA2„!lPI('ž°(#TáoXØÂ㤆}Cà éVC‡9ÔÛy˜8þpAb”dXD”¼‰³"âÓÓD'n ŠQôΩ%^±%GÔbè¬ØEÌ}Œ§ã=WF3Úˆ‹iIÙ7¾‘:k”cîÐXGÕýj¢ã›rG?’ÌH Cò"‰Tä_ÙÈ} ’ÑÓã$yWIK^“™Þ&9¹&O~y}eåHYJç…•ü‘d#ÿéJ¶Àò²œå°4¸J,¶—ð ‚)Ìa³˜Æ<&2“©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Nn§Cæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*Ïr ´ =(BªÐ…2´¡}(D# Q‚J´¢½(F3ªÑr´£E(E?*Ò‘’´¤&=)JSúѪ´¥.})Lc*Ó™r”¥4½)NsªÓòô¦6í)Pƒ*Ô¡µ¨ûü©Q“ªÔ¥2µ©4EªS£*Õ©Rµª …ªU³ªÕ­rµ«AÁ*W8P… xµ¬f=+Za ÿVŠ<  Uà@Zã*×¹Ò5¢kˆ8 ¸b§ðD7°Q‰¤áÝ Æ$$â€Nt£¦Àa±ÑSD¡®–½,fKz×èUoÍ(K„MtcÐDˆP†nT¶ ؈ÒÙЦAµFÈ,ns«[»ÊÓ³ÀgûÚÁ*@°H€ÊàÚÁº6 ˜m!»ÛéR·º½ë¤ð€ Ta .$rŠ4`Øð`û€P4vÒÕ„dO^ëÒ·¾öu'v¥ ß*ìU¸•UÀ)ÊÚÛx°Š6È+a£¸/„#,a‰lv"Á½hhEá€4tƒ¡=ƒ41ÜÐÁ¹o6 àõŠbÂ.~ñt+,‘±‚Ö±Õ„DHÛR8®m/d‰ ÙÉÎÆF>ò\eÌÑÐzXºÁ€“ eŠ(ø.’³¬å²*y£LÞ2˜Ã¬Û.kÔhø­˜Ó¬f¹’yÍn~3œÏÙæ8Ó¹Îkž³ó¬ç#ãyÏ~þ³}û èA·‚.4¢Ö»zÖ­V4¤#ÍUFõÀ²¤3­i©RZ ›þ4¨—Ji·:Í¡>5ªuÊhlW¿©~5¬cªdîb:Ö¶¾µHƒ!ù,¨" Ê‚:::AAA]]]ddd}}}˜(°¼ÚìA am7N·iÏÜažf‰žcûuC ÏrLÏ®øêü”û;`Ï„ØnãíGbŠO§FZ›×hvº­b¿Z0Wì ›Çç2z­n{¨ïnœQCCCKKKV@TXAV[CYSSSZZZaG`dIbjMhvRsyUv}X{cccjjjsss{{{Z~‰^…aŠ‘cŽ–h“™h•œk™¥o ¦p¡¨q¤®uª°v«²x­µy±¸|´½~¸„„„‹‹‹“““œœœ¿€º£££­­¬³³³»»»Ã‚¾Å„ÀÄÄÄËËËÓÓÓÚÚÚãããêêêôôôþþþÿ€ƒ„…†‡ˆ‰Š‹ŒŽ “”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°¦³´µ¶·‘±º»¼½¾¿ÀÁÂÃÄŨ¸ÈÉÊË…’ÆÏÐÑÒÓÔÕÖײÌÚÛÜ‰ÎØàáâãäåæÐÝéêÌßçîïðñòóÕëö÷´íôûüýþÿ'5òñcÖ€!4ð)t¤/ Ã‡#JäÅH  òÂB¡ Y ‚Ãc! |ð0(‚É$,d”`†Ž30j8±§ÏŸ@2B¤hˆ>Š’ 0 iQ ”‘Iè!EÈADçA3%ÐÑ£l:ñ ʶ­Û·äÿhZ0 ‘ ¸~ø@¤Æ€C,D r#‚¡„ÜèëHˆ‡E4ìÙ‹ÖÂÝ̹³ç]¬ "ˆŒ‰ø±`ÐÁ‡~!È!`q Ñ8ùYË=rdþL¼¸ñã¢BDtˆó!Âi`%Ò£ÀëØùÀîè½ý¶¬c8òóèÓV>zvËZKÀAÄõÃBÝ.(ˆ",…gHeÀa¦–z&¨àD B4tÁb!ÈЗô}pÊ0Ä –ƒ\ù hÈXä¥åÍ‚0Æ(c<ðåØ\•à 8µT‹M¡ ! 1ÝŽƒX›ÿŠ+ÎN.¾8ã”TV9#´6HD¹@—…$eˆ¶I å vQÅä-šYéæ›p®2“haAݚȴçž|ö©ÉLHH3È žlú©è¢ŒR‚裉6*é¤nBjé,zRªé¦Æ]êi#™r*ê¨n}jª”¤¦ªê[§¶Ú̪°Æê“«´†*ë­¸žC««¶æêë¯ÖìÚj¯Àk,1žJì±Ì6«K²¦ÐÀ´ÔVkíµØf«í¶Üvëí·à†+î¸ä–kî¹è¦«îºì¶ëî»ð–;&´ôÖkï½øæ«ï¾¶ÌËï¿,ðÀ\‹¿'¬ð 7ìðdïêWlñÿÅgŒLÄË ÁãÂA ëT0‚Æ(§¬òʆŒÌH`Á™Û àÀ:°ÀòÎ<÷ìó2.ã2€F3só@ -œ0È/Ä` <œ¬Á ,ðÀ‚ƒl°ÃWbÀ ÄÀƒ LÛ°ƒ /@ È ?üàK7Ç”˜YÐCÛ8ü¬÷Þ| t2EoCÀ%<`ð‚ Z°AÔ¸°BðÐÁц#ÀÃT 6$Á3XKü Ó?\€:\àAB}ç®ûî´þLàÜl`8;°Bßx? ƒT~@šk`ˆðý@ƒaƒ •Ð =rSÿF¼—oþùLúŽ ðÛ`xñ%t€€ò†W® JÎÃÍš?p½Î‹¨KÛ| »ÐÀ ø‘ Cí¡ïŒ 7Ôw öi#gƒ H ?åí@( \=`Ms7+Ġ׈\ ,ƒÀrðšI ?x‰wÈÊÅC›™u´Aˆà0€98?Èc Q†ò–¸|˜-wÅÎÄ4\`.‡IÌŸí’VÈÀd ó™ÐTÙ1£IÍjZÓRÓ¼¦6·ÉÍ{d³›à §86ÎršóœÌø&:×ÉÎkªSi§<ç¹C¬£¸#ùèÉÏ~êΞêˆÏ$dæÏ‚´g½Ç.€Êƒ:ô¡K¨= ÑŠZTaUÇBeyÑŽzT_íF@öÑ’šÔ^!݆ ivÒ–ºôS)e† %޾ô¦8 OL—±Ð;Þ±¡9 ªP×±Ó¡õ¨´**R—ÊÔG)µ©PjXž*ÕªZµTÿ½ªV·z‹¬Zª¦` «XÇJÖ²šõ¬hMkZq€µºõ­p«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯}õ*¤KX²µ°ˆM¬bËØÆ:ö±¬^û(ø°Œ­\ÍlRïOmXVEw,ĸ–<³šM-LïéÓ}v̦ÝÁ 7B4E2a‘!†Ö¨ÚÞ:u<¨“ñY{È ‡ÐHm q–r¶•9D­o§Ë$ÊÞb¤@½… 9™7 ¼m@àh0À኶ y!AÊÂ’¤Ñ7ASY@0ˆ øàmÃ-"rPƒ÷†m?èa@Ã0m£án/ " ¡ ÿ¨ 0ëÒb_"­2 @;Û%d=Xc|a ”X>(‰ˆ”ÜàmÐ ÞÆ6¹IÀ«ÙÈ /d?¨ÁíȨ@‡/BÆP,eXƒF—·M@„€ ì‰Ie:¾<"x§‘~Àš¦X¨¬Œm}€Ë)9†Lìäì\BEŒóy=bZà™?ÐIëìÑtÅÊWVÈB\‹„·“ƒH`…b€à m=PÓ!Ü6aªyK Dã›o«ãÖŒ¹Îh\œCÌÖD@†>ÈAÀ6Œ™Ðm0¢2š–½aq²x²Ò8^ãnÿpY¶¿i©Ì¡²Àà¬Y2§¦ó hpAÍîØ=Põ f@éÖZ#ƒ–.ƒ'¼k~ayE (Ce*ƒ6¾1”4‰êÀ܃Ù¤mZ*€ hJÞ´`Ò4 @z°LÊ-`sZ\CmÏŽÌ…ÐÁ±Ùö|Ò`äFÉÝŠ:?ù£ºn÷¾Þ¦Ö¾³œt k|>ð¶-ÀÜ“aÅ+ÝÀPo)™ @Ä1ÝÝ›w2ÛÙ¾¸~5^ˆß\úfm@LŸÜ£)Wy¾XnˆÎÊ4>µ,Äéôë143âÕ°mzØ×AË3µ’¥¯&„º-šu­ß‹ë÷(.!`鼟jîmpQìŽ/ÿ¿ßÓ¦†øÀ³›ðö2|@%Kù±¶ò˜Ïü^@Í{þó ý]%ŸÑGöò¦O½ê9¯úÖ»þõ”'=äV÷Ù'Kö¶g˜¡qŸûtö>‚ ˜r•ß;⟯ÁŽ0VŒß*Ò/”÷Ì>Ë$ïÂæJÿúÔ¼™,ˆýîÃÑð_‚ª½O~úf±~ù׿C¿»¤#¥ ûçÿ@÷[àþà>ý÷Ï7Ù«ŸÿØ7V [€ø3x€ XO ؀ϔ€¼X|C˜¥È€øèƒ 8‚#‚$x‚ c‚(¸‚£‚,ø‚ÿâ‚08ƒø"ƒ4xƒÐbÕƒ8¸ƒ®¢ƒ<øƒžâƒ@8„ˆ"„Dx„b„H¸„3¡„Lø„öà„P8…Ü …Tx…ÊðkX¸…k¢…\ø…½á…`8† !†dx†ê`†h¸†Ú †lø†/‡r\sX‡Üà†v˜‡ð¤‡|(4}ø‡´€‡€È‡‚8ˆyXˆ†X‡ˆ˜ˆr¸ˆŒø†Žøˆk‰’x†”X‰cx‰˜ø…š¸‰[؉žx… ŠS8Фø„¦xŠK˜Šªx„¬ØŠCøŠ°øƒ²8‹;X‹¶xƒ¸˜‹3¸‹¼ø‚¾ø‹+ŒÂx‚!ù-,‘@„"""(((444;;;DDDKKKTTTYYYcccjjjsss|||„„„‹‹‹”””œœœ¡¡¡®®®µµµ½½½ÃÃÃËËËÓÓÓŸ  ŽdižhZlë¾p,ÏÃ2Ìxk\G>]`)—KÅH˜$+#é: ÓbR  ‰ƒÄ"ØAž«RY,êÚr!Lo 5+`©HþuH z/dyvŠyC,H “iU.I^I‡pJ-·{¾/>ÅÆÇ*ÊËÌ$!!ù-,‘@„###(((444;;;CCCLLLTTTYYYcccjjjsss|||………ŠŠŠ’’’œœœ¡¡¡®®­´´´½½½ÃÃÃËËËÓÓÓ©  ŽdiŠ’t®k ¼p,ϯKßñ° 6Ž—CÏ' €B‰¥p\.æ`ò¬ ^Œ'5ù0dˆI%P€$„‚¨m•Êbñt È…o)@{N /2i{Y‘€I/N ™nS”OdOŽuP±/¼/GÄ0Š0CD7ËÌ3),Ò$ÑÓÓ)!!ù,‘@„"""(((444;;;DDDKKKTTTYYYcccjjjsss|||„„„‹‹‹”””œœœ¡¡¡®®®µµµ½½½ÃÃÃËËËÓÓÓŸ  ŽdižhZlë¾p,ÏÃ2Ìxk\G>]`)—KÅH˜$+#é: ÓbR  ‰ƒÄ"ØAž«RY,êÚr!Lo 5+`©HþuH z/dyvŠyC,H “iU.I^I‡pJ-·{¾/>ÅÆÇ*ÊËÌ$!!ù,š@…%)###$.$(((3333;3<<<9A9AAAFMFKKKHPHTTTT[TYYY^d^acagmgjljmrmsss{|{ˆˆˆ”””œœœ¤¥¤§©§­®¬®°®´¶´¼¼¼ÃÃÃÍÍÍÒÒÒôÀ‚pH$bŽHŒÇ“<ŸC a:Uz¨U€vËåb`°5,îš Ã7ð -¬˜ læ2HŽ5Ȱ&Htuwy $}K b !$$" Z” x_™Œ|$}!"…$"œ"b$} #™±´ ˆ¸}•"À$͇³µ|·¹!™ÁÓıžÉ¢¤Ý"#$$›‡‰‹c‘ï$!À4P‚u(ÀP(”)À`—´¬iófI†ŸtÕ1³&Ì26r$“ $(R°XÁBÃÉ'MŽ,‰!ù,¯º.…--0114558::<==@AABEEHJJLNNPRRTVVXZZ\^^`bbdffhkkmnnprrsvvxzz|~~€ƒƒ„‡‡ˆŠŠ‹ŽŽ’’“––˜™™šŸŸ ££¤¦¦¨¬¬¬¯¯°³³³··¸ºººÿÀ‚pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËí"à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~?òÿ€‚ƒ„…†‡ˆ‰l~ŠŽ‘’“”wŒ•˜™š›œž`—Ÿ¢£¤¥¦§a¡¨«¬­®¯–°³´µ¶®ªxbb##ioÃb!ž ¶ v¼·–ÀÚ ²|ÎÝ!càhåpÌaäæðmösùrâÖì“`ÃB FðöíO@ˆÛ°f:7õÆTøÀ XF7èMà(';ÓŒ$8¢B‰ sxbD„ÈPLÁ‡ÿaÀ]¢ÛŠÃäöá$€² ¢ê/:,ó1Ì‚ÈÚLØÐ šKð“€ 5CHcàçÿÂÐ:âÃA?û†°FÆ@Õƒ™À4lƒš#˜ù¬ùáƒK3CG„˜ Bå¹`6T­jméÎbe"jÝ `¤Ñ “ûZÆ©“'˜Ì¬Ýl¸°Ú@ @e‰Öüá¦;d†Ãz¸`W@… vÁ1îvºVÔd"@ÆÐ 7g2‡…Èæ(—€a\x¢ƒëTX°àE#"4ÐÜ-DÞ`Dä@„…ÀcóÀ€{!pDN D0y]¡Ìel$X\DÿFD–=ð@ˆ)PÁe0à‰Ótà×Pyr4¢@À@È4d(3‹°ß|•B 4`Î d `7ÆW$P%]hÙ£@ h% \\ÂgFDHvPT#0€Õ„L: e1`>¶•V~džV0PÁŒWEIFÆÀ4Ê:g5U ßRéù×Ù(àb ÍW“”bLPeDæÐyed #xˆˆy‘)5‚D ABtlpeäHA4‚˜àVˆ€Ì~´ú?`TÀy’ÑÀÔR (¾(6æ¡aH¨©vÌ ¤„ 0!8jÿD0ÔBoõZF¡è˜›°àXÂj€€Y­‘tFBÀËÕ?ñ2Àª­Š¶-2_)À²­=³˜À ³:+¬Œ‘ÀÂvЪ0Å@F¡k"*¯“`„T™¬C%Ð'ëU«ŽvœÆí²øªä)ÓÁQð#áÙ‹é*,¯zñ”Àßeø½Áa8{á?æ˜#³ ’šoj#˜Å˜ÖðAGµ¤L6ê’€f¶*Ô²¼=JÁç%`BÓh‡^+¡jc‹¡ŒÚD4ÙcD š.IHë]|²äGñ³8uotÐ9N}i]rKŸŠ(×aRƒZÿW€0‘!L¯†«Óa‘Q@UyÛ™ªšK^³ÌnT+R}Åw¼c °ìF&ˆ¦=û™ €³_¿†}"VÖ)IÈ# !Cb$ò’nŒ³/jšQèXg@Ò~ÁCÉ<§<†r]!€}º¡<5DDh:ÈÂóÄ d0à‘ÂÐx¯q`Höâq.P hBT‚¨G½œî6  YîÄpžy¼#ÜÖBRø3S™¬kH€Í‘#&õ@Ѫ҈`* hÀ–;!„€ÀBàxñ‚"Ð@ØufýÃyn˜‡>Ø §­é0€` ÿÃ%Åcè§F/þ5jTÀÖ:þ*a{)J $à &" 8ÀúÆ€ .ø† PŒÄDrß ¢õVØŒ\@pA ©@II†2£D¡%1Ù5Ö¡¡BpY€€½#@0%„¡Â` %$'j€d€ýŒèe8°GY^ò™D[ @ÁfЖtá‹)4 Ù<+1‚QJÕâ 1EÊ(gdâ)`,2íÅ ã±Î¶!%ÁçÂÓÖ% .uC]€¢7,”[}#7º„åÄÞ^†-1ì‡qç‘§„%Ïi@œ/l#d‚‰a£ÿ¬;i9ãSNà…á'eË•Š+ €WP ®yŸ¼HHðüU ARaðV1@©qà+`éb×6à3@e…ÇÕ~1 z…D.BÚÒž›ã¼Ã~rjÚRŒ¶µ°-í"ÀØÚ¶Z½­nwË[X¼¶·À ®p=ñÛá÷¸È=^n“ËÜæ:·Å}®t§K]3D7Ǩ®v·KÚë‚aÓ3C?¹KÞò¢Â»eÿƒEÌËÞöºÖTl? @Ùd# ë ’ Ãèv¨‰‹–çÞX¹È)€®‡ ŽM”ä’¹E~!Yº: aòÀ ±Ü  Œ1Õ…Ïu·D$ú°ˆgLãE˜ê=[ [C2¬Øu„{V~jLä"§áµ a €Yjó@Y¡^ãïf€~FÎòs1Gjò‹œ8lÀp{Å,JùPFÀPæ"-»yƹÌ BtÎãÉô\Æ™§qÐx „m~³  Rà°á.»Þ/ <Fsh|Â5ÁäC˜o¹¬($v*ļ…#¢lTV$Z@Ck+: P ƒ] ‡!!ù-,‘B#…%)"""$-$(((333;;;9A9CCCFMFKKKHPHTTTT[TYYY^d^acagmgikimrmsss|}|„„„ˆˆˆ”””œœœ£¤£§©§­®­®°®µ¶µ¼¼¼ÃÃÃÍÍÍÒÓÒÿ@€pH,…˜€R‰I.Т¡bp:HŠfD¿€©áy¶II>br€AŠ •Ð(ÀH"| !" B cI‰w$ ‰ " !šb"Œ"LN$B""c ±#‰¦©t#"È €"¹~Ìr¨ªJ¬Ä"E!‰º$Ò¾rŽ’H$œ¨ #$“‹rtvZyB pøCâÛzs˜ÈT3wÔL r`Á!ð"’à%W²$É‚@0N–øSròKÊkK ÈœI³¦M™èÔÙd' ›@6Jth!ù-,‘B#…%)####-#(((333;;;9A9CCCFNFKKKHPHTTTT[TXXX]d]adagmgikimrmsss{}{………ˆˆˆŒŒ“““£¤£§©§­®­®°®´µ´·¸·¼½¼ÃÃÃÌÌÌÒÒÒÿ@€pH,…˜€R‰ñx–ÇhÑP1$Ž’¢éÁˆÒ0`Qj\AO.¢$²9À(EÜÀDJ0%%#~ "# B eI‹xN% ‹ # "d#Ž#L“%B##e ´%‹©¬’Ou$#N ‚¨€Ðs«­O¯±E"‹½%ÖÁsÅ”°%Ÿ« $¼%suwò|!¤À®@âà+!‚Ä8[‚R@SlÍ"R`Á/" !Q’e‹“ "¸seI%+ôܶ¤€Í›8sê´‰€OŸ\~î:ƒÑ£\Ž!ù-,‘B#…%)"""$-$(((333;;;9A9CCCFMFKKKHPHTTTT[TYYY^d^acagmgikimrmsss|}|„„„ˆˆˆ”””œœœ£¤£§©§­®­®°®µ¶µ¼¼¼ÃÃÃÍÍÍÒÓÒÿ@€pH,…˜€R‰I.Т¡bp:HŠfD¿€©áy¶II>br€AŠ •Ð(ÀH"| !" B cI‰w$ ‰ " !šb"Œ"LN$B""c ±#‰¦©t#"È €"¹~Ìr¨ªJ¬Ä"E!‰º$Ò¾rŽ’H$œ¨ #$“‹rtvZyB pøCâÛzs˜ÈT3wÔL r`Á!ð"’à%W²$É‚@0N–øSròKÊkK ÈœI³¦M™èÔÙd' ›@6Jth!ù<,‘B#…%)####-#(((333;;;9A9CCCFNFKKKHPHTTTT[TXXX]d]adagmgikimrmsss{}{………ˆˆˆŒŒ“““£¤£§©§­®­®°®´µ´·¸·¼½¼ÃÃÃÌÌÌÒÒÒÿ@€pH,…˜€R‰ñx–ÇhÑP1$Ž’¢éÁˆÒ0`Qj\AO.¢$²9À(EÜÀDJ0%%#~ "# B eI‹xN% ‹ # "d#Ž#L“%B##e ´%‹©¬’Ou$#N ‚¨€Ðs«­O¯±E"‹½%ÖÁsÅ”°%Ÿ« $¼%suwò|!¤À®@âà+!‚Ä8[‚R@SlÍ"R`Á/" !Q’e‹“ "¸seI%+ôܶ¤€Í›8sê´‰€OŸ\~î:ƒÑ£\Ž!ù,‘B#…%)"""$-$(((333;;;9A9CCCFMFKKKHPHTTTT[TYYY^d^acagmgikimrmsss|}|„„„ˆˆˆ”””œœœ£¤£§©§­®­®°®µ¶µ¼¼¼ÃÃÃÍÍÍÒÓÒÿ@€pH,…˜€R‰I.Т¡bp:HŠfD¿€©áy¶II>br€AŠ •Ð(ÀH"| !" B cI‰w$ ‰ " !šb"Œ"LN$B""c ±#‰¦©t#"È €"¹~Ìr¨ªJ¬Ä"E!‰º$Ò¾rŽ’H$œ¨ #$“‹rtvZyB pøCâÛzs˜ÈT3wÔL r`Á!ð"’à%W²$É‚@0N–øSròKÊkK ÈœI³¦M™èÔÙd' ›@6Jth!ù,WFLƒ(((333999žžž¤¤¤»»»ÀÀÀîîîòòòÿÿÿµ0ÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ ð#(ȤrÉl:ŸÐ¨tJ­Z¯Ø,rÈíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢}  £ £ ²³¥¸º»½¸¿³Á¢¥ ¬ÀÇÈ»¹ÉÂÍ­¶¸¯±Ä¦¨ª !ù,‘B~T…%)####-#(((3333;3;;;9A9CCCFNFKKKHPHTTTT[TXXX]d]adagmgikimrmsss{}{………ˆˆˆŒŒ“““£¤£§©§­®­®°®´µ´·¸·¼½¼ÃÃÃÌÌÌÒÒÒîîîòòòÿÿÿÿÀ€pH,…R©–Ì£tJ­Z¯Ø¬vËíz¿à°xL.—CR91š i5Ûïø¼~Ïïûÿ 'k"Op 'uŒŽ‘’fƒ'p!"‹“£¤¥¦§¦& ''%« $®% B®"‚I¸N'¨ÆÇÈÉÊ[ ¸"%$Ó%»%LÀ'ÅËéêëì’%%‚ ñ'¸ßâ~=ÑtNC»ƒ*ôBÀD ' D,˜ð „7­  ˆ)ܸ'å .I²äŠx A .}'4úÃÔK`°aèLêÜÉÓT«ÿ ª—à‰|Nh8  “&NžBŒÕ³ªÕ«y àsŲÁÑ$L´œ÷ꛀBU Šµ­Û·[4H0Ä@~DØB¢¤Í'HøÊ ·°áÃ`Ö,ñÅ âÇ#KQü aɘ3¯3À¹³çÏ 9k(@š4œÒ¦C«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»7k ÀƒÃÜ·ñãÈ“+_μ¹óÚš£KŸN½ºõëØ³kßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©ey¨BZ¥ Â–ÿP $àE¦¨ æšýu '€rÎé_vò‡gžúíÉç}]ª0fA!ù, €„©Ëí¯ ;python-language-server-0.36.2/scripts/000077500000000000000000000000001376456405500177165ustar00rootroot00000000000000python-language-server-0.36.2/scripts/circle/000077500000000000000000000000001376456405500211575ustar00rootroot00000000000000python-language-server-0.36.2/scripts/circle/pypi.sh000077500000000000000000000007201376456405500224760ustar00rootroot00000000000000#!/bin/bash -e if [ -z "$CI" ]; then echo "Will only continue on CI" exit fi # build package and upload to private pypi index rm -f ~/.pypirc echo "[distutils]" >> ~/.pypirc echo "index-servers = pypi-private" >> ~/.pypirc echo "[pypi-private]" >> ~/.pypirc echo "repository=https://$PYPI_HOST" >> ~/.pypirc echo "username=$PYPI_USERNAME" >> ~/.pypirc echo "password=$PYPI_PASSWORD" >> ~/.pypirc python setup.py bdist_wheel sdist upload -r pypi-private python-language-server-0.36.2/setup.cfg000066400000000000000000000006101376456405500200450ustar00rootroot00000000000000[versioneer] VCS = git style = pep440 versionfile_source = pyls/_version.py versionfile_build = pyls/_version.py tag_prefix = parentdir_prefix = [pycodestyle] ignore = E226, E722, W504 max-line-length = 120 exclude = test/plugins/.ropeproject,test/.ropeproject [tool:pytest] testpaths = test addopts = --cov-report html --cov-report term --junitxml=pytest.xml --cov pyls --cov test python-language-server-0.36.2/setup.py000077500000000000000000000104701376456405500177460ustar00rootroot00000000000000#!/usr/bin/env python import sys from setuptools import find_packages, setup import versioneer import sys README = open('README.rst', 'r').read() install_requires = [ 'configparser; python_version<"3.0"', 'future>=0.14.0; python_version<"3"', 'backports.functools_lru_cache; python_version<"3.2"', 'jedi>=0.17.2,<0.18.0', 'python-jsonrpc-server>=0.4.0', 'pluggy', 'ujson<=2.0.3 ; platform_system!="Windows" and python_version<"3.0"', 'ujson>=3.0.0 ; python_version>"3"'] setup( name='python-language-server', # Versions should comply with PEP440. For a discussion on single-sourcing # the version across setup.py and the project code, see # https://packaging.python.org/en/latest/single_source_version.html version=versioneer.get_version(), cmdclass=versioneer.get_cmdclass(), description='Python Language Server for the Language Server Protocol', long_description=README, # The project's main homepage. url='https://github.com/palantir/python-language-server', author='Palantir Technologies, Inc.', # You can just specify the packages manually here if your project is # simple. Or you can use find_packages(). packages=find_packages(exclude=['contrib', 'docs', 'test', 'test.*']), # List run-time dependencies here. These will be installed by pip when # your project is installed. For an analysis of "install_requires" vs pip's # requirements files see: # https://packaging.python.org/en/latest/requirements.html install_requires=install_requires, # List additional groups of dependencies here (e.g. development # dependencies). You can install these using the following syntax, # for example: # $ pip install -e .[test] extras_require={ 'all': [ 'autopep8', 'flake8>=3.8.0', 'mccabe>=0.6.0,<0.7.0', 'pycodestyle>=2.6.0,<2.7.0', 'pydocstyle>=2.0.0', 'pyflakes>=2.2.0,<2.3.0', # pylint >= 2.5.0 is required for working through stdin and only # available with python3 'pylint>=2.5.0' if sys.version_info.major >= 3 else 'pylint', 'rope>=0.10.5', 'yapf', ], 'autopep8': ['autopep8'], 'flake8': ['flake8>=3.8.0'], 'mccabe': ['mccabe>=0.6.0,<0.7.0'], 'pycodestyle': ['pycodestyle>=2.6.0,<2.7.0'], 'pydocstyle': ['pydocstyle>=2.0.0'], 'pyflakes': ['pyflakes>=2.2.0,<2.3.0'], 'pylint': [ 'pylint>=2.5.0' if sys.version_info.major >= 3 else 'pylint'], 'rope': ['rope>0.10.5'], 'yapf': ['yapf'], 'test': ['versioneer', 'pylint>=2.5.0' if sys.version_info.major >= 3 else 'pylint', 'pytest', 'mock', 'pytest-cov', 'coverage', 'numpy', 'pandas', 'matplotlib', 'pyqt5;python_version>="3"', 'flaky'], }, # To provide executable scripts, use entry points in preference to the # "scripts" keyword. Entry points provide cross-platform support and allow # pip to create the appropriate form of executable for the target platform. entry_points={ 'console_scripts': [ 'pyls = pyls.__main__:main', ], 'pyls': [ 'autopep8 = pyls.plugins.autopep8_format', 'folding = pyls.plugins.folding', 'flake8 = pyls.plugins.flake8_lint', 'jedi_completion = pyls.plugins.jedi_completion', 'jedi_definition = pyls.plugins.definition', 'jedi_hover = pyls.plugins.hover', 'jedi_highlight = pyls.plugins.highlight', 'jedi_references = pyls.plugins.references', 'jedi_rename = pyls.plugins.jedi_rename', 'jedi_signature_help = pyls.plugins.signature', 'jedi_symbols = pyls.plugins.symbols', 'mccabe = pyls.plugins.mccabe_lint', 'preload = pyls.plugins.preload_imports', 'pycodestyle = pyls.plugins.pycodestyle_lint', 'pydocstyle = pyls.plugins.pydocstyle_lint', 'pyflakes = pyls.plugins.pyflakes_lint', 'pylint = pyls.plugins.pylint_lint', 'rope_completion = pyls.plugins.rope_completion', 'rope_rename = pyls.plugins.rope_rename', 'yapf = pyls.plugins.yapf_format' ] }, ) python-language-server-0.36.2/test/000077500000000000000000000000001376456405500172065ustar00rootroot00000000000000python-language-server-0.36.2/test/__init__.py000066400000000000000000000006031376456405500213160ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import sys import pytest from pyls import IS_WIN IS_PY3 = sys.version_info.major == 3 unix_only = pytest.mark.skipif(IS_WIN, reason="Unix only") windows_only = pytest.mark.skipif(not IS_WIN, reason="Windows only") py3_only = pytest.mark.skipif(not IS_PY3, reason="Python3 only") py2_only = pytest.mark.skipif(IS_PY3, reason="Python2 only") python-language-server-0.36.2/test/conftest.py000066400000000000000000000003461376456405500214100ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. """ py.test configuration""" import logging from pyls.__main__ import LOG_FORMAT logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT) pytest_plugins = [ 'test.fixtures' ] python-language-server-0.36.2/test/fixtures.py000066400000000000000000000041351376456405500214340ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import sys from mock import Mock import pytest from pyls import uris from pyls.config.config import Config from pyls.python_ls import PythonLanguageServer from pyls.workspace import Workspace, Document if sys.version_info[0] < 3: from StringIO import StringIO else: from io import StringIO DOC_URI = uris.from_fs_path(__file__) DOC = """import sys def main(): print sys.stdin.read() """ @pytest.fixture def pyls(tmpdir): """ Return an initialized python LS """ ls = PythonLanguageServer(StringIO, StringIO) ls.m_initialize( processId=1, rootUri=uris.from_fs_path(str(tmpdir)), initializationOptions={} ) return ls @pytest.fixture def workspace(tmpdir): """Return a workspace.""" ws = Workspace(uris.from_fs_path(str(tmpdir)), Mock()) ws._config = Config(ws.root_uri, {}, 0, {}) return ws @pytest.fixture def workspace_other_root_path(tmpdir): """Return a workspace with a root_path other than tmpdir.""" ws_path = str(tmpdir.mkdir('test123').mkdir('test456')) ws = Workspace(uris.from_fs_path(ws_path), Mock()) ws._config = Config(ws.root_uri, {}, 0, {}) return ws @pytest.fixture def config(workspace): # pylint: disable=redefined-outer-name """Return a config object.""" return Config(workspace.root_uri, {}, 0, {}) @pytest.fixture def doc(workspace): # pylint: disable=redefined-outer-name return Document(DOC_URI, workspace, DOC) @pytest.fixture def temp_workspace_factory(workspace): # pylint: disable=redefined-outer-name ''' Returns a function that creates a temporary workspace from the files dict. The dict is in the format {"file_name": "file_contents"} ''' def fn(files): def create_file(name, content): fn = os.path.join(workspace.root_path, name) with open(fn, 'w') as f: f.write(content) workspace.put_document(uris.from_fs_path(fn), content) for name, content in files.items(): create_file(name, content) return workspace return fn python-language-server-0.36.2/test/plugins/000077500000000000000000000000001376456405500206675ustar00rootroot00000000000000python-language-server-0.36.2/test/plugins/__init__.py000066400000000000000000000000001376456405500227660ustar00rootroot00000000000000python-language-server-0.36.2/test/plugins/test_autopep8_format.py000066400000000000000000000027651376456405500254270ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import uris from pyls.plugins.autopep8_format import pyls_format_document, pyls_format_range from pyls.workspace import Document DOC_URI = uris.from_fs_path(__file__) DOC = """a = 123 def func(): pass """ GOOD_DOC = """A = ['hello', 'world']\n""" INDENTED_DOC = """def foo(): print('asdf', file=None ) bar = { 'foo': foo } """ CORRECT_INDENTED_DOC = """def foo(): print('asdf', file=None ) bar = {'foo': foo } """ def test_format(config, workspace): doc = Document(DOC_URI, workspace, DOC) res = pyls_format_document(config, doc) assert len(res) == 1 assert res[0]['newText'] == "a = 123\n\n\ndef func():\n pass\n" def test_range_format(config, workspace): doc = Document(DOC_URI, workspace, DOC) def_range = { 'start': {'line': 0, 'character': 0}, 'end': {'line': 2, 'character': 0} } res = pyls_format_range(config, doc, def_range) assert len(res) == 1 # Make sure the func is still badly formatted assert res[0]['newText'] == "a = 123\n\n\n\n\ndef func():\n pass\n" def test_no_change(config, workspace): doc = Document(DOC_URI, workspace, GOOD_DOC) assert not pyls_format_document(config, doc) def test_hanging_indentation(config, workspace): doc = Document(DOC_URI, workspace, INDENTED_DOC) res = pyls_format_document(config, doc) assert len(res) == 1 assert res[0]['newText'] == CORRECT_INDENTED_DOC python-language-server-0.36.2/test/plugins/test_completion.py000066400000000000000000000313671376456405500244630ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import sys import pytest from pyls import uris, lsp from pyls.workspace import Document from pyls.plugins.jedi_completion import pyls_completions as pyls_jedi_completions from pyls.plugins.rope_completion import pyls_completions as pyls_rope_completions PY2 = sys.version[0] == '2' LINUX = sys.platform.startswith('linux') CI = os.environ.get('CI') LOCATION = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__)) ) DOC_URI = uris.from_fs_path(__file__) DOC = """import os print os.path.isabs("/tmp") def hello(): pass def _a_hello(): pass class Hello(): @property def world(self): return None def everyone(self, a, b, c=None, d=2): pass print Hello().world print Hello().every """ def test_rope_import_completion(config, workspace): com_position = {'line': 0, 'character': 7} doc = Document(DOC_URI, workspace, DOC) items = pyls_rope_completions(config, workspace, doc, com_position) assert items is None def test_jedi_completion(config, workspace): # Over 'i' in os.path.isabs(...) com_position = {'line': 1, 'character': 15} doc = Document(DOC_URI, workspace, DOC) items = pyls_jedi_completions(config, doc, com_position) assert items labels = [i['label'] for i in items] assert 'isabs(path)' in labels # Test we don't throw with big character pyls_jedi_completions(config, doc, {'line': 1, 'character': 1000}) def test_jedi_completion_with_fuzzy_enabled(config, workspace): # Over 'i' in os.path.isabs(...) config.update({'plugins': {'jedi_completion': {'fuzzy': True}}}) com_position = {'line': 1, 'character': 15} doc = Document(DOC_URI, workspace, DOC) items = pyls_jedi_completions(config, doc, com_position) assert items assert items[0]['label'] == 'commonprefix(list)' # Test we don't throw with big character pyls_jedi_completions(config, doc, {'line': 1, 'character': 1000}) def test_rope_completion(config, workspace): # Over 'i' in os.path.isabs(...) com_position = {'line': 1, 'character': 15} workspace.put_document(DOC_URI, source=DOC) doc = workspace.get_document(DOC_URI) items = pyls_rope_completions(config, workspace, doc, com_position) assert items assert items[0]['label'] == 'isabs' def test_jedi_completion_ordering(config, workspace): # Over the blank line com_position = {'line': 8, 'character': 0} doc = Document(DOC_URI, workspace, DOC) completions = pyls_jedi_completions(config, doc, com_position) items = {c['label']: c['sortText'] for c in completions} # And that 'hidden' functions come after unhidden ones assert items['hello()'] < items['_a_hello()'] def test_jedi_property_completion(config, workspace): # Over the 'w' in 'print Hello().world' com_position = {'line': 18, 'character': 15} doc = Document(DOC_URI, workspace, DOC) completions = pyls_jedi_completions(config, doc, com_position) items = {c['label']: c['sortText'] for c in completions} # Ensure we can complete the 'world' property assert 'world' in list(items.keys())[0] def test_jedi_method_completion(config, workspace): # Over the 'y' in 'print Hello().every' com_position = {'line': 20, 'character': 19} doc = Document(DOC_URI, workspace, DOC) config.capabilities['textDocument'] = {'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': {'include_params': True}}}) completions = pyls_jedi_completions(config, doc, com_position) everyone_method = [completion for completion in completions if completion['label'] == 'everyone(a, b, c, d)'][0] # Ensure we only generate snippets for positional args assert everyone_method['insertTextFormat'] == lsp.InsertTextFormat.Snippet assert everyone_method['insertText'] == 'everyone(${1:a}, ${2:b})$0' # Disable param snippets config.update({'plugins': {'jedi_completion': {'include_params': False}}}) completions = pyls_jedi_completions(config, doc, com_position) everyone_method = [completion for completion in completions if completion['label'] == 'everyone(a, b, c, d)'][0] assert 'insertTextFormat' not in everyone_method assert everyone_method['insertText'] == 'everyone' @pytest.mark.skipif(PY2 or (sys.platform.startswith('linux') and os.environ.get('CI') is not None), reason="Test in Python 3 and not on CIs on Linux because wheels don't work on them.") def test_pyqt_completion(config, workspace): # Over 'QA' in 'from PyQt5.QtWidgets import QApplication' doc_pyqt = "from PyQt5.QtWidgets import QA" com_position = {'line': 0, 'character': len(doc_pyqt)} doc = Document(DOC_URI, workspace, doc_pyqt) completions = pyls_jedi_completions(config, doc, com_position) assert completions is not None def test_numpy_completions(config, workspace): doc_numpy = "import numpy as np; np." com_position = {'line': 0, 'character': len(doc_numpy)} doc = Document(DOC_URI, workspace, doc_numpy) items = pyls_jedi_completions(config, doc, com_position) assert items assert any(['array' in i['label'] for i in items]) def test_pandas_completions(config, workspace): doc_pandas = "import pandas as pd; pd." com_position = {'line': 0, 'character': len(doc_pandas)} doc = Document(DOC_URI, workspace, doc_pandas) items = pyls_jedi_completions(config, doc, com_position) assert items assert any(['DataFrame' in i['label'] for i in items]) def test_matplotlib_completions(config, workspace): doc_mpl = "import matplotlib.pyplot as plt; plt." com_position = {'line': 0, 'character': len(doc_mpl)} doc = Document(DOC_URI, workspace, doc_mpl) items = pyls_jedi_completions(config, doc, com_position) assert items assert any(['plot' in i['label'] for i in items]) def test_snippets_completion(config, workspace): doc_snippets = 'from collections import defaultdict \na=defaultdict' com_position = {'line': 0, 'character': 35} doc = Document(DOC_URI, workspace, doc_snippets) config.capabilities['textDocument'] = { 'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': {'include_params': True}}}) completions = pyls_jedi_completions(config, doc, com_position) assert completions[0]['insertText'] == 'defaultdict' com_position = {'line': 1, 'character': len(doc_snippets)} completions = pyls_jedi_completions(config, doc, com_position) assert completions[0]['insertText'] == 'defaultdict($0)' assert completions[0]['insertTextFormat'] == lsp.InsertTextFormat.Snippet def test_completion_with_class_objects(config, workspace): doc_text = 'class FOOBAR(Object): pass\nFOOB' com_position = {'line': 1, 'character': 4} doc = Document(DOC_URI, workspace, doc_text) config.capabilities['textDocument'] = { 'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': { 'include_params': True, 'include_class_objects': True, }}}) completions = pyls_jedi_completions(config, doc, com_position) assert len(completions) == 2 assert completions[0]['label'] == 'FOOBAR' assert completions[0]['kind'] == lsp.CompletionItemKind.Class assert completions[1]['label'] == 'FOOBAR object' assert completions[1]['kind'] == lsp.CompletionItemKind.TypeParameter def test_snippet_parsing(config, workspace): doc = 'import numpy as np\nnp.logical_and' completion_position = {'line': 1, 'character': 14} doc = Document(DOC_URI, workspace, doc) config.capabilities['textDocument'] = { 'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': {'include_params': True}}}) completions = pyls_jedi_completions(config, doc, completion_position) out = 'logical_and(${1:x1}, ${2:x2})$0' assert completions[0]['insertText'] == out def test_multiline_import_snippets(config, workspace): document = 'from datetime import(\n date,\n datetime)\na=date' doc = Document(DOC_URI, workspace, document) config.capabilities['textDocument'] = { 'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': {'include_params': True}}}) position = {'line': 1, 'character': 5} completions = pyls_jedi_completions(config, doc, position) assert completions[0]['insertText'] == 'date' position = {'line': 2, 'character': 9} completions = pyls_jedi_completions(config, doc, position) assert completions[0]['insertText'] == 'datetime' def test_multiline_snippets(config, workspace): document = 'from datetime import\\\n date,\\\n datetime \na=date' doc = Document(DOC_URI, workspace, document) config.capabilities['textDocument'] = { 'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': {'include_params': True}}}) position = {'line': 1, 'character': 5} completions = pyls_jedi_completions(config, doc, position) assert completions[0]['insertText'] == 'date' position = {'line': 2, 'character': 9} completions = pyls_jedi_completions(config, doc, position) assert completions[0]['insertText'] == 'datetime' def test_multistatement_snippet(config, workspace): config.capabilities['textDocument'] = { 'completion': {'completionItem': {'snippetSupport': True}}} config.update({'plugins': {'jedi_completion': {'include_params': True}}}) document = 'a = 1; from datetime import date' doc = Document(DOC_URI, workspace, document) position = {'line': 0, 'character': len(document)} completions = pyls_jedi_completions(config, doc, position) assert completions[0]['insertText'] == 'date' document = 'from datetime import date; a = date' doc = Document(DOC_URI, workspace, document) position = {'line': 0, 'character': len(document)} completions = pyls_jedi_completions(config, doc, position) assert completions[0]['insertText'] == 'date(${1:year}, ${2:month}, ${3:day})$0' def test_jedi_completion_extra_paths(tmpdir, workspace): # Create a tempfile with some content and pass to extra_paths temp_doc_content = ''' def spam(): pass ''' p = tmpdir.mkdir("extra_path") extra_paths = [str(p)] p = p.join("foo.py") p.write(temp_doc_content) # Content of doc to test completion doc_content = """import foo foo.s""" doc = Document(DOC_URI, workspace, doc_content) # After 'foo.s' without extra paths com_position = {'line': 1, 'character': 5} completions = pyls_jedi_completions(doc._config, doc, com_position) assert completions is None # Update config extra paths settings = {'pyls': {'plugins': {'jedi': {'extra_paths': extra_paths}}}} doc.update_config(settings) # After 'foo.s' with extra paths com_position = {'line': 1, 'character': 5} completions = pyls_jedi_completions(doc._config, doc, com_position) assert completions[0]['label'] == 'spam()' @pytest.mark.skipif(PY2 or not LINUX or not CI, reason="tested on linux and python 3 only") def test_jedi_completion_environment(workspace): # Content of doc to test completion doc_content = '''import logh ''' doc = Document(DOC_URI, workspace, doc_content) # After 'import logh' with default environment com_position = {'line': 0, 'character': 11} assert os.path.isdir('/tmp/pyenv/') settings = {'pyls': {'plugins': {'jedi': {'environment': None}}}} doc.update_config(settings) completions = pyls_jedi_completions(doc._config, doc, com_position) assert completions is None # Update config extra environment env_path = '/tmp/pyenv/bin/python' settings = {'pyls': {'plugins': {'jedi': {'environment': env_path}}}} doc.update_config(settings) # After 'import logh' with new environment completions = pyls_jedi_completions(doc._config, doc, com_position) assert completions[0]['label'] == 'loghub' assert 'changelog generator' in completions[0]['documentation'].lower() def test_document_path_completions(tmpdir, workspace_other_root_path): # Create a dummy module out of the workspace's root_path and try to get # completions for it in another file placed next to it. module_content = ''' def foo(): pass ''' p = tmpdir.join("mymodule.py") p.write(module_content) # Content of doc to test completion doc_content = """import mymodule mymodule.f""" doc_path = str(tmpdir) + os.path.sep + 'myfile.py' doc_uri = uris.from_fs_path(doc_path) doc = Document(doc_uri, workspace_other_root_path, doc_content) com_position = {'line': 1, 'character': 10} completions = pyls_jedi_completions(doc._config, doc, com_position) assert completions[0]['label'] == 'foo()' python-language-server-0.36.2/test/plugins/test_definitions.py000066400000000000000000000026601376456405500246170ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import uris from pyls.plugins.definition import pyls_definitions from pyls.workspace import Document DOC_URI = uris.from_fs_path(__file__) DOC = """def a(): pass print a() class Directory(object): def __init__(self): self.members = dict() def add_member(self, id, name): self.members[id] = name """ def test_definitions(config, workspace): # Over 'a' in print a cursor_pos = {'line': 3, 'character': 6} # The definition of 'a' def_range = { 'start': {'line': 0, 'character': 4}, 'end': {'line': 0, 'character': 5} } doc = Document(DOC_URI, workspace, DOC) assert [{'uri': DOC_URI, 'range': def_range}] == pyls_definitions(config, doc, cursor_pos) def test_builtin_definition(config, workspace): # Over 'i' in dict cursor_pos = {'line': 8, 'character': 24} # No go-to def for builtins doc = Document(DOC_URI, workspace, DOC) assert not pyls_definitions(config, doc, cursor_pos) def test_assignment(config, workspace): # Over 's' in self.members[id] cursor_pos = {'line': 11, 'character': 19} # The assignment of 'self.members' def_range = { 'start': {'line': 8, 'character': 13}, 'end': {'line': 8, 'character': 20} } doc = Document(DOC_URI, workspace, DOC) assert [{'uri': DOC_URI, 'range': def_range}] == pyls_definitions(config, doc, cursor_pos) python-language-server-0.36.2/test/plugins/test_flake8_lint.py000066400000000000000000000055421376456405500245060ustar00rootroot00000000000000# Copyright 2019 Palantir Technologies, Inc. import tempfile import os from mock import patch from pyls import lsp, uris from pyls.plugins import flake8_lint from pyls.workspace import Document DOC_URI = uris.from_fs_path(__file__) DOC = """import pyls t = "TEST" def using_const(): \ta = 8 + 9 \treturn t """ def temp_document(doc_text, workspace): temp_file = tempfile.NamedTemporaryFile(mode='w', delete=False) name = temp_file.name temp_file.write(doc_text) temp_file.close() doc = Document(uris.from_fs_path(name), workspace) return name, doc def test_flake8_unsaved(workspace): doc = Document('', workspace, DOC) diags = flake8_lint.pyls_lint(workspace, doc) msg = 'F841 local variable \'a\' is assigned to but never used' unused_var = [d for d in diags if d['message'] == msg][0] assert unused_var['source'] == 'flake8' assert unused_var['code'] == 'F841' assert unused_var['range']['start'] == {'line': 5, 'character': 1} assert unused_var['range']['end'] == {'line': 5, 'character': 11} assert unused_var['severity'] == lsp.DiagnosticSeverity.Warning def test_flake8_lint(workspace): try: name, doc = temp_document(DOC, workspace) diags = flake8_lint.pyls_lint(workspace, doc) msg = 'F841 local variable \'a\' is assigned to but never used' unused_var = [d for d in diags if d['message'] == msg][0] assert unused_var['source'] == 'flake8' assert unused_var['code'] == 'F841' assert unused_var['range']['start'] == {'line': 5, 'character': 1} assert unused_var['range']['end'] == {'line': 5, 'character': 11} assert unused_var['severity'] == lsp.DiagnosticSeverity.Warning finally: os.remove(name) def test_flake8_config_param(workspace): with patch('pyls.plugins.flake8_lint.Popen') as popen_mock: mock_instance = popen_mock.return_value mock_instance.communicate.return_value = [bytes(), bytes()] flake8_conf = '/tmp/some.cfg' workspace._config.update({'plugins': {'flake8': {'config': flake8_conf}}}) _name, doc = temp_document(DOC, workspace) flake8_lint.pyls_lint(workspace, doc) call_args = popen_mock.call_args.args[0] assert 'flake8' in call_args assert '--config={}'.format(flake8_conf) in call_args def test_flake8_executable_param(workspace): with patch('pyls.plugins.flake8_lint.Popen') as popen_mock: mock_instance = popen_mock.return_value mock_instance.communicate.return_value = [bytes(), bytes()] flake8_executable = '/tmp/flake8' workspace._config.update({'plugins': {'flake8': {'executable': flake8_executable}}}) _name, doc = temp_document(DOC, workspace) flake8_lint.pyls_lint(workspace, doc) call_args = popen_mock.call_args.args[0] assert flake8_executable in call_args python-language-server-0.36.2/test/plugins/test_folding.py000066400000000000000000000110751376456405500237260ustar00rootroot00000000000000# Copyright 2019 Palantir Technologies, Inc. from textwrap import dedent from pyls import uris from pyls.workspace import Document from pyls.plugins.folding import pyls_folding_range DOC_URI = uris.from_fs_path(__file__) DOC = dedent(""" def func(arg1, arg2, arg3, arg4, arg5, default=func( 2, 3, 4 )): return (2, 3, 4, 5) @decorator( param1, param2 ) def decorated_func(x, y, z): if x: return y elif y: return z elif x + y > z: return True else: return x class A(): def method(self, x1): def inner(): return x1 if x2: func(3, 4, 5, 6, 7) elif x3 < 2: pass else: more_complex_func(2, 3, 4, 5, 6, 8) return inner a = 2 operation = (a_large_variable_that_fills_all_space + other_embarrasingly_long_variable - 2 * 3 / 5) (a, b, c, d, e, f) = func(3, 4, 5, 6, 7, 8, 9, 10) for i in range(0, 3): i += 1 while x < i: expr = (2, 4) a = func(expr + i, arg2, arg3, arg4, arg5, var(2, 3, 4, 5)) for j in range(0, i): if i % 2 == 1: pass compren = [x for x in range(0, 3) if x == 2] with open('doc', 'r') as f: try: f / 0 except: pass finally: raise SomeException() def testC(): pass """) SYNTAX_ERR = dedent(""" def func(arg1, arg2, arg3, arg4, arg5, default=func( 2, 3, 4 )): return (2, 3, 4, 5) class A(: pass a = 2 operation = (a_large_variable_that_fills_all_space + other_embarrasingly_long_variable - 2 * 3 / (a, b, c, d, e, f) = func(3, 4, 5, 6, 7, 8, 9, 10 a = 2 for i in range(0, 3) i += 1 while x < i: expr = (2, 4) a = func(expr + i, arg2, arg3, arg4, arg5, var(2, 3, 4, 5)) for j in range(0, i): if i % 2 == 1: pass """) def test_folding(workspace): doc = Document(DOC_URI, workspace, DOC) ranges = pyls_folding_range(doc) expected = [{'startLine': 1, 'endLine': 6}, {'startLine': 2, 'endLine': 3}, {'startLine': 5, 'endLine': 6}, {'startLine': 8, 'endLine': 11}, {'startLine': 12, 'endLine': 20}, {'startLine': 13, 'endLine': 14}, {'startLine': 15, 'endLine': 16}, {'startLine': 17, 'endLine': 18}, {'startLine': 19, 'endLine': 20}, {'startLine': 22, 'endLine': 35}, {'startLine': 23, 'endLine': 35}, {'startLine': 24, 'endLine': 25}, {'startLine': 27, 'endLine': 29}, {'startLine': 28, 'endLine': 29}, {'startLine': 30, 'endLine': 31}, {'startLine': 32, 'endLine': 34}, {'startLine': 33, 'endLine': 34}, {'startLine': 38, 'endLine': 39}, {'startLine': 41, 'endLine': 43}, {'startLine': 42, 'endLine': 43}, {'startLine': 45, 'endLine': 54}, {'startLine': 47, 'endLine': 51}, {'startLine': 49, 'endLine': 51}, {'startLine': 50, 'endLine': 51}, {'startLine': 52, 'endLine': 54}, {'startLine': 53, 'endLine': 54}, {'startLine': 56, 'endLine': 57}, {'startLine': 59, 'endLine': 65}, {'startLine': 60, 'endLine': 61}, {'startLine': 62, 'endLine': 63}, {'startLine': 64, 'endLine': 65}, {'startLine': 67, 'endLine': 68}] assert ranges == expected def test_folding_syntax_error(workspace): doc = Document(DOC_URI, workspace, SYNTAX_ERR) ranges = pyls_folding_range(doc) expected = [{'startLine': 1, 'endLine': 6}, {'startLine': 2, 'endLine': 3}, {'startLine': 5, 'endLine': 6}, {'startLine': 8, 'endLine': 9}, {'startLine': 12, 'endLine': 13}, {'startLine': 15, 'endLine': 17}, {'startLine': 16, 'endLine': 17}, {'startLine': 19, 'endLine': 28}, {'startLine': 21, 'endLine': 25}, {'startLine': 23, 'endLine': 25}, {'startLine': 24, 'endLine': 25}, {'startLine': 26, 'endLine': 28}, {'startLine': 27, 'endLine': 28}] assert ranges == expected python-language-server-0.36.2/test/plugins/test_highlight.py000066400000000000000000000027331376456405500242540ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import lsp, uris from pyls.workspace import Document from pyls.plugins.highlight import pyls_document_highlight DOC_URI = uris.from_fs_path(__file__) DOC = """a = "hello" a.startswith("b") """ def test_highlight(workspace): # Over 'a' in a.startswith cursor_pos = {'line': 1, 'character': 0} doc = Document(DOC_URI, workspace, DOC) assert pyls_document_highlight(doc, cursor_pos) == [{ 'range': { 'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 1}, }, # The first usage is Write 'kind': lsp.DocumentHighlightKind.Write }, { 'range': { 'start': {'line': 1, 'character': 0}, 'end': {'line': 1, 'character': 1}, }, # The second usage is Read 'kind': lsp.DocumentHighlightKind.Read }] SYS_DOC = '''import sys print sys.path ''' def test_sys_highlight(workspace): cursor_pos = {'line': 0, 'character': 8} doc = Document(DOC_URI, workspace, SYS_DOC) assert pyls_document_highlight(doc, cursor_pos) == [{ 'range': { 'start': {'line': 0, 'character': 7}, 'end': {'line': 0, 'character': 10} }, 'kind': lsp.DocumentHighlightKind.Write }, { 'range': { 'start': {'line': 1, 'character': 6}, 'end': {'line': 1, 'character': 9} }, 'kind': lsp.DocumentHighlightKind.Read }] python-language-server-0.36.2/test/plugins/test_hover.py000066400000000000000000000035131376456405500234250ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import uris from pyls.plugins.hover import pyls_hover from pyls.workspace import Document DOC_URI = uris.from_fs_path(__file__) DOC = """ def main(): \"\"\"hello world\"\"\" pass """ NUMPY_DOC = """ import numpy as np np.sin """ def test_numpy_hover(workspace): # Over the blank line no_hov_position = {'line': 1, 'character': 0} # Over 'numpy' in import numpy as np numpy_hov_position_1 = {'line': 2, 'character': 8} # Over 'np' in import numpy as np numpy_hov_position_2 = {'line': 2, 'character': 17} # Over 'np' in np.sin numpy_hov_position_3 = {'line': 3, 'character': 1} # Over 'sin' in np.sin numpy_sin_hov_position = {'line': 3, 'character': 4} doc = Document(DOC_URI, workspace, NUMPY_DOC) contents = '' assert contents in pyls_hover(doc, no_hov_position)['contents'] contents = 'NumPy\n=====\n\nProvides\n' assert contents in pyls_hover(doc, numpy_hov_position_1)['contents'][0] contents = 'NumPy\n=====\n\nProvides\n' assert contents in pyls_hover(doc, numpy_hov_position_2)['contents'][0] contents = 'NumPy\n=====\n\nProvides\n' assert contents in pyls_hover(doc, numpy_hov_position_3)['contents'][0] contents = 'Trigonometric sine, element-wise.\n\n' assert contents in pyls_hover( doc, numpy_sin_hov_position)['contents'][0] def test_hover(workspace): # Over 'main' in def main(): hov_position = {'line': 2, 'character': 6} # Over the blank second line no_hov_position = {'line': 1, 'character': 0} doc = Document(DOC_URI, workspace, DOC) contents = [{'language': 'python', 'value': 'main()'}, 'hello world'] assert { 'contents': contents } == pyls_hover(doc, hov_position) assert {'contents': ''} == pyls_hover(doc, no_hov_position) python-language-server-0.36.2/test/plugins/test_jedi_rename.py000066400000000000000000000047131376456405500245470ustar00rootroot00000000000000# Copyright 2020 Palantir Technologies, Inc. import os import sys import pytest from pyls import uris from pyls.plugins.jedi_rename import pyls_rename from pyls.workspace import Document LT_PY36 = sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 6) DOC_NAME = 'test1.py' DOC = '''class Test1(): pass class Test2(Test1): pass ''' DOC_NAME_EXTRA = 'test2.py' DOC_EXTRA = '''from test1 import Test1 x = Test1() ''' @pytest.fixture def tmp_workspace(temp_workspace_factory): return temp_workspace_factory({ DOC_NAME: DOC, DOC_NAME_EXTRA: DOC_EXTRA }) @pytest.mark.skipif(LT_PY36, reason='Jedi refactoring isnt supported on Python 2.x/3.5') def test_jedi_rename(tmp_workspace, config): # pylint: disable=redefined-outer-name # rename the `Test1` class position = {'line': 0, 'character': 6} DOC_URI = uris.from_fs_path(os.path.join(tmp_workspace.root_path, DOC_NAME)) doc = Document(DOC_URI, tmp_workspace) result = pyls_rename(config, tmp_workspace, doc, position, 'ShouldBeRenamed') assert len(result.keys()) == 1 changes = result.get('documentChanges') assert len(changes) == 2 assert changes[0]['textDocument']['uri'] == doc.uri assert changes[0]['textDocument']['version'] == doc.version assert changes[0].get('edits') == [ { 'range': { 'start': {'line': 0, 'character': 0}, 'end': {'line': 5, 'character': 0}, }, 'newText': 'class ShouldBeRenamed():\n pass\n\nclass Test2(ShouldBeRenamed):\n pass\n', } ] path = os.path.join(tmp_workspace.root_path, DOC_NAME_EXTRA) uri_extra = uris.from_fs_path(path) assert changes[1]['textDocument']['uri'] == uri_extra # This also checks whether documents not yet added via textDocument/didOpen # but that do need to be renamed in the project have a `null` version # number. assert changes[1]['textDocument']['version'] is None expected = 'from test1 import ShouldBeRenamed\nx = ShouldBeRenamed()\n' if os.name == 'nt': # The .write method in the temp_workspace_factory functions writes # Windows-style line-endings. expected = expected.replace('\n', '\r\n') assert changes[1].get('edits') == [ { 'range': { 'start': {'line': 0, 'character': 0}, 'end': {'line': 2, 'character': 0}}, 'newText': expected } ] python-language-server-0.36.2/test/plugins/test_mccabe_lint.py000066400000000000000000000022171376456405500245420ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import lsp, uris from pyls.workspace import Document from pyls.plugins import mccabe_lint DOC_URI = uris.from_fs_path(__file__) DOC = """def hello(): \tpass """ DOC_SYNTAX_ERR = """def hello() \tpass""" def test_mccabe(config, workspace): old_settings = config.settings try: config.update({'plugins': {'mccabe': {'threshold': 1}}}) doc = Document(DOC_URI, workspace, DOC) diags = mccabe_lint.pyls_lint(config, doc) assert all([d['source'] == 'mccabe' for d in diags]) # One we're expecting is: msg = 'Cyclomatic complexity too high: 1 (threshold 1)' mod_import = [d for d in diags if d['message'] == msg][0] assert mod_import['severity'] == lsp.DiagnosticSeverity.Warning assert mod_import['range']['start'] == {'line': 0, 'character': 0} assert mod_import['range']['end'] == {'line': 0, 'character': 6} finally: config._settings = old_settings def test_mccabe_syntax_error(config, workspace): doc = Document(DOC_URI, workspace, DOC_SYNTAX_ERR) assert mccabe_lint.pyls_lint(config, doc) is None python-language-server-0.36.2/test/plugins/test_pycodestyle_lint.py000066400000000000000000000077271376456405500257070ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os from pyls import lsp, uris from pyls.workspace import Document from pyls.plugins import pycodestyle_lint DOC_URI = uris.from_fs_path(__file__) DOC = """import sys def hello( ): \tpass print("hello" ,"world" ) import json """ def test_pycodestyle(workspace): doc = Document(DOC_URI, workspace, DOC) diags = pycodestyle_lint.pyls_lint(workspace, doc) assert all([d['source'] == 'pycodestyle' for d in diags]) # One we're expecting is: msg = 'W191 indentation contains tabs' mod_import = [d for d in diags if d['message'] == msg][0] assert mod_import['code'] == 'W191' assert mod_import['severity'] == lsp.DiagnosticSeverity.Warning assert mod_import['range']['start'] == {'line': 3, 'character': 0} assert mod_import['range']['end'] == {'line': 3, 'character': 6} msg = 'W391 blank line at end of file' mod_import = [d for d in diags if d['message'] == msg][0] assert mod_import['code'] == 'W391' assert mod_import['severity'] == lsp.DiagnosticSeverity.Warning assert mod_import['range']['start'] == {'line': 10, 'character': 0} assert mod_import['range']['end'] == {'line': 10, 'character': 1} msg = "E201 whitespace after '('" mod_import = [d for d in diags if d['message'] == msg][0] assert mod_import['code'] == 'E201' assert mod_import['severity'] == lsp.DiagnosticSeverity.Warning assert mod_import['range']['start'] == {'line': 2, 'character': 10} assert mod_import['range']['end'] == {'line': 2, 'character': 14} msg = "E128 continuation line under-indented for visual indent" mod_import = [d for d in diags if d['message'] == msg][0] assert mod_import['code'] == 'E128' assert mod_import['severity'] == lsp.DiagnosticSeverity.Warning assert mod_import['range']['start'] == {'line': 5, 'character': 1} assert mod_import['range']['end'] == {'line': 5, 'character': 10} def test_pycodestyle_config(workspace): """ Test that we load config files properly. Config files are loaded in the following order: tox.ini pep8.cfg setup.cfg pycodestyle.cfg Each overriding the values in the last. These files are first looked for in the current document's directory and then each parent directory until any one is found terminating at the workspace root. If any section called 'pycodestyle' exists that will be solely used and any config in a 'pep8' section will be ignored """ doc_uri = uris.from_fs_path(os.path.join(workspace.root_path, 'test.py')) workspace.put_document(doc_uri, DOC) doc = workspace.get_document(doc_uri) # Make sure we get a warning for 'indentation contains tabs' diags = pycodestyle_lint.pyls_lint(workspace, doc) assert [d for d in diags if d['code'] == 'W191'] content = { 'setup.cfg': ('[pycodestyle]\nignore = W191, E201, E128', True), 'tox.ini': ('', False) } for conf_file, (content, working) in list(content.items()): # Now we'll add config file to ignore it with open(os.path.join(workspace.root_path, conf_file), 'w+') as f: f.write(content) workspace._config.settings.cache_clear() # And make sure we don't get any warnings diags = pycodestyle_lint.pyls_lint(workspace, doc) assert len([d for d in diags if d['code'] == 'W191']) == (0 if working else 1) assert len([d for d in diags if d['code'] == 'E201']) == (0 if working else 1) assert [d for d in diags if d['code'] == 'W391'] os.unlink(os.path.join(workspace.root_path, conf_file)) # Make sure we can ignore via the PYLS config as well workspace._config.update({'plugins': {'pycodestyle': {'ignore': ['W191', 'E201']}}}) # And make sure we only get one warning diags = pycodestyle_lint.pyls_lint(workspace, doc) assert not [d for d in diags if d['code'] == 'W191'] assert not [d for d in diags if d['code'] == 'E201'] assert [d for d in diags if d['code'] == 'W391'] python-language-server-0.36.2/test/plugins/test_pydocstyle_lint.py000066400000000000000000000031731376456405500255310ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os from pyls import lsp, uris from pyls.workspace import Document from pyls.plugins import pydocstyle_lint DOC_URI = uris.from_fs_path(os.path.join(os.path.dirname(__file__), "pydocstyle.py")) TEST_DOC_URI = uris.from_fs_path(__file__) DOC = """import sys def hello(): \tpass import json """ def test_pydocstyle(config, workspace): doc = Document(DOC_URI, workspace, DOC) diags = pydocstyle_lint.pyls_lint(config, doc) assert all([d['source'] == 'pydocstyle' for d in diags]) # One we're expecting is: assert diags[0] == { 'code': 'D100', 'message': 'D100: Missing docstring in public module', 'severity': lsp.DiagnosticSeverity.Warning, 'range': { 'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 11}, }, 'source': 'pydocstyle' } def test_pydocstyle_test_document(config, workspace): # The default --match argument excludes test_* documents. doc = Document(TEST_DOC_URI, workspace, "") diags = pydocstyle_lint.pyls_lint(config, doc) assert not diags def test_pydocstyle_empty_source(config, workspace): doc = Document(DOC_URI, workspace, "") diags = pydocstyle_lint.pyls_lint(config, doc) assert diags[0]['message'] == 'D100: Missing docstring in public module' assert len(diags) == 1 def test_pydocstyle_invalid_source(config, workspace): doc = Document(DOC_URI, workspace, "bad syntax") diags = pydocstyle_lint.pyls_lint(config, doc) # We're unable to parse the file, so can't get any pydocstyle diagnostics assert not diags python-language-server-0.36.2/test/plugins/test_pyflakes_lint.py000066400000000000000000000031631376456405500251470ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import lsp, uris from pyls.workspace import Document from pyls.plugins import pyflakes_lint DOC_URI = uris.from_fs_path(__file__) DOC = """import sys def hello(): \tpass import json """ DOC_SYNTAX_ERR = """def hello() pass """ DOC_UNDEFINED_NAME_ERR = "a = b" DOC_ENCODING = u"""# encoding=utf-8 import sys """ def test_pyflakes(workspace): doc = Document(DOC_URI, workspace, DOC) diags = pyflakes_lint.pyls_lint(doc) # One we're expecting is: msg = '\'sys\' imported but unused' unused_import = [d for d in diags if d['message'] == msg][0] assert unused_import['range']['start'] == {'line': 0, 'character': 0} assert unused_import['severity'] == lsp.DiagnosticSeverity.Warning def test_syntax_error_pyflakes(workspace): doc = Document(DOC_URI, workspace, DOC_SYNTAX_ERR) diag = pyflakes_lint.pyls_lint(doc)[0] assert diag['message'] == 'invalid syntax' assert diag['range']['start'] == {'line': 0, 'character': 12} assert diag['severity'] == lsp.DiagnosticSeverity.Error def test_undefined_name_pyflakes(workspace): doc = Document(DOC_URI, workspace, DOC_UNDEFINED_NAME_ERR) diag = pyflakes_lint.pyls_lint(doc)[0] assert diag['message'] == 'undefined name \'b\'' assert diag['range']['start'] == {'line': 0, 'character': 4} assert diag['severity'] == lsp.DiagnosticSeverity.Error def test_unicode_encoding(workspace): doc = Document(DOC_URI, workspace, DOC_ENCODING) diags = pyflakes_lint.pyls_lint(doc) assert len(diags) == 1 assert diags[0]['message'] == '\'sys\' imported but unused' python-language-server-0.36.2/test/plugins/test_pylint_lint.py000066400000000000000000000115621376456405500246520ustar00rootroot00000000000000# Copyright 2018 Google LLC. import contextlib import os import tempfile from test import py2_only, py3_only, IS_PY3 from pyls import lsp, uris from pyls.workspace import Document from pyls.plugins import pylint_lint DOC_URI = uris.from_fs_path(__file__) DOC = """import sys def hello(): \tpass import json """ DOC_SYNTAX_ERR = """def hello() pass """ @contextlib.contextmanager def temp_document(doc_text, workspace): try: temp_file = tempfile.NamedTemporaryFile(mode='w', delete=False) name = temp_file.name temp_file.write(doc_text) temp_file.close() yield Document(uris.from_fs_path(name), workspace) finally: os.remove(name) def write_temp_doc(document, contents): with open(document.path, 'w') as temp_file: temp_file.write(contents) def test_pylint(config, workspace): with temp_document(DOC, workspace) as doc: diags = pylint_lint.pyls_lint(config, doc, True) msg = '[unused-import] Unused import sys' unused_import = [d for d in diags if d['message'] == msg][0] assert unused_import['range']['start'] == {'line': 0, 'character': 0} assert unused_import['severity'] == lsp.DiagnosticSeverity.Warning if IS_PY3: # test running pylint in stdin config.plugin_settings('pylint')['executable'] = 'pylint' diags = pylint_lint.pyls_lint(config, doc, True) msg = 'Unused import sys (unused-import)' unused_import = [d for d in diags if d['message'] == msg][0] assert unused_import['range']['start'] == { 'line': 0, 'character': 0, } assert unused_import['severity'] == lsp.DiagnosticSeverity.Warning @py3_only def test_syntax_error_pylint_py3(config, workspace): with temp_document(DOC_SYNTAX_ERR, workspace) as doc: diag = pylint_lint.pyls_lint(config, doc, True)[0] assert diag['message'].startswith('[syntax-error] invalid syntax') # Pylint doesn't give column numbers for invalid syntax. assert diag['range']['start'] == {'line': 0, 'character': 12} assert diag['severity'] == lsp.DiagnosticSeverity.Error # test running pylint in stdin config.plugin_settings('pylint')['executable'] = 'pylint' diag = pylint_lint.pyls_lint(config, doc, True)[0] assert diag['message'].startswith('invalid syntax') # Pylint doesn't give column numbers for invalid syntax. assert diag['range']['start'] == {'line': 0, 'character': 12} assert diag['severity'] == lsp.DiagnosticSeverity.Error @py2_only def test_syntax_error_pylint_py2(config, workspace): with temp_document(DOC_SYNTAX_ERR, workspace) as doc: diag = pylint_lint.pyls_lint(config, doc, True)[0] assert diag['message'].startswith('[syntax-error] invalid syntax') # Pylint doesn't give column numbers for invalid syntax. assert diag['range']['start'] == {'line': 0, 'character': 0} assert diag['severity'] == lsp.DiagnosticSeverity.Error def test_lint_free_pylint(config, workspace): # Can't use temp_document because it might give us a file that doesn't # match pylint's naming requirements. We should be keeping this file clean # though, so it works for a test of an empty lint. assert not pylint_lint.pyls_lint( config, Document(uris.from_fs_path(__file__), workspace), True) def test_lint_caching(workspace): # Pylint can only operate on files, not in-memory contents. We cache the # diagnostics after a run so we can continue displaying them until the file # is saved again. # # We use PylintLinter.lint directly here rather than pyls_lint so we can # pass --disable=invalid-name to pylint, since we want a temporary file but # need to ensure that pylint doesn't give us invalid-name when our temp # file has capital letters in its name. flags = '--disable=invalid-name' with temp_document(DOC, workspace) as doc: # Start with a file with errors. diags = pylint_lint.PylintLinter.lint(doc, True, flags) assert diags # Fix lint errors and write the changes to disk. Run the linter in the # in-memory mode to check the cached diagnostic behavior. write_temp_doc(doc, '') assert pylint_lint.PylintLinter.lint(doc, False, flags) == diags # Now check the on-disk behavior. assert not pylint_lint.PylintLinter.lint(doc, True, flags) # Make sure the cache was properly cleared. assert not pylint_lint.PylintLinter.lint(doc, False, flags) def test_per_file_caching(config, workspace): # Ensure that diagnostics are cached per-file. with temp_document(DOC, workspace) as doc: assert pylint_lint.pyls_lint(config, doc, True) assert not pylint_lint.pyls_lint( config, Document(uris.from_fs_path(__file__), workspace), False) python-language-server-0.36.2/test/plugins/test_references.py000066400000000000000000000050001376456405500244140ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import pytest from pyls import uris from pyls.workspace import Document from pyls.plugins.references import pyls_references from pyls._utils import PY2 DOC1_NAME = 'test1.py' DOC2_NAME = 'test2.py' DOC1 = """class Test1(): pass """ DOC2 = """from test1 import Test1 try: Test1() except UnicodeError: pass """ @pytest.fixture def tmp_workspace(temp_workspace_factory): return temp_workspace_factory({ DOC1_NAME: DOC1, DOC2_NAME: DOC2, }) def test_references(tmp_workspace): # pylint: disable=redefined-outer-name # Over 'Test1' in class Test1(): position = {'line': 0, 'character': 8} DOC1_URI = uris.from_fs_path(os.path.join(tmp_workspace.root_path, DOC1_NAME)) doc1 = Document(DOC1_URI, tmp_workspace) refs = pyls_references(doc1, position) # Definition, the import and the instantiation assert len(refs) == 3 # Briefly check excluding the definitions (also excludes imports, only counts uses) no_def_refs = pyls_references(doc1, position, exclude_declaration=True) assert len(no_def_refs) == 1 # Make sure our definition is correctly located doc1_ref = [u for u in refs if u['uri'] == DOC1_URI][0] assert doc1_ref['range']['start'] == {'line': 0, 'character': 6} assert doc1_ref['range']['end'] == {'line': 0, 'character': 11} # Make sure our import is correctly located doc2_import_ref = [u for u in refs if u['uri'] != DOC1_URI][0] assert doc2_import_ref['range']['start'] == {'line': 0, 'character': 18} assert doc2_import_ref['range']['end'] == {'line': 0, 'character': 23} doc2_usage_ref = [u for u in refs if u['uri'] != DOC1_URI][1] assert doc2_usage_ref['range']['start'] == {'line': 3, 'character': 4} assert doc2_usage_ref['range']['end'] == {'line': 3, 'character': 9} @pytest.mark.skipif(PY2, reason="Jedi sometimes fails while checking pylint " "example files in the modules path") def test_references_builtin(tmp_workspace): # pylint: disable=redefined-outer-name # Over 'UnicodeError': position = {'line': 4, 'character': 7} doc2_uri = uris.from_fs_path(os.path.join(str(tmp_workspace.root_path), DOC2_NAME)) doc2 = Document(doc2_uri, tmp_workspace) refs = pyls_references(doc2, position) assert len(refs) >= 1 expected = {'start': {'line': 4, 'character': 7}, 'end': {'line': 4, 'character': 19}} ranges = [r['range'] for r in refs] assert expected in ranges python-language-server-0.36.2/test/plugins/test_rope_rename.py000066400000000000000000000023751376456405500246030ustar00rootroot00000000000000import os import pytest from pyls import uris from pyls.plugins.rope_rename import pyls_rename from pyls.workspace import Document DOC_NAME = "test1.py" DOC = """class Test1(): pass class Test2(Test1): pass """ @pytest.fixture def tmp_workspace(temp_workspace_factory): return temp_workspace_factory({DOC_NAME: DOC}) def test_rope_rename(tmp_workspace, config): # pylint: disable=redefined-outer-name position = {"line": 0, "character": 6} DOC_URI = uris.from_fs_path(os.path.join(tmp_workspace.root_path, DOC_NAME)) doc = Document(DOC_URI, tmp_workspace) result = pyls_rename(config, tmp_workspace, doc, position, "ShouldBeRenamed") assert len(result.keys()) == 1 changes = result.get("documentChanges") assert len(changes) == 1 changes = changes[0] # Note that this test differs from test_jedi_rename, because rope does not # seem to modify files that haven't been opened with textDocument/didOpen. assert changes.get("edits") == [ { "range": { "start": {"line": 0, "character": 0}, "end": {"line": 5, "character": 0}, }, "newText": "class ShouldBeRenamed():\n pass\n\nclass Test2(ShouldBeRenamed):\n pass\n", } ] python-language-server-0.36.2/test/plugins/test_signature.py000066400000000000000000000046701376456405500243100ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import pytest from pyls import uris from pyls.plugins import signature from pyls.workspace import Document DOC_URI = uris.from_fs_path(__file__) DOC = """import sys def main(param1, param2): \"\"\" Main docstring Args: param1 (str): Docs for param1 \"\"\" raise Exception() main( """ MULTI_LINE_DOC = """import sys def main(param1=None, param2=None, param3=None, param4=None, param5=None, param6=None, param7=None, param8=None): \"\"\" Main docstring Args: param1 (str): Docs for param1 \"\"\" raise Exception() main( """ def test_no_signature(workspace): # Over blank line sig_position = {'line': 9, 'character': 0} doc = Document(DOC_URI, workspace, DOC) sigs = signature.pyls_signature_help(doc, sig_position)['signatures'] assert not sigs def test_signature(workspace): # Over '( ' in main( sig_position = {'line': 10, 'character': 5} doc = Document(DOC_URI, workspace, DOC) sig_info = signature.pyls_signature_help(doc, sig_position) sigs = sig_info['signatures'] assert len(sigs) == 1 assert sigs[0]['label'] == 'main(param1, param2)' assert sigs[0]['parameters'][0]['label'] == 'param1' assert sigs[0]['parameters'][0]['documentation'] == 'Docs for param1' assert sig_info['activeParameter'] == 0 def test_multi_line_signature(workspace): # Over '( ' in main( sig_position = {'line': 17, 'character': 5} doc = Document(DOC_URI, workspace, MULTI_LINE_DOC) sig_info = signature.pyls_signature_help(doc, sig_position) sigs = sig_info['signatures'] assert len(sigs) == 1 assert sigs[0]['label'] == ( 'main(param1=None, param2=None, param3=None, param4=None, ' 'param5=None, param6=None, param7=None, param8=None)' ) assert sigs[0]['parameters'][0]['label'] == 'param1' assert sigs[0]['parameters'][0]['documentation'] == 'Docs for param1' assert sig_info['activeParameter'] == 0 @pytest.mark.parametrize('regex,doc', [ (signature.SPHINX, " :param test: parameter docstring"), (signature.EPYDOC, " @param test: parameter docstring"), (signature.GOOGLE, " test (str): parameter docstring") ]) def test_docstring_params(regex, doc): m = regex.match(doc) assert m.group('param') == "test" assert m.group('doc') == "parameter docstring" python-language-server-0.36.2/test/plugins/test_symbols.py000066400000000000000000000054261376456405500237770ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import sys import pytest from pyls import uris from pyls.plugins.symbols import pyls_document_symbols from pyls.lsp import SymbolKind from pyls.workspace import Document PY2 = sys.version[0] == '2' LINUX = sys.platform.startswith('linux') CI = os.environ.get('CI') DOC_URI = uris.from_fs_path(__file__) DOC = """import sys a = 'hello' class B: def __init__(self): x = 2 self.y = x def main(x): y = 2 * x return y """ def helper_check_symbols_all_scope(symbols): # All eight symbols (import sys, a, B, __init__, x, y, main, y) assert len(symbols) == 8 def sym(name): return [s for s in symbols if s['name'] == name][0] # Check we have some sane mappings to VSCode constants assert sym('a')['kind'] == SymbolKind.Variable assert sym('B')['kind'] == SymbolKind.Class assert sym('__init__')['kind'] == SymbolKind.Method assert sym('main')['kind'] == SymbolKind.Function # Not going to get too in-depth here else we're just testing Jedi assert sym('a')['location']['range']['start'] == {'line': 2, 'character': 0} def test_symbols(config, workspace): doc = Document(DOC_URI, workspace, DOC) config.update({'plugins': {'jedi_symbols': {'all_scopes': False}}}) symbols = pyls_document_symbols(config, doc) # All four symbols (import sys, a, B, main) # y is not in the root scope, it shouldn't be returned assert len(symbols) == 5 def sym(name): return [s for s in symbols if s['name'] == name][0] # Check we have some sane mappings to VSCode constants assert sym('a')['kind'] == SymbolKind.Variable assert sym('B')['kind'] == SymbolKind.Class assert sym('main')['kind'] == SymbolKind.Function # Not going to get too in-depth here else we're just testing Jedi assert sym('a')['location']['range']['start'] == {'line': 2, 'character': 0} # Ensure that the symbol range spans the whole definition assert sym('main')['location']['range']['start'] == {'line': 9, 'character': 0} assert sym('main')['location']['range']['end'] == {'line': 12, 'character': 0} def test_symbols_all_scopes(config, workspace): doc = Document(DOC_URI, workspace, DOC) symbols = pyls_document_symbols(config, doc) helper_check_symbols_all_scope(symbols) @pytest.mark.skipif(PY2 or not LINUX or not CI, reason="tested on linux and python 3 only") def test_symbols_all_scopes_with_jedi_environment(workspace): doc = Document(DOC_URI, workspace, DOC) # Update config extra environment env_path = '/tmp/pyenv/bin/python' settings = {'pyls': {'plugins': {'jedi': {'environment': env_path}}}} doc.update_config(settings) symbols = pyls_document_symbols(doc._config, doc) helper_check_symbols_all_scope(symbols) python-language-server-0.36.2/test/plugins/test_yapf_format.py000066400000000000000000000030041376456405500246040ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from pyls import uris from pyls.plugins.yapf_format import pyls_format_document, pyls_format_range from pyls.workspace import Document DOC_URI = uris.from_fs_path(__file__) DOC = """A = [ 'h', 'w', 'a' ] B = ['h', 'w'] """ GOOD_DOC = """A = ['hello', 'world']\n""" def test_format(workspace): doc = Document(DOC_URI, workspace, DOC) res = pyls_format_document(doc) assert len(res) == 1 assert res[0]['newText'] == "A = ['h', 'w', 'a']\n\nB = ['h', 'w']\n" def test_range_format(workspace): doc = Document(DOC_URI, workspace, DOC) def_range = { 'start': {'line': 0, 'character': 0}, 'end': {'line': 4, 'character': 10} } res = pyls_format_range(doc, def_range) assert len(res) == 1 # Make sure B is still badly formatted assert res[0]['newText'] == "A = ['h', 'w', 'a']\n\nB = ['h',\n\n\n'w']\n" def test_no_change(workspace): doc = Document(DOC_URI, workspace, GOOD_DOC) assert not pyls_format_document(doc) def test_config_file(tmpdir, workspace): # a config file in the same directory as the source file will be used conf = tmpdir.join('.style.yapf') conf.write('[style]\ncolumn_limit = 14') src = tmpdir.join('test.py') doc = Document(uris.from_fs_path(src.strpath), workspace, DOC) # A was split on multiple lines because of column_limit from config file assert pyls_format_document(doc)[0]['newText'] == "A = [\n 'h', 'w',\n 'a'\n]\n\nB = ['h', 'w']\n" python-language-server-0.36.2/test/test_document.py000066400000000000000000000056451376456405500224470ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from test.fixtures import DOC_URI, DOC from pyls.workspace import Document def test_document_props(doc): assert doc.uri == DOC_URI assert doc.source == DOC def test_document_lines(doc): assert len(doc.lines) == 4 assert doc.lines[0] == 'import sys\n' def test_document_source_unicode(workspace): document_mem = Document(DOC_URI, workspace, u'my source') document_disk = Document(DOC_URI, workspace) assert isinstance(document_mem.source, type(document_disk.source)) def test_offset_at_position(doc): assert doc.offset_at_position({'line': 0, 'character': 8}) == 8 assert doc.offset_at_position({'line': 1, 'character': 5}) == 16 assert doc.offset_at_position({'line': 2, 'character': 0}) == 12 assert doc.offset_at_position({'line': 2, 'character': 4}) == 16 assert doc.offset_at_position({'line': 4, 'character': 0}) == 51 def test_word_at_position(doc): """ Return the position under the cursor (or last in line if past the end) """ # import sys assert doc.word_at_position({'line': 0, 'character': 8}) == 'sys' # Past end of import sys assert doc.word_at_position({'line': 0, 'character': 1000}) == 'sys' # Empty line assert doc.word_at_position({'line': 1, 'character': 5}) == '' # def main(): assert doc.word_at_position({'line': 2, 'character': 0}) == 'def' # Past end of file assert doc.word_at_position({'line': 4, 'character': 0}) == '' def test_document_empty_edit(workspace): doc = Document('file:///uri', workspace, u'') doc.apply_change({ 'range': { 'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 0} }, 'text': u'f' }) assert doc.source == u'f' def test_document_line_edit(workspace): doc = Document('file:///uri', workspace, u'itshelloworld') doc.apply_change({ 'text': u'goodbye', 'range': { 'start': {'line': 0, 'character': 3}, 'end': {'line': 0, 'character': 8} } }) assert doc.source == u'itsgoodbyeworld' def test_document_multiline_edit(workspace): old = [ "def hello(a, b):\n", " print a\n", " print b\n" ] doc = Document('file:///uri', workspace, u''.join(old)) doc.apply_change({'text': u'print a, b', 'range': { 'start': {'line': 1, 'character': 4}, 'end': {'line': 2, 'character': 11} }}) assert doc.lines == [ "def hello(a, b):\n", " print a, b\n" ] def test_document_end_of_file_edit(workspace): old = [ "print 'a'\n", "print 'b'\n" ] doc = Document('file:///uri', workspace, u''.join(old)) doc.apply_change({'text': u'o', 'range': { 'start': {'line': 2, 'character': 0}, 'end': {'line': 2, 'character': 0} }}) assert doc.lines == [ "print 'a'\n", "print 'b'\n", "o", ] python-language-server-0.36.2/test/test_language_server.py000066400000000000000000000100501376456405500237640ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import time import multiprocessing import sys from threading import Thread from pyls_jsonrpc.exceptions import JsonRpcMethodNotFound import pytest from pyls.python_ls import start_io_lang_server, PythonLanguageServer CALL_TIMEOUT = 10 PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3 def start_client(client): client.start() class _ClientServer(object): """ A class to setup a client/server pair """ def __init__(self, check_parent_process=False): # Client to Server pipe csr, csw = os.pipe() # Server to client pipe scr, scw = os.pipe() if os.name == 'nt': ParallelKind = Thread else: if sys.version_info[:2] >= (3, 8): ParallelKind = multiprocessing.get_context("fork").Process # pylint: disable=no-member else: ParallelKind = multiprocessing.Process self.process = ParallelKind(target=start_io_lang_server, args=( os.fdopen(csr, 'rb'), os.fdopen(scw, 'wb'), check_parent_process, PythonLanguageServer )) self.process.start() self.client = PythonLanguageServer(os.fdopen(scr, 'rb'), os.fdopen(csw, 'wb'), start_io_lang_server) self.client_thread = Thread(target=start_client, args=[self.client]) self.client_thread.daemon = True self.client_thread.start() @pytest.fixture def client_server(): """ A fixture that sets up a client/server pair and shuts down the server This client/server pair does not support checking parent process aliveness """ client_server_pair = _ClientServer() yield client_server_pair.client shutdown_response = client_server_pair.client._endpoint.request('shutdown').result(timeout=CALL_TIMEOUT) assert shutdown_response is None client_server_pair.client._endpoint.notify('exit') @pytest.fixture def client_exited_server(): """ A fixture that sets up a client/server pair that support checking parent process aliveness and assert the server has already exited """ client_server_pair = _ClientServer(True) # yield client_server_pair.client yield client_server_pair assert client_server_pair.process.is_alive() is False def test_initialize(client_server): # pylint: disable=redefined-outer-name response = client_server._endpoint.request('initialize', { 'rootPath': os.path.dirname(__file__), 'initializationOptions': {} }).result(timeout=CALL_TIMEOUT) assert 'capabilities' in response @pytest.mark.skipif(os.name == 'nt' or (sys.platform.startswith('linux') and PY3), reason='Skipped on win and fails on linux >=3.6') def test_exit_with_parent_process_died(client_exited_server): # pylint: disable=redefined-outer-name # language server should have already exited before responding lsp_server, mock_process = client_exited_server.client, client_exited_server.process # with pytest.raises(Exception): lsp_server._endpoint.request('initialize', { 'processId': mock_process.pid, 'rootPath': os.path.dirname(__file__), 'initializationOptions': {} }).result(timeout=CALL_TIMEOUT) mock_process.terminate() time.sleep(CALL_TIMEOUT) assert not client_exited_server.client_thread.is_alive() @pytest.mark.skipif(sys.platform.startswith('linux') and PY3, reason='Fails on linux and py3') def test_not_exit_without_check_parent_process_flag(client_server): # pylint: disable=redefined-outer-name response = client_server._endpoint.request('initialize', { 'processId': 1234, 'rootPath': os.path.dirname(__file__), 'initializationOptions': {} }).result(timeout=CALL_TIMEOUT) assert 'capabilities' in response @pytest.mark.skipif(bool(os.environ.get('CI')), reason='This test is hanging on CI') def test_missing_message(client_server): # pylint: disable=redefined-outer-name with pytest.raises(JsonRpcMethodNotFound): client_server._endpoint.request('unknown_method').result(timeout=CALL_TIMEOUT) python-language-server-0.36.2/test/test_uris.py000066400000000000000000000026571376456405500216130ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. from test import unix_only, windows_only import pytest from pyls import uris @unix_only @pytest.mark.parametrize('uri,path', [ ('file:///foo/bar#frag', '/foo/bar'), ('file:/foo/bar#frag', '/foo/bar'), ('file:/foo/space%20%3Fbar#frag', '/foo/space ?bar'), ]) def test_to_fs_path(uri, path): assert uris.to_fs_path(uri) == path @windows_only @pytest.mark.parametrize('uri,path', [ ('file:///c:/far/boo', 'c:\\far\\boo'), ('file:///C:/far/boo', 'c:\\far\\boo'), ('file:///C:/far/space%20%3Fboo', 'c:\\far\\space ?boo'), ]) def test_win_to_fs_path(uri, path): assert uris.to_fs_path(uri) == path @unix_only @pytest.mark.parametrize('path,uri', [ ('/foo/bar', 'file:///foo/bar'), ('/foo/space ?bar', 'file:///foo/space%20%3Fbar'), ]) def test_from_fs_path(path, uri): assert uris.from_fs_path(path) == uri @windows_only @pytest.mark.parametrize('path,uri', [ ('c:\\far\\boo', 'file:///c:/far/boo'), ('C:\\far\\space ?boo', 'file:///c:/far/space%20%3Fboo') ]) def test_win_from_fs_path(path, uri): assert uris.from_fs_path(path) == uri @pytest.mark.parametrize('uri,kwargs,new_uri', [ ('file:///foo/bar', {'path': '/baz/boo'}, 'file:///baz/boo'), ('file:///D:/hello%20world.py', {'path': 'D:/hello universe.py'}, 'file:///d:/hello%20universe.py') ]) def test_uri_with(uri, kwargs, new_uri): assert uris.uri_with(uri, **kwargs) == new_uri python-language-server-0.36.2/test/test_utils.py000066400000000000000000000042441376456405500217630ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import time import mock from flaky import flaky from pyls import _utils @flaky def test_debounce(): interval = 0.1 obj = mock.Mock() @_utils.debounce(0.1) def call_m(): obj() assert not obj.mock_calls call_m() call_m() call_m() assert not obj.mock_calls time.sleep(interval * 2) assert len(obj.mock_calls) == 1 call_m() time.sleep(interval * 2) assert len(obj.mock_calls) == 2 @flaky def test_debounce_keyed_by(): interval = 0.1 obj = mock.Mock() @_utils.debounce(0.1, keyed_by='key') def call_m(key): obj(key) assert not obj.mock_calls call_m(1) call_m(2) call_m(3) assert not obj.mock_calls time.sleep(interval * 2) obj.assert_has_calls([ mock.call(1), mock.call(2), mock.call(3), ], any_order=True) assert len(obj.mock_calls) == 3 call_m(1) call_m(1) call_m(1) time.sleep(interval * 2) assert len(obj.mock_calls) == 4 def test_list_to_string(): assert _utils.list_to_string("string") == "string" assert _utils.list_to_string(["a", "r", "r", "a", "y"]) == "a,r,r,a,y" def test_find_parents(tmpdir): subsubdir = tmpdir.ensure_dir("subdir", "subsubdir") path = subsubdir.ensure("path.py") test_cfg = tmpdir.ensure("test.cfg") assert _utils.find_parents(tmpdir.strpath, path.strpath, ["test.cfg"]) == [test_cfg.strpath] def test_merge_dicts(): assert _utils.merge_dicts( {'a': True, 'b': {'x': 123, 'y': {'hello': 'world'}}}, {'a': False, 'b': {'y': [], 'z': 987}} ) == {'a': False, 'b': {'x': 123, 'y': [], 'z': 987}} def test_clip_column(): assert _utils.clip_column(0, [], 0) == 0 assert _utils.clip_column(2, ['123'], 0) == 2 assert _utils.clip_column(3, ['123'], 0) == 3 assert _utils.clip_column(5, ['123'], 0) == 3 assert _utils.clip_column(0, ['\n', '123'], 0) == 0 assert _utils.clip_column(1, ['\n', '123'], 0) == 0 assert _utils.clip_column(2, ['123\n', '123'], 0) == 2 assert _utils.clip_column(3, ['123\n', '123'], 0) == 3 assert _utils.clip_column(4, ['123\n', '123'], 1) == 3 python-language-server-0.36.2/test/test_workspace.py000066400000000000000000000221311376456405500226140ustar00rootroot00000000000000# Copyright 2017 Palantir Technologies, Inc. import os import sys import pytest from pyls import uris PY2 = sys.version_info.major == 2 if PY2: import pathlib2 as pathlib else: import pathlib DOC_URI = uris.from_fs_path(__file__) def path_as_uri(path): return pathlib.Path(os.path.abspath(path)).as_uri() def test_local(pyls): """ Since the workspace points to the test directory """ assert pyls.workspace.is_local() def test_put_document(pyls): pyls.workspace.put_document(DOC_URI, 'content') assert DOC_URI in pyls.workspace._docs def test_get_document(pyls): pyls.workspace.put_document(DOC_URI, 'TEXT') assert pyls.workspace.get_document(DOC_URI).source == 'TEXT' def test_get_missing_document(tmpdir, pyls): source = 'TEXT' doc_path = tmpdir.join("test_document.py") doc_path.write(source) doc_uri = uris.from_fs_path(str(doc_path)) assert pyls.workspace.get_document(doc_uri).source == 'TEXT' def test_rm_document(pyls): pyls.workspace.put_document(DOC_URI, 'TEXT') assert pyls.workspace.get_document(DOC_URI).source == 'TEXT' pyls.workspace.rm_document(DOC_URI) assert pyls.workspace.get_document(DOC_URI)._source is None @pytest.mark.parametrize('metafiles', [('setup.py',), ('pyproject.toml',), ('setup.py', 'pyproject.toml')]) def test_non_root_project(pyls, metafiles): repo_root = os.path.join(pyls.workspace.root_path, 'repo-root') os.mkdir(repo_root) project_root = os.path.join(repo_root, 'project-root') os.mkdir(project_root) for metafile in metafiles: with open(os.path.join(project_root, metafile), 'w+') as f: f.write('# ' + metafile) test_uri = uris.from_fs_path(os.path.join(project_root, 'hello/test.py')) pyls.workspace.put_document(test_uri, 'assert True') test_doc = pyls.workspace.get_document(test_uri) assert project_root in test_doc.sys_path() def test_root_project_with_no_setup_py(pyls): """Default to workspace root.""" workspace_root = pyls.workspace.root_path test_uri = uris.from_fs_path(os.path.join(workspace_root, 'hello/test.py')) pyls.workspace.put_document(test_uri, 'assert True') test_doc = pyls.workspace.get_document(test_uri) assert workspace_root in test_doc.sys_path() def test_multiple_workspaces(tmpdir, pyls): workspace1_dir = tmpdir.mkdir('workspace1') workspace2_dir = tmpdir.mkdir('workspace2') file1 = workspace1_dir.join('file1.py') file2 = workspace2_dir.join('file1.py') file1.write('import os') file2.write('import sys') msg = { 'uri': path_as_uri(str(file1)), 'version': 1, 'text': 'import os' } pyls.m_text_document__did_open(textDocument=msg) assert msg['uri'] in pyls.workspace._docs added_workspaces = [{'uri': path_as_uri(str(x))} for x in (workspace1_dir, workspace2_dir)] event = {'added': added_workspaces, 'removed': []} pyls.m_workspace__did_change_workspace_folders(event) for workspace in added_workspaces: assert workspace['uri'] in pyls.workspaces workspace1_uri = added_workspaces[0]['uri'] assert msg['uri'] not in pyls.workspace._docs assert msg['uri'] in pyls.workspaces[workspace1_uri]._docs msg = { 'uri': path_as_uri(str(file2)), 'version': 1, 'text': 'import sys' } pyls.m_text_document__did_open(textDocument=msg) workspace2_uri = added_workspaces[1]['uri'] assert msg['uri'] in pyls.workspaces[workspace2_uri]._docs event = {'added': [], 'removed': [added_workspaces[0]]} pyls.m_workspace__did_change_workspace_folders(event) assert workspace1_uri not in pyls.workspaces def test_multiple_workspaces_wrong_removed_uri(pyls, tmpdir): workspace = {'uri': str(tmpdir.mkdir('Test123'))} event = {'added': [], 'removed': [workspace]} pyls.m_workspace__did_change_workspace_folders(event) assert workspace['uri'] not in pyls.workspaces def test_root_workspace_changed(pyls, tmpdir): test_uri = str(tmpdir.mkdir('Test123')) pyls.root_uri = test_uri pyls.workspace._root_uri = test_uri workspace1 = {'uri': test_uri} workspace2 = {'uri': str(tmpdir.mkdir('NewTest456'))} event = {'added': [workspace2], 'removed': [workspace1]} pyls.m_workspace__did_change_workspace_folders(event) assert workspace2['uri'] == pyls.workspace._root_uri assert workspace2['uri'] == pyls.root_uri def test_root_workspace_not_changed(pyls, tmpdir): # removed uri != root_uri test_uri_1 = str(tmpdir.mkdir('Test12')) pyls.root_uri = test_uri_1 pyls.workspace._root_uri = test_uri_1 workspace1 = {'uri': str(tmpdir.mkdir('Test1234'))} workspace2 = {'uri': str(tmpdir.mkdir('NewTest456'))} event = {'added': [workspace2], 'removed': [workspace1]} pyls.m_workspace__did_change_workspace_folders(event) assert test_uri_1 == pyls.workspace._root_uri assert test_uri_1 == pyls.root_uri # empty 'added' list test_uri_2 = str(tmpdir.mkdir('Test123')) new_root_uri = workspace2['uri'] pyls.root_uri = test_uri_2 pyls.workspace._root_uri = test_uri_2 workspace1 = {'uri': test_uri_2} event = {'added': [], 'removed': [workspace1]} pyls.m_workspace__did_change_workspace_folders(event) assert new_root_uri == pyls.workspace._root_uri assert new_root_uri == pyls.root_uri # empty 'removed' list event = {'added': [workspace1], 'removed': []} pyls.m_workspace__did_change_workspace_folders(event) assert new_root_uri == pyls.workspace._root_uri assert new_root_uri == pyls.root_uri # 'added' list has no 'uri' workspace2 = {'TESTuri': 'Test1234'} event = {'added': [workspace2], 'removed': [workspace1]} pyls.m_workspace__did_change_workspace_folders(event) assert new_root_uri == pyls.workspace._root_uri assert new_root_uri == pyls.root_uri def test_root_workspace_removed(tmpdir, pyls): workspace1_dir = tmpdir.mkdir('workspace1') workspace2_dir = tmpdir.mkdir('workspace2') root_uri = pyls.root_uri # Add workspaces to the pyls added_workspaces = [{'uri': path_as_uri(str(x))} for x in (workspace1_dir, workspace2_dir)] event = {'added': added_workspaces, 'removed': []} pyls.m_workspace__did_change_workspace_folders(event) # Remove the root workspace removed_workspaces = [{'uri': root_uri}] event = {'added': [], 'removed': removed_workspaces} pyls.m_workspace__did_change_workspace_folders(event) # Assert that the first of the workspaces (in alphabetical order) is now # the root workspace assert pyls.root_uri == path_as_uri(str(workspace1_dir)) assert pyls.workspace._root_uri == path_as_uri(str(workspace1_dir)) @pytest.mark.skipif(os.name == 'nt', reason="Fails on Windows") def test_workspace_loads_pycodestyle_config(pyls, tmpdir): workspace1_dir = tmpdir.mkdir('Test123') pyls.root_uri = str(workspace1_dir) pyls.workspace._root_uri = str(workspace1_dir) # Test that project settings are loaded workspace2_dir = tmpdir.mkdir('NewTest456') cfg = workspace2_dir.join("pycodestyle.cfg") cfg.write( "[pycodestyle]\n" "max-line-length = 1000" ) workspace1 = {'uri': str(workspace1_dir)} workspace2 = {'uri': str(workspace2_dir)} event = {'added': [workspace2], 'removed': [workspace1]} pyls.m_workspace__did_change_workspace_folders(event) seetings = pyls.workspaces[str(workspace2_dir)]._config.settings() assert seetings['plugins']['pycodestyle']['maxLineLength'] == 1000 # Test that project settings prevail over server ones. server_settings = {'pyls': {'plugins': {'pycodestyle': {'maxLineLength': 10}}}} pyls.m_workspace__did_change_configuration(server_settings) assert seetings['plugins']['pycodestyle']['maxLineLength'] == 1000 # Test switching to another workspace with different settings workspace3_dir = tmpdir.mkdir('NewTest789') cfg1 = workspace3_dir.join("pycodestyle.cfg") cfg1.write( "[pycodestyle]\n" "max-line-length = 20" ) workspace3 = {'uri': str(workspace3_dir)} event = {'added': [workspace3], 'removed': [workspace2]} pyls.m_workspace__did_change_workspace_folders(event) seetings = pyls.workspaces[str(workspace3_dir)]._config.settings() assert seetings['plugins']['pycodestyle']['maxLineLength'] == 20 def test_settings_of_added_workspace(pyls, tmpdir): test_uri = str(tmpdir.mkdir('Test123')) pyls.root_uri = test_uri pyls.workspace._root_uri = test_uri # Set some settings for the server. server_settings = {'pyls': {'plugins': {'jedi': {'environment': '/usr/bin/python3'}}}} pyls.m_workspace__did_change_configuration(server_settings) # Create a new workspace. workspace1 = {'uri': str(tmpdir.mkdir('NewTest456'))} event = {'added': [workspace1]} pyls.m_workspace__did_change_workspace_folders(event) # Assert settings are inherited from the server config. workspace1_object = pyls.workspaces[workspace1['uri']] workspace1_jedi_settings = workspace1_object._config.plugin_settings('jedi') assert workspace1_jedi_settings == server_settings['pyls']['plugins']['jedi'] python-language-server-0.36.2/versioneer.py000066400000000000000000002060031376456405500207630ustar00rootroot00000000000000 # Version: 0.18 """The Versioneer - like a rocketeer, but for versions. The Versioneer ============== * like a rocketeer, but for versions! * https://github.com/warner/python-versioneer * Brian Warner * License: Public Domain * Compatible With: python2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, and pypy * [![Latest Version] (https://pypip.in/version/versioneer/badge.svg?style=flat) ](https://pypi.python.org/pypi/versioneer/) * [![Build Status] (https://travis-ci.org/warner/python-versioneer.png?branch=master) ](https://travis-ci.org/warner/python-versioneer) This is a tool for managing a recorded version number in distutils-based python projects. The goal is to remove the tedious and error-prone "update the embedded version string" step from your release process. Making a new release should be as easy as recording a new tag in your version-control system, and maybe making new tarballs. ## Quick Install * `pip install versioneer` to somewhere to your $PATH * add a `[versioneer]` section to your setup.cfg (see below) * run `versioneer install` in your source tree, commit the results ## Version Identifiers Source trees come from a variety of places: * a version-control system checkout (mostly used by developers) * a nightly tarball, produced by build automation * a snapshot tarball, produced by a web-based VCS browser, like github's "tarball from tag" feature * a release tarball, produced by "setup.py sdist", distributed through PyPI Within each source tree, the version identifier (either a string or a number, this tool is format-agnostic) can come from a variety of places: * ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows about recent "tags" and an absolute revision-id * the name of the directory into which the tarball was unpacked * an expanded VCS keyword ($Id$, etc) * a `_version.py` created by some earlier build step For released software, the version identifier is closely related to a VCS tag. Some projects use tag names that include more than just the version string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool needs to strip the tag prefix to extract the version identifier. For unreleased software (between tags), the version identifier should provide enough information to help developers recreate the same tree, while also giving them an idea of roughly how old the tree is (after version 1.2, before version 1.3). Many VCS systems can report a description that captures this, for example `git describe --tags --dirty --always` reports things like "0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the 0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has uncommitted changes. The version identifier is used for multiple purposes: * to allow the module to self-identify its version: `myproject.__version__` * to choose a name and prefix for a 'setup.py sdist' tarball ## Theory of Operation Versioneer works by adding a special `_version.py` file into your source tree, where your `__init__.py` can import it. This `_version.py` knows how to dynamically ask the VCS tool for version information at import time. `_version.py` also contains `$Revision$` markers, and the installation process marks `_version.py` to have this marker rewritten with a tag name during the `git archive` command. As a result, generated tarballs will contain enough information to get the proper version. To allow `setup.py` to compute a version too, a `versioneer.py` is added to the top level of your source tree, next to `setup.py` and the `setup.cfg` that configures it. This overrides several distutils/setuptools commands to compute the version when invoked, and changes `setup.py build` and `setup.py sdist` to replace `_version.py` with a small static file that contains just the generated version data. ## Installation See [INSTALL.md](./INSTALL.md) for detailed installation instructions. ## Version-String Flavors Code which uses Versioneer can learn about its version string at runtime by importing `_version` from your main `__init__.py` file and running the `get_versions()` function. From the "outside" (e.g. in `setup.py`), you can import the top-level `versioneer.py` and run `get_versions()`. Both functions return a dictionary with different flavors of version information: * `['version']`: A condensed version string, rendered using the selected style. This is the most commonly used value for the project's version string. The default "pep440" style yields strings like `0.11`, `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section below for alternative styles. * `['full-revisionid']`: detailed revision identifier. For Git, this is the full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". * `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the commit date in ISO 8601 format. This will be None if the date is not available. * `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that this is only accurate if run in a VCS checkout, otherwise it is likely to be False or None * `['error']`: if the version string could not be computed, this will be set to a string describing the problem, otherwise it will be None. It may be useful to throw an exception in setup.py if this is set, to avoid e.g. creating tarballs with a version string of "unknown". Some variants are more useful than others. Including `full-revisionid` in a bug report should allow developers to reconstruct the exact code being tested (or indicate the presence of local changes that should be shared with the developers). `version` is suitable for display in an "about" box or a CLI `--version` output: it can be easily compared against release notes and lists of bugs fixed in various releases. The installer adds the following text to your `__init__.py` to place a basic version in `YOURPROJECT.__version__`: from ._version import get_versions __version__ = get_versions()['version'] del get_versions ## Styles The setup.cfg `style=` configuration controls how the VCS information is rendered into a version string. The default style, "pep440", produces a PEP440-compliant string, equal to the un-prefixed tag name for actual releases, and containing an additional "local version" section with more detail for in-between builds. For Git, this is TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags --dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and that this commit is two revisions ("+2") beyond the "0.11" tag. For released software (exactly equal to a known tag), the identifier will only contain the stripped tag, e.g. "0.11". Other styles are available. See [details.md](details.md) in the Versioneer source tree for descriptions. ## Debugging Versioneer tries to avoid fatal errors: if something goes wrong, it will tend to return a version of "0+unknown". To investigate the problem, run `setup.py version`, which will run the version-lookup code in a verbose mode, and will display the full contents of `get_versions()` (including the `error` string, which may help identify what went wrong). ## Known Limitations Some situations are known to cause problems for Versioneer. This details the most significant ones. More can be found on Github [issues page](https://github.com/warner/python-versioneer/issues). ### Subprojects Versioneer has limited support for source trees in which `setup.py` is not in the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are two common reasons why `setup.py` might not be in the root: * Source trees which contain multiple subprojects, such as [Buildbot](https://github.com/buildbot/buildbot), which contains both "master" and "slave" subprojects, each with their own `setup.py`, `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI distributions (and upload multiple independently-installable tarballs). * Source trees whose main purpose is to contain a C library, but which also provide bindings to Python (and perhaps other langauges) in subdirectories. Versioneer will look for `.git` in parent directories, and most operations should get the right version string. However `pip` and `setuptools` have bugs and implementation details which frequently cause `pip install .` from a subproject directory to fail to find a correct version string (so it usually defaults to `0+unknown`). `pip install --editable .` should work correctly. `setup.py install` might work too. Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in some later version. [Bug #38](https://github.com/warner/python-versioneer/issues/38) is tracking this issue. The discussion in [PR #61](https://github.com/warner/python-versioneer/pull/61) describes the issue from the Versioneer side in more detail. [pip PR#3176](https://github.com/pypa/pip/pull/3176) and [pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve pip to let Versioneer work correctly. Versioneer-0.16 and earlier only looked for a `.git` directory next to the `setup.cfg`, so subprojects were completely unsupported with those releases. ### Editable installs with setuptools <= 18.5 `setup.py develop` and `pip install --editable .` allow you to install a project into a virtualenv once, then continue editing the source code (and test) without re-installing after every change. "Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a convenient way to specify executable scripts that should be installed along with the python package. These both work as expected when using modern setuptools. When using setuptools-18.5 or earlier, however, certain operations will cause `pkg_resources.DistributionNotFound` errors when running the entrypoint script, which must be resolved by re-installing the package. This happens when the install happens with one version, then the egg_info data is regenerated while a different version is checked out. Many setup.py commands cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into a different virtualenv), so this can be surprising. [Bug #83](https://github.com/warner/python-versioneer/issues/83) describes this one, but upgrading to a newer version of setuptools should probably resolve it. ### Unicode version strings While Versioneer works (and is continually tested) with both Python 2 and Python 3, it is not entirely consistent with bytes-vs-unicode distinctions. Newer releases probably generate unicode version strings on py2. It's not clear that this is wrong, but it may be surprising for applications when then write these strings to a network connection or include them in bytes-oriented APIs like cryptographic checksums. [Bug #71](https://github.com/warner/python-versioneer/issues/71) investigates this question. ## Updating Versioneer To upgrade your project to a new release of Versioneer, do the following: * install the new Versioneer (`pip install -U versioneer` or equivalent) * edit `setup.cfg`, if necessary, to include any new configuration settings indicated by the release notes. See [UPGRADING](./UPGRADING.md) for details. * re-run `versioneer install` in your source tree, to replace `SRC/_version.py` * commit any changed files ## Future Directions This tool is designed to make it easily extended to other version-control systems: all VCS-specific components are in separate directories like src/git/ . The top-level `versioneer.py` script is assembled from these components by running make-versioneer.py . In the future, make-versioneer.py will take a VCS name as an argument, and will construct a version of `versioneer.py` that is specific to the given VCS. It might also take the configuration arguments that are currently provided manually during installation by editing setup.py . Alternatively, it might go the other direction and include code from all supported VCS systems, reducing the number of intermediate scripts. ## License To make Versioneer easier to embed, all its code is dedicated to the public domain. The `_version.py` that it creates is also in the public domain. Specifically, both are released under the Creative Commons "Public Domain Dedication" license (CC0-1.0), as described in https://creativecommons.org/publicdomain/zero/1.0/ . """ from __future__ import print_function try: import configparser except ImportError: import ConfigParser as configparser import errno import json import os import re import subprocess import sys class VersioneerConfig: """Container for Versioneer configuration parameters.""" def get_root(): """Get the project root directory. We require that all commands are run from the project root, i.e. the directory that contains setup.py, setup.cfg, and versioneer.py . """ root = os.path.realpath(os.path.abspath(os.getcwd())) setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): # allow 'python path/to/setup.py COMMAND' root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): err = ("Versioneer was unable to run the project root directory. " "Versioneer requires setup.py to be executed from " "its immediate directory (like 'python setup.py COMMAND'), " "or in a way that lets it use sys.argv[0] to find the root " "(like 'python path/to/setup.py COMMAND').") raise VersioneerBadRootError(err) try: # Certain runtime workflows (setup.py install/develop in a setuptools # tree) execute all dependencies in a single python process, so # "versioneer" may be imported multiple times, and python's shared # module-import table will cache the first one. So we can't use # os.path.dirname(__file__), as that will find whichever # versioneer.py was first imported, even in later projects. me = os.path.realpath(os.path.abspath(__file__)) me_dir = os.path.normcase(os.path.splitext(me)[0]) vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) if me_dir != vsr_dir: print("Warning: build in %s is using versioneer.py from %s" % (os.path.dirname(me), versioneer_py)) except NameError: pass return root def get_config_from_root(root): """Read the project setup.cfg file to determine Versioneer config.""" # This might raise EnvironmentError (if setup.cfg is missing), or # configparser.NoSectionError (if it lacks a [versioneer] section), or # configparser.NoOptionError (if it lacks "VCS="). See the docstring at # the top of versioneer.py for instructions on writing your setup.cfg . setup_cfg = os.path.join(root, "setup.cfg") parser = configparser.SafeConfigParser() with open(setup_cfg, "r") as f: parser.readfp(f) VCS = parser.get("versioneer", "VCS") # mandatory def get(parser, name): if parser.has_option("versioneer", name): return parser.get("versioneer", name) return None cfg = VersioneerConfig() cfg.VCS = VCS cfg.style = get(parser, "style") or "" cfg.versionfile_source = get(parser, "versionfile_source") cfg.versionfile_build = get(parser, "versionfile_build") cfg.tag_prefix = get(parser, "tag_prefix") if cfg.tag_prefix in ("''", '""'): cfg.tag_prefix = "" cfg.parentdir_prefix = get(parser, "parentdir_prefix") cfg.verbose = get(parser, "verbose") return cfg class NotThisMethod(Exception): """Exception raised if a method is not valid for the current scenario.""" # these dictionaries contain VCS-specific tools LONG_VERSION_PY = {} HANDLERS = {} def register_vcs_handler(vcs, method): # decorator """Decorator to mark a method as the handler for a particular VCS.""" def decorate(f): """Store f in HANDLERS[vcs][method].""" if vcs not in HANDLERS: HANDLERS[vcs] = {} HANDLERS[vcs][method] = f return f return decorate def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) p = None for c in commands: try: dispcmd = str([c] + args) # remember shell=False, so use git.cmd on windows, not just git p = subprocess.Popen([c] + args, cwd=cwd, env=env, stdout=subprocess.PIPE, stderr=(subprocess.PIPE if hide_stderr else None)) break except EnvironmentError: e = sys.exc_info()[1] if e.errno == errno.ENOENT: continue if verbose: print("unable to run %s" % dispcmd) print(e) return None, None else: if verbose: print("unable to find command, tried %s" % (commands,)) return None, None stdout = p.communicate()[0].strip() if sys.version_info[0] >= 3: stdout = stdout.decode() if p.returncode != 0: if verbose: print("unable to run %s (error)" % dispcmd) print("stdout was %s" % stdout) return None, p.returncode return stdout, p.returncode LONG_VERSION_PY['git'] = ''' # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build # directories (produced by setup.py build) will contain a much shorter file # that just contains the computed version number. # This file is released into the public domain. Generated by # versioneer-0.18 (https://github.com/warner/python-versioneer) """Git implementation of _version.py.""" import errno import os import re import subprocess import sys def get_keywords(): """Get the keywords needed to look up the version information.""" # these strings will be replaced by git during git-archive. # setup.py/versioneer.py will grep for the variable names, so they must # each be defined on a line of their own. _version.py will just call # get_keywords(). git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" git_date = "%(DOLLAR)sFormat:%%ci%(DOLLAR)s" keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} return keywords class VersioneerConfig: """Container for Versioneer configuration parameters.""" def get_config(): """Create, populate and return the VersioneerConfig() object.""" # these strings are filled in when 'setup.py versioneer' creates # _version.py cfg = VersioneerConfig() cfg.VCS = "git" cfg.style = "%(STYLE)s" cfg.tag_prefix = "%(TAG_PREFIX)s" cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" cfg.verbose = False return cfg class NotThisMethod(Exception): """Exception raised if a method is not valid for the current scenario.""" LONG_VERSION_PY = {} HANDLERS = {} def register_vcs_handler(vcs, method): # decorator """Decorator to mark a method as the handler for a particular VCS.""" def decorate(f): """Store f in HANDLERS[vcs][method].""" if vcs not in HANDLERS: HANDLERS[vcs] = {} HANDLERS[vcs][method] = f return f return decorate def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) p = None for c in commands: try: dispcmd = str([c] + args) # remember shell=False, so use git.cmd on windows, not just git p = subprocess.Popen([c] + args, cwd=cwd, env=env, stdout=subprocess.PIPE, stderr=(subprocess.PIPE if hide_stderr else None)) break except EnvironmentError: e = sys.exc_info()[1] if e.errno == errno.ENOENT: continue if verbose: print("unable to run %%s" %% dispcmd) print(e) return None, None else: if verbose: print("unable to find command, tried %%s" %% (commands,)) return None, None stdout = p.communicate()[0].strip() if sys.version_info[0] >= 3: stdout = stdout.decode() if p.returncode != 0: if verbose: print("unable to run %%s (error)" %% dispcmd) print("stdout was %%s" %% stdout) return None, p.returncode return stdout, p.returncode def versions_from_parentdir(parentdir_prefix, root, verbose): """Try to determine the version from the parent directory name. Source tarballs conventionally unpack into a directory that includes both the project name and a version string. We will also support searching up two directory levels for an appropriately named parent directory """ rootdirs = [] for i in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): return {"version": dirname[len(parentdir_prefix):], "full-revisionid": None, "dirty": False, "error": None, "date": None} else: rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: print("Tried directories %%s but none started with prefix %%s" %% (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") @register_vcs_handler("git", "get_keywords") def git_get_keywords(versionfile_abs): """Extract version information from the given file.""" # the code embedded in _version.py can just fetch the value of these # keywords. When used from setup.py, we don't want to import _version.py, # so we do it with a regexp instead. This function is not used from # _version.py. keywords = {} try: f = open(versionfile_abs, "r") for line in f.readlines(): if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["refnames"] = mo.group(1) if line.strip().startswith("git_full ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["full"] = mo.group(1) if line.strip().startswith("git_date ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["date"] = mo.group(1) f.close() except EnvironmentError: pass return keywords @register_vcs_handler("git", "keywords") def git_versions_from_keywords(keywords, tag_prefix, verbose): """Get version information from git keywords.""" if not keywords: raise NotThisMethod("no keywords at all, weird") date = keywords.get("date") if date is not None: # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601 # -like" string, which we must then edit to make compliant), because # it's been around since git-1.5.3, and it's too difficult to # discover which version we're using, or to work around using an # older one. date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) refnames = keywords["refnames"].strip() if refnames.startswith("$Format"): if verbose: print("keywords are unexpanded, not using") raise NotThisMethod("unexpanded keywords, not a git-archive tarball") refs = set([r.strip() for r in refnames.strip("()").split(",")]) # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %%d # expansion behaves like git log --decorate=short and strips out the # refs/heads/ and refs/tags/ prefixes that would let us distinguish # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". tags = set([r for r in refs if re.search(r'\d', r)]) if verbose: print("discarding '%%s', no digits" %% ",".join(refs - tags)) if verbose: print("likely tags: %%s" %% ",".join(sorted(tags))) for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): r = ref[len(tag_prefix):] if verbose: print("picking %%s" %% r) return {"version": r, "full-revisionid": keywords["full"].strip(), "dirty": False, "error": None, "date": date} # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") return {"version": "0+unknown", "full-revisionid": keywords["full"].strip(), "dirty": False, "error": "no suitable tags", "date": None} @register_vcs_handler("git", "pieces_from_vcs") def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): """Get version from 'git describe' in the root of the source tree. This only gets called if the git-archive 'subst' keywords were *not* expanded, and _version.py hasn't already been rewritten with a short version string, meaning we're inside a checked out source tree. """ GITS = ["git"] if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %%s not under git control" %% root) raise NotThisMethod("'git rev-parse --git-dir' returned error") # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%%s*" %% tag_prefix], cwd=root) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") describe_out = describe_out.strip() full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) if full_out is None: raise NotThisMethod("'git rev-parse' failed") full_out = full_out.strip() pieces = {} pieces["long"] = full_out pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] # TAG might have hyphens. git_describe = describe_out # look for -dirty suffix dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: git_describe = git_describe[:git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? pieces["error"] = ("unable to parse git-describe output: '%%s'" %% describe_out) return pieces # tag full_tag = mo.group(1) if not full_tag.startswith(tag_prefix): if verbose: fmt = "tag '%%s' doesn't start with prefix '%%s'" print(fmt %% (full_tag, tag_prefix)) pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" %% (full_tag, tag_prefix)) return pieces pieces["closest-tag"] = full_tag[len(tag_prefix):] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) # commit: short hex revision ID pieces["short"] = mo.group(3) else: # HEX: no tags pieces["closest-tag"] = None count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root) pieces["distance"] = int(count_out) # total number of commits # commit date: see ISO-8601 comment in git_versions_from_keywords() date = run_command(GITS, ["show", "-s", "--format=%%ci", "HEAD"], cwd=root)[0].strip() pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) return pieces def plus_or_dot(pieces): """Return a + if we don't already have one, else return a .""" if "+" in pieces.get("closest-tag", ""): return "." return "+" def render_pep440(pieces): """Build up version string, with post-release "local version identifier". Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty Exceptions: 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += plus_or_dot(pieces) rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_pre(pieces): """TAG[.post.devDISTANCE] -- No -dirty. Exceptions: 1: no tags. 0.post.devDISTANCE """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += ".post.dev%%d" %% pieces["distance"] else: # exception #1 rendered = "0.post.dev%%d" %% pieces["distance"] return rendered def render_pep440_post(pieces): """TAG[.postDISTANCE[.dev0]+gHEX] . The ".dev0" means dirty. Note that .dev0 sorts backwards (a dirty tree will appear "older" than the corresponding clean one), but you shouldn't be releasing software with -dirty anyways. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%%s" %% pieces["short"] else: # exception #1 rendered = "0.post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += "+g%%s" %% pieces["short"] return rendered def render_pep440_old(pieces): """TAG[.postDISTANCE[.dev0]] . The ".dev0" means dirty. Eexceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" else: # exception #1 rendered = "0.post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" return rendered def render_git_describe(pieces): """TAG[-DISTANCE-gHEX][-dirty]. Like 'git describe --tags --dirty --always'. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render_git_describe_long(pieces): """TAG-DISTANCE-gHEX[-dirty]. Like 'git describe --tags --dirty --always -long'. The distance/hash is unconditional. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: return {"version": "unknown", "full-revisionid": pieces.get("long"), "dirty": None, "error": pieces["error"], "date": None} if not style or style == "default": style = "pep440" # the default if style == "pep440": rendered = render_pep440(pieces) elif style == "pep440-pre": rendered = render_pep440_pre(pieces) elif style == "pep440-post": rendered = render_pep440_post(pieces) elif style == "pep440-old": rendered = render_pep440_old(pieces) elif style == "git-describe": rendered = render_git_describe(pieces) elif style == "git-describe-long": rendered = render_git_describe_long(pieces) else: raise ValueError("unknown style '%%s'" %% style) return {"version": rendered, "full-revisionid": pieces["long"], "dirty": pieces["dirty"], "error": None, "date": pieces.get("date")} def get_versions(): """Get version information or return default if unable to do so.""" # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have # __file__, we can work backwards from there to the root. Some # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which # case we can only use expanded keywords. cfg = get_config() verbose = cfg.verbose try: return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose) except NotThisMethod: pass try: root = os.path.realpath(__file__) # versionfile_source is the relative path from the top of the source # tree (where the .git directory might live) to this file. Invert # this to find the root from __file__. for i in cfg.versionfile_source.split('/'): root = os.path.dirname(root) except NameError: return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to find root of source tree", "date": None} try: pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) return render(pieces, cfg.style) except NotThisMethod: pass try: if cfg.parentdir_prefix: return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) except NotThisMethod: pass return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to compute version", "date": None} ''' @register_vcs_handler("git", "get_keywords") def git_get_keywords(versionfile_abs): """Extract version information from the given file.""" # the code embedded in _version.py can just fetch the value of these # keywords. When used from setup.py, we don't want to import _version.py, # so we do it with a regexp instead. This function is not used from # _version.py. keywords = {} try: f = open(versionfile_abs, "r") for line in f.readlines(): if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["refnames"] = mo.group(1) if line.strip().startswith("git_full ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["full"] = mo.group(1) if line.strip().startswith("git_date ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["date"] = mo.group(1) f.close() except EnvironmentError: pass return keywords @register_vcs_handler("git", "keywords") def git_versions_from_keywords(keywords, tag_prefix, verbose): """Get version information from git keywords.""" if not keywords: raise NotThisMethod("no keywords at all, weird") date = keywords.get("date") if date is not None: # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 # -like" string, which we must then edit to make compliant), because # it's been around since git-1.5.3, and it's too difficult to # discover which version we're using, or to work around using an # older one. date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) refnames = keywords["refnames"].strip() if refnames.startswith("$Format"): if verbose: print("keywords are unexpanded, not using") raise NotThisMethod("unexpanded keywords, not a git-archive tarball") refs = set([r.strip() for r in refnames.strip("()").split(",")]) # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d # expansion behaves like git log --decorate=short and strips out the # refs/heads/ and refs/tags/ prefixes that would let us distinguish # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". tags = set([r for r in refs if re.search(r'\d', r)]) if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: print("likely tags: %s" % ",".join(sorted(tags))) for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): r = ref[len(tag_prefix):] if verbose: print("picking %s" % r) return {"version": r, "full-revisionid": keywords["full"].strip(), "dirty": False, "error": None, "date": date} # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") return {"version": "0+unknown", "full-revisionid": keywords["full"].strip(), "dirty": False, "error": "no suitable tags", "date": None} @register_vcs_handler("git", "pieces_from_vcs") def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): """Get version from 'git describe' in the root of the source tree. This only gets called if the git-archive 'subst' keywords were *not* expanded, and _version.py hasn't already been rewritten with a short version string, meaning we're inside a checked out source tree. """ GITS = ["git"] if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %s not under git control" % root) raise NotThisMethod("'git rev-parse --git-dir' returned error") # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%s*" % tag_prefix], cwd=root) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") describe_out = describe_out.strip() full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) if full_out is None: raise NotThisMethod("'git rev-parse' failed") full_out = full_out.strip() pieces = {} pieces["long"] = full_out pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] # TAG might have hyphens. git_describe = describe_out # look for -dirty suffix dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: git_describe = git_describe[:git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? pieces["error"] = ("unable to parse git-describe output: '%s'" % describe_out) return pieces # tag full_tag = mo.group(1) if not full_tag.startswith(tag_prefix): if verbose: fmt = "tag '%s' doesn't start with prefix '%s'" print(fmt % (full_tag, tag_prefix)) pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" % (full_tag, tag_prefix)) return pieces pieces["closest-tag"] = full_tag[len(tag_prefix):] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) # commit: short hex revision ID pieces["short"] = mo.group(3) else: # HEX: no tags pieces["closest-tag"] = None count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root) pieces["distance"] = int(count_out) # total number of commits # commit date: see ISO-8601 comment in git_versions_from_keywords() date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) return pieces def do_vcs_install(manifest_in, versionfile_source, ipy): """Git-specific installation logic for Versioneer. For Git, this means creating/changing .gitattributes to mark _version.py for export-subst keyword substitution. """ GITS = ["git"] if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] files = [manifest_in, versionfile_source] if ipy: files.append(ipy) try: me = __file__ if me.endswith(".pyc") or me.endswith(".pyo"): me = os.path.splitext(me)[0] + ".py" versioneer_file = os.path.relpath(me) except NameError: versioneer_file = "versioneer.py" files.append(versioneer_file) present = False try: f = open(".gitattributes", "r") for line in f.readlines(): if line.strip().startswith(versionfile_source): if "export-subst" in line.strip().split()[1:]: present = True f.close() except EnvironmentError: pass if not present: f = open(".gitattributes", "a+") f.write("%s export-subst\n" % versionfile_source) f.close() files.append(".gitattributes") run_command(GITS, ["add", "--"] + files) def versions_from_parentdir(parentdir_prefix, root, verbose): """Try to determine the version from the parent directory name. Source tarballs conventionally unpack into a directory that includes both the project name and a version string. We will also support searching up two directory levels for an appropriately named parent directory """ rootdirs = [] for i in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): return {"version": dirname[len(parentdir_prefix):], "full-revisionid": None, "dirty": False, "error": None, "date": None} else: rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: print("Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") SHORT_VERSION_PY = """ # This file was generated by 'versioneer.py' (0.18) from # revision-control system data, or from the parent directory name of an # unpacked source archive. Distribution tarballs contain a pre-generated copy # of this file. import json version_json = ''' %s ''' # END VERSION_JSON def get_versions(): return json.loads(version_json) """ def versions_from_file(filename): """Try to determine the version from _version.py if present.""" try: with open(filename) as f: contents = f.read() except EnvironmentError: raise NotThisMethod("unable to read _version.py") mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: raise NotThisMethod("no version_json in _version.py") return json.loads(mo.group(1)) def write_to_version_file(filename, versions): """Write the given version number to the given _version.py file.""" os.unlink(filename) contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) with open(filename, "w") as f: f.write(SHORT_VERSION_PY % contents) print("set %s to '%s'" % (filename, versions["version"])) def plus_or_dot(pieces): """Return a + if we don't already have one, else return a .""" if "+" in pieces.get("closest-tag", ""): return "." return "+" def render_pep440(pieces): """Build up version string, with post-release "local version identifier". Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty Exceptions: 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += plus_or_dot(pieces) rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_pre(pieces): """TAG[.post.devDISTANCE] -- No -dirty. Exceptions: 1: no tags. 0.post.devDISTANCE """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += ".post.dev%d" % pieces["distance"] else: # exception #1 rendered = "0.post.dev%d" % pieces["distance"] return rendered def render_pep440_post(pieces): """TAG[.postDISTANCE[.dev0]+gHEX] . The ".dev0" means dirty. Note that .dev0 sorts backwards (a dirty tree will appear "older" than the corresponding clean one), but you shouldn't be releasing software with -dirty anyways. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%s" % pieces["short"] else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += "+g%s" % pieces["short"] return rendered def render_pep440_old(pieces): """TAG[.postDISTANCE[.dev0]] . The ".dev0" means dirty. Eexceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" return rendered def render_git_describe(pieces): """TAG[-DISTANCE-gHEX][-dirty]. Like 'git describe --tags --dirty --always'. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render_git_describe_long(pieces): """TAG-DISTANCE-gHEX[-dirty]. Like 'git describe --tags --dirty --always -long'. The distance/hash is unconditional. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: return {"version": "unknown", "full-revisionid": pieces.get("long"), "dirty": None, "error": pieces["error"], "date": None} if not style or style == "default": style = "pep440" # the default if style == "pep440": rendered = render_pep440(pieces) elif style == "pep440-pre": rendered = render_pep440_pre(pieces) elif style == "pep440-post": rendered = render_pep440_post(pieces) elif style == "pep440-old": rendered = render_pep440_old(pieces) elif style == "git-describe": rendered = render_git_describe(pieces) elif style == "git-describe-long": rendered = render_git_describe_long(pieces) else: raise ValueError("unknown style '%s'" % style) return {"version": rendered, "full-revisionid": pieces["long"], "dirty": pieces["dirty"], "error": None, "date": pieces.get("date")} class VersioneerBadRootError(Exception): """The project root directory is unknown or missing key files.""" def get_versions(verbose=False): """Get the project version from whatever source is available. Returns dict with two keys: 'version' and 'full'. """ if "versioneer" in sys.modules: # see the discussion in cmdclass.py:get_cmdclass() del sys.modules["versioneer"] root = get_root() cfg = get_config_from_root(root) assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" handlers = HANDLERS.get(cfg.VCS) assert handlers, "unrecognized VCS '%s'" % cfg.VCS verbose = verbose or cfg.verbose assert cfg.versionfile_source is not None, \ "please set versioneer.versionfile_source" assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" versionfile_abs = os.path.join(root, cfg.versionfile_source) # extract version from first of: _version.py, VCS command (e.g. 'git # describe'), parentdir. This is meant to work for developers using a # source checkout, for users of a tarball created by 'setup.py sdist', # and for users of a tarball/zipball created by 'git archive' or github's # download-from-tag feature or the equivalent in other VCSes. get_keywords_f = handlers.get("get_keywords") from_keywords_f = handlers.get("keywords") if get_keywords_f and from_keywords_f: try: keywords = get_keywords_f(versionfile_abs) ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) if verbose: print("got version from expanded keyword %s" % ver) return ver except NotThisMethod: pass try: ver = versions_from_file(versionfile_abs) if verbose: print("got version from file %s %s" % (versionfile_abs, ver)) return ver except NotThisMethod: pass from_vcs_f = handlers.get("pieces_from_vcs") if from_vcs_f: try: pieces = from_vcs_f(cfg.tag_prefix, root, verbose) ver = render(pieces, cfg.style) if verbose: print("got version from VCS %s" % ver) return ver except NotThisMethod: pass try: if cfg.parentdir_prefix: ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) if verbose: print("got version from parentdir %s" % ver) return ver except NotThisMethod: pass if verbose: print("unable to compute version") return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to compute version", "date": None} def get_version(): """Get the short version string for this project.""" return get_versions()["version"] def get_cmdclass(): """Get the custom setuptools/distutils subclasses used by Versioneer.""" if "versioneer" in sys.modules: del sys.modules["versioneer"] # this fixes the "python setup.py develop" case (also 'install' and # 'easy_install .'), in which subdependencies of the main project are # built (using setup.py bdist_egg) in the same python process. Assume # a main project A and a dependency B, which use different versions # of Versioneer. A's setup.py imports A's Versioneer, leaving it in # sys.modules by the time B's setup.py is executed, causing B to run # with the wrong versioneer. Setuptools wraps the sub-dep builds in a # sandbox that restores sys.modules to it's pre-build state, so the # parent is protected against the child's "import versioneer". By # removing ourselves from sys.modules here, before the child build # happens, we protect the child from the parent's versioneer too. # Also see https://github.com/warner/python-versioneer/issues/52 cmds = {} # we add "version" to both distutils and setuptools from distutils.core import Command class cmd_version(Command): description = "report generated version string" user_options = [] boolean_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): vers = get_versions(verbose=True) print("Version: %s" % vers["version"]) print(" full-revisionid: %s" % vers.get("full-revisionid")) print(" dirty: %s" % vers.get("dirty")) print(" date: %s" % vers.get("date")) if vers["error"]: print(" error: %s" % vers["error"]) cmds["version"] = cmd_version # we override "build_py" in both distutils and setuptools # # most invocation pathways end up running build_py: # distutils/build -> build_py # distutils/install -> distutils/build ->.. # setuptools/bdist_wheel -> distutils/install ->.. # setuptools/bdist_egg -> distutils/install_lib -> build_py # setuptools/install -> bdist_egg ->.. # setuptools/develop -> ? # pip install: # copies source tree to a tempdir before running egg_info/etc # if .git isn't copied too, 'git describe' will fail # then does setup.py bdist_wheel, or sometimes setup.py install # setup.py egg_info -> ? # we override different "build_py" commands for both environments if "setuptools" in sys.modules: from setuptools.command.build_py import build_py as _build_py else: from distutils.command.build_py import build_py as _build_py class cmd_build_py(_build_py): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() _build_py.run(self) # now locate _version.py in the new build/ directory and replace # it with an updated value if cfg.versionfile_build: target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) cmds["build_py"] = cmd_build_py if "cx_Freeze" in sys.modules: # cx_freeze enabled? from cx_Freeze.dist import build_exe as _build_exe # nczeczulin reports that py2exe won't like the pep440-style string # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. # setup(console=[{ # "version": versioneer.get_version().split("+", 1)[0], # FILEVERSION # "product_version": versioneer.get_version(), # ... class cmd_build_exe(_build_exe): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() target_versionfile = cfg.versionfile_source print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) _build_exe.run(self) os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] f.write(LONG % {"DOLLAR": "$", "STYLE": cfg.style, "TAG_PREFIX": cfg.tag_prefix, "PARENTDIR_PREFIX": cfg.parentdir_prefix, "VERSIONFILE_SOURCE": cfg.versionfile_source, }) cmds["build_exe"] = cmd_build_exe del cmds["build_py"] if 'py2exe' in sys.modules: # py2exe enabled? try: from py2exe.distutils_buildexe import py2exe as _py2exe # py3 except ImportError: from py2exe.build_exe import py2exe as _py2exe # py2 class cmd_py2exe(_py2exe): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() target_versionfile = cfg.versionfile_source print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) _py2exe.run(self) os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] f.write(LONG % {"DOLLAR": "$", "STYLE": cfg.style, "TAG_PREFIX": cfg.tag_prefix, "PARENTDIR_PREFIX": cfg.parentdir_prefix, "VERSIONFILE_SOURCE": cfg.versionfile_source, }) cmds["py2exe"] = cmd_py2exe # we override different "sdist" commands for both environments if "setuptools" in sys.modules: from setuptools.command.sdist import sdist as _sdist else: from distutils.command.sdist import sdist as _sdist class cmd_sdist(_sdist): def run(self): versions = get_versions() self._versioneer_generated_versions = versions # unless we update this, the command will keep using the old # version self.distribution.metadata.version = versions["version"] return _sdist.run(self) def make_release_tree(self, base_dir, files): root = get_root() cfg = get_config_from_root(root) _sdist.make_release_tree(self, base_dir, files) # now locate _version.py in the new base_dir directory # (remembering that it may be a hardlink) and replace it with an # updated value target_versionfile = os.path.join(base_dir, cfg.versionfile_source) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, self._versioneer_generated_versions) cmds["sdist"] = cmd_sdist return cmds CONFIG_ERROR = """ setup.cfg is missing the necessary Versioneer configuration. You need a section like: [versioneer] VCS = git style = pep440 versionfile_source = src/myproject/_version.py versionfile_build = myproject/_version.py tag_prefix = parentdir_prefix = myproject- You will also need to edit your setup.py to use the results: import versioneer setup(version=versioneer.get_version(), cmdclass=versioneer.get_cmdclass(), ...) Please read the docstring in ./versioneer.py for configuration instructions, edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. """ SAMPLE_CONFIG = """ # See the docstring in versioneer.py for instructions. Note that you must # re-run 'versioneer.py setup' after changing this section, and commit the # resulting files. [versioneer] #VCS = git #style = pep440 #versionfile_source = #versionfile_build = #tag_prefix = #parentdir_prefix = """ INIT_PY_SNIPPET = """ from ._version import get_versions __version__ = get_versions()['version'] del get_versions """ def do_setup(): """Main VCS-independent setup function for installing Versioneer.""" root = get_root() try: cfg = get_config_from_root(root) except (EnvironmentError, configparser.NoSectionError, configparser.NoOptionError) as e: if isinstance(e, (EnvironmentError, configparser.NoSectionError)): print("Adding sample versioneer config to setup.cfg", file=sys.stderr) with open(os.path.join(root, "setup.cfg"), "a") as f: f.write(SAMPLE_CONFIG) print(CONFIG_ERROR, file=sys.stderr) return 1 print(" creating %s" % cfg.versionfile_source) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] f.write(LONG % {"DOLLAR": "$", "STYLE": cfg.style, "TAG_PREFIX": cfg.tag_prefix, "PARENTDIR_PREFIX": cfg.parentdir_prefix, "VERSIONFILE_SOURCE": cfg.versionfile_source, }) ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") if os.path.exists(ipy): try: with open(ipy, "r") as f: old = f.read() except EnvironmentError: old = "" if INIT_PY_SNIPPET not in old: print(" appending to %s" % ipy) with open(ipy, "a") as f: f.write(INIT_PY_SNIPPET) else: print(" %s unmodified" % ipy) else: print(" %s doesn't exist, ok" % ipy) ipy = None # Make sure both the top-level "versioneer.py" and versionfile_source # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so # they'll be copied into source distributions. Pip won't be able to # install the package without this. manifest_in = os.path.join(root, "MANIFEST.in") simple_includes = set() try: with open(manifest_in, "r") as f: for line in f: if line.startswith("include "): for include in line.split()[1:]: simple_includes.add(include) except EnvironmentError: pass # That doesn't cover everything MANIFEST.in can do # (http://docs.python.org/2/distutils/sourcedist.html#commands), so # it might give some false negatives. Appending redundant 'include' # lines is safe, though. if "versioneer.py" not in simple_includes: print(" appending 'versioneer.py' to MANIFEST.in") with open(manifest_in, "a") as f: f.write("include versioneer.py\n") else: print(" 'versioneer.py' already in MANIFEST.in") if cfg.versionfile_source not in simple_includes: print(" appending versionfile_source ('%s') to MANIFEST.in" % cfg.versionfile_source) with open(manifest_in, "a") as f: f.write("include %s\n" % cfg.versionfile_source) else: print(" versionfile_source already in MANIFEST.in") # Make VCS-specific changes. For git, this means creating/changing # .gitattributes to mark _version.py for export-subst keyword # substitution. do_vcs_install(manifest_in, cfg.versionfile_source, ipy) return 0 def scan_setup_py(): """Validate the contents of setup.py against Versioneer's expectations.""" found = set() setters = False errors = 0 with open("setup.py", "r") as f: for line in f.readlines(): if "import versioneer" in line: found.add("import") if "versioneer.get_cmdclass()" in line: found.add("cmdclass") if "versioneer.get_version()" in line: found.add("get_version") if "versioneer.VCS" in line: setters = True if "versioneer.versionfile_source" in line: setters = True if len(found) != 3: print("") print("Your setup.py appears to be missing some important items") print("(but I might be wrong). Please make sure it has something") print("roughly like the following:") print("") print(" import versioneer") print(" setup( version=versioneer.get_version(),") print(" cmdclass=versioneer.get_cmdclass(), ...)") print("") errors += 1 if setters: print("You should remove lines like 'versioneer.VCS = ' and") print("'versioneer.versionfile_source = ' . This configuration") print("now lives in setup.cfg, and should be removed from setup.py") print("") errors += 1 return errors if __name__ == "__main__": cmd = sys.argv[1] if cmd == "setup": errors = do_setup() errors += scan_setup_py() if errors: sys.exit(1) python-language-server-0.36.2/vscode-client/000077500000000000000000000000001376456405500207665ustar00rootroot00000000000000python-language-server-0.36.2/vscode-client/.gitignore000066400000000000000000000000431376456405500227530ustar00rootroot00000000000000out server node_modules .vscode-devpython-language-server-0.36.2/vscode-client/.vscodeignore000066400000000000000000000001571376456405500234610ustar00rootroot00000000000000.vscode/** typings/** out/test/** test/** src/** **/*.map .gitignore tsconfig.json vsc-extension-quickstart.md python-language-server-0.36.2/vscode-client/License.txt000066400000000000000000000021101376456405500231030ustar00rootroot00000000000000Copyright (c) Microsoft Corporation All rights reserved. MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. python-language-server-0.36.2/vscode-client/README.md000066400000000000000000000034141376456405500222470ustar00rootroot00000000000000# vscode-client The vscode-client extension for Visual Studio Code helps you develop and debug language servers. It lets you run multiple language servers at once with minimal extra configuration per language. ## Using this extension 1. Follow the [Develop against VS Code instructions](/../../#develop-against-vs-code) 1. Open a `.py` file and hover over text to start using the Python language server. To view a language server's stderr output in VSCode, select View → Output. To debug further, see the "Hacking on this extension" section below. After updating the binary for a language server (during development or after an upgrade), just kill the process (e.g., `killall pyls`). VSCode will automatically restart and reconnect to the language server process. > **Note for those who use VSCode as their primary editor:** Because this extension's functionality conflicts with other VSCode extensions (e.g., showing Python hover information), the `yarn run vscode` script launches a separate instance of VSCode and stores its config in `../.vscode-dev`. It will still show your existing extensions in the panel (which seems to be a VSCode bug), but they won't be activated. ## Adding a language server Register your language server at the bottom of [`extension.ts`](src/extension.ts). ## Hacking on this extension 1. Run `yarn install` in this directory (`vscode-client`). 1. Open this directory by itself in Visual Studio Code. 1. Hit F5 to open a new VSCode instance in a debugger running this extension. (This is equivalent to going to the Debug pane on the left and running the "Launch Extension" task.) See the [Node.js example language server tutorial](https://code.visualstudio.com/docs/extensions/example-language-server) under "To test the language server" for more information. python-language-server-0.36.2/vscode-client/ThirdPartyNotices.txt000066400000000000000000000034651376456405500251560ustar00rootroot00000000000000THIRD-PARTY SOFTWARE NOTICES AND INFORMATION For Microsoft vscode-languageserver-node-example This project incorporates material from the project(s) listed below (collectively, “Third Party Codeâ€). Microsoft is not the original author of the Third Party Code. The original copyright notice and license under which Microsoft received such Third Party Code are set out below. This Third Party Code is licensed to you under their original license terms set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. 1. DefinitelyTyped version 0.0.1 (https://github.com/borisyankov/DefinitelyTyped) This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.python-language-server-0.36.2/vscode-client/package.json000066400000000000000000000325541376456405500232650ustar00rootroot00000000000000{ "name": "pyls", "description": "Python language server", "author": "Sourcegraph", "repository": "https://github.com/Microsoft/vscode-languageserver-node", "license": "MIT", "version": "0.0.1", "publisher": "sqs", "engines": { "vscode": "^1.15.0" }, "categories": [ "Other" ], "activationEvents": [ "*" ], "contributes": { "configuration": { "title": "Python Language Server Configuration", "type": "object", "properties": { "pyls.executable": { "type": "string", "default": "pyls", "description": "Language server executable" }, "pyls.configurationSources": { "type": "array", "default": ["pycodestyle"], "description": "List of configuration sources to use.", "items": { "type": "string", "enum": ["pycodestyle", "pyflakes"] }, "uniqueItems": true }, "pyls.plugins.jedi.extra_paths": { "type": "array", "default": [], "description": "Define extra paths for jedi.Script." }, "pyls.plugins.jedi.env_vars": { "type": "dictionary", "default": null, "description": "Define environment variables for jedi.Script and Jedi.names." }, "pyls.plugins.jedi.environment": { "type": "string", "default": null, "description": "Define environment for jedi.Script and Jedi.names." }, "pyls.plugins.jedi_completion.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.jedi_completion.include_params": { "type": "boolean", "default": true, "description": "Auto-completes methods and classes with tabstops for each parameter." }, "pyls.plugins.jedi_completion.include_class_objects": { "type": "boolean", "default": true, "description": "Adds class objects as a separate completion item." }, "pyls.plugins.jedi_completion.fuzzy": { "type": "boolean", "default": false, "description": "Enable fuzzy when requesting autocomplete." }, "pyls.plugins.jedi_definition.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.jedi_definition.follow_imports": { "type": "boolean", "default": true, "description": "The goto call will follow imports." }, "pyls.plugins.jedi_definition.follow_builtin_imports": { "type": "boolean", "default": true, "description": "If follow_imports is True will decide if it follow builtin imports." }, "pyls.plugins.jedi_hover.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.jedi_references.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.jedi_signature_help.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.jedi_symbols.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.jedi_symbols.all_scopes": { "type": "boolean", "default": true, "description": "If True lists the names of all scopes instead of only the module namespace." }, "pyls.plugins.mccabe.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.mccabe.threshold": { "type": "number", "default": 15, "description": "The minimum threshold that triggers warnings about cyclomatic complexity." }, "pyls.plugins.preload.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.preload.modules": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "List of modules to import on startup" }, "pyls.plugins.pycodestyle.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.pycodestyle.exclude": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Exclude files or directories which match these patterns." }, "pyls.plugins.pycodestyle.filename": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "When parsing directories, only check filenames matching these patterns." }, "pyls.plugins.pycodestyle.select": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Select errors and warnings" }, "pyls.plugins.pycodestyle.ignore": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Ignore errors and warnings" }, "pyls.plugins.pycodestyle.hangClosing": { "type": "boolean", "default": null, "description": "Hang closing bracket instead of matching indentation of opening bracket's line." }, "pyls.plugins.pycodestyle.maxLineLength": { "type": "number", "default": null, "description": "Set maximum allowed line length." }, "pyls.plugins.pydocstyle.enabled": { "type": "boolean", "default": false, "description": "Enable or disable the plugin." }, "pyls.plugins.pydocstyle.convention": { "type": "string", "default": null, "enum": [ "pep257", "numpy" ], "description": "Choose the basic list of checked errors by specifying an existing convention." }, "pyls.plugins.pydocstyle.addIgnore": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Ignore errors and warnings in addition to the specified convention." }, "pyls.plugins.pydocstyle.addSelect": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Select errors and warnings in addition to the specified convention." }, "pyls.plugins.pydocstyle.ignore": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Ignore errors and warnings" }, "pyls.plugins.pydocstyle.select": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "Select errors and warnings" }, "pyls.plugins.pydocstyle.match": { "type": "string", "default": "(?!test_).*\\.py", "description": "Check only files that exactly match the given regular expression; default is to match files that don't start with 'test_' but end with '.py'." }, "pyls.plugins.pydocstyle.matchDir": { "type": "string", "default": "[^\\.].*", "description": "Search only dirs that exactly match the given regular expression; default is to match dirs which do not begin with a dot." }, "pyls.plugins.pyflakes.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.pylint.enabled": { "type": "boolean", "default": false, "description": "Enable or disable the plugin." }, "pyls.plugins.pylint.args": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": false, "description": "Arguments to pass to pylint." }, "pyls.plugins.pylint.executable": { "type": "string", "default": null, "description": "Executable to run pylint with. Enabling this will run pylint on unsaved files via stdin. Can slow down workflow. Only works with python3." }, "pyls.plugins.rope_completion.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.plugins.yapf.enabled": { "type": "boolean", "default": true, "description": "Enable or disable the plugin." }, "pyls.rope.extensionModules": { "type": "string", "default": null, "description": "Builtin and c-extension modules that are allowed to be imported and inspected by rope." }, "pyls.rope.ropeFolder": { "type": "array", "default": null, "items": { "type": "string" }, "uniqueItems": true, "description": "The name of the folder in which rope stores project configurations and data. Pass `null` for not using such a folder at all." } } } }, "main": "./out/extension", "scripts": { "vscode:prepublish": "tsc -p ./", "compile": "tsc -watch -p ./", "postinstall": "node ./node_modules/vscode/bin/install", "vscode": "npm run vscode:prepublish && VSCODE=$(which code-insiders || which code || echo echo ERROR: neither the code nor code-insiders vscode executable is installed); USER=dummy-dont-share-vscode-instance $VSCODE --user-data-dir=$PWD/.vscode-dev/user-data --extensionHomePath=$PWD/.vscode-dev/extensions --extensionDevelopmentPath=$PWD $*" }, "devDependencies": { "typescript": "^2.3.4", "vscode": "^1.1.4", "mocha": "^2.3.3", "@types/node": "^6.0.40", "@types/mocha": "^2.2.32" }, "dependencies": { "vscode-languageclient": "^3.4.5" } } python-language-server-0.36.2/vscode-client/src/000077500000000000000000000000001376456405500215555ustar00rootroot00000000000000python-language-server-0.36.2/vscode-client/src/extension.ts000066400000000000000000000036071376456405500241470ustar00rootroot00000000000000/* -------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ 'use strict'; import * as net from 'net'; import { workspace, Disposable, ExtensionContext } from 'vscode'; import { LanguageClient, LanguageClientOptions, SettingMonitor, ServerOptions, ErrorAction, ErrorHandler, CloseAction, TransportKind } from 'vscode-languageclient'; function startLangServer(command: string, args: string[], documentSelector: string[]): Disposable { const serverOptions: ServerOptions = { command, args, }; const clientOptions: LanguageClientOptions = { documentSelector: documentSelector, synchronize: { configurationSection: "pyls" } } return new LanguageClient(command, serverOptions, clientOptions).start(); } function startLangServerTCP(addr: number, documentSelector: string[]): Disposable { const serverOptions: ServerOptions = function() { return new Promise((resolve, reject) => { var client = new net.Socket(); client.connect(addr, "127.0.0.1", function() { resolve({ reader: client, writer: client }); }); }); } const clientOptions: LanguageClientOptions = { documentSelector: documentSelector, } return new LanguageClient(`tcp lang server (port ${addr})`, serverOptions, clientOptions).start(); } export function activate(context: ExtensionContext) { const executable = workspace.getConfiguration("pyls").get("executable"); context.subscriptions.push(startLangServer(executable, ["-vv"], ["python"])); // For TCP server needs to be started seperately // context.subscriptions.push(startLangServerTCP(2087, ["python"])); } python-language-server-0.36.2/vscode-client/tsconfig.json000066400000000000000000000002701376456405500234740ustar00rootroot00000000000000{ "compilerOptions": { "module": "commonjs", "target": "es6", "outDir": "out", "lib": [ "es6" ], "sourceMap": true }, "exclude": [ "node_modules", "server" ] } python-language-server-0.36.2/vscode-client/yarn.lock000066400000000000000000001736531376456405500226300ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@types/mocha@^2.2.32": version "2.2.46" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.46.tgz#b04713f7759d1cf752effdaae7b3969e285ebc16" "@types/node@^6.0.40": version "6.0.96" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.96.tgz#7bf0bf40d6ce51e93762cc47d010c8cc5ebb2179" ajv@^5.1.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" ansi-cyan@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" dependencies: ansi-wrap "0.1.0" ansi-gray@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" dependencies: ansi-wrap "0.1.0" ansi-red@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" dependencies: ansi-wrap "0.1.0" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-wrap@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" arr-diff@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" dependencies: arr-flatten "^1.0.1" array-slice "^0.2.3" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" dependencies: arr-flatten "^1.0.1" arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" arr-union@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" array-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: hoek "2.x.x" boom@4.x.x: version "4.3.1" resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" dependencies: hoek "4.x.x" boom@5.x.x: version "5.2.0" resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" dependencies: hoek "4.x.x" brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" chalk@^1.0.0, chalk@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" clone@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" clone@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" clone@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" cloneable-readable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" dependencies: inherits "^2.0.1" process-nextick-args "^1.0.6" through2 "^2.0.1" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" commander@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" commander@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" commander@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" commander@^2.9.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" convert-source-map@^1.1.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" dependencies: boom "5.x.x" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" debug@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: ms "0.7.1" debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" deep-assign@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-1.0.0.tgz#b092743be8427dc621ea0067cdec7e70dd19f37b" dependencies: is-obj "^1.0.0" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" diff@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" diff@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" dependencies: readable-stream "~1.1.9" duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexify@^3.2.0: version "3.5.3" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" readable-stream "^2.0.0" stream-shift "^1.0.0" ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" end-of-stream@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" dependencies: once "^1.4.0" escape-string-regexp@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" event-stream@^3.3.1, event-stream@~3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" dependencies: duplexer "~0.1.1" from "~0" map-stream "~0.1.0" pause-stream "0.0.11" split "0.3" stream-combiner "~0.0.4" through "~2.3.1" expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" dependencies: is-posix-bracket "^0.1.0" expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" dependencies: fill-range "^2.1.0" extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" dependencies: kind-of "^1.1.0" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" dependencies: is-extendable "^0.1.0" extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: is-extglob "^1.0.0" extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" fancy-log@^1.1.0: version "1.3.2" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" dependencies: ansi-gray "^0.1.1" color-support "^1.1.3" time-stamp "^1.0.0" fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" dependencies: pend "~1.2.0" filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" dependencies: is-number "^2.1.0" isobject "^2.0.0" randomatic "^1.1.3" repeat-element "^1.1.2" repeat-string "^1.5.2" first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: for-in "^1.0.1" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" form-data@~2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fstream@^1.0.2: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" generate-function@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" dependencies: is-property "^1.0.2" generate-object-property@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" dependencies: is-property "^1.0.0" getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" dependencies: is-glob "^2.0.0" glob-parent@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" glob-stream@^5.3.2: version "5.3.5" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" dependencies: extend "^3.0.0" glob "^5.0.3" glob-parent "^3.0.0" micromatch "^2.3.7" ordered-read-streams "^0.3.0" through2 "^0.6.0" to-absolute-glob "^0.1.1" unique-stream "^2.0.2" glob@3.2.11: version "3.2.11" resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" dependencies: inherits "2" minimatch "0.3" glob@7.1.2, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: inflight "^1.0.4" inherits "2" minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" glogg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" dependencies: sparkles "^1.0.0" graceful-fs@^4.0.0, graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" growl@1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" gulp-chmod@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/gulp-chmod/-/gulp-chmod-2.0.0.tgz#00c390b928a0799b251accf631aa09e01cc6299c" dependencies: deep-assign "^1.0.0" stat-mode "^0.2.0" through2 "^2.0.0" gulp-filter@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/gulp-filter/-/gulp-filter-5.1.0.tgz#a05e11affb07cf7dcf41a7de1cb7b63ac3783e73" dependencies: multimatch "^2.0.0" plugin-error "^0.1.2" streamfilter "^1.0.5" gulp-gunzip@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz#15b741145e83a9c6f50886241b57cc5871f151a9" dependencies: through2 "~0.6.5" vinyl "~0.4.6" gulp-remote-src@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/gulp-remote-src/-/gulp-remote-src-0.4.3.tgz#5728cfd643433dd4845ddef0969f0f971a2ab4a1" dependencies: event-stream "~3.3.4" node.extend "~1.1.2" request "~2.79.0" through2 "~2.0.3" vinyl "~2.0.1" gulp-sourcemaps@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" dependencies: convert-source-map "^1.1.1" graceful-fs "^4.1.2" strip-bom "^2.0.0" through2 "^2.0.0" vinyl "^1.0.0" gulp-symdest@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/gulp-symdest/-/gulp-symdest-1.1.0.tgz#c165320732d192ce56fd94271ffa123234bf2ae0" dependencies: event-stream "^3.3.1" mkdirp "^0.5.1" queue "^3.1.0" vinyl-fs "^2.4.3" gulp-untar@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/gulp-untar/-/gulp-untar-0.0.6.tgz#d6bdefde7e9a8e054c9f162385a0782c4be74000" dependencies: event-stream "~3.3.4" gulp-util "~3.0.8" streamifier "~0.1.1" tar "^2.2.1" through2 "~2.0.3" gulp-util@~3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: array-differ "^1.0.0" array-uniq "^1.0.2" beeper "^1.0.0" chalk "^1.0.0" dateformat "^2.0.0" fancy-log "^1.1.0" gulplog "^1.0.0" has-gulplog "^0.1.0" lodash._reescape "^3.0.0" lodash._reevaluate "^3.0.0" lodash._reinterpolate "^3.0.0" lodash.template "^3.0.0" minimist "^1.1.0" multipipe "^0.1.2" object-assign "^3.0.0" replace-ext "0.0.1" through2 "^2.0.0" vinyl "^0.5.0" gulp-vinyl-zip@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz#24e40685dc05b7149995245099e0590263be8dad" dependencies: event-stream "^3.3.1" queue "^4.2.1" through2 "^2.0.3" vinyl "^2.0.2" vinyl-fs "^2.0.0" yauzl "^2.2.1" yazl "^2.2.1" gulplog@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" dependencies: glogg "^1.0.0" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" dependencies: chalk "^1.1.1" commander "^2.9.0" is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" dependencies: ajv "^5.1.0" har-schema "^2.0.0" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" dependencies: sparkles "^1.0.0" has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: function-bind "^1.1.1" hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: boom "2.x.x" cryptiles "2.x.x" hoek "2.x.x" sntp "1.x.x" hawk@~6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" dependencies: boom "4.x.x" cryptiles "3.x.x" hoek "4.x.x" sntp "2.x.x" he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" sshpk "^1.7.0" http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" dependencies: is-primitive "^2.0.0" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" is-extglob@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" dependencies: is-extglob "^2.1.0" is-my-ip-valid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" is-my-json-valid@^2.12.4: version "2.20.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" is-my-ip-valid "^1.0.0" jsonpointer "^4.0.0" xtend "^4.0.0" is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" is-property@^1.0.0, is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" is-valid-glob@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" is@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" jade@0.26.3: version "0.26.3" resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" dependencies: commander "0.6.1" mkdirp "0.3.0" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" json-stable-stringify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: jsonify "~0.0.0" json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" extsprintf "1.3.0" json-schema "0.2.3" verror "1.10.0" kind-of@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: is-buffer "^1.1.5" lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" dependencies: readable-stream "^2.0.5" lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" lodash._reescape@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" lodash._reevaluate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" dependencies: lodash._root "^3.0.0" lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" lodash.isequal@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" dependencies: lodash._basecopy "^3.0.0" lodash._basetostring "^3.0.0" lodash._basevalues "^3.0.0" lodash._isiterateecall "^3.0.0" lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" lodash.keys "^3.0.0" lodash.restparam "^3.0.0" lodash.templatesettings "^3.0.0" lodash.templatesettings@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" dependencies: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" merge-stream@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" dependencies: readable-stream "^2.0.1" micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" braces "^1.8.2" expand-brackets "^0.1.4" extglob "^0.3.1" filename-regex "^2.0.0" is-extglob "^1.0.0" is-glob "^2.0.1" kind-of "^3.0.2" normalize-path "^2.0.1" object.omit "^2.0.0" parse-glob "^3.0.4" regex-cache "^0.4.2" mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: mime-db "~1.30.0" minimatch@0.3: version "0.3.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" dependencies: lru-cache "2" sigmund "~1.0.0" "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" mkdirp@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" dependencies: minimist "^1.2.5" mocha@^2.3.3: version "2.5.3" resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" dependencies: commander "2.3.0" debug "2.2.0" diff "1.4.0" escape-string-regexp "1.0.2" glob "3.2.11" growl "1.9.2" jade "0.26.3" mkdirp "0.5.1" supports-color "1.2.0" to-iso-string "0.0.2" mocha@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" dependencies: browser-stdout "1.3.0" commander "2.11.0" debug "3.1.0" diff "3.3.1" escape-string-regexp "1.0.5" glob "7.1.2" growl "1.10.3" he "1.1.1" mkdirp "0.5.1" supports-color "4.4.0" ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" multimatch@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" dependencies: array-differ "^1.0.0" array-union "^1.0.1" arrify "^1.0.0" minimatch "^3.0.0" multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" dependencies: duplexer2 "0.0.2" node.extend@~1.1.2: version "1.1.8" resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.8.tgz#0aab3e63789f4e6d68b42bc00073ad1881243cf0" dependencies: has "^1.0.3" is "^3.2.1" normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" object-assign@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: for-own "^0.1.4" is-extendable "^0.1.1" once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" ordered-read-streams@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" dependencies: is-stream "^1.0.1" readable-stream "^2.0.1" parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" dependencies: through "~2.3" pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" plugin-error@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" dependencies: ansi-cyan "^0.1.1" ansi-red "^0.1.1" arr-diff "^1.0.1" arr-union "^2.0.1" extend-shallow "^1.1.2" preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" queue@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/queue/-/queue-3.1.0.tgz#6c49d01f009e2256788789f2bffac6b8b9990585" dependencies: inherits "~2.0.0" queue@^4.2.1: version "4.4.2" resolved "https://registry.yarnpkg.com/queue/-/queue-4.4.2.tgz#5a9733d9a8b8bd1b36e934bc9c55ab89b28e29c7" dependencies: inherits "~2.0.0" randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: is-number "^3.0.0" kind-of "^4.0.0" "readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" safe-buffer "~5.1.1" string_decoder "~1.0.3" util-deprecate "~1.0.1" readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" request@^2.83.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" caseless "~0.12.0" combined-stream "~1.0.5" extend "~3.0.1" forever-agent "~0.6.1" form-data "~2.3.1" har-validator "~5.0.3" hawk "~6.0.2" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.17" oauth-sign "~0.8.2" performance-now "^2.1.0" qs "~6.5.1" safe-buffer "^5.1.1" stringstream "~0.0.5" tough-cookie "~2.3.3" tunnel-agent "^0.6.0" uuid "^3.1.0" request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~2.1.1" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" qs "~6.3.0" stringstream "~0.0.4" tough-cookie "~2.3.0" tunnel-agent "~0.4.1" uuid "^3.0.0" requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" rimraf@2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" dependencies: glob "^7.1.3" safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" semver@^5.4.1: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" sigmund@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" sntp@2.x.x: version "2.1.0" resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: hoek "4.x.x" source-map-support@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.2.tgz#1a6297fd5b2e762b39688c7fc91233b60984f0a5" dependencies: source-map "^0.6.0" source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" split@0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" dependencies: through "2" sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" bcrypt-pbkdf "^1.0.0" dashdash "^1.12.0" ecc-jsbn "~0.1.1" getpass "^0.1.1" jsbn "~0.1.0" safer-buffer "^2.0.2" tweetnacl "~0.14.0" stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" dependencies: duplexer "~0.1.1" stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" streamfilter@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.7.tgz#ae3e64522aa5a35c061fd17f67620c7653c643c9" dependencies: readable-stream "^2.0.2" streamifier@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/streamifier/-/streamifier-0.1.1.tgz#97e98d8fa4d105d62a2691d1dc07e820db8dfc4f" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-bom-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" dependencies: first-chunk-stream "^1.0.0" strip-bom "^2.0.0" strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" supports-color@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" supports-color@4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: has-flag "^2.0.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: block-stream "*" fstream "^1.0.2" inherits "2" through2-filter@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" dependencies: through2 "~2.0.0" xtend "~4.0.0" through2@^0.6.0, through2@~0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: readable-stream "^2.1.5" xtend "~4.0.1" through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" dependencies: extend-shallow "^2.0.1" to-iso-string@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" dependencies: safe-buffer "^5.0.1" tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" typescript@^2.3.4: version "2.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" unique-stream@^2.0.2: version "2.2.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" dependencies: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" url-parse@^1.1.9: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" dependencies: querystringify "^2.1.1" requires-port "^1.0.0" util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" uuid@^3.0.0, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" vinyl-fs@^2.0.0, vinyl-fs@^2.4.3: version "2.4.4" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" dependencies: duplexify "^3.2.0" glob-stream "^5.3.2" graceful-fs "^4.0.0" gulp-sourcemaps "1.6.0" is-valid-glob "^0.3.0" lazystream "^1.0.0" lodash.isequal "^4.0.0" merge-stream "^1.0.0" mkdirp "^0.5.0" object-assign "^4.0.0" readable-stream "^2.0.4" strip-bom "^2.0.0" strip-bom-stream "^1.0.0" through2 "^2.0.0" through2-filter "^2.0.0" vali-date "^1.0.0" vinyl "^1.0.0" vinyl-source-stream@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz#62b53a135610a896e98ca96bee3a87f008a8e780" dependencies: through2 "^2.0.3" vinyl "^0.4.3" vinyl@^0.4.3, vinyl@~0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" dependencies: clone "^0.2.0" clone-stats "^0.0.1" vinyl@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" dependencies: clone "^1.0.0" clone-stats "^0.0.1" replace-ext "0.0.1" vinyl@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" dependencies: clone "^1.0.0" clone-stats "^0.0.1" replace-ext "0.0.1" vinyl@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" dependencies: clone "^2.1.1" clone-buffer "^1.0.0" clone-stats "^1.0.0" cloneable-readable "^1.0.0" remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" vinyl@~2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c" dependencies: clone "^1.0.0" clone-buffer "^1.0.0" clone-stats "^1.0.0" cloneable-readable "^1.0.0" is-stream "^1.1.0" remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" vscode-jsonrpc@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.5.0.tgz#87239d9e166b2d7352245b8a813597804c1d63aa" vscode-languageclient@^3.4.5: version "3.5.0" resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-3.5.0.tgz#36d02cc186a8365a4467719a290fb200a9ae490a" dependencies: vscode-languageserver-protocol "^3.5.0" vscode-languageserver-protocol@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.0.tgz#067c5cbe27709795398d119692c97ebba1452209" dependencies: vscode-jsonrpc "^3.5.0" vscode-languageserver-types "^3.5.0" vscode-languageserver-types@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374" vscode@^1.1.4: version "1.1.10" resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.10.tgz#d1cba378ab24f1d3ddf9cd470d242ee1472dd35b" dependencies: glob "^7.1.2" gulp-chmod "^2.0.0" gulp-filter "^5.0.1" gulp-gunzip "1.0.0" gulp-remote-src "^0.4.3" gulp-symdest "^1.1.0" gulp-untar "^0.0.6" gulp-vinyl-zip "^2.1.0" mocha "^4.0.1" request "^2.83.0" semver "^5.4.1" source-map-support "^0.5.0" url-parse "^1.1.9" vinyl-source-stream "^1.1.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" yauzl@^2.2.1: version "2.9.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.0.1" yazl@^2.2.1: version "2.4.3" resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.4.3.tgz#ec26e5cc87d5601b9df8432dbdd3cd2e5173a071" dependencies: buffer-crc32 "~0.2.3"