regebro-pyroma-f28f87a629e3/.hg_archival.txt0000644000000000000000000000017112666777673017032 0ustar 00000000000000repo: 9addf825bc8fc3deaf09e724a16cb98b35c53c76 node: f28f87a629e3e6eadf6cc965f7b07fb64a016480 branch: default tag: 2.0.2 regebro-pyroma-f28f87a629e3/.hgignore0000644000000000000000000000015412666777673015550 0ustar 00000000000000syntax: glob *.pyc *.egg-info *.egg EGG-INFO dist build py2* py3* .tox *.wpr *.wpu *.bak *.class .venv .env regebro-pyroma-f28f87a629e3/.hgtags0000644000000000000000000000246312666777673015230 0ustar 0000000000000068ae3c1e9d029d8c104161bc0ba303dd8dc38252 0.9 79e49240dea9c67c5ffb80b49b3d7844678194d4 0.9.1 63a99246424ebedadb8ac13c07ae83ca4d85ecf4 0.9.2 a3bad0dd0ef321ed0cef8a2fab17f4c0047233ae 0.9.3 91ccfe57d39274a202661402f7aa08c1530df0bb 1.0 40413242a4fbeafed67375e29ab61e77c6e7a81b 1.1 40413242a4fbeafed67375e29ab61e77c6e7a81b 1.1 0000000000000000000000000000000000000000 1.1 0000000000000000000000000000000000000000 1.1 60a5000026a5c9346e051e7a7aa4bb172965af16 1.1 9bf4bebaff6cd16406fe97eee60be8c289d332ca 1.2 f290685da6ab1e687f8dc8e70ee4c4bf9f5eab8f 1.3 bede13755756a631fa04ec1af9e56363a593c60f 1.3.1 1cbbd2672ee4a42884224c3a7a33769374eb3f97 1.4 1cbbd2672ee4a42884224c3a7a33769374eb3f97 1.4 0000000000000000000000000000000000000000 1.4 0000000000000000000000000000000000000000 1.4 eade262433ba7abb0964eddb2b4b4c2861903758 1.4 d9c3008d1ecbe16c9e28025c0b47179398cbbc33 1.5 31ddd584d211b2834760df279c23c074e18f5b05 1.6 29b86a2f7d7c5acda2c1f90c9986530d20b75d72 1.7 660cfebb032b227a9cd74d9b8e623072322b038d 1.8 8d912bb52b05d868324e5a3d43128433c23b11d1 1.8.1 dec9f082ddffc48e2cd53d15f64adb5b42d7fd7c 1.8.2 74bc7e8f6bc7ed4072f907f857e59a0cfec65591 1.8.3 7265790a377e973256afe713f4ed890c147997ec 2.0.0b1 4e6d8f1cf569ed1a063817b5bfad3cd9042c7199 2.0.0b2 71610c9fc92372b482d3e6a55b78edb3db88dbb0 2.0.0 8be6ad93053b4c4d61b81d3b50662292615fec6b 2.0.1 regebro-pyroma-f28f87a629e3/DEVELOPMENT.txt0000644000000000000000000000207512666777673016274 0ustar 00000000000000Some notes on developing ======================== *Note: Since pyroma no longer runs tests, this is probably no longer true.* For each Python version supported by Pyroma you need to make sure the "complete" package that is used for testing also supports that version of Python. The complete data supports both Python 2 and Python 3 and depends on the "six" package. As such it's highly unlikely you'll have to change any code. However, you have to mark the package as supporting the Python version. This is most easily done by searching the code for "Python :: 3.2" and adding the Python version that you want to support to the lists of Python versions that appear in several places in this package. Otherwise Pyroma will not run the complete-packages tests with your Python version, and you'll get errors when running Pyroma's test-suite. You also have to make new test-distributions with the updated data. You do it this way: $ cd pyroma/testdata/complete $ python setup.py sdist --formats=bztar,gztar,tar,zip $ cp dist/complete-1.0.dev1.* ../distributions/ regebro-pyroma-f28f87a629e3/HISTORY.txt0000644000000000000000000000762412666777673015660 0ustar 00000000000000Changelog ========= 2.0.2 (2016-03-06) ------------------ - Faked the __name__ variable to allow you to have a "if __name__" construct in the setup.py. 2.0.1 (2016-03-06) ------------------ - Fixed a bug under Python 3 with certain imports. 2.0.0 (2016-02-28) ------------------ - Stable release. 2.0.0b2 (2015-11-09) -------------------- - Made it run under Python 3 again. - PEP8 2.0.0b1 (2015-11-08) -------------------- - Big rewrite of how data is extracted from Distutils/Setuptools. 1.8.3 (2015-11-08) ------------------ - Issue #26: Checking a PyPI package could fail under Python 3. 1.8.2 (2015-06-14) ------------------ - Do not complain that the version number should be a string, when it is a basestring. [maurits] 1.8.1 (2015-04-27) ------------------ - This is what happens when you don't run the tests after merging. 1.8 (2015-04-27) ---------------- - More robust rating. [Jeff Quast] - Closed #24. 1.7 (2014-10-19) ---------------- - Package name lookup is now case insensitive. [Dmitry Vakhrushev] - Fixed yet another error in return value. [Dmitry Vakhrushev] 1.6 (2014-04-17) ---------------- - Fixed issue #17: Integration with zest.releaser stopped working. - Fixed issue #18: Pyroma returns the rating as an exit code, this was a mistake. It now returns 0 on success, 1 on incorrect options and 2 if the rating is below 8. - Fixed issue #19: Implementing a custom test class counts as having tests. - 8: Philadelphia is now considered a "success" based on practical experience. 1.5 (2013-10-18) ---------------- - Fixed issue #13: Pyroma would fail if there was no description. - Dropping support for Python 3.1. It still works, but it is unsupported. - Added support for command line options, implementing #14 and #15. 1.4 (2013-05-29) ---------------- - Issue #13: Pyroma would fail when checking a package name if no source distribution could be found. - Added a check that the package has a source distribution on PyPI. 1.3.1 (2013-05-29) ------------------ - Issue #11: pyroma would fail if long_description was a non-string. - zest.releaser now only runs Pyroma on Python packages. - Because packages that use external test-runners can not get more that 9/10, this value is now also seens as acceptable when running Pyroma through zest.releaser. 1.3 (2013-03-15) ---------------- - Added a test to make sure the version number is a string. - Made sure errors were printed also when a fatal error was encountered. - Better log messages. - The zest.releaser hook is now done before tagging, as it's more useful there. Especially in conjuction with check-manifest. - Having no long_description no longer causes pyroma to fail. 1.2 (2013-03-06) ---------------- - Removed the running of tests. I always found it a bit iffy, and getting rid of it solved a lot of issues. Pyroma is now focused solely on packaging quality. - A package on PyPI with several versions will no longer return an error. - Now looks for documentation on pythonhosted.org or readthedocs.org. - Adds a hook for zest.releaser, so it can be run after doing the checkout, before uploading to PyPI. 1.1 (2013-03-05) ---------------- - Better handling if there is no package data, for example if setup.py doesn't call setup() unless you run it as the "__main__" script. - If setup.py doesn't call setup() look for a main() script and try to run it. 1.0 (2013-03-05) ---------------- - Support for Python 3.3 - Added test for PEP 386 compliance. 0.9.3 (2011-03-17) ------------------ - It's now using a ProxyStub for the PyPI xmlrpclib during tests. - Removed the Dependency rating. - Added a rating that runs tests, to see if they run. This will also take care of checking for dependencies. 0.9.2 (2011-03-13) ------------------ - Commented out the dependency test, it was too unreliable. - Fixed the ReST. - Python 3 support. 0.9.1 (2011-03-08) ------------------ - Initial release regebro-pyroma-f28f87a629e3/LICENSE.txt0000644000000000000000000000206412666777673015572 0ustar 00000000000000The MIT License Copyright (c) 2011 Lennart Regebro 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. regebro-pyroma-f28f87a629e3/MANIFEST.in0000644000000000000000000000024112666777673015500 0ustar 00000000000000include *.txt recursive-include pyroma/testdata *.py *.txt *.cfg *.html prune pyroma/testdata/complete/*.egg graft pyroma/testdata/distributions include tox.ini regebro-pyroma-f28f87a629e3/README.txt0000644000000000000000000000656412666777673015456 0ustar 00000000000000pyroma ====== Pyroma rhymes with aroma, and is a product aimed at giving a rating of how well a Python project complies with the best practices of the Python packaging ecosystem, primarily PyPI, pip, Distribute etc, as well as a list of issues that could be improved. The aim of this is both to help people make a project that is nice and usable, but also to improve the quality of Python third-party software, making it easier and more enjoyable to use the vast array of available modules for Python. It's written so that there are a library with methods to call from Python, as well as a script, also called pyroma. It can be run on a project directory before making a release: $ pyroma . On a distribution before uploading it to the CheeseShop: $ pyroma pyroma-1.0.tar.gz Or you can give it a package name on CheeseShop: $ pyroma pyroma Giving it a name on CheeseShop is the most extensive test, as it will test for several things isn't otherwise tested. In all cases the output is similar:: ------------------------------ Checking . Found pyroma ------------------------------ The packages long_description is quite short. ------------------------------ Final rating: 9/10 Cottage Cheese ------------------------------ Tests ----- This is the list of checks that are currently performed: * The package should have a name, a version and a Description. If it does not, it will receive a rating of 0. * The version number should be a string. A floating point number will work with distutils, but most other tools will fail. * The version number should comply to PEP386. * The long_description should be over a 100 characters. * Pyroma will convert your long_description to HTML using Docutils, to verify that it is possible. This guarantees pretty formatting of your description on PyPI. As long as Docutils can convert it, this passes, even if there are warnings or error in the conversion. These warnings and errors are printed to stdout so you will see them. * You should have a the following meta data fields filled in: classifiers, keywords, author, author_email, url and license. * You should have classifiers specifying the sypported Python versions. * If you are using setuptools or distribute you should specify zip_safe, as it defaults to "true" and that's probably not what you want. * If you are using setuptools or distribute you can specify a test_suite to run tests with 'setup.py test'. This makes it easy to run tests for both humans and automated tools. * If you are checking on a PyPI package, and not a local directory or local package, pyroma will check the number of owners the package has on PyPI. It should be three or more, to minimize the "Bus factor", the risk of the index owners suddenly going off-line for whatever reason. * If you are checking on a PyPI package, and not a local directory or local package, Pyroma will look for documentation for your package at pythonhosted.org and readthedocs.org. If it can't find it, it prints out a message to that effect. However, since you may have documentation elsewhere, this does not affect your rating. Credits ------- The project was created by Lennart Regebro, regebro@gmail.com The name "Pyroma" was coined by Wichert Akkerman, wichert@wiggy.net Contributors: * Godefroid Chapelle * Dmitry Vakhrushev * hugovk * Jeff Quast * Maurits van Rees regebro-pyroma-f28f87a629e3/pyroma/__init__.py0000644000000000000000000000630712666777673017373 0ustar 00000000000000import os import sys from optparse import OptionParser from pyroma import projectdata, distributiondata, pypidata, ratings import logging logging.basicConfig(level=logging.DEBUG, stream=sys.stdout, format="%(message)s") def zester(data): main_files = os.listdir(data['workingdir']) if 'setup.py' not in main_files and 'setup.cfg' not in main_files: return from zest.releaser.utils import ask if ask("Run pyroma on the package before tagging?"): rating = run('directory', os.path.abspath(data['workingdir'])) if rating < 8: if not ask("Continue?"): sys.exit(1) def main(): usage = ("usage: %prog [-a|-d|-f|-p] ") parser = OptionParser(usage) parser.add_option("-a", "--auto", dest="auto", default=False, action='store_true', help="Select mode automatically (default)",) parser.add_option("-d", "--directory", dest="directory", action='store_true', default=False, help="Run pyroma on a module in a project directory",) parser.add_option("-f", "--file", dest="file", action='store_true', default=False, help="Run pyroma on a distribution file",) parser.add_option("-p", "--pypi", dest="pypi", action='store_true', default=False, help="Run pyroma on a package on PyPI",) (options, args) = parser.parse_args() if len(args) < 1: parser.print_help() sys.exit(1) modes = (options.auto, options.directory, options.file, options.pypi) if sum([1 if x else 0 for x in modes]) > 1: print("You can only select one of the options -a, -d, -f and -p") sys.exit(1) argument = args[0] mode = 'pypi' if not any(modes) or options.auto: if os.path.isdir(argument): mode = 'directory' elif os.path.isfile(argument): mode = 'file' elif options.directory: mode = 'directory' elif options.file: mode = 'file' rating = run(mode, argument) if rating < 8: sys.exit(2) sys.exit(0) def run(mode, argument): logging.info('-'*30) logging.info('Checking ' + argument) if mode == 'directory': data = projectdata.get_data(os.path.abspath(argument)) logging.info('Found ' + data.get('name', 'nothing')) elif mode == 'file': data = distributiondata.get_data(os.path.abspath(argument)) logging.info('Found ' + data.get('name', 'nothing')) else: # It's probably a package name data = pypidata.get_data(argument) logging.info('Found ' + data.get('name', 'nothing')) rating = ratings.rate(data) logging.info('-'*30) for problem in rating[1]: # XXX It would be nice with a * pointlist instead, but that requires # that we know how wide the terminal is and nice word-breaks, so that's # for later. logging.info(problem) if rating[1]: logging.info('-'*30) logging.info('Final rating: ' + str(rating[0]) + '/10') logging.info(ratings.LEVELS[rating[0]]) logging.info('-'*30) return rating[0] regebro-pyroma-f28f87a629e3/pyroma/distributiondata.py0000644000000000000000000000166312666777673021205 0ustar 00000000000000# Extracts information from a distribution file by unpacking in a temporary # directory and then using projectdata on that. import os import shutil import tempfile import zipfile import tarfile from pyroma import projectdata def get_data(path): filename = os.path.split(path)[-1] basename, ext = os.path.splitext(filename) if basename.endswith('.tar'): basename, ignored = os.path.splitext(basename) try: tempdir = tempfile.mkdtemp() if ext in ('.bz2', '.tbz', 'tb2', '.gz', '.tgz', '.tar'): tarfile.open(name=path, mode='r:*').extractall(tempdir) elif ext in ('.zip', '.egg'): zipfile.ZipFile(path, mode='r').extractall(tempdir) else: raise ValueError('Unknown file type: ' + ext) projectpath = os.path.join(tempdir, basename) data = projectdata.get_data(projectpath) finally: shutil.rmtree(tempdir) return data regebro-pyroma-f28f87a629e3/pyroma/projectdata.py0000644000000000000000000001403712666777673020133 0ustar 00000000000000# Extracts information from a project that has a distutils setup.py file. import os import sys import logging from copy import copy from distutils import core # From six (where else?): if sys.version_info[0] == 3: def exec_(_code_, _globs_=None, _locs_=None): exec(_code_, _globs_, _locs_) else: def exec_(_code_, _globs_=None, _locs_=None): """Execute code in a namespace.""" if _globs_ is None: frame = sys._getframe(1) _globs_ = frame.f_globals if _locs_ is None: _locs_ = frame.f_locals del frame elif _locs_ is None: _locs_ = _globs_ exec("""exec _code_ in _globs_, _locs_""") class FakeContext(object): def __init__(self, path): self._path = path def __enter__(self): self._old_path = os.path.abspath(os.curdir) if self._old_path in sys.path: sys.path.remove(self._old_path) os.chdir(self._path) if self._path not in sys.path: sys.path.insert(0, self._path) self._path_appended = True else: self._path_appended = False def __exit__(self, exc_type, exc_val, exc_tb): if self._path_appended: sys.path.remove(self._path) sys.path.append(self._old_path) os.chdir(self._old_path) class SetupMonkey(object): used_setuptools = False def distutils_setup_replacement(self, **kw): self._distutils_setup(**kw) def setuptools_setup_replacement(self, **kw): self.used_setuptools = True self._setuptools_setup(**kw) def get_data(self): return self._kw def __enter__(self): import distutils.core self._distutils_setup = distutils.core.setup distutils.core.setup = self.distutils_setup_replacement try: import setuptools self._setuptools_setup = setuptools.setup setuptools.setup = self.setuptools_setup_replacement except ImportError: self._setuptools_setup = None self._kw = {} return self def __exit__(self, exc_type, exc_val, exc_tb): import distutils.core distutils.core.setup = self._distutils_setup if self._setuptools_setup is not None: import setuptools setuptools.setup = self._setuptools_setup # This is a version of distutils run_setup() that doesn't give # up just because Setuptools throws errors if you try to exec it. def run_setup(script_name, script_args=None, stop_after="run"): """Run a setup script in a somewhat controlled environment, and return the Distribution instance that drives things. This is useful if you need to find out the distribution meta-data (passed as keyword args from 'script' to 'setup()', or the contents of the config files or command-line. 'script_name' is a file that will be run with 'execfile()'; 'sys.argv[0]' will be replaced with 'script' for the duration of the call. 'script_args' is a list of strings; if supplied, 'sys.argv[1:]' will be replaced by 'script_args' for the duration of the call. 'stop_after' tells 'setup()' when to stop processing; possible values: init stop after the Distribution instance has been created and populated with the keyword arguments to 'setup()' config stop after config files have been parsed (and their data stored in the Distribution instance) commandline stop after the command-line ('sys.argv[1:]' or 'script_args') have been parsed (and the data stored in the Distribution) run [default] stop after all commands have been run (the same as if 'setup()' had been called in the usual way Returns the Distribution instance, which provides all information used to drive the Distutils. """ if stop_after not in ('init', 'config', 'commandline', 'run'): raise ValueError("invalid value for 'stop_after': %r" % stop_after) core._setup_stop_after = stop_after save_argv = sys.argv glocals = copy(globals()) glocals['__file__'] = script_name glocals['__name__'] = "__main__" try: try: sys.argv[0] = script_name if script_args is not None: sys.argv[1:] = script_args f = open(script_name) try: exec_(f.read(), glocals, glocals) finally: f.close() finally: sys.argv = save_argv core._setup_stop_after = None except Exception: logging.warn("Exception when running setup.", exc_info=True) if core._setup_distribution is None: raise RuntimeError( "'distutils.core.setup()' was never called -- " "perhaps '%s' is not a Distutils setup script?" % script_name) # I wonder if the setup script's namespace -- g and l -- would be of # any interest to callers? return core._setup_distribution def get_data(path): """ Returns data from a package directory. 'path' should be an absolute path. """ # Run the imported setup to get the metadata. with FakeContext(path): with SetupMonkey() as sm: try: distro = run_setup('setup.py', stop_after='config') metadata = {'_setuptools': sm.used_setuptools} for k, v in distro.metadata.__dict__.items(): if k[0] == '_' or not v: continue if all(not x for x in v): continue metadata[k] = v if sm.used_setuptools: for extras in ['cmdclass', 'zip_safe', 'test_suite']: v = getattr(distro, extras, None) if v is not None and v not in ([], {}): metadata[extras] = v except ImportError as e: # Either there is no setup py, or it's broken. logging.exception(e) metadata = {} return metadata regebro-pyroma-f28f87a629e3/pyroma/pypidata.py0000644000000000000000000000730712666777673017450 0ustar 00000000000000import tempfile import os import re import logging from pyroma import distributiondata try: from xmlrpc import client as xmlrpclib from urllib import request as urllib except ImportError: import xmlrpclib import urllib OWNER_RE = re.compile( r'Package Index Owner:\s*?(.*?)') READTHEDOCS_RE = re.compile(r'(https?://.*?\.readthedocs.org)') def _get_client(): # I think I should be able to monkeypatch a mock-thingy here... I think. return xmlrpclib.ServerProxy('http://pypi.python.org/pypi') def get_data(project): client = _get_client() # Pick the latest release. releases = client.package_releases(project) if not releases: # Try to find project by case-insensitive name project_name = project.lower() projects = client.search({'name': project_name}) projects = [p for p in projects if p['name'].lower() == project_name] if not projects: raise ValueError( "Did not find '%s' on PyPI. Did you misspell it?" % project) project = projects[0]['name'] releases = [p['version'] for p in reversed(projects)] release = releases[0] # Get the metadata: logging.debug("Found %s version %s" % (project, release)) data = client.release_data(project, release) # Map things around: data['long_description'] = data['description'] data['description'] = data['summary'] # Get download_urls: urls = client.release_urls(project, release) data['_pypi_downloads'] = bool(urls) # Scrape the PyPI project page for owner info: url = '/'.join(('http://pypi.python.org/pypi', project, release)) page = urllib.urlopen(url) content_type = page.headers.get('content-type', '') if '=' not in content_type: encoding = 'utf-8' else: encoding = content_type.split('=')[1] html = page.read().decode(encoding) owners = OWNER_RE.search(html).groups()[0] data['_owners'] = [x.strip() for x in owners.split(',')] logging.debug("Looking for documentation") # See if there is any docs on http://pythonhosted.org data['_packages_docs'] = False try: page = urllib.urlopen('http://pythonhosted.org/' + project) if page.code == 200: data['_packages_docs'] = True except urllib.HTTPError: pass # Maybe on readthedocs? data['_readthe_docs'] = False rtdocs = READTHEDOCS_RE.search(html) if rtdocs: page = urllib.urlopen(rtdocs.groups()[0]) if page.code == 200: data['_readthe_docs'] = True # If there is a source download, download it, and get that data. # This is done mostly to do the imports check. data['_source_download'] = False data['_setuptools'] = None # Mark as unknown, in case no sdist is found. data['_has_sdist'] = False for download in urls: if download['packagetype'] == 'sdist': # Found a source distribution. Download and analyze it. data['_has_sdist'] = True tempdir = tempfile.gettempdir() filename = download['url'].split('/')[-1] tmp = os.path.join(tempdir, filename) logging.debug("Downloading %s to verify distribution" % filename) try: with open(tmp, 'wb') as outfile: outfile.write(urllib.urlopen(download['url']).read()) ddata = distributiondata.get_data(tmp) except Exception: # Clean up the file os.unlink(tmp) raise # Combine them, with the PyPI data winning: ddata.update(data) data = ddata data['_source_download'] = True break return data regebro-pyroma-f28f87a629e3/pyroma/ratings.py0000644000000000000000000002360112666777673017277 0ustar 00000000000000# -*- coding: UTF-8 -*- # This is a collection of "tests" done on the package data. The resut of the # tests is used to give the package a rating. # # Each test has a couple of attributes. Both attributes are checked only after # the test is performed so the test can choose to set the attributes dependning # on the severity of the failure. # # fatal: If set to True, the failure of this test will cause the # package to achieve the rating of 1, which is minimum # weight: The relative importance of the test. # If the test has fatal set to True this is ignored. # # Tests have two methods: # test(data): Performs the test on the given data. Returns True for pass # False for fail and None for not applicable (meaning it will # not be counted). import re from docutils.core import publish_parts from docutils.utils import SystemMessage try: stringtypes = basestring, except NameError: stringtypes = str, LEVELS = ["This cheese seems to contain no dairy products", "Vieux Bologne", "Limburger", "Gorgonzola", "Stilton", "Brie", "Comté", "Jarlsberg", "Philadelphia", "Cottage Cheese", "Your cheese is so fresh most people think it's a cream: Mascarpone"] class BaseTest(object): fatal = False class FieldTest(BaseTest): """Tests that a specific field is in the data and is not empty or False""" def test(self, data): return bool(data.get(self.field)) def message(self): return ("Your package does not have %s data" % self.field) + ( self.fatal and '!' or '.') class Name(FieldTest): fatal = True field = 'name' class Version(FieldTest): fatal = True field = 'version' class VersionIsString(BaseTest): weight = 50 def test(self, data): # Check that the version is a string version = data.get('version') return isinstance(version, stringtypes) def message(self): return 'The version number should be a string.' VERSION_RE = re.compile(r''' ^ (?P\d+\.\d+) # minimum 'N.N' (?P(?:\.\d+)*) # any number of extra '.N' segments (?: (?P[abc]|rc) # 'a'=alpha, 'b'=beta, 'c'=release candidate # 'rc'= alias for release candidate (?P\d+(?:\.\d+)*) )? (?P(\.post(?P\d+))?(\.dev(?P\d+))?)? $''', re.VERBOSE) class PEP386Version(BaseTest): weight = 50 def test(self, data): # Check that the version number complies to PEP-386: version = data.get('version') match = VERSION_RE.search(str(version)) return match is not None def message(self): return "The package's version number does not comply with PEP-386." class Description(BaseTest): weight = 100 def test(self, data): description = data.get('description') if not description: # No description at all. That's fatal. self.fatal = True return False self.fatal = False return len(description) > 10 def message(self): if self.fatal: return 'The package had no description!' else: return ("The package's description should be longer than " "10 characters.") class LongDescription(BaseTest): weight = 50 def test(self, data): long_description = data.get('long_description', '') if not isinstance(long_description, stringtypes): long_description = '' return len(long_description) > 100 def message(self): return "The package's long_description is quite short." class Classifiers(FieldTest): weight = 100 field = 'classifiers' class PythonVersion(BaseTest): def test(self, data): self._major_version_specified = False classifiers = data.get('classifiers', []) for classifier in classifiers: parts = [p.strip() for p in classifier.split('::')] if parts[0] == 'Programming Language' and parts[1] == 'Python': if len(parts) == 2: # Specified Python, but no version. continue version = parts[2] try: float(version) except ValueError: # Not a proper Python version continue try: int(version) except ValueError: # It's a valid float, but not a valid int. Hence it's # something like "2.7" or "3.3" but not just "2" or "3". # This is a good specification, and we only need one. # Set weight to 100 and finish. self.weight = 100 return True # It's a valid int, meaning it specified "2" or "3". self._major_version_specified = True # There was some sort of failure: if self._major_version_specified: # Python 2 or 3 was specified but no more detail than that: self.weight = 25 else: # No Python version specified at all: self.weight = 100 return False def message(self): if self._major_version_specified: return "The classifiers should specify what minor versions of "\ "Python you support as well as what major version." return "You should specify what Python versions you support." class Keywords(FieldTest): weight = 20 field = 'keywords' class Author(FieldTest): weight = 100 field = 'author' class AuthorEmail(FieldTest): weight = 100 field = 'author_email' class Url(FieldTest): weight = 20 field = 'url' class License(FieldTest): weight = 50 field = 'license' class ZipSafe(BaseTest): def test(self, data): if data.get('_setuptools'): self.weight = 20 return 'zip_safe' in data else: self.weight = 0 return True def message(self): return "You are using Setuptools or Distribute but do not specify if "\ "this package is zip_safe or not. You should specify it, as "\ "it defaults to True, which you probably do not want." class TestSuite(BaseTest): def test(self, data): if data.get('_setuptools'): self.weight = 50 if 'test_suite' in data: return True if 'cmdclass' in data: if 'test' in data.get('cmdclass', []): return True return False else: self.weight = 0 return True def message(self): return "Setuptools and Distribute support running tests. By "\ "specifying a test suite, it's easy to find and run tests "\ "both for automated tools and humans." class SDist(BaseTest): weight = 100 def test(self, data): if '_has_sdist' not in data: # We aren't checking on PyPI self.weight = 0 return None return data['_has_sdist'] def message(self): return ("You have no source distribution on the Cheeseshop. " "Uploading the source distribution to the Cheeseshop ensures " "maximum availability of your package.") class PackageDocs(BaseTest): weight = 0 # Just a recommendation def test(self, data): return data.get('_packages_docs') or data.get('_readthe_docs') def message(self): return "You might want to host your documentation on pythonhosted.org"\ " or readthedocs.org." class ValidREST(BaseTest): weight = 50 def test(self, data): source = data.get('long_description', '') try: # Try to publish to HTML and see if we get an error or not. publish_parts(source=source, writer_name='html4css1') except SystemMessage as e: self._message = e.args[0].strip() return False return True def message(self): return 'Your long_description is not valid ReST: ' + self._message class BusFactor(BaseTest): def test(self, data): if '_owners' not in data: self.weight = 0 return None if len(data.get('_owners', [])) == 1: self.weight = 100 return False if len(data.get('_owners', [])) == 2: self.weight = 50 return False # Three or more, that's good. self.weight = 100 return True def message(self): return "You should have three or more owners of the project on PyPI." ALL_TESTS = [ Name(), Version(), VersionIsString(), PEP386Version(), Description(), LongDescription(), Classifiers(), PythonVersion(), Keywords(), Author(), AuthorEmail(), Url(), License(), ZipSafe(), TestSuite(), SDist(), PackageDocs(), ValidREST(), BusFactor(), ] def rate(data): if not data: # No data was gathered. Fail: return (0, ["I couldn't find any package data"]) fails = [] good = 0 bad = 0 fatality = False for test in ALL_TESTS: res = test.test(data) if res is False: fails.append(test.message()) if test.fatal: fatality = True else: bad += test.weight elif res is True: if not test.fatal: good += test.weight # If res is None, it's ignored. if fatality: # A fatal tests failed. That means we give a 0 rating: return 0, fails # Multiply good by 9, and add 1 to get a rating between # 1: All non-fatal tests failed. # 10: All tests succeeded. return (good*9)//(good+bad)+1, fails regebro-pyroma-f28f87a629e3/pyroma/testdata/complete/README.txt0000644000000000000000000000244612666777673022401 0ustar 00000000000000Complete ======== This is a test package for pyroma that is supposed to have a complete set of metadata and also runnable tests. It should score the maximum possible on package tests. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit posuere id dignissim massa molestie. regebro-pyroma-f28f87a629e3/pyroma/testdata/complete/complete/__init__.py0000644000000000000000000000007212666777673024615 0ustar 00000000000000import zope.event # Stop pyflakes complaining: zope.event regebro-pyroma-f28f87a629e3/pyroma/testdata/complete/complete/tests.py0000644000000000000000000000021412666777673024216 0ustar 00000000000000import unittest class PackageDataTest(unittest.TestCase): def test_test(self): # Stop pyflakes from compaining: pass regebro-pyroma-f28f87a629e3/pyroma/testdata/complete/setup.cfg0000644000000000000000000000006612666777673022520 0ustar 00000000000000[egg_info] tag_build = .dev1 tag_svn_revision = false regebro-pyroma-f28f87a629e3/pyroma/testdata/complete/setup.py0000644000000000000000000000221212666777673022404 0ustar 00000000000000from setuptools import setup, find_packages version = '1.0' with open('README.txt', 'rt') as readme: long_description = readme.read() setup(name='complete', version=version, description='This is a test package for pyroma.', long_description=long_description, classifiers=['Development Status :: 6 - Mature', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.1', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', ], keywords=['pypi', 'quality', 'example'], author='Lennart Regebro', author_email='regebro@gmail.com', url='http://colliberty.com', license='MIT', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, install_requires=['zope.event'], tests_require=['six'], setup_requires=['setuptools'], zip_safe=True, test_suite='complete', ) regebro-pyroma-f28f87a629e3/pyroma/testdata/custom_test/minimal/__init__.py0000644000000000000000000000000012666777673025163 0ustar 00000000000000regebro-pyroma-f28f87a629e3/pyroma/testdata/custom_test/setup.cfg0000644000000000000000000000006512666777673023260 0ustar 00000000000000[egg_info] tag_build = .dev1 tag_svn_revision = true regebro-pyroma-f28f87a629e3/pyroma/testdata/custom_test/setup.py0000644000000000000000000000114612666777673023152 0ustar 00000000000000from setuptools import setup, find_packages from setuptools.command.test import test version = '0.0foo' class CustomTest(test): pass setup(name='minimal', version=version, description="Test", classifiers=[], keywords='', author='', author_email='', url='', license='', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, install_requires=[ # -*- Extra requirements: -*- ], entry_points=""" # -*- Entry points: -*- """, cmdclass={'test': CustomTest}, ) regebro-pyroma-f28f87a629e3/pyroma/testdata/distributions/complete-1.0.dev1.tar0000644000000000000000000007400012666777673025442 0ustar 00000000000000complete-1.0.dev1/0000775000175000017500000000000012617701137015453 5ustar lregebrolregebro00000000000000complete-1.0.dev1/setup.py0000664000175000017500000000221212617645317017171 0ustar lregebrolregebro00000000000000from setuptools import setup, find_packages version = '1.0' with open('README.txt', 'rt') as readme: long_description = readme.read() setup(name='complete', version=version, description='This is a test package for pyroma.', long_description=long_description, classifiers=['Development Status :: 6 - Mature', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.1', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', ], keywords=['pypi', 'quality', 'example'], author='Lennart Regebro', author_email='regebro@gmail.com', url='http://colliberty.com', license='MIT', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, install_requires=['zope.event'], tests_require=['six'], setup_requires=['setuptools'], zip_safe=True, test_suite='complete', ) complete-1.0.dev1/README.txt0000664000175000017500000000244612421014114017140 0ustar lregebrolregebro00000000000000Complete ======== This is a test package for pyroma that is supposed to have a complete set of metadata and also runnable tests. It should score the maximum possible on package tests. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit posuere id dignissim massa molestie. complete-1.0.dev1/setup.cfg0000664000175000017500000000010012617701137017263 0ustar lregebrolregebro00000000000000[egg_info] tag_build = .dev1 tag_svn_revision = 0 tag_date = 0 complete-1.0.dev1/complete.egg-info/0000775000175000017500000000000012617701137020755 5ustar lregebrolregebro00000000000000complete-1.0.dev1/complete.egg-info/requires.txt0000664000175000017500000000001312617701137023347 0ustar lregebrolregebro00000000000000zope.event complete-1.0.dev1/complete.egg-info/zip-safe0000664000175000017500000000000112617616147022413 0ustar lregebrolregebro00000000000000 complete-1.0.dev1/complete.egg-info/top_level.txt0000664000175000017500000000001112617701137023477 0ustar lregebrolregebro00000000000000complete complete-1.0.dev1/complete.egg-info/PKG-INFO0000664000175000017500000000406412617701137022056 0ustar lregebrolregebro00000000000000Metadata-Version: 1.1 Name: complete Version: 1.0.dev1 Summary: This is a test package for pyroma. Home-page: http://colliberty.com Author: Lennart Regebro Author-email: regebro@gmail.com License: MIT Description: Complete ======== This is a test package for pyroma that is supposed to have a complete set of metadata and also runnable tests. It should score the maximum possible on package tests. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit posuere id dignissim massa molestie. Keywords: pypi,quality,example Platform: UNKNOWN Classifier: Development Status :: 6 - Mature Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.1 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 complete-1.0.dev1/complete.egg-info/SOURCES.txt0000664000175000017500000000037612617701137022647 0ustar lregebrolregebro00000000000000README.txt setup.cfg setup.py complete/__init__.py complete/tests.py complete.egg-info/PKG-INFO complete.egg-info/SOURCES.txt complete.egg-info/dependency_links.txt complete.egg-info/requires.txt complete.egg-info/top_level.txt complete.egg-info/zip-safecomplete-1.0.dev1/complete.egg-info/dependency_links.txt0000664000175000017500000000000112617701137025023 0ustar lregebrolregebro00000000000000 complete-1.0.dev1/PKG-INFO0000664000175000017500000000406412617701137016554 0ustar lregebrolregebro00000000000000Metadata-Version: 1.1 Name: complete Version: 1.0.dev1 Summary: This is a test package for pyroma. Home-page: http://colliberty.com Author: Lennart Regebro Author-email: regebro@gmail.com License: MIT Description: Complete ======== This is a test package for pyroma that is supposed to have a complete set of metadata and also runnable tests. It should score the maximum possible on package tests. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit posuere id dignissim massa molestie. Keywords: pypi,quality,example Platform: UNKNOWN Classifier: Development Status :: 6 - Mature Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.1 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 complete-1.0.dev1/complete/0000775000175000017500000000000012617701137017263 5ustar lregebrolregebro00000000000000complete-1.0.dev1/complete/__init__.py0000664000175000017500000000007112421016567021371 0ustar lregebrolregebro00000000000000import zope.event # Stop pyflakes complaining: zope.eventcomplete-1.0.dev1/complete/tests.py0000664000175000017500000000021412424171677021002 0ustar lregebrolregebro00000000000000import unittest class PackageDataTest(unittest.TestCase): def test_test(self): # Stop pyflakes from compaining: pass regebro-pyroma-f28f87a629e3/pyroma/testdata/distributions/complete-1.0.dev1.tar.bz20000644000000000000000000000452712666777673026145 0ustar 00000000000000BZh91AY&SYkN-ߐHo ` |HR*JQU*(2?TbC&dhiddhd&ɑcM44# M4#5S@PQ& =SzOCSɩ5 4ѠA)2yjy=I4i M!h+  U$CMAX|;;T\՘W lܘXϪI6sՀ";%T!ûg75?ɏo=tKځB\{.=$Qa)i3H1XL6h/4^A)ͨI'Lt.smkEξa=u;0aBXx+y+M'R0VzS9A ?-ڄyApf2Çuj<_qهF0ѳWWͳ-qRXaÄ n.nіjlC#W ̵}vx=z`vGVf΃fw,5lѻ|6lᣓ$E۵e(*Qkc8|`_ ޼oNfXA>N!1}K:G넥pֲe;REҸ7ћm `bLb r)JhRe5ͨҔ`Wud$%χdtB a^TӺs8p/-,||gEDg HYmCefѰ39?CP ɠ_"N],ʡ=>d.-č>fV " ZcX quWYvEG6eCO<>Caw@rfķy?]ܭz4Cg6G~0ȳ[xpБنd.Bh3.Mنo:F j7/#$vjI$GĬyݞav0g6[)\U5h8VR,A4m&^q!`t~fztI7KI6wfnf< ;[,N( 4N2&/ G,qi"2# & 3L L] B\58Xo:3<;XJ 7lF e$\A`FoEfq :ڍ:l4X[7{h0 Э5a <' 0ÇEƍ`}[(vH`gd9K 1 V`Cz0ųHÓD,;dթ99^s"gfLqQ " 2gd vyCv\9vsDlф(W5a ޭաBI@ 3e aZ0K# !Qls=as Q[ɫs6l1PS a %,Q!5POD7Q$jdRXl P$BdݻCY`6H)kag6Na; ՓA Ʌd?C <*k(s9TyІ]0^9B9rM{OsAv;ϩC6@s`naX*hz` 4O!hPx+w `j5a ǧAٛ!ٻ ƮfÇ|4}f۝T J-24iͣVlZ#k:6;KB옎tüuQZՁCe qM.C6}iC#@"wdh 7e]Z55lFQrd B Py5}u#Ӟ:= j ށգ'Ssg9Se j4|G7W'SfL %:״}twlŸwݮfCroQ;v'[6N7;[85<ڵ% -灷ɛMi&gr!&N8H iŠregebro-pyroma-f28f87a629e3/pyroma/testdata/distributions/complete-1.0.dev1.tar.gz0000644000000000000000000000415512666777673026065 0ustar 00000000000000_?Vdist/complete-1.0.dev1.tar\Yo#73E j;Ov;v` ݔL Ś_b:|DL[f3`d:ʒ\ +àb4b4p4l~8p4aot A{3k\z?O=AlVa9waz:$WLg "Y $ϴ-K0i{sz.Ն#q" *KXHܖdہ8>92vUEHfUXd}\,p˴i}: ɴhQɍvb];ZA_ziTC u%cf1M c]̧V8i#v@[|_? ;a? &۹0.3#b&>$rOcd.JLgmeN`Lc񝀄%ԍĺ ze3>`dn^)wmŕIe.M7{@8`Xi3݆2eK|X-%m( <+bٺ;wpO9V Xtޜ;<@ p7B΢OcuU )a#uRFu;t;d rNq7{;dP g"e1j{OOXbMmPJRL8X";ur=7"<㷷HZ˔e:el4PBKsY*"9MrmY aەWEKnrԼR.Sr<+BJzCv!b3"ka5o,f\mm*P合+S]0=aTrG{S*:PB1(TT9?W }Նg ;]TjWv,8zkSV?bq*n(ʯj38wR_bgGR~K(s߰N"I.xKi-tk[|Ms]J毵T2' MdۧlN(3{|*YY>: U(J"Eo!NQ_$@8q҄(]_?3ȿhZiG^*þn?$o/ 'e6˧罾ؽʟ.~|{ dy9 HQ}(c8?acXeV]Ll֫8hgj gjfjfVD͖d\OȞ$ϢmplZMZMʮβmn2۶bBYʾ1s]PW:Ůn'cv۪V?uJ-F/lÝ-/nѣGw_}$lo4|)OU?`.LtE7J?2?Ԧ'k*~6TLI+|Dd*:]SFOO?Q(G?O_t/FUP9P {Ac1q)wB8B:u=Z:{~8 pfx \Sn q4f|ά|whWåxِׯz9Y=`[B@ @ @ @ @ a~N5/xregebro-pyroma-f28f87a629e3/pyroma/testdata/distributions/complete-1.0.dev1.zip0000644000000000000000000001213112666777673025453 0ustar 00000000000000PKqhGTcomplete-1.0.dev1/setup.pyTN0+V$ViWP4$±=_6i{of,7QdmeKb$y'ѐ8O$cIͿMkЃ#,k&2K򅓖2[w8I#5e0U$&`<@0 %x@` ai6T 5쫡 KfOI[f3ra:+pqt䐥`z:pK WT:RPWM'Z^' ^'p/N^~}~We[+c?5$Hk%86Ae⎴Tы3؟SRemxMCN |!Dɂ=] ~iѺPMIdd9^HK%2f 5Q|M4thA:0^.CcH{\Q(Fw=N>PKSERj&complete-1.0.dev1/README.txtTIA )|V߀b}޿I,j_UnyO`G78JZtqoso_.'_.򻖄7ٲ&zkҩ\(Is P96S/oBiD=6>8. uDl״pҭ]yW}',ڻR'bؼ׬K=h-MYj!EPO%#Q‰*ݭE0B%hc N+E;bdרMep2܅4Ltਣ} ~D`4q"MԠd0)`V,xR+&rz!E10М1m W镧̍Y t;MgHD0vAyK0~kԀfɺ)mE!+.*`gf8(pYm9ޑ +ZVib꥝{EݚfhC=/^ 'Q:]]9ad[54rg F?ɿ}9vcR=$7qkLq2?PK}hG7@complete-1.0.dev1/setup.cfgNMOKˏ*ILO*IQUKI-3eg% )%`PK}hG:Z{4complete-1.0.dev1/PKG-INFOUnF}WL)@@Eز['; 5%)QrZ g̜sfy/ g*1i]׫5;neuZ#Sq㡣;M?,)_ڄH!jiG͛>XEՇw!vt'sl9J(N?owϫI}!}~DWWJRĞP?5{;8!!fA`ϒK$6:hoI斞0bΚCl˷ +qƨkh/PhUSYtK%zF;~ ~^ M`4з(P2bRbXEՇw!vt'sl9J(N?owϫI}!}~DWWJRĞP?5{;8!!fA`ϒK$6:hoI斞0bΚCl˷ +qƨkh/PhUSYtK%zF;~ ~^ M`4з(P2bRb<={vQ;|wxU䊱WS>c?}%KoމxI{uο~|>Vpw]q/ /y't*S֍68e$lԟ!ٸS#i6gVie;*Ɗ'b\PV%u$,/4T3NעRLX".e IR2%ǂ5p'\%l*I g3@92Kˉ©L* e-\o@Mpdc3} :R.MHDqrZ2Eu HV0T~pP^D@<*fi ῱bRRu%B8Ndɉh*]gYSUQHUjǘ^YP1]hU3q2{HF¡xiX BY4=5ĬFbLJ XPI`m){DiHKOsԝHtl,*M |AhBOoN ط;TZqr*.k AM9Je҅e3DFB) NlLK%-@4xJ$p(HZrx\!q1%n$JqMy@5;t'caTN);5&Ր2; gN`-rڝG$_)b5yI:Owx>rM֥ŞacAK s.8H*&@xcj >ږgyN@by]L3DֵqԮ"yd *{ȬY ' lxbfg.faGN%Źw tj# + H":/!{F:Cr1tR3h=%* Jeۛx"(}i ;cIeL9-t<)0ţҞ@[ќF0.0a4%dEo4?Dݨ39t7#j\SYlZ=Rx,=!x֡w0İhܠ&ܞӑEEɓ Z sO"9q [OK2p-EZCa?'AEG/ ^C̡j`A b1l}FI[P B$8@: %![(1J t=sOP!4xj6ؔA6з~ ?"&V;ek{~)'rŕ[1 bfQ\l@9dSRd|"OOC2cp \nY +?2ECӉ֍26 }k)v U@}N/?#vw 5,ZMTq5߼)r,xS'pH@ř]nGKpƿ-low#8Y~2,I>V{v1=^,E )>(cF?h%:߬e*C|SM5p`? Ɍ&QB8$AưQp.N j"TmF!f_U)"h02+@a?2y=~n0B&jV!i}Sy̐h|Ԓ 5VW.3&Md jsʨ('aO2q%/mx~wSuo5i#V'.ܪO݈Ne}m/.cR]^|~t{^{<[:[V[q]WcD||{YU IJY6d$,Ucw#^͑F1uuq N1;LDhkbo*d h+ֻoC\<)MlD0K*5yY+"Ko|V/+[l oc$5 چ]՘ t,-$ԏ7#XdժGPDo}:aHϓ9jf'4j`J%v `%&SyZG++[C554eJ|j! \ ,sֱ016e* Q <ߥ "DNHcRHxVsDCX[lmfj-r5slTS>S!Ty2b?Y[2(H@$ӐMrFhw6a*Pw+#y*8I.+!zTe 8f*xa}VRYNU-oJF4>DB" |4P6d 222ʎl#(qGo'%M] n7H?uPH>3f)𠁈:LA]*ptjQ)K~cĵ|ҖnLW0unA8c U` XJ4D_ &|ʶћSQ3k'X] \_ֽJ@p~f6BҼ"եV试׉]8iW*aO$lqk93 +6\\1"sGoy0i>fVRi9 +IBi8ߍxRM >(Ea~zc+`yF O)@@ԳM8)w3Fr5A;  LǮ=2GQH0Ǹ|Bg_x2.WQs}JQ6D v/\Hz[hH=8:L o]\~7 Yxމ8ExϡUiS6E<4!$SwrI9$uvC`sA9oM2; "z*uUanܬOC\:ہr@~aF,&UR"ǃ<8Glށ0ijJ|TJ ;;b~xfyaAލⴉMy9>@~ dgq y$zs0q2Av|=bÕo[@~tޮu 0Fɍu@)6{Q䔝祂36DkI-ÓZ~9#!jYbj6 ĐhRN1=r(͗;qdFY^]^_+CDžn91].ZAp>"'l fnmlY$&z ?1I2`[%pb䪕VXn &uf~|ac22$׶Ee+btĮ8dHpP %oٟ)~)q. [ƑUk]6c _[KaBS5G`*K>&m 7܂КL7d옖Ɍ峾]߂3HԸM]>TkX˺lRIj;m/wk%۪ Wqf9DOv7߮n.//x:8_Op7:,n$S]]`6cѰbzXnp:L5߾Oyw攧% 6aHgdccd@̐\][3;-5T({@sq48M0h<l]:[c)Ǚz^KjD]~r|qB ip* EMӳH= :koewRsA"LQ`hl$xfL=pm:LʶT1t5(N/Z3#S[a8{&]h5"!QD`x j'4ME_UlH}22j#0c0)AaW6iGtv%3,@B1ffpކo𴁥EThN˻وC>99o{2NbS|E uckr3.M#RG@Gfz޻v 7 yR{HEfG2fiFSWo(1Ms6٣QlPjFIqMTah;ZFSԯٍL9/suU:˂e:nXݘ/!\纡ge@/h|ZC1%@RTlQ^; uv]Ȍ0m2"{Z \H ?J)/u<ߚZ&;pT\(=zDƤh+Fba CIϴ7&em]gߵi"@J.oRPt YFc"1s}/D!-k0XVw [Ϸ6Wn )33qxhS ÛX]7zENvWJZMfu6F U90ֿ+ƫ7KS-ޔg+St |uӖMO7y1mՒ,_j#ES^d #^ſ݉[.ao r)5'hfxѧyWoU=$Yh5ދLO>w].Gsn~f_>ߟ$F1N?dG(8}|:՟矔RU?Z߻}?}p{w}ާKT9T?$WZ^|0'dU>igUyx"E\g',vǐ%A cۖ'BDs4Xv,<=ѿ$>‰{XC͋lG7:k8KST^:[ }*DJ,gxߧ$$NTH7 ü_x]_qY:O4WG.&J̍DՅ8Ub>z̑{ `D K 2yc퍇wFeH^ Ǟy ` Ksr&jb4}_#8ӁO׫94.8*-7Lqb%`4|I'n?IdOIޟkݻG>~?؅;xX?n+.!?5}8]L̠ M}Hk4#yn|+'}kBj $3Z Gx!c'oT9D7rcX"[oV-狩k8zk9sMh( W{$'ՙ , 2$jK)f_X&5%}LvhjyvϗŴiu?=y !Foywc2x][ӞM|CTv%}cȻνNT=tޒ3vd[Jw/\pk`a} 7ޣ(]j kG}ʕn%wb4 O9>+ʩ["8=\Ona)Ć;mlwO4&m_YFw>|~~~~~~~~~~~wدw|O/|!3OQXꉯkOR˛ _,6 ԰7p8@a5AXW%V8O`Z47+]mb受D r,sFuu%HIzKDӜ% $ pf iйi{j?!=9IS>_۪'LYqlR)w̠YTYXnP[w!rY_氿S9ʃs ɸIPP!,r^f;* v OjK_WaZQCg\{܏O0I+V2Hp0 B#j "P"{_+W!#/0 )u~Fq9KWOa<7Zg#,eccƚ7ʹh'#82|(rj[{7ZrCD]ۣt}UHcЈ`&+_ {N_ vr])aJ e^ n@ 6ʹz/p.2 YߚacuRM1hXk>#hA^y“/ f[Ό?ܹS< B J3,bL% e,YvJcWI}$)~:n/ Pg0uHٴAL^134K;XGV1Mo> HĚ`q*2ԭrj6k/iTJRŷ,*?Ѹr[ ыxύ8n;YwP7IO=jyBtȯTq]Lv|E{f=nB T/w+gz4 an٬lDѯ 틬ZϷQՋÏׯa=N[rqa ܄^a*NBB='E9idwER=-B.^c鸭LCԍFU%<\u}?\Mԯ떹afuu}>Xf*v-gJrT՗xZV{~K xϓ0zzX/6)-f0kG<9K,Fh H|hxm@:b3oU0n O2Y"٣~r 4!E~qȞ|=#"q<>w#sD>36bhj޾%=9[lM*PMl Y&\Ӥ܄Wz^gEv3)v^h{z|k*xzvFoW/HxM˽_q QN,MXBtv ̊@ /r#Rrt-ЍQzƪu:S.bJ!آ$]+jb3215R)E~ENbP]eT" OkV?$yYVp~>/~\=zpyIeWł #1W`f3iْm}t]p72GG;|[9?~NNPWAJ{JiHRA8WzilKIQ8=>l-0\,HSg"8!jw rG"/Z L6] #*'UgF0EN7^k~ec9p^ݍ )x߳PkNND⹋"ŔNA̢Vߢ}w&blHo) JI#_ b=1;mW.Ujw1߻p_vJ_9bT_u3+\mMSv)ǷvK!VL,->'dr%u=&yi% bSit("amV| hx6")[#,*hRᄑ' l)(E&r(L~i)ԝ(礇 !-JV|`()Y#U oBwo*aBRsGwޡG2$WZLv "TӖaezړs^RSh?Oh\U3vfmj'D#%L)sJ?]eۈII]Gza$tvʕ$Նbj)#i.}h%*ChL7u7Q %Zc# *$ iY9%r5.O~x9(E!Ua 9sx7ݻ{QႏN4}^ſv.oY01ׇ}Ԇnv{>ܡEY@97\lBY`t;w$IyGLD#`pv_Oۼ㟝ň頎ZJbTLE(s]Qdek޾~ǿnW+qhUe6" ɏ80?Y^Epso>"5}%r%b3129l\AE( n>畅Ȱ*mj6j B3}I?e5JOA(~1 v"J%oQF + j"?Oy BDfH\o8n;x8tns!"T#pl O4\fF,oOWed+R6 ?y#J_YVStF?0")2g鸒BQ<2obj׵_ToBa郆FX;{8S6uLÅ,~d iKޛ3bSĭM4[H{揂aK]tt 4$NB . AvZȀ,((wrbU^1BPz7+VVN %+4Jga-;h|b/fr1%@ %*QD NcrN !'s& C8c f6cޟcpov[Npd Yx/?&pOS9'7/o_&OYqOY;'G"+Izf[| +~ͬPk sooz<}D>MyB;E0W7mߡt3O_-Bzl6Rڱ*^?eKE8ڀ?U۝?۬&,'`B+_srގlFX?5kz# &zEW߬^Dg'k2>woOף:1 lk՜Gwoߡ?a >EH,f5ۉ&o+kY%Iq("9{z -ިE%̋ل-F/^H'@ɾgnL$S(eSM7zvR)9+@=>GҮhuMO#lG̏d(҉ש;ث;ht,m2?$a u;wO/__o7%*}wCţw-bNwȃ"!)}|| #H_]GɀۨW94"囷_yճ᯸đVʘ3 4 rY:bsnC夌 #vYA ҿlJ,YU#*98"q`^.8~x탓7 sm契u5 ϛ\oVOUeluxH0F_KE{ ,β NT.dN;i?=%@!#+I|H&+# -VXy=^rDxx{x}]#ҳG# F#F#|9ʧ)޻(}??yTJY˝<$Kbq; v;-|@ E!2Bkp*j3p:ȷ*VL7sSD_g9]ZJA s/" Zo% }1ucW?|YT>?(x¿jKФ\WGh nc9Acb` sȊҾ6 5Kh g4ZjO}whyC)v-V()^>KdvwU}C z˃ڗ~5ϟ=Y51eiH&?-"J. x94C.Fn85m v6enjØ̏;z'k=oYƨ7or44#-*va's .1.&zxugŪZGDyp<<: a0cinokm*3Fv [XeOksuhcq߶ߩw_>,R*p'p9lj.U#?p,*ݫ[%+Ed-ߔ?2®(aYUGb1+7bL@K 44!H8Nm]&, 5 Xn!T\UU%#7FDB3M.Ōx+B<䉪7 Q@'D8ʂBt/Rj!NY1RYf/dk3|)q@3dBW4J; f}+9ouR!;VB@ > U>eiH%0AsҞa )t+k;:%_ƀ<*FgU m). P>'W*d$4J_곱 o'!Ͽ{5DŽ)w'Br$Oy 7H`f^i pSɓsպ{O#L7׬@Ozuc~:8H}4?Y9hUz߼x)F57_Շ$SD0o*OuOO@K Dcc>S>gχ@X>.YCd wOf;R߸kJ&NtsmNu;ʊ12(/Nn}k::?=^8ic- HyI;TpTȣz ڌ%WxF9dۡ??q н˿wtރw'_#(g*nj>']j|яOyw1^jFWOR%o1=>?=b Nycj'y}#?-HEzޔGwvХn8|jwC/hֵR/E^= tĩC?Wb tX` 78a^߃{OPO/! ]5K#C._?|=Ǡ?ܻE:Lo5't?`^lѽ'ǷV|Yhy$Et/stp x?_>N a$I0lW.JMGFNo3 .:\u Y;T:]X{o? L 0<#Ek -f}vQnj:LmS}&~5Z]븎}7|\bm꼾 x'ߜa7hهp;GV-LR93Oe"QDfm2aގnv`z\S&~xw5ttwZ~4n7}F ,.qvk>|=I`9{aV[>Z/5BrGl1)臇Gw簫WhP+zt;BCO^?RV8a:?3qi'bLbRa4JF~gvFGW4XQ?=kp0EJ=~MOѱ<]vJGɗk;[goBǯ۳?}7ؿO_~lR6k^$xFJqw/OozrQى>~Bc iFR]v4,cʦPx^42qMgD0 ;Ya8my8fsQA|ɇk|,TDXQKlt\Ч|ԟ'/n]BE4l_WqxyZ+dSĦ3LwTZH@nvTRa~dxJ.5^K l=ŏo !dki[ç=>|lPukjP7 \ ?<q[AxAÿ^W#߀{ۍu:ͶɶvHB?447-9~oPLߡz݋g[}g?S8'0@$$ċz?9S['|/*~R Gb1?T b}9?t"~sq -o[4I~≔f7/? ͭm4we 7Y ƙ Yn$vQ=BѠO* }[0(ڀ<ߦo6'"@:ACQ֑/F!0 JN?_grr~_ݻ5/T0:,/Ňh`c.$,5CƥF/TKI^_=WoߠHMiE (79}|K6VgӐ_&G]~1zVJb"ڌ% QpaL! \?Hyq0>y̎͠XqpN$AmQk;ƌ~áai:"7zu%j` F0\2L~^\A4=T\7I{;fHc%1S p_,ggeOCf4X~ip ]_(IZig0(׺~]+#kߘ YC>]Snײso{;6@,z]cVC8tY~/!{/bSg(z~уO7T bz4U"#%OϦ80SQ%gYu %)H}$|iKV-|tW%WX*ͷX Y ֭~R#.,eUTa -M*JUuۑ 4#?Lz9Pm.lObHbCEoðI3T g3aH_e[8SAiCZhA.?So}Wi+.+vlč]HX;Dj4>i+!ns$KOsQq݂K,㡣C(ʾbdY¡Z+iΫ(UAV os7x yg++~+]b <6 MxL98L / wzT{3W3 `Pc \ ZivIttbfV^&IKHv'Yt{6ןֱmK1:>TԺex]Al-/##y GD!~5FtWva"Pbv y#WY1B1 >[R6DJÊk- Kzx;4 BAoYU4v+W.-ϥb0 {X9$8‘36[\˷:L+fjDU. ὺ,9E׼]gDLl' ͔;@~^ XUB_JKMtlBq:(.p\o ^ag_N^aztTrn`oep 0XdB*/ִFR@'-.%$>4|4bAo mlQc"N?]~;GFL sHgp {S\ `d6 J5 ŷIVI6V+T gr&`= u?K]RX_MˑH +Zr6Hm{X֯lȈ~C & 7|nDyرOuW8cfٔHiJ rhs>6ZvQ'2/p ?2(`oGܮ?ܹ ?O~z~%ih^ ᤏdQ70F徍.bqP`Xm!p Tm*~넓B2Upjs*2j3Y6+DW/~Ml|Z DŮ2͠AǂX#[cqαDTE5 ǂXYnQ5rT~ǫ@ 5-2jWEJE9JuBMCp(P@28Ir3_-+Jlyq$^mL7In(,I}qϠvz3t:|ggh*}QnL1o֚gU8C?V ЗPYm-*a#}lgZ6IqϷ J X$7_L`XÈ6Heqw& EBF O:X2sPUPF= =}xgx wh.PvPI!θ,ZU^ה4C$eMY¿DrO:VIbd'!+SH&Y E{orlqczTXⵠzYݙ%[1l6hDkHsQ9~`spb S많% MK Vɵ5W2_od=gR,lhyxC^U5qD ͢밆O6+)HOe"[V嚫Z5U^oB>sȔd8uE :jd}̾7ùr&*${QB3i$URʗsai1%++ڎe]Zw(E,_j NAhQV|R2bĤRǤ MWai+-̒5f uŦfK ^FNX 'Ա5y;/a`vFLk--T*tgsGV_~IUyc^ydf C3r3ۀpw$SqEZh!+7}7b'̸(\CK*|Y7EcGUF5Q p%Maiv%Dk4˴t=J⮆f#LIJ7 qvTZ'fSbƜ!p~j WW_xB2*.PѸp!ћ&ڵ79*UR)T;,憔8c!e;./ jE,y%,WX=kV܄vGn%+x%p9КHTTܔłe1H3Dq_GT1AVwf.,~Y"Vd`n@*ymhj~ڳ:dAqp_JP^PU~B|+ 'n\{ѵg\nD:g/f5OɜL$t}h>lηyck`CG:'ohc1<^]&g?8!m,[rqƒR*`@2+Fbq-.[G;.l!&K ӂzm'XF}Fx Ǽ1ƀ)8,Z=%tD5lޗ(alR Sw ͒Uj9MZ*X#-sH$6Z;o0dgUGY̥KǤ3r:|+G``J!&8DZC g5#=Q" ^tGL(ƈk"@Z#lhx(yYǭg )]Rm9kΌQ. %V#;O.5ۦws "mk!o-txļ^`b;Ze{4 fh,QT%aȱ)<=16H6?r4g 2:I BY3*^T J{OTK6tP4"UL^܋{Q'RY@=U5&Bf9#q]OIO3un̫'όH b JҮlHփ/2!Dp_x*<%/X،=)ډ[Bo $=޺t=^q]zNM$A[NFy0jw S :sqC%+HVvQRľn#hpJjnOmkZW+J%BHy80l>Yo%@|VE;H}^p+2| Ɯmxo ʀxH$-^1k3Gi(vDenx;j-V%5^\4 =9C@"j$'R^ڊH-t5b{EVx`!4-fM/>샧ss4{S$sE^K䌓PIxoܓT].Bz!`r`^ L%1`ܔIC9bRKČ#ep؍:$8!.ρ"MU2I y!,gZ%z~]'GEF't*1t 6f*Uo32E[x\NTN>|MW@w5 bć4&XO'і0vm~ƭ&WM]\W,b Tb t#!DVHb:5c׬{$7 W $cRGNsw<;:E@OqQjnSmsb 1,2&:5IǨfsӫod+<3o^Tlsd4W!;V4lTvX (BQ>9'+8b`|UbY_5?9pF@4i5qn:&v]Fa\8)I°4:FZI!Q1'𔹃4SƄ7& g~4Q@SQIDib h%oX1DrOMr˸\zCLN;Xb.[wg3 u!jҋYmjr(}" !FOއSn7^Үϱw-qջXϫ9wF4a)_&a ۠zcX_]6Jo6%VٌfE f9؇mӛVYh B0H=C!\5·qI'l?j7 e<8d+s25jVC%B&hYxoWrf0G췔7֌x`h(@o1ͯ(#{Kitt>ayW.̼`0*іLK]inicO 1J r ѨČ+S1> CŔ74B-5šj=pu;1>Igò6,!.yk92ruGhOt"%¢>7 :t 'DqEI nܞ5_\ƚa2-TzT_3<ⷉ L4J?|Px3#,!h4&vZ7>,x`-vLc"-ʏ]奱YyrTOxG,dIr/Ж F*hoYUr"V ULG;hhmLbOJ *Ns=؂ޏGPQ;ADԬ5"9  eS22u E dY8Kʨvr8냮W V)P/lsyH8I8Bph/ת5|^`i8O#Ea S=p\Ex<%vgrY`m0 f;$ᔤy@1ۆ=:>5`kK<4%X%uz ]!i#e(֑@0r& nziq7 <9>_ˠ-g B3 Xk&/UlW"a sU%x]ɀ WplB7't47,svgɾ 7SHn8q L !á 0SJ`GjON4ۛ(J%JB"6&9AOxG@a'83 tNlK!)P<,ы~*0 Q*:Nj`8}"{&HLqHcoq͎%UܩiAg돢NA'PFeU3IR5n+Q)3Z_U)l>@=x,r-Qd?Wy1!6r,±4Y4H>$CXOP4bJ!I+ c"Z,%јq r,YDfs֩yEȑY:|H9;L\ ^иj㋉`nYw]T iI:$Ud Em&Crb6PnE,h%"b0.qKzMэ&ϯXFЉQR~efDSxrHS:P.'0o?B7w U|U0-閒+kDBcЦȠtq(#{9DWN"> 4L/ 9ʪ=Gq}8w竌ja7[v5FYSz^{PlUy 荨 4e3E_ !ZC zH5zOܹ_$!r+DG-qi>%F`,Lo|yB*5q265=Wen*I|<@fX{._0 m, gi`~zڥl + pL,OC2u'TUkվahVb–a$19/+&RXɎӆyBAM#F<[Ǖer7%O{!#4ҟ 2ʣ?~^ӗ,wܔ%,%NS$GAϨ5 IhZprlj7U!;7wA+@@Q׀$NС?$ ɧ 4X"n>Od+<~ M̳*_sWb=J:݃m;*J`f1Y?  EC٭4JB-Ac SN<*fY~nlkًRku:4@WBLW*Dt!^{ҲϪ;E ;Y4AU}`[Lo?C4<(XlKWʧp=Il>uZB_ ѧaKZXB%q/D/xX8 <%jrTb { Q"UhPw=iSe$9<6fذ? |[C"EdQQV[q]blI˪vEҫ\-S1͹X?z+tҡTѶ@n<;s4Cj246c}-ޘ.dSi耰}-Qpg7jPv؏FYkʁo-lQ#hA5r~*Zb$H b-^ʐ|ddsC,cJ o./1t {wѮ/)6ReTrի" Gb]=_ekDmХt.ǦDJs-.ԃkqvEq"9l,ZGp*4F #[;&hMMZ# nyaJ&ѤD֬#6DS(J #JţbAӲ+cVg),ԏ?5*vc_-N7.qfB h~j3*0[iv]V!'Z;s&ԖI$nKqM 75Agom m"V] r VJtט0xmPp4l?X t40! YjEZO7K`ǵ<%(RXC~J+j{p1%:B*[$ɮ,@ >+,C8NuBX|Ж+ vY,Vz/"liҎD :S3B;h8G]8y>nn+֏#ʃ`wɉ-}`T퓳Q3yrI)mᐆF這*ɾ =CO1Aߩ|fؠQƄ-HEC>.0yT!Rd H޺=*ֲ @L΁"&ғG$郶R{ȟ** {֊{ȭ ~yBs`w#x~P{lan( v$*~ ~<|>KF‹;, vL| Q /s*I@%#qpb|@%./j ))l:w;p<~YR Qz<?M;+> w=8-oQ~_=(;?zt{xwzl"ߢMZtOa#J8hg R)r䐘 ƟdFf3*j # +UsZ}{>]2fe<\i4mM¶ԡI_l('R>*Pi9j]]bUD.y6)jbP!0VLGU'ymŋN]I9>ZGH0v`Q% e:!2H+) $DV+Z - M!恇J3%9+(,Ϋ,*W6}gwj¯+C( F˭T(6>FjXB|?:O5Km`Lfx$,m (L+!#f{KLv F =D"D#qPF𸄹WELɄ\5T1TeI\4 tvFbXMBnlg (j<_0JqԘe[>FM'BP̎g[!K أ |ۛj؉d.jTyAPVrCr>șDlݐSom\U݋#(Hr+(P=`W'!K/ÁIcH*ZŢ!=<qd9^I(Fc>k4j-ԙH=r^@]rGE@p>I#|n*CqVqU7)`'l ݯJ -'5qi;E;BCرC0 2zJi*E(UV Wc9悌 ]jBXuT v^qew#?z6Tq wZyVb|;C!( *381.)ߜ(eh^ê`A;HOp'1#_OQyBe cŐ#<\ _䚔xNeDEp ŵȈeqz8^Ȧy nz ̼9aׁH}Hsf!8QDi~Pv)x%0(tP 7M,KaiA V\dqsV~g:=QNڬP o6 {1 " 'te?vG#|>aa)n6)5@kg S,G!<.!fd)Rڒmw7h< Ů.=ҹDb OWqs@<6T+W֜y]|{Q*Sb'p*< tk$~fA! OD`StyJK[Ѻ#U`^&uy2 ˚8sZl.}l<0#o:I uMS(f[%f[$TO ҡFN@JbVl&7<6TN0P PU|ܲo|A VXV"([g7|w,q(m`f NcZ)M_%,=(49r^,+1`bȹ,l׼Cz;723?QK=lTĊ׃v{Y۱Zzo-!'x4$U!+9~XZy0cN4ߺY73uDtz>A{ Ejā$9FiI$C_JƉڗ4?PoPC M&քe$rvdr|(Υ;ß0_e)Im fqy_1!p"{UG7 zM%ԈbNX 4<(AKo\olibj4rMvq[ QE<]9~DDT1N}-ܙXMUe%pY$ 9|7Ak&Q'--*ǡyUzՐ@𶉜} A7Bb!cIX`NjU[RM-N%Ta02W%и o=X]"꿗0C<PnN\EYbȉEc&I\L*ig_`rv,DU"(D(\J,ymFCli2>|wcl'JZ /A-EaMZSd ?UrL^0|l HlL25|EWxk"$q㋀(YjQCĨe=$D;.*5S:iV p;`;I$غUwɊeu78sx.[2@Qk-ꮯ]G- kĿjp-;Gh4%wz()0dMmxf]_=QrEu0 J4SK,ǥT`}R=#=@{f>VwjZ(HC@e'JRi%1!8 ڔ[9U홏 ^nzb)q"\"Hl<- A";2$ʁ9&A\4]! fk{h,͡XAzsL,Jچew~AsEUYI*6fިn匨o^lV,GE,kz,KXe98,w ,4I2ԟjL0=X?Zaň2VډyP x{jW~_l}|WgnpK0lS.z7lhDSKQedī:H dW=@86_hfJM7‰ &+GbGyQ|WE6DN)mXR.FWX4碿܎rN QʊUdgJZ ^,NԖ:cאxٕ2:_̖sY汳 f~oގ7э};cJр3ὁx/M >gUM&uOCTc <E2jv GChUoR$:/AeO٢n uX*2.yjL4<חNЯi;[bѱC<4;&K^h}cFhK;Iv8\8\]A!=(T>WzQ:`etFfߖƾwJD;V_ 'Ky~dK ?R]W>./f)9MLcRlIe9Wƌ[∅koOmwySMY!fkd,O?X.ŧчJ}NY*d]h"`#e5K&Ѡ}Mv"S((I03Z11 ދP^k kQFXm ZM [ǣLPfzIǧ_ YD&g%:9ߋ̏^yy`Z9\L,vݎ!EZkCxh;98Qo6BjȒ)9d&[,'[Nn5%/f- 9cՠ$lGA yC XԱJ =kD1:P]c;y-,`!Z -snm.?[p6m6uA,Ez;l9U#9*dgJW}0Nu(]#3{ȠưX=<0]U5K@5Ңck#pErNy<#Y\J.R[5ЫK˺'{`)OVk3r(Z;˱4^5,=RH?Ϊ<$e#+*\':{?޼g'_={oyk?z^:'pFog3%eD!l3.ӺY 3ҔdS'%$XN) .Z 輡bR-)q%ZhRN߉5[TBj$\3rG8آyE'm*&} OjY6`t%f*G!Q׋4yi6:0Wc8vDi-w9d`{2_;"I"-Ί%gtq**>})jm'= So"PG&#pQff;W:o_kxi~VU%ʰ{ ^Zoܓ`6r'7_{w*D$V]9;ȚT= 0?@慧7U#v+ɳLoݫW V;jYLVoQVqs4 wv( O4!-*x+wD e/ZT}Uյ !+u+::0 `mTͥ%IZٓRi.'Vk, $}@ٹ&z65|^`(, 0SXvf+j놶8,4 %܈}fU%D*s( [8Jz{Tj>b@Zx࠷_/B2[2cKpҒʽ;%E4C- % X&nI [oޛ}'zG1skɔ>ցI} /#Wm/nRndg߳CMKsG4K=-P!~j v^|vۿωxybh$ [Pi.IkK) 9 h%A?)kA08[|5LGFn沮">GE5+VP?om?Q>I.{ 6ӷke^f I yO|]~p[~m}~%myYS-f&cB_A"J-EU W ;U}t[Ś2sZHe{tZ42 Ajv$R.e'ouy:Ҋg fqA}rAngN9 2t&W0'<:H)k ys_3r!ݵh۹E辢o&"f' tUq;Bc,撺%eQ: {q!W 2Ξ;yy%{)xIR`m$^|5X35G FX ' d-\J aGٻ?>Er^rÃH|M:kֶ3Ic4Z:?:mG6uqѨ"VI3GK`l+&Nv<\vEe|i [>S\)zYf;p7NtKCzl}g{4 Ը3[z8b7:E‘Nj<1"6(elϜpAy35DNhV 2Z,üⓜmoh%:,i u\l8 &q1Ewg-qR@Bq~w$~Ǽy{]-Oςa'X$,JS'8+ت!!!}cd̬=LZel|ГP=.FIWenrqaJ~?S8<΁E#2|h+r.љ,{<5B&_![6ylrAEA%M-Ƕ,܍swiOZ=c7RrN5K/yK!I/;b!$8{@2 !P[5Kxi{I)Zc*]pm(v2Q]1O hQkw!H[zUַВ J+%1M H2Iaܙl7@|Q Yv[ϻ]ՠˆOYe9]MYL,.~CeeD1 } &Yd}43䃫?PC}1YfQ~JY寡\+N~Ԑc>m6> }49HҞ~[itp~#IXRgcd=jw L2.% ERB}OVg+hD ȧ7H@Nu0RPʴ&/̓ctڰ;3%4O({;Ĩ3oPд}UR-2^U3Iܻ9Zxp"ZsЂ?*Lab#,V"vJ@ lDGa*[?A;6.YG$??EH@!;w":ɴ1xb65oPk3ǁk:Ydb56qN$x(/GaO^&\-?=* {j)jr!Q\:Y֓Oe mQv>B]Nc'QWdפ>K -,mSqB,pih.].TJFZ~+V}nOW/G񓯞(}@+ BAf^L9"gSy/7 Բ(7wB|6PyOm,11j º>D!% ZffR^RuKwRo)( cB-6`<_'nhJxo@WS;Qd~]_OPtސ(^"fs*1 l>;AQ+8dZ] I@@$|'v"'y+vʫ+wٺnmR1S޾xAZ9} S`Cw=negg age^Z}dJ;N 1SEYte>n4P237' bvGBu쀻`,('tMB?fD;]\"+QHoTcW;#3 q$׋}ͨTUBzvbLv9P%9?>c5W$j4eRp9Gu `JZ rq~~Pa9I`lLUE[gܪ'Vo~W(1= \g\4aSRxG( 4L AY`YaKg9#Lz1I:Spa[=^,ƬL|ZJ1 (Jl*mL62FPd"(5*#*[lLYNK))*d?O9aڐ6%(09^SQ|Ke%5x́[v6o>XU x#n nPhެmnxmxqR=\\p[3>*{c]$^Hucmy/_2^ S(k2$r)7>  d-bCʶ(to*BD*8CHZ,r3q_-ŏ(R?:w[$&2%5^;ʱI$I呏aU15be|J+m $q.eGBt'KSD,W{wIOZB-;ӪA,(@gYR曔S$/h(պڅū7F6 0y\Iu~R.@XL}Ux <8]U2ZTxkUY&I= bl#'?\!7.Q?Ry鲀knEANlna"bd RI.x*nf563K# Am]0O z%u+ icsK4ƲhHjqV}]'YRٔJ+g%)9[\wd@b]#z9 cEƩ]\5$n%p,5G RYoUn5㴝ȄG13oCݓm56ߒTP ~XR ŒkIvxVL+K\}5^Ӌ3桚J̵'b\UAWy](.:Ɛc"N4"q8Uc! ˆR~b+riG頃yUQj`#eE$}/D}l'i"MC(ZBPg\S5fE˔&ٝIY%S 7ԳFJ0L]Rk1rrq |@ekZTCمX)B`vA 躿j> SBoقntP$6 _O"t&#Qe4b^$I-+h{d F<|2%Vl>yxo #9qu>xGWƌE Km7Q62 LaŠX21G$xP<_5 ܽ)Te) ~mXC33"ς 퍶"YI)pqZ<cpiIrJQ[ԌwVu?&Um&MTEh# Քp_,#ZWtr2*u>L̵[߈3!h Q-*# =pߨ̅8]VVIWB i n5i/&er\DQ r\D|YSV"g ^n7*~I`c?)GvC:a9*V3W F|܀X%e{NKE@vv: 1+ 8DM`y T%]/D ,cY +O%UUkg)#j4C[DesR k%aoMLʸr_-(ʗQB`k\ڿjmVjSꅌ-C6MKC#.@JC{LӕԥZ2Jߕ \{v0]ѐ"N3Cy>RdܬehQ2 SD|dD%tf<XvN_5u+Zvac,osCKgK%RjdGX29/wUS{ _Ӟ7~pjZ> ˝Ago"/븠~V#fbَXU;7ɠTRp#v͂{}ե tIWgU^bɖV|$0qC"f0jq:+FX?Y _E#b/˹PnBM/^MܰGqdbnmXCƠBחpQZ]XEg̠AqvȽA8(/aj*Mm M!LFA;™я<\m4 f Xu O@-N0c1u)1/73 Ej:g[YG*"@:HQ3$QT8z1Ą+C\1' _(iEYzkŨJs.Ai9Zs’U{`A9>VBlTBML-*C(ӵm7[z0lEmpIc?K8P }t^p7%ʊzȎMhIjxbbuX{쭴\ɼE\/~eviyA9 .H,$LO@[$S݇!ŲHgŬp d`Mg0MW5R $˪Mo*69%ߐjqq`#g5gr52{hOBH_?(i319V͓ș5;( ZIxXXoṪb%Q`xT׹&i8Q 8F]|B#+>[++ I T8hz*-]hK eƥ8r x x1"5 D?r@v,0No3Y$jN.*a=@ ۨl~! Q̝Π#ޭ! Ӕ;sA'[T\ CuZ>8cwD+b}lV鸣nFK_lC5B<^:#/;)M~_aH\9/XPj>'  2':VO F,eAԇY @g{2p?_ E(JB=>=P%joPm轁[fC oVSs-&dơX*EG_ gJ1nyjb‡U'ꬦZ-ϒHKe,% UudR^ul◴3_~uxxGV@ ;arK*MWpRnO0ETd4>zn9<[@!Z%S m;|do]ZLSuys("KSI`87~#>c*hi6 7fD />\3s">MXV-֒\r109 :?٬*WL#q&,IH+"NbC9,4h1#\ZA( gș䗰V1SSХdJ V{VǚWSZ*8S) ;@7VYf+@b,W&PwQ[XJ^NmvEXESsQ&њF"ݲDì$ VV%I7K."*rvump.,hAhkZ6삄U\8Ź𕍴Fp/sFZC!oT 9ہ:G'z<4۷3)a}h^e$bQ0 XgH5:9( QӾ PwNaQ2Bg'!ʦ(FWk F&p\{y%]#31GD9~DjÖ3B#u! p`Alܮ/L wc]C8`ސ3LfRʯ_oh6&$qp^n.RҘN"9 տ˦ﮰ~&[%!<59րu( nip崯)/2\za%OsP(2Gq/,mo޺܋ն]#`AB Y/P)I2rƍa2x|pߔ'u15ptmaMՌW*+!\ǭ)V np=gS @fԊ7Jfl.D ]M˓̓Vt@pQQEq0:M{I*X<,7zbN?v )>ĵ@]Ѣ`rV?ƇA84c[t|c(Lpw K!Eq'D n; .-Dx(6ߩf{RʜW.b.\̛cFk0 ñ{XÑ~g0N=~ǔn8R+Xc4[g 5ƱQw!.bK~l[%c։;Z& ySs80~ ZQN\LRk Ϫo35#hp9-ZH@'2|{"GTI yT]FY6LzReݵ  r3 Tpj$^d%"[k%D<b̋?'53OIĪ߮HC$p xARmh^UwʜzK-7a/-MzbGh^FO[s@ P~MQ˖̥9$A}t|v.)hjWZ3F;o78Lýna^I)#DD1|= (n`0#`*E:+^bu/1{>KC|+sfKbAW2׽R;BIA|qx`:("ahAMAHD޹K~gACbrDC[͂3W5! N Z*X􄫸.dP/Lw6G3ط<= ƋL:2Nߐ5D} C5gg9 o9|U`Imb $=L,>U:8 cҘef5A+T7D᝟;x=1c?b~S#5e)cUdLֿy|E %`^j2R#Vafi:qXP $R `~W 8^Y9ȸl@ībنB2 ]>0 ЙMHSmXbUIĞLA<646p^Xwwي䬌IhM"6%ɔ=s.,ǗHmY0lNqծ<+cBNqkS˘:>6m_j6s%6fz d1o\@ w} )rvx_x'ҷ U^'&Ϸ [(I 1^M_0l6:vQ~rfR5[&v,5CrWPtjA :\1髉`HҜUܒx`5`LUh3!,:2kҿ>"ͻUewBQ6\)7?<{tܧWD sD &Fq#iҐM4+@^,fiw Ԙ^Z{P}RGa 7Y9MV3^+iVhhEqdWU[Ckh1*__N,TT RqJ ! (FB( d 'dQ &oI\Q#IU^%ݐj.1'T )>NBJYU}:;'LD#c `/]~ʼn :!xFIiF|HPUkF\w<|W~^؝F h\j 4Ylz~EHl{(|`?L-XNXfK6 '"ݪZ}`9-Ķ"rCe؏@><@c4.hFɁ~_9/ iPS%BitْQ`kxnXd#A( !r-`)3;B̊j^pO4a ЅiXoY,nԳU&Xc5]q, T}^ڞNYmWpAjQDom)_ )֯~JK9[_ ntu#EgN*َ)ڋbf@ƱXi1C- miu~ SF(";8'IwN y*g 8/_'h1\ ds*"*rGZEXᥬ$dH.3~F3TOQW<߱:`x-.ou@32V.LUiysԾZv[\*#9'3`6YL6s3#4B[qQPRL(ȅF|?P>sa B=w= ӆ8mZ7A>8雛F(Fc9?Ж玼7Tɛ+&%F1FIFroV.$>O/K,W_qWzx:a%+6' zzzt[nJ6`c*L/tG&N_|q v Z+OTk)GymYEUTghDUlzJ04U Ħ@,ߞV"RJc!*Cźج5&Y/J2l3^)A&h#rF-v8_G(_TM@礓qUV6۬8E;Ҋu>8!)W|'$0a= ڏ4A!VOYA̰8M$;9hGJ6c4gZ8Z&pQOx9H &W.;#`RB+mr[9H7 ?] ;JKWS)gVvY[A!ugV]AobƝ1l?# ŷ`=Y^ZTNr{g.#;k2{t }P \9w۽Np&i\lצ!8 &f3_ i RmpÉ<%"n8`,K72_  Zd$P \=NԖp[Xo˘[og}v-: ;Χ=1_zDi,h&9|hb5D 8%a$Q.k-/rἬd#ʎ&zi="[ >"VIJ/NaE[Aܛ9mIEN\bc1 "pR4+^e9=7\Zf/*2r.x_0Y}Ld6PFߡ7웘6P#xٓhNSv0\LŠD,Qם7e0 $8Io*e$ڽC!UyP&\J $[q $X'nIc`Jru~kY,G%<%dg}#h]m-!,N//)b`%NO;KG 'KCBgd DѮrD6Tf"$W2 dr; 婱qx"59ŤP&GOsF;jQF,UĂ9bWK&rWI'D>\rȹd(Ko7軃0MF(vH D$r<7~||}ݻw,ՈPMywX.i}%o"FEj2tTlpC ym$s3FK% 7&_%Q>ׇ! (@k4Y7=a3H &8XIfg!eN%x]a@9gT|#{`\#荡ߜM{>K4A瘜%tI-^o&;2LAȘOпQsHUom*:֩MxK|H~Eeԇ:ė -wfzqQr;WT3юB xd 8)LR!"_ev`f_^'#G+`eؼJVBu#clݥnCt0Ҟ;4Ms WՒi@_-T9,;0K̤y1 w ]D yFֆ3'($2/vkEefbX"{]%N N6yGU![LQzp<a=dg&bUDZ e} FCwVTcq6{y[ZJ d"K_ۋDd&:Y_IF L8ԃ<m^ .\Dos'&b[dM#C]_)тZngWR.Da$%ej-T ҆{GqdȌ*!$+gAk4dO b;]3^)C@t*CBu1(5l0²?ig"ꜷ3D"ROAQ%`*ŔDh?l )r? s G R^ţ{;1ᆾ@/ Q~1jWG#vSDߏ}iuUYR{XضX%(`'(u2L~wF`>w{kw|C,fז2 r` FM6f_lj6Cfp]a2tRhpPӌ\ƚpS]d+Mͦ*n_5'C['`&O*~!<¾y($Q5!_᏷AUb<­tU[`p.W ؃92[ tM\1?V-!O/0-.! fR+o' }8#%0phk\M.ua 14NĆq8YG]Cw0N MB*2.'D|l8$xp#zoz\24KR*@* Nk֝%5e aRq4g#rJq[dQr}vvzxeC񧽓 TQSND&* |584)YwNxcB":_[ 8V $CAwK:ssN 2dhmItv*Fv$`U JoS#6M/>R4󄼃T~v6 Pc<d .aeG3t>x˵y1JD$kŞ*$}r|߿av˿Z$DCkiVp<+`k?t^L)+ ʒSᰈ !%QzĄ{hKO w񚲐mPA.0 F r#W\kN!n0{.@OO4,/gH_}d/H$3<]AJ3;D"Q1!քixSƶegyDL%VXJgK d ILfsqL˕-ywy{b҇ƕdP_ N+"H~HdM'YӮzPY  ВqkxXK9ʹ[SC@dΓZj芿iKu˜1C}TT<\V긧bk25+(<u}D*E\feSG+>TV4B /*^#Pao|9Љ}Cinǰρxkjj# tx{y=^B j2FKIǏoJĮ|VZ۪b<E9L I^#ٻK+ '=*^bm]ahe>es{ٸ!wl%5ZL:_?(;u(WĭB>ƒkC ט5I@*^ Ry-C(mh>Z(n'5#MP1d=)w<  ;F}q.Ч&Bu"8j?@sVPn~QbZI14;4\O\dm{2}Cy0{li4^[4eut dWEyum_puX?IyLu&II½fi_Qɠ[Qؕ^(B^V~bl$7QH=#%.+ "-k4|T2pU. 85e]zy p+M-/ }m3) kx uljKX 5^G>J;;:uƽ>.J2ը0?5Z໭50kmُ]؝A3*KbnV?"(zQnѻlrEZKH6jS$d˫3oQkR !=#;6s(eT& RJU_rYr*\w"@j(FᨙTFI@uZDR"'ܣgɎp^*tYVhVpd4K.V}d*p?O[VN{Gnl , %t39Z`b {=zD%ҽ0KdT39. Q4)f6lIFנ_*lEaVAgc4eg҇͝vzn\E׸\.L|o!(ϧ|R6to2">cW8Ƌj6a'tëV6Kֈ,nLic8袎 QNn$$`x5zյ$f% B%{O?o1?| Q;Β6sƞ*qLq#/>+8 )0d.Ք^@ȼ%66 Qke̽HvrI󚫖e:f`ax|[%Xx!"~N0`C4:iQHBn+?E d_:LOR6i -jt!:}{vDž'j i.Xc,];15~#K0UIdm:$ H L W )FK³,Nolᥙh yGl; PHԵ3C 6fa84qmz>) , \("mH u FɧgBa$r U8YKo%uj'i"!y8{_m5M5 &"{CP2hm Vd5==4 &'&8GS1~S\b$ Jy x$uj\>Uy%We/DַѥJrؤ1FH ƬY /1&<!Gw'*Fk ѝ-VܩU|>ͣwz?!lDzdn6RRIb*Av(Kyjj$~ /HV A-xۘZF&oem>XK$-BV {? &B);>eq9\p򡝴*qr2 jMb5?J'O~û_+t~kJapIK¿?G>Qf*}"*3\eW٩u@a^qht#z'USڟPO_aXUY7YH̵KH2 &_z{ P9n(m3B7t9?XN=&9!Ɖo$& qNDdC\{3d%hd6l˒m2`PM0RT>E@<b<(t'5O@_||ɓӡi^#^Grk+ CV6AyGQk w'HhТqѣi2vMJWϛ7Y QdP ʫF_7jhҳp+V3. uF=YPS2PKN1A}Nj,Jt+1Z8:;;+>((dszd=#dqV0pup<V`mE@F!Yy30`9dIOfH.'xj7U-ά)⬮!ý#g ?}^ |/+*HAbar'dpX`oǧ; 7UwS3(1 GU%nP޾=M;Ü.pw\D$g [ksH*p ]G/A/n9 OI'EKD~6b QyTM~Bd/ZdE > qY$c%b<jp}^&j)vG2iGd=/\y$l"w"jQ`kEbޡKFCDߒcF̷1Np@ѭ2i1s;IH[{0>vG !()c)0,Ro8&glQK9-Fat b !qdzvkLp麒k $CalJiV+i&!'+G%[`MaLR#p.%,ݓBv3K#vA{Q@uz~{VN&U@\ Oz $hE >nCkce:ZcGi`$<o+uNSS_x!ހ:ĸęP#mb|C lzdrM4JE,F.ضKbw&Inj$QaɚMb+΁Tb leHgAsr(e" I҅6sV>D`GN+R3 guUlD_(1V5Oj(E/:)HYN$jBjdK!Z2CاV7(H§I!Z~q1"3F%B~%XWi&; FB'4eId(pw)싊:aɷΙ]3V6K g+jPm3+iHIcMaVQ8_*ȣE,]qyy"5L&Qn'D*a-6*+LJ|@p0VhDgp4|x_2vk7`\"y6 ŖyC}F4\DD1gR_Pb1ť0P2/Q]#Of2 B bWL;ّu ᤜS?՚rq9Vr=fc]g`,+m7R( #I |ϽG4n*^.,f5cC܁w7!!2I1 hj .j :<(u Qb|WbPfF_km,wS)E8BU?VMhY;h{ T, q&Qԅ!H'?L|偖3URBYZ6Rބ5pHr*0x+h D)bAI:$n2нr=ۗb2(u.`1lG|N5{ chOB 'ڹ߸Qmfp,_]RZن;'d Ll!7 jY s@i`bo*Fwٲ:&Bǩq#!]RLFWVQWy ^ϪA\nzgfEt&~SeQr `˶P["C8 =ݩbuIJX: {1 =o)͒tlͷ n$):j# ˹S&s vSEr*r y= ے).D +1|ٖ1XqAđN/߲|G_Nj"F8H v`QȶJߝIfs^Sd*k!tt-*rlG5oaV_D mт]``@$ N qUDZhe/V]haTRK<2CBVFql!;1W<|^$;vB̊P+|F|A{5^[޺?d*6FUIf7N_ryD9I@DG8 su c4%BR{kzCp+J1;NZ~n5?$(r۳Ǿo8$ M)kR1"$ނqՖ}d.Po!4%߿8Sl37 Z`S/ &߳ۍZ y >Dd Cjp )#$GjaRhpǖ)Txtg =L 66 #߅ ^[xײ~*#h^LS׸ N9K`g5XbP(i tۂx닭voI$Õs- RiX 5g>m 2$8f\vqk20oj 0yJ#'B}0W-M-I4ኑZ~Bʪ8?Ǻem0Q7zªHy)Gz/6["ܶP|S7'3=d[tB;2ԭr5HrȈIO>nSP9IC 3/ Pb0?a¦P*2=('\=ݐ:P&Na -{G_ɜHM\*Sb!G}{}2y8P4#w; \ՂxϪd/p(Tf 84wT;5d26=*9d0J`1Tlږ roeC]IAqb Qڈ}֐EљTM`2MIBAt68ĥ$GRQ]et5Np)if#P#[w3EhȤQGO|_;zjehF:_IoXWchf'JvҢQt[jZ\HsNEP>6KL PN'lG;XW `x+zP̴4>" @2bO0"V`2kbQjM#viF[eNq\Ô#քb經p3v ӮIW"ۉFi[u!,/`?(@CU|zh?l3/Cqt+ώNbJ3 d4"x ukf,H&3$MTmg̣ $mztӨ{V=-$; _rK#iPt4H|*q8v ųPFmo%n8#KnlIDU*>U# 5G΁)FO褖UUA3h\&/醱`CW")h]H_*.{m"3&l+ VOXXmr}(JODȤ3H3rx)hK$؛#1b9ݪ qշC϶O?F3݇z+4l{4-(J/%ۜ 4sCzy8is>.<5`,A3qjn0T?[d,ABQ1EK<ȸQDFrppՉA U6*b Lye2SJ҈Y<D)ʛ *tY05CpqOLڕ,PlRY^)g(Llt>l4qWX٦$!0V6X9ܞpRST^XmkS[C- $o_NP@ճXDZG(%ePh-aoL3KvZV>8tcbsPE5U7Dl2s8r!D6މi=^(5*h躈8ob RPiM^JcB#ˌz%bI34YB?ĥϓ-L%yXHs(LJ\._Ty!TqRūBn={I] Xke u3"kN ҕbԤDG=/"vaoDYvKǯ\tfReZn5ۂ;uOPQK&ۊ@R+x@Kx6]Cc-ȸr}Q8I%CL__B3^n+lZ܀:H67"_{Ivy$qp~9 A 80OʨB,*W : -B QXKdX>]! SShl Vps-!*ӺYI_Fb:Ή%kRmˠD"$/I Kku&axvo;;[0 k/5EOu1`#rѦjEoQxpŏ J_m ogx}ϊ. ,jiױ>6e. a|*dh;C%ƊGXJA%,xAӼ5Y,$DHD-4Pވt~zLCUP)#+LH!Ң#+#7 Ѱ*fɅ.Jf)aOl/0A\:$\qR"0 F[ ݬ"^LkQ<F0 ^"}jF W(x-7+^Lx`lZ&ȈNSŝ"Gxw5 i(ؾ-R"*`ivVLE<^6D!ʞa:ܨ1ΠLH\ٶ=fv~ɰ3 $ ] aVyOt%^{եT+yЇ[QkRzt? =O#a/u4_\~v#+%):e7, JVN,Ռ/֋ azѷ9EœK giBP(UhwYmHZb8HT-*4O Pk BZa9` BˬUT7ICI5inWeT5QYtq\G4xP߷(I ?j?u5T]#_JQ+N,Q+)ɵldXmʁ0ܛcy_B Zq8:iH߾3֊1kLiΣ:yZzhNe8Awz2NWM dd|>aA[%֤]n[Vm88#6VPO.?'F RZ HClR8dk{),E+VU Hw3fexխ|>\,~eɊp./k\9 z M;6s;^]H`"C,mwvidy,ٝ͢Rt:M!lå'teIG&+: *~0hZ3έ+rC(_$vy%Y v*|)~[\Xn: .Do(Z-:U{M2€]G :)DI]f'8\k0xɘj:-yeOa'(LA!A}HFP.ur6s"JL\WnWCd+v%`xY٢[?xgk8z41dP-J ^5E nv1;)=A e״_Z%\!OjdhT.Jٺ}&Η2D/iʜuHwIbXwT9~S1f.YIP>ر XY"@&<}G|Ylٔ+U {n^Fp 6c2~(bT[kYC"1\Sjދꄲ+5S#tM 'ʸ3|HGE:å"qjʖS3͂+`JP9r3R4Cs! 9V'|uu@Umr%w2N%6Eݺ*/^7ɒHY&.")NӜU,9i!054$k"y &/`raucCܟGoH]6yBVbHh0yg(3mnz!{OA{kJ)xFUI\GVa: uq,hҳ`_p:! bF 9Hx;p~0a(AФ{7.kQ\joKY HG殁2: )zX_qeC]]}bruA֏#m̒:޵p7hW'nX3ٮm:N>֯z/ ӟЛ{`e ը idKM؍fv{ƹ[Akf?;Rqgy_קIo;҅dW~Sn?xzGxdȖͪkIs-"X/sѮϱ$ eiN}kZK0>Ḷ3ު@wԁc^qƺ C;<"WFjwID7EW8R vʚs⮢5͒?8=.}:w9x UX]cFZ˶ٕr/Uux`'N) !$=3W`=ϸBXEHiT/)۪Җ|~ݺ-Pxz;0ݐ2MzPzl qgO&+DG6qݕR.ۜ m/o4b oP"?V '>YEܓD0-&p4Uz6f鲮($mv uem.ʪ{VN70g4Wq`RG:MCKQo֪gXĴJʙ'Z`X(1uL7= v (rŤO7zg \TsLWc%&D$pyM#.IJkhNQgk:"莓SQv] L} )$ R 3qzėAy@, aITyͩ( N%4F\r-/ 2j< mGT"e hvsԟ3/[ G65sַtYT-uq ($; + Kf{1G.򷁺[!W Cjb:y~L:ȊMY^5sML!C+wqq"p i/_\zM!Ҹ,ZU0Bط-%ֻe<.H! jwwqQ>Q6WT*.LP1z-ggfK ˲WȖ}",ycSYtV[g~p-<:T7J>υKswmE1Cǔ,p!zFw,m'_ب̖I|a҅*IJ1%sBi2܁o3g_ME,EôLxmؼuh%KΊ|Z]ax+8@rFBD%|] 併{W`"I˙ n.ݒV3Df/I.|׏̻vYS=LIĽL/΂aݮ|I5r?) H$yɒ[h5]e'/QIubGʔypʔQIg}6%Xk0LqиQ/`d7(.zdyʜF5^Xfi -#)2mH񹬷"*"Np G5zhKrOj}* HF'N&@ ^ޅ+1)9{Ϋ m0YtK - cZ(r3ձE Qk?jj9k@ hı"`r-4C:(vpmPԆ'(9jxStbR{7sRIjh TgB&=`D_ xeu=>Ց#JlFΑ–_Gor[FfV/2왂mnqP\Cf8Ɗt\fk(ƨ'?kgc6܍9CF,)E>{ћ31ŗqȕvPBsGpfŋOOSBRGߛ̯ FOh{H4 F8CabVte~;kDpHܣ:LDmDNf'-WOOPJryb3`BPYqK+>(T f4Y1ؠ Y23-Dt>GDG cAS`vr{͔S{Ẅ́rFSRuЖtǴM޸%a|}:HLq~ĽÒƮ.%W-qj?G)*cуr1nWzY%~' .5 >q\-Α+G9 P81dYW4T?)>T91][7%`/ nN^+}e(M41m؝$wCHϧ^yzq.{:j`gg NpqL]RRLERQm-LP/ nȤy+CnWWQ Β^7MR;OgD glMD FRBu pTŞWT|կj>g"!RczD`DI#.tYfQȊlr QFf9L|33*][d$6CR h$џ{E4.jU*BѯG/&<|2Q^+s ¿[G 3Rw PM9[E[㚕i"4pA2Bm8>'fޑDU<8P,q[h26_pqݻVb >$q<48#آm46hiw.ܖN3UTdjg*-jQ.ъtW塣#[oP̢"ośnu6=\c.CK8x_/ϡ 77^ wDfDT,?Ϳ޳_1 iDSɫkL>כaNvm5"3tzgAXY^^"FO;lA#JƅeD:fXqv*Q-<#+{U!\D)EvsBM- AzK&3tǗ&O$Bn}+'5#-MtݯU"a1DQ!dϚp3fIݯ"Wڰֶ>61He; %Jх'37GMYG22C9~vD3iPE9]ޞa ;l!,Hk RvҘzTׂś)\e=qn/ kD$wL.RGQ1}+56$wUQaa r,Z=WlW ϳ^Å\A!z +8᠛&ŽőyI9CBB㗚īeCn*wCzfQ Lױt- I,"UbmP]nuÅ۠I5̐0}ӌ}_HC -p vMh CUGG蔼~9BpQ/W*!| 7^ |mK2trw`D3+g-"qșOՔdT]F7WJ>N!Fj `J=rˎi|=z^'AtBܢL:ޙl /wp@RI OWl0#;؀*IWwmP{rt h̘X <6cA#UAoil^/\$޸S*]ˆ\@tхܮA#W(ל܆4)E>2w~6YJR/^niwi_B.~mtpmB'c~`nT>$"%ʔyuE*,5Fpu!qx+u?y{Sbq]n&+d=A0 PAI.dq!ݞrR'bv״R+tqTԪɄ+'.F)&Njl=wz4r?%SMZ+AŸ ;tI!@G #\:9/wmd)7'o ~-Nԑ, ×׳rG*IzؖF2㓛LݎI$b&K> Q ʎy)h,yH-E*[)^Ptϓ(a䉥=z%>T<0T >:)oHOeG'|ȉYuyAb 16T*jj2 9 QV$k\|U=!LCU,]kxV¤(a՝NxM#3?狰5ۦ.6]͵*:ܾIһB=DRmAv+8$QtSؒdv" KJN Ic==c(`JNXx_wf=Q:+\bYtQ`=:pk,IudTmSeL`>^U˭Ck5'&+nZ '\㵐|")@*#zKSt0'( kIey#գ}Dj|NAC`̞XV-aT+6) _)J"ᦠ+Up$TZꩼ|@>("Yz&/(@D))cE58!;݋mޠ,zKyIkIB*4EW)xe:y1!I^Y;yLԷ|dM?/:9#њ,B)F*p5ب8T$اz#(i% "EY]v?61,C^ fs$jI5h ƪP ,! ?գ76貨hH1FXӫ7IE!ьHٕ@2{WDQF dFkq.Ewm暜Il{p8gՍ&>DZj!kdʜ+‵i PdM,va%Q(+1*[0y;x|qqNA?vFl1+CbҀ";$ NX[8 읁:~i% M)CA;6QP]U84ڰ k4ISo<NJEd]{x2u~H|6m@$eYǖEt Z[pLSj4JhI+| WiˈXVnдؼjO >%^:Grl|߫ULWW0) g'Vpuivz[]c&n3KO 7f*.yS1Oz(A Յ!T]mJ`os'Jԓ9W+LvlB6bETZ_fry)1S.M@$Ogg_oMGW;].n<"QL'N==)[l0{1m( f+dӴWT|bGHOu`P"c{g`zwh6)ؼrT)s^PyS 72յDee1pnDR:oؒ kI8.+߬HReM`I,-;p"؉"'Ջy{X(j}dXI 1탼Ь}[,LSNmvZ]QtON4@8tKϲ Svi?I qy; KoMp,[.}C< P@ĺO! ]9nKeBTtS1÷x-Wa$N=y0BGE<`:}Cr~誺r悲Zwt'o9nI,ycGh(<

