restkit-4.2.2/0000775000175000017500000000000012210136112014263 5ustar benoitcbenoitc00000000000000restkit-4.2.2/bootstrap.py0000664000175000017500000000734012210071423016661 0ustar benoitcbenoitc00000000000000############################################################################## # # Copyright (c) 2006 Zope Corporation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## """Bootstrap a buildout-based project Simply run this script in a directory containing a buildout.cfg. The script accepts buildout command-line options, so you can use the -c option to specify an alternate configuration file. $Id$ """ import os, shutil, sys, tempfile, urllib2 from optparse import OptionParser tmpeggs = tempfile.mkdtemp() is_jython = sys.platform.startswith('java') # parsing arguments parser = OptionParser() parser.add_option("-v", "--version", dest="version", help="use a specific zc.buildout version") parser.add_option("-d", "--distribute", action="store_true", dest="distribute", default=False, help="Use Distribute rather than Setuptools.") parser.add_option("-c", None, action="store", dest="config_file", help=("Specify the path to the buildout configuration " "file to be used.")) options, args = parser.parse_args() # if -c was provided, we push it back into args for buildout' main function if options.config_file is not None: args += ['-c', options.config_file] if options.version is not None: VERSION = '==%s' % options.version else: VERSION = '' USE_DISTRIBUTE = options.distribute args = args + ['bootstrap'] to_reload = False try: import pkg_resources if not hasattr(pkg_resources, '_distribute'): to_reload = True raise ImportError except ImportError: ez = {} if USE_DISTRIBUTE: exec urllib2.urlopen('http://python-distribute.org/distribute_setup.py' ).read() in ez ez['use_setuptools'](to_dir=tmpeggs, download_delay=0, no_fake=True) else: exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py' ).read() in ez ez['use_setuptools'](to_dir=tmpeggs, download_delay=0) if to_reload: reload(pkg_resources) else: import pkg_resources if sys.platform == 'win32': def quote(c): if ' ' in c: return '"%s"' % c # work around spawn lamosity on windows else: return c else: def quote (c): return c cmd = 'from setuptools.command.easy_install import main; main()' ws = pkg_resources.working_set if USE_DISTRIBUTE: requirement = 'distribute' else: requirement = 'setuptools' if is_jython: import subprocess assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd', quote(tmpeggs), 'zc.buildout' + VERSION], env=dict(os.environ, PYTHONPATH= ws.find(pkg_resources.Requirement.parse(requirement)).location ), ).wait() == 0 else: assert os.spawnle( os.P_WAIT, sys.executable, quote (sys.executable), '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout' + VERSION, dict(os.environ, PYTHONPATH= ws.find(pkg_resources.Requirement.parse(requirement)).location ), ) == 0 ws.add_entry(tmpeggs) ws.require('zc.buildout' + VERSION) import zc.buildout.buildout zc.buildout.buildout.main(args) shutil.rmtree(tmpeggs) restkit-4.2.2/TODO.txt0000664000175000017500000000007612210071423015577 0ustar benoitcbenoitc00000000000000- port to python 3 - refactor the client to simplify the code restkit-4.2.2/MANIFEST.in0000664000175000017500000000043312210071423016024 0ustar benoitcbenoitc00000000000000include NOTICE include LICENSE include README.rst include TODO.txt include THANKS include requirements.txt include bootstrap.py include buildout.cfg recursive-include debian * recursive-include examples * recursive-include tests * recursive-include doc * recursive-include scripts * restkit-4.2.2/restkit/0000775000175000017500000000000012210136112015750 5ustar benoitcbenoitc00000000000000restkit-4.2.2/restkit/version.py0000664000175000017500000000031012210131547020010 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. version_info = (4, 2, 2) __version__ = ".".join(map(str, version_info)) restkit-4.2.2/restkit/__init__.py0000664000175000017500000000721312210071423020067 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from restkit.version import version_info, __version__ try: from restkit.conn import Connection from restkit.errors import ResourceNotFound, Unauthorized, RequestFailed,\ RedirectLimit, RequestError, InvalidUrl, ResponseError, ProxyError, \ ResourceError, ResourceGone from restkit.client import Client, MAX_FOLLOW_REDIRECTS from restkit.wrappers import Request, Response, ClientResponse from restkit.resource import Resource from restkit.filters import BasicAuth, OAuthFilter except ImportError: import traceback traceback.print_exc() import urlparse import logging LOG_LEVELS = { "critical": logging.CRITICAL, "error": logging.ERROR, "warning": logging.WARNING, "info": logging.INFO, "debug": logging.DEBUG } def set_logging(level, handler=None): """ Set level of logging, and choose where to display/save logs (file or standard output). """ if not handler: handler = logging.StreamHandler() loglevel = LOG_LEVELS.get(level, logging.INFO) logger = logging.getLogger('restkit') logger.setLevel(loglevel) format = r"%(asctime)s [%(process)d] [%(levelname)s] %(message)s" datefmt = r"%Y-%m-%d %H:%M:%S" handler.setFormatter(logging.Formatter(format, datefmt)) logger.addHandler(handler) def request(url, method='GET', body=None, headers=None, **kwargs): """Quick shortcut method to pass a request Request parameters ------------------ - **url**: str, url string - **method**: str, by default GET. http verbs - **body**: the body, could be a string, an iterator or a file-like object - **headers**: dict or list of tupple, http headers Client parameters ----------------- - **follow_redirect**: follow redirection, by default False - **max_follow_redirect**: number of redirections available - **filters** http filters to pass - **decompress**: allows the client to decompress the response body - ** max_status_line_garbage**: defines the maximum number of ignorable lines before we expect a HTTP response's status line. With HTTP/1.1 persistent connections, the problem arises that broken scripts could return a wrong Content-Length (there are more bytes sent than specified). Unfortunately, in some cases, this cannot be detected after the bad response, but only before the next one. So the client is abble to skip bad lines using this limit. 0 disable garbage collection, None means unlimited number of tries. - **max_header_count**: determines the maximum HTTP header count allowed. by default no limit. - manager: the manager to use. By default we use the global one. - **response_class**: the response class to use - **timeout**: the default timeout of the connection (SO_TIMEOUT) - **max_tries**: the number of tries before we give up a connection - **wait_tries**: number of time we wait between each tries. - **ssl_args**: ssl named arguments, See http://docs.python.org/library/ssl.html informations """ # detect credentials from url u = urlparse.urlparse(url) if u.username is not None: password = u.password or "" filters = kwargs.get('filters') or [] url = urlparse.urlunparse((u.scheme, u.netloc.split("@")[-1], u.path, u.params, u.query, u.fragment)) filters.append(BasicAuth(u.username, password)) kwargs['filters'] = filters http_client = Client(**kwargs) return http_client.request(url, method=method, body=body, headers=headers) restkit-4.2.2/restkit/tee.py0000664000175000017500000001317012210071423017104 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. """ TeeInput replace old FileInput. It use a file if size > MAX_BODY or memory. It's now possible to rewind read or restart etc ... It's based on TeeInput from Gunicorn. """ import copy import os try: from cStringIO import StringIO except ImportError: from StringIO import StringIO import tempfile from restkit import conn class TeeInput(object): CHUNK_SIZE = conn.CHUNK_SIZE def __init__(self, stream): self.buf = StringIO() self.eof = False if isinstance(stream, basestring): stream = StringIO(stream) self.tmp = StringIO() else: self.tmp = tempfile.TemporaryFile() self.stream = stream def __enter__(self): return self def __exit__(self, exc_type, exc_val, traceback): return def seek(self, offset, whence=0): """ naive implementation of seek """ current_size = self._tmp_size() diff = 0 if whence == 0: diff = offset - current_size elif whence == 2: diff = (self.tmp.tell() + offset) - current_size elif whence == 3 and not self.eof: # we read until the end while True: self.tmp.seek(0, 2) if not self._tee(self.CHUNK_SIZE): break if not self.eof and diff > 0: self._ensure_length(StringIO(), diff) self.tmp.seek(offset, whence) def flush(self): self.tmp.flush() def read(self, length=-1): """ read """ if self.eof: return self.tmp.read(length) if length < 0: buf = StringIO() buf.write(self.tmp.read()) while True: chunk = self._tee(self.CHUNK_SIZE) if not chunk: break buf.write(chunk) return buf.getvalue() else: dest = StringIO() diff = self._tmp_size() - self.tmp.tell() if not diff: dest.write(self._tee(length)) return self._ensure_length(dest, length) else: l = min(diff, length) dest.write(self.tmp.read(l)) return self._ensure_length(dest, length) def readline(self, size=-1): if self.eof: return self.tmp.readline() orig_size = self._tmp_size() if self.tmp.tell() == orig_size: if not self._tee(self.CHUNK_SIZE): return '' self.tmp.seek(orig_size) # now we can get line line = self.tmp.readline() if line.find("\n") >=0: return line buf = StringIO() buf.write(line) while True: orig_size = self.tmp.tell() data = self._tee(self.CHUNK_SIZE) if not data: break self.tmp.seek(orig_size) buf.write(self.tmp.readline()) if data.find("\n") >= 0: break return buf.getvalue() def readlines(self, sizehint=0): total = 0 lines = [] line = self.readline() while line: lines.append(line) total += len(line) if 0 < sizehint <= total: break line = self.readline() return lines def close(self): if not self.eof: # we didn't read until the end self._close_unreader() return self.tmp.close() def next(self): r = self.readline() if not r: raise StopIteration return r __next__ = next def __iter__(self): return self def _tee(self, length): """ fetch partial body""" buf2 = self.buf buf2.seek(0, 2) chunk = self.stream.read(length) if chunk: self.tmp.write(chunk) self.tmp.flush() self.tmp.seek(0, 2) return chunk self._finalize() return "" def _finalize(self): """ here we wil fetch final trailers if any.""" self.eof = True def _tmp_size(self): if hasattr(self.tmp, 'fileno'): return int(os.fstat(self.tmp.fileno())[6]) else: return len(self.tmp.getvalue()) def _ensure_length(self, dest, length): if len(dest.getvalue()) < length: data = self._tee(length - len(dest.getvalue())) dest.write(data) return dest.getvalue() class ResponseTeeInput(TeeInput): CHUNK_SIZE = conn.CHUNK_SIZE def __init__(self, resp, connection, should_close=False): self.buf = StringIO() self.resp = resp self.stream =resp.body_stream() self.connection = connection self.should_close = should_close self.eof = False # set temporary body clen = int(resp.headers.get('content-length') or -1) if clen >= 0: if (clen <= conn.MAX_BODY): self.tmp = StringIO() else: self.tmp = tempfile.TemporaryFile() else: self.tmp = tempfile.TemporaryFile() def close(self): if not self.eof: # we didn't read until the end self._close_unreader() return self.tmp.close() def _close_unreader(self): if not self.eof: self.stream.close() self.connection.release(self.should_close) def _finalize(self): """ here we wil fetch final trailers if any.""" self.eof = True self._close_unreader() restkit-4.2.2/restkit/contrib/0000775000175000017500000000000012210136112017410 5ustar benoitcbenoitc00000000000000restkit-4.2.2/restkit/contrib/__init__.py0000664000175000017500000000000012210071423021512 0ustar benoitcbenoitc00000000000000restkit-4.2.2/restkit/contrib/ipython_shell.py0000664000175000017500000001544312210071423022655 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from StringIO import StringIO import urlparse try: from IPython.config.loader import Config from IPython.frontend.terminal.embed import InteractiveShellEmbed except ImportError: raise ImportError('IPython (http://pypi.python.org/pypi/ipython) >=0.11' +\ 'is required.') try: import webob except ImportError: raise ImportError('webob (http://pythonpaste.org/webob/) is required.') from webob import Response as BaseResponse from restkit import __version__ from restkit.contrib.console import common_indent, json from restkit.contrib.webob_api import Request as BaseRequest class Stream(StringIO): def __repr__(self): return '' % self.len class JSON(Stream): def __init__(self, value): self.__value = value if json: Stream.__init__(self, json.dumps(value)) else: Stream.__init__(self, value) def __repr__(self): return '' % self.__value class Response(BaseResponse): def __str__(self, skip_body=True): if self.content_length < 200 and skip_body: skip_body = False return BaseResponse.__str__(self, skip_body=skip_body) def __call__(self): print self class Request(BaseRequest): ResponseClass = Response def get_response(self, *args, **kwargs): url = self.url stream = None for a in args: if isinstance(a, Stream): stream = a a.seek(0) continue elif isinstance(a, basestring): if a.startswith('http'): url = a elif a.startswith('/'): url = a self.set_url(url) if stream: self.body_file = stream self.content_length = stream.len if self.method == 'GET' and kwargs: for k, v in kwargs.items(): self.GET[k] = v elif self.method == 'POST' and kwargs: for k, v in kwargs.items(): self.GET[k] = v return BaseRequest.get_response(self) def __str__(self, skip_body=True): if self.content_length < 200 and skip_body: skip_body = False return BaseRequest.__str__(self, skip_body=skip_body) def __call__(self): print self class ContentTypes(object): _values = {} def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, sorted(self._values)) def __str__(self): return '\n'.join(['%-20.20s: %s' % h for h in \ sorted(self._value.items())]) ctypes = ContentTypes() for k in common_indent: attr = k.replace('/', '_').replace('+', '_') ctypes._values[attr] = attr ctypes.__dict__[attr] = k del k, attr class RestShell(InteractiveShellEmbed): def __init__(self, user_ns={}): cfg = Config() shell_config = cfg.InteractiveShellEmbed shell_config.prompt_in1 = '\C_Blue\#) \C_Greenrestcli\$ ' super(RestShell, self).__init__(config = cfg, banner1= 'restkit shell %s' % __version__, exit_msg="quit restcli shell", user_ns=user_ns) class ShellClient(object): methods = dict( get='[req|url|path_info], **query_string', post='[req|url|path_info], [Stream()|**query_string_body]', head='[req|url|path_info], **query_string', put='[req|url|path_info], stream', delete='[req|url|path_info]') def __init__(self, url='/', options=None, **kwargs): self.options = options self.url = url or '/' self.ns = {} self.shell = RestShell(user_ns=self.ns) self.update_ns(self.ns) self.help() self.shell(header='', global_ns={}, local_ns={}) def update_ns(self, ns): for k in self.methods: ns[k] = self.request_meth(k) stream = None headers = {} if self.options: if self.options.input: stream = Stream(open(self.options.input).read()) if self.options.headers: for header in self.options.headers: try: k, v = header.split(':') headers.append((k, v)) except ValueError: pass req = Request.blank('/') req._client = self del req.content_type if stream: req.body_file = stream req.headers = headers req.set_url(self.url) ns.update( Request=Request, Response=Response, Stream=Stream, req=req, stream=stream, ctypes=ctypes, ) if json: ns['JSON'] = JSON def request_meth(self, k): def req(*args, **kwargs): resp = self.request(k.upper(), *args, **kwargs) self.shell.user_ns.update(dict(resp=resp)) print resp return resp req.func_name = k req.__name__ = k req.__doc__ = """send a HTTP %s""" % k.upper() return req def request(self, meth, *args, **kwargs): """forward to restkit.request""" req = None for a in args: if isinstance(a, Request): req = a args = [a for a in args if a is not req] break if req is None: req = self.shell.user_ns.get('req') if not isinstance(req, Request): req = Request.blank('/') del req.content_type req.method = meth req.set_url(self.url) resp = req.get_response(*args, **kwargs) self.url = req.url return resp def help(self): ns = self.ns.copy() methods = '' for k in sorted(self.methods): args = self.methods[k] doc = ' >>> %s(%s)' % (k, args) methods += '%-65.65s # send a HTTP %s\n' % (doc, k) ns['methods'] = methods print HELP.strip() % ns print '' def __repr__(self): return '' def main(*args, **kwargs): for a in args: if a.startswith('http://'): kwargs['url'] = a ShellClient(**kwargs) HELP = """ restkit shell ============= HTTP Methods ------------ %(methods)s Helpers ------- >>> req # request to play with. By default http methods will use this one %(req)r >>> stream # Stream() instance if you specified a -i in command line %(stream)r >>> ctypes # Content-Types helper with headers properties %(ctypes)r """ if __name__ == '__main__': import sys main(*sys.argv[1:]) restkit-4.2.2/restkit/contrib/webob_helper.py0000664000175000017500000000342012210071423022421 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import webob.exc from restkit import errors class WebobResourceError(webob.exc.WSGIHTTPException): """ Wrapper to return webob exceptions instead of restkit errors. Usefull for those who want to build `WSGI `_ applications speaking directly to others via HTTP. To do it place somewhere in your application the function `wrap_exceptions`:: wrap_exceptions() It will automatically replace restkit errors by webob exceptions. """ def __init__(self, msg=None, http_code=None, response=None): webob.exc.WSGIHTTPException.__init__(self) http_code = http_code or 500 klass = webob.exc.status_map[http_code] self.code = http_code self.title = klass.title self.status = '%s %s' % (self.code, self.title) self.explanation = msg self.response = response # default params self.msg = msg def _status_int__get(self): """ The status as an integer """ return int(self.status.split()[0]) def _status_int__set(self, value): self.status = value status_int = property(_status_int__get, _status_int__set, doc=_status_int__get.__doc__) def _get_message(self): return self.explanation def _set_message(self, msg): self.explanation = msg or '' message = property(_get_message, _set_message) webob_exceptions = False def wrap_exceptions(): """ wrap restkit exception to return WebBob exceptions""" global webob_exceptions if webob_exceptions: return errors.ResourceError = WebobResourceError webob_exceptions = True restkit-4.2.2/restkit/contrib/console.py0000664000175000017500000002120412210071423021426 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from __future__ import with_statement import os import optparse as op import sys # import pygments if here try: import pygments from pygments.lexers import get_lexer_for_mimetype from pygments.formatters import TerminalFormatter except ImportError: pygments = False # import json try: import simplejson as json except ImportError: try: import json except ImportError: json = False from restkit import __version__, request, set_logging from restkit.util import popen3, locate_program __usage__ = "'%prog [options] url [METHOD] [filename]'" pretties = { 'application/json': 'text/javascript', 'text/plain': 'text/javascript' } def external(cmd, data): try: (child_stdin, child_stdout, child_stderr) = popen3(cmd) err = child_stderr.read() if err: return data return child_stdout.read() except: return data def indent_xml(data): tidy_cmd = locate_program("tidy") if tidy_cmd: cmd = " ".join([tidy_cmd, '-qi', '-wrap', '70', '-utf8', data]) return external(cmd, data) return data def indent_json(data): if not json: return data info = json.loads(data) return json.dumps(info, indent=2, sort_keys=True) common_indent = { 'application/json': indent_json, 'text/html': indent_xml, 'text/xml': indent_xml, 'application/xhtml+xml': indent_xml, 'application/xml': indent_xml, 'image/svg+xml': indent_xml, 'application/rss+xml': indent_xml, 'application/atom+xml': indent_xml, 'application/xsl+xml': indent_xml, 'application/xslt+xml': indent_xml } def indent(mimetype, data): if mimetype in common_indent: return common_indent[mimetype](data) return data def prettify(response, cli=True): if not pygments or not 'content-type' in response.headers: return response.body_string() ctype = response.headers['content-type'] try: mimetype, encoding = ctype.split(";") except ValueError: mimetype = ctype.split(";")[0] # indent body body = indent(mimetype, response.body_string()) # get pygments mimetype mimetype = pretties.get(mimetype, mimetype) try: lexer = get_lexer_for_mimetype(mimetype) body = pygments.highlight(body, lexer, TerminalFormatter()) return body except: return body def as_bool(value): if value.lower() in ('true', '1'): return True return False def update_defaults(defaults): config = os.path.expanduser('~/.restcli') if os.path.isfile(config): for line in open(config): key, value = line.split('=', 1) key = key.lower().strip() key = key.replace('-', '_') if key.startswith('header'): key = 'headers' value = value.strip() if key in defaults: default = defaults[key] if default in (True, False): value = as_bool(value) elif isinstance(default, list): default.append(value) value = default defaults[key] = value def options(): """ build command lines options """ defaults = dict( headers=[], request='GET', follow_redirect=False, server_response=False, prettify=False, log_level=None, input=None, output=None, ) update_defaults(defaults) def opt_args(option, *help): help = ' '.join(help) help = help.strip() default = defaults.get(option) if default is not None: help += ' Default to %r.' % default return dict(default=defaults.get(option), help=help) return [ op.make_option('-H', '--header', action='append', dest='headers', **opt_args('headers', 'HTTP string header in the form of Key:Value. ', 'For example: "Accept: application/json".')), op.make_option('-X', '--request', action='store', dest='method', **opt_args('request', 'HTTP request method.')), op.make_option('--follow-redirect', action='store_true', dest='follow_redirect', **opt_args('follow_redirect')), op.make_option('-S', '--server-response', action='store_true', dest='server_response', **opt_args('server_response', 'Print server response.')), op.make_option('-p', '--prettify', dest="prettify", action='store_true', **opt_args('prettify', "Prettify display.")), op.make_option('--log-level', dest="log_level", **opt_args('log_level', "Log level below which to silence messages.")), op.make_option('-i', '--input', action='store', dest='input', metavar='FILE', **opt_args('input', 'The name of the file to read from.')), op.make_option('-o', '--output', action='store', dest='output', **opt_args('output', 'The name of the file to write to.')), op.make_option('--shell', action='store_true', dest='shell', help='Open a IPython shell'), ] def main(): """ function to manage restkit command line """ parser = op.OptionParser(usage=__usage__, option_list=options(), version="%prog " + __version__) opts, args = parser.parse_args() args_len = len(args) if opts.shell: try: from restkit.contrib import ipython_shell as shell shell.main(options=opts, *args) except Exception, e: print >>sys.stderr, str(e) sys.exit(1) return if args_len < 1: return parser.error('incorrect number of arguments') if opts.log_level is not None: set_logging(opts.log_level) body = None headers = [] if opts.input: if opts.input == '-': body = sys.stdin.read() headers.append(("Content-Length", str(len(body)))) else: fname = os.path.normpath(os.path.join(os.getcwd(),opts.input)) body = open(fname, 'r') if opts.headers: for header in opts.headers: try: k, v = header.split(':') headers.append((k, v)) except ValueError: pass try: if len(args) == 2: if args[1] == "-" and not opts.input: body = sys.stdin.read() headers.append(("Content-Length", str(len(body)))) if not opts.method and opts.input: method = 'POST' else: method=opts.method.upper() resp = request(args[0], method=method, body=body, headers=headers, follow_redirect=opts.follow_redirect) if opts.output and opts.output != '-': with open(opts.output, 'wb') as f: if opts.server_response: f.write("Server response from %s:\n" % resp.final_url) for k, v in resp.headerslist: f.write( "%s: %s" % (k, v)) else: with resp.body_stream() as body: for block in body: f.write(block) else: if opts.server_response: if opts.prettify: print "\n\033[0m\033[95mServer response from %s:\n\033[0m" % ( resp.final_url) for k, v in resp.headerslist: print "\033[94m%s\033[0m: %s" % (k, v) print "\033[0m" else: print "Server response from %s:\n" % (resp.final_url) for k, v in resp.headerslist: print "%s: %s" % (k, v) print "" if opts.output == '-': if opts.prettify: print prettify(resp) else: print resp.body_string() else: if opts.prettify: print prettify(resp) else: print resp.body_string() except Exception, e: sys.stderr.write("An error happened: %s" % str(e)) sys.stderr.flush() sys.exit(1) sys.exit(0) restkit-4.2.2/restkit/contrib/wsgi_proxy.py0000664000175000017500000001244412210071423022204 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import urlparse try: from cStringIO import StringIO except ImportError: from StringIO import StringIO from restkit.client import Client from restkit.conn import MAX_BODY from restkit.util import rewrite_location ALLOWED_METHODS = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'] BLOCK_SIZE = 4096 * 16 WEBOB_ERROR = ("Content-Length is set to -1. This usually mean that WebOb has " "already parsed the content body. You should set the Content-Length " "header to the correct value before forwarding your request to the " "proxy: ``req.content_length = str(len(req.body));`` " "req.get_response(proxy)") class Proxy(object): """A proxy wich redirect the request to SERVER_NAME:SERVER_PORT and send HTTP_HOST header""" def __init__(self, manager=None, allowed_methods=ALLOWED_METHODS, strip_script_name=True, **kwargs): self.allowed_methods = allowed_methods self.strip_script_name = strip_script_name self.client = Client(**kwargs) def extract_uri(self, environ): port = None scheme = environ['wsgi.url_scheme'] if 'SERVER_NAME' in environ: host = environ['SERVER_NAME'] else: host = environ['HTTP_HOST'] if ':' in host: host, port = host.split(':') if not port: if 'SERVER_PORT' in environ: port = environ['SERVER_PORT'] else: port = scheme == 'https' and '443' or '80' uri = '%s://%s:%s' % (scheme, host, port) return uri def __call__(self, environ, start_response): method = environ['REQUEST_METHOD'] if method not in self.allowed_methods: start_response('403 Forbidden', ()) return [''] if self.strip_script_name: path_info = '' else: path_info = environ['SCRIPT_NAME'] path_info += environ['PATH_INFO'] query_string = environ['QUERY_STRING'] if query_string: path_info += '?' + query_string host_uri = self.extract_uri(environ) uri = host_uri + path_info new_headers = {} for k, v in environ.items(): if k.startswith('HTTP_'): k = k[5:].replace('_', '-').title() new_headers[k] = v ctype = environ.get("CONTENT_TYPE") if ctype and ctype is not None: new_headers['Content-Type'] = ctype clen = environ.get('CONTENT_LENGTH') te = environ.get('transfer-encoding', '').lower() if not clen and te != 'chunked': new_headers['transfer-encoding'] = 'chunked' elif clen: new_headers['Content-Length'] = clen if new_headers.get('Content-Length', '0') == '-1': raise ValueError(WEBOB_ERROR) response = self.client.request(uri, method, body=environ['wsgi.input'], headers=new_headers) if 'location' in response: if self.strip_script_name: prefix_path = environ['SCRIPT_NAME'] new_location = rewrite_location(host_uri, response.location, prefix_path=prefix_path) headers = [] for k, v in response.headerslist: if k.lower() == 'location': v = new_location headers.append((k, v)) else: headers = response.headerslist start_response(response.status, headers) if method == "HEAD": return StringIO() return response.tee() class TransparentProxy(Proxy): """A proxy based on HTTP_HOST environ variable""" def extract_uri(self, environ): port = None scheme = environ['wsgi.url_scheme'] host = environ['HTTP_HOST'] if ':' in host: host, port = host.split(':') if not port: port = scheme == 'https' and '443' or '80' uri = '%s://%s:%s' % (scheme, host, port) return uri class HostProxy(Proxy): """A proxy to redirect all request to a specific uri""" def __init__(self, uri, **kwargs): super(HostProxy, self).__init__(**kwargs) self.uri = uri.rstrip('/') self.scheme, self.net_loc = urlparse.urlparse(self.uri)[0:2] def extract_uri(self, environ): environ['HTTP_HOST'] = self.net_loc return self.uri def get_config(local_config): """parse paste config""" config = {} allowed_methods = local_config.get('allowed_methods', None) if allowed_methods: config['allowed_methods'] = [m.upper() for m in allowed_methods.split()] strip_script_name = local_config.get('strip_script_name', 'true') if strip_script_name.lower() in ('false', '0'): config['strip_script_name'] = False config['max_connections'] = int(local_config.get('max_connections', '5')) return config def make_proxy(global_config, **local_config): """TransparentProxy entry_point""" config = get_config(local_config) return TransparentProxy(**config) def make_host_proxy(global_config, uri=None, **local_config): """HostProxy entry_point""" uri = uri.rstrip('/') config = get_config(local_config) return HostProxy(uri, **config) restkit-4.2.2/restkit/contrib/webob_api.py0000664000175000017500000000576412210071423021730 0ustar benoitcbenoitc00000000000000#!/usr/bin/env python # -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import base64 from StringIO import StringIO import urlparse import urllib try: from webob import Request as BaseRequest except ImportError: raise ImportError('WebOb (http://pypi.python.org/pypi/WebOb) is required') from .wsgi_proxy import Proxy __doc__ = '''Subclasses of webob.Request who use restkit to get a webob.Response via restkit.ext.wsgi_proxy.Proxy. Example:: >>> req = Request.blank('http://pypi.python.org/pypi/restkit') >>> resp = req.get_response() >>> print resp #doctest: +ELLIPSIS 200 OK Date: ... Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 Server: Apache/2... ... ''' PROXY = Proxy(allowed_methods=['GET', 'POST', 'HEAD', 'DELETE', 'PUT', 'PURGE']) class Method(property): def __init__(self, name): self.name = name def __get__(self, instance, klass): if not instance: return self instance.method = self.name.upper() def req(*args, **kwargs): return instance.get_response(*args, **kwargs) return req class Request(BaseRequest): get = Method('get') post = Method('post') put = Method('put') head = Method('head') delete = Method('delete') def get_response(self): if self.content_length < 0: self.content_length = 0 if self.method in ('DELETE', 'GET'): self.body = '' elif self.method == 'POST' and self.POST: body = urllib.urlencode(self.POST.copy()) stream = StringIO(body) stream.seek(0) self.body_file = stream self.content_length = stream.len if 'form' not in self.content_type: self.content_type = 'application/x-www-form-urlencoded' self.server_name = self.host return BaseRequest.get_response(self, PROXY) __call__ = get_response def set_url(self, url): path = url.lstrip('/') if url.startswith("http://") or url.startswith("https://"): u = urlparse.urlsplit(url) if u.username is not None: password = u.password or "" encode = base64.b64encode("%s:%s" % (u.username, password)) self.headers['Authorization'] = 'Basic %s' % encode self.scheme = u.scheme, self.host = u.netloc.split("@")[-1] self.path_info = u.path or "/" self.query_string = u.query url = urlparse.urlunsplit((u.scheme, u.netloc.split("@")[-1], u.path, u.query, u.fragment)) else: if '?' in path: path, self.query_string = path.split('?', 1) self.path_info = '/' + path url = self.url self.scheme, self.host, self.path_info = urlparse.urlparse(url)[0:3] restkit-4.2.2/restkit/forms.py0000664000175000017500000001330012210071423017450 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import mimetypes import os import re import urllib from restkit.util import to_bytestring, url_quote, url_encode MIME_BOUNDARY = 'END_OF_PART' CRLF = '\r\n' def form_encode(obj, charset="utf8"): encoded = url_encode(obj, charset=charset) return to_bytestring(encoded) class BoundaryItem(object): def __init__(self, name, value, fname=None, filetype=None, filesize=None, quote=url_quote): self.quote = quote self.name = quote(name) if value is not None and not hasattr(value, 'read'): value = self.encode_unreadable_value(value) self.size = len(value) self.value = value if fname is not None: if isinstance(fname, unicode): fname = fname.encode("utf-8").encode("string_escape").replace('"', '\\"') else: fname = fname.encode("string_escape").replace('"', '\\"') self.fname = fname if filetype is not None: filetype = to_bytestring(filetype) self.filetype = filetype if isinstance(value, file) and filesize is None: try: value.flush() except IOError: pass self.size = int(os.fstat(value.fileno())[6]) self._encoded_hdr = None self._encoded_bdr = None def encode_hdr(self, boundary): """Returns the header of the encoding of this parameter""" if not self._encoded_hdr or self._encoded_bdr != boundary: boundary = self.quote(boundary) self._encoded_bdr = boundary headers = ["--%s" % boundary] if self.fname: disposition = 'form-data; name="%s"; filename="%s"' % (self.name, self.fname) else: disposition = 'form-data; name="%s"' % self.name headers.append("Content-Disposition: %s" % disposition) if self.filetype: filetype = self.filetype else: filetype = "text/plain; charset=utf-8" headers.append("Content-Type: %s" % filetype) headers.append("Content-Length: %i" % self.size) headers.append("") headers.append("") self._encoded_hdr = CRLF.join(headers) return self._encoded_hdr def encode(self, boundary): """Returns the string encoding of this parameter""" value = self.value if re.search("^--%s$" % re.escape(boundary), value, re.M): raise ValueError("boundary found in encoded string") return "%s%s%s" % (self.encode_hdr(boundary), value, CRLF) def iter_encode(self, boundary, blocksize=16384): if not hasattr(self.value, "read"): yield self.encode(boundary) else: yield self.encode_hdr(boundary) while True: block = self.value.read(blocksize) if not block: yield CRLF return yield block def encode_unreadable_value(self, value): return value class MultipartForm(object): def __init__(self, params, boundary, headers, bitem_cls=BoundaryItem, quote=url_quote): self.boundary = boundary self.tboundary = "--%s--%s" % (boundary, CRLF) self.boundaries = [] self._clen = headers.get('Content-Length') if hasattr(params, 'items'): params = params.items() for param in params: name, value = param if hasattr(value, "read"): fname = getattr(value, 'name') if fname is not None: filetype = ';'.join(filter(None, mimetypes.guess_type(fname))) else: filetype = None if not isinstance(value, file) and self._clen is None: value = value.read() boundary = bitem_cls(name, value, fname, filetype, quote=quote) self.boundaries.append(boundary) elif isinstance(value, list): for v in value: boundary = bitem_cls(name, v, quote=quote) self.boundaries.append(boundary) else: boundary = bitem_cls(name, value, quote=quote) self.boundaries.append(boundary) def get_size(self, recalc=False): if self._clen is None or recalc: self._clen = 0 for boundary in self.boundaries: self._clen += boundary.size self._clen += len(boundary.encode_hdr(self.boundary)) self._clen += len(CRLF) self._clen += len(self.tboundary) return int(self._clen) def __iter__(self): for boundary in self.boundaries: for block in boundary.iter_encode(self.boundary): yield block yield self.tboundary def multipart_form_encode(params, headers, boundary, quote=url_quote): """Creates a tuple with MultipartForm instance as body and dict as headers params dict with fields for the body headers dict with fields for the header boundary string to use as boundary quote (default: url_quote) some callable expecting a string an returning a string. Use for quoting of boundary and form-data keys (names). """ headers = headers or {} boundary = quote(boundary) body = MultipartForm(params, boundary, headers, quote=quote) headers['Content-Type'] = "multipart/form-data; boundary=%s" % boundary headers['Content-Length'] = str(body.get_size()) return body, headers restkit-4.2.2/restkit/session.py0000664000175000017500000000225112210071423020010 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from socketpool import ConnectionPool from restkit.conn import Connection _default_session = {} def get_session(backend_name, **options): global _default_session if not _default_session: _default_session = {} pool = ConnectionPool(factory=Connection, backend=backend_name, **options) _default_session[backend_name] = pool else: if backend_name not in _default_session: pool = ConnectionPool(factory=Connection, backend=backend_name, **options) _default_session[backend_name] = pool else: pool = _default_session.get(backend_name) return pool def set_session(backend_name, **options): global _default_session if not _default_session: _default_session = {} if backend_name in _default_session: pool = _default_session.get(backend_name) else: pool = ConnectionPool(factory=Connection, backend=backend_name, **options) _default_session[backend_name] = pool return pool restkit-4.2.2/restkit/datastructures.py0000664000175000017500000001512212210071423021403 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. try: from UserDict import DictMixin except ImportError: from collections import MutableMapping as DictMixin class MultiDict(DictMixin): """ An ordered dictionary that can have multiple values for each key. Adds the methods getall, getone, mixed and extend and add to the normal dictionary interface. """ def __init__(self, *args, **kw): if len(args) > 1: raise TypeError("MultiDict can only be called with one positional argument") if args: if isinstance(args[0], MultiDict): items = args[0]._items elif hasattr(args[0], 'iteritems'): items = list(args[0].iteritems()) elif hasattr(args[0], 'items'): items = args[0].items() else: items = list(args[0]) self._items = items else: self._items = [] if kw: self._items.extend(kw.iteritems()) @classmethod def from_fieldstorage(cls, fs): """ Create a dict from a cgi.FieldStorage instance """ obj = cls() # fs.list can be None when there's nothing to parse for field in fs.list or (): if field.filename: obj.add(field.name, field) else: obj.add(field.name, field.value) return obj def __getitem__(self, key): for k, v in reversed(self._items): if k == key: return v raise KeyError(key) def __setitem__(self, key, value): try: del self[key] except KeyError: pass self._items.append((key, value)) def add(self, key, value): """ Add the key and value, not overwriting any previous value. """ self._items.append((key, value)) def getall(self, key): """ Return a list of all values matching the key (may be an empty list) """ return [v for k, v in self._items if k == key] def iget(self, key): """like get but case insensitive """ lkey = key.lower() for k, v in self._items: if k.lower() == lkey: return v return None def getone(self, key): """ Get one value matching the key, raising a KeyError if multiple values were found. """ v = self.getall(key) if not v: raise KeyError('Key not found: %r' % key) if len(v) > 1: raise KeyError('Multiple values match %r: %r' % (key, v)) return v[0] def mixed(self): """ Returns a dictionary where the values are either single values, or a list of values when a key/value appears more than once in this dictionary. This is similar to the kind of dictionary often used to represent the variables in a web request. """ result = {} multi = {} for key, value in self.iteritems(): if key in result: # We do this to not clobber any lists that are # *actual* values in this dictionary: if key in multi: result[key].append(value) else: result[key] = [result[key], value] multi[key] = None else: result[key] = value return result def dict_of_lists(self): """ Returns a dictionary where each key is associated with a list of values. """ r = {} for key, val in self.iteritems(): r.setdefault(key, []).append(val) return r def __delitem__(self, key): items = self._items found = False for i in range(len(items)-1, -1, -1): if items[i][0] == key: del items[i] found = True if not found: raise KeyError(key) def __contains__(self, key): for k, v in self._items: if k == key: return True return False has_key = __contains__ def clear(self): self._items = [] def copy(self): return self.__class__(self) def setdefault(self, key, default=None): for k, v in self._items: if key == k: return v self._items.append((key, default)) return default def pop(self, key, *args): if len(args) > 1: raise TypeError, "pop expected at most 2 arguments, got "\ + repr(1 + len(args)) for i in range(len(self._items)): if self._items[i][0] == key: v = self._items[i][1] del self._items[i] return v if args: return args[0] else: raise KeyError(key) def ipop(self, key, *args): """ like pop but case insensitive """ if len(args) > 1: raise TypeError, "pop expected at most 2 arguments, got "\ + repr(1 + len(args)) lkey = key.lower() for i, item in enumerate(self._items): if item[0].lower() == lkey: v = self._items[i][1] del self._items[i] return v if args: return args[0] else: raise KeyError(key) def popitem(self): return self._items.pop() def extend(self, other=None, **kwargs): if other is None: pass elif hasattr(other, 'items'): self._items.extend(other.items()) elif hasattr(other, 'keys'): for k in other.keys(): self._items.append((k, other[k])) else: for k, v in other: self._items.append((k, v)) if kwargs: self.update(kwargs) def __repr__(self): items = ', '.join(['(%r, %r)' % v for v in self.iteritems()]) return '%s([%s])' % (self.__class__.__name__, items) def __len__(self): return len(self._items) ## ## All the iteration: ## def keys(self): return [k for k, v in self._items] def iterkeys(self): for k, v in self._items: yield k __iter__ = iterkeys def items(self): return self._items[:] def iteritems(self): return iter(self._items) def values(self): return [v for k, v in self._items] def itervalues(self): for k, v in self._items: yield v restkit-4.2.2/restkit/wrappers.py0000664000175000017500000002214312210131071020166 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import cgi import copy import logging import mimetypes import os from StringIO import StringIO import types import urlparse import uuid from restkit.datastructures import MultiDict from restkit.errors import AlreadyRead, RequestError from restkit.forms import multipart_form_encode, form_encode from restkit.tee import ResponseTeeInput from restkit.util import to_bytestring from restkit.util import parse_cookie log = logging.getLogger(__name__) class Request(object): def __init__(self, url, method='GET', body=None, headers=None): headers = headers or [] self.url = url self.initial_url = url self.method = method self._headers = None self._body = None self.is_proxied = False # set parsed uri self.headers = headers if body is not None: self.body = body def _headers__get(self): if not isinstance(self._headers, MultiDict): self._headers = MultiDict(self._headers or []) return self._headers def _headers__set(self, value): self._headers = MultiDict(copy.copy(value)) headers = property(_headers__get, _headers__set, doc=_headers__get.__doc__) def _parsed_url(self): if self.url is None: raise ValueError("url isn't set") return urlparse.urlparse(self.url) parsed_url = property(_parsed_url, doc="parsed url") def _path__get(self): parsed_url = self.parsed_url path = parsed_url.path or '/' return urlparse.urlunparse(('','', path, parsed_url.params, parsed_url.query, parsed_url.fragment)) path = property(_path__get) def _host__get(self): h = to_bytestring(self.parsed_url.netloc) hdr_host = self.headers.iget("host") if not hdr_host: return h return hdr_host host = property(_host__get) def is_chunked(self): te = self.headers.iget("transfer-encoding") return (te is not None and te.lower() == "chunked") def is_ssl(self): return self.parsed_url.scheme == "https" def _set_body(self, body): ctype = self.headers.ipop('content-type', None) clen = self.headers.ipop('content-length', None) if isinstance(body, dict): if ctype is not None and \ ctype.startswith("multipart/form-data"): type_, opts = cgi.parse_header(ctype) boundary = opts.get('boundary', uuid.uuid4().hex) self._body, self.headers = multipart_form_encode(body, self.headers, boundary) # at this point content-type is "multipart/form-data" # we need to set the content type according to the # correct boundary like # "multipart/form-data; boundary=%s" % boundary ctype = self.headers.ipop('content-type', None) else: ctype = "application/x-www-form-urlencoded; charset=utf-8" self._body = form_encode(body) elif hasattr(body, "boundary") and hasattr(body, "get_size"): ctype = "multipart/form-data; boundary=%s" % body.boundary clen = body.get_size() self._body = body else: self._body = body if not ctype: ctype = 'application/octet-stream' if hasattr(self.body, 'name'): ctype = mimetypes.guess_type(body.name)[0] if not clen: if hasattr(self._body, 'fileno'): try: self._body.flush() except IOError: pass try: fno = self._body.fileno() clen = str(os.fstat(fno)[6]) except IOError: if not self.is_chunked(): clen = len(self._body.read()) elif hasattr(self._body, 'getvalue') and not \ self.is_chunked(): clen = len(self._body.getvalue()) elif isinstance(self._body, types.StringTypes): self._body = to_bytestring(self._body) clen = len(self._body) if clen is not None: self.headers['Content-Length'] = clen # TODO: maybe it's more relevant # to check if Content-Type is already set in self.headers # before overiding it if ctype is not None: self.headers['Content-Type'] = ctype def _get_body(self): return self._body body = property(_get_body, _set_body, doc="request body") def maybe_rewind(self, msg=""): if self.body is not None: if not hasattr(self.body, 'seek') and \ not isinstance(self.body, types.StringTypes): raise RequestError("error: '%s', body can't be rewind." % msg) if log.isEnabledFor(logging.DEBUG): log.debug("restart request: %s" % msg) class BodyWrapper(object): def __init__(self, resp, connection): self.resp = resp self.body = resp._body self.connection = connection self._closed = False self.eof = False def __enter__(self): return self def __exit__(self, exc_type, exc_val, traceback): self.close() def close(self): """ release connection """ if self._closed: return if not self.eof: self.body.read() self.connection.release(self.resp.should_close) self._closed = True def __iter__(self): return self def next(self): try: return self.body.next() except StopIteration: self.eof = True self.close() raise def read(self, n=-1): data = self.body.read(n) if not data: self.eof = True self.close() return data def readline(self, limit=-1): line = self.body.readline(limit) if not line: self.eof = True self.close() return line def readlines(self, hint=None): lines = self.body.readlines(hint) if self.body.close: self.eof = True self.close() return lines class Response(object): charset = "utf8" unicode_errors = 'strict' def __init__(self, connection, request, resp): self.request = request self.connection = connection self._resp = resp # response infos self.headers = resp.headers() self.status = resp.status() self.status_int = resp.status_code() self.version = resp.version() self.headerslist = self.headers.items() self.location = self.headers.get('location') self.final_url = request.url self.should_close = not resp.should_keep_alive() # cookies if 'set-cookie' in self.headers: cookie_header = self.headers.get('set-cookie') self.cookies = parse_cookie(cookie_header, self.final_url) self._closed = False self._already_read = False if request.method == "HEAD": """ no body on HEAD, release the connection now """ self.connection.release(True) self._body = StringIO("") else: self._body = resp.body_file() def __getitem__(self, key): try: return getattr(self, key) except AttributeError: pass return self.headers.get(key) def __contains__(self, key): return key in self.headers def __iter__(self): return self.headers.iteritems() def can_read(self): return not self._already_read def close(self): self.connection.release(True) def skip_body(self): """ skip the body and release the connection """ if not self._already_read: self._body.read() self._already_read = True self.connection.release(self.should_close) def body_string(self, charset=None, unicode_errors="strict"): """ return body string, by default in bytestring """ if not self.can_read(): raise AlreadyRead() body = self._body.read() self._already_read = True self.connection.release(self.should_close) if charset is not None: try: body = body.decode(charset, unicode_errors) except UnicodeDecodeError: pass return body def body_stream(self): """ stream body """ if not self.can_read(): raise AlreadyRead() self._already_read = True return BodyWrapper(self, self.connection) def tee(self): """ copy response input to standard output or a file if length > sock.MAX_BODY. This make possible to reuse it in your appplication. When all the input has been read, connection is released """ return ResponseTeeInput(self, self.connection, should_close=self.should_close) ClientResponse = Response restkit-4.2.2/restkit/resource.py0000664000175000017500000001632612210071423020164 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. """ restkit.resource ~~~~~~~~~~~~~~~~ This module provide a common interface for all HTTP request. """ from copy import copy import urlparse from restkit.errors import ResourceNotFound, Unauthorized, \ RequestFailed, ResourceGone from restkit.client import Client from restkit.filters import BasicAuth from restkit import util from restkit.wrappers import Response class Resource(object): """A class that can be instantiated for access to a RESTful resource, including authentication. """ charset = 'utf-8' encode_keys = True safe = "/:" basic_auth_url = True response_class = Response def __init__(self, uri, **client_opts): """Constructor for a `Resource` object. Resource represent an HTTP resource. - uri: str, full uri to the server. - client_opts: `restkit.client.Client` Options """ client_opts = client_opts or {} self.initial = dict( uri = uri, client_opts = client_opts.copy() ) # set default response_class if self.response_class is not None and \ not 'response_class' in client_opts: client_opts['response_class'] = self.response_class self.filters = client_opts.get('filters') or [] self.uri = uri if self.basic_auth_url: # detect credentials from url u = urlparse.urlparse(uri) if u.username: password = u.password or "" # add filters filters = copy(self.filters) filters.append(BasicAuth(u.username, password)) client_opts['filters'] = filters # update uri self.uri = urlparse.urlunparse((u.scheme, u.netloc.split("@")[-1], u.path, u.params, u.query, u.fragment)) self.client_opts = client_opts self.client = Client(**self.client_opts) def __repr__(self): return '<%s %s>' % (self.__class__.__name__, self.uri) def clone(self): """if you want to add a path to resource uri, you can do: .. code-block:: python resr2 = res.clone() """ obj = self.__class__(self.initial['uri'], **self.initial['client_opts']) return obj def __call__(self, path): """if you want to add a path to resource uri, you can do: .. code-block:: python Resource("/path").get() """ uri = self.initial['uri'] new_uri = util.make_uri(uri, path, charset=self.charset, safe=self.safe, encode_keys=self.encode_keys) obj = type(self)(new_uri, **self.initial['client_opts']) return obj def get(self, path=None, headers=None, params_dict=None, **params): """ HTTP GET - path: string additionnal path to the uri - headers: dict, optionnal headers that will be added to HTTP request. - params: Optionnal parameterss added to the request. """ return self.request("GET", path=path, headers=headers, params_dict=params_dict, **params) def head(self, path=None, headers=None, params_dict=None, **params): """ HTTP HEAD see GET for params description. """ return self.request("HEAD", path=path, headers=headers, params_dict=params_dict, **params) def delete(self, path=None, headers=None, params_dict=None, **params): """ HTTP DELETE see GET for params description. """ return self.request("DELETE", path=path, headers=headers, params_dict=params_dict, **params) def post(self, path=None, payload=None, headers=None, params_dict=None, **params): """ HTTP POST - payload: string passed to the body of the request - path: string additionnal path to the uri - headers: dict, optionnal headers that will be added to HTTP request. - params: Optionnal parameterss added to the request """ return self.request("POST", path=path, payload=payload, headers=headers, params_dict=params_dict, **params) def put(self, path=None, payload=None, headers=None, params_dict=None, **params): """ HTTP PUT see POST for params description. """ return self.request("PUT", path=path, payload=payload, headers=headers, params_dict=params_dict, **params) def make_params(self, params): return params or {} def make_headers(self, headers): return headers or [] def unauthorized(self, response): return True def request(self, method, path=None, payload=None, headers=None, params_dict=None, **params): """ HTTP request This method may be the only one you want to override when subclassing `restkit.rest.Resource`. - payload: string or File object passed to the body of the request - path: string additionnal path to the uri - headers: dict, optionnal headers that will be added to HTTP request. :params_dict: Options parameters added to the request as a dict - params: Optionnal parameterss added to the request """ params = params or {} params.update(params_dict or {}) while True: uri = util.make_uri(self.uri, path, charset=self.charset, safe=self.safe, encode_keys=self.encode_keys, **self.make_params(params)) # make request resp = self.client.request(uri, method=method, body=payload, headers=self.make_headers(headers)) if resp is None: # race condition raise ValueError("Unkown error: response object is None") if resp.status_int >= 400: if resp.status_int == 404: raise ResourceNotFound(resp.body_string(), response=resp) elif resp.status_int in (401, 403): if self.unauthorized(resp): raise Unauthorized(resp.body_string(), http_code=resp.status_int, response=resp) elif resp.status_int == 410: raise ResourceGone(resp.body_string(), response=resp) else: raise RequestFailed(resp.body_string(), http_code=resp.status_int, response=resp) else: break return resp def update_uri(self, path): """ to set a new uri absolute path """ self.uri = util.make_uri(self.uri, path, charset=self.charset, safe=self.safe, encode_keys=self.encode_keys) self.initial['uri'] = util.make_uri(self.initial['uri'], path, charset=self.charset, safe=self.safe, encode_keys=self.encode_keys) restkit-4.2.2/restkit/client.py0000664000175000017500000004363612210071423017617 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import base64 import errno import logging import os import time import socket import ssl import traceback import types import urlparse try: from http_parser.http import ( HttpStream, BadStatusLine, NoMoreData ) from http_parser.reader import SocketReader except ImportError: raise ImportError("""http-parser isn't installed or out of data. pip install http-parser""") from restkit import __version__ from restkit.conn import Connection from restkit.errors import RequestError, RequestTimeout, RedirectLimit, \ ProxyError from restkit.session import get_session from restkit.util import parse_netloc, rewrite_location, to_bytestring from restkit.wrappers import Request, Response MAX_CLIENT_TIMEOUT=300 MAX_CLIENT_CONNECTIONS = 5 MAX_CLIENT_TRIES =3 CLIENT_WAIT_TRIES = 0.3 MAX_FOLLOW_REDIRECTS = 5 USER_AGENT = "restkit/%s" % __version__ log = logging.getLogger(__name__) class Client(object): """A client handle a connection at a time. A client is threadsafe, but an handled shouldn't be shared between threads. All connections are shared between threads via a pool. :: >>> from restkit import * >>> c = Client() >>> r = c.request("http://google.com") >>> r.status '301 Moved Permanently' >>> r.body_string() '>> r.status '200 OK' """ version = (1, 1) response_class=Response def __init__(self, follow_redirect=False, force_follow_redirect=False, max_follow_redirect=MAX_FOLLOW_REDIRECTS, filters=None, decompress=True, max_status_line_garbage=None, max_header_count=0, pool=None, response_class=None, timeout=None, use_proxy=False, max_tries=3, wait_tries=0.3, pool_size=10, backend="thread", **ssl_args): """ Client parameters ~~~~~~~~~~~~~~~~~ - follow_redirect: follow redirection, by default False - max_ollow_redirect: number of redirections available - filters: http filters to pass - decompress: allows the client to decompress the response body - max_status_line_garbage: defines the maximum number of ignorable lines before we expect a HTTP response's status line. With HTTP/1.1 persistent connections, the problem arises that broken scripts could return a wrong Content-Length (there are more bytes sent than specified). Unfortunately, in some cases, this cannot be detected after the bad response, but only before the next one. So the client is abble to skip bad lines using this limit. 0 disable garbage collection, None means unlimited number of tries. - max_header_count: determines the maximum HTTP header count allowed. by default no limit. - pool: the pool to use inherited from socketpool.Pool. By default we use the global one. - response_class: the response class to use - timeout: the default timeout of the connection (SO_TIMEOUT) - max_tries: the number of tries before we give up a connection - wait_tries: number of time we wait between each tries. - pool_size: int, default 10. Maximum number of connections we keep in the default pool. - ssl_args: named argument, see ssl module for more informations """ self.follow_redirect = follow_redirect self.force_follow_redirect = force_follow_redirect self.max_follow_redirect = max_follow_redirect self.decompress = decompress self.filters = filters or [] self.max_status_line_garbage = max_status_line_garbage self.max_header_count = max_header_count self.use_proxy = use_proxy self.request_filters = [] self.response_filters = [] self.load_filters() # set manager session_options = dict( retry_delay=wait_tries, max_size = pool_size, retry_max = max_tries, timeout = timeout) if pool is None: pool = get_session(backend, **session_options) self._pool = pool self.backend = backend # change default response class if response_class is not None: self.response_class = response_class self.max_tries = max_tries self.wait_tries = wait_tries self.pool_size = pool_size self.timeout = timeout self._nb_redirections = self.max_follow_redirect self._url = None self._initial_url = None self._write_cb = None self._headers = None self._sock_key = None self._sock = None self._original = None self.method = 'GET' self.body = None self.ssl_args = ssl_args or {} def load_filters(self): """ Populate filters from self.filters. Must be called each time self.filters is updated. """ for f in self.filters: if hasattr(f, "on_request"): self.request_filters.append(f) if hasattr(f, "on_response"): self.response_filters.append(f) def get_connection(self, request): """ get a connection from the pool or create new one. """ addr = parse_netloc(request.parsed_url) is_ssl = request.is_ssl() extra_headers = [] conn = None if self.use_proxy: conn = self.proxy_connection(request, addr, is_ssl) if not conn: conn = self._pool.get(host=addr[0], port=addr[1], pool=self._pool, is_ssl=is_ssl, extra_headers=extra_headers, **self.ssl_args) return conn def proxy_connection(self, request, req_addr, is_ssl): """ do the proxy connection """ proxy_settings = os.environ.get('%s_proxy' % request.parsed_url.scheme) if proxy_settings and proxy_settings is not None: request.is_proxied = True proxy_settings, proxy_auth = _get_proxy_auth(proxy_settings) addr = parse_netloc(urlparse.urlparse(proxy_settings)) if is_ssl: if proxy_auth: proxy_auth = 'Proxy-authorization: %s' % proxy_auth proxy_connect = 'CONNECT %s:%s HTTP/1.0\r\n' % req_addr user_agent = request.headers.iget('user_agent') if not user_agent: user_agent = "User-Agent: restkit/%s\r\n" % __version__ proxy_pieces = '%s%s%s\r\n' % (proxy_connect, proxy_auth, user_agent) conn = self._pool.get(host=addr[0], port=addr[1], pool=self._pool, is_ssl=is_ssl, extra_headers=[], proxy_pieces=proxy_pieces, **self.ssl_args) else: headers = [] if proxy_auth: headers = [('Proxy-authorization', proxy_auth)] conn = self._pool.get(host=addr[0], port=addr[1], pool=self._pool, is_ssl=False, extra_headers=[], **self.ssl_args) return conn return def make_headers_string(self, request, extra_headers=None): """ create final header string """ headers = request.headers.copy() if extra_headers is not None: for k, v in extra_headers: headers[k] = v if not request.body and request.method in ('POST', 'PUT',): headers['Content-Length'] = 0 if self.version == (1,1): httpver = "HTTP/1.1" else: httpver = "HTTP/1.0" ua = headers.iget('user-agent') if not ua: ua = USER_AGENT host = request.host accept_encoding = headers.iget('accept-encoding') if not accept_encoding: accept_encoding = 'identity' if request.is_proxied: full_path = ("https://" if request.is_ssl() else "http://") + request.host + request.path else: full_path = request.path lheaders = [ "%s %s %s\r\n" % (request.method, full_path, httpver), "Host: %s\r\n" % host, "User-Agent: %s\r\n" % ua, "Accept-Encoding: %s\r\n" % accept_encoding ] lheaders.extend(["%s: %s\r\n" % (k, str(v)) for k, v in \ headers.items() if k.lower() not in \ ('user-agent', 'host', 'accept-encoding',)]) if log.isEnabledFor(logging.DEBUG): log.debug("Send headers: %s" % lheaders) return "%s\r\n" % "".join(lheaders) def perform(self, request): """ perform the request. If an error happen it will first try to restart it """ if log.isEnabledFor(logging.DEBUG): log.debug("Start to perform request: %s %s %s" % (request.host, request.method, request.path)) tries = 0 while True: conn = None try: # get or create a connection to the remote host conn = self.get_connection(request) # send headers msg = self.make_headers_string(request, conn.extra_headers) # send body if request.body is not None: chunked = request.is_chunked() if request.headers.iget('content-length') is None and \ not chunked: raise RequestError( "Can't determine content length and " + "Transfer-Encoding header is not chunked") # handle 100-Continue status # http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3 hdr_expect = request.headers.iget("expect") if hdr_expect is not None and \ hdr_expect.lower() == "100-continue": conn.send(msg) msg = None p = HttpStream(SocketReader(conn.socket()), kind=1, decompress=True) if p.status_code != 100: self.reset_request() if log.isEnabledFor(logging.DEBUG): log.debug("return response class") return self.response_class(conn, request, p) chunked = request.is_chunked() if log.isEnabledFor(logging.DEBUG): log.debug("send body (chunked: %s)" % chunked) if isinstance(request.body, types.StringTypes): if msg is not None: conn.send(msg + to_bytestring(request.body), chunked) else: conn.send(to_bytestring(request.body), chunked) else: if msg is not None: conn.send(msg) if hasattr(request.body, 'read'): if hasattr(request.body, 'seek'): request.body.seek(0) conn.sendfile(request.body, chunked) else: conn.sendlines(request.body, chunked) if chunked: conn.send_chunk("") else: conn.send(msg) return self.get_response(request, conn) except socket.gaierror, e: if conn is not None: conn.release(True) raise RequestError(str(e)) except socket.timeout, e: if conn is not None: conn.release(True) raise RequestTimeout(str(e)) except socket.error, e: if log.isEnabledFor(logging.DEBUG): log.debug("socket error: %s" % str(e)) if conn is not None: conn.close() errors = (errno.EAGAIN, errno.EPIPE, errno.EBADF, errno.ECONNRESET) if e[0] not in errors or tries >= self.max_tries: raise RequestError("socket.error: %s" % str(e)) # should raised an exception in other cases request.maybe_rewind(msg=str(e)) except NoMoreData, e: if conn is not None: conn.release(True) request.maybe_rewind(msg=str(e)) if tries >= self.max_tries: raise except BadStatusLine: if conn is not None: conn.release(True) # should raised an exception in other cases request.maybe_rewind(msg="bad status line") if tries >= self.max_tries: raise except Exception: # unkown error log.debug("unhandled exception %s" % traceback.format_exc()) if conn is not None: conn.release(True) raise tries += 1 self._pool.backend_mod.sleep(self.wait_tries) def request(self, url, method='GET', body=None, headers=None): """ perform immediatly a new request """ request = Request(url, method=method, body=body, headers=headers) # apply request filters # They are applied only once time. for f in self.request_filters: ret = f.on_request(request) if isinstance(ret, Response): # a response instance has been provided. # just return it. Useful for cache filters return ret # no response has been provided, do the request self._nb_redirections = self.max_follow_redirect return self.perform(request) def redirect(self, location, request): """ reset request, set new url of request and perform it """ if self._nb_redirections <= 0: raise RedirectLimit("Redirection limit is reached") if request.initial_url is None: request.initial_url = self.url # make sure location follow rfc2616 location = rewrite_location(request.url, location) if log.isEnabledFor(logging.DEBUG): log.debug("Redirect to %s" % location) # change request url and method if needed request.url = location self._nb_redirections -= 1 #perform a new request return self.perform(request) def get_response(self, request, connection): """ return final respons, it is only accessible via peform method """ if log.isEnabledFor(logging.DEBUG): log.debug("Start to parse response") p = HttpStream(SocketReader(connection.socket()), kind=1, decompress=self.decompress) if log.isEnabledFor(logging.DEBUG): log.debug("Got response: %s %s" % (p.version(), p.status())) log.debug("headers: [%s]" % p.headers()) location = p.headers().get('location') if self.follow_redirect: should_close = not p.should_keep_alive() if p.status_code() in (301, 302, 307,): # read full body and release the connection p.body_file().read() connection.release(should_close) if request.method in ('GET', 'HEAD',) or \ self.force_follow_redirect: if hasattr(self.body, 'read'): try: self.body.seek(0) except AttributeError: raise RequestError("Can't redirect %s to %s " "because body has already been read" % (self.url, location)) return self.redirect(location, request) elif p.status_code() == 303 and self.method == "POST": # read full body and release the connection p.body_file().read() connection.release(should_close) request.method = "GET" request.body = None return self.redirect(location, request) # create response object resp = self.response_class(connection, request, p) # apply response filters for f in self.response_filters: f.on_response(resp, request) if log.isEnabledFor(logging.DEBUG): log.debug("return response class") # return final response return resp def _get_proxy_auth(proxy_settings): proxy_username = os.environ.get('proxy-username') if not proxy_username: proxy_username = os.environ.get('proxy_username') proxy_password = os.environ.get('proxy-password') if not proxy_password: proxy_password = os.environ.get('proxy_password') proxy_password = proxy_password or "" if not proxy_username: u = urlparse.urlparse(proxy_settings) if u.username: proxy_password = u.password or proxy_password proxy_settings = urlparse.urlunparse((u.scheme, u.netloc.split("@")[-1], u.path, u.params, u.query, u.fragment)) if proxy_username: user_auth = base64.encodestring('%s:%s' % (proxy_username, proxy_password)) return proxy_settings, 'Basic %s\r\n' % (user_auth.strip()) else: return proxy_settings, '' restkit-4.2.2/restkit/oauth2.py0000664000175000017500000005321312210071423017533 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import base64 import urllib import time import random import urlparse import hmac import binascii try: from urlparse import parse_qs, parse_qsl except ImportError: from cgi import parse_qs, parse_qsl from restkit.util import to_bytestring try: from hashlib import sha1 sha = sha1 except ImportError: # hashlib was added in Python 2.5 import sha from restkit.version import __version__ OAUTH_VERSION = '1.0' # Hi Blaine! HTTP_METHOD = 'GET' SIGNATURE_METHOD = 'PLAINTEXT' class Error(RuntimeError): """Generic exception class.""" def __init__(self, message='OAuth error occurred.'): self._message = message @property def message(self): """A hack to get around the deprecation errors in 2.6.""" return self._message def __str__(self): return self._message class MissingSignature(Error): pass def build_authenticate_header(realm=''): """Optional WWW-Authenticate header (401 error)""" return {'WWW-Authenticate': 'OAuth realm="%s"' % realm} def build_xoauth_string(url, consumer, token=None): """Build an XOAUTH string for use in SMTP/IMPA authentication.""" request = Request.from_consumer_and_token(consumer, token, "GET", url) signing_method = SignatureMethod_HMAC_SHA1() request.sign_request(signing_method, consumer, token) params = [] for k, v in sorted(request.iteritems()): if v is not None: params.append('%s="%s"' % (k, escape(v))) return "%s %s %s" % ("GET", url, ','.join(params)) def to_unicode(s): """ Convert to unicode, raise exception with instructive error message if s is not unicode, ascii, or utf-8. """ if not isinstance(s, unicode): if not isinstance(s, str): raise TypeError('You are required to pass either unicode or string here, not: %r (%s)' % (type(s), s)) try: s = s.decode('utf-8') except UnicodeDecodeError, le: raise TypeError('You are required to pass either a unicode object or a utf-8 string here. You passed a Python string object which contained non-utf-8: %r. The UnicodeDecodeError that resulted from attempting to interpret it as utf-8 was: %s' % (s, le,)) return s def to_utf8(s): return to_unicode(s).encode('utf-8') def to_unicode_if_string(s): if isinstance(s, basestring): return to_unicode(s) else: return s def to_utf8_if_string(s): if isinstance(s, basestring): return to_utf8(s) else: return s def to_unicode_optional_iterator(x): """ Raise TypeError if x is a str containing non-utf8 bytes or if x is an iterable which contains such a str. """ if isinstance(x, basestring): return to_unicode(x) try: l = list(x) except TypeError, e: assert 'is not iterable' in str(e) return x else: return [ to_unicode(e) for e in l ] def to_utf8_optional_iterator(x): """ Raise TypeError if x is a str or if x is an iterable which contains a str. """ if isinstance(x, basestring): return to_utf8(x) try: l = list(x) except TypeError, e: assert 'is not iterable' in str(e) return x else: return [ to_utf8_if_string(e) for e in l ] def escape(s): """Escape a URL including any /.""" return urllib.quote(s.encode('utf-8'), safe='~') def generate_timestamp(): """Get seconds since epoch (UTC).""" return int(time.time()) def generate_nonce(length=8): """Generate pseudorandom number.""" return ''.join([str(random.randint(0, 9)) for i in range(length)]) def generate_verifier(length=8): """Generate pseudorandom number.""" return ''.join([str(random.randint(0, 9)) for i in range(length)]) class Consumer(object): """A consumer of OAuth-protected services. The OAuth consumer is a "third-party" service that wants to access protected resources from an OAuth service provider on behalf of an end user. It's kind of the OAuth client. Usually a consumer must be registered with the service provider by the developer of the consumer software. As part of that process, the service provider gives the consumer a *key* and a *secret* with which the consumer software can identify itself to the service. The consumer will include its key in each request to identify itself, but will use its secret only when signing requests, to prove that the request is from that particular registered consumer. Once registered, the consumer can then use its consumer credentials to ask the service provider for a request token, kicking off the OAuth authorization process. """ key = None secret = None def __init__(self, key, secret): self.key = key self.secret = secret if self.key is None or self.secret is None: raise ValueError("Key and secret must be set.") def __str__(self): data = {'oauth_consumer_key': self.key, 'oauth_consumer_secret': self.secret} return urllib.urlencode(data) class Token(object): """An OAuth credential used to request authorization or a protected resource. Tokens in OAuth comprise a *key* and a *secret*. The key is included in requests to identify the token being used, but the secret is used only in the signature, to prove that the requester is who the server gave the token to. When first negotiating the authorization, the consumer asks for a *request token* that the live user authorizes with the service provider. The consumer then exchanges the request token for an *access token* that can be used to access protected resources. """ key = None secret = None callback = None callback_confirmed = None verifier = None def __init__(self, key, secret): self.key = key self.secret = secret if self.key is None or self.secret is None: raise ValueError("Key and secret must be set.") def set_callback(self, callback): self.callback = callback self.callback_confirmed = 'true' def set_verifier(self, verifier=None): if verifier is not None: self.verifier = verifier else: self.verifier = generate_verifier() def get_callback_url(self): if self.callback and self.verifier: # Append the oauth_verifier. parts = urlparse.urlparse(self.callback) scheme, netloc, path, params, query, fragment = parts[:6] if query: query = '%s&oauth_verifier=%s' % (query, self.verifier) else: query = 'oauth_verifier=%s' % self.verifier return urlparse.urlunparse((scheme, netloc, path, params, query, fragment)) return self.callback def to_string(self): """Returns this token as a plain string, suitable for storage. The resulting string includes the token's secret, so you should never send or store this string where a third party can read it. """ data = { 'oauth_token': self.key, 'oauth_token_secret': self.secret, } if self.callback_confirmed is not None: data['oauth_callback_confirmed'] = self.callback_confirmed return urllib.urlencode(data) @staticmethod def from_string(s): """Deserializes a token from a string like one returned by `to_string()`.""" if not len(s): raise ValueError("Invalid parameter string.") params = parse_qs(s, keep_blank_values=False) if not len(params): raise ValueError("Invalid parameter string.") try: key = params['oauth_token'][0] except Exception: raise ValueError("'oauth_token' not found in OAuth request.") try: secret = params['oauth_token_secret'][0] except Exception: raise ValueError("'oauth_token_secret' not found in " "OAuth request.") token = Token(key, secret) try: token.callback_confirmed = params['oauth_callback_confirmed'][0] except KeyError: pass # 1.0, no callback confirmed. return token def __str__(self): return self.to_string() def setter(attr): name = attr.__name__ def getter(self): try: return self.__dict__[name] except KeyError: raise AttributeError(name) def deleter(self): del self.__dict__[name] return property(getter, attr, deleter) class Request(dict): """The parameters and information for an HTTP request, suitable for authorizing with OAuth credentials. When a consumer wants to access a service's protected resources, it does so using a signed HTTP request identifying itself (the consumer) with its key, and providing an access token authorized by the end user to access those resources. """ version = OAUTH_VERSION def __init__(self, method=HTTP_METHOD, url=None, parameters=None, body='', is_form_encoded=False): if url is not None: self.url = to_unicode(url) self.method = method if parameters is not None: for k, v in parameters.iteritems(): k = to_unicode(k) v = to_unicode_optional_iterator(v) self[k] = v self.body = body self.is_form_encoded = is_form_encoded @setter def url(self, value): self.__dict__['url'] = value if value is not None: scheme, netloc, path, params, query, fragment = urlparse.urlparse(value) # Exclude default port numbers. if scheme == 'http' and netloc[-3:] == ':80': netloc = netloc[:-3] elif scheme == 'https' and netloc[-4:] == ':443': netloc = netloc[:-4] if scheme not in ('http', 'https'): raise ValueError("Unsupported URL %s (%s)." % (value, scheme)) # Normalized URL excludes params, query, and fragment. self.normalized_url = urlparse.urlunparse((scheme, netloc, path, None, None, None)) else: self.normalized_url = None self.__dict__['url'] = None @setter def method(self, value): self.__dict__['method'] = value.upper() def _get_timestamp_nonce(self): return self['oauth_timestamp'], self['oauth_nonce'] def get_nonoauth_parameters(self): """Get any non-OAuth parameters.""" return dict([(k, v) for k, v in self.iteritems() if not k.startswith('oauth_')]) def to_header(self, realm=''): """Serialize as a header for an HTTPAuth request.""" oauth_params = ((k, v) for k, v in self.items() if k.startswith('oauth_')) stringy_params = ((k, escape(str(v))) for k, v in oauth_params) header_params = ('%s="%s"' % (k, v) for k, v in stringy_params) params_header = ', '.join(header_params) auth_header = 'OAuth realm="%s"' % realm if params_header: auth_header = "%s, %s" % (auth_header, params_header) return {'Authorization': auth_header} def to_postdata(self): """Serialize as post data for a POST request.""" d = {} for k, v in self.iteritems(): d[k.encode('utf-8')] = to_utf8_optional_iterator(v) # tell urlencode to deal with sequence values and map them correctly # to resulting querystring. for example self["k"] = ["v1", "v2"] will # result in 'k=v1&k=v2' and not k=%5B%27v1%27%2C+%27v2%27%5D return urllib.urlencode(d, True).replace('+', '%20') def to_url(self): """Serialize as a URL for a GET request.""" base_url = urlparse.urlparse(self.url) try: query = base_url.query except AttributeError: # must be python <2.5 query = base_url[4] query = parse_qs(query) for k, v in self.items(): if isinstance(v, unicode): v = v.encode("utf-8") query.setdefault(k, []).append(v) try: scheme = base_url.scheme netloc = base_url.netloc path = base_url.path params = base_url.params fragment = base_url.fragment except AttributeError: # must be python <2.5 scheme = base_url[0] netloc = base_url[1] path = base_url[2] params = base_url[3] fragment = base_url[5] url = (scheme, netloc, path, params, urllib.urlencode(query, True), fragment) return urlparse.urlunparse(url) def get_parameter(self, parameter): ret = self.get(parameter) if ret is None: raise Error('Parameter not found: %s' % parameter) return ret def get_normalized_parameters(self): """Return a string that contains the parameters that must be signed.""" items = [] for key, value in self.iteritems(): if key == 'oauth_signature': continue # 1.0a/9.1.1 states that kvp must be sorted by key, then by value, # so we unpack sequence values into multiple items for sorting. if isinstance(value, basestring): items.append((to_utf8_if_string(key), to_utf8(value))) else: try: value = list(value) except TypeError, e: assert 'is not iterable' in str(e) items.append((to_utf8_if_string(key), to_utf8_if_string(value))) else: items.extend((to_utf8_if_string(key), to_utf8_if_string(item)) for item in value) # Include any query string parameters from the provided URL query = urlparse.urlparse(self.url)[4] url_items = self._split_url_string(query).items() url_items = [(to_utf8(k), to_utf8(v)) for k, v in url_items if k != 'oauth_signature' ] items.extend(url_items) items.sort() encoded_str = urllib.urlencode(items) # Encode signature parameters per Oauth Core 1.0 protocol # spec draft 7, section 3.6 # (http://tools.ietf.org/html/draft-hammer-oauth-07#section-3.6) # Spaces must be encoded with "%20" instead of "+" return encoded_str.replace('+', '%20').replace('%7E', '~') def sign_request(self, signature_method, consumer, token): """Set the signature parameter to the result of sign.""" if not self.is_form_encoded: # according to # http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html # section 4.1.1 "OAuth Consumers MUST NOT include an # oauth_body_hash parameter on requests with form-encoded # request bodies." self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest()) if 'oauth_consumer_key' not in self: self['oauth_consumer_key'] = consumer.key if token and 'oauth_token' not in self: self['oauth_token'] = token.key self['oauth_signature_method'] = signature_method.name self['oauth_signature'] = signature_method.sign(self, consumer, token) @classmethod def make_timestamp(cls): """Get seconds since epoch (UTC).""" return str(int(time.time())) @classmethod def make_nonce(cls): """Generate pseudorandom number.""" return str(random.randint(0, 100000000)) @classmethod def from_request(cls, http_method, http_url, headers=None, parameters=None, query_string=None): """Combines multiple parameter sources.""" if parameters is None: parameters = {} # Headers if headers and 'Authorization' in headers: auth_header = headers['Authorization'] # Check that the authorization header is OAuth. if auth_header[:6] == 'OAuth ': auth_header = auth_header[6:] try: # Get the parameters from the header. header_params = cls._split_header(auth_header) parameters.update(header_params) except: raise Error('Unable to parse OAuth parameters from ' 'Authorization header.') # GET or POST query string. if query_string: query_params = cls._split_url_string(query_string) parameters.update(query_params) # URL parameters. param_str = urlparse.urlparse(http_url)[4] # query url_params = cls._split_url_string(param_str) parameters.update(url_params) if parameters: return cls(http_method, http_url, parameters) return None @classmethod def from_consumer_and_token(cls, consumer, token=None, http_method=HTTP_METHOD, http_url=None, parameters=None, body='', is_form_encoded=False): if not parameters: parameters = {} defaults = { 'oauth_consumer_key': consumer.key, 'oauth_timestamp': cls.make_timestamp(), 'oauth_nonce': cls.make_nonce(), 'oauth_version': cls.version, } defaults.update(parameters) parameters = defaults if token: parameters['oauth_token'] = token.key if token.verifier: parameters['oauth_verifier'] = token.verifier return Request(http_method, http_url, parameters, body=body, is_form_encoded=is_form_encoded) @classmethod def from_token_and_callback(cls, token, callback=None, http_method=HTTP_METHOD, http_url=None, parameters=None): if not parameters: parameters = {} parameters['oauth_token'] = token.key if callback: parameters['oauth_callback'] = callback return cls(http_method, http_url, parameters) @staticmethod def _split_header(header): """Turn Authorization: header into parameters.""" params = {} parts = header.split(',') for param in parts: # Ignore realm parameter. if param.find('realm') > -1: continue # Remove whitespace. param = param.strip() # Split key-value. param_parts = param.split('=', 1) # Remove quotes and unescape the value. params[param_parts[0]] = urllib.unquote(param_parts[1].strip('\"')) return params @staticmethod def _split_url_string(param_str): """Turn URL string into parameters.""" parameters = parse_qs(param_str.encode('utf-8'), keep_blank_values=True) for k, v in parameters.iteritems(): parameters[k] = urllib.unquote(v[0]) return parameters class SignatureMethod(object): """A way of signing requests. The OAuth protocol lets consumers and service providers pick a way to sign requests. This interface shows the methods expected by the other `oauth` modules for signing requests. Subclass it and implement its methods to provide a new way to sign requests. """ def signing_base(self, request, consumer, token): """Calculates the string that needs to be signed. This method returns a 2-tuple containing the starting key for the signing and the message to be signed. The latter may be used in error messages to help clients debug their software. """ raise NotImplementedError def sign(self, request, consumer, token): """Returns the signature for the given request, based on the consumer and token also provided. You should use your implementation of `signing_base()` to build the message to sign. Otherwise it may be less useful for debugging. """ raise NotImplementedError def check(self, request, consumer, token, signature): """Returns whether the given signature is the correct signature for the given consumer and token signing the given request.""" built = self.sign(request, consumer, token) return built == signature class SignatureMethod_HMAC_SHA1(SignatureMethod): name = 'HMAC-SHA1' def signing_base(self, request, consumer, token): if not hasattr(request, 'normalized_url') or request.normalized_url is None: raise ValueError("Base URL for request is not set.") sig = ( escape(request.method), escape(request.normalized_url), escape(request.get_normalized_parameters()), ) key = '%s&' % escape(consumer.secret) if token: key += escape(token.secret) raw = '&'.join(sig) return to_bytestring(key), raw def sign(self, request, consumer, token): """Builds the base signature string.""" key, raw = self.signing_base(request, consumer, token) hashed = hmac.new(to_bytestring(key), raw, sha) # Calculate the digest base 64. return binascii.b2a_base64(hashed.digest())[:-1] class SignatureMethod_PLAINTEXT(SignatureMethod): name = 'PLAINTEXT' def signing_base(self, request, consumer, token): """Concatenates the consumer key and secret with the token's secret.""" sig = '%s&' % escape(consumer.secret) if token: sig = sig + escape(token.secret) return sig, sig def sign(self, request, consumer, token): key, raw = self.signing_base(request, consumer, token) return raw restkit-4.2.2/restkit/errors.py0000664000175000017500000001116012210071423017640 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. """ exception classes. """ class ResourceError(Exception): """ default error class """ status_int = None def __init__(self, msg=None, http_code=None, response=None): self.msg = msg or '' self.status_int = http_code or self.status_int self.response = response Exception.__init__(self) def _get_message(self): return self.msg def _set_message(self, msg): self.msg = msg or '' message = property(_get_message, _set_message) def __str__(self): if self.msg: return self.msg try: return str(self.__dict__) except (NameError, ValueError, KeyError), e: return 'Unprintable exception %s: %s' \ % (self.__class__.__name__, str(e)) class ResourceNotFound(ResourceError): """Exception raised when no resource was found at the given url. """ status_int = 404 class Unauthorized(ResourceError): """Exception raised when an authorization is required to access to the resource specified. """ class ResourceGone(ResourceError): """ http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.11 """ status_int = 410 class RequestFailed(ResourceError): """Exception raised when an unexpected HTTP error is received in response to a request. The request failed, meaning the remote HTTP server returned a code other than success, unauthorized, or NotFound. The exception message attempts to extract the error You can get the status code by e.status_int, or see anything about the response via e.response. For example, the entire result body (which is probably an HTML error page) is e.response.body. """ class RedirectLimit(Exception): """Exception raised when the redirection limit is reached.""" class RequestError(Exception): """Exception raised when a request is malformed""" class RequestTimeout(Exception): """ Exception raised on socket timeout """ class InvalidUrl(Exception): """ Not a valid url for use with this software. """ class ResponseError(Exception): """ Error raised while getting response or decompressing response stream""" class ProxyError(Exception): """ raised when proxy error happend""" class BadStatusLine(Exception): """ Exception returned by the parser when the status line is invalid""" pass class ParserError(Exception): """ Generic exception returned by the parser """ pass class UnexpectedEOF(Exception): """ exception raised when remote closed the connection """ class AlreadyRead(Exception): """ raised when a response have already been read """ class ProxyError(Exception): pass ############################# # HTTP parser errors ############################# class ParseException(Exception): pass class NoMoreData(ParseException): def __init__(self, buf=None): self.buf = buf def __str__(self): return "No more data after: %r" % self.buf class InvalidRequestLine(ParseException): def __init__(self, req): self.req = req self.code = 400 def __str__(self): return "Invalid HTTP request line: %r" % self.req class InvalidRequestMethod(ParseException): def __init__(self, method): self.method = method def __str__(self): return "Invalid HTTP method: %r" % self.method class InvalidHTTPVersion(ParseException): def __init__(self, version): self.version = version def __str__(self): return "Invalid HTTP Version: %s" % self.version class InvalidHTTPStatus(ParseException): def __init__(self, status): self.status = status def __str__(self): return "Invalid HTTP Status: %s" % self.status class InvalidHeader(ParseException): def __init__(self, hdr): self.hdr = hdr def __str__(self): return "Invalid HTTP Header: %r" % self.hdr class InvalidHeaderName(ParseException): def __init__(self, hdr): self.hdr = hdr def __str__(self): return "Invalid HTTP header name: %r" % self.hdr class InvalidChunkSize(ParseException): def __init__(self, data): self.data = data def __str__(self): return "Invalid chunk size: %r" % self.data class ChunkMissingTerminator(ParseException): def __init__(self, term): self.term = term def __str__(self): return "Invalid chunk terminator is not '\\r\\n': %r" % self.term class HeaderLimit(ParseException): """ exception raised when we gore more headers than max_header_count """ restkit-4.2.2/restkit/conn.py0000664000175000017500000000635312210071423017271 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import logging import random import select import socket import ssl import time import cStringIO from socketpool import Connector from socketpool.util import is_connected CHUNK_SIZE = 16 * 1024 MAX_BODY = 1024 * 112 DNS_TIMEOUT = 60 class Connection(Connector): def __init__(self, host, port, backend_mod=None, pool=None, is_ssl=False, extra_headers=[], proxy_pieces=None, **ssl_args): # connect the socket, if we are using an SSL connection, we wrap # the socket. self._s = backend_mod.Socket(socket.AF_INET, socket.SOCK_STREAM) self._s.connect((host, port)) if proxy_pieces: self._s.sendall(proxy_pieces) response = cStringIO.StringIO() while response.getvalue()[-4:] != '\r\n\r\n': response.write(self._s.recv(1)) response.close() if is_ssl: self._s = ssl.wrap_socket(self._s, **ssl_args) self.extra_headers = extra_headers self.is_ssl = is_ssl self.backend_mod = backend_mod self.host = host self.port = port self._connected = True self._life = time.time() - random.randint(0, 10) self._pool = pool self._released = False def matches(self, **match_options): target_host = match_options.get('host') target_port = match_options.get('port') return target_host == self.host and target_port == self.port def is_connected(self): if self._connected: return is_connected(self._s) return False def handle_exception(self, exception): raise def get_lifetime(self): return self._life def invalidate(self): self.close() self._connected = False self._life = -1 def release(self, should_close=False): if self._pool is not None: if self._connected: if should_close: self.invalidate() self._pool.release_connection(self) else: self._pool = None elif self._connected: self.invalidate() def close(self): if not self._s or not hasattr(self._s, "close"): return try: self._s.close() except: pass def socket(self): return self._s def send_chunk(self, data): chunk = "".join(("%X\r\n" % len(data), data, "\r\n")) self._s.sendall(chunk) def send(self, data, chunked=False): if chunked: return self.send_chunk(data) return self._s.sendall(data) def sendlines(self, lines, chunked=False): for line in list(lines): self.send(line, chunked=chunked) # TODO: add support for sendfile api def sendfile(self, data, chunked=False): """ send a data from a FileObject """ if hasattr(data, 'seek'): data.seek(0) while True: binarydata = data.read(CHUNK_SIZE) if binarydata == '': break self.send(binarydata, chunked=chunked) def recv(self, size=1024): return self._s.recv(size) restkit-4.2.2/restkit/util.py0000664000175000017500000001751612210071423017314 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import os import re import time import urllib import urlparse import warnings import Cookie from restkit.errors import InvalidUrl absolute_http_url_re = re.compile(r"^https?://", re.I) try:#python 2.6, use subprocess import subprocess subprocess.Popen # trigger ImportError early closefds = os.name == 'posix' def popen3(cmd, mode='t', bufsize=0): p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=closefds) p.wait() return (p.stdin, p.stdout, p.stderr) except ImportError: subprocess = None popen3 = os.popen3 def locate_program(program): if os.path.isabs(program): return program if os.path.dirname(program): program = os.path.normpath(os.path.realpath(program)) return program paths = os.getenv('PATH') if not paths: return False for path in paths.split(os.pathsep): filename = os.path.join(path, program) if os.access(filename, os.X_OK): return filename return False weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] monthname = [None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] def http_date(timestamp=None): """Return the current date and time formatted for a message header.""" if timestamp is None: timestamp = time.time() year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp) s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( weekdayname[wd], day, monthname[month], year, hh, mm, ss) return s def parse_netloc(uri): host = uri.netloc port = None i = host.rfind(':') j = host.rfind(']') # ipv6 addresses have [...] if i > j: try: port = int(host[i+1:]) except ValueError: raise InvalidUrl("nonnumeric port: '%s'" % host[i+1:]) host = host[:i] else: # default port if uri.scheme == "https": port = 443 else: port = 80 if host and host[0] == '[' and host[-1] == ']': host = host[1:-1] return (host, port) def to_bytestring(s): if not isinstance(s, basestring): raise TypeError("value should be a str or unicode") if isinstance(s, unicode): return s.encode('utf-8') return s def url_quote(s, charset='utf-8', safe='/:'): """URL encode a single string with a given encoding.""" if isinstance(s, unicode): s = s.encode(charset) elif not isinstance(s, str): s = str(s) return urllib.quote(s, safe=safe) def url_encode(obj, charset="utf8", encode_keys=False): items = [] if isinstance(obj, dict): for k, v in list(obj.items()): items.append((k, v)) else: items = list(items) tmp = [] for k, v in items: if encode_keys: k = encode(k, charset) if not isinstance(v, (tuple, list)): v = [v] for v1 in v: if v1 is None: v1 = '' elif callable(v1): v1 = encode(v1(), charset) else: v1 = encode(v1, charset) tmp.append('%s=%s' % (urllib.quote(k), urllib.quote_plus(v1))) return '&'.join(tmp) def encode(v, charset="utf8"): if isinstance(v, unicode): v = v.encode(charset) else: v = str(v) return v def make_uri(base, *args, **kwargs): """Assemble a uri based on a base, any number of path segments, and query string parameters. """ # get encoding parameters charset = kwargs.pop("charset", "utf-8") safe = kwargs.pop("safe", "/:") encode_keys = kwargs.pop("encode_keys", True) base_trailing_slash = False if base and base.endswith("/"): base_trailing_slash = True base = base[:-1] retval = [base] # build the path _path = [] trailing_slash = False for s in args: if s is not None and isinstance(s, basestring): if len(s) > 1 and s.endswith('/'): trailing_slash = True else: trailing_slash = False _path.append(url_quote(s.strip('/'), charset, safe)) path_str ="" if _path: path_str = "/".join([''] + _path) if trailing_slash: path_str = path_str + "/" elif base_trailing_slash: path_str = path_str + "/" if path_str: retval.append(path_str) params_str = url_encode(kwargs, charset, encode_keys) if params_str: retval.extend(['?', params_str]) return ''.join(retval) def rewrite_location(host_uri, location, prefix_path=None): prefix_path = prefix_path or '' url = urlparse.urlparse(location) host_url = urlparse.urlparse(host_uri) if not absolute_http_url_re.match(location): # remote server doesn't follow rfc2616 proxy_uri = '%s%s' % (host_uri, prefix_path) return urlparse.urljoin(proxy_uri, location) elif url.scheme == host_url.scheme and url.netloc == host_url.netloc: return urlparse.urlunparse((host_url.scheme, host_url.netloc, prefix_path + url.path, url.params, url.query, url.fragment)) return location def replace_header(name, value, headers): idx = -1 for i, (k, v) in enumerate(headers): if k.upper() == name.upper(): idx = i break if idx >= 0: headers[i] = (name.title(), value) else: headers.append((name.title(), value)) return headers def replace_headers(new_headers, headers): hdrs = {} for (k, v) in new_headers: hdrs[k.upper()] = v found = [] for i, (k, v) in enumerate(headers): ku = k.upper() if ku in hdrs: headers[i] = (k.title(), hdrs[ku]) found.append(ku) if len(found) == len(new_headers): return for k, v in new_headers.items(): if k not in found: headers.append((k.title(), v)) return headers def parse_cookie(cookie, final_url): if cookie == '': return {} if not isinstance(cookie, Cookie.BaseCookie): try: c = Cookie.SimpleCookie() c.load(cookie) except Cookie.CookieError: # Invalid cookie return {} else: c = cookie cookiedict = {} for key in c.keys(): cook = c.get(key) cookiedict[key] = cook.value return cookiedict class deprecated_property(object): """ Wraps a decorator, with a deprecation warning or error """ def __init__(self, decorator, attr, message, warning=True): self.decorator = decorator self.attr = attr self.message = message self.warning = warning def __get__(self, obj, type=None): if obj is None: return self self.warn() return self.decorator.__get__(obj, type) def __set__(self, obj, value): self.warn() self.decorator.__set__(obj, value) def __delete__(self, obj): self.warn() self.decorator.__delete__(obj) def __repr__(self): return '' % ( self.attr, self.decorator) def warn(self): if not self.warning: raise DeprecationWarning( 'The attribute %s is deprecated: %s' % (self.attr, self.message)) else: warnings.warn( 'The attribute %s is deprecated: %s' % (self.attr, self.message), DeprecationWarning, stacklevel=3) restkit-4.2.2/restkit/filters.py0000664000175000017500000000733112210126544020006 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import base64 import re try: from urlparse import parse_qsl except ImportError: from cgi import parse_qsl from urlparse import urlunparse from restkit.oauth2 import Request, SignatureMethod_HMAC_SHA1 class BasicAuth(object): """ Simple filter to manage basic authentification""" def __init__(self, username, password): self.credentials = (username, password) def on_request(self, request): encode = base64.b64encode("%s:%s" % self.credentials) request.headers['Authorization'] = 'Basic %s' % encode def validate_consumer(consumer): """ validate a consumer agains oauth2.Consumer object """ if not hasattr(consumer, "key"): raise ValueError("Invalid consumer.") return consumer def validate_token(token): """ validate a token agains oauth2.Token object """ if token is not None and not hasattr(token, "key"): raise ValueError("Invalid token.") return token class OAuthFilter(object): """ oauth filter """ def __init__(self, path, consumer, token=None, method=None, realm=""): """ Init OAuthFilter :param path: path or regexp. * mean all path on wicth oauth can be applied. :param consumer: oauth consumer, instance of oauth2.Consumer :param token: oauth token, instance of oauth2.Token :param method: oauth signature method token and method signature are optionnals. Consumer should be an instance of `oauth2.Consumer`, token an instance of `oauth2.Toke` signature method an instance of `oauth2.SignatureMethod`. """ if path.endswith('*'): self.match = re.compile("%s.*" % path.rsplit('*', 1)[0]) else: self.match = re.compile("%s$" % path) self.consumer = validate_consumer(consumer) self.token = validate_token(token) self.method = method or SignatureMethod_HMAC_SHA1() self.realm = realm def on_path(self, request): path = request.parsed_url.path or "/" return (self.match.match(path) is not None) def on_request(self, request): if not self.on_path(request): return params = {} form = False parsed_url = request.parsed_url if request.body and request.body is not None: ctype = request.headers.iget('content-type') if ctype is not None and \ ctype.startswith('application/x-www-form-urlencoded'): # we are in a form try to get oauth params from here form = True params = dict(parse_qsl(request.body)) # update params from quey parameters params.update(parse_qsl(parsed_url.query)) raw_url = urlunparse((parsed_url.scheme, parsed_url.netloc, parsed_url.path, '', '', '')) oauth_req = Request.from_consumer_and_token(self.consumer, token=self.token, http_method=request.method, http_url=raw_url, parameters=params, is_form_encoded=form) oauth_req.sign_request(self.method, self.consumer, self.token) if form: request.body = oauth_req.to_postdata() request.headers['Content-Length'] = len(request.body) elif request.method in ('GET', 'HEAD'): request.original_url = request.url request.url = oauth_req.to_url() else: oauth_headers = oauth_req.to_header(realm=self.realm) request.headers.update(oauth_headers) restkit-4.2.2/PKG-INFO0000664000175000017500000000572612210136112015372 0ustar benoitcbenoitc00000000000000Metadata-Version: 1.1 Name: restkit Version: 4.2.2 Summary: Python REST kit Home-page: http://benoitc.github.com/restkit Author: Benoit Chesneau Author-email: benoitc@e-engura.org License: MIT Description: About ----- Restkit is an HTTP resource kit for `Python `_. It allows you to easily access to HTTP resource and build objects around it. It's the base of `couchdbkit `_ a Python `CouchDB `_ framework. Restkit is a full HTTP client using pure socket calls and its own HTTP parser. It's not based on httplib or urllib2. Features -------- - Full compatible HTTP client for HTTP 1.0 and 1.1 - Threadsafe - Use pure socket calls and its own HTTP parser (It's not based on httplib or urllib2) - Map HTTP resources to Python objects - **Read** and **Send** on the fly - Reuses connections - `Eventlet `_ and `Gevent `_ support - Support `Chunked transfer encoding`_ in both ways. - Support `Basic Authentification`_ and `OAuth`_. - Multipart forms and url-encoded forms - Streaming support - Proxy handling - HTTP Filters, you can hook requests in responses with your own callback - Compatible with Python 2.x (>= 2.6) Documentation ------------- http://restkit.readthedocs.org Installation ------------ restkit requires Python 2.x superior to 2.6 (Python 3 support is coming soon) To install restkit using pip you must make sure you have a recent version of distribute installed:: $ curl -O http://python-distribute.org/distribute_setup.py $ sudo python distribute_setup.py $ easy_install pip To install from source, run the following command:: $ git clone https://github.com/benoitc/restkit.git $ cd restkit $ pip install -r requirements.txt $ python setup.py install From pypi:: $ pip install restkit License ------- restkit is available under the MIT license. .. _Chunked transfer encoding: http://en.wikipedia.org/wiki/Chunked_transfer_encoding .. _Basic Authentification: http://www.ietf.org/rfc/rfc2617.txt .. _OAuth: http://oauth.net/ Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Software Development :: Libraries restkit-4.2.2/scripts/0000775000175000017500000000000012210136112015752 5ustar benoitcbenoitc00000000000000restkit-4.2.2/scripts/restcli0000775000175000017500000000035012210071423017346 0ustar benoitcbenoitc00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from restkit.contrib.console import main if __name__ == '__main__': main() restkit-4.2.2/tests/0000775000175000017500000000000012210136112015425 5ustar benoitcbenoitc00000000000000restkit-4.2.2/tests/__init__.py0000664000175000017500000000000112210071423017530 0ustar benoitcbenoitc00000000000000 restkit-4.2.2/tests/008-test-request.py0000664000175000017500000001400612210071423020755 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import os import uuid import t from restkit import request from restkit.forms import multipart_form_encode from _server_test import HOST, PORT LONG_BODY_PART = """This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client...""" def test_001(): u = "http://%s:%s" % (HOST, PORT) r = request(u) t.eq(r.status_int, 200) t.eq(r.body_string(), "welcome") def test_002(): u = "http://%s:%s" % (HOST, PORT) r = request(u, 'POST', body=LONG_BODY_PART) t.eq(r.status_int, 200) body = r.body_string() t.eq(len(body), len(LONG_BODY_PART)) t.eq(body, LONG_BODY_PART) def test_003(): u = "http://test:test@%s:%s/auth" % (HOST, PORT) r = request(u) t.eq(r.status_int, 200) u = "http://test:test2@%s:%s/auth" % (HOST, PORT) r = request(u) t.eq(r.status_int, 403) def test_004(): u = "http://%s:%s/multipart2" % (HOST, PORT) fn = os.path.join(os.path.dirname(__file__), "1M") f = open(fn, 'rb') l = int(os.fstat(f.fileno())[6]) b = {'a':'aa','b':['bb','éàù@'], 'f':f} h = {'content-type':"multipart/form-data"} body, headers = multipart_form_encode(b, h, uuid.uuid4().hex) r = request(u, method='POST', body=body, headers=headers) t.eq(r.status_int, 200) t.eq(int(r.body_string()), l) def test_005(): u = "http://%s:%s/multipart3" % (HOST, PORT) fn = os.path.join(os.path.dirname(__file__), "1M") f = open(fn, 'rb') l = int(os.fstat(f.fileno())[6]) b = {'a':'aa','b':'éàù@', 'f':f} h = {'content-type':"multipart/form-data"} body, headers = multipart_form_encode(b, h, uuid.uuid4().hex) r = request(u, method='POST', body=body, headers=headers) t.eq(r.status_int, 200) t.eq(int(r.body_string()), l) def test_006(): u = "http://%s:%s/multipart4" % (HOST, PORT) fn = os.path.join(os.path.dirname(__file__), "1M") f = open(fn, 'rb') content = f.read() f.seek(0) b = {'a':'aa','b':'éàù@', 'f':f} h = {'content-type':"multipart/form-data"} body, headers = multipart_form_encode(b, h, uuid.uuid4().hex) r = request(u, method='POST', body=body, headers=headers) t.eq(r.status_int, 200) t.eq(r.body_string(), content) def test_007(): import StringIO u = "http://%s:%s/multipart4" % (HOST, PORT) content = 'éàù@' f = StringIO.StringIO('éàù@') f.name = 'test.txt' b = {'a':'aa','b':'éàù@', 'f':f} h = {'content-type':"multipart/form-data"} body, headers = multipart_form_encode(b, h, uuid.uuid4().hex) r = request(u, method='POST', body=body, headers=headers) t.eq(r.status_int, 200) t.eq(r.body_string(), content)restkit-4.2.2/tests/009-test-oauth_filter.py0000664000175000017500000000531712210126544021765 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. # Request Token: http://oauth-sandbox.sevengoslings.net/request_token # Auth: http://oauth-sandbox.sevengoslings.net/authorize # Access Token: http://oauth-sandbox.sevengoslings.net/access_token # Two-legged: http://oauth-sandbox.sevengoslings.net/two_legged # Three-legged: http://oauth-sandbox.sevengoslings.net/three_legged # Key: bd37aed57e15df53 # Secret: 0e9e6413a9ef49510a4f68ed02cd try: from urlparse import parse_qs, parse_qsl except ImportError: from cgi import parse_qs, parse_qsl import urllib from restkit import request, OAuthFilter from restkit.oauth2 import Consumer import t class oauth_request(object): oauth_uris = { 'request_token': '/request_token', 'authorize': '/authorize', 'access_token': '/access_token', 'two_legged': '/two_legged', 'three_legged': '/three_legged' } consumer_key = 'bd37aed57e15df53' consumer_secret = '0e9e6413a9ef49510a4f68ed02cd' host = 'http://oauth-sandbox.sevengoslings.net' def __init__(self, utype): self.consumer = Consumer(key=self.consumer_key, secret=self.consumer_secret) self.body = { 'foo': 'bar', 'bar': 'foo', 'multi': ['FOO','BAR'], 'blah': 599999 } self.url = "%s%s" % (self.host, self.oauth_uris[utype]) def __call__(self, func): def run(): o = OAuthFilter('*', self.consumer) func(o, self.url, urllib.urlencode(self.body)) run.func_name = func.func_name return run @oauth_request('request_token') def test_001(o, u, b): r = request(u, filters=[o]) t.eq(r.status_int, 200) @oauth_request('request_token') def test_002(o, u, b): r = request(u, "POST", filters=[o]) t.eq(r.status_int, 200) f = dict(parse_qsl(r.body_string())) t.isin('oauth_token', f) t.isin('oauth_token_secret', f) @oauth_request('two_legged') def test_003(o, u, b): r = request(u, "POST", body=b, filters=[o], headers={"Content-type": "application/x-www-form-urlencoded"}) import sys print >>sys.stderr, r.body_string() t.eq(r.status_int, 200) # Because this is a POST and an application/x-www-form-urlencoded, the OAuth # can include the OAuth parameters directly into the body of the form, however # it MUST NOT include the 'oauth_body_hash' parameter in these circumstances. t.isnotin("oauth_body_hash", r.request.body) @oauth_request('two_legged') def test_004(o, u, b): r = request(u, "GET", filters=[o]) t.eq(r.status_int, 200) restkit-4.2.2/tests/treq.py0000664000175000017500000002013512210071423016756 0ustar benoitcbenoitc00000000000000# Copyright 2009 Paul J. Davis # # This file is part of the pywebmachine package released # under the MIT license. from __future__ import with_statement import t import inspect import os import random from StringIO import StringIO import urlparse from restkit.datastructures import MultiDict from restkit.errors import ParseException from restkit.http import Request, Unreader class IterUnreader(Unreader): def __init__(self, iterable, **kwargs): self.buf = StringIO() self.iter = iter(iterable) def _data(self): if not self.iter: return "" try: return self.iter.next() except StopIteration: self.iter = None return "" dirname = os.path.dirname(__file__) random.seed() def uri(data): ret = {"raw": data} parts = urlparse.urlparse(data) ret["scheme"] = parts.scheme or None ret["host"] = parts.netloc.rsplit(":", 1)[0] or None ret["port"] = parts.port or 80 if parts.path and parts.params: ret["path"] = ";".join([parts.path, parts.params]) elif parts.path: ret["path"] = parts.path elif parts.params: # Don't think this can happen ret["path"] = ";" + parts.path else: ret["path"] = None ret["query"] = parts.query or None ret["fragment"] = parts.fragment or None return ret def load_response_py(fname): config = globals().copy() config["uri"] = uri execfile(fname, config) return config["response"] class response(object): def __init__(self, fname, expect): self.fname = fname self.name = os.path.basename(fname) self.expect = expect if not isinstance(self.expect, list): self.expect = [self.expect] with open(self.fname) as handle: self.data = handle.read() self.data = self.data.replace("\n", "").replace("\\r\\n", "\r\n") self.data = self.data.replace("\\0", "\000") # Functions for sending data to the parser. # These functions mock out reading from a # socket or other data source that might # be used in real life. def send_all(self): yield self.data def send_lines(self): lines = self.data pos = lines.find("\r\n") while pos > 0: yield lines[:pos+2] lines = lines[pos+2:] pos = lines.find("\r\n") if len(lines): yield lines def send_bytes(self): for d in self.data: yield d def send_random(self): maxs = len(self.data) / 10 read = 0 while read < len(self.data): chunk = random.randint(1, maxs) yield self.data[read:read+chunk] read += chunk # These functions define the sizes that the # read functions will read with. def size_all(self): return -1 def size_bytes(self): return 1 def size_small_random(self): return random.randint(0, 4) def size_random(self): return random.randint(1, 4096) # Match a body against various ways of reading # a message. Pass in the request, expected body # and one of the size functions. def szread(self, func, sizes): sz = sizes() data = func(sz) if sz >= 0 and len(data) > sz: raise AssertionError("Read more than %d bytes: %s" % (sz, data)) return data def match_read(self, req, body, sizes): data = self.szread(req.body.read, sizes) count = 1000 while len(body): if body[:len(data)] != data: raise AssertionError("Invalid body data read: %r != %r" % ( data, body[:len(data)])) body = body[len(data):] data = self.szread(req.body.read, sizes) if not data: count -= 1 if count <= 0: raise AssertionError("Unexpected apparent EOF") if len(body): raise AssertionError("Failed to read entire body: %r" % body) elif len(data): raise AssertionError("Read beyond expected body: %r" % data) data = req.body.read(sizes()) if data: raise AssertionError("Read after body finished: %r" % data) def match_readline(self, req, body, sizes): data = self.szread(req.body.readline, sizes) count = 1000 while len(body): if body[:len(data)] != data: raise AssertionError("Invalid data read: %r" % data) if '\n' in data[:-1]: raise AssertionError("Embedded new line: %r" % data) body = body[len(data):] data = self.szread(req.body.readline, sizes) if not data: count -= 1 if count <= 0: raise AssertionError("Apparent unexpected EOF") if len(body): raise AssertionError("Failed to read entire body: %r" % body) elif len(data): raise AssertionError("Read beyond expected body: %r" % data) data = req.body.readline(sizes()) if data: raise AssertionError("Read data after body finished: %r" % data) def match_readlines(self, req, body, sizes): """\ This skips the sizes checks as we don't implement it. """ data = req.body.readlines() for line in data: if '\n' in line[:-1]: raise AssertionError("Embedded new line: %r" % line) if line != body[:len(line)]: raise AssertionError("Invalid body data read: %r != %r" % ( line, body[:len(line)])) body = body[len(line):] if len(body): raise AssertionError("Failed to read entire body: %r" % body) data = req.body.readlines(sizes()) if data: raise AssertionError("Read data after body finished: %r" % data) def match_iter(self, req, body, sizes): """\ This skips sizes because there's its not part of the iter api. """ for line in req.body: if '\n' in line[:-1]: raise AssertionError("Embedded new line: %r" % line) if line != body[:len(line)]: raise AssertionError("Invalid body data read: %r != %r" % ( line, body[:len(line)])) body = body[len(line):] if len(body): raise AssertionError("Failed to read entire body: %r" % body) try: data = iter(req.body).next() raise AssertionError("Read data after body finished: %r" % data) except StopIteration: pass # Construct a series of test cases from the permutations of # send, size, and match functions. def gen_cases(self): def get_funs(p): return [v for k, v in inspect.getmembers(self) if k.startswith(p)] senders = get_funs("send_") sizers = get_funs("size_") matchers = get_funs("match_") cfgs = [ (mt, sz, sn) for mt in matchers for sz in sizers for sn in senders ] ret = [] for (mt, sz, sn) in cfgs: mtn = mt.func_name[6:] szn = sz.func_name[5:] snn = sn.func_name[5:] def test_req(sn, sz, mt): self.check(sn, sz, mt) desc = "%s: MT: %s SZ: %s SN: %s" % (self.name, mtn, szn, snn) test_req.description = desc ret.append((test_req, sn, sz, mt)) return ret def check(self, sender, sizer, matcher): cases = self.expect[:] unreader = IterUnreader(sender()) resp = Request(unreader) self.same(resp, sizer, matcher, cases.pop(0)) t.eq(len(cases), 0) def same(self, resp, sizer, matcher, exp): t.eq(resp.status, exp["status"]) t.eq(resp.version, exp["version"]) t.eq(resp.headers, MultiDict(exp["headers"])) matcher(resp, exp["body"], sizer) t.eq(resp.trailers, exp.get("trailers", [])) restkit-4.2.2/tests/006-test-webob.py0000664000175000017500000000103412210071423020356 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import unittest import webob.exc from restkit.contrib.webob_helper import wrap_exceptions wrap_exceptions() class ResourceTestCase(unittest.TestCase): def testWebobException(self): from restkit.errors import ResourceError self.assert_(issubclass(ResourceError, webob.exc.WSGIHTTPException) == True) if __name__ == '__main__': unittest.main()restkit-4.2.2/tests/005-test-resource.py0000664000175000017500000001236012210071423021112 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import t from restkit.errors import RequestFailed, ResourceNotFound, \ Unauthorized from restkit.resource import Resource from _server_test import HOST, PORT @t.resource_request() def test_001(res): r = res.get() t.eq(r.status_int, 200) t.eq(r.body_string(), "welcome") @t.resource_request() def test_002(res): r = res.get('/unicode') t.eq(r.body_string(), "éàù@") @t.resource_request() def test_003(res): r = res.get('/éàù') t.eq(r.status_int, 200) t.eq(r.body_string(), "ok") @t.resource_request() def test_004(res): r = res.get(u'/test') t.eq(r.status_int, 200) r = res.get(u'/éàù') t.eq(r.status_int, 200) @t.resource_request() def test_005(res): r = res.get('/json', headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) t.raises(RequestFailed, res.get, '/json', headers={'Content-Type': 'text/plain'}) @t.resource_request() def test_006(res): t.raises(ResourceNotFound, res.get, '/unknown') @t.resource_request() def test_007(res): r = res.get('/query', test='testing') t.eq(r.status_int, 200) r = res.get('/qint', test=1) t.eq(r.status_int, 200) @t.resource_request() def test_008(res): r = res.post(payload="test") t.eq(r.body_string(), "test") @t.resource_request() def test_009(res): r = res.post('/bytestring', payload="éàù@") t.eq(r.body_string(), "éàù@") @t.resource_request() def test_010(res): r = res.post('/unicode', payload=u"éàù@") t.eq(r.body_string(), "éàù@") print "ok" r = res.post('/unicode', payload=u"éàù@") t.eq(r.body_string(charset="utf-8"), u"éàù@") @t.resource_request() def test_011(res): r = res.post('/json', payload="test", headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) t.raises(RequestFailed, res.post, '/json', payload='test', headers={'Content-Type': 'text/plain'}) @t.resource_request() def test_012(res): r = res.post('/empty', payload="", headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) r = res.post('/empty', headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) @t.resource_request() def test_013(res): r = res.post('/query', test="testing") t.eq(r.status_int, 200) @t.resource_request() def test_014(res): r = res.post('/form', payload={ "a": "a", "b": "b" }) t.eq(r.status_int, 200) @t.resource_request() def test_015(res): r = res.put(payload="test") t.eq(r.body_string(), 'test') @t.resource_request() def test_016(res): r = res.head('/ok') t.eq(r.status_int, 200) @t.resource_request() def test_017(res): r = res.delete('/delete') t.eq(r.status_int, 200) @t.resource_request() def test_018(res): content_length = len("test") import StringIO content = StringIO.StringIO("test") r = res.post('/json', payload=content, headers={ 'Content-Type': 'application/json', 'Content-Length': str(content_length) }) t.eq(r.status_int, 200) @t.resource_request() def test_019(res): import StringIO content = StringIO.StringIO("test") t.raises(RequestFailed, res.post, '/json', payload=content, headers={'Content-Type': 'text/plain'}) def test_020(): u = "http://test:test@%s:%s/auth" % (HOST, PORT) res = Resource(u) r = res.get() t.eq(r.status_int, 200) u = "http://test:test2@%s:%s/auth" % (HOST, PORT) res = Resource(u) t.raises(Unauthorized, res.get) @t.resource_request() def test_021(res): r = res.post('/multivalueform', payload={ "a": ["a", "c"], "b": "b" }) t.eq(r.status_int, 200) @t.resource_request() def test_022(res): import os fn = os.path.join(os.path.dirname(__file__), "1M") f = open(fn, 'rb') l = int(os.fstat(f.fileno())[6]) b = {'a':'aa','b':['bb','éàù@'], 'f':f} h = {'content-type':"multipart/form-data"} r = res.post('/multipart2', payload=b, headers=h) t.eq(r.status_int, 200) t.eq(int(r.body_string()), l) @t.resource_request() def test_023(res): import os fn = os.path.join(os.path.dirname(__file__), "1M") f = open(fn, 'rb') l = int(os.fstat(f.fileno())[6]) b = {'a':'aa','b':'éàù@', 'f':f} h = {'content-type':"multipart/form-data"} r = res.post('/multipart3', payload=b, headers=h) t.eq(r.status_int, 200) t.eq(int(r.body_string()), l) @t.resource_request() def test_024(res): import os fn = os.path.join(os.path.dirname(__file__), "1M") f = open(fn, 'rb') content = f.read() f.seek(0) b = {'a':'aa','b':'éàù@', 'f':f} h = {'content-type':"multipart/form-data"} r = res.post('/multipart4', payload=b, headers=h) t.eq(r.status_int, 200) t.eq(r.body_string(), content) @t.resource_request() def test_025(res): import StringIO content = 'éàù@' f = StringIO.StringIO('éàù@') f.name = 'test.txt' b = {'a':'aa','b':'éàù@', 'f':f} h = {'content-type':"multipart/form-data"} r = res.post('/multipart4', payload=b, headers=h) t.eq(r.status_int, 200) t.eq(r.body_string(), content)restkit-4.2.2/tests/007-test-util.py0000664000175000017500000000231712210071423020243 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import t from restkit import util def test_001(): qs = {'a': "a"} t.eq(util.url_encode(qs), "a=a") qs = {'a': 'a', 'b': 'b'} t.eq(util.url_encode(qs), "a=a&b=b") qs = {'a': 1} t.eq(util.url_encode(qs), "a=1") qs = {'a': [1, 2]} t.eq(util.url_encode(qs), "a=1&a=2") qs = {'a': [1, 2], 'b': [3, 4]} t.eq(util.url_encode(qs), "a=1&a=2&b=3&b=4") qs = {'a': lambda : 1} t.eq(util.url_encode(qs), "a=1") def test_002(): t.eq(util.make_uri("http://localhost", "/"), "http://localhost/") t.eq(util.make_uri("http://localhost/"), "http://localhost/") t.eq(util.make_uri("http://localhost/", "/test/echo"), "http://localhost/test/echo") t.eq(util.make_uri("http://localhost/", "/test/echo/"), "http://localhost/test/echo/") t.eq(util.make_uri("http://localhost", "/test/echo/"), "http://localhost/test/echo/") t.eq(util.make_uri("http://localhost", "test/echo"), "http://localhost/test/echo") t.eq(util.make_uri("http://localhost", "test/echo/"), "http://localhost/test/echo/") restkit-4.2.2/tests/010-test-proxies.py0000664000175000017500000000620712210071423020753 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 -*- # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import t from _server_test import HOST, PORT from restkit.contrib import wsgi_proxy root_uri = "http://%s:%s" % (HOST, PORT) def with_webob(func): def wrapper(*args, **kwargs): from webob import Request req = Request.blank('/') req.environ['SERVER_NAME'] = '%s:%s' % (HOST, PORT) return func(req) wrapper.func_name = func.func_name return wrapper @with_webob def test_001(req): req.path_info = '/query' proxy = wsgi_proxy.Proxy() resp = req.get_response(proxy) body = resp.body assert 'path: /query' in body, str(resp) @with_webob def test_002(req): req.path_info = '/json' req.environ['CONTENT_TYPE'] = 'application/json' req.method = 'POST' req.body = 'test post' proxy = wsgi_proxy.Proxy(allowed_methods=['POST']) resp = req.get_response(proxy) body = resp.body assert resp.content_length == 9, str(resp) proxy = wsgi_proxy.Proxy(allowed_methods=['GET']) resp = req.get_response(proxy) assert resp.status.startswith('403'), resp.status @with_webob def test_003(req): req.path_info = '/json' req.environ['CONTENT_TYPE'] = 'application/json' req.method = 'PUT' req.body = 'test post' proxy = wsgi_proxy.Proxy(allowed_methods=['PUT']) resp = req.get_response(proxy) body = resp.body assert resp.content_length == 9, str(resp) proxy = wsgi_proxy.Proxy(allowed_methods=['GET']) resp = req.get_response(proxy) assert resp.status.startswith('403'), resp.status @with_webob def test_004(req): req.path_info = '/ok' req.method = 'HEAD' proxy = wsgi_proxy.Proxy(allowed_methods=['HEAD']) resp = req.get_response(proxy) body = resp.body assert resp.content_type == 'text/plain', str(resp) @with_webob def test_005(req): req.path_info = '/delete' req.method = 'DELETE' proxy = wsgi_proxy.Proxy(allowed_methods=['DELETE']) resp = req.get_response(proxy) body = resp.body assert resp.content_type == 'text/plain', str(resp) proxy = wsgi_proxy.Proxy(allowed_methods=['GET']) resp = req.get_response(proxy) assert resp.status.startswith('403'), resp.status @with_webob def test_006(req): req.path_info = '/redirect' req.method = 'GET' proxy = wsgi_proxy.Proxy(allowed_methods=['GET']) resp = req.get_response(proxy) body = resp.body assert resp.location == '%s/complete_redirect' % root_uri, str(resp) @with_webob def test_007(req): req.path_info = '/redirect_to_url' req.method = 'GET' proxy = wsgi_proxy.Proxy(allowed_methods=['GET']) resp = req.get_response(proxy) body = resp.body print resp.location assert resp.location == '%s/complete_redirect' % root_uri, str(resp) @with_webob def test_008(req): req.path_info = '/redirect_to_url' req.script_name = '/name' req.method = 'GET' proxy = wsgi_proxy.Proxy(allowed_methods=['GET'], strip_script_name=True) resp = req.get_response(proxy) body = resp.body assert resp.location == '%s/name/complete_redirect' % root_uri, str(resp) restkit-4.2.2/tests/004-test-client.py0000664000175000017500000002104112210071423020534 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from __future__ import with_statement import cgi import imghdr import os import socket import threading import Queue import urlparse import sys import tempfile import time import t from restkit.filters import BasicAuth LONG_BODY_PART = """This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client... This is a relatively long body, that we send to the client...""" @t.client_request("/") def test_001(u, c): r = c.request(u) t.eq(r.body_string(), "welcome") @t.client_request("/unicode") def test_002(u, c): r = c.request(u) t.eq(r.body_string(charset="utf-8"), u"éàù@") @t.client_request("/éàù") def test_003(u, c): r = c.request(u) t.eq(r.body_string(), "ok") t.eq(r.status_int, 200) @t.client_request("/json") def test_004(u, c): r = c.request(u, headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) r = c.request(u, headers={'Content-Type': 'text/plain'}) t.eq(r.status_int, 400) @t.client_request('/unkown') def test_005(u, c): r = c.request(u, headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 404) @t.client_request('/query?test=testing') def test_006(u, c): r = c.request(u) t.eq(r.status_int, 200) t.eq(r.body_string(), "ok") @t.client_request('http://e-engura.com/images/logo.gif') def test_007(u, c): r = c.request(u) print r.status t.eq(r.status_int, 200) fd, fname = tempfile.mkstemp(suffix='.gif') f = os.fdopen(fd, "wb") f.write(r.body_string()) f.close() t.eq(imghdr.what(fname), 'gif') @t.client_request('http://e-engura.com/images/logo.gif') def test_008(u, c): r = c.request(u) t.eq(r.status_int, 200) fd, fname = tempfile.mkstemp(suffix='.gif') f = os.fdopen(fd, "wb") with r.body_stream() as body: for block in body: f.write(block) f.close() t.eq(imghdr.what(fname), 'gif') @t.client_request('/redirect') def test_009(u, c): c.follow_redirect = True r = c.request(u) complete_url = "%s/complete_redirect" % u.rsplit("/", 1)[0] t.eq(r.status_int, 200) t.eq(r.body_string(), "ok") t.eq(r.final_url, complete_url) @t.client_request('/') def test_010(u, c): r = c.request(u, 'POST', body="test") t.eq(r.body_string(), "test") @t.client_request('/bytestring') def test_011(u, c): r = c.request(u, 'POST', body="éàù@") t.eq(r.body_string(), "éàù@") @t.client_request('/unicode') def test_012(u, c): r = c.request(u, 'POST', body=u"éàù@") t.eq(r.body_string(), "éàù@") @t.client_request('/json') def test_013(u, c): r = c.request(u, 'POST', body="test", headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) r = c.request(u, 'POST', body="test", headers={'Content-Type': 'text/plain'}) t.eq(r.status_int, 400) @t.client_request('/empty') def test_014(u, c): r = c.request(u, 'POST', body="", headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) r = c.request(u, 'POST', body="", headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) @t.client_request('/query?test=testing') def test_015(u, c): r = c.request(u, 'POST', body="", headers={'Content-Type': 'application/json'}) t.eq(r.status_int, 200) @t.client_request('/1M') def test_016(u, c): fn = os.path.join(os.path.dirname(__file__), "1M") with open(fn, "rb") as f: l = int(os.fstat(f.fileno())[6]) r = c.request(u, 'POST', body=f) t.eq(r.status_int, 200) t.eq(int(r.body_string()), l) @t.client_request('/large') def test_017(u, c): r = c.request(u, 'POST', body=LONG_BODY_PART) t.eq(r.status_int, 200) t.eq(int(r['content-length']), len(LONG_BODY_PART)) t.eq(r.body_string(), LONG_BODY_PART) def test_0018(): for i in range(10): t.client_request('/large')(test_017) @t.client_request('/') def test_019(u, c): r = c.request(u, 'PUT', body="test") t.eq(r.body_string(), "test") @t.client_request('/auth') def test_020(u, c): c.filters = [BasicAuth("test", "test")] c.load_filters() r = c.request(u) t.eq(r.status_int, 200) c.filters = [BasicAuth("test", "test2")] c.load_filters() r = c.request(u) t.eq(r.status_int, 403) @t.client_request('/list') def test_021(u, c): lines = ["line 1\n", " line2\n"] r = c.request(u, 'POST', body=lines, headers=[("Content-Length", "14")]) t.eq(r.status_int, 200) t.eq(r.body_string(), 'line 1\n line2\n') @t.client_request('/chunked') def test_022(u, c): lines = ["line 1\n", " line2\n"] r = c.request(u, 'POST', body=lines, headers=[("Transfer-Encoding", "chunked")]) t.eq(r.status_int, 200) t.eq(r.body_string(), '7\r\nline 1\n\r\n7\r\n line2\n\r\n0\r\n\r\n') @t.client_request("/cookie") def test_023(u, c): r = c.request(u) t.eq(r.cookies.get('fig'), 'newton') t.eq(r.status_int, 200) @t.client_request("/cookies") def test_024(u, c): r = c.request(u) t.eq(r.cookies.get('fig'), 'newton') t.eq(r.cookies.get('sugar'), 'wafer') t.eq(r.status_int, 200) restkit-4.2.2/tests/t.py0000664000175000017500000000606512210071423016254 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # Copyright 2009 Paul J. Davis # # This file is part of gunicorn released under the MIT license. # See the NOTICE for more information. from __future__ import with_statement import os from StringIO import StringIO import tempfile dirname = os.path.dirname(__file__) from restkit.client import Client from restkit.resource import Resource from _server_test import HOST, PORT, run_server_test run_server_test() def data_source(fname): buf = StringIO() with open(fname) as handle: for line in handle: line = line.rstrip("\n").replace("\\r\\n", "\r\n") buf.write(line) return buf class FakeSocket(object): def __init__(self, data): self.tmp = tempfile.TemporaryFile() if data: self.tmp.write(data.getvalue()) self.tmp.flush() self.tmp.seek(0) def fileno(self): return self.tmp.fileno() def len(self): return self.tmp.len def recv(self, length=None): return self.tmp.read() def recv_into(self, buf, length): tmp_buffer = self.tmp.read(length) v = len(tmp_buffer) for i, c in enumerate(tmp_buffer): buf[i] = c return v def send(self, data): self.tmp.write(data) self.tmp.flush() def seek(self, offset, whence=0): self.tmp.seek(offset, whence) class client_request(object): def __init__(self, path): if path.startswith("http://") or path.startswith("https://"): self.url = path else: self.url = 'http://%s:%s%s' % (HOST, PORT, path) def __call__(self, func): def run(): cli = Client(timeout=300) func(self.url, cli) run.func_name = func.func_name return run class resource_request(object): def __init__(self, url=None): if url is not None: self.url = url else: self.url = 'http://%s:%s' % (HOST, PORT) def __call__(self, func): def run(): res = Resource(self.url) func(res) run.func_name = func.func_name return run def eq(a, b): assert a == b, "%r != %r" % (a, b) def ne(a, b): assert a != b, "%r == %r" % (a, b) def lt(a, b): assert a < b, "%r >= %r" % (a, b) def gt(a, b): assert a > b, "%r <= %r" % (a, b) def isin(a, b): assert a in b, "%r is not in %r" % (a, b) def isnotin(a, b): assert a not in b, "%r is in %r" % (a, b) def has(a, b): assert hasattr(a, b), "%r has no attribute %r" % (a, b) def hasnot(a, b): assert not hasattr(a, b), "%r has an attribute %r" % (a, b) def raises(exctype, func, *args, **kwargs): try: func(*args, **kwargs) except exctype: pass else: func_name = getattr(func, "func_name", "") raise AssertionError("Function %s did not raise %s" % ( func_name, exctype.__name__)) restkit-4.2.2/tests/_server_test.py0000664000175000017500000003516012210071423020513 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # Copyright (c) 2008 (c) Benoit Chesneau # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # import base64 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import cgi import os import socket import tempfile import threading import unittest import urlparse import Cookie try: from urlparse import parse_qsl, parse_qs except ImportError: from cgi import parse_qsl, parse_qs import urllib from restkit.util import to_bytestring HOST = 'localhost' PORT = (os.getpid() % 31000) + 1024 class HTTPTestHandler(BaseHTTPRequestHandler): def __init__(self, request, client_address, server): self.auth = 'Basic ' + base64.encodestring('test:test')[:-1] self.count = 0 BaseHTTPRequestHandler.__init__(self, request, client_address, server) def do_GET(self): self.parsed_uri = urlparse.urlparse(urllib.unquote(self.path)) self.query = {} for k, v in parse_qsl(self.parsed_uri[4]): self.query[k] = v.decode('utf-8') path = self.parsed_uri[2] if path == "/": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "welcome") elif path == "/unicode": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, u"éàù@") elif path == "/json": content_type = self.headers.get('content-type', 'text/plain') if content_type != "application/json": self.error_Response("bad type") else: extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") elif path == "/éàù": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") elif path == "/test": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") elif path == "/query": test = self.query.get("test", False) if test and test == "testing": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") else: self.error_Response() elif path == "/qint": test = self.query.get("test", False) if test and test == "1": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") else: self.error_Response() elif path == "/auth": extra_headers = [('Content-type', 'text/plain')] if not 'Authorization' in self.headers: realm = "test" extra_headers.append(('WWW-Authenticate', 'Basic realm="%s"' % realm)) self._respond(401, extra_headers, "") else: auth = self.headers['Authorization'][len('Basic')+1:] auth = base64.b64decode(auth).split(':') if auth[0] == "test" and auth[1] == "test": self._respond(200, extra_headers, "ok") else: self._respond(403, extra_headers, "niet!") elif path == "/redirect": extra_headers = [('Content-type', 'text/plain'), ('Location', '/complete_redirect')] self._respond(301, extra_headers, "") elif path == "/complete_redirect": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") elif path == "/redirect_to_url": extra_headers = [('Content-type', 'text/plain'), ('Location', 'http://localhost:%s/complete_redirect' % PORT)] self._respond(301, extra_headers, "") elif path == "/pool": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") elif path == "/cookie": c = Cookie.SimpleCookie() c["fig"] = "newton" c['fig']['path'] = "/" for k in c.keys(): extra_headers = [('Set-Cookie', str(c[k].output(header='')))] self._respond(200, extra_headers, "ok") elif path == "/cookies": c = Cookie.SimpleCookie() c["fig"] = "newton" c['fig']['path'] = "/" c["sugar"] = "wafer" c['sugar']['path'] = "/" extra_headers = [] for k in c.keys(): extra_headers.append(('Set-Cookie', str(c[k].output(header='')))) self._respond(200, extra_headers, "ok") else: self._respond(404, [('Content-type', 'text/plain')], "Not Found" ) def do_POST(self): self.parsed_uri = urlparse.urlparse(self.path) self.query = {} for k, v in parse_qsl(self.parsed_uri[4]): self.query[k] = v.decode('utf-8') path = self.parsed_uri[2] extra_headers = [] if path == "/": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', '-1')) body = self.rfile.read(content_length) self._respond(200, extra_headers, body) elif path == "/bytestring": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', '-1')) body = self.rfile.read(content_length) self._respond(200, extra_headers, body) elif path == "/unicode": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', '-1')) body = self.rfile.read(content_length) self._respond(200, extra_headers, body) elif path == "/json": content_type = self.headers.get('content-type', 'text/plain') if content_type != "application/json": self.error_Response("bad type: %s" % content_type) else: extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) self._respond(200, extra_headers, body) elif path == "/empty": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) if body == "": self._respond(200, extra_headers, "ok") else: self.error_Response() elif path == "/query": test = self.query.get("test", False) if test and test == "testing": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, "ok") else: self.error_Response() elif path == "/form": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) form = parse_qs(body) if form['a'] == ["a"] and form["b"] == ["b"]: self._respond(200, extra_headers, "ok") else: self.error_Response() elif path == "/multivalueform": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) form = parse_qs(body) if form['a'] == ["a", "c"] and form["b"] == ["b"]: self._respond(200, extra_headers, "ok") else: self.error_Response() elif path == "/multipart": ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) content_length = int(self.headers.get('Content-length', 0)) if ctype == 'multipart/form-data': req = cgi.parse_multipart(self.rfile, pdict) body = req['t'][0] extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, body) else: self.error_Response() elif path == "/multipart2": ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) content_length = int(self.headers.get('Content-length', 0)) if ctype == 'multipart/form-data': req = cgi.parse_multipart(self.rfile, pdict) f = req['f'][0] if not req['a'] == ['aa']: self.error_Response() if not req['b'] == ['bb','éàù@']: self.error_Response() extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, str(len(f))) else: self.error_Response() elif path == "/multipart3": ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) content_length = int(self.headers.get('Content-length', 0)) if ctype == 'multipart/form-data': req = cgi.parse_multipart(self.rfile, pdict) f = req['f'][0] if not req['a'] == ['aa']: self.error_Response() if not req['b'] == ['éàù@']: self.error_Response() extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, str(len(f))) else: self.error_Response() elif path == "/multipart4": ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) content_length = int(self.headers.get('Content-length', 0)) if ctype == 'multipart/form-data': req = cgi.parse_multipart(self.rfile, pdict) f = req['f'][0] if not req['a'] == ['aa']: self.error_Response() if not req['b'] == ['éàù@']: self.error_Response() extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, f) else: self.error_Response() elif path == "/1M": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-type', content_type)) content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) self._respond(200, extra_headers, str(len(body))) elif path == "/large": content_type = self.headers.get('content-type', 'text/plain') extra_headers.append(('Content-Type', content_type)) content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) extra_headers.append(('Content-Length', str(len(body)))) self._respond(200, extra_headers, body) elif path == "/list": content_length = int(self.headers.get('Content-length', 0)) body = self.rfile.read(content_length) extra_headers.append(('Content-Length', str(len(body)))) self._respond(200, extra_headers, body) elif path == "/chunked": te = (self.headers.get("transfer-encoding") == "chunked") if te: body = self.rfile.read(29) extra_headers.append(('Content-Length', "29")) self._respond(200, extra_headers, body) else: self.error_Response() else: self.error_Response('Bad path') do_PUT = do_POST def do_DELETE(self): if self.path == "/delete": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, '') else: self.error_Response() def do_HEAD(self): if self.path == "/ok": extra_headers = [('Content-type', 'text/plain')] self._respond(200, extra_headers, '') else: self.error_Response() def error_Response(self, message=None): req = [ ('HTTP method', self.command), ('path', self.path), ] if message: req.append(('message', message)) body_parts = ['Bad request:\r\n'] for k, v in req: body_parts.append(' %s: %s\r\n' % (k, v)) body = ''.join(body_parts) self._respond(400, [('Content-type', 'text/plain'), ('Content-Length', str(len(body)))], body) def _respond(self, http_code, extra_headers, body): self.send_response(http_code) keys = [] for k, v in extra_headers: self.send_header(k, v) keys.append(k) if body: body = to_bytestring(body) #if body and "Content-Length" not in keys: # self.send_header("Content-Length", len(body)) self.end_headers() self.wfile.write(body) self.wfile.close() def finish(self): if not self.wfile.closed: self.wfile.flush() self.wfile.close() self.rfile.close() server_thread = None def run_server_test(): global server_thread if server_thread is not None: return server = HTTPServer((HOST, PORT), HTTPTestHandler) server_thread = threading.Thread(target=server.serve_forever) server_thread.setDaemon(True) server_thread.start() restkit-4.2.2/tests/1M0000664000175000017500000400000012210071423015622 0ustar benoitcbenoitc00000000000000o z*΅Q#mep`2N,#Lfy΁0Y$[A'R+Y~E:DECdQk(1M^ hZV763 xk3D?QpklK۫)jNYŐ<0LKj[bg4[wNgnbU8SL`mFA }ZMo>y.E=ayOgeÔY1;Jq j]aC$}ۧ}'A&}B}2N0ySDs_#ho ѾE.1$]Fxƭ*z{kɧ9c%k|)=vF%UeEqƍNȊ":N]8OU5􈦘B\̍ .Lь,c}0g-sNÅ{ a=vaB+ݯ![iϩ8 J؏$=a\pS ^qT~\ LBv\#Xpo捿|~ꋘM]^[{Z?gj7w1AzL)&<*t^6`$̳y8p[G+c1򭳝\mYDD|VpR4R,ySg:MB02~w퐘o^ΠVE'7ﺴV"^`<ɹ {\Ly{v7j12T, M + ?R* IO;P$F8(#`ii^B3 E'"'( jx"r<kT (Eo^IRǼn?mZF$eR[G?ZN *} ivw-  ?3-6eoQӶ.50ae7B.( tnp][Twp-a2D_pzyʹF8ڴ0g)uOoV>z6-Hh@ '5;/丞Պ ͂Q ӯU`)q$lrmį;%b\d?q>'gP IڌŠ·sɯ *d%}_]G$o .E6xZ 0:vN.9MfoVkبbLn``Mχ6|j:f 6x|g=y&{(o0^寣AgͻzG6`V82{a2 ,CTtR5l5_| $AVE(vφxRv67߰y8P|fLicO9ٝhHd(蝤G^ʬu8O`3JKl4lxf@rs\N'j1 I;8|7^` ,߻d_4z{˗  ; 2AIJAb㑥 [z&PaCB;0aƹc_pcHU X{[עlM/s(i7+zGH?A<plKJk8. Y ơdʨau:,d&զ~tLa&'7т:)3ЦjH4 uhSJ;"q8|v`}ƕRӐH2 c[HnuOT<:@i#Ti} v=Nz'4oEQ4LP=R;XقwJ}+>37I2㥓Lw_ '1eSxq7RI@[X~EZEgX٦ ";mt8'^'dMuq!Bz bUq΢թ[!_s*JQr{LJ*#F^bB`rd%puPR=tUz `1,؃8g!ǁ(j]ϛ,>pr~) K>I? >8y+;U]|X_ݖ %N.'rr{NQ՝u3z@Ho{^]~U#'X79Ѐ%l ;UքWI NK09$N@Req W+x!Hc Mir1?XT?.F/+sC ڜ݉,jeQDL z>zo{W &>2g-4 9Ls_!`srM,b!%66FKB2[^Ѵ#j\c޷*`NzlfQIy]Rh 퇞(yM7A[-gKjHSO+߻+NLnaWP~[#\udF?ߊESI;)ul)6BB0k/jנr|EUKG#5- ކGӌ޶qSFQn7]@`|(V@25_RSB_8ڙE\:pׁ 7=l$D^Q~7k]?z.&%*Dp,<7)0L^4| R`YjEkz!7|H0;AyRcAG=-%pݣ?ogW.2-%5j a[Vgl_i#Z c|؈/* 8="@>"aBm qdن6`]7b]"vXP&,0Z3;gY$JV=!j";AZ/i$x3hefZp]+FaCbBLc4sF鹭4 kzgZ+>Ncs-^~dms㯤HU:&!z ?$OZ5 Prx~%G~C'>}R- ?I._:toy ՘;=uHu&iɀ|{dzhvvyd+ >ɳ(jm![#졳1|1MW I q>W+yEGGdE5>V\p0>ݦ֛ uevu<rԛ@AoJidø)? 1/=YرTқZ'=,v|\quS. ;bò@]ny˧:&bwǂM | [bL' `l+Fn3Yz za[ +BS6'1:ogpeMk滌qS?@)vOS_6_=NJ H"|(CT) n & we؄,qPf@L O=29Gulٺݪrƪ=c_B^ l̺U'&L yֳ@dٹ{oc3Ҍ8FC\1˰GHec̘WYwdM0b`$NM|POc=Q e(i^G>e2$U`QM*zUι{ ^ ,M3n ֆMl͘]lZ2en_?e]¢g*)4UHS E$eA!(>a݆z4,QnÝ5#!ɔ5ṰZIɐ^?TAǞdQtȕ$lӘ7Mg,ZZsY @ -Ch5 YU}I:;;LL`? mo4B"BL>)[rtMɭhBJ쫩1g=+F$,Jm"uC =S_;$I}FȐX}t9;vCr)fgG1N_ps䐀*@Q gY [/}#&&papF]Cj1x1z'yB7[]NgӷpsbbyJĥ };cQNTE)/Eq;7;IH8=X+aI!>D J&=i}"0ʽ5|Rqn6w6sKډ@YCf/W`nWH -d]>0RH Mј*8GmLoX>wʰ9.}Ej|8{Ďԫ2?m®": ǂgv7%4_ӈ?ˊwƥo7Ďa{" e)$d<&: .]$) V8=Jb_{=UΪ[#hs"}8df@5s% /*rwD&k>rs#/kQLsVj*T(1?Gay,kFq|CwhDw*h9?|%,<",vG uRlD"M÷`PO~zmݤzۅcY]2P-'#s-Nr@>KU;Sکl:׻BBPQ:Kbiex 95nIV< ,|5}r9n?4yGS謽,FAx|ɋUaEtqٷm6\'+ O:2:p r: p0G$ l![b8"lߞu1 FQ>l d=OS_tCK etM19fBl~CݐW9]#$)D~mZw?g8ai*%ٔ`8jo(U \6z/b_kz4LPN蘽*H?,y=CTqai z كһvcULv`ŅcKyS =}h-݂tI<(oï\q%u~N-GtEgvcp_?0X0(,A(h S ۝8"v`< q_z{B=E( pwZA|MpPam(8J#"2q_.\|%<~KmҍG| L O?aJ ȃZJ%?XHvS!w_`?<rmk7HWEr僬 ];v7њ> qw;|Hnn=nĬ4;ij΢3?E%@q|UMt]@+!?.p7urF&bb?2^ᴵbHܛ3yMhǣeʸG[(\͠ch˸Ħ,F 2]T#SHe^"RJ?=Z| gCKT>b!PF*.07a."V:3j=mձЈtP/,M[6jDc'J!T*g.hT}dl.VQ 8=7̅ݮ @$yvI>hJN7Gcg\ NxD2wC $14A۳4Jр @#F;'6P @O4rVpb}\ f݌QM֠L2EwXwv!v~.MQ/EoWּB7T5`Yƃ_b-;f)By m%]@L>@Z!j6cb.e(Ad;-Ɓl@d)4E쌔dECXEz=t ̄`$G 9͐_z׆CA -"a;k/E/mC]J`av68ܕKKQ^%xSpD-K:' nvܑ$pD8x]]{S]3Yl5d \e ՛Iac*Y#Mf0Z ,'b72 PdxtZ92䆶&.sL )s(dPlQ0}!}br 5\zt"Yz'qM329;^$L0MH/Y֊SzEtՕ?sK,t<B+T3pqaA()z >X ɼ&$MFB D[Kbi!0Ms 2L&V #!CecH;P7_,DTҺd9U2O ' 6O}qk^b(p6h~srxeȲ*}0Dv):d\WtЕ5٧dzZ.F^OqX,mGbVȥ誋 go󘚚`clwHB񪙜S]I8(xX||5E$]£ )H(e3Rqqޫ&=ȸz Q4 xQ[5j\ʋAWy~@P/VX|V%JY)wl}JȺثo* C28 fsB B{+Դ ['gyy^z!@rR( // ym@:k;5,F4{ȇZкyE]=Q^հh饽wJaY¤,vM$l.+pRI\l(`o%`Ч:7+6D?븧TLf]h㫃Ӎ˕fU(WiDZYى11<\5u bÀ.i変/jM]͟ x0'Uyװaf3l j:ݏ_%LـBA\0_xwN V73Vg4 HHF jJ3x,c[h-z+$2f)S3"qk$u͡opÝ/։<("OSuB M;b]7g CmR{2 t ţ0h=*Vsul0rk_t_bzwx znTf`rz/w54A"沭ܦ8 CWF]viŸ8ϴUUMJ ؇ `HC,ןFVVZ-7ypkپ`/TFHeo. r`’&y=|--Qa?O!i7nim4aTxEI9."{tܕ6 QJ۰wnsCbBTBKot̓MHpXjw 0%ڽ6' c%esPnzV#b٥Ck -xs9YO[cPZrs!ߝk[Q'뿨U)3ٮ8~&~fDX4/Ϡ->զ4܆vg v~%~B#5&I9gM_jvQ$JuטuCS+%O.7T‚q"])ҵHZ I?Ì-=DAF&E2LUm]v,읁 %xdxUK@{}1@uM>b!E{_R])?MO'3X}@6ô f'r*, ;DDZG%Eec.2 c,Zze2XR [$Ee6xȐ1!:)K-F}mZ+z;kOmt( !Z߬G&ce"n#~q'EDD9xt@Dx!u{Ы@i7-GڄkZѾbJQ qQHVc@__ӯůeG9@oh2/vN!;ϖ8t2*rs+aʣCli˝PFoȅ&M]dqar{Mץ\4ʲy1"goګZ*4d5Д$wH=kbny^&j` X%a%4Vڴ%$( 1-zJ8_*&k /;||(& l#ѼTX&w[H_hq)(Ϗ16J>)6+%鬧Hh]-모(9YZNb.@n&$VkKrS&}9ԚqjMT2-`R ѽ3[!y qbÇ {%_%M#TwqSbpf7zScn}qļ"w1 3#aߢ7Y*.:FuU o?YF?{St=8gդJ㫏[iCf ./_tp(fxe0))}𱄱F5V"\X5O)e?ZG*&,w.>'sv'=3 920W}3vN$a*_ɚثVS[{d82*s4*mWS_`&*Q^K^Bwx|"+S}ʏ1(貆f།ZK`ʸcUu̟ NF*ܒ`v{f]e?%']â`[B1wE&ܨxPc2-:9y(W jWQ Nt>ǭYHHi0GYS+Ńe k)-}h g14ʘXkThVU : $k ۡ@H22N,ŕ8e1CwhOt/l3~C0 ;l8G(,,JǟxTMwPmeT8KE nX >i|esoEyNy䐕yƑXnMiĦ?9&QctqcYL"H<ӉU O}%Y—],Ȣmň3R#NTXmDl;bi g#p˹羅2ԪLQ-#}ph`)WMQ{룎xVV將k]kc.LK?^gRJw%S0`:%a ^ȠspL"aE8yط4wC+\ݢpFp±{Ĩ˯jCgX$vd K/cm]u/B ò==!5.1i m澙^ȂЀ 0/IHoUA=wOntl>~Q60uf3Ȓ) ǽ`=;4srda#u)}/`sBMcJ[bjdS޷C/▋ICe02Ԥ8`!-ؚwdu de]cS-=tÇx꙰i*qp#ƚC9yO>ݫ$Ƅ0Sᘞ#[.!剀C ʽp#2b,8Q pvvLx(ϙ}o*x$`~Yc ^Ό뵙7#$ _<%ZZ5iEY 5:)St)U,PA^ط5gǜ͇>I،sDsh*`Y ]7(kŔPqQ]bb-0MbP][ G7yl8R;7Ĺ*bJOma -{$MLDX>KyNZ?CEMylB8E^`cimU.XQi .Aʫϋ:|M`&fxZMCFMOƋ BT$Ob▫D&JO[g4JׅR#|l 6pD8+$[{ugSsh2M^z7=ÞqǗtgZ4/(ᥝuҮx]VFB; Q3Qeۇ26Mi@Y@I2w!~azM&K6:- W[mY߆PGlN][zeWv{ot9S3幬D|KgY|ЫƗ@vQگ:e48\සJ4;ˉ/vӎHvbz3PQ`9@ QZ"N6.ޮCsxD|%% i0*HF ,X7) ,g:1S|Óc:P쭟vﵡ`XE{WqkBo6}9b2=`uxrRVwbUpU!aǝ Um״$b2-̿0U1.29 9afOH3Miw͎\ZBGk׳RVH(GӐFx7OۊC aP]Ym3__]=:~_)2Gӎ׵RzT~/?>D}͆neJ?qDF`2`,⥓o -tq&&+6լh/UBxR{|)1&LY7;}g͢2o_)&G` v@ ߊF޶ 0f5Y՜}FjQ tRp_݁F,ln2yY44rJ/]qSk&O̴bg} |寇ZQ@&C[d9@|lqct(eD?V;nk7c<|Nt Lz'RrTA*\Q=nK8Y[l =@F|u|k|IHճ Gjz9=?^U)GD+n2nqz :52-BzՎWR1]`L|vZ˦R엖p>>BX#+`d~h1u]<)Dd(T l4"zNY!迯1Vh9\]ѓOPW o6ļk?raךjH%9ꊒ6p1_nLvAҌ)Lju@)HOf\ /%`REݠۖ>q dz6UOSvF]@ŻX{sJ]9BD,c |Vжg3= ]?nU*5u 7,%TT'-3o?4X.<3ݷE Jcgٓ#l Ef(F-D+VVӠ3FNg -4L!y"2տ(J8ْj13-U,L)|a~^&aAOm>I-H*ކv8ǹW!Ҷۥm26|޽Rۏaya0 \r{R  WPֆNn߅Pu\{0fu.‹hժNqdN!88S h1rJ7>c&m;g 4n)kqqM/j`2nr ""l_" o"E,'7LJ1Lv/;hRNb [t`+gT'H$@c(.̣U _Wec:=3tF7=`BfIX/z[,%X-Mb|k+" NP[_zM/@Xfl׹6`OFZۅ}&Ѩ%",}k`|!Y" OPPOOeߞфDܓPN` -oKhdL0# =ZCdiu\|in=32ASB:TWT&>=uh3.Ġ00#;X&7X A j¹6{L?Gp #i[L_{dl (yy[ӲP;)+1BtURA!#&<iʂ+r׮ǥyB>[㻺d9hHŦܭ>Ĥo*mk׉iE?z aB/#v7*8ɼ6'1{!b6\&ryh;*X{(g`<-nO6`&3a:@öքllڕkueͺHo-v^4M['G3 H-Ij6H* n7];FS }9Bڝ{s@ڎ`h&ܭ\dWSZj%)κckΪ2c%)^b7dt02k80o?65El"Mҝxp>.\Uj! 9,<)X~E!=8`xd'㩦:nvBXY4ҵǩ\/i7ǚzػ4uYNĔB$vjpf\5fn}i0 뻱B!SgQ,,·~ho*WzX˙Th"gl⚁#ݠ+5S6IBl B_݁b3) ^jNjɺx Nbk&0zr N,ʠj1 #v.A3Q1-.sVE\2k"8%6&Ր) !y_z DaTdS7%?FfT٭!?~?c}Pƌmh"^iѶ[V߯'h_³`2Y=fv1iSXհ#GӰ%\i*HW_^q*H^2]]y6lpC֩EО^븼,Yj]9QTD,C:d|V3`WQQYeW=v^Hrxf%Ҽwip t^ޯ c5s6CUƅC4C?M$:zמt@i UZu`R촍yq4VޖL8y/-ovո<<'hD^g%I]q:):' 9BUM=g*fr橕JBʻEe[{!DT27N+ Q'#)8h˹]w GY"O &u(s80g*yUib,,q*xtS!xH' r0֨6+?4v3'Ӎ5:F[+JkU%Ыwm0GL:e?;@vU`Jw '-紶d%L9jDD07`M=X4z]LVJC n42eR2jMuaQa`[K6*Vyy{s5R n+&ye8'3D;ϗ& 2*qd(wWyWgz- caYY8]:0Lnx29fU>WV9cĀ4.;!WRpU RS/ҋuK{2|p0\k94-9d, 7:ߢ`*w4.}B3gF4Mew _Tܱ'U0꺳} qQg@[@j׆?ҹUAW2"0TLFIUaV񙰛 킓h.GG3l@B)oC?=dص/Ă[1O&3 ;BkYt95n%HwOJZĝ?=DU)ҟp!P}j$1\t^gŔCIJ"Ǔ}Y|ZuPG)ժ":ޡ%EީLR+75|BEr390B[@ϲXs2|YW*74*M֌"}m1R;}N[ռ;+ +$ #>F +[.["n'J[̔g+UkL?!sDW?l$ 48\\㸮myNWZ(cfUؕ5@ǿDӈ21P>Xn .jB՟Y#Yh4eqM~8_"IS r4ZJa@ "%YV$oQsLQ b*)t+\}a8V`k1}p'eZgzU3">+IjTbPX16UGƟW%z{uXuIҪ08v*ϳ2;AulڲHC#)I@a!9|C%ڭX9:p 8Kw O&4n#yJ$˒cH#+R<8& $ǘeOxl0dKE B?${ m$ FR YQA>p%0FtP~ZS}"Y=n|B]Syh(aPTgJ}ZVF7&ѐM[qV[z:Pbw[VLGC,VIFcK(s ƫ?Q =(Rֻ qOD%H?\P:钡|u1q.n  a#F#?Wa+ʚ@J'vOgKA z[fibx(Kg86 28H`_ ɳ$GZ oJG[~R9Y 5H1.A.]_żFʫ9m2C8lj=NSVcH+E%Gk 6}U{}y{sXaK@a&o},g8\oenVe55#jdVhS*Hݱ(hoQfٌw S&x^5/9" }xռ2H@c6N>l7Pꇾ߾,E1cV?6h٫\@k]42 kte,IV`'i^s3m݋i4!u` bFv^UxNkRbDqZIf{A7 .c.n{ϻBM1 =qArV\;Z[3ޟ>;`+[/ \ǍQ1rߵ~]ei%ջGn7v.^4 {G !xu>)qܹZᚉȐ;Gd ;Ewa'9m>OH@Q;vBLt*9o8]2Mo/]X]c1|73'FZ938`$s>poO@xDVF& ԔIUDza!ty9`62 a?trs5)z›YR/R-†e!IE%-|Lˈ^F._NE@*XgolG@%C@r uTj\OEay 7T9lME!JhFl|+V%8tr7V*<;C"׮ǼD;b.'DS|=-}a'iB9d© TLN_Gfv@Uh1U"IZDzU}*hYF> &]nS܎h:!P \e p،zƛ%ʱQP30XgE |4C=)YZص'Uh Fu|&[(Zg16u?)(]E7! BT-BJqcqqhxCBYe ޷?ssr7BTA70w@AՙRtfK*3BJsYkgQ)a(t(do%+iYˀ5Ͼ˥y>GǸQ:K5{KVY5#/x("qǘ6Dzd0X[tǖx \ktE@zoH1j`$ٓwv/l'H Xd懄Nj:|3ƪPӍԬ\d^aKi i&g^_\DURa 3izN=Jd=_H- 9fa+2bHғt}d.D`j/8E)ǀl74}S &)bnYeIvD[V<wB rX> l/??[?ܢ+@M"+%1O'Mc5)_ }dU9f]'KAo֩&%N?LC  ^.!wǓ%Az)z!ߞ*5͙# Ё`FK ? ~۔Y{"ͧb%a:tu{GU&&J#I_>O-_O8>ANaAnW#Dzyq^O1^D8c)5V;s'5&/Kbޝyn%c'ٳ@l.G^DxL.'ϨA32XwSx Amҭ@-$ oW#yίЖGu8)ewnM)_:#-Ǻ8jq g$L"3]+ȈyPN0lxɟȭbZ2tW DþcARF01w] +D/$6Xz@nG ))^FUxeD ~Voӣ9)^<ܝt4:NZ*YghCA~jOʹIU`Ms-O0Q1 c .2mv,'K,~z_{fa#Δí+k: #a&鼊jDɂ`;cv (5e}K#h:?`[$=劧muĽSiQV]%SskⲌ (Mj/a9-M3uN"\Ҫ1oi B'Udńtd'^Rmvp##NkVܹi>bk<>m3`[L6`ш Q-7\1s3T]K"gyk0:׳/B?h@Rv>i,9YmSNZe@-W#7f>gmR}.m"DIKĐMwT:6]_o4B Hl C6H'8hnHINj}}'1;nSD.N~5T~:R}el iqs;}D+cW&gw@ta'Dj@?ݶ gŦvz2Mʚ)]*5]ʃdJIg2'.c>bo5l]Dv `a+>.3[9ߺ,?jh$zǾ<2Lp2ńjן}u\N]EzBUHmfgZN;(GBә(T۴sA8NcJ @ j;0`1)85  Lx ]W L VX$- eJ{S2 ! 13,9v F肄R;Hа.8!_?IJvYB -OkDzc2ukc!aoL. Vx,_z}#h|[zr8Q.<8[#} A\*ߚvƮ qi6Z-\yaS[م "^84uגHCsV: UTaZ"=z K' VQƤcFthUiQDs|]|zܗ-c98єLE Qˣes?mpL(uלE Fwdnq.H~h;==* `,1-&)HH;KhFm!"W*vyLǘjchelf@nST+:4F{g˯}s R֐MLZJվ:QSjN1);\T<6TRdc[qW/q(Dbf - _Ҫz&x1gWUy;8/3sBYMS)YUG/1c-t˜ Y%$oՕyqf#VIʋHd*Ό(y%(ؒ#fF[n[<QU-uJ<<=zGaGjQ"Sp*]Q u@fȝl džYTE(rˌӖ/n2wCbט19v[2!qZ|60zIeJt ;.I bdTRmFO~;vaXr2ri_H#/v~Eo75@Q:X3 {M]|;#?Aa}ioCZP5QVRyK?u|ϋ.X$mFI4ŘRDØ# ȘBDqTx 8y4:_+Ф]xCc v0@8J,5@KYKc>>UU>WBx 㦢EĹ#ki\/szmXvAJ˒mxaS$ (\E$|H][ZPD%E޲4AMdxG_,y+Zodb8#q}oX 6[mf +ZO0.6gmHf[K3ΫTTNB M&chծ}aQMB }e"< C R0\d5AUHe9d_r p~j%ښ(`Y^}y.o HeMf2[:;Ms) @%gWF^'tB?,Y)hSiX#x48|T-?JcI8Qʬob`P~Cz< 7l#N 9L*0AovEomgK\|>#^ɉ! X|0%vzu%[zc1b qM2ǙmV-B5ZaP7nQfYaogHnS(ՉdʨCq.O^/1J ldR\4~jWL6PʦtJ3;zo>͋Q}c2niD+_€ƥ4u4Amw FM ^hSk_u}0!H ˨̋&sN=iO5]PGgSl3nH@_);fi-Utjfڊ 0l Q*i?^[7uqEN?D~M\S_])ϗHBfnÇ("-V߳>WƩ4 6]٦45 ((UTm): $G,ٶY/.8Nh8& G]GӸLܜ>ݲ.NĢUyiS4gpT>8؟|Д5)e=$@ @nI36I~b-"C +gvͤd$ lNP ̀>/ݱEҗs~B?$)߳'ĒwS1@Mj6hMNs3Qx{m QuxLU*ib80x*lz1Hn5vu0&ܷeCKVUrr](f&ϬzQ jfeA}͉jTR|wu$n)5,l}Tl rQqdR*[$+^56$NM~1vv\BѭZOHƱ%ǸjŁk_֮utwRMeJZ[ٜ "kVLqnXY1!6gom.J[(`IC%R5Kliie:W Ũ%dҦ5VmDY-UG;q!+XgEѝ}P!ޓ7ϗpy ئ,Mի"_} :kjbb'/q`MH0*pAW2v'bh />s[)P,371Jm1x 'c_)A}Ogu$ G[x4hbZ/3!Vic*ܳtsij&`P 2 O)O^iZÐ`T@Q+/7^IK}v`l[BJJ$Xb[6-cP*5} ϧOWzF4uܣ3"Ȗ<U8 MLa;1n8"GJtP׷H3nXw,2_ ;5oبtO =7\Ƽz}hOױ݄`=[s&7^V[[塏,j?:${٣FiB6O)bpF+ &ܔZw/z* ]s[z5YT[GV\p'5ݤ;,ttoX9ju9Sc3Ws,-=,yp9O(sBĘ9~oTdt-c)h(z (oQd XzJ:_zI/Q: ah2ou|=FU m^D`Pp]x۴a# _Kw 7a8"!NbE4ikP^-r@ѵ𸥾˿Oc ;T㯘WpvBvdv1>ʻnhvjNҘOmһ|v,O(WŅ .eUT f$Or6!UycEA9&x2&X3pۅsX ~?1 a"\lPpDD,-2:}wo21g"`v>8ڊ1CSiY%:8In `#UdЖ=LY AIkj׽G5(>úcYo5N@`G?G[> Ť8Vݚ/Aѕ+/lEdͅ2*&r%hP2;:RzR%hq#E\|n |)~Xb4`],hc,Z'4ۤ,KW@tKPk]*JyZ57PM &@KK7kՔ=jH,~ĴD>B@Ү"aptj .h`1q:!%AIS`Be'50mޘ:+4 \MpԆl)" atٵH 9Qq~9\cCA"ʛAiAK劜ԅn#_my0@nln*dRrPJg?,>WǚI`YC<Ő1i|jB+d^y4!gߺ=W_w&dp?3uVGǵY\>B &}"ێ R)u3/m| ݲڽզ A*6fʾUs ΒkLâ߿p#jcډ]WJ,7k戍YbP2UYb0%bO?{ ɤլNKVΊHzww8@=|= atvLge'.)#U2i[Bws0\fxfS޾xaᅫ/wJ%{30q"岳Hpk.f548ih($X$)QŚ0I7 y6#zJQfw.^hgk7ErDB*Di!6،xmGU|5fU]/k bTOM;j Q.ckV3NpU3R~¢׮\V[/kJ;`}J`-(BKLx haoN;%4p@S>"h u [ C9h@|wI&PzCF(3Z1uFԻu5|B-D\)W9R꒥ZxI\L5Z\ +ޖLv$i?6a ꟔NSgOhğL$ #s2'y%0uyaހ+옜A,`Yl <=q؊y@j;f -c31ľ\Zt  zbRy )yAϹUDM7fJҢ!WllG,4B+~sPW;.i=uIF<HP|jX74= [{Vށ$/T|?!j%$$܇Ĺ7e6y2f9y3|.'QuFM$TAتV)e*.|ieM(mE6Qؕ\D~Vg,2@#yqyZ\{].Ul +˨_86Iؼҡc53|1W((YD XrE !1N:94l/A5=0\sY(]'up~&a|tL~Z?P=ckJ$%9a%;jf?ЍZ]~C}8i9 X=OG)-0ՒOU'F?M/V Bwy "4*D;ʛ9 HuBQ 0 quIǪC08+ +^ط9A$DNѕ>"lƮ{) a-lqbhfD` lhCp]Ρ(<\(| ODFKLiMi=Js/wd=NPmk# 0VNl~VඅT[ml)ZO?hMz簁!1xyeZJJF܍W ^~A(i.$*i'M/N̎N a=w,a{Z|5SU{+C);HDL@Q0U?iZ~F(1҂,}L2o%5CДSQ18;7m?p+TPIaSI޾ޤ+YP<>\Zގaߪj[DJvr *ہ'X&Oi{U]@3/4@;n<ځp;˱|ŏH:~l$%8]7<N[TR,>lAdWHVjZ0@2Ŝ&g2B3Zۺ լ-&$jZv}Ʊ\gQ$;pd)Ѧ:\,=̈ YajMun&sncm1!ÝfedFPUPti>Tдd2֥Ѕߞ/ڵ!@)1]&fz7LVKFM}XN Ԃ@VBv% 6,A VEcSTn?2tfC~5fcɁ4F)ޒ:^Sƴ9E@Q0_}s;dKlkZiS&ԠZѷ-Jʼ_{AQoKzJ7K >'6A,5H,hs5r40uSL E<-i ڥ&mv8 /^Wm^6}Ҕ"3ϊôtTCyʄʵ̻Uj,ECc3 ?`Am}^n-6Úk4[,}֗#6u'\߬Mu,Qc?*~gCs|0ˆMA^: H' !"slj}|Y­v V@K52XrĿ>=w=Χ5G,;R$1<+D)H8ڮ`8Y* UgVNgB%PؠH^ VK90jFVЌ[pA )ZjkRijTŖ#؍{`}BiZXHa2WZMhbՎF kS,[̭w6BBfW! hqŋOpQ3Цr<;|I%MM;NYE**{,|GK3Eԋ!N׋h4H˾jx1i>v`E4ZiTugdGt{~NlLBgh橿2ML 5t MGMDz0TGCX/bt-olko0Lנ|Lj$W s[/  6rj%“K%MTԐH czQo<1xtCy凄Fkx5J8iM :0]$8,#q@cXjX9VGRS_ h;VׂJ(=p|0(oy}?lhyfбR\ nlѥBS.q6Ǚ޵bB h}44|ٟؔ:u#\iby. h<0SD[O:C_~ګv;=&bK0gV,;7CMp7rObk=~5B2n΍OhP|l T T04w={aHEZW/=b/zfb#= 7#7liO3$"Kf-pf !Yދ6ygfq낏,)_G`o=#rú >K)Vʇ<0&MB$+Uf/1ki`5oC)XL"O*;!1٠Òns@юMg|.Xr 0`<3YWkcp[< S" C&׀\%"yڬ9Cl(%,Q,0v2}t8K-umϩ<:3M:ïbQµ@olR+Ba$o%NHނf(doҴ=;Nv7W_Erk׸{kJpcv .؝RU;V15[CFH٫VM:r=O誟Pk-a+($x* e!5uA4ޠ0Dh>o2VF. M;Mv 󇐜vi̞oYf c:}YҨl/zwޱg ~r74X&[aūgwOc$f7s (\n3 M=,!E vAgO#s15e i [`t&HD]G%֮lvQ0-v#n߯փ0W|Ǜv Z [,˳Vk4떌b%%Ft;Wny}![LʰA7^ F(d+92 XXZeOZ֙vt֫i+ ~2x(TȑºGD'? _ׯ鸱:?v3%HVvO&M$[!A2_mrEZYo'QM 2arWvu:}?Olh)< [K;FVlmq\ztIq&#wƊFW|c{eV9Ӯ^=#Xd}S6sMSmSv99JG.?fY映izku)I<|޺qT^!',eE6~k"$8bBUX RΗ TMW51Ȯ3j#S\V`CMJ`1 5^&0Ķ&O/ KcS"jz릤F[xJ)n#ݩ\_va('ͣ׭.ni/3ɍLjQ  p@J-OPmX>KXҢ<#* *o$?[ICb1Ex,X@1os.UJ'B8Y#MzRn(83xw[笯_E۵U%~$l^EobTAzЖYL$5[58f-)HȷUOvCNͯFhQ ) qHA At2$3z<Zjp@$FJ6._\/G<&D0mAQ^dD˥ iq"ZsvMEϓ=lCcx Pn՟6k}tn\VӄiEVr=9E*+,hܖLe1fKn5Ef +$ŸS"ns-~U&^Be7I*hcV&RK˺b2*̖A)=ʲL 2'M@d9r1Wnم 3I_JnP%d-&Uq!뿜-Yv 4 =E ~hwe[KQϮy svyd8&E:r:՚*=0fT!cc1 r~+ڬRohв]ZDm+TiqV/!%22h3g7΍IU2.R ~*Ӄs@WL5Eg7\q|#ZiEV/A.w0&4%FzٯKiB8n]a=B`(IwVd7I{A8H3eUo҄%WX*c,d♌gT'PH6&~6k&1px,M{fx]v+6f?Z.VHɀrMTogP߯!d5㇖eJCoZߘx]zw,Y{뺆YV΢UA&ճ,G\ j9L.M|ෘD/ M 4xJ,cTv)@Kl8dAݠhu‣\*ebnM3dqLݍ ZWq|dM s%\` zj=.!ĬIOQ=݉ xO$i>]tCKqUϳ[{dgPOK)>QPY[iw7)~+s9 0`2"N/ҿt wX:jĭߴY 6MgW[&X>N#D4TzF~*2A4@I {x"f3+Wϸ;ʨ.Le]NtAn-9z.kRcvvwygéWQ%ׇjTz18psL5_5gp5H)[E"Fߒ H*o=@ljC$ע;Ȥ5IPŁ2R!}Rc'SLVeI65<)oDmg *E{dtO#tp f[ѓ޵Po(3x N-圖N13(h)6>7sC]̴o U)#f^2qhR|co` C)6HČim:t^xݢ9f'M~Dn'T@|ۏY ej~uj:o aG1J߶&zrmBY4 ;>ZnV2rψ\kV_C,tuzOРDo/!5[4dP_~$qoj-ױك8bL>Зս"YM;ĭ\`:Z#aZ8mR-Ӽjei,_q6lzFLBՀfB~ &VTC'^)տtN_pVUd ˔DD.aZi6p,'P2x9I{Gb [KB_yO~Qy>>%CAQYI'l#REE.ژ,X[4{]>T ~#0(FE s VZ %>+S\c>)L4YO}LJ *ǩADfl*OU+^ Tt~=JCf8zi#FZԚj9ܳ"S p"曐\s{j[4%Ly7ep@~6-?"9: 5صe[OJXcf,{o-ׄe+TwOTw] \*_3bOӖ/صhӛ6^vթz$5Npm5ɣQzHӪ`Ƃj~W$0;xy)bXw#q4M-/ y*x#G UW\XۛJ;=[%47ay Ɖɦk@y27/]V3y䰠󳲅~}y)U"sN1tKxksL5]x&EL{̙7Q$MbKQi[?Ib Z2"/asWY͏ԻB6T{a\'9r dVwq|>W(KR*`,Ag1'Kg ;RzPStyS4>f/7$O!6N잳+;/!5PבW;Y:r>?4؍6D7 qL,N1 mhN 2 iu!Z?ύ|sd1uk[.xf"\m4̀uEٰl] K;eWֵrwxWp3m->xmp- ϋ^Px%ՍJ.kҝ}!BaY~ݠOszoBA͕Ud{iiş_JxmY'5 sF 0vOI풺(:94^^6yMjEh7[1?H-⫟>63Nݛү9:c쨅cҼ|@{gN=R#^>Y*yPLKnV%Kgj3 >4 dbsW#%<ᑖbD3Fxi8.td_3Wޙ`"q\zǫԉ6m4xv+h!mm8l}(,\3܌Q;n RS=% GR_0wjBbY39ɀ BӀ[$/5d ,;7'u}`H;1/WtVxy ]/JL-QKp#Ck٫G‡t (AC;c8"$2d}EmŠH ='A$@*M{Emi_Xx#P soy5>B?Xcy&ph 6Q FhnllFEiiJ# =@̖~ ®8S_]`+ I$(hbL;/QP#5Fd@OW??C яv?k/<&Y'wd.&{P8 G0Ǚu(9(Le(S>s5k ܽ_F|Bͥt] &ݲ1jwmOȚ`ZdB2o #8;GKڎLnբz+z3·#TL5 v2`ZB4KGZS3< nʍq 6\N@Ć{ zթN+"֑;NOu/Bge\>hlgA'x0""Wdk_bf,ڣSޞ$T,oXD;932ӲRm1 * JUwpŦ,pB{X1Z%RȞ|s{4Qi2CR~1(|T#=a{MK",{S`ɬp$`n_C&T#9MbJ>,SvVW2(9< YY@[+;_QM@=0QrBZ>x+`r> p0`&9i2Ka9s@D?0bfb% =;>шlSJZhG=jGj ؄\o8:x6RL[^M}%'S`ip_+3\/%xOW(Z'Xtc)W>/9'koq,C]$ɞ&"nKl>}SK|Ngm)\; rĞ9>Q9c=>fhPŎZMF}: P$wd !x'2X_^ZGD Ӿwtf䀈2ޮśg|-џrDjy#0C;TxiʛfbF]2i-}nD-4A9KKf!a{W(s:1ną+`1Cs:D>hG 14M>A0cPw(%d;ZA2d 2So|+pL$+.(ޡ%"FC 8fT`Qa$[_kwѺf=՝v-Kv͸'iPwH{9S* /8qWsnyoVm3 =9F+6۝L ;BRm`5#1h#ɂƖt*HqzwyuӞc|.U5Kv/B&+LO}-8|scmqY*aô\`"N ڨc,a a 5m ;h>OO9H@PLc4Nv(XfBOLĝW1TaBD YꡡذqqM_xP Ei_a=Z3!.ydդp%~U..S#{$gmY4ݒR"ATgDу1 5Ƕg' f(@mW2żm4GP,}ӛtKm Ŵ,Ġ$:oC dgB/C|B6&P{_C?w?). QdcO Kh')b9s2 %t܇ߋgG~HQHuktȕd*6Qu,}98f}!DVLȔ#g<:Y }m\>C[zԀIJzC E2۴xÉg,hi1Г:%#:"D"2g)5niI|1Ÿ) 4 Ց0r5XԹBV ϰ8w p&ο}-:TVax\ ^s|G&ˮOO>`Rww/1cxIcW*!wU婾#*a;z"TSO.^H(A_>,Q:/XWo 3wO3LnYVBb *.^aF7"/-JKGǁF&OݪjW*`QqM\Ukpk%BXբ)w`:CLP4+ QjAP.$irfI\{m; }֥!w즦wYC:Wi,paƒ2яihCgC@zCq6ҳXnhC̝3P&Z*$٩OW[)r) I+LZ = EN^C=}fnmֈN=0 n L'8Jkն(W4M?p>G? wU M}]mNJ;/<&A x}ĺVE]Fb8xiU2X!,NA2ʆHP#zƧt[V:_>TsXBB!۷aOIP_k ,=} r鹏')Zxx2)#U9I~t0 'nohظN%M)[ATY* dqܘ7%WV7,Ӡ9,;^iqe,h 9bָ PIBCUDstC!gie\OR8jF@BfA_5DV@A!duYRh;*s%Gڵh]_tam|;-Toٙ3BMU+Ir{(Q `ڐ'H8/6vhJ[ 'Y]БP^u#B\!6-8ǡ:+!Kveo, '! aT$FPb3wcu1yn7]wC&E ,=sh ;X&^/0eWh_k$rd Lh\Hp,FϨ>=:q#bW!3hD+O)V$lKтᥣ7'O3uo1}#>%+ #]OU'pC:=i{P&Gwz&.'lՋn[&"cCÊPB(`WC\FIC PHFIPuVhBmg<ںHIWj@>+OBjub,J>!><ʻԹ[Zߍ;ኙ;^k%p*k:ャMʭG_ViQeﱓ$Ha=Y~mku:oJCIsw.%HsPUH)5 R/! av&^=^k.Kk=g& A%7?&>4b]d( |Ia龁i&omOm4S VhSn> `!⇒1b8@qcBj-wD]~/? %z6Z^'.s9b΄l:|XQ;EiAti0Gʵ)G:ۡR!P'@&|mBe,le t/~TSeȣ;ӫI~AkV1W ЅҜ/y0Z2E}$A0UFQۣ)ֆtB3|N8 QIY!,BpScGWʈ&e̶`6ZFkqո!v f"+^)'.rbr}~, Z=R*s+lcHTX|t%1oicNiLiR&Zt }Ҿ5AysOT,Pcer!&#Jwe*oܸD(.`$s0Cg$S cՏiv鏸dK/@Mdܓ#K4!!!\c4"#,GGo*>zԎa_2܋EaBqOvp0"W~Lyg#!gf- !͘8Y5. /G 4bNN{~>XC>)#]jLaDRUCu҂H 5ॠTYICnSluƛP~mL =2[zx7&I;Cq{g/!<@*g\FNxJ0.+w)a+*|:i@a Uc߶0َ6`.nYn &,2fWzZe8IcXMc҄g).M1`%nՠlƜq8ٺ>j NX'CR iY]yE=+gISU'׏16> dLy!"JXxT]v[l&e!j"ߠaH]Xz!Vlq:{+Qm4.aZnKɯp4E֠15?{nXqN(:MB!K-;-7\ds-AJ\a.F2K rj Wm|Gũ۔)ɞvOn# /Xg*L#e:ժFF*a+NH3w2 sm+KBj?21WP#M[` MkW [\He&:]I*["TxF 5\%:Ŀ*ۯJGO(-=`rJ”pUG&M.G҉Cׅ%pUD>Fэa,n{O3bbz- HЗn)z'*fhxnvV83ulObƿmV/"q/2`Id67a' "H#D"^ox~iS{cڌd-`qKRQ @VhΙ cL45=5bFTʼM+԰q+ya3NPBy}gXbOD\S0)ZBAY"A;&?蓝O~ʊi/K/E |w‚t?PYޝ]JO$0xM}}h1<0@|@pEv ynO46)׵1gݚtZfg:iie5Җ]h!1t={ 0I=&(FG5tzg`lMU2Tdb D"p쇫7G*|l֮-.66_Dˎ.5j4ή&JN&0ʳ%FN}4Lyb+Xˢ(&oȝZn%:1w"$ aK T7 (UvM~lu;1EOgP; `CS6>/B#Th Mɨ(*HFQwb0TƶYiEY}S9[bX֌͜fb Q;XEa$cl2],[z*>)CԊµ{CB?%'-@S3ⰱ~3C-'+I9K:V١: MI9kFķ"_(Nێ\>p jP5Fк0gD};4z5lkTC|}4<=dDq5L((+R. ]`۪D4Lr ׍09![]J= Iղ-&)'<(Xؘ+UQ+H1X)wp>໑ svf,H348a 1`|?V%]o% '* l&g cX~oDW 95u+輘P Lcƞ0iUMo}VɲFdvmӹW[,~NZƊd+6@$ %r0s I rPb$A="mڴaS{9Y^p{K Iˤݾp[_2 de2vq]re4k5QCT,=JNn]!Dz@SRLc )/J K:ڿזV^>}:`e*  JבG:c3B].nyWlЄ_-DY'%C'3fbg>^ȠCrT9^20y޷n39/%i`ߡjN4KJO^ }r!:(\ }νGR8M%Ӭo pwpPjvQ9Xo&k4;S O@%:w4Bb' <BpbǾOu/.V,1 n;jnQ)$wNQ(m8:ߎdlzk߉/*J&Gֶ p"-w?]:'W 7 5؟ %^0DR/H5mdofU5xUnvGJaoȳ隌e$qihSԈ~ؔ:q^,{\r!>9m>n;pldI/͵! A&fSg=dPpP)Hng&5pL7Պ2S9:"-A" >&4unl>7s}c&χ"f~31૓{`2a7~=hW⌙R k ' Eybsؾzޝq RyiwpB? b3=r S-UdXM_ ,{߆Ӛ<<;H!` EáJGЎuHNI2VNG R.YbA9ccTze\s)>mV{ww!ؗE?%< | ZaYS"J|34̹C]L9*-!:;e,O_oGm_FNg3D"6]<=3 G]vKJ3-#co%yv-֣fCCs.o Tnȕ֋aLU0e`$vׁpV=H!IEo0z0PO콸@rlBRD@{ӮKOhOŲo>IFq9P+^nj@$/X4xmkM?9gŵf(I)PK=A"Br x-y*k=֞in4awNVK>Έ2v1 phͨl\:s0 w-#o:CJmC猄z` w[٬Lzj\qnY=w6!Sc/BlMghe/N'85Y)c*3/v(+{ry).rN4x_^$ܚW_;E% Y7Ps'k%PEF[2CٶlRx~fp;1Kimw+ y$0uzrkr`oւ2gv2[vƚ_ AyrZw[v~S3N. ~{BEqp8߻*d@iOGAu{][+ɝOītw3>б{ RȐ΋ wc+!cjpaYKP>o@:Nքcy#/vi}E8d5]}=h9ɉ(u vYBR7?4.2+&_3oZ]S-S!A,7IjNX̨!VjeM̾]RLP?\^^:lk.;ՈK">̖\^ޘH4ѐfpZ McAX//axvY= h! boSلdq?)\?jZ?,Xωm^ZP< PU HSx":C ʞ IDRFUܓܘũN$,b +85#C% &+EYN?_b%ft"\y8eϪZt#[V I&EXcb$ mиi(>U&WߴP`a{CB էЬQľ>[\~?-,~ Գ?ƍjyRKb=QtNĺvpdP~ kzu^-ӮQs[b_|o{7v[xYfG~.B ;og&xWTLӉa2pR E4PRUzUi r*Ӑt9HK݉QBT]ć8>;XZm㫕s6R,f=vqyi]6Fd RIB[輊k"bFy 9UMAb[jXWlZ/)K5oTn]x+I*';rV˺hƩk<9eC~}b,^$Pg0nD > +X"̪;VϦ21*HwTO~ΚY^ND? z+R_rχCq$}$Y8`X _4.D?WF-b⾵Ч+3uw9q;TYrםf3gWߟ"BT:pHx.A )luu_kUz#r_¸᷻/,}YF-}-ǿ1]]N7ev(t)Ai*m2%Tr&0ͽ6Wq~h{n %;/U.tO/}-m1.XhG6aRChX%f@Yԡ:x*aQyE_]QLuVO.kBJeT?]'u݃1QmE _0M2ιxpV$$tV=gsG˜TcJdsmT* /6rHkCo⚘O =Bȗl|y0e֘#K;:ݯкωsQhѹy.?5`GUa2-TýqItEožahMQ9;cX cjZGwʥ1KLmv,~ckZ*/b0q3+dȓR6?4Ց^|n[H0K3vhN'uWyGA8{aq߅Rj7dR5/ץ2Eٿwu .*nW-:Krn9E׋aAL˼e(Tm dS<|ȱ %$6% 6bG w|RdaZ5̺/wI?ۆ@S>U"+I} >X(F'e[؆)VMSM[|~W47{FޠX}{A,VkBdչT( >z$^8˱Gtm)=yJT+{ddʪ`;b%>&%3ƙ$ʂh. >:7u,?fۿk&+/._qM+fc,r526Nx.o4Qjrr*-ecS'>nGL6isy,_rHv0sYӴ)t Vjf85%(;>UP< :8vb.jUf Y˗97Oaa3lh۸)nn`mN-?h1] 7^'/d>a ͬ)-%8|̹CuJHD̳#>&LOyڲluͤ$iM!DȂj?'vetps)뜔fNS9\-3*ҥgD͕p 85)Kv͵3d\l=񟷡r^{.x6_k42D`Yg526ZQh`i~p)"⏐T]X*<nR@5_d1ESTawb轁fI1ue2L5?cUy] S\+ehV;2&%:D}pV I\g]*}Qü!bQcEo!k4bq|mj R0g4ζEP_A(z+#7P-*K-vu<5S]耵 kWWB ԯ-/0[}zqݻ7:h*}K%ia6H=3^rl9A-J!!N-hs1Fv |}n)ɃvЃ5lZg*asV0k!j X؇Sj'U[B< .G.E#߭ǾzW) `d3U7 W.@`'Fzq>A_g}D )i^(\cCo&KƕiaHFD3ETؕCeS uqVd2t\7[ٗm"j㰀NY#~L+p<;N>1>+V:҄Ka{nI(2k lz*?Ui轒| bLw=n m`ENf?Ͷbd !$a?}2Kpp%#gnH_lqSbvN8Bz);X?YKi8s@mYO}\mRN4+:f+K?,*hRl S|P_(57_#K=8vr%)\TvJ =D90Sǻb%L5V2mﴦpԟ5&|S1o+ޡt*BvAy]Ox"30R`pR=o/#HHBlusL-tYpݟC\[tŶ2n][|uR܏6\|/Ѭ Lpl _7 avJ"+6**Yc7Tw'Bg$s3AO ,AV+[qkN52mOu8e#Nof6=]UGa[:>mV&U[6oJ’w;1$^KM#T$g^p[q JR\rHyjlf;!PNH_g+p46b]R,̿h 9!q(m+7u_BhͽQ[p7'h"+gg=Z0lcfQ R\bfWREWf 6AjpS9&߬)=R`IȤWg\[82 Z#a҆}3rRV^nʘxc=h27'Ha7Udt<4:kC(qiG-pݿCy(h{p/ϷF䗶Tzw)_|g" yLY$O"Pt5i$3nOrfjŚyy 3+ Z: 1hUx+܊4.Zy $Վ5leiXY}Vhi3]η^NǴXr&{_u~y·7(ۦvt8(ɓ)m'W@>K_I:3f-ս )TץOiSnAj\{O4vI:xfR]{phWF_d.&^cW0D7rkӝ="}#=-o ; IQě}4*!ȩrrEc&ML ܘ|kYM]^?K{vs/61J._ f fCzDf𬷠?9^5fy&ۿ:ƉWC:EX4GHK"h7T%sZ%$J _=Df ) e>_P|46-ĚiQtQnv_ZLϞpքI}OO}7ji2n=E@cǒ@~/M0@k9h"㗑/hpϕ y߀cԴ&jDPoWNۼ/v2m\1eȲ *vV z{7alѭOfJZ{'F*1.K3z]*-Z;\B r"h7%Jn#)ј$ e}xcr9ΈSٹSd! kpXsbNv3&o<=lܷ@"K/].S3 ]ٴ EL?8>nzyvՍ&ͳ jn}VXiɃX7"b 6? n7ވ7wL(Z;ͪؓgcĒrڏ Ap JwԐU6euʶI]H,5ڞI-|N hsl!w7Ej,0SqxE"[[8 ͵<[9)֕~8EasϚ,=ܖ}8u=$M.#XEX$E3)bVa!;7HwH~Z >9kRIx뚭U!A%K6 CF;N|SU^PYPOߵGb}v*a&*[@Պ+s^ ĵ:abc'6={Yrer@zl YP2 鹌X\`s>t&fP_4"2bPx9ܯa""|ږ[b^32kTMΩCݤp;AUKp|`Sjk#i slb~9]y*`rU4 -+*@-+.QGA1V*a9V,ǯ" }30xKaǩu"jfsE"Yo2\@04Mw<*OEeN8Ew+B8Q'81L2{EƬ z6[9_2bV gAGITC(mS(igUӧ.3dwݟɡ$P;+X`80OImPSWFr%WL :Ҹۼ,!j\s_ h!:$qȈH⢯٪ $M;5.YKkGCbDhiA3yGa.jc4झ<"$$)XFyp|,I zѧa2tF6_3jJ`WݥGÈZhk%4hz]UjJ?eK/ܷ+طjˆYzcH6sRK5U&-cs0˸gУ\w(BY;ddi$ Əyb$TaZS]a=q_.6CȠ$wAGo޽*wXV@:(#rly,@Όq.ݼI,{ D~ٛ#^(]ՐK us k^X,Z@ 4xՇpW׿J6UB<֝}$b:'Gvu\pJ@RBo9u/̭%=3Z!u0ݥٞRk|o)&PH酿@rDY;o&Xu Vu,Gߺ􈟵4 PN.>-0F % *Q&&Uݒ.P : ;pTS,MjL׾D뉙bR6=tCzk[ïűIߪ6F7L:H8ݔY^CR0jD"P̬St !r֣p Je"[ .1C  k܋Jy4ѶW(A}1t.gğBv _ 23R^黤n )[L˽fd|w\.?K9Q dfuʧ %^${`/CH".`=|.*ge!"aEJudK!ID[Φ dx +ِsQlH/En%Bay<+U8zl.DgMk!m[Y=g'.2M曊6Ub%YR1z{hײ*{Kog 2h?Fàʅ9_.k  MÈH1_}6Yq >w \;lRxw!ǢH˄%[XG K=0 )ʚqe "F߁΂.׼&#/Jn9w9C3.:`,\*|°%%"[ 6b=3^SP1tMݙS0 NC̴'\տ9S)t#pB§jDN&2Rۺ"_0*юV.DR MIS̘T?/U1^?O[}x=%:g-x`Z?ҏJZlӁjz(J7}h}X L+6 ǥKZ"F€ۯ)qƝtg4|N n>)6w=_Wo? ^IL_,Lq8"q(Zϔ( - xzMȍ2V3|},H{z">^Tؙ97S-fiGOqzMc[\:HB{!sR9'|$%s!ЕM>fvq[1mb9s@pE;;Rt=8 ;*OfeEZg6 _ψSphɸ3Ry#}g㨲PQ[6ʒsݴy/pmkeԮ=N/q$6\iorrε:xEgrx͵USIҧu)7bB_C/AXM5fG](lSع~,#F/4̡ .8I jV )Un`'P~rs;ъ:(a{?K&J0L@\_.9>o?Yb0Tkg!~DMdɩ Jh>Ɩr'nji"#AqM$;q* LDb%W5_q#[L:-ϺF;UدlʧVˁ[3rox'@-1vhCtE*S)3]˛ᶉ/ǔU !ۧ;T/@ņVaZuvnR6=,ڹgK#~΁nx!ߒOJyUn/ %z@z[ ;ЌO26 C#]LE;m[(=k&@H|uKl *Ն@i%I=+٬E. 9 S&|8`i7VW#Rvd0 }:r@P;SSq(^N̄M$oH`#zݏ)$6:;| 7wycLa/nZ}֫\ u ')9TﯱmByJ$ Ls?f캗9Pxw74R;GDҙ_8b֋f]8\8ך⫂ ۆ;k2G6ʜ N]́j9s_RPg1BaJNEW0/x#aJKi7DRT<<Nnnktq6 R7Aƴ)Q3cg@ː?T |{V1CE1f^Z.V#Q2;gPIJAuC̷Sqk8 ϝHw|ޝX\͛͹='Db wLǔI)+QȀ0xJ8PB*RJRZ1ZdFZ eHDGT#o%+-sr@P&e@Y?ևs+j:scpW)p]쭖z`Z*†ݫ??{/ƟZ y,ARHE?1t>PMW`bm ءB\ =hg1D#ڔϾkig)xʳgsE`,Laf/ؖ?s,~3P m(0F?K51ЀQ5MKUpsW8UBƙ20kXX`,xі9Uc@M#KFvX}h`O6֛WMDLx4Bdzg$ p8Ej10P)MRgc⥳t*BVޮФ)/hK%]Jg&5^I5 ='jπ Z鱵B]{ ˃"Aj/*$1$_65~ZeUYўMYt 8XgƝ* [jW>qA*#D Xg;/Yyx&@^zbYIz2܉]#*K3h;ےp.s"I`Xf u⢎ؕa~ ;[4bb);e+Fp|eg{ mt xq9REO(ZTR8j&W hE"75RvҏBa1rOzBī4g O/nX HP4%ǎ4ۣG}j ƹ˶65%p'& iq@f}C&9xlvkZ{*ؿRbtYg/:UxjԵ`8IP$vE:`@u=7ޔGM +Ix+*~[+Q~>򙈎=&ROZW?M :GNr.|W~e: DR^8Y&Eն4Ϳ MJz}(~ v |oG8]w3MчCw>ʹgt-R~:PMwj-\9Cƌ[3V-k`oZK78imB&`{?u4)sHOX'}g+ "wd=mkl><hߋHY!7`hDЦn`z~?x7RBIǥhl޾ jHGVy ?ZOjW+1ϛSs&f>ї":N]*29Jw mP'608`5 \axf,w\e,i\_./vkT,0|"qRL98UT'Qޓmqx9kӓ;9#`D7Q;.˖Yݔ9=<=:2 ` cb׳_P|}tkNjFzA;fH)+K-MO8sFRPK@ >gTKX ^/бӖؒ}Y@^-»mߧp6",nuXBh(x Nd,OĀ!L…'>O^`ua)OlUe?^sʀ]pۢV~R4?s8$L==ue"]~ ᗏʷrӫJ8k`%a p7ed͆| cYH"!U޲C]tw8a`'5$K T3˪ On! whc#Bqϩo\eFd}_msXy4s: d}ʽ_X^|Svmx~үVBteW:Lu1tHz6wYuwƈ*E+6 z^v##5R3l xjl;K778vC("ě`,Uo0 ʅUfޖRZܐN)TjיO QP UҳaCMGÅW@oHI0hR`edu4Or;R&gU=kBu=sFJ\iG7YyK&"1\8ХhKq.]VxTťgÔ t*WFh(\+)Kw6=JM7AbL=Y;Fnmߔ߰Rߡ")gMSw`šˏ wV_hIEz/ۈHϠikXcPK7µOo^[{E  9lɘ=kcN>nXe S|`kTFi7MV ~t|ޔu`ЮE.qoIgň2zw9CT}'UnCd)}v&u`Z˔~dT( zs^NGI E4k)ؘ-G갗@4En9G kh@jI= 2iOa o'2B^VR?+j.zbrQ./^;F.r ,.^{#̌b`7Qר:PKS(VaxnGx Xd~"VfRhZJRHV҂.RD "$G=?P~ ٴ(hs휚r* 5 zT߮rǵQ/S"]Ż2] f(ZyZ E(E)_S<`n)( &]A4eٌ2O>d-/#PuM)"dMa7xUM@؆RDslì\l̏">:$b 0h`y툛{zDPsT![b{8wb'[_c'-3F Q @PlL>NȄb QN)1*U*ؾ+;{=ęcMhMj6u||\kkxO(cA$(?+9]m2J0ysW+&S7"-KJgCҩ ΍EޣǃI0Ln,!0rߵV2 @ZqAZ\"gÂ;Rb':!/=zΞ`b .ttȠJڒm$ 7[]XJHc7ܝW]1#Qs.Dؗ:6G ;((vHoྃseh4I-`S%Խ熇`9-D7< |\%nS9ʢXWMSCcKZw\K:~Ak&X4]U,e^A|ʘRP(_;Ưw>CCK ^Q.j<]TV _Xz2H,Y~ާja g(g֠4 *ݜD^2ܴ$Bosg:ٲU Lg-dr>rZS?z^CИ[i!#,MdžIu ?5@(?9qphBo]v[[[d9s:>ZzZi&"xpM(JɎCYBmR -Uj82Xϒk"TUP5-Y, H1]waZm쇂NY}ۻV2`c%V <8ϗy UxπGζ@oT9_?>O9 +ybw~4I| 0}4n |œfMRq%Z^ޥbcPzEţ.R,@7yQŪbIj;*>eԃO+'QE#fB|J/̦6V%^rE> ||KI߰Ĭ Ц\2,3i& G #7a2Szp/}(ęj,nJ-Ad|cX9Q8fh/. X\lq>[6E W[>\G] F8`Z0N "ی)b7.ys7jz ^lK@֗h@fa JDé R'_ݯЁCP/a~ `?SWU @mh 좙Sn*9#nrzLBh%@>yrn"cVt>/bT=Z&iޭqSFB~~M7J/j7=^(gV5DirxiVs/& |r>||]n?Dq 3,N)(#XG$)jgVHQ>}h I'8(w`<]3t?lX`A̅@?ekHn@.UDg\wgZa(k 1VF }Dutɣó!00x$ڤ}9[W0c0-}V#:KĞpS$Xm?;^5*H4j8|y< bNT934 aD(ݜŶ294<#JKȾ8{Tv Q]?,iLĪ381Ke_<N0%ˆB ~AjrhyA翔U"7kbgZhyǾƟVdݫ8j4,~B[C!(]Z`6Y;, Ǫ&Ҡ.#@7;fS9 Q7%NsR[|'Z&DtOWtxNj!U8:;%wMٖ&Xju՞@[bFKF:y--sz,,c)::M:,E+AbX& tN> ڨg o̟郠#kͻG )MV x!?}c+um͡AFpJ|8^OR}n<yeu13*nm #HCtU)sL4c󝻽]t MԶƹ[ 6%[I2.Z@Ufՠ2X\Z/y ͳ=.@K78s#ݏQAOdl]>mZkk05 :ĤZj KKtOٯp.>&zNM4NCEUђIX [67 4? g*7eys,c5v3A\idPV&@G)l<ryX5kC|[23㘺l:33en &P}QwwVfźOhzժb4J\ 6_X2u;:(p!Z"igF**ْ;+>u̵3]wjuwޔL|GjvΌ3le6W1RlAH?.OL$b8za 96!fwYȦY &$~9TP{`k4/1Ês4-[ŃG)4eZfѓWdl2+`^T -Wrrav>'|U̺^P uټrflPͷtUa켝%s܄7i"S/v6Ek/H _tĐ-d%szJ96>V듸H-CW6fP0&".2/EۭO"`\Hi$ؔx>5)^TK\Qw`nqPpg4h> yHEvBE 3qqϰ$N5nBЌsv1Q9bFHjh@ :-Mٕ_]+#f!}Y d\:{0.8W{ro@f y-x9<q+G <K ~T |hȧZdG'i7*@Bc=3N]`(|ǥ OZ2@@ JEǡdJ)ƣb ^un )~W<)/td z1bb?9$xRo充c~,uz`@>N-B¬#AsV:؄p5}3 nRC<@NZxG#E~䱷c7"bz{b/ >h@ԯ%15#S; 9cԇYv!Y,g w:AFqsq쟐핕CrF ][ik"gPIw^28v#[]TuGf fxN>;E#,HR]wʖS<\eWdG@aJiwuLn9., gc,0B.6uG}LJ {u!%T6aĘW6oǧ8D+oܜJz6Ý I pvXA 5Fp:Xnh>ZyI?Ag(>^{mSf MK=L1 Fj̀XG V:26/ST Pj6^4C]Ckԇ<_^on659Yqo܋;@alOP>Hj_ "HoyQkG$zO|Mղ~~Tukobtz-_^j@uGp9v>< ̎o\0٤gx؍mQ;^C Ӭq\ሙU)EϮ xΜ7ph7|e9JxML)S ʾm^x"b<;=jt-Cn] &-ZR';p,%N®@ٲ@suս)BQ(U4\ *t=|أU2gpLWȩG AU. bw =;Z7Vwo2̬ ߒo ͋IH>ѧdBADQCD B@A^B_I _{ R@n5G'giN8ffU0S;p2t-\d$hHLUD!F"LGD/ o+!RZk|C&um#!>`{hlnR̍zO"<‰O匥ĹP⻒,Jxo^sX;:r^[%yEI& %2.Wh34Ѥ@9z",FZ{!Be~j/_m(?G ,Cx,_PPtb{}/kVreLrTr3Y䪞7=`9gi~>^"ɲT"MvG#"Lp\xILgbGBqzp9h %zҷFSvV-*+wXQ0Ni]K895+~G0"-'Ӏ,a-L1#)Z /Ň%v$FGB'p&| !x5}bM?ݘj\00k1s_x)i9 2e,GM=IC@&P$_[43 dTis6}'HU뺑%O&'Tt-gkÖ$ ^OǢ7pj;XI]\ĻjS2N `t|:)ʌqbPB&8'NBdIu_'J-R]بlz#ڹWcne}&nTZ~ڎK% /N yhCh{cG3S,6NΚI@aOل_}xܿ`if_#.-Je|z;эVI*=E~c'5 X+ЮGbM]RS`RvtYUg( MzY8VAc$;)lKL"r C'WfגpI]R5]-iv/R[;!~0j6/]}&z׀d>ս"q-쯺E-M=$;!xJ˔v j';R2GAh B"%Y(E>I=\tY&I(4>g,LK 91uH sq,o~Re;ve?@-w=)4{ӥb3a 2{9&(4 Wh:)T=eSBHYp5HlDe>Z a_(qfiAQ<'S9顄U%>./J'[|~À'4R~L!VvSI4J*wIێ@؝NKK $dMfYD49'H ^ ,TfM蒈 ·0 xxP>ƢCGdٽ~xҋ}[tm@wx!sA$FZ^ :w| /ޜ$cu5;;v>+PrfgA x2SX7{4Hb(`k=#:5ʹ;4e5]!TVGZcb P03~`{\WaU 95B6KRxMoT͠XOpy -3%鳬б#:5URxNB}0GD+N#4fv '.UBcF[w~{j2@= n(`hc QVVYH;owM2 >P\-|,r)RԒ`l#p09E&w D{X d4 N\,J^M`%.vdE('o:>@pb])2ČsQFѠM$$L$p:elc-O[(>v"4gyBP_ѱ  f,#мO(υh3/R"\лzL,?ĭ 9\t0PC2 ߺ>(4}-ce<ՏdJ*c8WǴU@1SFڤ8߱,|h$9,k )ň"֋~τb4)E5U5&)C/ Ӳs2q@ PKKvH}69%%(P&Zep.xi)>@F};;Noamz>Ơ'pH߲=x~:nĦh^o X*nʧ8m0l/A|d3<րjKFi68]LC},ʶSx|R' ^f*gZfak\Y 1x:L 4J_?z3.gz%v&QwQpB|kk:\t>2i…9HWݑ"m-l_IG'ac t&rU^+HEЦkrc?$SFkc׻ 슰7"bB(J:0NfI>W#u,S/ЀԠ 2n xތci wZ?lh#묓ֆ=': kzh|ч#{/Xx܇jYl >[Jߊ.pG4ӳ]x&  3>fl;J̥dWlSX``pz蘴d9*p7*xԐ飆:vUglTEM@}pf@Ŭm+CnHE=|H?M/, J5Pz!y1KE8[ւ3yM}fR|Я^ `z筥dEN|XͦC@_=ba@]ț(|V<\8P)= P>EJ..\%* tCAxzVCĢw|K'2Fb-#%#7O7h\SxYڨp=9X'By$ YŸuf%]XGe,#fn+RM-px2ѻK07|ރ*S&D`A& |{ߕ2-O]s0)&"]g](VG\9m5^pb6RI3e3;ge?Q,d1?UGjщRG8eos9p;\ L=7Sg|7IXJܨ-/ރV@ (qb<yFB-?Dow~EKrba)?f,2hGr$02ˡe nW{W /2Br=QiU_%DqG!p+ub jU`4NׂؒU9pǁz2䧁q@7G?`g=(޲vwg^~ճMP0U$+Ghi8 y 酾<#8Z㇊f=;ЬW-iv,4-жMAKϫhT_s,Ό 7G?CG6a@C4td7T\cmT͎v}s =Ewn !eI"&Zk'T{f c8*BmQR[ 6İ0Ww(>jBȎZd>/px(߶5<+Q~…W|5 xG(xv!낡xiP`z=kxK>E,ѻaA/ R_N:nh1kV04OɶLmD'Ǫ_)W,ɄqpxbuEVۓ&k:SzY?Kpl1¼ҥawtC)\rV'k."s L1s^MFkm%>bB8AG]+>GN/F?ـ/ǝm !a])B4;/8`[tRH0>J1lNREŊ'y4~@aOWӸ_f#Ky Ύ@|UD}s~F{0-򶮫RJAlUeIWTJKUSXao'5=G3#gG,ִ_jfV)ǥ-Z؀)JlѾYGWܽ4mk#P N ;G)eVoTvW5EF-RMY6_-&QCQT8sZߍ0d\+6%'23s[ǬOlWzӈgU}~KUNQ sdB4&kƉ?m!EX%3u#%d&\D:*#fQI{Zs0pTtKnoHx_~|n{٤(,94!uDV^* "pF=冈3On?ݱP',pRӶg9RI_n$S;zo7HE#˺.=zŘvndeX '^c$Sf\A}~ ֶᮾC{D} &2*|7W1-5G>VOiC.CVL>6u ;e&AzWKH^̎Ox&4Oq<ĔGnԗ Xl eL20\矆msdgJI\#tP OdM C =GRuClvqyfZZw6+*j:GMATf'E4=%K9`s-~A1S|RO玾`wRU k.u/8UZ׍z%P@HMN3g.CLO\ys~)t!sߩO?ELsgGUſG_TTrHhd8yďNJEQX[0iU ,'.ؽo-}%<bSb_o# ng^/nlp )9:%k,l) wOrolֹOzVH[C9 ^5tM. 6>>n=d{Ӣ,N/|-CheJL<2zɢ A]j`z v񎶼YG/jė`o+!xaQ3y\N}m粶7F"Y˙֭S ^4;*dzl\nS|=9hm8g!*L9AU4cQ5q ;WT @+dv%M:^Jx+hR6,EBMժg3jby'qb.1%cڏdS9 ~e )g8Imx~P0cǼb;[BjPV%ʾ?b:rfLV&D2O9LT_ ҍvE0lln X~A ˳nZv |&S۰Yၒ)cTp9N2a9r 7UƧ""rcf5&Kjbda6 mΘup0Hxxyt6)<0̕[u:;aJ8LR\ ѳ%;3e=#w-ǂ/my,$Isߤ?#͒j-%O)[GX9b}_џOƋ@9S`8%Hb,5Gt,=Ϛ''*QC%;c'Ǿ{'oK+w+! nUսCט=jAfH (K{aC{>HѢ“@3p&Y' VϨ+<@zi;?9'w>0< rUF;:InM"k Dqm;oM fcUߡ|mi/+,o6gy5Kpk!zuBU Di\Jf|FG{9&W\VK \k?+|x7Ǩzj9 Op#[ѬzILv߸ISw Hů'_pH1Ky߯?b^MEXOdbZá;C#U\x"@Vga'D ^:guP̽F"ؓӄoQ(w) n B(v mr}d@c(xtuEsO'V㾙pyDھZO8}KQn0Q% %k JωOOU~̔4|)`иyxI)Ѡ*$&-N\o2fҶ6wL\TA5 Ӄ>7p厊a3@\R 4~Cn҄]c.y[v((᎘Mf*qk6T_3ejϐ{.7nk``•uCc|VgH$yG:)Qcu+M>~]9ޟoEkS⬫&CO;m'IA$h=mQ#``V}-q(AVD/٣e<*u|[ڣM(]䲆6BK - 79 XcHےRA>FL|8Oyj1&dQG*!əV95%B}/e Qh4Hߺ5Ea=޵.>v6^فm)5JQg*NNPb{= QFQ`I*uAlN{莕LTv3=ztp^t,K돯5בEo K%,]7I@ר+pz(2 &L޻vz0Ɯ1IxGTZetU>ϞBڗ\@4=&+_~K8k%}yoY@ m)0zǻI͑REt,c'qdD!%jFw4?{O!co;8m oN(}xxcЈUI޹Yn oOqgՀV;\]6{v-(1uze=s8M޴=>˻gѴDRkyPRhO[҃{{*WNDD g!**7Uq*p8dEUHXAPyoMERD~"{+*M fkuiśݖR6#~w+퀌-ͱWdG ? yE IY'ˇw{DrEZD|:bcx8 u?l26*K>sO-qFM ǁ!9n;X`%Գۛ8'^hGA{SIl .y A9Lp+~$X_ Mz~6o/&$˥(3FiJ'܉ JGabXnz(cAu# oXe890.q-b񹡐4g 0snbhqP|v:ߚnȞV ݛgqr):xKk-kvN8h>Akk/Ió6e-5ݥ0H[GxCcP!9>%_44$3a))6:U% w/P1 `\Oւ>iyj!2{_x%홡~{`={޹@˰=M(W(f59]?~ 9s0i"TCiT?WUsf"4<=2 i<>о@+qq)A f2p/cv5_jYY٫D PD6LPq2gP!m̬ٸ%H&N.ZOp-:S}7`Y:8o븫!ǤAaq6V|d<)~ q W{25&S.HJeƾ-n$XSĎ#=mj\d!8٘\ %u!_f}o B,ϥÌkuᾔXjBdMǐ-(1߅Q5Z[&#ǃ''`D v^Ju1G, g5 D'Z5&ubbǿtwùl0{.ߢ8Ss)ȤlCE奾wy &,y\*C(Eí$[1',` Bi^HCה&\"dP(d-,HiwD̺ZoN2ޕS`Qu`GtMxIʯU>S*<׀# :藐* N ~:U/i @ p=ɓ@L u ,^D~Gb93ӷRQI"1" --/}\}]d[+ԭ|!cz)Z.Q(9*|j,כy+3[;=h "ꬽFaB8I"{J0Çxj+8/U*{Ёi'mIVR-8YU[} :OOhʸϐs`0,05]&}g1}L؁V]c>pţ Wޟ/П<\믃q?Z*j jsʈUx_+d gjex?]Ï'>{O^e2tTGӏ:Oc#ؤaX-긻M[T>VV"_ ,cu/rD h+wGSWgAGs!1"I 9?\v&Gm 9ӶlF ϭ 5敱&Y q[$jnKĘ ӇF3 /z煤/fTM~\yHCy֮"#vхs&h]:LG4|[K"܍]zK37G/϶ϚfxyxlK,ZR ke߁N9J2 pN$r*<2hٯZrv[i^kHmMfϕ 'P'-an?yIy~:-YTӟд]-ƦIUU4y@MfmP& :Y`7!AdE$gr-\g&<ҕcB ֯3 >:tD;_.F 6%&;#kЦMk:xyJN`ggYk,4 <!sPir6̬<S%thJot[\?z]ݍY)!ެ?%_[5$L.DMr}"db??g]t5Q*%Ah +)ZA(⚐ѽ!zw7ܽ0'-$*`+(_m4F`>}ro  ർ~5pQ!OpR ȕJеuT)˃3j`hdK^8Æ "M2o1J,WuNHvOG uŠF Cˉt̒“ סswNHq䚢k)VۗM$fuVI SwjfˌRl(%E6"@@%+3u3,wWЋ X;' ߥ"#*xV:I ZH'e"#ZP@Fj*6 l-%9U;K:SNAYM\Q~z|Wx"'vq[ GXJ^ǃTE!f44@W`ZT+' UKـPǫ-0]zU#MpGBX= ŀI5(Oj wHkǝ}OfOdh\tBYi ZySՓ]b #s|7v@$Nu@кÚ{\ ̋?fP"tUG3lev+O+ ,}bz "HӚcZ0.LFbي:J\lB}*)|:]sS A DacG,P,wngZ8ˣY= ̳j_}H 3YVl!!\ieH*M@I^-}q~Dt3HwH#fq>v+dIXqn99t}ˁLaRͳDHH$>Yh/r R5+ wL[8z(P)-\|PaiTaO,iv~>Qgq3Lb0RQ[} ؋<Ad>z&•?/L,!;y+#.cH #2^)Ka؛I`}sr:nJtbQaM)ڬJYWӵA:КɶR6%\jt3eGWt|]R="׶ t!{^TEQ ,(YrC0[THd]=!2r+YV2Qbɨ1U?ϧqu 3YӀ> c0_'. &L {8?YI|Ҁ'r$>2 t+ܪ5914C0n@x^s.@~(@ʫ.\`m[Ȣ c.ydFرOkSw+tUpa ҼAI#h-m3)mD7Q{}I4NGKsC2Sdg}{Y|Ak4\cGQ℩MՄZ LvzmW5[]w`?a9<*{#[Jp,NU3e *rtWu:?~Н/9Qۉ*XD=]gнsGsx2pÙyszc%V@yO%:F`P(]K[wA7}bk.~+e#mxyMq e3rVk~-q{vXe֔u$ iR-^/M uɿO{;3"qYFZ ($p \ܧ`ArB=iܚP]g=۾^arrTJL `BMg;9eផzJ }*vjr^bݡ3P`nGNyWu iLXq6TO;B{n#pbl8/piS; !@d=4r(ifI|,iIO#^61v^S[$ޝ;a]WTaT%`Z . ~99.eKK4rONU#2^Scϕ?co(0u~-5rSk9V3E޸ wRMXBC.@5M!f ڤ1K%0 o?+juGE{3'gC?.9=p4Y;D乔稲=BG-B(eaftsh# c/!|vON9|;.`%@ ʇP~*J7vy#xG^Г-NDH/O*uāߗ |N) !ŷ:_k0{d7.mǮ'@v|;rʗp/C $O(%ޘ`nd}ߡXB7R;WxمDӲّJ={HpՃ/t8ш3 A 2L4l_Nk-dҺ0NA-ȣ=k"%ʭ8|Z\)r/n̄  @I…aB(vmKL %gtvWnL݌yII ҍMDzB#rW Mdq$HiYr`/Esar=%L4 m$Ek/+^U\G.䪲9."n>aM'B|YJ #t䶓=šo>+H |;C]7A镾CmϻF#p--EK^;AjegnTREӔ ^̅A=02)mz0 3W!u!\L6UHTv8rHrHA$rI`NҒ~?-] mAܢ߉&' ":Kޔw׵w 1f$QFx9Cmk{;JJ2qa LO.g.Fzon<0*B8ݗPab"fY8-N B dy*lSۇ.KKےx(!)}*! E 6MCxv"t+,ɩX,{w@yjGMiq#3-i]Aq-٨uqR q0v]9 +|R(, I: kl<5ʨزG!E7Dvdߜ_^ae1EݚeS._%*GJF'xy 4OBg;ygt2 Eu|urdMAPN]66džkOD@8IX՜M?;--ִ3Ke`$c03z9;y1S_#V`/Ujs KX r_K}98ka yx@Uկ5n_BOe&TBs@HNxʺ#w>ςZm/U4u}$S3NG;i3쐓x%ok0/|ڙ4iq,HXYB)ӿZ&$YjK0sϖ2N:y 4._AJFVBtA!l-<3}l65fтX({I/7$fR*Hg#v7AXO11(Ƶdu ! y>GB|l ץ2StvW@lyũ\"ba05)/& YE6F^<2,XqBi%r;QqA2jZ*Rv]?I>!}]ǨB 廭8C;Q@ì}xղ8NI\+"uE&Rã1y{&k>u*&2SGO Cq ^S`{$8cbx}YuWULI}P/򵘄Dla]amD$sf`Ps&6W~kNصyCf6M^ȭVBkEcb*]|0\r$\mGCJz.oH!Kd8R:0Az T,9.5>3vW@[OoJ{b[+/Ailo8@Asy@8+'H`DV% :(wuGtD~ ?b WUR.Ԃ$q>6Lg+@w,MWz_:vEw["FK:G9vSH{,Z.Ip"m׶0uM`n&4_^`̧׌P򋗺V]F*(lݎ5<>}i[ ]T..vrxL 4T)}vG'S/5׃"p.{Ba:DsS亰 iNZcҕ@g+^Vv"ef/zwtrs-@$#Nez2EYutr" Q a` sj~m^ٌۖ^H (NKሂLQrQ'Tμzq`Z\TOz}H%hs'@ݏ4*&$G!,ItKHf΢E~q14m.sfh8lMNWn\&%Q\rc|c%aQ5dDGlCN B-nK=%5h+QJ=p)}- =d-0.ݧ=Smu|hvFK$[`TN7k8-_VMJx?ڻ'Q&J9nw7[nt!"Y%xfv$|.[2Ҋcyր|^nM l<]X)dprq#qxA4Kr7-:Bk*'l{%>ǹCr̞qPb-)\\<bxW|Q_,{%HaBVoDh٥Y6|<77ZsC@ 2n%ŷ#-ٱy)lci&nio=jSpإ7^ZX,"qKH^;:AWk!:fs!1k@gW?˾]/#o-xq2<;]!dP& >G޽Mˮ-iٝS%`>0Npŷo24.MqXB(_9`(pyQF_wŢwDoplado-Pډ咹,B2U"rƽ$ty=Gv oR0wVZ8Cv_@>Nfra^n8* ëH,{+h/ T*zL$Np $*V 3`dӢ;/v1q|mn h ۱u\[1J lhYAȰ(GGhX9@;RC'3D&iAmRwSUԌr[{jIZ*|إ{3ރq5WSV*:dT߶,uUHVP)Tߜe\;[wSMH|3&8\΅_{ChrUJr`O=+wFk"|)SO$D.=B);;5bffe5lA@oݕJQǮE^G(ܽS{(sk]#w -<}Y8p`/Ii  ;?2QI@ݟ5'vd}+{߬vS.2~Ǧƛy8VQ=tyT&gs& >t={~<%wğڄ$X+މ*2[N⯧e \ufy>%K>eU**}aZW[t u0X8es:Ppl|[aҳke4:A)%◬JሢL $y6KG$c|uB%0 J _k|g/܆ zfأK$sMvN rK*{rF1xw8d ӢcX]{*U*i`GI-R:z G8Fr13g~+}L1u%#`5X&xPRƓUss3N[gmd~'A*JgwwR\J%އ@+P-Ţ"yDey  B>BOSL}›ݤ6~xDH$#hX@ɸkxw/ 9p!_TLX)Zs$0%͛6P2Cgc{лY!kfmf^#n*܆U6TV.f`,x+10WXSSw+0T 85S8;wdEujwtůx'2HDލMLhF\PZP~|P{3?MY2Vne-VyE!0J}Eϩ@i_ԦxEҼ.~+Mr܆ċgL;gsյJY W>3ܬH,L{[/9>53 =X.K}: `(K<LMQpK$iW(X26]KnEy/P> ?=1Gg dQ*\X"Dq;Q#e=$ ;|eZԫk:;P`{f3R1`AHk<_]mBBw4닛uxS_%1Y `\jgHRwPt!k;nL G&9 |Y$ots@xZki Z>MIt)r b 8&j]:׶/[0~ͼ׾2U}0Pr\mcyI[gg(!Eey>Q'$s>u 7;MdPi"#\)[\A~ RfkaFkd%ئ)_1uj pQ=sbk!<Vēoj &X9}v1$@Oa)L5`Q,2h& Vew44"pQ5h[m{s1elJo6X^i#Z>kP) }cQi銴T"NXiXtjK, ]gtFؠu$>`}@F;t|q"9A*ڈC`5ZEoWy=S:7 Y t85Ef2Z+kX٫aq4xmܯQNAPx*i[bl%>fX_+gaa>ADf<܂$lHh T@[[Rj" 19ΓCv:rcw8W:cNacڵvɽs#2~k޽JtI@/Q^@ -jͰP1 D t9,R/_c Y{(zt*ӭ.U,)xC^H4C5v㈧<`Bll'.0G$QS]D% y20cW ̐/ xHx%Mאz8;J@`F޶]9n! ڒu5=7y@d)n\o]:;tKb{9~7{˶ bNy73lSk\ ;g:f{e470:d*lӻ?H9^Q:qІog--;{1;čNxv҅eԳ{& GMa .K"+~x_z c Rjc}~7ݦ YT/R]K$:ar( g5)3fN 7t?mŸv߁K.!ߴ7[αɡ;^ChkB X%op e{v8{H$ VR2d'XL5OZxI1a9χBt;28}\-9 Yk T 'E t 4]t*sBlOzC@PnF|UÚjn]2(Zy䜈[G GVRo7uIZ8^ 5Ci_mU~swPht&rbnJj _UQd hѵJk $}ɝl  <WQE+菹d§ӆu/N hNAvvKJD Kq8^Jr!8>+tܣ?_z˽>@>p(^$^[AS:8{$}ۈ҃ 18W3MPe@ oU]}]p,)}P:#KN).JZt_y/" (&>I̞y) æM3^/g.=xbK_='kC'婢+3C &+[c=h&R,1 %Uٱ.ǖ=ä ,#qW< "n3B-BcJtUApfd! x pnYZ ^$nQjIS9H`hn?̶";%]0Cnʳ`ЏRɊl4irYz!$c5~}#>hR 6^1᫗mMc2`y=M[(_9hn/kXPeAmF2YLcN4G (mXj7-9 FDs/onFoއ+c̚PZ\a&s0XBLHP;&RL?{gc5'y`KT#a*r9ێTEG_HB>GTG]ٹWjXV몎2UQˢ{0/$J*=\XKnrtK\g\SEk'JM/˰22 fb4.f+&m蜲(8~?"=B#!AH&䢏!F0 /յ/=~96Q+̠GP!s)h>oi\7#ܐ]&xoiyjG[9BA8ߴ-flpmz[/Iq.*wS6\VT쥯C| yqa_=bSu0+,w|mv:l:":tU`a*aX/y1 e˦tUS6-+yXFD# sl;C1#$K $G Xypc9h3 tDWxZUO]ӯ7IlƤ/ս阢hFwJ/d3_2:LO]j1!+7uHPdD p^뼡&{񬰁z%O!8k^3M,BD3&*3$CƗ豫>aJIaL!F:{](GG_*Q'!!o$U™1TjX9eƻ zhcD!Н /œY^- o*BPY_NK0ʬ -EΤrG~ 6O3 8ق妼up3W]k綇lV2 턲-㵹{ofC~sfSGrvU>_,f:ј-0/˜tobAsvH南 tx#ݠ6ӇEĴ3gxO0칶/}򊨻qs+E~ۼD@^iMQgp,.nc9dW,"[pb^e)- xf Y2k_ngpuj&|nx%{Ea4^W3!dB-\P#xrAj!^?,;ٛ<CFD_%h73&I8Ŝ@-˝bVN mdEpG 6#ZAXLڑn a]Ը٘+[A^a^H[u4aeY ]Kvq麶B=w7WEeH Fg4BgA_<;Fo$V0||Foo!2oezF3&WZo5ɏ@QgXgluKj$^e##x$Ϸ}Xo#fu :eä~ZG;}v D .O%m\`#w7Wn9Gpl[Աj3.V [Ea˽<\((Q qԢ xQeh|Ws*d,}RA.g\ \#} _yun: .HcޡëC1͘wmk}7ޚ0?1HedH ΃oDG- DtW|Ic 1-k1#QW /*>^OfwbLk# Pt.thfL 4=/ tn7{+-|f8> WЏJo&JK'֬%iqCK%>OM(-Fˢx3'T6$."28o}zC$<:?4rY~ZZ_QΡ\e:KY0c2\/ ^vr5&FV!/-'6T#,86,_y {XDCSfƨȐtS~"Ԁ}뇇PP-ڄܫgkf;GMQ3~gx"خ(ImjMhg/0(3^8C]l:M3xqq|l6S|Lt:)S,& 4P@sZptDնI3,%LNlNaXhZ_슕? u_^@`\t (9/8p҉ pvҰΈ :|<_1(Twub讼{N+hV͙hn]VG popkٙkӺ,]OHO Q8=Ż5<9ʜT$P'G"y/d3ӲsPrߺt؝_Q2\AF:N@60Qs qKW~Y5c]L@ ] вmCtiX:mMpx;лdumIIe`(ZEVRó$:w^~H+p,gQz1UJ2!TUC:ˬDyߎRi>k&~>i Afin92I^5P^hWafsZ'B#4"ۻ&GSGk{m܏񥬓 ,L O8wC`9 +u,m®( H~[ Ԓ'I]m6XDs\rp`YrL=R wPH&lKQd~slot<Ģ.=.Yٻ5sUnEG i =1{K U{L; `$KA*g`ko'+^׵C,FNfHC3˰Z7fS+@Lp^2_^54Ƀ!C}6Iw׮ gR}EΛ@'|ǔ d뛎}Њ.|nu";k#64Tvxs +*}iZU؆>gWuy!hBkE:|`gy'AֱZoTF4]mV.b9aHR ɛI=WT{)jb[Tʹr] H h@m cCВ DUNd^WX=uy @_/436<-%ѣ̮!Q-;L7m'T('zEکԪ1[su~c&}h) 'Am.@zjbQ fU  f]CFf]a@,TT k z~$m1?jBl, !&S|‚#$dzF3^F 'M3nZ!, pԃX㒇{HbcU_G PU6|(2Z]S+-ثh[i&gqѼ78T&9~qsRq5}ojfsFQJBk[,, J^XPI5édO'HTkLa$ՠJ$lhph32^Z)L%U+-YcgpϤ#)GHYQ.Nyu`<ݨ_Oy&<;1gT_ooSsp̶> w啠Q|=plnEpI4ƫ뢮2L|E) \(L=LA4 n;u]2ԚC1&%ߴ̓P9'-:xG)r;:=qQ dW)ޣbA$4cy;s,ƣ}rSsNƤجccDya)3<-o'GvHRk2wg{P*, 6)\:w3NԳd Oɢx-<Վψ] P;~k#GyElTܠA &1[LtPnuTx%n7ξ͚4+`WNC/ySsZJ\(ڈUqʃ#plβ3%XrTQPHh fWgyQ/ ĄmDڡy!7j@F 69HWbnWTu7ݿo?Iud[59Xn]2%4kRz k*+y?HJ[@+>8YVk<1+ M@#1CrXZaUݧzwpf)aJ ٪{Tipqv ˀ+r*2Ԥjk7QOKW[7_Dhέ^hRȉ0APO]c0MZRiXryĖ+ VLK%K˜x<iQъa7xE 8XEvB?sOLXQE Mz噵i pS&+댘rIt& ,Յl;)K@`zV>Y+„ [69Y%O^ߡ6]18pyТ34 C3(B5b>d4րfYƩ&}TַҢyoE:k"o#rǙc$lZ8銗GD&3$X+GF ~ogVoj 2 )o.Ӓr"z)-U<w5)4є{} %[1itj ވB\FJe=n痓y=}5/RͲ^ ELwt Vģd!OʼM4b!*SH@'hirxutV/ԘP ߣ _=EC%!W 5S*hw$aFHX.G_wlZK2HCY{p<aݰ"+`%"ug`x@NɨyYj 1ɊpSΆދ,\.i!} Eź Rq+*̅C]O%'ЩdFKc +!!de2F jopRsE!Mfqq c&:d`c]+t'n D_۰L@TLyզc?k_֨Py&p?&up?.ء7Co9l%d*K *( ZWfM_O%(ؘP?JŐ&@iS7F/:&k ="·-Z` ?([퀽pmw8Ic|dF ϰhYe_߆L6b Z@7xbS@"Dli,(t2lGȲx tl/]*8p2ߌa+W<xrM5 jv b;Rj)%?N6˷$lL?A ;"2iozAl 3/ _'32tLxM)iHI_ע䏐"[`T+ra2C7oJzjPnip8 |U X#RܹE#TTEt/ֽj@ 距$g F/𢸍6) =F@/Ks"yGW'V[spS([ߎ2B8ݹmB<@e@"Țz|+ 4T!8iF흧brnlR) PhG2$kZ%>ƁI\o}1آc&4pK][OA% Љԕ)EgOH-\*Sɫ̫2:̉[R$|Kj'U58+MDm/RCsEERqsܢţS҉z1'χDI쾘SN48W.?$&mhtq<V8oAB@L拗|fSrѤ  Fv^< qzsBߢΊ#i_O]QEPwypYb21 7\# v ?>ڝ9: 0_!Lc4@\#behN62>$/tgn:̏p{<+m?'"hejґ <m%W@c.n\:G#+%:_!`U/ٯB[@dR[7R2{騌HUT1=G2PVn`)W)oprq|̇knA@T lS(CՖЖ~n *_ndš1[QDsS%.ʲ錦m|6A&?fs5\B3`ՔeZ9pCܙF6oiP:T]UB$,q]g LxhfY+mȘ5ںe+;;T"l( -t|GsyRcZB&-0g [t r2)RD>dX46<nڤ ePOZ&1zdMꐷZ$"Fx { k~ xr4jubgW[BOY U(1rt֩jĠR!vKz 9-(5CGH4%7ݑi .Ƴץ, '#nh2 «Kg: vz}vJv\7ZJc*;#9턺 "Bh%?U(R᫭;T:렒A T(չ/n hZSGy5r_* gL.;ֱ]djX?;4>|aGCIT:w`%Tq V"Cs+TM=]kclL =\vCۜ} Trm̐1+Ejy(4SPsPLрZFhPa )n<O԰֫)o#{&Kk==(,5pYڵLoc8bO>m܁_/ m;Lx];UeP x[kƗ(<1KeGV(3v~TnJ> g ',WeȢu]΢+-i}!!O̗u\ "VtX|-&NtCj>"`ZD)nA~|зN{߁a0 !s!8a)a=zNKPP!grȮ ${au|VusjE{jEl]L[}OA5B}<6PNTj]ZO4';i0ig9 @yͧ=6@H4X|\ c7iE )T/geuJN_kٷeN v"egPoc#Fߍ피<PLQ̈<3әV?}a[VI!QKlT+J M"BC 2Lگ=Fa+wS[MLT_3P]pRdי6<ϻHpU]9C)W*[$` Q'ԁBVUK٥v~.@ lkS[xܪB;ZHKUn#ZŪ!TRH_4fjYKI Y%IdR}ħW>O7; H<0/*7;!B*mtۚ$xA}-Жj9(rnJn0-e4I4Va0^6d袍a}[\&o q 9kQ&TtwpO.M&ǥ4o!MHfJdߕyr:6AaˆKWCh{(Fݺ4bJ \qx 'WSP]"?66R8)VgmkCWR%hDdJx(K 牪ߋoP Kt^7*c3ğ V ʽX4qE -5$\ >)vn]bfM>4@x6Bs} )>gA=)qbYtSA,."!_ض$G O+A%CnQ^m(':veSeSڱȫ[Dl_geDQ#PlX.)kc9f|̵_d' ~K#!/[MtdۇM}f_6=-oxQ^)*"IJz Z)пc&-PZY᫖&FwF_ZAdfIC~cY#I4ymgE$ĻM!o"Yo}9)PB y'U06.:_&"Sk,-=$;& : !W_CRz7pa sq-iL[|5~>yyy OɺK%^8Q鍕1*._1Ë5"wYC -y/gۍcUغ›B3/-'tFss:*m[8ٴasCQNE' WsRt%`~h $l8S6yFP k#*mTy h!9ndiPNŵ+0x-vr|nmkLxK4ꞧITF•vvn$neg_Λ[LU-vwD喇5g|d5\v*3~ŭWgs jUoei{PGM-\c-栎+ ȟlO.fj.'K \xl!(@@u"C{Bf|Bv?Tv<׮=u[]0y}6T2csW6ysON|ܶM<]AS'ڔ2XC|Eiˢd }b&l]6_=9qǝ>P4 EҫC?Z[2mBv?I[8֙f+E.vAU}8C25!Բ:B?}VH O9\u^Xr_ &1!σNDt..!&Vf@?sY<:x G6K4D4,^c!r j쥜glD.2+߇EMK51l7 ū-P He᪱¬h˸VMDBiDU#m8sW|\P@} uv$P)ag{", 段x`IH&ŎUA""xY!8Io*y|Qk®,Vtx_/,|iqt8LrKxG-! s#ا+zzuF3c%N;/8^1*2Jkt*\I1A-FtqE>Ȉ~WAAC'I*U SAU&x4@uĻPqk{ }Q4zɺwKpFΓJ|rJERVÝ|.)B =t _> D%+6z0(WQmI/gA0U~ƹ9ph@b-h-C@ u&b$bU]l{\5Vgt0T,͂T#Ǥ'bЃ eY "2lC/ˍc3)д,\` BLlGx{@Ѩ40w~?;&uU)¶U_/9NڴkYEq ?m2FA?V|%DW3v9 pLHs >?\< ՄշZs`oR5jt6݉T)`JpVΠ .k9tv5O'҃XY$!~A6ZTsQ?M7bտse/n͕ Y6Ա164H{H1z%VC uӘ@C/y ky& h`.j=*xF9"W`[~jЬ0[O"{l3ƜvJ$H#Ru#306˞Ŕ6?z I[MȎƂâl$"fblPƯACmr˩3n繈fi+m`ukcTY aDe2zrBzbyęQ׎fQ{*Dg[.Ҩ202ȯzεE,cP6 MUo2<8kcne 7g1j0LR,+ӦR[w>AILpf=spU5?$fT˓PC#If8QIƟi[ԗz[H+A-q 0ݨD'k:(0R~"<!9KfџF.5;]qN&I sЂDJVZn@0fR+bTu"Hj `jADZS9l<6Y+CGCCqj[CrvLk[ҼoRyWrњ$TV$#kiN+7)_7 Qcnn+FldB寎N#]Nx㈩l1"vXiA3~FR|j/{msvCE\!(3Ew1o=WE[E7TХOsKn} n;}gS}#;W Wo&jUu-cgF?st 9l #&bva!F}H4ɓqŸf@v3d-\W_8%ǑJwpNX22: +uĒK vx"zW,0Mt|'pOhBHȨp8*ٿ0ʮX FX2>ש&ȅ5=2I485B@IK#ꂰ]+(i'pP](.a@D's|^-S @[}{, As!ϸSG@:o0l+;jTkGf#oεiFshO)o8̊|[aMWgoH82)1mX/;%j3fϹFïe;$F(I`>N1`};?^%纏` ! B80H-1XDI~ȝbdav2C\4-ƱgP2ěe-4)藳xnL$Ȅ9TBx7@HqdA؞tJ~}XZOE׉F\%2P( ȯuO7 p.tSEms.ϣ4T$'`UEהvyWQIkc%r=7X!*,P.Qy{ D ;?C0Is%W k۵ڹs1(2 es\SHuZ4rccCH# M!'Jg;RAezE^<$>K~U]|>6'ь^/?>y@ٱR?/zp*dC!B} ǓVބ%Mn'ZӺ%Q,A?%y[.'=EH!",I>6nS4vp~7C 5aP;Uw\++xLrYñ=[$(t0X&y_kY`:{?HdEYx_4Y@(/w/%\rHӜ \KbPNHDU @quGO-~&%w:g7ݍmEy.}#{bC^^ "eLV ?4ݝWR~/t'ږ>[LG &բnb!:1\Z_.˹Iˣ^#M}9$w lp!>:uhߌ?Ӥ nc1q,6et?6kaeo9IP떧a[Bxk|JL}R3-:~6PĹHXeҩqR$]1N9K%Ћ[@>zAv?ob'!*fa N jZfz=ר=;[٫lC 5f[O(t{!hMA$}TW^ݙb^{Q։meDTe/]:Ǖ9di0Dv h҄n='Lzc4C7IeTQ7ov@\'?oer͂`0p< M:Q |vsddeYfXjngrUd`hٝq[|"*zC?4p݃&<8Y^ f:V"z q0cLeI06).0NaIH Ҟ2xpv(S#ɿ0>8 ܔHn5-]ܑVulfa:bLK$%<߰'ٔ#2` H@\az~usatJ?𻞀eѸJ2?F^CmԢxr\JYM"7k)DnGDԅD/fVL{xc};S0KmD*SGvs˗UめH[ wcmIp5|Ց aϜk Ta&A1}EVc՘~7`IȬCEکҖK&ky$7Y׋\,sS1`Ug%W&G= K|d[qm#uۭlGh&8@Bheg}DMJ6lUi:tfY|əg\CEr8R$]F yIQ)yA&9f>c{@(Cbx= *vY i2F@w%VR&Kt?mr'LId-ϯ[/CJOj`( ¡u?qmQ{Cmkg{P/ IiQ:Dr#"̉6Ƿ#2[:k&Zx+!G4o,x̹t]ԦyIb}ZL_ B\B4ϙNQ07Ii9)csܲ-m!a|'\vfe/@:qvCQu#BNoO0Eg1kNqC:LK<ϙuf|:h"1\^o4\uFVד|ӓ"r1c!˘{`*%gq([QQ1: \sz3ZaAo8U6=p\f/uR =X]6vom4$ĭg)wYXMט}t /ە&úskwɼD%?stMf84}D9tv"ϣW,ӓsrTR{+Ypn=,y0cR1=I% f7$2DL@C.1 bc WP/DO^#DH]i{y ~UX\oH amŅ'ʃߩQ҄H 9ɲf++(}(ZRK͸:\kB [VHpW(hCg|%q= ]UAZ58}^#O04>z*McFS v=4xu\h$A<1ZaXR.sy1?%+ZҼOوR 5NH[ <2t^\|7s [1^8t6Ig6}O<2乺)Ht.W~%KF|Z2nR\ȄĖ+,eqlE+:W#;KnI- %>*sGUW)fju Q7{/ =%uAv 5v{MZ+dJb:O rG#jPM*8RҞL tTge %1tbw蟖z`kt="]a;w`|4"tp$Cv,4 LX^4][ağpV؁6ܢ?!먕0\`tEj`4rt>כsRD+>"tJG 1H=hA/l/&=ն~Xd0: .'/fv6&p{IA;Wf ˠ V9bC+Qpމj6$JHiOKFЛRދ65bnDIJI_AM<+$zشPgpè~D~I|w@[TF(K0 1&~w]>%_HĀ63םUwA| :4P3qGg1Յ lt΄:+,{U]mb'HI%t#ݲ9?X%53 7ṘI"eXY'?a&8jy$SS/1U1-b]Ϸ<ݴy<w~G咟>+դרS< ]lf1Z㺒Np{} Q!/[ DNP(g[UC.Ē(!9T֥Xr\aFz:[^A@QV̠5KB`w5^z5=zo*3kC R'꛳fh*b\#k+玶O2~m90*HE<#ckjò 3eKgNAէ=pp8V0]L``,t1t5>!no\yA$Y,Hل+e5X( E? SsUhа޿KvXR_xGM*‘9>oN4>\xӼo患=LX"0L'PnmD׸.٣.+HZV; y^&ѹd* u{/Xll+*g!]=]pˠD~a=<)^R/Q42fOk} דy7*!RVi.iwZԂsdu^usS;?8fw]'7߶2gK|X@Ct:oON>65QhwVDa2GY(Q upA,> #FM C@S"p($ FNj(EnD%Z{EZp:=` 3i{aHH*B5 6-UQІ_ m5, |ٙEUK&7Mnkg\߳ b7rq=B]6fk&;! 6HY+_\#t:2vϞ `dcT =N[9z[,Rg |5_L' #%^1(@ki@ C; {z ) (W__vxvZɕ%n+L/oN6`5$!5 ^RnK̅Mu%GdJT^3z>lT;3 ~T3e׿E  ~diݦ;,~ s\gҾn$t.fl<@Y!M߻7)bR㇗a,_86h{D(getok6?`x6`2mDld O5+tإO&Y]]&ΘA \"3+ L MVGt_T_ }5DktNh !OY4iB41>F^ LJA_@Z?;.beۜ(.ft]ɕ9TDV^R<䮢gTśpP9/H7*K̷:~WU8*G⊨§|ȎϜ/"Y׿!E72i P_NXL-%T]Ζ/$mYE `/پ=+֮}(WB&ќӕEf.3PX@,Tf9]Z"݆ 5|܇LZi| 8{;: ,7ͫ0k9"t&.{lm=4Scsa 4SYǿp`p`֛v;(VjG"Ml.`pVm 0Rwoac-egW\U}AOHC賅Zj\Y}ID K6tܻ y6"b }5S0 8-# >yAgegZV^r=gBqAkY!"-#7L,:KT0(Com[a͠$b0%K]ODW VZRg&͋@nǕO}q-s:Q˫rg@d=$#[F(M?;UzQC(V?md2s7vF%t5LVe={6X#O~Lf?); $8sa\~:Yzz C:^ ΰ[F!Zvڣ*HZw$u_0;#dJ YβJ:ө0D)i.>Pv [g Y#qGAb==tUt |gp Y܏w!e|4s8,)Gj̲O՘2TR孚׶)V]76 3La{әH|Yb7D&szPE\~bԋ%HV]kVNj/R0M ~Ԑ%Z + pt[ۑ bj$yD`>ۤ81\]LE..۪:OMZQn̢^:dWjb{ɀK)d2LcCS^;?/ؐQ/*Zv#Q(̀HЈ IaK_B֑/ta} -fPŒ|`叫kѴUݔǷ{.$pB;2H&>ҼE *2nUL6tHmw cG7HuLa*oאY XXbO{c4j3^nC$lJ0>C<_!h1 7T'-y&Ī͇x{@[8b&q6 /RaX*Sr[[~2zڕ5ߖs 6gMj}uDPjwLu݅JqmCpJLHsT~jy6"֗@g:w覤q)O,=\WFJyRMwWip>.HI|UIluzBB%y}Q9-=YЃ1J^2(*C$D~1KVMpDhMHn⅓D/J`"cl`ZΫ3Ų$liy@mۦJUvsHQQh*G~p$Ծe _dm01DNseBCC^8Vx}- \8P1٪Ygo\X>PB Jb>Tam] ڟIQhׯ1W/%鑿qftɪLF*qC3ùu k:cWJnb4xI@"rkYdNb!Ա+P@%/ Q$JwtA3NOVU̟TSUQE F]?@ β#) Hx &e`$kp*eVݦМ'~8K ~4-~ZN@ɯ@ 0\$PW.C'] U<ʐgЯ*JՂA 2l@`;6tD@S'=ھ̒Ձ옣cMJdF*L>9o.qȵVwhJM>N8q_^@ہ!{?ar(%SxoM_"ǩ&6,H8D u'"rqF+5X?ܙEExj(J7Mz{2R)I,m%{t?}*d˔FHGSZ݉O|YD3P9IWps>Q eF̗Ka(xˆL&hG +]JKedD0Ǫz֟?ڎ_6 ;1Nj;I{)/&a{WUaHS_ )Ӳ̥f_`uJ8[<~XW<˧fa Mf63TToхxQ: dj2ɞʤzL!S63D[4| Dnl RXx7ćy|rW`~6{D6񧃻 Y:Lfܥb%&WQ[f/)Z.?1T0U#9x猤Jur<}WM:֤1`>_c9cr )+GHzd&tt7Z dӔ2El0.) {q]MѝY1مQ;t- UrѹCk1F\6k.YKEm =w% WĦ5  $!=@ 9GFIhi{7h]gŢfAjtEd\}TSF=0Nk^66ƾq+]a d-ؚl 9𗯶Ks6?ģɃ }n:1T X/EБ _.ܾӉ yТ{P@= 5O]{]$J}ސsg?G%LD +vh"PC}i5Z7xxhgͦG 3OvC5orr& -hx8~L]+7_>C0tµ~ ^(t#=  h-:(Y5s b Iꥥ(1aCYeۚA5/Nr>gJL.*}r{)JS sA tuݛaїcJ^sw2ifpcMؒ\=Nh&@0-!-l&Q;΂éA Wؘ?1䴇bqD #PhfiJz{VW\6nbZ,=v$o$w&5B r3eQd1tܜq41ޞ(>M~p>^eڵ5T" B-+W? hgY?z>io8s 1+簷7͐I4w{M҈%Z3΅3W$z3"0^цDMp9;)kS,Ξ҉Z<:v5"fJ6I9W?,\^V] 3ڕn ֏lmy6k:ආgXR27TWXHϮ(<#^ԭӪH+tq9w])Dٚ^$ʛ}&*ke% /_h{焦"_@®,<τr)<ٹnL;}vnQ$&du)W)MTZy$ j[{k 5"_G-t-,UVޙS2i+tˢ[8^'d~LUJ҂wUc>(sގ@x8,2hRGGhǦ=FWiL(]7=xOy)aq'=K؆:lR ݧ/#p;``*Ϗ{;} n6m+eBjˉ.gZ+: ; &Y-FA$Y.&ˑ_Oe1 e 8`#*5.:KCO;Lh=iԮ8Nܫld nfB"#f4Z y>SxG{`97J1y9(epsv!DLjAgPnm:5;PiiFWIT_7OU'p6}p+VIa@ H\@d+)W80 WLHk5^8vȽ:8 PXP֜oOM<PRohIpWyjA#-*䶩-ȗ>aݿljpA~`*-_R8ާ,둭]΋Υ]ϛӀ+k E[ Ԓnȡw [NlIE5ղqp ta^+p B[]9 G. ıE| #DJJl*g -= "Ĭޣ c14o`jpq8D@ 5$'̴}ԁvF/Raԙx󾹎 Iw^䃑UI ž:#~g> Kww#jdftJ?+ċ?zp:./O1\Vd1KrU4Sx`.p g`_" 5G#:eSHB^\%-UI^>;9Z]# LHب DqLG *7eyF+,Rd")`,ފu-}mnS׊קZ'x7pP]T ~}a9zs?Ju: L]Sop:D3ҟL Z@|K$ji[)Eev=tuӎW_KL>kgȅxs`h#{cIlkGEL4lKlˉݓ,dS+3@i6B&ތGjX[C i{ nOEb 鉺)?uWecQt:Ytj t-+K6-sx"c[x}GН^T OTnmJl 'pI3wR}يI9=+Ûy/|1c F@/_UW5EKYX;xZ!2fXf͎ ȏҷҬ_8KXeh#h0uw\>tVR Vm(s$䔽*$cxW)zc|/]>O/! ],kMdM+R%'9DĞECky{3B_A'o~׉KyrUJqO [Rb'HP6=;_DIm@*qXX+CT )@CyG]=T%3d~M2Qaf^Mf:ݓmU?x ⣹I*E?GTSTV[3I*;VW7.)X}xj"n^ᐛ7^u/݊Cqe@V ܿeoWtbe%KƂ?s~',}yW dYdiaGWْ.+h%!ݾؽ"Kr7+_&m.Fh:2>MɓmB`M D _+s0SV1p坹(f?{-ABڸKBU;T=^=)]%tU cL۽'jp V6c*>2*).uBU|= m7[\=&`~iT`_Z(hˮ%FFD\ b2Tʦꜧ+LMn<) 6W3|d!vvti"^ר-nǍ` #9%mPNT3¾66{F!s<}7) ǃFH Dxc|z+ 2}6ˋr [N 5,wh@PF&GF5N \W9y0xm2 lq@dv2:eBAG D; `g죞$%@$V4 GBKJIKmzޞst] ^bE|@H%od.ɆM,; j^Ӏ'?ņMoasoLc YOh#'ݤ^ 06dW{kU`SobW_8|ќi*ҝBZRw<*UNt:PzPka9$K/C:{ٙٳ$7(\Y+f1'tapE E7Q5QasMHJXs t >]LG2"u'70ʽ6J]Hm)$N~ |@t|o2<%>MAvg KOw/Ex6 ^WOk KKAFiެzV gb-DBKʂʷnyWl]Jl_W:\s7'^kva^@M$02^M's#35n[3& -SX{[WՁw.M||w\?09bXC24sljU &EPgސcG9.gP)!Y ;dpǦ3w>H{7ڡ~q8!ڞU@9c!m0haC>.OSF)(SNABxC%Yi#`8PWѢE$@#wIg@6R/ɉG>]+MZ{}`2)2fTgk ] rw/J~|17FiaY%  auv'sp%d 8nG`N(7MڿreWw(EE.zWHUtD1Tȸl$wTu! \ .h_>m~lO(0,[N{qy"!k'}m9hHuȅ6]{_yJn 4Dix:$Ş0>ō/7ph0C's '^hQ7~;kѿҧܳG1\p1ylJa_#"Hbǟ,^ 뜄.XpqϫA*eX 1uՁ_2kɻ]37l#2_=:OhxnEvdD%+cՁy\庬o uDkof:7aBK8e(-ͽ^"AՖmL~4^0,C6C=e]$Ty^!8Tmi=˫2 foE*"XS<"q{eKCxTd&hmUgtG?pN{ɽI39d*cZq WD/W@&D3)z_~`2 dNAܧ c@2M+0D q2PWk͒Wz-}¤gk!f{/}/͑FRjEDȢ$g,/j:ۘO9a<&$P|}jneLBP+*׌r~Gc[%o͒AD?\ p-v.!N*4aP>qyw`lZiٮ|KIIp:CTz-ؠX22z{7nv`VH&0f{ 3_<=}Wceᖓd`rw67pǿ1]]K% ֖'@f6̀B SJm^!(t݉+T=FЖG҅)3*.q}̾wC^L%Iv ^sXGՎL6-2A՚&9v?VrQ雝YLr&z}ͮ/L WK݃`Ϛ[q͂]+L&Ӫ/!$+ǶIF|+0$FԝUS+d#[W a*Nn7@gvWYVpwcX|UcCP;`ۖ:d̀QbciVhp폁=ѐyއ..4@]!Yo; E^ԊZL:B6ȊalpbHf-ci,T[YI$>xXٙv6i7ڳ^@[r*'a37RwHB{wrNzH'C _,E$7Tܦj|5 -`Xw]҅%VM#?k I즁C-lNf8_b&tF>-y- _S9j}ڴVp9>^5(X!i}_xtϏeJjm>T T7)ގ:+џl_qC'ڄm3ge%.`S[S;r餂~U[ \ {F~zn=rG| 1gICkc[6]yd%nC}J0o2{=1sQu.v(! ($?kga7# 6QN,^Ouwj\)H{NtG(SFWt5ԫ q8K۰XԄ[ 1,"kH_($zeVcSt|m4PnĴ.(ۯ1^౷W*2Bw:⓰r 5d!~z@ϕ's-gʮdÃR1 ]E_踷L ;aj#7դ0S t6bK?knΦPH/NHK`sJg:9G3Q̏[lAn<^rV L.ZAoӳ@\Y̡>bZ&&I7!F9u{*?+!a>ɓ1 Dtp,|:d\ Ha\{7KNBê.@ǻ󊯡ҁW(+2訐 XG:˒ 8_@zώ_JwLIEC.(cȚku}z &ZIk ˞J&Ƭ; ڼɫQepB?P"e t4L"F$$LRq_5Pꑍ (ţFj&6߭\i(j!J&\SԊa)X"7ofiHW4p<8t6o-S'ގt5HaBl?rOkbli߿I?^L uTZqȜW g>:@`}L,%uie&*'X5ewcGOvRF$-Wxl :i? wdKxuWv%^*#(Au \{paE ,ћ[KP3=\EJ(uXߦMby5M$ X.7xkZ@)6jK#tZ8/l {!+`0L@'=jdrNHoiS]b/o>qoyPYgT0IX|`FYd.\3"Uuk[6=^:ili怴i34y[- P':lpmU8#ݕ-z4+73OrP-UaW;y65ʁ Uz$ʎj*$8ˆm A _ʃ},Modۇ1b/MU s+Ud>K`QK7cx&\ \FIKeD:e Vq`0NpY/w[Q6]+ޢ؟ 䇐$n#= GUǸ9lAp0\}G"c&zd&DZ5˄ջ*%Oе3Q8gQ4sCW嘇k!l y"6$jDYn>Q|{L9:q~Vj7BDK=s6|?|WVŗEN(ʨ `ew)>I9i9"ž4#cҙ]Baz[ Ɖ'Qɮ#JA '&vLLcl٤"{#v{i9aG-\ô|3vkaғt*JU$jt}/ewX@V>fv|d1$^k lȴ+!¤3(~d?>*ay /<ہDZ#[zKCt8oW2SJRuzn`s F r:% R]Sы8&h`qI9CYDAw s樂M$cQe}'tO Wϲׄ3vK?A 9M6*. oLb45$.G78o+mL۔jVi a.!T};lD`DHd"ԠSݘly-~r N`20/ {ٞ$>SM.IF09gAf~UxM?6\ YGsַv'bWUnVj h7D0NH{9Ʉ.ZߧwNZ'Yicm~W˾1%1*q_I\ =`hmsIVEwhj Q Ljz[~h(" mA7VT񞈏N XnZ^:>W; 0߼PQc6ëfmVm_]YFhxn (ab4{jD\U7hsV" Бٞvb'Rk/GYMXN:xMLJ(2g=v/"b,$$S7 bt0Tyڄzwo*wf6g@ISOYlNr)Źg~SĬZiQšDMٷ:bXg'9l DDX/0H\;B,`Nߔz^S\qtuu胸 *o'Y'h!j9#%鮼s`8 ce{^ƴ)&膜TC>~A#BmW֟o"VL8 `ƀ.5d) q/Z܄9t $BJcoAqiu(!Vkt닊J2[6d64.#Y_սM[/=.ABWqvL2U\~3/ ('$I  ?<-9ٙ+b}ugp ' lE(RGh/ oh쎁Y۞p#mx*{XHsܘQHPGԏET ?Yz$&*ʣ-u! |$l5dԈUKKdJV& 4h9ΟvY!B(FBwV0ɔ@^N8 p`F-jq,^:/!ꮨ8A%܎tp{;% 4w9P5qY]0`el אAUH drcN-P"l!WC2~F ~5V'K+N R"M0{[ >-5e P4TMybbdY9 mTp'Z$[4/&ٜ)BdA?U 6:3ӄztz%k˙oaĔe+bIs5p2a ߢA-+߹S_?&[Es0)eX}>$N lfo ,p^B//4Dߨn}T3#i%g 24^9 d!''B2DY܏x$ݝY[V8A{MB{/KgP 2T-{5 `loL*Ž#Jw#ڙ.[Q&uϟF~|~figF1\jUe} nxdq{[#CR 8uHz="pyD v.TZ%| ´]4|蜂 _>mr17ߪy-x)}=if: b0}TdLqDعC GwR*Ʃ `DyI{08˼Q]b9Jt`)gC7 N Ƭ?cV2 oPF RY};w,u!3Z-9Xteu =Zn< +~= P~}#05ThsnlSWe2 BmszUVzk^q%X״Or|URhލW }aȣa)ʞK(í^*ETPob_v #C<(-s7?y9&QuRr&)!*62K`n}/ڞZ,/CҳGj"Ϟ Ea1z=> >H}(&;+2'O@+3\\RHXoBiCmzZ3Ԗ=}5upר  p{I"$9=`j<,sO9L\(i…,灈N.Q?IA n>T^?u_$w9(pDr&q-hp)G]iߖUB)_URZվUCzõ]~o_j '3sQ^ɝH/2O-'Jȯ2N i c19ѱ%m&mT@0\zGaq\À?"qZr6`LIq[@Bc q$v#TLx$%31KĴ<ߦSC2<Af2yQ,dME7 ʥ7q=Ce kl W-PqVuz} PIG[Nߐ]W|γ\^ qi}❳ҞtiZf^r*?Wm,sC\Rs;LYw#˨ڇGxZ}-mxo@fI|v'hTһlJMpfHm)u;᭔LL6<-#*}T֓P!l9¢_Mpw9-ik`*PSfP~-玈JFz/=rPvaL74ʎ ٖN ɠQ)p`/h[@wFgQulv Me9yHM >RX2'u}&sq$r-q(V)cΠ?\1[laA9Ծ䄞˭!Ł"'NP/yU{YCN[aEV/&8]{id,xz}c\!3>bx?= 9 KqܲCuOs6(P݀؂#,!#:s% F }.(͍TM<?oF-/fʇii7鷧:xc^S> R(mcSn{[gȷǫ(`*)=` |Uxp7 uB)ffP `N&VE#DM|#)53iJYky??ٸY c|tTwu!dj{%INx0UFmTG|/KPHWoфg|$dse)$͟yf#*$F0sxm'k u~X9טnyJ6h:Q?W [:8@4$#DzC&@( ˱\2@1]H 2p_RY-bzЅ `9jƛ)F-ﻫ̄ bt(H3~h:N>vZ=?aM1%Ĕh`ɴJ*)a݌BbFz.FH_9 1Y<*_by}iM& qĆ-`z7ʟ0)WuxR @nc4@v}'Aӑ;U1EhwMᳳWP/Tsxc&~L4-Yl G((. ! w`T#80j roӹC1p[uo}lH{.fY_ uA08 WxOۯIş#EI EE9}?^NZY00jZ%Jlf!K5 Ebiyi #QcrU@74+ȟ3U\>׫uJYOaH#+,4hCM)uzLv3h_ȫ ä4bo-KV][)o'0{ PKﶳ I59'm ! KF 9"j"6VLpꁄ|!c~;8{j{d7ޭ}4,gm I.Z+b ETl$|"{ZzYzXIJYz/qEw) Ⱥ-f!m["v֎sdž2bO𮧟Ի<6ɗga ?+b)&a59#=Ԛ3H.=#mGLo=ql &Uh bh"<".֚ۖO" cr0¿Zԥm8 rK[G.tGcm#ȷ|^$Xrnao7E1﷮;le Q?#Y~:oFX?"G.@D,Y=**5MC^6{nDŽ메U$e1N ȳ>iɶ -1$vɩ^-*8Y޸#:AY9a+m"oxn壘rg7TN9Teнϰ܅| )1UxBWoOT-^'(XO,B@@!n{<3[j4մNѹO+V:1iKt.)C0H*kr`Pݶ~3$`%%aƕ.=İ~p|2[}bX|Ty<*I([2W ~s1Jݡ]!4BX㴣"G-hg%Er:#Lg(ۛ(4o=0 ZZ6#r94!/GtZKi-}L|IÔUπA@r6|@ZdKS1 >fgQL?|"B|GfT9mQ Vb]JTwU՚HcOuIeKw 9nT'Qe_k^,U[}S)5@ nQ,T;ȟ]'9CV5ks5$u-C '(ؓz -Ce=(ug06Ì ]bN>k%ijm?RtB{i(}E5IY~m07iÑMRzɘw(rL?t /AgTT}Pۛh2?_@([bpf~s]'Rq)u7qĚm̝;42O2JO:=NnK㊆ly+3 NBwnDޭ@VYgQ@л )7({m[PR$A[0 P55SNm!kںh3p4/6GgȓV!-+}xIq'~Jt;;yT;gb\'$NTNH׽!Z}؝'@QhxgPP R+l`jfDO=b@7Y6Y /l\kGzgn)<0G?٣&rUNT^J9,1Jx; @]g4:.eKQg盼FRyxaSΎO ڎ8vM"7da6S'ęsU62y%:T*AZi(s (!6us#Na֟;d07wJ|)Č"ec7!`֣1a{+w5^h._shՙ9/͊g^R[JS>9f^:x45I=@R+Oej~ԃKŶnQىaQj8Sa.I/dz7"조|AJ)ɳXoYEFd1w0Gc KܮUJ$0^|USS6kySoV6r<❿BH J17rXCZ7_4;W]w)֠N*2#} 0D突eTX4 4 kj rͻ8stÔQ$ ^J Yt .+HHlJ_il> QjwOBc1)K/g]0LnD1DW NG5.c'o5=:,3ŹG+:dk'~5Uá ?.NKgg*.C^;w곱L}vɽ0?rvupd#eA-TXvUX뺲g֏G-F)E nu0 觬.R{ leT{, =!1ڝA,Չo&<9JU#GC- vga7V!N-*Y |7oQBb͚l՟ a# `EbJΡf?0K͋*3m9tk\<Ф:3Z2ľR1?(3[}'?! bNxū,Y=ˬmv<1| I;挤lp[ԵA =\0 qCzw.=oCiLkƐ{&eγNC2in UKn6b:*ۢKOe;OZ(?Y+iߚ4V>18f > -'BJs2yL3dgUd^nss7?bp;OM%*,8:C]T͉tqJx$}Z96!pc{474Y-I<EB˹v0&]Ǒl2sسOj爐ǂla|YP:ADIW%mK(rhp~KӹWec1w>|^uƜG ~]-jIwY2׫ Ӊv{nȉڳ@J.SͶ!4釱9.km30Sқutܐq!L վF#-x56j_ޞC` 2[ 1 ̮= #eqEպOj}=# GniW㩯?`f[ܰ!4$s\;aN^j~C`anq \4oοBia4mzS@>hm ?G<72Zo͍X~iKhY< ~E&:]&¸6 dOZX,FvŪn"2& yKX__;yoګon nj>5 XZ_fb7%BSwg7]Y7qB@|D$Eyh'b8bgx^y>iÚ* .ulۇ؉ɧ,Ř8!r,``2,~- \3~Dճq1fPKBBc9V' !Ñ`{|#2ܮc{'Im>HY- d{?n&ƗEākcyAdp1XGu]mϼOw {sv#20*es[tw Z@MĦWV^ ׏N’[!P*HdrUUCwH.O ZM\\&0u-w U>d/y`-ltE>P/1CH(-s)Jat0ĥ*bSǠSeV?_6fu%J41)!#yIuTxĞy&fe !T P աb-4X%;j `y5 ̚;My "VU?CpK|te~O*~bq{hV :H[f̉KLv^V1zuOq_UP>R32Y|XW( jg!%};B(1O+yԏJlsĤ_o \aHmSq}bQ 4^'6FWpƅYts=|!wڕ /S6 z~C[x$ Hԭ’ILW 85ڕWD^y7Ib0{Yk]R: C bti6HoIX:וBPɘdW\pGݏ|]%;N,gTZT2ɶA|BkPO^u\kY9Ҳu~ nȍATpY%bP y=9L:Z5oP[ne\Fѵpy *,ɉsqPL:!#(CGJ-GcS_d>Ɲq}ҩ~N@C:&T¦-&nf{~| q x㤫?gщň?:g˱N]蝦TW*x緻kvM|͟z{߁8L`otTOjfڈ@N@xŌr#1fa^ G"IB@f{ļjtI@Nd%DfLLTd]q41̭ci6+ۋm X8sz̈Vb?* gL Wki(!(?_'b2ڳҳə* 'TiCƥ}@U[EP aN:S{bUm'OhCFNpsGhn55҃tB+8Gah&& `s' q$q V=6 r YrGREp |5V=VDv;pu|M[?D]D{{+E6}X#7e~k/h6Je9ɯK Gw!ğ\3O٨n"rIf&Gۂϸg {{NK% Uf-we .tϙA٩gLl/pBKL!1P""{O4qORVܘ6.3SE A lǛ>gE (9# $٪QdS?vup^@u$̲\+b5⑹9abN5/Ӫ]up>Xʚal..{;M.8Q') J|7VkŠV۸Ty~^6*,,T&JVHpRHMP+"p[q2d Ѽ݀;Ҿ"Ypqб_;d>Лt4 KDX]~TueU%k" mgC2jZtbEgvjpG62RhN4|',!9u~%,bg#cGoL= Wdm4H yB:~ 26F#8g3C򡷋HT(h `0vdC6 3k^Sl0h.-CnwWF" 6u |Q9=;xlWtij 4anCESNۑTƶp}&h9e+f<[ /_Ϸ;7!|xމv{a^Bu:ۄ)޼U?$ rt40n|ko>0T'?j޾0⸽**UtLM|­[L_97Ɨ=IҥZoomoܪ)ESPq ّi۰cW;cR/so`|Qψl/g ֜\i_6$qr94V3D y s}+h<"Y EhxyB@LI~f?E^}Z H[%Y;G(?!y%oA 약.M\^{>ze9#&2-i D3 ?p>8NȾ4y)sb7A0SKGOeJu@()?F̼ dguf1EO@(p)!\'-0 $>_wm_9 U̇fC4w~ iV&C]^1j! C̺B#)f67;|]h֔HM^:dQIhaL.GoVK 537 l;@n4]^OntOln@Y:+H)|B2q.jx8Dao?3txNiԧz?4f ,g~C^j=lʵn3wŎ#ۥDN3 ~Hz>3`1O3 6Jm=8{eԹҢ1eG;2.ҩz!_ʾZ$WdѰ6U[d*ETm5hn,rͰGp83~RL2te'1 -}F2Ь" +v<kOSwAʦVDJ (Q SJH.}[bq ?Z*x4muqD7ɨ ,@8o2F)ű/8J.+ZX1Afˌ]n [y &9mo Pr{.-S^\p#\M KX\wÑРlCoNC<ٕ R󳊷kܽs"F9ZsP]~73$CZI*1Ѫ7Eu='Yٷ\P@ʔuMԦ-X=O#Z$mB?1~>_6#BS(zC16Ndd8Q'TL#$fyU~)JhJg|fsŢQ(o/%iJ`~nvxIw3)<-!:bQ |X=S<}iMR%.ZL9?Pj{ҍ̀,1ճ.Y)CfC;r]gHp GYSPxF҂ GŽ.ANXs|(y,5\'dE%L^pl.";xbh34fqxpg&7C(~tIǀ0jVzp*կ4 " ]j=.0^ԹF TjS}Dzx5I٩9mQv9y]ϕΎ{*+h G?AA]!7{P}gвjw6n#oWε+I="90eG8!sP2$xMKpv{^Yrpұ"Eȓ>)op.1 Z,KrBF%T(1d+H$l}&׉^n%l1EU? LnF`X k mɅ(WZ ^;~U;СKGXgC# Ś( K9گ*O!A xe(8nGꕳO}iG+0NgS$v|cb@%HGi]{FY-P+jw&TnizjTN?+,˲%VA7#nN?1cWF;w*%ޡPx;UO+]%-R!y41Fqc[W~ѭ~o"oǬd?< [^n@!z! HWU[!TO#Iη4J߳)._:){Pk62zS"^aMb%2&M!#u>EQm؆" ЛnF0 =t>~R;ɦrc~!DiA}QཱྀZzj(CRBU.o b^y潮C\ޯj%S6dy&Q\q+NE\A|Y /B:\jKSKfr@n1^trA9QVNcdZ7aihOLbzV]t tbkͅC"o*(2: ѳT"7WSЕ " w.g46L[RwY/i F hk}=2VN)KW eoHԓ8)(Fa]2`b ^ ]*6>Z>x)QcOΘ.ߛbճ4Sr#i2Jbşsx{ DG`W*N皉N]>Eac][EB 'qM{Kݥf +jݳڝx wv{[Ԟ)?}oE?vXvd3EC yˡ#^Xfy N{vu]>u&+!b`s 5u[e %xx 0ZKnP̖J8)8]%x#}sL`x:O1YKi)xn0KLU$lGR8R7@2Q6lyuכx{tx/prcEyփ W7X>,檔ohr3  InټA QE;нF2E#nF)qTx*?0BlX3: {:zV*EܖNvҠ e'6M.A'oN(*?(!b_SIPj Css.)!FM6𴏯NY-yRmF`{HZ>=ѧ "~5iҢnc ғ, +$elWaxPy¶,%M!85 YEΗZ^Y~Ӏf&ӨZ ͠@hE]h=BZ5V-Kgjl"aMr*LI Z> @bT+Ɲm妢Sg:lz}vi- uDr3C"5)/=C?s;1hl.<c;(Aa^Y?m9l,ZМB Ku 듯O œeO;W:ڴ!?VaH"6afHnޝykhP'4[*YM/z*Qb8` ,o%^ /)Avm UP욍b:k;!wЭlf[L&YOz%4BEGw=Cʚ( 03v?n$;$ۙX`N=q"u/\#TKw!VǦ2P  R$jpɕ0\|{A1L,UWɌz>j!jh2[6饍 \)D7h=؛FC^>nGŦת{DK(I M, U!_ԥuyoY1wG\ e u}qH;pDG2%tkE͕+spNxv݆+2e),U!PnY?GQ{٥E<<;{`MIV˚D & )])Ddܞ~Aw-cz[mFʃGU` <+,INs,])KaNq*=LwJ/_Bs; p %Dy&Д9R61p$Ya' e+ mO ;l ͬ95M ߠ䈘e ](MЗS nj;#Q`鿊o" Gڴ[dl2lXy/ |g9܆d`y7N Ϲ.k_Iq-QϢs4P#2 =#$3/<]{z ?.ifC^>&jK ,3IڈGφ)Wz#.%΂ 8+ g' -T:Ī}oO * ž|p]}8(FtSjGC@I WGWH8O3jҧҩN!CNa)S->I΋OͶm:| Xu-B 7'@*HIk9|(ɑHnM!2U,6ɳc⟯NZqTca@)gTy* 1[;I>] aaχ*)Ҙ`f/a0(W@#sb|]%Ex>P:9v;|ggևmmS׶WEv\uUT? >Yu "s0ڽ!cgP,yПkGU%TWbTRu8t0Ju^.WzYI D xjȐ&J&4{V;D0ʯHVPAlYWu\ZפbR;9H$ED[ )R@1h_pmN"zi98?g\PEfzҍe-mvz*,ډiÎ ǬI=yVp>&:68cu\.G윑!zgHp>p5^Œ,օCO`g:5;! #&R^gQ@$Dfl!8>Yְ$&@)@Zv#fU A+ t ty)zz@bV.`;HJj DXI(|k _х^K;Գ‰`nmȩT@8$gR)9%vp[Ke䓳v_ H8ZKM_Lb#G7e7??K9ƪ2ZsV j2#b%3>PڭW;2Ra^C!k9D]]0(| Z(#3/r<Ӷ455C>T|4+K)fI:g!LR|um~UT# Ty?􋩕D5,vfͰM.(RRv'-(sL2;?ʕN$YB64Wr8RK`QMxb;ov {Q?CtSQܤl?N a?cynt0 KK,[[^hv8Fe}S3;ߗpk_u8i܋k}JY_Gm Sc6`G~YZԺ~Ѥ8iU )Q6ԧp:~ly~]o0H|'uضVtʢҡ$P;1t h?&k.K-O6${1_oEΆ00ԢH#TmL2U/Z(do?_R46 r|m ֦/l5#8yiIt%zwNܬ?2fms)T7I5=LmԐ->{KI,S(ҷ":=?u>𜚨 1p9Ql&ߺT\@t}1#CMؘYBNꐻ2 Xx &g4Gv^8#.H[ T5 EN6M{lgUBht G!OƎK?G0VBSO8> ~MPl;ik#I?֜vkCO!Nі8g"L] 7ef1G .ތ$m Tvpl?$=V^=='!b?%F71؟'<4Adu{;0BRPƃ۴7޹Gb;,ЄeDWY[磜|%6j*)eӽ9/*E T8!5 K] {(}EӋUE vr1HG`x{!_G ˵]u"1Xׂ!|t{B-WH9U4+K;_LtЙ ȓօ xH w!" >Bj 4 Krw'/g9Gҧ/1J ASM~5cw!\ׯpoٶ,k݇˄23=mӯ-ⳕߦ=ZCd@( qYgV HP,Ff痦:3vkh$s+N6h3ֲQқ0 4߭[o- S/}Ua:^*?mI˜m"hFKge5>3h;VMq0|g6OʟZ9q+5-t7oi%mĒ;G'嵩X`3H ?N|6ly??t6- Tޮu/ʬv\DgO܂i\39~)E[<;KS$Ҏ6:Ǧ1wuzs%@\g-qLuj&4+Ƅ{;cGR&#/u~;sSCT5f{8=6GLz]!;-z+a4dktYb[N!o`_(t/{Z^ 9ŀӞ`S0??qD״ȧ>3DټL; O{p*w jn;uJf$ |HBc@\ho)2u1T|sMڜۑ=zjI G)V;/L}.fJbO))՚/*LGwA3-k5[|$F R|c.yYP=x&v_Jir*vÊ^ .s/3(y{#e/ 'sDrJkX#0\x{gou'8D[r)_tt\-D,4T>UDZ \" tChR:nF3QPJ>M &.T儸rS#FSR a.d/-u`er=ܽ[.M}W{*ZBee`4Ա:AfF35Fgryc6u 2P=>$:uT  )b<or!JmR`EF.'6U!W_IxIXYzCJ:KcG/Z2zR/Mfm&`^GJP:B}\qu(&([gEc0j*;Om:7>2Қj;Ub)}3l wߢ؏Ҁ;sF}z0W O~kU cߴUfl8@!+%o/iOkbuMhdї4Z bqG9"\؁x^,㮬0HՅGhk.Cflj[588H Bo`LcU/F.\&(:go Du]r]*G+d l84>LSdin{e(HUE.$w q-Y'zG5C7!.8-Jd*F~zkʀ͕FWF 8`el=N2oMhM;}L D(49R6rݑFڂ${9wEk;nyii(0f=ĦEAM`+=TbaTJ'=Vػ˖jlCF U<4\v>F[{Ғ{iQS$4W#VTZbGmG,x" =t9̺m옕臕MVtG "/$~JobaDeVwL+'#M vXq;wF@rBfra^)y|""SzuGh2~m;a]90 UyL`-m>7@ں,N>LAɣ>u1^KFǪ8^}>yq5gPnm"E8ZR7uEY Ch7 }%_7qE [_?#C &u|bZ Uu[~]5FqbǕW(z*0-^ݳ &,!B\|i g&bݥ2035 9Wz&f D|H ƢطWiu)&"~1@ 6$Y #nmEHgj}d`8>8b4HI}PV [7>d菾L6'(\DcF@u)y2S0is6 # JR6Vl%ԸVYцۡ t$Nԧ/ʭ?ٛ:7&II2M2i#`Ĵ1G=>7?S܋ b8-CJ+ԆI^ Iby3޵&.(6msQ!1"6,Kvej7fe@4^ $Az$ՄIktUp [F?4vYLO܀'X`1Ԥ}'caR-6)͐%€ڵ,"AT$:VɞEԲP6$Ⱥ^VJe1-~o^5C@(!c p 0zׇGT Į`6ϩ:F>aFqKWe0>➑s#S5մ":՞CÔXm_mM =}A[j1p)B'Cǐ 9ӂtU:GQa/ne[\:=*VԜ{EӍƑJ ~ѻNv5knSֺ,QISgC2ip#qbi/ n~vTۺE7jK;N5 ܢfwY nSR:;R%OsW\}~CUb;cu@]ly](r/(}g\|{SƗx(,p4j2g3Bڮ_˘I<x3 @b1 T0 /2N&Ŀoӗ߻(!?Jj+_?wiQ^l5j(]*[RL i{:-.9( QlO/fb!Gӈ73p:J\$1 hͷG>3[G0*VO̲ Ԟݑ6_KT]#%Gg鯎14O*coL̈ ^Ir Xŷ iwNؚt=ub >/8$8R'A{E:gS*W:PZPP"`hѮkҊ9~;KbqRQȌHjս`r{.'D]n2oScfNn(2Ӂ?u.[ќW2^ld NL99!y7C@V3l \K!? ݥz&sj3d;@7"#6'e["maʟf"%:xbݟKC9\ďp Pmۆ (8`L݀&o-[*V0~zA"-@Q˶iqI#m&1&KْwWkLl?i +%}P,?zOZ"~("D2û1„3(ʅj34FOI3%WׄB=Гkτݣdrb+1=׆2>̙$ `ATғ+]Hh+V/RFh;!pEaCd'ݺpyqwx.s1\4J`ҹ-r~ǤH)9zB:SoSb"S2cM*,Q X jzTͅX\1ЯUȷ@Zgu}s8H鳙vh/BhSo# % m]ȯCA>Cy5gA0 ukiL!/hë3+>r;h,Cjm0_{aьmb~֕~g\>B$<{46Ieb/\[jτMqΙlU 1^)Dl;M(1XLckPWdxIXfd4:3w4wcdnZYR3Jwa:`jЯa7ƔK $M\J?T ruV"<[~yh_&ɫoܼ J>#͗yig}kcNS"A<:a܆(;y@$8_% +.qg[VOJ@ ]U Y,>56J}f3qu1L3{G6!\cJ9|n¿xMv}d^9>u>ʵvѤuToN\N%Cb6kmdW 0i*"ZMCP8M\NE *rf(cqi n!a,{ etBi`% U<.0 *p$BK DR;A-%E|S ˂A .{3ԶGg ӑYC'8ޞacKu-e)DZ2\"/אcz[YC 'xOslĎ^rӞqRrRޚs3}xw#~4q7 o4 ]9H.P۝^}9`F\>%VmC;yo I rE-$*?-Zeȫّ5ԇ [m>qrd;FTN`?|a%y=8F hn1&N)L_Qʣ"i#Ha9@Oϒ=?9G)M昄փQh0\RTg2-Oyg @{"x4² IòոJj_SS6cW>/Ylc$jWB P5d -FҸT'6o4{SẺsN+ axWW6 G[ǧz߻U{>tMpt;ҘFk|ȭKV+TʨILOy6rb'uѩS xY,Z/26r1W }!GqNk3fmW/Z mR֫ A<d#n hCLHӫF.8DHigO/q~NeU MVx!JKh7u,ʼde$5/8^TҤ;#'@-iuNe^7x%ci*yDV T n6W%JI~cRYLH`D(qR3K^{#> ->T rzἁTj Ac,j1|]4onJ9yE%ׯdSxgqOcJFRjǞ 0;;Gj wn.enIiip; à/KH"BOE{@ 2BGxƿrpIDS=mBfj}>3S9e!# t/Ys0M[)smza>B] ix"]q\`=\Â%3erUd_g9UZMg?P31Knq&G۱Ng`uA]?;85Z?P]ځ/ E`h3Ṟt/u2Ӄ$)a"ɥ+q&d;owLacqLh2,/O)ʤiZt 'i-j bXK+*IKL8<] 3S<=_ia;1Lr̚$ɨ[hEAI]W*uX5fߨ0 >`ckuO`eM&H;vYP `'5?X"5:cY݁Y{X-+ЕtTTwR[-i.K@&J_5>B$&q@?RuKD*A>O43r]}kzOU%1cLע|NGwr8fC cIDKHTf Сd},caPk #_|# ΙJ Qӈ^{D}=W:/b%` `{ˍb3.Ln&iFGK&F qh&K"]'&iXI4Ey#$+q_t\# H^ZS^xWR~րL*b駰l'Cؐ񢦸1{nsqiґ9k| ]o—* ڳ1ۅ !pr|٠xu\73x"Sh)`̞|Jݸt!Yzm GWްKLCqnj ԄWUZnY"Վg=g;_?Bf´ۛ%eeNvv7Q0ƴq?ƖώOn^ky{F!;(HƤ" +:/T벽;@{k.g 9ݹL+#ª8fޭFCCc)0ѸWUM[%Sst{\[vHV! U xzE|`'Bblf]?u\޲=BV6Ë3z`Tap4mݒ0?'хjtbwBۄJ9E{;77qcوq 6]Ҩ-.mÙ=z;Ol<|[[T4y=fg6%$c]@!$NGos8^2W}xjRϫRqZ(>=B:|nB d)CoљDvqEӂ&x7*-fŵOE~sW(0iʿJ)&&ߘƍ]1l3ߺ%0WT}ZP)Nmx#-Lwk.0ء_b;u'e`g{ʓExvSLALKd 7F Ͱ>'}.@tjv 6\Up.ӯhL-URQCfS2J0kKXkЅ?0iH}G )j[gdLUizGi^3/ ѻ[SnY"`ʠ0)ggnjK9>2kt=Y6sh$/5&ycTj\L10;4#iNVl;=y΀ O 5链nMŔֲ ȐcC}9f2woS=7d?j๩  u]c58^  QG'eG^1p2g]DC SQ=E(.-!Žph1?;Tr_?mj{dg!'uUsO*Q ue+$t2G':]|RҹNO"-G8գRK1#_4zเL4BN:9?.9o tq7 5H5=eN \ι9Ѻ˅YަLPZ`_b&F5i; ]\öޓEsLb G[a,IRMx3B%pvWYL\q+:xfOut_ P9 *YpoI:ϡZ~ \)B%hަ*0%Zd-%q8Z6ʘ|D߲v&`{jIu0H+quz#;0X{^qo:Qh H5)\N(piwz NjA-!1&X͙P)u>^`(7>'k nf~^{-oD C/]Q[ ^̓w#r\#MCoYO"u9`졏mU$^(5 R>JtFC%o  U zG,zGaz0 f;2KfJG V@SMALxHso}| ; z,=Vk:=Qb:Q{2r :ȟXX磒Z.<fwN-8߆ =JဋcJ!9J:ϲ#y66u ] tD u,ov.>E,uc>Y4@ĭ\ͩ7nYRd ڋ|)qk5ClܞSがdmn7}.LqȌ8:ZRa B:ZzWoeYbK6U"< }E>T#Xl2P3ǖw:\c7ZTD;+ VG($j9)!BAبUI*D|ȣ SabHHFsōd_\l,"PGyɱ LDs s,z=}Mj%%gU],UA&w(Ek'4it}N7B^rvNh;F 3 n{WP-9`󰮊4q.Fgju=Ɂxp6cجZIWo+FD\ۦJ9[*e\/qZdM׭ RZB8mGn(o%Y"hyyݲJvIA[w:2ͰVw>[E-`ˑ 1珦ǕK%y6&pYz>URo:Gg!7XIH6ϧek2ڸ.y*":|0ɗsGVOZnm4f5H̅} N?e4夁S+^.^ggfy^$A 3zQ'BP8f [-pP59}J?õ'oϢ22 gSR7;VJ/g LHD Rg$OGF<>D[j2(֩"yB6ٙ+99ܩ?[!I©=;^q*ZfC9B%[yo:S;>հP(Ǿa^‰3!}]cxdc~0(@)yF9dO6 uo* *$rz$r?C=̓j?%u_Y\: 4 d 5HB95ZD@[ k+'gr ?ݺ}R{C&=mtB]^twJFi{2ĕO3PAcO @.B`튎ufiKK]%.n y>;a~enw=BQw `+P]t$Uk\Չ$Ũ"HD,u;R"볻Ke,N 4:L/xE]!9̻^)V,X*ܑ ^I|Dyj]'trt^+ F{cp.b"qnZ^4\I*TBw&q @oDǍ|Ǿ~u0@%,x 9W+M\g u'f`,೿ڍUۚm<9c!0`>R(B9Z&tb1ע7UD F&/cq|{lw\B[D|Vd5Bi m&ډ#)iMp9&P5&$y-X|2lPfd8Pݫn6`n50lrzI7E?&M$34tNzK@Js3Kz6T[K&PQ|wuhgjn0! &( Y+..gCQ&ի5έ4^S?(R-/k qۻdT[^t;o% mE IU1YL-.-s*.- I[۱'@|6J]XQHLO!pjaBCUTm8qZ7낇kD/.Ǟm9Wͅ(I AUXVtDVSm)[3K\Yr=M[]@4X xMzK(Ծ"+ODP(QzzW-L>rm繰L x+įM#-1!i+)8:MHێTo59_Wzg7Re ֶBf(&og+5mt͝$]MS[\8_C¥"4ڴ(:&Kc "3,7NWO\r| yVg+):O{E!Fh(HN2Ae~qǾpΒ6Z7#J>] sc,]Q8%d%A g>H񦾇=EfmL2Ap5{¨l\RA f)`ݘ:}KԔAlD5ȋ͌Iq0QT{:ee%%Fe_4}[&Jk)pga(FOޑLڅ}E]A5lj>i ri{j@ /MhrFFF.E `2`+JK^Eq]2NeU>P_z`^gO="uW~@~O"e 7!tiNWυ$yLcJ]^IT=|mL jl̯9`NwadvŗXV,`hl@jaOa?y Uq;,ɒ6éOL -GҔYX|ˆbɥbɁ 1C_VqA^jzXL.oR/=.tWxgG'P:d-9;lE!9eAjh>WX#փ4V`dz]0+S$GŬj-f!_o_S Ng*RT2r2H < - {X{^;^4$i%DܧbŐvah D}d_0+I8: a3@/gs)N=3wH, ) ,E4_G 1vpǺxqlhɠ?(5"Vuަ剽%_ҍG )h8лUOd9e/<2svVtXy)I.k]ќXA̝HWXPAeH$6+N~ ۩>;6xXp_dP@W߻hp GƐZm/"Eמ`˦[ΐ#U{E)WiMJ .SCYhCLJqFNu,BZ68z.cˎi w\b7olAIB_Lvyv類6:s6&o+5Zkrho!ٜgD} &]=iFq{x';ȌTzIY0|ص)S5L'?~yY+(*9ދl1 Y(u"_".[ȋ^ص\zB?p#kBƈ)+-߯+*i?e_.Ë2( *=n[صaVǚ aL[mwmA4VPl& 9 " 2]Rݫ( 5۵2$P(fu[wܥ[qS XʥKCY(qD{. Rf2`:&5ĵ[#"rxظpL݁Ao Uv/Ce&<|؊\NvL+#dQk7+ tRc\+cu3(~v>tX;V7>Zd̒Fn|| q=welӏxLkJKDʢUNu' CF8k?.,Ahb `#p'>6&69z*mj-+mz8Ax'9e+ ;fy@\kcmnXՍ 8ҧf0ll@s$)A6?WhĘgIފD,y; t1ixGԬQ_|rrP[c1VQoK,;'Tsv*jN Zlt̺A k?q $J1m1DQ3ysSo.nIt:2zJ?ZEP6#+$R<xUo] _Կe&X}KnLAEz亣n^ >t ͵ZP'[fwH'c~3|[Z"P@ Je ̀]C,6 ƒ/ JHQ  %ג;+VbB!Kp=(u[;Hl,:sc$=5Yu5Tĸ>:Y(C&"rͤ?ʶڬe0w{Tdz,>=;ϼKIOYFl?UW1ے\'9#tZ9,|uT̍jS~bLp4GY,ɗW+U1b=CK0U!#YAt(5yfZ @"؆ ?  2k᫢u5urzLkk-[zLjۖ[\V泘<\|gɝ.MW/WzPX}I5SŒ|38C NC\F^,nV Lb9ׄD a,܀Ћ9Ի9v$%RR>&Y8Z?  5|b~so+Hш(yg%"{`4jwB",V~A݌\Ru66JόO91[ga Idim>7z_ IŦ.xfbn#,#z }1-(>Ou@BPZk6չ"a_i&|L֊10 ?vAf<6 9en6i "㮮j$a  u>[WBAX N XWf0$qz_S,$=yp57kowPy_`1%#@8z$-Fd 4` ]Lv`2)yXcѣ5#J$_Y8tzg>P ]2P~Q&ӽQ xy&PgƮO-%T]L)Sކ)6Ь3cr+Q̭ ɽMFZѶnn_ze@}_2=VfS{g~ [۔y)2˞{6&rt҄M;QìShQr-LʲƔO py6ȭ:9;m O|K(偔]:J'Sk3'Q=f6&tH#{K,Ơs\p_W P%ic3FN!(Vѧj/g ~U?[ּ3 -J[;ccbͫONkp1]~|_5VH@dzgvhk|Pӳ\+w+HD Gpscm~ B=@vbL3%L X+$\vhg5NՓ!3Us)6[2*A3__ZxYE.9Uji8dV5Z'?xd>X2ȤEFH1+RSFpv ?'g fXFX9+AFR6\2=I`Zܒ]E^K/ٕT(ũBHKRmdNZ*gHLU,w>z-j))tkBcMͽ 5DEgK(t*! ĽV$(|q߰3(Fk "dy7 ڳ8m'@$k^ Dkk r"fg$!?f*tQ*ѣtޭ\li?t󱴿fi6EިG?A,|3M Iu,2*1&с66 `)Bv]5؃V\+4=mt> C hAaY 8Ey=>0|PR4U9:3~-> Q#=Eexj\0wAr166k'_O~/ ^ OTF)ux[S!OCg;ƏFX[ҳA\A6G^ƠJÕQLzTpsrY}ixSoA)=L?;Kȹ/eMǠb饒댻2xݐ@־aHȒթkbe?xhMz9+C.`0y!%~J~46&Nt۱+NnL*fcӞSE<IzL!RzE.o[ʆCq30F F=4s^BW\|^T#;J*k1"6A2S}nNL-Om(zn@#`_t-zRGKG>TlF|u_2^Xk-_j BV=hP&}lNlqҲ(CNZ[1A?("Xi ݬ$`3aEC"#χL Glxdz⑝8ӂYקJ3LY{X5A׆*?/  pw0mZ]RX~{9r_`M aFRH/>iRUξW?ʈMS4mDDdY0 asح#?Q7V T#Ҋ cEz(_ 8ۀooU9!Q%iÏ6Gr3".OhV<"*VиMz/fbT2}{KFqTXNjl;HD9h )tsg,2iKDj (Wr>7O\\knJ6 1~0J+7TtW^S6|tet}HTT `/ȝiWY+zw($*be yqEiE>.sey^m4Q*r+@^zM 9;y'㽴U1}A71CuvR^{6UMx[J:MU~Auz??xO(tcƇ[pqK7 ƏLJUB:8j!g)7vSꦜPݗsrq[)F7&f&Ŏ/,&֫A ?s4ASYXxGh$pžq/CLfnfHzb,vc(X1gxocm|I^*5|M3}„`KǐKP~/~`8i6qwaSeDq [ZMtiy~Op[Ӯ \X2@NBG}o˂!sֿ>g3A.$18=Q<`=UsA\fZv!_z|sĖ2EtOux{ `4Y74I,+p@7;rs mCCB?ka98B{w5 |l.hr LWN_a7"*MN Y*+offһ]tt.V[?"&ޒZ E40(9"Qe-(֨>d},E'{{ o҆kM9w.сݸCW7UQnDJDll, ֢JUR4N{3;ڗH8 ryޑOЖ*{(fpߨ4C6_lPSx ADE͋UFR}8+h)kOmAԣlfSom<{yUߺP; h2HL^$THUDOy)4/coV5nYi$3`N- t!+ad@l3k{m a4˙FIͫ'8em*&lv'd:{^I#kk\C]%_ 0Rcb3C Yô.GwU4xr@>n>\r$Pxp~=Q~v4`:5\ݐqOÜ8/9\=5E A`@n0<p8&&ڼC/T cG7-zJm ⧖2q~Y0!Tq|4hibp;\~]iܕY4v0vjN]#sRɒ~cKMzoMoqԮ!dx}`|\[ 8Ӻ<N(΃ \(Dĕ{ŕs~e3 +^)0~S_.E~|k%W+eLÌq]vZ`QEd`~%cr.Pn=3a븕oi9G|dSVF{7qq+[- (~H0Ƈ Pi8/x 6* JvDScVQ`^78fCKX'WuB=wzQ\G910# K/݄:%'n67xA~ fSe!w}lX%)=r5@·?⃰T8:W5vOxO!_Ė1ߨ0bKoh~Ptk 3 VQ[afII%G-P"iGhDҕ̕GO׾؀QZmPP"PֆQ~J$̺LkF8=T;{V /1'*7;*yd ?Z'mEJ԰2 ȱ.dզNPzJ.FHA$>J]o:CÐ9#;ңkEwLpf\Bu8~a]GP 2Bk>(F9u49`Ϫ38+KQ<鬺 /P3! M1)sΓV/d y@f N<! ąQTnUN 5,2ĐʭB֢E:!bn|C $C(1 \@1$g\ !i%M,݊0(x1 nGl'~鼮jLϯ{ 5=*|P :IFŌ?aIyQs%^<(Iˊ%񩶪?_TWmUwvN`ޤJ^{QA`Cz]e8UH׽.?:̼v R,7$|r䎱>ӍȘAd6$텿Y D|'% Cu}UPiZ| /5KOQ'D7F5r. &ڕҁ/bbs\ `!4-"{ÕjcWW%:#E;EC]t"׌ߘA 6MR@ vo^NSxͺ6i.|켠Ҥ"2X`vJrz$iމԕxA]]L]+s8J|,xU; x vrUv+`yųsdxWܧ^EE3g_ eBm@קlc -e!0dHLL$Y+Uɿ"'@RqUimZޙZw@Yu){>x(qi<1i8oevpf׈Eh4][.=}s%xg#fyϷ"uI?lwϔN,)$Q[=%ko]K-(Ќˉ̄n_:' X* 4'HfK jx~׌}[ɛKsWאrjhm2G?d%X쀚?4̞)2c#v& E].,CE'zْ]뤾72 9dfN8!4~'yHj%qKʠƜ}aD5 eNH]9節\@#gf~ =7չFeؓ%r{; .WRɖQ1_xp!fNkQ!){HYL =W);vW id+5~}eUТya7KsoAsFǣȦ 0S-Eu;T#k*_HFN!9g;{T,fe)ivͷ;kOvܖ_-.FaPD7! 7ш 6Zr9Qҷ` H&xF K}rWk=WpD]puhLvMU:ٟGC)F1VWϲy3t6r1*}&I/0^Uo??@} U9^L"r0ۗ꨸8ߺWxArXqsN;CbU+B̺2 S@m[ʲka "9olc Z~%SR(foزU`jǰ.26'c%N$pށJp%7ZHWXn͚/}p=0}I拼u=|YQ蠜 rGAv,ThLs jSe툄>TO}mB&~hWev1?aFk!\&pXu'ԝ1&*쳩F4pE%%o28tsG7|isjަQ׋ R6>Ran&@Gu -nT s 0y I>Gpj!0 |30 }o ={ $%: a#t:L)\dۏ %y !?]`{ R;;%4#<{q,}u5sHDj߽u h +|~GƒoSR2t$zH'R+( ݣ,Rґim]? dMf<-cySLcnZHO@}QhP .`Wa󿏦FJUtDk9чuTؽdLb}0u>' Sv3R2Fw>ENeTW  "%ì_L#c36™^OӑH6G[۾섪O\~7Kh)з*"̓1` tE'T?eA|e4%] [;Q78~ >99Υc av&f$AW$%DtejdssR>(B-'?+T@cJq6xZs=kAz-(O&?ߢӊ3 6 PTs;SS@}QQ hsBڊb S`&-GA}؉e eyeIt.㸄j; hNZUͱ$&6)T4^;u-ԓ-~Ah-80^W͍$?Pe*qm hi~k:sܒ" 7ʗ HZo]1D WH-JtϤ5 KoNomB){fO\2PQ!uZфG WJN ꡽g݉-z!$ƑXx*0m9vĹ+`84V0dʅhՒrvZP=k@k[>͏q/uWBx^S}Rj+s'b6& f @s:bigg` ypm %jZ^i}O'a&]cV<5ӣwj}@az? 1`D F" DPYZ׆Z{pfgX'ynOo,2 /Pt(nFlx#ca8jcL!"N@B?y9gҘVї x$36cQ :}rF`S\xV8}TH>\ⱗ.;mŕ nR̟#ٿ1@NLKkp!$ ϒމL.y.Vm=ðHQjl QV_MujWٸ_@Jn% rN6gS68u4=iI'r.~y}/_; ]8w_дäRJ@tּf<8]y=2V}` <0Pb^' (PWzdHfRz1С3IbGj qXf)=w崚:>-|\_,8gD8GbHIhh(vu#*Ƥ&RY0h{o=Eіl"ʮ&=| CgUi54'rw`-yn9>pJGWt&} L aJJ&8?\@ w- s󚗉v^0 Th`wUt T p^btN5J%-/k]`,1d"J /(& ^9x&R۷P1i_cb|_ˊ8P pPyIvǖ8VK/S Mb(][H3p3Ǯˋ02ud]Ch%WQOJ}s+ !*xKzgEw- #(Ys 9 lL%fup`B Dm^`ۜ+fAJU\GZmGF|POr nWG7FܢV=ʧʼnDc?+/&nvi8Ѳޚa{ %722؅Fhy_uB:Ze# >s">q !PA+&z$aWʧ,4)"4>+9.tc5cXFU6zy[Sr::~+r2h l Nf#$=6vd*?zx*CRl5iOP]TJc+?B]|vU-m[SXïa<@,b.fRĸsքI[Zy +v h#sNiWC`R&_# !e!J ,ih\H[0&-xՠZ3{d?GY1d7Tҋorfې*w7g-TH>k:R(Sf7|L\ @,EmД ֠"(r ܕ 9G)CMb~74ma㓄 חv A!bjZ g|mp|wߧʦ+4 ,%?>@9~V͖:♙vd zDZܙ1H#hI{?mhB!`=&4hh k9GߡF?xmuoY4O 䪫cƵEw駣jh<4 &>Sz7N&X~>¢TNG҉ u$7[f &w| @wE1-."Ȣ৓V/\^D!q 14c~5N; Z.~ڟCԼuv*ֳ?sh|KtM!ا3]Bm3׳HFUT?)bAJ+ϧs}w dJ$e-\%0!;f;(,ոn}? *1cx:C':q-#DςGU[_uv6b vɩ{/\ܯA{u^Wo!o3O;EL!g??_3[=:v{.]4C󩢎HPk7z GJ[҅Qb gw/.-XYt5!.EhYf#"ƥ |b;R"h@踾dj*F DF+p Nvru}+H1c*QL/e<~یGO5SdΦ4Ĵ9*enKy úcNiHJ:v<5~WmzOLNª5G L@_@1e(bYZ|Ў! vDÆXxbhڑM4r$bh2-Rxo۱jkr{]3-b1P7 &H3!j kK,&#a(%hnx.<;NlArќ4{B$qDm <]"-_olw9w$6]@o1ryT+h8@0GE I13nA[)T=1ԍ9/|^ 2HH%o]vsXTޥ C$x6+ ;/د6Njj^SH4O%sI5ꢠyKYD"IW x.L}%+?9yսvO`l8Q`D3v5 Iq=kz|b U;4q FX@:^޺܄ݎI@❯ll#LsK*ʼnDl6xhvvkQ1GqKm RэatR@M$mo%6'P-I"[jhl댈EW6|3J!Xz{޷_Sfے:v6cgL,X19#{?h^KIJOVdn̝[/%W ZXJؙl=f NP"~]D#VShd_%,=d )&g:U<<A"LrhvTÛ> =qG~M* W?~vzJ`e 6^="1>-p{-L$YǞJc L=sG=:c _gf̽jBnWM`IoECߊ͚ޣa"]y暮 !u|N-@GbNg2Y]gmwNG]ښ+BAU=ih5\wiHzB¶!  7 Y༔$<*h8'60pܗ$7֊tD%c/J[*@C!^w›W' {d2,6U#Q}}f*6DCF_Z}x%oKaviݑCHХYA+s!Azg%!GE{ ?fffc72c\gT1^l!MyJ8ajkhڣ^X2>nںxA-jjDtC`I5./bM}b"7*S ؝FŷA /ݩ8gy#Eh_dCuxmRN:QARQ轨?Ʃ+%/)9'AU~"r+,)01~z+ 4Z' ̌nM@W;|Y@w'囸KRAsI|ky xfčuw#weO3e3@jDIB:mOZ/[Ooݜ0 Z yJ,P5H¬58xbcvL(~\lih؃mu~N#omіI@P:>MpdQ.42* S2 *s`;R5MrVHrm7Pw"ܳo&Sz&Wҙ4ˋ~ ,pZv!Dё.(@,#AMs*'7'Y3`-7&)3]6(ݣ\/Q~3rtcWX7^`Z-@bIawCm!rv CigmJk-s|WNaTy<_lvhlap(w滛,͂콐 ,_0c]YEξhemI7HոӒ;+©EEӌKQoVx6xr򄗉-)20)Xk4:k3ob1fӁBpxQ0)0h^wIx:ߩ;yq*?L;+g0Z!"X ) lZi{Pq3 7w*DvRm^(>|# Vq^X֊8>g4Rmdgkdʜ2,k; H词LtoUs@kaA5(@iB_&2vEE焑}ËWS!Ϳ04YұZ {I*ni-XU+cG  zvO˜=w?p+E"@%;nxkݷr5/&=`EYS\ dWUk X8݆kJGM$W <=75 $];7X=3GP$?uM#O,yj.G qVX#.2A4Dkjw0lA=@?VwyqrO aB),9#$ ,5j. 6y{(.3^[x|4 GAF c߹ Ow]jl 9*L#Z"o IkLK#*)о8rg0 ϪAΜ G?cm">zVxL G"6~5Sd2G+6ǞKX_2TƦEl?a4|2|+RZ.NDHwB,x:NvaƢP ؆AVm^!&n_b mX<nyKϢ^ZRY M9$Phz◾z^'o(ul ĵJy~ʾp*@ԇaBa~,Zemmm7ϐtYVq\se$}x0?IO2V-4K"[FD#"4le܎p6bh6xˬW*i A]×L t?NvPr,h~۴4xSDoMeJ=<#w[Y>~'YEegO59ӒOFylЮ4n I&Jn#!C#P$n;Q<6n_HM Z<>Mln^ͩc+v(C:"r}$u _H:PW؇h,iNa#YNb z;cq8~wź5 Z_A*=3ñ`!wy5B jÚݗ#&¾Ac:u`" V4E+< `uom={Q&h XH a#QE艻`BD?G zե~B\ _v{Cd^}?-AuQP; X-UvTP,spo<2sZ5CG FJ6)$hc0:zg 鰻[%9ir s,s^()JM&D.,6iwv=p'!P[bȇ'ߏCROu ϡ U9rKvS{ɏȌr6+?HYB,N|$ 鿟BM5נ5OW/vsjV3_,jPP @$O%x] AXwEiȃ1y>`4oC )wQ#Ҩe}|yN7?08\RL)t)!Ct{4PW~-w 0L=s3 {ˉ$H|8{#ǪuѵՋFۺ!Ɗ6>xXfObQ٢!ywHtDyfDB" %)&'o=p>ݘ, w ?eJ?OrqП;C3Xp "״%B0^/Eb.\.ZQЭyځW'oM\!΢tfE-&D&ϱ/& OI'4BZ17o FZoUA%ןw_NAHg?/ShiŒ^? 0 ,[cVT͖W-;a{Inݓ&I.qmއz-JthJCZK2%nB6U!$ty; J?-_w6 'eyPqY 3w![hBxav] Lb D寧 hGQ[FTfX!06?GOZAZ:7Xsf ~Q`,㗖g=!yI鏄TfyFK6!g?pLx4aVy[_Ϯ9`F榚 WOKpHPUeg1$4? tݜ Nxك9ނ`91s5҇u-[e(Vbm"<V)Du,\^ܾib}(WP~WM][]Ÿ_?ˌߪ^(]p e6p>wDj~lkyhhL8iAc>$[;SW[GUzVW Cltս u#zgSS誫9IStLK~K>+DoͮA#jwz ZZh!)ٺLp*I} a]$B=.PUqx-N^k}Jy#O0EeMϼd:4%:EeOZ Q\^w|)2Wo}͖>H[)ϑORNttC 2@\p_jSfOͲpHm>(5685{ZZ!?'E?pby|2{d^Ibw8gl'X2:x:Z-pm;K6Wi|C2u@%>{7iOU(C"\3~}u-\3Ǖ{h @;u\,Yg~XT!J%z |,6E)uWڒY ~`ߺS<%obBPT=^h-uTNr$+·tAm-?, t )T>ӧ=y69"ޘkeDu1Zƞ{BL !uBHKƎɳ$gIPw],?(,#wrC?(iNxt-6.$ֽM g]? DH:UD ʂ;GĶL&n?籂Ćm]W=dCFϱ0аrNg;``t?42SOuU;L߰ډ:p+)oPJ24vs)o c}~R_V4K`Nؒ_mVI` Qe͝?Jn>hKwfg`lI0Fdu/uvH^\&|IHt[*yFB!keI LҝeG(=gPa.(dV'!Vѷ,eˑ,*\]xƻ'r#fT{`_W*=6,nNT j8E#bc9F/+'j|L D7( ^LR.,'hmkXhT` <749R:ţ ҕ%c-?R  B*hj ޶%T-7<%s%e תB`D}+)zDzkjɍhwis^{FO}㿀Z\O_!T=F bW[˞1lw-$߄i]}ǢT6}+2U\+DmOHZا I %|s~)<}no"y/d; j.@<S;mr״fs2u!㟄.,t'S[eaN#[@)ul~pqT<*+ 4c)$$RIvZJYe],hm_IbfB  ta ɶ|NiSr+D>qhAa*oDxF\ŗ[n2HmStYVy7J< Et,Sßeق"B@f^&v:WBd)DFU:aI'h)u(p!=Rܠ=V.{4FGzwkOX ifqO®O[~^C4cR2 Eے}XU[U_4:tNa%gR Oe2A29es{SA8qͭZ"Ïsƿ&ܞG[{!UM2I ώl͝#pnjWnXӢ SpD&`q,1GM/$.U?"wZouL`\럴%1ɕ=j?EB/Bs `cg55eYgu:ED[ (`P][x/Tzm1藡I˞XcOV^{f3nW^SmM]>>..5U5m8}u J!5 OcPǯѨU ^bհʒxI.(Н@X}Y 33vuSzAbU'!/o7=iHBi=Єsy'~#{(\*7Fr(8xN1xg]`cb-(,sMJ?0wPs.( WI31e#k60éّ7Z! TW4'PIvF#9 wVʉ|4x7$XT^]ٖ-|YH yi>Q\?eQ gD}v'@9uwwȋж3>bJKM@w#4׉ϴp8 }ڃ?3cWvPe}C_E$/g% i*V#l&G 8k#36W薹yp_ A/˓P 1/CnWa^pT)^l8+SM ǜ.v Q.B~SICQڲ30$|fG2 rh-Hș86^^H&}PYbFNݵ1hkzsa<>BogYbx)\<@[Z?pŠQ+0'BL{vw·RK1wsjTtfmLл@Z@Ҁwc&4r/ L_vusl*tbx#ݜi( &anz.eS\cjW#R_vFiӞfJ:gi59Y 6nX3wD -(kVK~ޗ-;\UTP#چ驹(c 8kj3@ p>zibV;Ul< ^]մ͕e^"ҋѣsCM6\~PvPӍ=ѻ"X ?2~N^(i}2 hH6d! ]c>Tq_#)K/_[!Z`W"~*[vhUgZ|.Ha܋Åb'!92~ py8O1Ap[EX\IC2Wz "Ϛ9 Jv"1Ǥ#i6LODn0ttyY@qWե: |ꐎ;m[xӴbq 4i6,n}"U.ۈLN$n1N S7Э>7|r")h?Qٯx\`^ H6A=i|˧ 9>y΄HHj:wtXH}ycq%f+h,^͎&Կyt,\TJqD1 N#G&f*.Cdۉ i8f׸.M.޵) ,%T& 9u Țg}:0}eO#cPhB1N/4!?TzrmUb-볞D[Iݴ[ #[B:)KF,eR󸎒نVI>$Mz;ߣd1C"tx>LBb >jP`2@DfRqm)Aw1m="Bz9+gMQBF&1gD.zˣqq7ٻr4>hU*G?]fs6UFB$6eq7QGaFR1Taœ [~R\q|m>KqO>e+f'Yxc0QAdGeq98eejbVUG_oMYpKP* AVs a(A3=Ud'm)ٙze,mi֧#ݩ@+d%F6S5G: Ξ{D? -5Q̈H:VNZ]}z0̑DN0 9GV/gC[e][]q}ywnv]Ue&ɏmq|h_4%`FN.R)O fW%{5Rlvj5}c.U1qC*mr7QjܡGh`:s5!s{Ѹb^|J I"Zd-,4e,m _ÑA #Hpq}*6Btk,łXiXMP5HMv&+ J;ØmTL*{;"8RVMRfq3$\!%Kda5>[r<41d1k@/ uXN>ED.Y&DM)Uj83:4Ƥ>TmT6 sG>ZAX&='#W#]P[PewJ  6TJ mA1kY1_%Gz3S,o@X;).3wpDlQS$q6~+Zr+Zv!sޗ}";ǫĽː+nL֡ke7]}d?:UZ, } [(T"]q2 J܅u]ÁAtJ(6Wduuߟk/` ;%PtGɟF>uܝn y)H`Lfn+DáЪ&54D<\WvO6:XoF|T,(jaf\lA0}Ǎayo^!$|ĥt)u|`agKle pEcd 77w}I\K Q1:efb !@0-w!yńͦbTϠpm/cG[_p&t"9,.;0  ]8ԅE _!lN\N&PZ 0ENV %:w y'ffMа/g2!Z,n5qyY?9ۭKdN]psn\REIi`f^%z1-Loӈ3[c1>EDofh[R?u wA?Ñnx Zb,Sy"H4 5~og tRZrtdiݦ7=KSl@h~SRMN%I%qXpico&BU}SHJ-%nr*H+=.PLno0JdqLIiŽvJPY&lQBnIۥSV.δWX]|FIvH%1l0w0 w⤪.s+ހOs^K<4c92 }O5_CE_=Ug?"fQ,ͮZ4k|hH;d6Ͳ[<) diwR2(Yǝ`@FVZS=@cdy*jSz(ֶۚEC&>]#/OE Nt-mql2$S׃(ׅM8MB@7HjۛWmTh74.9ggEC,^JM@z 5^x"HDF^qWh jqЙa$Oadυva%ZIY( t1$Uv sx0,H^C5^Su}l@ QB.pShlJ@l7^(D hai{cљmc{6&}gr)o"(RH9(o?SUԁ9q[Ѝ0Yz; mu.LhYf]Eth@\1rcq =aQ rm63:'h1v/fR.Ħ||"}j?CF?L!˜@ՙHǣyQG(%z(^ zЎtΊC)ePn8rtu"'j$7z'8.L/؜Dk{܂ Srg`GZ`͒0:B.hong#D*A<̡-ZiR.mg#n2%"aC(M$]?ۄX\25QYLtצߊaZ>1EXC-gepYMJ/;BpoZ5w51:*-fWׄȹGvHC|6]fd#0?+3@ / A"HE,Wʚhߠ Uq=$eyDX,FsSP1 ̶s)~=#?kf9h=CgE<1cNaF[!Ļ0 C"s[ܴeICKPoV7KO|ڄ)yrym(*lgvl/;va|W2tťLRq/EϵʯFqpԂ~/rO9J7 hP8 O.QYn[F3y9@Iw yC-);F.噜EqM'( QnxBA4ߴEh~.x;[9>Bm*3C߲~NWbEhtG\`]Hk5bUz/]=_VB⹱Y:Tkqd[٧}WIVSUKak*lzu4d@,9?dHU2q_=tQl ŌASSSY*^z"DJ߸B/-scU<՟O` $ wvXIQ)Q@E-8pFadD*zP ~DZzR\) %8M,W>J]6M;}%E21i~5H|HlqLWnTXsGG}+nִ}m~ϚW4Oдs@_]0s&bbbC(k?> yQ*Q"+%ԵQlgz{DÈjNdl\WSR?g>`[ȝ0`l0ֶd̳~xPe#p5ʅ `bV! M`kߊ\#~6qOio0,pm*Q׸Q bPu8嫙%؀Š//7S(zO~ Kܱqv;(vKI{"bI'G,5R5_lUڦВa*HÊ_$ ]ؙ9] MJ;76>O)x[En-0pʺ䩸4>c>^/谹!!!+d&nլu}n!}+ d(V 2;рW G)!u o FJVeO TG~]s̯QUOJf+0'X{6pnf7KSðNz:'-'-(/~"{ɵݠ eE{&:b KRj&؎BЫ-2uS{QBPn-gb;?}]x*m }YqΖO M)P'o.1y#-j{ct?WG$"z=Y?*،A&D&BwRL[Qԕs?'?ӞҡIraūWƎܯ1?vt!' g$f7gS[lJ_ŰdȮ`aZTog6:9QOܽIXBpv5<(Cǔ'ok\Œw32,Mô#X$zucϟL41Hܮ?JA>'^l@2Mq,%)iD*P8C\)զsEUҎ X͐ONה>> yE W,2ߎ1=j\Pzw%44 N*FC6qV +_\hBTȜ7v NZ%y^T5W+J1]%1sG^d(Õncmu(jD4yysN þjq(MH Yev=yVt &iW7  7U:JD={U.QޤIr_eg]G6#%hN tqQ u09؉i]rdT3@W~BcAe]&ℸ Vޯ:PK,5}p K|&,Й' }N(绤Zs';.mZȴShU-YsA!A@m`mX1ϴ;@his7V %A Ek>T Wmoo\ hݗwg:Fpp;r)INs{|ͦ3 '5 qK։zh#{C|ӆN\6t_7,)) dĈE> ŵt,FCـ;)d~_%\6җ&"F Ki{,'WrYe(! 0ҭ'~B{~,aaj]3{kW@qQ&DX1d]dQ:yB'݀Krd^iFx_ʺJ ŒWCa95'C{9 `wj ǭ:iʧoh/'TD^|f(f2<$R,GEf 5ٛJ c漡溎_'˃ˡ>ye7E Y$ kQioZ۩ ~r}o+mZAd0vLcɽ E0,`bȄ+lz1hgpq7o+ mJҿTEKl5BCTaK2 BݒwsoHh-fn57LH/X"uJnj  bњXpn2mغvRdgY%qz,OBBb;RAj=̹O0R}psk@^MqY gKhMGH R>W^ѿ+GZ J i>) 7㞒=lv0_o5% y?FqܑVl.+pS߶Ye@2m :ږe&tP:Sw!c T,Ti6 ?(]v]ګLQ>R+3\v/wƒͱ5w'Y ,l DF!job='4Y}9)Uz7CjD}z\m)x+S /^(D Po؆d8>0sqj=DI*ػr`?n,@s rk(*&,a6rtONѪxa]nOeUJIz[ocSQA{ UN'`R*o"eiz "VF4#`FKR߬ <@R9Œdt*huƤ2r9bf#<9?Ǒ U\EeZ3)4g-s|PQ C^,$f5Cb|PPkgocjiL}Vd#Ѥeu^H3Z b<;~L'QCR@^fvU^5 2[]_]&S)^V<i^6Rb'X9z9wDwxZ]uH$Š*EtQCV] l+[3Y5Zk3[ ιO̷K&t]-KgD U2!zX=hyVFwXyHm" ړ@y~QS&kDvl~%jQZe^e%ybObɯQsqKq6W]UAu =;v(և8ʒ5s^i Z"DJ͙1+6G2HK"g(Q9Y~1ڏ}ׅGګD ЁIbgDLJ]z8MtzTɬ%ɗ-ϊ)zM-G_I7jA#JBƥLm ]rB<-خtpKY.\b 9*~Y=%"2mn*'FO w%0?ay! v w3\ajډx={J eKRiF %<Tw0ݮ fL'5c!zlpN3oM۸ϲp51.18P%=g8n ӕ`Zxq69FJyf鎯(]KAoBhTaN!DĶkE`]ۄcc Ggw~d{W({Q4iԨx2Y=۫f[2{:t4iA(wIO2'19R.ml1|/AO0H,]g`H2掩rdyzR2*M,@xy`9ScMC^{ C߽,M0ɝ:ayHg֙ y_.w5ՠK*Wu,5u N–-f݁n}]VBǘ3_I88~hpW8WߟJYA*6N9dB2[h6 (h\+^"Prljq!k/)0F> <3id-鄁։|`'Lqu"j5ޣK4},w)R o7qȿ%F|6jbDLРP>cZn >~C_tYؚ͘}L ;҉O(=R1-5P IC {)cփ"H^+_l-_ەZ Guꙟ9l<W]xZ!~OGY>1i#jY{:?.Z*5;3F0K)Rz3 :`ᯫ`6VQ-!ɢJ#YWMG n" +( =R-h tZ&78٧Wv;lxUkۅjjwuבnt4%j7XD'3¿ܦ$ wTPg|p~өhO~B C uIbT)5ah?.(2YqЭ` C**T@翫=MA$y?jS;%4݃.E@bBmtV$rJ;J.#oB Yɖ$Tp"u"e/92$5 pKA)P{$W$pwkZFF+Zdsq:5K N귤1c=0yZd\eQ(2OTLЂ_ؚMxך|Y ڗvHR+C:_ )nanGFҾ55.S02cUhB0T]NܙAha?P[ؽq'RO Z*.t\UpW7Ȝ?<ukLY1kU ( կ6zL([++n F RSt.x;+5[||WމUnT:d$(cW3h4Z"(;gݫ>~V_2j j?+nX:Qkߚh0z+,3j#ݵG7ܲX7FuYP5Pj̻m,oy_%E@}.ۖ[fαrZA_V1klg 8{`1YuS [6t^_њRǮw2)o^? m&JfU>ifxKl 4x&^Iw+KLDŌڨ /1E/ U~8ttگwrܴ` (= xWkG`r+fp^R`,MbTЫq]Ѣ@48;\l?pK g-C(HBm7v  c*ۀ~!y؝䛿)N"TWb!p]mIX{AcB䢜1ǜ J<g7^G)y.h"rV2uf*rUUyi$Kd[\U?#{^EGHqHu5a+pDQ)o~/{v\d4&OȀs(1=V3KS' =쎩wn!`A4ps6Lj=h˘|3%[6Y<$'JC٫%Ҷ.9f52*!#U;6ΰ{#y 5 8vd~<׽dq5t]'|M&+]I-dl'3ZJB]lgMb?<*N\Bnk?aZ'qYn̓˵ZWm0h/5Q/}] =DQjJYbs,kn?^!|:>Yh>{|䟸 ݐ1ElVB;1}(,7c"A+x,"} `q๣tG[SO( ݾTDW<`b]j#2ҿ%>[G /9c¤ϴ\6L1A >ECx;_/ F@ETt?xb`YC`;Z3lBA"> ilp\beBc ۉ5~K'55l(#Xx6kҧh\O#'e&B FiB/q6'oRjdHUu?&EiuM(fp*L/72Q~\6wWT9\j490m(pִ˩KLZ&6Fm'"?ljxtb&*$Aj,@ӱhxST'HzڡIK=F$lY9d/Ѣmؼluׁannn1h_AU ߊg ? 3%5:ڵ-~p9Z \(0]K({CgIƙXN&n^OB#r h-♎ EIIK 56u1t֍+jC8`PA*U>& +@{:UZi vk܎2֐O 7.i)V'4B#3ox߽P 6P (tnjU 30 ̞PoG,*XmMTê|:Oۋ.>&JQ! ĶZgsG75| W_ŽPPz@EDxufdQQvB)$̚ LuqVb()65{k}N:v%0]ۄ{ jf nġDt tN}Vk3foT`LpoۯN&k?37aXC|uDK°7J 7_3X$ 7]:Yaٟe"=>i- ֠1X8i|sKڸ %{fI;(HFdxdw,2:DBH'POx֕C/87`shW*n6?B:!4nf;|Oy!_{qmUZaVݘ(Ecܥȃ0c 0qCa|vz<0kFvLBd/鹎[R+Fk$)P"7pk*3 x-]U,ZA<6Hw8a?.ȦiS<&Q$~ ~Hp"ͺ7ju^$I9A2t4t[#.Mg '|(m"2r1P@FVT6] XXhs,/PI%>t"}\[Y?LJ552%V(~ƷBjWUpW‘D1ks<6`#Ca=Osje+QhԷaũ;aTfU]&x M3`8"XUnml'v(QOK16}~ m+ًXY ˛*uTRH#/L'2M90yO (a}@:b S2Aul;ؒN e2 '豾gh̔2<^L:}Qh[]}ϞP)N4lJ&eW8lްjXp}]S+yrE)X)c[&X l'R %>s:'Fl p=M ?&8Wm// 즠n ǟX3(|ѻQ+08鲮< .Aihe4pvvf7,i|*!+l)zhG] ^1m< .⏠3Oui4t^mj\cji]$*FƐԕpUA-Y 4P{e@)[ 󀩁Z;몚dƫ@%6}ke KhJhǏk!~`{|RreV+$}X P=;a,TV I)z'_Wr@0ő,)шɡa.9l8eC/fi0纣^謘 ='C;=6|πY" kF̆g>n9\laaִ$NIʁ%`.W̬|god,/W^&!Uxf쎒+2g,Hn?4aG8 ӡ(,pZOnaљ,NԝzG_B`(~6r!'PCFf8.VG45Z.uNxxr rL^7| ba&]-ܯl< 6H.6r ̼C1JstD6\4)/ؠ/)r%Uz#ףgXʾ1Bnn0qܿJdI9QވMz1zoA&Άd\(; (8P+Zj߂gOorT[9gsĶcIĤ*iƚ{xZ6}9ݹ"a Pt:^[$>o@Pl20 պ+(lXLh3/Q)? A% :2 Jtր@HHѦ~.q殾!Z}i2˄m|3&tadĔDOR|X4xRnNWmS|,wfvv;K_g * ~%F;|K<*H Nz6,@E]=oƙgƴ/T3zk D#BZ\;<wUҶ]~0T* {(MVN-$fQj]Cma^X.wNRhJ .!9zebxʴ&{eCμ4W鮤padvX\#i Z}]*|xAή'ʝ0tv'/`Xl3P.BAIM QNR(=$"s~%:ڻ+"7h^i&qcUIj v/ɬqް~.u @I~%ds{[Q/nP% 8ڍ@`ﶶgbhŵYSvWamj@XxWU4qN,}btDo@T~i3*mڗUpxDgtV[+Y.JcYNbnܡ=T2^lb (c ,3R*Ka&z޳MVi{cz:mUf{Gۧ;`)ym=̇Y}^5̓.%8Rm5Snt@:25EѢѝ}q|` v%CG ),{4wCT^kŽ`:|`Tc/*Hj0N"MHM3 Qa4l}bP9@5kArBd<;ӟ"RQg!拁y˚6Q4d6{͆m"H1鳄D FUWTB:GoE!M54~tb5׎AӵܘJ,GMōv ;(KZb7>["@~Zg2ӸUOim=$5JB> C9Ư Tyݿy#>ydGoB\.oNQKT hN*.dXOhݡTOaRJD.-ߵ?LwyG/Zo2P1{owY;s|$\Xma5KX"k9\NH@%?PW T>D"BQ'uQ*~Z<=%i@OW;.πEr/"8toI&jn2_)AVI& 7ٿ71[N%և$\TZ1v i>#x<MɢVgX"Q?Y=_v`SGBNE]$"7^k<:] 6 np<ـ-{?p6z!?HNѷ I"'@@f<ڪ\RC^щcYV x*ސ[d<"U AhĖ::K2pv.v|i'V\R@}Fٕ`rw ;R(r2 ۡ x*#.y"JBd :zTt7,mmx mNh|=A̠JNc,fX !gTm|Wj0ZM|J9-5.Ec{"ً^s[^E!^]ל״o煮sQ%7/=O|e?I#ӲVȹPX{8y L``[4.1ڃ IQ wS%?d5royen 1fsӠADρ< .oPòws[cO-xPN~|3Ukv0 d+{UM X։’R"K>=)E6n@u .+&:%v5ff7L4&U}tIL+^\!sn~\j 664F</r,[2%&Bm0#`LU @ЊG-r̙FeoYLe/dA卾mlcc\ȊljFHpB ?TL/ohĈ+װS`Z(7Ed)7۞mRjmy ]o* :kdȨDP'͋0U]VLUirJE\:ьؚ-b/+UuyI}z)TKw@L4$e9iW/83 1M_K9+lE:8GٟLnʩSJA+eZEӌuSLIf#s|=8W C']j9i7לi)L}ɷ)mb{T7o>2|7lDu_8V*৵FD"tN!tT*,H CLV{dc&02/J1x}P2pìvm/\ˎ2\RKcE,Y|bMXL&D7= ~h4a9:oTw0w*gfה%<WiDqlwzQ-M0Ja{ $v2(ؘ^~UfTﶿ}Hf*$=b tNP}> }>@֞0k&_ lPi!;zR!afJrYW+_jް-yc~jn K ]A{xT`P-"?YJVé JSݏTuvґhzC}<wVg#WnRg ŏ FԈP \I>,,TΦt6N*~OKBv`1퓸e*"j2. /a%!)8/@6X+a :B73b62wES,P+*H-NP.}Sfvh|ѷha>Q"q՘ur^1(hu%^g]vς?/wy[TRIbdMUp{x`.-k r/s}#[JvK_aO=Nϔ+#\Z&-<@_LxNՙnS߭L.Qy֝,3ҠW2<ZW# g`&+aB`Uo6u#}ʾxA (RSiAM\w?yFыNꆄ'3VtY46N>hXj.>2=vԝgZnXnJ|ű#2†0|߇T9wӞ=^ۆcjZҝsf;?ܑ VbΡg*JtOw⤊8fǰ#]m[n4wg6cYqwbU."jN~|{hN5;Gնt㋨Szw8\#`wPMHMn:TnP}qE7ՠL@M>Fu}3=I;lj#C{1Z )lY3-ؔC1D2 P.?x ^),뀍]F5ѥ8l,kG頰cbc7+zsjmEi55[|vg7 1XK6}[ߡ1l>[lϗ☍k^=DeiHD2I>w[&~;L qƈ1r V!(Iq${*[bjj,8V*X Sz[Ƈ1Nt-)7"Ņ AEe}bqRM%/@n:Ay[Arm*X35&Њ6u'릝Yzqc`nKQZjwA24hg=\6ufyw 0:8ҍek( *xrPd֦"g-PD,O]{Mg`/w)%>{/`3tEkswK^y͇H\m bcw' G>ß@m!SQlcF>ښ; T1$N{g`)@3m1a g[8KS8_}4mIuXAKUrQЋ83)r{ Aڃ|xD!g{͸zbJ3&.T7x_ʈY~e K;0W/=! ?y7kn?[!Π=ׯD;?\U}^ܠVd[@0R_cC%ٹvwh|/qtzm|ԇi%gH oNثB3sG lL#{Z_%D=&)0PΠxQŧy(?9@:Mb7x$^J0L)_!yuHٛ`,faw6TdPڨ)Dw7{g 2P!*xnf.%cKJ{{ 7y4dLC? dr͖LD!"V=k fczy?[ԛ\%QLSendq%$/}etSK#jOWtXӡBv%XΉJT!ɹK}K׾Ym ^u?.{r. Ϟ&,#.[HϷl:BI1#!<7㙒9ͅC0] FK萗2Oc$t[ dnH =DlԔ&kh54}oYӝaLwJx80RCjFj:i,%pz {/ݦǝouÜFsTv/uvg9h aAysA)n[$ S@pҍg7qʫzW=חF>o.fTp #Xq/&"@r359Ik%al{5A1m7cQM,X>-oDXBMa0fC};@'%(:!ptWqZyjusP`&$ryZ-F>/(8P2+ xm;{ %o/.4έilg>(dBhvqR}MI\A_+ڷ5KyQڣA9b̈+= DzItZ YہذɌMG.Tfh!Wsd&=71oYf-J:kvDm :2E\PҸ2a_ezT=I!B&%ZEg3B#-*ya7%ScGuKQ-ie{fV:qB_@mu 6 r )J<;iLES4]xd߃En= ElZ|}Ba3'nbbYEge.-+_r2Q*=+6cb`pc=9XF Hș-^!ٰ*[|L߸8(=Z{PzFąFupp^*![HwtT+B"||lv6z3鑪ӏϒr- ;U nC *0Ɓ+FOg$1=U޼Q1a&RJt _L f`uz@>k"1R1J~X6?Kc%&ݰ$] 4]Z@쭈T+ ڠ83M#@jhB: Y A"@ [A-ۣF@` tv,/soJhAKJT.d*BHިNs=BtJi8@yR/߀P`D-> V1V) L#S7Q?Rt`r`ϿtMA8Ȟ+"5ɗ?/$, |9RR2˜}d!b~X1ƂaWkȳb|^قb!@Ư C  )7Sj-^TP*i;D6\>a“o"q}Su칐O>{qw2t @)Sd*T6j$hh. jϑT82꫄N? /z)ERC*eLuN!Qv;3HL^w,eVMEdt|U OOqǘ`t*oGeGr҄7Q@^3n^ip +4#V2m𭏅-/x h_c/|k0!N/ mf  vs|@&=:^#>+LJ>|o\RhIdTp@w 4p=W2~vDdR#pZ04x?scԡsw0_4)Vn#*:MQoZ")͚k\b#m)9p HS qbP5b6~.=r QŒ2CUBd$ D sΑ^YOHm`qQ+/YQߤn$yV}!? k/z%/-cHuAN2@U\nfs)9Z)MA ׁ\Ը/8+. l´P'ȼgcPʖ0p֤&T$ۍm1;n g{t`FYW{@QφadJB ڠ ԅfҭάdJ+:UH9R~%7̜gzt-lwQ'pVɿ;*KQ}&xh#kÔw x$}t }S i^zxQ$s`1'\OF8nXS'@Fp/ |]zG#6V,f"p74RJo*^ӞQ5 9RK=U~Btڸ6]3LdBFj98]D2o^SG%(X!fJ^) _ij"T^O$x6OE:xävI_VLJ U;%:vn5kz+e ';̉o;`-s3Cvw~4*@&p2DyX͓]qJ >_2߰bk%Y2ƃ)r0mr *131gOo^nFNȀ=/m6^sv}2\Fp2l}r-& b~ *646olkR)bRqIsJ5IJGE#PL&f}'Ta~7+RORY)%PƜf)h&I_ Vc#\ wpA.E "_i=-[ ;?~/ *NܨR7ښ  n iZ $a }[MG\W+d*k.sz<-/PJ0 ;3+S|;:{;qҔ(4WѴ;d1Hĥ:'2t$}] ]L\"Lc`48ՋRTnvAgʬ:AZ7,L֚fs$C$u3v_?,;4fp<& 4OuBdI`NJX{ h[ URU\RwH>2W7j0y@R[/\σqnIIAPrSFқH."sj=ɬ77<3оg+b6mҮНL"rӏTpa +E21= 8@t'L.Jo 81/r Pޖ7o*egug°X\BF|7iY>q࿏-VըC, @bT慰<.!+6S7$cfA?oظgu,öUf:W;DZ=5m/h.8JQLC*!^C f4+Iңܹ,HI=8[/-d QvLSXygR+@ =QdQ0%1Vx 4>!*C۟ pC2]E͛5ms0 5[_H"`9#kҖxa[N?aba (^ͱ=z_xndFՔw$}AUkzM+{gkO6ьCZ[|IM496Uٳ-{LKO0b_V;h|eZ܆4˔Iy} Y%4vWd*O l)GwWr ~6$Sg 6oxݮ4Cn_ҺDrA`o5y7QM }¶ml W%ߟKmR3X)TlKp46"qU;G}08LM䇁#1p񒭉1N dyc'H&*C>aQ`IaF*ؘgֲYF-4@&&#e2I|!el#8Ak7.]P䱪=T?m0~)`p!$֑QAkTT[^猦ʨaq |Ղ5(uFyRv%q[FE UZ8T̐H䒞K eO@84MKme@Z|T9vFThEQZ~< 2<$XqS5aN'D l _ak4@A+ QdQ@ ڈ=emp0])@(Ө1:<vfڟg|IqIiah@ NHJ>Orayxy@*^nfI L]ۯ8"G1OŚN~&D̫6̕1Kũ~6wod' RQ)B;9^Ci{ W8;cƃi6d>5nzW$)1F]4H|"D}E͟YJ.4ΰiGEx(3Z#0Y~YWDra-Ii!0_ lh4odsP{hHXL e"WoQAxޘ-hq?uC>=1phl((xS;6mDGb(v5JȣD%:EH荍dT\jiIlQkW&V;fV>6OYMMKw '.OV"XػwkAy"nR裐CtV$` nNpO){0Ӯ9Mm0Ң+K"e35XeI; Lf5 (HUؔ-T߂. q mq́`Ƭ ~|8?!Mj#ұhq.a<3HV]nu48C끶qX]zFpHvRYHB7I^ɉIx.M=zo/xR^h\_ɭx1Ȼ3 7+^]R_C9Ev yz 15=w'z#OG/2RffmZ˃t6!]<@Bz(~>x6=L̗dwS|_d86~<&))˅$Q|a eDFm[aP)?.K>2NO0M~pۥC`;(TaYs|=09_"hF(ܳf7p ʵyi / X @wq$ ӅOqK:@|mDF-'gb^r13Aje#nlXg,Hg&oCD"e5yM:it r)QU/,mWԵ:0t k0-*`CƐҹ[6.<$ M/38dk_Q^rfRHH˽RQfߝ}sE/uo?T5s|/!~`LSjs ^7wW +1TOo`y$>u%fw3^)h޶=d3dDQ zPӉI,*8 ؔ<1do2D*omaqV@=Sں~D#]ޘ ]| 3s,p0نH#*]=_:-U@DCan,R z]Qv7$TȼIZE7x>4"zk+#UO:@[|^ˢ'[ſ 힔aUl5=aͻfj2Z@@mSDȺB~M(#H0QPFZRt[IP9*zO/Ly v UU';]{H 2]4BJ|{SQSEAj3m%j⯽Z?24J@,e&h Y2Fqܬt;^чr;3 74DN\A<5Ӗcs`ȕI#ԸKA>3H+v=rHApk c+ 1 n-NR(OG?Ltv}@p*{IT#gGi)].0a]ʺʰq1Np'{vG%@~j+˳/ڇ?@_?7 ,o=F֛ ֛v9\W~c*'joaj+M8uۛj{o<>NOtcʯ-: 5Jj5҂I$]5Vc!x*Pz*SOV[A$.頗d8+tE ?d3sSk./PݏivH6e֙naD(n|kzN@GsDBemA⭒y{ܜk( |dzd0L=FFd¡j8ymPޢ"|gؠ:zFǖr*no yw߻}y@>tWG$)KD NcAl'c-u3 GbMec4;DLupj ,y>BeN=tzj WQ҅B"em<0_>Ab:kT $ƂlIETլHΜV@ l*kDRa71(x'vߜ6Nܘ9rrMVq=9!c`m䊎-a稿 ҍőtV[qKqy6[Xɲ{2JxmBC/̜5{#cNuϡU4CB\ʴsDNʱy^v"ehǏ˥h0^s<<%$jg` $~\h]6M7Hu_ӄ#>`Jjp N̬7Ơ֥N!0s@'Y"5ϗayRGy׽F];Qpk#<Tי0˱&c솷s/MUH{VsFF?WP;>0_Wz- GfAb!|CVE//?1]vo@j:.&G/(V[o[[͐uTsF8nk6> kr5pĜ()R: 9OviUJ/͖o9AR:lO2Dp,ډnԚv :"Ђ|A؅x^iy'3aouFidGӰ"xp_Ifa*Cs-GiJ.Tp)sM׸ nJ>ηcLX.3`WzwS(zBֿtLa1Q3𿥧lF+#pQ.ػZkf=Tܓ~bC\ݡC͸2r25DڜǕrga8ʚCn2fHNz1zߴZyՃnraE%VXSS8}:1]WfV;!d׭$QN^z*#ZWA>480J]%˽\YVjhkw!`cq**ݣuSz.Xr@ u{l"dlѕ2{Dz`+3rm7wHodbٻjgs 4`zF$#I ͏B1,#;GyQ靋?)qV1p >bGIeId~$0ձZŽSmw&$M;An/ӎ]jajZ78P,΂gSVL  MRl(w`U5cNwj_UҜ"EGz| ԮyGB~eܛ k0M\&~-_-]RH @9dKd{B&7$Nh$#3s>M׌ {o${ԟ A_jFN84Btmlimn"=@6RD>S!t%DaTa0s߀O}7a;4Qcb7=FY4x L Ss;zbkîXG!uNбJ>9)exV<{xAñ4>UGp iDRx`i@q0]M.L_Hq|)'?rJɓ8&FuÖ,:gAZR?øIfv oI軗i{KdگHHyjz /8L)!ϝ W {2&p͡c F yE *7`nkf RFPhP3i$LEM#<«ysMJ7($Bz*RE|[):F昳WZ3p4au|n߹MCy).iMamrݔ8w"榖5cPH;}G~I=wuM[^GLgq>i-S r[N4jl[m i~h 7'|Ȝ Ȫ`(EB'&0 X!P1Pz7 $VtQEVE ,^1b}Yw? #Uo T l> k=eW⪀|jX16 &䅡SЧˆ M)-W>d&{ზb^jhQV&2iR M. zW@h0; N؊x[\$Xxgzӥޛi _LU8 %S~d˷hC8};qVK5< ut2LZiTXhUv ujWϱ8ELѹ1~\LHbSIՃaQW.lVpNݩKΐ>{XoEIU"]d<_ Tzx* |uO#(K|tvD=DU}͟EKQ˜n)53khF%~|B(#taY wxh;Rؔɫ+zary!)2  b*: Bps3]d8d5i]s IqQQnR0w]`I5 *G!:v8#ٌgOwyxqG E>0= 0ӄ 301%zB*RMxDV!?4qImVfB>tu]Tˌ-ccRS\R#BJXzBQfRC~+/OSR>klJv"igD\Z@Jc#oXkϒUIAпRE!v#.զA G'$ 5^'4!0=cߑ4>(MBp)$!>}S?5xԕ+"ύYgd#2ؿB.s BhZWM&gWRe5`}"wW{.=jdNNo W@j\ Tؕ[c+a=Pg(*{>I IzrGsWubڼy4Pʔ`Ӱ2b|u#nlwmFJeXθWFHlQbge֧:ȟ7pk FXXmziuй]>99=PfQ6=-EuX@u"mg$[ѽSw??<uab=9"G=`䑘,VyNK7Qe$nySQ[4M:dGA7.0Udh{1ƔԹ0hK?вU/4M@+SzEnAIJ(NmJ\Hd"CrX!\zPkA@ D4uEV5SȋỏERנ RvOdfzol (v3͘qͧx*尖xO!D0Irx5Voaqp%>;2Uރ._;Ql]4̼W:3F-q%L7yr3 _NPK JkP3 oN>U- DW5ܫ*P}R=\zݰ^lVO1E=oa5 Y5R/;X̷` ӿါnj.!JV1C3ax}ט>m+SRpNJ)Ø8K[0nZ&)󏡦gh}/AЫcmSuV8Er ]6|jϪKb{,Sh~ "_3\w)iW%>hpVMi >ق_- ~T OZ?2a!lkwStU1ĭ:s yetz՗o3t(a|K۶^zӃLQݪ<@JDXtbh;.)A;0\ŀbpF*U툑f>߁RU %)( {Cvi[]bDK'hJhz o 2]U3J_ n^%ЎHƳBK ZV ,]F9l%3 §L/g0Ɖ7/gX"ML ="BBhĿ\Mu$V_]^TW7rށ%ⓈN F.`k;^/˟ba~'Q] EBG+ڒ= M7P]n; n4)HYK0(u> q0QBlޠe_`58v6V9DȳK7āw7F=GvcvTiTLChڝ />4@&uE4."|qP~9!3:XhUǯ?U@!iVEyvMmNGiR]lXԶV#[d! Un^Ugmfʤf7cł_]֞o#iWaI%8liP`7 ~VoYL,OM;it8R*ͧg@ӏEBR5ڸV-uoHΔ`He(o~햒dE!m܉Lꝸ l/W~j+~%`TSz-y>G!cPpO\OOJ;Ȥ c$'^k@`w%Mb`G<'Fmv6~ĖX ulptX4%ഫ%MȻ?XNw*N?OttJBv^("Vq3{0|6IjVk6P:\Zv+;}࿪ڵAc/ܶ Jnw>C0Ep/d֘Au}hܖ/}eGe԰Bz Lgm4sfUV j[ˌE<@)DMnF]aG4q W*;SV=QrevXdZ/h~MzDͰD_pMř^/8%Ȑ88)"),ĩ_}ܭ1,y?gKb2jFPӖR|5.өԗՍ4Ċg6aEzq-n5}iJ9 zDh&>Y48an$ 9\`NUO'10,eL?_&lfd\73.`+T@bhjx3'Wlu1,iS9 *?N8[yX~oOҫ+. aGmb%\4b@xjKdV:O\*f݀:ZkRXNpׅn$Dz2M޵޶ȤC I)O߅ndB|f>WfqcZbk|fo Hh1By`aMHsVN3kw2 8ټy3\Riv2K76p ;~mę=)J^R_|[m)#fq_>+2a!% O?JXD<ʚa<@"e8|دX&2\)e?6q7d ә$'` zߣgRfReM6'q l%yNܔ-C~^B ^}mSƗd  LV"6mhx>[ZՎ !r) "f-XVa:J}5勇lsQRI( I"8Tk#^0s ń5N5 A҅FqNCsVPc4kO0*18ϼQf<g ~~ŝhQj12tǚCFV+,)`&`ɛ) z򯏾SE0hqgu_tU"l 2UdXG|u>֐2@L MΉԥ`,vj z!T\/cV1]Zr!$PrXy `,cY0^EyJIK\؛ɍN<({jMbQ'\jK\qYW]w!y{g 5XF}<@")WJ-Mi~Γq\/[9 ΩAq,hs5fl焿x{$H mmVLJtDuVWX0uR)MRAU_>ނCk \CDfúU41DK[EGfKY(lgV &bt' t6qPtNn ɈM pcϿxa9-a>MpxsT6>.!f];泰Ċn 3\Bs#Oid$[G^n0C~!_5pT@5ݺLPa}J27A fx{ʈ^޾9zXWJp)jQyBN+)/"J=A3򒍃r)<'nQVrh ! -EU.#~lՉZ BThYt [9dr-E}rު Exa"[aIG0#xc #6@ 1l;lu{u~-pV=OP/!\*=\JX:.EQN#O3= oů]9@BI֕Z"Ñ0+3 ҈? =)0U"fuQ(scn,BuW aIwWfK;6?MHp |P;{pu;<MB4+q="`0S`¤j{K{WRῒ.zpGJ1ȍz2gqʮ!MsoɄ^d<%$Aqшv7Š~?)/XO)`У/yC:](y_ w f R8ZŎܕfch!3=3^耟m5ϾؗfTY&6$/˥ jYqM]~G%9>Z2d 4 {G 󚸟;aWjCm~b֧X '$`WY{:nW?Y'mm\]jĨaObނ<8 ) 5w"5g:9'CKvR U ͗t%X\ CbG7@T^_ftX9R,} \ʭuK9[m¶7üj`L`.$Q]V ŮA<[6EoYՆ9Nz?ͫxG'ȷRɼHwEy'G7`6Y=X8OTSa8BHiѤlB=+:Ef.,NgaY^RH1Ol֐Ϊ^&iS^C8u [='@=0SǤ@}d_mH F&h~wP /4 HW~p@u KFu%+of4$bvwl4/h0@]J#L~uAM۠+CH))ZMNyzKͼXs. Zfϳ3jmA۷蓒{},t{x!$ fzYUVpy6h]"[[-vHT1!"+Zp̄ale`I<GF8 ^yM:?81ː Ʉ=67K$iU ]&ކJ{uV t']8G1vC:@Ti~mj2TSvMk0yq*,LlAGG(2su$X.zΤau"!6V* yB8AI-ve)V Yh :;RIGI.K9Mx`'2 R>)t<}j *~bÅSQ&i hlz,m'`?I^el*A% =-S:p, %89qfOtX%/@-?g,<Ў2֏(ȑr30ƭ$i(RU!OG$1Zd}m\( ZO \M<6i|a]Ð++m?*V0`WJhD] |\qVRT[ؘc#&-^wSYڭ=*{e*rR(4wf`[!QF+qyvfdߌ\Rv7#asO: @CrWIݳH7co.U0촧:݄=6йiNzpi'(?gdjYc]"rPI WjJsl:Uq= gJdo.6=GSWU3gk1$ I=A"~1T qkOԠ7 ?8[;F?E)+Qs ƋZr"L ݔOiB#AmLݚU n5BG_xpw'Bn; Gv8SQFW7J|n|S`xwcXyС"NQ ȫO *cUq!B5P@C\t(rt򐭙8}O=\Լ2m=m<ؙ"6ˠr/9eh;L0#\F֝Z$oKbǴΡ ԯ5 >w b@0O8Ӈ;* .ȷX6WgXLȁmM1?)R94*"cHp4'{/pY@6=y&Ezkb c<':9 ~gL?_W. vhUUфK̨TzwvC\f縑fF)v8k΋RUɇ)D2ժbv`r N #tf <;%=ȟ]Rc< me­Ύn`R$A EG@]Ǖ9סSnIKW,}ǎ ?(<\y{18`FAc"ehgP Qzžfy?àv%PvLqlz4c(r[%ƕ海õ4bA^P8qxWYƾh6r[NJ"^L80ETyu%0 ͎낓ZK"8fɕKٍ"dVNA#7b`/<|5?Xm/='&Uᾷ?v מnje%Q_QsO@Sve߻0O ?U%2HU;KRiBA!cY]l/}&r "p^仄\)ø\OĚ r[it9%vE2&Z'E%IEPCnjo)\w}eta"+SUѶ!/E#z޴]DܢJݩz%"~>\0 jeߵk7(LAΒ޽Z6%d-7ךo>_ta=֯z?F=ЙZ{S>:]MR-9{byb}}q2tqp8SQ驿bԹN4~0no{@-,fvfS-;IT BIkS}pыY1wɦ@9YUN $8r>wK{;7a~bE|WѶ$ZUx' @!+Y%Vy#'Po[9w4zvY26J9+:7}S*U|b Buhܹb |_#@q`G(dm%v]O=>venqLc (f$ Gֲٸ ">νi=U2( sTlG2w)ѻCupţslxԮUNSGi^sRhQ&u!ÜyR3K-|2y"Ϟp1 1-I4#a_>Xd>"Ө O ͛gd5;[;R2)/tfQ⌐)'u-`A$HN e%ӆ%" S o%t<Ήg/cZ$Vďt KDh= GCFVܺ f1%5 bĞ e)s:Q #%Y1GIJr8 pM:`+Nwt]}3mt8 FI@cZEJSxy!,3p,l9>X˧ 08k&a(سe7̈ cn"Ȟo$$S$@@I^t.-HVf)R+N+,B3?^?E"TXLGꍤ=S%Sx]2i7-&3^we$'w >|G/ןOkgKG["N*ZCn8H^9zAJw{qgB0t+׍1,znߕ{T sͺ:ä!c,!61n&^g|rGmZcMA5H}N"/w20KdFĖc",c syCkO7Ct\>'/!#FPZ\5Y$+]u/i)>XʪQj̝0 lAz|}Ta&IQl[o&g+PT_b[L87 f]o]H=:FXU̱}sw1u ?ݙAw/s]c8{t%U ? * 8r#IS>t)3 A߼_sXFC&ݦbܕP{=Rg.\VNM+As<~%L_WRY.c** iF1%|̼>r6!Rn G?ަ5hoDCz1[lF$O>A0@Տq5qFn&=EZ[J"G(&,2|Ŵh[St[ ISX$?9kB>BʂW0a8jfV{-'2B1J0LרTPE4Wrl?X$"ŚP(ˑ ('>7>v'%Zf~OšM}\@/_!9o5Ga.=Ui CZhtW:B?I/$9+rS1BIG?#i9O u24W&BO9{D ANp0Pݯ-&}(K[[i $svIa<(WP|v=X=%9qb4`Q52\oH-4 G"ZxCQ-J#i8*D[qCX*Vr3첦rVƈ˅7 fZh`%јܽcދ OkF>OԀ( Ъ3G\=Z46OP".Mm1e{?Lx xz!SKbvmT"([u}@o+Y7B{ 5})\Ű9eS d ʳ ?b2>)ȍ R"1*Z4alL3B cT$R%q\@7*UwvloJ;qd;AWg $_y}T`;|O2O-Aȃo87PYXm 3>,]V-|vsh$~F-O'fwl. @J좘)I[SC|HA*k#?.mfr:I}+WR'7i7Ӆ W cvC ǔ=-|KtCX]=h 曦sQݸrd <8:Z3`p{~HI@s>(W1ܔs_bMWiE4,#'W3ض\lΒ!o2^]mS.Ĝ*rGQYGe潤VoFMW"cA|Elhe{J zW3(_>v@bp" [߰™'7vYRМB~A?ő(PLjIqg30yk&|~Bf~A^[0U!챬1Wd*JteZ "FaeA\)w%?UBἈ4v]?h jGCH?.μg#z 0% z"r4tnz~Z5AG_>IDŽc*@?gaͷ ~hO_iu$& p5$cw@y/uVi2ħ,:euvT4"~$˖s"ߑ5le1Q~,xę674}7^v,vZ9/";?00^dhK &~NE$̡膒o9 i Z%@@K 8ݭ\]kS%?ض_.9G}OT.3$=P{96J -s{Ȅ`=a-w0}Gۺ18{5 ='K NfI_с5{#2W\xSWR.CNۯw2Yf##[cD ͔ ~fyqҴbΧ=)̙te;^^~,mtc>dxCO2V\k}`U"u̚ ^69%ZjC&dL PEsO6{lyeF' gP'vHt̖kr8MPz])mϽ .ya<ȦeLUG×q}u#}YR%oa͕ T[[Mv+6@2?6[0ɟt~Dv cUJĨQKeTI"{A)꣐ƺ]ʊ:bR6s?/)Qxxߔɦ- z@Qt{/lOvD]׬ZHm6'E\[YO{K6u/h< ,ۦ $f=R2D ym$”[ѣ?%OAa&P"Y֢!@gqR 8cEBJ$y +J:<\pOAE#w!`עSnbBjw4C49-|yrWf~{f/BҾz!D]"*h)RTJ~aJˋlX}S/2! C0ٔiHyH"|z`X+\^yn3Yry F~kcJK7SnfҦmµcMC3dM e-|.p Z,}eJnt/ؙjӖn|$bP>qW}x7]O9 Ϸ@[GsBU[? bpxf2nGQ6&Qht$µ}\l m؈M8Uh/ W{h7b ` `t?H`6]Il~='dtH-i.#8zK -Nu xƤL^3QϨ &1<)RS}ds5: ] 01LeH7݊m]AUe5&CZTbbd2=PVs5 MY9GKMR%[Yx.W/-4׼9EGvF-8g^VqMzP;z`엪96-&!;{nĢ|~ |`JLuH6@9T<Ϟ,+'8Oc쿶.vhY`5 12ջdn\Ɨ!7Dh|{ ]Ϋ[r=Dd8N ؖŏ 2_G>m_)5P^85E /A8Αzκ$>;oS6eudgtO F=%54bT 3!0m1{3eP NlR7RIG'G, >IEiCLMK"Gk(>{ ;$w&xJNKQQ0%a^9q<89m,4?ѥEX C 4ﷹ}r,-gv QZ!&|̀,A7jDRg #A;ɒŮʻ-;րi.9Ca8QRKBPB1~HՙKeCy,K4lˮ:N'0i0Ȗ7t<0/SSpHuc#,5>1J?(2U9GaL <.vS%(ZH5gsHY*Mu=3ڥcE%(_r7لi{bNe.NJ`ZI5up9 u2fdfτ7wuEgеzƂXѹK@ܨw`lH#sjl˛&ܭ=Oi:7߬d挎;ެ{ vS~+ #h`k=_o$ Uo I1C ^BsQb&QGìmL1,3H]XA !/Eƨ3'm5*1bq,l^iX"hl;}5"()H=J2r3ZJR-*(2Aߚ8KV+ap_펹t.ve჌bTЦ0O ڦB8iljI2/hPESf@i00i:EaX>1aȳKDjҼ:;`^ʍ b{6(Lt/-'LY,p:]G'!ޒz+E)9zkjIx\57 s㻓gә0s7l&N:['ؾr>N ugF_eBOTp][/ťj'?t\~?~& t.*7in̊-]Mr|~#`y}Pꑆw^#r:c{afl۬y@xE6S&2Υb&m1M3"7P3 ;!yJwUOCMH)q;V N<־A:kc[T&纇vÛc(zkÂ'ok^EZ:w)&_SNh?NҰ*m=4 \! SU͐2CC+'ː\c|OROlT@ a"c,୘y[a[ϛ |m?01tofUu_|K=lL-DuL}TU_ J6`@p[љ(dLA1^@xrALe:$nwt1bo(KnN'nkt&iʤ$/kQZT?+3~/@9P*RJCGVXCCY,-c3NοX2 0'G Rc>wRu>e>ڮYK1ǔ%PQNJ? ^+F ql\Q跀m(@6w`h'=7BC!jۜP wH OCbsU`T{¬asѐooД o&_4Yw2t'byN_rqlMN^KN&KX{H\B$t.p#)6"wB/߸j=YV@'f$ x-|΋Z߉0u?j@r'"ٲAYvg! YSɹ2 ꕐQrSmxqxUF"e"r>.,\3'z wM+PLe&ŠYx oerMs{VzͧCV Gڈ],EeClGEu1֏GJTQ肋e-&j@?#cV'can:-[<'KVI~'㥕ԣI^j!`A8s,GGҼL3Yb9 \zoBO`aL$g8˿lπzDC9ݝL{5& '8@s]MEt"ugrRm8J#9eQC׈Ǘخ6Je7Q:q'AP `D 4d;fnERAܪ6N4YfO@Eہ3#OڌKu /I&-fA(1C2dOg|Ye$Q Nł+ $5us;\׳5>f ,EB`s3ᐑ/? >S6{ #0?;}[z ;M %-o)Ec$XlW6’0XC'nK)kոI[!U{; u_R0'28: iZ^"% et"w2$ilB'byu(}&l9Dm{% k>?Ʃlq$8t^J8d;}n}waU{^z cRY֕fەӲKc;۞Q/䥌 & 출geʱ6 <HW.hԫjHjM̭=ȿ%pql`GFo Ш "<٫X/>)Nj*D[~KwQmOrTc+K{\&UZrc%#LM=a;E!Ayӿ7QmHekʧ6C"ُhhv h A( 5p~9lI2J$>{Qg"SD&PI!b)Q4!Ybaq} 4H&ґv0lV Ah(>Q?~p-݉$/B"LyEI$M!,H*Py+G_#8" ߸pMN}ڨ8@0찍[QMT'zԞi.]3Y𹤁9Jh0~ji.TЖbyQ; :$y?A@,7{) uW:V靐٠Jk S$}H#e> kpn SqKt)T5*QlgG_jƛRis qm! Yq5. YGa򣅙ʼo"\ęnK+m, "R/9ξT{<9QҾG?(tfPcG^HV|exl1~ȇRwO#sgRwKw- I nPÓ{W{ɳ$ug"PC ?ly-t7캄̑2\:|_% (5uh_%]c` YGk"4lkƃDWƐ03O!悵30>jPCAaSg ^Gi u6PQ/({+ VdfkOw~MǜHI|R|0$RrW#WL^`bR+i&^J}?9n C-:^=u4/}Iv>5%_tկ{A52^XQcCR ok06Sxs<`^cq7dʥzkK#vfhL4C_[Ś4 hEE&ޞVݟ\oqx_d~}ZCXЄC~S\f^ىS7_VG"3TgyFm?OzOmn%n|_q@*>{Wi9 XO=ى)h )BCnzV3,%T{@n.ƪi43m}`Y.uevk$h怭SXrg en8ij Y@_(+,A륨zc }A/Q F%sdš*J?^'YS2 ]OhuW&aMaE:- (N[Efl62fE{e:ΣdT!@6rX;4dz>O>wJK4:nS =sw5?4+d%WA7y')KmTw[Aul}g\@ 7^`FZ͙A-9͉N8Uģ:SHlC:#%y)ߑ"#_ ՛j} ڹd,sk,aRĵUAf/>͵@89] «CfImt1q^ªa7̡Po_S0\&*nz`:; :dfk!mwU? 28AǺaRc?-a_C,I_rs){4%u 2]f;0ET{Z?쎓ivuׁx/{~i@_,'4FL)J@d${^Hqe)2@.` zriuc'6L iZ_sEa FNqfepA)Q~v7_#*I+>'F# L:mJ"#-3NSkUd6SE9AOŔ$#`fJe >.3/Lժt2{P46׼tzړT9. %EqɈ2i]Υ(FaӉՍF,h,t#,D'y+oDA ĄK#+a9#jtAϣ>m> an+wMqx%^7T Aq'R95}NlFtj+y|noA.a\wӨ.Q"mV.K+|G{|*AȾ5J'ίxm2h+;_Urs&';d{E]Nᎈs/TepkQ{&\_n=_O_ܾ7bi|880sȹ]V_Y&h?D0{ *7&X,ރ)J*}# A{F $SrZ$y GSgdci-c'hpm]}v ^:S69[ t`P`Dv5k`./j Ŋ?oߙwws>?&:x$!|[9`y?M *ex/pΨH=X-'r< R =$8^ >д7|fB`WT# OGC+;8kt?=g UQBE7r4Kl^y_twl0<%P"tePTIxP6*h1Y2"L)yNP[1xv&B>-qS # oܙGu|i-~[eILo"o{qd] w͵uf,'Ґ2zIކȅiL}|AEmҌ.lqu6Ƶ.W?- Jy4NO*)ìhu})V2=' = )ߛ<"z~G F0_E4rCU k+YJQB9]?RU"XVElGOѴ(qڄ9V~(Mԓ81:n%m,T!&1Hf\~wXZO&|-˅N{-Mjp:'850x&kua QhHPl@?#&^ RKDݯ7AfiebQᚙh-:b' GԺLs `p3VZl ^9Vςϫy "z3VH9J85IjӼ"PNp M߅zC9 JxOvk`Z٥ \kXx6@7ٍs{:`"( ,'V\X_ QNG-yu 3SǏK:5>v^(S54.bu S2婄Т(okW6SJ',>6CA8:@.ֱNg(;deR|K\uyǤAV$ar ;09`kA@Bܰ m-N@ K*WxrW. 70OLN}³D—'vVE mpGS>/- dI9\Ecy Ci"rVQ<6f&x8 Eǚ@,{+(f1-0RdciXQ!QYFmfzqCmIH: m2BahGR;- gLjA3ˈɐâM5o-^; 'N}3dI@`,)s( \i` 'j ?9[(<0Pg|SA+ (5q \}7. TE/>{u,E8d^bY% D5An1!Y!C-yl8q$!(vN^$}o|`@c̘"u pvW* ͬ'Y1KFWʦqS^=b6&':l4ʟNxCܧt(:w-Iw\[ yJ ܵXe]+Vxp0V0+INL}jKVacu:aZ)~@pL>"Y*%m,*9|s z)L.#Ɗ_$g-@(!b/;S{i{oYBh*_yR341m^z3#BrN@C"bu~kٵG5$jJBPUgYa/(]ꀍ9"( V.'ujD~+3ZX/^eϻLqm^?Y-.A.u>[N|?8d<`술݅\HU }, uyuASdj:nᨸg-U S> :;;m1{~6KaSLgQ(: I]۔=@ 4W~F jҔt)4^KJ[ TY*TO܉շF9{'ywBGa;5'a~&Pd%1[7we&?8Rʊ@]7kpg.f {!~GŶ-Z@]쁈˹c^V=7W W۽Wll#)/NιOD]fN1wW4km]KRtA~qmP ;8yhfwC@Ly`H)YR씈N F+;vMKATXzJ_0C"IEvMȉ^_)8L)WÝïr W82qJIp\5RCC sA$iDxh$ PNe`"E;hΨΩV*ͻDZJÚIv-p ![?o$SNQvȂ<X"7{KH=ģd%foeT0zyLU%S*ι64a^ߑL6NTW~{8B! ߬I!K;PDCɊєy6&#EB\P,2HN4Ӵ+m BjZ೗vhbal,|+>X\ HKVgpɖ[jpWiivIuMFf,u6S4I-ˆvW4㐖?x74Qob)=u01U=fY HlYxժZ"5eYFGn)O<:2u9 'H[♗/DtO']afN`r~Bu *TBh`sA(JD+Do nYu}e{b2syL7.{q_ɪ&C(W'?B?ahGf)=zm!I*xNx8lstH"3+ m[EF !xcק#nĨɝ2rrP<y ǹmp?1v哴(3~\cUbь=gH3⥬Vu/{z7 ɰG[r&kXx{_8LHNKܸKJ^'vxaP q-aVP|r4Q\k+x:V]6 L);nY}6##[qFg &b ЪdcJYSoN_@]g2,q@!H U_G ;Ei-gFX79HZ Uy?EHj;p<\^(V ܀x"<| h=USTBRJ}b^9۷Q]sYz>.Dv7>\h&pJE^`R&]ZdHОrՀ^+csɎҌ^}Qoʎa3)?+"Soe<^#21Bр`F>8 zFx#0!HѢN_1B/4ײ˜h6GUX,*yWRpJb{D=2?TJxÙfW.Z}=a.ytSS:2"瓘RSV.8P )'C_׹,q쨼 u0UoGLQѰ8kI.\D{ *-ws*mL&)ZGu}5GH;NΪqISY}6fnR)dws7͌0.K-e>.!ocaŤz#mHvIf}Wru6[B]b[4 o߼}r…մxI~qvfbGA57 [yhxRPԣ3{;Ŷ:M+OW06@Vs=DVQ(IszwV-`IaF+T-/ifJ`0+]j ҂S[=TUOliu" 6R zX6z۪sE^REhw}?<)DxX)kpaq\#EcP-|ylYݳSҷ;&Ҁ\0 \5\*-+a Ӆ|!ۧkd3U#ྎ2IPl1\@5 .ٌRH?a=l3G7!'9Af'6aƅ]ft♙料?։?NQgpuO0IBD%TJ3֥˫v+NWP%l&潢 q4GSIv ] ݔBr2݆]6@gc1}mє4]n#_GX z^eVbk}do#Wq2_TR&79/eÂ&d1涫 #ڂ@{fwRܵLMΧH1|ƍdFUJ쀔nq߰DVˠ ?LB>Vik+l1@}x#R^ji sEY^8pA+c0s1TPӃq> $iN\Jc>R"\ Xs F>yEH߮A]$OZGR],wxZ]2oh} 66>+`'\{ ay9}\|,< Q4ɷ% 8BHWSl>i<-EүA4KB =@~bZ^iIQh/, 6 :mL0ɉ.sX&2 U ܛ rGBG߾>ː}RnNME͡b&{t2zl$S-VKb^Gjs1T.%H(LbyFZ2r3j7`d 0%fgAGrFbX{wt䲎6rO3@E|8s kc 墨(п=**l9U#ഒ -4#b3V;A1ؑDL"O€JS=Lv0 $mg0hF⺰n5"Qb\羕 {Pom ;b,b S0ղj`؎ـ-I᷽5^y inmv fIbO}l{ ab.ճPd>Kk$ Nб_4RҚ\6`[Ml9kd2r;U%i\-&e Fbʮt$\b'L+:w==J3P7~`KsߡH5ȸDMJh)8ф9e}}uODu4,zdXf# O4&c*'sP4m~,78[G1ռ]=Mv\{"_XHuc"p OUu v37w6^ƕЃe0QbPZ6(WId':-lz[ 2^Hg٨ØeΑώ衿ˎTBjqԃj|nUExOI*8 ]!k/{ T˜V&2M) wa `A+T7#PG6Xd1}|f{m+V5<Ėz^Э8 r`Gݚ5A>Sۿ4L'ߴ:& 01a 4 FTN;. sj@-Db#/_#\{HٹhN*IYQoq?C*J"1^jdh?kx6rΑh53T27eIHJΫdȳ<V:VBuUuC"R NgH[ֹ[9{!ho35';uũQ>G־]\b*ѓ:0C Jh.8)+oeslM^% %'1yQ` p-|o<%3x6p=C\a6Ce|U(Ǡ_8N?g5;3]R"wp%A?p}^[O R4,;LCCsFIfX_ΠP'u?Cg9v(ej9$&n=zl9c/[S{of&w˔W|0 LOӪh?@2>?ʐ@z:^`F.~#&j`xw=O<\"vgL2a*&-?w{1rT?sz( %)) F"o/03z!:y_W-MvlRp`JoCx_|y.*>Y8&'ȁTvejeyh %ÛK=lmdE򙢶1яTL_Le *@%2Q+^OD#*W@,!2~1PbZn>J;"rSbPٞ*SUSPmHOI#w u9M0ngf7OX*顲L`I g7zHj&j{2x:esO'd>Cg0S`._S@<=5.VZt zKaڅ=it.z4 ck^ [n$WX 'p8Н'jJSPvV10BA@$%P>̆2^;Jq ̀wap&.7ja I+ry{oJYAolMpWKE+rDp{5N9r1pSD7=CEz}ylt O[EC;gp 4.T6(}io5/OO#ǣm߉P>qvB.@ZSiv.Kf&(F^iCprvUE@)l;L+G/ъ}9lď{^ ͟H I-pJ; N-$s/`iWKb(ËKNկa:f蜜c ?~XqfS6-{_k1ew+5)]w@o~A̱FA8( eyb, lr^^lbv/OJ tA`vi9oܙx=GC-6N&UsR{nqkO2%z /hnDgdGÇdSs{jz;V k.wčaAу>ΐpw\?z8,T߯Q$tL:GsI~ІM;$ULBtH(:*+Vm[*1 f嶥9߃圳^ qFdz+S#mRb~E0& C7iSؠi02Pˆm:0Re15eN>k_Z&61@yy7n%H"'uv@ plB% X_U nd%[?GtRR8nzs?؂y+ſI53M}AFه@t $.0`]Q/= ?Tr퉞@j`5j`J pՠd͡f]1(5&;{/OszsU+8wݔ^sMP``Jl$  &ƤVZ9k~lݾRx COЯu^9=#uxa_cOt GOӬ.m ,]*yx ޶cm% j5Z?J`6ces`TdԐ˱P{2^:堚478K"G3_Ԧ4Fh-;SjꕣsX6By*oGf躪azc3aR۹J#E ]ؙV-,R6 qeE"fl6 PYIC&2qXKJOfտĴo_9G8ydgga)K/wNmZIIMyBOn5*ŏf&F^MI>`y%]OA ;kAgg~ZsbDuTng5T-R+K<4nCCI\nTc7VkO),1L0xg8Mbi-gڋ[RWM3>ʖpEQt彦ASζD> OϣR_86sSx_}xM?V}po~ {&hBpр ou[geDM}-+rDJgj鴖f,pzrg8|ȞFH^jѦ8\[2?G'ևnWk;l-}8f0GL}ƕ6u׊ZH'OP$yvoTm_~YjZg'Ϝ\Kwiϣ?3UΝ)ih"+86d8>4 ʘߙw,Y7^4z8·#nɦjnHLKb]E!jj%ӎ1E V A%UT&JuH0)G[A"ފ3d[ḥ~Nǰg i1:|/IOvϭr*^jw`g+4&3QZ8jVuabu?Y*:ձ'#HL)3sof|zLk0#j$'1.;]9 5b޺zF>J}Ş`/V 86Bn}vQe[y"]A\O֛A&!y[ƾ =r$!VיbUGUUcv W wub%SA c[ɪ A!D.A.?Iț7_@SE% &m6߹5¶刕MgD{ Js,ZϬw<; +AgQ\K' (WNQ;nLӈ?'tZ:W/ aFj}AhHzpz8Jkɑ\C#b` j"jOv;iuvޜNi.=H'Y N1-0aY2.6t^3Mʢu)W5 GW:^ Cv<5Pk_ֳ?tc]!c#a?ρ!1AsofwC ,&,delnZ0pRX[]>xe9z+s|[+Ӷ( ^Ы"HopտTMs)8^tnylVDZa!բov7z$N%upb2}PoM;>4c\@+·å繓-b>ɍ n>.f& ]:w L#xoL՝@z,R}].DesY.`fΩҰhQ OZ!N.nw `Hx ^q|BS NW\=]d+[T ,e4saP]Jd|f}山9th, Wtq{$*K7:#QʂUr>?D턩ډ`wAOi6FqPYTO5M vw.HVv(s)Q$Id/rPW`|1Ilu4TKTG2cFf :(2Zw8H׷s^Ʌ5`N3zaFS#z2Qw FFj Sp<>Jb̹)wm"nq( +X%ެ+.AW1gZwO +Ҕ KuhKfg pn8lA>0o x!6\_LZD }XJFW%De{KV֬_ȮI'cVzRQض<a)}Ji#+Ŋeж/v^0v!T1\7i0#bF X*\޽ª3u @RZ7Vh-vmW^lRkfvzoͅ+KN&v0 ;tշ2}q}(UkuL' ٿO;e9"AK62ba q,v&1H yS#HO)<Q"wV}3[ZsXmׯ &\ALhl'i`LjAMFFˇu.R N 3/ON]{S l4kSY/'OWl~JP֯\ 7xW)X+Ԣ68}JmcS|tNtЉ ҕȃi;$1PA"XwWⴾqiCy.[RFRyTsЁ}xu]'G}-{m"de4ef: u,ʢ1"peJH*xb1 Xbo lA'ZwXgb;='jA=liĔTJtDߎ>%+&]B+&YTNb{PQfK,p!',xP* 92/H.3cɆN||1{)gΙ-W}? .Lck IW@5Tg~%ʴu#ZaNuGw΀);/@Y1+~t);-h ۗ鲄|Wlc3EPK3nnWЁjd)[L]4D` :ffoZȇAAFqխȱJn"Z F?sqiI`T{Yt=ki!ok*|hW{̻%۶Qғ+О\zstĵ:  nj:5՘j GpPMO .W-5cCletPwtE9qu`y*mA5'S<2'׀5E}ܫvɘj`F;yzWi\`] $eu xS 0=Mfs"b`^DgV5ݭI%ړ gG+]hL:jS13xч$jAQ݇Řh mX6Zz@Fn4n`qgg!|gH9苞]E7uN63&';1: nVn@*gfa~U=Хъ_M8tVN ^ =uI=:cХI(^mjfU$}ؓ$q:D)ʝ9J"_|x 38:vաϬ*МS-Oē2ks)3-7~L FR8rN-gD).;N4UJ#CvOlL=pjg*'tdU?*J˻lQBRjuN; !Lm;h3qѲLE/O$7ghW^V܃I17&O[wFJRΒ m/juJęIXyhS7YA%mٯXj '71+ߤ(c?>-:V;6+F8k$Z.ulqߊfGwXHs]3 2 u,nH*UV5HlQ9GIhVDr>fvJ߿(=|=fcg]C2sl?pYWͦɔR..:y#z+F)pM37:,ֲ{X7\nr.K;pk; 'rʭzvRÎ9c4+@Pu.9N0g[`GhG׆gz1\ V}G.q J* 2#te2' -@2.eu^.N 35ShʘrAv*Uf\[a%(!m 8se.nBv(հɪҕ*^sDn:t%R;Y}# @J}ДbwCx䡉xȋiyԽUa.jasC XYP< #=aZj_CK\=q3e1)S-]l7dAкdz#č#W1~㝲}q򦳭][/A5Ns`qXmWuΟ֓ejvfX 8 "XHR\'H=/| a;U3!;$CZyTGGozЋϞ"wOC(I)Eod"4P>m5 UE79r`o3ؓld鸙ݒWi^iS>yֹʇE:j6}>IҴ ԓ7`(RG1B c}^u{?}&NHjbWc48$_X^u(QzWy y'>Ejg_0hBRb ~fuL@7CK*J{ ZAiI3i~%Mv@,p@Ednyۦ=.7Rte|Cj0r^)/+|t!k+{^A:uh[߶AWRr x?$ѹ]&d3iJY: /h5܇|_yL_9"y"E¹z:s/JL 'G |sT ǩ_vW÷l婮ԯ5Z3t׃ mR&DNF]~2Ѧ\wWU%+|zu_OuR(:!s~KL`C q+R^BH$cVFBNLԂ`قDnD$*ߣjb¢[$՝"v>Sbe擰b0<4Nؗ S HrH֣-j=$ӋܰM+^6{( 餈݁W[d yW{'3m>QE@fj""~AU)|i%3QKD"\e*KzBG{D7Nǭ1i ̤)ؙwATO(kzTp  臜%Gr_ l.k")Zje\?\ص\:dc3E^(x} u!G̉$}^I?5 VV* uPJK6J[Zsqz[-!EkP# OrTOõ4Dsb j''>K%W ypj]ꈠUD zNJ}(qHb*qbv  En} AtP>7n?bzr@$>hwz*8҂rra.5@vA5>Vlº TIyPѺ{nCniBE "K/WoJ:ʣSN2Nm xv쫁WED9NKt4 W,$)!vaPN$dwT h?OguzbjXLOoXs(9&jB2jxOD)=  Z1t;_n\?o:Q͆7gi (0j/ꍏH.,ɥ4hQwsc-їJKwa]ƌ=H~Br^̩n }aJ#r'Ii L ~u0?>VμӢ׳ͅ+ߞq.5R,/]ٌ3&!يΕ*[~,AmLE(*aQ6 xhnͨ*ɠ<hS=jPz'D(ë*:W DrUc~RCKbDcϥ6%-yi1g_d;Oᮩ @%te0M-%Bs/&B^'4b=k@o>[0D&r1`V-';ϟH?HҬC!X;[E C(v@SDgMu:*`Da14'7AMO]n}4bP 3_^kAu)PJKbED rvw%ucpg{n#-z[ȻylGlLX <:OG=vf<(S뎎k4=2zN+`Uh%ԑVkGb䗹%hͷuMa/>؂=iI%e*hi mP<dlw|YS``qk_"贄_: ӣI,']mZ2Y[<(m!' -rVvVY^~H"eZdn@(ZI5K:_4518A0sHJ gʃ խ2f.Ļ7-Oyz}=;b#%CVMq>^-`k?REu>>;w̸z۱Xs;S$Ɵim,k'G8I'1tawFӉ^]hW Ze8t>+gU+`=2D5~~d\0E`&,+qG\ÌĭjM;-)>zӋ?w!:1/Z.Psw(NvQ7jh==dV> Pq,b~SA[XKnk2!l(2<&Лt)/.sbJm)l'<\9cXo6J]e0ʂ׉E#IL S_r$Mg:G|C'뇵\/g;#ѧZT&v";eꆒRb|wclVGL%/M4iOY<`r4҄5cI /MEmCvڰD} 4û85'LiOK9mNua OH+A"`pgZj SB`KtFxffg? l.g uB X*Æ>4xU`jΒwb-ySPuaOɅު/gd>cd7[Hʗ>nꔘ0{S"!̒>=:"yRתSkE-FX!at9O̅̎T͔ݦ;)_^Ǧ=upIASo:}ݎj9]4A]z hIg?՟a6-ajߎ4j/3=(R5JŃ6(d wơPI4-SDD_Wm<41DyZ>Iɢ{'x$oS"ɖQ\܈nF}R܋Umba1'H!w"DֲJvrks@tx4 r/uk|2 |PqJĺ89r.@+4sv6ݶKĩ%NCbk=v7G--aaT7JV,H\OvoC -'/I=Acxbd|9f c(Àٙ7VoOό۩(K Z66LY&Y \;HZ:θʘ:ed-0n8h?U6 Wf/4mIgsaD`)v i>܅y>9:yP+U²iBX7w;b> 3TsٓkKTJya+ޚI_EL)bKXp"вGȨ; sS %-XM= ʮM}oI'C +4ܘGH[cZQY< C[MQSn?+D0S4cv X+1ȧgYP!U&&Zsyt,h(Н5QC+ _[ 'pڮڊ{k7:!' osLvrGR`U5Geb)fBe`?۽RTm5UkLjRkqIX t&J|X=Oi1>&7HQ<%3ݡ&˳Bӆp :ORw9'IjQNC@.5܎kEi@+LÑ( QP?snƑTl1⌋ @0l2hC1B쮿p p?0zihν<3lq U\ zo@r-ҿX]O̓oR8ƹE^Uz}F?/ڬ@uwIwiڮVՑZe9GXKƟD2U lްc9GCu>uAkZ {FX,0Ca;2Erqb}IyrWk!7Pm%@;TƛvU Hz6%=D3J|!&em6ܲ)c*N%PBLz)*nh)m)EGT箑@L_N65RS,%q=dPS6BdF0D3SJR ĜEh#":U4^՜iW|:쇣zdP\;'Ϸ:]\/9#wC]/8z0̴-iT-S WUwS؎D0] 7}fRBlWM) LjG>OER3-Xȱ9H":,M=m5`{q_OQ]mД'SoMFDpG@EK!\@Q]tVNO&7P3o3-δwbtJ?n2?PMPV.=|Y)xvc)HVFL?UI' aniH9=$\6z$&+te93JZ_Lr9GǦ-Vp3HWNkĝ,d|7A3G !S8 eJC^>hm5Im璈,mҢ~\Ȕ6+i#'xR=GO^읦l\E: Q틦7(ӞqEsVl3gӿs>Cq|O&, DY\Io=J r U{Zh gU80TcFԾap<(>IT?U@ jR.gO/$Bp,0=T ÑQYz&>Y%οiz O+ ,1wVP>]韍 wdWZeRp "hHY [Ի"Z# 6XO H7%鹠|BqrjȚ9 N(g(<͗?;<2[v]-z *{X$ÃD*+Y[I!)ߪ*і3e›¢}шz1H+)mYEj*hWIrcvؿE߶F?J 5`|fĠf7u g crٶ{hNoZo>EfT&g%XlMׂiMcBtc17PHgԂ}+e('Y%TR}XHEr?f^Ey`W,`LE›n୮Cѿ2D1P:祷CD|+ڌkŨayAP( b,G 3-LyjToG^yfamt)O鳣Q}7C)mhs.d;1NRy<ÂSd 9n@z:;ҡ3{A' <~6ʘWO1Ӥun}̇!(܏T-55`lD}e"DS&*&Nߓ]׶Sl"dŽrOBl[ebg2-J~;\ɕ]3~Bõ(;syHh n3]=Hs49[) UFus샭Of~ dP՞7`BxrVA|{⌌>K䌷޶vM2LG%DȚ߬Ey`;[fH<9s6koAwjދ롄Th'&#ggS[h.a;Kи\l;":<02uzБHoIciydBVˊ}'T UW$eۏ-_k+pLU ЉY͛-orXJn傯6#+hvj,JW1kX߼MHަ ,o!^ J)BMm҈,pԣV TF_ d;4މP w"]'MynGޟ6Ftd%Fx2lҌR-)Xu\̖ܿRc;;mhU$Yeԙ_Zo%}|'iƃ ,c,Wj$h?XOrϒ 2};3ݪ ,{̆Z{2Uc24j S )Tu=hŎ?MDgO"'k n# !xWo^\q{r$tʱAcs,d..Dl\AM 5 H x.KXNŪq ˵.R*;EtQѶ[,4)l{'k= `Qȩ/=~lTv&[LU[$ȏ4|Qn#hx1uiiJ┥8J 0mX+PC|m(TWWmlW+_@#P41Q]fޤ"s[ù%"1? _g2LjJԾ?Dr,6ʡRS.r4US9"4 ru$Ub'w'g8! ʼn>QVhF2`ӕx+5IW,ï)?_%<tr8f7J|忌JΊ` /Qe)dkP2'O02"EڔR\#S &`4Y@aq3q\F2WiYDcgbj"'{xg7_`e\3|Qyl?}A;?3̢0eM,x:{/'F'!zl?fִB{\SlbHMqR .x8f>m1;BC`_TW'@+۴Nh,?u X.wSC8ݍo<pIs~HL,GJŽY<+l=_2kV&$-/Mki^0A&}dܗVLk"%u( [by_ӵ?9ł[nd:&ZT y ;2A:zoG>-)Ĭ`?/CwGiO !PG)Rjݺ{GpFc8 X2]V)g>] G]|wU4,^Σloi8}(:oZwTo_{}0~o;xn vJqL2ԨvS;*8#72wwr6@HWĎ ߊ8Jw+Fã_2&IpM+kF{$X# NoKM$lζOQ"nѣgK  :Qʼ㎷_VB!-ϱ!}|Ј$',qm׈Qz0Y)1 يTBLqLh_dˤkS>֙67GLt {)2ᗹ1 tyPc\ƳF2 6eq6PM 6þOHF.O7O?12wT bi@flp/^;c&w]~N(5^$؎nMS¥zbcW'$8Kbf?||5#qJq3OjFόIϋ?61b5c$3֝b~nrz[$j}'`8'(t$Dܦ^Eu[NMۊygbKLcF`hdTV[5cL=P?/u3DcEbp?ҵXe A*AnOJ5/4K T_cu0#ʵ,[WSgeMLxp磧(ѻ[CTM4-¯HR}K؜>44R MJc :G8Q!U,H拜2 *LUGXpP+x鞱"?(i%m3{x׍Fj0QCu0rGumߏR9(pvK1E256[0ӊY98 7'e ,ֹ@)!0p#Fژ q:XI~"] )U8̧$ʔq@h:J+ &ϗղ szȱVX5-S2܄)pUmW(a^EoBݹH$?_4rseMP|e_<5cz9ȼ *l 3'h;E`gGLѴ`$M08Lh2$~=a4Wۊr";њo{@DMt"~`4%%suM嫶vȼ03#kܫv%#}kcb=߉p%X< ɖ ]P!VIҲՓ@\ '.!Əd3m2YoupttZxWa3t N} 5k^) AxMW_)0a2NJ bIWvXiS_._鈏 1eP%sW!(nZOQĽi, u"Y=#wE =?ˮ/Py\'yAGDOzMNiLXnt* 6zw(VFz&!\Ԑ~[OaL&H]3tpJ~wKExVA jWiKKϹ.!1ȓ`¬VxۻMx@.i! eEG}`*eu#֒w"Q\-Ā\w ^JBfw8k4&lAbX~6 mT HSE~Inic$PBnmsܴds؄d~K\\_M@e-V\|<,ݕ[0/]89;/kĒyW#8Z1W_Tk8˄xunݕ|fŒe~ŰzW:9- c`a[CcTv GTc@<\'ПXXD cU"IJRL O:y r}L=J+Q,6NX0*,3#N Y-!&$gUafE \NA[E !'` .1OY c@w'&tK )6C_D܇1E~ w m.LqZpxkPwBðw~Pżաbpm'h 割iҥsq !2PH<bc-Uc7AvJ5ҦbAwC>nt>VQӒvNQpD A9MN!#a~o =)~:zx-rcSUCץO:P-p$;6yڕ|2hOz/%):+@ mgnx|XAD}PΛᅳa:2;fYeͶM\82΍Ӂ)!/Vyel&<b9B4:FzCˌ^ Q:Qq{lt\` "rWzFngǬpY3ӹ՛#WgZGfP4:s:_6 *UfKd(-~Lm5 +Ŝ\Yl7C_vQDWResoDaB+By9>z~8v]͵gg0*^Sބ G;XOHi/POU %Rj*a3 u(/Bj,uwSإ ؚQ(4=oH[ozI,0!mӽ[[pl%ny3 9'6H!4z/qFL>bAdr4C\>Hɰ_Ah,\/$35H`Mdbn| "c~`8F1zi:Y1Y~5[/dH3EB|-}ՇPlӋ<Eig[:Dw"aigSxK{ue r%~.\5+ͯM_X4@(%vy_>'VO2NUeP+4z kVdvwhU:*6uM 06}X)3mh YI^ @@lIQu mKwl+%R|QEj +Ug)副NHQlJm] >Ig'`{tV=j memIΑ7ĉ# ' Fف a4HMyd0tԡaB0oW &boTg&]ZC-Ur64A-ŢDWFlw22iLԚ/V!]$ PBtYMPKp{`bEZŲ9@nj iw о<,b:ޢ(^ 5jyĐٯK,U]DwsnBz(mXݐ bh Ceumg8ToJA$%7*O-Yv3o'ELհGgmRq/}_ZٟJXLaNXUY"/:HHq;m)Ͻ׭ cs[F$LN RucʜPLo}0]tQ,WJp^~Vr %iTg )fmuw[$,%0w([dwWpv؏iT3[ G[>9yĚֽ.>9#%,ٽ,pMq#t8xrEN^{k,]؋~Mg}EQ?q!7*jJxS|ϗrsay0aPzc9BrC J>>q[ ¯r!4f\ LX ZƽE>&HNB${3 QonJ LXëY|0rWH^GAXIT TՍPWOT#PCRQnw$<'lqe:G[A훫1R8nApT¾K Lвe]'HQۮ5>a][UWWi]%MU?{jtg?8vf{DwkWz ؎U[~9h.TXzT=t{XR @!=} :Ik[IAM F-t\ă?g2L-̓Srn(?/ͧA=idJ2*3fcne4^j[0.Xܝvc\>1z2Ԕ"|],#% zY};t;ǝ.2Kb$g\L鼞_]Irr;fZah"OW+wKKQ/FH90>[|p=Z]}`?(Y#Ze.W]K&D䭀L11i yW엚$1E=Q:W/{s@қTҩ8n3 YB;y^7{ε|5tz37F}snbjH^DGEC"]viqYpQ:kIj;ˮ~ #5%!\ *Q@аZվz)qR3*V)HbK@23/ݤq(J(rQ;Cwn Ub~YT ({ŜV=(jЭ!Fb+(Xޟ8 ^QɮpUE/^@cV/n1}ER2~$/ig(:7Ct2 q=JF>e7 /JIxY7ـ$t o]7cVl\ T0~N.}T 'Jw[u<uqO=,=̍W:m'|XP(Cii!#sx 3GBܹ ☤9 aRȻ]HrumWQ*6^A|o o@XbBBphGCrpTKԜ$9-OYz|!Č rz5 ydL9 & Mv-7X_L/HFP!qM&;Ubſڢ& 5{jW Yv$4 uaBS1ƍMj Ԛz|÷ƺ@Ric#lFX+mS9TfZp6l7oSx9$hCZ^65|M~5`^kC6 ʺ$G>u=RhŨ"j-'$*晳Oz7:Q-#d1uF [ӌ4# l1o/avS4EC ㆨ_4w,hYa #r-{hњVҌV|]h3~9.eO>M0+ey.$c ?Ő eL膡SjGV>z0n6\IW,ŒJc*ʦ&)"Jui7n`kc F՞R{J XeD(b46⠱U7Fk}%J!x-né{Ag'xU6Dg@z\h Q+xDLe3+N"dSJ_+ ! )$'b[U`E+L6D=c,o3V+(ܐ1kֹrIGM*x"6UTiz`cktW >;8vqtG9LْD G `y3XAήJ;M@`4T0qI/#KE@A6Ӱ…0(_Mto %@lʥJz]}a|ˡ މɢodpfom&3&!6ªLr:k?kQj%9ἰ8|dFzjQLC_2J&3ܺ:Kf?[ot6K;9}Gh5މO׈#HC6LDH5@UVX*1 !3V--eMojbe_+90F )nt%?&.-fMwx3F8K+_*dQDцo[>+? ÷/<=8* Vpywk R̷xbqOP ۉ8J@XnD`=?/97r{mj/b<i>+?x_8zZ#^<ɹB'M+؏NvGKhX/_Xb|2cԞcPؗN1|F,r:GpCE y`[{tsp e# 7 nHQ{'E[`N5`%Z10NE?YJCN+ nޓy}xg149o4.sb%>JZIОpҖTkR'8bpKv?+urvX߽ʔoaOÍ'1^/mT073+ji.MZɊY=ʈȀ:%>KAMttȤQmmP)6K^!(:ΖݹBߙNMG"R}f I"VXVQO~׭_a 6-J*MޞTaX_Bd];5g Y6=W{)nhSy (75 Ě^Xvow8! nAD6m_˨dJQ_7DA r ZaD(u:-u  |e[d1vXѷeǡkH [|qhNEOjn.8|~\iiv ՞"K$= 4v(Xz4(Q2N;SA1y!`!.@]&|Gt$ d s}MĭX<>3k=zUe8MʩdiUd FF8.}jYHVW-j k8nnXD>C!lJ^uG5: ;ˎf~xrX6!wH`$Zb=$u0@ttK4ǏJb 힡#Nb$NT55>ړ# LUD7~ qؠ&znaK*QApl^ˌE}}KYP >ad4iT''WU7vڀ}'\5Ē}N~hoXMz{6w>Mdnw0%^KT22“3FEs0 $`Hd'Zż >'_wS`Q4F]MN~ JKIӀ`=WP.T4!Il{hN^.Rͨl@SfG ^i%6f+{YiU\WQkbt&VOTgI:&Fם4 $nCڭ7V4 ,?+{+-*HC3kFЫOc %o 2~n}Xv$IV! ,oZRmN8hrKn;O(5WqiɧJ[DN w555>w`Joy(w** +6åc]6"cڇ>RVt%mփi!|Dׯ8L#gkg] Y^g).w)CJ {ϣAɭx&cJXIj@gOP͉4 l~bԯz8'Y 㜓K˼iOo_(}*miϠ6@) Qf#UEdA7˕z=rtj~mMƎ&_QGk9Au`M) 7ŷb0~ٹZ~9|j[8^ww:|/t;Yܹ3Ҩj+#][[ه )WA-p ?;@UVm$zAjhq7n*wT*ˌEmkĘe=wAb0ڙ1%f0g-*%lq1۩C"jz$=nQG)*xQ(}Wطka={>N?8/K3L zl@m\6iFyPjsb0+G-Ղ^TUls湡It]6 Ii7eƃ@~ K{|lQ,`CTThFf2[&T0w #8ʃ7)[>JYFC㛏 d?`m|5+[`mGBKcW!%$n[Gvp+#L9K!WV0҆ h]}#:Ub-n}>s^10H]Yk 4gɁ1q7=0&9321MLֲ;):!Ԣ[ 3 PpԔ:޸n)}&@ݪhL}̓4+ˍX٘2-̹1,E/;Zm=Lހ"b)>g؎ʳSbl0*taSg_ZpIzU!md~k (ZD 8D4@s@, j/GBlP)DeMAwgp(,1S4h]zkM%iݓ] @[x3 9`L z0{Hh͉qq \z3>QЇ%'Sf-]LO688gy-P클Kȣy\Ar0f1s'h} "%ۀF;=7n!yڜZ,ض:bjto|hьҎ._'\C[A8żsoɀݱ$M]qO[ghF}od xݷňڍ&ŋ{{9P^DHmF1Uf!tS?OM{IZM6/g$% @ߵ)FaG9^LxǩTL-zOEwB8Bn&N32Uì^|GQ-DUٻtjW΍껩ލzBLH\=<ػBr\f#]<ڝGep>ֿ )^Pz>,+ m +2'0cOەؕ\Ͼ4r9xT{<)6A|-u\]֯@ǰ(Qҙ5uD,Gs{Lѯ S%<'鋹trV:pר)/ִ 1G]5p0%\5VB ljC,>k5#e9 ؔr}TxΩ&{eCGHyZB8TrB>"j\tJ$p㛻P}grgd-ӁؙX^U)R]Fm ify6}+lE<amkf%X́i.3oSih1M72rJzm-U棡(f&=V1pb2 y!vwP3Xp }A/1,n= j1 2/sH1IGEW讪{8qGjO~[u}LZ }^ȷ%$<})rq3.Ƨh6UlU]b%+]=d& ~-w lt9ܲ'e#`Pxאk:DLۦ&??S2\WHqfm3oU]Vcurh>x1nh [ACq:b6Zw-koE”[2'F<\"@Է'PEVx`re%[zf(&wP9G"B tBZ*%:oy*w %C YbYVYe5Ut6vEjr<(8M;@0-@VYm 1XfN zHkƁFD]X)C?sPٞ=TTO%ͶjGO"ߝ,-F3}vȼ=P2Z3J_J6RQa}}b6=IΑR !9ف@Њ YhRxݦSHk (Ϛ"##DÁ7.8lp{BtJI_Qdg/wjRv~C>yef%U`LY x|b4 l#~ t×(6먲d亞AՌO/~w? V_YC*ciObFE%KJO9Z C6nOm5M߭T Vn?;SohF-*o,Ǖ:>nГsPDH&+-di~ 6з8g\"N%}k%jp2^U^.t"ڔI5VVY1~͚ na*2[^% ~._V< h>ČyRHRH6TXS!Ecۅm0[߃tLcrtT~GⰜyBOoLpb،Gɢ~fP2ДlGj ΋ ao7>ONmkIlXkAd(%vjcMC#*bƍP0ݜAHr>Fy]㟙H0Qs&ϞS/yErAlX^|'*[T 6 hn%L N|2tЩ6,1 wMּA~aB=VJr筱䳑gB-WjW sLBryM z>' YǍGYW.Ez0uH/iMN(;@`"|,7AӂH>ge!RTcÿ\B^nG ~T'"oeBCHYFJ\[T)"\^t#p-<;ؾQ+U5޺L`4n+"oT{C&h:0{7Fw\0yِ(ã~ADlTo_ƖOeh߻5ۡª:uF:dןdh@{$ufH$ P-BHDd 4M}SLǏWtwhߎ53!Ez*\ 8C2q'FhMxad8A%>wXr@|5'0I~:L6/L/L+Ȳ&YR[.G+Y1Q4m!UI[%$CM4:x„nO-X7t| 1asL$#V%h5P#d$-&GH0gluC~P~` t$^f`ev  4)?&OoRc\hR `W>ӇE@>cr?nHk'%X4`CBsx^ŤkONF0kwq3|5'5CAlNqL6 md:Eꂽ+f ^{-evݿaW+];nZ\qmhelCK1TQ] MĐ s7&'X(jzbԩXM0CE5r jPƾr!Yc/{P4|G/9|_lApM mVKR?fe:eo'i=ږ# vFz7)]x4PM['H&Ϋ(tt-ݜFXm[.%7>5h.i3fY =6|UxFynf%,X95ȓa hlػrȋKߪ@Yn^)[7^+;^eWrMrf!]Hɩ8d&BlGNj8u1Almd~2c'ً)XNh io .$)z-lo<,,xlY8`vt,_I܊@|j$s;_쎟 "r˘qW<̥j:(swá<:dW33w*=pN,⳰ Sͥ}^G*%J/1), 4E9;^F^$!/ZΜl&>s/[XUڎ6*49hD}!RSO_' .<|3j{푡PfƱHD(kP(Ml:1`mnf7 o'qc~$h|v*'O꧰v&0y$'/`8$Y8-H]NQ^jl Ъ U(@n:kdcīBc07sKްrW:83|7 BtSq(gvw(\k=:=唗~Bzq31x1N[|M3&t^@ꉹ5ıKj@i951*7+VkV9ݢ6ʞ5?Wj8[:3lIR?.!CSzA =mݢ7o!maf PA_NIj12F7US Ȗ$b.}w̅ M<0UGtD ݶ\bs R]-18NWLe1xXPԉ-NN,n<W`g+@ھFGVoP$<ۈX%ݛkH> #EH\?WPRz$ )*ĥUBy >M4fIXiʸa4}-ttDX!ZZ]V.^S,~DM5X ]]hSWhE 3Nf)>(ݣ*Nn:>[MDQU+Mԓ 6DµV+guܓ`N5fͧ|'t9-lOuZ)սMuX#fr:0*,AJ'ðv ;>V';{@cYUU"o썍Z09@/3}SU43S!^`AVXXǑF[(e*Ks6Eֳ?"rIY2ﱟEP۹ۮ}P6sh_M_5k|p+˶p%Į#j@8O4]zh1.`L9ʻ3mc62[i-]TKp.4Q0VԛjJ>J+NaRVJ7Ʃ7X t Z gUm&6遅}3_ap7^ џa5Il"`i1w8Z=#{3`w-l璜\E4@#am>@*9M!{S/ -5 4bvF1 Xᮻٻƴ{#8V p1iSt ׋!lY`^_s=JC̅wV%ػd+ 2^L0R0Fd=h\5%lNU7l$; ^d[:]2Jֲ?F=KR$$o7^7{) ~S*o=f&G_ ]}\~ hQQHb4.~< icu#y+4AAl(2zTڗ3n͜kNlٕ%yt`K;ik&_c]@6 b<@SԃoB'F @Ɵ.dMK _R hU:TAUKm!n,'eŠWQ}g(a+ja5ɕjپQ~5RJ#=ʠZt{rVHOS"mB3fMQ<'I~]Pم[ve~Awijv^5ΐ| 57!.?TrSE K}9Xc{ٓQv q ȱj6Mf$f'Zꣅx* uWIQtw:(6mH-s3?CTDkB[@!leu%w ]w )p_2)sҟx2]# I#Cӿ?+%|jwCp'0i ZqlSFN$ivW}Y3B"Aj/d15Z816g';BͶ-Nߐd/娏c$B;n#V-jW0+ZtK,iL5nMˡWewEkzS?* qr΋y+D] J%~$ےy ԫWoW2kfUk|+qҪ}O5p.A}Y֮&R`d }1r2] L`M{ʩzs]kƾ3nGI^'[=CS⿒|-"1Yi%;lu^X{NGyCW2t?VͶtNxKEL1?@r^S¹hMwr0v襞+=+O%fmt3wX~#4z#xFkg>M7"Ny}LHfĂ+=a>ӼaY@^ z\q(%c8Znraˮ|#ρ!PO9YϥH+7A?AXi50Ljz7qe\ y5t0Ε * +LIS] KA6a@{+½@7+h|r Y7ֿ!51f`V v}/&E.=':AVfPzJF\| .v]To6XHbF3}F #[YSmW'`2 E޶ٲWc1edv@ψRWm,O<=<=\d*!*wuI7F?\TuٔVoRVuW'W4侊0M'x}DӻwD9IM[cD "^z>)I3ԈX5]_c_AJq;]΂<%ypQ蝈| ٍ./u[iѭtHn$ (mjD]r\ SX:)-p zV=(|T#N}5ֺQKwpNA甎D&V \pcڞSy"iBďmn$t%ٱ!VrUEj'0LIhBM~[ I//~#k֘Yr ̯V5rF1c4S9>3`0zv+2 !)shi6g9M HdF+ blc݈m r+;jclD՝S-^0!L1>^VI11nc34-ӑtVPt?2d[usƔ#M+_w3?lU]O\}-+ŨJ1FӪe1yԦ F6:v-n,] Sʬn9B/]5G(W ϤsZܕ#R!WhύAFq璫W::>Lq_c 6%~Qk(Xw%q.A@ѻ FFQ Vą$t~:!dU& /fX[?.p!l* iGav I= rhOLSGL5nvM%My.G\:Xd޸͘(gO/9BgF<zbmzzd[/ae"xitMCȱO?*vc .o4yD̓ CLPZw\c $(PˬԱMah/9`ÈW9S&ZI. RCҐwei˭z.Q>7  WDΈMPn @)nc/@!BwS^1^E,T'T]BA/˪cVe,,Nx~@(v .6[=  9~́S9nGĀu(̹ٶV4O-G~v7`RL$&JTi)0p_1\6-tygq>=)^4yk!oڃϢB z D#XWt^odzQJ@jEOh ))>EQ85r'lOIHwDkJKr.$"qJZQ~\ȌhLL#` ˞⺿bc܈m^񍨶 mC]jT/-@U;j BlB-{Jn,khB]5c'[Q A\ \EhMq~q&C7&Mź$ݪ\(&lp>p]|#f@6sYSʙ|B쪲O ۅdxvrr)JL ybL%FI6]2hF)3̔V`e^5' 'E̶ԌuבqY h7^5( Tvr3C97Q3^8Q~b[~!oABҮXE"Vʢ>BISEta$Y!%MJ$XȚ1Pd A?@N*φp \t~>b;FE;&G+ ޘeWN,%^ނ9}׆+,묫q~{AYi e^{>5Bq9"=Xa ѽ5 Cp࠘ߟz2*-ě|#lOj16ԸDjW?q)_Nö`ft>").8Yꉴ[NOW5 hMx \80-e#&m CF*g]Ȭ᜿,Ч.|{͘{ 6j>jYTQvA?C[ ^ܠ'Do_KAU Gs:e+J|&nJg"-T۾J>0Y3+3_+Wlƺ#]sp姂0avٗng˝)vbCُD RjI|ڲŜfE7Dɵ¼>F+hUpV5~303IEB$4MAت" uȜi pȩ֓:hfHR#oHD FI$0vdum;Wi% 3I'%n GbHwfQ}Z Oyvt _D$j\Tm,P/杙 % 4* K Ǩg&9Ct7hď(ח>֠\"8Ƥ̛MaBa )UXޤz#,(xa4>l'?`雔V<2S cbr:ۑ']NǡSZd6a-NOk@|+e6PC\+ϡW&XN9EWDZp'cWT 7Ńb4QvE4RފgӑdN \ڇNKz148 ^[dkCJ=rfLwBGQ:9Q^@/>I/ו dH_ -|\6]xzߪ΀]ugUFFbv5[0.zК \ b r~c<mM@`R'&К0 #YA/a Y ia $(k$R_a $WGyAo Γd֜(j.\i-0Ovц0-ҷ+@~Aݸ QΘχj8/yj0#܄bя$1rQmOduP%Vh <=Qn->U3=)|»^'gH$#HMAhvQ4вjSDr7~pDkкfy.9 $] $MO^Q3-ƞ M?k<0t*H }WLϒh;>˴{S~zZ3/2>S#آbm9C޼7*ɮ-NI"<-(iM(Ky#PTK$7N&EXI5Yfyv#8چq,q`hSPE(X;l;37~eP%} ba'|gw%uGf kpgb&]JAz/ꬷ})aGIaIEe$ỷ6{"c3 S`qJ Kl}*0*DHܬ 2UKU]^_^=PXIȌӂNּLUo`U5#k 1Gt![YLE5lG@"JnP$խ#m"f#,u!=7 ҽg oYkI4z]RR!wsB~򺧴 =}44Ui3"dm<1L\αQܐh /N\OGok?ɓ:X|=U;a+= 1bUPVƕi*<?؛p!B1k3ոYToy3`;ёpli篍lmVih6Tzt~/}ӿCAn[W.ٿ%4<>f:**&FLf(2/w,M,{0p^$'#1Z&pRY?18n)eY9˟0o^z`b1";ө~?Ou2r_+rGP< O> ,W lU=2A1J=!-t\nox&@.yȭ^ָI}ʛ~JMdP/T+(:N:hM5WG5"ŎSXf^ak[$(6+{G3;Lп~mk|h1e)9@[aGrS\`bQyEXM7DŽM!G?0<J`9Ƨ2c JPpS^mE2p:obW@yk~^o9ߋk)$bt~'UQ/X)ݶF*rI2SiMvUH!L4g#t(CDl=v/?Wlx?YPYKHǜ(f;o9w@D`H3l~PdS!XVt?a=~7 RvmKCيoC†H-^rC\̈4srFӦަ&8txf7< fob^rDrR5vEt7c\)x(쵥!Moy sR~=o럱伙pfE6I}:ҵ̦Z|-W Ή[o԰)3_A"YRCЧߢdQ:Xh =d-7,}a:H73#Y^ 77U2Qк6%qH6 }3o9>nӖJ;Xܜ1D''jIf)m>W82 l<,&P ۜTf$ފS:<`vXh JK?ÒJtLԄ~p5oL^p;"22L3/5c5x1~8N)ș:krMDT͙%4b;zr p#=qAP{^18Ovaƿ+Mw .x73X5"8E ʸ)g]o?%AHY U0>~e#$$pƆZ~G@ŖoY ג᫕2 +ZQԓ]q^IMdHhkrW&a!zU3&dIF~2s4ɟ:>V#^`~O2@VYcJ"ȅvD/@7:oy|r{?ҟ\0ZyIuuujx{[. Ι0Fsjc1&T?Ò$=JJi\oMYnROU/ OO3"Q4+rCR𿀭VuTtgTerֲ7GEm;\w. R+_>ҁ%Ӑ7CϨ(f ke8*A$ϛ-Rw H?nQ~3;\Dqq5 ihA#8uk;Q??uAyuӬ[dv865Z`i Pn|4NXt2yf-Tڅ#;2c ՁQ:'GKў5^qvea:yCDЕvuS'V 4$~!w?hFsYXRD`@uA(^T 94B5[;Q_i5~吆XU1hx$LCFJiL cw/YSit&^;ZWCr[K`N(SP Pp swasňf`'؅b~fS%XV4ezg(5*$!:7&\G|:1$s"J,V歎z@M۩vC.;3Nl@=zJ{aw襤ۜ(_3\X͖Ty#ti\cc$H"Pe .ZOp"h^zn0| o]6Pob4[3vN\ipgkͩ{/VxϗS/n.]wtTRuI;mkmP_/ULeFc$])~{UAWMٔ=6KWᵗ#3%^|<5[p:Lyɡpn9E. 28pqo4u}Ɵ>ʍ( IƛǺ!.d'7;A>*A !֑M7ת2]~ԛ2[ |@~.-lԃ' ^!LnÐj[^G$rƹ[W.]K]DEJ] ]pȄ 4&/;=gKaۮ s3%M%]$TtNwN3sKa*6= "{))Zo"(ZOkfi$ChaAOԻBdRyT IJ~g<$-ˆ61_.,&* DՂba]8U7> fЖMms^D4$2#d"Ek~\zK/mzJSԋ_/jIdGkeL8 cTz8A2CZtaX;7q3&oTuuf꒟hN =jvJNyC4B"f8 )9Wp8ѠLJgÞ(#2Q`K )oV|C@qW"Ӛr|C44ϯHoiBfB0ӹ4J\FuN ~P[A l u{ ($WZL I#}zh>QM&D.V-p*CQs]cwgU5x^GJ< CqJ(+k[:30qz: =0rwlj}_BHut zK! {($. Jurl'PHѰ5Ɗ~eoT6,IUݭqF`n5i!bFѤtcB j˫`ĩxll8\ ò!-qRhP?q.&cGwhl:7( ";R*]{<Ď>AU գB4ഝqe5> 髛а۸^ɵ@prmEkE ՠ],(sF%sQojnM4໡=* ofȼS*Y_ ”]%@PTE^8:jh\6[BK0%=Y$ڼ+*…̪)8$:HM(hlhwr{4l^py lcy.7+2n!1!9t u߲kNWvg .sl]G3ю CZvmH/XȒl6Ձ03j9 E(q>Jݮ-^|[Y>:¤|wm'DuBzkxziy@ڳKb1=|6L+:_VgF7^r?u5u$Y2yRՋ!ܽJ'?maEJ|Wd:Ľ4 <B=35l>\DpيUY0LQΠN3dVVVELqDkA:aBj Hռf04"j:$Bv:0ZY*ZREvurچƋ CD~1s@3:`ә5D5BmI|v aߧ=3D} 8uN;&aN7@;ǕggS^{lO+9$V՛Qq;׋;[d?GF=X[=8y*/-t}zJi-p{!pM- @@C=GZ̛2*cz޼KV>5Vx.7GIQr-Ǜ<$3ӊP: tD_[ZQ WQ|1ݨSWR/yMP|DZRrkЌņDp ǹr $TSꖒ磅5mJ,fjپw#*ml˝H)#`)ݱ#k n"B @ar͌4ЛRŝ zd9l;Jl(C>rr /aT&Loe%  ӝBzZb%3ot *60=Lo g|sL,^tutn<WV:\|v1mf9beVO^pTz.tI  N (k˦>=-}UㄯdΤ+/3ͽC5/,0ṳDEXR@ΡO^rQp3i Uk>5;NÔӟ/Y$o^Mg7G,y"%S="ч$uYMw?rAuTOu9Դ>oAl0A6) n7Y)+ Cȩ]XV*7f-Q3c(v A=ҁ)0Nr֪\ > }З7F6wlGiF Б>0|ln5-v­V7n癆ƯdVDegu7ґCyqU ˎa][1?l E$Y1&Kg Xz(t:eRܙc":[יGy9>=}~E?-Xפ$Һ]|k|9nݤi~ԛU3(@:[/h(I҈s}-L *CBr aCr7Fm^ytZtbc4JU3Z9)^˧Bwz#A1 ǹb0NԿ2r rĖ+f`9넻Nb`-EW+;{p& fDغ#t_>&[JR%)Dl! ۔at69Uc4ܩ:_kG1ELO/K)gx Lp=9n>%&(.N}}'_rDh.,I,Zy# )rL2Szwwma(lʌW ѥ3AW2;^˹# &~uL=[c =ꐫ~3.*Eicy_pnYmafJDmR1oO,fx7{b(bg`:焚"Gf,d !ޅJN]}eQa@k(3jy'60G<`m.U661/Qx&5,dwaSa] s)Na3K_t vaPBvJ {VD9F)uey#VfMZ:qs󧺏+ͬEAVpSvEk&O:J<+Q).ͦUGkuYIs,*ddP/oqQSCݗfU~:yݎ/ Tό"uΑ75\CȃOw6l2#C$z0>Vޣ=}}Ve(Zoabu~.uQin9H$@c-RXF8|qy`Ođܜk^!GȤ< S*V STP#n>|$kOhW)[i]DvCȦ) VgꂣqqU YF1Madʕo\KxbO!YYs1yp=AZV $Q+"Q Wy;~*t( ʜ Uٱi _գ!Ԓ8B3=f\ުN^9J(K-3S&x/l k$)LHNTA /ԗޔ1ͤ+rUPDH$aح&"k?*!f6mS:O#Xs+ .07}zZ3nBq4f<%wucӳUwaD3XrW@j4 8Nx2x%24k]Dkg v6;`P&SGpt#Kmӿ'hn[į=*>b*J'&#ԩ a_!ӡN:}4k[ǥcyI/CieF2DwuN5-U,E6#.|, %Kf,6խ%Nճ" 8"}ȲlҦty0vڣW2cWȶ+16 Aa;%S,ǙY뤒0| "oNӃ 2DWo}B>o'b&DSVg - 8Jp%2 +ȿ)XP/U46\j|:>qimZLri ? s&|#pD1CY#hٝL+zRsu[%3v4kܗ(AhŶ4hZ H}8gd * BX8~X7_:ߜKQ={d1;NH⫛0j=;gfH FN] *Dl k|ht!-dԨDƛgU& D㇙ ė52Ү5/sՁy~J!RtAР&wW*7PDcIzوw,=FE2t{'R[eC}zg:WӜ")4paZYgIdÜ1$*]M>S.hdFP;dȿ*Fnb? n.DZhWM$[QhB4zaAC8o#AEpe lB'uųlX))5*@`2ڂ|͸6jV7ypTaa 6+aOu631,b5Ed8 q{K ]_I< ye; 62R3Z9le~ezT1)B#-0rmX 0L/8Bjf&&[jU!o]l8u-mؤ GӁkA5)$YM0^3)"@V/ 4&P~N; cawiθ73语3ٕooMAPqmoqfZ"OnSaҴVѦsd B9'gy,-+/=E;DTALOL@+(AE%x-Hfl۪?xż:{) gaiR2ߘGA_2z4\lv`ƵLFAX@w hE}iNu)j>1Ez2W>ߙF-d(g RGɑgps;Qs&DBm#?[-mH4 bYDM[ 0ZqI8q(o kG[?>= QQ.&pIżg-Р.8?IzG!HU>Z&XҴ). -f"Me;NMIOd$}>طl.~ٙs tBh1mo`8ik la 0ef#xxCо 49wb|d>gxJS݈TneթC,iH|* ~*B΃_`߅&18IC K7y2yX"b "?~5|chIq\ EA*(5+'qTȽ#kP\?mZhRc2Xފ5hOVQVm}(cTuVK}[lMs&n] )i,__\8/I#*0Pd|ʣkGO kadˊ$شN9sXA]o­M;|s'ɫhA~NGDڏ+{4SW݇]"`֛0B, 1i `á I ]L5Վ-53X[ܜ .]s/8Q\Qh/Gy'ۘ\Πy +`>;Z.^=Ҏhon5 OŸaJʤxqO{kzh> +B[W# Lɀǫ܄Lܼ<ClS&B6"bxۧwGƞ5w0]+uOqÖ2.EeʞR(*&\^*'+КTxK;A(5]yT츾uzYAq4_y ?K&v y ˱1pv&uN9d\gq=8Qs+q@kt;ȞY'#QH_U>mw8.0%Xn~LdVQue|'ePD9;TJaXl[ 3p涘 u59yO?hyi?7n+Gll[zFdCXM0GcU"#Ԍ-^!%Ý|H8_Trۧn-u2z_3PiEFtaKw7@j" NGⵤM &_6奩m̸<#M Uvͩl &~K>)>Lɞ)*}}dҏ(|0 3;~F+èrb70QE̪e J{:5VX/k6"Rj9Sa_7G]ќT7TU%211؂%2T2lY3 Q0 yZ[ijE:`O˘ y^a8n0_&"o_xUiDtҀ'uI]Y32q,rk n2t <6h]fYy \ p:d+j? AOfC"-.ZnBARc 2Q'H1No/*\B.3*r7?^N(3|1U𜪋 &}ߕ塩G4nw8ٍkC]@I8F; nqȎ-`;vD etέٻ90H6]T Ez  E6~jiSa_\it!B"ahk@^8N%|O5cwc+xx2 5~qc@ aD2ݥM]X>*\5`E)Dvp}tY|$)' M~8$j ]Ci0{S8I}I?:CLW2o3gQszx,W,֗fL{jIL5~}:wUoh i*;KUwx\aClƣbS,g"#1d؉#H}go#(<+ܶtʊ~.?9EȀC:ėu3+9R2ř\n^:rȂ[AbGƜlk@*yZ,b̮袶>2^DsF,sm4 =k BI'GuדޏrTͺ^@FZE\EuԀ HlrQ.\Suh-W!|F`EQ-`Me J*-DB1qhKK?k3i"`&C& ۄx<1xoz>>3T :GB3'5yL_P ޛ?9[c*4>Jb5͒V,I }.;?M0޺/\/;,R\(/E%'DQQ68|pt|Ub~doDI/_:#Y٨~YRa!Ztr~E rJ*JDtJLT.L.O?T>,%|+oȮn ZE:p/(HqH$*&HLz;[iӨu)QUj|mНYӿ{ Aъ]Cr-8Q֯$fa]u})pyʹWawx ~ml}ͣhRE'QyvP]Tt0PE`vk:_-̨`=&ԫxDe~_璺}_Lb-lQȗY%KFnT*"^Lݠ%^Ѓ(?T cpa:A驮k׿d ; T:M8uwNj9i!Dm _@>-S~juў6 ,}<զx|YȤRO;Z#w1ѣ͢7(DqorZU琘_+( @e I.DyY /۰C&\t }sT_ ۮr\[-- ds#0!JEDp0BcríR_K FUC|Aiu|QPB%RrH/s՚?`QQy) ) ٣>Н3]ki`78p0s+f"LR[/ %Rc0x`Lz:Y @C` a$\<5Lf Ϝd&r0{i-O)^i24Gi#d8$(JiZa^ ?2FWmaHZ^dVhQ%BԦq`2` AKnrX5ysPդ|uBeۚՀ(tTؒR`hՌa-*s5cņ.Dl;*T5Fr*8nT`NȆQ=6}GEv҄f9ߧεBZYBHh zQa_0L]Dp| #KȔzRxvB2LS3G1^v&j I3_UԷB`olow]-(Z͏q /E&i1qÅ򪳊dk37Ԓ@ۡDpdٶDʕLtsO{q  \3|>?]:TwU™[seWhH˓` ֲTb2moAEU"U-n]f-GHX;SZoWfCF~V'.CcōDmK #.'ڽmƆ'v B U,% {ƞ݊q}ZK$7 /~AXGVDv "$\ž~l8Y(@K\S;@eX *QH1u;vڮ ӄOsǠc~R.#9CC g0Ҹ5utƃ0M]WytALz56Lk,p5L;,a~YZJ3ц>k7?,'t;Ă~9>4]+Bk}PepV,mF= ]aVB=RަD<2[c$Z$_&c,o?^cPRC\c6n7طUr 0sxkU7B~n@DžqGז>ݯsjR"DfY\L25iSCO,m+0UjM$dDS>[dSE^cx/7՜FajXqLCƬjbN}ܔ| JJ6%6r/M#\b#pVl٨ͲXSBw$UmO -ś"KGJ.z]B)%3d˴d5ҳ(:ᆷ4 ӷ7QXC%x8S& g+WdhV MR\b;}( <G՘ pY2(E4G{/B[(5wazn QfPdV3ҜDpsqeg)WC\ʥ^Xb#FK#Ŕx@U:I܂E.Vyi7mUN}Gd|pQK/ON[Yd҅g-=YҐ:'e0@MKbSȠ=*xw;<%Q(t}_Lq XZu\9 wc4&nbu.#\'.G8ےukor-4]mZUv&u1F+p)ݸYtAqfbʃ˟:K0~"~8<sBY7]&%sJj*x|f+rtI.WaGvqNxT"];|ck^V1?{d" *?=t %$ӣmOKT+3Jxrtź"0h2|Ey':6N$z,uly4y-GaG H+ΥZN]-G6?6@ yC\:ȅꄧ=`VAXҀPy3 \įӜ@WL1N #C,($an Uc#~RheJ`6;mszgj νqTϯ{(ߡndz_ѓY:t+ϩQSm<Ɍ` ܹ·L!8f0tw8:=>74vh.}5YT/NFZ6/DL,1dXz$ȝ;xjZ|\#,Y^L(ltϊ!e`[$/혓WM[?ztM2=b "-Β~izx9)}h %LS]Sef6 Pa'dGv͓4i$EM#;F@ynuB|҈+>n2l U ( _<p.i=܀~^\G~9\7J7Vk8SK= ]-g'eG&.cھN)(c$ NӁd0tFQq2D%ĻA>2ӗ5QRcʊ"b].?dF?;i%ixΧe;| [mO'g nW~p p$Ք ]ʞ4؆ I7)xn<+*_4i2T9'1T˧,2sv~AY ؊M0;y25Gˇ2/skv](@0Bo\5Wc7H"U7 M'-o1f6Nv[]4cCmp.OxΎn<|͞;dRf/=N ŢtzHgō$ѣH(OggGeMa}"*%/<<9EoɋJc۸Z:KF6ﬕݔQAn)ݾ}rnseF̂ܣ"ў Bﱆ"ep:U%t/}E]D@C41Gw3/2=A@ nؽe#6s;'CcሕmK@kfƠ'o?B:EmO#Ouv̨/+[ @̑4bB-COt%fWKtb6.lo2 ԳT7Kt^4T!6 \EWC#״ZQHPdT1o[Ѵ̫cIܬe[pa VNrVj1 F*G\cyvCwԁxmY_w.3ػrsrΚ4ϣn3`tjCQ+;nɡQ@983 J|{ӗD4?G0«Ys0ҶC%'BӿE4a;UvhaʔM1ӌNH ! b#+ٷb5R9hi()&Ha+j}'J$?=2uB=IΖilڡmخ2=e҃o_KB[) p^/ Wsw5I,YŔEJwht}8B/&a9|92Vo9IF@6D9?P2s upXǵKZFK?YAnB-H*-1ۧZ/Z`(__ofC AGN]?ldUJ>1+&T_ɇ0QKka[. | DBüb0Z9ߤ;*n?BE|eWߘRN%>  Orm$rpKp]б!NB؈o>ppO>"^t<|PUv(pb'J8#@. GYr`GR]Vdj Uǟɾሢg6n=l ڞ+Ώ31;6c6xדݠ7N=nGÖaBrbx DaF~ 77`HZG*eQ9(rqX"CT-dvKs^L225{!(Ԋ{ȳBe~4FV 7y`y `.H^ Iv}u|l{'Yn=,p'^n sLuu+`i ^4֌Щ $`ܤ2*UCD̤d5+Zb^;#WNQQN 8&Vg;Se?+`a>2?' Lj;Vo=JuW汑Q $|oԎ/9B*⽈O.w?”F =<%V'RN;<\צ/ON@bb`(*.Ȫ jb{] ft4 HwB]r8]GܨjjkեaH\) k+θd`έwfgU+&>(^vAɥvz-}~Tf_!חb"9Ѳ>)\^J% H8Ep{]nG{1ʺ+ 9 qUoD52I {TM4w3PkAr6Tye(ubl.!rvFIN 1;x2%Jn8%]\t؋}<枚+tP.~FaðRd,E`P];VT¸ׇ9G1cV@Q|%`8dQ2r6i˪0#|gwd_sq8F)B h `բ0BcuZib$u$ x5׿v_GUl7p^g aazh5{tIvf1?_/cQ ;9 ue ! nS5?%M Hp?;۩Z <'2}r l,` ϣ zZEiLdlHC溌IHnWG!񨠭;{SkKzZc*&s;M' *ܚOij$.6VdA/ 'YnjBD ISgP AoT<ۇqhcF𐓈/-c} 6BV,z8 OR,e`EL1QO*E|e\: Ϩ o1MN{(<h_OS |RG\l[ s;fjzT} l >'eysg" [Ej8?b-6`Y >B63g$;4=lVَa]WO1]U/n #b0ŠTr\A3ccBoRe]u(d7HFlǟ ӵQ6-z$GiF䦈 Mj}0p3)OP#7h莙_Wd'h`rݿ2Z fR6ͽ8N&%BtLTR q{25J*(^g'96/!54gC"fA<#=lK5"'Qϫt4;SQ- fhgi^yRF}Pl_ӴQIKT:,$հO#)?Z+Y̔]i?(cq RWx?aE#Y`S.:o&5M su {9( B[x܅y4e}<oC{^O.q~źs.ֽѡ1 B(;ޢfBakkc陃m,O+hwYLȉ%Llf N¹,5]۫'ZcPD (TYq!zV&@(i+  s#x1+6YNz$JDIBWjůS*D?GDryg|#);9_Way xn"pbwn!eH:+F s99 9U0o0˲E5:ӆAr^`F7Nu a%eorq|Hy=h҇.rg;.gLɸ{w< h%UT!L_JTf:qbMnsʷй+C{' mZf vy!6)\xu JMV6 !٦= sE,r;-'LZd¬fk# %"QÐTJ.tŷRW2j;B\1ݔL8m&b AWO#CGJ݀Ny3$wԌ&r! SMy @'Igb8x!)5HJB-ZؼxbFOvu)i49pe!A3KIDA !YbpD̓A>G2n;KUOEOkt䚢y?W; G6(#fy`AkRHuWͭd*y}Ә/<%sܻ(b|a?t04jt}X)l"D4,u%dlSS>02'EJX8 + ]){4QP!BK$MJ1a9x)J86 ұd%z!'pcpZV扔_DntOYHݿĀ ^+szq:Q'[; u?G}pea9T;ra%/H-6b+3B vEJux4I( 77l`ȎUQ:kFȘ[[¾9]Y0oJi7 ?Nߋ0}\HTvqN0R3]>}wHK_ӺUYOˣTcte U8*Ku3YjzOU<`-Akyg,t!~eq;2vApE7]د:FVj>h]}j?zfelw]f Fmb$+'!qbR!-)BK*(8D⒊6 bO&zlћ*L%]oRS,x/Ĕ_ vd.y6}*gzy706M2vCx탅p:))m%?NNhZHSi&/S[m磃pCgdI ϋsL2+ VX!Ns TD[v|Lc6̻0Z'@͒jv! M391]u>5txD0&l8RZpB>CIeR`8QC<+!0" 4oan abnV a-WH|[էQ%;,(oF2N:uE!284]d+oR1 ȡm 3K/ Z_sƙ%7&|v{6-ҁfY%HA]ŝOFouv$;gOrhE$"e5J-cg2(jy#0kN><] -i[A閸w/gJ6FH}j<:FT9a3zOu82;ځ3;#閯2?*.{%†ΔaUK VtuD*-Vlf9. Z1 Ϙo{(&9Z5mYG3,@R*0"<Ƹ,)!Fa@Vq DZ9K3B2F6-Sޏ^HǞ^#?Șn NrDS~U7С,Bh)q`ǩfǞZO. )McqIЗ:h*l =#!!xw=8˔ (J- xԏt;i<;irϐKYl#PkG% iOsd'ѽN⤜ċmsa%y_N^6.D$veEa\]cI ^,ȇTGF״BV%SK56sWΥqdۼè7phra/?SB)=6:9+0yfdz쟮|6B?RH@€GkPXXoP\@yx^r+*K 9+Ðc^vȌ=&&U=ve 4j*PFތ EehXI:O-s U۠>;0뜬2*_CO|7kv;7mN|*jDOF=!!mT$ ABT>lMlFHj#;PSB9>;$#nKE6FXR.jj1fa#6dc&[əDr;Ji3 B;'2FK9xSkߔD6*dB\Q)L<lhsbbxw&)F #|D qFM*RҊ:U+lRCv h(RrWR#fSIG.UUh.axqnQ۱ X۲6PNbC|["!0 $P^39J\$ OT}2O=%LvCt;%vSL\Tb¨|;ڢC,Q>1 w;o\ † 㗖42ȓkCC!K@i# lX-:,4HRM:\_GpY?0ut4 $RPa1vcJJ M߫VԼ-޺e{IIZrv›P|a5Hu9 u;@]OG39Z%"\C=-s/:>c1nFf\9ݖBјf4B`%v jK>\G&Ul-W5 G3'GG#O*lnRU!q &O &>>0Y(waK~j M hji9 >:-QˉN@'!-uY$lFgs;\)MRf[C eTA U8mA#&Vg m52\~)` >CgIpv*o@pH"Uc#Sj Rw? /Й#)8VQHv=!wsWSgˤxVbr2A11PiLZ޻oܞ_g= rZlxmcO<79 fr7N %qeQ;GpiVo25 -9_OU\ȅtziD1,$ޤb6cjIS)xug~K^?WNӭ2 *_ ,+QvٰcVRU?r:^zW餼[@8ѷ&2U Hk3"a]_]0PVDqy*-5Mճ 6o$Gi6q5qC=5;E$ݾ#yƱ z/*aV0W=R'C`3cqB![Ng +nA7O&ʏavWzSjZ> ٻcP\C&Y<hHYoL n>ՉkD@8ik i8vbaa{šDa\Ol j.m=[h pHQBX뮿Qk>K" j;C d6jwN5 )pi_zW $ji"LScЂqw}IR^Mb0`2qYhIqMTX\rӯXtbÉ»T;uY/7$H1j ,^*Q*QZZ39l'$)x9=᳭p,z?S:j!v/^O!K@@4" ۦU[C?AP-[-;CHǀӥmu355a1U&Yd-XyA!C8r Az]K=ɡBț![OA'F\u61MJEmM ԍmd8KV6CޛTieNch" A_I==]>^4Ix>oy9Y[ʐ46nrq<% z`1&>Ana;0<,K [!j&O'%ھǤ&{Z(y彲/ZIa.WWW9=m1g&JC/@WHuRUO}k%P6:hų^t =H6:'=g'oTf=΀^$N|Oqps(ֺy5B qYF=eW3(ygz JV*XV0B09t%+Cm]Lw8_,sԄ*|o3,aU wq]\y} ɿeiY)nQrb|Zmp6x(^bdnQ&W6{ WO9=cʻՅ`"\J~ g'B1ϑ$H–擰S\'0 {n}pK` T:SZ^a%1n$!6GpS`s^XjM}t/A gCD2KE"y74ۧ@:Bq?Z=q&4ϑL s &P/mJ013Z\62;H$rGIH˿+9R퍁QKFIv3)CeJp[/_gdcdB4rPhy< 0OQ=DWߨ<DLiuo$Y|mGL<_m*[cFbw a'A64xw,f+{s_.H8Oy-_z8 p9xD\zI4ݡX}di=:1\B1p [K*v&@P'NU { c M ,IlER510:jWe4/dk7l*o6( ~:  +I ѬZ$E:ADQҍ:>ս ^\0M&S?x^"tSLLǨ8%e~*V!7](SbG2}C"`~uzjqE4xMCjm`KcE- rROfA#P5k bI_Mˠ Qdx krÑ%)E/lݾ+ub<&*#OPm:4j!h0aoʢUK@sV STު=--p fYkkHصBOk DO7,G1o?։S9<0+R\v?FJѣo A&o@?ct_Vї3K1=]Űed*i(gA'Dlwǃ[p`594L^NQ.2D뱕.5r]jeF tUVڍAw=kTЮ|Nxˉ?ذ\CӀS\zqXn62\0RXO*Rh/G-vT¬ ~nMOpa׀oNo#ɯpciT8P€v9v9%>p%=*k Mi.f]1Wy`&϶ɊmoAHs"7. F=H8fNTzAk[c6i=ЁhAE|g C݌}\qo#ȻF}(a~rY8=<~;Rx04st \)*uFl}zM=nZR*_acƭǂ#5ʞoK8<&+«Hy>4|~5!D.ԛ,(Ч */J2Wtv*lkLh3Ga/W$d&Zg{"ip m۝2433r!jNu;J]ECn*qҿӴUrJv{'m^Ãk$Mz#Fdz8?P']KGڦDsIfs@JLړ^MԙօQ8&gw'CzX>藍]U:\;~:Vnm?;0]tv1p#t /G$@Ezrb W0TugӅӽv._t?ijHLkicY~[]QJF@:#"L}}+DjqzVH@>Y}}E*'Er\GEƒ3q0/:Ҝ(hX 7bj'ϣRMxpyje}|4O/0A xƬjPUap$) h^xV+eh inM: "bg^ Fqе=i^w74s#\h}9S$!ku k&$ϮWYaNAOhtIO\0ȡgIݡ2kk|zdzIALZ۟{JߊL14[䇀k 8ԁR<#]v$ 3 c`4^[d~MvUo_nC׭M{bWm8C0JuQBm5'[ې ܞOkJXIɖhPTb1+5U_ ^UХ2QHj»d5+׵-󍡤8⢰/ZIY T:"=Ə3+Qy Kb{˽8nď2>]{ ^?W[ i-r HI/4 ezڌq1G,~6aNKA9ͯɴ힢hhkByRiգ5CѴ۷XQ i]=)A&?%-rWw-Y1q!MP_3I)Jf׿( ǽ%qU^-Tw_S. r-,E*2On*X&^ kĦoK@vM9!1-u1&*'&&R䨝AF8.*X;LyҙG1YրuV'Uɯ[ηX$6ŪgGZ8p'qMysRNAl8;ӎͤܕ؃+ugQnigL}ʫ2] &ð 2ZǖN7ijW))#ƕqȉ[<]H ^h|S0c4"NҖS:gи ̊c:߂& 0Z= ^/ rzI8f<wl!X%.ʃ~5pέR.b8-R$a`C~㊎'~RzǼ¤P5W4k$Rmas0Sq fv1B~=,~<0h˥.d[>egBo/]8z<aM*aJGw@2Dk~I_G;zbƒ;RCp#Nd9'+JqͬQtBkM6IXKFCSr%dm(j||{``[0U͇AHERf: ڵ m!i$VJƁ,MYh&\jɊ48빮iO%cma78,- JAM^7qg 3m[zCՎ 9XKÛpLs 9Vh mƆu~BV`K>44[:ȳє{DuaOMWLa EaJ[;'?Pu=h%zjaUP h]mNvrqg[1UZd!񰆷ޞ5`X_#NkyvjpGe25 k>%{75H6틼iuoxzjESuwThcb(ph]OOj8C(~"xƇ *`+~TG!"^-F0*<2 N]:-P̩,aJcP|Ad劺kfX?㍒+[p}e%(4wD%GJ5Y!9t7TmOB?TD62f X(Nb<]h<GL7\'wvBlYoRLGG^VpM^//n&/!含 H1Q3s-,*;^d%oK&fk4_QRDLfFK@5Ueݙ)J/Fdau"9! .Cç:lKhuhhqCx vTw[Zd4ӵsIl yX!Rw+0٧&л>" +9\ߙg;E-C4L sⲪudPL{LǍSG( cӼn`戨8$߽_:&(HW8:64z8Fb Joo){}s69ז#٩o];89T7D7}y,cuҾ4kn孱 }*M|jv2Ş;}ݣ^,(B%l ?D{\mnߧT{ˊLWp;+y8N$4qv+@^"JO ~ .i\_?BNBXj`JF)BU?<~!5Ʈ>U<^|1ypWʲIz \[(뉣 "xb{rqǶA$XuK''+ o㐏R%[c=hH~?>yi^81X9|0nݰX̨GAWF~@AV*lk܌fceEHuXZvQȷLztycl_])9e`^5Ţ[:Y\+D-Pv Mdh=AZ%1"(e$'$r#n) F(V4?CxRhi8qZ[4j4B(pNCp)ξTPpA,E!LH`2eVU4 hO0TEHQ4o77#$]%jջ 204g$WN(oJ:!a2ϊknT}B yǢ-jgU,Z'~zVϺ[yr:u1q&zp x|<"-}\/&7+z{IcnlfNa< rhXeqaj̄0TX#Oq(dI_LJ՞ErB8LĂs#]t/ ݀L{ +kfN73@SKȭJxЯ 55Wwc$'!ʘS}%R_":SNJ@JAGs[>K0fϧ7,bk( [b*ɃE<. LCu1!#$N]]Z=5DT_dPM+a}%WRRqD`ۄ 0_!G]~U-eƒ57|f2Ӿ25:a!`pYU@8hW)+fuܢrMhf:6H]~T]wj|LA2 ,^kv z)$tT;_tۆ6YW,^F r^ʣt|ZTX9֙whf#LMxcI:j5ѳU(I|_.ۻ%z*ic*"E&!z7N0|أz[u=x{'"̟>xKn;yXKW]Zߌ Fů8_)í$sW՜"(着L;^?})Ѻ ٩~7(Ef|ޮoJCJr"7% u_l4ƥd5j襁-΋u?rt%N)bޘ1U$S:%SN#A5qɞ -Ԗ\34!}˶Tv<JHQSQw,O@s%U78(K.*Kb.}sp:d   .FP6)>Hj@)n 2&GXvOyacpDH;KtoV^z˃oXn|׷|!8K˯C6toG*^S&^E.hMr\1 /D9 *\ F ,-b=D.|HW ~xhJQdc5 #9?+v{ k|W|ތ QApvɄC@X8z76mtXOj'!F3TxuX9/nF 5mE.?@䛶O(;RDKey-K2jvSe˰J#LOm5I3, cM1e" FQfI܆ہBBl0s2'#CsL8 ˃X6nW|쟅&)Fֵ]t {m}_}T? ~I?h>Iڸq/cT+ # Uj<[Wdi>>wB6-_Q~L.oH/aYTAXSgK0oVf" ʓ"Q$g s8*Y#, .T3iI2r?3)<~k<]H&j3dhX֏ۋU(.8Ut⻾j%̢m|y7[,|Jt>b*Yqt.u/JPC|\te NǟPrGcIgx =18z?ZןoZm4l<[\Ok] E*0 2a$ti[IģJSʬo7$t5nL gMO.vvhf_zȮBc(3fYm)Cy#7̯jh@*lGKvpu-}lsb*)T $n*`[zޛ<OЗ{o뒉.bJّyuAyZ#2,7|Z:©!ݙoW n5nLzE*fk |iL f1I^ %"qum#5'/5oR 8W%Qb)W%tŦ ;>ԇUp~_N 16Nm/H|.YdV. b':|; ˴=,ez)%6v3Ae,/Gq} n[F20?9Rvù 'Ӣz:}Z6,Peu@Hpm:rUd.oN_pP&!{K-lּx[Gg#R|oC;g|aCX%OCg ^DFc4rED Uo0}p1Z5+1U6a/"<8.Gf{ ~qxQ.[_d LVRXF* E]~?cCLZ#I3v)M JEn?hJ]Dh'wZT^QD@6pYiq >iNP4%4} $fHX1dDQ>˘4\סlU( iMj?1.w>4X6 k.4w TqjT4oxwR*=?^ nV,ͧ165t[]27f{-Π>&HJ~ dC?hO {a֝06K(~;`Rw7Tou 'fx>x ӥO-g(r1j @)5j6vI.r&/VC_V>J+~^cK/ I}Z.3nc(~ [0>2AfD/ЃcL0z\_Naia0$@ y#J  )\%54Sޖ~C{=R7Gh V1Ҷ2nY"Q e')ESR}2ag_{?3 Vfeq (YHTex7 %O{-k <?_DŽ,r,(b5bڶv}aED7C.ng+ae֬3G85,? y4|*, NȘj+*"1؆5^&ēPΐy S}K,/I84\ y|CF;/Psl@#.0[;1 7-ZaZ$,b={77[So:WSjPN n/ܙW;U^^ۘ 55%Qy=5ɷ7coqx賜t¥4[y8CV}+uQEALUzFGd]Usl/ r|lqL?e5D>$He 쓿[JA^1VSR} _!) A;il B>?c*sR"t-5-/?-x D -fN1q7z[%}fX/}^P@8ؗ?7PMp&0Knu"rfW2I33#5xbbI>͞.vZ45X^|z? kmA.yhv)4U?je p)Ҿ_*:vDZ `CSl]7#96_c@?l>O/PVTpY~56< N: TAS s瞊2B6+\}ڭ`'1;n%?D%@ с6X8'14(R{G#SݮrF̦V|b> ٵ@: "&ԡi[*l2wsQ(H,6hM~&Z\oBoip pga K {cN76-a]R CcP,KBSdP@S_pND= ΏUQ~c2:fΗ ڲP1j[`?69p88Gq8' hR˫(CT sCmveEISϩ^Eba=T Q|᛽ 2Ȟ{ٌ{ѳWec:!58iu!+k@ߌ_d~;:jn/]\]3 ']bUO`]BN Hܚ4FH걘)0*]1ɪFZ3+TwuL`{eDŽ|>}ⴱ(0]F}2~j}Cmp`6xaY?]nX5rd֔`GA]|qϚ"6R zנq4Z˦qV{Aea!,eYN%T|m K4&t64 >S?lM)'F@X"R9`RZz~C8xxH9KFKSk4E;ʌAԍdٷDAi*J6 (i?;T$fFJ?iʚ: ->gx\}|f\}5kgR5K9Y80Hl-8\asC[\;:,U0jA J.e[ i&p_)߰{A"؇k%D=ʅDx/2 c}_Z*~jST *|\! ܫ! bĊ;WںuVg0BJK3WƸs#C#|#QL`J^="l9ĔR}IӰ_)CŖũüdf'+'"Ƅ1?)`x;`vCO확#b?!utՅ^FwpvˆtAow(Hf́?I0bey*,# 9?yQ\JWӛ`9 i<8t`juѐE |_= &+o١*hdvi}mgOZ$k:!NSBʩMdRW`*jmTfz˵0|0,crT⢣]ȹ%_ε:{Ztd)$B;ZENAVhtl9!Ե416Li MPRGgGn ,! k.^!\Z}?l~W[M^Ddp#U;/=BR&_~0;{ a!I FHXBNyBtkK ?^9ۮ*yAQf˞l҇=oŏ|&;?FU@mv[fcMwGzP= c^>7~ V3 Wؽ$:NޝL{p X~r"󖏎S~V5j=1y#ȻFRgz؎$*ै5*6}WR*F#+XgLĐרյ~l [;5,~䡀9Dlr'|V{R>stT-j[U&=h#5ΥWkGZg_I;]`Ter\')Egr2{+mÆ&YA11 e %cCgo1>7n䬣 829u`34lN}a,]ڶQj%gHlIJ0bCGٰiW Zт /H:%ʠ ~:@A/]ir}$a{3yE Hލ"H vX~qLCfTr [F.[ǖŰM '̧XZaٴOΪXQJ%3Ɠp={iTLI[A`;ϔ8kP\~ '7hobQ/8-'zdcKGt}9 -ܼSǴjr,)O-ؽ0pnpp 4FBgD,"aޙP:3rB@3j6Ռ-}R! `_][s7YiCDDb36i:JccRwD1]g]9z7 }Ĺx2v9FזXh:J:.tb(ί0XƤ?fc5*V ؾ EߑmRC-$b;` }%W3e>w v'ʐ-Ra^ #V͊CwNd,㿶̡eb‹wEL2ٕ퍗7U\sRa$OtXV|XĶ'J?Y\u gQ .HFv(*T.+Tܝ17v%fO%F1_dii;=TE\3}mjk: xS Z`@ܒ>p\(ulqU4]~Jy6 W0 4G tuO WS$T gzj%фBw=o/Wdj]YA[C_Oi! .!:KL$ ټK|qɶp# ˓eVBHc%|,Ӆ_a=QdI ~x&~?NC@4Wy-Ah,6vÄda 0sqYo._a3|98~o{[^OB)78G/&310W~&  I^rDZ-d&|-}50|9gtMPpU=w첿F4-oybמIfq1E=#TqJZVtPwyL+~B/d۪[dk|\Қm9+ F/{ğU} p8j lqO~c-im9]5ѲHhTrcʚ/* A:rW  }>BV%UaZ#1"4Jwn| BHz_s;-yhk~0~o&\7cd h!ZU 5.ak)&;wgN86(2MaQ%ۡcv4EY 'gG X}*Nui&Qy-3zohYͺl_ȸyZB k504]ovᏤ!W6%]KQ 6Bmq%*@b0]r9ɭ[e siϐnFK ( ÛSW:ɍthBg bE, Yp<,\ hՖ-|_C!c/˔y`H\F3ءG){' F/P^|1ٵW$)~(+wuWDRMk{Q"7'aVOBPL90U*!FJ<^s̞I%\[pIj ! T/%<5 4K4I HBE0?n!h{H8Y钚nOlȜf/Mx*:#ԁ4ՀbP<ݥg3|C? athB^L}QxPÓ1 L'nKׅvG~A jzԊ%"zaA e63Y%,K %G2X%69.z%Xzm~59ګ[AۓjvܙJICIhi^E1;R=MH|˸! )+t3+_yk${@F*1 [:ǚ-W~cD&/I.hzrw?,@,)OIHIiu7 ͭR?jL߀Sj¬zִIum\ӑeWovǮ$EOOBMnhhl> $R:]8ߣ;MˌNt6-fX]YXVw$[ I5vs"fqra:Ҭy&77!'gNד" h-74q;e݀-".ze˱s)oXvۥrl0%#u^z5o ?w6RW*ߦ[ z+e05XԓDj\1O؜SJ@) z 0)Y'l\>]6\yY`ĭYRî!tJo->r OEL/cP;$22٤j{R ɚpeOk oQ1вva8u(T|:4s[ۛ@Yq%/ "+D%R<?DNgqN V?q>E*zv`ڿ`^۸z⎿@ij:{+<0VGXό$ю6;Z JeB%mvlz:;C[F߇ z@qO\q0F]dS[}-%p-w]P Oq,!b˸ `#gަ23ZSܯVv]m[J!N 1Yȑ[ad(C%ѬV@_I8RUH8! 6"ֹ>xNj~T{؄c XOF2F)A5+V(\C1@('27Ha(~j?iV' Хw=jIѕCV|\kkl0tub/\E{ %f) Zxs52;MN՝m>15$HFM9';lHsŶ&gy]Zf,]H"-NwőZ ;i@>偠+깅TI|[3,tj%)>[S {$`SB 3ȓ2O2I`s$蘘I_Rl'qJvBŐ(;^^fX=gR+ 3/k{Xm7re5,v?_RyƄY%PHu(VvM+'GnE++>XtSVҳ1h@怶NΠu+7;fa:.qbƣ졑9ƽ PA:g+Y{d7a-1.HP=|n_֝]DBwk_ _+E-[M mDXX[T2iƜǕa՘_ QX*Kn\¾{=7u;ʈ9)Slz-dw/Wyή_6e]`LTaxśps2pчsii5 I;z1]j12£z"zD6Ǹ*x\v&[J&~_V,wQWzUzDGv7nKEvG AzDR"BF(wE>މQV,ZxTFs @ILeU#f "*EH.e"r⥁*!-}DJcd8}RI: ~ zu \44 W>|47НatT_J4+)VZ͂+ ꝗ.6@_0B*d݄]K'0ѻwa%MDʸ&Ud!ZiSD)72.^cx#(C OaXi<~NsZ IsZ lbʏ=>ҼT6Q|wV)#KW趿+/IRa;o [!̄+Up.u]$ic S]:9h3WYy-BLt,\-6m"”eWY0rH1B9Rf\a`c!s* d19OECZ-]5=:(wV-2Tn'(Vyo 8 WD K,ѮE #*x+v* 1){KG q_Ʉm=%@gP$~FI"d6XI@O }]_x~s>RΡ5 a1bSqvIRL1S)icȈۙ fT㓚U4GrߍHpׇDncwlm`U!\#GSI´OODfoMbSW%F .+:AbY 27# Gw!U̖!dK!θzBHnUܟh<^J>T.+2JpsKNQ'8:~`elǔ& m&ޖ ;8/)#Im[;{ <yTm4"J~/!;ZE6V>&x-H+̵ zdl2^VyD`;pils]N\Y߀x1h#U\q\x' M^xz+ol\qw8&y5L~նV-n9J;E0UiԢZC+^#l&go? ݢ-Xl* F\Ժk=7U$}F?\;E''SYSo"{C |Z8V;2xg9vY$Or=o![ʡTEPS7dT;1 -z]Q>˽ݚeqd"Y[JIԉmG\ K8ͶRYE ?[jDP/5=Dw*9TJdT~ H~nn4TgNmZ"i}ts\#+kD#`VhtH,IT "Wxt tYꍴ'q)@8 C@m[޾82k 8*z#$xXnK%}` &G s_g;tޢcӹ{'th@'n6ʞ[/2ԂULЈ{n_o HnGA sԯF {n4-ȇZRoVш%O}[`w.=BZ {# 1fb "0UTW?~~$4IZGT{fi0,tc"t1kɔ\?}H9h{x )֞<P-yE N[;êmasgۇLvX#kQUG-CKZi@qW;/j,&14mrldeFp%HV T+ +x;>g w4u\;"FvBv>ϱݫř\R|ayTrn=""3 {ȶE#e ^n0uӪ4YB?:=W Z` |PUT8Qӗhgޱ 믻gU`0KP|1jS,3Js,y\yld FeZ;PEQW">3m^)?KNn (hDs VlAE`'6(.jSPlG0TFx=2*(Ya3.@csqT;xW^tɽ>a]NgYJ 'FPm0?9`ذyv$TɈu% b*ZWsӍGsW/X4sz6t2h@wEȼF+%\[ǭsϸMGS~ǃTcW6jq+ RN~̋O{&}jWnYs("A~ff" z;+Jً;wL%BL$\e$:=} oiWVd<"a_[{4[>TgB5L$ۇacߒ\Iq L2}D!Մdzjq-sXC.Y&c5NdG/=nH) ۷i8myL)SQB_qyaD)\jZ.y-4g5L:ᬟIJye1dXw.>דw¼ n~Uo^Obo[}~),ؚ2Y 2LlsC3 h7ۭK.xá܈~ZuG#(eI:02OW. W 7Ԋ>UN<8o&w!\6INzTo%12LIĮgP@=Bl-fV*)t}HK%Ok[zQu3"pR$z%ft ;l|A: IpmTvz htFo}oDs#r1`ke;n+9Bi}KGS=\.xIMKBl8dӟęZ3:xWdngvے!ExrԂyA6ӉwPI e;A6z!|w[RKfŧvG};*]`h#&l#Ο+2ʞ;G Rj3E`QbW85tRjJiLyiZp"RiPlWLzUU`2286"V;9WG ~`|W,e˒@4B1Vo%VGLTf;ǁ"r=e*s9J$ o@e뛨RaꈄZ%90uHʧW"&[ XFG6}|/FH4B t`O@F1p pG?Dxa@Uo]$Ӷq(wAZ]k 처N9yPF%[Sӆfa/mXH)@,fIٞh/Ty~]P彀喢L&NzNʪ-N 4A[׼;^K^.Y6QdtTZ BNK$OW|"uQ*h: #G& f<ՓDŽuTkL{w8b<ѤsbTkq,Цqfz{>it{nٯT[L=|EOÜX ر>9(_o惍j<pqoc860-! /MD`"-]E?`Hr yjRأA;)L!S%c~ci-/"g+OZln+D[9vωdl2pɷub8L螛~9a2T/7O(.v 'fUG[ZCBϺO4X噷DŦ'~U 7!`9˟(_Ժ{0)?`BRXXUX.^zw(:b>5yq~:ඓ1/ j9*lY |{~D}"p+y9c&]bA\@v9YV, kn&]oаşJdGn;c6?2`xDm}5򋼼iK^njVҖc N2b@IɢEjDIhxpv{] D mkƔw>m=?\^R\uDZ˚}][aPH)̷i!c3JDa7$kR t7RMzE.r;KjO3lN2 0VnQJw2`·gշ&M#5F7Y~50}a`YS=g(ӿO񴜈YGQq(1L#ן*çJIzǪs]"tfJn\tZG6~]d=X[ @ fxe+J_rD(qt]QWbV*`+*5!x!H SMabR.2$¾0BEx ni^9Ot5,P 2#;:LhqSnhuoqS# S9VwO̥ʇ S&\A _]{n7vᦡ%or/j"^ 1O݂B|X$ʨ1YWJz!4ozؓ%1+7ġs׮ $0:Tl9gEI#"Om8c s="GH/`^mZ g3 Lgm1JnB 7Y'˦n\'n %e!}io4F~y1N QZ՝9w~6cMuDG}m\^dϿ֣90pf`%y6R74Dnm˽pp|jDݖHǂ( \D?+\Z{6E.߬T)6N̖~Ok4tTbױ=ga@`5]S-$\gl'Q#ƑBi~ ֠VW*TG >Pk+PsM-3eN}[up"4ya.w87ݣG*т*/i_iMh.NNUS2PBmգq/-B<::k<*Z(3%+lqE@WB!mp(pI5'^#x(I*2pcZva#˂}{*h΅{ ~ 2A1.OAV>8/rZOQ[\n2۽u~j\NFrn,'RF)dP a!<.+N6K>DG˯KB#ʗ&g?RHa]z4 [,N?C1ItX|]j:wPݦ>g!*n#,PY@_>b>b0.e+tS cr[#渙InF{U_ۯIH g}mFbjf~[_oopX:d# L+&?2i[Va/CSh"iooh0r{HC6@쐭Y)U0|ӈ^3*im3pD#m , +,&oy܇һ}$=&L K~| _$i:- &ˡ{$fJMmL;?); ]UWP T| $*X2m^T=iM/-6Ƒj_62 -¼}1uG3E1*̮+ %@H?l0&we'.|nƪۡJ[8G~k>JX?GΡ QȦ B+mX$BZ-c׍aCϵ8y0{|?H@|j`1ؽ#\xͿ4y r~b.K?oߴ50L6=| Z䰏ڴxd8љt f[= :K2]nNU T$Dw]y4uCE`^ G7۰.lx WUð$ɊWlڻiz`rw>:{Pb1iԁjyH>!95هWpL}P#!Ov,{K#SЪiGp:IsTbUCife)|  DŽ0G;/IvO|3PhSCNlUG (_gjgbV#17zf5)?_^Eʵ.]ep#W*"-)3n (3E\lA\4FDX"&ttjY om5bLُx=HBJKEq2$/.%JY[>5V(3sKx͆wQ2:›CfRnuuk-ten0[1NYy9Hwe^% CI"U*mL]L]m4 8ȟLCJ9I,$ ~6f̟Aƛpo &m> m $V'CJXC\*k *M{x{bӎi`9022(jŰZiþGr%Yz؃ʲ* ҒlU;<-29G¯`.Ef^ľ-P0wC\G# vy$%>Ƶl`kxK'$i3uN $R#JuE6CS Buz0 s.vQ!^R׋qXhLz&ťRԃ-$hcI' , ?X)TaKpxjğMn6#=&D틂!4FaBLΪp+dY~K@뻔GXMps8dpb+Bc>xP[OWXKoӄq PPې^$ I\}w;U0Ҥ<I AOl|ӓWfX`Z} {NyW'UᏚFic4YO0Ich7z 7r)1ٳEiM@c;PXt?Btg;JX@oGTy,)^~#w2wAHB1QHG^yuA/O;$ > %tb7],HZ0@\ tҍXk7DRh%η97'|UZ:<>zAyo(a#Q:%m TMSeOXnJ<="O+p•@ G҅xM 6}JS/`|EkM!5 2!j`l2|˓ú0# &BʤJ,wАg*oWU zk6x_>*cx N/^N H./͊☜:~%F82 KTp8r*8U,f c,ʁ"5ox 󱍤9\l^Z&<@+v|ojY}].u쑗`)nʜIhJ?YTmhż~%Cp<=+)}geLِUQ&y:>^AO{;] _Ri$aDҢEVѶ# + XKs!hBx::ӨqƓ3y4a}}kqlQ\v9h{BبkxB`s &_Fi;qPIDDP; Kq@XpKUy捠 evP"<}K)>jr5plYZ`o)&%4A ѠGKv 78a}W3$*Ptr;'gӗ>)y S>fahg$UA#q3--Bo/ 'W#^*!MCu9jv^NGr;MC!pk}v}r"ƆO L;W"3"ɩOݹႳa5ͻ2 q<Y WdLZ–0WcP(%.}.bjMӫz|tj qgRev\wd#,UQy,NFÇvd>qgV5󷗥}ҋ"q% "PQ:pOuF4^Cd1du$pK!NߐoVd5#4NzExn[%^0^Y+in Z\5gp3WMw^ g݀a48VdKx׈Yܠ76^4n(*;]en=Y530*GX=롉l7 Ӌknhۅ55LF3,՛*4aSNT3?4Q.#Vա}?P)y7*eȹD^B3zMY*Ԑ3B۰6ikŽie|Ҿ~҄sH`TbIE-(Zq~DC jSJg~½nVlB7+ъa}!bsqQCWQQ!)t_7pGu'sTneD3U=&.+dZ&[/萾 " h(F.m}C~M\b/3.Jm\ 8]q 0DݨnK{aY&] Ͱw']dBD:uڮ{Ber!M7r.' ws/;ssAo8$u{Oh踤mpR vx)i(  >m1+9v&lB`@ZnBU/e>"̠#L+.s]c[V1X6w4tnJ&ztiɶ"Uj,\q5T+mwV4ZOj~`x3j%lʠ[ z愉x.P˴ܰ׫d܇o6a!vMYJ!Ѥԝr/I5걂3VdaaVֳse"68gv!Du|~ymCcG{s N1]IG>*:hF4WPTpڗRXҵQDM33uI'V d*JC&KD,lP6,Վe zDLJx^+F"  bZ\o Ȳlc!u~hvz|+˟en_ mIÄ]ci@.)9_~uwDIes|k#JB˙pdѵɆtz:4湻gI+Alge^Q7nDihv&=aV}@lw<9#?dK0=t+koԬGx":K,$ sx i延|]F>܃ bmߗT 8Kkc$q@KΠ^D 8xO!jv.)sE `dj9X5ANC)\Y_ڰ^;G^t"J#.`$tDyYu}86sPu1qoR°UL2._Ĉ,3LG@y~hL'FTNQQ,[ȑEkx9XiЬK*k{H)l)J aL#jvtxXy"!4/B Y ཝ;w|f-`cj*Jaўn+L&z,uhAx Nj_WGʲժA=|EݬV|ۜ wb.oeJQZ _uMIn8ayS YA/tiWdK_#KB ovT ܅tΗ Ovl?d1=@%*l I="1`Ptc_u򄅺EHc=SWƟ^:rS'AcQiF . L\oRLǨ".»FVO4iv_iҢ )Tߖb7Y][yZs^ĩФ7Ü֔ FDgw $4dJx&\K2j} n;y}AӳL߇o 4j)N MU~}7K5!/:T=VMyznCBl+e00nt0֝+#MC^ 䳕{7K8ptT?CuIs녈:͇v@MAH "ezN{%[['MS*}TafF@ĕ2HɄDi9otV@PtHޣQ "́ym6i$ǶoD9kPDAݩapNMY$öyv|%'2ފ7Vˑe:Vu&m͖ rdIGz(6"oG,|adҔ*=:ʕTN i5,w' a3-><ဪ6}@cB1#5hoei=PR<8 H-]"AvlV$t|?~-5dA9ɜ O Cc,2޷?/(LwF )9+QH#EWA;lj*i鳬1X }x%bޜ!j4:Ҹ.Ԥ=da-PHd1M'w=ɚHOa+@}ayYucRͤjnǧ![7Jja!*.KoqzAj?ZW@gE7 0|R'bQSUPVmzaĢw@ :tY\|~ᄘL%ʦj%^O"9ҍE#o)Px2Y^Л bXL%,-i)c'gKCYo <5 g3,r&@=+/;%mg}A ;] K9~<=nˮc~}ZVh} C֋~^:MG`ab$$.GADAB'VJԣe &/ [hP=ܗn}Z<0G`1ÖiDtquNaa"(PB򼛴w{jclŹM\O{e Dhcr&RqROB[;Z!Hc犵 N3V1E[&K 4um.HK|TVoxr5)P<,-йMXA}V̖`d&eBAI zҮuYxNq7V^vSowJCޥ:Ŀޡu:DM y1GM{ >$$OaL *IGG1ANk@2z,Ϣ.9 l mp.D`~.j,?ʬ[HW>O3ajaY.>|ϳw+>TِXxvl1磝̽dc[r㫶7"CYy_MŶ-XS8G+ Qe^J}nS×wGm50%( !؀g`; u251c)2"$ŶQ*7ۦrr0HTH yQ" ?SZҵP lAIDcGĉ\Cg?+C!>Ê#>tu'-lo{ts&?BV1ԍ?MA#C} ˑ~ENy^pcJIu 16lX#l4 i8Xr^xē^Sٸ$>2*FJS 39T馼.sem g@@W5'f6+`hA9.w1VR}nu5Nj(MWdVpuLZaXy/jqՊ50piscVt CF3QL}T}DaN k\+B ި; ^ΪlUĺ,Xأ1+944k9ղrJpMg_+hs2Fl)Wcx5a?JˠJdDS)\HFJ>\*7L~[ބ'كNJ4Y~5UP)~Wn92p9_RxT~4q+jmqlacɣh a)Hy:w,҃OA=?._?-''m9@ 9Zl.jߖӝv.\hvwheW?̕_UH%xO5W,xÇZ9-@LGWur@^![`܏`I b! ^ -uݥ[ }"r{zt4pfj(ưs1(kUqOM?bB6>C@ZԔ7ǻ)HaL;f/6~=|(M&4yMU~P@i]S-b">S]DH1ZU/>s5[H׳}.[c$X&A~ xCeLcѠ< s!%e6^㼬iC` wfr=x#,ڒ 2H3[̬[ff@KT'ɁM7uެg]ZI4K=#ZxGTӑԥ|jB^⳸V<.04 '-)3@o{OG$kGVŃ#TQ]qX A2P5!U  Ќh3qЌuHgW,OP8QZםk"D3O_G,oN,]o۠wTX_",i`HK yuɪ HPSiabs:7 #rVQ\'W(V>s D֧ܳ)>Sхz1L|3Sl\٩XLeQwlҰ/x$xtyen'R0ȁv|4Ϲ|eR M8GllU^}eK\ Y wTYAr\p }Ҝ` J(~?gtua0taJ*몦**H1l% Nd:ň qᵖ^A^w\ȁ 4گQZccV /@$^nW˜P(g{Ch NɒC-7`È7t)TS$HTڌаصJ<#,HGumɜ0v x@DNjbR:@z;>bPp&jťxwIYT|R z39*'_& K91[?9]>1)X'Ӫc'[+oRZwJf+=$s[]R/nY5m>Xʧ7xTW" czrc {vPʒj+^=<{ O"zQT`DڢόAh$ԝlD c"|{6, bCD$<٣xM[=n z 4EPʺQv}(rXEDR򻋮Zbhh*(ʹG# $Hg nDitfoIkf\ GYꔆ;f`b]3i˓L~sRaGD/ T:p,Th(s+Q h6boi?뺇 Pҩ"IE^9LGn"TkSc(pjS=-r7tc*[2ܜa^<7E ~tJ+I5|8̊sl=V+6C_k#DM0>Jt0JKu8c3Οgєtg vEpyf vb~C/a9ze & NM-gx])"6Fm.ꏪ(H,2c&6BxO!-$=95?dDžeu ZW3 B6XLN$+=x8j13XLjӡvJp$Q NjgE-Q$woK妕Y·YYW) H노2F֟B;Fd(:(>rp-ۺedc6ѹ8 @\s|L )Tt>8rfD-mSE1l/_?Vp`Rknjrs Rl(.-(θ ,: $z qt29#SVݘR#Um)/椿R72R(.fI=0FA>9NC]&DY* A~|*:_Czͱ4[   N{[z*cXliqy1 ٱw]z1bndtM@jA2ŇEPɆOJCl<8; -YR`1ͱuJya23qrdvO] ͓$jRJ/_.h}O$J"]/'<Ǟ"е*cuB_VTB (HtV#%e@,0ZT/ ӆyZ .| U2Fkg¶ɓbrI`&h~gGo6pk$h0A]14iQVL6Q3Ֆ}N9e7-_; g b<^ M"(:0Yj<3]B/}NpȆDXփO Fw`q0? QAY A澆[_hhLELv DWE M@ =RXK209Nz8Mw'8Gش\>Pޗ H:h0(_( }T{2.U8L-ʤEQuL ͤѪ6Q7΀bmySo_IQR Ei{edaB~|'d1W4 dt5ƍ,2mj璙?8DdIGEgFJp?V}7ýJ.$3.2c`**Կt@_Q.,s<xbwX-2f \єC9$ٵ:WfQ%wXS$Mg--nvͺ<x-}䉍M5L=p.!ڳIzdmLIʫp ^ C NS/+ id0yueV&S)Eqq,17`G yG-L#%&LlA-E SԗpoS|PF˜E#%ڄ] XGPT{\>0NYj)y&p!%||$C}6lZǴB~7v g|SuJH%0l~:-<E Xm)P+I%#\Hڕs?z2q{ZqN|n9qdWxa$\/I՘)e6؞%1g]bx#!H0TG[UYWɃE,JGgHC\m/PxVPRC!ֽ9uˆm[[zV)NqE?C){BV򯪠Vu,*F)2r{@3~pNWI~+a?{kh` aS/?veǟv6h{l]!BmwPL_yvPTF(djXR{G [vIBXooAn6f٦cbNTb5)3 }PN[i8J"}%1!x?7ߒ /WjWLưhvF͈6>v0Cnmjk,˸MbdtS nqqY[bj{'_/E@?PF /:ebf%1b7 A-hniXz֘Hs\]곥 L0#0yUvEp+]y3269dmIغxV1!OO/>Jm_֧\Pț%IXSTJ+e]*iN[ +8ٸT6vn4 jB۽[z^x#g]2qb톑xr4QXՈІ>d݆°L|S0F>1p8 f /,!vh=5DV!; L%^م‰I5{,@O`;[)? C*QL!{IAI"f4,ohAJ:bnsy2W=ԃQ, #cmmۜYd .8)KJ˾/0p.P-? 1zj!ԙ:Puw4,\ZͬI7-kq;fH2gɤj/;B<F/nQx7$O9n8سՃ2;~fƤE4 IG\a| =,ly{j^3XQ(}֯Ѫ*? G>aG ɋi_gCM']*zLI 7AbK=]&y-7d ^No6SХqvu ڲlH3Ph4ߩ9v ~حCbK㮥tTNu5g[EV(2$c*m65PEFӛaj`sGc:kw ' 2J15RXG\>)v cuwKhw'HV;0> }})\p!A5̠Zb9É@ǭoT=A.,h_&ZP*,ɵIȥͨU)wo;mU̽,/;jf< qn3+2ENvߎuAzJ|x\M#Jz#]g#qިb[# rTsG5Θv*pg>|kEC:Yd(QM/l=U3Xv*DEa"NLlUlΚ eMJ8GK81z*8a|z> 'lP枦_~=n<m󦨎P NZGELóKPF=WgU+hc V X(ە6bwܞ!CP;:RIdpMk 2 "@uP`4v[.Bb"繥"N\oF7> EuN8` B m\Lɵ"#D?љlM<[%%Ë-i#Ȣ)Efw?x.ՎprT+e0s-\zNP^t-+ް| 䅙VjS0gm ʵwyܘGo o|F֥tG>tftv~o;7Gr-^U1ATkN%+,43W?cDˆyǗ֘sL n$J";DdT^FG{)enHu+^X "Ƿ|ӝ>~wvn`T - ܐtp6wոUGҮZ K;|وNf^"}mOeѲl!5zM&&=_V>+xyfkwh",WCםmaUbU .O*P-׉&;F!5 :9EWd'E)ҩ)}cQN^1mhEy1'0z!X 3\#7w$N/̄-N5g &__ƏZ#˄Ģ7%,w43\ZcH#d{us |3 pO$^.cT6 RAn<$͉Tŵcusf:| &Z '{!Х䢛X$0ﻷ{T;D2}7d{-BVVh+aqL{~$"dJc.'ՠQuK5rf~54==}c`+G/ 6 02'R~wPGN+Kavr`s{@n.1!,y72 R(n(Р=jӺ1 ‚Us64_,h5OPzdlC*M~>򕟨Y#-]|&samobX'Z\0!)2ӆԉKzT:( ́1l9:;Kn>X7 uM"PS[&j,qKn4Vk(q?93l}u~Ge :&+=t^CNs }ʏ: :"~.Xvͳ>P!D3IJGZO] pኵeV'Rkp;$'1K;_a0FqOr㓴 ryZ6JXh].ɓ2o8{ _>|Ψ t(r{ z!lޓPrNI(I);n#&w^~izARt$Bf_!5m'!/)ͻ ^>"rrLWe S#Wǐ'W<̭ ҤGF*UAn`òN Pup[="uV4 .;Rc r=~ dҚlʐi|q~s5w ~JvN=B&JŖwQ&VlSG ߛ<4+mB:Or7YlaeBo]7Duң|y$3kR9NM8Tdݨd՚_{l;wRW*Y ,i^ĂܠU]D•yZnIl11eZ; ]6ptзsJRh{j<TrĢ0t0Q)s,=_? W\p3{bC} fʤ? y@tB[ >c5)x([ ]HiߦW]nf@2;7Wa_.a~S`@9vo;&Ju|pǘ=*pY2`MGKnk `NC/-gW.VEC!s`g괩$izNj ]Ŗs){-Z5oV_("2zF6Ԅ rGS90T2+l_ZmRiscN5EPPyCsviʝI/Q$wĊc,.(6>emt}"<JgJw(! O.1pcNOP#Yr0RXrkׂD?ҳFJ.tJ(\B3'%+#$n kjc0TG̐{ uwe"ue~Fu/JyYQd׹ՂI5׽eo)Pfq w0 dH׬ Y](U nRh4Wk0sc:A Z5Ujtߟ4Ӑ4a)C^`&lC\J>@^vZ>T6X)XW-hW 0f1ts*rW!?3WdHZ!w]毐x 96F3dY'9jlw  r4Cǹc>G"SV*J1{\_C-ڵ^K%H#W`<0$zVT<-X;7Vx6.*j2F⚘qb|XqG= 5mN$8l+SN@I.e'ES$U=rQ"j=k6p,=`Z|b>gJ(7^&AVȟ!<0MOd0u茐d޸$+ѫL\3?@5 jtyGnMH~iIkMz"ŃL2_۱]Rom⟆ [IV+NfX3oYhn0|7XiY&8PkNsw9|#@hwù>|q'kN<X"U@m- ⓼ ^fP0׈yԪ:I-%ܽ{37uxiOl!o,g`s-n %RA\ E߭r'W_K ۫F$Dos'׃hsK.挹ڌ h@j.]| .soN_+8¬`Cl%(lfolҒMגLʶ|+~߫~ qdnl0m (5;I86NU{*h&1~IXj(0f"ZV(HZ7!\M nߌ@ύԽ쓩!w )TcDC)W{ _; 6Z d|a8{yոSJ"f>D/IJ>Q`&pn|6\V~}?.ϵpx+>5 \JhX'F<\Kb_cnpGξ7FQтn^.ύurC9"Mt8/*Rq"31hb_.b{}Eh#zj6ŏ3UjIL{x\5dĮw>UeyМ~ޯ+%  X|DF~ox5:72W]JaI1'psYTLZ(r~]x 9~='Zu8Kd?U!ts9ԾPX! GXu@ot_y"Gd=D+;>O1 :%ma!+uwTل PiI{ooSud &լ]Қ񥙖shK|韤k0lwXlS N~m6hIKDApr WAj{*'N,l!2I=TiH?Etz*`eF%Sf%(_~~jCs(m+^c3 ّ?n3BfFh#q<l_Oa "dlppwI } cv||A@*3lթv|}&%֭HWq-BMyWa&Y4ζ#1^o{_xhkL0b/"ņD`h΄ ֳqm6p>Ef&;QgD'uQSS@7h$ C`aJ`eKN@]YAr`$5/9|̛b>r`od4@_['NEv\<jɝ%JʜDLJqMAwc'4^,RyX| /J![TiMr! 5.閂*[H ng iZw]ma3CNRCB?uMx֤* +BVڳ`='%R)Ueo,4@kǜ#u{>-cNF7_%;Vz:"vW/45tɸxʇ)]I3YH91RNjмܑCߟ*%U| 97x+9(ft=Š<߽@q|Qp+aKeG[b5d=nWO<4q0ڪVWeXxĊHm2c3#D\>}~?sa_e+r7l" |ib]D,ld*N2ϠEeJwc3srBۧt Ja L;Tzϟ@ܧ_ *%O ܟىR$Y>?yIf#vIkU֠omUP:V~apQs]LP{b9ήM\-X/!mEdr8gh妷j'mnOLp^hxxv\Vh! .Yz=e G#U0]$dz 4r׌~7£ 9䟷q쑳-l}LF!uժPY\FRF`j-$!&u%e&ysyu:LinJυ-ʽˀ+ۚ홒!MyO%̽OG(`^WV~Gq3)Pƕ1mG"e˂6oaե@JڐAQ(MknD Wz/o 7j]%a܆],=h%\ \. Y/C:BRV,2ap4x{l\q~tt;<|ƻXSr2OV@_?H?N<̆5+&GWY nUx%v=H iMfVUr33k4XK q:tEg|5Sq4C`pƧTUT ᑇ!˔!J| #0KYYYFwMԢ15`Tbg'ۧ+]&!o?!ѡwy)'  |#t4dfķs"L\T@RKWqZl:t (wuά~)i%]f)"ѯ-d446w^DCzUxL&Aӱ2j;g_dT .(*m% s)s80jwδP@=?<`wư54,&k~ַ=7\eϗIڐ}TNӅPJ`:a1:pnҘ^6+*o{Ǜ7}X.K'KJV4͠؎^c3) ~7q 1~v0̳[3o@=p,o;~gx$u_Qc󇟱wewwU-^w'@-n 7j1Ŝ^oY-07NKS!h֨J(($|2P0po-\'LĐ<5P2k|7Zͧ&qC 'Twa$PjŐR72 0Yyߧ'DN觟4fg6F3'u9m0<ŬQd~D0/z b4 B'+6m+/qzT:pk0kL!}a-fL;I* F>U3wD2@$COrҖ暀_q47Ա:Hk+Տ[J-UUD|2i MX% !t GEW Eq=Cƨ^V=EApL>/f !oL˜̇ ǯYm7i-xbQMt[%|}O_͠aN(岬S-6v4XV+atQ{gߩ=dk_5%5ľ~'ٓy ^!2o}UY{@6 9@ z Q$X `ͻzUԝ ?UkCΞƞ[e | %`̛hOF~*ywvjaҽF ㋊%gEn0̱^*2XD91"Zn]Z ifwS*gz=>XU,-K^Ûtlrk)@?NroeZfʑ=ҫWeY9kİQy緸|03M~wbv &a+p,xXK:u AF }|լ߅$grjȂ=6ƣ9z@:d~e9T5D6ϺH*1;O~Oz‹{LFCyO( )Ёz99T-AwhD&7nG@TqC[ 3r']SVؠBN*︓֖o+}5^ -ڗcțllpŤ5&VPIIR75ΙO.ZkSFzX _+j'$y؍&HVYDE!`ܬe|!B_':J(X|? h}oP]aS܃q.w-뺻(Nʦ芠_*ٹn5O[fsS~;=Y/ T ytc|+OD e˾=Fj#qߒ" [dD4JY~>Pz'glb繁/}JSr>ڿ%jT77 PKY]zm` ՝#v;NAߔVotyь8KeNJ|ҜۄFaFXמV"?  =DE6dGw>$F~']YHiZ vԹLWuZؼ}%FYHV>N5EQ?{z_bi"'|3vYBkHr෠" lwk)Qjjv*__`u]"KFl˪al\`C: ~X !Moyu`n<:9M]fDK]01s9D@m?x |_Oy>h9)+0Vu y(c*bv|;|b|\[wI򐅤4{;m4`QtkJUӫѵb_wŴ)1u~1N } ԍ[qKj|JyR'2t5pR~&WI9Ю [ (5$󰛉B[rS9oѸ'`R+#G)\@KsNd ?q~x"eW: ~P!, \t5CX=s㮩D_Hk Q)}򥏥b?nAu/!ܭn;uvZqHL)TzY DPC/zVmER1iJVDhδݽlۮD\MQy)8;^:Aj)ཊ-dHҥ9mFLlka&0-:qV8'l!g{۶0C~M"=cva*(:0F[G{|@7S Y ;6%;e[+A1c­1́ Ѐ#Nukٸx 'yLX8?<.ZO>G A& :W%gD:sJT&gw7=$M ȩߠ SɷTH/b]%kjXdq~*+)cSiD+8֊OEço:(Aj?j2 u YDfBntGl$ 4HFTN=Ҥ /qy B%ܡNޡIB`pZz}A| k3?Qɥ/}9ؤ/gq_8~>=LNtj8PׁN%ښg $q5 H唷I_~q F*0g}A$I-K3WO׉@ފW]f@]//b%"WPQ _eF)[zD}ksi!.W2|kv]l,(Kr v:) γYҥ Ѐ?7:hVJVͮ߇ݏXuU% O?%[6Թ⊠p󵩞K` wGYǁMܧbnpq+~J/4S MO3-'t1om>חBwvLf3݉/۵o2I6K]9`X)%gG>䢺kkWc1޾3VxqoE-Iշ%چ4z1tq{w1kf2rc V#cRr{rrג-PŖd~m@Fn@9L h:#0FMtƷ C jks| <ΉߔT77eþTd0X}mW6b$Єj۷ ^ *we`F9uG?2H))"ҎT@vZͼ7-`-䑉?[i =ͼ^3}.r_T8%x`JTJ9*~_NBY!h]'&6nlJlvud 4&i!ꌩ-3 nzfNe5Ճ|{ n%zt0>cG29 G4E#gVXMCTQX9f /j~X@+|+&O&.@.۩țMA'Յ407 ~M5*~V~PIRơ8_`Q ͧˬ9@ B%x*Fkt j? 5]yDPO[ 6l: ˮ꛳d,< hxu2& =2Y2$|c q @e5{ oO-K\Ԛ\c׶$z%" vp^fp/-PSV!uȥvaRHh ۶1+G1lZ!s`+S|2 :+t;獳%?X7PtaȘiӸWهQ )^uT {Sm|<[!}`˽: v/YYW_*pBA8#1s0ȥAd=$s{XiuF apx?c N_ڛ_JMxm.KvHד&3(#3cKe%-v+ JA=\4l{o*8;y}]+zӤNPpI:{>R6*/`c 6 x2̧}LD3Ӹ?]C٬|n0fE[Խݠ; UDŽt4` =!H~x# Z)= 5L l+)3E]OL]` QߚQ>px#Ik`==ji<;3TFY,tISqyPq;WTry'{_kf\a: CD~Q7zxI,vI:~I fOQypqr&Al谶=l+da{\DzQ<@ Lo) p k&Fz.Ag*rU r}\Z;tЀSL zrK)RoݷgiCL 0~]!6l8I@Aq@+ aEsTڴkӪG׾MS MIp<4G-V덴u`[,6N@"~1K^1̋`SuvNg@?0")zݘ_ے7w+"Kaɘ b2ȩ*Gb5<ع"x歝aF|!PGij]agM!]tq4Ҁ77 K;7滣 ?R(݈\ ufi|O^rmj7֒vbhM ׶[d QZ]|M6iتמ[2^pF[z3TʩtvNe{l5Z1t3u lN \vXpcEϹ'DATt#TĤ?b."r>J_ot *9cb.6&|Ni>XGٛ9NasoFТ+k"z]fn+vYA*Ο);}kxܭUZnDj7Poùa M+>'[l$2A"h{^#% rCǭq0KsΠ ҅i'I KYnU!Pp/F&0-l\g 3gW$*8ೃGv&-TH4oHRhT5X[ǁD^eZ(-UU8M<`<8콠\%>^+;{9- eMkpp^Cq&X~I~13n+ F?N~pBdD<_ 7PП}h?bAՈB Eq\qe=׹ߔ2JBQIyQ+8΢9?h <h3rJ(@QQ(-!`Lr|MR"2!̫UG& l E>΂⥥fnB5 Fn7o+Z1ϜLao1&b0&mC$3ECk)82e]N9ӏL7\ϝP~:T@!pS`*|yWv+{(>k /w靡 5Y}-d ^<.), z)R~#ml 2{ :~sc9>EPY_A]i6'i]8FZY5A7* nl}Bۜ5[};1#Sa8vt].#_CnkIf#RDdhC14ȧNyt2)-dO/hP=O=3'7+AN$%Fq`&dr1UWSп=R\Vcmݛt`W2W^UP{WiYkwbup/$fP} +o@'y"bLA$ZV&5EGZj:NA!=nv06h&KX1~K #t+ƞrdQZBKTKDsOlڮ@7|<޷S٭sȀA3??%Gj>KTٓ8Sv?'P%jY9DuiնRАE'g=NV[Zܔɕz mo<]URŞaD,Og5a>TLvIFdZ䥛0,%Gjwo vpIڠ/Τ׶o/A9Gw274m :ߋ])ti髜FXxn5G2SD[O˂L[=S6vr>Ţn쌴}pe#|φje.w ]t]o:!&]#݆zMc'4oo|wQ"u׌# Cߙ-#hZI5ԑpM4H [vcT NƹjLb፻߾ b;E)HJz杮_H~Ճl *Ĩ5hC7c]Հ0P4Ѻ6\inU~39|9-Ƕ m ?@9: `Ʋr?)f!Į(&^ns$\f6oIg6 \.N^A܂&ꦯXF, W0`& nOoDꊩ 5 7z(jw?#ˤY ,Kmͷ@9E怒" 30[U%wʜNftz>y--C"7"-P|2T^)&h>VKs4>}Kl'~2o{(Tk%"-^`fi2(;7}#l# 5+,:=t%0l=KEAyiRMB]@n(ec Ewo;$LW R%C%<_O]ft>G#8dۆ`=gBf@s/DgwA zS0}5yqvjCt2a! ;+h3P \G?mhXO1Bam87W!NK\7Ld9A^?B11ysK0wEnv슓(dsf 2 .U'[$B|N7lRmQ Jolђ&Mx@lsPfc[ArXvlȗ1{4wt5M+".n7LRչ㒉I,*Z;I^jGizVb,XD =ƍf3Ռv'en/fVC~ysyDFJ>S^IE tS<H}+GY%ԡ1ڴٿ !#Fni#VmݩdpJ7@cާ3+BvK@i*7I2Cxgp& fOUu LנwuM Gw7-bIW"KWIm5ہW=gPZNB]mlmz󷭛y%SV z(;A )AS`ʮ^iW1 Z~ ѢYKzs~Bm2R:N8%2yo]@#UPCLwX1(ulc]G}9NH*CăD8;ZXkջ|c,s&jo)YX)A.߾ev-0 e31 vF}l&P'lڣNȎ~FNnZ0ZЫx:#@t㔰ڰ/:/mN/ESkjz ~0:O]>} '+*K͖~5 )^Lբ&=bQZw?^}rS(^kp;Fr]ҽ`sб׸W^ UuMR0R/M`*?@XfVn)_PCX7};&S|KJyܫ˱(ErO~(iz|Z93ɳ`o_|' /ڳnēH W3i ~HRxZ"^G`.$9[}AǿS0psץ [mϭdK 2SXUk>d].L"?No!mh6yAlj@1_1(ohGj_FCe+V6i18"6A`9-YIqYgB u ?tiT&3h>eOފ.<5߁̼&PmwawJEsY7~|,qM_Ln6e z]S0Ɂsm8bce  A,,#,LŽsY{\ vorɖ\mbhḘ6gCjUw4@i6rSpa̓"9 :Nh?Oʍi\Hv)\6GUVta0}tN>>R0=RᙢW;\߭]oq{$s%jp50U- IgwZ酎s;rÑ>~Vȷ:91(EoXMCkTJM޴rsFx/'=Ty,%'9cχ|E;¢bWh]u -m,65Ĝ;?JU$%McVJXa"As\.#>4+cM 1^"Hb z4h8-j=5~O|v-R&i*ʋ7K!H0Oe]zOOزfk琓wۛЙmTd>ӳ +),3ÒL/\5(4>}z5dZxL*ܻT|N';Lނr/GjLos7'} +eـZ=$JCL 6su1I)waVs_[dQ: Ѝ*׍N{D"+S1P6|{ " \f(jGE7QCu^t&*W%uK!}2moṶIR1vn PIE X0d,y-c}Hq0kŀ؝(^!Vjԯr"uߐ;lS+ nF|gd[߃ Eԃucz]$O]I|SeUJ*G8Ǧ;H0'S&gi;m X-ӻϒZ5D,Nbl"cʀ7^~m L=QnL=QeCsk*ġ?`mGS7t N:А^ LL@~u _y3Kxldoɿ MʷN需Iع@&>_ A4x.=c j6P v`htjq{c& B2 {gt6"|/u{I"T ˃S#i[eYorH_7r^e=!$,r.kTqHͽMvǟ64#^G/4QQ9JbIiINy}gJgw9>}wb#\S)~'scLA16IOtVBvvڇ¶nF&y"}m8ۇIk)  eqpLVv:(LaBx"^x̐N6-*:d'. RKҜjx|~e("PRN׮=NDـÙb=7;L6: &"nAb&ɪLPM`~%ތgV313!qs}@ҩo܎d-s xYjPy-p9Hir3 LwW#n>`!91pՎCXkxIs4}cNJKੲ0.CR"0-{o"s0 |$^M11,ƨyU]Qr'8VmdjʛB 5ƼSo:Nu5-#"4wFpd .u9^`H ݕBς-z<mFl;QdV.{ރ,LcoQuP(>3չ6[M-3l,I8|x;t2}{wˊ{J6m j7Rߠ8U Z+U07̊?CaJȢf=ŁEk^'Unm!=[`M-&/Oa(l:~ZWdWN:y46*Q>LK`R?O0+D_=rR RbK ;h#"`"xۛ}獷; ZT*D!U1iw* )SQUO^lq?21Ne: ȨF g{-lQ°V_Y_`ezVL"J"Zm:Y$y%@Ʒ-yq#oxbڸaǭ5uso*ê)]^l7wӍ@@?~'\|0ͽ@;γϞNrȞ^>AWc Aj.A0. a; c%Hk*Bs˟߿!qA^x lsdeO@ پƳ_QɅE(훔d gtᶫƓaTb2„[l%ij.JAG덶&Uu~aiM+=9+NdyIRSj(,9 )#r.>ciKaD`G?\dk'{k34 XX*'Bw=e)m¶J5:wjf'1w.$̤ !/]spo#%X-ӏ\wDἽɌP~%V@ `ѽFCh"{gJr I*1 ^e123ˊz_EB%9?p=~ -Z8.cŠ ` cKνs#l x~(`vc M0adR4iSg -9 IGaP_SHEH.{ bY;̫p0B>@PQSi <>tba= E@zH|s c㋏{JX 1xwsJ_~~I AZA-!( ,.I9ú}NXn;tjۨRWbG d$^;zs0t`&b-FD`*7&URA11@#V 2FdWjǺN!מySx5T햄^}cMD3Q0ٽ]aYע>-t܉ۘAL,S{ƥ#p;:T< q^z#)PRR6=tPMYDCFV+^IA~Q]JB䯻G1ر-Ѿ -hEX8 ؾ= FV_"A8$b73Y::UPDa{r : 9G_҂Pf!Hͣ~.$!޹ܛDwkenGlQ^S˳-L籈Dzyk\pg%!=>i񆗴^S55w%MXGV5zN8X̹"m"{rxdyܲ?VFptr|-,#FyM[0X7!UP@cYr˒Gm+XU}->t=7G B6+0H>(*˫ғnYΡhټF %8{6u0[vS0f"(iT d/7=12'Y5aarGoM\*Y54gx<C,7B1;k[ѵ7/}s)ZVyckؔϊUV3h/ovWh:n@d %- ^;Fn\JýPlDE) 8Nuٷ\h/lm!Dg) k+c(5b^BtVqdҵw!)E#7*`mw^^U3-DE[1.Qq;eK}e=ō&{)V=hIP6b.6ͫUjhqi E]?ŎałE|2}F$ˇU:pJ("Q.%-%&Nvv5۰UO7*KhW7c"%@Ne0]Q|2a6+͋S%~΋ZpdXtR|27crmk|" "`UD?'n!,_v) <75%=TkOo3Й'F|e?ne5w_}[uC{ Dzǧ-O%O"'f:9r_GUɒT6[Jh~iPCZbݜ"˶^~V'Q3r *#=yм;6lU.A1[[Z3߈\ȷ ["wnP:RO[ 'Ǐ[J|crQ+] #$`|X_H]i '&ǀ\i.mr;Viէ e a,Wcx[Ptw[_&;%21MwюFiһLG);s?V{^,*hN|߇މ68oX.0毉}d쁗eRf[.*|~3]Օdy>f޴ uTa=᬴-P % Yxkrр!;8GGh/Z<@flf. àTcd9(e&Ƒ.'JBܶBB EI]   om&<VF\)J|޼ph)`Rޫ7H_t,ck逑J8k~%$tpJ7s!+r&4ڂl:WO^k*\㣓1ܧ?50Ŕ#l܈xPwp+{oATމx΋}ƭsX*j*Xq>ۗkrN4zX8K$nw|+ƬQT!lsmC-sJrm~E A_4jrO$,:1pl-l,2A&D\pXa;#TMgrUJ!'o.~3!ly?HR=8A2}3Dkxjv &?$9wاa׾~I5LekNHq{s P"3^= _S)=veݎy-*`5yw] \*[% -X)NW7>Fm,#ɝ_ aV0DsqHuJLw.X6NSdAw^24"Uag#ް0˪s¸:kxC^{|Zncv*8\'3AvtәdsVujxں@7*kzz k4n _a3N:{9Iz[8NTҤb"O2K%5Q.en(+ɰKHl l! c\ h:xPC.;&'I0)jq̶u?jE\xi K{-gs%e ?< ȗ( ՗ b,i*sE)KUjܦ+5BGޮc`f4N@HʫAZ33qKyX1z77FE ku٧"3; zv[qn 5iuϳZA7@Iȁv$)-5+}a҂翭ռwoMc$%ϴu/g/=/&fۃ ^zI, Ho,=l ̑|E8-}{GOXrIIcN?TV.q% Ѻ#L,1Kr0 l>n˾-̜ _}&I?y& Mtpv0].^m\ww)vWaxקvS:L)s} 2>3\ V?Dٜ1ti Xksy o)9BmjZp&é>UZPkhަi0]Ӵ{,WfZTnNJE_Dlr1Ks,yem`-q<߂NĈjlK[Fw5q),D RZ.lg-ZaO$X͸U)eʹ^J-:(4upy2Apgdð55_dG!J"tEtq=~_dv@H"jHjϤCr9G.iާ,~M{~xzXFJj|buX8BP0j@i)40pN5N i2APhdJ}ݴdxR wJߑ3w5 Az5}_z`# F. 46v^sZ%o⨃"(t@Wxb1BZ ! rhF ^6n5{E}qgwu1IڣeȡEPb3#8v^-53?$e [od 0 6u #oM ܉pp TfgO:P`(w.fbPE2n#籸o@_5 Ҟc֏Н=ӯz-TCɅHpv8Ay.'+(&OD\5hdiRIs.*FYE-UgM$#`;ۑ]Wb.*b`Ѫ FDex4z]Bi҃ұCL:b)CE$O?s v_a5/sbN!o_ߣ/9ʹ\ܵ#P$Æwv„C 50 .C YdkLv(m&2Avל-m8Q:Gq#ħ‡.,~!lR#M_ģzgzU%@ ~`r64 c?oyn;_ 51L/l#~ɾfxRI>"- Qqh 2O5TAr+>Di\ :*1 A~s-1"/CH-8-ruԀ~'ݸ+wɛfخ[!IGVdK78ts1:5{mS t \\+rşH<ͳG ])#i$4=}`BD+\AX+1@z{ %cv1#z{ϙzKao +DjED"oX|b^ɳhP)ijhiUb?N VĄJesLm=m+BҪb^bs$ Ϸ דʸߡig FwJ98:1RXkM-PBy5F1o@+4 1Fr􀑪:ß-y+rڻjN\]R`xW`R: >i Ɇ13h 'QHTF:.ѵ݂'e!ф 7gKv_F,Ul ^}ϻ5Ut* >fK3ڰ#GCְPk WUqHgof~e^{RҬ^2%0;qm lD/'w)jKQюIs8 뱷ITiVgH a,ĠѴ(Ach`/?^ҪO5yA@E'z}2$~qFH ]v lkΕ.ƭ!6m*v$&:{%,a'SͨWBUJ;{ЃKfi XƬSg)`ߵpS͋[$6:=K%~W 1ASC~ÜvATgMr$B։PǬ~( e2[1腣@i)}t3㲡)v9s;UgKºQsC:d= de-|IzJ b"0>m$BC㜕* I9M3I=E20^xZĤs%ѬKov{F'2(;zIBv.UlDQڻ@9%]B+Ns0m2W !,_:i e5E9;rTé q9fydw.ᡨyʜz˵/b&7=)ޝ2 -jO_hi]) Tb7`NneW@/Jn}{YyLHG.+‡GC9 x4l uu:u(`]\I XVsCvvtpTU/J5&W(P#YC |&z$4g~ZY]gfB4:,53 1/3{#e%W!Be@0ȡ8 ^&QΠknbV+)M +*rkD$#aɰ /[kFDЊUڨK`Ib5I}9^4K80^ 暫֥F:J,Ab#jZ\1.s& ojkf|lt.ƎWVԳF ňXt\ :?U(Ƥ}ЌK3!.:R0I]ĵN5 Ne8S6hzp?䱭LdpӊRĵOhm7J>wVbOߐ-ݚ[iXBemе.!/ w-Ody[gұRC+TW&yV ;bcJY!FJeT^QpRnt;D?2r @]'}K>4R0[) ~ {h.3!#h`[+c@i} փVcAi#T$#^݃@rTs='D- VeC D)Ru^V˶NdlxQ<]|`]\`¶f7p׫-oU`7㎴#Y" 7mhJՄ]ϵň .L %|$F&(IT[Fϯ} lh@H[~~,SL6n!!(W'A)}`bNP1;z(|.(1jRYe;Y>(N=M8V}fs"C_'}K',[Ɛ8Xˎ\_F.)TT[z_ ?:Tch?hr$'g',.UVf%!|j[Ǻ4 IŝxZԚyTϲJ ȁ O'/zשC p"Ə(=`:YdJWY\2#B7d떈N)tD9e%,l=`PBlょ@Va=6!vJxYB@Gv?h3٧gRcgm Ŭg~Ӌϱɱg}mp!W &(c `j{ }V.&Hӄ ^w@ZgkO>)B3wsq)B0-r@T><ĢhT+4nD5ZUgA{jg: H1ZlL1i96*kՁ]1/VHA3 PbvYfx$Y2WO}B}bJAI<qgN\EWNYcZfPT!H-2ͤ\*.5r R ɩn-xޙh[ro~I7V1Od)f^ߌ`[D.\\n]M=ο`J fChi:S55@Dg#b;eYJj2pPPr !/q\ץszCtG$#D;iWwYAq;5$qZzq f5\c@zqCBL iO8"xrs{!B DkWhyݓXrmkJNVE7CW&7q -&FQͦ3ȖRn &-(EHQ#SmM 2ugw94kā AR }ʏe3#9z*FXHU b 8#5+T7A>?(QM%{5}FTTWvĭaA|版k8':ѫd ȗ-JPEkQ]?tM! Esch{ I2=BE0Co9%j̳@ʔ@ ڪ |mA);i o]):SUbaE˟3@qNgU LM$0ǐ\OMx=GS~J>`@ՄT؀/Lr ^vE/VtgV -D9MֽWhV[˷cm"6M!UَhstH@O9e*KҪ~1pVjjՀ""o@:4I= :g5T,R*%\IEv@.Hǜ2B]`_]+#A_ Hy{ δ ?I-5煅Jv3#L~/]ix/0 -L@=/r7G(īEaD_c2J>E^XWok,";*\N2!_m$_:*u}ScʬԀ^ҵxr%&v f ɘ !3KN#f5GT)ԑE".%~iuֶ rzamhL ѝicw2 8k |@`p 6KPiAsi] :|MJ1 Cv*7 -=Ol:1 >'epD͐]= ;a-mWT[{[o]NZ8j#pbJ8E 7'ϪF&͆H0u-,L&//q#d/$i H9q{}Ec7\\0zp~ݓn}_3})W-Pxf;)FL2[NA4" $&!Jh>t\3no(quB: "{J|Մmw*O0_]Yj@0=,q"QWU>`<[ N=<^ϋ߳teo! (4)B 6 Pa5AgvH.2G^7 S\nG^IJ4k4嵈!w\#mrzLbj_UCe ko f2;20&B#/`Uc9O)RqJ͑~:P.…3135d+Aό.kb=1V&xiڇ~Ca/6&~vvVnʉ<g;)?pqlcG̈"cF*7ٙ&,V6x*ںF6U8?4_kG,nMq-6$wDv]ݠ:My'M%5"{H bL="H84sS9_ZT.P9i d&A\鎐cW0l?DN5t,եՏebϟ2FPvrf 4p2zYH d(;$p=h-qzz`iv.sVL!aDg(RBƕ2iD"Ԗ`1-ЭͪXeAW܋FLjm8}xE36bP-r0_ ax** =:L?M#.J愈Cx  L/24(7Cy31e|R?:BJ>9BHjed:PB[ej\Fsנud8,?EHf,\op&h#0I& {7M'7iwVG=b91:miyr\ ^jjY-\~v}2YPrb>@>8#!9;2MdXڜ!v V|k[;lv /Ԯ~ԁ}h̔LcIS %C5#!)] G蕮YNsa$0eww!s^OoN\0OaW%L .ŻgUmټW8X^Kh1Cuw֐>4 0"sc$\սg]/ hK\3$gi (g%_7am!E2.kȥ m'"HsOߔXJu?+t1)*y6hL%ߜqE] T+~ڊF2?-O!v c`yEa?Yƒ\xuMhXdIs)a#UP_,lG)VTvcqϙ^cs]=J#M q^ŤZE! Y35\Bй ާ ɋOŪrIM옑XpK_'dgHS>[:m=X3=o5YG cR nN$<^hw17,HibLV'-3O<_ Eֺ'dd]c6 #ཾZvJ.)zPn"=WrLR91KIP_{(}֕!~r5$r{Z3+.YYyz%61h:$Ô_ā U,;sNΊlNq$^bzf$"+baWӞ89l\ xj ~Zg"R׮93h+)= gܦ# iYIE^gMpRMXp[WU۔Ahi8G4 ǪцXB'1#"&Zq`.M t2Y@:uG]ߙ?ηRd^)i¦5 /fetz9?3\ueT/Ԭ_b %p~Jv_cIy>3C珦Rү|Ɠ64wUغ'~>y+ In%з2ruvضl λh:"7=P**r_0ǬTB8GS(f k'VV,&L 2G1ĿioB"%7\1;].9 :#0QA2$5&1@Kv r~NbF%` ג ÛE|;rʲfL{9Hj.X~WeenMPƯ1r<5E"nB@ǯjS:[H>f3$}|bO^O6Ƶ|\B{#-iH&.ǷRۺAv_o^hq7+3|ub4FH7+cD!o8q1U?khݽ). h\!O<.ʊп=%3h5޽Q2tOdL6. fCC83f7ί_`/}c*ꐓ]J\τQچ-#(v]T+VyGOzw뫞.sd>CKCHM$u~Xٗ_';47ٓCj T+B_ETԨ]$h3՗v]J>{Q41/Y5hkjET}>C ƍGK`zd=U<ƹ<[6ç%&#Ah( 5UZ?TaL5}8d8"\m@"]̨_g^\_(CR ԹI58JMgBIG^_DD$PHMwq'h_ K~NZ2T*G𰿤VackfxE".gO#$Wd2LQYj2({Ko#3ڥM5 0Kd#]hh&q_I\݃ɠpȕ͘jfArt!QnDPϮv]A:9)Z6^MDl[ ل&hzPj(־h暳cNI1 @9|]X+,Pމtr"}LJ3጖-:|dnsXp%|>akD-4>;Ձ0Ҡ1vQe ZOOҷУP)$H;#d$k\zM44j -SqU ݜk<eO41k13Fb 茙v5hsRvOU=* {MΝzY]c,,00_MHSy?Sh-4׸~ ظ٤nJ-Qijb?XbSY|}\a1p)K0X,i^vPwT%XaO[QeWJuvOẠNl:Kl]P&A7"n̠9u i^x'aLȞ&zj9Uf?]q2]H1 'r#I.,1=}y>Mo "=a@Qc}ُ.n_ 'r@^⹟7{l,?%>~ -v^Wch,1o1xYyKn6 ƥt Ś%p%tv;481IH#X)*C6njȤ cy r°j'_kUD!< Z:Nr)z@*B6#llCj~͖Fxke9lLu:L`FOl5@+# ˜hAԮ'md,615A&) ł@l&M'%\9yv:=M=W]c7ǹ2͌ X+&Y_IOhMRћZsʚ,>@YĶl5hwMem"kbÊԺQ&&LR̻֭ bWP韽Ihgsr-U"[⌌C`qe WThRŒD[+ eLcZZPz>.?Q&+~s>bi+0fɰ6TN|$ !{_`dpGB@ r^߉H_QYJ*Qz7PB$a;> 2atY"GՆQ!Jr͇ _0#7˧)5g%EA`2==7(Fd|z W1G$ 1W82_}Vo xlq\Ua1/biVkhhRxJYzca1qg%LeSjEBCiWXl'1.7kTK RohR]ؿ#}͑vRwgnWš!;03%q:\p95V;Y"|dyH* UQ1uW=0<bT#.#x(ٹEcyG9slL#dǻK b)V QjYʚM|}!Yr>|75{uNS;d q_Y,w?MZi=Bwj8=kt13`/ԏu'4$BR51YxBg#*9Ha"3rVyJcл"_3MrںQO?Q8c2 KH>aWtx0\]WrXql8ya`yn_t"s Ur]#/TXtv,*7##WÄf;ghgɘ? !Jc5{ʖH㐅uamBa}au0E|!Bڎ_$3\ꉊVʍac/8e {0y $a~7%E#ˇ +[百~ ʣ5o^ Ab6e|p6s"nstB$ܵN}O&TUնM!{:E# ;0GqN[>+ch %V/_{">T*KS3{mTTZ2PwY7gS/!lxHxRo!斳+:csm_mf߱rH7;  *h54.||-*.AuŒKF,/M-Qhd ʐT`[V =ȑ %fa3 DٴKpeAt#y5ɥoa݁2i,ֲ?$R b(Bj#XHW"Kk^ӏduLtVPj][3uI*y{PPzQ4H|'57/Trq,  ,n o?N Jlx0mf]-¤s S9Lfbꊿ*u3Q,LZjnD^<2YQp>Sm$L4]Q[ٚb ;\eRMWi,y!OŤ`j[!P QL~`tZ㏢e'{K\c^d8Fsޕh1 Siַm3(_-guD,4%sv.Pq_@K!KkzEƭ7GL"Pz#یHB}+(@VXWjFn~bj\~\'}?tZN|dE$mo+ v"$"$%]9F$(%yjbVS N$LRL׳P>o!G#\bW2VB5[[9#pkJGo@K|2j6Zwo+~(c>jR^*³D' 8'}vNb_5Wi9}Ar`4 76AliI^Yў6ݼHz|"\~ܳo^F)!R=j ( jOVTPf[Vج<ҟه?&~2f8A4ȀKE g`* 0WgIHޮ0; 7&rCٯM0u;/@T919*bqODlXs EDnxؼzIŶ e `= p/t*SOo]ibH,(VRo4-r ̫. %|NW Bqbct""e'v0 < Ai2zd'8ۧ!SEq?tfA#UL}՝~J&8UsCZXp)9ˮ~Kd, ou6gI/dUCq?e t?8\ <[}'_/}K{NrqLfq_&$~) B'-tLlY)q<} Cq,qzy e0=gf;p.ރDy1|wA40Cܗ2:xXas3#%#!Eu?8 2A@ƶ0rKBw ȾSfUT^,31͝{7Բ̅g"e@Hkq8w+⟨LOh? @t 7+& VTbW 2ԯ0>Eq8?\拙$GG5x%6_ A:}g=,4<&ݽ.䬓rT')N+pc[fYRBەH_H3k }p~lO3]D$ SO,)ؓsb Q4mH/JEJ;ꀾ8(WpVPӎ;xP[\) n'mhQYCb%\yA"Z uv`Õr#D._3mdW!U6@~@w'Kfa/izf{SMOFD`(4q~هmUWN v) "[gwtNVbu,-t`H4-IQ=n(qUD&Um T7ϓ'Dx1S ǵpȻQJϺzQ\۬<%`muvoadszQ dESO\V{F֐eZHx3le ct~^:/#vDtf^rœH^M%AcQN6 ga唿I+^(_ps:p-8yb첝s0Ftz!L\wӋ» O9}*@cD`s7`JɰūȈgU8t;e&c(T1m}$ (RDK#;:6qoj"Iʣu=J`B'=]iUMڔSWj[r&,IK:WjHJ F#&2X}JZZ֗j ֢Mx[Hy-A,Ů/bB1^+)_AZؔ;4mUpTaR:aQW ڗ=~RJEDp~^ +b CADiiL]5Ü%0oap >۞YD)kXv8m8L m/v$Fcruw_h{Iv'F,*nWK]"$ jxiXOtqS[wS5䎭_,cN ;`QQc89mO-9E~+cE182xq'_3Q'AXZ9R$OkgB ă;X+ۘwHDfvݰJh]#._-jF~&:)f^ چ<Cl.uN%wAT;,n%IFEH8EJ = \aa,0aD`[ $3me/2.qC̐MNjVXSKm4o+W'|pbj_7K-&1Bz EjI^1cAMNo n!cGNBR'*GtO/2B _;\`8"WUn55}q $[uKګڂW#U;D5_\Z{wg.Ifblrc彿FEm |.1Nڌ}sJtլ7ًnt .Y>s6(ң$_=Q|)_2HhҞ(RȈNx$} Y@柠ďa.; Ƌui΅GHz,6*6E{ɿw JsTk wak@~íAo̹VrT^װ6ڝaa%K<"cңP6+ ;9Z_Epё '4 0tc+nG7xq)<+J)H/07 ٽҚ}'oOR_j #Npf\qf<9=gJR*UVpY%2?6.c"y;νn`EĉBΒ)j%K *RBr-^kLA*Z~^؂O҆BlLA7zӋ.}Z8*~#%t4ẆBb@_v(4T40d1_Jg 1֒"]9C[Gp/ǁ?͇=$-QX6u WxY*+%)aODs%W`N "flTOJ^dDRE{C$lyʦcФXJ+Kr< @m"}栧zֵ v}mW0v"HuЌo]k`J1=c ÷o)^k EnMx {89Gu.hA;$QP *ÒBsZ;>cGrB೸рࡌ' yȲ3"^bߙ fMkR ?Э4li9d{Xnp֟ 1~Kǁ3Y+,=֭+;NnڊZTaO~ɌA@}g}2.a>놈*l1>EMˇl`isBG_\&ْ0Bt15e ^:{<U3 /$pT{tKF_̀b6JQ)"kxmjf;k-bWHjƤ: z*2Ax_zm]GgoKr>'p&!2@8ͅyhqR¿Kp󰶲%ss$czq&Iu %+l48bU(s1kϷ7y0\}`-b 4!/< ? nwD@Y gcznv\hU~Uw2M"7PJ''*瓷gzOT-u! Y{0]×ir ^T. C12ȼ-,D@\>r!@㱠O D Wy#XBn`{ӢrRM|#X,lhQr߆1o/…A[\CQJD@M\ӬinYr2Y7IrtqJ 6$ӽCu gK U 6&@)VO.UϚ*4&7GXƋ3Ⲍc4jb@LPoC|Uiihܕ&rY\,NZ0ds{A߳ -fVH9*ᨱ3T(f$Z>QJ%? N4ךsh`h٩ :kթ⍌XY©؁ēIo7>Đݶv.ޏΣ"5([;{Ml6T>o&%"q#G'F+j?ڱd*ZsVDw";λBi9 2݌n s BptY5\tcO<'DYr!kTVk:{jTWrE&85_Of; ; 0,K:i P]P*MT6k6ׇܟ™mꜥ%0Y";2tPK " sȯ궊ϸVXȝN0_Lkid-KmXSum0F].Y f& .o UiV8WKvk y=1M3nt6죃@Ol&3˓aG{m k ( `QH`)Pu^Es} q;V-8n u5[( U/r]Dz+"R,OoS D3Ys=Z둄ӆƞ]v!IQ_EH&\b6Sn.*MڦT k4vNnLb%S]Bṹd9NFBζPmGn/~AW~=TWMӨqe9&*ıտv?)_iz&\~ıgb2qĴSSVܫ=Gf亓|%f$(g|7o]t!E;xo>XX 踍&[\:(lgKE_ ꃧ&w gn[\D\ԘsML`,@d,@nṣh`di@gqYT…pq٪,,˳dFe29tS@sGН)ÀqOAT&blD KvrȢ p8! ;$G (=ـ{1:7U6\*&2Uϛ4׶Xmӫs\uJAqs#|H8[MX0[^&GE{ec8fm,"yrLT/myߡ :ٷd/-B{^&o~G(҅ * t#(T"5oAj]罾]+Em@&BY{[9,#h=/'5)^U}9|SQf)Yg8&ѭ ŮH'Lu/Q)P=;`dJ>$M#u¤ԑNWKH;8${Y~x ippKF3)Sf6)$yPy8"ǎ532sTD.f'̭)>Xr{X$s2`PZ ` QےU_3)dD~=Szq1pi<##fo!]v|H^IMsCKF`7lҳɈuX9AVچ}_]p?y˕l>bu>: w `5lgu$> ?`IMA?D>ɍ]O8&sȧLf{!ӧ.'dUDָn2tl>U8i^:MfV[xo'e&jh ̡/'qY?0(QIo)IW;޸I=/ObN֐|b*g;Uo͕)j\TVϚra)m`7oAS1TtIM²<5JrV6k(Abh ciV9#Z ()rqG7S]~C:ZN&[k ?ᗻjE1Z_2#MF;*,8FJoaFH ~atr/өhYFGgk}q$zW̲B[^ L>՛АٛRD[@$-.޶7ayr^UOV=͟M n)PCA6фX\}1ڞvP*k+wA]ܼM@;'1+bEۆcZɼ]GDZO} _y}JsP4a (tҶ3O֊:ESlÊ˿3KeT+-P@ΓKa՚#33ٸZ!^Q6 0dk ZLSFG_huNRxy;׈81M.Y zeFVX-hw?Q8e" +[m,cm?^OvAiòwC.]Rvi5X,QtaI@=:Z `0{;lk^no,1 V~,)͕#6,N -+l 0/䟙\NuWK1iMG#-(ґ L"W[p;-ʆj k_:ɝd >4_ R:'#|45RJ=>2v昏 Qj2.{PMA_QHSl3j+h*B bQҿDc9 \[ %7qѵ ScH%qpV:48..*TjdI ߞ&S <\_(6hb$8)n˩@ڋf3%jGa|y"Wء` ?0U*n}nMOWO`*T$ˁ=i)7а}|w(YK/5 ‡h(%Ieb4N>,8XmeETy|&)J٦3Naʩ)j$>RqUBAt\2t?82v޾26.7%wCB/$AE,ueg5S ?8$H,Ʊאqq񮮕0w=-GPS-?>a3ˍ`.bc#BĆ9 WaEb 9@XwpQx,TX#ZˈQnH>`cB2.54VwLͤMIJ۰^b2 yBv+`PuRXkR eUF^ U S4qKFr"|4X :U(Xb ^U]NkW=Tcj~O5x:l@8x9e+倭hg^;q)0t\#뗫9uPy:]u!tl֊|з'>,Ĝ5qa=X1LC%ÁG7Lq}a~; d:~Κ纾N}),]fRdj:+g͌Z7yR+> iQ {cy!RfKbi$'; \pE~xr$9Å`4(Q,/_{TƵ[IAV`~0b* +BeoOKG S.DgE2yB%[MOTBzOeE\Y课T#ҫ߉ͶAS>Ee4{>r U)Mqvҭg&C- +[L}1kNwS0j2jt"W<0V'|:{ix%$My S5_(`L:imO5N'yk ;0Gk4ʈ@Cod)"9N_,e4 83@&:PBOJtWI(-?૗n!UI)ײQ&K)tvk:[ =gyGc/_첐v!FT^MF@ueB7# VdDPKloAAM_u 0+KGģgia--#KI.fYPBQF)#d1!&O:$Rnί]›M=AVH.?o@'{I X#оHJvOl٠ yƺC?&/ЌU׬_Dwr~EPQroMQW׳@-o8%.h9QEth42c$ҞjCȚ0`gaY`@T'2lĨgeԐ*d+dXTގګ#v!JaV;k}S|\yyDkKzAոNX+O8 4A-Sس_ h$,HÛN Ÿۡu LjsdɴvGu4_"_{O,0#Bc:ހ(Wƨj1RjֱWY{-qұb$]=bsK6M>>yY֜o Fw&@3Гq[ga>!gݜMoqKAi)g [$ Thgò'iD ,ϧGt=eFUg&ʨczkB]eȟ&]Na$4x" D<^:x9PXvGVҖDO`%!SN‚Hʀ;1_zBHiY4sSL̄LNSO1sF\AZAa$9۔8- /V U]6s}d 3|39K%;\F(U3#\/@|oM.6u\sKW)V DGl^GKь0bՖ:2?/;3psw\f(jM%a@*N.˯jCFqX}OFwWQſ}ciēfr,1 ?G<#dj^?czc,H%ŵ*(iߨX{~mKUӳ,쁒,yv| pǦ`w5}se`g:6r;{X&}y*eP43Mא̼|K蕀S|Ԍg]X&}3W)Pn#j(*JcK *V B[ $KwcлDA((PBgw[U'Аߪ @']-6nʰ& g;5SEx^0ZjE"rv*}Ԥc6O =N*8%>Z>媴K a +bu5"}o'=qHw JU+)o [a@),fL u_2 Q-=8 <5 |jtjWl`ʢ]dBSs 7,!YPik9e 9w7Af<6PH%tSN;.K}w eM~@)B["ii׋pK>֪$U,Q[z :> ~xo; .^?M,4Z!UiOD~B0Eܾ.>o"l+lU]Gje &\>G65޾> v~'گtjՉ.~8cz"=~:q5HK pO x`VD/ |ido~䕐{b*<' Hv$FKB=KNuȲ9O"ůAjb ]_@vTR%<"j9KR&bwi 1y3}6P:m9moKbMzʦk xca*4UDZ ru@Sz޼_naAX$N8fۈjSJ_inOrQa,u_Xjz .[ҼxEEyZ\x!_ѣ|x\vT~".EG$)`({%NPaEYbr7[9Ot.'bHhxa}׮ -ke2lmy`wHˇ(L_%Hø0$=M5x`1/}|9cacR#=PD.6Q ҝZ@&*zy uiu"r\js+޺EB5f !^/ M}3Dd(!!,^\ G )d: %su$P@#HgyULUg. /[kGz ɦe>Ѯk 7VpL l$UQ;H9ِatt]j'Hkǃ R` rjAr?_mJ"(NP= Lv ]*ՄQ^KZIB0xsC1Ntdn UPBo一 W*R?I7Ofa6Rl=,k(ې=Ꚅ1hAcMfVCߛ/<Mh^.+1V2J[$^ FI2G3?_Z#PKod墝 GFG;9<], c@94uLյG`MRbfb. Ra9~騯tyޑKI`{_9"@dlmBÙUa 9f:YLoJPDôe ΛpO5I5LMZ{([7,:\T.e$~IBjx-xH˸N}4 H~5h$%;-2C#pDVҸL)$NBw ۾g$hI-Q"o=NH@,S4/߽~pUZ3ٛQɥ"w6t y#-EVopzik$7w{dBL ( V%M8w+8K,~8UHʪUH=Q]"Ym#ֹ!R@i8@&$^M؝fU\EF^\ۄJCAslsN^4Z`l& Ϭz;دB.{OF5vehf"F}ȴ9@CtN^I=h+"U>ZbȠUch̊D$TTW[ < R<4B>MID'Mmγ#߭3cXBQqVT2Bu۫3š `k"w>M2w]O7-bJ-RA$l_,c uW_ Yp?0$y=lғ%.~~3%E%5:0ڄ ,wDnݶV>TfbÐk.6݋ Iѳ,gj2Jºߕ#[s='cJUԡ#ek3~K)ЌFԳXoTSnKtM&. (BǠ*? aEg~2ԖY>p2.*>@⤎/NLr_{#8D)åس Pئ_3e:gW֚W uRͬۆs^d$'ڧV<G7=c1'=LLh޿`pE+ OD47F W3᩺Yb.l8?bx#h+BӣYod]ņpnǺ-ImqRcSmnbKȢnGoIL{L]3?DN.,VްCr>sY/t%V SxFԟj@?2:?}]itM`7sk9Rd,+X!0hRdM>̕i6#qqLQ{;9 >RǦ4a7RHCCO'8OؔI`v6G'Wqn})cE7vGE鸠 Xh$>B;F~wN _(X,Smiм*afѳq8a[lǂ&$>1ɽf=7'F#6: 2՚v^K {jZd2jZ0ᡸyjtF r 6wB'vj|]1y8m5(qXުqБ?4Y!eQ bƠb )RZC.LNq#W;'pK:{ĔW0Fn6u~$.+ڜPv)mӳJdU^P: *Qj p:. @ }[m!6<(EX:+Hf[r3P$;S'I9b LM. QQky<ұV!p9!yGۉq*ELkFOn0r ,ށsIP0Mͳ-j3 C [m&(>{$QFs GiQ*zܸ V>V-͸ ,ʷIYV|\ÛZ.{ ycUrCa xmL+s\a?ǫbGRzP60fi5VaPs* LT7ph_WCM#z5>(Ao7 o'Uj˖s43:2*=FؙBl=sHKvٓӔY@=>?3<E96sq҈YYXL"t26xC{r/"Ļ0N\)p?R\T#u%{x+7}"wf_>r^ gwbK&n$ $Y& 9<4M`{X!Fa`oC{:bO|=)Qd|FRz ~ ı~Ə7 5a9c 8uV[JuQ֌Gw~Bb6RXN1//7 e+4xSʖrޫ~(f=a3VIo/=TXWj4J6xgۇW}#6 B -)~q2FS`-ӻ ߅)d+@-pڲ7B6SPA߳u"{=aԹTmhD D_* =׸4REKB?s賧O8? *Ar$`Ж$FLn WJfXKv~)"=0J5YxTOVwAtMK,3Cb%Q>@&oIZ`zi9a =Ƈ }T G[buJ) Ϳ5:C T)8T {"ƱSgù~nhݣ&]ߟN#j*T9ԦnCgsd@ߋjЛ /agX6o %HT1.r!P{ KR^ƾdල ]299k;~&HsT mw '_ͷtf3^T=dkPs褦S _|By (;Wh}impA0Tqpd"`1=Q.O:IopƏ"< Q%ړ[JXFuv=T^x:̠GhV5t: Ӈ9HhlTJ+֢zaȺUˬ(v#cQ&Xr~֝SJ:$bl[~ , ^Ԣcfe!_\3:9C-JQ}ik+~$w@ץ wކF߅jf%Ա,kd:1lY6z%ơgt&+J;B6qYEx\HGȜAnA!72FJD-[OAƀmF`QL{ך|B@@#k? 6Ux8%޳ByI\_y@DH~r3P/6,91 Ra[C^s)UC ˼r#M,dXgV#NF8P7U5,U<0g o.p7Zm{r m){(wеqr8IO3fe#J1;xgfe&,LO["=4ΈH@NhI"($n8'bɒNH /Aug{m8VX5Zc]l`7g[bIUbb^ye+rKiڜD8\yVULɳgz֠+މ`XD~d׫;^#^ Ѵ0vjbvd$;]~H:7h5k h$UŪ Zd O GH[8]LUƈJ[9sQ+Ta#beuFg^U wsFĠVoD\udó`e )!< ԂG_/nbxb-+KXǶLQ h02e7]E 8YFiA]qᶤ ?M %tHql^'#r$FQD|"Aʚ6r *af9f"f}v֜22r d8TzMwB &`ަy!v%ιK\{ŀ|& ܟ[ } _VYfG?>;27<#WG,_ YȦh Bfꝥ " E^mdw/tM]B4CdakbEQS#+O=:&s?r%@*12kzky ڂjNMuzKU ISej8!+ҧ\η.,?PF^(f\cG̴6gR:ZF((hvr8(-5z5u!3`?ۻ$%9`t%i?7fǖ\ti--RFڎ~ea#Bl#X+Wa[vյe+h*eArw/36$´oYD)^+( >52JY߾Jο4u%%ˏQIQ[y8|>iVrr[6BfԀ*/ՋwfGٰ`Xt6Lo\v[xIS-`~Z#Y .AͿ(dА^C~1 (ʜMwT)%ȡK[߹+_Q;fs (&Bo]fdH>2QּI[et5w9tZ JP 6k('o^\V(>ɏ%Aևg3#51g0̲ .GSmz*V5_#hft SZ[6T_8Iϯ~:P[L3b콏8bt $=Ɵ%F8+pֹeZqfPQi.{=G6ko%h7'3ΗjLib/ XZ)}+ ӿY3/\!1l{ "or$dRM 7D]D bzg^8)$Shd֊5& a`vpqGܭ,Y%0>E8ti+x5=ɩ}A@3wEuwGx}\b!#+EiHR<۩EAqkDueP!1x\ĮI矶]8! 1Yy+Cag=@ "?j%/l\dKU16oSqS`|f{{ⵥN?J+T~aYB1]ȣ g1 ݄cI4FC*}40?$$V?iqh'$x7rs@-?cq~xZ0,c\Lw 1n?>:dШ|2eЫС,iVI1`%F&GEǍv׳Rf.;~V*g^yyJ/5K7K%Q;>(X*^QcG5!ooo/u,e"7\$)^: (C=[ObDM*Xq>p݌1ߴ)g6,PiHhq/,Rn" nHGM;c>϶5'ʿ պdޢ`Oqp3ɷ:LT/엵 n~0B)~>&-鎵K>~TI#_F8}eY/C+-4{[TŦ (^[PO]HSV\ˑϾ. |~*ME0_Rxtɖ1ƷmH(Ru칓jYfxYl0q/^S.ˮ\2B>h0'^VJL!KdӢ5f: DwťL^K7P?A*??j}[W4,?EgvHոOIkO6L|~{&S| bn߸ ek̑aX[,m,o-RV(rC'EݣƑGwL(b > :;'2 `⨾'((оbkwj08P`Z8M u7G|x#npil s00T&v4^0oCzЫ W_* Ͱ>-?z%p.51p뾣%_ n:J aӜB4ڒerF.Dj&SF4ec_,HEtOP-'Cb<#{70zeΒ=/mO77iE_`%ܮ % æF*8ܱk-Bκ2zR-B(*"r i9^;q8Xu%@/[va1ud?.{N*Z^+H磛8MQ(>|/`ڟUy'ԃlG#6ahsԽEeZqt!i.=D{X2: c-bِR s>އăO뻬_|MV'c-t<8K.'f'TUGT&KZ8>M#](#jP-B9O(@ьVztƤc@sE%A%[tGݽ~uv녁RN2ݲ9{_svehq4-s/AبCX:So\ ~b m\p.b~O }@K$i'{w#9?y԰$ wt>m,>*6r;KNMf=}M Ka(*=ÅD!+(Dn IMJu2e-gXB0":ʖ)S#[("oެ=9#ߊ&IahNiI+v e8]6zBEM`9)A߫Q2j6-2JNyvn5#?RWѡͯO䕢SzF}5n,^iide/5?n(Z,Fۇ&}<E#%`W,vb#@_KsZƒ0q֬²ɩ#m%@珫43V.=Rpr.tG-j9;F;߄Q7SHV?(j&SA΋&JE' eYRm;WVX^t!PwAO?Ox KCq| S"p8 /kpk'A?1jKfT^Ԝ\Oꗒ&YLM/QT|z3"0 qTSL3ӟ [(]]]͚Μ'qݱR}DT/>" @{ō3p6Gh$h}A5d0Q__v%aR?噊hsKA]bCt bqPu1a]^k~m0D^p.ԣz9dMVjpfi$'>,.IjC2Xv{pǣS#7LkO:`f]5=zA1fbhIBʌ%@n{*i'}Ez_Gj#^ P)J02dʈwm49?,"̎ Ro\%E6)e_TNdov>6IwH@6 ƭ J!ޚ4 jкP{X6mbfM 5#];$鏨#ſLԝ>Z<빩`xjGZydG-2=-`wN@=DYRt]LȼB)ߜPM}4 宲k`aQhS?yCs&5~:K.9UI[&eNQ0 8uHhǰ 6Y7NU?"򎤠goF7B4 +ndQƝn֟.ZU C&b vMogÇOnG<ԬL !EJgU m9a1M1b36ŕ|6ZD{@Ҥ~H7{%Zw:*f./rSeMI5JxKQGJa 5>|$lt4u:vc=TbQwwD8nhuDS %_b+0(7{z#|8ht('1mMQGnEG %];d$PNa04߫EY4dk Fyy4kj zPؚTAi˿UVQz>Cmlfz'ٙ%oI=&8b196غI H{-EЫv-7\ctW wk~A7;'bSauAɷ1ڻ:nU F}7쥗5TZ`/t%tsUg ~qygMHo \U0fu0F%%1Ԏ(2Wͥvw NV] Ե]2Q .&}\l1hćܫ>+>`97"aQJ/d} CM/e9$m6S2/wj~&jG YJRnCX#J KֲmW&U*u-sA#䩪Bg wڋ7Z 9))SGbuPF_*irsuE۸?eo}N@k)K_ ̆ |z(%! PxyR̭u;QܡoaJm&V5 K7D CqDF_Iw4CC.茔kW n5Et9()1Mr$ݓU1yOﯶ$3`r"h3]5,iw膕I.G?&f`S!5H>[ atr5u~S2vaPxpSIeE3b7ns˳*^2 PPK)1̴ʸtuw4#?zWC7. e"iMxdvO=,5 ?#zEl6aJ:?Aw>Xmll. ='牤ۧ'UgL~*8Rl--f-IyΝGlrYCQyEsz޼ KG5uK1W_}]®S|Q)mp[ )8bU0jT\EZgST-j~3&q'AnQKb l1qkc ɳ]еxqj8[V5i teO8{C]/g nÎ`1 ^bK?|Tڑ\S'}`TknX q_hp;&hx ao@WV3L_p[w#M{bB_"eo b$sP|›vN[ELjpq+(OQ@նj]o*J>k?SP|]hI pvl4†|۩$BB TNS4%{ث L67caTDeD+_YZo`U)+a2 &M+za #į1I|!^~;[jB'wWE!RA,K'r (]ZȚ U d<}Wy ~%v捅< OwNA%ҥ˻ k wۂ_I~}p7]Ҩ8AcޏΦQG]M TTT`+=#{KE##mL 9(~4yk+\7:[wːf! ٳG"tO 2AM~62iK9N.e/Z]z@С𚎺߂hpuP~Hab<6fJ2[17"^ ?ξd(p2_qz^q}d[7YM,3,vٵ}*фdEɋN C_q^4O 4֙L8G'/ْƌ(>g WWXLymc&`6e:s W`  DUI+ <'3n6ސXlms\PFDQ,$FC:R"99_Tpf T?j8 B7)$+x b!J׹WKDb\bZp-S>?Δ$_jQt~cb`b8J]T&_r=BƳdNd? ն%NVҐn@[p()_sfpe˾ 9g_$~@nF.Woeۛ{%)JOiws][f}`<-CE)cڼI :|{-;F a긜|+Xl*aB].$nUe`$- Y/&GM`{xKs RKr 1rϥ奺$!'si$`AJk7Zo!N OQaR*v~F@CoU{YȓEc5(:sjI܍mB\{-OB6~!%8@=_s;obS]h^M b&d3j>mcꚽ3d3be;t2 MH]bjbpL(}l̮hdC5$Φm4ZJ%H1hIhW_?I.܍ H$e3`&Ev~)<ϫ#ľɝ V.1P/ֻ[v%M0 MRh0W;̰+碘Lj7rH0=t@\~h_=BK(qv୓ T]W|R3L0VM D}j!7/|tۍMWKum&<`Ux$=5o|ܨpF(p5r0}͉,VSڨ~}]ݗ:}(lZ2uShƚuw PN>,'ЉmgF!Ά*4kDG2UhJd1;e-iwuSLj;Ń~@AHz{^Q1P$maHXK4LUSl[09+t t,^W/N]Ns@8<Xh34 %] |-+8P 0g$Xc4e^\+Exw:/{N%涬񈉈1Z+J$S<P"]0w BS]r<-ȝzxblFtWwՖriPl>t=tjLhEcNb/um ݱ]cg`(;[8˝FLĜ'MRe$ͧueA= d:oK8(Xjw[91bńOKF󁾿y%N/:0t ?pa(9Az~*JQ=xGYvqwZ~- 3&<֢MKoӷUZ4'.QNڅwu bޣw3`AOsLkJR+ K*aI~?wઔ%ŀ 'Ctufba. ӇBJ[/e$ILL"fccPMlם9h |j9c!%|gw 48+kc𼭧]\>@v^zt*ƾ_GI&Bo0 Uͧ~j2v-bP"x:0&2G#qb.+y\e j9%M`Biۋi3!CSu,(fӎ QA@lTBb Q=km5:z̠~bA\q'07M}By}v[A)7#)e/7 K'׿Qkʩu gTzwR-\M?: P4qō9q^%TƬ)Zh); #zy8M-L0\ Uۥ>3=m~ &ӗA7% wŻdr [E&j+]ѩȲU]Bm@ىJYTl79tJ&yېX]E K I3wX L~PGZyd ˃A5~4 ?xx!0˩u61}nk{Ŧ/u{vAeiB8?zЇ#Or[T^Kg蒯D&ȅPDž-[ݶnYZMuJrK:X`; 8+uMγbH{`qk_ԝc5H7BD B yStޅ)RWVqd RpH/*Iq8mSH4Ya]}VBAݝKo~ǣsmR4nM^]AGk="m#a|\z* <@>JPȕ#F~UuJ 1׀ry(!aY鮣Ct]-E`?[gPL<3gG>/a#OI=+ F;oh]/ze$j"jO|O*YG8csAl.A ttnJWHی]JcqrCv6A&٪wAlUk籌[s4D;QG$u\o ٥?Ps%%fҝyXiZ搿o@s+UJ!;6J3aT-#D yi#@}dl]Ƹ &4PejۿQf87~"\gu^e=}Fy䦽vi#r,*2[|I Țp*_enշ\m5$(EjYҵTRG/v1ιC[PHpANϪNw "ڝW$"x "@C)jK͛a<ؚF/>|fn*B7.+* ѠΠ4Ri3 E{@t̍-qsYFj-j۳le=wBrN[z ܳ}(LmQA _Ϲ*()cz[&k;5hJX딤m/f;ΛUuWl.]B>ٽڡqW%O"TVcz" #OZsR0!m`[m&\ ZΆk,LY3YW}7Lj;bUO@#_@WOе2~7հn TY@&ꃂ'Rt!uS 1,M> ˕|>fmF3:x;p#(C\[Kf,j]~a. 9@PX!G/N'MͳDCbCWЦ~t󚤓?m xOrȤ#pq6!/bsxA uAz0ſ?PA"*EmXd7v0iA%׃Z,1Uk*8A$:~3;1Wa[Iz)iIo?› @#qG鿤H8x-HZޥzUBYYpy"r %lr MY%P#goַ.OYj!?vsP$+AdێU[VrrEh%18}p(:], gj>/ ,U}LdLt!fy4f:vtB~w%c}M5 +fܙě0Yg zFpeU6N2Ä KgW.j¨>!\^6UQ&Dbb`hq+׵6^J N;yL8IbtN,J1q\t?9RC1*E5pZ朔_HZ_}L[eZVي6܊'³hJכ"Nz>s=DOZ3՘j|nuIϿ/ 8xɯTayaj(\DyQq ~MOP 0zO\;Y{(dy sd*a6lIX:.N_iCO ?\$X1E&ū' **3;򁙀hyY.M߹SUD""MO9~˺'DbaSXfó*167+BlcMJabdG+|nKAbp>L攪VfKhr9->8J5w`h_AP%~X)Y+Uz<(xIYf19ME$v}hCGv:.yբ?dem?,ͅ/&i(ij,Ga͋ql'<w\WDc\"kT'طL#h1#<bW[R2i,v{AP)l 7l2~87yz׳*/)zͻJ{4ASCZpJ oI} FAg=UR$5{DKk&2 ظSj7jh:Z L!>sK s}. '6uJ! f0LQ W֘ɶa&XXt"#̎^q3jX0/EU(j,/PXx @6mVdcO|r``7kd+S C؅Y'gޫ[q$UvChavO|j3{AsH}]g2f`CWE&}8BGa+&jߐ='KܟkWW`k֨׵܈AĈ~ HZ`I_L!zt5K[>k{vR!aPveQ,G=8唛ۉ9I%ܺji+ #u=4ics,?C7 SƟ$/̓GzT`S]$6P"|AJlDa~d3 jM`3+,AhIb^cs$oI}96dEƃˎݷUV3{زѓrpA=5N8Ѡo#2j,]e_x^uZGM-X5 .@7*07 $a5":Vק6RqsB[,ZJ\TƔ2X|vf9^z˷.?dO*.ԱoAҰ] tU2~LZoq4*PY dy fۡC+9."X9(fN2LTzt ߩQjeM {4DSU$zzmUFx>|W(4߽ -RcIk17 ul1}%'?T4:~FW:k)J=XBFE]-ln {ZF@|rOGg)* M͐lG0KoMoN3 ]5@p:^6s;b~G-<<7u4_~Ͳ,rηJ(/ ZhY(W(+|` 2|/%p mET5lWMW;qœz]3LB8ETPܚ/'y|] е|[d0-nscq 8}v]uځ=*d#g]bUʞ1-硷JG0 U\-/G˃M]|5~՗Vd$C$ l#0&$RE#,BMtD填-*U-vީmyg+1,mp2Zx8ZQ@sxZ$ PZ)(h3*s-̛RmJp~f4$ J3.PJ*(Zok~U[0X@&Vy%ᆲ}Wa In/ "vCT|gCC<[PDF03r65?A">)C#39Tp-RȠ>Y+p37WglֶuӼm8E&`1]!ۿ"Axbu5F$fMU`EO-ìi;Äc ̴4mFW۱O%S&JnEH5Hg]@Ztbh#/[sDx*%R-EU`1Oo2{v2ħNd(LOtbl~n9n2#c\_~ ci}bt=q"g.O>1ZRj\ >YY\w*19𥮒)ڹsE-/ un.}FHv ı%?1Cnyr[OB+hS]ɭn+Rj"R>asf ^ \je չц2#DȗC&-?#\!N믮80z6}%0CZ|LpS!v9Jp2}x@EL2"BYx(gYǔ t>=SU oBuT;p P=,Z PW#q2X ps]q_v=X'[<ЕxXHã!kO _{ܥ+]0 ,kkO|z=xz%eQ&AOkꌢ\ߔ[I&,0j5IvE5b-+DX}J7bQ'SM ZUi-9`8MOrUmpPD^WOǑ!d<")XQ; PF_M-Ka((p^ki0A[_-yu5vk5 Bo5-_Tw).HG.T(Q3. \xG~>|o ]O@@bdh̷(n|v/N-mq!_.O+vy&'n r{x>eT쓍t3(] Ĉآ0GYc\9~3{ӫn$y]Z N gx,x;))ֺprqB:wKOEgu^ !˧&-\Y@~}bIRF:3uTP^p|_.='~YT+= JFt|]6~v {xj5%)m"z+/AE U3|kF޿Ώ̽4U#$MdF  Đ21l\Gcq?Y=ܨL!HOnbdǢf^sk4㼘rTlEpc. `BQfPu(1IG_];:~E>_{lJ(|U*PԮ]L6'.t%L&Fq[6gZfv$y;Y!2-]:'\X]`bh#>g&Ba+ F&{Ӷ} ʏA0.I`!.>Ģٴe^ 6,ZY|lP Vkֲ\٪.|ϺO 1low>wt&Jz #-\|1Wb:2ݳZsh&r&R|1U0)a*}L,fF (V bnHKn#u={ECq@Jk<5n 䓋LxM,"pzPNiޢ8^[Qn5S~1g3I} qP>^>yl&tZ̥3 Tƒ+tMN)8Q~cXDz\ 9TlZ+pJ<(2%Y)N= M Ww6?g]p">ucn˦@&xRVquh'%:rfB }=Z[Ɵhٲ"fga%5Q-֖sed3zNp`ZPzP`$UTF{~aFl~. #jl2THD۔9PYiN"HY|#%sYW!K`ؼi?c^&(:tM L IY\\ "vՄ{]x\ΠHAO:X嗂4osEK:f"ch~ڊw㘷)fsAϦPĢ̟RTpIIqY+AL陏Q k5w!}23[`mфrߩoKdj#t2ZF5%4:Pam8{l^Bq`c6ݾ6k;G*#攌QfT&5蔚jL=oF'}JDx+60Q8q!dZ%C)mq07* M,/fEHqZ"MO?@EΨ #)s.\y:!Ř6l&lUچ,t{JFW@^|mR:4vG&ef@ m5asn,2R4)2iY̙8t[A$u~ӟƽየڛoz,h0 3^Hu^">L{QNgNX:`ejm$'p=,ty6crOض:-YW=om\ M&$֤ql=lOFOԑvuv_ mLȹɵ_<"B3j:jq-}V c%?]^o{5 KW)"+3?QdJXBનvh$gw#CgMFkH O \t `j1 p# <]`\] @CӇ= ǀVG곾I!+&j+ 1hte&_E/VRBCV$9sK|6skЇf#N_Z~c*a' D9TH$ܬlŹY'2lӌ] vTp1Zl:;Þ3a6zvRі@@43{5< 6EH.fҞ3\?)̘"4$ffY,HS,kc#l\!ۗ࿄gkus+{Y­?r}X"T0?Zwv`9k!"0I }`k}*5ph`C]D3rؠ!2nMhtx+\b#{Ծ,"C-{xkOȊ$Bz9uy4׿TzY P^kxy [٨$fH*q-@%oZ=b'%XE:puat+Zԍ҄A&vp-P/ Y5 =|MX56q9r' Β@ di6g--䩵_`3kx$_DB#ϼh0P\~+Y P@S=#E xm-x2TaRu@pӽTf5ӆcQ S @xyrHF%C]C{&94g/}'L>5 Rq*+vWU އ;4,g5>f|h(q)q3޴prqV+~'g[4+nZخҟ GrgNB|Ow^/(B[[~HhQ)41gk YZ =A=Z]uwi'o2NF:oLEC\(sK̓dK>|xgEUce 3@vfjg\P8_%d념p҇qֶTTq#g/ڈ*k9*: 裝w1%nmw6yOlD }&o$̓h[Rdhn7&y$O5K'-ĢY[RgKO#JEz/AVqU>~p)z;cyb]:Hg?Fo/jLaIN8OJE9 *8o ndv[~Wt2һhTt^iyxn~GV%͖x4 |ZuƩ `f!o3NBgb.%\L%6c;Sȝ{w*`d ۺ2ʅRN 3SȒ.x8*4ܬ/hdVXtm"@uJ^2 o囙/E9K`"aOnCamE\J..VaR=G=4D6 '"Rl5 %iMKG _LP-Pˣy 3jW5'Z !=,sܼjx[;u͡59ۚ}W F>H) hn*9L1l<>wW)}l}߿ih-D>/)oOy+xbR"IK̾ư1i&Br)YWU n ͇M}6ʄuMa?==fα FG)M{MիQܲ$n&0L(= A]]];1r1]n!ߑ) 3ikK']SB@> oeey[ N*No."[/ۑV)cmk[g/EF̊$pS̓8[N9 ޅc`c .ecELHe@=^R(љDð #mѮx ۚÎe uyQKG YDi~H6x3gU3ggnuQyt+9Jq-'c4j¦ Ў aF_1չŋq3S-X׭3{j;Lf8Zrʊ.s`d̻Gt׈jXw4Swsw,q#`"`,B^ %( g {8C [/q[)YeK~|bgjH {Y {RI,YC:/5̎Z](dJSS5W/b+H&Fw-X̒l߲t@ҌNPߌvݙB⇍3JPR酻ԧQ2`>mw-Ag^!_&2ۥh=ސv˻Rzh{ .cH]h\NɎXmpqʫӴξ8!{QAiMjLY챙hJ$/ X:"Dӂze[ lgk%$ʹ}悳Lq2s)Ѡe>{*ˉ-T|ۿnGAH grni]^b?4{tgR6|FJU^'c!r%4C|Dd1R" 25e"b ӝ?iaB-=k 尬3f0x #rv܁ >AeJ<˒i85gcRDU^{ 6&/׺:(sY\Lid'HRQ/3k F(껲`OF˳UXi>+>b"0;؁ZPoܤ';xPߤRe *D:@FRprRUc+SA@{%r'Cb #qLq|lgV=5KT"ޙV$bayZX͹TJKlz{{;1A/84l&d "4Tk+RS` .՞qg!^pM6\ȱu-(?8pͿ6Td$dNk.g]PWBJzqJ#Vƙ2'%ju;;$њDz7.bC.H%{ QF\B 8LD.bzCAz'Κڂ?YJJNm^w \AܔJOUt#]GkS5h|$S6Z 緁A'd+ԞC/?'!C55GLO|cq^ U#cѺBrނP| ?DP|S/8d"9,=6 ;!eo~3P 3ܞcruQi0M_i8E}*U _NޓbʳƾV 4.Mps0+0\-Udw:ZN-RaP#0 YMO?H4m`-Hse#̱T.:wؒܓcdUM68(cQ$)10~saVgAlٻOI n˅z/$픶'd<9t( {NI^':H&h >?:PSDp&B]o&Qv 3^/q)_e1E&c`-+|tž|o)cIcEΖ  8,EOu?yFt W緧 )`P ҥY_wk*Ek@Ѽ GPQ!&..+A06[۞/9#b ߕmJ_4:$qR҅DJv2Ԅ2qpxN!ȵϜHqJ (VV6 a@HT4x йY_&(6\#nyt S5yDnV X9 "1K/# @ HэloNQrzFgY3ʳ bnZSHkהB.EgfƯ+/@/q~ īdp@ 64;T]tpHnxQ:Sf CsNW[y9]G5'viSf+g`dNxG}أHvGeN}nbc~,;[DH, m)ۂx랓bW/[nEݨSߞ{aN[XUF~;<ڱ}P"xGG TF:O7aωsz#d]G8&Kg Sȫ#.{DrNTK 瘚H sQ[4 9 * [}U؎ޚk vyGӑ.  M%@ym#ѯO*&4(Y+&'Ӗ[vg-~rK.ДqgI W,78b oYFzE15S7.xmy"5fѢnBU_XԓirSrd^:[aҞMkb:PR6FD` KZ m N[g6;4\E#|Ov ZC[sIch}1!l mȩ0Ԅվ2>6': 6:s q{xab(9TXݥdvmáٜn|m=}P&?vKh] b(˼:=gg%ZJL|);zC%glk(+Ihf^{kdiG?e1`hi,3c2%iQ⁋-$C# b]" oQ9]AaN~M yJr%אi=rn(X7>+k* іB ptxf!"V]KlOJX#6U-ncoHR;~O^}ZsXG qMqb7Yޕ/j av,[?ݸyw: BޖimCVrM(IP4P:A ),xͰh!(AO2Jv8VcՍbL cO \uK.kdQ^}01O :ۆY־N53':ޣ5g!UZa{Mj/(!̷Ķ.Fm.KYPWp^܉z$)c>R8έK׎> (w*V$pRy*p{n26NJF: QoJ:AWsf T0oANWxL40>'P}?bV,]An jbʨuq0j0Zcw ﶇud mKRJXΙb)2Fo̓2rdlzC"\HPJ$m/ Ԕ%A_jER<>Fē920xS)FHp!ӽե s#\'X;ҡ+ ]? ~#xsczxo%GdYm.(,Bβ;x^o7B\cC@C f3aA ۻ繍G\5[a&5'\GA] ȥPV\X0-{Lf{0a淪` ]nʽ<ipHvTɺQ),6fq$8&}ȡh R:'坷Ȁ)L޻{(^XSzEqm>v?dwZ\em h 0rDwȎZyYTڻJK:l&ոZoVB~ |`x-!gϸ;/I*1x ~n\!RT 46n5+\+TɰISbNDaekldgܛUG۶6-hd#"sK^M^s*8[9vy';?IU8Τ2XꌎbJ3 }2o5/[Vr?׹1WpzyBC/u3%2y^',ߐ0m-Ŀ9^Y ">ly[NsO[;Rrܮ,aD{hg.'qD9!#;lP??ة僆+HEإ0N7Yß({Z w/]+wGV @&r7+Nmg7cHvnC<g2ʧt6xiUc@} x+rQKX.P*K抜&>q]ϟ^peV̻Q0o4h Eɷ%>+,kxi|t. Qc#Ga|) % },r]\ׯ`'7~ D'*ol&#x}Ɩ%79͸UC"gLD!$;NG(x7kՏG ++Ve%c3R,Jq[mJ21V?k:C- X%Uh)LBkՀx5fkŁS۝Y8:dp~橹WPf;ԸC}Nԓ>/q(E{Pg*2_b^2׳?<r4($8x㉿ G3w(TyIO@pPV!~[b.SF2MbF!Cuzgo~_0/ef֢جg_<RUPe_{6C]4;6*]:7[f~pRLXJ'l 'At$+2힍g (JF!5dTtmsK3kpuriP֚s!I Cei@ӽIҿU:2Mt60E@!Ľl\F!/F>Dp3;H|*p_0s.D) XFYS˿?H[(ۀ6^ P,geoLewbMސɖahKHS}ܧQ[PLoAng5JؘzB( uƸ(}vSʖ5TAQh=.㤽 c3! Zt ?p_NI5uWM@2N˲n(0ڃBԿ@H-_SҥPj,NEhdOlud •@3 oc^wVjFY{_d=ŞKq!G]W꽡oJؼ}Sy wQR_ uԲ*xJsY4iHD2\%6j`CO9+(~T'D֛Mm P,`H'cPf&? TlKvR@*\HϓL,ٳ @/? 6f0"Y!bv Jݦ W+HI-s[U[靬| qNn -k7// .AlJ8Rcj5!k'q9:i%͓S dLBJVߕ۬-+78>ۍ{&<7 C\|x{6%"6%od "d#609ǻSWeaUUr,bOACx [wTWt# Ny5xϡGCC QHu+)\+ ޽.6sy\Ta}2B~l}5xa?JLHNO!Dg ֮'٢-sƢ0tRf)1үz?4,,Wt O`q2N}Lk ]g$ +mu\"y=Ŝћ lmu;!n'\K\tӊ}cAEsڕ;CfK/ٹcyZZzףE8K۫Ҟ$U-ݲ5TEl^GZD_?EPvd0m ֿN9"~jֳ$2h%>GH>HݑH4 n4l[ _a2`_绦@2}fjLPe#`&f{QwO0ZLWf̝(eEn^90 Itk.9K凚/T^*Sşg49<2Y͵pH۩#eo+u;b8⩃)&T;Fœ5K/jH>ƃfw=)T2!_3~m?{"a{gx"X"G2R)nm5Aoӎ=1eؙ,x-*`slf{yOEݢ`KS罕f))tRhߥ&431`Q 2D:y FD^ptwX䑅7b~zr[ZÝM8lBi,G0*IU#@W/E9hrN.5**`Nݳ c"FH:(NnI]"KJC@h95| ]F y>>QkceM( 4Y9qb$ &w.|!}p 0o\f8,@\M=(ĵ,8/pnV_?֞l.1EP-{cPٞuϳ^^?L㟘3+k$89{W\ly˜,)\k <3m[}8LrCztWeOx(-[svf}|'3DH;Nmz(:'l,ET*S]bΤ_Kq8 ?ύq{N|+èZ<-=3(poq{_td>8#W9J 6SmN?  VOc ݢ a+kiO?/j4y5'`nN*э9ad̽ !̅8]g7c HqkaB40b`Cшw˶E X Mv𛏕v $<3tjW|987ԃ$E An% /2 -Nb -a1Om,6WVQ)܈ӵuT.4@ +DZ9'IItrfrqO$D= 9z˾-o.A!Wmم O38Ag*Zt(Y'GR=&Ln [jYh%)+ֻV+ݰ3-}wBd.eTz['RwBL ݨ!+gZ&r5Ep7ڐu.5>sG:h'QKDQS`Û@*,ނ\t@ݼ nd~] ܋0f;{ÊC3-徰T꿨K28|- ]!/x-y^Īn7J[i}p#5 %̄?NlۜMCu3u:)7Wd\Ck*횘d/ p`v f9KIFn;Z]˝BDx wJxǭ$ˇee!=G#v39AIv:"J_’_͞\RQv|.HE9ZZ ę厔` -:c/X)9A{:6+|hS0c/eu%/9ݘ'+L?B<+1n_!#kSHBA?.D6@jcK=Э|M 8ta;Iy|D?TdFybE$%gz0Q" Ĺhm|U@& -}Ɍ{ϚRICOQljkoU[F\kBc!e GH_鯷X{-i#=?m򃊱͗==R&zD;|F\k׬w6Ú*AWDz_2lt)}2Y.>SRVqpq9rX/ۆE8B,mPٰz56O#Z;`D S\Mӣ l?#]ؽE{ 9j Qhr~#x5Qm2,1֌ 0ew\\r&\i. )1ORaIscYQ%v'(r #z֏%ċ4x5C+s&9`uK[soca=sٕa `w5L|R3P+ RMJӄ(,Qu7fe#R1PlBxy},FUOH /:'JV \3>!iO슘( 20:Hq!~1^ aTrvz 'm&&Xw=Ui4hcDۄba; _;腹p-Xi(>yKb` a EkrPֵOS1/y }d+Z1-==OSAch0i3H޳j=`jқ@#L,H.G2q mM]~/W'0I0BT8y锁=!0yX*NK@ĝV'wgcEg]72 0J@->~y@'EsrJSdh FPNܟ(P ҁn1eeh$20Qb׏ƿ}*ӳK̕t7r^)U"!=S sHq`ycҹ)? ё4V\nY &v|2Vq.@e1[ʐ)Woy^sj0&73q~8neq >w ] ZN@Al;X%nPd I uxGQdRcxU[J%r-L:i> pzlۆilBfENΧSʪ[L_]v!ׂ4ϋ^m[m5c/嶭61,eԖuĩ 0vu2.Re/u)%SjIrT 8} Ϩo;}0Snt'URnB$;ůuYvGx)Sa>./"T5FER_򝗺 wNz'5V<,mNS62&^(sAYtg$?p?\ 5ƥ4i̞E:3vaWYzȖ@ݏf7zch-SvWiE1,|?a5{xnE߫^d|;/ZC6ؗ!PyMdؿ' 4٦#_Șk|( {0WcȔmۮxcFFeݓn昍LZ@ʩ!7l?orvXc`* Z均6#kh~ le = J}z7;/_Ȅ@;,Y8-ė.ؗkSGZA|#0.1( ܷVN4m*- .(U(Zo'}(*|7,:B]>zL{DSe MM+B~c >~"遂>BQz[hxF{A{4MaRP6*sL3f|GJv!gc"2OOsnsFY&SbK}ϔT}GDL(tڡ -Ln+Vl 9dQr tNNZZ:wo&T񝲔 PƠħIp3gm߷0\=_H^:z_%-0sVt|.Cf |*s@/x,{ṷDX62Ra|M|s@zF2 &l k@de5^o)I9kD`n\Z qXIXKd™e }@a ղⵏa`تXdكՍ`Ji|r_-Ft! 5~a9hv^߽Nl.DlvArg>&|t^&So ((@{µ?4s,T0U?jh-2 BJ}gZyܧـxP)& ۼvtFLFs.&~_y+D7vJɣ_ ;4䠶9w綥ٚՂRb9}4$_RK6fQθrKyx;5=BqQ꼵WݿǷSl 6zSR-\#N48x^P+2tM6sZ#KOiL<#Et=Ӱ_[v Ќ&1/>"j9<;ʖ~t ׍/GkdKeT+5|V @[Ah㿺 Xܼߕ7! s'܆Q{9YJtiiy?ZݖS/Fʪј$|NDžۏTΌ`ӋrBۨj!%n O 4'5r9/Ŕ{@чfNRsie1çRfF"m V!FHUI"|R M/e6ѣ HդJR ^\]UjOJP .\$@/U?*a֔HM5vϏ_8r6 nAhDELpC7M^XMZ<0:< H$maΉic}θޏk+ B}w>*U#@p/MȅNST)(BYr b^*v/pss(Vn7Ebiy5@5.K~iPl)a @DΣ퓮Vy*w< Xe\#*>iFz'r(x.G9v)!IC`,!C,VflO_H aVthkYOOn$5IHjJw ާe.Ң%~q."G)TNũoytκi3*,alCSifetBipHPlȜ'DcZ"uxl>W|~$?K6fdUZf qA^3pM𽽖r _QD)R|SFl>C!uR΂rld]Ne5k0PvK,l3-DT@'92`9s4 vo+#ZOG}(v >Ϝ^4nQM[oI%d`v2yŸ@f$g܍ӂX$)}S[7tnII=IKQw }ߟ,/3 㢬cI[s$WRXeFp^T-J7I d/_BF "!W&$$Mїg!d:9it s7CXiL]^tntt\GtZ@vAjnCf둪cTZyT#J$L@iGW$b%c4b "㙕u'׷a]W6*81B-ⰞniEoڎC\HIX6}Un: p42X kkL__26-;Pxy ܐy&0m2CR!triZlӝLa9M[Cϗ(%ijpcòV472 \ |h}0hZ}icE?0dCc`yt)hz 73x%ςduCn(;R|[ e|-h1F@36gg4q-R 8@|^P5+0ϓC3S ZV i-%%EboLp'X"M c L5m̌sdstu88Հ 4b rRiGm7@0Iߐ\;8ʤ6İNRmimJ^.Vu V2q-5<;V)bϻ~[ Ua0FX::1-$wc!r:磠^-&@{fCƻ~4.9cic^[#   v%jN/ Y Ax;PjߨNgylYx4 png(cJd]/\Iw9}a/컩vqZ#'y葶NS_Gy-^Q J73t W-9l. Aܖg'KWI`"pnUq氒k~HE Lep,z F0կ4-iqԋc2:5|uM|@-֒Q4RtPôO+h7dÝbIQ풱"( ?{Kb U4gB9ϴ@@yM_97F#]L)dRsl)E9Uބbi ,CYY>%w(psH9Vl 43P[9bn`^vͽgߡJ8)5̬B zAȩDN*XtP|Xw,䦲_{/mK“n֌r(Ӈ?]*1HozmƤvCZNݐ&ǰ=S'fg-TK#8V_F0a Qw fT7L8xaٝˎ$#`w;J6#)|_݅%XHׁiM׈f{q(K`h6,.9ṽ@ZKYiy'@ݓ冋hB#eE=@/4 `MqKc/xɑs^ 2/j!pPSUjhU<^8$1?95d..H' 謸/0e[ܞ-OAly3J.I-]>H܂TH: <]F$ N֗E[w̃wIYrRC/ܖ"K[|u*CnC8&Q+Xކ` /ǂB3=J/߳b}jŴ-JK$d"|BFm>DBD^d~]Mg'2=]Nٷu|N5R OG|45uDIyJL(үm^v̖LQUJ蚼xFzY >ide(d8O2Yw$)U2p=^` ^_.]mhVm #l" _5'u6@!Qц/GX3~$ vy ;Yj0${F3^( )mOsN![wydlƼvU6&xM9p=z_*LH&W ~2"񙦎'hݒ%ΕHnJ< -=r fn+K7(bQ`(U,P j}|RZWUʇt]>,QlnղS7>C ecŁ5<^# Ba|&F9l=I)K 14Pi=ed,gxdf͐AzO'j`%$ 0T\ R>O'99YԄ`7BPH~7 Q3L傚|= ./2bGͰ]>Hd82"ОЧQ#цF O*CcIS1~Xh4 Uyh^QRN= ][q^CmڔrJKmXcvL6GLMx#A8UN'7d_/ؽW/(G7GY(CwBIsYklvt˒{9/kmyp <E|O AdCؿա)?~J XźDUKGPE^I \G˷2VuȢ7 }x#k ̢np@-BI ,KW:)GѱE/$Stz8uԅ9q\(/nO2~$d-dh"i#,2 8CQ|6\{VJOͻ>& ۔,]n%繑"v`Pg7\z `DiFDNW3R{ɗպ2j"F0Mmd k0թ6r1 'x_ywռ +m[`^G36Az2 XQ[kuks::Lp>!0*R(|kHP/b-C|1.өՙP෍k6^xq}Y<ʰulVLka XRd"X4UOoԜ,vpN g\Dr%`?OEDyDO`>K.x~R {ݬ8a,46 m~J(%lOV>35Bz4*˚Ns70G:HT(z);!śS=6&2L,]{k,*ҭ ?#LY9l Nb*Rǩ+R $f`ߓ}g CMOW&. ̓әv lڈ `OŪ^1x}C(TbkOg~sV+Eo9R4RS(60q/V/ FB'`JnI3UC(:0lma2/_Nys1m-.'4Vsv2WAO)Jë3* JE];YEx1 U;?+ͤT&oCp2c|"h.ĉ?K rk{nGRtmpRycg 9_ܚM^a7q4*ɏ퉊/*%xdՓܱk1J> n/+]JԜ wU6Rj͏s_T 4iq!=fc9 09\cW'3uGݚ-@ۯ2]vS`CШ' L.G҂2n,lAM딁׺EqK*̍Ʈ ϋ3ʃ{)]U3+J4(s.jZ-W~ᩯLvH;fGGcX$v8ej3hJ/XQ^m$ޛ-ewf5^#&۷\?Nn̤Dj+p+2AH;s?NCWQ?\Pa`4@xW YysAc,m> WPϜE`V[jSA X mk]Z{%+Q*8K>k`\[sbP!_& 6@pw1i4"br]|yv+dОE>mrߖ:+m<m@G5{3S8@f~dB :@5ו|ڠ$bq߳$n֛ϼech~XeE)]|E$YfEdc{ ֳD򚊼s%7wb}- IyZiejNBM C07]:)po?DpSۭ~M{NPBuli?KtqR @b@{ˍbW{n]akE#hbpGǻ͹%2_ N=:A,I-<)U Pp(K'^t҅naxZ }Dw5+EJݬS>ڳWx^]*`J9tiKS產۽HBe";v朆?RrQ:T/[w%$jŻ|hW6F<%,Y "kB8dԌEM"Yu?1, q斏h9P>T%E=FL" S^&ܵ vl Ш݀ﲂ:| ZBb@*,ąTJ,lAㅷ=I 9}+¢g{lTI%IA10/{NY~ZF9 Cky5ϩ- (V,Ix-H w*B0wmaKbs&J*"g{& PV*DFΰDǾZԹ9":($S. 3P@/ :%b68Q}В6'>L ]jl4 -k6,?'~>TDe46;)C\]uAz=D14v%bn${BPW1fgy18Eţlhho9"Z.HT]ɸ|9'#ma3OINmpYoК\5z&+wQ4/RσO~A9u&|[*b%Q~tP:hM}*]=wM`6 }Ӫm,?[D~o7x<6 C8Tg:3Kx)qPUQo]A?1.B``5C5h| [ſMA\g~udI:RP—Z .F%S9MJ2/KlyΝv]q";ɀÇJFC]) Ab3w"O1pQ'񱆕AH6b@F*&xcQ7;U ,l-A'5^-lU;KVn_2h:bG|DݮYT{Gqڥw vk,SǛs@_\Z=}.,H8\> 7;"c,WEkʧ7i?ߘ =[4Wf _ ibc5Pa0rY:ccQgF  |݃tn^g$F 9 ' 5+]| Ѝz'OWN=. o u*&P7~{.^%ϗk4 ܋F"$\hIW|B2gim> b=&5 h Ag"L[? " _*P3*7p*e0J޻7D'X[YyZmKT-G'0VM>̓pֽLJ %nOqAfQ /ԸzO\BE!p&lfh2{W#{B2ۏ6C)ϣi:8 8~|T^1k+:u3r> s#n7x ,L9d:$1cHLKy=5B+I_x=V|JQsxEE3S1],_?yׯS: dZ u_- 6 Oy c6f!7{<+gĩ" ]ll@zr bL*.}q~R`.LTr_bM>CzH#`œQԟ 5Ms9q=xyrG,sJyyewEl|gJ/#39W5ԡ@V|G<{ y-DcMF"鲗V %绀Ytܱ4R»;'5upztdot|xNäJ,ۼ?F+DuI_qLtOc2@XF(piK}6Œ t{ef,SZ왮9B.MCvƃ*V])vI3+Zp80Ԫ U^2س^}hVB|h-9>]Q1rm&(1Rydry CM2㹅0 + LWdT?Yv2f@#[&eC cbaN,@o$u(Q ˲4vݴ0*N"ʥ6Eס*zj t#h ?K@O7'G9lh= TJy3F32dàؕ@Ѱf 6HSH 8`^O(3drPms^ b"DRһPpݘ;W۪;u A:^l"n.<ӈ꿨S2#L *:RG1[c3gD\Vj&V|%C. ?y/9cy#r[eH63GquyB? ic۹D5Ory#.il$:FKb۔#(-w""Sag6[SzXhFts;&-'ls˽oVծBoEOW 7byGk(wsݦ tHڸ=n¿zdIL ѤB'6n0A eIӤ6\a^)^Y;>W\w/R>Tk9牳H0_LB$yTgƅA0:@)f W^4[5 :I@ڽ7:j sO[13 /z1?C"M^\%?ko"TnT"Q4zdLmMD8fXI0;H`U!VF_ǁM<_sA̽ĩj~sF}sDu:~T:^ؔ $ez..frta8.!b(Ûlv?+^t <4?WFq N\(+~!en +qI}oxOJPTu%ax$Hws? NH%}~$ P[{Ϙ=Axfp=t9fY俙ٴ=Q*?)yMlܽa2TOq;|߯mt͛|@GȨJ'Z4jh{/{׊x߻ɯ7Ș~f~Į+En~$軾>qW'ԄjPÂ_뻝|à eE7_qd8-gjZV'?,3+@,T%޾>{ZO =,F4e{ V-&:)L|.]d$XedZ kK*1_HJJv~- =+ƈ f+3\elJUuJe1Ȗ?Hycr~)?xtte27$g;ݩjܸ.gL|Ƒ $7xGL[z?GGBT*^r=d%iRPSb,c}x*pH/MpPy' !ӿ#䞀W67+?އ.%֐ܭ!yn vDmuW%_s9u aۢ雡0!YпY>+*^Z@A[҂ 㫜FÚ&P. Y  UN8Bө3x AU%÷Q=zEzj76V ĴvXNq޵RiA+2s]yoNM!q^pI^g4sx6%F8cбh:z3 $ϯ$Gdǜ6OlG*}l 5r?jiLo0R6J`z45Hkc]&F~Bnm{scÏ[~ڒd:e{ٞj oV ;n :Rw2f^ ]/?誾X ~K,2!F3fSB"bOW.Egx˺ƎOLݪ\)lYFj)-a}uTCB`߰^*WcVWџ@Pyp|+ Zqbٜz}I71'$38+1\F!#8\_J6ʨewVM?iRh~̒`sstқ0^&(n7L˱Z6օ)DbNVJ&ig|p5G@ЋCH vp/;vurV*p(|[E }j+ЎRU5X7)oRrº~PY i~@šޓ3ƒn f}9Fr9 ,¿fa{K"V$uWu0O]'6\Pv.$пN#5,˖3v_{38WHEK1uȗ3e\Mt2'5ZtX/*}T4&u 0y=m1h|{K NHcmY(J (h8ᴱt>ʈ}:W5mV^nD4v1B5dܠI1,u*sx|֞mm!k1i=wМvKiЙUYHzG<0Ρ <ɽj1ѩ) euQA|z 3QXW;1d6r]+79[eQS\f@}`~F >+bCciɰ :c;x9'- Z1g#nE].s|0bԗAP1ip֚\J%gknPhDqb@ 4"}!;K_~ F2/l))נgi}UUYSÜLw?C*G{p1 -s_D=yPbb53-#уYK ۠j6fFU=Q PGz`/Ԃ=@54h!VT$$OZQM&DA˟H-z_C6d`M#JZ> T'ed*0AH%ks)Zgb2P-͝4U[:ޮ?LBƔ-~!/F"qJ.ʿ2=6:LdC ì{+䁾J1识֒ZZQp {rԮ}6޾I J q%O: HUApCF]H, ^jyߥ@>E]̓1E`'D #"Z7Y${=YnN `|tfc}T“2 Bv{5ԜFlY<&^IJybB՝<P\:Lk_ip»)J6Ɛ:! #VMvy^i7e 8b|Pc,]۷Bf~2F+0EfGhaħX.*[]q = 9E_r%TA͌T[Ze򖠀\ ^d]: t'{׎|zcl5@ل1SCoso E~ d<Ƽm H><لW64 vbLIĽb>Z"Ep[ N]aBo1_|-JP[DB~&47Nve8Lqw2-JAMž5Z9/S|.\x! }G*+]>ò7:D iRsLJV~`% fubkd1gc3vs ,5?Qt5pyyeD;VKt5aȀ;j>Z՘dMB+7sIT3.&U*rok͝%#V$Xe1IYsIXAH>mqSy*)kvzExW׭[3},}jW{hP_4OnڅKi]Fi3K Y-{s``y 4t 7.y I knB?s}[ ,D1Z.,Z(yDT'#\Z8]{Dڕ|h$Ӱ'ʏc}QLzHՔw|` .̙}$7mk1?"!mV ,R2(@Mc*%j} 0]cRg[ΩW>.BiI,M@8dH(JIZh]IwM tc_G(qä]+[VnW|ڊ Մes++9EBl!ՎǓ7AmAh/͘7KlQ1Ba⅔ 3΋JJ?YS7%CoHGzEh~#dgI2lq%xr+Ҝe,ZL5f9n)nW T<:a+Q 6d6Z6\nC46}^R(Nف]$/:uP櫿>p pyg.^-y,hj|.xP jMEהQYR|QܫFEƪ3ctǸMRY+S.ddi_qdQ'1n})q5ӮhNs Ѽ/uVp7Qݧe)\Hpma6k|dD*FXRU5Y&[HҢR÷8Ϟx, ;Bb@dTĐy1A=ww345L6mZAkRveJ`H@VcsjdV.$4m<"1܍!Y?ѮҘ~u5O<i7 k0EXnAVoe$r^zY ii!/z鞖_HrRj#I6>L+<fvڧLhhr#y3D)MCr< [ 1>AK0R8Έ'{<7_ S99\e v Gٞѩli[cMPǣX8J3޻muD!~Cl{"7I|vb:ixd ܜOZ|Q<)hl7SZWk6`4nmCC}4QTI~5c*5j Pي`ne[|WѰ N`V$<1%8X,HG!&2xnQGm$քuH{X䷥ӧhV3$lt_hDu:ѭ vbFJp`0u;ʊ{1^7Z7'C+E5t> oZ'ې#*+_X!N _`TVr~?QKwsmb [W״HG/gE ~T=_m$5p1 #ŖӔI5N7-47'&f !'I.P@ e-Vb?CPxQZeB~A=vU)MDY>Vm'+pu1cT-¹S಼I:G!aO=IWuWxagAQKsRr#7>YgNiiKYըZ! W{?%`k4Xw/R20f揉{u49m(,k j"qb JD[5[ȬRO6Z&|An%v& ?1vIBd;W rFm tkƱUA1%+>1|wi` jr=?+ݞTa~P.;;[نOu.]@ 7j$ pCy D(d/* HS2jg4{ AQVI<'3 NOv.K戊,Va |/GCKW?U`ëې14gk]m|Ӛ&6o# \4G>< xӌqR7DV ┓g+Z@վF+$p IgyNГw <5@ (1I5.H|pk+m6vy=nL"fi!&Ռ5H5Uө0;Uv&|Hͦ0e⿐cd*<X-Wd/Z#g8.cQL6${x& 3DHC'Bm 70<Q x뽊M|>u|Qtoo6ZKSt^JR]w9lVmvPyDN7a;:]xuPJfՅ ,Ί/2ޑә 񝒭YXZlŭm~Lti@pߔ öu8z54n/>=+9erwv.ysY 3I#nv- EH1a=m C"$_8x_pPyv)m ]էJ?n $Y:UVV3ՆUQͮ&؍;z5Ed+$ntu>--%ʯǞ>pֈj(`>>U͵gCIf+ |񤤼'elWkU<ͽB5ky%hzՁyn ܌(QfL[6DG{L0Su\r(5⑼Z#d`7:R\/&ڣJ3.=4<*94Nfqyhl]ۃM: o6߾BhQѿC^D) )"')hDX2hDa+FcȺN "Y'x }yYy#t>  ʐtJ. 0U l79p]rcQ> ;VLVrBEaV3M\ |%6Nq7iQ)L=?NtJ_k>ڛgPlI:3J}%sXT Ǡ/3dѡLpsXƶӖɡcioVX@g ӥ-s" ,mlrhTԝ VV v*.$+kUiP&qXdǕϑ|m#_PFb#.`" ѝ;j]M`CDט ?)4k<yZBK(4C:uRE!.>Q$٤Dww~`qC?5:wo.#î1`jվ:ļڣ[-1} О2`C:o'79jWJD:urͼp=<涞q,͠Z0Jz+<&o bJwT(v,ݕsn-Wq n^TtP[D|UXϨܙ#%$̰JsYctIJF W#/ t 9yףQ艦32Ԇ*nTn%u-\Vtz% zbp+hiHI#rSkY~x$B]G>r q8(2"Jxgm ^. L :hZ!,:ƣFK,k!oI'T;8+ՄXK eM)]hWm=LV1J<&YEG)ljo3?.!ͬE@% ^ڤc$L_.I'Z_@O2[|VX:oII=@ڮNke p)To ,E)` Aⵕ. *>}{.ܫ`1ѫ!Î_.g΂i1K>#^`8ZF=bN-8,$j?g'4VpɠICS6q) *D4Ku\+AǑr**+ 37gѲC./U+^:zqߨ7;4#I#7hZ E@l& !0*Wx]fk/sULB0n?A'ul|8=3V/HZ_:pwka 4BX6ˉM+o~̪4hg_Pzm`ƕRԚoG$:`I5g?w3q2 (mWYXC ~h-]+ )BOWy RFJ@S.aD9ت3E5zzGZd;K[xؙ &bVAZLRd.K.ޅ#enwz+F_.T0X;EAf{Ɩ|.+ dTM9*[hJSScՖ$YEXA?hP|08Ԯ@0K'B!߭z_N^+G)Pïhtkay,d` ʅ seͪEr/-F47M?n\vF*ǂ<z.ޡUeDk,.$N(@$/i8LT`vbNqtOso},WbiCi)rZooZP1ŤW&Q2?OKTz-t,56Q4<_vʽ Zjg&~Js 2i ?d6VTXc &B6H'hL6N4=UuUYj1$ $a[maMA;%'.++mR]{"FgF\? i|x4lj##.xj {LTw,YdV oU"Sk Pr؞83: 13r>F`Z?R8آ ǁu¶ ď"4 VI`d]Ē7[ SRrnO+JeFzw\P'%A`284TZ[dw3\uTSuU[Kӵ&59Wsw  ZE,Ok'h5"HtCAgaL 7E}َuzc":BV0Η<#XL~DbQG%BF rf3[ݐyG^(7\VK-ï`ۚ?" pҳc((V~g&GnrP8 *[g\b[-Tz 4X(E*>=̹j̭Jѓf#ETVl4Ixg6f<3n^w 5)ϩ0FDn~dP^Mu始J{v_j}Zv\™TC<>#T@ڌu6͗Iwqx 7]\w9mn VpѦk~`;">%MOz%j> fvU~GjPq4#\:VnZ4|XKQspK}5%Y6!);u^[mMO6"2b7ܦcF8%@m̯8OMh 7"H_u3U`]ݰs LHIFzTv㚓zW‹M=_ N_x!o;x-RhbLKHQdTllDU-}O݌B[9 ⢈wa.]̄AqI/yءJ_+P"(syg+/={v|9<M_c1/7ѧ BÑ# ھh+bUV$5ТwKfx7gB=I&lQб,Ŝ7"i{i&*tQ\Bp[>uٗB@2I"K?=M+PV s*tJ\g1zy&.%H4zj?a+98z @o\~O<~ V!y&s XH>^I.K\LP<=K k2z(Br G;T."GVitӑNh`};l%5Fr U %F8_Ș;fJ7X5L"Q+jI1*5+wBcw.^ڳMU[f@}/A Q3sA~G݋R~2]gl'iIg.estbR%'rq_?Y^`^ZL֠cp6d}lbT!Sp;86Gg#:M yv&]lqmc#0j7agn/OI~ Ȅ $O^`n},O\oiȥni /5OqkTWoի?jDnvzCd{@1?wz)vfy&]Ŀ2:Mjz*Wy({K=`"/dy5N%Rlj+=y7x߀XSכ?ְ|BKh>&HsxukOnNlZdT@OB-jγCnO- `y^.7y,6 2qюX9ik?`t4Íd!PZO;M]Zw~nO$cwS,Q!))T_O G$EWX](ǽDYCNz&T ԙrvU7pi~+%w4JjVEYCbKØ$`M=w{zw-{;R׽y 0Y1EgFx֌n, zר¥:npWrϯgAFz)Oip(Kv5PQz(v HʦK[!Jbzs|ҏ/TQi1?y![t{qaMRl8 J>9?S5dHyIQbʜ_HaGK:QgK\ԴrȔ촆 ־N) Oe O\ <N4U-qR8Kmd}nr_v](s 9&Zfb'yYn@+0|v"4 VHȍaR3+F>}Y a]Pk*Xpk@9ʰfI+X{`t>7Ď@!1>*l5nimള+ʼnFh@ +O I H{MPOk.2ULl0,/Q{fJ~U=7[v"m%r2XE*Dc0gb$80%SWm9rSFRŒ,*4rI؁5.HKT&xcyQޫۥAO ~z\e*Tds+}]E0Ꮋ4_c./@r (dKhlǣ):p#f<*kKYJ:Ej7x5DLc~cSf<om ccQNńēSV$bSWi5D,w 2Z39BĹ @%rjb/?䶹&E|ƞܨ?tI:Z! Y [d\G9O>UUgS|s6f'm]%[SS6yQnRA8*Of{ t﯈1. @)TbvOҺ-nO9wY6~ w:uCjD)S{S IN6DGEpTˢtsWo.[ JoKZTq1NVAwXc/+)* |DOC` @J"q% ʓfɱ* G.&lSTɋF*8 $=,?*f[۽V$wؙf]oi^EGm^-"ⷆQ#֔ {z@7K+:A|00+{x P3\xW >E|EçVeD,w0PBq5SP(cdc& {ߞY^U[Oe+ txi,#~nJ. _yB!~5h}hD,%dSCHno%?d\Nj:ct@eM(s gjPi\qzԨ`HBA=/)Z9 OvBan1, QBޛޓp"IH1J&L_<:!`B9!o}w "ld1EB{a=I#G'\<0AGoTiZk^:bo5Cv/V*lsY̯ȇ4RNf!+^B;ڮ&WH$|ԁƒ\%iN7{DgYG%*玩kwߗGm%V{b3=2_d+k>;~+qQ9Mۭ*WDXVFBR~zl؂}Xkx% h ^0 3[I>»[oXuBt=ǜ3SSPOu$0gtOߙk9J@ }6XqqE'NjvAMXBÁ-7,|WGDr{lKS5o!oznl|)P *LxU?8=yVT rOpt<si0ZctY:~V.lKlm.w415%IR)kF Gj>*wYlM}H9ڼv6xoḘ"Vj6˘7e %H@fT4v|SG34Y(19\Ͻ<RgRF| q$q>ڣI܎́P*M6-3Iу4wkA%/-qAY^gth@ ] ΍~mlY a)ޫE~3VUlvƅ뾉obыFZ&_").to| iz?L#G}79Wwb-ק G+4Q2$Yvy=KKƻ\ mbu^&*( -'[Ç]a+/|h:m]B3)) @AoZ_.PIqz6(%mu:a hǪ@D0 w>B 'wxS6 5~gIaX)ǍmsFSs4=f?xҸmܞ!ZQ26? ^ON&Qitө W`?fE٠@ gdUE3uZR'H)f: zZ**$QMʼn@YZ8er}"9e@ȖJ.bovh8QQd(ZTW('(,#=$WogߦA=ԖUg?ͬW] |WtA:k0$νB\Nƿp I:74E= Uqc,V mߨVg"rŹ5Zx*d ֯Rt-y2Θ{+ޑ246]Mi[ZS Mktte+Fy [TzJY9*l}J)l~,;qTeFV?DEi1>˚yqt57Gg F0[wQ)a4f+{ G ˥ΏtO\xIac!g q( xL[`_{ELQ-3䕿us a*xPY "MiNq\R#r8*,r O>fUl5 H<zj59*hfx{NjT_7)zZ:՜AdWā/|2]X7nlp)iTJ\@1aDcw-nc](\]OVգha}ĩC!5ƴ(1O=!(pķ.ĉ) On+# CHoGl0hçsØ59@9mi#oOCHΌ}2K?OcfoKcڋQm{Sʎ;%tVJZb'\B:At~ 1;xQ<;Y^V0$&wov'j.4{cS1J @c*P1Uet@>|2g┩g~`=JD=jʂaϢ/pFl;LJ7rUn2\ q;ON}Y4U84xfǞw/iV:B5M6r,A M8R:KHTv 1 ټå{ņ'SzAMn A6n `q]$u~'=L~C0Jl ඼ ? [ 7^*Mv̮Npr{~ն]W\[3^Q퀦fJZd  icՁM!kC-. ?]VR:CDDm3mgE(sO80٥@*[Usc<;aPYGK \I}Id*Қƃ `Z¯)52<Cꂰ,s`Q/|{DMPnեW.]C GNס@Dq\L鍨1JQNZܡ_`7u^\]FHt:4 ,0gщLO;up߳VBVޠeI=ZQ @$H"YX4%Պ^BYOw^)ɇ,l/O`/,Lcg(6FyM˙}4'[!4|UFȟmн g:UHWqc ΋gf_pmGwg?oJSLs=2]y+9% `Yr%|gi}9)?kz]$!fh{.>)4ڷ֜mwzUMϙBULƇۃ̎? y0tM>gCKuO ň"TÆl GTGW\#W9&|ix@nPQwLͿ Wur;|]q0^,e^{]%EwbTP?JSrRS=o&c;C 5P`&?1?G΃%aëL'í72*wjjaMOB6I1%:UaCULj7(cŀi*|v4JĆ,\Ԭ CG-vFe?d$ܞ(;Ol΢/^):W[Z瞍j:TB'\Az x0B ][9EN,0 P2[4GPFK+ @GY("K=,7W>ΩrZBGt\U@$n5'{y[S8ax o]〤РurUeYG s9b!%<LX 7RKFM$U,d]A lGWs^,;\ 0ggܓzN+`@?Y6򊍓"S+%*MGɃwAX2= BqJwGýva֜A!fi%FՒN/|zz!10[P%V> O$ cρj>nqy,i86Wj5--hz4hSGG#m~jhꌍذWQj#DyS*P.u(.^g|j>Sލ6Y8UJ0z/1ZWTײN{6tsNՙET$_##XDvLUˀ5GbT\,¿ISex`l}7ZIXvMVoj+@nZ}īBr qOYG>ɏ$pl@#ġ#)dZzbGt)/ZB)Rv6-ɋbR 6iV7 l`[Avήş%Mr\=ӛɭ=a{W5سfN"`Р.1mFa֔49M\Ca̎X1l\VjnLqm/Rqr}yˮs;]K)Xr+t HIROI=,2/92FbOl0lͺa ^e 7LU8zG<Om᜗}}#WL?fMși}s!NїKa_>9+mUX0t'TvU,")^59,HzO08ԿǞ}Bf|`yc t~~pc _1}]rwBU"Kipjw$2_O".|nW~L.Si]̠̎a*#)ɂq]xQT8N5!sV)!#fҥ(;BOUqacgڦ| =);DWɍء >PqT%WBԩ  zW]qQ3'IHchJ3me{{\O?]8({g>AT!̯a!'ٮ_ X7yE\oo[wJ Z2VV;SU>J#;tk<D/~%SEY\1p6/O[n#kki *b6#B!7HTl9< e*\lk_D JBtlRyāj>0GCpeW^jBY CIG` :>Z[P!ʂMu7؅#{[V/Ps׋ׅu u ;׫rW` > d&#\d~DX %:P(o{x{[sK *].$1]%Po\SJ. _+j$y)Jbw4s]oGw"(&Z5nf79<ޤ :FbtOXA}h*X'cG~|59#:[oapOS? U]iQ_F6UOL 6r#O1υ3~eR~bɄO ژ2]ODst٠6=\Zdo)oG,v Hoj*nfK3ĉ3LкDOĄn,&z [C+|-\t>Vm7 j zV:iC7?7:^HĒwc"|yb3$7<5 lX1y Νy׬ OlB)ɂag/ֵuZ0:E2gU;A۰~A9sbQKɞjOgdRw0T&}4;TB"Z@{~$;p25m;J}^]+~\(Aީ|tS/"]MavLl7r!7Wcy ܬ=>27y:drTAuLz9mh\:sYIlD|@ }fЍ-D<4vFɌenA(z;~_6"E3ffHk)-uOt'J(WqRWN[fpJ@u3ڥ 'Y$ RV+ ){>Krmε_*;UĞ$ a?\a?qǸ٫(aVDZ_HsTioQ_W.U Sd-$a+œmi/V!7^ǜ'^T9Eh25&ӝt z![rU9P w-R0J{x lym2+hR*[ׯ`Y@Oy7AI[P{:2HE&i"jI0Fkqi5Ts;wI1ѳ(i3U R'ĀWVڜ L،C'Jd.IQFy;jOI{1WLP߁V\v[Z'QT؄K)OpQpֆS.-$y!sHv)cQٔz4:.UYTٟ' '$$]Ӆgv썢N0&*K8PG>ȣ$П\"FN7DuӍ~0Q|ڷi7-9pr̘-K4<݈rܝo< N.*!w$pb_)R ULɮU$u{:Fqe# mO(@ٳij92|k>=Mb٤XbB\ CI_>ܓaKSބ>7h P-N>;q 4tm>*z|!$Db5̶@H@u(i.c%Iᄧ=e?y#'Y3!`>db Q:Ӂ4Ͳ)S,J!%/ȏ''Yt?2}Pnf/ӗW^%IxHS?nHXMNDЭ3̟}b@\Dᯡx-l?wWw=^( w}Ql8IBt9LYɦ_#X6 i5QƐ p"m:*4wܝRZD;2v>^Dw,_pIdj7o 2f9(cu91Dh n'M4,Gm GI3HbTL`xD *6QcwCp0D:Oi0} Ff$#t}Bb Ti5zalDߊkusG[MCu; 29>@C(ەiaւY^ ǎ8CFǙ)=G:Ar?<+!0 1BL2|!_woB`^H;=N'ADvt<0lKq ]AUIwn4&q7UHZH;bRS=.)F5D v0/kyF]56'߮Ċ9=jYzP8go2(hi]>؜u|TFrA^AGkQYh:[73JSؽF-6nM6yMsXd>?ߍ"’_#vN(c_vice$>S,$.J6ZT7pRrWcd-l QʳW1\vfld*x8I%ɩ˦“ˇ>w!Ѱth%=*CS68ꑚ'0\{TDn{L#vooƖq 2g$lVYm1* 9.Zk 2 W2.?oX\#h /szכ`-XJεkuA:\Aj〕RV18ЊVGpRbzY(.k>:6I'tFuec`1gƬBpP >tRNL$bT@D)kNkVl=3<[jm 9+[̈́_rK$kj݃jqg.r)uP8 "6=Qڼ;)wis2nb*mq{["@>k !1},l0@ꜭ, C U wΙ)O "کʠxnj'^]_>imqD,Mi\o56S[;H%Srwzyx2 :W9]j!LXH'lr\y=%ytXCuVB5z58.*4%Q*b$ȟ ]IG1 n;I&rq~rt6Ŝ>Ht:].,w = )!~#JdÂ."ބG[/:˞A mZ!-*Ĭ~4a )}/(tҌGW |f[%󻻞Ydo{>6_%I(%%E4 eVFhu=< Rv }0r4=-Ig@%Qi,h,t^p*jz8{ uHGɴDy%%nGW#H|c0| |0@g K$j ?YYMZjzHPY1p%x<6)DteD̴2c;|l#rB#f=MH͔m1{uSuQJ#u.‹7n)3_9)Ik8R˛*\g^16Bȯ&d3Jl|wghIqW׮k}r0jNv\g g1c\􁻭WVU?r5[p?IއI-M}c0$jx1 ೏{px~^rC܀bPcbϦj {m:̣ I~D蔒Ih¢5 53lL&(Dl XQ/_۝'[B eQn `w\_X%}ڔ1~K洨Y?zb'\I 19?Dc8Jl?vDZq]IVo~ha.{ĺecV Gm/^/ *p`|ݶh%*L"(ugu9s[^jT&TrY}>b|}3gk8L:h|Ag+70o2h5_G6?`hO8#0eĊ}y,Jz [WN& "S]nTI\j$3Џc]fhn;z纭fxyDhP;%zS%e/7<@q5S8kԮn#;C>q5eWSW^ea1@Ԧ抅'sWyEش B`P)ÞKwWOy;R=Yŗ W}u cA[Ot0eͪc\|qlT75V)(P73`c׀Rg\wk2 Ĥjadwv/KPe{L-^hS]7}^ۆgE:YצrK%Ѥ &U~ 2 Z$!WE^=Ly)jGj>t=6I 4%6\z &5p ZeOC NOKxH!WN;#)n=}r<ȑB緼_h Y (ڟ&o4kHw))?O[u6y+eT{ fEsݪ{1 LMQw B{-A)|o/UYiC3<G8/bw5*ȧ*aB/X|] |z: kw6]B/,`5g*m'P%F+aI',1̫ܮt |طG19B5mo`'>0b <"-*E0.W~9#ڟqx.v"\Yy&i+UEUֵqB¹OWǥGcCHHfMI:ۥh9eD |Pgq^}ʸZޭX[Yv2a+삁ʖcOv7/dZ,)rQ9a |rGGDdv[)$R\Reh3k4!/Wn3IۖViՄ l*β2ak1K6eg`B\ ѥz|!헤p{6-7\[ Onl͑v(wn`3BZw ,-4:̹;^+GcMNu{| %ᄯX]cXh4-m l`rZuciKdQ¨A'_)A>ޠ3즈;Ƨ(%(g TuHgju(!*3Lv>f DqraMB[6@\g/R^| E40ƝL:w0:@[y?׋ IHNJ>_&}>UWܷD R8$zvaY0JH~3/&I쥏O]Gk/XyOba tv}G;i#&_'&7R&&纆Zm%Ķ%]Tz:*;, zpBSR=ߴ3|ˑ:^P/64ET:|wc,v,>v #]zj.zɸȳKP MD BJI9v3uFQPDၞ8~~vn 8wL:[:8хW(.+nT ܝ2!*}<GʴH9<;6[˖r mT8>eI1\޸U~y7^1$8wD<nE4k9yꨦ|R$(# ߋ\fQ=5^'u00g5Ekd~(|6 S=[80Up/Na,{#H'BLrOԋ9FG+UMLAD̛PnHwIO=$z!!]/r'Pa J ?FIąH!6<8N _򟀝̂5u 1|a:.鄿5GEHL8E"7xxThРRR0K:OMHZs_#8mY$f60v`Ǧ^N )<8tmFF/Pv==B3Y~$n2y"&I.օ%ݫpUE3tWq¯(3oR^JD-Wi+ u:dq .a4~?r5o k32J Օr $õ?c4xV 52fճa40i%~QR*y@- !H[8\fnz9Α>1&# Ի>uym/$G8-hXI[ `EGkjZCZz]*1#d;uQfЧg3b A>2 R;mE1KBahmYѭ\E,g:PKtFeQNn 2 Q~0Կ zRp U|w]mW}p *BN( fq!1.XDL1I+7:33ӶFQWW|x=BN;jح=ɼ3ح\jB'*Gyn'GJy]u" fNqi~X|.Yh7|geSF4P'~ +,[:k_0 <ưJ? @%"zBV}䞟e\i8\ڔRDMP)A_Je](M&`m .LWT);o[MS֢zMm5@cA_z c1cD硍@BP׳T!i`z|8Ad BXwy6 1E?8;I-L$hm]ocR朹 *?f?%PҚMpf՚z҆e}˭{"U:Fc1 #r{{-M! 4 iO ZM?xF,5!H iMi h Q)u7s.rTOML΢#G[N11d\Tt#3).N'TYxs6j>=RRZ1Le!|- gQ}TI.n5<|/ou+}äֹժ+2F)p[t~?yޝޗΙ# +JL|>4?~dU :QU ݋UlW)7=] <ԛFlh'vܵÚ,mx`rk yT]e#i5^^$#`O2© 9 +YܳXI|ڥq6㻘.ޚݐ_I NgH6teXu'h?̦c:KFw rB$HvѡlٶNk|<ݼM]dD~5Azf ۞hX#v/myiΣxMw4m[S){϶hP!S5#F^_d@}X )a8:s=ۉI-Ϫ34biȔWTp-6~29fC(bJ.ALd(o&ga$SV~#6!>9Qw5]Z:C3,#VNK|2C`'@5*jm_(ؚɐQ4}LGk/Bќ On Ob6^3Ni"hxԎ. E-cd{Wn_& >P8Lcd!`a֎Q-ZAd^^pTfaE,ASW.39'VӖ۳c4L s܈ӵޘbQnGd<|0ͱ%i5 2+ WrebֵqT,8=o踎$.'@q&22O@Cpp\%SYĞrJ4XQ*NaG([(diCQw\lهl&L*"וּѧ`%) oG zNYJu8t!*i9[^!a㌐z7&+}Rr"jWcneU >V%9W285Y4Һ[^Kb=GKL rW[W"Œ2B!-.1!J !hf,;K< gc ꑕ9@ \!O~tFPhoxUum)#_LxX :yh*;KM&k/JK„ fѨn`HH2ԅJ3[-Q:.w,"Hm֐"I8^{E2PJIīh-0hm(b8D eSAUؽ4 +: 軯k|F.Q*&dׅ-&gƹQL SpJu/|%j#V^5f )W抣a"RL5QNL\ʒ`r`[÷+_I1g;8Ͳc?J^%7wd{=lbwal"8~[Eۉmv̰#4AisуHر10>U7닻N&DVڽ{mꮄ&!!< ZK'N:gN@Zi{Jb? %CDk.$!Ml F- HX5gm`a pmO~kcU)n(F]X' ^Bcړ7VGVF.VPj; %32 &RZmef%/T`-./2&C- =t@=hؒȱU9[4<.%\)NѮKpE@{ETBIk4_ZNTm{0m pƼ-#vRu)-qZb>3¹ F9=aǜ־lm-9i/7= ?0+r)x!f\LbjadB}5 .6>C$ L(=KGf^rۄs >NucF:d1p@&m=tsn. XMFp"|02Hjg2&3ErŞ$5ȎnJdf1`cUxD8"0 $Q0?r 㕮$%VgzwZ;@bk۾0gUwz΀lnϔ^4 h.y-!{؏ݤu zڔ֟URk蠃x s:aܩFbɕH9NzG9JE< I >FpMG4iúЦ-*ջE-!+2I,&tka~УA*=X5(hMPӯToKllpN<>!JA$B&"6i=i^{@ĉI$U3Exq:+nG2_DA(JÚ[o5qлt?N :O[1Ad c_?F:\,Gv[!&2Yr\=u㋣}F:6UCFHNN}*1ߑ\Ե,$ 1>qɋg̬7c% bOpiFg}7",6 +vʐ5qطU E~!":3_5Mh=pW JmV+t^kx)g6kFi3-Y];s+ /1+};TF nC K`d ԣ fEraZg͋E6@2M-EgZ?c_8> 'si A7:9VKMӮE9L!q:UQkml\7˩irL+mSd+}}`6Ђ?'FIia#TRO޿Pk$@ngiч]9 `UB pdbib0ϋlEo`L Vy(w| xV+="Qd@/z=ĺG5Lx?`qp|Lbn,T2IpǜzaI6 YdHs+o[Zz UX[4Gm+sܸ{D_T^1CnI/-n/ a9\>أI@hGY 靈C;DnP,]^qVGozi3ADa*/y'$J$x,ѢNtז3s@E-SoM!p@ˑo J(rnT4.S,΂ 3dzK*%կu K_kK#H%W@4X3jk@ְf SL!aeN)KE;^%txezl`йhvd)ϬŸg3IHW~ (U=o&x'ՕP jAi)QX4&78%R-gdYcD2ey>^z1iltE)jw!o :07k̤Ao3!X|ԲI: Q IgkfKxlYq}\b)ϑ5C,nL-ct6+[Oejaa#-c'̇kڲr =-ेLkYb|(yS i]鑰67 Wf/"j򡭀XVa'@$| D|BtǢ=C$υC\o 1O넛 ӃR:Onm*@OuFoYb<1*79«QtʢG3rCe1]B۰|_x@%jBmJ=5='WDg_7¾̖RbJϻAX۞>ފXհy 1+J *at\4 IsEO%7xAT!m}§1z'|"@u"A))\EB[iŖ &~nʑ¡:cAW_Q{.[=d0_$^ ,x*g`ɡ]_=E9_}i N#@<,1/O/<5aj;A@ *G> (eE싉LO5-ீ$håe+ДBtu+ %PEy.8u@!OQsmf.p{cQc'>Nw)BP]xn' ͒'VN;dHxuI jiF1 VΦ 3pиoEJ$qzPk?-v1w9R ^%}2ز~gC5S{Ez#XLNxzMa8HvoW2&q~Bẅi0G=m43&o81j  OMcm8M,mRKȹ/9;i+ o%1~Qղ_[־JIfn^ :i"oVp"r;H6@@R1)>xE+RJRkv,zQ#a;;)zM2a+urb Sm#u+B It*|<.b qO3s˰nT>ӭQy8/IvPKⷑ3+=]79[H6_~"z e8e ʕlt&k Hp`n 30kVTIoM7wѣn۞e iٙxbR cS8aqgd Z2SXE Y#/!lW97xٻ>h,D[ҹA&$*F9"";'ئYzwɥm̿% 0;~@ HY#T;n)';35R=ޢTO.(TQqȷ/3+PBpT"oFܭݰ7 eE.lR9$7^ey'-_bR;C*/ HZWMmQ> y%P/k|\jѥC p>4CR~9 X 2R,!KCz`5w#~JZ-U`b5[X?k^1oGjN%S Yq{(W4/K<Ж[|M6Mp4[IqcWxCԃJ|f@Rq`"[v&z4Wΐgz#tsA0/3+7&"C񝙴T{'Q}dY}= 8"BrYڏ}:opB%Oedfdi"l<̤D3)X{hJIo=av N]ᛴj)f3dB=o7sR/!:Du uדiHӯɔS}}:6L#?nD'6.8]: ̕;|]K1;\Sy V꫒^FeI|f~] g6Tq.@~!WmuwiLsbRs[ʹV**8,S v++4w4sh-2 N2cˍ>~PF% NhO ;kFT}E{ʫP1@> N8fSKc*/|K6hJ`ԙSRdX2UGCDc&_oz1 SMO>6=B! jyx^?ۑ@Gѷ_XHDξ!!OaBEk^S%^ɔ_Q#6lIq\? 8 [)$"tΧ-&qe5'O5k6j]Yd|vR|/Fۺ,r %n(Љbp~k ^3f[4:Cgy>_m]Ku8U6$)c1wn%1,]DC'nhĂf 2sY(UiYj^< }YQ =Ak sZS7)hui^ČNb4F) 򾽷UwK:˹}V<+z|n =hW#uGj`^\MaӶn ! v޻T3WEXiw|Ie6εl6Ϳ7R~}q;B.Mmm3d[+C:1/ÄJI =>b<ڞwmSfl=AJ,@\'C;˕Tok rUn\[xX/q.KqD6s9Wץ 1~ ;3dޡHL؜gJN.F7ߧCak۞_m6᧋$dSfwWNQOBf1v8M|Dز=ndiߤyQULMڌW 0lҒ|҈=)v58v]hqޤsKwv:.ݎ-DW<1Wgd=ї2% kbq1QpHHҕUVh:i5!py^Yk,hcʔpzK4(=2tt]hj-P9Gb@&T%4} Wfp__w~?~$(:r%X-0`tƍhvCޒ`_\x7BDxQ)!7Ui2]3l:~n,_1u\ sߛ‧oycf|CЉx/݀_4tDOp\ Y2ǻ(EHԊ+=,7[@|dIg&)Taa鯲 $X ،zNJx2)Gbav,-S/SsZ2%IUD>q"pLs>2 32+5~WY9/Μ5W-^u8Tm[0,^`㟚0-IGNѰdgnH< *#Jұ)Ԥv5;/"yӰ3<ĬE60Z>Ͳ<ȶ@]dAM9h7fgϬ֚G2?~{Bڙh_>!E0Vm)x*^ײ.*K#(Ij;l ,#zס&e u7b55gJ6ZF^`L?7"e|DV@4.iLk8 :;$ izP@Mg|[1U$Y/h8I`PV[gvA`zk*V$mԄO.YNٲJIy+]v|!b7DӤ<}N(Ժ\,'v]sLI LKL:9Yg:MS|/ث`2\wV_-TXC w|Tc?#UX߳Ǎ>R"|ʭVD!7Na3 ̥71]c=L؆ya e ~+~ ίj@,\>|֧ q!w)aQzmCg }Gx@,WvAvMxqVkS֝i9QڄK hO|zx!3DiRkY_w@Ggo+S>Vj@BgɅVJ2RM`VvN$[. \v *TKw!"zpx?2}Fz%̹qM=3SYKk3+aΖN$߰@pPvfL҅QH>XjL't h].`#a§!!BV8FZZvHC-dȰ"OzǦY3͆C44܆GWfɟsJ/V䂁FinOom* P]czFVV'!A~k)٬D-TX ^F񺖦nXD2uAy8o xM|x\&MaPk#rsd2x>A' ?bp!GdRrDsk|b" sQz>7gkp~ޒ:*Jff?bK)mvĉ$vli52$9>G#UWBxk1qʔ}W>Iip}] q3)fŐ>Rm% K8Ѹg0ˡ fyG1*r,NŠ@*r5o76^]KL`aƁ #7#e]15!\\שּׁxv4.\\6W1֘^Md$  ?.v$URq HNPh<1$sL( Ԋ:OF`+[/QϺ6]Y |LyVXH0{3вi^+/-vuzs:';+IЈOFD ΐe^*g,m#,@d]I ,V\{o!%̫kƈ?PA olD׷b^Sc_ >:Vb?GҘUy2[]`TVO{]-_tM`J|u6 ]=,ZlKF.;LW!yOALDᔤԋYzDMވ@Vn=Q}*Ca>sDʸ#Φ2,m>B6jT UYC8\":Ga2nU5&Yr'CQ067[e]V?8-Cn*]є. P5}5w[A0ýd'tl@Ԕ"߭]I¼TXz{]" NGBMU;k^j*R^;l׎=k2* PYB]SǴ!"14n?¯3pͧ#7srkoĩ޸32vcky%$r/nAYPI\ɍSiC.! 5i{G1Am" cG2șg'頺H dۂ5䜌tn$ /( :xҞW[頏hMv×PժH-RCn,؁ZG)fhB !}[p3r(J>9qu_=s+?5Evk#mB!5dr}%xN:lb m,ja8(?u:M"d>#ҫOh{(åD]tsVMGw[i'N#ѻ_UVs r tb]٦p9+FjyD,Yl j wgp4Z;Ք8԰['A~ I~?WsE}dP$\ϫ eV >zk9_ t)^U}?l%l*>dNX b)HGuY:@:g$z^AMo^wPMXXFT>aųIB8J*K`qS`lA-I"C7_r(#:`Akv|,N^;CZ$mUI=["ucT{fCw!̡Pycdz!@e>+UM]+8ԯSqH\;~gelyo"6_:TM bZM@Vzw;\5}hy}R cqa1(I53[JXjj_"߈۽/WG N;wD!hU0(:c<{l2Ƭ|FXu=)/wM:,3XMMmļK,:OKwnBu+J[&Npmpuxvc/: !Kxu?_T~J\%,u*t?X6f`'m_m3NmyD>`|72itwܠ ݡ9hRH^ka5bIn ED;z CmXmNond~tR6hl|h +&-6&/8쑐ő:Wk--]d Z2qU!Zճ _&`Iը?{x$Byjq@_C_;J.+FO .scMԞGb,G RtItq_O3\CN8 i]} %Sֻ:1q;Cע`̨¾e :w?E*UIjd dz6"@hCΎ"^oq:m=2^H*RmÁ;Tx}/j3B̅mȸaW2Ynmrj)ŤHB(S}aQM<쎒'ntyyϗGđMکV 7OG?rp+bXK췾?LU&MO:DIoE!544I۞Uң6ꂌ]# c*XÏb<>.~Di jӻQвo6P ӾhiBШ-AfsPzմ(a= rK{s*S!DWx]G_0@87&4IA% Npy.`4[w6p)JJYc/'݃,W 渡niq/$ll䀋ɐ[ Lb$t&vT#邇][f}O*mT4!8笽'ɘQdn<{}1]VgYPI^k0 iVdI:4ꇱبm}E7Bt&(>E#u2e&zb<,aO''2O'v7GVnD}&+UL}OtLbLtMΧxBG20D|lS-GZ@<+~6Ki}u=ᩃ͋)h3wRz$D4^Bdp'OA5K5+n=dp 5]%;^!p?ADF ? i&ƯU\օ ;,7C84[#[.{g^طÐn4Nv~g" tdr ֓V`Y9 t<& wLYk7Y)6{44QM,XnJ*kj7VKs M[ݙ NoF"E]U l̿q~d-;MAi.$X@>Ѱ>8D5 鍱y{2^nV-2D6ƱxDF:^i! cϷ?ŧG8jt itf ~.5L= E^7%VzV;Iz~5B1yo\RI*Mg ?^$JM_d`ߖr<ش 3;ˋkYuC.=d/t  ˵cS(ЋTLC3O-ble eYTxh&[,Cvׁ6X%f–X|$OX1[@k ̊5* ~8N.֋<fDBA`yKGBPr&3J^WIfsz*Jl4ߔ.}Y@2g+YvZU[f|ǠrB{᫃]bc1 C O6Ga0 &g\)ᬉ%3cn֌:־g (N@9 a[bq$+[x4,~B@Q(};kw#qg k+041FLȚۘutVNZ#{WNJP.Aku#qȬ߶HE-5sۡ BPz}K M{Q Bd13!wN:nN yD1YPW>ߔKRl5yب B]2:;|\m6%ެ!/-0\^PNm:¡%I{m :*f7B)iy?'i@/`G/ p`U隸 QX:ET%k)iy/=y}W4gGCqHŲlsO'K5l;=I cJ\h=Y|4O@/K~om9b> >Rs<#;ZWj[_#$9ƽ++i. ĉ8A#.QHW{驤YeVu'TqZ<ޑM ;5J>CP4G0@Ao7f:^s 'B%z,2Wm[2}n4 @tTYb;!bg_rXCû+K-:DE]IO޹@nڲ[*b/E~kzfaEH^Z\BlRǷ!T=!BC>SϪ*qgc{#W 3J?Fff^|Atg3U/q&D |)`з&cPɯQClQWn&X߫:[s$#btd:O[(X~y<$s Xa x/!"X"Qn(Sf &YWeKC*mu'Ĵ70=<^lMD37·3]sF Ͽ1V V FzIO0op8x\`89QнY!g\<"'?u Um# `r>_~4,OwO0TjCd =h9d~_VA_OtL {F;&ns1LyOJ?)Xb/]|9 p )u_UR!ܯ M)k/8ϙXX󕩼1YN)ǜBԍ\+P!ov#κ*G~XFP2oGۨ6òqk>x.ߊfRO ~bmk7Jwy0Q$M,ٸ߬ Pd0&b?RF+ɿiƋmPm&}d,d6Lm}#6G$DchSi[iF0Z 0E >C{yE(P dm> ]i(T;ItsshrlRD##ۉ}/*ނPF:j[W: lyI`Ob?ԩwAP_(6+a6^5-5֛t;!Mn넱Q R n[@ݯ2Z͏ lwd%S1Z@He7<^u"W_O 7?96|A Q301TU#e =@tQ4'"pI2[Ѯ/U̦m{Dp}u SR!sW$W< -E9e3@`c9ba-]v[A;S3Z3>޻ZK/^ 3gOer΃N3FNvaI<} u\Tfzo7K`A>f,;jRܻShn3Q]bVui8v[i̬R3= #'gQFS𠇄re T䛗?ś_ť7pq㳜,(G^pӚN9Us68ABGɶy H9C/$xM4ZqjQE\9ذ57w[˾5g:(GDA&*GyƆ =ОB>N |}^'k+]-ii& ;7 ޯB=qjKwu4_:7c\+~o]윸GJm2bv7qDvS3XL ;" i>%V2 N̜ 2ߦ>t1;?;| u)$a=!A"=;"B[1r涧{L'h87ga $nȝ*f}p:uu.^#J,NGp"ր-D{ܞ=7pbm_/kXIN")?A9Fh%9ÅhO7,m\?bo=k<LVXo?BG7zGWD2 kG۵ʾuI&ӟżJl`OL],P0 s~ŪH)i|OpL[X&_1`9shЇ33[}RD\&O$U!v*gӿP:>{0`z{g\մDR뀄w#RZ}I'gtGntO$JHw 2U]v\;1:&ߢ|mY7è6ٚ&|ӫ)-+ +SBJ#ؒzV.IF:,{71?zJ ~@[N4H]ԵJ_$5>u z#+iXL۔w6'R흓#8A|'9aDb/΃h;`d:׳w|327MLEߖcHO\} #(1ycbfSv`ӣҙ4e`} !VϑH|*-졚2O"Ƭq*)-ci"Ps9{o }|.D`THyUV#, {7eBQY@i0T'FĬ>ߘz-E]^m)TêSfUNfoV]iO Ǧ7Hy9#0`iW LYGj9ʷ39V0H5k~Z] rbߋDEL9 !d7:Y欓`LxK2,0S5- <>C\ŠPPW'1(X%Ifa\2fJ F7> {# b  y{OnX3[_ `B'6-k퍌 e_qUG+.PIrN)yR=5̸_UE{<q'okV716i [tFɉ~D@v39_w4L.rm9W!j9(L`eIӇ&E -[,Vs85."\Xs8AR]%lq'& Uթ1Ϧ\-sL/!iBr L @7¢)`S7Fn3̉D.?MSh=F|^x|f$urWzm$;j)C'X')"_I*(׏^H{$ե8]D ߝ &d -tba{{,?~M~HP螸k6FU%̧K`tպn"&^^Dfs tY=Fc"QO! Ăh[G؞pKۢTFb[OE vDپA>hQK  y$$,+9N[`8>)VN XNN$ މٙoIi GǥͰQ,pj]׼_?_!jh~:  mj'hM1]a"1\tq[JϙwQT/ `j6.k}psnHwbwW )[SD1b~zj+ŝ.s0ۺ¸YJ%A&9&"NRxNukf\`=`7Ŏp5 GZBƄ8T66\r3fϳJL .P쉭TqBPdl#^KQ{ bךtɭWN=VXľVǁsݥTwRՍ=VqE0N 3@$4f8A8G銬Lp ZKWܧ*|ˣIPt{RFYp䕡Y]P`Gm>FT&018q|ШH>H7bBPmɨ7~=]/[餂k+苍1TNu-WENZk±ȁ@zk-\<21;gV旪M6*vPNhTLYJLCE2 $M9UEZnܐ=D/:Sݳ]X;qILcE F>.o4 P8{A'd0.AB>ݩ W7Wu H BC@h%:/M4:!%1^"t1`tȕ5Ϡ " \]^[pN7m\cB@U﹒rUAaߴWJ?̾T#lM"kHZRf `|>PSZ=1O?G6idlя|8 ۱cɱKDW?]vĺ$Pqɢ,#i2oPؙn6\!|G{lyrI FdzP t*|`bo@g#hI]a}b2d5 M9J"aqjk TL0yc8ڐGi# I, XP;|J>h!Tnj35#K' ^/*hc7ey70#_TvN$4a.0A4B{(I(Vƙ`/K yTVdLy,*(x1JܽP#̩=0K:[Nw~=s㋿;@2м>y YTw cm?|H NB&q#:7W}h۫:Vɳ4YҒphjUĆMUƸ֭3.VJKYPƐqlAD5F ]HY҂o^D b_l).ʾa ^]`k$/Sev:=a2]xB&O8u1d<4U\yEjCۯ% )UtJx/p=oR"{aF:F *Q宥Ar+=TYWYֽI2~T3:yz#5{u5}wKu@睟GkfOzAmO iB2NB a?\$nM%0֯GN]+eLjȆI 6 7J .";6 ˿"lzx1 @=n0$j.Ζ}ZbVjͣ0)˘XL~jv 7| 6a) f V/yl7w2¦& O\]e>] 0JA᩹KsjN&$~eÿ0qm\d1Oz(EssZyB{Va@תYD4qwrN &\avW i> Po4^0#Ef2 ӒXsbc,˽ܥܒ/C_^C)Bع<r̠ .P KIT }[9{yd ' JB]DžAXH{-[ĭgxx*\Ѱ^mkn79$Z#D()tՒG 5 |vJ%9Y]L)ܗ4ģrʌ[|GcZhHZ|;1xM{aS[4.pLpdJ#lxRS}6oP d%kϣ j"Z\9kzhob/Tȃxy NbJp o9<wDUҒDJKY6WȐE5+G lT_¦ O@+Q6Zղ+ٍJWY M*'Y4O; ?zV]ߧ>M|t0;VGi7Brin Z8} v 즞X?ݓs.>%RAy}O"s>fƳSS;Ss%=`6ˬj@GNiElȤ?jE?amQKnώCMÿah{}6{OF2!WS@fBӍVNh@t˝W64!+ӬiB'>>L<{tmN=f_/ FY)NPj8T]4 |&!ԉR]xtf'YTAd d;)JB**G{Ϳ)6uh%Xi`3x3S&A q.rUiDҩުُ ]qDmzj:˚<R IjLɇkpRĎ3mYy9I2n~xV.\ՙ1(8?RLǸX+i=tP¯nOCk7s/|RNVSpfZ H8݁xhK=)Ύ\ooy4N? d"q81y.SwoXrfL̢a#F-K Wt=Jʁ2mDm:Ϩ{>&)B}oOKܴ`^\RqTrF%9N'Jn.7 [HLB44Kb^J HUc]3]4Hy)bGXgb{ /1#cL÷7T7>R c%шbotz"z;a\qKj7nޚ'H?GGU.} $.^jɳp=&}`!blYH÷z)2gY@%$h6}fȬ|p<7)7lVnmz95%^ 2:g ǽ?cqC #V흘K2DY`Mi?yW(o@X}ˈfLzdP\o]T0! *"ecj|trwPȍR#w{%/=FHҩ-2P;=g˚Ȗ%.Ϥa‚R˃yyHܿQ]xq*ȑU$u @g: ^cSD=@_>ehJ]Yٲe, ̏nzȘ1{8)J9*9Rnb9?- (\ {PNFhB6.Ձ,>RF#p zpUiWLl -AnZ?q}Hn΀ALqdLU6 N Ћg<b$n}k͋yL՘ Xy*nGpzC:Uz9wGڢnuN c;p:Ϗ¢-FT3wY Ry%t-dwGpˉ4G6UdҞf38pFIk*bg(i+[3+W&6nnY_>h{)7lHg9)=0 ]9"@cqA?c<\%< WHaWOiGUʴ7ĸMa6K<*(wHm[FaW;<Uf`sI_+Wn)T29U,E6N=e$ Gpջ>-v9X{r\\}6}鲓:]:ؠ\=rm7[)WX$N)gN=*a (Q@%9ͤU0t1pkoPyWA` ̝OQ<.bK'hZДF\j{DZd 9(uGscBdkbhOoO'VEQTwlVn '2]K3G:bL&/:OY *f_p>I>E1,pg5A-6{ͽ]X<654\͋Q͵ńZ96L#-pI4Tݪ5JLŰu_gh7 0]_n=*@|8~p歖쏁QH8|FOsw^EH7-mBUn."<ڑIݾ/@2Z!'̙K(S6FϤ"-#汑`*mC~cJ Cme >' l9ON5n=d͉zA3Ɉp#3LiU0*AZY1KƀЧ)tzb?@ˁVCIG72`bN#ZN94|S&%&%;a:(Lo<EKc5\%y]Mj2hِrE臱VkMG39rRǶXs3P:@Tu{8 u ʤBHBLGΒPyUՋx~oV +,5fK8.ybPd60)ڛ2^;j9|dM8HK /X(BH$#Lܶ8֜'g;"s%T{Lii3ͩG2Ri e{c܄(Tʼn>#"`PazA< $o[7=LxlBƳj#l`9rlTl-۴|Ɖb>dZ9P+=#jX%7;'j E"7w|L_ /[Rqvwo}fB5S~4yT۲h>yzm `A|nS/yX2[*)[YKi 5Fqs8by!$֯"l=hqq;W~Uj"E$(q1%rPʇTQ؜@އMF8!6'V'} }:dzjԅivG^O<@OmSqBGxUt3ԟzUا k)R΍ 8}HؔP5]tJ%=v=!wiˆnEE'o͛j5$jFQR j ]=jDu7u =X^}e]R꿢l pЎdk,vm;F\kdR=pyZ-(%bu\tΣٙgOcK̞V)n*+n3UbtHmrSl _ [~{L`CRfòZGk}QJ0rk>`-^Po&WvoǬSxG*NAT=jՎ$ AEz˝O GڳRTRkhQI$cthoz" SeL9?XK&O#NL~uzOF,S܊̻qVgɃlִ0Ub^ɘܩ%7k7mIt%i"oW7iLbQ8iw,٘<(5BTA8EZǝnicCP$3) ]Fkz fUY;u+_p*ޠ0sIzTBp/Ձ_Oˉf wQd[q$ ouR͉);5tL8Kn;) G0%9- 'ɱh.`ݺ{@ 85" {]4VN*`SɥNZ&Y-ئW2 d B/!'ڜD͡SN2Vt+cwRLWk ()MX 6 cpcH$đ<&Q&ھFv @WC}NJ0ETFQhc1m=ے|Sz|8acd)쏛Q1[)1v}R9ڣU;}Cl*)Vz%wr釗e s^&3R̓R.D4(o ?~喲dː1(8ꢹZ{:hCh rP}B5&?0fII~EGA&ާg0ezQnAzQC [aI/RЧl7>VGb&{њ] R %:%s ϖQڝƻ?xѢ-_>.KgI1~3k"mIA5;  KJ%ӥ;GgwX}TkD ](d 5hM+njNH2 hhoA.*qJ. īMܗnb!A{A >s^ak9Lis+ףe PTar n38!лK6Wjj3Tjñ/qU*of#^1Ӏ}ɾuKr|Lvm#)g87pa2y<ƔgM-Hs]L @EvsY;C 5:wmCQn+6V2>eRV4 ~4aXQ&&$pq,i!zF,l}`uC'ugB>Dk Ղ$ 6\ݾ}D H;LxJ{6rrr:KN"CJI*%F ׋%hĐͥ2sS^>,ɇ =nЩ(6%%{㬯 AKf+'WGn[X5U*.pnHjj0~(mc#: X Eo[+(*x5uIVfqOg~rFv qy,\.&9z)3%" ĂKL%w"`5=eyϚI"NHXƕ֎ p Ș|^4L1n~VrPѠtEJU3*}aqwPR stzumgakh:[G [-%HF,#VJW8¡u@zKd-¬^o5k%oԢ_4$k'/9coh/=0  c`7|:In34C x ѸSV\-@?x!~(B)wۈVMuӎBqأ"Xx JQ/̄<\\yG4* UbKp\pT )%wwi9dH3DIE =X&1`?uŚ[lNH7ϖLRuůuwEݟ/iױMWGiWESxn+dm7I^O+U[ :iI_NUg(l7r+OujG z1MH?, {vb!Q!C9OAÛ VeW3 qiVIS7dU<ߤWw~WL+7cd)DVȺԸ⎓*; #4ӻDbc\/Qv1Z:ڠb'_]s@tSp'GqV(y'&Yx] m(rp<;@p0ƌdžʇʿ+K\8S;Pcd݆ CЀ{3,h\hֆU x?ejI LN;MH*gΰ_t3GvܧOoˋSn[ȞfŸ|uAXmF dVS;D'$2)Lw—7+︌eOW` _U_M7 0>m|ǒ[lL,Rtet7=ͨ:þx|߳l&˜ț͗y 4R'Wt2V8ư#jhko0}irix4^XI?Z[C}rmqc?͉˂) {a w*-ɱ`jU;t . ܐ3klv"x0FunԔM̠DuޕTtD56 " V,-+ ԋH-pG;[NʹWPKW-܊>%Bijt&zB:x8N8->1Q eцsP[;DS^PC}l p^$TQFf 01c5 ㊟b, U[CySǬ}P 2KM4iQBraݥ dqX,Ywju.'n!*@r8[ZЖ[οg~7bUorY7KjR+Н",ըLL̩|#te(flK`YVDJ̊e+>ֵڕơxPƾ jD7|t^F+"\fW4cp>ma("e @"=Kvڻ)` q[ [B/`B؋/ GLoTba8% t, 81`:qo/xw M@R|g쇴 GaNL7{&RF^4 =v";`G#[5W9i$?6~_˕1\/> (pPKZ&:Q  41g+E~\"a*(Z!锨I%H~# TfdE+nwHn {tqʧQ&.*KfHh%DAz~.ޅ1(t;3?jز5osRLhdoH%~4H¦jw.ϠifѥZЈ p*%lɀfGC`eo:$cUp{ ~ j(7N9t IKҲM-!|0o7_7xD*"Z4'N@pj&&Ln?ĬKG 0YPld MrRTIX`ALNukaZ34 Yx'V[V [~%>r )'X>۷Ҡ*DJè)> rB bEN02U5؜0L~sDf˲y=`Q7ikԴV\z(^U-h]D?wѮŒyǃ'Q&C biOnJk'dEtkOפJƲ"Y*^*^EgЌbWq|fW$7V0׊p>#1}֏&$n]ij5Ɣbub&!}ڱ1[W=&mO\ptaN׭%$GC+ B]U#|X"6vf?mM6αZh߽r(()|Kl3~>;CIw f5 EI!0pSynkxvT 7)WxQ@ u@}b- B(p*k/_ֱAKNg_xc)JwM1+ S__bC|ፚˍqh]8([i9}fkzH }qg;Y1cly? ͖]g'Hǡ8aV>~ZG|tB漤Sd]G$=@^2I`4|#p!6__KTNb$1ӂ C:L!b5,||m%c.|ؒ]}.IM RgN\$2KZ`7V :ZkFy|z䙒LBRo\=s!9WRҿKsUZƶ7 7z@ 1(CTX/+5DSZyleM^uϤa,<!y "QXp Zmd?̀P}Jl47[{iLP^mYR؞!)?e)ھMqт2h 7(.F$lh3Ұ&mYJ-HOHF/YL5JC.he@6{I1ğ$ /M*/leR&AV Ż;j-4v-ɼCt.AkQtP{ȩagW?pinOTHė6CCq,YD? MWl V? TK𪏥xgLUEisg͂ruZ Xh@K"J[tf\5ɿ= $yGHzF; QZYvQրVcϥ `w)CH K Ngė|g|ZJ3ABaوHb并ժ.$NYˑ`B >jˡ8Sˁbn,Ixra«(zwYjk&(ÆQ熄4@iSYh0MK+Dͫ.u2h !ϢI˾vVnwL*'6jz u]_"DE#zW_r w>&iWߏ㹓gl9C WB6z9 eɕҳ0%ԫhBheNl^%u}<,cw70H!TcЪDy$77Q|$y FyKģ Nc>o o9&P̡p Hd}W A]WH/kuWsI·iM ) [F*i` a-cDfp)뙰Cu~hRi`^NtiҞVV2^C\P*`BܑIqi }Fg&/C8fbQm2s (gUMgm<"5Ŭ`j?f% }gB>?Џ=5W:Jؽ_BC(<ൣJZlA!{.zw:; OXDzl܄}NӦOe4h֗,aeTfâa; ǷBfm? ػ8sMڳ  P [T$m)$>8hicpDR֚+F%d[ԆƁ߈h. *N ft ִUA4I``>ʻVՆ-7]rNY7%f03'SՆe3 ~^X0hvy=6ɿAz5XDz׏HJ Ȯmu.Wsfa[/ a3fn[̭Ř,+ءh8%FVJٌ>|pǰ/~f3 7 ^^bX4*Q2V1AT հQeCg !8ֿ[.o/E'@b7mNVW8U81hH%aq]ꇢ V+@[K>XWL7aB~IMC3}{kj e,d wvQ:Lh͟'UrF aH;<"5#Jv8csA{bI :8sJh5sG1d0Ɲo ~gpJglih:%5 ¢h_:96YGk:(5sg\r]MbozUn̚t+AD 8QNR+kEdQ"/$pmˏ!e{zalՒUD4I:Ԭ,cÑ)^[Ϯ\Ąc~q4nDPD & zO~-& cu3yJs@n87V Ҭg2P{Bno)\Q·rg$}sc]Ş9V~cdNVuZI€cfső׌Z@"2qLo pcF,6+*f/p44>Q\Y)Sb2h\\%_Ҩ>nCu~OTcA"hS0EN: V((M9h֯P7V9hH ǍTΛ2”vVZ`W~+rprq\nX:0K.(GƟ9tĐ6CVvͻ,-UctՃNAꭂh5tLtϏEK  -0M(t墢˱FwȣtP;Û_GH>;b*c؆ӸzϿm?}~总l1{PAM1&@hnj+@qEIf a{w # :Ι1;:li@lt3@ց,kQ}*]ppִԆۑ9cg_ OB3Q@lyf@ʳ|` \sJoq xG} hLV=AQD@PENk}!mq\܅ AKH"A|( iiq7(hD5 RqV7,mo<0p{Q< ndu3,6N˷S?A(61~rf"PT?4O7oh/N# aI~CY/8&lH*[2X|KDn)6;Nאѭ@!)Tn8?4xXA(T̷TD"g-'5jq$Qeԋp[!<SlR=G8e{dRU6(_EVxp"a޾#OK%U=c >m u B{lF(]KYI5F0fNTZXJA ^U {2X4GIk탁NhKH<%(i kjϚzj)_MG9o'c~,1o}5}h.Z2NcZ`{0>Bu'p x"=xVldksCyp=9HwK?yy ~ ґRwq9ه#Lu)iwߤhe)°~83Op5Y(#2baPT<&ʓU|Z ִK!fCW 9mN( |8Ⱥxߥb̗uK,<(8"}B<#*`eay^64t(/Y~.!QN䄢(jLz. 7zE_ͭv[jW(5VBD-B[eA⟠QƝGo_h?\"jz4z[Pѭ6vuj=~fqN1h2!ZYYR̮P{2ܒxL?:D)%91f$^5J RvV@GP(zptua=$_t81v \Cn>@}^czhnɼUoP(xlR=gT)8kqJDIMWTbbXuefaý]FiDD28N}07Jː/>͐(ٷcA-<1r7)Z/bgplJ>./Nl4'+ M3Jj l`6!_LacL|C(hS61Ϸ+Ʊz=G`GclUpQ}Gt#3†%FBG9rp\\Y4N' E0v73s6vHnHJ_B( bi , َfJq}+&0&UtVl(X:ǻD< &A!"hQm0kxePYXZ] +kM*£/{tOc hQAL! %?~N*kJ-|M6Mϕg:}W V)7-U^՝h#_t ]ؒ@jY?[Z޲1tN/?U{! ăL'NcG LY$#Eˉ8̬]ޘigѴN 2:0 cW.'a^2q9HPb&kZ.%XmRFp, ]S\rKJmIK--7&GG8 ,-Oq-WK;O3p}8΢z?z[KDoib_wI0}$ؑ4Z{?=̱|?+:oUP⠖۠BL2DK$}lkkA~9O1/':yѭ !ӲxۍՒ'.==S¨ݨ>mW TI> laiûyzBK<2Cʚ~nPT2iay) gȧ `:Yтp?iT9+Ra<0Lv T ~y= qκuF<1r=+hk0f2{CZT5M 3Hv7p.pQ Dchm%t`O%AXz=CcfVWJB;a@\зֹWLWj4`rIC?DQRJ$4_aKյI_:0Rlr Q>1f* a( G6T fc'5j}=D};F⁸Hdmae2Wbv#xl༿o~Z|bu y3u#B +?)(SD4'4yזzh9jl~Q u3G!varĨ 5W\ >uEB־ts& q}#۾-Db7Xy_ȣCb˻f_|,Un@6>(/ɀ)aF0ІG2MĒKxKEGE~^.ͅGРС aX.XR!0 9gj5OgM7yODň B7au`SP Lm[t!Ɍ?w̟1膭$i~ nC1,[?쾈)7P[(-1ht^c=$Ώڙ⎛4pDl~LA}Y6NGjEDqgٙI LWR'y3Rmr&+~#X\mPĢ*+=uP_%3Nt8tA핑UVy8r݈B9{thw> @3ƺ!<^rQJLJS:yOYd5a=إ# ZӲƢ4A:Gt0$dI}:$Ak!m8a>Fp kM/М1lj߉+OG=OA3* ^803M@h^%x|:, rzl$% Y,έf S~(-Zi6!p`]3sRGh6s<Ϩttvh+Fy8ҼU`9'8J'!pl$w)ɚ%$ ϧ?,Hi(ig'grf÷HZ&ljҕ @(췩vsg8f| hrĔy-LVѐ1C 0tzk+~1ȗ,gJ-EIYwRs`Gka=Y5Sr|88tz8nefr#@rؑTfT/} &Vi՝k U'8N`ԟMg{r!G'TB6۾UB7mS _dozvG.5ƨoC xҼ_>#hSU g:YSvMI :7fnQjc\[%?b%2#5k-=`8xV+x #p03MT7eo Ҙ,}t{!2&^Hq" 㡃o60PdIu;rtKX0NǮXS}U=vc8:ŀԠa5z刕i4,kIcPًV=?aRf7bur͠o/ܯf_ZmI0h T`{^_W\ {˞3VB -ܣR"14V&e0/ޣݧQq1?¯ UGrj@7c- !K؎xI,k}bTgZJ5bȱG!2TjUrDζwIZv^RHBh3r/9ҬB 4U ;òrfn]`H8qbv?dڃ57oyQisn4yI9n/mj(ᨤs 21AGk{-8vHtey>rrz;G+A8/clǎguh޴m:CK?o"q]Rw}S؀O=뤗 +J[9_dL͸4ٽ!>\Oĭ&eȳ B[B)&:LZvy%ފ~Ik0nlm^=a -U.ѺGh~匽Сۍ ui 3:$r%,t-vx?qcNM) w(`pl0F{Ae936`dwCb_!If]1lD,XWmϚƲ,NwHഩ&lf9& .h3ƶ%z_(w9PE J#,np36'^Zn.Qe ؖYVkPqP&+ԌwSj5as8&Ƞ5^u_3 p{VI 9&;(Zw=L{~nu ,&FVo΢`̝gCA*fkMR}'Q=mnj"|e,D3eM_= y^]WikVzu!ҪPDqZO߃ \DYvD(P\(!g. \>-,W$^HR6phͫ dzjlڀiǘ:f52(vmAkT)1S ^6>mHIm#6iQ5ԬMgUANJ@^?7LPW1Ud گ9" Iڛ JUh!PbmN0gz̼)黗k?oޠ}=sk4jICSuO&`ɞB+dZ cY&iQ(HҴ( Cl=~uAaQŃQ f&`,g/nS5*7}m%3׺~Ԯ67)0gL_h5pkĝΙf@eH} Cn8 s(R!fYER}4~;%bi.v>i Rᴈ Z-G 71D( <3/;&6eTgƬ[Q(L]n#T/;;{ҿ,88 ?0p8V]=RCWE$f_(H6q,>-_3Lg},!rojf%+ "kzf4m`ޑ(l=,M$7y_*=7&9mŘRɆs9+zjz 8777 oAWy&G£;íFT!9bOB^6&{xΫ/ u H(4S NAz2`R.tҩϭ%2: jpTaIt8v&Ù"'! U%BHLN~0;䮪a T-> URf#^wb=XX\GG `W <@(6ȱW]-Eq}ek&s4,HoޒNy %dpvOTs}(0I\.9P}7~ӌ?>|ХcXGHK~&xԺ  x4*-5KƩ-R4Jiq& V70]T~~7ϗHɞk$K.l4(+}yvAhyAYsmO+ <[w-# PFOXH7xW(̲nx#5!VOHG#=#4,`=S Mc~c3>HVGFVVmӖyn:Ǭ'7^j 0y@!96>}<GGĨpr!Rfɇ9 .K4v~Zf@mTP]Tcz}~) MwNA/-1,7ܱżmaY_ޝV״[>s}pÓViT64%0ܽnpPC/. + lDeHә쉖+7.aOHRxJ5;_G[ۤ/ <NDg_/JyvúG_J1E,tH-`2گ@L2jdT-zgoAX7I7~T tv.( 4X{9|$RZ}hhAkw`mW"u$qڽ_% cbl uW!w˩P 'RzV,\Cd ){CVZqTyXSU ڲԛH,+)~VBTc,u/ihW~1 U.[7 @̇:Gȹ&5$yg*kL[2Wg;γs*c0t|:d±$MRG/ P3gGGfbVRѬ*Q_Tfy0vLPī9Kjk 6b׹ r1ƆP9%rU*A,j YPrCǑ+f=ZBSM͍GƒD6Gר@CB0xˠ%&d5pC9dwX-JC?hGmmnUmDhZM@HWJ\Ria=aOTfQB7f]y+g~Z~ AFA!?Ƿ2ۭCm;wb' OfIY 9 p(ߵߛ{c'U:8 'hr=™8Lq40j!lbĕĜ0kD*NG0vChE$]P *FL6ԗ[SjD}_ jTQ̼Vs-PYPೖ-֛q 2jsd>-I>I!Uw-;d%,)E g~Cx4ÁFJ*5pBRk qwbbAy58bwH s~rf7\{4n5L!'jAoC T0o {"]:5c*!}yVOAz^ ߟ( lBhi: ""LcaQ85Zx~]PAL'YZQ)Z69t͘8UCfSz2SX\1*WmܭT{ oE*tLΪ) NR BB~zܖ:DFgC=Z%0fGDX~MFdbFm#Q t.B5J=t5#/\jM&\1U3ڳVh1X&$#J;/^ak>KS1g;!^~)XGNc,l]ʱF}vdq82 QB9}ĭF)Tp?n}SRxXD홌 &YY0![cTF$w[\AYrνF "H*cl(1!-ƽ5WPB,43XNcn}Tcp^]Zc'%Nő"vTew E_YU%5~7$x!y)%vT@8K3R4' frZa*J/qU;EM-=t[QԚlțlFԜ *K"Fsw֋>Zmd+!GtHp0574#\U"rn+7 PM>5s,llTFCr`COM#30ޯ@L{νJiO,6 WͺP6OVc:Ti |k I}x5VӹgmaWڨsͫ}1&7X!g?SI57g]PlϮbQFk­Zwzjl⫽hatbh?p]\n"RPōZ=,?wJwU1ΟR ]6eEՃثhhO1\6-To:T7 6+1.e%-rg jNKJ{OvPf""55 N6tMM2 ժlDi^4OUs( Zq}ř ( }>%ٜ B/BϹn _'e|CV#5c?\qܰJxm>}a\x~|M}6MK.S(L:i-n"<)\]LH'_MP֔ns5v--

Wa 4wpKb`ِ@ȗ! &25tF-n dI 9y2f$76ޣ_H])\!QKV~ k=x"Ƿ -~1WҨg{O0~+gN% T6שBהJ߷1@E fw_zƶAf}gRDf57BϞ.n>J?k?fEd#rk2(tq;|=x)'#^uyFM ++e3)ؠcv[BFM1ݵ1p!1,ly6>@Ge_"-("v=g+ ӻU}2i2NegӄZvZQq r$ }dVܛqfvuPz}PҗtI‘oIXzDtSH8916݌sfA:afZ HA!C>3|ܞTR]*uja<5Czf*}rs&KTޠ%zQ=`[9$xRFyf!qHOY[` BJ!:_$lHIUOpFo,%CJ['&xZZbp^b)eM01w4T9{u6}:i0 en`s;? dh0,_V0rO^%ZRqg`T(1I )?\*~ s1{z`Fp:j L=( ukε$CʏżYk0oLńMa-$06trE ĝ~.`*2H掬xSFfekmK IJ"Py3~;80%?]9qԳ,)ىe\ްaQn²(JˣӪnxkf1YEH 3]c{ݜ%@]g|SH13'g{ ?3p#&6_y;14"1sԯ>F ;sqe_3ml::Y< k}(,gaCdU$ g\~^I5 sF vfA=)q&^vo&uCǚuAЗ 8yIK0d__NypD0xfEdgO'^xQ^0Yx$S7fvɒeKURU>Kps5]&'is1!Lu *8.u]Lf9RCjHA]^:p3(8L-]φ5l'poT3+zt\%~VfђmCDST ?1[m/)kKe:ub ~&,s=ӗna2 }ƾ'mM5qv ʟRTԓKInѩ{VВdJ>©.߅ $.|3"`Gi"!Zƈ{kX x"G|תWiJL%<51/TF$Sn(2s_zt9d-.%:>]Ӕ"OD[3joGG'O@2K݄Hި^: (tfRDhuY#62\b7)*?,v'_tfj' WˑXc!:ѯNJԻ[W<o $brj}I)5, ~cn^)*RE6vbHrZ*xROr do^IUvJi]g@xl okh)RU-O:7As&x=讳6o^C6ÿ8`e2Hs-6 bKc>q6X"̱_zRkikuwHB'KjPr)8 8D븃Z >"0 Tk"΁| iinq }B_ a1^>F~!s&Cfhi:3q7t2\rb,*zenƕETu޼* "]8vzdgJӮ||14цl /{W}D:v9MNk^$}' W& "d#Ǫ@ o;S |६v=뮢⟻q-|*F[MWC GuHGZ<2}N5qn"#Qu2![8#^_%8"oݛ؛:*)TĜ[31>䯽eWԕ[$mEO9R;:p$eT8+<rmur=#zZV:q-MVS}rU>9ViIGfض};Nq|;d h_Lӟny δXtuT) _氶y_ռsMrt,YL,WSOQf> dgd-v$r .b^?`G"v6Y%6!l<ȧ]Ƿ9ibO,{.(n,@56p[2$,cDU$rv\ohV7 J*TXiaeȿn2_Bt(B;geJ=l9xnw;P1 ;ta[}5dLm:P< h+݅O==p2Sj.ZBZo[׾S[iP6Wh\ w,ޛׯ~8@hgǂtQT)ROV~{B@𺜛z$I(jZ9njdlpү>w5y;t(H$NI;G\3(`] 3"V56Լ #S ǒ2*3v>i`˸-GQm"m-%+# 0z2اV 0;вnW q}Ʈ] 8L<}GC*8Y3~=( OFaSe|40C@fѹ G&3YS@p qVΘh~)l)nUhH#f)R|K4# D8fMtc{1S'"b:U$K1v R薥ZM!lHϽp~l* %W{.A"Mʽk6x̷렕O%. +m/~wBe`lZ[LmG ز_,E)Aar[4V!~"|']RsgNOYK:[3|2.uawͅ*c\WT rxqSQŚ\![SopTtiC JZC)#F: t_@K(Yt:k﬩Ơ 5X (DK qkW(Y,cq3j#$Ac>Wdu_ok@L*SA]0{EKDH'BH=f;ID ;;'%w /aY]Q6CԒ:YSٵB] {|Jugm0@꯽*Ӝпk3Zh\ w,! ֍HU8N #*ldW$D {v 0DE< (?} r2㹆U\P/e>Z4cϓΨ5F|b,[u!cD)OQ@ӊ &#/lD,7t"KGj.'@yI3wc=7P=WeJk0:gԍ)Hi [<sP(.MHT&o[Tb%&en`30rBZ8(- Ҽ]iCnDgr3Apdžt7ͱ;,SA@ԟʶs{xVTN|ZRؤa<[## GK v30M;b4!`>V9 &\SP%`aM8 n @Kle%lAp$/+kحpёc$#GI7.ښ]*釭ʖ/zv́ 3zIhZ{awsᰞ* DDdkKR#U‹Qtr]dLC2CU&at%]Ct 5)B@ZLJ+7wxf?/f O5/"}IaL̟!,!N'u:㘲G+_5@mJSO#/}cJ$vQs|40ɽ*׊4j)$'%$+D A(lHmjg`)e;\oJcDxb _cF>E@-?yE"_k|x,܏b:jqx7JvpHw[>EM^B.65&4V!<>XR/83Cӛ-$:')ꗡQzNbB{8O% ~&0QQn(iNq\J4/X?@TV(!P5 wd#\ 5$B g0?3S6`Oh3u$3Ar>$fIm/ M1F:F3JnJO-7x, 'Ao;?>ѐGa\CM5sAB]eUFF^\`xIB]u|%"Xǒ}{<% ,;lu| o֟ .҅{7U$2#^bm0"WwAаi*GKvhjk Dž 6vJ.u >hs\q:{H (J6;F#E17qY𰯬Qo| DAF5,Gh(Ϟyl9YD='#q%r WK6csb++X%_8Y1Fqb)Hɲ8Pm]WD1^kĒ Uٸ4hM*RF at7"# ݮx0Nz,65@G?N'2;[hF+/؆_ņ|F׮G3 ]!Pg()ؑ D8(iL9._OլS8S%˽Ve rNp[$_\\Jة9e T峆i0h0bӭ=59z<;<桕OvP5(!'sY規B: MY>}{c65c);K'Ng!J;$ՒQyhI}HSmGrhj78+aho$ f'mfX HB1QKv2w}>=JRCG%iMSVPt㥓1y#HMii(dEHAPL#)f TX?}iw,ի179ک#y!/?jDb:1h[k̴+TiirRd7ŝjaи.7;X YŇLT߼= dvUíy\~׃ xy}8.|kz˒AUbBCG" b`ChwӒ}ft ͒:qďT}8 _DjuyٺqgLy!NDG-xO Oǫ\5+Wں@HNAb 폛lwqƮp:]$Q~x C..3e[4<49X-n0GβQn1j_۶900<,>`FWD ",*w~P6b{ƒu˧\_iv7$Ő?*ajJjӀ9*vS])IM_?Gz5S6KU⃄{vJ-+XNYG9(]+Ýo$ #_)A@ˈ ; ߓ\F<62`S5G> uab7^ n4cW9yRz/U>$`,ISMߞ+aҩ5}ԫœ;:ux=QɈ;&^9渵 c-]kdEEnGYrQPM0d&CNa>rrJcpDaGG~ 6h;W%3ݭ)*lxB7B'vOT9!͇0xVs%>{ѥ#b= 0U;>axZU8ϰ~F=ooAwךAlL9SGhӱ1~ |zGAc9g4uc<7bsAήY|BONA:ejX X$`"97`˫٘&dTg7ɃjKc}}6O{% Sx\9{coEROA-[^X8_`TqoTCpLPLz<~~~J ⵤ TJ3ݡ5{NJ:.!<31<T0=6 -/؝dԁb|b,{v@N(r, *-,E. er٠岰ew'&€AG=wja‡KV+H=1nԊG2 `_Ĥ(ShiWT6SY.+yE8? #1j0z[rC'r寖DڰpN4B."4SHf 8P*."m4N.|Jzi).E=d3F wX@wA:G]rBb2QEYO+Yd$qrނDi]6vy[ :ʃJZ n& .ԚPbFJ5Aw2#̏]ئ\'q ťJjlFU%(4!Kal[)%"ClxIx!uI t6Y͊x#-C| ~ﲂ3V3+ӄ]xS7yʽ:yB!,f2"vQǢ`QKPNs[NςwOf0>e_^OKbYn$V6C"8Df@(bÃT&Q1#_5JҢoNRrq ePDdE=_"Az@mpPP$%@2-Kq1B~&}`w{(s!ѸHtÑjڒn#lX Y2"Dž|K7y.Urn~{z\os98rTzEى,DlY &UtfnHi OJ*zoiKzP6VfV V7:hiī y)J@=6ǔh= @Fr"m_s-QHTKs=^4T} k56 p##tZPkU.fAY5ٶB~γya+-!:O()=?aF Km_z9B?c\P ;`FPZ}?~в*] /h1v:]z*d9TUcÄdow;*p^SPֵ|[Oo_Z7I^_E6K َww8e)%p>|R|D{ k#2)!jkpDYۖ~.jutFA7s\}%,Eb{hEu?c<j]LQeLc*T{(K'Q;st52jރ 0X/=jկѨ%LydW6о }Cøo XPOe撢}s!JJ+3^EWЧ!&ƄjWL ۾%v!C5 DLXv.m,HzQ_e8NogJY6:00/s zlaηÜD K6 wSԒL@k{2svZ󵒺׍$[y E&ٿhzAۗ2`i6I cNײbm1 k\w8 -ߎ".72Ѐ2v̈́5 GN5s'(m)&P;+h̬dηsO}-@#sTu^y-O<~-vcUV{*)NueP%<dД:3 ,h.Xpmd^`]¦7j:0UvT=2"^4Dk5N1 ':?M /;6 5@3(oa%`f>ËA#fQ tv3 0+PO,w^ tw'o果.葤yUg>(OUٜec\hn_qBmL~jVqhAe=h^{AC3k!BDtpqkb1LSW9f3nE·]. (Y _H{n1w녈i+j+ƾQ8>p3#"pF"0/Ѫ\ӳ7ی\˧yN4f3`kZ$wewLjp+,*v!zk:^vX͘eyh́x (u%onGRCy\egM<]7Eqf:1* eke5obςv<dPt_%ht+|tG?m eyHςE:JTKJy(/p qƮT"ᑛW[ݦ: M%*?OlL A_S7BwP`J 'hf[O[ϱkLhTMEINGGwۓUS*ܡǯE-\BpT@@&$*f䙞ɾ}J]q^?Ia^zxY9cMi;39:?uᶷ1o$rRi0P7NKs>e֡LLPK-Ql$YwԆjp\YtկEɑKBm}O*^N(ѻ# p=KX!ƒ^©GXdIqfi|.N[i@b Ws8O*gqk@4kg ˺D6܈ 6bj=jP*c$mشCbPlQX5>Ppg*t6q7_IG=Fom3_ C9лӿbqQev ί${2/2o&1i_~+H$-6p ߂ʜ 67enaEOOUTi]fSDq+ew|:f(- ~ +pr&P!A9i{yXdY>@g[Heb9룠NE3ʼn<؅:h_D 5R@58[e/εz76; KϝL[gKٚܚP nD '_K6\ZkKDn뱻\* Kg22l/D"YVٯ 27(Yi;f)@F.H5C)* jͬ-z8HV:dlRiĘoPP'00X#huV|C@p7q:C禅{`ƐX VѰ)GĚvm&TJ2k!uaӢwWw2&5ykhy9UlO6:cΌ攗C8 /Gb4*$ahqEz^ %X}SqT#>кh}fTH>=BA ػw9EyGtN})_-| OX|76oСK/0?yIL^eqe,2 xN5pɿsbǞg io7? +[7i2Xxp]5ljb\_;R3*mFˮGA]Ȳ7W'R]:+b+Dn=6')3n <r'ϯ #S,thD;nFVSobUX[f=CTd]PTBBjtsDMm,I쬞D50:x;ώ i-NId D(' ܋'vtΔV#akLϙ]AjFm&Liw"q}%J;ZHe/*Tivn՞D_Pހ;. O+fkٝΆ, ^bWg$w`: TM'ZJKv~̮whgd"+r̹pmBQ+]S,9ܿ ;{a,ZJ!ze#e?Oֿ;d ;qØ/$uCBt[Ro6\=؋s%]mvJ|oa`%m:~xq-x4J+B?gCH # o u.|+J4 ɬ(kVkV"`8.Nȸݺ`N_q6ChXhz!9]F2#yI1bxd|nɪ*b\qB}WG}Qy}bXL^"CmL1EM[+@A&fc a `5.41H5r 淯*x5Voc((neD>0E-cT{%^0Yx̥"çIxzюIT*Be+$mU>I@C,Iq} ArSnG!C.2^W"J5Xu& r8ir/{̖'."OlTASE DTKĆRk4!0R`0@p ||r\59Xju 8@1AH&NlUEɟ"zr^Lmd$sKu#Ĕ WDEle gG`bHD5d:{3e%wDw;<x`jY*)-64QްB5^rI 2+1Id)tUq A@=hڔW{H.'*>2$6ƳP}uvʺ3(kxY*mb:.ɾ. 5~N*Lxߨ[H]y!C EjobFG9~E|єXTl/ M9ujS|AU]~9[9'o46Q Ꟑ$ 4F};?K5BA=œ7W,{;,p}+WQ?k8;N]E¶yϦ>VdIs(ZPk*hSw@ 0͌"]̢FkM%w<(Wn!%f` tCO۳o m4y24_~oQ@U'" c.9HA*Ӟ3ZFY!v0uӯHI9uK-#@{7Lg߭NmED]yHH9K]5G:|??=72aS5n*kWzͽ&v C ώ0ĩʏ?-ô-+j22;[Cl*x>v2ClS4r3V.$~5F"3Kb:ƄTTPȴ/[d@BC8Lc&m/>?WiR$OQ;9~{$"8: EI1Vٶerm9MIiq0ǖ vx՝*Ür[4bE!:nAM# d6$eR c0[G<- "SbRYolpxٻmC]5D>VД3WB0`TS3! g>D05o+zy:Qm\lC<-Cl|w/*Q(deiWƱY_i}jh ZhEW~iEsGvZ=kɿL V-ǻD# =Uuu$+'"Mr*md2 [r{q'8R&IB{>uJThSdDgks;t|d"] ̍xv( [pWvEGw1)A "N=;x0~z >l"nfE:k P4Z(7c8m* ?KX7  T΄=aPb,!8JD)hЁF+if:t VT&F.IP}| xx}67 ^塾* 8kmw$R RƾWirv];CtY H̷AaH58V  vy2 TNm˄&dqdLX"|"ߦS@ EC֜"z+<˔EZ)/ ŗbz瘪ĐA|Dt4uwC>SVC.. {7lr"t}Nq@Zi7&E*vbp= ؼP'@Z̶M2#FΣs@U5]7ˏeOf>,;%`wKc5#0$3 rva/=;m zTzHGr"5=`K:7԰ e8u4 /0^mVQk GKSE*)H0;u.!1Ǒ$X-52vc[׸I +adDd2oD 2ZM([3ʩ:J؟(b6ٜcX\T";e}t"رty,ILgb͇]DH) In:l1z-! Ҹب&XLq萁W^ mPJ@rBnYpJ"`*mmJ_Dpg´PYXɒ%DlEN!7 bw9XPo?w?6bO5l[Q71:oaX/jI) xa: lOBy?JXذgTC\P0Umϓwb~$13Dg!V:\ yx̽GGLO.ΨwJ=&6S 8_mm-N5:_h TBO&YoT[sPS,eyԝ&1559 GiikOOoGE=܂%sᨚ"`p?,ێ A f_{1{4h)l6Rق\[w nt.G,Q%^9waYV6lxV]ښXpj+Mz(-E~Q"ig|c\waE% R=u@*fKG :<քhv-tNrҜTM؏ⅷի'9.2*n=괵zmo*KCq-"յX;)~=T&lzڊ89 )J:JmD$3effɟ xclIlBHƝY@ES>̝l<%l0~ۊnq;Z w%q޿rӕ`*lRS`XyΖE dbqYRFEl+<_v@efO>d/vQ F Ta0SrASͅR҉qpsԀ $,i`rhWLSجby>Uxh1^Y6o/ڜx +[4`$F?»}zㄔ Mi/qgD멷BI|.|X؛h/Z< fg%*kypGȥn XEG5|Z ߵ18e&Ю&4 M?LLF0^@ӼɽxI ӱ4/bv,p)e~d#ٮ[H57TcaQ6Y}G.O&Í\ UiZ$l{^4FXT/# (DU{t<;B5 p"wDuϤyff+ fl&Sfۼ4&%7:Z܂S/6& Th*dEmg|8s6ע&֣N|RZܣ/LN[a)`$ĕ$3o/(K)pnD]+PyA5DDX[5~;Vp\ UgἯZz${$aȋu[s '1,p#k1jxWe壤 +B.-.if]ݠ 5䄺b9QIX·,@vR qO s965 ו\<Z0  [C2f:YZ?ɋfge2^C@iKt>spY\h%7BpHCB @QqeZ)\@VfLp%O+KB$!6{QxOAi$rw#iB SAeג=L߿F;%0G8*PL}^nUL\A|Rҕen԰ʲ>x{j~̒rT? nJ]>-,S*Qǃ!Z)\FhMhp*mPǨR٘ @)PPZ]U 'j3c/#ͦ hמ-,u۳9>3O8Xjm0Q;<v1L279TY+ Q..(&|RcysPK4cURM'{46 f{`<Ҏ^]c;&/"ZDT0Flm@\Ygb1Z FKJ}~F: PÓ+$&zC}3ͻ[$EZ7 kUc;_AkߢH GwePƐ" VcH7>iY(tU D,A}xw d?V[;XJĬ;6)H"x1>]>e=)zgõSSvlƎo!3$^\M1@oX\"7^#(e^hf2UarV"(HDkx^c,Yh>P"Ek*d?ܭaW\+ t=d(2)?.~iU2"Hb[Lde8- ~E;dIP7 mPb_8ly{ЊZ?? h'|t{h1:C\܁Cs\9α|Ij0#h q$F*66Wa13 ?<2&b9n8B'nC}CS`PnbdC;!O?II/0gAIQb[7k@;9[r. im+#˶=1i~:dˆ="\_nx2c '"Œ`h" 9Sd[Dح Up>~YWv z 0牖iY۩16ٶ}hm"kwmj4(^3]]u*"'rbMR{ǞS^Z(vA_w߾^16ٚ (obaI[:趮2~2 XyՓ@Xo*oK:q6b>UȏbSQdBD*D>Ϭx I}YE/&|6^6EǟW ˞)b]}lbYwB^pquߜU-s7c}c*Yޗb'0[W%U6׍lG[ϛJGo-γ[2~lg##]ރfbh8Ycbr-5pFߤ<>{ta; J.ҵ :/Q%#Y]W,g'&>VNhq5[ .媾\J8J[NLč CYAq<̭,rWN<t5u,ц"'YI링&Ƌ4! Nbcj}?8#)@4KōBp i (L . qptEn 26VڃVz(Š!Oåvo ՛/;ȇ..( M5P'N1_z˓3E$J[]N٤h %]բFMJ@h=*q0O])^/C:(~^?i5ndT-{-pNZ/gH0tGBP1Rl,s9Y3r r=ߡʆXDWlBy(jAm;km,;Wz6-Rߢe]COwyX O|-O^ l kcߔgBO?xCJEH[qϫ; [xq "X3SHe}G{I><#F fBbvɆ4a5DfRyŠkYe^UWPӸۧzN#Z,m՘؜jQPwYLY:\ T o"毉PWC:z ߞGrFMc5Ŏ9PhIԅm9_u0vzj7ԞZ:|1IE\ƪ; Xc[>ޟl!S8dsmjςH>&Ji}E2-PvD!$izkj?Ǽ%EX]^GR ErU1dz_Dt\鵚KF@uM'ԹZk[-("#O?O) n8jjQ!_@AiVoKVp ͣ=m4 +hjW/PQEK@X]YԆCv{VY4iXঢ়:~%V/zĠ]a$=9^B݂BQwIůjl?~d*ôf&CoG'>=N x7GW!{?LFG4.B =˔}]y_k;*+-֩@a]1Η[>;4T" l/1hn-P~RS+>ơ مDGԴ7rDLϗ=T6z4 yIAZllN~.;m1UX O7F !},Ge`QQdZØB,qQu >͂2=5`Iżcd2teD8HJ1({M%4JG63JMBvHkhQt+@z7 [%;j*VFH?`=2>;Y~͒s/fnJəAiq3i`PvD?x^' qZnUso F8R7_0.kU7v*h0 jʨnpL9{2gAO $**FGFE/"g\]3nB "]5QxDɱɪ%E]􍠕XN$.E37a W_n HuwteHY#~({"æH2] B(fh ŵ_4`{0o*sI6EVQBz >قYHHXv!r.oYSe3n_\UN9dHos;@"8$s)t9|9BT'5hg, T"$*en}Gl*1E+=ՂB\I~ ";0ܑ='Jdd -u T3OɋtqP̌5sp9^P2p.xr Khs-v`}#<KAq~Y(mg%+Sge(=dZzGk,q47 (K)HHpM"DNz_P:#K[G~jטU&wWw\Y/hD1oE%i<G;ۃ ̅&Q3Ά_i6\u!ϻQ[/\yQ$@ǕҸ - 5\@.',[QƥnsbYߦG\'ֱ;B!۠JBiޓR{OW/];=_o0dy݊` `swJB 43q쬇qP>i#Nc!L0؆t;1o%kFύ#mҗvڤtr] Z#-nNEP!Vn aNY^N ӝtEm*zq!'iNzjg>`lmC>20%I4M]է7yܑ8S1[`qj/l 45FJ(߃9V/7}{i_nQ;5'z2Z=*k [޹wD`Iѫg/(3wKB \ZeԍLu.iZ Rb-zS !bV6'~pi`N- 'il(CfJ|ҧ-aQ-"Ba09\'at\2#YޤtB欵+4I st;[3u3p$ёțĦsQZ֍| (}ih&q~%"߷_~ņ\쬺{GL= sk5YEn\svij%U9 0 @":m NUd .&zk}Ѳ ǜ%@,kz?PE$+%6QV:6Gf<4_E!Bf6 kDOπ/ruylC,͞jE $NΞp޽)qlܜ.!  : ^o>)ݠSg3U)D/s?{;𢱍kԔFR~ ({@]O MN*|f ?ƆF7X:жO4eUV@nKPř/iO. {Tm*,iQҳR'JDs93|oR3wPj(pRxvT0 Ϫ\x広~A?aU +,(d8 $셂 ''f|@ؙ0[t($[q15m`JWM+,p!D-_תz%$i 9ϔ7+אUgFq?;GKk1.RaKO{ g~\k%r4lݯNq4\%y8>C$/~&fÜ}~L&7e<HE56luoGM ѓBKv6g}QٙUI:  ŒB4~6WuAq4r 䓐8/</5(ΫLLӈ'.k=tnU4}Hyou)Gg9׿ː g/59^2E5#{o`äGz?uaZIoT w#f]66ATN~0G9Й2Dk}JܽdSۤ.Z|)lRzIx]rs ,iWDPktS~RHo0nL0C) @4@MwW1*;16u4tr @RR"5~, kl^:jM1Ӂ?"Jfs>*m{ P%9y~m~j&)D44Y"8$Y "I7C6hKgpĕTvˀֳI_ k۵i->d1} LJ =4^GG܆Y\ וd涉܄iJM5 jګǴhN\>܍+84{"$;pĜ#~;-Ńy"jLSOdc^r/T1|rBz#Y@Esg5q>̋3Hn|-`!YD=ӪԮ&Z$Yu)R6PrՇ1 l_3#vv7P h.97:8'(WcuV/J+^0B Y1B2NCsL/)dAOme> s+r62kd{ ]TbZ5܅ڴ36S]Jz2`^ptn[;mT ZJ6Lg $;ɗTsnV H{s=ŁHQ#H) A#7NX0kc|s Ԧ v4~v>=H|d9I.}*۷(IRxAq:8ݘMn h-dNak51Hbyd'c/`nH `OIRYj\z铮YG(axV` + >&!F)o#we6ai9A赋}bΆL#[Q)qW$ YԱsF#70T _5WQjNT Ά-g 9;5lfίԙbn~RF' abNF$_sD/~| : ^_8Y191YS&z۹]94z<@2Xfiil?7:kgKk֌=ZܮaV%S@_"v@}{ZE#RԁKF$RmWI ,h&tE؀k>I{LD3򞌆˥I{|8Ԃc)y-6t@Ys;!*qQ^YkAXh]ow֣:bɍ6jIR蒺3,+2whLZ\^^hM'H/%]㴒>eOhK,ci,ܹj̙Na 晊p?a͹=$}2O ]gm_kDM[;)M/!0 f; #?gSLlM)bRl <vI 4up) Cdqkk{ɿBdlC;!LH\"<"B&b[ F )ԌʪŧI Sl C"qt9~a7%o,T#H-"eH3 hKw,{GZvn#8Ϯ8CElfrl3 I9Ĥp-gJZ~% 1,+FݍP\[ >H&D v`@FȄ)I5dtЮKq=HisIZBHإGZ tX=N3M()JL۵4̤KZQܴxUΣ m%r,F ɩutW\ x|~ҙ=֪׎.e #R~#9MΡu$)"&UO2H| Yo7u }R/Z0dК g_64m2bUff`6LAHHT S+w7flľR`7Gnj8馁; M_IFP^s&Z:75[ ̆S eto`qWM(P,@.ûl!xG8~s5g[kL̓%I^-.x`Ą6baf&ɝgߟ䋗XƹLRSI G@X%|9̐fg u"0SѸ=FU qri fO!9hQBzɺyT_ovɳAHiWHp9,oH0n-7+XWM1a\t2\c33{9uo;,~-J^f 9b.#n "!HRb0pb0)oo>i_E2^_)lq1"ÄMz>$ OYO(Ƨ<6&eu 0/Yz<̻4ء3mWp@\~RSN騆("vAL8W8xmLE1̦M}'Bq۪`8۲MJHI6.fI5fSfy(=w^:Pn y<'AP=(/y*:yOarkgldM-k? yi\G'o\"nٹMF֧)M#c:5ւV_$#5Tcy ʕd:Pa-_s`'-RL}jADRJG kGE) Ye-rT\EO1T'a?%dmlJ AT!q{9qG\P 6Zn 1`q5&`[iwיZhjoiRӎn<3˦ƀbz%-,{m1-!SL-BkM58> ۢ$">A#ƭ;ڪ*#jхu~ن!in#?N>`"&ijFD"o=Q^*lɿһ',rCլ}7 C9ȭ+w<9_"PU)݂]RN(m}q'Rm$-?J]x$ =Ⱦse/:bKj{*8}@LiݰD<"kH+&F1w? Tgy`+ e ߸eZi[Bu3?zCl5J/y0= p(u6vnqQml-xf[?Ǒw)=[x_.{/4-E, *1n{]83IjYf-\ mTn; nv0mO.XxOi~~ "̪ .ïA jҲ[$Cm>ѹmU0EF wc{{W0=F*ahw;1NK50uto3 q^oQvnR x :ۻ p,1s0Mѹh2$#g>WMu7Q:gnL- ^ d.LKB-Ĝu^ X_ 1 P$Q pNqՍywΛ u>پ(0,c8rWY7;6JɋaPǨ_9840T&v.ktWG1 xޞ":b"4ʖ\zrЙCkZ@_!4L6ڐVkkazHw!o& Uni}KEj}!Ʈo;vg X~ ^tBp`_IWh.qEq3W9Py1;{UqςLOFHܿLmK`/Uyc(xFQe#>R04Z#eb=j6'i!粒kI2p.&cA~XC)WyZ^45T`q{0_rd s2DfzC\Hr 8Vw|/vI&AI%@@6@D֭ ɑ @_\SP\(Ru0NRlɄ=R_oz;-5&/NZW:cL,Gד`(e#{ N+ NaYAAvN9ˆX/o 7\L_{@Vzp|4^hiE'u_[?V48C:P-[_мr;#٧wǤ 0^9vumk^P/^d/ \V-,@hʹ"@UD8^ƶQ7}*#񅧸;W\r ?,=+6!e qn 8([IYm2+K ɢ">$ל;0љ)XyZ&.*%n--s{t@}yS@NZ1? ~C6p0BfA ⿇, 8(aepzv"y4ܹf׊:GPy!{.I"\r$pr">5J}7^8XMe~%<4T'qwQGGy̤6щ^<TKe6թKɔYh)ͷ˔ OW}oŦYp|[cr'ƣisQ!Hgop"k$Fս;}=?k<TK0s5 E 8jgKEDZZED6q@sώ\p{hAڛ6[%0S'㟒5vZ_?M"ظ41 k׺!kODb1lĥH'bsΌ W{ 3\u&|B4"hIqo1DuN8rn( ]_q*6Jv7,vLn>624]JAM n߶`mi4~Nih[NB-要[UP+=n0kH0ʫ3l:N]#r ӷIw]F?/!e 4/ p:SXc;t);;ګF.Q:{皬5hA6W~t]#ܼp;Sf3+Nf L->>3*'8ΰwS"uK,F \;[$IA?ҭbJW 4{%Odo' |٧E$2_2w㘳,7cUuמ\xlw_%hwqQkS7:s~Z0BNnwaq[iNRNPx-[3eٹģsH=JW@s E'Dh hP^_"? Isݍ *g!x\'|tOG~k<ǭ&q Zxg$a#E6P5$Vmᄏ)f%i"t?2r {(CI8e,MMi*>t}_(9;/X3@ŕxBD</wk>-,> *>BE0_=^F211`%p%rx@Yl1oV2(I5/nYfV܊H`x&c{_n\(nw< +huWZR+*9؎zUI5ui`E|RW2O~?V~my\&bO/My}=",0^m')]\yyۑDx^qe`v LY-S!ۖ{T<#ikL y'+f_lV+$yH'TsӂK2r8+ =^xAMKt#Gɮk[QL˱L@$P&o@b,׷Xn)-A{6HZ\vx-U#t2nf]g U:pTOu7&D:YZ a~! 1ܼ[\g<*932J&5BQmr;/։4nr>uZσ]}4Vq c˺?vۉә(-ˊVǨ/nN+ ԐqU..o.+5+nUJ D^dh"}zЂpŪNײ#K $Ex)6 >"*;2(8uӉ%n 'W4:3vU^KЦdtOB]Xjf;Sh'&;),nmbE7}l)H6.iYKQᮬqy{,Q|?MH[+g]-h9,AKroPϓw R1z5Jw/-UI ٧2*ƒX&.h:CH98@BNd Xv~95 4ɤJ*U Cfu^pY+Ŀ'Lžlj.[¯<\eM SQ bAŽ$MǎM=F6FzڹZ٥/)_VɟW:U#;3!lx@H@C~ڗ#U ۹Q6xo{;NZکdC O::ͺI㮑;Dgw$K$hg/! =m$t*_"lOD*)[P_/~E.Mm 5c>טebj•Cw@M4`A`/LOn$U݅U=d4Љ9==zD$:M(_ek0Oò>HQ/p<2 @f- H.UZ>FwhthsxrCqmUbtHdM%([k$QS,' J-p Ss^-1 "z$1%_ջ%tEd-놾u(p\?nlWόZQiJBB[ 55Q G#dSGti] c7ΐaZmgg]6~l8B^,* s!鄼Ӄ}W JRo~"~U\g,|C|o×zVwr$-JrpSEj+=4h/Fں KyƉs#J|5Y`\}MbȏH ]s4OOZz[T^Cu_ب"szpxrG4l>,D2f?WQ.;NE,bijPgr6WTS>}qv$G͝G[զhj0ɎD6_z729 ћ'%ψKLbUvԍbgy%]h/'&&W:[6_ *l-۫ &klNCW~qg-&_P1_4"+NI?f%KV nt? XP ajkʿb$,Ah0B@)4.m}N>{TO 5k- &w[=a\yVЧ*9%*E<ʲ v94?P{W md[ȅ.kV>d4Xfԓ/”ӆuV_Ӻ tȓ?FCbs"mw襾R{v,Ƽir0rjN] Fˌo׫8ԛHg|Bÿb8 h?c c񃂂RydY)e CJ<.]k jK4_V=U+lH H$+ɩR@ ) 07ʅLj@o[m?e#0Ic\3t"u8\Vo=rSȱ@\X8" ^:du!rWmĎ 9Tt& =W1n̵B pO*2y vI+RRLfkds}tۈm$-Ŀ26FGFDUI:i6$ =kq'Si8W0݈ 9{nWÖHBc Ry@w)m"j.Xp0w|瘜1ͥh^YXqfF:Rp]q:UC)>RHjzW{l0He($|tm7$SM`-E{¯Mxesx5C܍+O}*ڏ?u74h xz:R8Uy+(0bY;U/hz1j#^տ"ܧ_[7㙀^řTF"ɯ MNhyK]ԉҳfΙ$5oO -otʡe|DΧ[((ڼ 0>XP:ظ:+Ӡ./1#|ůBO8bkGD(P/Xt`_Mȅz.\TU<\2SecS!#;(%NDХ>c:V2j)ͱC!/x\/Y* *p |BAR*YP:p<vFb=hV7כdDt.kr?*-,Ȫj C W(6*/>:5=8w6YC M=uNpHf8+Ѐ2]iͺy;~Ơ +^_$ta9rW[t)dhag?x1G N=NC MPyhsqVy~fj{!XPi5Ѓfv B5F飧8 *+jEM|FͼyHx5%%14n5"!NSyx&䛚I.>qtzmk }asbT\ ؜f_w#̓?{.v'?ep TuXXny#y%?.9˪LA dO6Dո!7"o807=ڊ-s[IUzIinZp]yzI05KTUC ;(V!`O68{^qe빍A@Bh-S]ace'a?-ٗ p y s*뮁,Z.IZg3D>Z&8,I14B3@ޝ! ehDQ.> i(t2ŷݽaG@ëf*~*Ә^^/rC}/N)sU'LTF)X s,QT~|Jj1 q'5dW-K 'f qV//(Ң-L+(dxpX3g1&fu&%^x% r| 2aVg)15;|_6} ’ăBpFuDf & K[,2n)Nx{Nѐ?p2s bD0d<Cu{O52vgRP  %C(Qh92is[)cfT 3g ӸIYШ\f{> %{c,|,ao+[w0#?j iGJ{$ߢffc4 œa`!50L 5ޓM ] eRȎa^O/ ΄)`IChCrÖ篬D:ïذ6bE5P-{7,_i)+*ooDz1Be()jD0mLڦ8. DN{du+ޞ1uZ[XN YhFy6Uو(47H"%i CAej+X&}(2fhd X~pWqbyӁy"hѕKM6WC:P'q2_T6|6S }@*4AȗKz8^1L"l+$Oz O; EǴ r΀[䙕7vݦ{l7V(XnM*G 'Sl3LtnV4K!)0_ ?]Ԭs.|!dr਼PTсdP=T^ PN.nIK Ô|*j'gNԁ3\Pf׉,3)uO6oZ~A6]4ec_@B͎Z[JiN :s6d"̽W&μ$~ w0;Ӏbt wʐ" '0AZ[aԑjCd%l*]Da.Va?նA[%)Ĕ7ZCrUlX?4l}F_ YRt)h̻N>P[`tJ>2'>EL]7aAqX(xI XB0#k)B%y׹˜[ BkD[VSR~|SttqorLMHXve,,UKHVni ԓ"3·FAZ|ʪvB=s-eOPqzJO1) `,0z.i?@ɋֽ|4v@Syo'CN}=b5~?6 د}VxߑXU?+bLHm_v}B'sWkC3jkNE*0 KFu3CK7Tf>I2 ,4m:s-#6"w#U5sijղP~-C bƌ4dV mҠ&r MX6k_P{ܖf$־*oo)b&E?$URUat3XD c{w6&!QDfD'|4;+J5󒺝[/"='G0篧qh]\dJ[X#>bjIƫǑD &-N2pT4հWn펛rPX^-[R}X/H%BP ed&*G߾Rr dgCl4ug`^6\]籱} o'^?Ԥt}4%n!Ydqr&^B@%;qAhcFl(Qo4!!Ld XM[`&!K(HS] uL2Lc};xQ kG.أ(9ZI@n" vg"LM[!v'N:jD[swH;$᷉ee%>#꺢Pa=p=!!PÌ|n?NU'ov<-c 57{")Ύ_A}fdFU$ 1DY2&@5@ xE+e([yA:MUvJSGpUP|IRCi;0܌rPy ڰ!|=ցy}K8С hK<}%V(d5t,'LJ֊e~i"13h% &!^1I,}  `_bThr?!sATo s`"\zSR6K?)q0V/ɹ2p"Ir-kpimݨ/TI &]#N}M Q, Qm< y ߘ ̴x-b4[ZdC}(/`b$w230dŧ%CdT:BnM45lfe 8 F@I2z nSmUAb_zh-IP-ĵ2Q#?dDxp薏$5 ? .oq!dpo~vcV"ߜO؛nd) 9 2L𦆏lp]7vۼk$ًA_znurXϽPQ>% ƫHt"ti#fO09Y<MV,W]Eiyzኬ|lsj2אpT:|RuoLvmްHL% 1ֆJj`W%$ZZ)"ySvD?QrF92KDFQhytJX[}Bfu^esphO6lgG̙kf9 ~](ʜ44#9idq*]i,ơKovxQdE1V{fOhMR5 !ܗ">r5Fņ}\=&ᶓzɪzˁT*\xy >a cWpNDSc6[q+y .I$\Uje:mZ[Hp_܊̝Sek \Х-?\{H$1tC˧K!7[ѴkqyskHc]bY JHҶ巫 K-RbnDcZz޶ PEǚgQ1}-]Ei%1Gҗۖ-88ւIYوNx̳ۧkWoWQ" H\Weée!l#(-2ڸWDnbk$|8}ȦYrVOXb|(0/#X[HP?[6JUcGop/|+SB<-"(_Y Ne?(,I FnXCmi 0<Րܣhv=d2ɎKDkoobYL .KhH+Dr*yDVRC>RǴtdPh *?Se^}d9ЃhUR ]gzx$` Ɗ&b۶ $Z>Te=Q>|rz2Rg8v}vaP);j˫7T.E bE!uȄ h@I?$@J<^:p ˄q fz|v-Nfi:n,"b8H)`"X94)&~3z.Y)/<<@H~ry!daR NJ*ōyrkH} ןq·PhB0FlHuG /Ǘ[ YIc'+cQٖƜlp=kKNRu ͫj_[o %a%3yE"ʹ_;WTq> >X&FA|p]"a W9~E6h+TfB>0meg@ɾ8F*jŸdp\a̠Ǟ;t?xx湁U$4YBҚ |{ 9NLǣdPih}⩁|]Zù%]{foNEP9*dOCq` [>= pjLoNVX b%7Ou%H ȏ7_,.r(3x+[5!G布bR$_c1\['@_:Ղ @ 1uY7L4pJ~-XIZL'b~:!l& rVuP57F h.GlݯGhŚ{KI\\:=x$u+j, i2G>lWP9d@&A s<#ƟݫجPA% ș~b5&R ++kBqc p2-#@/ԱlZ={^0/D޺(v@k $":hTɓG#yeD۲<ߒ yqm&=+rVG>$D l]J?']=ew1(>R5Sܥ!7D5`wY롣NWZA}%w_gcwtgtjxc,#J(]*& &z8}0B긯c/ܐ _#Zƀ.F4֥l`κ1ddtuX<ϋUQ[Ѱ9HmS4> %ݿxYβh&W0vDT&7t`gʞRVhh]RNa4p*2",a(R+߫U': J[$pO%x0Md31@ u4k=屔XOљk%4bR#^bW:l >x]p~ݨr#>%5wͨOC8 5.1%AXX@PeL [˴~ ¯=fJ)XL*<:NW{"U+l_?#LQp@O~{݃>XttFgS0/^s-rUentv l&}k(*;2 Apb7$GVѽ!f/.Ok>܀%k9p_'V waB'Tm E, ރӿdY+t2d;͂ЩOW݀j  !u\r QLIʣOڭ۳4)2Gs\:_Tc G[f ѓik;2c[]2p^`pɎ6UCථkͼB$lb NDBݲ2ͫU=ފz*OJ5Jpč bmw[bbCYc3}VNtyy M*^J6 ŢQc ,kv'\·e!݋Im!hzh]Rb ٝ'mr%kh!EpZ8pQ琰]Q{\A}w3}#x.; [@`*3fϗkQ :nWg5;qV I6-+wZvbO31lu[*p(D3^p=?{G)yX!o}H;svFuMCqF]f X#JA[2/`|3N=lo#;dz7 Zf|7Nq@YZ.L{3_0A 0%l$+4.r'_1rOu7AlUb5E&YK Цe6(aa{IʐpAs^&]U}e/Sv;}xat($a&@b5aN5.8k Q Ѵd"l`zd!X>[B'B ꀖ*Ao  Zy, hqJ3mZL9!Xe U"Tu(WMٍĵ&+ՅJJ޹sSAb. b TS.|w=>Wg"c=ZThk^wvvI!i'x:F@Y88ߩ|"JZ=M])YVc~~!c>I%v.ZEm ٭=g;{޻qm1RA.4*m*#ʹ`:ޗ%=iqvr,̙ wϽro 2^U!.w sF*\|;K;t-h;'p]לE23IaGB`YKq I(]D'4^9I|%#wW}/q /CZ'$x"X+Kd1eeGB{GKxl1=GVx6Ĝ26&|q#eYj6aj.&?r7 ̯uO.HT;";#>@~4B)#1*Rnz9 ֦PI3\[+Ô2*+DMԶl@M % u,0č0[r&ZGGτ<.}?YJ xJW]5s=10A0;bG9ͬ>]g|GhJU{QX 2:E%8E{Na t_Bg(ydO5Ⱦ_s$4kSSZC xVw8"h}<[5={uSSfyY9KGj,tyi8W;v,KGyƗA}E =6'WV.at ںD+C/p"KrފR_8#fܢ/~^{Dy{κ>b` !^"a*i]I0ެapCԮ.>.)TU{GF+3 Nd[2p}MqOl[5̺ fF8,"K7tqp{.7;]'ӳe1€-8unj H0w(d}) 5w~(\Ua.Fa'1I<'zB5CK7VzC`K`Ptpr\`DB~t|[qP+ DTn`?YpD /CN~C(!oH'6ĒQ^v%5+\A@/EEko@V6HiI^!Uzp}ͷ_`RH8CҐ^rR />4ؾUF\jb##1 GӯYr's{[Bj¹(1sťBVbJl:+sD_SWԳuXu&{V6\^̮_.e_z{!Ӕ`-آCmoFޘQ&p$c6t:fWƮAfy|TxK^N:h$Vp I`YruD:=ZS.éHO&{H|_ƒ|Gh -h\jpֳS0\zuDlsE4;/)2̀2^CN5D#0[䬵"-Yӷj uLdw7v\TTe?0L8{υ^lS/CqZ1XV %Ϳ8|({xQøK:ysFW wR|g'Rf.hJͤedd x艱4Xi9(PpʂEkZ~!zbRm*)?؆eeմO|<ʡ @o<ڼ 4^HCzx3VXm Wh$2L򁋘+*b(ÏC`}_a/ޥ`>; Sȫ[L !,"i SSD*͋*edz]uggN+Y@3QR{J'̒Thz7Ϸ%ӫYǧ[~gpb5HcJoZ=wg˒ȡd̈T`1XGMCr?d3f1LEd;$;_-[qȅb!B'l)yj~N z~Q4߻_Y Oc57K}7wlsXE::>j/2 b`mH9~k76?q>K)GbeW뿢8={}B,bYԂ̓8tޚ|*>"a̶憊l&wlDzy^I:rOC CcuY¢;:Shҙc^= kj)7aSO!.ÙqS}&!apˎ-Y"-}tښu>D^qPsGUӒ`& /ZyRwӂmbڋ&o?DmMrGҎذ-,s Wo0f0L#+ts> k Zه'٩RQj+Gg]Mmmϱlzu͟ jt㯲_V!P.n F3ʱѫ Eb>^HU BY*9˰񝞫_MEze¤6WZdՂctڑa yD{fN`/\gҀ diMHU~B^EPu,-qb[bQT²"@ma&eW̭GOx8QEUE=x|zvlP%%L]bU_"z0ޫpwS>Ij$vˑ僅US1#Zl(lƼ>:RYjDH|"ZYͅӹ#Fj[] p,#c<\eKfmzP|3yЊEEcnS7 ;@A:t9.Q?I"Z1f;t;'{ Zђ0fp8dvZu$SC )%|awE%Zԝ+vd re-H[$PL!6ޟb%t yswzEKfv5׵ohmOG DK'-v)ESvy "A}1(V. HKv~fljغk'y輢cz2ih=ȋ̳]ph-1}؎P˨9 ,N"O*EnP_VPґ LSܿH˯.7TD7\<뤃U*| %IgB;(揶sq(iM0JA] %+F4o=֙jh[3^NSc[/.Y:惕@ uсVk7 ~~y!P~d)##5UuQYwI IZ'GKtRyܳ] >""6ܭ 1;RN,9oC11=*S6Lo(oZvJ_LX߼tMm S'5}I]jL|B{OMJρf@\n-__x z٩ ![BtfpD{ԗ=m\v/s+N ]4^JإCN?;h <-CQZ`6`?^q92*1' `rIP/4iV= k74e,$oJ!EH(/uRͧq@8! o.fZ'`rdYFYUJԼO|ě  tĝlob0v2}2u3y#!*kcf7P׼lhˢ`٭+A.eU1s#ȡ(fWhȉS= x lܝU6ИrJB0aXY3Pw}]1p ?ޭH܀qaI@?*4=]z8DHJQ~&&"sܻ(S耥19`@]amhJ e<+F#%벗|Z= e{5e{C=mgGB8>;L@[&LHU9 ٩%z xre +LqR#h0w8 88x/sD]oЗjU;Y>݄$<dOAg;26ܓy^J:^u35Sڒg- |XؙpzJ9|_O\l Q,Y-,56w&jÓuȝ R5"mI~gi#-=;xY{w\?J2r-{h։OM.: #^"|ψ{w7rw>O~[o#HfJO@*(6!^X74PVXTw-Wd'3r]kHځhN M4%‹ʝħG%XqE]PB٤}ib({i/r5>y=gZ\v#;@0ũ?dA@Q 4NB;𧪹w{)cޤ UEIɯ $ȋn+Hd.?Gپ>D7s.Qox*{X:JeqޠK:ړ z  w"rLh(HB9ϊL!1d0:X{z$ ,ePʨ_3\6*2[{yw&G džΓG߳2MAzQPA =hd:9icR{8Vc[)b7mffBmgR ihR)ȉE}̙T 7tW\F=L /Sޚt&_+"??޹[eDd7dn;'Ƚ.s C*LBC׆5"xoȖ0ìvR\B"#׸qJF0o8٫%ƍNiiSX4U!&S 3o߉AGI`m"S";,f3^Q#f~B v2߉RR]<+,Eche`[ BEkfLS̺ y}> E')~WAhG2 }e@&@1 şƙoH$馍CaMQHS)䬼_XCR_zCTyŎ,gDʠ2²#Mh q^մXa8dLnlV W\|,hbSPA!?odY3/jp-U)^\_W1Ɍے瞥f8OtnEFL){Nx!YEJf4gbtߖқ{Yv#(9ñ6 Ե=V,?T}z^Z40J]oRIx T~nP3ߋC?y#glF"f#7N}i#[Z]8Qb4\<uPy7Ab YA 9ܫIC-*\ Eoc!0H!CK뛯ۭIs7;"S]ކrUE(zћfJprWiQC&}@9sDx<-a/@`ϔ!;mY?w!k9n Ⱦ'WtW+w|(&V 6#fj6RNiWƹ@2UޖLY*,CYw4wuK)\ !~nQgU“WK=U#D[/yI[a#òƂ68n՛ڰjhх'"P7NA v5j!)"{z7'BY95.2Z>OWkO9|/%vGq?(D>=s[&W>U|9zSE3J#84FuVp>L k 8/q&vH@pOcX9/#eJoh-4Yv}~Vk%v.R殦Oy(k-AL 1']г8/Ͱ0,ν L&d ׫,$/eXaYa' ^?\ \M.Df}W-qֻ@{"KπV=:8`_lIŞ:Qb'$ܒniFTyM=A;(H@ϸVH3^'P}]Q/aB%T>czij Ʈ~]n V/T="Hcersyd(ӡ7TW/kse)5 \sGw _\VcqԪzz23/ZVD蛶GHCTGqC ߬:nRxJ) `([z[1$L}`~OV4a{{1k3Mµ%=X+ paRO!BN< G%@+9y@_ݺ Vg9H} ms\"M3%D60lҖ.EI#R-$vWC2ll><`l_`F'Zl3e6wuj3~hZ@0T eʷTڙ./ȯ?P:a5!x|Fti IfdVO m/ljܺT0"zڻhɋ"4ecB|Sѣ?Ķ}ج,>ՕHMx?÷nP %GҗE%WzwE`?NΥĊKODzu`h(Nv~J_d&ϢـZ 7^⼷<dٞj0/kY}@F%X}U(&vۓ!I19/uXy$8,jW WOCD /oeAqJ5Ҵ2Γi`2Lf !Yԟyls㤃'e@.ތ*Ae.lym>{8(IJ=kHn/Wm}ȄT Vt6_z9 fmXli<X/8ӴH#d%KZ-gjןzqw'ޗQ ]/b2uo}%ub %^RB\=oA^LϤj0E:`n }r.׬7Z[uK I\d]5gL4y"w,}pcA[1 u"Iݝ ze0X~ v{B8FZu,cOBNFK7-^ q5L/mG5zǁحE3ִ3 z*7C&B <64Ex`=&zBQIbIqΌYz_bA~$ER`b0tԽ00ipzCh, $=n=DɡRP:rVGi l5H&<}J6+F證mwXÐ(SM{)!t׏R$J,WvNe(1J|e`ǩiͻ`O7 dv4,,jxAO F#0~1!Z2XU"UY߷Q:I\%Âd:d-ʋ }rGᠯuka|:U{".'=TD&LԒG\ۍ|9@Ee5MIp!#E9{4 \켥e1kuBNXCGN-@&ҟʀK59CLlݲE_9p+뮓ɐz>?6t/ٺ^auFIIAuĮ>JKun=KWiMm kCQy 3!jRnl8 [ C|T0M^qc_,$&A,L @9,`CyKiWeNDnZ J^X-U`fd21rs}T{QJJ\v3!'*+CS>h+,&ylbw[>.| |w"giRN5qR_@:cK\9e~+yhfRz$=k[-q%;MH޷`*v""UA[I*4ϊ hӴ,<U; y= (df4ڂ N~U|p2Gb2v(%wsICMrJ"$*'WOS|@lZ=Hȿ:a R㤜d bLVq0Wp Eg՛i kUb,jlw/CAўAVAB}kvo-7*b2e> ZbgZd2J9Pp1^_G-A&'ey/3"_>2W0tTXZSEg;qzB%hi$gWkO: N0-gu4m@U -;@=R v6Jv_:0t=uH C_xmgdEEjbVV[פB;}tNcPf J>L٨'J֩̍OOIgڪ6!鿍X6ns u?w l ڷ i[>w'W0=fLՑp;@84LDBM{zМ@P{vNUl@e"ʺ*sbz `@4WHئPN fAY'ɃD%6ӹi pjc8 /}JLºaTFGB+,un&IFx>h'6~b+ ,=?1񕠀*lXU,rDO1OhkFkycɃww$?e띘3#Nc3JSU{ƶz5-h+f). |!Yp:['vξر}/c| 9蟉G>- @n l̚c, }5LVR穱s͹ _[@bMWџw+sHK"ܓ uB# f^ N%-/ciK(3z`}(t&YԈ˛Y#DӺ_7&,V1웒gObhk/906eD&s1ve!\:Wx3x3#Ż'4 ~3Ow}Jdi0M~Z8Dʳ 5ŚCQ]`W|$%eJ$1O+,?S0D Ȯρ`NVy8 f|r䃲o"wI#eꇓ:`]3PS;i6#FzR66B/f.͆7yg(p4$`Z3\&Jo@,JC3(]ל8&ipt-PLʚj=2΋%c[oLeh8vlfk\{R>Ӆ;4~(k9OEQ[-_O-O`@{W77<I[ KL#'s+ߞyV^gjEWuu7gtbgof ҩ* 1eސ+:D*N,Wb!r?%BψQ{[~CDX2ﻦ Q}L-Cӥ_dAh+HE1.&wMʐCor?-Xzp?ʃםtNh5_^EE eo)aҜgz%QXfXL![zYG&ocJ$ePrg|w|2 orm ԡhnHb^.uB& wEph˜| La8 lq3%?ƏE[@D!X^eQ=WM6]B(GxH6;b~]эk>?_ZD But/M;bFr?I0sU}7^blJ(-Q R[QfI&\# 6v3:(t~Q =i0ځDa]"XۿO^LRzuNsg7Lb9YWSoB ^Vً,z\7s=Pi[._2|>@o4,6(3b,c{ˆq8zf$txZ8:d? 9|Q ыF>Ϟn$'{{@nsf9}/chx_*,ROt*CtzOB~ t> oKSEs?z;&\<3 ʷ@CNJ!ʠQ4r0Ft4A%HKz W5;h6᫈|J(täk!ggR+M[74[nUđ(\Ps͌ &턠 +I C.|mΆ#|"8]0wq橞&IeEoa4ѭs 6z\}s^-Λb"֞?۷=\ީf"/GVOy? iSys;n=ABb& kwh줩@2<%pf@CZ?ȱNѥ>G0>0= F޳99rMOȺ%0+5o*][J3(K,)heI:ɽ$ =5|Y@AKv~Cz>X >.lIxsl,1W-8l6xv³ialHYG2y9{P}_@X% ɦn`}IaJٳ1!G !bEH52!6*7tnDٌnjvȮTnp&d.Ҁzj"H?f|]M^0$FT{587,J@/8l+]%8#~Ы[8T֟ u(*,M>zQL*Y/g'!f,#7P|KXtI("a`ܯ(өl!b3t](Q2Dj&s/ u2.򔩒u*G}GF0Xdy.?MnLag([ܞm5 o"Izˤg@E|AVZ(Ajx |>qO) !`69ׯ6XSEA_}='Fhj .䨾yQ=bXɍț˸6u)`ʪ43_ҝ+>#t6) h*3PzoI) 8X $ljzbj!r9`Mtޒi }ZEGJS> s}ӭzWc6Wu%\| '̆)=ǽr8}3XT'hH~y miE$Iϰ5րjW4=; ]qJd#_-}˨ _H5F>ai y%!DOo|F4 b;؝<3sEqa88<YCZH 1n|:⛒ա` | "G*X6M8MWӿfz)t5ez}U*t<jNyKǃWve1 :kWKsUpcKv*$r>F각,>l5" q~!{uX/d̙y+djlkLJ * _c(a--{27v9#*a[^I tZr`qD4ܥQ7qze2^I6ИZ*R2 =mɎP~1X^JpصE }!883Đl/,# @3H aEs鐙R3ѡ3{W e,Pd5m9e {?Ɗ5]e*H,g ):JcQ,#%F)vaQ[;[6\ ə|8CR Z͓i(ZBu,djNUQnA U:: #]qwkcbI0jxAe} F..;R7d>%e&|5hcX)|+Q[EGZtjpV̋껦StMUܑjx)ºɔ. ?9l R7B u#b;/w(ċm@ze|crn{%rU} ,٢^Cr~ͤx]4MAi5Cm [9q]Y^9I{='iGzm74Y+boifͶIUЃpq~ &>_Qʲ&](p}~ ad@}Lr9u]_&r1j"uMRrq5-:ӧ8`k6wf+.NH|PI+K˼h/>E.WL!aQ(&]a0m=G$0T}Ȧޟ_`^ LMf/Iꋻ4Xa1KPNg:9(BhZy5\L yq01(EւI%A}%3]ufJdoPn`$+NIXxR[W%e^@6oq0:J Z` =\%X+'ijA F.-4<*@|Co؆yj5AGw`YR6`(zMtȨ!Vjg!!2eF hX:iܠݙɩ-eZ{0B*x\* 8;uIC^?h){u啳 8W9O>cigl碭:_<1DS}+iԕD]-fI\68ȓd,ci*ο܃OR4XOl#׺*+U ּWսh0o\1 RhzS+Έ92@7h쯳Pjt ѾEHPIcJDd5%*3J/Zw9R \({qyD\!0kaU96 0˜?/MʤNc>,κ= $o'l]HgAT9"?w/*>aT=Ρ$쏮,Gq\o!`w}"t,'2H*ԟ7d-'xzV?S%0e)̲ ܟ'p0}Q.pGS[m@9^$Kfh`'˒gӯGo"e _u-$˱'$jj 68|X􌍑5pqohËW9q宧;{kv4˵/.קG%ኔPz|f}TU*7GP7_"8iS s6GRnZ< Ll/9wK'>Mb˃MnKVݎNoYMg 2^- 5!ϋ iGz:2U+ om4[kriOU^08l젭#Jxofc!Sp}dC7LWgHS.2(\L%ۓi7fC"^gY<,h@_Ba~P o8'@Ju"<}vGޔ'|u=qaV\?QB |1TͶ;?1v$c)#w^mO*n =-q$pCukD* O͑@fuLNCE`y᧬EVjv"7x'gG7Ji 3$YHvx]I5>[D:h0cuua Gӽ6 d -X4|QOQ=1WuߞlOs8pZWJxQ;k}[B",:4)Rg6CsM\hj :1=]C.e3mϋk>ӌyH,@2)(x@\#._CTz)|c5;Ŋ$0)9FJmfr@AsG.s5+aRƌGB<{ǗElV*M) hYJȷlg7## zXل*w6cLjf`|-;)AVrzgD}[i#Ti4 \,:޽eڋ4zwt:/0rq_Gv}PR(b49(ܙj%9r&C{"">,Zs8mi#r_6wl/=OpD"=C{`*0&:򽅍>)c 4E m>@Ƞw5M%' i/ oEz`hW3bSYϳoȎ8 4Boi.`kfx KtGzH\(_k d/31degH|U-(H>d.Y0'2ROsit˾wg3D2Q%XB;V,m?fxh 7"S\Eg bIaj~d4ǧ¦-0+9rځe9GQaBqЌ-MM|}orݯ"IJFj&B) e>PMG,rtw`)ķ"x>m&P9% `bv=H )rH4( 1' ;2r ]%BNyt)/ !1MHX\VP-ΰæe xwI/xٙ(W,)Հ#i=szrѾz[5o1nl}AZ";ɆbSgaHa}ja #g'PT*N t6zniIyİUڇlU4O\Diu$sX1 F$=if7x+ju ȁ! emM=ws20$?S{zu5L~<<Fftv6Yf0j c+!"v4W*dXw9^c&Uo:Y' eTq=q3L0=Dc|E+= ntI )rt\zPρ2x.NB]6dbV@Ox8@q,z*1bhno}+[p-I0)f3g)Eow )gVK{"*&hd4# "2~CttۀtU󘛭$=U)&zcs%C )ͤZx)3Wf!RPd*6eQc['h/ x( "VxĂZH_ɽDʫgDg\h,ͻx4GXXo"8B i7TQ^Ce:d(OM8ʯn!ߝ)Vc?G)y+o|HfK6v+6W"ƹ8-VkJ*hҁIX.k =y;"jg^Go'M=i[L9墨/ :X$wrcWɻg4lZ_RqV٫.}9q̭F'C:Pd-c #Ri),RpWe@"a%ZU_:H llՌʦ1pe *GpꌇS5mZ5((;SNm2c|!mOέӾ?@ }JO/%i\ѾKcQ55H%}*dUcW4W۸}lJ2+5t/QV~c?("DMr4dn#piRQ9eۍ9XbX|@M"DMpВ}r;NWUSqzDz_U܅uDJ^9r9Îm)۲͒ڵ -b3S(,:d| v5zW]Ta ]Sm=MݢqI먷;6lPGwFMZxB4M^!1 Hʄʌ*c)}e7PYşf>c[P<-ȸo *'݂ BRmY7ɽA6Cq((#}x9LvX8݇1\:Oӥ r7|T)dh(yljn `%7&ԡě#9f~QsMY3fl6Eys2\SU qX^u.h2 H2uDD.1Tr_zzs-yM,W̿-Ca9pB˱KyQ˿l:3?f]>عzWAcl.Zp~crDfbP<+Vnua;jyن1 @*ڛ:7`nDOA7ۏRH{YP-blłxP:ؐ_ԑ粓m.i#:cee u1N7h2w :Vj4c0l/ި~6@f!rp9RV1 A8p,εOBGUesIQv03Ʞ%% @j:zˁw;a= ڢ|$Z>K"xw2(j^"αKLI4Cɔ{'{;u,)Qm=) Aɐ}C s|U8"&ʠ{?^F!'5pdbqd$mk :s^0>q i0^\)4"j"x>,ho!֦>u@bMVtKᤪeUE=Hj-z~]9xt唙(f}h} P,hD[blæ_e=Q-5OHBKIr}^32B.z!$U!o>ݶV0Ko&DZѶXOCMO%rB2XP#wÀy_@)nbGfU-XH+tUcj a)!J>,_eյG Z#̜u^ݹwTyda#Xf?HqQ2F{`95Rp*5IFhkt*,^鍐$)İGrxZU=hȲR^a6EisvP\i"pmAx1@K;lKs+9@ ȿeQHŚhRſ_-6+\'ڼ,@AFfX` rtD(6 }5 @JgQwe}K2V1뢑\>_\~jJGmkE X|4rxw^bȯ5͏> x$#{/zY pͳ!4?q3j)  q]6JyFu,u@BPH^?PP$gL@=, bcox[?2} ;\_..V},Q[4H(]%vzG[WW0:AIc5;IZwɃEd0oBgb_e q/Nt?Azu>.5fڕfsɱ1g] ?YG"MT@漩ش@[(tlebȯb }aLۡ,nJbs:2UarZRN bjz-rn:/'y:ޑX DA0zK'qZqXQr$]BJ&\EԌqw _ z2-іOׂ|p>w蠲\+W$37*xij^j_OU7ZR82uN[\ftdX^0zT9hѓg%:a<p)A|#3|V2d ZNt`~=+|rI~9% *}hCٜDsЕt5ji#3<{a(8@pZi`LNĆhwNqN+[Z3JJq5f>۹rۖY"9z3/2,y5D;3q?V ?8(;faqٙIIIϺ#?y#h`>Bj bh9v%iS+*y|b3A.S@+2d)HûnhF< v 19mg|21`Di40PgjO\ y) aH[0D6p`Wka'znĬn&1x b^bqd#p^IQu|]9.Б PT2\t ,uwڐM]fNձ@& !=z/n7GUNde^{)aS씲^Fj/!S+])pkė3f-)1BJX=ːR(:+%6߉ُn6mP&ObG֎pcYeTfk( 1<;NÊH(Iok6\24bZP#멣T2j楑G+_Ǔ0 \mm |aO£M -G@=|;\"Ģx/fE:2Mƅj]=$Sa,xu+Emᢨ.yڣ}Q'[+~Kg}߻}XMr2j^/Wږ1?S?gǦ|N/,iʈ:4vpW2XA#㰋N4 j+D2/FJ(:ؘ`Á{:Y30"ѯdF[ݏ= \,3=o)*PᆞT&ƐASұY"pCx mYĩ͋V$Ԇ<-!ton~%q=8WPfyOΫc 6ZSh[l#6b_ߛÖ (H~oPWURZlќǤmϷJ*UyLKg:r6nb{w?/Q/0}!"6ނV*]>IUFq|n$*6$jIXɣ8ҿ21N녳;uNEc5x7P 8hH?*>רn$n?\+}sܳR.`*t)>"n m<<դz"o9i]5d8!m Cͻ{l8fB;0r8#Yjf~q LJGuc6KS1MaH0G_U,{ : L ysRh1T|s XarN+sQ4+s:5LgPTrl&x>1pp[䀔lҹf{lBxa 9Y;cI.[#8a-*}dWnib]S$ N?Iaި( o0ܨR В>1a5^T?ی ѝZbY,=>ˬЅl'TYjn-8>rI+ S KLHtJCŪ!ŨH{gvC-+k Z}dCT.nlzfɤW9<|oǔ}LGEUC!.KF58a19*- pt'G ;sC ø7-pdBɑJZ'c p|{RE6F^>E@+Z d~;5T.aG#.X _(+4T}P,ݭd9̘cAz|rƹ o2Fo!!.=Ҥ|pZr`QF4J@}ket Ba& 2J}^϶q-*񺣽r8pI;ὥv*a36-'jkk$\.Z_ͨUJrbGKn#MEY6#C(tqu.|^`qeo|WisIe)$+k6=&D] Tg<_f8zxOOwsB^5W35(ٰ? TGy>D/Ba-; GCܱhh~q\3WFc:+C1sy'pظgH3\q zL_S4?{y !_eļW()kRrNCaNEוpP:P?On$Mvæ2|%'bN58,[[y F|M=E뀈 \ ^'#lDtY*AOH~@%p$΁!#@0E3fk\׉Ui(;-1@l%)Us?HG1zޚ^짔'1Ε pZ \:fobwqmDRYNRD™ӍPRwhBI ,%Jt;#G9Nm%%zAn*wT@*~SdP4L̂0>ݨIarrBoہъ#e$--5![##}QfۢO24sI<<ɮ.F] ih.u"sf.\g!bO}#$##+I!Lv&>{An[-_YUBsjc&ob?5C@0osϽA$ '5M?̸S6)Oq(ͣ^b촿t"L1KY]d˘dgdX[fӣJq ?W 0kk(tш.qbܲsǔ"}1S^"oKۍG!8^"Ë49zdHY3wL)@R5j`.m&h Dyr^3G1KlDf:/O&:`OcVs8׼%?qJЂ=a71Sm*wqc_u˿ =``vfMf壻um4E޵q%VZZ91N"򔭱:]@-Qjy~;!׵= +ȑ)>ҭ-@/Ow:+k.V^ѓڌJ Rra+7;_Cؗiz0GCT)pEahlߚ6RLĤ~PKƶZ6Qks'k_aX&}uo '=vQ=v}L&^]U RrڈaK@`4rt&*L*|˭C2Rtv?l=PV(? ǏC+9bf~1(b!^J$67%u xۋH!riri2kpA ]73IWɑfo)f$ŷLda^iAl~lG6A$;.S@JfNs }0ؗuCop7 6oG皇~ױbvbJJz\ utxVRrWrpXβgS}Ӝ݉fm6a@DwD > P+ڿ|CkW`.F8r|nEZ81jmSj ]ƂpK#Xҿ`X {d9,{pc)er"o4v61Lw`=I_(0[,7)H?(kbrcTuWORAΎd!Llm_ wvؐN0t;`7a50јbܽ8g7jތξyDzap =WhAeF:Ƌo*>F\#&w9&<2*争7fwKZ99B}BU85bNe:18yL8#qSlЮpoztK3 hp$Ы"¿%]eB߼NpAg:ZrP6`jxL'O= Gz 3: |9$+6]6c%%< ϓ؏#W?FǸ݌_m}͉PޚoD9̓|>vui}¤:l}I}0eg$߸j5Ֆ gUj4Qbj:CaeaX$Kс>h62rW{eyu]~TIrql~?X\oSj mYlNqi- *MfANLNL/N,]FKh\@kNwYN2¶v~X&F˓L\ dwm'Vc^7Ju 2tޜDjD e6KeXO(X8svSHpHVSU@h|Vo#Iu6׶˻@ص7G.;mh>Ɖuu$+CA\8/%gMk:rg9#jfp*\&e-(XozOWKݷ\PoT]yӪlhNFf[_đit,C̶/&!>SË/OM4PmoHEB̐L[I3̄tc#TS0P5e :k;:3xLTMhif4h̠N"^@otY]P\qp5~>4r_@&hܔnAz&[.ܸ:KN 7vS3QY oaB!m ]K xFGF jR񦜃/ۙ:0bBW҆AFhm FFl3UXXէ2% ,>߿a_r Qsңt_0r+LA< j~K^~2cZE<)/5s)5nXNw:TBRʦ`*//U5'&_yR>5߰U5"Ս 돚mq[ *p|f cꑌ0,JB. \W8&Y;r>d`shE̡5> w{0kK@43_\2 ĐTUS}jIsKWF H J`GwRr["" T+Cs2yr'؆lW;ݴPF=Vh{5bQ7-̭P:K v#TN#(6cW :\,|ꮵD\3O!λuwuV0aDEl"D6PGzaUGqP!c{S0* YA[ JAA Bff0ޥvy)8>R43,*aպ:?p`S51Y8Bͥ5!M"gNx _R㿬`^gY bj />I.dՓ;#~}i"t'_nnVl=t'[b|7*]BO]gw7K},R¤N7nI(Fdb& nl?PDBh'.f~&YQ1*TY(%*H=́'?C ^q COG=Tת^L$Li\nRjc4wͯwE7F12P6ᦎ曭q1cI0-qKC}7X[5\/߼uqP/%RUg=Pڱ'I>Ow#upaJsU!Yr O}5 a# CiU}'e ğ)%ϝ?o@0Xupy|P{FFIcQwn(*}oRgbhz&AAϦpn"mx'yⰎʖ)7|ڇ6u&L&xƙC(ƿDzs z a.=|ݔ@M2ʈf:EnnFbUuԵĈQ/0ᔢ5d}٢;hE+q˙u,$9ň9C)”>< ׶#埲@Ǎ˃jB>]cX Ao|azFD8mZ1p&Pzsh+B]A[+%ɧi[R.Je^;cvj=LߤVɵ>M@mV#MRI0v6Dq9 H|:[9 %֖:Q Z%K)q!֤ m7Z9m>aJ;*- 3'Xq2~%I"_dpj&SjGq:ك&X<f=L8e;=ğs-r%>ֆaWw } Z#x]|M \T>֞ya\n)z O#ǨUkHÌ3e &X3qHCz1\t'Cyx%p GJ$N0$vl\d˛ U Kw̜?2qC>$gve]wn&NAD<,G4b)%HߥȓL}I,`-A\ /_ W#.ĊSyP"1aXG tl(leCO<UU .\JbW (Y4 *& hta1Aax @CgYE^k}^.2A<^Hqì[gh \ZNȊߛw1U[7NZC[)Ahy qo.>'\ghx&VPäPxBaDpz[co>>g,sb1鰝yι&23#X1gL+:Zr4Yw1]g%t ]/6a:W $zp7si~k2 m0 ARSeļC%(H t I7 :,4-LIj'-ElGexō1D1 XRQyfR[ëb=gDe!}s&ũT]US뮾 +<x.WF?'bMq:R1[}c(dKkj' cm maA+IgU?,΀}s`pePu XB?U7pZ&}z xA6 #@5Lmȧ~t*Ϙƌv4)řcWp%rYf'5΍dHܑs8k/iq3*xYƱk.1`%w:7 FJ:2RoHF0(ab,'R*pr+|mV`7xWP $DjXW&UM/ EWFw SOe- ߡ6⠽xG7;hFK96\KOFfYn&x!ӰIKY갸'9F E?GT !D;VuA ϧ*.i"b9SP4|./N9UKbi?ƴwE80OٍBS fJ"!UsID35MV[;0A,h-RNtOו6Mxapg j9>>c=q+9rvtt/'w(`*)1_=|*:Xp#x  ڟPPEЬ3Ř99IO˪ɗ ca@upvф7_hɑY6TY&k) n,d[%7mߍ7FYs*?Vm<fT5qP~ئrg:idXRGm| Y6j]J797eQu[`K(59wi}a E/{/Ŀ,䌘SGC8`tq!I#ڨZXEo[aB#V;WԭG<+{KPO-P'Nea, 6i=kM LXR9?[ߦsB銕? 6^ ]F~kX=ckf1+<;;䘃rcue!}>Ю8w6@,.Uyx=o[D۔6?xٶw#Go:Ipd,L:p^LϏh՜Q2IoڥI.*gC f0Ao!rʗ߳Et 1~o쨥$wDH% ݎF K`z\@˵,6BH89gV$Pj6-Dү**&/L tu*<DwϞxGɚҗGaܣy}Wyݿ~ve$ (s{\?Kxbg+^lˀZ?s->M9XG?w*f{n!E^ !"*H-3n3.g{ %* 㺫%x`x<PkwNp#Hi.Prœ&(" Q^IW67(hbYXXqYdFOyCB;nkbzE9 _yS de BUdl)љG.s{+Gݚ急i-׺取Lg:)rRٟ"Ωp=>?Kib`r{h.&A Fw*S,j70t1LYP)JN(]uLK3]!d`D[!&{-@owVF|Y~ך$-/s[k]V{B}K+E"CX DġU('~4: {:c;Kc4g'MIrllOD!H= x6EG?<l[7E Iڴo|F9qImYZ% =~%6?ش]⡴GGeC orز:* Ȫ{n6#5ȑ䅙M q`~ן8o|@7QI ħaL'l]<?S_|gt#!xS'!/gg30_Ixqa 'D?*+&8Ѯ!֌,n^s[wr=-17[ ol0"U\bbh17(8]1[/w3bv ޻u1%][1o%3/\v#ޢEP 4=%kz;1i#,m&070s~7BGA?`UIP&,{3̟o}l҇l8.[<2SR;E5jvjddH *wm`ajS*5jNh \Vߏ Os~`~n&Z='⻑Ä%> !QIڂ"5%| O&Eh&:UXz!eޝP[5xD+8 d(1||x\ATb:ah.ssڋ\"ϡhj-߀J)PspAU66*8纁 isg P mƄ1&2U< NgsG9IYe^YxVQLגQ&'.E\Gʀ6pb 8`hTI~hh}o{'$ )yΆ"&ut=W49ӑu 1qθpYnB3Kɠb!+H94yWܞgCAO( *fM[%,1mQx#7TP 8%)Jip&z.:Ǭ,=G]/x$!yFdEE"7% A$h:C\M7" g08^hn(r(?Y?le܎PKPX5/h0afC'v& Syl`D3+KTwKRj4wQl'MFi*=<4gna:hp_La\v"!cp<Ԁd0kӛjv i<@E͏UMER#9[Nɟ-[! !UbQW|{5s*,Wa8 Fv"^KeO  vSi6Ѩ+N°NEaٗ^omҴz2_8)z0t.]+1:!Fߵ@N<3qVuDt :*J^b[j9 a ٻ9S;ig 4k'AI@8,Ν>XϬkҽ6r_.*@"+2CU8;yN_QY1Z&=ap"(٧l}ۂ/|Y^k!zZ e#g0[G_ҳNz?GLJ;9;/?>0O*_G1 ](+BN3$/o(u&Ӌ=ֵY<|GEJT,k8EOn&ɉ^Lс>C0t}z=>RVq!&k=|5gZ9eU1e* _UNGhf.'OKS:D!`P< B΍'CYcS ?EM9 mQ~z{g.P_F^Kp*gz⛀^bur*88(ZRA GQT:u:zeQnkUؘ kt3џ66IN.ۤ$Ks`я=8^+ I'Iۉ#j?p #, =21yЕOR묟+ʤ 4]AWww[lvl=]x?b|8(,;hF=n8Lbnn8B̬0v$;Qa}mpyHTtT-oVpa&W"O TlY U8O:! f {[>8ݬ(ZƔwk>=9 _*ШÈ@ۤb Ro{4A즌*&Ӄ>nU7m]c6Lt_C&~e@(Y3< [; US߁ pVDi8i0B$a҈(gQ? P9/iLUN1>ZMo;o,Ž_&o8L7عng׮|\X13ܫ~f1!W(B O,ٗpy2R2} G{Q0wͅ'-2jq(UrM|P#$j 2sݣcBON{ 01Z}Ʌ)/Flls\n,t<^hlmxz {_|Y(cz7aC/c!([p@Շ3ELh]!S +Î%0U3NVK1f wLxxF ֝E:̂ U|fA,0 ),*,*;!ӨIjF@8LҾJ^)"gqFQ+թ5#{ ›I2)8C/"0E)̗?ՙzرS|e cWۢU9`3UZ lx'lp{RRb +&8R.v-O!S@}CF-; S 3.r֏lu.71#L)-*i>쓐w#6xU_":rҢ/>uh" %5`*TՒ EQٽȠ  W!2Z̵(Nc8j2*/ tkp/FZUg~jV!}mAMǖ3D$VVN^#_IM^Ye"Ԗ^4싟!(j։g*#d+_o'+י dќ6^j?QCBvNJ_kc,Ӄcrb=`hT7t00Gpf)dak/:lMU ӭXzb"䊧l BQFEUf(ͅ7U4l͂$}ZPT ǹ2% u.z5J@4"q;!;ښ_ ښYRhuohpS$):P"X jhS\kZ9g5oo 37ӑ$e_R<V㯍YK<3,i:o`^ڧڃF֥l Jd\kJ Tp|l@IӶ !F6#.9WJCКP bxFl"O]fFǒNd0^ }?+UA'TsR}k53!,Mѧsz~|hSk4IxsmQ/MHo™7 oPCxyĩ7} zwo bWXvb+ da:gԭ(躞nʖ K` Sr\+%)y830Ec".JܩeƧs0KpB>mQK@UZYU@x;#mE3Ig=R|/ .^)`  3m4xzܝ)a jCOhҁXYٗ huWd.XIRǼtWl]h`ĽҤpⱨEf)DQ,dݍ,( $ܹf١UYbtk&W^/g$Ŧ|N5/|ךVZB >)f%_ꥣձ珎Hg36`],#~t'<ˑ{sj7ke;BeYp)R1}"X}k 2"h HT8pX-!_/=C&5K y4&^ PndfoY~ci3j=դ8rw^ gg!%]!{b-dB&bZŦIUF*L`tFDU*KiBxTUBVƢ<}ӯXlf. `Z~rYk} ?"ATdjhŮiNH[jح%$6*G !{}T/O`b5P-lcH59WRWs8 8+(fo4fNBJ);VK=+J$Tesmp#C 9ڶ泋礡T΁%su@93]799/Ri=-y9%\*b[}"k`n>HfV>bZo801Y4i>x% C Hk2yXH:/%{/ZyUo>l$DJ[1,-a|c՚wCJgQ0V蝿痌 ^r0{u[J 2z!b MhLUT0s ~ =Sȑ&^ס8yYܔ|jHhd`؋5D/43Ksk5J =m:u(fX/K!Ӌ uQ34JG(n7PY؟Ҵܢbk~Os^'4CW_Y]fr7+2] ZawD8|m*X}!UFV[\zd[>]NՕDhePe N k^aL<+ <ڔ+G7z{IB  a^bYa)3a 7/T8 Gp5qg!CpٌoC8TMh2 J<굽+84]Bj=UB2Vp*xe\ځ ven3 .G.ge\G>N[,'Erը{1T6n2:_Jfz1qߛ_0%4!Bj-jjE7fԮByv(2-HO9r8g4ZIl;<)LL@λ5x7FQ"/o IKG3Uuf+pNa,='>GCwnFwqC);  UjJVuv}x?&91-2Se{+LA zizZ&Seh[*@X4ј.2^8^=o)iپ<X&9No]Q-OQ# WXmI (]' ;"oEfha(c s<8k0J!~5I>{ʬ6[ɼ j=24 ndsLstqx knKYv \|g&^,6;IoF\όj&Mq5\A P<ۑ =;#;߼kYL V?ƥA-IbM :ƹO4Pa#{K.91,ֈcd&sZt_{A5 |%( 6EKr%lGeN_{*ҧ=kBnK)-SѷUj>~zo\oM5.Ty: ([:m|ғMmba"ܻY:'u}:f&e=< BIu~;0 @0[m:2 _7swN07^ [ f>D% c9N!ȱKXj] Ixm`fS"h6rDM4YK_smi\%8?Dᴹv<y$5DlmoM"-Ne Id.`m%%]e*:``.?ZC .ԶG{zW2Q._BIZ\&}ab倀TetˆB"߼J 5H QtNJiQcbbZ*%R1& R.:/K .q-,{&|#ҙ57/>M%)K=#o Nԉ+`9!C֗HxV$(qXx{) jtN-,Icͩ痿_gvS޽}p%552o ߚ.k&yi9xI/,XJtj 1dT 3uEr DrodqcN}2^{m ;*^Yx޷oIF ?yv9V KtcY**,q~R+} Y| Uz.wf^N8 5 $l1_h@m}CȀ$3G=#3Ʝd(,; |$Ơ_E dpb9+TLsIniLnF1sZ2ŋjӯ zZ9+2w6=JK9C>BT6!{Πpp(i-d2 >k1dDGX=Đ;Y.y^[}W0=DqFaG Y"Ž#[-̶m_(b>z=!kB8 H⒵*".ɖYw*2+9MZ sA)Ԍg֑adO wLM$Q$}[ R >r+P!v7<˗fhIiz/ov" hެ< -q@6lt {hNf0<{>r>Զ"2Lѐ|%}ݚE} 3|9?y;\}6=IEDySݗR5y@FEֲylԣ!Dn /vg=DuVA|WE%F]!W.E$;V\.c~8]/rWpB龨;&^b/ e89+ ]}oA#W->$n13]nYǘYA`_X@͇t"&Eɸڗ`1mh<&js,dT~ƾ\K"B0sHh r|!ҝЬ2` &AM:(dI[/.Lo3 "d1twhZUhhzʕ~NOt**cv ̓xvgק#%~Tj`_1/gW?Vҽ^i搯Bry=rQieX"?G$#`*^39J6bd^}tH))A\osQň"xsŧ3qcqy:ɐ9sV2X1TV(*xAXQ?⌇:|OjYte\kY*m`/``7F q1wci<Ǵv0xUX6'waQ_}lR_AEb #Iͫo+W> 9\7_&jWg l(<' xfc_J{Üchމ$ #:qs̞4ck|Ègh(u* %ki~z|r]\59ϜOOvo!"%8dxQJϹmgB)/Dp["D]H*?Mq,(6شG2f%͗b%B_Kv:м:|0gBI}y|kF:^P.r$VoaGq({Vق_T Hz%kiW3fɻg>\ a7CZ@ lr QNѢJu]Y$q8MTTF)lAњy]*nB[?59i9(6]ݍݔo#D&?3˃O#,I3MSÛuXJd|oee!L뇞-  ̘`v|1鍠u<o(}CݒT8841Wm Ωs1Md^ dA)GZOC\ "q\LVMf;B\tǻ_ZWxp"Tꝟ MFӑh~5u ,=z؉H0鍬Շ :B"kݓ͋K8B; os @a*p -(X=:tR쭿rG >z~2  ċɣ i,uVǠS+W)/5`^IlG]3$4,"Ugdp1LlpfEBjr 1\98BPIฉ[oOF,3VD { 2Jk`$0|bzżIt9W$@}ł) x`}G.w-iHu̮ҥپsY1#>55Caiq"ex4" |d.Nip ,Z,D4=ZĒU_v@٘͜;م5Q'6ꍫ Gg'O3P]?DK)4 VkK}ǻw2 bI!TCQ2EuI1pw/r$abP`4-nx R vZL5hZ4_iJDFfk(a@=  qL1XZ};$i Oeü:s'nTtU8nGq긌#-w HeΪc$r\i>/ߩU}1BN{)y!U-~2셂3‹:cbx"͞8< PfZQS i"z)u=,YQ&^9swDH4QZb}3Ԫ/$?bA4md(XȬtlcFu[1Eo ӳo(!5OC(O ۾0 i(2_+H͝?I*,}#9ut.eޤxSrV/ nnFt%d_h4W[!1ƏCf%t6уp6B~#ʧ.Z3zg|(~f,tabꃴQ# >tꄛL]grtThrmYOB M'AN' 90='jÏuc>y f~$1qɀ2Jk=)lrofgZ感#~Ho?lmÿD˸ތO]p8Ta\dpP$*Ɵv>ꖂрa܌ZBx5+#M"`9~T.*<[-jUP>nl0CXI:'oLeC7_ϝ.}³<(G{wAK LK,AgJV(x%^=aB KSu6xqncB*ɾ ϥO5-oAFI0ú{o_ v{| >'.(-ngxb* Ɔi@l7ie^)N%Jn17iH[Ċ @?UʽOiI9=r fD[Wleヌ%U{~f>_آyp`U|GԐiA#ȳ:U: 4-/ .e [Ť9XXב1tH0GuD }K9Y*߽v19 * Σpv[A%1j7&X<1KB5 @sD> %\L_wIkÍҎ6"J*Pڑt:GZ>KW>\Rd-1sx:ĹCd*orzwhԉIc6X-cF.GAq?cU.9#g4ȽY=gvcs<{y71 񸑱"]3QͣU?`T~n~e!pI.?4;!B H3a&)uw "Mp7T.DeqN|P%G5?D^_$;4E$4S>oͰ7"deꨊdoэTOoӽJ}Ox{O%M*d+*zXҠVOEZJD U6۠B~![L1 2ET0ckQg`8|JsvoGx h/▛}xr*Yk ެ~j2= _nb$w~I>mg(Q,:$JG qd (%H ODitrfN":R(YTN ^L"Bg3ff9*&T- >HĴ iӀB6YVn<Ldn;t[<ÇJ̙q͖7Bps卯23Blಲ,&a/+ tI@Qy lr#$HXv[I)0||Mp$㌝QQ|Yh*^i4==njvmɻ}?9}J(xI6Km0`%?*a2z/,6C¢po롾]Q-Fxt9ɚPْѾ_SvrE);`x bMHK+-u~ j/+b3]E`c[UkST7Cl or*( 4r@ē7pr>(lM„\Uy)`=(`ǔu #tK]%S^֝kLH:G4Tp2]p^}u5{jlM|$ZW+PgCܭ(#uZTG9-0#EkEէ뼰:? Uy#iBfcx'ISN~\v%?e_wq-scLߋ@R ~t"dImgc\wX\@-%a l8;8w6O^t[Zj(ʒ\v54nKk.7Zv3JB{m`rڎtk{P:wU'B&8l.DE`κb D]3woxQTàHxuG,]| eR K_ _5>r`/cJV* >5@qK4 "%C-vߕ)o6y/gtڭuʳ%>9E"c^S Qv71G{(#S.?{%gq׸2`+#+93#Nw?XQY:&FRwfF%w &g~o}zýSl:EU]jQڑhJKfr$*sp< 豳1~~3 )c! Xܜ1OV(@H=}+j,!`0es溓&bgԸLŽNa]d~E_$H=8/`fMU*Q03oꒂMi!ؿ B:L qME{&HuȰS/zG3IU;Xs_0}D6,ǡ-[eOTm VEہ|[jGFdNQ1|std-HZq-`ʲ83]\%N-Tn]hc9kL9h:MTe_/~YKSzXRn)ySLB,4-Kn'$ftVuAXans0멇ܲIߨID2ԇzǓ+]LOu tc P33xx> WMv)mUt_lQ4k$Pu+eѷְ;-SPoz"P}U1VڷVȒݘ UNh6+PɯyOa[}Ts-tӥ+ N ۛ/ns 2mpͤZ#8َ`g-Kd'rL1HΖ`ˀ2aנxx摑o^YbX<5 X4FZ x_~I[ޥuq*u;z2Fa9J!1Nd~lzƍЇj>)0 h^K.0)jOD99#uM&kO읷yD[e㎳w+trnHd""tҙlfjԆ&%(a<7ﮓ_Je5wp3Z(V^= 2(^)X\A?țܨk+s-ƉaIXgB8b噘e$ ǒ󚬙xVpXPn$6bˌitMfƼ.7Lt/ Gdd;VjU*p!k'"GLjj{!U3N̳stNFcFAHh~62*?~W ^&kSD5lLiwU{g.M>P8p /ԂL*"Q:7 :a&\|.-4_iAXuc3ظȑ,Dxw$B@X< 7.:Sd|PK(eHCv=g OK _Fݮ*7gR$ S}eJmYSn}k63|!qBKF`]J up/s],6(tsuwE>uhK!{"$\7fMfW/ը![{kl8vrh)7|e-M7|AO,fͭi(J#S*v)E<7jU7U\=?Ҍ"VidAи~"Jջ "7,-?S Ew!BDl&N`'Oz11ʹ~cӻ&c&rDkH}H53$Gν}\'q'/}=47 m4hp8~y*%ņ+DN-U{?mp]AA ^UL+6X1DEVYX>o%p UgL7yˇ.+~J"r€vB>b dS@67YbGg#!r #U32`eu# vD@h; V)%<%e Kښ§(D<$-"A\'hSu2\2b׿>Bb;{6g&Ҹ,LyZ[tL~AȒQ@u>W8GTxikxQuXTa'Kf%Y%Q^utM< SR>~q֢͂j=,iIH7_5bJ.ti+;$w=[+>b_~D،B2vQCfpWK9ј@8apSjI"But!n$XwΥBl2сSˁi x~ԤgUp " %B )h'dS;q>0K8A ';kӌśeހgÍL>QݗN}I!ᯆ1-6 &QNckQQJŢ^>F0ˡzWwBfw5Xjs⤊ He"W-I7oçkJ-VgAF-"t *gAtS@x  \kILN}T'YOތkA#jBaXvbr^96H Luz)5Nfa U~4rCU{+˨iY26f|J # KT5R$8,\0y"8AFE~eN<=}gy vkUA3дMU%ϡ[zz@;Y*^Ŷǂ4jQ1Ԏ.SC<=K7'hx'S:q(῝sVIS%T!+@l%b36 8 %OSҔ$E~猕!x=~EH vm9jpɯyxg6!sG\GLKEFLt٘^Ǘkj^3l5T"Ky0*簞g093()-Ўo`@IIqUeUlSt23so TD~KDi!}fveYدN>wKj|n y*C)$)|# H9fFj:-" cgXƳZ`t4]Aaśi=6ƣqA#/썉@W5CW~\%bLK2;(P!Uxֺ'}7*cnK[n,Sݔ|d|jϹ+(*{~7wȆHo;^P+yQ*)k̘/H#[Qq=Q>ĩo9?E8SXfpHXmP}gk~"m= 8d? G0PMݍodv--טޡyH2f%"R|\)0Ȫ,=$VbHx<ƻ7rEϡʄ DFY!t;qA!'}ЮBJ߄W֍(Zb`)`ןO"kJk., Nn$|uo[5{T3 D(s:J>u#م?QSiVȕev?p(!}.XA|c|cߗl/9Tʕ5b/vMWW]QqW@$,gBpT LBާjAHes|B5qARv*Sx~)c#7ս_ 2!Gx̽ke;&t=L[s`5KW3޼%t=w* 3τ9M"DQAg}5LiǛa;'%;I4hX6fnA`kz^1?uP⊵ [_EVU /+FDR!BK1@ ?OW-欵((4jFn%*gz&Kik3N5ȞD+MSMٔW\ ʯgz䉊 mq}V H  /ϴJCRDhƷ +?a~}B5AQbբc _H|<ѫă3oڸeTE:tBtN:zVQ7_DDZ㹭ʚ .S)5n54]H/NsС$[ZaH0(4mΠ'hOy!mƈ~0]?, [)bԌjZ#g[]\Vܞ.&0gIekn8050%RK~WjkS 8ѕ+ [2UK A6#H1|ͬ[D!K=q&kfS94 (nGPÙl]Q'F0]ŌU ]` MP4<|"xhJrf7?Ho7b6>Z*5uQx4$!ţ  ے%J0gdOfI',kdQLh2Jh|,om]4e o^S,(X,o,BDH_<~}TeK!-LiQWU])XnQ O·_Pw#p*nѻq~E8|IEy#U2Pm b$? hݍ ƛPmuB ^I1uQZX90u9·#d~睡˭-̸_1d`r<#:FfF#K`;SÇ?~s&'R x;Pg_a*fWqfO`yzP @ H,܌PMc_bgxH=4zFj(1U*z;5$L[S D`-‰Hݒʁ~Ph|ڥ'l( A:6A'LSt(:ɋŊ\eԾB* \EA0 !{Yi~>~g DKE+ :6)o~%Bj:McBNL0Xõy >OcpeĐ ٽ4-T&z%_"8'(Aͧ9Evf(.QmU{Ũ/ &n4|G^jf6 .Otfys=fdB?Bϥ|e}lO7v*C,b2(pfMmm?]ގ֟Lw Ɛ'QS`ˡI0qA/k~Srƅۏ[F?` 8{6'LןVb0I)d]0Yy|]k䨍H ~(+`Q|q.^d f²)TgZ+pmzp-!HoJq˸ ?.{O꿴S->])뵀eY/p])(jG w6AC;킁W 蛍F>"0zOezZ dWwȲqQ%V opuX(/bnueGѼ;[) w "Y0ojD:gzǟsVwtsCi Q߬>|3V"[ր6M"9ni> 稅iιi.}F҃V`K_?ieRۼ ܇uK1IK*^|isU YGDay8|[tV..Zٷes"d);QJC٢D~5c@(; IàkU5l,s6~{?y,eCP#1 ~Pb x GgvkCŌ9؛h/ <&' ޥdK% Ņg8pgi'$#I}rǧa:fA`]b\'K,,;=~3?d1' ܐ0T~*]OޗqJUYQ|ЌWGs%ڡTNC@}.JrdH.usJq֊ g&IMK@hżȒaa,%WpH\ ELy!v&d)ER)ZaAĭʯ\R1j'5qsל5SEUH#5y3{I< A*[uh5P}m8+!v.j"P)#Odk =ϲcxk!1E&:7 :v;,Fi`W7) oR{ؘxQҐƌPqLVjF&گFh_>?n%U>("Au7TBR^xr.񢍟" LS{3&ԍ)ul;N&9F"˭lЋrDdtN/>Rr6 X2ܿ"kTWȵb#/U<(Zxx缴st\KGx<\5ztɊT:k1̴}s-A,UR v* je`?Iu KQݲi ˑǻ(2өRk{*5QU0/!KqePIK\9"OEx! 'yoMgIgv 2PJ,@gCHJWYĒjvj׏#KG8Q[币M:̢%`[XkT)mB\4)̓0UnY;NZIܧ_8pNga_E&`F{cM6/YO {ȖŇَc +oǯpe0ϩXZB!\j0`~}t̰lzvS;ҋ­؛LEٟ៛{o]C]:i1&7%>rꃡN&L,}3>tb>jog'm~ƭ/RW{F+cf?4Y0&۶feb); cSs?5¥|rx%ȕjl1A6hFiP/7Y*ScXc SkhXPF7}`9=K;?Y~ӓ@5W q"h(Lܺy Rm&&D;fbcqy@9ɧЫ7J2N Ȳއ䇫;<߫#=&q-67ן~~);8ǡ K-T-vJlW]}}_|bLJFEH1')A)esJ}^t$,*d5ЏTP}I`t8Z&𠛨 5j'ǡ]EXh҅LX꿃QQx=), 2r{ A3.8uĪ\:OK3r"|>KI(@[QH@nd'ND ZkWAS/^qJwjW`2]e/!K|7ƒl W8ǚ_ %LO,{Iu˫Õq>V ᐇ6}A-Aw+8NYx Ot_# X9Gpɂ&oMw QNNˌA;ymJ*Y\`7T:Peg+M:Ved Ye\{ j3׷](׌=kU[ky!}K$Ak(&Z'-bl)}(uo~պ񏋝h[?uHă5EBUeD';'8|Ө* zݷ&EZoOɌڒFTvS#o&_SZ?uOLaXT=p,n2O t(ʱjXv:Vh賱r i]3G:ߙ 7Ydz*HѢ>ea}~e߀2HIZtl/q|*68sLMQ(+Du`o^;VʼXI)Xoc !xw2Y+7Vw FGSOJ;0ス<|1j{g6UH ~1`)h\P_N' }0>m[.׊U b˃^Y>e]ZYn%Tl Tw|Epaa㿸=\H/~ 7#(zrs0(a}~#N' ;Ff>]619զ|W.!ԘM__"P6z$2fvJ6|1HCTƵhbP(qCW35s׉*}ԒJI|i\3Mض$e.>ƍZX.4L@ɨ 6Ytp թ z/r[ ?=Q4n钇 xo݈=ݔ\0:b\Ep(`B7ݘîumq#!P,fʏ] \aHDbnI.@199IǺ(l{yɲ{z/z^%MHp# Go&#F(| ET?UkI8}Ů>wԐGSYey+}#uMN8g6U­6OkP(3Aŷp)}kyTlF BVwhZ \s/ /O>v^͂QQ<_[=? ߾9zNV-Ju [m,._{DŽ"M(\΄8_eKl\s. d %t= UC&B@)FEyƽe:Mmi?#\we 3־&Θo J[dJV*uh&cUV_tDs#>kTrz vD ]0!D=ֽ+_R$:iHj$I0'`FSӉF{TR{#7p(://oV74nUqkqN_(w/YڐD$zj۳A"8]U &쀞:[ݽ?h(ƥ!E"pqI{\毕݅BT#!Է($یըۍٵW0t}[ˉԜIN KCST}AWn݂i,Hw+**~ <XVϮI& ~N*[AAMz2yw6 n9\ 0vCPj,PB;60q-m^S!8ߏD(,g)4'W8[ QrE`dnWOA|;T=zNL/ްP~쀾hL䵶5QjaVn}V@AzN<:i8-jU?  6EAgA ڿD@AD*PMA;Aie]^\ ^屉/YB`ɰk%B}҃fXS7#Zڎy!5XzY# gv4g(ɧ_ζ /]k,A)bRhf^A9UN .);~f=nWhw@ .HK5"'6ʘhXѺ3MӬkSX&9vڏ~~).m;xzb7mWnkX~JĬv+%q/3Ȳ3gqʢ!ZT\X@}{qqϑCuh_Aτ(WTV%?\Pc$@5uytZÝtfΟ o?;^_`uB +=rG_0\akmUdo_""ݣSkEJbX;$ú0?1vbROF7?O[|P9W]b`]LjđM(k)03Aй^k; ]קbw@(yBCU2ϦI/AP_|"ڭXFP\r{03UNNN÷F<@ݓv帶pUӠ?"z7ǐ?ܒ Dƅrn#`yH{;z.E.?i79XL)&6 gymmg[zqqSYV^InWvBAQO\vޗ࠿+!:EI(BEԿ P۸@ :R\3=lWF<>5#(c?Vx9}} v!(@r>R2`vVT`<[yUm0?dMMX76nr \ҍP 4kdk"@< L 2r[j>^ό."|27Dģ 0,rK|(9sр}Qp$xp)ܷ8݀~]5}UA;&tbĂJXSCGZ ӏC{C֙Y!j$rX7*Bg wFM4?H%p5K ;ɠlBOv 6';>tU.UN2g8*a?lzHKw@|!uf_JXU-ȵ08ջVǘ<zw { )+(r2'y<0<S :YE/@'l ;ŝgTUNٺYvoCr&u{D;(JjM]g_88`AgVzlWPɓI9pƨ|dAȄ JL)Ln"e+1{ւ9S9<'ũ :TWK|Č=E'BBv(ʷ,im8`!v?"N?O[;,aK.<+✏à Rwؑ)جZ_oi[-z KTaH֬dBSm2dAqooO`s'~}:K+?dQXl6HoNyKa]aɈm p^#~4TwX 㓠rfJΓݔ(-][Jfn;a3şѮӀuEcCEL .>C9}\n ?Xi_"@f4I fbb)9bˠKzoBuR*X>y2lJ+:^.*3!qa?P2&ҪýKJ}7]k[u䤙ORCaU]ͽZ+dpA;.~I߼%y`H\ؾ\+z,K0Ptv3- Џ*?Ims.Y~JZ'EJr2Xd ͥW:4]tJx$ѠcTn tvӉ,js}XGHLM=@mθQvOǮ{ClƩ@Jͬ"sΧ]z?}=dgu ESEy8}Ap`99g?3zQ{ǕЊmSb"1m-َ7MX.O?3] (G;'8 Q.BX=a  h X%ኴ_76klB{c]0Uc"똷 dj{wXF- Q],RBg5]+e Vwd( x%O<=)@h'&ױc\ZiO zItvvxɖ: 1]gSao-[ =D {g&ä}W#7(41O6*`ICakNndt:ԙ,l*h..IڔGRxeq959v#>e*#= %@]DxUO)y. Uݎ/i8 e?C.>zS` vl^UOPۋ9BA^4[KW+ 3%7l=POHtlGRTm+dgʿv|퓂o 1);wƥZm̬7ޗ``5lj\P8)o>{~.k#9^_pY-QtA(|cTSoB+I_s!C), "1׼N9Hmԇa7h_@`+9roYb5R*oaɭ0fʅ֐!{*B~E'xMph1c@,u/ g\>XtzP(%UK Eh\HU-'e8Ӭp=mؠqf"!$i+ |i7[̓-YkHQ<(xŁ*$fs2vx4C#:]d9Q:9ւto&ςL8< i_d*0kQ7J Ϸ5;b>{XJCgrc5矩?}Q#](Va5xjr&,6YzQ1G%ڐS-zzǐ7 Ex7MߕS yAaV)g =h 2K;*ɘ% 0Dj{ɦ #ώ)2a0.U7gYe,Z@7$0v'";|%2YS(&cb7ߖ%h f+bE4xLj)4`jG8xU?rŸJe {zw*Gʲ3]!@Sβ!dnp lq,&>8N!B=xzYOtt p*p&:%Om꺒It6}!Szxϯ};XU c$.uόBMr*1N$%޸\\+ԘnہF_\,="P ;:nIx?b_k]z.;x#h6iuq[q6$mZyR"ySc!lJ +vKR(jK1m)JFU~]ne^c#ikzv@o"E3PV4rX+\@+/"D 6FBѽ!S;tWr֋eD1ufC<=>"2fOiގZF7̈́%#f^%|NMQ {/]3R[*4a#fa/k81KB9ΣsCB)jyTPRGQ"Cpd LAve<8GYmo p?Ò*f~2 F ^XdN#HB]d 'g * LKk"WcG-G{iyYW[)Tۼ(ʉ('1H1v`[to9$2\)CH@B+^iuӈ'wS#Ǜz`rR`FO鶖XZ pA@Ȍ;r1lԮ( g&C\XGLм*3 Jb48= Mm_c ϼ_Sk`d"$ pO^oGW.J,r]nL}[֣:+K%5r?0#q,&g RY0oMzKl Qpv~pvo7|NB nTB&ؚ(-jx%UНow02+ q*:SY[l(90sA\X [֚afU~wfiK- q'7Ɗx,!~N4=ȴA:`{%JO^g\ u=UC\>\e T+ew ?t<>B' aCB;{PjBCbw-l^:oy`l,jQc\*B_0RƗ;iӬԮOp|?W.(UaM1l1$R,wp9j3"A !>UG@*wsHY̛ӗ&f* otc`v@\(hM*2RY ZLE=4ܙ7>8O1&V{ttv`d ܗ>),l,LΞpџ+Rb%"B\f%z0Xh֝;Y TdMP:^? aa%F79DGwnmGUtbpf RJWoDDr'&.Pb;!| 78jKS*ϝ5+s3uӚN˓,t zxܲ4w僬gL Vx"n/e؉dK173=N|AV2qԕ-(]osõ&Qyf޳Y%浖4)^Sv(dFc0>Hk'9փ\TMJ1lqC7 E̡ ?G [=+[ q P1n6Hmړ.%~f/_ފ/14p${ƞx ǧ5p38356'^̤|Q;4x{o1a unh_,54̱@&khx~RBjEx1cm.CRR\!AݜRE? /{~5e9*oUʱ,Űۘ}߆rӟ .H3@/l x0efi[ރ JlIcwԩnCǛQzX"U!X8WpYv!03J:S6#R{k$l[N'VM=zMV8 'ہpLܬE)`B΄ kh^~ &֮ a ncYRL{& Ԕsd|R kIa2 5w"ʾp_`聊O/Cz_b $*rVHkz.7=[JmIhU@ma754˂S\ 1N#hV՜UJ_Ky \: !꫎;Rp|Ӳ?>|.|縣 W1 ){J7Js"kR+z_a6)?fZH y(a'~h"/Q7%AK+9Bqۗ.{¹N`S|`OІE+B$cfڋhDY^m;j&,8{C)GŘ^}ыe+L| }t)8 v>1XeN›8>L^؂EM†W]=_H,_Г*ٴޔ1\X{BשL.Kxrl3T 1I.DV.JUǁՇOD~ &S,II_?!jT3 *yׁ߉ 9"έ1E(rb]@QըuMcdeEd;ՇNKhU@}\I$/+r@.&QmuP&du s-^Y,񅖊U3T#,$Dĉq Rԡ:}Knz{*jIݽKZFG0 iQS<ϴ-Fe4,Y`<`&2V[4o ͩ+;'֟쇋sqQotM2q=4㩸f/zI[=j 7n'̹w.-ꛋJ*jMJA &7fZ&4/5adP$z~|6p}O_^} j_QnS|]8N}ʶe+XBd@RPO6#~ޢozP7cr/jWiBǗKseiriY jgza9áֱ=׽;Z $6} uf6t|aM[E(b_|S!pRTf?&ٚ#p{{Xyf3 aM6fJp?[[:Oߪ=KOk!`]AҦ̪QȑnM >\ΫuwT?w0_J/ " WdnK1KLR; t42} 6K>Eq詣66" )L?۴Տx؀E[UyK`B . A Whd;!SqVrnтŠD ѾN^le+tk걕* 9q[5fA1\r/Yg&m(ww$%b/Yzpx ZNɎ{Eb xw*DE72uI3"MqM Z:Sl߹x_F\G28w y2b AGȉ`]_'k>džPq˂۾5|V[X}WQH'_.D1-J2β͉ +#zF>imrbSGVTYVcZ> 3ā2Ҿa:wџD%+BQ'rf \Y+5"~W2a ™dXBLrWs4foCE8CAh }E#!R}8?gL56No) IKnTtsT+$s)w/Kʌ4#ؚH|/iIvy|qV8iW @k ƥA_*>* 0ޔP4rX/_}{ŀ_?1PM+wla+Ʀ1pmՋ\x6FLR+nJ5-'3|Y2&&IŎ8ń7}|u.,~x=n&Y_bpR iPki%i8Ch=OQN 2& +M.'vM4)ؘOa )J7ȭoZ!ZCNdDĄ<"i<L`PΫ3sȻ79gFCX';=*%- SNpmCmH/a͎Û+ZK6rmڢ@mj8W7#ks{!˲7H_8*7P%c ihԂqG#^zcdqel }|uȖ+\^wsP9gו#ա_ 2lD Cs3?Qa<C뜏he9ϏPQ'iС[38L'*8FZr2Y;GU@[D!oORif hp}9]BlBpŵh 82cQ];YhyՐ?+q~eo35 w/c S\0RΣHj>b %4& (J8/iuC`N=BUiG>*%ͯvgI@Oq cmM˝u нkU+*5D={k1]kmԴHeH-ݶV Q˕|i:rτ)Ƶ) -OA6t+k B7ֳln*ke4D6ڦ!'J[ ccq* l$b]KF;hmY!Cst'QptZIqYƩf-XMK4%P_5⃻3~a-_Y(dr؈Es?X)m#<2FBcO@g忪}ZvZyJ2"*fog3kY4Y3wӰ ֝+egX`I ff`;kSW{U"ci,LA:k*O g X# h} J !K)ceJ~QPHz}8jK`iu @͡\q*tiE9krHݣCAS'h}m>>&%o-Q\59 >2 ݽ:Sg+0D Qe)Zg }51h1 FÛT`8_ ;\乓(bwy (H}R|'F}͈:IeuDΕύ2J34 *9.W6Ѩ7oMH ! .:=)pOm2H-awieHc70)- bpxOKh14{a|#FÑuUYEO2O]K6oN7j>EWA!"u5طP=lMM.9'%6(c#͂?NXto(BKp$"$4$ KD/e`zcDf7$

\x >R*!dP9<51o8 $X!x6Ք6hEdڄ2w_QvuFĩօpj2٨&s^|gp'2k3⢣,WuHr9'~n`>kkNgQg }lXꚢvJ X0]ZaF>'%ҙ"cCBB 㭔ʘ_B>)19꽮vTuYAm O-8&k?ygetnyRAdǤ`2OE_U^-V%n[5;*ю%lw>={h4]O Stfb _x"?P=28iToWSrmY$&.DazqH ^`1S#j< i$sR8/~Ctq 5ѷ`aOA$wJVG6싻^4t_F$g5uf ~;99fǗ w-s .]=j=ι+ W_^QX!)|q\FZ. K#oDmLo0tӮET8做c:9aJ[5K- PvvaXzG/JOu$;R_ޢ"H-L50N;2;hJ^ARTY"3&c%;քQ'OwQiIkA|,Gv'&dRs[\ r%I2uwQP*K^ ݸ] Ğv6 gł>,1Y +d7 uDɶh$Siޱ \@_!۪Y6\0-i7>^Vɑ:Z< *}A+HdS{pV%.}8 DVSEv Y~6F+՝Qd-F#] ¨ >t\\lJL<+ k |mFoງbhfiZ*͖Q'`:cg٧I ;}*#r .?/l)Oo])oR`4Lx*d;28jdx;Q$Ed~!V¾;v|ŒS $V‘;'=Vmz;mj=bx&F11O-}WA-~^ϨF!6q.ج?.S䧪 Tkr@ ,ӸfSͤ6xvAebS ,\=R3l"*tö(sz/ O{U58`[a-G2SSL Q?/@ŦZ*_%Ba{y?B ΣD{YIhl;^AJxaf]c-1ME; r0K3+bÙTPls>h/Uv<'ixiSqJ.̈bv]G۩uxG-?p3R։Ub-y\˵:2k՚]Ik;?z$gx䔼"!l; tСϓgQvNj!Y" Dg2h-2m#z|Eu9hIϙuz>('#hT vh͛[Z8Tv镱&$D?/"YۚZ7 t*Y#!_SxBa[΍}е}GwˠG5GNkެ!۽ wGb*VɛBM V^S!1JY4&!L;V> Bۨxrw5(~s<)@?]pϞ{YZzD5O+HyJqm"B/ g ƼK~9BS|O$ "]`pxC%iGxjm9#03o]ߌ$/Va&OZmӟ3д?瞃0'/ Ϡ"Jk+S`59ONeGw9pBY]Ck\O ;dDsi nURpb0oItZq yAG+YTJ|&hퟠ7(NU:Y _>d^oH,s^b,`8C5y@gڊX B!E cc6mJI/ii8WD`TGNtZ\j0MSn?n]4ei.ƒw1d!ᅦ\j!VM9Jn߲!88*c 2IH.o/0M"o\;, YE\Dd­.__g\`صrȄw6]kU;dNk</F1f';BeHe;OJwް)(~aLssWmujv͝EҖy`վiu%-;~?<J1e+"aKf~ɅמկDƣji3!D=Q/۫y"и j"0w@؅B;еVn̕Sb Luۡ5C$6޽J+=0oWlΒ)s6yz^B&%hfb/sΦLۢ$ߢi`%QbG r%1B雄[E}R> ( #%{I$̝q,]%iX:iHaѯ80M˪{uti~_v9]V1IB ;{%K"˓ Cs^,g&Q]GvkhXN q s]o3y+8@R_}"G#MrlWWw=>nju"ԡx]#X }4ب(i}vy\}AM_aZ,i" >hâ[]P {'*7MO8o3VBnz8EPQ^}m;zHi\ߚNId۠CR -*WXjZ0,V\JR<^:Hb: zP"Ez ǟ?,/8rH|x’>D-T2#Z26 7V44}Y=j= t[lQ `GBD |Aꎪ/rUnVǎ S^fؓ^u43)UMD˿by8S#]rM-\ttZOD$_JI1 ,Am,=TcуCLb 4A@(h:mW5$y7'ś+D,, [0y&LQ`PƵ@usr(bTί|anl҉2,0>kMp7V?$%w_4?w\<GF8L:*`-tbrf}a Ɵe~gyzꅕdf .M֘Q5_3W=w`hgPi)Mގ(O[;V7K5FCXfSQ;hiJ@|;7ZzޖjHo1j蠋 +EH`p5ӷ]gHanC<{g5ӘpέFHlV"eofQX0p Eߓ ̦Ek9ľH =SSgWR˭{ c9 ]>G? l6~_':i\y.hNVGr_`rֻ0(ޢH/iKyWsxDjy:8@7i.,rS79a*SpNs @=T2fHUlzS`wMYˌP@^>5C^ zOU:ok-!IS#75|bFh/a&j[P[&pW*rKNؓ;yUƍW.REf({*Źe_z!Xx)-lpcPV)#l)Ob@U (J)ں]ـYYPO񵕁fHm)?k<ޢ 4dcWN8Ѫu]I~NWMG<1[4x H)k1gQ:b=|>O/zۙ' Y*WDox#@fm`~ dDE[zPZ/Ζy\ꦍg~E DǷAt.6=5YK, :ٔ%{F kH(yTfm<*\wmCG3lNx=$;S6 33Ȩ,`,KeBssd\BdCz -;{'IR:TGD`u82,p ]ds82h-ܑyնs)zNF'Q^@Uϫ1:n2;㯷+|SzvYӎa5Z!ưkLYsG`|mk0o1S̍;gJB,kyv\":Ze~c`$A?ݨۤc]8E܇cS_tD́0qC4(omAᆚLRD^n~R@7$44S!N;l5ʕ"aM:V.&ɜNs!FH  i]*\( cb / g{b:/ asu?dg;Ԋ5nĢbb9 ۻv9-o\ɨْ:фHEyb֛͙@6C@.Gu4}LLC,=!+RT7Geh D̯\1M)w ݮO%Fz3.]\9QYApra%n$b=Uus# "%(./]fǜq\t/̽tpm+s|c ~26EI~{Ϟ5 noZul]bf9ǎEEcgpH9u-[Ҟ~B"]|˔΂NJ(;zxI_;Q Qj8ʩG Xӆ6Sxx Bp.*MGiuFW%Nc0xɭa@BEQIۦW!\0(O7B >cqcb`Y0/,*@qU.1Bhԋ^N8yPe^x~*+?NL+X,6~ ӃF@eE\wEC#ʗW;mϰS6,1Tz3l3NmxI[Bo\a'PHWО*Vkg-#w{AdŠd 3zUYvi"F`r{gF^sv7q=~@Ykr U8p\bU0+D:BB1!'s!H}lk<5 F ߹uipGS*+zt(Ҡ46؞ӟl` 0E`tnZ m9qN׿>%1&mczy<»,IvS6T9B)]1.D@S.֦ƳN$6h!V6fhm {WDrn6iUg~'Ȝ H 4얞ʷ9QN2  AF*^V0Hwz#$j d`*lYEY%`Sh)(䶺gg3m'9?U1@a痃%~+=x0 C=5ZP:{7J,_2G$,p]{2ш|X~ՉkI;:e;0rz!Rc86Ze4#Yr *0CoXHK:X$y<9Tљoz ?˪KgbLjIxJo8E }:V؞PJw/Q91(P:^6iRǴ_W!{Y8:!wA.XMtܭhb%G7`Ew@vU_ E)od0gLvf2L/(2že{~؛X.{_q27ݵl'3(2:9*ξ56iPzƽ}$a0z+=*a1-1LV+3\KIAk_1O'dab#sW\rF)"zʅvB\ǖ aY[bNyB gO r4}*B+o.(l|<䵓3gv] gr +NT"tVQ%18,~Y`V R%n6 㺊H:I`A!hO_"P,3>: w<} HK:R 2B'||s緧 ҋ]@_ }ڎ^ڿ P_}U{Bж98 X(־o2 k*~?2;K-MV7V$}|l,k˨CyXf?w"Wt};|MeptY$.Fͅz4mA0fr3Tu~>ukG5W  `tTWerV5"2w|S,cË $g&Db~Œ PG[BD4{'?:Y%}1}re&2BzO,]aŒJ Xo1.~,8=PS=NOP_;ssągSH4W5 5hb&Ec?^XxjB+IA3'TI11`}O4Ș ߼z{_:宲 UrBs qkbC (IĝIu[xtY6栛RT`)m_vHN>sB.c0 M/F-A8vbv<3̣W`szFJkjqk.LV!\A(c2rkO{b_CT5^*$3ܲ%1.c(|1-Ե9ǯfԵ ),5 C~MƳ%MGd)MB`gk% !ttIm9P|bZrqAn#_[W}/8 ~[fDW~x(\?UV+_a5U0PњU5n4e*,^a Se (D*Dlf̕Sgy9=Q`Ӵ Ӽ7MQbQN3oBDR1\]OI<l(G\ )_a좹 >_́{b;ps90 qk2 (II;ݼՊR"?[up$7궧f YOhA;/@W*] MVfN{q׻7iܤːSءc=0h19p$GΧ-4nI]G)hj놮Ыr.A[U _i=QoB|Xh"Qp';LU0ԃ~" 19ᾔC/BO %MďZ?ڽҸ)U C׆ڗYCÄ7Rsyc fmŔxe, jSuv깠CXAɀqX"iH43u$=jwI΃~Ep# voHb">.qxQsF|,JW\/&'Hivы$MW:=ڹS? w6/e +2ޕm'R L$B:B<zɞ[UWeM>}&CL.6ud{$x]{ cU;ru{sU-KӃk,zXᡏ@{$Cy u+`)UwgE mg|mi8P`Sm'n8YRO} (c_sLfu/U5u{$~mj^zpaxu“O484i#k>p(:=>+AAM0K^ Y6:LOsIMLiKGg7PJh w5 ļ!,h4]OAkB@6[֣*:?r8dt8^`-# މu* z!^%fjad=•=!Rb]l[fYRшeҴnkm@hl8Lx.܋5G{?UA'% _(òa -t̷ZUX !J)Ng{ |k%dQ"8Zpu!%rcbsSł )]ďl(=*mNWA(7$$M ]:é١CfSL{NT9=~}OFʒ-8|'z2dzK[_£OoxMC9kTs()1ͱ>YVV@݄.bFTC$ x9r-x)AF/4&|TU x&-;Ϧ,P7~i'Sv^~W3_ AuS/Hq9WΛ8ء7[ۚg?p>| 8Lh(I Jnm74:#zLi8^:^s.vfiK(?͸% l(28NRunF$WH7f2#/{Ek'B.T]Ǔ6)L{c[xDC~}t3ꚹ)o$n& SPd9"F KְQ v`B٨Y`SfENQV<3G@G~Fh5d9Q M˾Ƅ#Uʊ$&?©zVvf<{S%r̦%z[lu&+(РZ7pV 8%A gQ/tٹq\y)ń [m*P\a`-sîF EЇ }YI^C2} ˆZIul9![b;jy^. n~ISOQwj{rĖxGĜU=PգY9qd_]V+NO"#.#0 ۱&v|XӔ:d 4֓S6ie>W$#/_ < z+">ygP;rV4$+ډ @GpWҙ÷z*3m]o>hD} C /c"/@#hq$g@UYt|~7pZ>$?Qk"jBvCy9o]AvOGK9^]YHN,=dMґ&<E/ mZ\zV@뫮|ė/%leE{Rn"=62ٵaE1;F.VnC!U ͸IG=\芰 !0VIG1z!א/lkFL[r!KC 3.,]J[: tֳu AL4ΙS!#p0{ܣ{yBГ3+Tu3~,dVZ6~*vDpdUb Ϝ' _[PFQ|f\)tmM:RϨGL!~rYo{$rII(!5(>* ;[Ԑù?jODF Ujd` ;(.1k/s0߰XbxCbf+uy?'LP# #@L?hIg`ŋ0^F?;:kr4UrǕ5O*mƻc—`AiS& :P<":qfcpb~7E,âe_mTncK⃊Ip]uLhac?R(mU m$^7~zIJjOH5]VsO c_ސ PsG3|2kNT=AFk1J>E 2r[1$Q^C/hnG"PV)b7E2 {q IDruUtB "csw攆 jҜNl%"}!UR\cԢגᗹXlM?a,zT}\\hyB]IsLYDg,Q+r* G]εQweϢs5Vlg+19yצkͽ7ko8#T_^vB7ᓹt  (Yp5"@\YCn(dt5c4p?&]N>,b͈4? պQFd,0J1cjd>,)qg>uR̼)*):vdxcltYBBhK 6?[%ݮDػ#-#8NEOhީ}957 y;OG,,a e7ʻ_cv]-А{y3v<(i/S7z=@,XA7&,3G@U}MƮFdn7bG OX)I+#u ^&%"[gD(ȑD^2Oj'5Xl1 R$lUJw!0sRfծo)_~QOo:C.9qrԍ~ QEWixb25j;{a]zd~T_HBщѫ9@ ¶xƶB0,F"[MiMFzο\'n E*'bt ˇJ-VBxfT'U(A Q8ܡӃ=c%SĐf;#?s>'ۚM"$}ET0SX :,TEC$Pwdđ ,9'+;ϊ1vG\hZKnc1((Sxt~.c@̅j9FD)>[1wl˜",&?"l[ӯudvͫ?)j@eŋK$dANIJI%2Գ0ȩvNLLr'N !N2*^A}:$xNL fU cxyBk%Y<X8r:Yx0a`tg9xc)Iܟ4v'DqW$W)p`9~εK|@ܜn$B7H U0D{$Lk82e +(r #)D{ }&)O c })hl;3g Y ʳ '>'K۩Vyo=\= uLe1q{lw3/F)rɗGPK ϵ%ԌH]):9Dѭ`AuTĤ~Wu"RK8k/#8mKOKŇ5.kV Tnt@xn,elЋ,J+)ڿ)4QfrP ıgρ,l|2@-$ɯ0H#M-I-Bq%J:dfv3+WV[3p3&z`y^fqM[ C|uu},{7 |@qQ9܆/-0j8X"H?G:8kx[`=`⋞sBy֘p|܈Ac휧2n@?_$68:k )of*˳WxΜXx'pJ݀]r˞exx!~hA|W`jBW{x lΜ r1~{$\X3s7r/J/y(ao]@|Ոٷ9֯jʬ+gDyY Ҳ_3!V{HܽL[a V2^mPG0 zhaKSh!M8~mA{--ËM٘t%:,5!5 VF)[$#nuu1;(6E7x^D@1R?~Q$rs-wݹQ~HV*aASo/5_@cŒ@0P`4:sɔUk5>ؕuQ:d5Cq!lhܒԊP+_. Jĵå7,ebKcSH9nʹa_Dz.+RQG04wГu; p'IfrώFnJtE uq) ZjRCʈ@ȍGRԋ9H&3to Ib ;?QPa1HMc+>c"/u-S@t,WNFD3iK .뎮@G1r^0kYؠν*qf~L:~0Հ9EK>A )yXIݧs_ c:>KψnCOh;Ľ'?{5\2UE},"d PEI>o=q$Γ}MX 5U̮+u$ ';&@Th @K)HIs5駀:Xu9vmKq\PmB\BXsz}%LOwK 1_v7M]k2n$AF*EwJ$^xJQ[4+Ĩ/ w*m_.iS3I:/|&yANldm]|yx=S@$U_&?QcjArX̍ϛߎ=7!rUp㢀193fpǽs#i$,K# rV-t-?)#t)_c2]g C = 7?;D~FQ0%Ved#T}vey=;^Ŧ^q0/^]3'&oyW۩`#[Q#XPʆͳ Qe"qaƘlг ?Pz>\|w-30^Vg K0xrU\=ņ8ݥMs%hFCJ^垐zpM+óbEԃd5$[nj=Y.Sڨpuy 'r3^Ъ!u(|/wu&0:Hs7&qNGŸv. ӗ%B) bK&-22 ,&N?t֗ <1Эi_e]sz%*VF~-3Ǯ`f'LI,*xMwu.h FsP#C/dS Bn>-{'QbudȍtIZ!.EMna&qmU"MwbL!bLǿ is=L[N\"E!Dr.ɨ?i7eL&bńtiN7r 8-H%fw/Ӱڕf&:ipҨXvEYTqS:E|ʢK6OB|l j|X~l ĵh*̳PEM;1 K j(tZmUDJI(,0pdTZKI>⥖?pI48h2~dw\Ā~ʻl`He\zj84#IfE(N`k]>"6u:Pj֞O-WZ#״w;a4 WXION |*lD6>ՓGzADŽ N%) `]h8Xǡ k`}!9CJr dBL<򪦗K6>zC൬VJ^"j{oTIs^5Ӫ'Q? 77R`G:a49k߾Gk~G5Qxpe+ i9N5{>f$lF}Z˔̋C}3I _C:$gҧz;S6YCe8}ӭqsj _XCvW ^tud> G=V7Lf_Kw~,UzBqE[lt n2Z)6dgxzMP'o%t:?:h #HV"[YX+x\F!3v)ඃ _s:sϊ3.vH "c>Ǻ vbd1>}0%|#OXu=Eֽ<>4۪.!jO` "R[*;C-w>;D4+$%Ȥgؤ:+ean}T\'$'Ǵ4 :\?ם YAKɏ- gܶ*2<\^,pR;SW—|:l/xAymXulx\a f^j>&9ߕ=Jz |fhg Ud7BI57h#E9EmEE;bɇaxǹ8ݕxa.H@z"ˣ, u,Ď]jž kA2BG#/ YL`}yE0>vR:e8}G9@!a{X {א8Ph#^Sp1Ho̚3z\$j@<汗wK͸C.n!~®c$_m\ND2Yzz'@-0IHb_c, 1'A!OXS+L`Ġ v[>b1w:]XKJSA"dI{y^%46C }Yv~Ԁ`b){pҌfuzv$(cj**NДyl*˾#O,Y 718xD_Y,1FUlB\!'h0ǨUu?`6e6z#򩓔= n1JA(v's_1u6k@TR1pV ٲ#.q X#$;62ɳ;?bS+Z@rLqkQYwf^GCōemG+*璗Q~" JxԶ2) Cz8io] Y6X)=Dyg&u#4 ghI Omw|K!*F${YGleoT4\$_I7?[%MʹOT H-9 zj# hdjT]{#lb%k% R\\HȂ3k D5cT[#f !`#ݮ0}"4EM!#|Im}K+٭E_EQͼ.|cۉUb+FBS]1Ś CZ[H簵81%">T8[{yKt3XZBj4dH4`y!H'J$Iz=@g4 *g;֯A9T1Z^b][E.m coJK!@露2\6A*+V47"Je7B 5ǀxOB`.,-K4a!v^Xξ)Z|~D֖ yWACr{DV;8ʃ N>c@Wc})cTÞ`Q_qЌrcAP9=M N2vRoy9rY2!Wh材C$2aI݄4vB"n?mG\V?63 r$[u}gX ꅴ^|yWPԲY-s폱 nPMVLmT7@9xcs#|z Z -0%)RWZ%[Z,BgffFVO$T^n6wQ;1Q7k߂Pj{ w Ȋ=#J-q-el; ,+/w(`PJی>ylHDX/yfp⑸wup0"WY_z@v>آueHOϩv_K% mȭƞEV55O ;n"|87y|b2)z#;UBc:x ;='mmǡan^3{՞}"eNx:.eeajEMa6^7L)lH z>n=': `dYݒ=`{(M_h m`eoY۟_ Y>ouբJ u; 83&5W5D:WΓV"s2\Ir7cHMYnRy_xܶ=)2x%#8f lnGpH9Ћ)QJYNW>-WCX+й\N)0eHZj.ԯI4 7x[a-5Kp J+O3MEdh67ʹDdsx܋vc_ ;E@$8ѝڕN4[26;,tъ!{ܮ?58S%Ijaz-e8ېď ޵0{/2KT$˧z@zP7,9{R'yx5dun*Izu\Y~CbaT@m@vY+5fdWCT.R 5ⷵC(_Jv!f.xCέ r3EHpb{jQ49˦f-RA nvnHX(.:1RANJyR /GCd7хrk9Mq(\> <\jh>5tIfQf.* %V˻zx6eNe9nx[ѡ?mI{TA lȐĥ{3' +474 3`+92R>$3Q/>,Gzrs>FblmUW\֏C%&|^:&vw09W0SjQbI4vAh97*FMGdNdCce"#+7lKYŸ؅UI_lxV֚K#>T~z,l?`Wdxjx.U.%<&2;ʕ(AXUPڙYsX25RH$tWC^{+M&a}ٚy;݉Who=^E3CJ~6lݣ@2{UjŘLe\uHIx!;H%ޟXAo!@RM ƤBg1x 7XmEj^!&[&1ZUo]ohD|yKmf\jQN2ٝ =gcZt4ۤ[H? .i= u^<ѻxoטQC%:-Cqqח kۦ[2 #mLa$*5 0I5(5eWHX20f-\>QZzN(JL,ȱۜ3oq1VˡgԤYWN%UyMkվdHC5܇VZ$O^oN$|,.Lv,8g%T*g6ǿKI LzX^ֹIv+)W3x| jH-Za6T ZZR+u{g{Q΂ ̲0Xc3h!gV!Tb^ >ۂRٙI@EtrxC(Li;0%,@G+GA2VM^>;} jMOM驸2D2~Os/kJB쁩z" "rŐS,pmc6h+61̇JH´tye^F뀪;RmEq6}L-e:vy_[TzˍJ0S>>5 `5Bh Ox\x)1^{KٖC/ʝ,tRai  )S(b"5q\-\z4Ϛ*c Oרh}oA]0qL1 8D1+i&1/W̓)9 : v{{'ߌ!IAg%TtOGlA&2fd.]ȗ9n}āxs;e~`. Xś) mrB-2vҸ†O õqsF#I؞\w$ACɮTp0&Dž2agrv=ԥiYS O8hԞ8%׾ 1!6lޒu w7gooV=4풲h&gDzVtv0aGgߩ9ggo7@H0ST_VP"22j|sTP2n@;$Ld>2YNMƉ4/uQɐ2ro X-dݮc,w??֍YX̬PcӲe wdN<:I霥ձ-8(#TSĜ|=t^/g{+H^+GFq%=}L]O ,MFޓ3Q8ĵDmZ .("b5a9SF$OQ*6%am?E3[j &e+ ȋw 2* 59)rǩtCC&r9:O/ /+z>k8'ߜ`pVL hpן6b6'9$󛐎V,wb+䎕]26M" Bfw[+F 02!R͙Pfb-q%iˋ./B; qyŊKF99Z_%P- {j 1i.P'ZG gԡFoi*U̕\A`R'CX.gv~G!LEΞWIglY8sSHίr@O*T$6*Pl.Vp-8Lf 噺p v{z9M2U& czϜwluDВ(%%v4 bv 2b8pO*Сi݆\Ծ0'hS8T-k+wtS^q/rgSs0s-Cf%9Av>L>d1:SG ƹ^iO؎MaL-=L@(Y&7ᗹIA(FѱlBA$&:xņ@*Gwcr>Elh[:>e]:ys:HQl˧՛(MA6nĩIтP TE|6 ,i2b8U5F qP{ X.Tfs L{zp#v`ϲ5n;M|Yn+ Z0wmwm=N1(;SP2zxEK8 EjdԄN!-QƢo3T݊­-,eKI{EƼq!*j6\|37_-*Fu79bh%(^\7Sʼ?gpD3濲J3`j}"7 7K7NދYOw ff:Lu^>ɲtW\xwM]!MwAO)Y-vb0DȨi`:(#>8Xv=^~`^KO_"*JJD)lƭ]0@ƯrʜXv o͎L%A 1 !`[CBv]>kdٹ0H'4pGi$gu+lY(>ĸ"DpF1g,G 5X̛J =1%.%8lvzМIMʑ~]a 34D&58΍~{80 \" <18~5"RUvs'yaTI\]߳zƆ?Κ#G7vITceSȻŘ*ݞo{n #s$2S fqcT$\t @^gyTTtwR}\yqci4Yת 4p+Z3\i1x )iPejW]e $[*gk<,|5IٺK{$zG7byY`H(pi'҂(sqeYkSaesc ëvI>.z+DWz"&57'^/ЬdѬՅN34a+Ƽew=d9Zt Q}}"(umϭl`_/IHAm:E&[h(Q /17g#{ !TPvO`VC~J4fͨ ˣr9g3ydʦP]Q\ ,b )~E剳-UtR]{Z׫w>MOs+`YT>˟S7dx25mU2<0nڗw Cjj<0|3`Q6ZR!(zt%wBT 8NL2.!ν[\ב'{Ĵ/`x2G[Iۛ~|@R`QbK Z2 l)Z֤h@L@ 18Khn+:5W,X.2A18zJ8O˔FG o1(NW#jBO[΢KGړ%us-\^|9=X,ܕ6co ˃WAF/K@GitN|L`~SfۦH!JhX;iZ^w!ҺVr_\T㰷0YVQn{-v t@nQ7%E1ʱ B\tFoл nTf)]Rgd*sF6b{pBQn+e03첌<KL}^5m[h: A&ᅾ ɤsUz?8M?^ꬲ iZ yk M@s&m4& E _A\v/X;fWqNǤq<Nr 2\F:{4#Wy5YHDbL ntO ABzh[q[w|L,r Rd'>ڂ %X~\v?ڂ}^~71cD[ G̎E~B) pű Jq}~$l֭%\ktV#pCyɅ[l{D0KxR!Mb=*Xl7ڧ4D݈[֐ c~rba,gp z֎ӔA 3GdOh*w\b~>exހS*? a֮dCDq IӁ;i(Ḁ!)Ϋd)Q7Ep*ţ1rCpG"+:vhY_bRkI=PCکtn_,#CDcGL.Ĉr&bG@*_VVJ i/P4R|M= r_9^mnHW[:Q(F7rfs!n\XO"6̇+nksM{-]~s{Dc$vRk&Յm.QY^n+;RgQF2s[L?\$xǼSLVW^"X]$?7UWR7/w,zہo7J=2gp͙c$w0[Fs -;l׈L!Xmrۄx({[O] z^$CTjjxf ;c $D>t/{YŇ"Oopq&N2v'1@re Fqt&YCP5C[B&<>o![8yM7h\?nn?@ PDE>ӴV=xER # 1Ref5lh<(| t'򡉬p 3ސ?`Fnl?Sf5yKlQr_>h^9x^Jj,  ~`7|,}nSF+ M@G;i%%'C|i D _|p<F*n }Bֶ\5tn$$@sD% ~g)|ԯuɲ@-һD逴~~n50$fn1t n(#Kpd 5)Zd,fCNcp܁uE·4!o 2a GS5[}pG(sA B5ϥVmg7RŹOuGMC+F $%Ug|f/ t pK83Sz`0qьcV=4So\zF2^,0x.o'b} 0Y'0=ih2~B9W$[= %UI@.!I}roZ}^q.ܪl.̆NPgZY>p Y_Ll9fkE ~3^-1P*ɏdstqwiأ Eb1Tl/hт8|d(b`DU0s6OBV;l֥YוKn)z"o|sS6 ٝljh!-Zhcl{R9yIR&̝pA=p E]dt3Q:vEMTHlc-WWG#iyU4L'׬UuL]1!X/GĜGu![OMi|9JzaʏVk>r0қ'_QGdhw•e($w?zwx=cToɗTٷWΛu-8XGB^q0tK"o*Azxg]&m d=\' a_jPNUaa0\;:/vLͿgr>~CǸyttl/%©gӄ AcY?Jkb\ĸY$MQ̴S 5M^/ىܲv]* ޶ih`-k.f9nҏP9NJEmiwIvV>6T gh7 W| a:-|[4dQ҇VNr|i4tږ(yk.cDL>}'ۋ%7-86֓Xj@05A-!sۚ]U؏Q7(wu2VOE0,"'xRp 5ܬ;`t,:j& s|4$ ݫP{3mu#<~#'{mΡ(p%Oβ Zۈ].Ѱ#hJݝLь_~ v6&S! \M?w Ѐ'"g7k$xa"<;^| 1jOeȳW 6V;HbaLMfޥާdA7inHN᰻[Gգqf$}EB)DQ PA-1b D*T6t(ٕu{r@h 6}Tjugfׇx<|mGf%nOÑ/Ԥ8SmERZ5L*;.\UTǜ }tpn) w ꩭnRBoנO{Ug^9Z6bc 'd̈uefb9{BьOkm^]@s8i}DW8.08Sg6&Qyʂp^ t i+i(~SS)EI~,נ`+}Õ)HZ_݂C\n@e`c"钁{=%v6'>djMVyDEL*S)dG n |+O ˽▪^m'3{ϚpIvlJn8{Ŋȉn9D%ܧgf4jd3ژN=h,& Xg r{2iQbA祖K)\gOGWy&i<Kb.&vij]Bhm6EL(?WO>'nCN+5+L%,E)zʆ 8%s˶d@NLF# Os7f{4~Hh2S& ADs&Hӿ~r:S0pIӥNf@GpXwsAU xQ,Dm7sns-yppX]{O_lCgOmz&R Yy{li6h׉@h>%͖:LPm}|^hoŷR$4vXCCu| kHD+Kk1erPJ#hWZ&{x=GgAvWA?a@ywCC.C1葔Xvma>HA,1T oh?!3|&5kۥͩkU "?Uew}.񕽆JoJw3wߢCbhͯ'qV?'8JpG ì{t۟%y'ӱ*brp'p #;Kf"EbMo +(T)t{h/v#N,l2 L}2O_2,5rOJ [E)7Q#* & 9_zG;97h00E[':sjyEDq c +I݊Vēɏ(?‹:`N{^xs~8w=p D~a?r;sKն \p&:=xO`L>NV<zŒ*|Dj--鍉/u3J@L0b3ɯyZW緛x!ޟxBCf'ZaH R͋@Nl~yبZ Hil@'"bhjv:gz=K>pHgy$RS,mSݽ!eAUIR1To(Z9^L}o PAkolֿs0|.^R'9JګPz-}}1u!I3J`HnW J4]/yH*|Nʿ' zJR'!~'XY" zuzcPM(FH|72%ci1'w@0k$@N~E/ͶV, U8bqJC$3Δ@,'h+Pj2o'8BS])\I?ʫ}i+K" Pl4l*,@G|>|h8jA_]uXA3* 3UN:qC!Qdf2L ǵ97O>b=W (?ONhc啼s~4K qe5pnf0OTL黏BD K8sqץS (G,.v>5O#o;F*b-'?iqQФ)/Xs$Hg`I5 NvJ-r\1{ltrw9"78#zLjTDb oׂ4db8zǻBmnZ !{Jk%BScCSx=Š1vW;DL1t[6ңz]R%fEYUk=O!/tcx#HD gGC{b}RbeǑrQ}þaN͆6ḅ"& 0 %~ѡt ]6#Qr%dS@EZgiX<%#=9m2X ieUкTgky4𣴘* <"bj^c>5RQ)ǎQ|Z!43"L4↲Wg[{$$OKMGU$]GtEB` :~/7|W'|LN`x=H2h[O>Du| /EPʋ}nc^c vB12&XInLaԫ"`{Xg! R<);'Ra=%YDZ a)ogd, Q2^`OVr)wdRFT MB+X`?=ϙN?{#m%擒CvZ IVTM%,_;X*-/,c$Ζ֋qӜ06_6J%8>#:zJjvyO&T"'M>|'6A4ԟ3+a4™|jI$bkROT6"AgD˫ݲu"t\jA +8ke#t:ߙ6Fit{4}W1Lh-]=%2wG& +*̮"ڧچa Tw)rP <+y,L1W9j@9`0BK؀]dT,ᙍA&V{K!rض?҃]RWtЃ)b1jt[3d۾7Jݚhm 6gU W2#2N] (n 2*T#jAtt*jDi7wtM7 cöMЖ9J/`~U#iKdū*X}0@m^.^|0uY`_PˁgC*CdP ڜO8C{fBE@Qμh!R?J_87'nc=PޯO{<~w q$ fY+U FKm5N.-yA2XoGOI_/E `VjxkW~,9 k,}:[+cсҤnk֚tC<oge˳W2"K6K d9vl(*e%rᔃjr oʉPzHvOçKIk1x,]bHgL3:Imv4(Ryh ?<~MKM`=Ŵb_iE!"5∟OxBjz2t#U+ Qu _xt81dۘ0|4Aʗ.$!}Sn}L1'L{W 4zsC"CAHcsG ^'2'ݬi"%% Aed5-PZ) nGto$UL?~LVA{lVꃐM D@r_׋-`+Z䟶Dž5n prX 'M [Ö.jJ4c[KaJt~ry-X0S9nvjZzEvhr~m|$7 D3 ۢP\T!J!>bݦ Q"lN _2 ` %M.` f/fS9?Xr_u]Jt_:]hmX&Kc>~ yQYƹݱw^Ԫ`): CVa6=3^>XY'/MYhQ{RX]ܤVǃr- Qo ̑_y@KWoKeU<# w*(Pw+auv9Bm=ԆGίnp PՒ*M ,:kØ%Sc[虗 ]$|O.œVZÍl6d$f)޵@fTo5 GSl\KQA䅾."%G҉ 7Sx AQb~gg(lM~4!ЃH;@Yl.NxZYp.⚫9v IL;d|%| o|* 6xa⟥JmrEZMҥ'Iv87B},3l-[:.ֹfHgY޺fhL11tF:WnO$}WcTU 2m̒t md5Ns% ={]7PH]UN?1|0| Ktxz-2y7gmWaY`e$5}u*|= Hand` `LVÁC.Ԑdy0DJ$}%U(h5[݇85'4K7"/0_0Jy'm9ڒ-ORE+q[~xTV) 3$Ɂk[RҔÏE Tꐤ[q-uH>) cUVcSQ\*_PS&a.!)~0F|Xg{'s?,& EHqt|@o:Z= y2]kŔY5]XU/7O%[d_)#N*gvp_cu ?f+=EyzSXoWeeYb&;OYvՍNe/7hպ 5}>{`<'`[ő:6i\['ְQ̸DtPZ@?@Ws -!CW ״LI]xUP4ѭКovh`@<-]ZwIу)Α8T#_H~~c,H-`DSfus?eʄsa7bJ)qj|/Ly1o%}D Gd>Q̒{'*6Wf.t񋒤#+cfl2D4j*~Ҟ." ͓(0)> n0 73c-|bHĬq.s׶ޥt|ĿGbjd1=;zepgϞMQdk;-CjmQïU"QPA4ޟҀlϹWȯHBa얕xG#RtbTr&Z-0x/))Z/ہ )3p \z(_x謜ϝ~REsDD\̖>prdl ť5Zwe\wlQ'dNrmm{ǟOr4.*Dny9z UR6  .֒u g;Pf[̾п?( K(⊃HZIzf2ͰA nt)=ӌ7'yȠ בG1[8e,K(ւ_ Z1m5o;m5t3s4/&=) _YT< L|:(~]IIZ.B̤=U陘nӢU[AhW)_.cHk4N'Š:&M okBO 9j~qz% 4^7`,o"Iy)}A .t r$wcײH`FX鍵&K-})ί;y7 +>J?Cj?ڶOPw@w:7~U1pl5b:a\-mnl%4֩&&G!"T2e3MTCX*+?Zv=i{ "QKz!.sh[_C`$/y-^@yKJˡWH:"JcML]N,Cas<3~44Vagq˗sw/ۮr 'rTw_O O:y{ALU,-r퉤JɃN>&.\Dلi5 ]$>F6}PԌMvoY5~v [Bwŋ/`[k!C#"f&k.*K7cP lƍY5m>+5j5QOSYR7Ո|WA5ݏ^-n϶{pG/:3t(Rfw`J%hx*;mRp1-uQt~Ӻ2`GuVWoy̵7 F$c@^uvS+^ȣM9ko d c˯jaS·uÊ^(^OӤY*_(}!/1?9n$byG#x-_?.6zfdT#bD c5Z tS Աʧhu$H~Abxw5avF:(1bVr 5˥fq?QiYsC:* G+A'(UoK8gå>$eT9vXʙH#dWdAi9cU¹OӂqzP30%V8`@ gjҳNNǘjL s^Q)n8n} jᔵ]Pn3^gB[2]1;#}wvMs*b R?rgғnA>h_ovLHwNZ]c-/Q yYi7f>zKWN=w2s1wxtFnWgo=6+w֢ /Wn% b@jE~hވm=>9%O-x(pcA롊i۰-AqT˄bdFIz`Y0H^9rZOc;?qfxxzSI|)KE"H@!D%ǝ;rFݕxGЋ멡xw@8?2ӎX(no2MYs;jy&`.#U]I>՘CJ)UاtOǔ9^. :kӓs?C#hdI㭯7򡶞T> #7lx0Ҭ$vPE^DGc3SҔ.Lomz%IBV)$;$iFCkNG6!N'2t9ԧ9"@ g u<;\osk inFĽcEDKRR4Kq1vR &Y Tʔg/P'.u/K+0 NFV17qĔ>k9oKL*?BB֜|QNT>:.MfH(Rewݰ#\Йqµ9q[9YJ,4I7i|,W3M{aquA+gi*j`™Ƶ} oVǻF*2XbGh Jh&N4ze,S s;f.N}!Zjn6ҡedž_-.zpfЈCwm>#5_֓BrSŃ_- j>x-bqR,jJ be; z_(e Yh֎I~Sҟ){2e3WT}bf B i=t, ?(Β.Cw,ϿeS 1g=|PaYQxx f b˓b;Q|/HG"M'J)%U U& ^;,?q@7VqwE4ò٠Wr%-XiK!*,1Lw_k˒^FmeE(ÏQ(kt+ wI2R۵F)Zjd@o.&K7# AsjВ.m IM-CNya/Yoq.r|煈 v_򖎛Y6$ g-- K߄[8F^:]${οst`O26XujWJ{3q&AHMsfrڊke5p}ʷ3Az npC<;t8N.u03~2J!Kq-ĵ*;{P6[o cX$}М"vPϵf/ͲPG/P2fqu)Wo^#6w12,L->(љm7d"ifp)$e6 |D%Pqam^oHj& ٕ≓K ”i0Bf ?Ph3?5~~TUOj J Zќ'PO0{$rTCKy8yEP4K<%DB}Z(LzU] eԉ㾎PWgSbό-%VR(R+,"{հjEC.'(D1N䘱@\kz 0({VV}󫴘\[/ YBCFQٟ6'Cm|VG7]iZź0!B˹ں3ͫHx*o8kŘ` 80KbVaBomKG}swo1wž@W ͤc8b>RavʖE}pL^(AĶl©Ʋ[KsKc0wsHVխ(dn0}cv)ԧ>#ƫne 3mL%)[xrAV! ^j+CCp69ne5čq1BCv: UW̙)gLDZ~\Ops3A+ok}Mց@dVch[j.?heX},@O9"W Oske0 N,kh/5s,R}8'tP74Vt>3{dCu!.5I)ʔv̔P崑H婢er|eZG7YxJ0(Pu!]r3o<3PcDZv#xh?=_7 ɼFPQE DׯHIR?y^ɧIeBD%%Eh)EDT27Tē(-п\~>[0{ ]iS=m̍N3p1's0Jj5jFMk &~S$71d >B+M\F lbO*KQ3a ;73ԩj(@<#Z +#o&|6ƒ겥]0 zMzEΦ%VvXu$n]ᵼhʗ{ E]<^~9+_*3/ԓc1%ܪط˥E'@{ˬ+H=( xPŠҗ_á8wmcáAve1H'+ 9_1*|2o2 RvEX\j?,2oP0H}y?L NQ_ԵQi~D2I֋ـޛg̾Z"@(f)r Ais7Sb()@^l[$\ 2|NdHc<}؄-5bqy$XLd_Rֿˢג' CnaAIQLCG Pe{erh" *bn-Q=b9`}߮A S^I9 >' &dk(pw^7]426ԇj1]ۇCW=s ֪t3C¿LS $&"&-K0csyF1R q[0)x!Ğte8V[^#w򄷥ɓö?JDz1XպY&ÔZ_$F a\L99&In#  %Fxq.@jW}@ ‚K*0M. QXNף814M̓B-m msxkkàbQ)JMi,6Hu1\z]ɜnj݌щ2i*"*T^Nj-qGYG2MJ^! uȳ2W>! .J_Awq;9̰j ",nJ`6`-3-Tn WE" \l /}{r. mUq^meD]TI6(2;9q'lVf>׏lj2WiE uBOZ}.~+JW6^S =jRc9̵DHG;a e;(Zloƨ6u\*ٹ?̘}qNPI+(4:|8$4ںJt$y(GR!v&8GW1OOVB ]Qփ#IQU ^ˆVC2ЈN[T^V-RcSz4v0[;nc)UY#*tV3*{|թ֩4XjA2XƕAnE(7I1Bdے]f+&Vvm65J)' ,S~E>z Mz*b9̗b='knX,pN&7Byv>û|0[L0 w5Zt o)c[Dw _H_td{O^;'K킃pBrI-5Ӣ=oaxRHR)V[:I6N@/:3}`!ZMp.[#B./pn(}l$+A3CM}1TfDa(Psĕ@˰cLHD-5hS6XMؚ_ # g2,kRvd[Bzb ⷖ843[aU1l~o/`ѣ'rA^s@+]z7¨ K`SO5Ԑ5W*sҨr5uq{Ȑ*DS0ƾA"DBzsQS$7|L>JGOϞǤRtv 7D-C "dr]S!p #),Pc `/+̿q3  ͙vQC1.r!ՉcԒ @輡؄I|Sre߹Z~ufF+cLc椟{4_5QH#Zeߜ:)!!WN((ϸe%&@[Ã'=YwQqu# wZ< վb9i% Ldy^EzH(Ғ\%m[c%m ž \H/)tŎH?/H@n׾>RvZjz۲W#cb ? SHK~u`.Aw(!7VkfY{*tZmW $e!IJp:qSIjH+:#t,t8E2 GNˍ.wлMH${z` ]SgxqZP~w>\@됤%:omXbݙ~|]Q=Ҭx+Z;V>+3 r8`>/#Xםctڴ C>9h5G$y,ς{.9Vxt*\jE}2y&JD4*#*-*yԺ4YH֝S󦧞AoEJI95 -j 穇 $_,oz(.Ӹ`"]W:bƁ͜> >Dn2`ZM$3 3G{DY$YgczLtF+Q-y?z]@GvsjFGco'pbm~> !c鼾pY=USX. ~rH' fj-|XxOX;Ǿ ܠoU-7fj WȺm{!ji~t lI}qqyr1j19 7>J)m1[ .iI PrhZ(i|ϖp 2T[cXFF6w[KҎ6VK,%k28rk5g۟ 켇ҼbXif`o(.(H8u$e޾gIk8LwC-gYuD4SBws!'H0Bl11ںn XxlY(HoLݏ0S;)혾Y'A-rIzUO qܻi8t!/^2zSDE3GګTxVN˚TT('T#~jDG9j!l632;I*tC\ ŪHG%ٰ瘛?i# fHE™V'~26,}5pG}ivp!9fKlv -p=tZ9cݙZ7A3"S+kov4B wwp霳PioksYgY B4E+Ng(m iqUFH!!x%X MரhӻXT7NڶSsfum09;-OT0 +,R6 $0&5${Zd?A`u!(:zAS1=R0 pCUB k IH]&Y@ΐ݁"ZxOx H2q^$\2 p8.45Sy+R[۳3y4yǯK8+{h!50f0U9D=I E| iplElo 1p/v]s#:[I2:ϾqYm%Ԛ 2Ǩ(-AaV~%w1h}07jG/|4*$-.dƘ%D o˔hp(#f톴1#e'$뗁\ t^<54V{4<͠Lja&yntᬀ_}?н9E%8S[0սqCo9V|sxL{vV.5ZAJDIsm'D2FסC֨ŃaxH]>n 5BگGexC'kd, ]1lsBQ5\dPJׯ#>E%b>wYK"Oy5;fنE4]OZY,אᰠ+o59KpzfBls\4#FJ._J+H!?W=8$9м&ky誮@$K`Q h6h(u*y:0;~чT a 8d1.؂cKS'b0hJQr.%$~M,8092**pVlM} O4pK}_6Ef7ROMgS'B C>D8Q- L݂wyddL 9k Hn!b(|u^7pi=mQ#Wˎh`5VUR;B` yP >2ٰV(ԈʸkzT,pR0:?o#3 aP῕&mEr eӊ`to\2s{oW,0c_Iǔ2b Rh](#l"tϬm"U)vns DTL@NQU J[5tt :zlºO'n[cClJLR'TxRhJcz9Ċ?.B|K LDcKSJN}(TT>zG:P dSrWH0t|k!OºiQ%*F?ψv-V +bn~C; ȯqeE#)PK_J*`%Jɉ {}-g[Ȩh;섒ݷ.a~E`CӠ|"Ҫ-;} 쟪nw'M 2Ӿ[RG7}099AB:Ef֊lZc^W ^#5Rtm??h8 Xd98Fظ{k<WsJa/3V_I+ؔ:~S5#VNV>A,;q$[a@*ΪGV;Qu{ٗ:#3p>ǖaaTK|^;{3HmqrY؜.^hxk%khA?iB|}9~-3c}tߩcxt#7XzO.շ^ݙ;8ibUh&0wלi~R mgSފ,3PۮPNJuTIUː:T BG;+ʎa֋ GX[~rM'ǜ"mIʮ3=(9V"^-Y}]K.xd‚'(&f;7FB̸KjVq{M%2,hۆYH [MmʳtO'댍G5Q.CbL5IBt[{~Ȋ<+%u $T[jv=y;rcf|unW{Y&ƃR[5 ^mew]$A)Khs=VH=P3[aM[V?([ؑݪM Z,?Q7Ƨ0xϵ6+dDqqCNJ|m:ci8Klzl .yѯ/LJUZD۰6KiDvIVe`τWGu;aSYC b])KFM)8TH(x37IwMuM'=(l,-^Z&uI$f> Nn;Ht#;n3Cb]BA# ]+U SÅO к97XYDz0C5<1/hkBjOMߛWk!0G QN>3tU9V|ydp5Op[.̎ -.ܓh~i?U3.n|hlj>zS6;p=7[ڮT q UʜlZ^g#QqC6p]56(rj؎/b~])Pi  r:/vlVsP$kJu :PPTHHl,F Be!ى;8eXho湑"~0:`{\3U`TZ%S%E7f[[ 3c}X:t.tlI СJcUztpGq;~܅Õ޻<,'v|Pe,}$B\X%$`{y786xի^'J(i$<\ac\=3(B;L[Y0'?VP'>fmb1ɡ lGi6&Y(QG%M\ qϽ2g u+Qŷ7͏&U}_Vl+'V[B`΍],,?ƾYg m+3WOZTt$za@2|EdZ6!bjD&]A ^AP@9cyi+l$ *_4ft ~]iS1‡+Ę2՞0U^!3|Hd^b$LCO=s. Y+t% ,ә'|= !S3ufۑђQ@#AlدOZG6ʘtid2 =4ϋy8;yW1O2qg}VmNqF?ȏ * k{0@\#l_4 cAg$jKޮ3Er @SJfEi<κxW ػ@#${9p7|[,oOij}]\nIKg^gL`d 6{>(bTūIs J'9FvwqPE4e# dvfF^F9%3o{ +ճTXl81PoP! ųVG( 4cc\xyeJ:D]-!i.m @]gbgӘðKVKC{̨I,1e\[oHܛ4CyCUp^;[!g,I b /՚,rX6]ƀ3fr}3.?*g%֢nn5ΝÏ7Ò&opjAt0Ө=y$暵FԂ}f¦i~j۱^8j@̀ֈ2D\QMr>+vzD+@T|F L#v 0Ss4jd}x䍆)U/͠|%B.=3~3vG{a , @iYq kL㾧JZOzZfe U.>Jb>d{=kR(4G v#DmyP^ ]() Q׺PDT xc{s 5d?՗r,}vR(2ꮗEܯiQ|#Z6'oA>UY>d~]QMl7x  Z.f!ڶرgR[l3_FYDx{&ۅQO$\^YGdg1fG@<MSAg+uٴ /,2~"'7VO4HΔ`qճEj$7{_ɫ<9/z GWpa6l> 7(ME D>7wkJ--^GM xi-:Qao Y~0|wQE"Ugw@=5nU,7ظJv!k\V慙֒q y(%QL%Hl$- ~k]=&%.8l,|Υ%<~'Bjk,BG-p$hFXe:U':x.Ju)cy, )GS-WnMqjnCD"KGZ\<|#\k/6n,Gqr7u=Oxj <7`X2AC}yw9" ILh%ky[;03F8ƭ}g$ZDS+nBcΛ=DlpCFk:(ʵJp/4tcA^=@\tA1/CM''B ߎs'?F.O/8qx䕺e`{Wf2l|FZY5y~0RCtgNˬ;];Ť[b~ -Zsv.ma? 3#rM[7uN&Em.|;!5p9cQAwCc^C[Vy0nl^BEF!Smp [RN yQf\¿_G0ڀMy?ԫ'c~0b'"Y2D]:84A`N&7+LLHt*ϿRcHyΗ;h1FʆCz"Jmu Z؇-śG#JR-B}V{->InN+ @M*._Xj ݦ˰o!SxK^;F(?!;U&7md,5G3g5/’@LOfj+:zO",޲tUz-Z~cvj}nUhVUYH wwDp$ oF&96.Me̔ƠLZ)Lv"oRu@{cUk=IdLc*?'eD[4B]A@;BӮV \^v5fr R=/wBӔR,um^h9J7dQL9״x.?}=p KN~IWgsXԱhר IV#–%#Tݛ^Z ~ ~(0eOqU;;&?"ubU7 vq2QJ0'Z @T%ُl ^=D-(I'DKÌM=/M̑L˲o!b Ŝ "\~qK(|_C[ͻaMoh *w`zCDUXL3RMC;/̯Vn:zbou&_A_RJ[{Tv*c'^pSKztΚB)I|,h2箛G^[5v^w=Czdۯ1J:3޸yN0ECmV)u)BȚsq{G],/@ l ˝p{xw3ݰvZ4OWU WjV[_zTʷ#޺3F Ngz+-K),7''AIjq{V4/{ ;5H/ZV&:m`OKK9WF2& ,R!kPP950g žЄK,}䰇X!T".˂Ym&YӘ(y+Gq'3]O̬FX&) Wv 61M8elBl2-6ucd b~]8~z&O!x_ܻk=Y<^48R<)i, ccE$GvܙpX5+ Ybd.R:;6Y2_n*7;*MyV ctka&aTϬ@UGEo'lu*6+EhX =7b5;-)e %ƀv kq/1PK+;a@sVKpmP+,o cPit E {uMJr7AЀ: ^۩@3N!;*z_Gtd#yO[ʭRRh&nA{/9R8Vl:#R7L^RJZyJ!{4Z=mEW*k-Z||JH s:s+ !\2xR&//,ʴD-fpY'hZxa Y^KXmN莱[!IhG\.54 NB\(tikjWvo/c]^ɹ ބp{ZRiM4C0DKCP,ԓ)m?޾$Yc &yɔ2AF/?[N8GK4E\aMN#,|$:(>[D!a " #v[W 7 baB]iiJy EJ;0 aah_Q7M.9,`4S_!*\f,7SOۭ{Y/x.Sm^qJ`&l|.>P*VoARIVܡx)Z_jv5a%|buއ0>ʼj2V"FB|LwCY{9?1-d ? QO"a.4lr8z[jF=_͛6%Va,Q"6 g1 aڠF~i?SACyp\]1Pvh orS1N8z}Wq栫#g$MAo hri/x{`Hѓg_J[qƣTIvGͪyF\-,OwyӒ%.w`?2 /u:X3"oFDEwL;FuPtB:V丰:8bUJ4[,[<5TAgl`E>th?p>kLϦHotjG ِpQWwld}xbd|oIL"ʇ/QlD7!%,|=hJgPG;(I9d$@IMlQ.<#:&aw̒0q ڕA|OY>ra !qٚ>7Qμ&iw_2W_jGThi4^8'[0$BV9Ն%= (?%0zp#HǣO; ~ &SCod)#'%AwI\H)=GLV}cf1cǓl> z h:0Ztǘ&IWF et{VhM~H4taVY_yI.jPȠ&!C괆[+9Bei!*g2ĥ3h[-|f(;fe-m%iSJWpbCx&^ ?"Vgr S r%qHMk'vY$=RQi N/S4U\ea PaO Ǫ/#AS!@g F゙ ɰ?)U|ע.j5y"gzqhSW\NmE<~u|Lf.$,S2&Len  ʲ + WpKbIh1c &"nۘ RmJYF$`^fVgc!f(8[VFmm [u25x/Iy1Q_r lII3VuQ$+;!AWٛ-*cãP0 eZYhõp O2ҌdTB:"ztQ9dJ.W}'?{q/7!^R\5U]qR%A$ҕ9~Fo|j7Hz,M}rzKٮCv[Mstf-tgcH/NAjE3amwUv8.GZ0,\ `tLqV5B<Fg݌@j+d33΂-ZX䓺 Y[ bp<'^P=p (0dċ\Pjuv)njR1~=裿;ʍRF/e לW]~9&FIGoW'foCϦf=/~h]|NE\\)lȓ!bf.UcV7bc&f^U~q_mA~^@lYHr21h؅85.` ,Q+8\?"Ȋ,C:el6ɼ(0;X2oKS64"x(%_Lm|֙~s$¡jt\lwZ=;=({H?~BNLp `x[T0k},d= i 3 Żn2dN|B5M&5& gMj_fAhw/8 1dR l㝥 -G.z)yޟAy+%qD;rZvJk q_DBcܜKe$k" KRFǢܿzqX&K 5l9W?:ڄSc fN7<~L`^5.nRnm5HЃ{7jhYݾB%Q&߼6#+ PN Q?u@wGw_2jY1"BJ"Og1N 6nU4"`Sp]gAGc[9Vݛ2cxHX]R GnӃK@!xbPZ5JWvnf=">jOw;Y4 2UMu8lb3`^m!P# ('UT:$h,'ou}ъ>8 j,Ÿ\edsN>m,uV!=)ɣzP꽯Ctgx)n C[X=JY-4r70be]K#q͂-ˉK18s18-{ihZ0(NO-f!>~x' -v(Ghh%?fb)G''=;2lm޻YY>6VlM"#%G"ܰ1:rC.fO` gDj1>׌ǐD7+#8,bUp*0 gT-A!B;CaapAsk/Ԝ7Hmj_^4v%l:W~Ŕs~MPA(J@C| 9mb) o XG r.A^ ^-E+"+Vܲ=uv}u$Vaר5#ً(ų() G,$hCK} RTǙ56w"Kgܩ} ȟFG%U_hhqt ,s]Fe0}5%q3;롨<% <=R0T;P-( 2έo4qped^cEkD)*c2}@,G( '8^[%䑾,U*v:ҰK\)m\8gX f/HVkbe&_c'B0ԝ;F316h{C+/~*Cce_P`VobBJyჽuޤB2 6paS6f7nk4DXZ BO/MLM; iHVc6hj&ݣs~+-GpX`$=Y@|@g۞Y"QfS?k^31Kqpm3Pa=~ax&Js[`d|]=}!o+Xe ^0J쭆\l on>7,Rs _My{:91 ?k3$2`wإCNzbJ\ !0-WӘ0. f@ie;Q!ppg`mFhWMFMtˬ!ςgtXѴ^+nakC~HWqYs65.#t1qf $*Ȓ߈tKdִz_Zu*^40Q`|Z]dލx0t nde U#3K+ nXR"CHX؏7Y[of_09{"A<1Wjd"/x"b3Wt_[R(..5~SݿlY#E-y#F-D [@~0ˬ;`@phk5)F:O KU4ZVR W .O;bgqR\>׊!HbMz#!M9G_~jy\(07{c{ޔ y4pfqP'+ C뱹HlVݓ~Q'<$]hxiB%:+{*^ P \A%w;cQIF]KR+Gd۠Te*mܢ;}BVM >׍C`yh ANo#~g id?k(9"  ol}D\kCR<菉LqapgSݩ&!FYQ ?WaQkdZ8A=k?[neGA0 6k+ޥk'*kt@R,r:k;ܕ"ꪑXH/☰4k;3Ey^iV H=([hgXѫ:lRJ 7s݉G@}q&.%(j-;Q'9?{L˅jw*S<9X:!Vpt^sUNA yQer@gx8̞4)6 JQb 1P ZRbDB=iWh6LǭgQ tf K}7jUr$,1R[4 ],RCŌ%72m&;osQ^+ ۸\ J#8B\8foqFY_29CN4sHK65;f`%}vdylEtMP[ or/(,iw?…8r? Tʚqm57L0ȿ7: 0&{<\2T2|U덽{{DPQ+C bdMcYb?5"&h)"BCjg;Nk,4B m O x@41伻Pa^\30_0GPv7ZBa/^Р3&hk,e ١S7hZG'7] vqeXΣDxXqxD*WwFያ35wiFc 4rڌ& c6*/*鱂ؚb$w`^.;~ҍg =:>Oŗ&īJ3~Co>;98"9hfc xt'j΢ŬQLW'o֐,;}o'8 +pegߛi9'=&ss^cCś#a? V?OxQ)_{6\`x*xv?*P;E򰹗Xj ۷Q كTam2I 4lژWT%kr.d?Y:}Z< &c*^y3Ì4pg~n5wnjޣٸOv쾣O Ҍ/T|Vt(8tY oŋčܽy8T< U?~[sR|TB&63T` D] S'Z0ƺڢCE=MV9xEZl3XԧCV 2N]FTpun 9ˠ*&Ork|lT#>HKJ=(nz97T:)Oq4Nzjzi=7~o`GA}k1!>R(bk-ET!zYs%aY>αp:#Qs܅Qbȏ`)XXi^%u^ Í- MH_sS|%@W 5ۈ5Bɚ}Z 8RA7EkCe^W[" dFQea9iG5Fw [1a@uзl5iWA$@'4n otվlTu+(H QQ>(twې:SΟ%iiU2SP4DSstq8p*<8+keKz2@\=#`9ަ=`ٕG?8jԢSXq?K7 ݌1}ĩ4)S$,MPW=ufCp-3>K(BT%.qi&Dv&bXo + <|k-,")bNka%fWZRީgn0癒E%z % Bduõe&Ac6߄f,!ׂE]љH0 tC=K.d)azfE" {'ʻ.) Onkhډp/.)@OheVz ko+ Noyl ~1P!FD8; ėq#hL:ݢ rcoJC:X&fX֟~*X[RūVkx<)3qTw%-oYX> .ߏ#W2rOl<+I\N~\i'##0^ì> eqN:'(|? ߊ4tCRl}D 5tum/Ӗ{$me^{2va{oJC VR&XjqAcʟJ*QVwiMP/Bq]nf@\drH$POG#Qm մGOڨOO60_Cbg^ U8uKL7&O|Q ;p%WҸ+>,zvS"FWeQlMYÄ?N+9k+NjҚ)bO9nϊ,v3y? ^7ïrF|6j~2)ܤ3[:@5H3Jٱwf[nOafI,S$..CqW {^Gc mCU}%0b=Hax'GhK(dFߋo0KB¦5HT*:yŊt/2u$o{ uX 'o@g׳QШm QF+_Ɩd0 PI]g|?뉝5|])_t3Co vP&BGPE/ps瑅4b.FDCHQ B<rw/V g˘=Ҟy#=TX󓖝=Ѣ(d 8-!'QP?+xpm@r0΢I2IXܥi"Қyaj嚤]1-e[),mz܁X͐9VP!:?7a{[tP(޶v&Qܬ'$HђVfC"Ӹ :} O[4Kgiel}+`抦Ҏ]=nY{GC2*'3CzlTƳ䦽v0uCϯx`DwVP/UvsbKVX,. 8kP dtI,|"r7$ne+r Fl[nBTyA*T m>,OgXŁ>> 2 Kݔ9{TMG"s<ۉ_rHX. mDFџ\EYae`5E8,٨+ø,[~$rz]aJ2}4yB7%=u0(Vkt`='WFE2|P'խD9K\Xb(N*%4Tj!<%JuČc(|ΦqSɍuVf>H(b#*ѩbj0j1mca:m9< =J ̏?_. L`payjXelŢNJp&4̼^8b-O|^\C/l8_+UɆI5EL>b:1Z 9YiucUo* Ν61x57v>]Ägyq_\p;s%V˿u)0d/R'ΓP!e _A8S_^zz Z l\BYfL(CPǾI:# }D"aT`7XZ҅WJ* SY\sl=?5B\O&${Z`HnS2Ŕֆs |;%/.65¯pW/؋3hdMaܨfM(],m&QxuTgW&#gfo>$LS6UE1ϮP^g:iHi=^4̃NSr/$d)o9l}fJ .B9z)Sw02Mw@O}^(q._/OsGbbFxG7N5]nD)7WUa~IX= &y} +ŗ&n% dsUŪ$`ћ3ZU mr'ґk:"l{nnhRV:J+f"wqҳ@-C1f |$If(" s(!xfG+9 kڅQm/BRKxj :Pf%B:8l>,#|?=:,{i#8HiKfr)p\DJea( }vcsώX+AP?n.Bp*MiޫsrD -s9J1Vlo v9/{f*qG3c!- )ט; :e ,׼w^YK+|5\/.s+0pЁ²C$'Fp9ZFbJ8:< {ۦn,(>tHsËմ}֑”A.~ee&ӵ)Lxex)yfGe0ˉL {HvދX1)cdIES=8dc]Μpo û~{awn/W|,,ltgKܱ- &ym{ HV$_xs}VLE҅dg!u71A`^PD-/ x832i4 Μ;֔ĝYKZ1l3X)C$o訔#19*Y9ٙZȺա-YnD\QMcCW/]£=lEGf?#'?// u*U}tjƽ!f+ڢOȸwR4]"U"8F;JPf:>w{k 0]<%YFb'Go^Cdg҄e5'3rR{:nmZ{٭[2z>/> ^$fy&1gPF;=ѝ^Cj?7܅^=ˮj;)kI}Mx( τ,0#^8F>[(Ȑr2zP PfGᄚxLX̊ (_(j'Ko@+jŬ}YMNuV2Ji#^ug&}Pޒ.㉲d!ij?*^r ,'9#2%Olہ3J#Uye$ R > z" FIm]FO&DE^5DOȪ-KЌ$K8 E Hf{l@z$PEU|n\Qn7@*=sDjܮ Wڈuԃ|'WhXoy.ʞab\Q˰z^ q+!cURƸU~d0}#h ٯoy;- ~5_\0QrlP˰ZeߺL'u5#%u9k]tC18`Q[=n2H4Iol Mz <{#:2[ݭ2s Ѱ>eк<\z,n<- d9:v϶)qQs]&V/|\gJ2z4h됺l'|[>lqq#yyu{^]U8eJhKB3ZjS#1\Y<L÷Wa-tQՈUV.qRsugb$7̛ G8'jȕb2 Zغ~w)UhN„Y _ diՎZL2hIWO},1c)U͋X'sͯSNۈ MXv):r,@Y%Pn<Gz-h ,>2?ytяzpCݩJ*C#{=}׾̓z85P$^{0<yOP_FC^vz^_MVjC|:y_?I7g7&ddXh{Qsl JK֧0O1=qk5 `ع(w}Q|4$t6K=^s D QeeR*Jw.Q\0t,kR>Ϛ\J ZQG_P G i?jr:(MU#,_?׿tώbJ& }.MOz1 e0Be}HyP&۶@>PCIG9"8J@͏Ln5lXu|Qo-랪gLtC_wm4EPFKĶ[jJc͸Ht^W8'('\m웋҆`&x:d%XC| ڍb^ poޅLso6+2D֖?1.QI8Rw0<$H 5_4ԍUCݶVLEQn@)b)u8~ 砾G‰B K|ۏ6 _ ̹Ar@4GhFv#9t]RͰ2VNMDv PQ^Cu@)*,0@4 (g2i%߇fk{ldSv*Hׯ{49)m#8Y|~$[U⪶<׋?tIV)FʯzA%3&$"=#PNxQ޵C|jqğ%5ZB*z!),dk-zgL=cGV6uKZ.U[yzC Y<%hP:~Vľ_ƒy'? #QH=zHZQiu#{pоd*k*ҢtʒѼps)ЦI391T%kg^^V 2J+ @=!xR`Vkݭ2;X]|6ŝLg鎀g.HJc;8yK[}L%;9 %l`LaVѵ h- HURU|W`ȶ e!8ڊ_!~Da ($=Ռ@F.iv^jDWgU:wZ~>o2e6݄%5FrZI# &+j†}&n]e4v 4`v}L>YCKo 43﫳 T'Tɓl?)13Yml[[&MG}Xc@!sc~98?x<ʨ 퇑$tuL(2 J\혿k05*4|IF0yy@#1 }H'\ gL~kwi$duLNZ]t7σf},WU')ӒX_6& PKCi=\g'N=t {<>ƛ)8"i@&G'(b]9CZ%寕Q۳=%(b`LJ,] =vj7?Tp/Ub0,$#/"a:#Rij}ewCR$/h6lr?rGua8Gf8݆IS}oӿ{ ;`:ifhoV2q:uvćz-}nMѡy[ dt7 ό̉;2%ТgV.f䡄-h%-XòK+j( B6t8aa"D厣uۤ>>?/Үm>yN+?60eԦ4'czZ4Bk!=&}SK×!jIzW&QHRXjqp[t0 q"8:Õi iWr)*NOq m><%V|6l1UFRVҌfR19M}z(!)s]T%dT_zek'o0#ˠζBett}|vn&(R[H/CG H31u<&y^5(U6ҨH9̀V2*i}O*wJ[q͜_^'2ii8qDvB%8§rGBsD ;\185? "Z,P.uu.#'@S>Eӂ4_u1s?L@t҇ h#0 }zn" YMaB?Lз9=  z)1뽒ң  D@u̴FZlI`vvYhlqvYSBg|'Q1Jw78^1A(?'A@7;88@:dqt%د.nsZ5f!O$uWj< ]a#H/qToIֳ{Gwn0`zEDW~&pi^Yj=\zQt)TLvF#/L{=F*ASxVP:; T.+#žB~*Nb!5A+̲]g<-܍&+xPEOPsjKq2TltUM5Iyip7̔,ҙ$Nڧ\vZz?Y; ˡRD"a"r] hɮի>8'Ι=39,9{,.] Z; ?_? B ['FG5ZkBf xɇ.w8";638{%y[-YeՄ#ڿ J=IΒxK*5s 3bΓ, G7ͤ L3\LM `.&"M5D ETv2t#8:΂N s@;.ɶU%x 's"D10AGM2jۭo5z= ˱ļvgbu 16e2( 2e~ʺC!Glr| ݢ08FMmzbaԘM?׬FE7E{_)x𣛄ӌMH-RN0V%?Z6uX hATk|p}3JQgPpDr:A eb{Y;Gwn n26ΡoC+43zESRb0LHBY^"t5۱vѶ'F,EB xkbVFmJz3ue)P!+E%b<`Iw;#[i8-76ZnMgtDi9tW; %<Ďφۦ3^Q_m SA~yiRsX+Vs⟶1 HH<xD\5{.\d y+َpS`tk>D[?*m N̩?\qO [(Q2=n:LΈ 7 u5,p31Šh=U 6SnՏ#wC0 ILװGMj$$Knw]ln%Dmy)9¹U29A" |9 Md*e&,"*ڟ[+ɻq2CĠё"Zg23ͩ2֖%2 w ?PB7xtEv@Nwӆ;Z!Z#[/ȇ^h]Ci}oj3F*=~ie,N . ,tTrOL͈;Hf|ȕX u6`2Un9ML=W ˩ksϔEKi[&\mO>I40;:MA[|,晞QM-1I} C-N 5uFu]>N-`VJV)ԆlV I1Y>,C;"B^7f(Q;kB3,j0Ir?v1@pH3} w(PWdh2Vk G~`ujUmd K##y}WEM@Np\j_g`1+Ol7foSOqll[L練  ^Y SHٍk܈o= E+Խ Siي^[;8_)VP=& w3L_5dcvQq={/ dzIROcKX[$$e3IJoiOu ~R `g∑ zAJ\zJ\g5'!OS4^v93(|aqrzR (xZ&tt3$7_q&W FXNjڞԂ)$@~te_a$A1Ĵ 5eԆ_J6p/aV1LXq:Nf|/;&5`7Sa={ήa)eU 4fm R):@E_f^Y70 <~i1cCv,ԋ.sQ[;zf:/N9!eΪE<[J\ZqG9bZD<3RR}fqj:^W%*gꐌu˂h> 8HԑsqUuQgb< 'a}h,GQd;L )*^`'%Eبq( 4KѕEl!K{xo~5',&lq&17nrf]u__4b EEi1>j˂ѳ-]LmºhFN-բ} l1ۨ+5:qB,_ Tq|Bܿym0Z>TEf8֓ɀYa $mAǛt۲Dផ1 ( D[`/%/BC\OaAd@,ZLz&Qzk`X^8rzWqc{JB'R*]q?< >|n.Tޥ;7_#\r.)/N=dYF7r)ϊc>ITb*Q9_QK!%Zg'[e<-9tI4ڜ|kiCp\SnH ojPV:5YgC;+QڨJHg$XQEʵ\V%O1sU!,@zN ^Cѡ,e5AxTgYYy"͊_j Upk*lgvM쒭p˥j$hqR)Q D D04ƾ}aS)EB1+LEc.=oIMx-!7' 蔓qh=,Jb5FyAG{Wli!?m?Ӊ=Sc0“F~F_lL*YSML}m; >;?%_o U8Vm>dO>0!}HP{Nsa> t Y6v~B2*Ej*fE@FKf FM'.'TtMwV6n5ol빹gs[T.cYl]SRHj*k|r+>PZnRªD‘åfֈ}OJÓ \T[@lnNXfHs>z;0Hf`V_cmot"fLQ`Mh8}g#G ڳ7Q(8*QO8S ^жug>߬$zZ(Wy,GFA-2+& 5!|DP$4}L>մJ"s ̍cx#Şu%Uݎ [H>&%SEP^h ̴\kNAy4NۉHе6U%O`PDhcSL UNoFԗ PMٴ/Doq Fo)O* -ufr~DʮU0c]) ~io"$^kCҢk&d-6O3©L)sD.$s/q7cָT{aM'9[9`HTMm x5Klu-fF.{$I۾7 ~-ZkV_mf8H`t4kF~S`4Q1UMzÌ<9a9/2, L]CfŔ^)'ӵT`sڋ ) s/G P![oUj z%ŝW:qTc{A.l~UĆߤ`ȄhDx-jl.LL)[G!YhY{ddN6=j8"^2{$wVT N(8}̹wC;S_[Uƴ($ o .6{\ p ];+oZi{>MRS'@mU4jm{^{A;%W8Ҫ BJF!4Y>]誼2Ahx@7 SDguxs_s-Nb!u0tQE8uOs ȥ##B($HON'[=HyQ{QNfAw]; Zd;KELI*+/(sE@b*' ҊBSO09_N%`P]SM.?1(bw#76U1Gl˕ <<';-t{+A fQ?[@)~Twΰ'a5v/Qƈ0 FvWrֿ( =wt 85Jw :3AiOUTCvS0=7\!(^,$D(5iU9uxo}Ӣ@:i1+cQq̱1)=JY&T{asVC4 GQm2C~ ^(ΥZ:I{ ~é(z*24V@XtuR3`.\PumA&sOd?c6!K3vu2n% $ӹHŠ>ZNk-#zyC_F:+TQfٜ~[nۙZ!kAW\لGE :RF6K1O !QJL4J&iWJ9G~pIf(Ly :0b[R}3g7-־l۵F'7iO-C>yUu \z@& %$^wc40tPLat"J#rD/kOm1~Ŀ͆XALGf'R H/Bȥy_&U'PM&|S+N}$8x $&wlTtrdg!"rI+qjA|cB@݀ Lky‚A2bInnvrZ +Q!OMso~O"#aum'iL?4˳{ӐųxG%6R -B0C՘K(k %JygM];YYr'')nnK|T|f*M%Vk}nIB|%9?ȀDv^.Gi$]IQ|K, 7ȹN !˧}-ا+*?6 Yq!{9]2:_v8S7Gv/p0SɆy6&bLxJz?o95 -׋4*&"LoNLh ט!NXSOH]%!pոj-#=i鼵RZacЩ؆'ʸ|sk_yBh@iL&Xe`T>~Һ^zZ~ }Ӎw2aјU*,_TƜE+3gI$8r2Jò䟃~-odnG]J'RQ7`E7j<ƩczHÈFWE#άs¼x^a4VkqY+av/(x|4]^/מ|9YF~NԔ"eQ/N}_8u\zޤ KqzƭxtH MM3>.BbMWyQ՚T/@ayKSZcY4^F朖G[wŗ?tlWzǷu7ԁKc)@ؤm~u9JA6dk'H2wmtߘw+߳P*Ne*)5N)j>V Ru=R.H6֋'_@mY=ӧk#`..~=$p#f2\7Td@3TB~)$%8JLH—Mdl+>yEKm7ܩ:?;Td4kPUC|WO:A"yP4 !*!lgԑ;#crY^z7`Bq%(.HI|c.pqsw!mV\گC@c<2kK]o.`yY]Q^B,ƒ×"| E~!tcg wAEF]ĵyk W1!Kupϻ}OwAI(aiT[N= =$bzmKDr7t:lf\|c@wX5# 7 %tCgl/pI7-_/`@>D7a\_sx9P=c*}lfn45y8cvNFn.,xl9 >#[S%ȯjs Fa4: LACWx/C/f_$oͽ a1 F$ X7iD+TL/$-zx~P&%!X*r}k۟9TǪSǖ@x$QR +W |-CL/'@t}C "@QZM*fMI]C tKlZ7@q0q{K_R`St5 @|¦?={lH}myzOjTQwŜzv1Gg(CzsSbZ,y}Ih) /ӿ Qp,G? 2D|0+?oFc/atN+A8"NNd< y6=a9NC9R9ڇ?>L|R0fVKֱ/2q H3ʴе8:u?=.^8dIa߽?L щЇ>m׉ 9[GAd]EFS p>^r#jM1lNL%xzMYPOȓIi[~K΀:U“l&Q&5#%Uʒs5:䍩M>KFdD9_zV@AHnY,#'즫ݓ9#I :k.P=x/8? "hyQX s>fA?FL!usc/u VyY|It(ln8cOnTQjuC?Pg;?n;!`"XҐc^;z}wS22-WdekZAB^%tQh,lnywkͤ}(5z#>t8w,uꐂ1?7u7emtѪ圤HF07h`'t>^Je> ?~n[2V3Vx(19݇.TDRaqwrBi4bjF7&fTy}<b{q<t:C=Y`c3gbN Q j@o҅ѧmo)7o{n;ě@"Ay8ƴ-r\dݔB4v"SRd"Hh^4řtqBX\GBo?pB̆w_X= 㧬*"ԉz NO=ZWڹO+Ogx*q/@"WD$֚ 醧FmƝ=3<b!*ݳ\L ߟɯaJ], v\΀voy%#?mK5:k&*yԢ[0 Ja#T,jZˍ#!CmxWNj8uj5r#Ε8}˨5Yi {jmQPxPDo/F8>d蟮,cےzw~WuTdkE2 m.z!'?,w$zBcDXIa[&RUkd͖;AF,2l@[ XnyB#uPm!!K@% .iQ<]^;R$@ &Y(w6@2ð ([!=lcdMNJ=X:|SjM:Nt?3}t9ږdzYBB>` X @4#_AFJ l漨ag1 li)ŝvEdj)u&Aaj\-|́o(6|2l2=bc_E(># q*?ؿ(p:7ҬS[uv61 +:2TK[e({J}w Eˡu ױ!IyQQ?T01/C} A~f jjU&L9%2 $7Y7^[iڸǒ3 ,rniOz7WjdF# y~;ȳ<*#u}t+N+T|/`LyXB !u$^bל+n)MJhJLO I2z. EÞP7(_h&$ $o2{ֆ"!3/އ[8..&tkX"@ilEzľ t{|'oGBa&W~~μ_ up[bhINǐ9s_R"R/F ke4j6/nU٪3Uw]!O(岺۳3"~dߴ_?~(Y? bu=%%: }D_*NW?qe5FsQ1$3ι׺%x`6M1aVԚ PJ4'OPR{oPO'*oY$85Xw89J,Q7cɷ8`pzOX Y緿!7D[36790Uɋn>;M*Y8 )R%kOA >AD/h7Ov+bRe",$>`D}>(/w-ZKҚSlz՛8@ T%졢_#Ps>/$.k,UkP T7%Af3KKf088!T>| ϒAO "+)E#/0*Oz!0Of?T<*hZWrRKB_&W KeŁ,aj%H)lPWdqȣM43kzhI/o&8'qZko?e4&H7 oIpE:q\S_S縹p4JHÃ8WaoGvlP pLPktr$bIڼg=*Lbn2V]AjzCeU me'p~G">JLhthoLs4EI^|q$1|O4j!<~I&E@9Ѹn=֜*OS, |킘 /I0QsʊD2a!˘Nj% աmd/t@kĴa4:x9-ZGtЧcm3 _e)pT |-.N**Z9$]`eQ|/4r8VOt(YX NV+fu8"PTm2kӦNթ{<1]4:|϶wUu:h7z8|]L$8 X>VSDNWt^hn35LD&k)$S3 h] \D>#Up Ӫ ;YX9iV0SҸIWGSI$KiP&O!rMD8U! &L%s][ͯ($ Lv ;rNi@f0zeڔgph+wuG֎rZ. IBgڍiKœeG#lYE}Q(M֫5kB'}@gy6-U-Ul8Kʣ\ݠr:1W[$"|5#w\NA4HN^U +ڼP7 H8 IgES-}*i}4OGY(^Fy]@ꁂ, -h zkさz\vL=I 8bҟȕJ>N,ypM]^Vύ4n G2LI7fjcpcFc!щ?9,)S _hߴ9t-Ƣ:tU&cɈq>Ob3Rӱ# kj[.zE@n8:`]Ww%OϫĩYf4۶qkTK]@1[nd:8"UUMV‹M_ H!-\ZaLlRF\D'UseN`[I(~O)0H_׽fyK1jO\-hVE!írʥ/r(1MsAF?:E)}w;'kɺ)CM EUcŨ 1fAe2ˊ:L>TUجb.Z ݙl˨"d-AInwMWCZ=ɣ؜i;kDPg_N4] <:.%:PFz=enbA0cy+q?I<4탡i'XsY, 4\΍G+-nP*XljHm٧bG]bX MlDlK!QB&s[sfa%č@Gq,C C}jc_ ? X&1T[Cb|tKa;-]#5vH*rMָ̋#I7kzkӣW^@޿502XBsjD:=1,wi ap [tOvGrF, f8?}[Jx^">mιN+HjIvP.g8ĢQf dk˧=0kI]NQ-z?Nx5ۼW2P{a!$τ)I>K8A5D5֞kx 4e6(Zo/)NX O]S!Կ OZ5y=5\ p>"'m{S^&EaOG5ȣA+6T79 8EX FPB ĺ鿿5aܡބjw'cL9bCB]V <99Oj~Qv]~f@{8qbaAtN;Gs $ON&VEՖ9aLj,>^vh<2AnS:Qᯥn8dN.Q 1F o⡪w p}s6q`҃!hCwٵrç2) ,0R\_44a^Td<ߣ ւ{.WKoV=]Hs^]ML BB?c:7陹r #mh:wEj{1 <Vli! _8E}A)Xgnl.bu:UmyG 6`mA塕Iݘc/sG9x&&r匊nB: [$ݙBDU ׂ!9cn*nvʐł&b3 `aF.Px<󬻙AOsqY{'ܹ n7 0Fs2IV8u9w̔q}6x1_Ҥ PRFZ"- %yuï~vcdHedX<ߎc&pZ%T4 ixUb $M+s`LՖ$">r`>JuLҽGPu' =;if7L6 (X~ڝ SZDRY#񵼣% 9IKv0URPH7[c,"xьDCW&M'=Ӛm.̇4.Pi_k/mr'aCzMbYK.qkS0Biܚ6;tk3y tb"` TyEaE X#Kn_=Ҿ_.rzVxT\D@O=-?[;vR~JBw }?o9H&l5 V€J uo'!>o**M^Blc執ab l MAoM%H4 sz9Vn[b 톈ݰ3 tCbvr&ǯj x/7Ou`p`K'{Q lxC`%r9Y 2_H8 1LsP1H uy`ʾ>PZ_0 c}NXY4 I%`u-񣗃 RXj]ŬȐFVgzyjHK.v:pW-uOR28o 7eGH̋pA=c< l 0O۱I+xt Kbo]ԅ"F-kq#7mXhb!nn yF4%0@C $<\LAR2l6Tc?ѢɍM0bFUɊb}Z]V(琸1 g rhPߎc(ֶ{$ űi*jv^Qx3B)nqaW,mSZwꐠ"zqkí(!*4߳еޖ輒m=cx rnC仯}xGyaB$naP"^zD{sFa6!bwJLcΏ.Kj66Yx(:{b= k9-ͬ8! 'm;P{C̬s75 ҭO70|E@ƐlT5c"N:.V~%uA5 [97_H( ᘥ]yBq&QzYZL)D"N1poFͩMɽYt,a)WBxb&%S:c6:~ů ׹,XfPp2{UemY p7W)+¹uTPЛˎ E*~I6hFkt%i/7y {PCN@R$qՊ0O-җ0]hګxzeop_WC~S]7]p6'eZXM֎3A'㲳yZX3kNqT%6Y͜P>?WLa^Wiޡ*Oa%wR~y}ThwA7ධRBW1'U@ 9##(Svn3b_m8pAu;yCgHsxmHB8SإMpc̋*&;O21Iz&f8S-0zZqAO5)^&sC d&fC -SS8__^iEDT;}q.ovo'; țL- }+%Jd8 ={i d8ΝixI$SYw}RgԖe"ubM P/vitGDBٖ}ERah`Ṧ㱉K5fס+ RMZ(>޳@2t:&;[]Vw޾BYj䞜ÖM*h9G, Y2|)APEB4Y QN_Dz[wMэ$oR?hRD\'c0@ :fZt L7]?Y!UOFFY_,gOw:"^)1gj5p! 9:Iz/Jf@"apiuuxA;R@ŊqRԷz02В4癩[ڭΝ< ': m& J=tbO ώ~1o$T4T3ǖJ!JY_R@9WN뿆{o 6q`Q( ij Sl<{#' {s= ) I¼'AkLH53t?v2N49xkI{7`c*mM-23$)ϵU_ˑ; 8v"hxy["|Tǯ5?ϟ㴥1㷇܁졩xu(p䛝rB%7rp9! ſi1~te|jU'yt-|.k]KB,zU4DKRM)@ CN&y+&]YƑ$oI& 6Ak[lus)z^iWO.+ |TAwv_FXؾ;BJfeP>k/B QW(L svAH>pO˫m`dg1#S(x=x~2wL`yl=0:}eF|Ϸ{>%٬՛Gq'$ ^b |SR0t':q>qWeL| NYOߓyFpvi) ~߸q?~\OƂЂ% <]ς.蓰:BWp9٭{UM[d/i5@9 մЍ-ga1i_UQb#z3*_W_csoPvE)31?Վ37x>s&L#<#uǸspA'CXP7y oU^.uЗNYX7*wxO%=LEC0 GNgٛa5($\( xlqͺ[Hz -G11`Փ)t nb٬»΍?oRz2?QW|>Ti.<\s4!-F3v"Nq eSB#A/$y2::ˣ.+X$ y?GiK*kʱ= vLCiQpy fhr:ٍ[e'Ο! ;ug3pmTǞ QE `xēcZԌ;{*D'4IÓ 8hvJAփuS"mR uV|c9) ЛW %wh0<leΫ.nU Px=x4~a*$*샄$ 03[J`nfc>eG;oy0%nq_ RFt.dX kQ';C97w鑝$3ֲB^C+[Q=-,ы]2-\w>e CfSdBQTN*Խ]{d`>eA8e_y߷AN%HBk]TJmjgl%IR2ݓ,\ljR[gF ]%ȌxRb ֠PfƣrTq(LOq~g_Tb-g"9>>C6aVϋZ ܒ@7H"v.d]ZVS @:BI'HE#F *Aإ|})'R x')ķ,?P )9}E%A[u2iqL5qjc"L,ۿSJ.S,駃3Pn[FeP RiD &AbI7giyk+Bm-*S/ -yv,HE_ Ρ. ?DHc2)v$5=ϭ/2֔=K1yJG{k+VkMG;N8'/C142Mg\]0{Q vW$ᅟB%EgЌ [-G27hOO{KϽWWs$'ĄURXɃiIAOÿK aitv\of5mx"o[U\Vi|pZ9UarFRD㼲yl)2)ɟBNAn q.7`{5EÂT1{֐#f=m3c[(ƇlsL+62 *,e).xv'q!Uœ#y'~BXԵ7kRib/|З-*9be\츻ih .8+z:D ɵj/I)/;2f_k~v}c(fLԱ ޳ Z`O ,OY:R'==Em搷^׌UwaDۉQ#?u=3(R⛈n[۳%wKdk7d]6g! }o?a&@XYn̒ڸ2EB`S{C77_ִCO*,iG cj))pc33~Kq΍w'+p5b]E'PـMp(WzIPڃ~arutk }\,(>؈^r$_.1gˆ~"#b`LoW٦O0T$vd8CIZxZrK 荀TD t4KZUCFtGH?]쓘4Joe!vd+>4"΀XV P;L Yq_|W`brl6 깻4V>Rht#z- zYyd\)\)zDޡ"ݮud+ W,E{H˛vUeO|PѢKM)UxIsZFyN<$DNX8 goĻ,|QdHNygЀg3y5aYX(uBZH1 qֳ# {9a=R 34o. P$~5N hRV8)z+ /(sܿ(.%,2>"tle] ||]g68A\n8l^ܡt$:*תLxֶ tƃq8Yv|BlKۙe=A-Q[huKW3ꬮ*2~ 5Hx"%iK P~~D6mcz((Cu88p+0 tOWؑ֓|VC2j5 Zm㣸U'`G6*Z,OtR%:}z,Jx":sEnq} `\ ItZ}MEʪ]04##zpkb5vn.ߝ]MN\ [[KTi'*!n-L(FO,r!bBfPg@W6`rǃZEnuw!h%8^U1E} 35v뚫Xٯ̶4&7U{-,AB&(J}a+iCM|lU $mj&6-:М㼍^X?YꃙK0 {' H 8{l I!33vP=Q=MG.;8qk?}TdwaE̳7n0DhH7tZ [1f wgOf:MRSZtU !ȁZ[&t(_x'1:рbR zRcac5O?) mK̾ӁG1w8J6ȫ{ʏwz _njM:`zMdӌ`~g~=&{ko: H XXbPs V/#S̸!9wH/ SdU]>zoH&'|ޯ'@fw2<~7.׆ |QnSK6<s9/ .5EXP[HBhħ|I  Ey<-yI9Y^9e*CɁoh_C:bQwUcWh8qݣ\]AIi&Hr3>2C `o5 zvYI%FܟEz4ɪb>OQ?zA)ƛ˭I}8q͡KxS;Uan'83B[UpaG5M;獜J>;.9w; B@Z5(`ȖˌIfaju5^ _A=:5#;DY@Di"EJjtJ/j]yRrd> Vk㾇Фz67GYĝfd6'g-!@^ΰ.3Oc7Hyz>C|=袖*H:tҭy4;Arˏ0x_7Dz"0|T{\1w8*5xb*tH[A]r tFƲƜ*JՈ4߾J Y_ǧ:^Lcj(rjzAG2oR~% ^]RMxIȧyѷ4!ʸڒN08%ێ wHӴR/G&e@Ў3QRΙ|K)n>~lbpĈ)}\@RY)2i{7]9 `90$%%]ͺF^nQ)C2~}]o3(( q0CT_ӑ`d| _R䲸q dg֟ 4k,kWbmE3癿Iv%TRo޷42 pz +6ɸ_t'לs?\J[1Τ|djB@ҳ56OЈ.vv<ބgpA['Ƿ]|-uBg8ruͤX)ӌ bqƄ5of&tO?Z-mmbgǀLBKy +)F-{ ƞa-,mu u6kFQ."01WLPɏ%ǚ3|&l}/|He^}Vܡl_L33uW٨|Xf 50H:?u km=ނ(MiYL@掘ۓFP[%Hm^@)';/\،MCce%S ψI$>RB6@dKd\E=b@snm~kiG؃JC:vgozƭ^ 2Ǣ*0azJk #) N4hՑɹ-2d긫;-b'4`Vg'8ယy@4@Yo|!?W 9yC"3bv3OR~Q# ki*nlr'l d#kMwB sގJ܏É*BkL !I\wI_ygf?;etGi2}5H>We/8`^bͣ(@4Լx!ʳ\ !ݎ5X7K#' $r!%n0RI4 zZbnL@>XJ=8MAg-AcUl~+gd~3ȡs2jtVgʄp6^Jc£o8^D1IМIKXo+d t +=g#, sF !³vըzM0-m:r-OQ* 91F2ϥp8Ө;׈̜ci(^zװ^*ܐ@!D1W eգ=hp3w̗zr {PujjCbN0>^靉BU|}b(!fd@x;ə[Yٱ^@ +O"%u2c}8BL؉ziTJeuS= Yz:Nzطj+}Ȭ"U?/Gt5&? ;߂ %S7(SYd2n #__G,0MgWl/(_rY1'ns[tU>׏B@ş-Uw\u@q\x@3@gcsk@'<̬4,Y qFИ 2IdLC&g~&:SGL$֖E[ZAq<^GGU{8ƗEG,jxnhB ܁X"6>Ckz[A.g>Dž"˜Mf*C]VAWMc|uS#g{sEOLGUgR7 3 #_EC6UOIN<ya73ţ6*=v՘Jۊg.O}3{ё@Es lx8^sW(gD+I%DL!g 5kœ3- %E\/! |W#t&prNiQ} .9l]/zXq:/t&gdh$5xN#,}%QU}bq8z'ğr3&qS.#;1l fNqyۂ_&uh^aqjdJ]c0ux~=T8H(r[DLSQ l)vV@2!CFt}[]]*Kk[ 7~-ʜUTUlO-UK|d,mJvNf?-|ǥbBTЗ2= YTs,WoBNQ)ɪ0(줫&d|o/)Gaxe~LjNN{>Hw!$_])tR6S@ V,rL5DZhǘuz`p&AHg3?sSBOMO|8ᑎ `{S*^u\C _| O b^ 믚R]"JJ5w->#2Cw P$鵓휇@yi:8 -#"-h1"/ _%R"wrd Z^&?9D S;z qĴTZH5Rbe+Jl(P$u,tE}6d]( jS͑|VU JJN LKdJ2uj8%4"y6MYX.VCm0eU{U\&fAZ  =׎\pc<oYr<ک.RVBUS%=ZC竿aº%W_RtJnٺz'8-Vfx ]Qk]-C{D(CŪC_$GKIgy e<3v`:ٌa˱j A率ğ"~؜e_8 40W~>/5@ rxôAܨ*Ժ" (wu6n̓^M A,s8`[0{&6٣掍qM<4ɄI7 zuzս(9q@ N'JI\5Cx#\dJzˁӗQhp.,,CU#?OmkްTƄ{L\BwZC19$)- ؛(P -pm(3aS/`:{GtU K,{Y:CyHE#N2Ȥܶ7._CRbOLK S{!`nK%dZ{vN'Z7DNP`>?OI`nd<|,? #_"Dba+V*QYS$"d}Z( TF2QqrVq #'FU+t*WZLsP'& f8eBKbǝ})}Mxcxm-Q !h?L2_f,SR44~\ٶv$l$=+_@zY/+~Ovf)I}2MD7^%G'E)y鵃aϺ3KgG :n6YƎ9j@PDXyBr1D3݈ґtZ6[Ǜ9.my5=1-O+#:rw e$}dPvZ#;g&[m?@EXYYMǁ]pø-^\'تԗձZةp+ӵ 4W.*iy q U17ɧgue>`ls9(F{v M FQyr])P2,SG "}AY:u'',H= un"z@XP=2&tM0,`Xi}|r~rOxs{!V٦)`{]LyaSl\${ͷGiN$ĴKtggEnOv+ `5}@27-59A3eRt^&J^HXY{sKIU>w`[L>L8Cu}r OhB7ƗuO ,!2 5@sOorS6fSݿhQYv& fR~E:kK χk{1Jb@KȇǕ<duDkkJmoiiaauoFwюDR*R= %\EMN TF&Mp!eĖWv7H4Maᤎ)X>^H%QaWפ0S9{_XX0e vd/4* &[Mxx*GJO˝SUgT|^`Cgo:fi~y*b`} %rkphP^b .ؤecryեR 7x꒯a@S F%{n JãlARk< M-oSCLki-132Ap?LtZI#=SQ5m]nzWI;q et34xq}cd(w096HWIhZ 3kms/j1(Bg 27i£e q+q\Rp>p &@L&<E)_l%'K ٗKz8WoeK"e@<ζl> 9+v\Ωϭu$cnRm]Mղ/zv`̭4i!d~"Tx0N52=>>o)p6%DGRF׍ᥕC|u{czqʥ E'}qu dla,U T:+w%c~WHrk {OU}QMpNb ޥ9:o?ȚdJ:k)0VnYݪMRkN4\1S2he8&'% ڏ8C )E(CpbJ}]38.940ju .K)}*rEH9pK!\u#a{r#6Py7V̄-#%(xk9׆Úas݉;"}EhG7R{",lUttۧb !ZCK]7A;ugc #:ff¨D,o'o(VumQj`J&^Qx\ 5;ݏ_VHҧRi_ s+Jѽ )K3uk6PaqXEaYsx;/Ǐ'۵l}fМ[?`#CwEKj[MkQ4~>1r%S81qG2$ƅ|B}]^`Tzp>\-O>w`4c&J⋸Q-XnFh}87xٿ3"Ț~›(|`nuuʽ_H}z%~pvP+Wiw4Ha9O3M_@#q,RF@j c(np ZE*aazɖg}x\r#%5m$rÂ7 Mj?.+O7QiI )u4Y~­3[UfaXTW>t8D%[@~q~$AKWA@hЫ^?~{LWs&^t;VW%\G!nˀ qdH=G =bFyZ>d (Kr?79 抅hJD+lᆜN <f\\Og+8 ˤҘ:lt"w(,09=4Qd(kW ZS/9ڶElɫm`kc \䭊"0q\tLόE@KL|'L bT6SiM _a7ݥoYZpU*!1IzJ$eӠ5KB5;c^5JvΝ@F/T㵓p#VrKfߢ4r@X})$Z%cЋn_7jhhem@t]?X@ t*)WE㙖L4c9sWWw3PWSj'iPΫm@R9]}5Poa*e<"o}ga^P#6WWC@>JC.2Mf!lRSXE rԚœ[=nAkpy$S˩!|yUqPAp\=ޡ}F٠]T]S_H LJ!# d6H+ٙTud=z ^ / 66O{_=4"߳$NuYFfBW 0Hxv`؀;pT5{%K zR©0ז3`~LC\n!JCG Jz RZFv0%4踶J 5D[}q:,(eߟue\S(A7YɛK tbMXU@,eH8(]v zb!eTbrqQbΏl[/my>-;E!Tgm@\KW|%σCkisKB=?g׿SCHׂXQQC-zZa}gq+9*$&V<%~i_ $Pa{Ҙ;ݴY3Ki Z GU-L44xLyvbnU-cێ8>D^GhIpۂQ'ِzM)J"úa]8n Sc5w R@#mf"dfP(J,wPqێJ~k-'2(Mi@+$)t`{(^@юU)wn 2mbW6 k쎉'S2 pΌ`q3 ԕOM7JOոj`*kz<,$",{K1WBFJfcƋ NfR-\$3oZeQЍOABa+%|,|xV?} .FU%ac%b"ŒB}\ߐ$Թz=q[RUMts3h\{a e0K:Gk7Q$Uyf>'gXi.b(PG>!>&dVl"Gh$[?pdCNz+ſXgnO᧐~[EH|=QtH )Qn,!KXoсzѠ*.uu@ WtbZ!𓙂,rT`bB@) lP{ YOj3O`?b[sMʾDX(q#, f[w/G2߄[V"MteߢPȎ$֕(5 &1'l+ ~@ɈAF\w?m<iOibkTƚIZa_L"]*$,T+whɶ P"TK/UGŨZ k77::ǦBڹ<_bLl!DAbֹŃ5}珂ޙ,`*'8MS *׭0bh j%Wa+3)jNGZxDDrIѝ+`;f:_،Mrl.f: *E"}{kHaf'] {ܗolAWZ.wDBEnz/Y%td3dž*2<77Eu>df-itl7jxl"?9la.9!t#|tW֏"+}r}UTA2|zڻwDx՛3 ^\ g٨ \y``:pJwFg\kxvE=p,H1vTazbAf Y Bkr 3v3!)Q=jPE{{K iP%(LgylT 0􎧃y#64tvft}҅1v4U!#| `@Iq>\+8i%~*P&l!r7x6î5{\BMnyIFl w JbyI}}ķ2s*,GS4ћ ûȭᦆVEe1#;P. u{sRR;=VQ/KїQ(=f]X+5St nC0Sy'Y;zu:U/&š'"2a[Bh 쳖p(}B‚Fb5I}fm"(|~9/:G2Ұk}n~mzq2c-IܞF,ߖњ-$| ːYMZ?-R*y!σ6@jn†PHyw gzop7~<|2n ;-Z2)#{cKױ)lNcU^2ōM:k> :CC##կۉBDA= { 5dCoyZlxq|P*6 W ݁7=2)=_rZ''boNtV#+n6C[,7k|ʜoޤ1OP04 Yc%Je:9͔fOlݴV'@wg@*rZ, ށ\5,=ɀ1s$fG Z~]x֊im #Bg)%q+*YK\Ret{^EEk*[2 quL &HZV P◭ßNO~0-O>J.4}Yĭ0X=.*[M 0owՄ Ьڷ+M*C0 6hQԥ8IHe*-'v=?i /-ga!{j̥cUm6gom$YNx]Y l|SCOrme#,S2X4\Sj7< 2\n5Glvt]K TD AZ[=' M\k{ +ꐬ-i_.Iyn$0M~gb͞H_Є& oMJuʛ+46ě0\%w> }t7ٲfW@zvHa%V"8SO-<$g!gi l ]aĆ7L}<FUtS_LZ=֨V{nf mBhun<ԁf-ꊏ*[ [[^Z{;2YQI%sȬ?``yf\G;WĪI#b4 sY,s%oYY5B废#̓ԉAa*Yw ]߹a8*sMN/ǸI]~,"JކѸOI-7rLL#=ZnQy%c~.gR.6*b(PyHʳGV9Ǔ:A,.gj\5X^-`٠@> zY SAu]SVE*}7jRyM޿lCI1 =Ya[&t׬q0/oXrz\2(-Rؘ~ݶ*JC(b̔-"uR+_ 3J)LMQјc͊]ߩzsY%pŊreyoYz n$\v0em4'{9x g ,xH-S8 )RK8"AKх %j1,n/M lҷ|$ P%a^bzzgP#;Lgذ:j~eeP~}がFT26J_t˽C/i?}[Zg- IP{IfI u]<>б#]Hی!4 NЭG0kހP9I@8(QlhN_ +YfQQ7}5)htx/ xõ|a钀 r \ԘjjlCU K>S:_v,A*fXYh$+J.ܫ z)]̵e`%߰MC +h}RnqM+o,a/L6;hxrU=n̽Rӛ%P_jU@B%_瑯/R QmVwz[A- O= VsҦI8f( Y'*Ȳ|`&C⴩i .Co"?k׆6y4XW!@1X^*P#jc7 ֬{Dn;ףwl䰟]yaR=ciCyLA#S)E)Yrf@^O0WC rZ(EPmf~cݽ+'DQ)g?\295%$Dq[>ErpD];?ջ3:IOIE`u!%ڹ"ҙ%EpYm|L}O4dbl(Me߹7g2^R1Ə B_/^kUq>D[R5>U{IX{;@ nSӗ39'rm9N(e{awMweV ~ RsnVyOl{1DaRκ&^n$I5/7y TЬZb7} ~W8%zZ&SU,1jnw{" ZR%E~* uzba>C1|4 EIx;X7}ji~a5}yeFWh9 i ;`nUxj@`)k?xCiPmSPDn#gQ/I5c9˥.Ady|p ^uS ήyA҂LFAqeJ$  >FGf PqBR#Zɣ"Z]-[wGѫRNW}]Cp 8YI+퇈DE}?7X?kcԖ*Lo~cDZ$)@ü^xW4x3*RSAbCr߻Q 2ڋC_!o ! r̋o&Z} 6TXJY2pJfHZ#0@y~z7׉MOH:ƍn5TH6Ac-E':7R#؋ӢsȯxΜL/ rxFYT] u]|(ebcbdUsQ]>sQ0z3yŃzF;IbķKufF{fCS/#;9Pph̅fEsFh5kr/Nl G kT ؼLt8ӵjsl23zks x#W5?;k芠]3[ ws-?vpc`/% m2CY r3/Kg nyZы|ժ:KY u Wrʡ$c8mxJ)8h\_B7AvrːO D.M[5 ,v6Qgʒ/ "V{ xTFSK%?zg̔Z'6>63VdiںlΑI/I3OBBONn]S7Klƪ5h#p#Z0,撊JyjYFaVpiq짤|H ldۃ" v>ҕxq` ^UC"$1;C 7!{ɍD+ ?8#$MK$^d% өL%Pya/I}[4_oYAѩxݳ{&#䯮Byо{Z<]a2VKtCaT6v2!+GRޒת$ AyQ',b{njWygٽbR:{V17+NьyK1 w* &H1 {\=cafȋX]1S }"Np1CdH< RC$D @~mk `]OQ~$dwg-kvm{Eue"tWUB>x<+S&%` jd)Zcx.p eoAaVӻg8^Fy$HpZM:v9L0YN/ԧ3́GEbh \Ӡlx\ v^\4x۪D+G/5CF ,w{⧸G2T GbWa|4r[; ]w=xe+xDmaܥ%[+)♅ v~լ\>PLLn_gاp%$|C&sp#{}H $6q'kSuuֽu,fP76K=7&F?J+Y}9<& 2&ȏ Uk0Ig ٖ+K% Y&dž/*-Tȯ85nDk]R,9(JH{Snx$>hQ]S]Yy,;*mZن_ ʡ7Rd$ k|O'TqXP[ znL]#.LS/R!D_:\6O* 騽m_FJ"c" ZDWv+~U48S8N)$3.s׏q& u aނWU 7 7@&'J6~mBp ?MM*TQ^M+ 7RQC)YrZd]9[or)mLTLK^ 6Fc)896nyk^G;a&>=mt_¼. 60hEᩞ<(f0؀F4)X'hRɴdB0.I)7j e3tb$ByD }rG2}C&N%A#()8 `Tt`#)nW;dIiꚠaUpLʌh.mhx%tV,UdNַSSm%L3\Rh|玁bۢLk ֔e$1ӯ*)$y{Fh32x>vNIy>ݭ6!"ii1NL\СroCGƊU%^q0,7wԫ֝'(]>T-Fa8u[$?qFǴ(: nfad G+ 8prsׅQ;DĘh+f//t <\]s w*Az}MWmAO.[q3[CW>dW9 l f+MOt]2.V;"3!7[ԏ%c0%'qgv;yצiO.?Zft֫G7PDCT+RʵOkx/>j,MęҌ\]\5U{y_HȺ6͈E_|Oxhxjk;u໮zϞ2H6>ͶQSĻ;cUD%gSgg{,HlZQhyiћ]y@TS%|ŊYFSHްc$Ӥ)/ NǚzF^m&k>)g Ak<{t!e3vٸm#_UCtn[wYDyM_y]ͫ46xv(-E:@~x#FV k?Vf%I|eu#_{2,AAe05Zb,@Oy$n܃+;VS1[f:)ǵV:a";G 2bS~}7ea_& iFQuAMi{mw<̑0*Ko\݊Uؒ#Opk+]F<,{G˙a@crJw:J?ݟ u?bt_GsM%D('а @#۴~V]UK8jkT9MߖJm2>Ypw;8͛B{Rsev7QYIr+1CgCKpC )_H&^B7WKӳ⽲4& Y*ߺV5ތ3WnTdcZ#8An!r8?y:(xf3M-gF3VGȋzz \q"W+g:-a;bW[q%Ne VmCa*T{A1،^Ƌ#Z4OY(;X*  <pq,op'êy#B-wH _l|!/5C9w Ƅ48ݴ.sQ}O0>0e?J`(;;"SL{ž2S"W*L+`f"M!Up '=5Dy9翔KpH*>];"al_+>e'rNkEkH(1kۊFC>2=[Nه`#qQXe'N?*O]GWvzIWu^w'𓙈R_|fرUOz@ٵ癦n o(F˒/MN(EdPXyn ~v̝XHx0<ѾITѽ3#J;$N dhϕ2/D5Cnn'q;ly^pDSTyg̻P3\`TxO8TB~ ~xi *qL&5gQ׳"^yhM U,{% 6' ÞUe\5iBU:g=/#˱Tk- ¸rc{Ma褘W)oaEk;$Q+PM`6bx(6_T|: ^Xj?_hJ.g}eov 2 Ԉxhׯ&ja9H.9?0fC.+DmKQRcU`^8Ӑ@%̉vC {Ae$I@`6sqg,ͣ/[*Ou/Ȝt(5f}sxd=)殣E benꌦFߐ):@AZ1=*,XC%n D7+_g &|nIцQX5_. YڗB(l`.o U_Cw4{{Ǝ0z˨8O֙,wj҅1uRS6lwF?gͻͣAhSUro9t%ߧ;SA% 0S95/.\zH`~e؃PUӑYp o8ک) L E09b}J|f.]حY!2BE} sz3DiUm[tǀ8UHǘ=xjծ[niL)ƺRj$e@]VJY4ЁF"A7F3+ ("5 n' f1^yQA ^s _6(]|0yS! _X+Í󠢧~ {G tbv@*]g^6Ԏ~jp}ސ&&kfU4 eԯ_@Vv2QPRfu]fU/ vX,RFZ0\p]E`aŚO~Qa!YmSgWdo6 tqY";J1%_BHCr3ߦfĒan9E4pzۨ(nF O"!`{ԙ%Kc~XQҥIQK^ln*Hy3`ʇ#ŽXc::0Ki_ߖ;*6:B}}U5m/h&FGDRSv--P)ig.R*stNƖ7 G/H.o:qFEyZmW};g|uD(7N-ts 4#-UU4| n_xjm2A{'%A+tmMK g9wN?Ԅ^\z ,v;I4ǀƻ] *Si]_b9s#^ :ACaa֝L%l,Np o?k!#{s/4)! i[da=pmꯂ@x0"& of)$N6ib֛ס'+f )FtZD\NDe\>L2b$(zLff5( ?BnaRɣ<ݟȻ=8罊NK8*n#bDq&`` ?죿s?X]c6s'ND.Cw փs}FG &$Ë{Y{Q=F$h~~4ΐPiQ'zҝ$2'; (q%bۗ#OCpQC{Tb٪W%+L `R[j";,qꬫ%FeXc\ם&`d6⁢0 ׵_ĂBc>}|hUpiJ<R2N<-#iu4). $RVZُMp6]9/1XRѨ/} L' c9p\D}bxGN^oo0TuH(jPs҆=ANjp`Ӣ.6y@N?b6SLM-D|l?kCBIoF?Z.PnO\Q":&uR:K?0I.Lfh7S6pɔ&=e7ϑtIA2n;[Uq=66Oо96cJu8]|煈*LǍh:n=T(@PWTۜSo*VPԯVg_'ȿL̀e8]s{=@"vO.Fzc6ը* =ɞeQT7dMqB #X̴5NښTb8-? qe@s쥛:+o(\:"9 Y"NtArIYxY] wANF*)Gx/1Zi?yeh,$݁G;Gi NVa4/0;#mZ4+dl.\G/xx7&&| kUFi%XngÌژb'd)yۆowLg~g8 'u);Bβ\!e@^I`9?|&Nq2])m -*Xx#;S7fl>em\ߣ9Y(0A<gDZ'G;wkA%ye!+(xIg)ŷхdO)>ݗK?5NX),?zH#띌j CV 6;kYo[=!B0( ͭWW @$Mlhs %![nfF-OˌY`xƾأVoųW WJBhQ-ȮV/(~K(-s&v{[{ETvbBA涰mbr35H#(TFvz)wc3[Q qnS6)z"}[YŁ쫢̃Z;'&FhM@_]KqIM|$+Ǣ8w1IdY:)`G\L +Hw富HH)_`F[2N@W3r&ˤ=߸[(a_CiNڸ8)b XRD|Mn0@N}H$^R` ]aQK'K<9 nEo{*1X mPIlUY4Zb#sdA;?t'W:L U&p<?;kG!th"eUe#4+?3dC0OYyX&??F]jHpN&9. S<~kC KMo >iuqOHN6![JrӕdBaXn{EsrMorZm{s섎92+(a =u<v92YGԿ&C' ;fn9LB@Nh^#\|Qp1,ͧL?v_(ߚK e:7:r>K`uEɦI/izT!5_WαjJw! CDbsSéRZ:: ޖ1!X6a. eġ4؎"Ml`׭Ŝ&>^StǙE,{A:H`8 /\GI} xmK[(S< HjdODRn *@$o:whpD[ć -HCG ĈcI^!#H 7oy2rכn5W e;{DI-YѨ-J#F,_IP(|q':%mډTE7_V|~! k4 dCw!&br߶vG@Y hF@$D1;$w#]4lS;]„+Afk-Q21䊼q[5"Z\T ߧTIdRPH*^[H(C64cҴJ . QV1(q!TtvTGa!sC y[}H! :]U~Cka:W3V(KxݶLAL%*VLR%3#eaOf6b}`q :RXBN88_!Oy䵞n0˻*0$W<۶W'W&pF9aYr9dQpSʓ^X(ӗJ?Q i'@VUV/%څ"(' {H:(q?ZȒ#Y"}~]hXjfaXTO9]v<1]ny^k*VұQw{AJiLz[҆9 `>SGl\y `m `P)m F}ґ(Du^8;2 Ϫ6` ڮO /'ҖseŊk/EdFinͅ]{01\<2N# VrO.I߂#ٿ?fe"?#撐ջV䂾X7?W,Bmk ;>W`C{Ğ+j'/ iQv2ɫFܘˏ.4[px()C"h ;ڝӄ(9 T Ib4plν1t);t=C`NZF9+ DŽ-ti9oz%'k#v0_$șC p&u!k>n$4&̍"dl_IE4Y}8Î%URy'M`2Ipu0pX1]peon_Isy :n| ʦ.\ƔT\Gkڠ4@L.f[3~%i|qƝT}#JRA;ȍ<,3(?c;KsGv@=wmE/O6"}3E#gVUxdgEt2<:?K`<~%YXB4 $B e׺`|(jHBd#4E8ȖnӄѢ@ bޗ.晛9hG]0#!X6״9c}kbkܕ ٲ]ԁ(i{>Jb+{5w 8:9w϶ӫCWlj8p[WҶ*,d-W!8u,2mS.k [c*nvDDK,3^aS,;x۽gT< %?֎~ڥ?ʆ?A%43T'o4wd`w})#2XKtP`TYǩ84#;JD’2K5/2V =_=EԼG i-ApQ#<;:8<%nk"r3!yc34Ӣl܍7_.{ w M<セ0Mr.݅hňaHE/c# <%B=kkDI sR@<( g6Bd\ ٌ`r3ፇPt:o [7b(.QNo&> 8볷Z0x~o]+;l¿CH3͹ӑ2b0"=O ` p.DRW3P#5i[>VT5ÖDYkΊZ5/#_KJW&TsDW^{0Yp&Z Pۭ_~a,5ƒp@>VawެW7p, ;, \alupF(m db K.|܄& Po1BMM9N[g8hmiqcSo|5m.Ћ|1 :\7ʷ}& w9,rѪR`Ph^JOvweѶm>$1 Nj€Y"1r<;։ö8=4tH 2c2;NJ]%}rMqK>}N.җ<&O>; XS-bJئfB' ~4A6wۑx'qmZam .Id nMRU}?>]J|./LuMؒ} Sʉ"E\wj'}0*͂Jh_{:)>-!0KDeWaI,0ޔOrgE58y{7E~}6ah9KH. ,`4{: md!73VqMInAW'Z(/vI#Ld;2,ɜ.a*oU rvGS7>^jy%q:Q:.}W2:;D•S6J(/*bL}M_&PRaڪej1Ery"q*S/ Wk)Hep_Vt<]xBT78ݠnԱŃK MX.ZW'W3׃a&nc Ku)en$IਐP+`vhjav Yg[dftk(MAwҳ_T$(Xsqo QΎ+&˄: 6<(\P:GʮMl!jp +꘾d7*kZ4'dmƊTr| 7B揥 ?jf鷲*CТuJƃҍPJߡodon>v*/\5tpZF * u CFB՝'5z_tKH}KWIu7m"f䏳t [q-[{2lIWW!{leLpG_wN hPYS\ , R&k!_ ZLq(L\(QTqzke%F\5N^3^? Ȣ:2Pktxö[n"c;M08!,j%]#$%"a_$ AL<ムѸ[@iZ @lo}<F6hbaB+X-~;erLӼ bYQ沽I. `^7GyvƇ(/tz2{b{RVlt &kjgS`uW'%{Io{"y@_^|n#@<~A#.X i2R LwX=8^"V^ų_g % H%4TA%8:ol~IdcZ8x]>n(~%'XsKŀZ0eR2h;ۺ;jK}KF;$>¾vcu5W\ٿI!hE/7[w@/mSZ@LSv$wb c(p&>y5/OZ4X~̖&tRraizLj=ޮ'-TROE z0$vQRyj$1&%|VTȸNu,.Ռ+o Te캿`+Vm~?eaķMeV_ [5;n&V8w²]C@,Zsv F33Y54ÊR).8n8ږmiW!J(b@ rmX~n1eƬ*y,c;ē`.PKMB;8$9#gfؙ].oUOXp&34] (\-]t@t.pvcǟM&(}o؅o}S8}?L)<4xZT9u&fZ`_/Y?'d;u0M63Ҕ9w(>OmnYj"[jڿy;yl9t}m>lotJ&#~KFA7Q@:B^,T.Fbۻ?'+ZAq7m7Cc<44 Y ]+ᗛW$yu^e4 rD+ ,r6+D}ȇH#pP6RsNU@[x7~0Gz]-0D5e0#q/q&awwlŲsبߓzi9OmskRøDG &Z CQ|ݸF,ڨA"5>>>6z{2TVD\܀)gB3,yV$$(2 |.᫕h<׵2YOCes74?BarIyfqwg*9R?s6Ó&hb%5{ JPV31`t;(Izti"(1MCy̒#~92LP'A'3e::Ub8bIʱsnȅFe[^dX@'WDs}`W(dwC9pNͶHG&tO|g&qӁ=rVK.ye!uYvy#g( sn]A(]/'YDъ`+Mw,:;fOMv2EӦNpLf&Z3b?4Q]p۠ibǸW}Iu}^ Ĉ xzlYW9@Y1+sIn Fz }"Q!w'AdB;oa/Ycڤ lhߦe0^Dvྥ̡L 8_oT RT~AIRB$\OrX%1 lƾ{\Qvw>pyr"kN ̘ f$5\;~S(\Im9'GgOdBho;nhb*Vq&Uɢf!PBO~+ Ú<tӂ8(:LP% \ DPnfO- @Or ۭ=ŏNf؋m-fNrE3Z4޼z;:@W? |-b+I}9[r}آ8i5RZ{ 9 %vݦ,Ԝ/|EHq#ʪq+ރɌh ʆ]XQ&mwrY[3o>0si\(Y$Y#lC]O}ll0DDRU*Q<az};Z=#,qkS̺2`ƫ,~t]tR%z̓ 4)m"-+Ws8QqgS:^EѻEvXv(E)ϠU(.2-j̵æ\[D]#aQ}%-V!$/yG޵5-h  ~͑xrŝy)R;[_tqp=$a Wt=AŪT >J-[+Ih7)&H*yl\%o}12a b*&N:F[I:Dw V~_&FPNQzd׏C09޾jb=PF,3*>WNˣWVvĮSiE}pKbHϜNZ,.Ȗ:'1 ـ"I4$L{bf?I6Y) IRK|[m/Yʚ0}1Tsmq iڻ51_&aBFP3MQߎ s;1Tnbvei*7|& W(WRmIE06Id"Cs?"srB2졕 -ڂhѫVٓQ+9L!υz{uFM[|^P2Thd]o~AMp M{ysBWPb--T3oU>X,=s1E^FQ7IyQ{9wNEs < Ho:v59 N/=9m90'@CC\:乔.aZl NE̻)>A^WP wYEze09Ÿߞ{ Ce,j.Y\R#ˆ7K %TkmqS&~ϟ35ZK 1Kma bX!6pMI\bZ8Q+H顄)b#e %O'R@S~ DEw9ޠN/>v R.DDÕ+q\f3UGA;SARSt#6|QuEYÿ䇳F\,-4Ew-;qmDU4 M]P(Uc2M|? 3.!)}H 49l6hۄ#as]'#k ٧o}b<֥s&lq͐N;.V^2Iwyؘ)γo%FYmfbG]K)|\}wS ,[tBg06vU4YIkT|/QO^~~Ss26-$׍ MGptߛ`wJ^c<3>DMٰuXSUv)Vjk2:蔼 b̀9{AϡKti}S/W?e2ɹY e^Լn Ok[m9N7`KJiS&h2iW`5y6bϸŒtxOR3[Pℂ:c48be+Sd˖sw1Og߭(BSo/ګKJϒeo ˬrudW wZϞ9SΗ1 p1e@?<#cs-4n-`t(M4"?淤$5\V<|;#Q39#ZڟV`h' a! {f\81.;r *r/#f* r̴1:I[ sxQ]ITw_7 Y/^#l]PLĽEp ˉWw!픑=. P1F7<6h2uAe;YW123(pDqOk2OY'e'!kozi|)ck>~69C7mGp250hcNOؤ~ C_S]+d<'_(g6-FC)D_|*heu"t9D 1J"Œw3̲&̰A.mtѸXR'@GGo%AG\eAB^7S^v0 >'UaX~']NIL[ƒ{5F6ogVG {&O$Q 7Gbr󒚛 wxş;KUP{BE6JSaaf}4Ó6+>U("@QpGARg ؗto![#lϿ[b6#, c&Z/tW %h/B~ *^(En `> )gZlHDyG'X|Wh g`})iq3 @ X;/g~0Nů7ha%fqu,QBΩmo~)xTٖ@.U"ji}JH =^bo@̄ɢ&k} fL}"x\C[\sx!. Y?^ $u~"K:|PCr 4mjs;|_Fgw%bCl2k=^hR/p+Sϱ>`>qdxY{Ah(uj9рR& MjNɡK_YKYrQZnmLF*cŢC-vu("e&74ݲXG59]]nV87K&ݞ -;"X*~؂a pnES6s,/EDiu#t//rЀrc g=nsqyġW zp^Wul|,S)Jf؞m$D]Y",~¿y8;8V;%*(,3:cN-*wtf J' C I?vy hih=tO#:vpG3WT,U0 P լ*){=>|JN`Z0H~|.hNU:c~w[c# ^;HfoxƘsZz{s Ĉ fn@ш.iSfR2|^d :b4 n&Xsu3TOcz4@2UmRP#񁍧 x| jU[u߃5Q"L쨬4a9^3qնzB-ئĠ 06ᗝx?lg\S`@9#sՂǪӢ^eRSrJœ2>A&LxN+^(AJ#Kәq#:AX_|1]QQA92 >[bq^0? $|.]N:1EeYh s+hi~%swYĥa (3X)؅uJNnο-{ZW*>Y S2pX玤k9 2.ݔLRʆԳ<'G}R/qZ =dh ި:vZ9`2j- :PO&` ˦d5ѽ~b]meM:-"h: XMӔfҕWDg?R@:m[9I-#x7zYI8ȰOM^rR|lg2@ϒJT~7̓vL~zfkA#r&q)M Kgy+-O/E1;mcV>%)ɵnQ -W%/8lo1X+_#(.&ڎ ӈxPG:"^ھ9(N7Ps&E">]1:ս%0*Oz&4a7ЯWD:/IY?Y:"tg6-eON+Vx0qFף{kNcC TBupቧ:WdPFUϼ*p c!i~ZjOe"eOty~X>I4eʤJs@I|n.ܵQ"f5l-eO3jC ǯuayy#k8+F7ozK *Po#nM.˸j+Pi؂9.%<Plڊ vPtҲG7 t@}#DP ~mGM-(0Â8|@Y;`{g]PΒZL&H5QxD8vA$TV{ϟfDK䝋V ߕ2;eղrlSX0Gb P{$@tl\Qn vyt6aX!;es uǵbC?K Oaa=yڠ,c{x-$ /O!zZH`减do1h#దao[ZF\c̗1܏*S?~]\D@pN@Y"@Bl=,g%g+oybkQ[-NNGe=D碎AVFڡUCo\K85! Ն pk-\zkh#"-U$"尥X'zzgU5WcVzL~U'dQ\0re\ޚ\Ӭ 㪝dG'_o>|7y ~FHœvCTc֞ɐ @ k\}G,f$헮=֏"rMq +J}ku̘ &GRL= "OS(|Ы,3Og4^ AC]z/"NR' ]u|eꎏ  ±jiKIS^M@aҞnb%)EV5F0úɰшtiZ`ַ{ba }zѸ\ͧD5g8Qoe%L'jtL.#)!&.T K.n˄[{6!LGX^0X\dXIŽdaEVO|כǘzx2%N8#H:{F^ڃ4z :,[@,eAJkRʒ}i,S V 0UҎ[Ed}s,߮ŧA&= ]JOJ+ + <,@G2VC1 %c.a LthSZɫ­TaCӭEy 3V.DZw(kR0E#D_2Ԥaձ/ 3T+b_u^>C@}8g=9}s%'f=URݻɽ׃^ Q> 2lWBpO HF;'mⰀߣY(]J8y+gsrr{q8@Yyf3(h{jw/V Gtn=okjL҃ yG")36:u= J@x3H4@{R)\R)}ЪT(_ 7~bvJiƺ&ֹ,f*:VswJF ~oQC؛Q%Bd-QL']mHit>=ÿҏrb"lPfNh/-)VTYG9>&d[)ߞ(%yV7e\Bʹ5>r{zl-CН[Ճ0Q"cLUPǪ~,qZω(zEl$W îK53'x$ŘQSlJ']\HY\Xk(@;Ľp" |:joR/MXj5 k:y [0 !a6>#0WT)Ht%@L_֠!V2ZOr2Toj V, ɛ1AY--bw2ѪC_'1G?_Ib 1<_fԋ9z-#4;hVWgߠIlkmI xzDŀ{cA,iܞrr oV$^#cϧEc8Xev_ןe8ɂgw@y7x?ى\w&؃ÌlCLM8%oyT]72h;.ܒɱaW#]M PBd'yLe\o1.;|)r ("1FvI.\Z^uWZB_Jalx~Zc%TP zrճgΧ=%=qk\׼ ş,hOЛz5(K↛1p#>ygh`vD6A!뤄- ԏH5; $4q<.R+FSaz1 30C)2nDyNT&;M|)n aH-aU)jK|uW6 _!/z$Fi \0)fZ 斄 &f8T|!|X4 E9"&pSPB8#%.;-jjxr#:֋ҩ]ؑ&(^R P B9_W=x`Wi%"J D{Ȼ)`:G&?rպGMo.WĶL>`oc8ߨsi5DjTP8/Y$mɔogj촷t#dnF#tJtE9'JOz20A^>-vl:Xvrx/'pzfY+TP o"WXSڠVιPVw0oPJ6_-ͫP`$Ǫ"HLj5~3(W$ ݏq ,?juRUw(*i;Anȍej2|fz~^&`OC[9WBYf}^[TupL@X!XJtɆtYښӮ, %^tNB{9;:E&n(3Ag|09^9GB/REAS}m*Ȩ[1o0M%9߲|w-Q7)zŹt S^Y?s~$WFnc +Cd hC".aFT 3 L"ZLJ}YdUn>#̜Yol!}=?C}!ESNVqcۃJZll]n@\ljJݘĈO_Ua_ *| ^^,~Nc;0.4%:DB])\F4v̪ULlCKg!q+C6 b>\횖)j0|lg}Yfdn0RLm 63 sT\D9ڶɼݶHkT6o94t39ksAAQ\,R^|L7~\L`A՜RfqJAɅ^0s9֧h +\Bnvt>8v~=s+J;kJQ7qz2> Ut5X=%AFI<4 bZсX{ M´'{F>3$a%/6~%S (U  bhH )%IPs4M]bYp .2Gc,i  ]sÔqbF x#yu?fS^k_)sW 5yum8SlB0{Up%JPz!keB Qcq*o( 0@)QK>mbk 6* S 06a\UH Zl \j`Ȇ*4fDb7s.lrEu떝yv)G2QJҌVʟ'6ʗ%4-5z0S N f/s  ` bihYD۵Ѻ,Jn@#2&NņGE>˅K3_<:ڊH\8 m/#4StW>|ӆуsJ:֬H 4%%ێDĸն5~`u4bC?R0pW:0hU.<0s~-v4PQEqn- X7$jw-,[6 d`j[#o4[l=_5z#JKXl5Qt]d|6hN|P(eFWը=z&!Qb[-jM([rLh5\GH}FN f"ͥ^2=*:Jje 0\OT{(rga;6aMFup`s6 <$)2w:뫡HVٙ ήG$8ątZ_;K#)Gd=;ORcEX4OF I>P:. 佼ki3 a)l•( jnfHK!.V§1o 7G޽`⣣:Z#;MCoOxWT(+U/WC>zp%v"%J ]W@z~I*A\P|'ࢃ4Zk(q(ϋad KKVHؗמ䴃=3F?z!Ahɘo\G[{EӂhsK;^yUǻҦyZӱ2R& X%/t,wn\l)- ty%W`6Ok3%36*> }2G=")M(Q_ap%UZVE̒Rnq$h4sEPGOw Kd#3i2jUHX^Or <=I(3ol# B_jlquņ_\LNr53I3M-B{c(}M%9S~vla>2Q#ޟ7-"aC"VB㜪e&)w5-v7lBXTar{69I Vx^޿r6N1Ug.y/@, GvRa!4 8;VPkBc*jXa&>քz55$=C;*@^:fC7jNk6~E$<[ݓNjWO^h۽qy2z4/_eE& ]gZb\3hq3UWkzf_ْp(LүH }W)_ϭ[W.bEYh1.'܋Eo@{]CM1AntZnmBioZ" ti%!Nz 1fSQs2mԍ8Ёs%_zhOLGp 3EoշLʔ1/)!6SP2Ta)5d8o> VejBR6SjK)vB5bK7]H$"T t\$faG{4Mp󮼗E"H<J]قI*}%*O7_clo&A='R˝Qg%g]nu"!?iote0'M>qn_h7892eEvM?/RqC=iE@S|"Hu19$p4fQ4璘boo>Tsv/ g1FtE3 (K%ߠ Q%i2vs7qcCeY 2L;Ze+ͅŵ2@!?]qΐ>n@2am} vGLVhry5c;QO(8&_}dF,ͤeN.5zM8{/e5dYRuu\wq'=Kg_>]o+EG "lգ1!ԽU/W.06S5mtƞm^XyBU!wg&+eh+K_"laJZ9 j xb6^Exnt0d\@P9sckS$[jojdzV9#*о4F+,bzF{yAʜc}B{77$oqI5~"{ woD!.t|}L~œKJs=^ :˰>e,5& ,k(H4F7\Q}2Ԡ]yX y{MdaI]bpp7s;-L=7rm!(J9RoODzDLR %xCCc^q`8$ÃXB8AH[i&䯂- ߓ Tl"a5 s{}LT`$1!/S\i72VI^2ki>56r.VXxU%)(u|Wna*.'>vaNN'&z2Ųa83:dĿë(EhmdGH?@_ 0 5,;khbΫAM4yy* qEe=\2x<,ͿcQs.R:*Լ'4`X_ eP&[7PkRn>6uCL#j]vrS#E;{& q]='>ݑiP6H_^_wEz-D^F0aB= !a;6~!!W-F`GZ]=|4lK4 ms:Uh%pPpDk#kqÿUHaHc\G=d˖ubPՐ n^tzs~7L!h|!ԀSlK*mնE[N$cNvfTZ}H)6n}Tum(d;1[ruj'@ \E&sЌ"x5_: N Ԕ8"SzqO%nczv&}!Ћ4\cDK\0:X鴵ɯiksG}[؞5`n M]ezI^uu~@e@뮃i*]1%=7u!%8uZM Nxpu{g OÊ 1O@b"`-{Dp傘⢥P@YӵX* Dv}-IcG~P|ǓR\C3pXQz Pe_t*J׽Zf˥"cu_Z;6CC\vwTD\-É%QᴣRjx7 .CeJ0XȒP|ztND60ϯ. ¥ j/=Nas R?"%oѸl6$6Wq32}QFzpPZ(pLUJN^K ޒlZ|tG'fQk?če)'&FIq;!b;ί:t7qV1m*4|¬/0<#zhJ c<~chQPnSs̎P:ζsֆ6h&o7ꠎ#B[ &͝w55>pLq+&t'ꎃ%\gHjM&'#m9-~E^/&ͷ 7rlz)Ν_ay$vW7LazQ Ӹo&>~0z!]2!xj]wG=xµ>ޠɖFͯȰXtafY WҦ|=⩯,!g=1f7u6UQ%O#g.~JFUP`'0g<ﮕڡR|?I!aQلeF1DcIP uɣak" '^lPi\HPExM7p˘7k|>Xڀ%W@y;~K:rڙ u0sJdCG"%\e+qR~IdZ3 U`{wA"YD?[O*A$K]$gN$RIb-2~0Zv-cL㔛+(}Xq_SStP^0RKA%~x_T@?_Ht"V=$ gʚЄ)ڪX &>B|86YZ=y?d,vRs<ݔR4\coZ<$/lc/S4r 2c{=~* JXq **<4ז @ @x`@ȳϊ-qaTԵ3 K!x@d!Bn6l DV>aLZ!C?+'Rݟ6N#wߣAVгf L/w eF$:(?h$&Ex:Sv#&Yv*c%n!4 p`1Q4j0Y&bq|g$g=]Ҍ "T $UH 6Q3FOC]^]-nQs,q\nC+ehܘ{vO(R?N ƒ[Z(lk0ǣ?N ~0İ޽N>b:"=$%_ $:br {)= tKD`G`>,Bů!ݪ z|3nMb4^AA](y`M?2Uu;TaeF.O,D6bQl'jQ98$/ n|3|^XT ^L/+>q6KtB'*pn Ij+V3q@$q|ӭ#eWR@Ozf%cL# x1T$|^v¹@ xܾp;= WY2`xfO i=X*H^S:~*3/@2ȿ¾\wzH[:ɰL⭏=̓K`@/G4ɰ}=3npVA߇ rۀލEHOl\S}+z\'N(24`..ѺfspAf+k#lBi|G )]qgGCK044?k2^)£َXB/QQMK9-z!7Kp&W |HZwaroK:H5).cEm?^F}8zgp3oq w!L)$[3B!!MێhTLCz~Zû uXQUoZ|favլ sE[P4쉨Yymxdʁ7:kGxprr0OF?S̷e6lD}<2LFSrJ?GO 89eA3eمA\R|;7HPps- !epWk1tt\RL>MY+j&B]~:pcc6Ptޞ`@1k*'q'*(tOdݵ6 [(Q_~HI! UBņ 6c2aYQ: i,( wvUSC]lb|~?]so6gŨoF}wBC`j(s]#hUKnOT:'?y&Uqmz= ;}M(uL=uLL* ZdS uY[Vכ<ɫ\0'ZYG)l/Cp.Bk F"0lo1^ylil <*Z=o sonyn.L:՝se˧c[lfxϒ\usvWQλ3>op9h nH> W(<DI!j6 _|p`^/;IсIgM$!I0bTo!S(Vu2`\SrV L'[yHE4gnЅ*/3+m֬.,7e-[(e Hxqoq®`A'T<ߤƔ=Q@>|$*/w +p1r=u}`TM;6Y*3לC7SeKHQ16So&PIiuxRnpW -QDŽJAs &Pt2$AZ<|.1?Z ͔"L(fu~䓑TZkptWR%V ĺj0<{j\B1[a2P [DɵX95`WO|uMa +R3PWz[Aqf2DY5l>K@ 2BWdZhi Tֈdu-aðtɡ _.cP|-F}QwKP+W3sG &x5q0X> pWKM,J¦Fɚ"[Α@.9γBRa RP/4̷J(CuƞE8 .mw BǂgpFibͦ ^rokDhDGHczC@\IQ6գ#If"qW(zO!YiEMb-0V調@s@ sBq *ͳYY1FnĴdZ!v^,Uq曢H"gk(y(# M5ziWO0KTs38ty+,bĈtIr ֓}(sT>'hUgZ9I# hG59ᑝnע;b}1u[oyH4"tukNṇדJ5&1״TtA6]~N3U Dy2VxwuOXV\k6Aǂ~d$?RN-\Hbk=ad M]Rq,SC!bW 6J[s .tpK4rr,0M> {MQDTXز?;39% Q# ]Br1]q0||%/*Ymm_i* E1#KG7JyW_n59c4)d# NJ!}7y pUoΤۿO8c vBb%y4tw<,-N-2]/ϥeLM}?] K'nm,KS]( Ai;3#$T`q^&@rV_/|MaڒtLЗc+4q{P/&4%WstoY8MWI}2`JW~}%Gz],Z}[(⍻ gn&]&DB^ct<*n;yk68"wI rp[~Ԣ.`p.Kk5&"QzCri/jrkn\qK#Wʰ΀ ={5/:Aωs'2>0T72R;ׅ' -!0>Ԉh]Rs*YN1_125$I+(3}F"JLg*gr}wwug.%^Ph]^bz.~,6^lvqNQHX|i?#fbsWe4䱛nSՉzsb:A\to%3RلrBoz,~^#"s}16#xS l0޲.0yKK@2Noσ FS88%%Yo38%!1G.-Yy2ؼQ+T_pNFޙ_PMusԜZ9 &;+] Ozy=qQN?l{bڹ{`7N8ANir19ޚ ^]Meg靔VT_PZ!cC[>Ǥ*VupueOTrb1fXٮ@J' (E]f QUu|e[lY);0/狒p%z~QX b׮Q2Ө;FLɈE@V7n}Ҝs8yY)d#xFW]yo!P`M2-Aej+5}fC05'b ıbv|2R68vG`D<;872Hi0Rpi/׶tpN0^%ZwX;yu,ťpU8, L/v{7hx8e'@صDk}q"!:lLp`[_$,@d ӟB :L.ak峼a!lz9LK̊s䗣n90CcPI`lD*8_}\-!њc>& /'q25_CaRije)0_.]`n3gr,Qz޷. Y夻$X"[]Ll;[n5pQW "L65oqՉ*U=sl4/npYpv n`}hvif)89f]R5T݂v_>2 ^*|(:;G!K0NR=p8|LtX.$ϠKF<b#MdTm S#jy鶴2} ݚM՘? o}cW;D?btH "稉 6tz:_KEdm :{"7\>%'3˯=,I6 `/\_R D+x %M)_jqơhe+WmMhCH{5!i u`abd檼FN p4;bYOd<㯲rђsӹSP14C t$LOlEQGb5FUƴw [{[jA!DYcPŞwPaƎfZ5]>19gOuYd^BYE9QY/L>7Sn"}6x ɴ+zM^g@5˚N@)N,@Nuw"]?l0wТ=Tu_LėZrY4Sگ-wÌG=ٝ6v55%lǽUbOhءx+gz@633S3Ce5uMt/ y`<4 m ,m*R#KsOD]@uqt-\>pK(s}K}S:c?R[d> #-R;<+{&JI+ȯf'uvӧ~BxЌA*2 lNX7Gԍ'ʠ: -.ΗVh!ɮՖޟ`NX1{?zcSR|y@kypQziC-Y]0lg{] J\*eD\[Fk`@a)E/6/]Զf9 NzJ+b^0M}XGXMy3*>E sd߽]a3*Wf" :J\>m %>k"(]=0SJDbt hW=\ ɫ.=܏aEԁ`-ݧ{V=L< )oB:咓(ѨɪLt.yӭbV ?0NEԭOl؀ii;ˡ gTMtD;Nv~BK@:Qt_J$%cwV˪|k/) f3nltltwi_94fnKAy{pdA?˲AځK?jEdUCߵ3X1<\L8 .$aJt{$~]n1"|ƫRv,|t瀄5dQ`AebUz`]>_oq]objY¢aE^OD/6m;R1 8jb#RZKa-WJӦGl5ȞQGsGFO#}(Y[D;nq=l{1ŜH.]w82%"/\υI ub.>Q떷](i y^V+vڡDt, O9i+ mhBWS"] ?u睅"JC*WSo&9^d[x^Nub,[1e\.Lq2 q8Ep~3i+gZs:Q`*DQ^]!0]a%כ a칋G6J`WmIY:Q\UEZE+03=8bS>24џ(cзti JUG0Nqd)]G3@4*pc^JZ!B1oBu37D 5)% )#y$FHa|.1͹$nT25cBT.yg``h}4Y /2"$4(7/ [QwԉTԂk箐t-oy:O!at2|X#`l.]w]2 W50$5QzXTBCӦv&IH9QP2й P pfQ~^O ̣Z8V*Y٤kLrkݡK1zfSi R@CLR<Ϟ7< ?=>|bZӡ^zv<wWߐ HOv{h&lw*t:۳q|6܉$.ŭ0! I#Pl C'rT.bQgDtYz.A.ֿb܋8Oӓ4jYA?R>; ӌ}* 1~jx^W<=(DL5 yzW]W )Sh=֬ 9S݄Bv¿q|I*$z;FkA譔DǾ~Pfnb1@Jؾķ:=Ox!u|)EU%^Ur4Ņ ^"KGt՛dq) >Mjp̦2h0U Q8UlqAIdR otX]qL[w^(UM";6 "jr' C78"Fj`Kj -*ԸSh]M> /5|?Rp"EEyĮ_s9CM/պ- 8_t$.vh+!<Vf%igp0T%q{S)ؘ6RH\Y٩(0Zhm~^N9ꢠo [FP &>qgٕ5=ٷEPQ.TAC5%aZؔ#4ݗ"|Ue(BʦWck7!qapɫu  UB k1F*=8_9ﭭ@6-5۲jW8&hXҧ:w,iBzYBi+a"9SA@sʿՁ!)o+;oF'ԴY2 j T, 8R {Z.̹9iDpb}BvJpjs iM|v "=\mYȺ9s ,|GD>܏/MX!~!kVa|EhU TA+`ܺ'%vEɨd·.1uW >r|!72_`JK"|[X} %RNC7^qp8 X5{4Z鎲 >"Ax]3!r:$U; HY)`rg?Tr[MVU)+|вGP=LNuAʧ2BXnwn=vZOꉞ`}S[ҿmКہ"yY![ O<\waŀͤ <]_篦8Gu8n Hra#+Z%N`վ{CO鷔 o.GUu+Ba,.+G0xZ .1o~jvrNIRxZ=,]lVX~ET It{mnH|HGa+J ]AOwl4G_&2e; )?{iHyJgoJWv1|q/ @Q`B ^5za4i!'%I V IBՌt nVW!v,ܸȽFdg¨ 򉃍op|:ƀIT٣_sY`IqND[ШPs4~ǩ+Oq7|T5LUnҝZ䆖.|f'Ȝ$?BVů$6iԧ 1HG5{!ڽRDprwm#@Wr39_HzAlx$';vyMH)onbX!UyrET\iZw2RRwix;jU"Zgp%PWo53Ju1)9oꮎ s}?@V*wq7Rx{˲jJ H4`] +=\׫w8S*@>Zm,J s62\݇bȇxM`{/1|Ƨ"]ϋGJonn_JHF#Cnr53⩩sJr6h6#⒰S{lդ@ uFx#Ń;Ĕӆ Ii4)נj0t@%Ug /`OKY\mO[#{Əg/R^pۗL"~}C{P{u`L]+4VU᣹iqIT7%Z?3? ӡ2OaP̭"p IUc1ĤXˊ6%Q&ò}din"1*{Sk3/nߋL쳟 s/ ☹AaUߩx.mޮÚ-IiRXr l@8=HS5GW{Ytv2M xeK;Cuppe`;T~h6[aԣO յ b#Ҟ6j2,ʽ‰R{v hbOQt0ffaz֧* +%MV)Um 4-D[$]lׇKEO@iqt]%K&z{5+>Ch9~zfY""]`ay^ᶳf̮8 ISDbW< ]: )pdNkK?X9k˷n.#۫}p@JNluUb2+|Àz5}}WYmFaƚzgg9vJ mm <@JB"z<{zl}թyǽ7M]ltT7hu ls%s!}ʰB@%QOӷ\bSDK.Ϊ;Bm5 t-Iӟy A1 2s^-\I iw4'v(v-BFEo9Җø;w Q|]`Iq,~݋xR YH!}cCC>%65 9˛'K$I:ː|8 DߚZZqR"'R zSQqFrȬHa]|>_jZ-7\Zz2~BONu:#xEj`TZhyhҥ(ߪ-kMas 4򌱟_F> 󢩪zBAQN=bi\B :~YQ9dήw&eH#¢yR& eP)_\5V-,P-@_S:G~y9o~*,^!T 5,XH+(<%dgC5@ Sv?+~G>\4@bՈ˴0E9H_|Hl|m{a_^6 M~ƞ'jRN(#%P(4/d8| #I&.AYW[ڋCv~s&ٞxu2X`ėCAM'oz(0/}~߷DV1AVѩ9L 57k :'!'Tѥ#[%lQ'dI܁ Kr#ZDp_5.? T} ;mi}Y,|ZcHu=&Y!!(o>F}uȄyct->rKtRak!>42ĵo ih:yuPKt[rE;k %#!+m_ٹ ,Ԯ!:ba}By%_ znC@Lk\:Kn5%6 uJ` |pнDd>SU2&TN6<4[!Nf¢{& Z4o~G7cGU%L|MY,Ufoz PS!Ri.cyC[`& ԰9oPYp:jr~M$6zekHw͒QOy;b&F !}-Be~:%VAyRn݊4Y1q4W" 6)Bhg{>ϰ^7ت*K]Tyg2< #Y X ;p )}BTS^e|2O sI5s+^y"xHe6*ȁ]LއR[E/f~}#%ZuOp6h$PE{l]x]| B)4v6I8q6](SӦ({YpOqHPb QЖzs \KsA^E@uҁ-ם޴=-ڹeBcH0mxx_ISjqo9nXAXz75 z%wɢ ceg U)F?:kE?drff=H[_Zր Y~5c27;L> )N_.jEShlepidwNt,aohsK|BtCs&SL/ @̤l̀Mq ~V%| q` HNfi$ ϫi\{F[aPe-$gQ*:p} &|' &qK~ӱ/)'HTV`Aԕ[Wq`ڞvq=j̍$!0+h ikK(1-U/젭qC3uaac5 {m/G#Fs[ ή#7ao٤uq;[?Lp xFly|͜@dS>ۀ .x\Ĵ85V УO('gL~HITG5YG[J`­pMW:qU22[%@%ƜPrC= ϬEcu8{0]%] yͼ ! =ԍtY(BN)>Ik]q LZ̡A#ls!i2\(J(kh<2NUOdQCڊwJwp]vn@!u J=*.+O!K,_ W"DvLDCvYO6S9½uF?0{/滉馼k E; T:j)zl&PÑp2x>)\'40a+W7FdyKKB(|Y(p$0ދ'A;^B Mg쫉;GdhQԌ;!Q2xcdH=]Yw(ʈCn{MGUyw`rbزyƗA \D\QtB~ b@0G&۬췽h!qjX|+/daaL5 mhEJ}WOa]hȷ4ty89=x"Z&nu)k&ɍv#Hb5ˇA v׷>§MGRX8R4 f)v.|!FEf,Y4w3*WỾq3ՒzяK ΡT̳!Cu3 x'WAّk-z>;m_J@%vn,)+D q˯,xzjo>O cfY69 6.B-NR| )oi*BL2jbQ69筻GDz,&Xp8;ep0#l@y%pO%H;J $;/~-73ٔ1_s`PAI ǂY jZM{{z˛em?1_#݃OXI'_:cm0וQ S}iVp7gf7IP4໘npS9-PNʀ,'**HE>k̴Sr(mER!_pP2+EkNuQy>Gщ\HșGI)#@ 5H{^"o鑂XAC 8M!4ГPl&DsK\QxL:niO6Z5<KbW =[D͟RT8//y6b'~USUiֱ[Zr7]рIu.OڀRXykpo~2uI[FtȔ䫠,͏?Ս~J*:LIO_N6w,Nc6wr ?$Ӹ].\MV)\`9vx:c'rwBFzJywH4&3WMᛟ OnR!m`'E̽k c7㨜QMR>hIg;JIj6cϹF*3Aܔd@Mw yep:_DpTك k;MV "'W.`զm&) v%Ҏ ght @sVO=f$~wU=y 矃R 9yFp6FѳOUNO /ںI*50:y:E9PU^X=\EWXj Oq-r:mG|m;T=" -7XKftݤY˴=pŹu7~ *Ж JnM;.jB%.B\BbGNg»g7MF OZ~X7Z&Ŀ%@sO,bc;eYּnXrֽ0m%Ie=@k}"oŔn5-h L(TtRsg4dǭₗWov8Tm[o;]`]tXa 1" UvF)WRQ4L'X7+rCEAWِ OZ \:[:$+dR~BHyvs*57`FÞKvaKJ/jᛟQ^kgj ]2FD%{'-ǐZ7K q͇!@Wxc%gLRԓ@F3}6w *+9,:XB|)vP04ۨڏ _Xǃ t5ڄ-P,# ƕޔq P㒯TeaEl>[DZМ6K@9 JrCd%Q̗oqypbW BI;,dy? Q9s61acJᄼ Afɻ[SN\8MؼPf,GBq; 00q'df#`pZH&E<ܲjDE&?!"?x6? *?&؞CΛn!Aޡk z9W&64 B{X3Ή n)v5ޚF<,/I3-e j;]o+;\9()sj6M%xSd! ,uE Km!´:-x &qoŗ[<%Gߚ\dU)kH;`Խ-Sq{ y݋6n/rxQ=L Tx"uK3Bspyf~gK=Dܖe o&SEș"v?u)?_So%5ܚ!72Oo,Wz@{mdS忺* P"*\);'P|\Iߊ7E!G(@ uLV@X^t%O%2O3i`%}fwHf^bۡL4fֱcT{"!7tmQ?q*=7J]ϰ)M\ei/T6d YF_]]Yٔl%ؗd?JLzm 8XY3Or3B s:}uق,qXX.4]c\N|I2X6!ʕ `>&XL-A26X/N]XA:0>9&nw#CEʟ+ Cp@vŜ>MUZbxR7d`-ZT.3W%yO=wGbӏC"V+J+9 #]HM׽ooy]v*WVJcSHxe~I(Ec4^h(pAw,ֶ^a=^ K4#׃3zWH,sr^>n[RC)&Rv8'rl޳Z3dȁZBAf]-Un 6 0>3Iϰ=: Pޟi_on#1 ڿ &$1Bk'7yF+|9~\Q&3 $4%G2 KO [+sא< ΃߯M,96bn&OҌAJWiE.dM2SG;Ch[a%N="RfWS+|)]yJՐ l2ߔj|2iPiG/o d^J!Sq4 \+jxaMH=jHvʆܷ}ZkW8N@Y<ӚQqPkgcܟ ыC,^tmJ5e3Kr% 벒L\pU ]@Ds>tL`,'&ɭ\W(a-'"kHG9V\J$a' 8 D ybźSXpr7:50C&[k*55mzKt(_lo ľMGz8+̳Hھ&(3^ D%γ60Τ#wh1m6O*y.|]J XTC'a f){#@:TDČN%uYt)hNV5~Z#o=5oOrI..s-Ky/[ꮖ J ~u@:`> !]xva WRPҎMK=I ];[ZO!8\bI6ҧ? kh<"Oҋ/~h7rB{[|О}+^INq%_YZp+ߙ7DǦ$ӫ,~JحEȮLM4Tؓ&?l ,ҥEcr)UR@-J{k8X=*\dd'mEmӽ j0>*{XfJ[ETL^_B*tHW]7uZkI]rfmmu sɱEg)wy;q>f`81WٸPB)t&踺)Ԣ[' >gG'E^-3Vj$[\般[E` |}oJ;XC;OdgahΕUN->L_?&un]&%#9:cc嚬~Lhl RbC$H1rt(!eF3<:S%O>՜7qA5f't| 0ܾbfbTwtC6oVYqȢ]9DTr) E|ewn` 3U.eP0#TYcNq+XsʈS%6TQ{ X[H#Z֙Z@_81'.'l.SOqC[=;-)+(i|7#N:YܦP10 ȋrSKB%fu# sO ߈M%b%M%Gi%< E -n@=_& acP!zȮ(Χ 9v̅VQ#bnۍB]03@T,[mYq̜o^`89zAH؞wM*B!.Lz6?JrI̝szTv׷WD-< T}m/_ʵuͅz,; }yW<Ѡ[^-YB`ӣ!^v֤Q&ջkPJ\0`*VW;o8 7;Cq])2VD!ry, ~b+WG ?g?@M~Fy_9Gw픧:gb XQuƷA ж/w;73Ͽ*1N? k/m֪kmBR (L\5M}&aLg 7-[DtNօJY{W9@`Pܞ<;\3zW2v M7⛞3F0 Y)WS's֊gk3,TnisFYz_0c{ ǎ|$\||䰨|ƈKCկ,h!ES{ެGR^Ta`ln*g*]"&>+0l00ZN Rk}!Qc]zFtZH1 HJx PKUU* ݤMS[SϚ"Of!c|G@!x`Hh&#0=DEF`(n (DmwxPB<w5-L}(5B[)OUJvR`EmmA]Q̚[F"_ؤZP{۰x̪۱#%b$T f'_|fݔ\IXWhآ |k``Z;¡-rwٴ Ï"lYG UHw>6Q7{[u! h\%1B]bY:f%u}F]Aƨ #i^FCDTSmm'ޘICڴζ~C#&xLQvBD4"T SbaX*/W֙꽍禲BCJ;bb̵7FH\kKWE<@#VMᓻ^.ʅ$M> 3˜\y{>c{I;]3щsG) ݐ`T;*lEJm6|! k#C,p`Sջ{  Xٔ(D-Iwe.hQ/;XXX[f8#"ڭOjc^)!F9awLjZ?$a"QWd˵M_c_f+t_.v?.kL9 \Gh(.VkH.Y'%Q;J$$,{~/WvNm1;.ۧnJn/^xe07 &+&s=*, t+i=L*nPph=)'- dG7Nk:FܠE 8ˏ_D%7٣zWn[* LZ( g 7R5l[=[CPAH\ɛ`+HOPh,wF*A=օjgU?V8%\N@R.e$-=K vq 5h%6=.m"@I9hdQfd$[h2mBՎD TT.r(жP0y 6{ƶKz`Os1K$4I㢚yq TGTH^"S7 w\l,|RSCх"PFxvm5,De|i3;w3Ą'l":hrE ͭvŵfCԍF%CD!Zu͓CB?tYhD(3A2l̾F41qg"]z\jģ]5(ghbTA )HC}мbEe6ޏ@囷|=JwMPn.5rj"Vp~1 me cSlu SZuO/HѼiɺv龜bي76xS*"~$ž&ha)ώ O ›MU!n-K}^d~Uy?Z M]/fX9Qs) Mafd& ~ ~;ԥLm5;oEb+8 38]9now`)$LRm]RSQߵ+IA2u0/yضe:׻ Ub?MdӨ lH:A^ [g7ƃ+#ـy:=((M*ǭ38C>xI6߫G~ׯ| UR~7- tF,&d6 3iZ^<#,?ws<ȩt5Y+Hi\"^aޙ֟#ND1iPa4u ACPoԓch Sָ眐Q>2q0z Y nъ mԼտ&v滾^FVY!7k\2Tmtj9,GXKP|IY)M͕^۫¡R zsPTaR̈́q!E4q= ᣝc~gZLt"{#-gLf|?Q NK;a16ֱro r5hS4y?yq^VRIvr|Lޕ[*+)öGεjq t{j/VT[$Tn JgW '͛=RSY e&-o*!!|u=e0eG=`vU 9(i(Nv!.%$gNuK3%'`9?G gߐg"Iyl|ԣm]ղ*F-ÑI_E zx,@"ku㙈f8c#낢"X!v+D@JEWZ|5.T ߼pmv/ަ8NQt@-܉C [?~]I5و!k9*5pZYu i-NQeLs[őj|Y&"#QJ(5u |*(5߲#1)?OcvTS19@sO`.Y}y #m~O:}.2~"JHP9/OSuɐciz-/O]0@lQ~!VYƻ/MuuϏ!\oROjEFrb)q7ZWR0DPE՝9v%?z:*Td>)-s7H|Rי7Xv D3mѻ ;h5 E 辯@ܑ,7Jf*i~pLH=y&Ƨ'~ow`ӳ U%w˙yV**1C# bxQEK$F?œߊ`62eu/Z漅k%2*'Qgi<v*@("=슠Iȕ2Zdkzo1YG Z;UnR!t9T8hy;-d xsweBe)S04,B~\j_5;Ppe_MvmG0"̬{0@<B),wD&ke;1bI ѥ}(iB asV`7H;W5@ɣKg dbɵhZ,sy sβ!SyOOKSNBSU[ve֎8Ĝ#ܗsɐX84hb(;SvQ3hB >>+cT ٿZKho=U(3-y³8cZ Mnbľi0!\%ӆiL?20u.zo"r[DI>QooݐuHI','B|B]G(Hk9O_T7E=:0ST=x?2cWT' s",':X::EiD%yr'OZ54Sz+ x<ԍ9=`͘ BH_7KB^(:_{jŎ1>|4AE6ؤ.a5x"#$O1 RSmN8 Ax>Sgwx]9) &!MUDfD!(6;TȶKt>iKnw'4#fX>zq8ꑍ#JZ;d6^9X֪k$QΪfi s7["q){ЕVGݴ2-{˫!ƉÁMofsGl%櫥%~^>#f4 K)0P^?Ty@>IlbjM7T[66&.X^ κJԂb H5?_V wرn 7gI=  Fo~RfD7.cdJ[R\ ;S?"J . /h0#d;np D&b3g;0Wݺ5H2'CHq;4Ptń=dܒR3/ 5Г+FOe]dk\6ґJ[yڛ[u%۩0YtǪi2*Dv(1v,9Ao($foVeZ~ӕ?zōMl2grn"pq|lRQEuZwp}w=y-WNd; O YzzbE6aBC0f4hhX_ wr%2ͪXWsU;B\Ɨ9F=RG+ 95B.E !klSrlFO&{r_}s Bd0ichp{yӈSHUƂ=:Eid]B۹]E? һt\O@!cP٘BK;M e cZBXk Fa`:{kx#u=0*x^˶h<*5cCji.ܠ/G1 2 hy0&8 Še"cBWlPhf6s8TK_AV%@?=[Rf\OX sS< ʅYf|/-U/LafZ(1YHz|H;3_ib+~b-΃U1Hmqz|d|ZdNUb|F#\Ԝä@X%RVTP4C =\$:Xg\B*LeڴuYu%Xod+Se _{vb<2-TRN{OY5 Hl={x8=gK2GGg%W;}KLGMدn=F$V"&bN^ %]UU803 @5j&KM\tmfC`+4KitY_1]٫?mh"iFZ1"| ^e&ݑP.(*oȩFVfF?k/6@ڝa}%Pg8\>H* jLE/12oE1tD%&L0AV N|Xo#D~nˈFs"(Fc!K*0KX}tnH|zH#m}׭m2Iº⡤EUR*¾/N~M FrI+^&WKi;=MVxqd¤3bI(xME,eqvV)do7Ì bdA'z[%AT 햳DÝѯ_{?fxVi: @/5$A6!t%&:Ӆ|e]-CZ3qF'QcLišQ}HuA3O*Ɔ&<b\ wҡ խ -qt%*xyt~U~B{ެ<{͗6cP+ tOK##4ngun챤~`p4PDѸ۞2(kUMO<ƕV=*]s#/{es=HF+b=d`Grʖ#x\5q\*]9ͯnhCXݑ/L0Z)I_7)4m+?5,}-$@O*p,[ƺFWP(ȣ5[W-a\43Q|X GY0*e[3bY!gm sڹ`|ġJ-bhXџpB`ebƔRXO$@Y˭\,DyyD* .(cAHy*ۚzVyRzj $L%Mcn& ;RezSڙsh`=j)-l: 4{H9pZFU.̋sh9,0rm\XbE!`֑sC-PS5U0$~'AJ>Hf?ai*qZ^ U]+n.?Yh {DD?a%FQH!uxϹ_|?ϪY.wS0ȗRNCw=tߔy%ƣm2Ɖ; f'z[( y>9uL^0E@?<Ʊ$Wj~oioj\1 oQ4' 42tc Ët#C#]ѽ\'R{%Q5I=i4XdSO_ _[̼D~1}nϸ.p*qD1ߘ7Xxѥ p[oA~@[7)@f+$|Mo]B*c M-mvhKn3Ud|'61W7哲~TuMVjBJ %n&pVۓ[[P& Pu@aId%4+HƎվ{rP&]  X"\%EN12MYODlh^D;'.#XLKdS,2fQ; B1.'Ҫ^q@UC +Á0rae[ n6~YaajVp$z_ON e,69(j([' \y5>ǬrYÄɸQ9p+^+MHO]\oI `Ϸ't5Q3Zߤ:89tܩlzwIa4ATN'dk`BDJqđ謫Бjry^4y뮽oҷ\3]GE~h4 "B óvotiu3IEҀx&rM)8Pj?Y8k(|^(܅}q570y<ȵ,ZdXѯSv0D`bpkl{ˆ֘ .5 ;[(HKhP<'jzIs!3ܝ7|~I4+I|dO<%?Si@Ys2;PD׎ݞ? GXNmoSݶOI4JW JfgdXcvʁKI$w.3OHu˗ 8ՑnHP/,;]%Prwq~cM^_Wr/W`e[v\,k[,H4BT<*6e#5/!b\9ipMG`ݑiJˊ,sb"$2dI 67p/&j&DaVV`TQC]4pkpnvL#"DoWybtK3%ʁ90?Pa-PBpv8f6ŶNɤ&!nL!{704m4+oܲǐQ'v?2 ^#l%BtWhijRT,wZ;f3fοM0D xI1GQ iWO猿OK lN}Ff}hz,Y!zTo3_|7V*m@zwlݨ4jg%TmX!o9* nĘi.Ų:ASvF4yыX ښ剕Q"O:: 䭚5Yʩګ@W[?ǑM'~V TCةXC B"TtTz* bHBGP fFlf+؃r$3ˡZeͣV9Hb*:uiJ,"srfzgOjV䖑Xww@3'J~3w_p*-h6]zpk3ltECYª4U'Gy pzST.L䊛4܃lx3T.Ԗ]Qkpڪ{|NR+:5 +,s{ ??Qf-{ekpy۳^㒳hq;@LžIWvӱy@dI#YG߷VJ9 Kyv̻a }C¤oԯhp*OB$Y 4&ndg4~nEEp{Mz]EfjiyhwNG" EfZ}:(S>1tWͼo&>beJ5(o7z&oqLQ&=aAͩ2HMoϔPS8U .rpe.+ pjD?3E@CBoL ?A6_}dFd+1V,b":h^?bRp*W<ó2 |pbmP_E|]VCD gg0f.Yˊ5tmٗa7gRoA՝'Kþޗe_wZC*֙  f0zs"\u@x%X NJkE>%'^8LWN74/4RLAeS-Yuwx a 7T\ bԱBib4p[41u~b3dzx :L\p J.H)׹6;z/q!VocY~ilf%7<էpf#l H/ļҚjéΝˠsӳr*9O(njkvϲB"˫Yhtd!V?kVKgTX 6x7blSඕ]Kɜ؝he*Fgw䫜[gr(6МtȟԱ  3O 'o,yPl|@khmvJ+pJ;JE>ZUWkC3X.&QV 9wMfaO; *P w$ې [)]:gQQvkƈ΍ XԦ`CmGkF~F;4D;O,۴8L5^- +V}3y K I#]=AEd:\4E{!*E-;0.S529ȤaВOF`C2 :bO);`ºO!g;x/,:woϦs7RXzBcscZO\ ~7vjk;i!+i4--/,lumgՠjY/"Ob^6ce@X^BYedSY{EK~9<{:vwW_Sw4|M>;6D7{'8A6.K0 -ۑ \i_6bi+D.#T'`ɸfX;8C d¤v|ߠW "ߘQѵK㮚&ZTMŒ(-[E?OpH׃hzi-q\::. iS- :16.+T(vI]ϷB"WxO[ é,&ؘiwI˩kYcB%[嚘>4@V^xC- B:lO،:^}'a ʩ|௞?dCRPZtko{nDs2 pcu{Kg#9雞_]S }"-9>6ijx^N4_ hkl^ ^8Ta]nص124T?|9ATJQ\˔07 9l:gvkn'ЉbA.櫁9KQGvUn#iL$~8 r6[(pq|,o= .k/a6~uN9u8sv@ݲ&k\ Y:OsP1ہn0਀Xx%m =ө11k|#Ps glS#z(Ƈ;"Jc?gXA&o[:jTҷcO`}K:ӌ WBFю!^71Y@jY"vwwhcJE+"Ԃ`MpZ@/`?JhuWBw~^{Vg5! PC,Q! M~4n䠰 i Yj?MgrŋGޓnK龈~A~U?*`YQ=r`iVC_HI 6 NKkr) cP@r،WQj3n^x(AV=uabB=mͣ.NDλZoe+4}b%FfUFmVkVQI^9}4g.|7W7ę1FbUũzP I#5HfgF IMrJ\)E xJ]0<>yh}L[0' ΥY/LT/)nfr4/z-R` mu*۱ƓxxZef,dz=J4@Jem8w"つ -e90T+40ƪI ËT #$~*R|Ï~Angg3hijڭ9RlZ13YS%Y`v+Ѕpav]8 IAh QTb{^?yj.i$;tTF;dbvKx.@L,\%]aoR8Do\،q Bgᮯ}!~%!dv4 <>vRĘe~\U3{=- x ܾhkWedMPV)zИݏ|5#06¤kM/ݥI|AHSs9)\r;JGF q4e^A;cl72cMmѺо`i8gK&t_ܴR[Ϟ @W:ze]:]Lj#jBT^#)~x- d/9d^>gz+"dF1LzDkT}?y5#ЭxLPh(pD)/Gm+;UxAk,mp'W!1!BK`}aWv<3hCBK׸!lcf ў.\O٨y81, 6#";\ؕw21 q9L'='lD?ؚ!)Ā~k[&-qj('3;q68toqL7EgYAE!\VO=ɳT,8ЎW<~I`LSE(T-*͓f$ hBזF/iL,ᘤ $ FDq[0Śi_k1Ǩj uИ:$k$}ﶹt!^'r:|k''Ճ$UR۟1,Q6h-XbjOc* ݻ-n7IxjdaIE`܅?7Z5hYʓM[: [;-D !f?Os@[ZŴ̄Τmd kG'>K],Ji LaUk8ͪh"sN[}s:+N/<'m{[]I5'5)"4zP04J[kW o; rށEeD\Y#U]_4@>&j&'0xr|nY'gX`P2v}9c 'ܿH<2j*Ӷ9bxTF|S9zډ@FJy.T1I?HE`[M(p{5E([e!S:ߊ;޿ϗat <Մl& lc@xow)?xo |-Čf^a@KJoDG6_Fv6%G|V+(3ΘI'?nX̻3`:Im>򷇗LVӟ.m9+aO2zwNKUƑ[ 9^Q,c<=%Is[ #-!gn@oMSOx7C_ h@kbfjFmv,^jr;~:YFfif{MBjj3KB$ Dm5n0-$TD" FuhIz$aǢSYs4ēBs?f@{a|/qݘzYpc#,7!./-P4; ڄj"s=O׵Zȉp*9:dLdUfrcp *%AR}}nDVI@RŽoOz%scoEG͙Ũn$#<$0J/ZUAcҽR+,UW {(]=nC/CϠYeago]T~"ާЧ!rPMtamBDlHJM Q=gˬ@((HM891Lt?i P  =b a\O⯳Su^{}(J#HVr;]Y6a Q')Ahr}*Soyun,rT,^o,ğf=ӌ:o>惡x(-γݥ D"2 j٬o8ȀBy%b p00{&L.Tl [[ H/jNɉhSfyIGyjC,+ p],lr^9)nX4\+:,Y <z"1[d:迹HuQPAJ8hNڭ k7x3~q&1ĦIX᳹#326w`ҜU Y CK]i>!p d%{=4zf288a8-fJV㦵bt_`PT8!cG0|*d`Fe4k2LEң> 3}C::.*QvHZFD3NMn$t+Y mbluV( s8~ꭥyތcu$5v㕱؞kVE %dƚRXvJ3Wpv꯴XL5K1G8SDn@Mh8#|}W)."+$ FS 2:YH71M'0f۰xrZ6|+tKGlUrg6(`NTK` Ò[u{]vTAL71=4bz.Ӫk&E) 翁gZ84ɋx۸pv;7nԥ 61[I!rR%L~'KV)ã>0'Ufs:c_?E۵:!uA+$fݻ-lm˷H?RV^5}'+-slEc$T‚LD`>Ds@*Y{xն_S9SyhWdIʣ;Y 9dȓ+r#ub?co{2m ӳaVԡ[P y?ȸXKI#&Z>9:=<*&<X.GFӠx J˗r-ALHz/d!JGa+Ƴm֊xdj悍⫼5‡ik! ]YRT0^R ˞toM]te㉠h51j>]mbŢG/ k N$xc"Swٚ !3ʏq7jݧ<vQ‘vیC=}b yFB>'swyQ#7/  )aczW_h-0ɑR˅We qAg 2qhtY<ŅrZgϳAL=~h*;//.M$\ķ*_(o#DY L:-YJ̥>K []6h˺4اl3 %m'57)RYPŝV83s̀GU<=p8^[,wS*xņzQ4]nصţxc02mD[%T'|vT/]@ mB!y*%.F.뺼Q`֣WuhA+@⃔8QtW&0MRvJѭl99D8"}i|I:v#6^A&l8Pv%͋ 1Yן^P91 oלOmΠ+fGJpLa C_`qų= @Z7C/'^Pޢmk,fuE,  wU/c[AyVM}|%s}a&W-kXדUJ]wmW7kk:;*&6}Q+߫MUei @t1sі&*:tQ%{e!>*(88øD$҆6:ƺ^ kp|I ƺ (zł;}zm nF+ߊE4`4^Ѫn1r{ۅLlwG R)f-)딟|L{8n'gGy=wb%7 c؊Q0y똆4+ˤaQ܊ʅxod;Uu!LOΞ ϠOHiJ&޻rmEN=OH&]NbV8rĹBfn(>am9`0R1KEsw Lg6(ԇEx\u}+j͟P%}ܣ$=/a?WE$a= `WH]u]d{`-ޝ+gT33=G9D0q;gs|(UQ-Mt}*6QMw;pAnsf`b zX`|9&D *c,&" Ǣs8l!RO#fTw'@5( $jW;S,2Ds+{OęwM (ag.{>מLAw VVk9)bYlpqv:!\lҼHL0{3A/}g8 P~oDfC@'xeJJ)x[鬎Θ klQ'ijG1&]/Dt6)ܘFB%"7Ḝe)?G #bEHP>/B{7TTDiWa{ͧ!rt h\!J SQ{5ɓ-yNXKQ}(O&\44EIOcw@x C1VIr]!a#"# =!L6taS~{us_;j4}{aIwCRi;IzDt+q4o~CY㯤ЫrJuԨVp x*pfȶB~X31KnOS?ldq%<ŔqYni\a p羕:}$SX5x3H4\9RqRQ:`$2Np;Ő3V~}ٽ-&TC+G{y,ǏJH]QGe\x@J)DukXrG]+^/qqN_'>Wf߷ap7'l"M1gXL}!qPR#%/!Tp,-]:)44/$ƐZoiLj~S5Go]rIˬd'1XhX$s!I[϶s .Yh=P(I(])ʯhq&8}~9;^SoEqř\lO57'tLCYa7yC?ታ}z'[A#)tWo8Zi$,W7f}LҐ̓a94FP>&єn QQ7iA{v׼J CSnu+/ ? C(ݵpFŔmA*9=5L;WlZP"8S0DvQfJ)@uȥtҧʙ;EV> 6i?XUt 6O$-, ,lΏcP]#O%vl7<[Si89#MjΊ.d3 Τ{rɮZxK(Dn&UYT;H.vОtUDRF؉] ڧEhq짩Y3.8aqN#\Nhv%X7j W~I]zU8br.6_rڣH3^U<݇y3_od[_.8AZtY, .=^7#*htb.S/R9m '.\)!IYSoH5(XdY˔B?iwz  0 R:CopWY;˳`v)NGlWg^IS cfՃ3pc*{ ;Da AH=}rsg$ ؁#ّjX8Y'4]32gWeOD ?ܯv.gG[loĿ$K=wݚ9= ="g}ݝ[>?η4W */uc9<ЁJs𺠟xLkVNc1گ%)Ȓ ,~ ޏZ[{^T4$z*ޢZ/4R3[LT[@ȃj{U:F h"zoTY1H/qE0t1J_-B4-g7\N{.vUO_#CZs}AzZ SP|@$=7_Xr FSElIz63TTӽrKzF*Y<:lC.%FR O.pd3gu~*G S&}3mQE܂b*4z%0,jw\:inUV xai$(b-8B9*v\vfx |3P2{1:f;JzOg2DHcnנÌ_@kSjI:+xMO*zX^ ( 'u#qf}*WR4bK!_ \ ;CR!Q܎=}az(GQ*j: ~E?thj|LwޜYRT`H):ͯΣ: 7("cUfL9}@= 2a Zs׭J?HCV #B/"n9znv7DF̸Q>Zj Rc[%R!r h |ʦ46hmݎ6$ӽ,=g u4P ]nm;qu.}W=`_QϡhT'7=ox!wbA!e./̽0+X|dްd4OIhwx\W*: %^tf #(ʷv־}3ύ1ji,9efDJ&/tԫGD>g7`t^ \CHu"M\wBa  S|&:QiqW%&b}CQgMGܰG6GvlaD8FL9+-_V/s}Yp&/Eb)7>ipݷYH`\::[~hiQpX m_ ndzZ|.jaĬ8r϶;Orrmt9 v'^& *m {߇w ]YwM4Ծc_ױ5b+ym7U(bo 8{F2OƇ)PvUt |@v8ӅTjxH[ dc#>A9} ?F?'"醱':Tm'VK"/%~20qg/Pe7$&3 `7SŝϹy_ZrZ>#RNF9}ui)H\(3SrCt䐬&PHK Z^AsPemI~nZو/ea?‘cB, Wa|쒕҇ k^ /$k'T`ޤO@Iigk((v\<쮛zouVG{gpqg|)?LGׄgD:8ČzɠދJwqكuZ!\yv_zuWKoB@ʳO8T*,'Myʗ ).4yPkk uH3f;B<؝|iRN5R,TOx7 Ġ!sS [8L3%w7 u8: $@֨Fp'u%g~"B8,pXk~O[䎅ٍjSKĢ,d[z%g<:2%^f{{rmn~ EgVEH8oUղwx JLGJ&%$6[yl‹Y>W%Q;ثŹ ;(!zO=nebx =]A=mQfq1ޟ_624}{~a .P gt6ZOEA>k1&nMsRc-`vWr?(DfA[2?L ќ&:7R9e*0O"m~[x.Jy_ifSu/cxUX9Z\pCsV1'/ZOm%NuUe*)\QwI4@s:F ?w4YKzdvC,Pf7eN$¸unGutB:1XPTriIQEIYn) Yh/j즧*g8GR]L(>(kR# lE:ʆAsԋ wcFD:{Xm<;gvYsYΎm8<>i)DI; E^k/ @`i̎T͞W&gAA"@|`1pQ5ωF79iCpLoOJV|GNkbTJQ)=bZ&S =1,vPP9Hc}6#B#|RF-`ؚȇ*6ҟ"(ß޸ƳkZ2OZײ4N&h{BC{N'6q(2G+e!"Zv&;)[8EVΜr( YLZJoP fzeiXc%2ucFx/S/5:P '⑼Xjdq3|rzM=8o ʉIdʮ6^諝ҚY"/H?ݛ}Y{XR{G8[KA{rrHG9qRrD%c͸Y C e2G^\2'D&RJp&<ٌ_<2"Y W~fu ƖdLP&zU]~#}^fc nAjk|v[=,}_D_~}^3C67qǔN}<xN2 Kv)V6X~Qo\ٕ nD%U?QiJyE TD u)d2jX?v+e 8[X"r)%n1bNk'gKWPJ=ӌw u"ylI-*(x_9[]+ߍkJ\ W6MvqwZ!aHZg䣊3, r|Y-&$?p+m442!U_ ׁolVSu!`A2/mi^4o2AH]y߱ Uh-Vg6/65fw]TIaG| ;Ѹ]/0*r#Zvwa9i k&;Q Ii.԰y_<1qf[}䙵g i.TL@vJmr|(rI|0օGռw@)I,|fHDq`H52g598ʼhDX*N=AnDo'6b9] H/< wa̋@SOy`kum``Ekx^\7 /d@]RZb鲎7'>I*} 'ײVk4]0j=r!P)u+$ XZbdn0cugXIscQP؟]ۡ43`mjD#[62Df76@u!b1Ě@ґ"y&bMz}9![p +±ToBe j8m:'5%a"cHڥo=zeJzƗ% ȾU K(_C4Hq: d@ BNakx i!PMZ, 68IKpQ^FXw%LqBM_$zC kT^4 l?<,]B1 `g.d]o^Dp81&$@cl֕7#{ Vfv5M8z<6ڸ]h?+U'@>o 7y@ccͅ^B\qAJ'.~>xWL^%RۈɡZ'4>?tEblK.8pp!OtR22$ÌTn;Obb䁺 *հYrp\TI!)(J<#:)BY>Gl ˩T_%9bw;V b7b%&(DG>c ](ҧ/n;]U?B}KT֨]F-_QJwzkZy| ob@v fof^a--ө'3t!!W) xM/e T~y"}đM4$FFv+ Y&KIx4fTv$dD~4%]y*r6S`1HM]'Rd4n,>ag,E4SWm_{D,vh^7"aQ5䡭-ZG8Czyv;?H{ZdAŏ?ӦWtӱ~]mnzNMJ5k ,HM(G M°{􊑄“0xW*+I4ADn /x/Ҷ"$PSy+0eoD'p/BO積@2&kW {jIM㵷@n+:P{Fr-TZbFR$)!T| -"ɽV".R;Ѳv ~Dp^Z^w=MU5<C [S͍Ut>nEG3]׀FxGѝ^5=TaHgŤ+ wBwOVtޥԷYH&_QB NEPeSЊ\l TL&rj9<ĥO[k^Yt< V)^Xߊ FҝV$3%?.rexKdVhNWB)1hGUzERl[]/_$ʪK!ZOB3w}dbN(<sjٚ[C=/^0bH 0fQ3{IzMx#ӭխX}Ue`,"'ʫC0`sF " ,~O DD= S[Zb$/SEtX"[d&2ahiuU_WZy7 ?'#!}Zs##Iwurֶ}LSd7.3$ش-|٠gPDAg{VJu%e|ѝw.߁RU,7.5[|8gb5n nbWVžPz (f 2fQUa]e(BPC'{x.Γ;H@Sؾ&d1[x8Bh.Gn\k7EF2nkU0yRS'IXW}9|Qg< 9fRqQԟAI> &x@I; b1h.e̍%)R(5rT"Ba,1OzyIPD˩b<* [tf $J֋Rͼ.5a{N_qq]#cu+TSTR5qzf^`U^{?no#1 KLG)iATӥ`/FYA6K_wo\D<ƒ2׷`"<|ܸa^ȹ즇 ^mڙ3 j9 q_A4*\A-xĴ1ay= ,yߋG [سV:ZNQ]1?(/Om I+O,"Ǜœ\g\c_r}c CȢ/ EBpBذ(jNid 3͵%EyJonȰdӺSl/:ݢtzABqb.Xމ2|hҲ]#~7yMgg}"UY@qw=:kz'8zdlhc$q6WPD XܿdGRl|Jd,ۓVu@sI?S\L%g@}}6BHh/|^Y3*=wa``] (5`+<<-06&=4ӗ(gM49tWfI4$M8iH~)i+H{q4X`\i<˜C bA{C_!e'U;te FkYpuCMT*K9tWgpLKw!Ɲ[V_n-K{E]/LA:ħn(S{v8(hn]In,P4]2%}qŏyU#1 CRFhZ9Xk^etBvZ4 w D` _?Ϙ,=܊Y#C$XEGDN$U` w?ǎDt#rgUZ_ 8e(=Aˠ/Lf2JR#D-diάmZ 1i?_Vߓ +IcR%ܠA^qR 5Gmtƾb_=\mgܥ;Xbmx 3NIJNEV]X-3]Te^kb >wSkq>L@~EcBi~5e-W @2{Y"¾N \1J-ҍ:h*os .Xk j_cص?7N B"l7Tւ KH4Əʉ͎v6D“mh0*F`n/t;$6#:gf.EZvKL~ơޡUlS7嚷|dBAtG\} _ݑyk7p.+u"cUM%&dQ$]F}k[+\W@@OGƣc>:5RvP 4hq]_z_x4 pڱ>_ RS/+:V-闖=,pabG)EsQGIj p&OyPW25PZ!gAv)x0m9iB&D* 8"?-I|ɱGvѿ5V5|wy^UʮfnJ]FYMQj|* 3USu98]?QE\ݲsc[_3⃆Moa;-/|$7NYyj%>WF$2>5̑ti"o~D"YJ6X'מbo="^u10A(wӛ>G#%=8Z eukR(Ⱥ(c) P/.Vdla&TeJsrF|u.ilʘLoyJ A,tAk(f*" LxV&fS2(Ѥ d& 7̨ہFx#s~$[-&^(4VesVF48m(P*oW' G59p7ݵ˴KB`Zq˨g ZB52Y6of'Cv pGN  N\/3prjy s01Y}FTX*,aa]K%5NQ:jA}BDx>*%4hB.:蒐Pzm{/LU%i]~ťy!$ͧvF%C7Ō̎&sDD5o@!Zy` ɚ,2|OU|"Y< 1~"D Od7 _XK|!kqg;n6U )]:qUrm!k|2"&~J.Ep27%Ŝ"2.EM .U+r,`;d87QTzqKGhJr`۴Jfz1 ZgF v~)Ϋ{&q%=m8wbOdזBP?*Xn})*ě3xdQ_+[9)(q\&s3x*ː9Q?A[qVhOCGn7;&c WGu1k dqT"3~{ed6: UZ O#.Bʼnntʽz\& c{?}pݻjH?c3 BLhIR59{ 7;S`*v,euTDQB8=:iju|ST%ӔEwL9z7j9Os qgVܷ5*|ؕf}BFQNǣ~<B#~qoO*E; nPC s% pJC܅^,CEdΓe9Bh*u _ÿt<] YAG\Yw!ÙTɠ$ϙ~i9? JL6`a. ~$iʲ+L=\؁3e8}zqKΗd1FHYO ծ\ub:Te4a%S@rZ_67W%󄑷R5}Z:SE| 6%c5ks/$|tB,5fkL`DoJ]6h5.㧟Vm~fQI:6jOO=$z]J|\;aW%lbK$ij; nRIVA ~҃gH)\mFQ-U }=[ul{rY̏Ԉиf|١yv0*Snwsu[V] v8~NJcw^?SRLDK#4-_gEL6{ӷl_jZ\غG=r:-F8sm$@{BH́hxp I4^+(~ Pఄ3*-S՟9<#>߱򺅫mB_Pcu EG1Jmrb[/O3 ?%h2n[ȉ~$_nF}y8^$1M;U:R=綛 䡣ZLV, eK%lk2j"Ԁ+IѢ1$z߭4.͞wrI0:;C؉B[*fNە#Ӷ@p9祓?XeWUakЩy0iY[Cg?) ;yF>s: jߦ5 oG4mhiEj`NK?\١+h2Pc%sLo/s`2a_*Q.uM.(I|B>g A^eq#.Lu+,hRAb 'ƌٻ, ai]j1ӎuRm(+gWJ(w2k$O7B,s컠/ct!7[_6Lw ]pZY]Dy yC,_6?J`c(5wi.ppqn 7 v5>?& <$v+b;uK&@E![AD|+7)Ӻ7ĸv%zk,O+z#N2/wPrx%TR:Gsm|%̌z]S W2|&p+#\.afi߸%f9fp+s?{5J1Ū 㾲lq#6SecritiI{ j)~zbL_GUe$e0UWS>h25@+}ڷ_a_5\-X &ϳ$5OiծG4rIvر .BܟOYoA P7["U(POSb~ f3!Ft{TF݅oQW{JwBτ 1 ')4j4k :Y}`Cpi ?LA+x1wmy`ov8Nٍjq'*o{Rmc*Rk'y1[eIč[\@?ٷ#Ln!u\}컅N`Fkz'3žM&w=eL5W0E%gG)VCmY)XVMz#Q(ޗ3)1UFPtcKRŇe7sj%dۯ ^\oyo`D`ˇy-7H'9iڎЉKvhL=ßNݵ# D~&A6r ʈei,_eq[6Zp38u!'5缧+(㎜n>e O%>YRHG'c@q#hYQ̟D=Mi, pl.l1MA^=\bC@ּW* +sR֐Z[_ X_A ۶oAŜJ0Ǡ0Զ 1f/,{R:uJ TgMF L#8x4,7AB'H?ZVF;Ԡ2D6̡kax#s ne[KГk(+ΫU/8[q3ՐR٨bLܒBrY>tKc"7>bVᅐ[H8 D1\`",cS<EσZ֠R;8G//90ntV6-8F4S"+i<#&rj AsM\q?q|)wRg$!ZF-OOt1%5 МC15Od9NB)E~Z@Q{A.i^?X̨bxd䨬w1{M#Ga_lQ?LByХyEU0ʇb\ ,W=!DQ8Ό+~*H9WU>d+ Lj]RvyIDž u\8wWө-fEcEO տ((l&;xA$.!bTe4\l{ X[ yWǑpHfH*}rIWm6졏ĔoAwm`|9]#n&JPn8,^UMuDspAWq=o#X)ډw^(0,->>砌}1GMW!;#+euZc}OM+~W@XrQ q ]7btSh7qHs&x9>@U`x-H#0@X8hXޞ;cWs> ZglaɷS')Hթ4HCALmo~h2 :JI|h^'`V-HX[rΤA[w0U4h=Wbt設#j`dxT("9>]_}x0ȹ[7JiAՄFޣ~dTaI?= } INyKdzTLbXd7Q SC㲭$6yˍ8eBLj3x?-l2j4;|GIK@+yz^1kw; gR)'/"lALqSưGSy OtYǺh ςU.[m2}|0f&RP% 0?MzOT_#%p"1$#\OՄ`c/2GSJ[FIm]@+ 1iz5J"g4=eDNr6KjyoōLt|umd]鸸]NK.>T#gYga57wHK/2ܵCEL _^%@EdKOyӑaQ#g)% "fUNf#)YcFXlZ`lo%rz>fݭg|sz fbzMh؏רdKnqrxuu7ƒTl&3Ds'TNNKQLbL b.'#FEx"CM|-7/sRB Q_ͦ7y+)+֍4>Rs7| 81ˏOYnI{}9Sqf;ք9̍(VrEt5UE: hn.b$%Q՝ "vĺt'qBab8SBh}yz+%RG;YȿELh&V&G+Z5 +ط|f3(RL9A\ ZrL^ʮD Wk_k6q"4Mj} UaݏoYoO~hkS`jo+iCUe=\J%(>҇JgxkoGc꿑yJgeZ@Qw 3)$\o5'GֆG뛒*;ZMjO+1,sΜOޢv 蹻OVi4֘&#pqZU;ڋ_2 {`zAo5; cQ&'?ݝCG/ _˝<2hi&*;Oa?Y?ni4 \6 :㍼[.(YUmRkgɅ#qMcܷJSk[QF~!Khes⻉{n8'رuBo7| Mr>\3.$='p ď[_V?i{T?BwN-yQGBW87"F +:4({Ѯ|5ӱR3Bb[XIBavx:=4OΨ53k_q8 R(&'.ӄ ڵxe؝U?<7Fh95 fj4 抳mj~d{ c6tR#^r5&!!G_i'5$ߣ솱nj/Q>LEan\kB"}|6 {Qr ݁_ͬu%[ v 5vACQkڋ}wÞխS8ɒmUfH' @>]G6W!v`@p0U]m{l⵲!8'̀.bΌA :l>H7W9DN4 *YKVv+G B9pUSFG]{ xlTE $>a'ȶ22!ܛ*mtb-[+a:7kӧP[Fb/xw!E0cC7.HeͺX fY;bZŪj%a8՟> ?kOA䙦H)<’HYeJ+xlM@8R38kx9"7T< ;'iR s>moxLm;{ϴn{Uwn;4CH5Q^PuDyt1d4LMB)(b(i(&?nL`Vݴ:Xv9^ƍqlMlahF rQk0ŽWϾ .bhpG*ZN7!bS#;8ŧR~[ x <5L y)UWmUDowh~ͽYw2C`zғ0v5``A^0xs EQg7\_r4G+<$[Ct/Hǜ~dnR]plkz tjuB .` $cDSg~w19y]b8@ͮ<-p̳I~x%8#m;:( x0Q Ap _yaLxw}V&W`H*Î(#bo<6Q3b;qnG|uSw?FE}7۸eWO sL+m󁪑B]kF?8쪹MBVy1 Pn|S8UuZ烔]4;ROy8]?cC90f\"?1NF~?'*]=3&*f (DX}}au. $ WH&f1q5A_Y!.qcq^ UtQ~S (r_ \9C{|oÜCԡQ&xu+1h }/G*/"60qIb#!;2M˭7+>qbo`|'OM NpJ1:eGHUD5r~||y;?E!zٔ#BӢ 4#bFo_[_@l!Wf,ށ<>pl%90wL tbF67];#0}~(@iU1l"󽼼+!E)2 }*4d0E]&Ido(FJXћ £H0TU :A[thG3~-UDHxAХ.23KEw)AQuokjۇW C\b$*:rZIXa;@6@QrU;M ]\hfDS;h_# YVKA$t9* gPHD"7D35CPn"I>ǍVr`F4%\y9Lu#mOaKw @~*[}P0썾荓W9 !?&i[ KO$'|8`MJ~߽P%zU;¬l2aͮ2B6*m,t}6^@[w`i[ {A*7-7PrOÃF;l֘S褏B2Q&7k*UNQWt#hQ*ˇr$AE&D?%c=MP5uBTe(YۿVk oPj(IӭC{'f<R0ommZ_RbtPU3&S;8OQx+N2a˙z3HԵ^ 6uNe^vapHLoI'7bh<.:b{B!f%;{%9OT%8k&ҵO_Ϯy ֢)gFV_fy%f=Z3H3l͈56b<gt=B!t 5?`]꽍r~<<ݩw~kOL?aO9l1yd1Hph{]cE^M{FQuSu:\4Lf&I t5K̎!yn:l}cc3x5 lBb{h_/hE:2Pg:iWrG3Ua`NY9Wu09/o Sp}d2J|巊/ ++{Kέ7. =_tzGIԘ2fwB˲g4Ԑ&5|}M")CA%cZj ǀd79w֣NKcxS$ QX1?rE*8gRI4zU㹋rՄU溯U\L`s`r&9Յ͡;>/pF=7Ix9 f;!Ȁ*-~,rnp'3, ڨk7C"SE _;`.*QMA^ldQ;!0:+VvZL`UsUh8 Hj#O^4, v/ndn.)~hlC-) %[2e>F?B|t',09䆡oLEdt?v;qל0@"h:c&iYjRXBwϜgƆCPow{g6U<"F~|@onKX&0ȼMJ?t+6x!ЊK"s/H7rEEM/zW)<g܊=^v~?%Z{ٿ (Yt@"թ ,^E"G]Ўe,tDžl}H y>|ʼk|K7ɝB%}]0xHDK쑕(M0-^05mG'ૄji^au,[tژך Mص !6O X謊r{ EXpCsC,5gbn@Ds pL+o:qҘqrs˜m,Vo@*os/yO39.7iÉ2t;jDLT=3}vIc[52දYpz]L8a[¬SUz]m|lv[i6pOנ<_$^iy1 %j3P2..~zFP:+) u[G_>[Ae+YE/zo&N/Bn8sX|1n#eb)95:aӲ#xk"@nd5T+!Yh6z}]g[>b@uu}f W _A0 K_ \RD4g_=mYkt]W4z\rI<}d!3^c~%e_36yq}dοVB}_Ѯq@,@J&sꩩ.)I]`VX^pUf! 9|ַ(;pWq k}m/nyIjMGM̃;1K@ұtZEXERp*s ~JOK\n&/^0+!V`Ot\=􄏽0$H-41=\L =f-.z f@U;3 ţП畩Ck<9'2#i`B.fr^(>K-Hanf94z 70mIkH r ,]4q v~FH4| gW6irڸ?n~RlO?R""T{(iBUvIhoq$R ưbEoII/Ѽ ڲ~ o9F~d&y^ Q``Ň5(֞Xmab>MLI7QZ% T^*w'8$J^"FIkC("aAa~|@ J0b`dMA p͡qOp-DV.Iʮp'ࡈ2c2. Z`]M&N_štXp>v_)Í"դEVjL^"j8XG` {R.5ᱰ@b齋tߟa->plVG]qǽj1'=-ޜ QJ+1f_B|O4 `v-;n|h$;۸Vƶf$ܗ[d:wЇ$1[I9[I>G<hrkણPaTrupǸsxG(rh&䥩aٺWeVD8FFJZljμf.SpXTC߬O(^Cv\>`$o~ QZQ<*8tԺ۬@)/T$쓗L/qٟPu .} œCDZ~21ͷ`*]eg(quߎsa${r䤑(}ki_Eԁm~ۏX*^w7-X8Lb>[o: I,:a鱖-ǓR,uS x2N #ag'Ԁpo0e]F+P;&~paPI("Ptb+0&1ʲxxld{_ۑ7d=Y;`HeFF}J"{+)Neo1 _9'i{ l'hmBwgB $ʄKsDg'?Xq@6WuMy}|vϫn|ۧu7bKOFEAu.z>"J K0'Z+X¹e;%4Șȸe<+:*ѣ ,ed4Lu*P:A%_Q ME l>byxW EegK=;LVQ|TҊ&|!b f XV5>^*gBt&F_>cWKhu_ ,@c-[ZDѻpZ@0-Taj|xܤO{q-u9o3THuFMh!bJҊ,Hg ^mG{VKGmn >eX; yoNO|DuNv\ Ef O7JM/"_?%$q,x|,y_dUTLYP%.b|Р]->̚?:qHbLJ|0NLPW' {$X ̦|Ⱦ@> Q0%TRMsٿOaR O'B0F?QcIyr;m4B'/>wqN\8^ZNt b,8u6^5wa۟`XYUSe%ē w)D=c)@Ί^AI=oz} ,>s ː'I,Qq(36خ.҆X0b]g~F> 8X^&LDuݬ؀ӖU}@-J7vx.Ԇi%5 MG3wCRԿMε:Sn K6Yl\>K~L~-蟰J1oX?G㖇X0Q],%l`ޟ6^n/ rÎy vZC3biS# @FDb%7}09K|B18El .6'YV=vHuDLASb8u1޲[P_ñkͩ -K{k<țDbLO-Vy*ri5<UJ?ZGqYbnTSKQ{!Agm]o(mfgԏJղBdW$3R~oDa [h cFCZ+'9- !|>yr/L3;n-9SFzY( 0 жy*Lߎ}D>?:N\hxGĒrկ|8c#B.֗WWBN@!ܘ=-@,k)Ԇ_$}C[o?zAxe.Fs#>' #vx6:X(qȞ Q-X>"M9UukJX,zIhN|~=Ӌ?/MllFE^)Qx Jy(}^l ROfOA:ܥql,OeF 5%KrP[O?nd15\B]u*˸HV k^sFmPġ*e2W_e\Eb:ƍDl;d!biyC~Xp-Io~5Ah[9B~o!qAg))oC]둦H}АMG ,(&**4t#<V[NQK/䡻hUS ksnu3["hy_MoGV◽ft'=ip(f0v&P1 2ӎ p$E!|t疽8VwӇl 0 _HIaA_ϗh>_cQ0M(s@Olj]NoF$ =g',]JVH/+1cbאj.UQOF +TO_ZccgHd0 Wݥtl՞K! @umr{':udU>fNE8u |C\ʔ~ <E_M*=Df;cȬCbUT!Y[L1كt7{ [~b,oy|7<.q4?[ f˘&m=^A)Q]xY,=81p$aNQj|a7P!\J[R5۸Y.Dv yD#HMCiqk`I&KpMWiB3F4!S?lR aeL" }ˈ̜ڹᓩ19>9jԍmJou_.-nR0#3͊^]G6ۤ[ ٛ RH!̾6mJorZE)Pz9N$lV݈L]>Da0y\apZun!z{\R_alj(9\eGUywua^Ϩ@=k뼮0W:XnFNp|ʟCth7;NvU>݉D]/I"~m0P R<~-b$}`GնxQJ ^4EfPUN|}ƫej#Qd}[d ^M'Ƥ`Ag~YФh ژ3hji}[,%q7~@X_ j#*6h?Ϳ:Y&S۸X4ӳ{N:F b"2tQr$ gܰpzift+a,]dL[{<ihh/sJRQ -`R;t̷N~t,e-a)s{R{)^Th~CW}9w;WWZZ|`؆9_往Ћ&׌M:_xK٨xdHQ zYyaPDGx Z8Y c .Vjل)*>%6-'~Y$|eߎdGIfc2{H375R g;5 'LJ F 0d&\g=N"޻XPD>TZW:7]q|b ZT \|KZ|7ܽzEyꞬ4fё̒ǵCaCC^MՂ7Ø&uN2 B'4g^}/36C¢P!3k-҉BqaEXT,ҲĂbN^4xXb/| RҮ}KqFo'p7`zk֘zq%'*vQ̪8Cl;G3JZQ+ E-qWЅ.Ld9--Ng G~6_QP_8ʱ״͋0#Vxa$[hr<=eRfdUfc54wOC/lG׮j?#Z a'0LөOdl<.(\w(nE1E48reϚ5`CN҅6 5GQ[.;ۮ[ n(U4ːvGG…+{Jy<_ j$\r,:c7P'j|!Co*[{^".m*NY=6YH q~z-¡jrUǨvp$Qua#Te{*B(8sLL15L;F73 yw Q0;4B0Wwօ'pP Igll$"][|lcձ?osTJٕTRib%0w4s*U/i2(NnF3𱃾e Ovojd0B u.}4ZEe/.:f blT_ \1j@IMPACY7էˆ9d_(|T>ॅ*B}2y+Qi"̦%FX| n 5y 5KBpePf؈xɟ8d;Y.ٞ@~>F h_ԒT%`d3{vDL2΢Q с!G5냌Y3;VAz$^iq|hWmȍ.IΧyqCFN!E`I{H`&AdDs/B2hG&$'ZEX>0 s0I>Z =/E= R^~{` ?c;|bQwwG d=e.QWjm,W=^;.-T3֍0Js[rF]$vDxa"oCWlnaVMC~zO"<(4^sg&jȜk+V!1XSTz_gt1\5/K}*)tTeTAĦ76O_ipxI,h5_quR^T&`Q6#E8x(C.u0UnSNPѠ)Z|eqc;UA!B+`f|H."Ғ+i&bϷh9f&bW w%-8zl9Ud@ k|qL ;ߙ($z`6ߚ ;( B5|pE\Dt1V sնKL(;( a.mk*R5KgB%5jdo4 JVN p>1fIs'_aX#{u2\/b8,6ZD|D+Y#2GB,\Ε B @UkXبYU۾mDPjHMo- ,4qAɵ ֪J -}6} |䤻(59F !2%;NދBO8gU&*gj\sH ],!A/ToF|[$ƹ YE;%VAԪ*3[6Ns6\ k^SWPψDF>7Yr! NMy͔CulNuCޜ+$?˔b)Z;]`'4:?wum~tTbIC;&2WJk6gE|9˄`JE+]ʢP` j;BLdFlY^Q!*ЙSnvKC $Ŀ3zkszȻq, Q=py *F>u,c9DwdvʜDK_)MgphRc McV 9SլZ A6XѷEN5w,N&|+95!yuEF zU2eJYC;@ֽH.:`72G^ K< դp:[GzPfO@U=W"hFEU (Kh|!rW .p+Ŧ+Hy}zQ_)D@:rryф68Arw] 7H\)p Bwٙjŵq&qB< 1[@#I0^Q!D3Ka} ,fGLĵ&L!ojWp{cka$0Zϔ/c/|ڽ \_)^;n߿ *xG_* ޝPCLL+?:ӥ>S.\g,(9I'6bZxnQK?QY6SsgvSmckK)9RsC5euُ=~NVr[TEe&jѳ3\r["V1o0PdZ1$^C͗-JGEc SK3cQ8/:\eޑYFCSQU$G1U%aM2I /]-g*YiJqaҍߛQ) 搟H_?XٝwW.~-18࿧'BJO-]n =UkVCQB(QtWFKWz:WU GB1< ]ž ۾Qm@q(؟$(e2tBqJ=c9אr&ub{jo~2{^iTxS!=};i4Pq۴.)@-Q6wUB6Ud,LX(ÏKӏ r=ULiEhPr(0 "{}){]z*]z[i=FLjdٶ eZ>zXs%폫ڱElt|[vBq3f(;-L & $O=%̳/jT`r9\/.k'P<3Ь#̀.dSHb`P*V;ɒQ !<&0;J5Ǐ27 !o3 Ƣ,=4q7;ɢZ XkM MH:/,TeÐK{?ߜpp;Msb/tq4QO0x,D y0bB%E/7YfJfUvN >ѻ$]s%mW+0Wvê~fZ`eF5N0YW"z?Bfd9J1~~#-6Hj_HI(0o{ ,Y8ZϨ\4ixiN?i44>ڍXZؽJ/pWY{J)d e(TٜF*?8B:S ;ےy6pɎ[yd|o'կpq-0YU0߀ <ڈ& ՒG"Wk >n?-긠 +KRM AQۈU{@D^e˒bA7m[h=g@ȂHEҕ-=YQb|?"s<~{i z%iom;I1X)=Vm7i /MG9 Q9:@,-7kD_rN&0tFۻRwX 7ڮm2:l@g >aS"6~fHZgZ 2f::J2c\̓ѧA)[+-4jȬKM%^ +-Vozϣ$9zbFwN2}*q뷱z|zPE/'VI?(׊;Iښ'Cߖ*W [-T ,(1n#'7L$sO46p8Uk?c满+ NQBذU?]:H>7Ϊ:j /-I Fup0@YW@t35 FqRͦϼ) "6>ᕀ;0RjT4\kj3 c@Z='mcX WIzLgL̗Fv^\i=6Kg,TN:|*&S귀1'VKQ5hxY WD#"@JAJO2cFXRV.Y"T]D2+nz~Imidy&΄)y/2y]yFƀq pw>9⾊kmTx%ZcQD&|XQq>*@FKrkTܬD(*WNE=+NkNXDߐNd6KQ UZEȤKyȭ^$~޿N^)g E&.tdj6@1 }kj=!=9 UYO&"s0}ơ+>kjXΣÚ虯zp?X _&O? ,)UIE(鸵Ä?Zeh C{VGvo'r1a[|]5H4ܖ5ͷ$o+Y$H#~FmêvI`e; =IB:T8; x_jY[7bsuQ-DDڏ4[E#~ Șr &F٘=C`a@-ҊSysK!֓dZ6,E&)~:6 AˈN$l2<,gVLjzIK,nMI[b" x 1S}єISgISDA_ z죪V,nrrFYBsLj2سcﻷJ?u !Imp~ T%|9"$ |n-u$Ҡq]9B[ sEY\nzrc/.boᨋK >k}kf“-^)mQጿ&t{n_bƿ[0/6I*vZ#TiUz4T0[wY/ lP'lȯw3Ԑ*Eո`m *ar/E&;r8Zb dEgT2bwO.D9$ |HA]_:^6&1H\9eoe#[Iru8ÏI^T~ ,+jBJPbԴAW%^,ڕڪ=A ,}n)߲:}{0īT6/d|XΑ҇2=Sdx-=xK%.@OAC*%Soκx܁`Fj6@r:4qĵo·T3BOP?;PR{r^G 6&, t=9o *z`l#ĨQs>5V:U`WDL g[(Z++O\Ɛ-i"dg<;bRRz\0C/'kY\z;8&G{{1H4(]2za)ٳ>W޿kbx<%˷AW~7nKt_90 \O1.YcDZVXY.2{aaHT ~*K䥼|uRN+sO^r Ի/(6f uɱ<rjIUՓ#fKA)!̕8Ml65xcI16(2ezꂲZ8i$Y6![0Dp"k )0F !+X4*1|C'm#Ъfn~68M..Ob⽦!ݬD}Y5UV)8Ì"_ ¦KF0ho jGV a:h_!iccU[ZLp(DL)2L6KkADMzv4CdWGx[nJ+5+H) ճӒ9g CGoO nH2O`Ht8 >VQ=_K* ZM;h(В=^u(' lkoO4jJ8Sc | *?~fM8&|I-:Z 1H,M=&O?2H:h܍Q>'hzpn@j}>LHg8ɧMƘa!<ϓO~}Dn $ʍuՈN{KchRc^)wl.1 &Ћ.ٗR+:p@[7o1$8f 8?{c|Ihkb*e0x.>uHG{?ASߠe*'ښSx55,=$00W v۽5=F15eSh;k=PݔH1in$' Hsty-LTbg=?+ze Z>Oy Ub/S^3jdSÍ߽LJ5.>}[͞V"Y9ۜF!Bi^6~`gE0 {@P9gEg fG2?K(`m껄"_%z~" /QW/ Lvfhhט0P+ӡ&$\!}ܨJHZ|:4gy8c'B vl"W}a}Vڞ B#R{ё^\*hlpOFUA/Vf5`,M;&1 WU}I7w\M2ET)iB}u8܆!wYw,=7IK$Zejz͈ʆT**{Y4{3krذDZ\l]?iC (g;K~Q 3MytUSs&yN_pFdWf,DC/ b#ri._w\}#jIJhzk%&ekj 0ɲ B3 g/WZ= 䔶!䓵FxL\.h,݂W_ FRH'8f5x{DՆ3[r V}\ЀkaW0[!gc&= wǣ f(MóAL0N^Tdɜy ik/U`4cNl_Ʀ%n{UPf(($~VAS49\iZ}1{hOtTɂG'cJZg7t#䟽hPwNn\4u+ůsڜ,O_? tbn3y;iES,LS8 /MFx8޳lXfiÚcWJ] P,OVԓd㴆) a7:SAMV)!YdѶoB%<;vI\P T|;uDZ9AR M>e+Ӫn2Cp%2l "%fB?wq8j)Q9eIvg']/Q>Rn'#Ho#phS,:$UP!Cd&ӂשE_ME6%Hg_UuCKv,ŽWT"eYp /6FǧG:JZՔW9gE!ݴGDf[_H() N rel~5'kY iC zz>"[k,wO 6pL[~bnR0 h}~P[" u91iH4s xHu&$7ԆDb3\W1MZFYtbK lѸtTwRA_P} RzA4P'2$}B/w_>PKn]OF^ K1nc'v$h!4H ~.ũ|p;OJzNL6ޅBؚ 6nR gt -ޑItt|iDkZ׎S )#:<4Xp$6 xeE;\zs@XъK~Zk!>BUƬ '{IlmKi'-vM aV#)Y 63z:Yjsq;5crr H&5b&.CłONhF9ޔ}+~4(@~P0&^{e h'zKǻ PHjQ6/4eSL\mT-*> s+1{MBꋋB }5^!: B A54\MOB/z20|lZ>_(4?P }=lzA}Z5ޣ@BKl/; P|)I_"[mFA]ud׳yWoIIꅃz*xPngS;LqJ T*Ri7-!ͺmg\~pt_P`iX?x Ih!{UCSh{},oQiX!iNOLƒJ4s!Re.CjgOKZY2!wj\V& i5/gVFYP˺[Ql_&Acl)C<4 'Nk =0s`GO SA*<}mJ3h`u9'Ǝpf:NP\']ffp(?!QCav<mDמֹ oyv-{O!iûYFv ^W E G=׍Jfp'2?~ <^s𜖉AoGdg! d@NyMPT^8qb7WGi󿤛O:^t} Wk/e @\]a/9A=Z^.T`Qj|O T=&f{=niVj5M|WĻ' `)Ը `;1  LZ=Sp6k ,J8BkJn~XL2 {r:hF`V&ë 6|wY}I7j.m~.p*[+\Q(*v ޱmP+WrE8jtXe3%A:fO,ڊw7{Vc&X;~7/VHlp6O&1en8x p ,3[=Ro"cׄ-݅u>/$AvjH"D7"F`;n]MkZ-} @_hlϋQ߮[n|M~_*S̓V24rU;TƇѸ+KE$:KDBud,}qhNᅃfw#n6YwPE+ck6q~__p/ܖ0n9~ܑF-#[QԋL~ɜw%s}ZBp!`t8oOeªM@ڕEˇaIwcCco_yp%ܰͬڮn$qC6ȗ,ͅZdaZKJ?X|_E|2~ Ĕcs\Ըލ}uT. UDB9j6NzLOXԂWvV^wref's,-;`]NOMbASuz(8czaޘE;%  '`u`%oKV @k&2r; y?!`Bp4PE-+drFEJR4D+~ HFr:C$D'tj>b-= Fs{&ɜ-u1 \:_Ln]oEڊ iEK 42j#HBJRJOL[ˈPmFwNq]Ej\DV Gд@z_dD|?k_تJ߄u>nξ zmr/im>Ĩ&EEe|O@-7zhsS)C}Rмi]+h@[;3&#U.) ZABb E3d%쀚TCo,(=I_"79b !f>ªE9zUBܤdqyX1?lV|/휏C'#- bkw P{rGuց($"ܧ]{JxDcE̸7f.PU\!m9P[!W >L;n|T ^Xe"^zc"R,:ϧ8&9(1wFL0=Wr_$%@o4%ej7pbD(z8,8U:UH2aر{!eb:n+Lý }R8'8'D κ9-o2X)1J`A{y #H"tK:Jn!ňDj:n76>dBFĥHq/Ml?ex&sHT Q6EBPe`5U1処c[y:d6A0Dibʅt)wAᩌpC.\9NieҼ_2\ %gZJswrG 9).ʍ,tC\sE-G>TsAc0zbk}(+N5աI&Bh}!}PdޯkDS' E=WM{lWO= g6q-1$C%s;hI-0ɥEl[l[~P6 l05xŶa_|ouCf43(0 xtH t{9V_ڥef~4u wJ6zoz *iIiHnfX"Z{"8;z0YP1m b=-.lHl(orL>f ^5֔ \;$5!"rNLZՐAK<ԂQm )0s'N%ړfymBUAƋ>JX8HBRT~Pݷÿ^n!Mz7K Q+Dž&b[~e`,!!%E:)f}2GMcTeʎ'EY[Vf^lY^2 o8*5֮Q<'A@D`9TR:VoeӊAX=IN40R! Q"O10&pG#%;a$ޔгtn9+u-"cW'|&]Y>'.ѳI;祥PH=* Ћ3ap|\(1a1}WL[Sr3ķٿ0cazUC@qGŌ1/FJH|rqu {o櫏}-"` NEXM;e&ecWfW()y 'Q;9c ϕ3l'J~tvz(Dk92VƮSe 3nU|"oVm(֒/C/Le#=g# W4mIc.X~{+{F3A+wS3m_.zl.rRh ]w7isU[H`ΞDǙ Ȇ+H_{ѨPBgFPyT::L(y; Yx;l3Y)! C&x 峫;*p9$)>'lJ#5D#X`sx9`26MT"0V ڷT2J 5 kS{}A* eHO3(S [0ȁج$z&1“ֹ7ʰxnE֟`Z\*;W³i3)=iDSrYT+?taʩD/ E#@M/@Ģ R8Er7;j mD7CY+_lﱘ3^cΜV4k+^»w=7s^`:TDݑn"CG E#B?&ͪaoxψdZY[:L,B$x*q}y5S ;`2fQ55?NK6bV0aUBѻ}"9TA^+c=̀Yx%t!=l6=WU1,\\Y'J!ǹDk[~pW3t(@pw?iRBO!ߣ{4R+&Of0$3]޶c}73k pg1R we.''O_t;NE.G^;lR ;dHY#t6{ps(oKiy(9}94vDkOL2E}>n3x4G*b?@f' O#tmvx́%ftш;|tmB i-G3N*?[[/.蜇SѣApZ'` ̙Ĉ0{NQr=H4*33_}p\:48{m.ޚ HN{aNX.\έY".i",WdɎHEPLh{|izpy-n^b;xW3j+ E!ժMAq`N42ݤnIuԷ!ML|uL/x@:v#Ą+q; NBW[ oR%S!wa .l``Ok:)WZ|^]-~+%3v1s8|uHKGusœ*P<βn <[h]r)1CW),αE յI# NEPKJUSi@{p+nd1<`O"'Qbg'Ei4$UCaZg KH9- ?`%RIHbJv|o a7l{ݱxD1:CͲUA =Sv:n]B돢~k܊_v-4W,e b6bYrSo% =+{a>\~&>j 2'P)N;\pzEdže+~wM (#d~7됔~OrQfaSJqGP-(I Y‘pR\VoI$gHfvre>;b؞=i-/$'Էn76 `v%{dj#lc6W&/gA~KU_gмIVO$tޱĉ՛wӿ'[suJ;)5|. Pz PkSт=AJ-r.(W$=/LE&P~'p1FqD: \Nm ]$ `hh{={n R%iY[HR~p5A9m1;4T:35^а3j5s`L'bu*{.X phjϬDF{50>o?yFCoR/vޑ_!ݑp1h(3tG6P?mnECs7W )|zE%/ V͎RTQ'~7IJS [cG᪄SqXf %H뼏 LxS%v9BJʮpu"<, P E4^nIEwMȐcӰmWȾUOVtXϜ&5:.t.tbGBz!SE~WӘMxՂ le!#^aXIZΓW> Z*/^\n(bP_@q .a㇊k)wgv=ܾP'87|}6&_Ҹ;̲>-6E GM1͉Mnfܜ:q >*^l՗>,NX<.mOvx݉Qʨ![.ɋyևf/`3of*r RFM +H4q[bk-cGޡu(P4 HA2 Ȏ <o|OcS9S Ee߉<;|O, # k$O܊ob w .5jaT<Ćr-&}tl #ǡ\b1G%N)Nc5CzrJvąTJ^vMt]XB|jwgيԵ_H{ }4 O3jM&4ҳoAwAi@豷zC7ȿK\9L̟pl~(GND{;цσar4sK2^0_[.w_MLR";9߬X H}g9ql'Wg L p/}klE3uH'|T#LJUtQFIFQ=m߉n#6X)(}DN|Z 'Qhi(" .@Hs9"zuI57mXJ7F8GLHωJ$$SIzs'fu"C 卿0yKxTG:+Wx[uRkTshDmB#c/Nủ_{*'ֹޜJ'?l׆X:PʉbLGX+ 9ƶoh(qf+yp*k2ܡO-g }8-jDﻕZr5d;;!?03lX͸LVńo'ġ1nnN(8P)-ΑIoIٳבT6B&L3kZ$Ɵi˟j[:E߫TAo:NpnK' ӒJLH/(/v5:okl JHb*k[3nV}+qM0ve7xA8H`ޭ'dvqJ<c! p &Ծ(۸붍7l$WҮ-2ruZȸ[LH֗snʄK,D͋X:{QgĆ%N1^Ⱦng3_j ^qA~Uб0ZjZ}uyQQ% g:pe]p!3;P3p*m8" U6bJKT>➖=[Qe/46xOP4:[ L V}bѤo!k< ~;;)Moԧ1%QNܙ%̧痸 c:a"=2`7 2xr Md$\~hd/g[zV5&Gy?fTcFn}?T4 -S W9%j2sܕ翇G!gu/9f蚼?SiVɺi@6! `<-ߕU6d}(^| d vvfe!o]ɜq 7KP2u1D!H#] pr餁FqiJLJP?qVo&r;+ᨌb1H.XwU(Y4ܬ4B7.p)5cZ\{`}IV٢LI;s'H]̆!:K_nm|[`.PeKO!IqIN#46 ˿,sUoU]!BJdGEJ)%%i y+0lt595 o/Xx#w]25'te7,fjB0`l惈"~ >Ñ7݋8ua=egꥭ5!\%@=sr6ASP7ÝX]Bs]>Fhn/+ǕVO%;H *߈'z&t3' \bQ>-B" v7rp>u*G 8[LnCm/`,/J Q/,?Aّ~꜆uHfmP,kP+09}t7õoXV 0vz v@ kNb7&B4o,6JS[8w%nq`ǡ;-ܞ|U!'cu WH(?&%K% %Tq[[6hB (j3~_x#ĶG: WO+hB#K!W;\١M|zNi9;M#+}UԔ J,eZcܙ$V Kwޮb#P,.xO%w) 0<URHJI]ْ(|눃܋3S-B *jrC?R#E[|/w2|TP{Ne}0? -4xf"I60(wUvn'/~c\3edkr#iiv4f ^H܇~/ˆݗ})2/)sa}Qԥ{ڵ{[A N7%?3|A[xN*?WwŹy)c~v7η7UcbURK4K^XadO$o$j\6u\c7W80>.@7pU8+M؎fO`RKw bةyhndeNZX~IlN f,mzRGcU *o?Le)2lO055X#)6JRCJ -VM& Le0Nr‡4q< A '_nWg oCDp.aNB&|hgYqd6gn⎄QaFwM+РIQ #YX̠HR5,&Z_&_+Y /GS*](s8)ff*ɏ{Q@m1JEFeO־xZ&*Od.9{ja!}(|$US4>t{Jrwv~ &1e!GL6̃:AUSUveMj g:UnCRŒTGƵ\K1~s>5<0`KoT檿ޓX}6C|#XIᛉҳ#|Lۧ h0 Xŗf,ܡ2EҟPg uj5k@x$a/XܙV!r)R8դ:hv |hSDLIZwho\@oL2gH~Xc@w"f8Qsm3l&G HQtu|8Bnb:`Itz+IG,SJR]4ՕˬlR&У,+1ߛ՝8)CB9茠׵ю\%4ydpSͰUkIYzֺgLJ٬%Ӓko@agqjخ]?h;B{jv>fgЇRT +ja7\}^Z#m^-_O#%6G7sfY}J~ƬF}*r!\V=9/[tPAzB>EDOvAeB1Jvf873nkڋT~ŇLCsTaԿK_wЉyB'URk0^﷝#ӴRJPZu,:-l[!ݐVw/ٵ/8??hMETX죭 2(os=B1呗Y$'F_3+"#fV%v VYW}]]Fөǫ*7^Op9Gδ|kWm`46Cqك$Бx~w.W6c_i)GoL7"/q4bsW Τ&r*bTQ"/cL!(=Ֆٗh_6ь!CE5Ct~N_Cq0DŽx8ϟ$cY#kX=*`?I X8JH6ya6/M>ן[^kђt%驒O޾prpKq0^tdu#.L~1%Ì$Y7?&JNqݍ,}ߐ.qJ ʾ}!@s;%a}!}ٝ(cGש7}]mG4&"Y*1qބ'V[BhPiqʮФ¶/Sl]-! SקmxxL$3Ri_GJ:6rì\-KeBuCԧsSی}{LYPEdC6ͤ8&x+JO93hG`]kVqˆR'9$54UJ_▘>Lf0U<@oہ? 5P WႲh\ zvj6`@nPɚA>`6 ~#YM<m#., {:ob)qrFEjݕKK(gF=#7ޖ>GLmW'HU+MƇEihŕ^1E$!g>Ѥ _SQ*x/){_U NkBaN~M Tx tP^|hhr;\T>ߌ/=<Pr[A(4t=VD)/b9 Zh;*^"6ȯF87G5ɋ EuZqT&CoeL0¨OqYSsݥCn@擖ŷR8,t.3Y%'x hZDƵ~ci`ÚuS[1A (QG:Nh%ӹw1AO_cΎ33X^htرti_K4QFDk< nhvbH޾ ÖtVm}Z×"I)Aw0|;1Ȱ@w^12uFµLu< X}h\`u@q=uEx[۵,ϑy1NN%e"qq!bj71. z!&~WZ&(nm +L<)2>zRV|lm½O!Rh>*$+<[TatFx¸ͨ/ J 0c 5t`<} a#~cR]VpJaCI\OR>?f1UN"{3D *=: hE(փAap:eR3-#G((gB!V_!^1V3:=}Y|:v J8 „&nq`xFmST0~UyPؖ|QBg\wy,G*VթJV' _ jJ *uDN[ ].0Ж-L>dx0ij?AN6h1 N/|Q֙~G+ }F$41֏AN2OY$XGS9 X@xS-H;ہ{_/";!42\A?p@ĻT u6讣R ^YǩPŃ>[إ5Qs2 6%,~-Ҙb Y0;)*r1B8qiN>|M)5@g`.)`޿VyQ_vv`?li|˫8eR4q,qN濝IQq"F"1U[ Lz~%`8`v%8T߇zR2-T7қ1|)8H_KvQ$]Ԇ56zCia7qx0ͲΛU7`k@$[v52lGgp&Ӭ0 0xHC_ W  ݹt˿?x!k!NS2WÃ}C\KH08N4C(_@E] 3_0BYXħ8a?dAjH5V!zz5xC^Z(n\W8O7$?6#8DE]ap% Cz`]dXBIBnK 97t_8 |cO;5!I 1AiZE:eҸc)og5h>)MS^,.&+AX͔GWg@,q@W8xJ]dgd ^oj(u{"SuoC}s]aBނVtnԥ<7#|SNn?hYS_2ԍdjLnYJ\2z09ͮcO:;o,0왲JrWG"fww{FisČ}{+y!o;EH̼[FX\,7܁9%_R_}> q &|LϹ\&ߠÚlK^sg.:j;'Mϣ88bMg OXE{}77C=]3.(ڣ&tTu7LvGorLmHφ/ALv];\ CZ*囻Z]{~RVBbKy17e#;۩Ar#ljhtHSfwy@#@|۱sdt%+%)Ym6 lQ4T]6*淣|gfZ^  mLvUpp{z룓C8u." NFM(FnoGvw:j58V/܇aZ0(]8H_.XhOtc/@hX_m0bx Pz~5x~+JN tԥzLpz#|RuǿsX{]&&W[Hڬo{JHP'L'GyΈ{EeK>\i;k;~e""qTۓi vn nj.U0ڻssE z}wcϱYŝ[!!ZJt8dXqn&;]H%eM3Ӵ+U HZ+f/Bw_TR9jqdK?bBDSv360MzP2rKwrxB`2^0 E51 f; m`t=>S;9&hDGĒc};J,g9H}#ĥ%$ȅT`_. It allows you to easily access to HTTP resource and build objects around it. It's the base of `couchdbkit `_ a Python `CouchDB `_ framework. Restkit is a full HTTP client using pure socket calls and its own HTTP parser. It's not based on httplib or urllib2. Features -------- - Full compatible HTTP client for HTTP 1.0 and 1.1 - Threadsafe - Use pure socket calls and its own HTTP parser (It's not based on httplib or urllib2) - Map HTTP resources to Python objects - **Read** and **Send** on the fly - Reuses connections - `Eventlet `_ and `Gevent `_ support - Support `Chunked transfer encoding`_ in both ways. - Support `Basic Authentification`_ and `OAuth`_. - Multipart forms and url-encoded forms - Streaming support - Proxy handling - HTTP Filters, you can hook requests in responses with your own callback - Compatible with Python 2.x (>= 2.6) Documentation ------------- http://restkit.readthedocs.org Installation ------------ restkit requires Python 2.x superior to 2.6 (Python 3 support is coming soon) To install restkit using pip you must make sure you have a recent version of distribute installed:: $ curl -O http://python-distribute.org/distribute_setup.py $ sudo python distribute_setup.py $ easy_install pip To install from source, run the following command:: $ git clone https://github.com/benoitc/restkit.git $ cd restkit $ pip install -r requirements.txt $ python setup.py install From pypi:: $ pip install restkit License ------- restkit is available under the MIT license. .. _Chunked transfer encoding: http://en.wikipedia.org/wiki/Chunked_transfer_encoding .. _Basic Authentification: http://www.ietf.org/rfc/rfc2617.txt .. _OAuth: http://oauth.net/ Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Software Development :: Libraries restkit-4.2.2/restkit.egg-info/not-zip-safe0000664000175000017500000000000112210136112021670 0ustar benoitcbenoitc00000000000000 restkit-4.2.2/restkit.egg-info/entry_points.txt0000664000175000017500000000027112210136112022740 0ustar benoitcbenoitc00000000000000[paste.app_factory] couchdb_proxy = restkit.contrib.wsgi_proxy:make_couchdb_proxy host_proxy = restkit.contrib.wsgi_proxy:make_host_proxy proxy = restkit.contrib.wsgi_proxy:make_proxy restkit-4.2.2/restkit.egg-info/requires.txt0000664000175000017500000000004412210136112022040 0ustar benoitcbenoitc00000000000000http-parser>=0.8.3 socketpool>=0.5.3restkit-4.2.2/restkit.egg-info/top_level.txt0000664000175000017500000000001012210136112022163 0ustar benoitcbenoitc00000000000000restkit restkit-4.2.2/restkit.egg-info/SOURCES.txt0000664000175000017500000000543012210136112021330 0ustar benoitcbenoitc00000000000000LICENSE MANIFEST.in NOTICE README.rst THANKS TODO.txt bootstrap.py buildout.cfg requirements.txt setup.cfg setup.py debian/changelog debian/clean debian/compat debian/control debian/copyright debian/python-restkit.preinst debian/pyversions debian/rules debian/watch debian/source/format doc/Makefile doc/NOTICE doc/api.rst doc/authentication.rst doc/client.rst doc/conf.py doc/ghp-import doc/green.rst doc/index.rst doc/installation.rst doc/make.bat doc/news.rst doc/pool.rst doc/resource.rst doc/shell.rst doc/sitemap_config.xml doc/sitemap_gen.py doc/sphinxtogithub.py doc/streaming.rst doc/wsgi_proxy.rst doc/_static/restkit.css doc/_static/screenshot_client.png doc/_static/blitzer/jquery-ui-custom.css doc/_static/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png doc/_static/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png doc/_static/blitzer/images/ui-bg_flat_0_333333_40x100.png doc/_static/blitzer/images/ui-bg_flat_65_ffffff_40x100.png doc/_static/blitzer/images/ui-bg_flat_75_ffffff_40x100.png doc/_static/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png doc/_static/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png doc/_static/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png doc/_static/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png doc/_static/blitzer/images/ui-icons_004276_256x240.png doc/_static/blitzer/images/ui-icons_cc0000_256x240.png doc/_static/blitzer/images/ui-icons_ffffff_256x240.png doc/_templates/layout.html doc/api/client.rst doc/api/conn.rst doc/api/datastructure.rst doc/api/errors.rst doc/api/filters.rst doc/api/forms.rst doc/api/modules.rst doc/api/oauth2.rst doc/api/resource.rst doc/api/restkit.contrib.rst doc/api/restkit.rst doc/api/session.rst doc/api/tee.rst doc/api/util.rst doc/api/version.rst doc/api/wrappers.rst examples/couchdbproxy.py examples/proxy.ini examples/test_eventlet.py examples/test_gevent.py examples/test_threads.py restkit/__init__.py restkit/client.py restkit/conn.py restkit/datastructures.py restkit/errors.py restkit/filters.py restkit/forms.py restkit/oauth2.py restkit/resource.py restkit/session.py restkit/tee.py restkit/util.py restkit/version.py restkit/wrappers.py restkit.egg-info/PKG-INFO restkit.egg-info/SOURCES.txt restkit.egg-info/dependency_links.txt restkit.egg-info/entry_points.txt restkit.egg-info/not-zip-safe restkit.egg-info/requires.txt restkit.egg-info/top_level.txt restkit/contrib/__init__.py restkit/contrib/console.py restkit/contrib/ipython_shell.py restkit/contrib/webob_api.py restkit/contrib/webob_helper.py restkit/contrib/wsgi_proxy.py scripts/restcli tests/004-test-client.py tests/005-test-resource.py tests/006-test-webob.py tests/007-test-util.py tests/008-test-request.py tests/009-test-oauth_filter.py tests/010-test-proxies.py tests/1M tests/__init__.py tests/_server_test.py tests/t.py tests/treq.pyrestkit-4.2.2/restkit.egg-info/dependency_links.txt0000664000175000017500000000000112210136112023510 0ustar benoitcbenoitc00000000000000 restkit-4.2.2/setup.cfg0000664000175000017500000000026612210136112016110 0ustar benoitcbenoitc00000000000000[nosetests] exclude = (eventlet,gevent,ipython_shell|eventlet_pool|gevent_pool) with-coverage = 1 cover-package = restkit [egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 restkit-4.2.2/debian/0000775000175000017500000000000012210136112015505 5ustar benoitcbenoitc00000000000000restkit-4.2.2/debian/changelog0000664000175000017500000000575112210071423017372 0ustar benoitcbenoitc00000000000000restkit (3.3.0-1) karmic; urgency=low * bump version -- Benoit Chesneau Mon, 20 Jun 2011 17:25:00 +0100 restkit (3.2.3-1) karmic; urgency=low * bump version -- Benoit Chesneau Tue, 05 Apr 2011 21:12:00 +0100 restkit (3.2.2-1) karmic; urgency=low * bump version -- Benoit Chesneau Tue, 05 Apr 2011 10:47:00 +0100 restkit (3.2.1-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 22 MAr 2011 10:19:00 +0100 restkit (3.2.0-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 18 Feb 2011 19:18:00 +0100 restkit (3.1.0-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 11 Feb 2011 21:37:00 +0100 restkit (3.0.4-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 07 Feb 2011 17:03:00 +0100 restkit (3.0.3-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 07 Feb 2011 11:09:00 +0100 restkit (3.0.2-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 03 Feb 2011 21:33:00 +0100 restkit (3.0-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 03 Feb 2011 13:43:00 +0100 restkit (2.3.3-1) karmic; urgency=low * bump version -- Benoit Chesneau Wed, 17 Dec 2010 01:43:00 +0100 restkit (2.3.2-1) karmic; urgency=low * bump version -- Benoit Chesneau Wed, 15 Dec 2010 23:00:00 +0100 restkit (2.3.1-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 26 Nov 2010 08:31:00 +0100 restkit (2.3.0-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 25 Nov 2010 14:39:00 +0100 restkit (2.2.2-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 16 Oct 2010 17:30:00 +0100 restkit (2.2.0-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 14 Sep 2010 20:50:00 +0100 restkit (2.1.7-1) karmic; urgency=low * bump version -- Benoit Chesneau Thu, 06 Sep 2010 03:51:00 -0700 restkit (2.1.5-1) karmic; urgency=low * Fix NoMoreData error on 0 Content-Length * Fix oauth issue. -- Benoit Chesneau Thu, 02 Sep 2010 22:51:00 +0100 restkit (2.1.5-1) karmic; urgency=low * Bump releaase -- Benoit Chesneau Fri, 27 Aug 2010 04:16:00 +0100 restkit (2.1.2-1) karmic; urgency=low * Fix multiple headers in filters on_request -- Benoit Chesneau Tue, 10 Aug 2010 22:53:00 +0100 restkit (2.1.1-1) karmic; urgency=low * New release -- Benoit Chesneau Thu, 05 Aug 2010 18:38:00 +0100 restkit (0.9.4-1) karmic; urgency=low * Initial release -- Benoit Chesneau Mon, 22 Feb 2010 08:06:28 +0100 restkit-4.2.2/debian/watch0000664000175000017500000000201312210071423016535 0ustar benoitcbenoitc00000000000000# Example watch control file for uscan # Rename this file to "watch" and then you can run the "uscan" command # to check for upstream updates and more. # See uscan(1) for format # Compulsory line, this is a version 3 file version=3 # Uncomment to examine a Webpage # #http://www.example.com/downloads.php python-couchdbkit-(.*)\.tar\.gz opts=dversionmangle=s/\+dfsg$// \ http://pypi.python.org/packages/source/c/restkit/restkit-(.*).tar.gz # http://github.com/benoitc/couchdbkit/downloads/ /benoitc/couchdbkit/tarball/([0-9].*) # Uncomment to examine a Webserver directory #http://www.example.com/pub/python-couchdbkit-(.*)\.tar\.gz # Uncommment to examine a FTP server #ftp://ftp.example.com/pub/python-couchdbkit-(.*)\.tar\.gz debian uupdate # Uncomment to find new files on sourceforge, for devscripts >= 2.9 # http://sf.net/python-couchdbkit/python-couchdbkit-(.*)\.tar\.gz # Uncomment to find new files on GooglePages # http://example.googlepages.com/foo.html python-couchdbkit-(.*)\.tar\.gz restkit-4.2.2/debian/control0000664000175000017500000000072612210071423017120 0ustar benoitcbenoitc00000000000000Source: restkit Section: python Priority: optional Maintainer: Benoit Chesneau Build-Depends: debhelper (>= 7), python-support, python-setuptools Standards-Version: 3.9.0.0 Homepage: http://benoitc.github.com/restkit Package: python-restkit Architecture: all Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}, python-http-parser(>=0.6.0) Provides: ${python:Provides} Description: Python REST kit An HTTP resource kit for Python restkit-4.2.2/debian/compat0000664000175000017500000000000212210071423016706 0ustar benoitcbenoitc000000000000007 restkit-4.2.2/debian/clean0000664000175000017500000000002312210071423016510 0ustar benoitcbenoitc00000000000000restkit.egg-info/* restkit-4.2.2/debian/source/0000775000175000017500000000000012210136112017005 5ustar benoitcbenoitc00000000000000restkit-4.2.2/debian/source/format0000664000175000017500000000001512210071423020217 0ustar benoitcbenoitc000000000000003.0 (native) restkit-4.2.2/debian/copyright0000664000175000017500000000206712210071423017450 0ustar benoitcbenoitc000000000000002008-2010 (c) Benoît Chesneau 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. restkit-4.2.2/debian/pyversions0000664000175000017500000000000512210071423017647 0ustar benoitcbenoitc000000000000002.5- restkit-4.2.2/debian/rules0000775000175000017500000000067312210071423016576 0ustar benoitcbenoitc00000000000000#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. # export DH_VERBOSE=1 %: dh $@ restkit-4.2.2/debian/python-restkit.preinst0000664000175000017500000000066512210071423022131 0ustar benoitcbenoitc00000000000000#! /bin/sh set -e # This was added by stdeb to workaround Debian #479852. In a nutshell, # pycentral does not remove normally remove its symlinks on an # upgrade. Since we're using python-support, however, those symlinks # will be broken. This tells python-central to clean up any symlinks. if [ -e /var/lib/dpkg/info/python-restkit.list ] && which pycentral >/dev/null 2>&1 then pycentral pkgremove python-restkit fi #DEBHELPER# restkit-4.2.2/setup.py0000775000175000017500000000440612210132470016007 0ustar benoitcbenoitc00000000000000#!/usr/bin/env python # -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. from __future__ import with_statement from setuptools import setup, find_packages import glob from imp import load_source import os import sys if not hasattr(sys, 'version_info') or sys.version_info < (2, 6, 0, 'final'): raise SystemExit("Restkit requires Python 2.6 or later.") extras = {} CLASSIFIERS = [ 'Development Status :: 4 - Beta', 'Environment :: Web Environment', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Software Development :: Libraries'] SCRIPTS = ['scripts/restcli'] def main(): version = load_source("version", os.path.join("restkit", "version.py")) # read long description with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f: long_description = f.read() DATA_FILES = [ ('restkit', ["LICENSE", "MANIFEST.in", "NOTICE", "README.rst", "THANKS", "TODO.txt"]) ] options=dict( name = 'restkit', version = version.__version__, description = 'Python REST kit', long_description = long_description, author = 'Benoit Chesneau', author_email = 'benoitc@e-engura.org', license = 'MIT', url = 'http://benoitc.github.com/restkit', classifiers = CLASSIFIERS, packages = find_packages(exclude=['tests']), data_files = DATA_FILES, scripts = SCRIPTS, zip_safe = False, entry_points = { 'paste.app_factory': [ 'proxy = restkit.contrib.wsgi_proxy:make_proxy', 'host_proxy = restkit.contrib.wsgi_proxy:make_host_proxy', 'couchdb_proxy = restkit.contrib.wsgi_proxy:make_couchdb_proxy', ]}, install_requires = [ 'http-parser>=0.8.3', 'socketpool>=0.5.3'], test_suite = 'nose.collector' ) setup(**options) if __name__ == "__main__": main() restkit-4.2.2/requirements.txt0000664000175000017500000000004512210132511017545 0ustar benoitcbenoitc00000000000000http-parser>=0.8.3 socketpool>=0.5.3 restkit-4.2.2/THANKS0000664000175000017500000000053412210071423015203 0ustar benoitcbenoitc00000000000000Restkit THANKS ===================== A number of people have contributed to Restkit by reporting problems, suggesting improvements or submitting changes. Some of these people are: Gael Pasgrimaud Andrew Wilkinson Xavier Grangier Benoit Calvez Marc Abramowitz restkit-4.2.2/README.rst0000664000175000017500000000355512210071423015765 0ustar benoitcbenoitc00000000000000About ----- Restkit is an HTTP resource kit for `Python `_. It allows you to easily access to HTTP resource and build objects around it. It's the base of `couchdbkit `_ a Python `CouchDB `_ framework. Restkit is a full HTTP client using pure socket calls and its own HTTP parser. It's not based on httplib or urllib2. Features -------- - Full compatible HTTP client for HTTP 1.0 and 1.1 - Threadsafe - Use pure socket calls and its own HTTP parser (It's not based on httplib or urllib2) - Map HTTP resources to Python objects - **Read** and **Send** on the fly - Reuses connections - `Eventlet `_ and `Gevent `_ support - Support `Chunked transfer encoding`_ in both ways. - Support `Basic Authentification`_ and `OAuth`_. - Multipart forms and url-encoded forms - Streaming support - Proxy handling - HTTP Filters, you can hook requests in responses with your own callback - Compatible with Python 2.x (>= 2.6) Documentation ------------- http://restkit.readthedocs.org Installation ------------ restkit requires Python 2.x superior to 2.6 (Python 3 support is coming soon) To install restkit using pip you must make sure you have a recent version of distribute installed:: $ curl -O http://python-distribute.org/distribute_setup.py $ sudo python distribute_setup.py $ easy_install pip To install from source, run the following command:: $ git clone https://github.com/benoitc/restkit.git $ cd restkit $ pip install -r requirements.txt $ python setup.py install From pypi:: $ pip install restkit License ------- restkit is available under the MIT license. .. _Chunked transfer encoding: http://en.wikipedia.org/wiki/Chunked_transfer_encoding .. _Basic Authentification: http://www.ietf.org/rfc/rfc2617.txt .. _OAuth: http://oauth.net/ restkit-4.2.2/examples/0000775000175000017500000000000012210136112016101 5ustar benoitcbenoitc00000000000000restkit-4.2.2/examples/couchdbproxy.py0000664000175000017500000000156012210071423021171 0ustar benoitcbenoitc00000000000000# -*- coding: utf-8 - # # This file is part of restkit released under the MIT license. # See the NOTICE for more information. import urlparse from webob import Request from restkit.contrib.wsgi_proxy import HostProxy import restkit from restkit.conn import Connection from socketpool import ConnectionPool restkit.set_logging("debug") pool = ConnectionPool(factory=Connection, max_size=10, backend="thread") proxy = HostProxy("http://127.0.0.1:5984", pool=pool) def application(environ, start_response): req = Request(environ) if 'RAW_URI' in req.environ: # gunicorn so we use real path non encoded u = urlparse.urlparse(req.environ['RAW_URI']) req.environ['PATH_INFO'] = u.path # do smth like adding oauth headers .. resp = req.get_response(proxy) # rewrite response # do auth ... return resp(environ, start_response) restkit-4.2.2/examples/test_gevent.py0000664000175000017500000000142412210071423021006 0ustar benoitcbenoitc00000000000000import timeit from gevent import monkey; monkey.patch_all() import gevent from restkit import * from restkit.conn import Connection from socketpool import ConnectionPool #set_logging("debug") pool = ConnectionPool(factory=Connection, backend="gevent") urls = [ "http://refuge.io", "http://gunicorn.org", "http://friendpaste.com", "http://benoitc.io", "http://couchdb.apache.org"] allurls = [] for i in range(10): allurls.extend(urls) def fetch(u): r = request(u, follow_redirect=True, pool=pool) print "RESULT: %s: %s (%s)" % (u, r.status, len(r.body_string())) def extract(): jobs = [gevent.spawn(fetch, url) for url in allurls] gevent.joinall(jobs) t = timeit.Timer(stmt=extract) print "%.2f s" % t.timeit(number=1) restkit-4.2.2/examples/test_threads.py0000664000175000017500000000127412210071423021153 0ustar benoitcbenoitc00000000000000import threading import timeit from restkit import * #set_logging("debug") urls = [ "http://refuge.io", "http://gunicorn.org", "http://friendpaste.com", "http://benoitc.io", "http://couchdb.apache.org"] allurls = [] for i in range(10): allurls.extend(urls) def fetch(u): r = request(u, follow_redirect=True) print "RESULT: %s: %s (%s)" % (u, r.status, len(r.body_string())) def spawn(u): t = threading.Thread(target=fetch, args=[u]) t.daemon = True t.start() return t def extract(): threads = [spawn(u) for u in allurls] [t.join() for t in threads] t = timeit.Timer(stmt=extract) print "%.2f s" % t.timeit(number=1) restkit-4.2.2/examples/test_eventlet.py0000664000175000017500000000143312210071423021344 0ustar benoitcbenoitc00000000000000import timeit import eventlet eventlet.monkey_patch() from restkit import * from restkit.conn import Connection from socketpool import ConnectionPool #set_logging("debug") pool = ConnectionPool(factory=Connection, backend="eventlet") epool = eventlet.GreenPool() urls = [ "http://refuge.io", "http://gunicorn.org", "http://friendpaste.com", "http://benoitc.io", "http://couchdb.apache.org"] allurls = [] for i in range(10): allurls.extend(urls) def fetch(u): r = request(u, follow_redirect=True, pool=pool) print "RESULT: %s: %s (%s)" % (u, r.status, len(r.body_string())) def extract(): for url in allurls: epool.spawn_n(fetch, url) epool.waitall() t = timeit.Timer(stmt=extract) print "%.2f s" % t.timeit(number=1) restkit-4.2.2/examples/proxy.ini0000664000175000017500000000041612210071423017767 0ustar benoitcbenoitc00000000000000[server:main] use = egg:Paste#http port = 4969 [app:main] use = egg:Paste#urlmap /couchdb = couchdb / = proxy [app:couchdb] use = egg:restkit#couchdb_proxy db_name = [app:proxy] use = egg:restkit#host_proxy uri = http://benoitc.github.com/restkit/ max_connections=50 restkit-4.2.2/buildout.cfg0000664000175000017500000000026112210071423016575 0ustar benoitcbenoitc00000000000000[buildout] newest = false parts = eggs develop = . [eggs] recipe = zc.recipe.egg eggs = pastescript ipython http_parser restkit webob nose coverage restkit-4.2.2/NOTICE0000664000175000017500000000243212210071423015173 0ustar benoitcbenoitc00000000000000Restkit ------- 2008-2013 (c) Benoît Chesneau Restkit is released under the MIT license. See the LICENSE file for the complete license. oauth2: ------ oauth2 is under MIT license. Copyright (c) 2007-2010 Leah Culver, Joe Stump, Mark Paschal, Vic Fryzel 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. restkit-4.2.2/doc/0000775000175000017500000000000012210136112015030 5ustar benoitcbenoitc00000000000000restkit-4.2.2/doc/ghp-import0000775000175000017500000001026212210071423017050 0ustar benoitcbenoitc00000000000000#! /usr/bin/env python # # This file is part of the ghp-import package released under # the Tumbolia Public License. See the LICENSE file for more # information. import optparse as op import os import subprocess as sp import time __usage__ = "%prog [OPTIONS] DIRECTORY" def is_repo(d): if not os.path.isdir(d): return False if not os.path.isdir(os.path.join(d, 'objects')): return False if not os.path.isdir(os.path.join(d, 'refs')): return False headref = os.path.join(d, 'HEAD') if os.path.isfile(headref): return True if os.path.islinke(headref) and os.readlink(headref).startswith("refs"): return True return False def find_repo(path): if is_repo(path): return True if is_repo(os.path.join(path, '.git')): return True (parent, ignore) = os.path.split(path) if parent == path: return False return find_repo(parent) def try_rebase(remote): cmd = ['git', 'rev-list', '--max-count=1', 'origin/gh-pages'] p = sp.Popen(cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) (rev, ignore) = p.communicate() if p.wait() != 0: return True cmd = ['git', 'update-ref', 'refs/heads/gh-pages', rev.strip()] if sp.call(cmd) != 0: return False return True def get_config(key): p = sp.Popen(['git', 'config', key], stdin=sp.PIPE, stdout=sp.PIPE) (value, stderr) = p.communicate() return value.strip() def get_prev_commit(): cmd = ['git', 'rev-list', '--max-count=1', 'gh-pages'] p = sp.Popen(cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) (rev, ignore) = p.communicate() if p.wait() != 0: return None return rev.strip() def make_when(timestamp=None): if timestamp is None: timestamp = int(time.time()) currtz = "%+05d" % (time.timezone / 36) # / 3600 * 100 return "%s %s" % (timestamp, currtz) def start_commit(pipe, message): username = get_config("user.name") email = get_config("user.email") pipe.stdin.write('commit refs/heads/gh-pages\n') pipe.stdin.write('committer %s <%s> %s\n' % (username, email, make_when())) pipe.stdin.write('data %d\n%s\n' % (len(message), message)) head = get_prev_commit() if head: pipe.stdin.write('from %s\n' % head) pipe.stdin.write('deleteall\n') def add_file(pipe, srcpath, tgtpath): pipe.stdin.write('M 100644 inline %s\n' % tgtpath) with open(srcpath) as handle: data = handle.read() pipe.stdin.write('data %d\n' % len(data)) pipe.stdin.write(data) pipe.stdin.write('\n') def run_import(srcdir, message): cmd = ['git', 'fast-import', '--date-format=raw', '--quiet'] pipe = sp.Popen(cmd, stdin=sp.PIPE) start_commit(pipe, message) for path, dnames, fnames in os.walk(srcdir): for fn in fnames: fpath = os.path.join(path, fn) add_file(pipe, fpath, os.path.relpath(fpath, start=srcdir)) pipe.stdin.write('\n') pipe.stdin.close() if pipe.wait() != 0: print "Failed to process commit." def options(): return [ op.make_option('-m', dest='mesg', default='Update documentation', help='The commit message to use on the gh-pages branch.'), op.make_option('-p', dest='push', default=False, action='store_true', help='Push the branch to origin/gh-pages after committing.'), op.make_option('-r', dest='remote', default='origin', help='The name of the remote to push to. [%default]') ] def main(): parser = op.OptionParser(usage=__usage__, option_list=options()) opts, args = parser.parse_args() if len(args) == 0: parser.error("No import directory specified.") if len(args) > 1: parser.error("Unknown arguments specified: %s" % ', '.join(args[1:])) if not os.path.isdir(args[0]): parser.error("Not a directory: %s" % args[0]) if not find_repo(os.getcwd()): parser.error("No Git repository found.") if not try_rebase(opts.remote): parser.error("Failed to rebase gh-pages branch.") run_import(args[0], opts.mesg) if opts.push: sp.check_call(['git', 'push', opts.remote, 'gh-pages']) if __name__ == '__main__': main() restkit-4.2.2/doc/_templates/0000775000175000017500000000000012210136112017165 5ustar benoitcbenoitc00000000000000restkit-4.2.2/doc/_templates/layout.html0000664000175000017500000000463312210071423021401 0ustar benoitcbenoitc00000000000000{% set script_files = [] %} {% extends "!layout.html" %} {% block extrahead %} {% endblock %} {% block header %}

{% endblock %} {%- block relbar1 %}{% endblock %} {% block footer %}
{% endblock %} {%- block relbar2 %}{% endblock %} restkit-4.2.2/doc/streaming.rst0000664000175000017500000000544612210071423017567 0ustar benoitcbenoitc00000000000000Stream you content ================== With Restkit you can easily stream your content to an from a server. Stream to --------- To stream a content to a server, pass to your request a file (or file-like object) or an iterator as `body`. If you use an iterator or a file-like object and Restkit can't determine its size (by reading `Content-Length` header or fetching the size of the file), sending will be chunked and Restkit add `Transfer-Encoding: chunked` header to the list of headers. Here is a quick snippet with a file:: from restkit import request with open("/some/file", "r") as f: request("/some/url", 'POST', body=f) Here restkit will put the file size in `Content-Length` header. Another example with an iterator:: from restkit import request myiterator = ['line 1', 'line 2'] request("/some/url", 'POST', body=myiterator) Sending will be chunked. If you want to send without TE: chunked, you need to add the `Content-Length` header:: request("/some/url", 'POST', body=myiterator, headers={'content-Length': 12}) Stream from ----------- Each requests return a :class:`restkit.wrappers.Response` object. If you want to receive the content in a streaming fashion you just have to use the `body_stream` member of the response. You can `iter` on it or just use as a file-like object (read, readline, readlines, ...). **Attention**: Since 2.0, response.body are just streamed and aren't persistent. In previous version, the implementation may cause problem with memory or storage usage. Quick snippet with iteration:: import os from restkit import request import tempfile r = request("http://e-engura.com/images/logo.gif") fd, fname = tempfile.mkstemp(suffix='.gif') with r.body_stream() as body: with os.fdopen(fd, "wb") as f: for block in body: f.write(block) Or if you just want to read:: with r.body_stream() as body: with os.fdopen(fd, "wb") as f: while True: data = body.read(1024) if not data: break f.write(data) Tee input --------- While with body_stream you can only consume the input until the end, you may want to reuse this body later in your application. For that, restkit since the 3.0 version offer the `tee` method. It copy response input to standard output or a file if length > sock.MAX_BODY. When all the input has been read, connection is released:: from restkit import request import tempfile r = request("http://e-engura.com/images/logo.gif") fd, fname = tempfile.mkstemp(suffix='.gif') fd1, fname1 = tempfile.mkstemp(suffix='.gif') body = t.tee() # save first file with os.fdopen(fd, "wb") as f: for chunk in body: f.write(chunk) # reset body.seek(0) # save second file. with os.fdopen(fd1, "wb") as f: for chunk in body: f.write(chunk) restkit-4.2.2/doc/sitemap_config.xml0000664000175000017500000000037012210071423020544 0ustar benoitcbenoitc00000000000000 restkit-4.2.2/doc/api.rst0000664000175000017500000000036112210071423016336 0ustar benoitcbenoitc00000000000000restkit API =========== .. toctree:: :maxdepth: 4 api/restkit api/client api/conn api/datastructures api/errors api/filters api/forms api/oauth2 api/resource api/wrappers api/restkit.contrib restkit-4.2.2/doc/api/0000775000175000017500000000000012210136112015601 5ustar benoitcbenoitc00000000000000restkit-4.2.2/doc/api/conn.rst0000664000175000017500000000017512210071423017276 0ustar benoitcbenoitc00000000000000:mod:`conn` Module ------------------ .. automodule:: restkit.conn :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/util.rst0000664000175000017500000000017512210071423017316 0ustar benoitcbenoitc00000000000000:mod:`util` Module ------------------ .. automodule:: restkit.util :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/modules.rst0000664000175000017500000000007212210071423020005 0ustar benoitcbenoitc00000000000000restkit ======= .. toctree:: :maxdepth: 4 restkit restkit-4.2.2/doc/api/restkit.contrib.rst0000664000175000017500000000143412210071423021464 0ustar benoitcbenoitc00000000000000contrib Package =============== :mod:`console` Module --------------------- .. automodule:: restkit.contrib.console :members: :undoc-members: :show-inheritance: :mod:`ipython_shell` Module --------------------------- .. automodule:: restkit.contrib.ipython_shell :members: :undoc-members: :show-inheritance: :mod:`webob_api` Module ----------------------- .. automodule:: restkit.contrib.webob_api :members: :undoc-members: :show-inheritance: :mod:`webob_helper` Module -------------------------- .. automodule:: restkit.contrib.webob_helper :members: :undoc-members: :show-inheritance: :mod:`wsgi_proxy` Module ------------------------ .. automodule:: restkit.contrib.wsgi_proxy :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/version.rst0000664000175000017500000000020612210071423020021 0ustar benoitcbenoitc00000000000000:mod:`version` Module --------------------- .. automodule:: restkit.version :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/forms.rst0000664000175000017500000000020012210071423017454 0ustar benoitcbenoitc00000000000000:mod:`forms` Module ------------------- .. automodule:: restkit.forms :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/datastructure.rst0000664000175000017500000000023312210071423021226 0ustar benoitcbenoitc00000000000000:mod:`datastructures` Module ---------------------------- .. automodule:: restkit.datastructures :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/restkit.rst0000664000175000017500000000013412210071423020021 0ustar benoitcbenoitc00000000000000restkit Package =============== .. automodule:: restkit :members: request, set_logging restkit-4.2.2/doc/api/oauth2.rst0000664000175000017500000000020312210071423017533 0ustar benoitcbenoitc00000000000000:mod:`oauth2` Module -------------------- .. automodule:: restkit.oauth2 :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/wrappers.rst0000664000175000017500000000021112210071423020173 0ustar benoitcbenoitc00000000000000:mod:`wrappers` Module ---------------------- .. automodule:: restkit.wrappers :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/resource.rst0000664000175000017500000000021112210071423020157 0ustar benoitcbenoitc00000000000000:mod:`resource` Module ---------------------- .. automodule:: restkit.resource :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/session.rst0000664000175000017500000000020612210071423020017 0ustar benoitcbenoitc00000000000000:mod:`session` Module --------------------- .. automodule:: restkit.session :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/client.rst0000664000175000017500000000020312210071423017607 0ustar benoitcbenoitc00000000000000:mod:`client` Module -------------------- .. automodule:: restkit.client :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/filters.rst0000664000175000017500000000020612210071423020004 0ustar benoitcbenoitc00000000000000:mod:`filters` Module --------------------- .. automodule:: restkit.filters :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/tee.rst0000664000175000017500000000017212210071423017113 0ustar benoitcbenoitc00000000000000:mod:`tee` Module ----------------- .. automodule:: restkit.tee :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/api/errors.rst0000664000175000017500000000020312210071423017645 0ustar benoitcbenoitc00000000000000:mod:`errors` Module -------------------- .. automodule:: restkit.errors :members: :undoc-members: :show-inheritance: restkit-4.2.2/doc/installation.rst0000664000175000017500000000260412210071423020270 0ustar benoitcbenoitc00000000000000.. _installation: Installation ============ Requirements ------------ - **Python 2.6 or newer** (Python 3.x will be supported soon) - setuptools >= 0.6c6 - nosetests (for the test suite only) Installation ------------ To install restkit using pip you must make sure you have a recent version of distribute installed:: $ curl -O http://python-distribute.org/distribute_setup.py $ sudo python distribute_setup.py $ easy_install pip To install or upgrade to the latest released version of restkit:: $ pip install -r requirements.txt $ pip install restkit Note: if you get an error on MacOSX try to install with the following arguments:: $ env ARCHFLAGS="-arch i386 -arch x86_64" pip install http-parser Installation from source ------------------------ You can install Restkit from source as simply as you would install any other Python package. Restkit uses setuptools which will automatically fetch all dependencies (including setuptools itself). Get a Copy ++++++++++ You can download a tarball of the latest sources from `GitHub Downloads`_ or fetch them with git_:: $ git clone git://github.com/benoitc/restkit.git .. _`GitHub Downloads`: http://github.com/benoitc/restkit/downloads .. _git: http://git-scm.com/ Installation ++++++++++++ :: $ python setup.py install Note: If you don't use setuptools or distribute, make sure http-parser is installed first. restkit-4.2.2/doc/sitemap_gen.py0000775000175000017500000020311112210071423017701 0ustar benoitcbenoitc00000000000000#!/usr/bin/env python # # Copyright (c) 2004, 2005 Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # * Neither the name of Google nor the names of its contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # # The sitemap_gen.py script is written in Python 2.2 and released to # the open source community for continuous improvements under the BSD # 2.0 new license, which can be found at: # # http://www.opensource.org/licenses/bsd-license.php # __usage__ = \ """A simple script to automatically produce sitemaps for a webserver, in the Google Sitemap Protocol (GSP). Usage: python sitemap_gen.py --config=config.xml [--help] [--testing] --config=config.xml, specifies config file location --help, displays usage message --testing, specified when user is experimenting """ # Please be careful that all syntax used in this file can be parsed on # Python 1.5 -- this version check is not evaluated until after the # entire file has been parsed. import sys if sys.hexversion < 0x02020000: print 'This script requires Python 2.2 or later.' print 'Currently run with version: %s' % sys.version sys.exit(1) import fnmatch import glob import gzip import md5 import os import re import stat import time import types import urllib import urlparse import xml.sax # True and False were introduced in Python2.2.2 try: testTrue=True del testTrue except NameError: True=1 False=0 # Text encodings ENC_ASCII = 'ASCII' ENC_UTF8 = 'UTF-8' ENC_IDNA = 'IDNA' ENC_ASCII_LIST = ['ASCII', 'US-ASCII', 'US', 'IBM367', 'CP367', 'ISO646-US' 'ISO_646.IRV:1991', 'ISO-IR-6', 'ANSI_X3.4-1968', 'ANSI_X3.4-1986', 'CPASCII' ] ENC_DEFAULT_LIST = ['ISO-8859-1', 'ISO-8859-2', 'ISO-8859-5'] # Available Sitemap types SITEMAP_TYPES = ['web', 'mobile', 'news'] # General Sitemap tags GENERAL_SITEMAP_TAGS = ['loc', 'changefreq', 'priority', 'lastmod'] # News specific tags NEWS_SPECIFIC_TAGS = ['keywords', 'publication_date', 'stock_tickers'] # News Sitemap tags NEWS_SITEMAP_TAGS = GENERAL_SITEMAP_TAGS + NEWS_SPECIFIC_TAGS # Maximum number of urls in each sitemap, before next Sitemap is created MAXURLS_PER_SITEMAP = 50000 # Suffix on a Sitemap index file SITEINDEX_SUFFIX = '_index.xml' # Regular expressions tried for extracting URLs from access logs. ACCESSLOG_CLF_PATTERN = re.compile( r'.+\s+"([^\s]+)\s+([^\s]+)\s+HTTP/\d+\.\d+"\s+200\s+.*' ) # Match patterns for lastmod attributes DATE_PATTERNS = map(re.compile, [ r'^\d\d\d\d$', r'^\d\d\d\d-\d\d$', r'^\d\d\d\d-\d\d-\d\d$', r'^\d\d\d\d-\d\d-\d\dT\d\d:\d\dZ$', r'^\d\d\d\d-\d\d-\d\dT\d\d:\d\d[+-]\d\d:\d\d$', r'^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d+)?Z$', r'^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d+)?[+-]\d\d:\d\d$', ]) # Match patterns for changefreq attributes CHANGEFREQ_PATTERNS = [ 'always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never' ] # XML formats GENERAL_SITEINDEX_HEADER = \ '\n' \ '\n' NEWS_SITEINDEX_HEADER = \ '\n' \ '\n' SITEINDEX_FOOTER = '\n' SITEINDEX_ENTRY = \ ' \n' \ ' %(loc)s\n' \ ' %(lastmod)s\n' \ ' \n' GENERAL_SITEMAP_HEADER = \ '\n' \ '\n' NEWS_SITEMAP_HEADER = \ '\n' \ '\n' SITEMAP_FOOTER = '\n' SITEURL_XML_PREFIX = ' \n' SITEURL_XML_SUFFIX = ' \n' NEWS_TAG_XML_PREFIX = ' \n' NEWS_TAG_XML_SUFFIX = ' \n' # Search engines to notify with the updated sitemaps # # This list is very non-obvious in what's going on. Here's the gist: # Each item in the list is a 6-tuple of items. The first 5 are "almost" # the same as the input arguments to urlparse.urlunsplit(): # 0 - schema # 1 - netloc # 2 - path # 3 - query <-- EXCEPTION: specify a query map rather than a string # 4 - fragment # Additionally, add item 5: # 5 - query attribute that should be set to the new Sitemap URL # Clear as mud, I know. NOTIFICATION_SITES = [ ('http', 'www.google.com', 'webmasters/sitemaps/ping', {}, '', 'sitemap'), ] class Error(Exception): """ Base exception class. In this module we tend not to use our own exception types for very much, but they come in very handy on XML parsing with SAX. """ pass #end class Error class SchemaError(Error): """Failure to process an XML file according to the schema we know.""" pass #end class SchemeError class Encoder: """ Manages wide-character/narrow-character conversions for just about all text that flows into or out of the script. You should always use this class for string coercion, as opposed to letting Python handle coercions automatically. Reason: Python usually assumes ASCII (7-bit) as a default narrow character encoding, which is not the kind of data we generally deal with. General high-level methodologies used in sitemap_gen: [PATHS] File system paths may be wide or narrow, depending on platform. This works fine, just be aware of it and be very careful to not mix them. That is, if you have to pass several file path arguments into a library call, make sure they are all narrow or all wide. This class has MaybeNarrowPath() which should be called on every file system path you deal with. [URLS] URL locations are stored in Narrow form, already escaped. This has the benefit of keeping escaping and encoding as close as possible to the format we read them in. The downside is we may end up with URLs that have intermingled encodings -- the root path may be encoded in one way while the filename is encoded in another. This is obviously wrong, but it should hopefully be an issue hit by very few users. The workaround from the user level (assuming they notice) is to specify a default_encoding parameter in their config file. [OTHER] Other text, such as attributes of the URL class, configuration options, etc, are generally stored in Unicode for simplicity. """ def __init__(self): self._user = None # User-specified default encoding self._learned = [] # Learned default encodings self._widefiles = False # File system can be wide # Can the file system be Unicode? try: self._widefiles = os.path.supports_unicode_filenames except AttributeError: try: self._widefiles = sys.getwindowsversion() == os.VER_PLATFORM_WIN32_NT except AttributeError: pass # Try to guess a working default try: encoding = sys.getfilesystemencoding() if encoding and not (encoding.upper() in ENC_ASCII_LIST): self._learned = [ encoding ] except AttributeError: pass if not self._learned: encoding = sys.getdefaultencoding() if encoding and not (encoding.upper() in ENC_ASCII_LIST): self._learned = [ encoding ] # If we had no guesses, start with some European defaults if not self._learned: self._learned = ENC_DEFAULT_LIST #end def __init__ def SetUserEncoding(self, encoding): self._user = encoding #end def SetUserEncoding def NarrowText(self, text, encoding): """ Narrow a piece of arbitrary text """ if type(text) != types.UnicodeType: return text # Try the passed in preference if encoding: try: result = text.encode(encoding) if not encoding in self._learned: self._learned.append(encoding) return result except UnicodeError: pass except LookupError: output.Warn('Unknown encoding: %s' % encoding) # Try the user preference if self._user: try: return text.encode(self._user) except UnicodeError: pass except LookupError: temp = self._user self._user = None output.Warn('Unknown default_encoding: %s' % temp) # Look through learned defaults, knock any failing ones out of the list while self._learned: try: return text.encode(self._learned[0]) except: del self._learned[0] # When all other defaults are exhausted, use UTF-8 try: return text.encode(ENC_UTF8) except UnicodeError: pass # Something is seriously wrong if we get to here return text.encode(ENC_ASCII, 'ignore') #end def NarrowText def MaybeNarrowPath(self, text): """ Paths may be allowed to stay wide """ if self._widefiles: return text return self.NarrowText(text, None) #end def MaybeNarrowPath def WidenText(self, text, encoding): """ Widen a piece of arbitrary text """ if type(text) != types.StringType: return text # Try the passed in preference if encoding: try: result = unicode(text, encoding) if not encoding in self._learned: self._learned.append(encoding) return result except UnicodeError: pass except LookupError: output.Warn('Unknown encoding: %s' % encoding) # Try the user preference if self._user: try: return unicode(text, self._user) except UnicodeError: pass except LookupError: temp = self._user self._user = None output.Warn('Unknown default_encoding: %s' % temp) # Look through learned defaults, knock any failing ones out of the list while self._learned: try: return unicode(text, self._learned[0]) except: del self._learned[0] # When all other defaults are exhausted, use UTF-8 try: return unicode(text, ENC_UTF8) except UnicodeError: pass # Getting here means it wasn't UTF-8 and we had no working default. # We really don't have anything "right" we can do anymore. output.Warn('Unrecognized encoding in text: %s' % text) if not self._user: output.Warn('You may need to set a default_encoding in your ' 'configuration file.') return text.decode(ENC_ASCII, 'ignore') #end def WidenText #end class Encoder encoder = Encoder() class Output: """ Exposes logging functionality, and tracks how many errors we have thus output. Logging levels should be used as thus: Fatal -- extremely sparingly Error -- config errors, entire blocks of user 'intention' lost Warn -- individual URLs lost Log(,0) -- Un-suppressable text that's not an error Log(,1) -- touched files, major actions Log(,2) -- parsing notes, filtered or duplicated URLs Log(,3) -- each accepted URL """ def __init__(self): self.num_errors = 0 # Count of errors self.num_warns = 0 # Count of warnings self._errors_shown = {} # Shown errors self._warns_shown = {} # Shown warnings self._verbose = 0 # Level of verbosity #end def __init__ def Log(self, text, level): """ Output a blurb of diagnostic text, if the verbose level allows it """ if text: text = encoder.NarrowText(text, None) if self._verbose >= level: print text #end def Log def Warn(self, text): """ Output and count a warning. Suppress duplicate warnings. """ if text: text = encoder.NarrowText(text, None) hash = md5.new(text).digest() if not self._warns_shown.has_key(hash): self._warns_shown[hash] = 1 print '[WARNING] ' + text else: self.Log('(suppressed) [WARNING] ' + text, 3) self.num_warns = self.num_warns + 1 #end def Warn def Error(self, text): """ Output and count an error. Suppress duplicate errors. """ if text: text = encoder.NarrowText(text, None) hash = md5.new(text).digest() if not self._errors_shown.has_key(hash): self._errors_shown[hash] = 1 print '[ERROR] ' + text else: self.Log('(suppressed) [ERROR] ' + text, 3) self.num_errors = self.num_errors + 1 #end def Error def Fatal(self, text): """ Output an error and terminate the program. """ if text: text = encoder.NarrowText(text, None) print '[FATAL] ' + text else: print 'Fatal error.' sys.exit(1) #end def Fatal def SetVerbose(self, level): """ Sets the verbose level. """ try: if type(level) != types.IntType: level = int(level) if (level >= 0) and (level <= 3): self._verbose = level return except ValueError: pass self.Error('Verbose level (%s) must be between 0 and 3 inclusive.' % level) #end def SetVerbose #end class Output output = Output() class URL(object): """ URL is a smart structure grouping together the properties we care about for a single web reference. """ __slots__ = 'loc', 'lastmod', 'changefreq', 'priority' def __init__(self): self.loc = None # URL -- in Narrow characters self.lastmod = None # ISO8601 timestamp of last modify self.changefreq = None # Text term for update frequency self.priority = None # Float between 0 and 1 (inc) #end def __init__ def __cmp__(self, other): if self.loc < other.loc: return -1 if self.loc > other.loc: return 1 return 0 #end def __cmp__ def TrySetAttribute(self, attribute, value): """ Attempt to set the attribute to the value, with a pretty try block around it. """ if attribute == 'loc': self.loc = self.Canonicalize(value) else: try: setattr(self, attribute, value) except AttributeError: output.Warn('Unknown URL attribute: %s' % attribute) #end def TrySetAttribute def IsAbsolute(loc): """ Decide if the URL is absolute or not """ if not loc: return False narrow = encoder.NarrowText(loc, None) (scheme, netloc, path, query, frag) = urlparse.urlsplit(narrow) if (not scheme) or (not netloc): return False return True #end def IsAbsolute IsAbsolute = staticmethod(IsAbsolute) def Canonicalize(loc): """ Do encoding and canonicalization on a URL string """ if not loc: return loc # Let the encoder try to narrow it narrow = encoder.NarrowText(loc, None) # Escape components individually (scheme, netloc, path, query, frag) = urlparse.urlsplit(narrow) unr = '-._~' sub = '!$&\'()*+,;=' netloc = urllib.quote(netloc, unr + sub + '%:@/[]') path = urllib.quote(path, unr + sub + '%:@/') query = urllib.quote(query, unr + sub + '%:@/?') frag = urllib.quote(frag, unr + sub + '%:@/?') # Try built-in IDNA encoding on the netloc try: (ignore, widenetloc, ignore, ignore, ignore) = urlparse.urlsplit(loc) for c in widenetloc: if c >= unichr(128): netloc = widenetloc.encode(ENC_IDNA) netloc = urllib.quote(netloc, unr + sub + '%:@/[]') break except UnicodeError: # urlsplit must have failed, based on implementation differences in the # library. There is not much we can do here, except ignore it. pass except LookupError: output.Warn('An International Domain Name (IDN) is being used, but this ' 'version of Python does not have support for IDNA encoding. ' ' (IDNA support was introduced in Python 2.3) The encoding ' 'we have used instead is wrong and will probably not yield ' 'valid URLs.') bad_netloc = False if '%' in netloc: bad_netloc = True # Put it all back together narrow = urlparse.urlunsplit((scheme, netloc, path, query, frag)) # I let '%' through. Fix any that aren't pre-existing escapes. HEXDIG = '0123456789abcdefABCDEF' list = narrow.split('%') narrow = list[0] del list[0] for item in list: if (len(item) >= 2) and (item[0] in HEXDIG) and (item[1] in HEXDIG): narrow = narrow + '%' + item else: narrow = narrow + '%25' + item # Issue a warning if this is a bad URL if bad_netloc: output.Warn('Invalid characters in the host or domain portion of a URL: ' + narrow) return narrow #end def Canonicalize Canonicalize = staticmethod(Canonicalize) def VerifyDate(self, date, metatag): """Verify the date format is valid""" match = False if date: date = date.upper() for pattern in DATE_PATTERNS: match = pattern.match(date) if match: return True if not match: output.Warn('The value for %s does not appear to be in ISO8601 ' 'format on URL: %s' % (metatag, self.loc)) return False #end of VerifyDate def Validate(self, base_url, allow_fragment): """ Verify the data in this URL is well-formed, and override if not. """ assert type(base_url) == types.StringType # Test (and normalize) the ref if not self.loc: output.Warn('Empty URL') return False if allow_fragment: self.loc = urlparse.urljoin(base_url, self.loc) if not self.loc.startswith(base_url): output.Warn('Discarded URL for not starting with the base_url: %s' % self.loc) self.loc = None return False # Test the lastmod if self.lastmod: if not self.VerifyDate(self.lastmod, "lastmod"): self.lastmod = None # Test the changefreq if self.changefreq: match = False self.changefreq = self.changefreq.lower() for pattern in CHANGEFREQ_PATTERNS: if self.changefreq == pattern: match = True break if not match: output.Warn('Changefreq "%s" is not a valid change frequency on URL ' ': %s' % (self.changefreq, self.loc)) self.changefreq = None # Test the priority if self.priority: priority = -1.0 try: priority = float(self.priority) except ValueError: pass if (priority < 0.0) or (priority > 1.0): output.Warn('Priority "%s" is not a number between 0 and 1 inclusive ' 'on URL: %s' % (self.priority, self.loc)) self.priority = None return True #end def Validate def MakeHash(self): """ Provides a uniform way of hashing URLs """ if not self.loc: return None if self.loc.endswith('/'): return md5.new(self.loc[:-1]).digest() return md5.new(self.loc).digest() #end def MakeHash def Log(self, prefix='URL', level=3): """ Dump the contents, empty or not, to the log. """ out = prefix + ':' for attribute in self.__slots__: value = getattr(self, attribute) if not value: value = '' out = out + (' %s=[%s]' % (attribute, value)) output.Log('%s' % encoder.NarrowText(out, None), level) #end def Log def WriteXML(self, file): """ Dump non-empty contents to the output file, in XML format. """ if not self.loc: return out = SITEURL_XML_PREFIX for attribute in self.__slots__: value = getattr(self, attribute) if value: if type(value) == types.UnicodeType: value = encoder.NarrowText(value, None) elif type(value) != types.StringType: value = str(value) value = xml.sax.saxutils.escape(value) out = out + (' <%s>%s\n' % (attribute, value, attribute)) out = out + SITEURL_XML_SUFFIX file.write(out) #end def WriteXML #end class URL class NewsURL(URL): """ NewsURL is a subclass of URL with News-Sitemap specific properties. """ __slots__ = 'loc', 'lastmod', 'changefreq', 'priority', 'publication_date', \ 'keywords', 'stock_tickers' def __init__(self): URL.__init__(self) self.publication_date = None # ISO8601 timestamp of publication date self.keywords = None # Text keywords self.stock_tickers = None # Text stock #end def __init__ def Validate(self, base_url, allow_fragment): """ Verify the data in this News URL is well-formed, and override if not. """ assert type(base_url) == types.StringType if not URL.Validate(self, base_url, allow_fragment): return False if not URL.VerifyDate(self, self.publication_date, "publication_date"): self.publication_date = None return True #end def Validate def WriteXML(self, file): """ Dump non-empty contents to the output file, in XML format. """ if not self.loc: return out = SITEURL_XML_PREFIX # printed_news_tag indicates if news-specific metatags are present printed_news_tag = False for attribute in self.__slots__: value = getattr(self, attribute) if value: if type(value) == types.UnicodeType: value = encoder.NarrowText(value, None) elif type(value) != types.StringType: value = str(value) value = xml.sax.saxutils.escape(value) if attribute in NEWS_SPECIFIC_TAGS: if not printed_news_tag: printed_news_tag = True out = out + NEWS_TAG_XML_PREFIX out = out + (' %s\n' % (attribute, value, attribute)) else: out = out + (' <%s>%s\n' % (attribute, value, attribute)) if printed_news_tag: out = out + NEWS_TAG_XML_SUFFIX out = out + SITEURL_XML_SUFFIX file.write(out) #end def WriteXML #end class NewsURL class Filter: """ A filter on the stream of URLs we find. A filter is, in essence, a wildcard applied to the stream. You can think of this as an operator that returns a tri-state when given a URL: True -- this URL is to be included in the sitemap None -- this URL is undecided False -- this URL is to be dropped from the sitemap """ def __init__(self, attributes): self._wildcard = None # Pattern for wildcard match self._regexp = None # Pattern for regexp match self._pass = False # "Drop" filter vs. "Pass" filter if not ValidateAttributes('FILTER', attributes, ('pattern', 'type', 'action')): return # Check error count on the way in num_errors = output.num_errors # Fetch the attributes pattern = attributes.get('pattern') type = attributes.get('type', 'wildcard') action = attributes.get('action', 'drop') if type: type = type.lower() if action: action = action.lower() # Verify the attributes if not pattern: output.Error('On a filter you must specify a "pattern" to match') elif (not type) or ((type != 'wildcard') and (type != 'regexp')): output.Error('On a filter you must specify either \'type="wildcard"\' ' 'or \'type="regexp"\'') elif (action != 'pass') and (action != 'drop'): output.Error('If you specify a filter action, it must be either ' '\'action="pass"\' or \'action="drop"\'') # Set the rule if action == 'drop': self._pass = False elif action == 'pass': self._pass = True if type == 'wildcard': self._wildcard = pattern elif type == 'regexp': try: self._regexp = re.compile(pattern) except re.error: output.Error('Bad regular expression: %s' % pattern) # Log the final results iff we didn't add any errors if num_errors == output.num_errors: output.Log('Filter: %s any URL that matches %s "%s"' % (action, type, pattern), 2) #end def __init__ def Apply(self, url): """ Process the URL, as above. """ if (not url) or (not url.loc): return None if self._wildcard: if fnmatch.fnmatchcase(url.loc, self._wildcard): return self._pass return None if self._regexp: if self._regexp.search(url.loc): return self._pass return None assert False # unreachable #end def Apply #end class Filter class InputURL: """ Each Input class knows how to yield a set of URLs from a data source. This one handles a single URL, manually specified in the config file. """ def __init__(self, attributes): self._url = None # The lonely URL if not ValidateAttributes('URL', attributes, ('href', 'lastmod', 'changefreq', 'priority')): return url = URL() for attr in attributes.keys(): if attr == 'href': url.TrySetAttribute('loc', attributes[attr]) else: url.TrySetAttribute(attr, attributes[attr]) if not url.loc: output.Error('Url entries must have an href attribute.') return self._url = url output.Log('Input: From URL "%s"' % self._url.loc, 2) #end def __init__ def ProduceURLs(self, consumer): """ Produces URLs from our data source, hands them in to the consumer. """ if self._url: consumer(self._url, True) #end def ProduceURLs #end class InputURL class InputURLList: """ Each Input class knows how to yield a set of URLs from a data source. This one handles a text file with a list of URLs """ def __init__(self, attributes): self._path = None # The file path self._encoding = None # Encoding of that file if not ValidateAttributes('URLLIST', attributes, ('path', 'encoding')): return self._path = attributes.get('path') self._encoding = attributes.get('encoding', ENC_UTF8) if self._path: self._path = encoder.MaybeNarrowPath(self._path) if os.path.isfile(self._path): output.Log('Input: From URLLIST "%s"' % self._path, 2) else: output.Error('Can not locate file: %s' % self._path) self._path = None else: output.Error('Urllist entries must have a "path" attribute.') #end def __init__ def ProduceURLs(self, consumer): """ Produces URLs from our data source, hands them in to the consumer. """ # Open the file (frame, file) = OpenFileForRead(self._path, 'URLLIST') if not file: return # Iterate lines linenum = 0 for line in file.readlines(): linenum = linenum + 1 # Strip comments and empty lines if self._encoding: line = encoder.WidenText(line, self._encoding) line = line.strip() if (not line) or line[0] == '#': continue # Split the line on space url = URL() cols = line.split(' ') for i in range(0,len(cols)): cols[i] = cols[i].strip() url.TrySetAttribute('loc', cols[0]) # Extract attributes from the other columns for i in range(1,len(cols)): if cols[i]: try: (attr_name, attr_val) = cols[i].split('=', 1) url.TrySetAttribute(attr_name, attr_val) except ValueError: output.Warn('Line %d: Unable to parse attribute: %s' % (linenum, cols[i])) # Pass it on consumer(url, False) file.close() if frame: frame.close() #end def ProduceURLs #end class InputURLList class InputNewsURLList: """ Each Input class knows how to yield a set of URLs from a data source. This one handles a text file with a list of News URLs and their metadata """ def __init__(self, attributes): self._path = None # The file path self._encoding = None # Encoding of that file self._tag_order = [] # Order of URL metadata if not ValidateAttributes('URLLIST', attributes, ('path', 'encoding', \ 'tag_order')): return self._path = attributes.get('path') self._encoding = attributes.get('encoding', ENC_UTF8) self._tag_order = attributes.get('tag_order') if self._path: self._path = encoder.MaybeNarrowPath(self._path) if os.path.isfile(self._path): output.Log('Input: From URLLIST "%s"' % self._path, 2) else: output.Error('Can not locate file: %s' % self._path) self._path = None else: output.Error('Urllist entries must have a "path" attribute.') # parse tag_order into an array # tag_order_ascii created for more readable logging tag_order_ascii = [] if self._tag_order: self._tag_order = self._tag_order.split(",") for i in range(0, len(self._tag_order)): element = self._tag_order[i].strip().lower() self._tag_order[i]= element tag_order_ascii.append(element.encode('ascii')) output.Log('Input: From URLLIST tag order is "%s"' % tag_order_ascii, 0) else: output.Error('News Urllist configuration file must contain tag_order ' 'to define Sitemap metatags.') # verify all tag_order inputs are valid tag_order_dict = {} for tag in self._tag_order: tag_order_dict[tag] = "" if not ValidateAttributes('URLLIST', tag_order_dict, \ NEWS_SITEMAP_TAGS): return # loc tag must be present loc_tag = False for tag in self._tag_order: if tag == 'loc': loc_tag = True break if not loc_tag: output.Error('News Urllist tag_order in configuration file ' 'does not contain "loc" value: %s' % tag_order_ascii) #end def __init__ def ProduceURLs(self, consumer): """ Produces URLs from our data source, hands them in to the consumer. """ # Open the file (frame, file) = OpenFileForRead(self._path, 'URLLIST') if not file: return # Iterate lines linenum = 0 for line in file.readlines(): linenum = linenum + 1 # Strip comments and empty lines if self._encoding: line = encoder.WidenText(line, self._encoding) line = line.strip() if (not line) or line[0] == '#': continue # Split the line on tabs url = NewsURL() cols = line.split('\t') for i in range(0,len(cols)): cols[i] = cols[i].strip() for i in range(0,len(cols)): if cols[i]: attr_value = cols[i] if i < len(self._tag_order): attr_name = self._tag_order[i] try: url.TrySetAttribute(attr_name, attr_value) except ValueError: output.Warn('Line %d: Unable to parse attribute: %s' % (linenum, cols[i])) # Pass it on consumer(url, False) file.close() if frame: frame.close() #end def ProduceURLs #end class InputNewsURLList class InputDirectory: """ Each Input class knows how to yield a set of URLs from a data source. This one handles a directory that acts as base for walking the filesystem. """ def __init__(self, attributes, base_url): self._path = None # The directory self._url = None # The URL equivalent self._default_file = None self._remove_empty_directories = False if not ValidateAttributes('DIRECTORY', attributes, ('path', 'url', 'default_file', 'remove_empty_directories')): return # Prep the path -- it MUST end in a sep path = attributes.get('path') if not path: output.Error('Directory entries must have both "path" and "url" ' 'attributes') return path = encoder.MaybeNarrowPath(path) if not path.endswith(os.sep): path = path + os.sep if not os.path.isdir(path): output.Error('Can not locate directory: %s' % path) return # Prep the URL -- it MUST end in a sep url = attributes.get('url') if not url: output.Error('Directory entries must have both "path" and "url" ' 'attributes') return url = URL.Canonicalize(url) if not url.endswith('/'): url = url + '/' if not url.startswith(base_url): url = urlparse.urljoin(base_url, url) if not url.startswith(base_url): output.Error('The directory URL "%s" is not relative to the ' 'base_url: %s' % (url, base_url)) return # Prep the default file -- it MUST be just a filename file = attributes.get('default_file') if file: file = encoder.MaybeNarrowPath(file) if os.sep in file: output.Error('The default_file "%s" can not include path information.' % file) file = None # Prep the remove_empty_directories -- default is false remove_empty_directories = attributes.get('remove_empty_directories') if remove_empty_directories: if (remove_empty_directories == '1') or \ (remove_empty_directories.lower() == 'true'): remove_empty_directories = True elif (remove_empty_directories == '0') or \ (remove_empty_directories.lower() == 'false'): remove_empty_directories = False # otherwise the user set a non-default value else: output.Error('Configuration file remove_empty_directories ' 'value is not recognized. Value must be true or false.') return else: remove_empty_directories = False self._path = path self._url = url self._default_file = file self._remove_empty_directories = remove_empty_directories if file: output.Log('Input: From DIRECTORY "%s" (%s) with default file "%s"' % (path, url, file), 2) else: output.Log('Input: From DIRECTORY "%s" (%s) with no default file' % (path, url), 2) #end def __init__ def ProduceURLs(self, consumer): """ Produces URLs from our data source, hands them in to the consumer. """ if not self._path: return root_path = self._path root_URL = self._url root_file = self._default_file remove_empty_directories = self._remove_empty_directories def HasReadPermissions(path): """ Verifies a given path has read permissions. """ stat_info = os.stat(path) mode = stat_info[stat.ST_MODE] if mode & stat.S_IREAD: return True else: return None def PerFile(dirpath, name): """ Called once per file. Note that 'name' will occasionally be None -- for a directory itself """ # Pull a timestamp url = URL() isdir = False try: if name: path = os.path.join(dirpath, name) else: path = dirpath isdir = os.path.isdir(path) time = None if isdir and root_file: file = os.path.join(path, root_file) try: time = os.stat(file)[stat.ST_MTIME]; except OSError: pass if not time: time = os.stat(path)[stat.ST_MTIME]; url.lastmod = TimestampISO8601(time) except OSError: pass except ValueError: pass # Build a URL middle = dirpath[len(root_path):] if os.sep != '/': middle = middle.replace(os.sep, '/') if middle: middle = middle + '/' if name: middle = middle + name if isdir: middle = middle + '/' url.TrySetAttribute('loc', root_URL + encoder.WidenText(middle, None)) # Suppress default files. (All the way down here so we can log it.) if name and (root_file == name): url.Log(prefix='IGNORED (default file)', level=2) return # Suppress directories when remove_empty_directories="true" try: if isdir: if HasReadPermissions(path): if remove_empty_directories == 'true' and \ len(os.listdir(path)) == 0: output.Log('IGNORED empty directory %s' % str(path), level=1) return elif path == self._path: output.Error('IGNORED configuration file directory input %s due ' 'to file permissions' % self._path) else: output.Log('IGNORED files within directory %s due to file ' 'permissions' % str(path), level=0) except OSError: pass except ValueError: pass consumer(url, False) #end def PerFile def PerDirectory(ignore, dirpath, namelist): """ Called once per directory with a list of all the contained files/dirs. """ ignore = ignore # Avoid warnings of an unused parameter if not dirpath.startswith(root_path): output.Warn('Unable to decide what the root path is for directory: ' '%s' % dirpath) return for name in namelist: PerFile(dirpath, name) #end def PerDirectory output.Log('Walking DIRECTORY "%s"' % self._path, 1) PerFile(self._path, None) os.path.walk(self._path, PerDirectory, None) #end def ProduceURLs #end class InputDirectory class InputAccessLog: """ Each Input class knows how to yield a set of URLs from a data source. This one handles access logs. It's non-trivial in that we want to auto-detect log files in the Common Logfile Format (as used by Apache, for instance) and the Extended Log File Format (as used by IIS, for instance). """ def __init__(self, attributes): self._path = None # The file path self._encoding = None # Encoding of that file self._is_elf = False # Extended Log File Format? self._is_clf = False # Common Logfile Format? self._elf_status = -1 # ELF field: '200' self._elf_method = -1 # ELF field: 'HEAD' self._elf_uri = -1 # ELF field: '/foo?bar=1' self._elf_urifrag1 = -1 # ELF field: '/foo' self._elf_urifrag2 = -1 # ELF field: 'bar=1' if not ValidateAttributes('ACCESSLOG', attributes, ('path', 'encoding')): return self._path = attributes.get('path') self._encoding = attributes.get('encoding', ENC_UTF8) if self._path: self._path = encoder.MaybeNarrowPath(self._path) if os.path.isfile(self._path): output.Log('Input: From ACCESSLOG "%s"' % self._path, 2) else: output.Error('Can not locate file: %s' % self._path) self._path = None else: output.Error('Accesslog entries must have a "path" attribute.') #end def __init__ def RecognizeELFLine(self, line): """ Recognize the Fields directive that heads an ELF file """ if not line.startswith('#Fields:'): return False fields = line.split(' ') del fields[0] for i in range(0, len(fields)): field = fields[i].strip() if field == 'sc-status': self._elf_status = i elif field == 'cs-method': self._elf_method = i elif field == 'cs-uri': self._elf_uri = i elif field == 'cs-uri-stem': self._elf_urifrag1 = i elif field == 'cs-uri-query': self._elf_urifrag2 = i output.Log('Recognized an Extended Log File Format file.', 2) return True #end def RecognizeELFLine def GetELFLine(self, line): """ Fetch the requested URL from an ELF line """ fields = line.split(' ') count = len(fields) # Verify status was Ok if self._elf_status >= 0: if self._elf_status >= count: return None if not fields[self._elf_status].strip() == '200': return None # Verify method was HEAD or GET if self._elf_method >= 0: if self._elf_method >= count: return None if not fields[self._elf_method].strip() in ('HEAD', 'GET'): return None # Pull the full URL if we can if self._elf_uri >= 0: if self._elf_uri >= count: return None url = fields[self._elf_uri].strip() if url != '-': return url # Put together a fragmentary URL if self._elf_urifrag1 >= 0: if self._elf_urifrag1 >= count or self._elf_urifrag2 >= count: return None urlfrag1 = fields[self._elf_urifrag1].strip() urlfrag2 = None if self._elf_urifrag2 >= 0: urlfrag2 = fields[self._elf_urifrag2] if urlfrag1 and (urlfrag1 != '-'): if urlfrag2 and (urlfrag2 != '-'): urlfrag1 = urlfrag1 + '?' + urlfrag2 return urlfrag1 return None #end def GetELFLine def RecognizeCLFLine(self, line): """ Try to tokenize a logfile line according to CLF pattern and see if it works. """ match = ACCESSLOG_CLF_PATTERN.match(line) recognize = match and (match.group(1) in ('HEAD', 'GET')) if recognize: output.Log('Recognized a Common Logfile Format file.', 2) return recognize #end def RecognizeCLFLine def GetCLFLine(self, line): """ Fetch the requested URL from a CLF line """ match = ACCESSLOG_CLF_PATTERN.match(line) if match: request = match.group(1) if request in ('HEAD', 'GET'): return match.group(2) return None #end def GetCLFLine def ProduceURLs(self, consumer): """ Produces URLs from our data source, hands them in to the consumer. """ # Open the file (frame, file) = OpenFileForRead(self._path, 'ACCESSLOG') if not file: return # Iterate lines for line in file.readlines(): if self._encoding: line = encoder.WidenText(line, self._encoding) line = line.strip() # If we don't know the format yet, try them both if (not self._is_clf) and (not self._is_elf): self._is_elf = self.RecognizeELFLine(line) self._is_clf = self.RecognizeCLFLine(line) # Digest the line match = None if self._is_elf: match = self.GetELFLine(line) elif self._is_clf: match = self.GetCLFLine(line) if not match: continue # Pass it on url = URL() url.TrySetAttribute('loc', match) consumer(url, True) file.close() if frame: frame.close() #end def ProduceURLs #end class InputAccessLog class FilePathGenerator: """ This class generates filenames in a series, upon request. You can request any iteration number at any time, you don't have to go in order. Example of iterations for '/path/foo.xml.gz': 0 --> /path/foo.xml.gz 1 --> /path/foo1.xml.gz 2 --> /path/foo2.xml.gz _index.xml --> /path/foo_index.xml """ def __init__(self): self.is_gzip = False # Is this a GZIP file? self._path = None # '/path/' self._prefix = None # 'foo' self._suffix = None # '.xml.gz' #end def __init__ def Preload(self, path): """ Splits up a path into forms ready for recombination. """ path = encoder.MaybeNarrowPath(path) # Get down to a base name path = os.path.normpath(path) base = os.path.basename(path).lower() if not base: output.Error('Couldn\'t parse the file path: %s' % path) return False lenbase = len(base) # Recognize extension lensuffix = 0 compare_suffix = ['.xml', '.xml.gz', '.gz'] for suffix in compare_suffix: if base.endswith(suffix): lensuffix = len(suffix) break if not lensuffix: output.Error('The path "%s" doesn\'t end in a supported file ' 'extension.' % path) return False self.is_gzip = suffix.endswith('.gz') # Split the original path lenpath = len(path) self._path = path[:lenpath-lenbase] self._prefix = path[lenpath-lenbase:lenpath-lensuffix] self._suffix = path[lenpath-lensuffix:] return True #end def Preload def GeneratePath(self, instance): """ Generates the iterations, as described above. """ prefix = self._path + self._prefix if type(instance) == types.IntType: if instance: return '%s%d%s' % (prefix, instance, self._suffix) return prefix + self._suffix return prefix + instance #end def GeneratePath def GenerateURL(self, instance, root_url): """ Generates iterations, but as a URL instead of a path. """ prefix = root_url + self._prefix retval = None if type(instance) == types.IntType: if instance: retval = '%s%d%s' % (prefix, instance, self._suffix) else: retval = prefix + self._suffix else: retval = prefix + instance return URL.Canonicalize(retval) #end def GenerateURL def GenerateWildURL(self, root_url): """ Generates a wildcard that should match all our iterations """ prefix = URL.Canonicalize(root_url + self._prefix) temp = URL.Canonicalize(prefix + self._suffix) suffix = temp[len(prefix):] return prefix + '*' + suffix #end def GenerateURL #end class FilePathGenerator class PerURLStatistics: """ Keep track of some simple per-URL statistics, like file extension. """ def __init__(self): self._extensions = {} # Count of extension instances #end def __init__ def Consume(self, url): """ Log some stats for the URL. At the moment, that means extension. """ if url and url.loc: (scheme, netloc, path, query, frag) = urlparse.urlsplit(url.loc) if not path: return # Recognize directories if path.endswith('/'): if self._extensions.has_key('/'): self._extensions['/'] = self._extensions['/'] + 1 else: self._extensions['/'] = 1 return # Strip to a filename i = path.rfind('/') if i >= 0: assert i < len(path) path = path[i:] # Find extension i = path.rfind('.') if i > 0: assert i < len(path) ext = path[i:].lower() if self._extensions.has_key(ext): self._extensions[ext] = self._extensions[ext] + 1 else: self._extensions[ext] = 1 else: if self._extensions.has_key('(no extension)'): self._extensions['(no extension)'] = self._extensions[ '(no extension)'] + 1 else: self._extensions['(no extension)'] = 1 #end def Consume def Log(self): """ Dump out stats to the output. """ if len(self._extensions): output.Log('Count of file extensions on URLs:', 1) set = self._extensions.keys() set.sort() for ext in set: output.Log(' %7d %s' % (self._extensions[ext], ext), 1) #end def Log class Sitemap(xml.sax.handler.ContentHandler): """ This is the big workhorse class that processes your inputs and spits out sitemap files. It is built as a SAX handler for set up purposes. That is, it processes an XML stream to bring itself up. """ def __init__(self, suppress_notify): xml.sax.handler.ContentHandler.__init__(self) self._filters = [] # Filter objects self._inputs = [] # Input objects self._urls = {} # Maps URLs to count of dups self._set = [] # Current set of URLs self._filegen = None # Path generator for output files self._wildurl1 = None # Sitemap URLs to filter out self._wildurl2 = None # Sitemap URLs to filter out self._sitemaps = 0 # Number of output files # We init _dup_max to 2 so the default priority is 0.5 instead of 1.0 self._dup_max = 2 # Max number of duplicate URLs self._stat = PerURLStatistics() # Some simple stats self._in_site = False # SAX: are we in a Site node? self._in_Site_ever = False # SAX: were we ever in a Site? self._default_enc = None # Best encoding to try on URLs self._base_url = None # Prefix to all valid URLs self._store_into = None # Output filepath self._sitemap_type = None # Sitemap type (web, mobile or news) self._suppress = suppress_notify # Suppress notify of servers #end def __init__ def ValidateBasicConfig(self): """ Verifies (and cleans up) the basic user-configurable options. """ all_good = True if self._default_enc: encoder.SetUserEncoding(self._default_enc) # Canonicalize the base_url if all_good and not self._base_url: output.Error('A site needs a "base_url" attribute.') all_good = False if all_good and not URL.IsAbsolute(self._base_url): output.Error('The "base_url" must be absolute, not relative: %s' % self._base_url) all_good = False if all_good: self._base_url = URL.Canonicalize(self._base_url) if not self._base_url.endswith('/'): self._base_url = self._base_url + '/' output.Log('BaseURL is set to: %s' % self._base_url, 2) # Load store_into into a generator if all_good: if self._store_into: self._filegen = FilePathGenerator() if not self._filegen.Preload(self._store_into): all_good = False else: output.Error('A site needs a "store_into" attribute.') all_good = False # Ask the generator for patterns on what its output will look like if all_good: self._wildurl1 = self._filegen.GenerateWildURL(self._base_url) self._wildurl2 = self._filegen.GenerateURL(SITEINDEX_SUFFIX, self._base_url) # Unify various forms of False if all_good: if self._suppress: if (type(self._suppress) == types.StringType) or (type(self._suppress) == types.UnicodeType): if (self._suppress == '0') or (self._suppress.lower() == 'false'): self._suppress = False # Clean up the sitemap_type if all_good: match = False # If sitemap_type is not specified, default to web sitemap if not self._sitemap_type: self._sitemap_type = 'web' else: self._sitemap_type = self._sitemap_type.lower() for pattern in SITEMAP_TYPES: if self._sitemap_type == pattern: match = True break if not match: output.Error('The "sitemap_type" value must be "web", "mobile" ' 'or "news": %s' % self._sitemap_type) all_good = False output.Log('The Sitemap type is %s Sitemap.' % \ self._sitemap_type.upper(), 0) # Done if not all_good: output.Log('See "example_config.xml" for more information.', 0) return all_good #end def ValidateBasicConfig def Generate(self): """ Run over all the Inputs and ask them to Produce """ # Run the inputs for input in self._inputs: input.ProduceURLs(self.ConsumeURL) # Do last flushes if len(self._set): self.FlushSet() if not self._sitemaps: output.Warn('No URLs were recorded, writing an empty sitemap.') self.FlushSet() # Write an index as needed if self._sitemaps > 1: self.WriteIndex() # Notify self.NotifySearch() # Dump stats self._stat.Log() #end def Generate def ConsumeURL(self, url, allow_fragment): """ All per-URL processing comes together here, regardless of Input. Here we run filters, remove duplicates, spill to disk as needed, etc. """ if not url: return # Validate if not url.Validate(self._base_url, allow_fragment): return # Run filters accept = None for filter in self._filters: accept = filter.Apply(url) if accept != None: break if not (accept or (accept == None)): url.Log(prefix='FILTERED', level=2) return # Ignore our out output URLs if fnmatch.fnmatchcase(url.loc, self._wildurl1) or fnmatch.fnmatchcase( url.loc, self._wildurl2): url.Log(prefix='IGNORED (output file)', level=2) return # Note the sighting hash = url.MakeHash() if self._urls.has_key(hash): dup = self._urls[hash] if dup > 0: dup = dup + 1 self._urls[hash] = dup if self._dup_max < dup: self._dup_max = dup url.Log(prefix='DUPLICATE') return # Acceptance -- add to set self._urls[hash] = 1 self._set.append(url) self._stat.Consume(url) url.Log() # Flush the set if needed if len(self._set) >= MAXURLS_PER_SITEMAP: self.FlushSet() #end def ConsumeURL def FlushSet(self): """ Flush the current set of URLs to the output. This is a little slow because we like to sort them all and normalize the priorities before dumping. """ # Determine what Sitemap header to use (News or General) if self._sitemap_type == 'news': sitemap_header = NEWS_SITEMAP_HEADER else: sitemap_header = GENERAL_SITEMAP_HEADER # Sort and normalize output.Log('Sorting and normalizing collected URLs.', 1) self._set.sort() for url in self._set: hash = url.MakeHash() dup = self._urls[hash] if dup > 0: self._urls[hash] = -1 if not url.priority: url.priority = '%.4f' % (float(dup) / float(self._dup_max)) # Get the filename we're going to write to filename = self._filegen.GeneratePath(self._sitemaps) if not filename: output.Fatal('Unexpected: Couldn\'t generate output filename.') self._sitemaps = self._sitemaps + 1 output.Log('Writing Sitemap file "%s" with %d URLs' % (filename, len(self._set)), 1) # Write to it frame = None file = None try: if self._filegen.is_gzip: basename = os.path.basename(filename); frame = open(filename, 'wb') file = gzip.GzipFile(fileobj=frame, filename=basename, mode='wt') else: file = open(filename, 'wt') file.write(sitemap_header) for url in self._set: url.WriteXML(file) file.write(SITEMAP_FOOTER) file.close() if frame: frame.close() frame = None file = None except IOError: output.Fatal('Couldn\'t write out to file: %s' % filename) os.chmod(filename, 0644) # Flush self._set = [] #end def FlushSet def WriteIndex(self): """ Write the master index of all Sitemap files """ # Make a filename filename = self._filegen.GeneratePath(SITEINDEX_SUFFIX) if not filename: output.Fatal('Unexpected: Couldn\'t generate output index filename.') output.Log('Writing index file "%s" with %d Sitemaps' % (filename, self._sitemaps), 1) # Determine what Sitemap index header to use (News or General) if self._sitemap_type == 'news': sitemap_index_header = NEWS_SITEMAP_HEADER else: sitemap__index_header = GENERAL_SITEMAP_HEADER # Make a lastmod time lastmod = TimestampISO8601(time.time()) # Write to it try: fd = open(filename, 'wt') fd.write(sitemap_index_header) for mapnumber in range(0,self._sitemaps): # Write the entry mapurl = self._filegen.GenerateURL(mapnumber, self._base_url) mapattributes = { 'loc' : mapurl, 'lastmod' : lastmod } fd.write(SITEINDEX_ENTRY % mapattributes) fd.write(SITEINDEX_FOOTER) fd.close() fd = None except IOError: output.Fatal('Couldn\'t write out to file: %s' % filename) os.chmod(filename, 0644) #end def WriteIndex def NotifySearch(self): """ Send notification of the new Sitemap(s) to the search engines. """ if self._suppress: output.Log('Search engine notification is suppressed.', 1) return output.Log('Notifying search engines.', 1) # Override the urllib's opener class with one that doesn't ignore 404s class ExceptionURLopener(urllib.FancyURLopener): def http_error_default(self, url, fp, errcode, errmsg, headers): output.Log('HTTP error %d: %s' % (errcode, errmsg), 2) raise IOError #end def http_error_default #end class ExceptionURLOpener old_opener = urllib._urlopener urllib._urlopener = ExceptionURLopener() # Build the URL we want to send in if self._sitemaps > 1: url = self._filegen.GenerateURL(SITEINDEX_SUFFIX, self._base_url) else: url = self._filegen.GenerateURL(0, self._base_url) # Test if we can hit it ourselves try: u = urllib.urlopen(url) u.close() except IOError: output.Error('When attempting to access our generated Sitemap at the ' 'following URL:\n %s\n we failed to read it. Please ' 'verify the store_into path you specified in\n' ' your configuration file is web-accessable. Consult ' 'the FAQ for more\n information.' % url) output.Warn('Proceeding to notify with an unverifyable URL.') # Cycle through notifications # To understand this, see the comment near the NOTIFICATION_SITES comment for ping in NOTIFICATION_SITES: query_map = ping[3] query_attr = ping[5] query_map[query_attr] = url query = urllib.urlencode(query_map) notify = urlparse.urlunsplit((ping[0], ping[1], ping[2], query, ping[4])) # Send the notification output.Log('Notifying: %s' % ping[1], 0) output.Log('Notification URL: %s' % notify, 2) try: u = urllib.urlopen(notify) u.read() u.close() except IOError: output.Warn('Cannot contact: %s' % ping[1]) if old_opener: urllib._urlopener = old_opener #end def NotifySearch def startElement(self, tag, attributes): """ SAX processing, called per node in the config stream. """ if tag == 'site': if self._in_site: output.Error('Can not nest Site entries in the configuration.') else: self._in_site = True if not ValidateAttributes('SITE', attributes, ('verbose', 'default_encoding', 'base_url', 'store_into', 'suppress_search_engine_notify', 'sitemap_type')): return verbose = attributes.get('verbose', 0) if verbose: output.SetVerbose(verbose) self._default_enc = attributes.get('default_encoding') self._base_url = attributes.get('base_url') self._store_into = attributes.get('store_into') self._sitemap_type= attributes.get('sitemap_type') if not self._suppress: self._suppress = attributes.get('suppress_search_engine_notify', False) self.ValidateBasicConfig() elif tag == 'filter': self._filters.append(Filter(attributes)) elif tag == 'url': print type(attributes) self._inputs.append(InputURL(attributes)) elif tag == 'urllist': for attributeset in ExpandPathAttribute(attributes, 'path'): if self._sitemap_type == 'news': self._inputs.append(InputNewsURLList(attributeset)) else: self._inputs.append(InputURLList(attributeset)) elif tag == 'directory': self._inputs.append(InputDirectory(attributes, self._base_url)) elif tag == 'accesslog': for attributeset in ExpandPathAttribute(attributes, 'path'): self._inputs.append(InputAccessLog(attributeset)) else: output.Error('Unrecognized tag in the configuration: %s' % tag) #end def startElement def endElement(self, tag): """ SAX processing, called per node in the config stream. """ if tag == 'site': assert self._in_site self._in_site = False self._in_site_ever = True #end def endElement def endDocument(self): """ End of SAX, verify we can proceed. """ if not self._in_site_ever: output.Error('The configuration must specify a "site" element.') else: if not self._inputs: output.Warn('There were no inputs to generate a sitemap from.') #end def endDocument #end class Sitemap def ValidateAttributes(tag, attributes, goodattributes): """ Makes sure 'attributes' does not contain any attribute not listed in 'goodattributes' """ all_good = True for attr in attributes.keys(): if not attr in goodattributes: output.Error('Unknown %s attribute: %s' % (tag, attr)) all_good = False return all_good #end def ValidateAttributes def ExpandPathAttribute(src, attrib): """ Given a dictionary of attributes, return a list of dictionaries with all the same attributes except for the one named attrib. That one, we treat as a file path and expand into all its possible variations. """ # Do the path expansion. On any error, just return the source dictionary. path = src.get(attrib) if not path: return [src] path = encoder.MaybeNarrowPath(path); pathlist = glob.glob(path) if not pathlist: return [src] # If this isn't actually a dictionary, make it one if type(src) != types.DictionaryType: tmp = {} for key in src.keys(): tmp[key] = src[key] src = tmp # Create N new dictionaries retval = [] for path in pathlist: dst = src.copy() dst[attrib] = path retval.append(dst) return retval #end def ExpandPathAttribute def OpenFileForRead(path, logtext): """ Opens a text file, be it GZip or plain """ frame = None file = None if not path: return (frame, file) try: if path.endswith('.gz'): frame = open(path, 'rb') file = gzip.GzipFile(fileobj=frame, mode='rt') else: file = open(path, 'rt') if logtext: output.Log('Opened %s file: %s' % (logtext, path), 1) else: output.Log('Opened file: %s' % path, 1) except IOError: output.Error('Can not open file: %s' % path) return (frame, file) #end def OpenFileForRead def TimestampISO8601(t): """Seconds since epoch (1970-01-01) --> ISO 8601 time string.""" return time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(t)) #end def TimestampISO8601 def CreateSitemapFromFile(configpath, suppress_notify): """ Sets up a new Sitemap object from the specified configuration file. """ # Remember error count on the way in num_errors = output.num_errors # Rev up SAX to parse the config sitemap = Sitemap(suppress_notify) try: output.Log('Reading configuration file: %s' % configpath, 0) xml.sax.parse(configpath, sitemap) except IOError: output.Error('Cannot read configuration file: %s' % configpath) except xml.sax._exceptions.SAXParseException, e: output.Error('XML error in the config file (line %d, column %d): %s' % (e._linenum, e._colnum, e.getMessage())) except xml.sax._exceptions.SAXReaderNotAvailable: output.Error('Some installs of Python 2.2 did not include complete support' ' for XML.\n Please try upgrading your version of Python' ' and re-running the script.') # If we added any errors, return no sitemap if num_errors == output.num_errors: return sitemap return None #end def CreateSitemapFromFile def ProcessCommandFlags(args): """ Parse command line flags per specified usage, pick off key, value pairs All flags of type "--key=value" will be processed as __flags[key] = value, "--option" will be processed as __flags[option] = option """ flags = {} rkeyval = '--(?P\S*)[=](?P\S*)' # --key=val roption = '--(?P