^ W[1HIvUE+ ؔǨH]fIËN72AP&9:X> ]P׈M,r:^"We,<\mZŔO;B2;?_>'M)c#>-v@Σ\hK'P߆A7jq#i9@%I%É3I+X#Vccݗà?9ao z. {r7eBEn8}lz> @)M@re PQShϡE"ㅸsQ6u>r!?$7e/&WM`eQYޭ_M,b1W`d2IÄ"w'4в^Il$HW%qDdLH$rX8kXP8Н/3?ƒ u!|@H"Ip;U$d. %&twy,3qǹ) ϵ`yhpx7g*q-7jKpHKP*͜MI󯿞)1Dq\JIh];:l/*wޏJ27l!jΧP49xQ+}Sؖ%iLϹ}+kd~e{1bjI-W)E\fp?Vn%:%0bs$$`-Kk[o6Ih@B xDp@ "( &X&l֗@& tfN X a?;g @suyp"#D/h {c\@Bq|M%-G )4YJRQn˳p.˭6~٭G1#th&/*|F t4wn#a,g{[ҀbHTh#JHRQ|&^ BO b$D<땭:N뚵]ZT=TtuԛӖNdVLؔ-+Pz9A*e - KXݵS}Aco ssTʽ J"5)Q6ֲpkسG,hS,{P1x ?*D ((քWu6i,)ï(ݣ w~`0U5'F| cAÂL] &I#ׯѩ]}[zC3̌NE Ytɟ}Ibh|>~,IQq4vJ2sO{w??^C-}I>9czr9$$6썎 bQM>MO Rje~}޽G?ݹ)l1Y:YDS%,Umw9^t.^aN'P!SIZ lVbq̈=Owٓqj؏E I0]jgXI~q$j9B-L?qDI3߷Z_F5FI,!#rxcd:HOș}d$y''ʴzq1ל҄xU O:3QWZ _hu1\˹n&aof7ǝfG''4+ ud^<|✫Oؙb" qBaVF=p=%l#\$Jܞfnw(?Jӕ"ٳ4svY4fɹ<8?"#}Pw[Z`hOWYXڻྭ[2tM3<^۠"r)LsT绣(2\7@! :~,K.6U噓C?$gSf$3ɥP'J[:ch12xXsWQ|sajϧ!L)#yKMp'(lVnfo EFt^4$GGM2'uT MX3,K_1ڧ{`]J$Njß&Ad|$\pBWᢀ[_ӬRJ2d%%4>OJ竖+HΗ:\%m6?~cX_yVIiv\ :BQX{2HfǾAAXRg|Ͻ9 xotIk eQ~A4'j1[97b [BOn=˿ &ռ *}peS$.P̛x[>mD Px.y:H9Hr8v,Uָ&OHYPʤt!O),0yC7jz,Hoɩnda-Ǐv2$`/d $p9iclG(/&@*4[]sۖۥ\mދr Wui5*BkA>iaGGܤLR8Gӌ50}0U,ӪN$D(_eBC}א؜(hk߂KCU3&tȰT? H'kA+N G7I#.\JDG8 ah}~%w{Gfxً#~4ZjǺxW]YYz<*)T^OgǘP_2'䲠fD$R%QVzU_}4)r^5F ¹w\do)bEM+kWiĿ~߿&UBqޣyL UYnl-[8Jf`[t_֘G Kd|޶#\iՓ6be CFf]Wh8|m6h>" bM X˽eJEd=>:1\{Ƚۣ8L%Zqj~rNO򃡙x957~S)+zn .P&n 499yLX⧴pfݻ{o%zٵ;WB2|n0XyfHnwpYï-e(bc,yc<6c8 n? NAL]~?W> G'ǿFD9}!#VVv=BOFQ#yRNKc^-w+)#WMA:@w6&S7*gkgMQ-HBa^` .G~?w>H܈U2g0(v><?g n_g郇YǔU ;ӻÿÝ{w{ym̔136٦?6 FG1p;޽]O9;=JԟL,‰Ix>'7?eq]'MUTQNZ">CNG;w?KNUwΝ{~g̉P`/>ʓHc^ 7COt?p/;Sr=-ŝ/e]omnf,Y OUufmշ~{,:_}c.)/|~9E哫Əf^&LGޝ?}jJ"y?.?Ȭ=CTܮfeG`uxiO~gH{g`v72YZ~O-al [vßNݳNYirYyL%׶OVt?/C=YSQ(ARLT+{GxLG?,dnQθ[;w׼[ptNp''ۼOCbOn_MNϟ=|~7M躇Go{t3auxynz}t?/d&yxV$~`G/&s]%KcUI۝s5Zj6O$ < 39a)ga]TNpp%CϤqYr*:Jȁן:4lja 0QN[T>(ҧO?> ,zWtcs|h$/4^PMr|`C!5k; q>_}O'?Mv~qH0^aej. cR"kUnl=3 /ß`9Q#2Hm030Rom B?ykꆟ_~LBrf&6&~/}[[A^޿\Ũ"j>}ƐTwכ+<ݸ}$W JsǍfЬHnv ݽ{7}TrA~ϾjjgJe~|L<]o?0oga0e~B/pn;!ћB]|jk'>;!pa{HŦ_so\})Kǽr>/h *K;^r3{N-?^}+TnYqК4zK/h߇fi~7~жz&#m>Byn~$ڻˏzU=+ЧwGSkg7`)7nx3~?K%b KTgD*gW2j%ġ" ci(e8 ȻȎ);r{NrwEɬr?Q V-: D 'HuTO!EZfBSyS ػfmV3gK DJࣹ062b7h ^GgdƨW7DiVt cenFpA)gC u@4bA7 שJ@p1 B h.fu%f_:9aR2&u!l#vfјRۺP$U(A)=4.1DOQHT-ӟbQY2 e_ o4>bdig҅3wm8pJ1SwocP%hmF@]7οTrUP7%&DHBțIEŖgaU%CJWOsi˞?e|BNsKN|B0'mwTk&>@cPl$ANP .[陧)rl O@¾d\ЖMZ2oyJ1K4$ƒAETI4UVcM'xۧB$"&Q-[mLa^|i4̒EK1%:BYE(;$v'BijeT[n-?T?8QRHG5BZ6.QqI\)R*Ü[>*=bRrH_|) 2xhm ,†nMLg.F`01q&V=m\"bX "OdOy]OO"6 /eC ;wH ;|HLP Թ }1@ t?8x.F:mjYXzlUr4yYP>M:w`[T4t҅B]"@sh`MdD69ks59?kJuw@3N*8&,)mVELSF)2J\JS)Xʣ`|C^sC,<Xø PYDI9BDT@˭~\<0 3W[+z]|4z 4VtΤ gx=gL~:xS|?ڶ٭ߺO }?G78.=PN Y+ӟa&lwA (3js˾I6v0#ԆOzeմ[>azܳS#QNYQ115qȒD"GK* ̝:T$JJ%_8#>8j]Cʽ˺Olҝ8= Jhcd}ݬ ?rtgz OLPƩі%3^IU)"0^xh˜UKT1A^ ?_ 31L $lq)=~3>tpa#z4Ke^.ÝClH$=5,SO{:n/͎ޭ gqux_ 9Yșʓ,2>%ȟa|[=_/U/: =QsoĮ9{'+DϿz[ʎxdt\>m+'Y<$gгNLMcd~3cLs7б]aBp KqFl(u%1,3,ç㒳T w֙'2412!Û1u:H3_U=lzr}m#P^G9G7Oh,:1HyL7FћKGoh.I "'q.R _F;2 ٸ΄$OqFr7AKo*H H>oL4.[oJ(JDVOۂGd^m .MSNㄕ;ܚ2.KlSEM 7}@G33}k" YZN{`HZj'ufS-ȈPi.JSnQ+l6|)W^GxYcjP: xddHOeSŚho?\yި;wЯ-eW֞Y?odTtwT7d !ۮ;* * { )')Ӈm#~USMo=6vb|aǒiWAO xYݗ#1-0d[lsQQTܕ',m6u sJ5d`d:^̕ݔD*[ ntqAb nIP4-{[d|KrQD1%JCDKN;<d];;-.ܔ9 2" B>g%EDwiztغؔ*1~A| ̼"uҎMKtK8eB#X fd.o͜O O=fJRћ<'YeǶpLDDH*C"C+˰q. ~&lJڿ `4v S+Nw9DB5w}Jr%ߥwWL3FQ/_~٤j{w<{g`͔/< & ai \A^ gl[䌲B4%a_De~@򓚑>ii[=dz{'?j=E ZmSPZ" ?+^U04pECGŕfO'*޹/'thK.Z7͢ӈijMmل)Z=a "|qFITvjdd-Kd4H?U*跜 s'9y`~|gzJ1 vkL#B<>X_n[fN%吣9cN%#TjHv@V~6MD k/,6>vAGr>gLc{j/^:Cw[BCm$ c|tԆm- ]=clI[?(VPoՄ WY#PS ?M]+7%(w&=NY!#v;\Ót2Ú!stuQ$<]bcx*@*D`L,U_zԤFvi#Ĺx 4t2/0tTe5K4_AQFoGaLUI!-"Hd`17o/σ)ӭ8 Ao(!h 7UܑbIWu{>IoyюN}^>А̯~% @ ,}:?; :z']t-Riz!;x^'i >nS$44܍`>wXr񦸼 ѳ]8|D_^ގ…\[k?G@PwXGFA$/*EyyyNasMɂ:FSO[$I4Rf&xc&OQ҅8U ZDy_HtbJR&j4xJ6):m[+@:9˒G9|q}狥R^\^ewuiv@ppGxۥ_n9*ɦfE#bn^t:%)Mbŏ^4Ѕ: *4n:!K^X0:H9O2 L0N5{"7az[YorUS2.e~*ZBRqKD^Ԣ#mkB7iаz?UgX ߚuYMfosSIGSNy:Hal dzrѦAv'0%>Q7YGlY̒ƈ#FBS/[))*$Xs?oi/.~6ς t~L7I\[` HSd@).>\ λ5MAY* ^:CVz4kmh$;>-NDpk,e6K\ȴ n,*.,YJ)m JZ t‚)CϠ1q$BTN' p ~ъ5u"=iY WJ=GmRE&t6dZ7C"DRT))We؇TsM=wL(BK]RT: -\:33kmYz3Ya~*rǺA^X?7sY'pn +CyxgzKc%ӷGw!\G:-T֏kv=Kְ7N9Qufc9Q5-qgbRK_ >H^Y WC#ڔ͐^qRl@yeHxӓa (s\|C_#25ƻ1Awݫ|=SlumѿJD_=yW/] Xp=m$ .^aW;^2}h:J5LR}L%)?QF9sQD?J_6I 0:4KZ\ ѻ)+% "I%Jp== uz:0e,{oŃvdd|ʐ=nB8>#P3+0%4arekuކ3; k3MfTU |AIBO)ّYNE V] rBb5w61vaiqt8ϩ j#?OD(鮫a冂Z@ &u_;!* ,~U/q5}XRHUӂ jMCtV,X^cj)0H eY9QjNL7^Bʭ x{n7ž3pozy!d-9,|@\nV6؜TWƈ_@rPs1%ױp^d]Ej 2W`Ԗ_ն>dq.^tr^xPٰ~/ٺrrˬdys2鲢r?L4R<`SB8WgtHn}(N:%/<2I'[TjV4ky=ɺV i6=b%t Zc *r$DD\\ Rmgڅ45$ۯ/9r{rH>C㛙FffcdFě$K/F!n޼݉6=!kBzxcQ!$DPmycJ$c]Tn57[kt o*# oJ)ŭ\޴7>Sףaǒf-F95V^`Q7# H}+JN: ͊q.#iyݟ8~rJ.:+5 ][݊)im&F'ynK4<&?db@η,őB4ҨqXDMԻ_,%g^U{P'X*?u-]dAn$)DeXt ~yB𔓰hr^*mq7 УI<d8LSc@ðu=ݬ/97ǬYLgO awG"9 OϒƺPwr,gdzN-]#Hd|1|̗ƙuz>˻ƾaۇm_m 4 k'ldEi Od0mX / ᔸϗ_t$]*u?I$t&.|3'X5Aɶr\vx $і 3kWA\ʼnUw<libmWKL˰C9OJ49:)l<> U\fûT*L]uy6"e~I gS(=%BsJd̀*1xAFh?M >p.ijŃOUY,꟝[M$vW %pJnބ *DB@tj,\jtd?B6$\#\@ƮcR,9-ԚsSA)}-НVp|W`/ѳ&1bBy TanvHcw\\L^#`dKC(Afn]DgW\@C $5N< *G>svtqɛ<AQnZ$Sl~ gq`g@\/">VTO9bKM;v7uXⱙoq`[+!f={RY\TܡOq@ެө=z`;G2sa$Ca<뽊)\octQw]{&.yxcJ#b3 M(z=#qGQ,2`Q=)AAl/BEz )xP/7lgز|$6tjqL-N 읬 e 9ӸŻMSZ }*.*ח(Ep!8 :@ /M,ugh,5ͤU#Hhgʅ"0Yt$aMoT%7>Cb9IX]%'.[7Ka(Q"  (H#Sa?(\\R=۞3,T~ JP2hud>@= o(R8PI0`cn *N2bRF4O+MH6;Sz9*̴}h+B.e[5TL-l`oJYR=f*?MރLZt8oGٟ! OA"b"q";Z=m78\#J@כL z jߠ$DCؑ?V ܝWbZޟPb~W$B8UJg{p-Ȫ U],Y9kKcSQ#ˀt. Iyr/16$Ԥ+ϕwUS t[cTUHeNhԕsŒ@TKp20M.}nN{)aסICV #o%Kmr]m*83 2_е_|o|b.`$4yڒkF 8{hakeS`IUSf8Wb?GŒˆ0‡N;kFiZW̻s#Y[JPT$ʏv_ldJNgͨ_#mgPAofU6_JD#? a۹pٴ7L$`kHIK<}t,v``nw;źn{&^o|\.Y'KJ%-'~.9!;_d3 FV)TT*;GgMr)  ZK=xj+WPu1L_?ƿ?Vu[vׁ>D3Hsis "%ր'^WG N{\1r(kٓſ2"pÈ"(kYw8'앒PGtW3 wAөZ|襌Ɩ@Vkrt8qqWj{Um4myœrTX-лjʍrE]LK>s B{Qx'+ay )vjKy |VT4%2SH7;<$,2zE\>~ hz(ы?qzQ 8l0,~z)ǏN&?O >?ވ{>IيE)ǯv ͏xur/?EOn@@~mfgLRlT;n]f-~rcX".5PKfW+6Ѭ\.I9 ;AXKcbł5]8X:BwYR>sC "nē(}5VR4{ ݛdǫCR5cyn@KR#(kɣy<}4sjk)O%' j)jS:u;hR2.oG^1DZ5Ȏ&wzu`IMHG3qG? y' ܝ MsB&v[ ݓq4eZBcb_;[Zy LlZXLC"l7[LȜS8dWꥼEVUy+.AQA DVK_ {{(2d જfvYk0*JդldQy37Hm0z ^=V a8JOZ^B" a&Ănw_HB޵?5BFZy?MnѼQR =[KB#t̃b&Zf))RɅ/#T΋ \5v,QJ^+Pm1r;lr]$qM00>PDf6v5%ŒAPH3 -!3IzV;~ ̱zUVﶛk"ߗut\Ե|6=ѨV:4_b!fk.a6sV=C+ʧ=-+ 5@'Dh Usx\APAٵZ\G =ɲ颼х8pHx>IS'&%7Qѣ<ȶȯɲpx5&P(~4Jc>D3 4)$ܛm{F~) Aeow :355"Ӎ_dF3.TBKFObj{;#hIiFײ 7bMcJ/D$u͆{x{AK7+'! Ӳ\w_K:ԺMq MR]wV7U$mi͓kluYK'<&le#MR9>{v0@IV6\;A(q>@[ˇSU'ePEO$R /nZPt'%3֔2yױZL1j:eZ>nv:ݦPJ,ntd513+B)1seaF!oመ>wYZq:۟z|~,c簪aL)H[+&֠*V+#?: z=㌜#W> lpM xWQu₻\a]5{e_ǜcԌ7?ExiVe8j|-]r^W?#bL{9ڹ/K뗞ʗ^,KKQ^3 ,=fr`М nܖ=^} ,HA7B"g!RP1'UNश(7A꫋ʞDeZA,&Jyԓ,nNb8bt_1N\0V$ ̦zy{y̮+M~Ώ"'?lB +|Z/Y${[$&#hLբcҧBp{B><1JCujyk- 1~bocy0iW=䖹G͜X c d#Չכpr) vÓ+KjgyNN< Fq3ubyjDo n6WŚCga2|=ᢃS Ztys&L8drzjW*ԙ Ak2] vDnCQ/ЕW D|Zų,cKRG1~W]Q~ˌ0\Zt}0~(U$38 )V lVt礣nEӹJ⓮ܗp'\#sn+G~U~νɌيEո"GfUZNsf *֗,I56qHMqfȏƺ'^\R֞^.|)9N\Gw#qU}D.ZTZ䥶:8`] NjSΛ0[VhKȳ )0r£g廧%ɀ3l%W&q[}&1~Džis:π5r Ihcߊkٮmi\֌\|ZbbFm'PVuk;2LЋ=^(C\!@ 79'˘\$fPEgs::2M vFSVAk8|Q/6V ( B"vReİ9@6NL#R+Ğ8)"{ Eى cwEgTE%@1L/8(91"uU[ygUGѾp&7dF'>XHo>^xݒG gyGO3. RkjG-SnU8}+Z= q6fU$ayD`1l:)Oi;6ZdIwբڬvKDa t!(k4 МxYo%eMjǟr!aG5^ܢMk L9ˁy B`h? o*I0-Et'?zV}q;y+wR y3*Jq* j)Q]N˜Ί6hVG,4%`NlA='׺uo7*fc'GOf޴c$PŁ3sW VǿS(Ic?&v]u ,W&?2L>9>\)C\^:̗LN: n,tAka`HaWIݯ <ގ% V;up#ᎏ;d:<Q[]g|EM$R0bƴ//:Ae&U Vٴ b%cK(}nzҀ<"4G(f{Hܩ2%i4)ƯH\rSbVΊUqC|S UD jfUZ$",.^_ryI:Y BY2~d6!%QzeFpzu~^x R"RU-!\NJadZU.@ct'^y~ل(ȒP1Ch¯BaP'f`RAɄ;F#)lWӣˋop(A\:A$=&Fٴ; %ӻ.Պ?܍rtl1eHҵѠ#82eUSU586.Ynr7iQ<_O^|Kĸ(Ȗ ?ppͫflM1 mv1s݄l"S@)hTQS;tfyD~cA >aO{ TSU48$ <|]htb:#_{ĭ|t,$t)NF4BҁdR5I|qTjVl vgLwl=Kn'2S2EcDF_d?_cahUE̼;J \߰XH.)P ԀH#&tg*=]c٪}HN-\ĎO8vʋewȀP | QP}r\ys{,Rxg~40\O6:T@˱Ҿ8nI%zLpL HE"j#j; Zk/)`Li^-VVo؄J}#j3S1(rTqЈ1R/:yc}? L=s0<c%P60k15fL_^f] D|6kclp@g<88LT j# e@ m*; ,n,\T: \\ô? 5(/|7b¿՝AWtgq9V/?HILnV"T:.7fCR25oh:[ƇfcuC|s _h^ut%9(% FR+Z[4%#( ۆPUuu&(ԁ8aBˑtx i ܺ{ >%),'Ċ(ؼVV}-rXCz UD'J\"U sy]Oy˪4S8ųkp ֓go0 &.M5!b3rVAcoCTNQ0adC ن(j!^$ϯ?B+β2ɨupryc;d;ʜu@lUW:#}f[wd0'ؖ$Y-Mq!1XsXH`tBH rf Z#Kn(ֲ3CfS$U%_ -zFQ3"fcVDoYL)%6nwplj?g+l{Fxc.Ew Pn}%c;%v.w#* k.@o0|+ ^ʅ ?W5 X\@S>G/Βfsj5XPJWpDA$8Rhf*8\,O#G(ihj"#]W"+}[N8:,CeL~(c2u[/5~r?8䖟Ά| ԬyG\d`A E1D̀'!a 7 d&')be2V¶V݀pddvVM%1NBa, ҾS9`^.8m;9̅}+pE~J;.˱Fχ&X4 eXNyZ赿V܇OF=#0pFRgq+JlU]4ّ[2N\ӵp3-Td+~XnkV$3M4C@(<1^@]j4D[ʁM\mSp/C'hpP?uv`9ݷG>sWRkNB^#Z!ԚnsGFwNsq!rvwZ[5]g`LiKh@*ڶU}Dx ahh$7~(|TfNX0 REڜŒxwC_qrz.a3s]nSLRL` j*͢CO,s `^.c,tu6[^4_npk3?If)!B;!Q4ױts9fTA b$A}$&&cՅ)`Ӵ*0,\s ;yS/h HŸx %܈g&H5e%Q>8Z'F0~Q c8#:]ZyN] C<2kb5-\A;0 <Щ6XVj5gs DND@*\1N;0˽^v ΄l-4z˴{:u ! RCN)ג]~ ьAЙP@2r,^I.#FU`]eq3B:@Aih,rM=hᢋB "y{̴MqES.#hJ;uJހ 0'ۑLr "Npru#g;ea_*CZ6vm6Wi,7UmS`IVsIBq,+!=Mp;HSe[ѵ38|evD5۟H* w>{z1a74r4T^P,\ay7cq (J.Zϴz/]>MѕuOvkFnQ{ԏtovw' `gd r@NB-RW\5&iĤefopIDZ M(i{ox7/) 8H@Lf6%9i'NTWxuP02unOf#mE艹R2"Lf7)eh%/l CO Kw*l75h[njJ\D=K&7[xEYKe\D,(x佋Vڔ%10wىqGb7^JzmFPGW PbO gfSuK} 6(92ECΰahù1FXeB~l l&@nRa7\d0*.Vi¡%圙eiWQؗ]!le& pZO-֕N)< AjJU/^J`L̒#.Dæ(9$食BG?G9A,<5Ε#jb(b7i@ʼnJ8{,Le&g71ܳr)K.5I& N/f; mQf>2v嵻UJq=OTQo&+ x{dV0 ,6ǽy\+g䯞?-MpN}y&qt9%ER?0lc)V;Xkd ^2)kR~і_̄Lau.e G=:6=ϕu-qPdhU :kI/64- (^? ߽|NM6&Q sy m9^v:+Oo13Œo U@w_y'!xWOB@0iڇVS7fH }Vh`An8t`yg-)'7[aj /u0$mO*62OBXO(mUuTLb J J|H&Y47X7QAo6-O-6r 2k>E Z("-J-\e4uv oELmX ŹnJʑc)-MR%m"6yfΏ\jH6b[#pVFL ?+f|3rÀ!2ޙ59@\ns>{@P5)YAAs(]]-4.ư`*Ŧ^՗UErn>@)w-m8M@zv /)8&v/#{pQ,"f=mLk:0OP4%iiBxgHwjlrh`dG DkD"zw=dD 6W,pgv>;(caf\/rpfNjhe#Q Rm%h e|a(:M~& aik WgUm)F1hNSjMU>MJy(.Ny;/ 3n{1g-.GR`YuאU+ܼBQܲdپ2̿O, ql"|BBՖ=rr#f8p!p+,9ꇖ).<ǯ|⻯d]\#XVD"c=n*B𵘽C 8 v`\-V2觠^DhoQRF'n8D;@ BCJ!+퐷;|)w3#ք hťNazήnY/j'~ؙ#BjǚbX{$1m!M7X2r %e9J3gq;@AýWax9 tsB ~SVPZ1vڰ#q2|p,X#*i$ap~x鯪5q*S?ax"ϕ숀YwY$jЬ`iu@)+$VY ;b!o篌JÄ/M96ԀTZi;.ڡ^\S\7̆"\ճL_%'^ėa:9A̞=X5Yfnf eJ>u? MŸŪθ> C&]B8/I*\͆2YUMBDj#S !]-pOJl3 ;(N^Bmv3@N`6mX}2/Aq=Åi0F|:|%8DZ&[/2LzFX]hozD`JqZ.BXbå(Q9WT H:IC1"X -ţ,2DiÔ۱U[1\gVܧ tJanb#¦P yIȾnni?-ȒJ v8J$<ÃmVRˠ C5DQ ~lNӐcbZ4Jm~@r%p] ʸDE,VBW`.z- |S]ULՃVJnZcZ,|-~26K")qI) dIQyEMVme& ܧ@q%U3g䐡*>B£Y2Hpe75Xrբ8Y:NRom"ӑRb qQ9ƜKՁ) ] <fi*k_]ZGmgWJ"/I7f@HZ< Q8iCZ,e즈5BGf #j'Uǽ谀 xuf8G}!*AuDั?u`­I)" B3[ڏ= V㝞{qZ7gϔB%WU ̎`EgJjL&ƦےL(&C?Z6"K^Ypgo"M)\_-G 7^2Waaili#zJ_9}rUYw*bNtߨs!QgVڼ0hl`Qp&_Gd욕}ɽVeēz}x1BSM2ʼnE(1oxk&*N4AtFoZ|O3| &ؙ{8OMC@{Af<|Ɏt Ô yKA~vP{Hc)4S";KynlD65]̮޸F _6"w1f ةZ,$-(QS|_\ c @$2F648uU)B!pFV%-uyi)ًE56Ts*cuΖ,/ E}`d- $rarQKS޾babn͙V*|$<[HyO0%rYG,mB)]\70".ⓖ9h}'Cq|!Hqp|k~\M鸳i †[Ț}řχTP3jǡ,4lJ`~];mA1FdTYi^(RD 5R:k8zW)nRLGE`ϭV[NI3^Ij밃9JK63, GOԚ/5s=5f]a8rwh>*.FnflΤutA";]ؤ{Y(Y*"tN-N#EY/سZ%Ka6РdV=׉Ԟd1*4hU sP.J!sH𷄽:l0k{>Ja;uB=s*c>gYUۛ DّRz0{s*+cv)/M()}!.x"1(p$(t`JQ2>/Dp37_}A loօ—E3 J! ׂ,FtU[%H")@EAǒRB늦;Q2Ci1Am7pA21RlfM_G6E<+ia`3ͽJba`_< >OWR8f;7şrAx鍫TPگgؠ.'~cD7|[!1=8`h{Z :E?}2ܖtw 8j KZh&y-9j;Bǻ@Il ҠdO /5lj`!bi!2mz>\enROR f; ^VW'&JY'?XcF$7Y> ӐP0)8fjIHhHZV\&@{0a4(Ew38R٨+G\[Vyg W[Q[<y/t.X@Зk2 52A#-~ &5cǞy Mu@T`,T>Fi-ڗæ\VY73F82`:kmED"zqkFDە CJ%)5:"\ {"o"RDϥqδ*m?{ 6˻%QٗqOEM^i/ĜF|g}D|'Usq BaMYgϝА5Pw`:f_X{ژ=L͡J%;ϼJlE[J:5Av>hvc_a_$U])g 2>8Q%6BA.KiN~(٦CK%:*bMQ{Ćt(|k b.8a ŴR͑ u&r6*ՠJ} k0}*q6/57(_Je "V~ Zh %vB0 :GNܔk$we iR q%{}bJ}BXR7M wZH2Z7X1v|E[Jj.]o" ,kBsw%]q4d;p!ݚvki$Ub!bU\ݙcMTawŽү{{Wj`؊P@V%CFiBzŏT Jrr˅(#`%cRt `]8lna*TjHzF"ڃRcXiK8™ Ʉ0ĭћ=XD:jZQ?[T+R?Uۗ춒Y67ӈbox%~Lq;hñ $l͟dIivV[ٱ #'hp:/].{uWQA"LԑY%kdᨅ.r>,SIg Eqa. NSUjT$=zYF7^QE5ɇԲ|9e*!bkS QRj붝X11 Pi(gyRaa4"r¯eDL 3.6@ 5JW%bct};%vn!v-҈|#bjXЅ )e ,1Jm8cϘ^9A>~YDHNLx.CKqO3]t,Z;8oz;rUR${rٴ'= vl:EcdAG(b:L[Ԭ}R:,b sUσirp,w(?L?g/'H̍EݒiiNTO T*'$&,~۲HG~̈́=ꡓdO9aPe6v0ک3Ej[Y`!nM;b=Q>MVR^朚i 7 +)a4B*x Sg//"P ܭyJ/1GԘ`==)Vز񨨂}owIcp$8B8v5'9)n_O^|K5Viw3=I/)R%.Q;&":@عhz/PT'}4qNwrCRDU Z`% UjG/׎vMBū=+ Tܡ iGcE9"N&|9 ]h{-iO m"=P̈́ ur bLH@ԫc+DJzUxS$J\x kfs7AQ.A*))PrZU\8B 63G5"̳%rTgv}R`/tR|&T%"o~+i?IQ3w3vѠH\ύ:"fd6PJt$ #\a}ֵDK'/ 1I"Е# #Bv \@(D] 19jנH6$$P ]2RO E6Ixr?\1TC 8fU|w9؍doA c_=z#v1 G"U07U=7QmId@"A(2uYT?i_:ldf~ZED0=!Q@#6G/PsSo@-^$rj[Ng3*I*U7N7l,sɹ "25g"d$Usȑ$oE+kJ:#f گhmG!DڒXSqN:`lb7V%ǡ% 5gpn7τMM#'Oc[+ h0>2IzG: ϕ<%2&5TGN.6 ڪibt+:T:8*́5bpъwxD(o- 2q'&=E8 GY`?L>r=hDϤ)EWIU=38e/SiIPPLOL@S4>V1އ.ߢLRd*ͭX2:|s*![ʴWlt FGɟ0ٕ:EH>[eW{˘83q~3o3yƱ%, EGpSvbk[easگP3W<4C*'F (Eυ v2^˭K %V^wEh G-)9Vtm oZ PcŊe?@R=GmwYLGN3f;iih/č7A!;Ӥ Ȧ']6y/$+{c,~ =ê5!NW__X[1f>Yޛ> Š?#~'6N\x,t΍H] 3޳䃌xK+U:{m2AljM2$XNNQ+9du l%pJgBp&W*j]PZ'Ꜥr9)v4n -*^UAPKڱ 5.kas>>vՇ 53VXu9Ë߉ix,?.)C\ LIL9%TN8U84i%mL|jP(VۜnA ԵڶW16&Ɂ@Ixc Π1tvo1I"渾Tfm{Z.Q6m d8@7=^53H&s?+> 79C z0V>bqRxUiv g*`5\% 5jl{$\}߻wɪ%20j]`pлn$9* |CEdiԢҖweH'{%Ȳ) F8e|pګBR8 *B4o%m1{\7AD4H@Te0pS4ͩil%L^C8~>N( jJZJzB}鋵JiFY⑑jz/>Ig[ojYY/Ғ[mG$8DYpj%8n'#wp<1;c_  yN"`R^e^]x'~v|,3+t})e$+pM1d;O(4axR%!\kCrbpӛt=9xh'HGFk$瀴ϵczba5nj+G=a uf]Us^#mA#"9] 1J8b2>n7au;7.EepzfyrF98~H. @_ cp4,Mg=uR L(2P.%,$91}"c9 ? HcКPJb)cr`kAWpobY7uP:b /Ar2o<[kq`ӹ#FLR͹uBlDI/$BpE}p?}z}OKF$ Te^pN͌'@^Ht=PtEW_w ;?s8xVk%D "PmfC>^6u}.@G*Cyז'& D0 o::!1rT}KK<~]q[I2 RQt/7O ]Vf2Ef jOK=jC~na@i&*Y`q,CqBE|mRr᳜pm%E=9'v_za3I?6DԳ]OQM.z&$31eq^?4yd N8Yz =_\-7I3-+*:b0fEwY-Xo8ΥQ:sT{ԕH!,CYzܔxƍn+dPįYrԊ8$N Xt2HP 4wҗ Nܺ'R`rUs3⑔u.+shs *'&"4nł ּt?~H<|ɽ;wyxщ=gKl#O DGM(1Ӣ:j'e } ? #oCl^+ s z,\nķ`X+HCүPb)K6bmʄo4m!2U]FX:N^׎p3a$Zj9uغ,"Ρےua"u@$]85,"j« nD vN4cحXҰi&A” #p 8vD86ZcɼߊK˿$8f9e4)NT֎za#VeVfo`BTB4_W9²}Th~.wkN441euElx'Cܞ#ឋ5;ٞZњ D5@hv_%6 f9Z{FH佢~6@9bq+oJO5/JM;C v1Oyy""-\JqVmQ BZxD~;ZL~ٲ4'2R\* L X<Z5.aTWcH54"q{;oJq:FcA&k~""XڮrҪP)M+hF@8*恬f{Zl'D* `zJ4&P^[Cp"۶[t*EB~ 2+f|0.bzR%h.~ɍԹ8 mdgiVPTu64-;[A:Q'ݲφ !IЮz8cyz* Q#4$Ed5=WLs@TEblX42r qk/nυdGq(h;]k w%Ha VG Tt]1P(y|W*evܑ77QsMhMH([͎>.i(4QZx/(2Z eED2٧ksE9d}FD\X%;7H YgôYP{qc0}n3+T"9s^4+΋!F>׏_=y}Pݿ-/rH۠$v!MOΤsr*q iL:ܚz6pQ4e,O0FVV.WLC%V:aQo+[:Yn0S󻧧Td^&Ӻu4l2|^ni}+} T;xw^niYR-,˕qL6ЯSf?8|&ݠITC_R:Q.V UM+PW*؊VnπwYJ Ȝ+U0&-׌VKӅF!Kle$ "v0S >6ɡʓ82At*:tB 3;%:漍4rܰ 棋F،̯Ef2Yv [ sZ*8끔Ɏt gKW޶KO8tkGHA6-] n=\W7<2q[C,EJ u* \$Iq4Sf$~2%Ypi3>XxGҰ ߁LOB?ciM$agIAK $n< +{uNBw._|'M-o 2/_y1usO=!q·>x\=\sxjyrU (qy wЉ(\HE&MH8h&O}jp7}]|䂅'tlR:3 8UK@Ֆi]G@02˱JjiR?0&*Nb AqzǼrr|n%2hѠm}etNu ouqIiEsQ!%ח%mv[EUz@En`K!90%JKQz%H!IFZ-fBuuS)ЈQ7ᡧBy]+iqWb f.[0-Qڶ4і2. $}U hv8;qԬ5?SkMQG.վ21.L`~afE i90Q4G[aE&:sf(iP@& QNi/;SG F=MN lY1r0wj2~tbJJV=^S8%\?  r]^RrMr8D,(Dr"i-VD%`E5+./GlzrynO|h( Hȡ2Ppv> kVSeA$Eo'"L\ɓsaɠ͔[i𘫰6XyQ7\DP+:KYRK#{\bu<~Z+xWppHW,EJ歠o/xn!b92$.?ІuyKt ؿtdz6q:&?" xKiآBN˦k۝2005c?w(BHWmHc+LYD(/;:NzAWW/|rBӺZb<9 _ȳgeh+ ?lKq#0cҔ&"W]\}T˫{(.i.9.gMAAfm!iʨ(gl"ūG:)R( sԄMF3lpr4"æUGn<:eTԤrH*`#,Yk_ǜmvKmxΟ~n hutKYZD5@q3TƀHׄh6vGUpf d겮Qrے: )J(y `",6*n?"l# &no,+J-;A9PtT&on\猻Z%d3U`Ӕ>bzaW@ł+E('ipP涿!Nu\ٲg{`0-A1h(Jve'ʢFRp*]+|0$[R[9 !PGF7պA|Eh03avc a#N2㭍<:e[n4s9Rz`|d49( X?5G!gf5MT}Ns5G"{څy$vƵ@%Έ})B+Vf;3>V%icRx_k EqUQui\}X%HeR&J MI$uQ=X,ep V;fvp9R'M7qf] ʤ-Qt/$s6#!J2u}}|Y̷IX3cGy}HTq%ۏ!T6}m$t(8b̷_INTٍ˩. 1@.{b6ڏJr8?C n>V(IGŬhgO QR2Z|%oɬ9v.~~'VikҹG+s KDЋ&9@ZhNgdmػbBa؊6J|^ JL;Z[Bo`2ҽY-{=goK\."&(a0T^6s8M01#[h;c|ca4p*VtmdC4]<=0)(y{ظ!Aw/(Gb| WFNXMk  Y:G鎐lq9R5'\AXa;0hʑuАh[" Zo'kNR Uwz TpKB3V|1r17d9EDAjElq:rVق_y(ǃ(b]QʆEiS9)In%Ø:q,%~h. I%mҠY%Gv[ м<3颌 J qβKs>L6jSy#4Qda$t~$)KfEbE:xmيv "xI?Ct̍7a[3n,8vϔu(&iRQ v\%2j[;OCpO^)VKl "jSd`ю'"WNh;Ě]3j FF"SUL*/DS($GM/S#o@mv^ b&TWzq>5HT&l|@J?#.f|^MfSn[ZOPҲ^D5X5Tncӆ>FZe[uڏ} j[F=Xje "V]1mK` 5eԉDLl ҃KIP.$߲@A^Mxwk)k"悰GD,tIHr"T[H߽| ;bͱ$˭\rD}Te*|zJ~MЕ*e:DVGqI!`Qo$$o:ꯤ_ɵP 3`yp\VS9fĩ(H;Qs![|GN߼gq:;ɢ`9:(."qZ1ٴ_z[M=" >n,Hf|#mS݄i2l` ՊrXվ)/UMb_ݙr)oxPo+0́ PYCf쪡۷T>Whp o| ,r%2f}V"b{h, IW%تO"T[?k\E [9rUWF'QIn:dKGn$O)pC͠Q2ef-P{ԟ-GɱBUIcL3 d=+܁i|,2K)) hxX%V0{O3?ڵl*3#Rx!hL"8!1}vk5>) !/ê>q|]xل)$$ʇI{*]5Tմ\q *-@231BBSR@ф-*϶k.ŀ㓆-K@C7hwwbrIlX=k{Ǻu =)|dbS ѻ NTC2F٤aHsRH9^vҝK"Ea]}${;9>&zͤy$d/<JO\<{|е-D$…ԢC,<:*=W H5uV,9kÚ;{W;$`}j鵶4Dr:g/΂\>k* F,vAB a]TUHC?;97Y0DJV,q/ P')lf҃puȞH$ڂ [99޼r)Atb⽯G^<`e)2$ }J OQ!R4]0⹈}m IA"F? vQ) \W -v!; W8Ű9]`iNy Rh5'OKnHB>`$[ E$ل3NАpoV\ma5)Z_/7ڱL846@p(Y:_^RՔը2fƬA equ*삖_VAv&79%..~6X0t~\*ᕞbʳa]d7$U⾕YrZ VL OeSOVba2 xi{5@ِԫwj r]76MqQSX*1AxLuPoof1I\e-' ~U#d65? a7`מ68i,P")wDnupPSg>ѩ"!Of)E喢>[(׃̵QfE.5D&nJi#!,fu8uH[3K HŽL%BP^3w/zʹZC $5ÜjP-1(oL !o.ӛVrdI6`j3p{_8Q[C2otKVTꝸ ۛ6=$a_F۱M'RK& j$dz (|hiF8BfֶNO W\EfmjjV١h'TIv=ܪЙ6A7aב&){W5-piRJzԭږ'rJG&_,|?l|- /?'ٷ}X>8* B?^5sic0"-f+i+X/ߴ|zƾxy4'Qr- aO"4sZuBYftys;pq:aύ5 z(ݼ<pĎs`B»!/('=*k.e@xH4VIݯКؑ_ѱޗtmbSi@Q5P:6N6ם68#{e G gV(u4WniaDq:rkLq4P 6a 7H|-?ӝE*??"PWj}Xk] yd=ܹ-c@fQ m tH֤K) PT H RWA6@R],1xMٴɨף4A"4$([E"/p=| M/ j'4ʉ?FYiƶSHDuc[w&Vh!i8\D Rj&řmM}+*Hr$!^Lq 6ϲ)&fx(yGt3^X80*d4a/fFH}"wV5s(60.땉a 6*X߬+ڌ-Rrq۫2} 5= 겢{;u.>XwF8W!o6^ ƕ# ߠ$1_e祐ƶQ'*q_Exi3ΥY-2gE_o0*{}bإ`ִu.#hp< :8#gSV:%ޖ4pNg6qhwһ'C p a8Q_JU uy^MEr9[Zi~ Tl1̃=^meX?DF"/53u&ԚO4~\NAr A* Ɩ Qc7e,8XCgN C̡.A5,RC$R*&.?N8.Hm'4n,w&E*RJr{0Iv k/Oa?0z#JNFxu9d9sRE_&e Z^֞ f86{AA(ەf2a~Z„&t %)Fvqj}qH$oNʙ]/Kw= #΃XI* -ťQYPjչRn~G xCj^ }]7L:S\ x.mh6kDpJﻝ'v|ŶޜH9 )'+ 쿬7n >7~ 0Ѫ%?\ ߾Lnxyy1sH!)+ uVI+T2uiJvA[-;*,Fωx M*/l/;?N(nܶD{Ih#8%C̑9+ibo/Xr5N}tfȉxW3G "Շ ;jR{ɴO;n9@0g|*)Q S0B(L}|N c]kRRpqL;O)y;1Y 'a 6˲Mp:D#))zIN" +\vH\3&GgGԵ  K>z^~SA>E'#}Vķl} N}K~rHl7X)X;xm)m;pՔWAӝ=9SM/@]a X$! Jv,yY{;3 DVPŬW? 2 06;;!EYccc!k4!qL(YylN1VH-{~}YHJ]$:3߻߹sH.:=q?4rx>|Ze'`wk[D5ˁgu)i"FL]NzNݔu[xmqq,g!Iw+?Kb Ff{'F{Gk]vM-ZYKQjlbfَޜ(dEQ\ZEO(-_@*myIbv/ǫ'I&ɔ ບVk댧wJ䌜1BTl6ٶ눔TP鴙ɡD3Ȏ}".X!G)a&L_V򱢅1\B:XjWc=\) cVf M44#M4YS,NH,Bv/H {HB/U3-b,,6N׉`0@Rbb.W5$70*ʽ] Ee>¢{iW.PeQbf@0F/<@%N)j7JVƼv Њz .֛PP`ʧ5؁VbDD4W.v &"ۉ 9G=qt{ >RTUxђaAЪt+ɁS+UIY>`o<:Pn0=5 >E#ְ6,ST ^Ytƍ"=y,~.=yvT KKg,.=ғ xf!8ALO)7'Eԩ?qdIHy]1 w4`z^Xe3gJX3gX: N?B`gp==h<{tgzsJ,5`WgW݄fzng)ofS ?Ep9E@?'>u3Kgrq꾭`֟JYY'g<8ŦAzPgG,H)&VQZRLfX=Gscxx/? l_zwSlDQ$~9J0+Wo^w%;3Σŷx4:}TAG,y!'ܘtƘ5Kw '*9[ *%.IԂN*~fjhYhp{JJqV ^H)Pb0Z+F;䌯V/}.i$DZ֨{z߱&Q oN02+?=eհWNkq!c/ɚ e>r¾ ԀS}l4 Vu!!o3^1-#^@ar#"pV$Yʱ3HԫZNg4uwYӁgV l)e+xs]bZ9X/ w͚]2i7v;cM4y\8\B#j|oԇAzZf@ W$sfG)s4 -ؗl_s4dXTTbP oou5M&KnjP) ;)cR0GS{;s4 HFp+l {8Xc*ڱ5?rEPrdhVkgBgw$;qW)C-s`)ie/_O0,@$A /H`p"!S&>  )ffNц<{(gf=z O pRN-5NԂl[} =5j&hfn+ N?_:Mu+`,6CG:T޵\ 2n)PDȜ.2s&n+%0WRP9zȭq& 5F?~59ªr,`yT5q@ka A0R|kt~(ƜA~/xvPݫDt8M L Ҥc[VYnpa(AMUscY>Św6zTG1bcy!`QNp$;u+&Uapn 4HG~NPLfC[~b:$X-*L Yx:.<21d\rUf VFZ ,oa֒^3>ܸ~36oN|,̹qަv;W^; de6AE2V?/"wt=^>WR &_~S;x_r;9[uSMaRbch-2yNT8ޠN9vdd(So.O2la39JؙRy-m`^t7zhH9 CVV>+i2&riբzwl#dsGү֑#u}Pҧh vم 3l,?1汁-e/GlO XHds1WxMW|B"gjŞ%_q0Xsl?ˈzK0Q\Y%!5sk6Jq^M6 ߚeUb̀ ~Z^(Ձkgcyز:uFp=3ʩ زq| .ŝ)vgtTPcˍgH3_<i)v%\X7#}FqY-6=ϳܲH*-.hQMn5G|BAdd2ONիz{uS/S[NlU¢݌ɭH Lgy%mڃ!j s5g ?έVk>(o(6l. Gѯյp>j0b@$ыv8Iw>㪜] yi0x>t51G;Eu.)'礍Ԫhxz޾^j.{^i4y@UI([e9up Pl))A^ iX̭m\"]}Ԣvb"{XD^ۺz[Ͽv}˽{EPb ^pO b0_HP.F}Njsof\Qv^%u8JWױY_?t<1.q/K~[oOÙbU[,nw]h#4Vmz՗ee %ϧ?IzL}ɪYxLpʼ)RʪDDӻI@f 0:P{W(|,x ՜C$'bliߙ JsM!LƪVɈl=vgG/YtV*^C}z/4bnM{)3~ m ܠ+ʓv7;ʊRnlZqIhUUufO?,Yz@(Ȩ wⷪߘEJ!0 zQмRhʗOuvRQF)NkЋLHTČt6otà z KK)YX j:5mnwy^UN j#,йt3>:Υ7@ f'I%ĝe[AfTbMFj i|xm=rXdI` Ux*M6 ןt_gPq&v*[-`x0=}Av0tje?g9aڏ8]xw\-{nU;(/j{gLlvdtY20BUVEG=bؾ;iUD Z .pE<,/nC6'DD5[qj6MzslzXg~{-ѼJ٨ɝqђ6.:G zZ%Al4hOI^vIM-g+\ʣJѩֱD%~)^0| ;A=q~sO~2-.c[e xIIkO);Iµk&m 02ɨl/#ѥKh>}k7m)ap).3%l z~ J9U"S0Ew,H=Zb[it(!D ݠ,aq ;I7Z^A4KO P0>lp9\p}5 @-RrPtd!vx]AdGGf-& qy+R$BFx/ZeXcD>~`]tǔɨ\c$GnIVdOәCGliF y>-{-4㳃*-^IdI:gS*FIS (^ #Εqb?5RQh{zNɝ4Bx[[2_Ln8wz_̡͌kС6/@Erf VsLw!g+b?Řx_UJ V*7zXX>LBdlʌ~W(qhF#0D8;; c;as ЪHఛBCND5Pc%mĐ9#[ּc$lrXa@xBɈ6C1xf!ܐH^Gt10"3eq?t$W uWQ J]Hۍ*Qnw4a!?& 6¤ݡz]`10+Fw+\gNe^/ 6tP]vR\AF"kXE J7հ: U:co%6wVX.1'o$;rVa4 'Vcx7;qyyʚzy_^K/\qnk7o럀k͵+͋k7ϯ_V/\}7ť?]_v歋.]c _BA-̏t᳦0P~0?RJF86X&>GAOZ+ۓ]5Ph?q߰Uj*Z>@Ր~p Ƥ34<J6S08]NBqrݦAH3c͝ fb$HZ6lH3\yk(+x8FTt;۵`6w!5r&DˋxB3I)&f;U˝9NV9&K)qpz+~Fn0hU~]K\(B1Xh']7 pt3f\v^#^LL|}g9l'k`)Y[t`HvJ DžB"'fD#N3m!C#Х.2Z&+RP핍"mZ,M#p`Ahb3xN5Wf+50Ċ* XB:xu0JCl½,pE5F]h:6ԃh&VY zӁjXihAQǣ x\68TU zL z!DQ]"wGUuTRۈ騃:! 4~;.i!Cu@]y^zp9 ഩ?dpGv17tO~=V6~&8@/ ce߽ԡ4V # F&w9{Ica+^c<_ XV ~_y')* V(/p`UaE,4EgUcRR;bg^n`_"KDd3ӤM(x Τtu[+Lѭw̑)p'zVyZ]-_`jŸ"rna'a!=_>Y}yeS"@+i1`;ˎ{pGu*Mg8% I M;ճ}4hړ P\ow.oCQՖD 4`*7ȊMD'uAGZqcW`su2T!h:Av(e O_BJsUF(k̡Rx1.-0NImUW2v _6-[ (H;zmGSq.j!8 L spt X1oi1[4>jjC/!Gr/ W3$]g?ӮycAm  U; h1X6Oi0u0\dTw`p3\mpLyGXg0Q 8qLqȪ߸&+oC cS$I¸UcL5j}paqd~\ȐU&I 68k*Fe>b _t]>+>NDG<I>MeWt >8Gbd$gmv|:i\2=g |oq3I29iUmS7=;xbܦɱP橡 CC'@uld{J ٯ9J7ձqrmI[x~蓦V,x&qa:TAӣTw7|93zBaH 8!dby |k.B`dg:Hn^-0ic2˫lXpn!9ɩZ0rb‚wS4V(\ {ۡ3=4qRob2x]Aȶ ^2c8F1cV+0%V`>#: 7<'uӜv&6ŁYގ|z9]c(HԎ%v9]2' 6 跈42LO8+J F<8% yNȔ3lԂPWd^qXPP6!ovl2m)q|U۴#ƺL140ϯPT4v"c)_R^.Ŗ=*&op$qCV*㤋WLWȗ= zxS$Zf M͑Un툈0m#PvZg b?캧eK3oDW+.V (GeȔJs Qŀ#*4iBPcv՜HV;{gM(9j)3K;\i-7m`:cl&+5%tOd7;UtԾ2z^qd0 pj--Kg`R9sm65bX^"n!EJ xk:$XdD=a5v+AZ-u:DnYcns]Gd6z#mX;-&UĞkA5ɑ|v$RvBx+\[ @qMpq׍%5J gpFZWU 5x0oY}dqkir/T )[ddgJ6;QSh[Wۢ2A̫YRSD=kE1_y~<2? |4W1fv*"UǠʻpU0 Mנz͞cth;1 c7'pvDxhFӏrm1TPԛ"0rh#w4IO0 U_}_ð Q"9`*3O,&#, ]%d**ʘ4J!p0[Yn)B U,`ɲ`_)p1֔<rѵKqdBhbJӻ(g͵ϿxZS|m4 C%W= Z!pMf YBbvć={M]=|}<l'b2mAIVMdE׽K(98m!i$J2s(;B0CǢg<+ D_*cSfԺDhqq1#~ Ӥ[oW Xӗ }[麌vm*XJr6lmJbpGFu9"%^{fh>h 5g1zESӶ,©-LJ8$ ޤ;7M)1,|0-A}`^EOɒK'VY nlOm/4ER h:'ØtVK20iճ}l8T%n<- vZ>|Ly;k\;swPĥ vl&5{vv"x<ɕeƨ`3Z&QDs۟Mbpx+t<چ%t @s탓Bcڜ+!I.j]`"<E2p>i9,e]=IEb N.r$aBi2\nͫכڕC3Hgc0g[iCnO_[ ²D\d8u [;V=;/I©N^9w6)0U,/}]%]K+ co.9.L㌭$/1YS`w+g3{j4#.0dffuMdC(, B84F}ajlp86aG Iٸ`X4 FA˨`њ$F!boJp$Ž24}41 oi1<T8έau(2H-@鸤q?5G\ӳͷ%cھ*"u`RW )I()DuN)jK<XV!hPFC\ ﮛj5~̗[.GDܝܢtlQ8x8 a~OX L%2zj݈܏ҞCHؓfA ĥ+NSL4-9/Վ.a+გĺ`VQHOO^nq,B}+B=vLA ,#Յ]< R j"GBm2:6M3tO\dَDh؝JO)TRk {~d^ŢV,y89Fȶbω 9(2D#ꟛ ƩeK^*0䒁_]KĽX(ljG`rêElܸK5j&Bf}w-ݚ:TMKxяp TJ| q@۲؝-귬c,J0rNxK i8VXģ~P $u+ڏ['6!bC<9vyEfO,$G,vZP؆Fe D,ŠsM[ZrjKQ:[\!ƴJ`W lY/PMf&(JؖrN Խ&Cl,ДI/NZ ˓AK) Kɺ– 'cjeӷdQD*sV^܍\X1Uz̸zX?6c:zŲZ*9b('CJU}CK\PK>8JEM䉎zUhWaLXgԭ@eͤJ**{9VO^GC1`mX,8N $ ^]\v|ng'dm|vvX<?'b.'rXRiKˬ՚Aem"*1qU~wK^cAKbɈLXUB+)!ihAXx:AUlpapBugsSlE;^AQD`s*({Mj؉GhӸT`Wi6C,C,~W|?py1x1>"R?֣(c-u*L,v+Kh`p2V 2\TL.q ׿©bVıv\SQj*t^tOCt18u(UcLV w d$ jŁ1%&9Ry\#4Ɓ}g^rpwyXNsRXخ0K L[wK497 $y}\$/yhz)TqRStqFp)pSY#tםNI>ˆ=(BN: JI,nWEw ei8x튌F`淪vI#-{v2{CIc)2pPvF;7QBrn!ail'K\/?+7L.5!:i+_?g3~}6;%t}'S2qVl[9dݛ#7"c1b M 8GeCAU<%$+g5ogsblQM#&堥*K :Ll#[@a5Y鄎Wp̹);ZM9f8 92&r kOeޕ|xhsj&X*@`4贍JC~Ѱ@QôC^E ;+}{ڴNYjN/)~]ܕMI\FQP訨l"DM% = h.g4i=a}(hiu S@(MRzcբM-;Ž7r+;JA, .%Qc>O;j;–=Ue[[E7WB27i6fsZٴk@65r@er%Ah wQoUi&:VL0z:RѲJAs&ԛ IE\)J98ʸb\,A ښc< v`ѯ凾& Q>uD; j?"]"Kuy28TC@ bVqK&mwXw CIٶyLMnȶEZ-e)D1osOm3ӭb zaklU-`wȟ\̪i혯*3t:*Mbwv/@"S:#߼}T{ fGhL92rYA-@pYCD\K*5tmsݥ O#y~H3HD ܏J>2*lx<ˁf*s.1$1Y()Ԏil3!&PRD1L.X]o)kTQ7T~Sm;/mN[ ۔0=Sx߆cefD}y.i 1%ljL+G2CUHG4lf*Iȥǧ]sꑇ*8v˝#^bA8E).|ϸ RB[iFz=UNcef>vӾo-:7,$N~QJ';=;[g"w$*79.:&G0 GjOg>6M1EJN!_x8eN\u;gi۵ch:('%0)0j&k0F.DH6a('Є֪cރQVa[VblhZzi,a&Ysce6 Zye^`fCbHõb]i짇ɣLHe>*YDZI#8zτ䬅g!(=/soW/nZ|ok]WI;8 y9!?rgIîC谵?e7fxQ%i%K1ӂգ7(re71s{hLG޾v9]K-g=|FUOgg\K\Dw-1ȧW5%= ]WfYytۀ-49ǜܺwPIb9BĎ %Uf8h2ïH7JEOUk޲E̺ə[/~Bmnd9鷧 .-tLl{ۜכx]AQS'- ;WQ]ec+y=vV4ZyqVHV^R GW`6 KUfAճޞ+vC%g5ڡ/ !2R0= 9^ȵlO^C'ZyTTvU('W|!XVV \1Ⱕ81Ѳ( -% gvǞ# %nǹo*vKƅxg|no40.a\c`5N8ZKƼ!at;EFv-rMvwG.Pr=\6t,Z;n (Q7Ie46N;$Uv%osHISHѰީ-jV\,Z3m!>n 7+btP^H$IhYB%[ a?){5Zfx" f: %#H'T& [G+v -NFMJt,5ƃ܄S鉴ӈ=H{T$5X&;;VzILs=r}H(‘ɶp<3MG*{gB ]϶(}4hqH8B0Q5r(x!8?X[|"zZ\T]e&)1hĨϥ`x}Xoэl-ZdKsgqr#0hxFeɮɎzlRz Q7AXY ~cB,b_=v1!UI)"o˛낣LFrg)@ ! ])"|p?~q:Db`QW|{Yn1Wg~zq,j=#\Ea+)sO;qM_ fkʬDbG}:Pv  QuBF!= ٦Ii}3w mafHI78p7օ z޼1 v`":{(6R]P^KPZ[8pTmKnZjo=Jٳ-h>kEW-!E,;:$F ›# NJ%č6Ȩ\Yc;~L7…nMjuEEu6y'9>w /TxV@-+a\,Byح_7DP13GzBE+fzy[竣}GND'B䢌*L.n%PTVb1@$/uΕV >Ṷe^lc111S2wV8N3ŒM[qjפ48Iَ66/`Yڙ`5m걓隖1-K7|7#'œψ&+lXg_ ֽCjeT"Jӡ.\Xq\:~Zի/=51]eXFn5wns 3; w067\u~~Mͅ wk׮^ټz򧛗֯߸ٔ!*ƫRߘ?G3&OĨ +~|J?J5 ^Tn}Q(Q9QԃeREDSܔWI`/ؒZW?mA,YQ9D@*֪ S - IVVގ<]E2;P$˝rLa2R"p0C90DA{2ޥ{lOvw)e7CΞԞM7ʌgFxqyx͹Ԭ_xuc. S'E좬Z*]hFwQXf`짇ۃd$G϶v1^=VAҋlv*_WgضtaX6`>M&_쇳-A; ՕWFE "6!~ofFxp-uVvhF9DK`ͤoئ: /ᰚ$xp,^ ϝPQy u53,4d]#o/*Ψx0|=4rUݱ/d10%p럸r:M lM払_%KoZht>~$!"f\6?6Sf~)dv/L[)9&kZy>8MQw{WQHۏ6J)?f/NA_MG"dc%U#FaV )f=A'mǕL湞S!|L Gܪ^+T΅gkHT.y]2FJ"㭜XIeٲ B[kq(Iyr (gM%q֚/a6O!-Qy뱷6nnlT7rs1\0b@p&J S c|Xtb>1ϹZ|R1>R 6@49q seANÓ* KI3dK-yѦ}ds(d,Z459}V1(+68ܼ:y7h^s=Cc Hnhx1WHIdH'8"dSY4 PtK4Yi&WO'7=q阨>ڣdq{s98o4X!H}}%Pt_99bHSTzTh,uwyI!^k 75.(,iیf$[E/lcq{g0G.yI&^> \K PҵF: Nb|;j%T 3O^rc'^VZ`GQϠIP&!auط]rߞf~NETvF_Dceڽ=xG(b=A|ˆ uSq@!Sbg$a:).'25q*5䁍ViL eBr߹Lʪf@SdPx[#)1'LAuɍJ|py?Eݷ$xȗƞr 3^o Wp;MvݲcjQٯ뙬 nE.;BŵuxQ#H6]RH2Q8ݏqu6I=;<]nvS,ac+7/A[kKW7D<½Bc8ب]|Bu }J8Y%J`l`<D\ l3s$"NcҬׂIźS!Gf X0&㕘IElѳ31HٳA'<™ Hnx'׮O5C&q$-qu)rĦ{uO0J{;.%jxQjԗ ô=7ua8\V2AE| hMg.W?}J7IŖHJ)s萡gMdIv7vu_^K/\q Oi[() o{ܰ i)Ly7|j{VF.5MYWAfOCl) ?0&FTUϦLn?E5> &J–'J2\fHsύEwv=r$QjN7&:R[QRN@ M GgK1`^7pݥ'bvSjN3ÃٴV1~]Jx<'ܓtDѣ?@hQ8 X ?~f+㽅v픞L#+dKHiLt{dfQ'= {4PဃjB}5{a#wj͌WwgfH#yE4cH(U= 篟psz'o]3܆P<$zި)aC/|"$XFIrX9Pxd1$.vIo vEªy L PBoDܟ b!ew},*MˋH $r<OT!ἦ>gSZ*@@N .ș5N۝mjf1x> ,VOrH-zh^kGZqgjIF,Icª"iIb3Q$`,KUkRVt PHi9-wH-EK9ڹ#+Zp-Dm61Ya6A5~-}E[=\òf[\c9-Z>hn4mkFJbi&5JN\}2=;gCKnp 0~4m1#lPA.M%I3ڭ/sVZ%uP;';^Y3éba-]Ls滸ivƒcyQo7j)yca0?޾dXy(W] ;IC sgrZ Rx‰9$w} 1K2V8{;eϳ0|~̟|w6 9# Kr<4L4@h;PG dá%hq#hRN.D*nC h5V;Za7f35> WW7/s{rDg!+3&ـO+A-ts,y^mP~S|t?`|Z $ĘcNl 7y= yA3Ղ3>c7GCQt>a{MV}LDn\RyleŲ1Ӧ ^B #5"z* H¨a;Û7*lȻ'ȍx1~ G;1rqqƣ[)CjM">U3)|G_+&B"`1WU&khэ$  I "4~ʍ:uddMڔi:7{*mj,ֳCzJl(ڿl3JњI^`FLԲdPDN&yYυY{PdOWEyR9EvZֳj;eh0L !y^we )diCfF.c&1vWh,U\6Sn;@Jz@TUo a?3 /z:T |«p)oM3z ɰw0<~ &P[ n{-M" [ Qp 瞇mFP&b-0N*xK*SŮѣh?T''Obid6M%0IMLP\!39]H~BiB}b[-&$.cpU^ViHQ`IhQnm5QÈH08g6O񂈧:B v2]4`!Ѳ-4<&6,aDz<4'bZ_>9RY%*9#&̠*>sb`کHU>3W:0V3ׯ+i᜗H!HP 7{iO99b:Ã3ʔ1㹪gR3nb HGBD$sMNLGeWLT[ Tlw;#v ̔ uu$ШX:,hJL09cB~B*0hc~(}fj(!:Ԙm9͗b"hH7sF{D3'ZF ϕM 9 xt}g'hACR,aetNQkL8Esɔ``1spMv98AǙFU~ys;vWk9Z̻rTx1U)l])˶ڔOK̪$ t1zgi.]6?`K7^1Y!6d5fői6 5},(Tlf8G Uj3{<@ ٣I³=.aJ87>pJGMw _3*n+TJv,1z.G&[3lg$yAU.{nCVrM`rhHo c%T]B 9ms0hxŝ8q!<-$%;.lU)+=Sv'm[U3YѾ’wڵhO:bd)"%-4tULa񵊆zfD);r)Tn՚Uk}0Y1H;FY&dקt]RΣjatб#Zзmm!ټP2R" c붯T#.nhU:lf0̝G"ֈs?5TXD萜$EaW5Ή)N[V"M_Țj+nE_LYYs`Z=9UŘ E'}):Kw{EE ؁(+QfDՊ:QˇtlqC&U-~bF-[j[HbA lzJ %ԃl'߳> 7WF[IcF7d"< XY'"12{KqrC'NA6ׇLZ O#ffYtEG]FY'2c4<ơ=Ӱ;#Zϫ{á+S=P}(d9(*}NK<b84W5W@tDפ*2DaF5ob1jOqՑFU3 -aRkY`Vf#P)ygy9sO0Ϗj.t~E k֨y84z&El "p~L̋2z)^~IكE~l"3(T$ N$ v])"\eEX$9=,{4$8./=>y`k tk{3N0v3:3WCMJЛdcBȰ~񵩸o}Tj8Л{N?̅VٷCm31ѫ鵹^5759'eG<`\>'ћ;it>Q8fd gaN YZEZyRBPiqˉݪ28]H7EMLJa0`J2.H=q&C/\Gߡ vsP=R|np5H)Պ8V|so7+YIlƙ:a(2c@O/R%$^x얍|ƙn)B[NM_͕ci/֊ $̝tSg- <öY3v fqktoh" BaOIJl.t"<37%( %Qn u"'&bM[dwoTb!˂q-θw%a20QO҅ n]OKzbې\ ŨY7V ;3u+XAvTQ?.8Z)x9}k2G83fD/7Rבu]GSu?hkĚY*57v\kv4\9*{*sE:Ž*lѺF*Fri)exTDܼNa @"YLL] DESxbU˷6&?=, !2?ңxd%hpr8E'+NRdW(bLrXZ,p.-gXiͭaޖqL[[6&{i*wc-1t*Ꮃ0 _C^@,ap.2}[mW=VuG1#2H`dnWcx:ʚ4>mqeAVmٴ#R^Bۆ $m?,c#U1Y$IvHc{Z~7"6&XσmNc*J#L+1_+5ER 0 v}rU)a+: E2o!g[-;;T~܂(| >b昜1wA~,xiֳۣ)%{+Qz'%dP%!DLi~~B U~nex^HM QY 阩h[ zeYV>J'%7gV6Qfmρ/m\FVSft~'6C\bg]2Y kRV/l 5qg^4m\¢Zpq:8Z5-bP?1?ǹXבs.]7M-DAg&'hB L T:VӮP'.`pKӚёX!&ox ˽λ]n:c!#,iȄ=aŶBQ`N|7؁$0>3 $1_VzZLsŏ (GT!aB6BLG:tt &7|$d5 0w 5׾pP  -$!IN5‚ @,Į,l,:M5fh8^^b ``#@ᦗUT ƱL`WΜBlWּO5ƄRoKi ;&qͬ]k΁ bRMɧ)Ҫ 1.$4[I~Ԅ[\]X: lzIaiϧ睿ا:ov "ly-޽ىޤ(hc&Iy)"ۏ͏L{N cN+3kun<,7=xj!r,קpKWr(\PgP`cӜM{ .8XbMQʂy\ 1dJYV|\vz Q\Ksȯ,l] -I!< X0pL#ٜbuG7dR`SNJu2LkGcuzfFU~[ƃ{:WXh"8({ʋS um&'W,R *: \66\g%Z|D'78XW\51woƔ{q$]#_wH[Ɔ@DIxGXeRHgʸj xko03|U`.H`e*m37E/Z*LfU_Y`5%Az}ŭd\YkÞ cn ^ ipY[ZWQH*aGm.5߼oM#3T^Ӛ4npooV`/7$ҹbIQb<,EQ([iGE=H9Z۪ZC]Ka4Iaa_dŘwۃh+12wm+U{E=>~KYQwZîf]w cna !'NJ]Vr vdw- F@r~NGL[FF.ʵhdk(Wcy3z84Y<>"S)Y ( 8`x3{~~ ]~gQ2aٙWgņVXB~f&1WJ|0jL$}"YQleq!X*"Q$襥KDJM0eUӕh4Q>i?/-sw\u 䩰Ru󽽓t-JƒnwPS",g٠!w0(gűEG|:v3Y[c-IcV-2ǜ3j2p=н OX'Y 2h1CAq0N δA஻3˾%ʶ¡5v|jX(UNBN*w4ۥdi2jQTWgENOnaO[waIt-X.>a5=t8-& [<`˵nVx@պbx㺔w(^@ szGć9\ѭ@?= \5qϠ>tMn'Slq ~.=yvĿ3K KKgX~# % A~qžK9+D7вk4&WMK$;lҵq{#`:Kgs̙D`iYZ"fsuVYVKɽd"6A u$xM.ھenw? h{hO1luw5RHg81Aȫ|@RհIi]w:HWo֯\Gi[^ڕ7ׯ]z%_lSLVxgK~!1[wL07xNww4 ]sz1$CL^6覂AY <ƪ>Zc? W0&!ɚ51ehV*/rs"fVoW=v< t}ʍ/_]y_"j>׸3j;#]4cmrlL) I=[˃9GX މLLJ[ך>f(TIBd-*\im DmQ{NnOmi_a~9 aP f4a!ՍvgC":.hVp5ɎLjr‚a9S2֌@ 80"ϊHGcۍ=ܷEKCS+4a7DT?gOU~y5j6EjLrs@H]0OF$ovvbH&2Ѫ3wZ%*}ᖎZ*1&0RQR=;61[+uVh) -U2pjEa}6xьnExrꔊL37gwC"pA!­lSgS-sBNx(UD]a>@Zμ f00X~/4 *9+lp6ks߉ `e歬t7<༐?h3)Z:hO#Pt6u9&l<*{(1DEa+*:z֘l64/X,83Ѕ;%Kp4l3Io+VpYv#oKpsʡ"}>A qAoJڎ) Vߦ&Zvmdhb>ENj$qp^r3+?RnK*1_+jQ۽v| u64l>:ì"P 'm\{0LX-f %!Ily+ ڶ8+1aPW}ж1%(D^JBdW"^TlXs;ؠNvrvdKZJ泓5Z-?/$))U.u.y>gc|ٸy J-ySKqM:|ԉMw]})vLZ M_Csđ"a5d,PU6\:x^~LE1i{iVx=WWc7>~mN6DRhu4nK3P^G4bq B@"̟ZALƤ9-x-o# 7% 8>dм/xJ?R:>!ÑwM ?$16^T~dI՛EZ f 0!g * MQu}UVy3;-NSI3T0exztwWbWbq'* Yk% Bϧg"='vWjy0q039ƵO|ko:ڰ EŠ (N0k_hi* )Y6ɖц&9jc gu;1>y߈⿔NJ"^,DӠYiFȥ!J݌QʼmT `7̙y3K?> YڢߑM?ԛ#mU sA9aJ,??8Î}y}@]r%^=p%rN}TR7v*^,//p2oѓ5*Aw#yN/X.j tw $7WX)Ѕ9P{Rx݊DU+r+$^agσ6yѥI (Kag>:^ ڢp_k s#k^\QM,OVTѻp3`S鏠> (d)JGQD;K .՗b&d&uLco] ӊ &9T?dzә{n9_0W>7srsGNĎ |u;ިdkqSQ ڰ֡]^dWc?lRʞ*NS;1N{9M9N-Zۯؓ($a-ٸz^J PlҌܧ놃$߬ } |v5v@= q;F$}T 4ƔT;TͨsbWCCRa+ {HChs VRe ƅPt~p9dM<*Н/CEEVm6<~ORCvf'7^2~ۮ;^8_6NE$ zj:kТvޝ8Giφmy3CyǓ8^hIb_9f9w*iQtEWЂun'#jb~meBqHև\6FN#b_4hu#LHllG|a@u%Xoy͕\U2ҚANUN5u^4Y4rz mu'T\\QRZ*ה!D0SPSS+n+>:V}^XuwZRCJ9֑GiHH6BK&j޳l8HF>L, %zҩ1ZCXvg#icT_z,8}-=v;옟d3 Kdh "w?=p\ZڬN |Y>;<}^{le= *7kBgHDg6p~mٯ{5gZ/jHwtQ幵slG]\_)B}tMћӣӻJxoJʦf,r@?gYO+m)'^d@uR鋖0>Ý)t vT /d^bPP6|%No@(=`g}u z QڬFG}oi` @,%]+0W D;3|?UiQ2`#Q?pjyoeN^/cK$.ZTue=da2uڂ8o‘xU %+{ A-P]ؘ,ӻ_|I. ;gnX˭{y(asny4y5stLA zDJ*>`xjrוju"_l!L1{iSV_3JqU|IJxN}b7v ![=m7$'&5I!Ԛ&Z=6ÒSB :hv48|YW85 0V믄)bй-p+Ke[# #bRw,sH@<> NngZVu.oPNN:l.@" Nj]9l8٨T.[0'||TCECǰG~xbra)IGP?n~n2hui4..חNz0*\M HFv=v<Ҏiƙ~gЏCQ$^؝>ȜI[Yb1xgcqstfeRcZ|'bR6zkf϶j8BM$@J83sp߹[Ƈ:B-&*B hѤNEoBl(B.ژ5R@/Sh[ܜԨɸP7797t#d,. 59mOf<0v@꼄X#3l 9g'(q 7 L1sj # tZLmڊ\n#. FOZN Z?zԇ! Xr`m ZtO;m+yMqVQĤɷॏ'7kTB jx]sd0 ?o)¿r?oWo߾]_g+};$ooW?p0u:)e1yHyBX PVzb'`7tSR?";FVܴ053wnJ* :ee*zFpÐ.uБYgz@y[n4jxփ -0W!\A$4HۚW &1&ٞ@ 5KygUwz>LjH{ Tn(Qv!l~O\ʧچl{zH,H Jϕ\Np / SSr¼ljMInXئɬwiyNPGw-A ] 8\ jw[:L\%&LXBb'H['ej"O+'`cA!"qRQ} ap_)X,AT+W%(ݴx|Jr CT=5J NFx g0In7]Qo)zim{<,l3_Y`?YTd/q%2#qx1QP<<`x<༜p`tR, Zлg|'/_Y;/;JFV3B lOG^\'gB/W 55oɐR>qf=}t!'%ϴد5OX ^YvVZ;ku"4hnuTŴZ ܀0 ÜgN3 {BF5KPHoT}sewlUΌQm}XkS(mn[[ i I-z[LI{!E'ap݅'k X}m]"xo뜒A7B_\v.SY2(;AVST`UH # {%3t!=} 4w(DLc m~oXKLDxym ٳeO?.|}//|>}waK9~?~xW~>]UTSRTi/^A:>Vy\-,\-ORG>CO,< ?>ݣ!?m_keGȣ??qJ64_zD:=F;'2ԏ[Xrc6r5 ƿ|o?yco., /\X} >Fwzoq;?ڷ?4~/X^]{0~㛛_yha+?_qӍ>& B<[7g&wտGꗰso\w;ЉхoP早Cs/?w/loP#㦜io7o*N['7 >as|Pkߦk BNC=@?_Z݃*0)h???o~{e|so<'&}|y\2?eoQ-&ŷ޾7_Ve8@|?WP?yZ&łQխo<s༾‹[q_߿Exƿ|58~\0~Q7k_~s%_/} oN~o".?:.uُ`H׾_yobO6zۓO—䏽ϯ;GՇ} O/\מ›kz>W~D>ION.~G66eT?ˀ0>G~oͩC_G~#~+?1ۿoo=oQgkWka_Mop|~րpQ`&:zL_|? Lz~c_=| #Eo?fcHPg~ AM*-:N47>*o]:7o}]xV_^[4kg e>_/x1 G~ˏX{kkjk5-#~/}_qk>~5 SVKo;Z"|ػOGx1~߂!]y[ɿo {?x?al DF~N~"lP{7ކ%U}"8YZ.~S=gƕ/>[_i+_cïMZ_[ e; _0z?3" t)o7~5it?$`7!!P+D~뿍`Ԇo7׾O ,u'q7|\_g;2O~%7/O_'fW]?&wtπ/H T|?|ayGheJǦnogȟ~?ʛ 7鈹W}хyͿ| IAhIwx?E [k+9?|7~ *\xW苿^#߯+e|Yx"?gTex*_W b7Σ;?? <3ԍoIQwo.a#խ߂(0a@Gqnppo>Ww3syO,w}G[? ~}7'_ *|q߼#>9]o,+~OAVojsow.ˏ"/>՝$w^S}WW~cw1conΛoU_qf/~!"MؽI柾`^C@_@‡R}x!/kxdI6c>m_jQ-ܗ% SҘ3Po7`-i|D1J|'#zW+9og_X2| =MП>Y|N{?y듏}|޼[o|g-zy7a?,ž{[KxRKvGߺK7?063 Ʒڷ~g\ Y-*+o=7 *ﵯ~$[?oPwk&-C{˛ z̯}*K7^a(Tg=#olˏ-^A_=K/˿[%~gLb#1W_ݯ}q}lpÿχ‡χGD^ ~+?CQ˃Z/>WN ^ͻqQT: CxF/;OWuz㟽^Euџ~ u|߇oC6\lϷ_'~?ϋQC{A>@>k|ϟGsO>om|Y>%C绨CG`E~O=@G+i58U=CmK v-|3OOMa%||^I;v/4b|j>JV`!S7޳g-57 8'9 2 u;?wݴ /?woI J,,,4q9nO.4arпB{I a|u._E%)yYXh,79>“7|@һBC`F&1ŸPZڇ[}팩•'cp-txv;/,^ Ⱦa̐tq\ Zi-/ HUd p~ W+I.y]~ó?nYd_ozF';>?c8m8M.$_/.Glѵ}r˧}q9<KKgrO=ăolS4 !jN@ Z{ibjwyW*:v8J6tPf$S1"h% OMdE{: tM4 F+$m򰢴–+/t =pd_qSa+hN7,j׮vA.Bk6bҍÉA9Rlŗ7k`Zލic~zaZ6 Ǻ IJ_ `g@Vb5@>F@LF^(@?8imT&@.k< ]uml7 ERC9mlLY0߃SYSO.=_O,//g0SO9[/=\*D;][Nv>hFHKŴ"3e;8eG:>`?Mh|%hX<oB"WT1v{Ʈ5g 2$sl6$$h;Z1#:]ѭmk8Rl#c] oi?Hۆ vyrw`@ǰs k&}{ ŌS0<`I\3-ŗ\Y2 ue "idTG{ϛ*E og0M^jX6v(la얌 c8PܞgqDSf痣砣UdO%IjZt^'Z}bCatTu"wA"izŰQ4l a[ Mi@r3aI;3F$kicvѤO1Q0䵝Sz+*+|&Hk%XAq kdx"<)E])I8UQwN\UAz%7A#(EN v8Qx;`WYt~D0⚚sCqE0݅'HJ&`_>a@u33O-O}|\U.mw(KNgW!ZɅR!= %]F>£HG]M0 e{12jpM6޾: ts PA?sn~mX)=u!FRiF\L3Yh&5K\>8`u@aU@(Ř/!$ %',->#iV\Ƿ+!h^1J@Rx1'n\ $MVVLriB\|,^x'7 &%k;.L`t`hbia}cÅiLQB"ScA'a4Ơ)GZ239Ӆ顣8 t< %dLʗ)gSεtPݣwkØoF0(H#}4ՀaUGLQ0:3[qYY_Q[eF9o=h;5Ol8XZV2kKUd<E saD ɲR(P2UP %.țn.jnQ̛5GBV lu,AyI<*/J^P1':@ҶбiSN1vTMkM>4]ՠ\:TΠhZIpb? Jfw# -PVD D*cq*U'qr$bZ|l7 pzX48JɹLB/ߥ'W^{z;eQ'@&qMN΍H?F+U??]UAb vWP='?Q0a5pQP]ސ}Mr'}R)ۮ3VW( ]Ï(%cH*8[,pNv: &bAk6%#&JyAEbtnYGnq'+8P]k1T6n(+^aAj` WWp.ꇝeSPf;3GNnxH󫂾`hݳtƣjU(&c:;2D?t{ݨӸMbBĄfviZeA!ﰁQXu2bJ=^"0IG@iĢ=A SDpT1 FtC95>Sxuuٝ}Z 2B{ҡ9  4 ! /wfn ! ? # Q(kB$tЄ,Wsz2eĦ10K qBh3͓q5zϜi?%]sͰYxS7N1ҩf>xS;NUi C'S@[ V^F1wI c,I 戺K|Ac2&Cd9SGe.+,rӖz*ط/kld3@qQaN]%{Ǽo!vI~% c'ɨٟjmUp")=Ó"\W7GY vbOwMWf*uC!ꫧo3 z/T=WSWo]vR!QnBҹyC}TeQY2\Xt6R)#PY$QGx7>^ <cy r 16ȑۊ.ZaQMDk/o(]*4}6UjY ,"U7Iب~` &.V|L%XwaDtc|[[*-~\Z2Tntftp"AX6q)w)\[ka"瞡)e#!8gt)%e9@tVnYf-# 56[iwv̗Y"ԶN3jqi:{Ӈ t>r7Eù.*Ve FEWyzsw~c[MvR0X.U7Sv8ƹ߬MMd\8|kmx*|k H0CnJ 4&zKk7n6:9u/?l۹1' {*#AE |`BIȉR Ȏ۝gJ"*77f1>wFp<7vdY!Q^Y%pXi'aGTeU%9?s0MWxF0G 5uPږ mr#!``FY6JIe$P0VekqMQ諀TCWa-G. '(P~֤P3l+Ek;[z`G,|1HPCJ-IuGa8- 8+1vڞJl=em`.. x9=ی?~O 3tL[]FXNz\wT d'( Iv5-IDx1Y/ R%w H.7M̺>qzt2)+[ZzBK&MG1'|t 7eV鮡jΙOc}A`G[ȄP4OMG<.:ma[:ęs F"8WA< 547bhd5q͎4>ouʁs5]6 /,hzwkVӧgCC(!C[#&2nƁ8zdod iqxDP8]qB:|?$\Y1ġ00\q2J8~u[ ̖1a"_hBtk OIJ!.ɄΎDjQxFU zil]/#`*k7NR53,2RRd/O5yUT գ g#m@{-.r=9Wh;a=^O6[aڔqE 7wK:P6弚=͚A !U9_xHOT9dzMk]w$)Ҁ5h$SalD>WO|Nk']Fò>[-b֦3T>V &3+_xf~m f~-{ Hek6ЂM{|m̂T!$q_LB{_S duY t6$iU.-{&in]wqbqo,d0phhLDcto7n'ܡgEX`tti0,;V` lb2whˈȂiIGvv9D`^՜a<;n8ΰ%v:b,h,7-%4?~ wbIloEI6aL G*#Sn)uQz'Ѯ yV|σ;RX;Zii=$_ e a1>ъ#5c:tSprI6O/UwȜH\٭5OdN 2gIB'P <~gzOkJL[z]?߲0zt_#tC1O5o/#_ >oͧZ w:^b[{VO<=h@ ~= 3xЃKE" Y3%GU60i'y%RYmԢ OYZIϱC4殰G @APnYeRChmlf9+NN4Sf787u+8ENf7Q[ւW:C~}B/ E7T^IZl&>A;-\fPt{pWUFKz['&>W_C (#{'gj[N_}F@]5 Px]n2F_z^R~/7o\xaŵ4?iWa~S^6їZ5~qbkřŠ+):Ӿ) 8h&tDw)ٻd qc:'RnQS %k~4ʍtlWp ]/W-[ˡbi95.}jk͋7nV*nB'n.)oh?l}mgpI CJfmr"TE|EnT^8ykbʴ𙠺xJVh]95SG*HߣRmlB+ &faXp+;tS1:8X]=Jeam50Ϭū94DYq8ZbA x ZJ[\՗Ɖ+s{#So=7-V`ebiQ!$WʜȏNř qr`1-j~x JՔW<§{LjI07pxHrxrMb[í4h!#;<, \ 5 ھaA._w+z]Ol]jwNX`֩tÌ<̰F\PnOv(— 4ɨK]?im6b\x3[Fv;vG|!. :xDJNwӑi1@dEՀz2N蚋قhi5Bi%Kht#+ZX"]ub!wH 7R6JPDS|*BQ/Be_] q }-bax&omM>,:f 'E!U;i-W5hI4tvM^ĘO`/V 7ZUu Y'2COA |q8J40L!% vc8 =%) ?!q^W#W)l~S࠾78P!6^kVIE Era71D!2UjvwWnG&ytzjj?Y0,El\CF<S`1Éoo\ܜ}qŧNs<1wi3Zڨa3H9eRvhb,S=ktq,{#i,^jQOT׭[7>5P=?KVbS\Xr]u#(˧ >$%%ںc ZՕu/s~0!'hj7;+)'VX  &%}90 -+SLrxT]#MWiN{$쿄 ?sQJ"޴.E 7G"/(fl.qNЯ2CE3&0ס .<k\$ndJA]n~PV6G++/@ه. M'&ЄX^:UH2x,I+k8 =n*,)GMt8=\&.0iDr=[I̊7c8MlV^G~ڒ*23D"7DLzGg'.J7]TwS+zhh@B/xc<@C/DV0n6-R7hvHIT@ ~])}"O`3dU!Fp˟N~`\TILM( g`sjRrdAMYg[*Y3:p4bQÂ6;X>wNA&6U)hPGz9+LCn#+?߫W%IrӟV*/JО9ia61;vIr9')aϜyN#g\Ո֚ibG1{}dS@J?ER^IsV 끠>T0My4Hd嵼lRWRa-4 +kţ[ Ա`}'HH6p.!.U)>Q[9Ϝ(]EEm]Jtŗ_6+(r:v5fC|0tw7bB?(Jr8O%%eMc P.\O*tG$hnMc15Dq r_'A#Vg?=d줩Z;xXjZ=߁# BtJSJGAd ++ÛLLbrf)%%Fy$dTRJ״~Gd] Qy欁l0c15$3~,2ER&W;.dz  ) |XR@k*Z2Gq>'ŎJa9Aw3º;ȣnA B6zN Eq>(npرmVNo#.Kڃ06V *IY1{jn9Z@Se)HGhfy/ݫJݿ`n ZPM9EGA'¢YD+PmEy҈QS gYqGW4W)R/<̓zlƿn\56qi)=)$5+Q;0<~Y"]-6m>J0{3BwStJ2c6f ,ݥ pORq?<1K?,U+bɏ1X:j#VaWuYUV@RFՏ-MAC $ F@<(bkȎ=oœ¼-.6 mNl);_B0&c¾%VrұRa ЄůePxc5*eJXD M%6>K"Eat(LIW)RdC"A'S!X0;h$sk h/_,sNԕ73^<<<ƿ)4Ctʗ[#Th{ o072DvJ(+/HFO5`.TwM^[YiJ<`a\A^y^O'O#a#D8fo4dȴ[ޫSZ!mALk[/g> KcL%HkI.}J +A/-qwnSSTH5ENe\_aM.Ryd 3uF4yfN!{CTTFo# %8-w4_firC[c6e8 +ڣ?-veQd(ҡ2'HEZ+$LdO}n*L'ڿS׈Ab̫A֓#lgK&.S=Oތ1ۓhWYڴ0#zWavfPwwqkdeGA˲(|e#Nޗ#?9,ѡ||D]my*A'WAT[ᚂl3lMc_YV֦={+yjz-XЀ6.V,`/u bmU pqE:[Rq^6t 8, ?EB#d Wd p쓭 |;>VIE*NH?&},Gf2{0(u 9eVvpI@4UPV!⭥ޘ'B!e/X>ڮPj\y5L'r[4[.CRn10vA| H0ˆWys4Q"/ % l^٤j$u?a(`8ʰ2 ji7(oJEg->ĥsNV%&%nnX܃@b$FŇf=67 Ca+璚=/Ki@39ϩ1,0!E1}{ 'a Wq3Ópؗnj@o>t,An fӢvapO̢M>ǙbPo@Ŕo0|w~-89m2l7鄦) YSd" OrJ6x48<`vM"/O}C58+P(?<ã),ӠS^k\? 1hu<镧ڣTa$*%@FIZHCָs ⧲OP]GfO)w׻}{myc72zoR4g%Z o\h =3tHgNDʪ(Pgz&zvD[BW+At^@e'Y`Ĕv׉zO_T}gsPܰx>{N] e  U_f!˶7U}AⴱjL[wkJ Rh4X24uMl!M*AVmʖC38բ`; eE kX@l$iaYvXXBfh.텧%^C0n)B;U2:Wf@P):53w(t=ȼK,N`ؖrm1 E;<#-WDOGlMw֡ &A̸N 0vNY20U. : yo!ZO Oطn)ð t]ŵOo\~Jp|F:f"oly=N^@JtP t -(N/SFoX K>2 x :%eq[w-m,g[yجvh;r:gs;]bp/hz5X}ʐ.Nݘfi\(~M'H 3;~1<<ЄA:QdL]t׎ r>B^` 4ʈc^+O*sG. _֪ՓҹRbecٳUΗ3˅AVe-1b>"9&o-C$t3Rp6JxzwZh'2Ln0/󊗹%ڼ{| cssG+M1JۣHdmcuCsxO$5zCݤIL.V{o VTr$ pHaW+Ȼ^vBH6@iA ,āz=y-nx*\ҵn7( R3z|KsfMW$U5|L^xz5Wv9uj:gpY;zq6Hb \f-1R²sVjqqc7^l\9 ?z+[!ZK)$_QQ]q\a}kXU8ɣUe oD02v!J_5>Ͼ9̙DEL|jp6~60oMW$[[3*ؖHw^iXVh]XJՠ%@v0_`bZ1ۿ`覶"$ T8-hk9i%m \xZ1OVac1+kupp*΋}l22(aY=v XҪV!.$;,0ƕ%*Saꔂ  #e@*ɓ852osۺc`j57 Z -4N6xu;co\E }DH Pg%G\}1{PU$C<)HN58DkaOGox(D ]4^Ҫe-|%9Te.&7pyrr*0e( c}faV[Mރ`uȦEJE(v*dQ^PEta6nc֒A%:Fj++eFa&^'Ԕ‘! I$diU!Y`x%2`Y7L/IѬ9ѐ\Y5$)x*@H tN59w6ջu:"Tu#f;Vw$ M/OƂ kk'oɄ1jtQ /]9ͻb!y2.' F|5b~!;c}̇ F!㝯kڏFB- #wbZv@ݥZ{6DjYL)Yt'泀#gظz EO9\p%CSLmTv@-e]Ad6XH@yɁ&5[^ؾJ*~WM')S81~ǣ~1BF9Ez>(Bk23T] BBptG#jqҀk2ӐlH_[=v%Ôbr(B3U Ѣ3$o,ElBc%[XH> 7ތ-]quKYJGj+TbsRqXPvw3F-Ru}{G<qEFpT=g+f:o%7֓%/-'FgU $1 mqL"k3b?+ ,v~hfڠ%qN=nː Bm4WT)S.?K?jLUGvn5VSV>̢nvbJ*'J4N<ǖ02[%X[Yr !$Dz Tųw vTH`RC&A>[,u-s;+3C>C]pݏb0+61pu2Ml6N8eZ!9`ĖP590ј.d9hdخ:"`ņbBj|Pj 7jT|6SL"AI:c>wT%Kgs2 &GeP䑒 ҝ-XZ4dp.dyr2::^$ Aȉ`pIX4{k|1Uh @ٞ/~߈Ænk@r>WFW4K!9>bքp'@s粒y& xi*#${lߦ7%M _|*?faJJuН> 8G{H踵nכBG OscL(!{m N]:MnP7Hj+2+";n};o>Lf" HTX`M6ټT HAu/E y4i#մx{DFItރ feb=JČi2l9nT%A6fSMXԟ9%#e%6R|!2k:A Va_vLCKF40zIx%:Yy[0^W,n.]#6_ Qj˝zKU":r\dU0 N[ -72(PeKv)\gz-U3X{=l sE.A6:?qq1(c@za5 져X_8+_4tPD`RwȘlj6}X;]+ʏ=/vWr.Or5b߳ٸ$? {<\ʰN.}HD^9_u;q{jDn}L_v-kku8BG{ZiK8yE%4uH1݄ F FUn1nk]p@T>O > G'qI[8Cs`Ę>[á`f18FpnU U}{jZ$=r-H)Lû$ }4U p.,/fϷl B1 FB|W3ϞnPc,=Tlf Hjnb:sE]wg`vjk-06ySlMEZÂDp!~浱ؕ2[-4ж8,D5 5EeWا< fP eȘ2cX8 ocZZ"0 Rҡ.=] OD'48N^T<OHWҰQD?-gC;%V{\S`$BSTUϾ VS r'NJǽhet[ҢHǦi [xTE4K ʋ:+p%Ր1 КGan;|$aS|q$QUPɒ ^ (R X <~ <ԉNivDۧau,2Y_I=bfTQӽ`%;jkKrqqV:FVTr8=3;[t >v`0mňTS9M͂4{pLPe*M:Y)r8$q @M VvA s|v͈+ }êYd:isT#f v&V3RM*Sىr1/f D=0(`q>ihHς}+)|"'7, Z+}_Ob5tsb'*fqmYgd⏢Cj&BXshh2aN/`x'E֟DTgA|,8~0L;݊, v])jr$jOX/NGC;@>DXL-L*ܛHҖ6[67ZYi8Ǔ̂Rm濝G  B9"cq{#Бకc ȏpq1H3bZr]G/2nY1G8Jnow0By"y|FNLfq"wbls{9x>dF۹/F ] C+[Wz$:9Jók`Śھpǵ>͐xngdmtLmۯMr)@%pDQpY.l;bY/-2PZ4+>5f?3؆DCGC 5GEֶc( Y a | onf? R/-^~ Wƣ+|  V<1WptԱ1C,v0XmBޭݷnw硴;h`qwqM6:5=u#7hnkzUP 'p! g3"Zx omuXŗкVE>⸤:[X B ElĮ.(;$mH螓rƒP^sm"N^&0_KP/OjRt]U$An7%dg+_9d Y9aO q;-^p҅ y<~"VX&7b:uXVl\Lp1Q_<)"[[Z)0oNz0I t-&*ną_uS9lc)CU vN䵈Mp90ѓFZG"WhJ_mީ`#Q!s]jj]W#Df_˖T[֤<@j[~€뇳L fW=d2*(fB6NK#n)W~h  Q:u*v,: ׷'^pGH7ޮ>꼉d3b,IFOa#@*d޹+x=G,IxsC|3;#4> nK ; h' jEIIoxx 8ML>hύfol=L! !lIA7 L6ToP$X ]%9# mz2zr­}/zE<`.-"*|l 'q7on&wӳw&pK_:2$2V$X'b3c2aa uFi GPK5թJP8OH Gj BVCG;fӀ*$NҾ}'OFub6l!}P6oq]v +e rвoeձw|ԇl5wRҜ #vi e]'6oY3j߰!ɭCd\5r6oڊMEVmKΉL-z|=)˽P-Sz8Yu^)} +׹NV;=,a, %;=Cgθè˸T:@i_XF5i%@r?__'0Fw}rT]N%=ZEŊ4'D4{vSͽHft&ԁF4Bý)X=FJ;)'K 4yrBurZMfE0}:Wk">Qڐwxk:gS#3EsEq)!%WauvZJ(dz7$Y Ю@h6O"bc 6.qCCJtN#D;=&HΊPk>kϥ:du|&ԩQɪ?PBCM"H7Z=(&~ YcXHN~WzrVP@U&IuSw_dDzH(˷_7%vf=hIFgEwa-)8DkժLHb/R&c>YFk}"4+<-]g=kE_b/0yr-Ьoѐ,yQ)srHqsp _r KL#v,Nfw\IWuG@1É&2\z678~VWk_ЏT$y߄9e!Bw!aP`DȲ[5Zq`exϽ\i⿈CO6ٓCeٍىI[&)<6pzqfgd+G7ӜaxyXeQ7? %i2w\M+%9bǒ˓ VM#̇0@7 V`cȷD&Vӝ*Ko3zéJJN${4.gi8]jn/U 1{rBvN_XNI\o틯\?՗2iNZؼQQ n"驇TNfaԱ x ~ub:{;Py8M58%'8K]݇<[V:=-A75)/>uB /Srfd@0X=*l x\ߺO$R1iЯy,^3aknI#Q?d㰧:Pk!LFFEs"~1ءZ:OXqSxp8\}iu{j$'={NNc~w ICDwp5p^j~á}b+ ^;Uvx^+EaCٳ@v*(7YgEElƒЇ1g"-t>!gV &KҭL98WkՍm?|<F P/[k8#s'\QNjaJR󸻥EzꟋtt؞mGKϋKR >4j~j~SE?=wiGS=_4{J4*c뀍&~n ʑa{L?Vfz,3<KjiGXI#IA!w'qER,#Padؗbk9.:~\ͣ;<o;dxTQ(1pzbxK`mi\?&( }i) I%_*!_O?̤czl{>VSc SvGm\d{p]pĤsh:ٓKmݟ8vY:jؑ_;Gkf CR: C;.ê5YPE{(ZE,a[Mڻi9~My:XʽM-L_2F6渷p_:rN#ZRXEȘY(rhu' ezLd8#1S͂ы%/ʣNtҁ1;—yg `uQVi۷Pޠ^O'<,#/aC'/v2xۛ7oLNqd)Iw> ;WhA(Wdt[\6~P-l&3 KZ#Sd/ g4SGdڌ)(N$k$KAG!h1b+(ijԝ7p5h~ƿviH{$ݧӖ4YV}HakUԷA=OWkA@6. q":dY'%ח~Ȧ;zvSG3qupQr*'H&NMdwUa5xJTɎzk{N]Y{:z8͜~+<,!$ qKڀݾ͚wחnj8t5(漞x ."D[8₊v7E92IQ(ia:x@{:JU9iH|,|Bh+$U{"5MIT;ߨ%;GP*ĉZ*RA5G ;cVY0V|׬wp L[/.cd+Iuf!Jdr>l'4Ll Y1H(W1G͖z'Do0^Z/ 'x8 l]șCF mDbgrH{B/t|4 ֒!t{fdT3ljlq7^X"*NǏhx=~lf!w:R.*;әla1a1p"r%n-h1y[5F=ifЇ~Ut[̈F9/VjS'J$%9'nI_kxa lv.[{ceSU@yRJ9=BZk5D3^"WBQ!Rx;[lO^X6}Bh O+L`Et;ծE̪&\v~sIJrK]|{#} -^o r=rg} kC.r 4?AЉys@ /fgRW$F ^vZ+h ph,'/Rs0Q -|ば)_nx31ii !,wJѳQNL8G!;6h]ݏ0Z,Cޗ̐x#Mre܂4z1z+NqR-=ӭ+ <Ht+XCjY+'SMG#.ڗz^N0yEfP̑*_l˖; o ys uN prѶ  yYɻA v:d4rH~Y!‰YIX#q$?V:[V'8hd!΍wo!ܷ۫TqFJ\R nMd$d}m5Fyn"՗VCz:-*y5B?zH(4 7EG ]d4ZzBVsUӇ2!yvy˚RJfMnNeGyΠ&,X'eh˅%2Cj+THLyNR" u5CicJnka 찜`&b9(#y{.$0*%45d=nt\kO1v N.J-"'by8Ύ8ztޔvN +(Xl~amM?왿Q`mjr)7z@5̍ k/|kWCCTT_/KH0h6>eȸ_h5խMoou3ǸFbtc?P~Ny}\ȃCچnٵȋz`BՌ2!z |v`A5ai8CX)ޕ5a q0#DYeM¸H%H0HβP1Bև[>GLQxpBNGVKZB<Њ3;c8ӝS%D܂Z5I!Cχz:@Ĕ5F)d˔\aua u8>K,bW'}$CK/`]s4 )c;sC{ JTx\ w,TլCq(05pqnx:*HvCn' 5NQ"w%y:66ς(O+ 9Ī1`ЕbWBr|xTd=Ba|01];NA䒹9h\@ðds,6C,qĚ:T芚JK\= U@tSpK0UD'lve*Bok%@y"ࡌxL aV,7]= ۑnnPp\cZdf8ղԼbuwrXrmŃ]L}x_WA2C8٫m@DI&8("Uh{m k5=go2o%]UN[(2QgCNN a:cLO|HƧwDqߺ}û?xw8Q(WLrMsN '՘G A1- =j9K ?] B]Dqm~8>|v]67f(x} T\,b§8VI%M2ɂMuʮ@7[+wO0ܝ  z.|VEmp کU՛)첝16ۮlyoy1UV,Y*$dyB*Ƞ!.^$Zw:0S\! P6%B,!uo^nAt]3Ԭ5{3TRc.ȼ+O;q{RHcn{&Q\Ip4]Sc:#}m:PŲ<VaHU5EiJhXx*d~>"I-¨+X=ѡ\-)LՌD@;42.YswW#Ytm`^`8>JtE@`u5_/ߪTAqM;-\x^h[g[S>c3'_i룼4yi$j]gO <"YH˼X EplhN R8t@X%(?BdUDZ{%MT<ө}V^IRg(npԉFY.$j/gȅ ai C܎H\N?DLzм*u鰧ۻ|q__y%j2m$!β;n0pBLO QfrƐ?Aìgp=c#537Zxj[KV هSٷϼ /9ybܭqfE#44F榥J =/4@*xH(/.'Cw?fɮxk(۲F,-;KAB^p&dQdU+$½wjzܢX& h~=  h;&QHn}`e]9᪂~l.un X9}$IN"` Ԛir8 e5eBirR#Qy0hoF p%9eDo{Ϻxp++Ck HR*v-갚S3Vl_h 3;c, eoBe}\b OWnZjX\8OlzKF '^^ǵYl/ykc4dGؽxSdrtLz<%σ}E!X7pK:865=AG7ξZ}$2V>`9qg \/UΓ zafyHy3 ;Dsztg˅0oT!1ܦ]pZ-cڴ ĩnA\J)DFTM-ŻN2h#=7O n_Ư:*Be$ȖH v@+.[qY,JCq8҈1姚b OyW@ _9T3Z"-i<AH"k#p䂠ASXe@K艀`rx'iqט^ =vG,|1 @9߄F|)YbWD ]dMYALJ#څEg D5bdW+uʅѳZTr v__zIfo2ېt4Dh&<$yZr0RĪ,vߓԅiVnu[{tS֪֥foJa7g=1F1?/nh): Wfj9m  _ \W7D*q{&P/iS2N)\6^ǞSlo#Om_;0R,'&+w CX>3.vԠD>/`;QfJ t ie':'uM V/6W'eE.!-.Ș'u@9yyt"9y]}P*^4KWuJZ@(ȱ.pnj{!`e>}[ 곺%b93yI P>l+{pc=v>͖ YYO6Mz<8}IH$)+QR,Х8k68%O`~dD2PFi?Drulpwqmv8EE[] ؽXhˑ@V"%ptCgqnon;}@ #.qUA [ 5$y28#d{`[6Y я6_.Zțw^Ajsn^۾|3cO5&ȟAߙ"~8P+A%l'tjeAtV+cd`AGdQLƙHSkLt;Z1Z [kZws׎cRXVڠ|R1$h2;*~߂a$V~_|RȐ!b~'ˎ%@PΉ.6,ZbLWDlm(긤#o9SY'Br\.DP :5z>A̪=& 5qԚrxgpi@$Fʽys*1M 8:! G*rXh606Svyͼj7nJ{;##tI, AW_O]Z,b.a6y /ܔ?KH$*t{MR?Lp!N'3 oB4. DAבhPI<Yg[w,z}"=Ia_߇Cz~aj0:A1R(1Rp&eY=&)ʋrkUz*SJ4}k%)[}9̩&w+԰k5h5fm}o{rI/KXy}0]3 .Y${0]7ٚF)+ $PD> 2Yi#<>ݲh?Kk05bbk@x*g):8>pt S,k-2o/WİMH0>C9c>z  ./vӎl"q;K=vmVq2{,y͎D:4A+ (Ϻ Դqn72"Tb- I IJd W/vCP9aOdy),=k ?_Zpݞ %*S|6NOIsB?Fdc+,5^OkDJAڗɌ{x~=㪜{ݵ/gH2k~9Cvǚ?/@aK@CD /0Ҫğ@Ny*-|$4{GF/KOZz D.|]Δ 'At="59IShhx^{Zr?/ߪz(Xy1[3tQvd=No]b;8s \}ugO!1um{)'#\(8Z'|,E7>4Y"}F=TIBGSBݛ&J1I٧ -irW7D nN8#t٤Sc!$'cab9vO:|l o@7nՠ+3C Ԗ_- 3Ԗk/|0M*W::rܮ\P7㶭{8WaH33Y'&WVdZcr]"=1;1V6 +|`K]ь:"|((F'f[Wd:).PA4c3̄M,цhPO uk:R ̧b|V# Hum d^s$p?R5)*$"yEdᔤ,\!4ePQAwme&͵<{u>DR/UyW(҆u[rff[@_uXmUASWpy| n S7ᤐ 5!f c:&pR\pЎt h9N>5V6ЕJf |`z-' u.jEIn> ηEYґ?$'yOO9߼iny^w9q S"L={:bk q*deBlJ@]x,YPHj_LRNJXvORa;)P!1SJ 'FB;F3N|BQ]:]7eXQZR9VD |֛>s7|a 9tX4ƃ2썽4wo"}?9ڰA56=j7Gem-EWx+:ޓˍSl^a,~fN:$a6fH(Y i )F-%BXɞ*,>Uk;v%r6@Zb:x=LRlM 亲|{my%gj\-n;:5{轺"=[z<{E3k؉YxzPELIl &Pkpx1FCjJjn-ۗy;/F 0e@4uDq!_ƺy]qyz1 zMÈw!q<-UE1j>}<_ũf]eZQ䨠=f+[{E̐ G[mX6U 66yj$}P1x+ BK\IC~ 7I!P4` kv*vJqBaJB9!GsQx/'G=(w#=+ wn4N+亘-cK|D O`7"ctߒY^6t1FۑqJi;l6J>[Xn"nA"!_,5*ܱG(ٰ&"y!v g`51';BOlIOf(/F22ѡ3xcф͊P@ (!VdF~.0s6rTͧs'z3iPP. 5{JNf_܇~!Ŵ zܻa0dO6KF6d\QZE*3.OA:%"X)oځ^6bu|nwk>v3w0}JoM=agD &*M$O2S#v[u\V3N){ԑ uI`ex*iKӂ1D-^٨ǜ}4>l_=9h5o_{3o ExuZNP ՗O@Λr:nWƓt*Yx7-.%a hmVobpYʹȆ^`Dh[LbxjtXD|!Te_[l~B5ik a]I-ˡ?e $6d*3jE6pg).)\nr>=Fk讅왭s2 άQ=/-E[qnc 7g'&oj}&7M#r tN۟?qtؖ+Bx{/˃zaADrAwOGq~QXRzL GS") =FI@.0jkIʆw +zVi\d7|۰%RˉhzoePd*r%Clܦck+ uEb@wTHl閈t;"ժ4 IuS)C)qK8O+w)-c1h4Z[ &o`W1V yoi=d-G݃I55]i/6yiN79lnPM]^&o_h$RRA ft= n9KG}F'r@QhH+*HBGփr!5_YzK:B? ϹYkpD$<,O$v]eA- LdV(b8 NsiU#8Wu:u`$''tqո\ʉA u*E}I{f;~.t!=MV۬mO2%jOڧ X+Hc205to_q^~HD{%M.'B_I7VӘXaE2˝BJX7KB+ ֱ C2F1#e#pAy(@^T@ĉy1qVJ`E36O$5B]ztUL'Uε7$w<*4z ,;!p@ob"Ϩ@=d9wS^rOh҆b; 8gT[4r c(8W_976@6\6l]fUCZ EI:Ť({ikf#)ygH_P)XvE43-[#yUګ~J:;p"8?ƋVݶfպ}23c[\3y+LLe^L[݆RdzBt~w[$ BxmC?y9/igTw0fBݚ"eYԤ*Kz0 #4eQ\'}/Z K6+t~Fs;\T14ɞC&ܴݷnwan?{'X:pyUϠcz& 83B8MThYsXTS&׬lR:;RxqpBE<*)a= 0zΑk(* kyZb‘QAʈ:R#W6pmK_j9Au'3v+  "z,N$u@%Hf TwU\C>xrJ?7WBn[<|:]gD]JdD٧I0FhR(cn*1? dc%"hNh 3dLո(+NC{yb2=eCFhoDXw,'&,, c%UKMի 3l=]KpHJkkjĉ}R9 g}ej#h&H F nƕX;P;F{:IwlXDnH5ђ'+G]]؈[YbXh@y5XcϖПTLt:ſ`uʒT73\#5z5Lgf hJ-^fV+5oI,2V֣A^eϰnɑ]y6UOys =d޹.\2ΈH)U Dg 9Chlv?o7[w޾׮߸vkk׮n_{[ޣI0;ԣN nUtxF=Wz@nN7˓JȀq$FU& AIw xW{l)'Ird`=ncNQ(`^W۷זH}o[ѓT[!y4̹Ue3̋\M98z %|ujl?<Dy)3agkY<J7k50D!@x rP@ax ODP;TtD˃тD2 }Cwb*(o<:؆{3F i+Ődr):20 {UՃm,x:("A`G!);Gʲ +]I<)YT02 EE''1EÇ`OM*2uX_⃕EkA}֜u{ ٌ\ ~VBij)5[Jjsƶw,?͖ YY6Mz+ۇsԱ0HV$1cy$$f楩Kޏ9ڙǻ)U^nst#\,k\ۛNƈqKu#LT@Ijf s6ݜ[caܑiD I2i\%_T_^zU%һz9@CuoxzwCzXNLi_l䴓^~TB|%LgH𿶯^˧G+ۺbσӇr18n 㞝 М[}eo&E];h*^/*HΉ* ="lɈj"-+2P3š:–h݇gs9rl%ހBZ(-J̼`DGAIwRe<|i06k*% l2s[YQ' ѓuZR #Dkۻc4~ZxR0IՑGPQOP@n0ϨD ҥ.c1%,S&YHSk IJ9Xx|s3ni~:\H޹&KVzQsϒd"%1@:c:t몡}ް,gbTf'8߹EDˆ[ւI#x:Cq4W{v/p6Ь'Dk'XĄ)`͍Lb,"'Pk͢178V+<2 ?B|Y:L)Z1ܒYRPD P۴(J B]3w|4Ñ.b dEg \Y)| 3n?n Qg:sÏ'؃x@ZT7 bh[v<k,Cv5PLZZYpm:O%PMrDW>İ! s_io-P $2վ AS@w$5&!y'ī⦬^UGd#!1"gcHGxO6T6XPBr$(]Q`&PL=|c/c*yA5&.u4\kiêwi&GM#C{Ef%dKie'AŒ1ϩ$T؜zgRm같V"E1~dB}$AwώP|v=XTI 9a햃c/ t"$V– p27.p:n9RqnklNXmKǛ5f_X62w 6dݗ0dY2ơy#q!2i>ً:3/lb TKT!RHBWhݶmpNjm <9twMՊóx:G}@{lW yLapgdLAM:,@~fAVO}Ac<#~(/=+e5 Tg0l0o!BvA eDԍ^gh:,+^qEX;m{hg7GL ^6~t>sp()Uv;[*6npuk:+(k#[Fý`0p C C>G) .uťP: vM\Q:Ezi$5&IFc$),*IE+ض:F68MS ̪+Sޑ!\ÅPD~kx`Y>y|ob7E9oVPmu"UyMR `\+m}`fs>ɋ}߲ՙ%w՚|afg0`~Geapzt!Xnt`7 S?eC˗ Fb|ʠCxN$W΄ߕno 䂈LM!#`m:>tҤnv_KNG@wnߥHiiJ ܌~`$y~W7LuFV: (˼Ǚ@qNb_lttztvY[;{~uspO8ZUIlh9vN^r\.~CU|b␘f-HcƸxdE*S-#,(H8Yz.ҩ'Y;\!d1y%tkC\:]9w cT>,r 3]@MnD;z-bZR;(B00 ")-1 4k:fYX/^pbx z2ù^F/>Km|5B@Py\`n5E$XXAG>oڵ^}fhdJF ,p~*ݘ l/ qr@!-.bz\ ]5bF~8?#ZM omjc49WtDOd C @3Euj *gJ`= []Wuzb>Nu(xXD;6<9!Aɠ&d Af@ҟFEy~| c_1k2U ;u޾kkM>0&+6~9p솷V֝FSB8=1Ls/i@@&*cN {=z`[>5U0GGI6E|u]"'jQd(^214E,28VHZik9dWYUC<~%I~g9st퉹@:φ01u>stH&^IQUSMۇ~xql7c11I-VBJI=gz9ByRREqEKdT8n;R=zaA !D$p{-MɤshxFƵw̿^*;0>IOHq T?jgkC"!)@#}$$,0t,{}d ): Čq> )F OGAPZi:H[ ̈cZ_(꧊“rrTsFX*¦BϠ1F)o}qM/ąW]6 zv6k[/1JE8f|mr=1U_؟5)&]0Q>-AۈOG3 <m+Je.n} b^l}?[mYO/_\ k\6k *Py}\ިG8af T׬|=w*h$O| t_q@L8.O[;fǂLeǔ[Jl򈁬2^W`E<"^;¢!$^Vb9qC5hS-T^$}xWjw+v wXokZ sT{xOrրtmZx8dpypx-Œ{.|smw/ƉJU$R5\([y4*5 $&6cÞT-%揇Vg`:6l\g[-mr'd d|*+JR.Yx6WF6$ A@A,MLha@GUI:ZTpRua~?@9wa!5ףW^e'x;ȴYQfAفw3eY`d4KNʣ ĉ3ۡ+z:I H>SդG KSq, 5"ODZ=*!$VtO;OyumLh#9:v2˂Sgu7 q!= )8M j Ĵc6Y; albtVȆN +PV.q&)!ڹĕ0-N:2jT34.{"zDk(ChB)īB@:Pk"3 %Tp41AVq3cn*F"ЋqUb8'!CVlTwIqd<_޴흻7n ~Cx)--Q4iKYF\44eTwdzn˵zGMRooyCu~o-qTOi Y4ZC I$R6bcHg:L1ƉMXt嘵Y(ϣbb3C^Z}m^uk>?pa|Bvd& }NO'ǜpx|DPnU{ ' tœٓ#+'-׹q:>.cW=^_i}{zo(A|<՘?_΍ϕ7;_w7/Mݷ0ѣrK_~>m@&3ѽ.jd-(<7= Uh1zm, GM_sfR.e翲+G0?]^сa);߹TGPRz_%^jm 1vQ4:]F&Y׃`.lч {6=$>l'?6RǴ`+A߇-hctD!E&ps>b>o>?HyȖ3 8;SZB-!] 9*ՓIΎd//CErvbfKJ1 nsruOft6=F ..3;K֫^iT^絝εUս\/eH = #pETC) :4#HÄv_XN;DWC1jҋ)1K+fՅ/T΋iU(P \Yꏶp*$:N2[w?J<:"P44*v7 TMwDVuѽ:# |e[iyJx@,zφB!O*g\K TVgʡGGHm"zm_lx t'蝂:-h9]f؆@&74olK=b;TITyɮNMLeJ+~h}b\Vbu*p[\$b x45 `0wΞph!} 1#rmO!ߠ r[cygUF 1Ra2 *ViDC(F>LX,/KPd؈Ό-XCQ[zk9 g.Ǫ lٱL/P ;78ICKlQ#XQph__`_L^b] Jt|Emo#! bRuINlupiWGds /N`Tۼ%i ZEzSg*ݛ$3u!A*fja ˚} /2e_zV <ψᆰe)L8Fi~OWN3Tax8 F%_>Ѕ FZm !׻ ,WS+k.lLCj@> ["q}HB-! S^>)%{9D4g,,jl1ԏuxV&E?ZHFٻ_ړ f\ 5x{lD6HJ9 xtM~uz8x,Q 'x,hf7bgZ$Z1N dgmqZ gk3@ @7D %9F%4B߃VZwJAIu]Vq\Fx/F>ד0C9JJgr9s'm(fcx2 G;p{V 6`btS04 &WqED{Lj}Usw-+B H@J浝9ǧ>+$:!\& ~1`őTPoNb *6jc!>{;msE"+E q>-(<3o)7$)`(N?Kk ˛V4Uɏ!f9'3 pIY+=@ +rYʁ;d ;ja$[~~Ȭ,uC&>=Bzw̡ٖsD_. IhJ2#ڣ&1߱@w+75,l惜@+H,Uk"0=K'{+{28Gk/jve[îأD[;i Ym%^RNn_ɹ@{=6 ʀ~-޵| )|gA$#o! 2Qm/-X~] \ݐ0fKl#t+-sk 𷮾X< 2۰Uq/H.t=R"fmvb:Ҁ$X`$I>#NhwmEg 2v2DDߞX'Щj4Ğ[\-"\ Fm{C'5 ٖC"/Yj[fRP40\hv=E8sڡ ]qmK$J`=첼Ab푰XH7j:@JiC֔/X jx4:Ɉ hv%{*EP"<>fGtf ;<ܠS<9Pd: p@Ƒ6^@vdo[ڕ[*A-M\1u.ӰGК>Qk؈Xړ@du<76ʠv9D`V5nhwJ8=XI 37_9LAT^20Ϟ7;1:+5uF-Sn/_"|؎ x#[VPyW.BXBrh/8`d,3*+1MdrY|hX[P MH4W{ x+ڻō;pC6JTXFh,aFq^U^ʜ++٧en1dr/71~&ENݫeLLܐ~YCRB f.]Ln1}Da8QUsQ$y"/m;W8,Q*y^DQ.}O+Ll&O%RH@pcgo/25;ʁ[`Ȕ I|.VT7CV M)/-Ґ_DZuCՓ4h`NIgEAN0)> |ls&Ex0w>$bs{\,MY@]dEstW'UԚL3EtiIƚ}SWrKoհ TUIzgηYS>cx$1 s=V0 "V$ꄇ}~%lG ( %~H 2gNs?ł<\M=X_eԭl^ʕM|a0-|ƘK-ǏvMUh4Ȣ EGY9;ć>f9a)\[&hw-M\.LF#T &)kf:,H&i;##:gV pT-ƲmĜ"VTeeGr`tTUwDQjrF.||c/ТymkZ)- k|T?e:je:$l G\j,F\\h59ʾYEc+*oPoBcԯ!S?}"oZ?"wJA-(+]a i'a FeNQN9R!W[ !xT9;sorAd^_r}b^D_%uve%4}A27Z#9 X3 zZRwX kӘ=<%mNaIcB+=Ǹtj$ oR5.("D@9 YXLԜj4EjGDe(ײ6cí<~rs$qjT6o>(Z6"NbYf$yQ%cGB~㭪5|]? ڜO4M.2 4v{vޭo޹{"r,FU4,<<Z+dA+D 0*ͷ)C۸HQ˼yvPU2,f lw%K;WD'ᨄ9f2ͬ%4q#\>bg}Tj ETOfx)!XإN _pիZ+b?1ko2kEXI--KჄ9&[! ';6nE77Z2`DƔO -{wo.ш(0L#$oM<Kw"r2T?/h[ x(ѹZzًb"$%~5t1GfLN!6Wc8D03W1֒9} υ='o\D_”pg7 ǦG'`qZb)r(ea8Ud-yGGc(1jj鉑H^m2υon}''b6J1UT D`lʁTT'l݃%Zݚ@hS@|]e _$Io;ާJ䚢#2#Q|p mox;TmnL|hgQC/ eAϳ3/{{y,$*FV0z4QY<{瘫F*V-$?7GM;>3D#Wip8PQzDqmiPe\ j) x4KJeSa[i<.1JQkk4`@Fz!=y^!x'^A T/i8vȽgm<`w1uDQۉkoYZ1b]5WY*.x Ae;q(4).,8򺛭vFV4'{&?Mu k=γ\Й>m}C|s~u1Yx5C[y9uk+NXBG6Ι4$bqͥ$^e);̒<U5@ΔxnAT+ģxQ;UAJ?X $n4 ^rV:< v5_5bMaJ!~%/$ Z(϶-&|hDȞ3&cZ20vbЙ,.^du2(X@ סY,gDZG? f{{Biݿ\SX4D0#b7 JQQhp$!$!su쑢D7%bjbe=HzUZ!'O$D[qS[˼Rhs Հ:FIܯGÍsܡu4 }/xh+TF+U-Mgt;w1ݷ7\ y7ǹ-*2eM Y)ڔ*.A5ڦdS b# J 5_*od wigs<=!x6f4Ĉ۠ԍ!7<.)j;{gjNY F'X.52WJ/I!8xC6ﶸ>L槳l_|hXvotqiwOh.dcx)u[B7_d1ύg|)m{JՂ37@ H^Ȧho쫼QхCg6 v9_\}fM ݾnqDa##?= w=w|2gN JǢrbtRui Q;/rbƒX@.$3PV@U!u 'do~>"\ '"ZKOJDZWz)ɇ.+O΢☕xfs7 virrM!ރ jb17#+1csvKIRV@ZFsSp٢핢:kH%Iky^v*Gҕ±rNFV7oB, IB}K ht>'>F3E`;7Jf KPh>&NXJ&br5ibcyXj,ޏqF*mH4U t:7z6mY۲y oG냪۽,g8@5B7H#͡xg{g";t:BCvlASOMxdyf}8z֯Xf&(njExp+:^ZtS?zy.:VZTyRZAɨv 4BF%6bKEe)o50CX.S`z#-=U7hea^󃈷txf)"2^ZhjO pocX\ʗv.fm"d{ oʥ᧶qʢo\\Xex%b$5}cf"iF;Bԅjk&(OװV+ޅo|~N?zvR,GVЮzȰizzAx9$LIUstg1J5h}yqN߫m_ںvխͭWoo~c5MP/~KW~]4:uҷ_|G2M39$ksJ[WkFK=Q$ ^B`9R 7 rM'CUɈQ#7U 4 #.w<*ql`!tfuȍDBeaQpcU1LXeźNTglaX~+>un_ť"=qٓ|xy}[@$<ިkñ3F=¯!d3akc-7yg8k"1- Ř@TUOᵁƇ/t-Q:H<*\W]G*gtK0jj%5#S<+eZ9RA;;p% 3N<} U1Zal-.bf]9kRJF)Xd0D"\*1h4w<Qy!J<逶UTiS;5D%tմCpUga¼=EH쩜T ;T_/2K#&^fc*%@X}KyeAɨlnf%>q Ūn ߄JNd'(D=:s̓4sЍJY4V(9;)tO9".CG ̸f}"Ywљr(]}*p.hͲ+.yt = vG eCjCaR5-$*HJ(KӹGsg N9tY*]ZFCejMC=*Tlp/ uiTޥl{8ٗ܈M@ )AxB1 !_9߾4f~[mYxkيH'j(F:É;u oBXIn̲Jˡ"Dؒ0g&Lh&kd娕) sy-4̠aR)W7aGnZm-hMa_;]H# ۡKvD@;NS<0`pB,MO(אַF AMC\&#.\k5:@>D 0[t W$BŔD#g !%[Zs4[9'L%+pii)ʩT]Kqw#3 _ny@k|\d8d\rPPJhJ 2hKM/u R1¦!-#Mjz |f/*~rI cAQ#DCp[,Nf~6$D'Hy-C$fxsݷ2}z<G0^ *],GzPrcK7HLEFK (? $I~X׸kw9&- `q":T rҋ~(Iږq5) siuG~,B\>,ѢO4 #.b?jv>( o z]w 6NscCOs1)>Sw6em-oh|6mt8e /|hHrVc WT'8=OUGF+ӱ@%oh )יuH;nK2ũ3 ^ͺ+`0 w8خ{[0E dПٓp<-aHgow,ۊL'O/U4;ZܼlD9qTG*rS1A; p 9qSA\$Umd=-i!>Yk[tU{8$${K:p9BzK$j-j`eGIXsJ46VO(Ӫ3DzrY)MNRvӫt@zTsf.8;("]iE79X\1#c2X~DEyPٌQf:Fn4yh7CV8ȩ(FHQlspb"`;\90`w1nnHnp~'e>:;{?(D z*8UWgu cv&K#k1TB`) 34J" S +RpC*K'&Z#ս4'ԽNjO $=I쳧(Be RH^=.L1bZC_FIIG3Gliq.d1EPƂw^6A~D2?8KiY\YC!˜%GSa[!*inP7S?S$)hOLPhݖ;pBQ 3fই(s(=_!I6=pޣuIzFٖ/rp76#Etx<3FS"6gDWHICsTk>x._ra~e1zBRqDQ11b𪙧RF|,m"ɟIvAgw%_M&[x}Lȟ.c8kc..2xAZc/ʨN(4zjWm3:]h鈩Pmkw=7m[>N{ia#FuC 9ͼ.OT4Nh4'ֲ0Ʌ狈uӍ'Wt;*Z Um'zAFQsO}aE(nmP34/i7 贪YkO堫3O7/2R3c~x2k^u?6\huV[L`<<zޫ+#9@C/tI+)aŊuc,b׼YK߈iIrˈCaAm:3 JbEgiɄsN%<1&H$9>LyFr.(O=,Eۡwa-Prcs/ @ 1/k!'0،j ć2ߗ,vc7nOm/ea|@x, m)s 3ychVݿ5;>{pG ~䭸 sW: ]D:Hx훝Բ\-jTB I` H[e~髥?afz"WK-Lf*?υWK櫥؉)9j鰞ղ|gAw'p `E8},4mFD2qaÅjRI ~ [G͔[jr_#*ٌZ498*m¬Zۣڑ%,qy$X''0%ߎOb*`9h+0q̵~lZ>y[p(GO o5=m*Q zyBoxt :,N_it z*TE3qu_WrQUdGQm8 Gu\WF:4iF߁;w }z\Hg:ݺi]s_ߐé|\EaN'u'dPd8ؔUzy $G]j]%5P3e1IRҳ2:ʎ6agos2dvilfi7B"Cɵc<(5siCcdYblFhliv#6CG)l5:HT!Kj<_Q!vtJK0Py"q:n%laJJhk5jNHU\ CL7q!C&ù+ˌCj>ad Ӿ`Z !ʊ,kA!Gik㹋飸7bMIl ?Nb\i|q*rrQ1^"y RN HIc8'3hK ,!IZ;;@^H))ϸP̜y9[(](Y.5$,VRoX\||lQ9z4ftJzYkZJG=Oz\ ;ȴ`ՉkMی+I5⁩yJVha_^{+>@VPײ9^FK&m9F9T!Oj Nȳ+|1iNi|1\OqT uB F?\gh!$ʐTDۇrl.nFlFB-K.%7RZJkRT>6(8 [gfQn*yFJxjPB:q2Ÿg|Fܔo$( FD)1ZB^Áb=[N(Zax,°8l/5tuSz[}h Er>.kHCzFK=cQLZ%^pFG\'>ey! /_bq4Lp/2>&M`XiD;t6.SqDPil2i Z[k*^YVz<oJ5YB1ЅQ5ވ'?8זo7')_YcgJAE%S:CQRކ8ڄkՋZ B`oyy?̗ͤ W"^N#5{w;04ﲪFS=T -jÊvF@|DBr_bx|̪9B@H]C8#жR'O4833ܓV\m;_rjY\ElQ !* zsz.FZڢ S&(Vek{ṄZB@v[c,/S]m5]OC#Y"#~H7ђ |«4M'0rOmRWcs4ͫnf_Tc"&m#99wcmGp!IML2c~FS(<+lpHq EDa` L#l 0Ӆci£uEs f{Ы?oouk[ׯn]۾_>gW/(o>G:qfVJUguW0boKrb?-1X* P$dx* ^Ҡ5al?]n)`'<~s4eE~YNEk&cA>G{IZNDaZBR7<j)u2vFj@0=GU3XFe:|7|N3fIrSP]lbsNՐ SE;Pg3M' Y n%g[8&~9Rt_I ُ?+WaEf{j:0x5_dE KjR_x˓aBjl`OۯOwܕ pUxD#Kx()5V@g#(i>e# qos+%dw@t RilM^Ĝ^Q.2ZXPvi;dkSED לl/^`zW PSU+^+eHDM5/gI:Se"j 9ht%"(E [$TOV\(o'r/!&ZAhl7!Lq]3 *Ek3>jl}$Fѳ%ש\qȕs<@RnN`UL>m֡ߕY!C]hSS6E/QĮO3ƑxpTShhi)ZIvnt@ws;k:XAI, |P ydqӐCq$ 9j͑j{*;g=?i!([skV[VYV7/h 4t š(֜4%fLtt&r;3>=oM(,y@ D+^'(?>_ 'O()Oi9QKn~",1U K[hrE)?MQ4r.QL_le7نM<[.NO yqR[Y)Ae%2X%}9 ʝ_XVO`~ꐶi6Ν󦊫 ZwNLS23`5JB/+BXOs4,/mI h8"fMmB-к4иIuz4Bf0ҊUs,PX|֚qn KUioa ҙ7Rjվ9 XLF~ f%bm޾ R ?N`zG?&rXvx["QUVi K1qyE4=qwdv  [k i;HYIfuN; +LgDR9_YɧrV+DN+)qbP9nbAYWZɩ9Wg|*HS?iYv2M>ٌHܨUQ2rJ%>՗5gV>Άq}񤁥TyTɔ*|ADO2`ơ-,iۢ(0rP&)tnUvUuzpN7KƬ9Y'Q^EHl)Ig*"hyH OoD,U{E6E+g~mH;r>U֚#O+B,`KbXZk8ig\=Eu^䧓oݿp֝o?WɁ#\A;PRN [-!hI=\DϜϞ}eN"däw|߿ύ{v߽7x>޻7wݽmi[nq窱s۟Ҥ}SdD-XpɪG!tR3'jZdD@kNrTC? k@c[2m6҉nY)krDeT4by0]l Jk Y쒹8փ-V|7uǕUE[1b<{|JzluToăl+c\WJq 6[F¹$aȇq9}p0k%aX.>q j׶m^ںvխ*\|3OŔ r9I*.n[H0C "3: F5>#-eGDB~$S GڮHܟ|7s N7RMr[%W!*qFV eWȂ)M:|^jV΃(G=CPQȡMkq0仜?(RkhXA& l؊PSM1ԁCV]!3Ϻw\:[++{I֐lᰑDM>źsi #P7Vc$6a$V:{ 'RegBu0.P0SȫCc\DOӊ& v.c>} jsZiyj\9%NrVկcsQcl5HqTxY (*™(耊}R?O]Tl,Ԍ={i71{:ėSFN8(C:V1r lua9/!1qdR;(FݪwN^Kׁ{hiOMEw| πCx,r&7R J;Fz^NRmbj54c8)?p*N r'=H&Z#$_DŽ됋 +{𤷗D}i*^ Hiw\8BK kw6eyD 7 b|*ikڈ,NH 89=kdCXufx)nF((%Eńϛe 2%WW2m>^iCW^1Ih<ʭbrCEi]0Gk>9mj!XxZ~ơ! IG''m(/V A߰SSpaU7lwEw|AG0 ejpE ZAD9d;S^IKu]x@UzUM*!ۢEae- \:~hӀ ㅣƴ~24#YC2 q4eE$cA71Wfض _^)&@zLRU B},1!H(NaߘL'ƞ+jZ(>0h"8> %&Ka]^<$ڗ-:YX)8|uE(ylAn|* x.\NP@Kab@|ӊxK+!()q$Pl4ёias+-a*/ 6HXU9qrVkU eR4/UVst[D>-kUx(SIGpwZQ󢽷2"皓.ARDJE3j4UsWLѤNsPR \t&r>^JIڜV5W:()mHJ/;Y0'4Q-{ߑ/Ë0'7`cij2fZԝV K:t>N/, EQ|cX;)!n7դsN򠞎IK e&p_ݮ(N lG+)ܥn4%pe켰5) D ~q;lcs\LwK$v\s9 $L|( 0RZaeF5:#~MxZW aЛ #M|:QO6BiWчDRH*؊~:Dy)iV)s/𚼬MV (p4Q-04ҍ.@gڅ~w8ܶ!pUB?CJ <+nD䀯\dB *+<#H"<QvK߾̄>! XQjEV@ _CDT<(l7&mޢ $ľ{GǍ%yk -+w׮ZuТa e[MVIV+w we ~3g0ugAFׯ7^wס;  u/:ޗ: u/{?Z[>/+O?q i,sRr|?/oSw dҙS'|˿%H}᧾z?>?)[Hw _|s_*O ˯}~ Aٿ?Z~W7/}99/,2?=L _|_|XwɏC-5JZI߀$ _A<,V? T~0vap\g >|>|o^G{? _O/^ָn/؞;О߇&Lw_m\  6c ml}/-Exh/_G}w//4ڏ\?>/?ڀ itxy)?K݁u ?]{/,?7苿c7,?WaaGO_MOoS׾> ??Z~#; XA z IAY8_zO~^yiooz/_s9@,f~o[xqŋ!_8jPi?wѭ&ݏho{/]Z/Ӑ_~x?Ưp~O>z?yWXڵ/}.,wVH/,W.~ۿ7ࡽp],X?ǿ.ZUa_/? +Wn5l琠o!E/x??/]| ]z˿_ ';`[~s٢{歟la zx&`36\;?U?\o<}?C>6㺯hf6V)4nX#wHm1eDJ%*q<[{hGlA A4_A(REPnPHZIJ ʩ ޼ٝ;JejBݝ7_yy{~>u}{$ _\/wl`KxK0_D0/k:OU<3tB"fG^x\;P^xvHc΅ycTW쎻ΏPԱ:YZ_"I_CaDBAϟyUC\荮ET_y{œ஦"aȁpIAINRĕ yoܕ)i5Ý_Rr䳷JD b[;z1ρp"$_>q pRGOrx重[/0ޞ|m<ɣOmwgx zz^3Bn[\ yw؉Gk~c^CN`?̿ʃUS 6p;XtH'1$]Opwtsa˯.~k! _}V }ߦ˯,y mkcԛ~^?%_T.rU )ϖwݑ{ZnT;~g~X%r/}R5VEηCR ޼ɷ;7DND#`^l-+GA:bv~}*ރn;gekYw@@nZnq)=]3ƻѻۧw?Bz'%ܗuCtKtuU>HW?]wӵtk2]sts,]G?u_"4jxҲ~\aβ- $vVί+sv+S@1zr8LCgWDWOrRϲFs ;/U' rZ-\"&xW,{]ΫNQ]uwuHBMmub*u;JW J;< Tpv̺(;Ve~+x1c vw~7÷;l7"kp-5lYP2=w0+hVJa'np2!#^o[EeP xd/$qsz-wv:0oo9}=[Bol6o~{wƁ_*1{;JNx49裑nu0SV=02p"#ۯr-68g5 ۙ;nM=L0[QmOA؇H=}8[؇ۭawO*w/W9"r{SU z7K8P7a?|`Y2] ^@؋TZB@ubVg+=сW<}]>q,3gbQѽ9hB0C 玆Jd6?e/-CL\I.0JTi ?8b5RrmYk^я i|-0;]r-n uXHM$c=vо2{V $8*ݩ7V;N'_+!$ yx&Z^ѝ .5#A'D cA=Rb:6^wa"} aGOr7DzXsτC{G);")78lU 塖-3êJLXa \ |]WQ6-pP4a9ì 3gyʛHy6S\'hm<2v(ʪSQ?C<ڜ Rd*><1[M۟hk_{m}n|_;w]w)˻zv ˹G\Wm$}_|8v5#*_7/h\;'sGdp`tn$ǘ8K.`nJEBO:pf- %[|(N ^~Z;m!|_2=SbR?iA nUA3̈́H^= V d6C3cZYP!tB\!G@-=:9EYB2 BKd['51duȴ;K3]N˦zwƥWӓdfr-k̓23-)LTQ`U|eXءz:+0NpzΞv5jF (su,θyRCL!c(8>"ʇDW)^r5_.:<7*R-&@},hFjWBS]3tΥIWY)ߛީQZׁ^Pjl|c*սQNr{ ?ġm}TiCLEv pLb,2d Өci"5]=٨8-+;3-!oȷ/=''C2c3q2- c=1&31gz4̗P^cޡԖMvo&@_5񌑙x0RQ=\S'UJCDO 2 &|^6β+>퓏r9Cer)FUZ2>5 oNJAO&  ƠPɤ$M%E7N ގ*' Gsi>XN7& ^K$f*kL%oX;1rZZK9$p+,obqKBB~25h7W.M‘h1G2Ԅކ}{F3dPB,1If.kJha "| UUPOj-~\RrLLz+9 T&1 e[K?HO#_k2-J&s։2M!piJi}?EY̲7èYufʉ $ӎԖMʪF2 }!u|yA3jXRv؝%kʄXɘo$5;&7D+?6: ĢaJ Wl1`<^ŴdJiCX+Qs8"_qaZ9q'Ryg Q.X»bz3SvKP\w+6aNЀ uz^摴TPa '#`p&g#K+=-SzZR_'NBVx(ƩDHq ?~#Jּxy5 צJ;:[`''ؑ`#k;S`D ^I:\! Gee&e"!- -{v@.NlL 47T3P,TiJ7Œ(F<9k-g/VB]8Q-]@5m|"(N:t=*u#k=+y|zkDm$tl; NnhČZP^5| 2*WỈJ !-4o!N`k/0Pvg_8z29t1#Ʋb+AG M%#Jj;,EԤ BA,gGq^P_-,vfYbgzP# T{j\!Z\8\G0*$e(Q8ҁu@qE}$h3$biij\7~q$jiYZI | +~Ԧ F8R.gҚi!TyTf RҲLZM"f9Ovg9?bǕ <mh$X6e8H͉.\@h E'^`_`_;׺u5Hىwv֜rԩs?^^|՟sV3q]rYi1Q8uHWbR<"bXF= wc?,X*` ];cIJWt龘1u6BQ3`AԐ'Aກp^ذw@kR OUK괰Zӝר$ 6 dèdv*Y'=r cU0x&;,az Qa\pj ' .۔2+ġ#~J߉l6WQtI!:,G;dA{|`=Sqk.()ZD8nC0p9Jg٢(-ҋbF} ^W u7i>vr$ ;F_ph ~AUw e颀_^<`nh7 SWpx1Mɿeuv eӜiiBSP^ߢO i:~-ʋiqHx fLeI!Js&[ ͑K:_ >VD@N?s-kag;ֆH"`V"ԭ 4euG,c~Bwff@&ʔE.=Xc>ӱ'xHrʶ2Kr%]'̍ i3Ot!M!YAL;ޱ&ZY Pt9&^.;/_ 쮲TqiEٌpFo@1);2%vF*32c$i/8?tĆ)TM¨)vF{Xԑim-2ig1GOc$bۚ!vN|e}I͵yܤhs7獟XCu86iWSvw\&wyC=WPP J$ M BPz05q:Ϝ؈. jqNԞ62eب# 771Efܘ`d|`77Ui7WOp9r~,)){ZKMUAcG_'o.e 7'ofAM^d'ks G?9v+g)rDl붇?5#a.AzD=y~rywRP/H?0W0rt-cw7^&~pp{^|7$L8N,&?Z/tSg{1GJ |nboI +$b_mYD7ю=36иq{fq|sBf[Vp'wAԴnz$YƔJ>AY..vW/*1Ɖ;TR/\\ԤsJ^(.׾sGQ[?ldS o?$O=?bfcͳj%)Ѣ2Q߽|_.дaH˓7OXeVJfCMTMw ln⳯h@&~I% megGu Ȗ$tBZؾ!! i9xRC)2Pn;{\F1i84V 0u}AJTJrW*kQEK HGx*.dƟ. ^ͮ8Wւw![m{B?oHY֬kއ xO uFJ+g>[|Ed3ӱa|"D#lj7gYUjΞD ] Y}}H'ӯ\Z-`'ux GT7iD*J];fGmB8sl2"e Sb)馹4+= Ƿl&})h_6:mnhIEaiP98c@VϬpr7&Fui3s:Fc;89gM? C$1t=\7yu]20(ntgKo8Fg#5WSQB }f o)ē{Vܠ͆:f/;;͆eޟ&;*"v#0Oӄ|wC:{cj_{T/-m?`VԐ²ZD2v P}k/jΎJMW,Y@6XڷLQUH\d7Zًi Rt_J8 &a}Rm*LC\- 9/Ojx5?|m(8s5qBMqctk 1mjq+ꄅ]ujN/QBYgN%̤_LzZ\gR%@1p3cHArFb /iCۏ#`Z)(EnﷅTû^ip=PcVSb<0IAT8,q%-N4%C*9maR6Q^$2*2Di=,{ۇC׊2T©HGQA 95S gtoMg W擕`T_0mgA:,l*jvL˲ FW7ܣzof]PHcc_&uCwP] #eOPt L]. Ӭ(78KJ{Ow[:\%1Y+]/$-2>"?K5նzi3|Vi-\ub}[(\dh|s,)Yn7m\=,Ѥ>}ƱS)jEٖƞG3Y,@5<1t5mkdTS\uf?䗘֫&yP(SY/ݮja=BrW*`9# !,}B,fdJt̩2lx L?Qy߁%rr06)CyD앝 mxXD&L,ERyX4&F\k*ndDwH{X3zfiH.Rcxim:YDUSħu&uVSPc"(FDUcd6`gϳPb9 w5eS^H;]I ]d8 U,TIA`GNn&@obѦtùv@ D/J),0JyZa--;X$7Z8Πu;xV(,W c/¯>q7ZnFf3slTslmɌ5#1!J;u@RŬs3- dPRf^i y! r!/;̇oc{/2}œ{/0 2.W wt;*p+f!i<+\o.7Ly|k$l%K : yXcF-2yBMU :V 1-D$Z8HÓT\nE(jv儑ѕ8#6.Ho40tĶh[#\(tdIE1!_3V|vyףEw5A@un'8|OcLe=u'✯ ]|S?{,X}zzg/`d3GaY!- g٭nB}~hVӊtx2ƞb1L|A[N mЅ-Rͳ3.F"z8͵'9cwD|ġL2,0ۖZIIk@6D2%Q(p;)Ep$r,@ wp?|#HOCK`~_q EI`E9$Wcy.m}&PGp 1%-|6=ueRFXzPe§JxXcG+|w_eA ѯ("|C񀖘Yk̜T |%7)t?״)8 rqt\9x5,-Ih8] bL" b l3F!:~왱`cc58D^HHwjCDjk2ÔK)$T!ϻ6倱maLf7_ȖE4qZhS+L^:=0:&;BYPѶIҏӫKKgb{*Oeqhԧ:'o'u!&T k-CGh f$X-VDeAUlD]6,$t7@8g6exඟM%AC P&E]pT㼆p}^-2.*& "7"l"mŠj EݔupbRcvwhSE:1fkyrEE)i>@bCs\[+.I52 ={_oh;Gk>:E_ǝ|tʢekpĹ4!zr Q$i9[ `6gˆP-A=T%.| |9EaH#U: O)Z!)KzV^Zq{?tQhvYY[pࠓK_d,9d9.i.%Gr`\ϲ4_͝KvXjNp17ְ/#kan9Ka^L(ruw@gV/MCNeIg37 iFn˲QLx TPp؅] үBh3v<;bnI:s=i#c3ThךFGL Vߺ3A-ŅvҜcd$)(T˃Gw/G懗PC,M/;K)Zd-[%ejҪցb# C-Aä3ֻ}P {,r/oV zqaЉV"ȄlO !|a_3N(B%`95/3T&lahlT@a/}8iIc6d{%[)(v34<.s^RFr1}Sqb&2UK/+C1O5G`΄supj(4K+|ImD4F֌ ziiC9]Y߭G J)KW@Z^OB3bgSq{N46,C[C\NG]K^̰Ml$+HQf ̼,y$O_P0F4qQys8aF % REWqim$) KF $ 3p2]lH4>iso?TdMWeV&54D&0tlc=p+U"pp S{0mWN8rh8njna(h;'vEs 6ԛxPbP1]#=+1O:8>AGw[ޱ북pA@xD&" RRp+ZDȡk\x-)Xdy&wFifJ ZG2!!u[Z}oޔo !Kr[:ݭtwy8FO3Sć.C0tbi狩{:,nnk>''aEy!~Bվ, wDkPd=şYJi{|4ZEC#G.P3y5WPOͫ=!|#/%䀦.B͏]U&/jovz>iK`WxثaEȝ''}5n7f7iX0_mX;I35Q~P9_QDvmPf[b{ ̈́GQߑLvھbu~cZŗќ.ȣ2}/0vk0ЧzF@^67:qQ-s & 1qmU#m)ŋŀIf&#B,gimX{p6USx#QI- =%=o\|JU>x DfKפl}tidR(ۉR.UUOר'&wG:?_ Oi~"_>tw+"[t+mqԒ9#KH=FD C?ᰢLCIlV`&=1GrX*t65N$׾פP_n(;| #l7E /j{xmD_ &zI%HJ)Dt/hw3f궓 8gf'T7PEt=ϲ.ܫ Ygy:2e[P]QXl(zGV,EQuW_z)g QqL@x=py /Xozj<4e;usPcB;ª}x^PEFd1v'ʇ0>1󊳐xyi'9=;r +p@No?ϊTR>/[8l},}[+}N5f(:SB?pènyӎyGղVnq&p,RuDRQ$e\ÂtQeˍ:U&F tigOk~a9NK؁oyh$tk:WXF<"F*F{ x2+w>Wm֝uLb̛1Si qChrS+$aSVHe }̟:KQQWPEZq;p YzGPq7uIϯ4 sTybIGde㿠Ms]פM+H=%}|5Hd[s弒JHm YxCgFX:+qRYeڋHЖ9DR ya_>̇6rhBmr<j2QP  .WFG^ rs{y(~Yj$lg|/ D˧MT'#Lp ?wpb?m@:>DLv k53 )s>) K4 Tď44*񉶾DmF8r=.f3vu!'zI<Irz5 D:.%cyi-tuDI[GG(M)vx݊{xJO"br#E5) Uj:kKFY{fhtWfmoakYݛL(jXrNH I&m~[ht7xT)u)q4r) oYю(䱜<(2@apǰg7)l#xXmz?p⍩y}ά}lLyG#-X8;G>* ǗxQ o{U5Y[jww{p'HNm'zF'b'gEэOR8!Ҋ@ 9K% R7"?,uDJ4.d\?#>d\*pG^|B 'p%!\87!xci)5LH u*{Rt)}2qWm;![VBY}Wk23N qx#sNOFLӁ+,.SaBץ2Џ#Qm}_sy$; ) B6:'dUa+vVI<w+nۂȎTYFHz UD|(O&&J[R _aF8]Vh $@R!,^)4-@4l gCg=oV&aqGLagЧ+lͫxycqPZ%:}ezT3[11x+Nh~FYwdF${P_ĻG|Cx+[>}9JbspYs|)ǣE7l ۈc|$v/hH7Z v֜Scwؖ1d8xa7@iC@*S'W\6Yj5.3|fbV6|KM%\ȅwv9'&!`*}mء/;}GN0:2l٦̄ SV}¢\9*3N$erǺ5•N@f(='6nJD9c,M$(K?R6{&TPB^-^@QNţ/yy/ w2(ov)l\){'S{?5GGLcxTQ}'@H6̳}yZu_;m E%,仛-JjHqc!/0^4yܡ] 9h`fYu]VVC%ƆڛXbg1W]!g2{8Opj!po5Xt_J,ȖTY ͩDq8*j;bBkD/5 4>1rCp|s9ϤDƗ멶~ҦřN ]xz4ҒG}ޟvs J VP,/zdO !./U0`fb$cM%d֭ķs[!XAr$r|;&=&|q*o"e>:"%@!owT(NzSD}9 z}&0C8@Xf7t߆k07։Jmc&E;HLҺ.k{:g X} Ù?$MYc|V90{UvM~+L m8k&v.j%@~5 Y<2Tٿ-攑!KLM,x.ˆ ]Fb|*$( 9wRX^ЧI#&\/E9v^J|:ܔ!. + A?Ƙ:GFvD= E>i˃h6NKƟLx0Fbv'!7L 2lzJ{`TN6+4NZfAa7ow_M~\pVb$p,,PE StW1 r`GҦJi5yIKv Ʃ.5zgVo,Ele 3ĉp(ղ+$L@Y9PL!brs*K9Pmg[H Ky` U Xccq'/i9dL,[*^Y9]wO^%gOHVb!rd'-s59 up,H@˅I=&z|bȃ6xȝmrj_b[KD!mX 1sqEF1X2)Ud՜:A&߀!+vaTJANN"!&,` TW(x B@' 0?9K# f RtCZ4#Wx-aP4ZIx®hǥOE_ASyʯh$Te͓)VPlVLjoT5i##ʶFMX#f-HIl2,*F-u Y1p0H]o,]bOڴ}(T2$ɠўe9=0'Ѯ:/[ƭU |bEewNQBrT> Vw|uĵM%/D3,NçLlEu".b6ԨcG5?Z1O}ZhLaӈZ5NLU"1*x&9-RqnTYJC';^Y0ȵT5fty "kkQ wAgVYgOcsurÂ-:}Q6Q-hTݠ.W+?h%!l,&U5^pLtd(/G BG>,W5s4`)#t4 0Ɍ"oy& 6YaUz`g%`fHYk=?iF)VpݺlUv`ކe rdeRb ά5O6Ln3J =L^ 0 YYG+,>ڜ&*QnQj;1“8R(fjF]q}͙f &v;\Ƀa"h@)r84DDQx'zlPuLH3ȣf]ǏuG3p롁gǪzUZN }$p+O+:6?#:M[z@_#u02l0)/rUP,5pԅvXo8vV=;5ΔyAeW\5CMT+2{ˢs2wn\Ee\a#̘Tʹ'v&sx_3֎%0At`b{; Pkɉ =}p H*h@A=糈:ڍ:Ov Gk -w`?j_8JRX(MQ %oSzOR7C4VL_d-3?CXo=n;0?xKwJwBvQ61s,OZM\NXfL1-CеE^Kf 3Vg[ uV-\q h4쭞E$>ƥN5auvM5]蝉I-yjZ][eq$45pn BJcDE)wh'L6gPs͚]e\3t Y=9JM洷78QJoe%5EQ\k 9u -Rl礨Bs3Γ'].܏MpJ| z`5Z@y^d}oRŮ_F#̪]#؇9b"15AaV<1y5OQU:rNB֛*e㻔4QN[<MD`OEJw{ܗ -tbݬ;s X-Ll1::VQ>զŶ׊qMrjo-U|wRdR_nc]j6/fc96TtV Zݍ3KZ EVk3.bpdL89"7;!wQ:,y2K׶wQ,< 3S[xu=ٞT7O} H2b cbU$T *R*n(p΅FɐYZ /$4X =>iP,%#*:/w[|NMD*?{ 5iVrk W~6Bw 3.d&k;]cxRH_II0R`_ @ҽes^(f%j4+Ԙsh`~Ȼ|'>~P cx~rmhk< j,{"]֊IzmJ CaPWeJ/rYWE:/4+t?' 6-n.Ӽ1HsΔN^/G߽}3JH/^|WŔHf ,RIT`#ތ ]g;S?l@_y2cZ88-"Y.R0Nv.dp6v'NOɛ7l nWNr[F$5>gʋ+//l8s ;bKb7ШZ⚢< ofA=W*{c1e'fL% p5fyZ 5"1ke!|ȖeJ[CRn`o@=1x2l1<#IΥE~t6DŠXXZsvאS hȲ ݯq:g \iFE>faKa'|-e,#P1G-D#)WoK&<7~o3QV,t0GEݹnᐟ q/}7#zj\!HwoYUH|Wm/L:3 \_"oyO(-Y_,3 Bsxx~ cOڨ%م|p'_ 3T]tBN)GoZ/f>Oi' o7W˳:|\bvji;|blPS4]A;MH2^7j0up=t~ LrӈQNLW$i7:[c.Ѓحkļ2~3[q)OR}w K~Y0]|6] ZTsQJ14@;h!Z 輮yhfƸX(Mb2+bg&Q1G5rX, c3(03BV=O6=ީH6ZUy)cPӔx;bx}R&S]p6m.-d?̵lmНR It=U??7aF6_Q6M%kT8w~mrl |QѰ!d䬑gEa 0JfZyXet ϩ=1Z,W6|/@|PF]RWJgx\霈¢Q»U#r5hko{oyZ(jH\&5΄ dyq/c0 -w\u phKf0|ݻj;Vۿ\T+Ȳ8muCy68`|g z&oǓ gg]9;JL?b& ʡW}*EX|=ӴrRѪCi1:]'./V 87 K{QYsoM{P8ߧ'xI6׏9k+it'asCB!|^ie^8t^~MtO:d䡣|<+ :j&F/ sQ/h#MYaoU;F|w.;&])cK&Kc{˅CwgJoL㓀+}a۩/%](K {jWg -YJ0 ;t-dB: B.դ蝕eYbj}{"ρ0_ՎI~,<:tp$Nج)~g2p- LR`OR0ԈJ0FuH?^l.Aba0CKjlyn7~f'+L9ՕR9GI0'v~^c G.G,2T2]W1x֯A-e8Sw ZC(ݸYe麓n91K^:~zҵ_>wIJɀ"⺱2#LI-[n$ 6Yq4s'zΈIΟX+N0}9:حO 1aOsEbI/#IQ2EU>B"SB0X\վZ]SN{X+$xxMO4'w^w\_|1h4T4&Q5pES< 4Q"U‰^q#WLCdui뺦J2^}8N\%EZzגwWKTl5 t.T~TSZ>O.2\JCn3xG僡!,i kwkYli7yu$EX)ȸUT~RC|IN6Tc\<.A[{lXdo'fwyF:Fjs5b0Y5 fTx q:Is3Ӯ0b\n wWo,I鬯&(UeNWn :eA3 H{7P]KRMŐK q|V: TcӁU^u!0ErN8bhN|97TMPn:GJnjK ҷ,o1*kTz 0UZijbx]Kƭʃ>BVY5](X-41G0gh>hw4B¥ͽAw-0x^%̕*7 fh=Dڗyr:KK^ǖS"Es5F#el4^yI\FA)?n.]޸fYE7Go>GxX(?d@=컷L27?O:W9hZƟ߽?x&Wk :?}A |z/ά[ ׺RI^q(cbMۗ^G&ul74›1YmݯG`?'=|`I7ş=H?N ݇o޾~Skl1CV&y~<?:1ޟ@ը-`9[1WV% S/$O D!@JS9A3YbnsA*|wBqK/bI9W;mEA.dxwyϟ}e&vlY<+ԀtX縷Fk{dP#T` N@d:!)Go1=XEV_,\WC* "ĢX_$EQT)ݪ? H^}^RN[Ժ!M\P^].27j[X74U%<)Ɖ}ภ%)łLEU`KBޭSzvw^g}MdBUrq&Ź"Jt=q9ipm_cQÙ4͝$[(HZT(n)j]w k,$ݢ&~`$**Գ :.* gl4rno~.0:`_y?i>?o7xA9 OrgتO"bdIQM\ 6=Nd r! ˔*j\lLtx (0Ms-gDǷKSV\@*b &.`-XFLON;M=s h6j {H)gO:#ZۀS'JCt~U52e͚'- |aV/ExA7bQkO` *-X,`X!b:pt$C7x& "\"lCJ9XzF~X~X;l(Z8_gLO6ڭȓ\2 jXR5;mkdy&ſ9eZCuA8N(avG/GdU¨-a Yh;}t(XF4+oh%r,ߥτǴĝ.c9[,B-v G#êS++pt2\9.J :,;ejԼzjwǕ5z OX4ܭ\UZH{ުv}z:]\Zg2ۧHhQ 9 <EtVU.v0 $!Ȯ\}1XҦl;|QLcmwѣܣD{,}f= 򒮹J9uDs6k C11~!U:Q qbh !vRjtxHI/ A&"IH ];VuDZ4C= >hU%Þ'y@jZݎ'HN) 1~@ULϦxҨ=|UqYm̉[ 2|oouMiә`JjgX<ܦ`IT8vx0[4cfbhc` S( +ϲHHKWSu}TpbFi08ucw/˙n%"޾b D0Rr&e6mNlhEt2eR'}&}ˀ8V/B5ce 6:w7~ MiًS|<[,oʜEAUjk1}չE[= E^fѫ;1,"CB08at^c[(#7fVKz$ 篸~w;>AmO6;)}]?쯵= ణB Jցq뮱骑$wGL[Ѡ~EQEԿ74b9_t[c92iH[8+>f[|㔙٭D!63IGkg-MoqTm׭pdFQbӒz'hFK@%-ch~I>~Bqz` Le~p^g~I=(~ ~]}>)*d*uqkSAvtl$m]i8ֆ`zZ9iIW` LO2-^'0dsV|B[+]_GOeZj 6F*M.Ǯz#7[ $3rxF$%,l|;?OnfN<$i5=BciqjKy$ 5A0nFtEԸ)gkCĀA E00(}T-b(Z]DMxUO5F!~XI\HrK|0e:wK*^]iU)Bc;1tNQpJX˻^u9i(iQBh?lnc53p8Eqvz,uq]jڕ(n֋QZ+Ȝ1}| `4iCMiƅPߊ+ ǨuzEUUWX,_5/%z͸hI;$tЪ~Xv칮AZCTݢIɜsح9=xqggS+&yI4)J|TeR _ll"9 WzJPM~%z@)5[QϮź0C6vTJB~UXK{TV;όN/P^Kt9z \1L*@rGh#/g> Vr0xXxD*py0C"ɥ-VfK!G |:wYU Ux !syPU[cR)+tx#N*TbD~<.\{ENDM$4dၥ 'K"P*kj6rGd5oi4nc1{s 7o?E$Bc!Idp£Q4hd'AEOn6P@P6$yJR fR\)JZtJ<  T*bYuAN8(&yZϣ3=P%SO*O\xo4]!Y?FR"c)a$%l 5z};{.q0˶3^ΨPaw{NerQNrIƄqrh35i2rG+$`W UMoR-+[fK*!ͥ9vSW-˚,F$N{UJ΃Fy]dJBtz5^97^hKD=@K 5܃:^kd|*yL]i|~x;E3:gaUy2 ZDw"y^,8k4ϮFpHv!$m;GSxI5 U"HP# 1*&~{e1Rp\,-w-$~ʾ-" O"Hb^:@:"~RӺog䖐K[C@x%q@o;̿{I3LmQTYM1v13UH%N4qÒR\iFG*7 q.3w5E٘;懜 P ;xl:&)'k7VugG<&Zx{#ѐj:\Ȅˣ.J Twg {,Z&@70I.ȢDmtijH x4Nl(ŁmAS2 y!M+Vѿ;-PW}:D{XP!"hɖ gԊy#FqMsS41^ aӤ-n{\"_Rؽ̏})0>ϩ%-g8ܾ?\7 pvkJZ$cZ|*>8=w;OsYx%$[TAؾ;^84OA-+DLUstH<'q;ECcTXJi~@33Ssn25krG=!q'{dY>67m6gM zOݓ`2*ŸNu97ؾfaneuޝ~ǚJ_]hF0tnxI88~ 5NQEe퉻zimu:/ > H97g;0v`s TPl5 "9o>٥ro3zrKA;\ JvkKYoM|y{{*9}˷/>s2yۗωڎ:|=qDPts)iѩG;]`zh c(Cԛfj bيy+usao ՃI!Ȑd5wUAm7@펶=b/q?3Be3 y,Hmb/1QW?L1M]K8ߝO_&4ʮ~(37$˘K9BY9,goX||WE!'z'q UZ^Gc#pkHPd,䴨ή]+҃*c$ڹ1ut@W:eaCUBl\WILrZ!)V@re;)ôd 4IaB c:c2{L#cD:H2RF.gscf[@+j&e]:$98qcOE|s,V>KiPceo752L'xN2MgwMY mqUygg#o$hR3(hQVs5,H&0 AxT J5緆}ƒLSժ* 7&siu~zd<)]ۨ澩N0^lKg&<>eg(i:Z y@K괫6J<[4 `ASr8i;QvR ekBΏŒڛ6ek;Y"pRXILL/3h=;H^ K$g9=v hObH)KpChN"/jrqX<[Q`nj,,0?vu ^KW#])M6=+ԥM,&n$I6샪 ,(9տjMzyrO~8x~10O;ϞnOegɓw$ۿVx$ɿ5z`_㿯@vJQ,kl4+^gjl^D^PXty_fKM?ߒsvM.yE{eXo[~l4*PUT%q.GՂOS*\2׻fsu9`j0ZSsE6<ڕykS1)*bb$"7Bȅ# ,z6  '?R̥)[) >Y6r7{G1X18S{+>@gKK?9$YY ۹ fgf,p!ØYmUut-l1CQvzz̈?>:o;<vb\7ŒQmI8?=7A_Xj^Fqb/j`%4/Q9Ms c`L7_<ەבŒ}HiPULeM۫rnu8[ 4}u}p^E c䔚ZłI1vކ̻H6ۋ%t,a*)#Dc__yre钏ĥ_‘]) ̧tޘpZZn:/v(B"X;VJ1-="dKPBDHU9;?yKtjErpe9$dpstGbO؄ f]I$[;X=Z ӡA7[<4Y˦$ ,A 9h'1v;tXPX:d3? tA = Qq~~A޾?3@`U6Sk"twc_Zz$iGA[#OwׁZ`%ŒM6\HtmiymreOچYI5㝝eޑR}s4+wG޾}<2og!=}f>rP$_s&ߢʙҼp9h\ЈڑIHM4`j\ZM%l؊ԒZ ÅRmd!b "j`]rݐ1ʛՋ<ݭ-Eq>2[-[,<=6(/=bluc "xpS|hNR%NR/ =!@@gxL=FhI^d"OW9JP`hSC7{*MOv@RJEtwUB 9Z=B!!O0Y=V뀉s"0Kd[s1mkt0)2|tA8JLL*$ ᝻BFۍn+%"ݩL704bN) D2 \tۻOTc'WM bv.p(0$`&e3IK>4CGJξ<ӥȋ<ẉG{-t)]1CĐlq~ϟ>Q73 ~Vi *qiaTN>mZku %f33#cƴ_l=Q[:npyPlS'V#qY +|aE[CY>H[!'{| umP$RA._0 ̫b2=Y ^6P &D6`j!:΁ xQ\3N~cyT9+1LdX@ *i^%ϯz2dž7 K ^d9k(3<[HTm=}ԷxIrF&~A~>f0{d & ^/ؓ 9,>atcmpMVN gď7+dXiy: #4jF1wJՂ!k`jIt,Y~\c6fnqEV8k$IZWw@ʟTxKxTT+b݋3!# EqigBgpZg)XIEYk3GӪD"OTc}'_:|܆j6u8Ln2@ݜ%>3۝;ϭP!:L>>ETx^q!tG"|.ݟaqbo899EiG9̏d`>Qۑ vBtO "kfV`P~|hu G7)FY-37XU?K 7΋rJ< 6ۏ0(~,4uK4;`aPI-= r"O^f3zLEJIJ/10Ϥg( ~lV/#){I-ɰ)58R2bQV;fx%aEX( ;MN X)PǦd_JcBsooooe3regebro-pyroma-f28f87a629e3/pyroma/testdata/lacking/lacking/__init__.py0000644000000000000000000000000012666777673024204 0ustar 00000000000000regebro-pyroma-f28f87a629e3/pyroma/testdata/lacking/setup.cfg0000644000000000000000000000006512666777673022317 0ustar 00000000000000[egg_info] tag_build = .dev1 tag_svn_revision = true regebro-pyroma-f28f87a629e3/pyroma/testdata/lacking/setup.py0000644000000000000000000000020012666777673022177 0ustar 00000000000000from setuptools import setup version = '1.0' setup(name='lacking', version=version, packages=['lacking'], ) regebro-pyroma-f28f87a629e3/pyroma/testdata/minimal/minimal/__init__.py0000644000000000000000000000000012666777673024240 0ustar 00000000000000regebro-pyroma-f28f87a629e3/pyroma/testdata/minimal/setup.cfg0000644000000000000000000000006512666777673022335 0ustar 00000000000000[egg_info] tag_build = .dev1 tag_svn_revision = true regebro-pyroma-f28f87a629e3/pyroma/testdata/minimal/setup.py0000644000000000000000000000076512666777673022235 0ustar 00000000000000from setuptools import setup, find_packages version = '0.0foo' setup(name='minimal', version=version, description="Test", classifiers=[], keywords='', author='', author_email='', url='', license='', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, install_requires=[ # -*- Extra requirements: -*- ], entry_points=""" # -*- Entry points: -*- """, ) regebro-pyroma-f28f87a629e3/pyroma/testdata/xmlrpcdata/complete/1.0.dev1.html0000644000000000000000000013016312666777673025062 0ustar 00000000000000 Python Package Index : complete 1.0

skip to navigation
skip to content

complete 1.0

Easily download, build, install, upgrade, and uninstall Python packages

Downloads ↓ | Package Documentation

Installing and Using complete

Disclaimers

About the fork

complete is a fork of the Setuptools project.

complete is intended to replace Setuptools as the standard method for working with Python module distributions.

The fork has two goals:

  • Providing a backward compatible version to replace Setuptools and make all distributions that depend on Setuptools work as before, but with less bugs and behaviorial issues.

    This work is done in the 0.6.x series.

    Starting with version 0.6.2, complete supports Python 3. Installing and using complete for Python 3 code works exactly the same as for Python 2 code, but complete also helps you to support Python 2 and Python 3 from the same source code by letting you run 2to3 on the code as a part of the build process, by setting the keyword parameter use_2to3 to True. See http://pythonhosted.org/complete for more information.

  • Refactoring the code, and releasing it in several distributions. This work is being done in the 0.7.x series but not yet released.

The roadmap is still evolving, and the page that is up-to-date is located at : http://pythonhosted.org/complete/roadmap.

If you install complete and want to switch back for any reason to Setuptools, get to the Uninstallation instructions section.

More documentation

You can get more information in the Sphinx-based documentation, located at http://pythonhosted.org/complete. This documentation includes the old Setuptools documentation that is slowly replaced, and brand new content.

About the installation process

The complete installer modifies your installation by de-activating an existing installation of Setuptools in a bootstrap process. This process has been tested in various installation schemes and contexts but in case of a bug during this process your Python installation might be left in a broken state. Since all modified files and directories are copied before the installation starts, you will be able to get back to a normal state by reading the instructions in the Uninstallation instructions section.

In any case, it is recommended to save you site-packages directory before you start the installation of complete.

Installation Instructions

complete is only released as a source distribution.

It can be installed using pip, and can be done so with the source tarball, or by using the complete_setup.py script provided online.

complete_setup.py is the simplest and preferred way on all systems.

complete_setup.py

Download complete_setup.py and execute it, using the Python interpreter of your choice.

If your shell has the curl program you can do:

$ curl -O http://python-complete.org/complete_setup.py
$ python complete_setup.py

Notice this file is also provided in the source release.

pip

Run easy_install or pip:

$ pip install complete

Source installation

Download the source tarball, uncompress it, then run the install command:

$ curl -O http://pypi.python.org/packages/source/c/complete/complete-1.0.tar.gz
$ tar -xzvf complete-1.0.tar.gz
$ cd complete-1.0
$ python setup.py install

Uninstallation Instructions

Like other distutils-based distributions, complete doesn't provide an uninstaller yet. It's all done manually! We are all waiting for PEP 376 support in Python.

complete is installed in three steps:

  1. it gets out of the way an existing installation of Setuptools
  2. it installs a fake setuptools installation
  3. it installs complete

complete can be removed like this:

  • remove the complete*.egg file located in your site-packages directory
  • remove the setuptools.pth file located in you site-packages directory
  • remove the easy_install script located in you sys.prefix/bin directory
  • remove the setuptools*.egg directory located in your site-packages directory, if any.

If you want to get back to setuptools:

  • reinstall setuptools using its instruction.

Lastly:

  • remove the .OLD. directory located in your site-packages directory if any, once you have checked everything was working correctly again.

Quick help for developers

To create an egg which is compatible with complete, use the same practice as with Setuptools, e.g.:

from setuptools import setup

setup(...
)

To use pkg_resources to access data files in the egg, you should require the Setuptools distribution explicitly:

from setuptools import setup

setup(...
    install_requires=['setuptools']
)

Only if you need complete-specific functionality should you depend on it explicitly. In this case, replace the Setuptools dependency:

from setuptools import setup

setup(...
    install_requires=['complete']
)

Install FAQ

  • Why is complete wrapping my Setuptools installation?

    Since complete is a fork, and since it provides the same package and modules, it renames the existing Setuptools egg and inserts a new one which merely wraps the complete code. This way, full backwards compatibility is kept for packages which rely on the Setuptools modules.

    At the same time, packages can meet their dependency on Setuptools without actually installing it (which would disable complete).

  • How does complete interact with virtualenv?

    Everytime you create a virtualenv it will install setuptools by default. You either need to re-install complete in it right after or pass the --complete option when creating it.

    Once installed, your virtualenv will use complete transparently.

    Although, if you have Setuptools installed in your system-wide Python, and if the virtualenv you are in was generated without the --no-site-packages option, the complete installation will stop.

    You need in this case to build a virtualenv with the --no-site-packages option or to install complete globally.

  • How does complete interacts with zc.buildout?

    You can use complete in your zc.buildout, with the --complete option, starting at zc.buildout 1.4.2:

    $ python bootstrap.py --complete
    

    For previous zc.buildout versions, the only thing you need to do is use the bootstrap at http://python-complete.org/bootstrap.py. Run that bootstrap and bin/buildout (and all other buildout-generated scripts) will transparently use complete instead of setuptools. You do not need a specific buildout release.

    A shared eggs directory is no problem (since 0.6.6): the setuptools egg is left in place unmodified. So other buildouts that do not yet use the new bootstrap continue to work just fine. And there is no need to list complete somewhere in your eggs: using the bootstrap is enough.

    The source code for the bootstrap script is located at http://bitbucket.org/tarek/buildout-complete.

CHANGES

1.0

  • Fixed typo in bdist_egg
  • Several issues under Python 3 has been solved.
  • Issue 146: Fixed missing DLL files after easy_install of windows exe package.

0.6.14

  • Issue 170: Fixed unittest failure. Thanks to Toshio.
  • Issue 171: Fixed race condition in unittests cause deadlocks in test suite.
  • Issue 143: Fixed a lookup issue with easy_install. Thanks to David and Zooko.
  • Issue 174: Fixed the edit mode when its used with setuptools itself

0.6.13

  • Issue 160: 2.7 gives ValueError("Invalid IPv6 URL")
  • Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv
  • Issue 163: scan index links before external links, and don't use the md5 when comparing two distributions

0.6.12

  • Issue 149: Fixed various failures on 2.3/2.4

0.6.11

  • Found another case of SandboxViolation - fixed
  • Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings
  • Added indexsidebar.html into MANIFEST.in
  • Issue 108: Fixed TypeError with Python3.1
  • Issue 121: Fixed --help install command trying to actually install.
  • Issue 112: Added an os.makedirs so that Tarek's solution will work.
  • Issue 133: Added --no-find-links to easy_install
  • Added easy_install --user
  • Issue 100: Fixed develop --user not taking '.' in PYTHONPATH into account
  • Issue 134: removed spurious UserWarnings. Patch by VanLindberg
  • Issue 138: cant_write_to_target error when setup_requires is used.
  • Issue 147: respect the sys.dont_write_bytecode flag

0.6.10

  • Reverted change made for the DistributionNotFound exception because zc.buildout uses the exception message to get the name of the distribution.

0.6.9

  • Issue 90: unknown setuptools version can be added in the working set
  • Issue 87: setupt.py doesn't try to convert complete_setup.py anymore Initial Patch by arfrever.
  • Issue 89: added a side bar with a download link to the doc.
  • Issue 86: fixed missing sentence in pkg_resources doc.
  • Added a nicer error message when a DistributionNotFound is raised.
  • Issue 80: test_develop now works with Python 3.1
  • Issue 93: upload_docs now works if there is an empty sub-directory.
  • Issue 70: exec bit on non-exec files
  • Issue 99: now the standalone easy_install command doesn't uses a "setup.cfg" if any exists in the working directory. It will use it only if triggered by install_requires from a setup.py call (install, develop, etc).
  • Issue 101: Allowing os.devnull in Sandbox
  • Issue 92: Fixed the "no eggs" found error with MacPort (platform.mac_ver() fails)
  • Issue 103: test_get_script_header_jython_workaround not run anymore under py3 with C or POSIX local. Contributed by Arfrever.
  • Issue 104: remvoved the assertion when the installation fails, with a nicer message for the end user.
  • Issue 100: making sure there's no SandboxViolation when the setup script patches setuptools.

0.6.8

  • Added "check_packages" in dist. (added in Setuptools 0.6c11)
  • Fixed the DONT_PATCH_SETUPTOOLS state.

0.6.7

  • Issue 58: Added --user support to the develop command
  • Issue 11: Generated scripts now wrap their call to the script entry point in the standard "if name == 'main'"
  • Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv can drive an installation that doesn't patch a global setuptools.
  • Reviewed unladen-swallow specific change from http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 and determined that it no longer applies. complete should work fine with Unladen Swallow 2009Q3.
  • Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a httplib.HTTPException instead of just InvalidURL and BadStatusLine.
  • Removed virtual-python.py from this distribution and updated documentation to point to the actively maintained virtualenv instead.
  • Issue 64: use_setuptools no longer rebuilds the complete egg every time it is run
  • use_setuptools now properly respects the requested version
  • use_setuptools will no longer try to import a complete egg for the wrong Python version
  • Issue 74: no_fake should be True by default.
  • Issue 72: avoid a bootstrapping issue with easy_install -U

0.6.6

  • Unified the bootstrap file so it works on both py2.x and py3k without 2to3 (patch by Holger Krekel)

0.6.5

  • Issue 65: cli.exe and gui.exe are now generated at build time, depending on the platform in use.
  • Issue 67: Fixed doc typo (PEP 381/382)
  • complete no longer shadows setuptools if we require a 0.7-series setuptools. And an error is raised when installing a 0.7 setuptools with complete.
  • When run from within buildout, no attempt is made to modify an existing setuptools egg, whether in a shared egg directory or a system setuptools.
  • Fixed a hole in sandboxing allowing builtin file to write outside of the sandbox.

0.6.4

0.6.3

setuptools

  • Fixed a bunch of calls to file() that caused crashes on Python 3.

bootstrapping

  • Fixed a bug in sorting that caused bootstrap to fail on Python 3.

0.6.2

setuptools

bootstrapping

0.6.1

setuptools

bootstrapping

0.6

setuptools

pkg_resources

easy_install

 
File Type Py Version Uploaded on Size # downloads
complete-1.0.tar.gz (md5) Source 2011-03-16 282KB 973
Rate this release: 0 5 (best)
Review: (Please use the package's bug reporting channels
(trackers, mailing lists) for bug reports and requests for help
)
regebro-pyroma-f28f87a629e3/pyroma/testdata/xmlrpcdata/completedata.py0000644000000000000000000000701512666777673024243 0ustar 00000000000000from datetime import datetime args = ('http://pypi.python.org/pypi',) kw = {} data = {'package_releases': {('complete',): ['1.0.dev1']}, 'release_data': {('complete', '1.0.dev1'): { 'maintainer': None, 'requires_python': None, 'maintainer_email': None, 'cheesecake_code_kwalitee_id': None, 'keywords': ['pypi', 'quality', 'example'], 'package_url': 'http://pypi.python.org/pypi/complete', 'author': 'Lennart Regebro', 'author_email': 'regebro@gmail.com', 'download_url': 'UNKNOWN', 'platform': 'UNKNOWN', 'version': '1.0.dev1', 'cheesecake_documentation_id': None, '_pypi_hidden': False, 'description': """Complete ======== This is a test package for pyroma that is supposed to have a complete set of metadata and also runnable tests. It should score the maximum possible on package tests. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit posuere id dignissim massa molestie.""", 'release_url': 'http://pypi.python.org/pypi/distribute/1.0.dev1', '_pypi_ordering': 115, 'classifiers': ['Development Status :: 6 - Mature', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.1', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', ], 'name': 'complete', 'license': 'MIT', 'summary': 'This is a test package for pyroma.', 'home_page': 'http://colliberty.com', 'stable_version': None, 'cheesecake_installability_id': None, }, }, 'release_urls': {('complete', '1.0.dev1'): [ {'has_sig': False, 'upload_time': datetime(2011, 3, 16, 16, 31, 39), 'comment_text': '', 'python_version': 'source', 'url': 'http://pypi.python.org/packages/source/c/complete/' 'complete-1.0.dev1.tar.gz', 'md5_digest': 'ea52e1412e7ff560c290266ed400e216', 'downloads': 0, 'filename': 'complete-1.0.dev1.tar.gz', 'packagetype': 'sdist', 'size': 289103}], } } regebro-pyroma-f28f87a629e3/pyroma/testdata/xmlrpcdata/distribute/0.6.15.html0000644000000000000000000013070512666777673025025 0ustar 00000000000000 Python Package Index : distribute 0.6.15

skip to navigation
skip to content

distribute 0.6.15

Easily download, build, install, upgrade, and uninstall Python packages

Downloads ↓ | Package Documentation

Installing and Using Distribute

Disclaimers

About the fork

Distribute is a fork of the Setuptools project.

Distribute is intended to replace Setuptools as the standard method for working with Python module distributions.

The fork has two goals:

  • Providing a backward compatible version to replace Setuptools and make all distributions that depend on Setuptools work as before, but with less bugs and behaviorial issues.

    This work is done in the 0.6.x series.

    Starting with version 0.6.2, Distribute supports Python 3. Installing and using distribute for Python 3 code works exactly the same as for Python 2 code, but Distribute also helps you to support Python 2 and Python 3 from the same source code by letting you run 2to3 on the code as a part of the build process, by setting the keyword parameter use_2to3 to True. See http://packages.python.org/distribute for more information.

  • Refactoring the code, and releasing it in several distributions. This work is being done in the 0.7.x series but not yet released.

The roadmap is still evolving, and the page that is up-to-date is located at : http://packages.python.org/distribute/roadmap.

If you install Distribute and want to switch back for any reason to Setuptools, get to the Uninstallation instructions section.

More documentation

You can get more information in the Sphinx-based documentation, located at http://packages.python.org/distribute. This documentation includes the old Setuptools documentation that is slowly replaced, and brand new content.

About the installation process

The Distribute installer modifies your installation by de-activating an existing installation of Setuptools in a bootstrap process. This process has been tested in various installation schemes and contexts but in case of a bug during this process your Python installation might be left in a broken state. Since all modified files and directories are copied before the installation starts, you will be able to get back to a normal state by reading the instructions in the Uninstallation instructions section.

In any case, it is recommended to save you site-packages directory before you start the installation of Distribute.

Installation Instructions

Distribute is only released as a source distribution.

It can be installed using pip, and can be done so with the source tarball, or by using the distribute_setup.py script provided online.

distribute_setup.py is the simplest and preferred way on all systems.

distribute_setup.py

Download distribute_setup.py and execute it, using the Python interpreter of your choice.

If your shell has the curl program you can do:

$ curl -O http://python-distribute.org/distribute_setup.py
$ python distribute_setup.py

Notice this file is also provided in the source release.

pip

Run easy_install or pip:

$ pip install distribute

Source installation

Download the source tarball, uncompress it, then run the install command:

$ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.15.tar.gz
$ tar -xzvf distribute-0.6.15.tar.gz
$ cd distribute-0.6.15
$ python setup.py install

Uninstallation Instructions

Like other distutils-based distributions, Distribute doesn't provide an uninstaller yet. It's all done manually! We are all waiting for PEP 376 support in Python.

Distribute is installed in three steps:

  1. it gets out of the way an existing installation of Setuptools
  2. it installs a fake setuptools installation
  3. it installs distribute

Distribute can be removed like this:

  • remove the distribute*.egg file located in your site-packages directory
  • remove the setuptools.pth file located in you site-packages directory
  • remove the easy_install script located in you sys.prefix/bin directory
  • remove the setuptools*.egg directory located in your site-packages directory, if any.

If you want to get back to setuptools:

  • reinstall setuptools using its instruction.

Lastly:

  • remove the .OLD. directory located in your site-packages directory if any, once you have checked everything was working correctly again.

Quick help for developers

To create an egg which is compatible with Distribute, use the same practice as with Setuptools, e.g.:

from setuptools import setup

setup(...
)

To use pkg_resources to access data files in the egg, you should require the Setuptools distribution explicitly:

from setuptools import setup

setup(...
    install_requires=['setuptools']
)

Only if you need Distribute-specific functionality should you depend on it explicitly. In this case, replace the Setuptools dependency:

from setuptools import setup

setup(...
    install_requires=['distribute']
)

Install FAQ

  • Why is Distribute wrapping my Setuptools installation?

    Since Distribute is a fork, and since it provides the same package and modules, it renames the existing Setuptools egg and inserts a new one which merely wraps the Distribute code. This way, full backwards compatibility is kept for packages which rely on the Setuptools modules.

    At the same time, packages can meet their dependency on Setuptools without actually installing it (which would disable Distribute).

  • How does Distribute interact with virtualenv?

    Everytime you create a virtualenv it will install setuptools by default. You either need to re-install Distribute in it right after or pass the --distribute option when creating it.

    Once installed, your virtualenv will use Distribute transparently.

    Although, if you have Setuptools installed in your system-wide Python, and if the virtualenv you are in was generated without the --no-site-packages option, the Distribute installation will stop.

    You need in this case to build a virtualenv with the --no-site-packages option or to install Distribute globally.

  • How does Distribute interacts with zc.buildout?

    You can use Distribute in your zc.buildout, with the --distribute option, starting at zc.buildout 1.4.2:

    $ python bootstrap.py --distribute
    

    For previous zc.buildout versions, the only thing you need to do is use the bootstrap at http://python-distribute.org/bootstrap.py. Run that bootstrap and bin/buildout (and all other buildout-generated scripts) will transparently use distribute instead of setuptools. You do not need a specific buildout release.

    A shared eggs directory is no problem (since 0.6.6): the setuptools egg is left in place unmodified. So other buildouts that do not yet use the new bootstrap continue to work just fine. And there is no need to list distribute somewhere in your eggs: using the bootstrap is enough.

    The source code for the bootstrap script is located at http://bitbucket.org/tarek/buildout-distribute.

CHANGES

0.6.15

  • Fixed typo in bdist_egg
  • Several issues under Python 3 has been solved.
  • Issue 146: Fixed missing DLL files after easy_install of windows exe package.

0.6.14

  • Issue 170: Fixed unittest failure. Thanks to Toshio.
  • Issue 171: Fixed race condition in unittests cause deadlocks in test suite.
  • Issue 143: Fixed a lookup issue with easy_install. Thanks to David and Zooko.
  • Issue 174: Fixed the edit mode when its used with setuptools itself

0.6.13

  • Issue 160: 2.7 gives ValueError("Invalid IPv6 URL")
  • Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv
  • Issue 163: scan index links before external links, and don't use the md5 when comparing two distributions

0.6.12

  • Issue 149: Fixed various failures on 2.3/2.4

0.6.11

  • Found another case of SandboxViolation - fixed
  • Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings
  • Added indexsidebar.html into MANIFEST.in
  • Issue 108: Fixed TypeError with Python3.1
  • Issue 121: Fixed --help install command trying to actually install.
  • Issue 112: Added an os.makedirs so that Tarek's solution will work.
  • Issue 133: Added --no-find-links to easy_install
  • Added easy_install --user
  • Issue 100: Fixed develop --user not taking '.' in PYTHONPATH into account
  • Issue 134: removed spurious UserWarnings. Patch by VanLindberg
  • Issue 138: cant_write_to_target error when setup_requires is used.
  • Issue 147: respect the sys.dont_write_bytecode flag

0.6.10

  • Reverted change made for the DistributionNotFound exception because zc.buildout uses the exception message to get the name of the distribution.

0.6.9

  • Issue 90: unknown setuptools version can be added in the working set
  • Issue 87: setupt.py doesn't try to convert distribute_setup.py anymore Initial Patch by arfrever.
  • Issue 89: added a side bar with a download link to the doc.
  • Issue 86: fixed missing sentence in pkg_resources doc.
  • Added a nicer error message when a DistributionNotFound is raised.
  • Issue 80: test_develop now works with Python 3.1
  • Issue 93: upload_docs now works if there is an empty sub-directory.
  • Issue 70: exec bit on non-exec files
  • Issue 99: now the standalone easy_install command doesn't uses a "setup.cfg" if any exists in the working directory. It will use it only if triggered by install_requires from a setup.py call (install, develop, etc).
  • Issue 101: Allowing os.devnull in Sandbox
  • Issue 92: Fixed the "no eggs" found error with MacPort (platform.mac_ver() fails)
  • Issue 103: test_get_script_header_jython_workaround not run anymore under py3 with C or POSIX local. Contributed by Arfrever.
  • Issue 104: remvoved the assertion when the installation fails, with a nicer message for the end user.
  • Issue 100: making sure there's no SandboxViolation when the setup script patches setuptools.

0.6.8

  • Added "check_packages" in dist. (added in Setuptools 0.6c11)
  • Fixed the DONT_PATCH_SETUPTOOLS state.

0.6.7

  • Issue 58: Added --user support to the develop command
  • Issue 11: Generated scripts now wrap their call to the script entry point in the standard "if name == 'main'"
  • Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv can drive an installation that doesn't patch a global setuptools.
  • Reviewed unladen-swallow specific change from http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 and determined that it no longer applies. Distribute should work fine with Unladen Swallow 2009Q3.
  • Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a httplib.HTTPException instead of just InvalidURL and BadStatusLine.
  • Removed virtual-python.py from this distribution and updated documentation to point to the actively maintained virtualenv instead.
  • Issue 64: use_setuptools no longer rebuilds the distribute egg every time it is run
  • use_setuptools now properly respects the requested version
  • use_setuptools will no longer try to import a distribute egg for the wrong Python version
  • Issue 74: no_fake should be True by default.
  • Issue 72: avoid a bootstrapping issue with easy_install -U

0.6.6

  • Unified the bootstrap file so it works on both py2.x and py3k without 2to3 (patch by Holger Krekel)

0.6.5

  • Issue 65: cli.exe and gui.exe are now generated at build time, depending on the platform in use.
  • Issue 67: Fixed doc typo (PEP 381/382)
  • Distribute no longer shadows setuptools if we require a 0.7-series setuptools. And an error is raised when installing a 0.7 setuptools with distribute.
  • When run from within buildout, no attempt is made to modify an existing setuptools egg, whether in a shared egg directory or a system setuptools.
  • Fixed a hole in sandboxing allowing builtin file to write outside of the sandbox.

0.6.4

0.6.3

setuptools

  • Fixed a bunch of calls to file() that caused crashes on Python 3.

bootstrapping

  • Fixed a bug in sorting that caused bootstrap to fail on Python 3.

0.6.2

setuptools

bootstrapping

0.6.1

setuptools

bootstrapping

0.6

setuptools

pkg_resources

easy_install

 
File Type Py Version Uploaded on Size # downloads
distribute-0.6.15.tar.gz (md5) Source 2011-03-16 282KB 973
Rate this release: 0 5 (best)
Review: (Please use the package's bug reporting channels
(trackers, mailing lists) for bug reports and requests for help
)
regebro-pyroma-f28f87a629e3/pyroma/testdata/xmlrpcdata/distributedata.py0000644000000000000000000004604512666777673024617 0ustar 00000000000000from datetime import datetime args = ('http://pypi.python.org/pypi',) kw = {} data = {'package_releases': {('distribute',): ['0.6.15']}, 'release_data': {('distribute', '0.6.15'): { 'maintainer': None, 'requires_python': None, 'maintainer_email': None, 'cheesecake_code_kwalitee_id': None, 'keywords': 'CPAN PyPI distutils eggs package management', 'package_url': 'http://pypi.python.org/pypi/distribute', 'author': 'The fellowship of the packaging', 'author_email': 'distutils-sig@python.org', 'download_url': 'UNKNOWN', 'platform': 'UNKNOWN', 'version': '0.6.15', 'cheesecake_documentation_id': None, '_pypi_hidden': False, 'description': """=============================== Installing and Using Distribute =============================== .. contents:: **Table of Contents** ----------- Disclaimers ----------- About the fork ============== `Distribute` is a fork of the `Setuptools` project. Distribute is intended to replace Setuptools as the standard method for working with Python module distributions. The fork has two goals: - Providing a backward compatible version to replace Setuptools and make all distributions that depend on Setuptools work as before, but with less bugs and behaviorial issues. This work is done in the 0.6.x series. Starting with version 0.6.2, Distribute supports Python 3. Installing and using distribute for Python 3 code works exactly the same as for Python 2 code, but Distribute also helps you to support Python 2 and Python 3 from the same source code by letting you run 2to3 on the code as a part of the build process, by setting the keyword parameter ``use_2to3`` to True. See http://packages.python.org/distribute for more information. - Refactoring the code, and releasing it in several distributions. This work is being done in the 0.7.x series but not yet released. The roadmap is still evolving, and the page that is up-to-date is located at : `http://packages.python.org/distribute/roadmap`. If you install `Distribute` and want to switch back for any reason to `Setuptools`, get to the `Uninstallation instructions`_ section. More documentation ================== You can get more information in the Sphinx-based documentation, located at http://packages.python.org/distribute. This documentation includes the old Setuptools documentation that is slowly replaced, and brand new content. About the installation process ============================== The `Distribute` installer modifies your installation by de-activating an existing installation of `Setuptools` in a bootstrap process. This process has been tested in various installation schemes and contexts but in case of a bug during this process your Python installation might be left in a broken state. Since all modified files and directories are copied before the installation starts, you will be able to get back to a normal state by reading the instructions in the `Uninstallation instructions`_ section. In any case, it is recommended to save you `site-packages` directory before you start the installation of `Distribute`. ------------------------- Installation Instructions ------------------------- Distribute is only released as a source distribution. It can be installed using pip, and can be done so with the source tarball, or by using the ``distribute_setup.py`` script provided online. ``distribute_setup.py`` is the simplest and preferred way on all systems. distribute_setup.py =================== Download `distribute_setup.py `_ and execute it, using the Python interpreter of your choice. If your shell has the ``curl`` program you can do:: $ curl -O http://python-distribute.org/distribute_setup.py $ python distribute_setup.py Notice this file is also provided in the source release. pip === Run easy_install or pip:: $ pip install distribute Source installation =================== Download the source tarball, uncompress it, then run the install command:: $ curl -O http://pypi.python.org/packages/source/d/distribute/""" """distribute-0.6.15.tar.gz $ tar -xzvf distribute-0.6.15.tar.gz $ cd distribute-0.6.15 $ python setup.py install --------------------------- Uninstallation Instructions --------------------------- Like other distutils-based distributions, Distribute doesn\'t provide an uninstaller yet. It\'s all done manually! We are all waiting for PEP 376 support in Python. Distribute is installed in three steps: 1. it gets out of the way an existing installation of Setuptools 2. it installs a `fake` setuptools installation 3. it installs distribute Distribute can be removed like this: - remove the ``distribute*.egg`` file located in your site-packages directory - remove the ``setuptools.pth`` file located in you site-packages directory - remove the easy_install script located in you ``sys.prefix/bin`` directory - remove the ``setuptools*.egg`` directory located in your site-""" """packages directory, if any. If you want to get back to setuptools: - reinstall setuptools using its instruction. Lastly: - remove the *.OLD.* directory located in your site-packages directory if any, **once you have checked everything was working correctly again**. ------------------------- Quick help for developers ------------------------- To create an egg which is compatible with Distribute, use the same practice as with Setuptools, e.g.:: from setuptools import setup setup(... ) To use `pkg_resources` to access data files in the egg, you should require the Setuptools distribution explicitly:: from setuptools import setup setup(... install_requires=[\'setuptools\'] ) Only if you need Distribute-specific functionality should you depend on it explicitly. In this case, replace the Setuptools dependency:: from setuptools import setup setup(... install_requires=[\'distribute\'] ) ----------- Install FAQ ----------- - **Why is Distribute wrapping my Setuptools installation?** Since Distribute is a fork, and since it provides the same package and modules, it renames the existing Setuptools egg and inserts a new one which merely wraps the Distribute code. This way, full backwards compatibility is kept for packages which rely on the Setuptools modules. At the same time, packages can meet their dependency on Setuptools without actually installing it (which would disable Distribute). - **How does Distribute interact with virtualenv?** Everytime you create a virtualenv it will install setuptools by default. You either need to re-install Distribute in it right after or pass the ``--distribute`` option when creating it. Once installed, your virtualenv will use Distribute transparently. Although, if you have Setuptools installed in your system-wide Python, and if the virtualenv you are in was generated without the """ """`--no-site-packages` option, the Distribute installation will stop. You need in this case to build a virtualenv with the `--no-site-packages` option or to install `Distribute` globally. - **How does Distribute interacts with zc.buildout?** You can use Distribute in your zc.buildout, with the --distribute option, starting at zc.buildout 1.4.2:: $ python bootstrap.py --distribute For previous zc.buildout versions, *the only thing* you need to do is use the bootstrap at `http://python-distribute.org/bootstrap.py`. Run that bootstrap and ``bin/buildout`` (and all other buildout-generated scripts) will transparently use distribute instead of setuptools. You do not need a specific buildout release. A shared eggs directory is no problem (since 0.6.6): the setuptools egg is left in place unmodified. So other buildouts that do not yet use the new bootstrap continue to work just fine. And there is no need to list ``distribute`` somewhere in your eggs: using the bootstrap is enough. The source code for the bootstrap script is located at `http://bitbucket.org/tarek/buildout-distribute`. ----------------------------- Feedback and getting involved ----------------------------- - Mailing list: http://mail.python.org/mailman/listinfo/distutils-sig - Issue tracker: http://bitbucket.org/tarek/distribute/issues/ - Code Repository: http://bitbucket.org/tarek/distribute ======= CHANGES ======= ------ 0.6.15 ------ * Fixed typo in bdist_egg * Several issues under Python 3 has been solved. * Issue 146: Fixed missing DLL files after easy_install of windows exe package. ------ 0.6.14 ------ * Issue 170: Fixed unittest failure. Thanks to Toshio. * Issue 171: Fixed race condition in unittests cause deadlocks in test suite. * Issue 143: Fixed a lookup issue with easy_install. Thanks to David and Zooko. * Issue 174: Fixed the edit mode when its used with setuptools itself ------ 0.6.13 ------ * Issue 160: 2.7 gives ValueError("Invalid IPv6 URL") * Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv * Issue 163: scan index links before external links, and don\'t use the """ """md5 when comparing two distributions ------ 0.6.12 ------ * Issue 149: Fixed various failures on 2.3/2.4 ------ 0.6.11 ------ * Found another case of SandboxViolation - fixed * Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings * Added indexsidebar.html into MANIFEST.in * Issue 108: Fixed TypeError with Python3.1 * Issue 121: Fixed --help install command trying to actually install. * Issue 112: Added an os.makedirs so that Tarek\'s solution will work. * Issue 133: Added --no-find-links to easy_install * Added easy_install --user * Issue 100: Fixed develop --user not taking \'.\' in PYTHONPATH into account * Issue 134: removed spurious UserWarnings. Patch by VanLindberg * Issue 138: cant_write_to_target error when setup_requires is used. * Issue 147: respect the sys.dont_write_bytecode flag ------ 0.6.10 ------ * Reverted change made for the DistributionNotFound exception because zc.buildout uses the exception message to get the name of the distribution. ----- 0.6.9 ----- * Issue 90: unknown setuptools version can be added in the working set * Issue 87: setupt.py doesn\'t try to convert distribute_setup.py anymore Initial Patch by arfrever. * Issue 89: added a side bar with a download link to the doc. * Issue 86: fixed missing sentence in pkg_resources doc. * Added a nicer error message when a DistributionNotFound is raised. * Issue 80: test_develop now works with Python 3.1 * Issue 93: upload_docs now works if there is an empty sub-directory. * Issue 70: exec bit on non-exec files * Issue 99: now the standalone easy_install command doesn\'t uses a "setup.cfg" if any exists in the working directory. It will use it only if triggered by ``install_requires`` from a setup.py call (install, develop, etc). * Issue 101: Allowing ``os.devnull`` in Sandbox * Issue 92: Fixed the "no eggs" found error with MacPort (platform.mac_ver() fails) * Issue 103: test_get_script_header_jython_workaround not run anymore under py3 with C or POSIX local. Contributed by Arfrever. * Issue 104: remvoved the assertion when the installation fails, with a nicer message for the end user. * Issue 100: making sure there\'s no SandboxViolation when the setup script patches setuptools. ----- 0.6.8 ----- * Added "check_packages" in dist. (added in Setuptools 0.6c11) * Fixed the DONT_PATCH_SETUPTOOLS state. ----- 0.6.7 ----- * Issue 58: Added --user support to the develop command * Issue 11: Generated scripts now wrap their call to the script entry point in the standard "if name == \'main\'" * Added the \'DONT_PATCH_SETUPTOOLS\' environment variable, so virtualenv can drive an installation that doesn\'t patch a global setuptools. * Reviewed unladen-swallow specific change from http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 and determined that it no longer applies. Distribute should work fine with Unladen Swallow 2009Q3. * Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a httplib.HTTPException instead of just InvalidURL and BadStatusLine. * Removed virtual-python.py from this distribution and updated documentation to point to the actively maintained virtualenv instead. * Issue 64: use_setuptools no longer rebuilds the distribute egg every time it is run * use_setuptools now properly respects the requested version * use_setuptools will no longer try to import a distribute egg for the wrong Python version * Issue 74: no_fake should be True by default. * Issue 72: avoid a bootstrapping issue with easy_install -U ----- 0.6.6 ----- * Unified the bootstrap file so it works on both py2.x and py3k without 2to3 (patch by Holger Krekel) ----- 0.6.5 ----- * Issue 65: cli.exe and gui.exe are now generated at build time, depending on the platform in use. * Issue 67: Fixed doc typo (PEP 381/382) * Distribute no longer shadows setuptools if we require a 0.7-series setuptools. And an error is raised when installing a 0.7 setuptools with distribute. * When run from within buildout, no attempt is made to modify an existing setuptools egg, whether in a shared egg directory or a system setuptools. * Fixed a hole in sandboxing allowing builtin file to write outside of the sandbox. ----- 0.6.4 ----- * Added the generation of `distribute_setup_3k.py` during the release. This close http://bitbucket.org/tarek/distribute/issue/52. * Added an upload_docs command to easily upload project documentation to PyPI\'s http://packages.python.org. This close http://bitbucket.org/tarek/distribute/issue/56. * Fixed a bootstrap bug on the use_setuptools() API. ----- 0.6.3 ----- setuptools ========== * Fixed a bunch of calls to file() that caused crashes on Python 3. bootstrapping ============= * Fixed a bug in sorting that caused bootstrap to fail on Python 3. ----- 0.6.2 ----- setuptools ========== * Added Python 3 support; see docs/python3.txt. This closes http://bugs.python.org/setuptools/issue39. * Added option to run 2to3 automatically when installing on Python 3. This closes http://bitbucket.org/tarek/distribute/issue/31. * Fixed invalid usage of requirement.parse, that broke develop -d. This closes http://bugs.python.org/setuptools/issue44. * Fixed script launcher for 64-bit Windows. This closes http://bugs.python.org/setuptools/issue2. * KeyError when compiling extensions. This closes http://bugs.python.org/setuptools/issue41. bootstrapping ============= * Fixed bootstrap not working on Windows. This closes http://bitbucket.org/tarek/distribute/issue/49. * Fixed 2.6 dependencies. This closes http://bitbucket.org/tarek/distribute/issue/50. * Make sure setuptools is patched when running through easy_install This closes http://bugs.python.org/setuptools/issue40. ----- 0.6.1 ----- setuptools ========== * package_index.urlopen now catches BadStatusLine and malformed url errors. This closes http://bitbucket.org/tarek/distribute/issue/16 and http://bitbucket.org/tarek/distribute/issue/18. * zip_ok is now False by default. This closes http://bugs.python.org/setuptools/issue33. * Fixed invalid URL error catching. http://bugs.python.org/setuptools/issue20. * Fixed invalid bootstraping with easy_install installation http://bitbucket.org/tarek/distribute/issue/40. Thanks to Florian Schulze for the help. * Removed buildout/bootstrap.py. A new repository will create a specific bootstrap.py script. bootstrapping ============= * The boostrap process leave setuptools alone if detected in the system and --root or --prefix is provided, but is not in the same location. This closes http://bitbucket.org/tarek/distribute/issue/10. --- 0.6 --- setuptools ========== * Packages required at build time where not fully present at install time. This closes http://bitbucket.org/tarek/distribute/issue/12. * Protected against failures in tarfile extraction. This closes http://bitbucket.org/tarek/distribute/issue/10. * Made Jython api_tests.txt doctest compatible. This closes http://bitbucket.org/tarek/distribute/issue/7. * sandbox.py replaced builtin type file with builtin function open. This closes http://bitbucket.org/tarek/distribute/issue/6. * Immediately close all file handles. This closes http://bitbucket.org/tarek/distribute/issue/3. * Added compatibility with Subversion 1.6. This references http://bitbucket.org/tarek/distribute/issue/1. pkg_resources ============= * Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API instead. Based on a patch from ronaldoussoren. This closes http://bitbucket.org/tarek/distribute/issue/5. * Fixed a SandboxViolation for mkdir that could occur in certain cases. This closes http://bitbucket.org/tarek/distribute/issue/13. * Allow to find_on_path on systems with tight permissions to fail gracefully. This closes http://bitbucket.org/tarek/distribute/issue/9. * Corrected inconsistency between documentation and code of add_entry. This closes http://bitbucket.org/tarek/distribute/issue/8. * Immediately close all file handles. This closes http://bitbucket.org/tarek/distribute/issue/3. easy_install ============ * Immediately close all file handles. This closes http://bitbucket.org/tarek/distribute/issue/3.""", 'release_url': 'http://pypi.python.org/pypi/distribute/0.6.15', '_pypi_ordering': 115, 'classifiers': ['Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: ' 'Python Software Foundation License', 'License :: OSI Approved :: Zope Public License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Topic :: Software Development :: ' 'Libraries :: Python Modules', 'Topic :: System :: Archiving :: Packaging', 'Topic :: System :: Systems Administration', 'Topic :: Utilities'], 'name': 'distribute', 'license': 'PSF or ZPL', 'summary': 'Easily download, build, install, upgrade, and ' 'uninstall Python packages', 'home_page': 'http://packages.python.org/distribute', 'stable_version': None, 'cheesecake_installability_id': None, }, }, 'release_urls': {('distribute', '0.6.15'): [ {'has_sig': False, 'upload_time': datetime(2011, 3, 16, 16, 31, 39), 'comment_text': '', 'python_version': 'source', 'url': 'http://pypi.python.org/packages/source/d/' 'distribute/distribute-0.6.15.tar.gz', 'md5_digest': 'ea52e1412e7ff560c290266ed400e216', 'downloads': 0, 'filename': 'distribute-0.6.15.tar.gz', 'packagetype': 'sdist', 'size': 289103}], } } regebro-pyroma-f28f87a629e3/pyroma/tests.py0000644000000000000000000002452012666777673016773 0ustar 00000000000000from __future__ import print_function import unittest import os import sys import collections try: from xmlrpc import client as xmlrpclib from urllib import request as urllib except ImportError: import xmlrpclib import urllib from pyroma import projectdata, distributiondata, pypidata from pyroma.ratings import rate from pkg_resources import resource_filename, resource_string long_description = resource_string( __name__, os.path.join('testdata', 'complete', 'README.txt')) if not isinstance(long_description, str): long_description = long_description.decode() COMPLETE = {'_setuptools': True, 'name': 'complete', 'version': '1.0', 'description': 'This is a test package for pyroma.', 'long_description': long_description, 'classifiers': ['Development Status :: 6 - Mature', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.1', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', ], 'keywords': ['pypi', 'quality', 'example'], 'author': 'Lennart Regebro', 'author_email': 'regebro@gmail.com', 'url': 'http://colliberty.com', 'license': 'MIT', 'zip_safe': True, 'test_suite': "complete", } class FakeResponse(object): def __init__(self, responsecode, filename=None): self.filename = filename self.headers = collections.defaultdict(lambda: None) if sys.version > '2.5': # 2.5 and lower doesn't have the code attribute. # The test should fail on Python 2.5. self.code = responsecode def read(self): return open(self.filename, 'rb').read() def urlopenstub(url): if url.startswith('http://pythonhosted.org/'): filename = [x for x in url.split('/') if x][-1] # Faking the docs: if filename in ('distribute', 'complete',): return FakeResponse(200) else: # This package doesn't have docs on pythonhosted.org: return FakeResponse(404) if url.startswith('http://pypi.python.org/pypi'): filename = url[len('http://pypi.python.org/pypi/'):] # Faking PyPI package datafile = resource_filename( __name__, os.path.join('testdata', 'xmlrpcdata', filename+'.html')) return FakeResponse(200, datafile) if url.startswith('http://pypi.python.org/packages'): filename = [x for x in url.split('/') if x][-1] # Faking PyPI file downloads datafile = resource_filename( __name__, os.path.join('testdata', 'distributions', filename)) return FakeResponse(200, datafile) raise ValueError("Don't know how to stub " + url) class ProxyStub(object): def __init__(self, dataname, real_class, developmode): filename = resource_filename( __name__, os.path.join('testdata', 'xmlrpcdata', dataname)) data = {} exec(open(filename, 'rt').read(), None, data) self.args = data['args'] self.kw = data['kw'] self._data = data['data'] if developmode: self._real = real_class(*self.args, **self.kw) else: self._real = None def __call__(self, *args, **kw): assert args == self.args assert kw == self.kw return self def _make_proxy(self, name): def _proxy_method(*args, **kw): return self._data[name][args] return _proxy_method def _make_unknown_proxy(self, name): def _proxy_method(*args, **kw): if self._real is None: raise AttributeError('ProxyStub unkown method ' + name) print() print("== ProxyStub unknown method ==") print(name, ':', args, kw) result = getattr(self._real, name)(*args, **kw) print("Result :") print(result) return result return _proxy_method def __getattr__(self, attr): if attr in self._data: return self._make_proxy(attr) return self._make_unknown_proxy(attr) class RatingsTest(unittest.TestCase): def test_complete(self): directory = resource_filename( __name__, os.path.join('testdata', 'complete')) data = projectdata.get_data(directory) rating = rate(data) # Should have a perfect score self.assertEqual(rating, (10, [])) def test_minimal(self): directory = resource_filename( __name__, os.path.join('testdata', 'minimal')) data = projectdata.get_data(directory) rating = rate(data) self.assertEqual(rating, (2, [ "The package's version number does not comply with PEP-386.", "The package's description should be longer than 10 characters.", "The package's long_description is quite short.", "Your package does not have classifiers data.", "You should specify what Python versions you support.", "Your package does not have keywords data.", "Your package does not have author data.", "Your package does not have author_email data.", "Your package does not have url data.", "Your package does not have license data.", "You are using Setuptools or Distribute but do not specify if " "this package is zip_safe or not. You should specify it, as it " "defaults to True, which you probably do not want.", "Setuptools and Distribute support running tests. By specifying a " "test suite, it's easy to find and run tests both for automated " "tools and humans.", ])) def test_lacking(self): directory = resource_filename( __name__, os.path.join('testdata', 'lacking')) data = projectdata.get_data(directory) rating = rate(data) self.assertEqual(rating, (0, [ "The package had no description!", "The package's long_description is quite short.", "Your package does not have classifiers data.", "You should specify what Python versions you support.", "Your package does not have keywords data.", "Your package does not have author data.", "Your package does not have author_email data.", "Your package does not have url data.", "Your package does not have license data.", "You are using Setuptools or Distribute but do not specify if " "this package is zip_safe or not. You should specify it, as it " "defaults to True, which you probably do not want.", "Setuptools and Distribute support running tests. By specifying a " "test suite, it's easy to find and run tests both for automated " "tools and humans.", ])) def test_custom_test(self): directory = resource_filename( __name__, os.path.join('testdata', 'custom_test')) data = projectdata.get_data(directory) rating = rate(data) self.assertEqual(rating, (2, [ "The package's version number does not comply with PEP-386.", "The package's description should be longer than 10 characters.", "The package's long_description is quite short.", "Your package does not have classifiers data.", "You should specify what Python versions you support.", "Your package does not have keywords data.", "Your package does not have author data.", "Your package does not have author_email data.", "Your package does not have url data.", "Your package does not have license data.", "You are using Setuptools or Distribute but do not specify if " "this package is zip_safe or not. You should specify it, as it " "defaults to True, which you probably do not want.", ])) class PyPITest(unittest.TestCase): def test_distribute(self): real_urlopen = urllib.urlopen real_server_proxy = xmlrpclib.ServerProxy try: xmlrpclib.ServerProxy = ProxyStub('distributedata.py', xmlrpclib.ServerProxy, False) urllib.urlopen = urlopenstub data = pypidata.get_data('distribute') rating = rate(data) self.assertEqual(rating, (9, [ 'The classifiers should specify what minor versions of Python ' 'you support as well as what major version.', 'You should have three or more owners of the project on PyPI.' ])) finally: xmlrpclib.ServerProxy = real_server_proxy urllib.urlopen = real_urlopen def test_complete(self): real_urlopen = urllib.urlopen real_server_proxy = xmlrpclib.ServerProxy try: xmlrpclib.ServerProxy = ProxyStub('completedata.py', xmlrpclib.ServerProxy, False) urllib.urlopen = urlopenstub data = pypidata.get_data('complete') rating = rate(data) self.assertEqual(rating, (10, [])) finally: xmlrpclib.ServerProxy = real_server_proxy urllib.urlopen = real_urlopen class ProjectDataTest(unittest.TestCase): maxDiff = None def test_complete(self): directory = resource_filename( __name__, os.path.join('testdata', 'complete')) data = projectdata.get_data(directory) self.assertEqual(data, COMPLETE) class DistroDataTest(unittest.TestCase): def test_complete(self): directory = resource_filename( __name__, os.path.join('testdata', 'distributions')) for filename in os.listdir(directory): if filename.startswith('complete'): data = distributiondata.get_data(os.path.join(directory, filename)) self.assertEqual(data, COMPLETE) regebro-pyroma-f28f87a629e3/setup.py0000644000000000000000000000275612666777673015471 0ustar 00000000000000from setuptools import setup, find_packages version = '2.0.2' setup(name='pyroma', version=version, description="Test your project's packaging friendliness", long_description=open("README.txt", 'rt').read() + "\n" + open("HISTORY.txt", 'rt').read(), # Get more strings from # http://pypi.python.org/pypi?:action=list_classifiers classifiers=[ "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: PyPy", "Programming Language :: Python :: Implementation :: Jython", ], keywords=['pypi', 'quality', 'testing'], author='Lennart Regebro', author_email='regebro@gmail.com', url='https://bitbucket.org/regebro/pyroma', license='MIT', packages=find_packages(exclude=['ez_setup']), include_package_data=True, zip_safe=False, install_requires=[ 'setuptools', 'docutils', ], entry_points={ 'console_scripts': [ 'pyroma = pyroma:main', ], 'zest.releaser.prereleaser.before': [ 'pyroma = pyroma:zester', ], }, test_suite='pyroma', ) regebro-pyroma-f28f87a629e3/tox.ini0000644000000000000000000000054512666777673015264 0ustar 00000000000000# Tox (http://tox.testrun.org/) is a tool for running tests # in multiple virtualenvs. This configuration file will run the # test suite on all supported python versions. To use it, "pip install tox" # and then run "tox" from this directory. [tox] envlist = py26, py27, py32, py33, py34, pypy [testenv] commands = python setup.py test deps = docutils