From jython-checkins at python.org Sun Apr 1 14:36:43 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 14:36:43 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fixing_a_minor_build_problem?= =?utf8?q?=2E?= Message-ID: http://hg.python.org/jython/rev/ecd7e472749e changeset: 6514:ecd7e472749e user: Alan Kennedy date: Sun Apr 01 13:35:17 2012 +0100 summary: Fixing a minor build problem. files: build.xml | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/build.xml b/build.xml --- a/build.xml +++ b/build.xml @@ -631,7 +631,7 @@ - + -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 17:22:16 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 17:22:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Upgrading_SocketServer_to_2?= =?utf8?q?=2E7=2E_Step_3=3A_Add_jython_specific_customisations=2E?= Message-ID: http://hg.python.org/jython/rev/6437b9f366f8 changeset: 6517:6437b9f366f8 user: Alan Kennedy date: Sun Apr 01 14:15:30 2012 +0100 summary: Upgrading SocketServer to 2.7. Step 3: Add jython specific customisations. files: Lib/SocketServer.py | 13 ++++++++++--- Lib/test/test_socketserver.py | 8 ++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py --- a/Lib/SocketServer.py +++ b/Lib/SocketServer.py @@ -138,6 +138,10 @@ except ImportError: import dummy_threading as threading +select_fn = select.select +if sys.platform.startswith('java'): + select_fn = select.cpython_compatible_select + __all__ = ["TCPServer","UDPServer","ForkingUDPServer","ForkingTCPServer", "ThreadingUDPServer","ThreadingTCPServer","BaseRequestHandler", "StreamRequestHandler","DatagramRequestHandler", @@ -222,7 +226,7 @@ # connecting to the socket to wake this up instead of # polling. Polling reduces our responsiveness to a # shutdown request and wastes cpu at all other times. - r, w, e = select.select([self], [], [], poll_interval) + r, w, e = select_fn([self], [], [], poll_interval) if self in r: self._handle_request_noblock() finally: @@ -262,7 +266,7 @@ timeout = self.timeout elif self.timeout is not None: timeout = min(timeout, self.timeout) - fd_sets = select.select([self], [], [], timeout) + fd_sets = select_fn([self], [], [], timeout) if not fd_sets[0]: self.handle_timeout() return @@ -271,7 +275,7 @@ def _handle_request_noblock(self): """Handle one request, without blocking. - I assume that select.select has returned that the socket is + I assume that select_fn has returned that the socket is readable before this function was called, so there should be no risk of blocking in get_request(). """ @@ -426,6 +430,9 @@ """ self.socket.listen(self.request_queue_size) + # Adding a second call to getsockname() because of this issue + # http://wiki.python.org/jython/NewSocketModule#Deferredsocketcreationonjython + self.server_address = self.socket.getsockname() def server_close(self): """Called to clean-up the server. diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py --- a/Lib/test/test_socketserver.py +++ b/Lib/test/test_socketserver.py @@ -29,11 +29,15 @@ def signal_alarm(n): """Call signal.alarm when it exists (i.e. not on Windows).""" - if hasattr(signal, 'alarm'): + if hasattr(signal, 'alarm') and not test.test_support.is_jython: signal.alarm(n) +select_fn = select.select +if test.test_support.is_jython: + select_fn = select.cpython_compatible_select + def receive(sock, n, timeout=20): - r, w, x = select.select([sock], [], [], timeout) + r, w, x = select_fn([sock], [], [], timeout) if sock in r: return sock.recv(n) else: -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 17:22:16 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 17:22:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Upgrading_SocketServer_to_2?= =?utf8?q?=2E7=2E_Step_1=3A_Delete_our_fork_of_the_2=2E5_modules=2E?= Message-ID: http://hg.python.org/jython/rev/5e3c2ca2e8ec changeset: 6515:5e3c2ca2e8ec user: Alan Kennedy date: Sun Apr 01 13:39:16 2012 +0100 summary: Upgrading SocketServer to 2.7. Step 1: Delete our fork of the 2.5 modules. files: Lib/SocketServer.py | 590 ---------------------- Lib/test/test_socketserver.py | 218 -------- 2 files changed, 0 insertions(+), 808 deletions(-) diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py deleted file mode 100644 --- a/Lib/SocketServer.py +++ /dev/null @@ -1,590 +0,0 @@ -"""Generic socket server classes. - -This module tries to capture the various aspects of defining a server: - -For socket-based servers: - -- address family: - - AF_INET{,6}: IP (Internet Protocol) sockets (default) - - AF_UNIX: Unix domain sockets - - others, e.g. AF_DECNET are conceivable (see -- socket type: - - SOCK_STREAM (reliable stream, e.g. TCP) - - SOCK_DGRAM (datagrams, e.g. UDP) - -For request-based servers (including socket-based): - -- client address verification before further looking at the request - (This is actually a hook for any processing that needs to look - at the request before anything else, e.g. logging) -- how to handle multiple requests: - - synchronous (one request is handled at a time) - - forking (each request is handled by a new process) - - threading (each request is handled by a new thread) - -The classes in this module favor the server type that is simplest to -write: a synchronous TCP/IP server. This is bad class design, but -save some typing. (There's also the issue that a deep class hierarchy -slows down method lookups.) - -There are five classes in an inheritance diagram, four of which represent -synchronous servers of four types: - - +------------+ - | BaseServer | - +------------+ - | - v - +-----------+ +------------------+ - | TCPServer |------->| UnixStreamServer | - +-----------+ +------------------+ - | - v - +-----------+ +--------------------+ - | UDPServer |------->| UnixDatagramServer | - +-----------+ +--------------------+ - -Note that UnixDatagramServer derives from UDPServer, not from -UnixStreamServer -- the only difference between an IP and a Unix -stream server is the address family, which is simply repeated in both -unix server classes. - -Forking and threading versions of each type of server can be created -using the ForkingMixIn and ThreadingMixIn mix-in classes. For -instance, a threading UDP server class is created as follows: - - class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass - -The Mix-in class must come first, since it overrides a method defined -in UDPServer! Setting the various member variables also changes -the behavior of the underlying server mechanism. - -To implement a service, you must derive a class from -BaseRequestHandler and redefine its handle() method. You can then run -various versions of the service by combining one of the server classes -with your request handler class. - -The request handler class must be different for datagram or stream -services. This can be hidden by using the request handler -subclasses StreamRequestHandler or DatagramRequestHandler. - -Of course, you still have to use your head! - -For instance, it makes no sense to use a forking server if the service -contains state in memory that can be modified by requests (since the -modifications in the child process would never reach the initial state -kept in the parent process and passed to each child). In this case, -you can use a threading server, but you will probably have to use -locks to avoid two requests that come in nearly simultaneous to apply -conflicting changes to the server state. - -On the other hand, if you are building e.g. an HTTP server, where all -data is stored externally (e.g. in the file system), a synchronous -class will essentially render the service "deaf" while one request is -being handled -- which may be for a very long time if a client is slow -to reqd all the data it has requested. Here a threading or forking -server is appropriate. - -In some cases, it may be appropriate to process part of a request -synchronously, but to finish processing in a forked child depending on -the request data. This can be implemented by using a synchronous -server and doing an explicit fork in the request handler class -handle() method. - -Another approach to handling multiple simultaneous requests in an -environment that supports neither threads nor fork (or where these are -too expensive or inappropriate for the service) is to maintain an -explicit table of partially finished requests and to use select() to -decide which request to work on next (or whether to handle a new -incoming request). This is particularly important for stream services -where each client can potentially be connected for a long time (if -threads or subprocesses cannot be used). - -Future work: -- Standard classes for Sun RPC (which uses either UDP or TCP) -- Standard mix-in classes to implement various authentication - and encryption schemes -- Standard framework for select-based multiplexing - -XXX Open problems: -- What to do with out-of-band data? - -BaseServer: -- split generic "request" functionality out into BaseServer class. - Copyright (C) 2000 Luke Kenneth Casson Leighton - - example: read entries from a SQL database (requires overriding - get_request() to return a table entry from the database). - entry is processed by a RequestHandlerClass. - -""" - -# Author of the BaseServer patch: Luke Kenneth Casson Leighton - -# XXX Warning! -# There is a test suite for this module, but it cannot be run by the -# standard regression test. -# To run it manually, run Lib/test/test_socketserver.py. - -__version__ = "0.4" - - -import socket -import sys -import os - -__all__ = ["TCPServer","UDPServer","ForkingUDPServer","ForkingTCPServer", - "ThreadingUDPServer","ThreadingTCPServer","BaseRequestHandler", - "StreamRequestHandler","DatagramRequestHandler", - "ThreadingMixIn", "ForkingMixIn"] -if hasattr(socket, "AF_UNIX"): - __all__.extend(["UnixStreamServer","UnixDatagramServer", - "ThreadingUnixStreamServer", - "ThreadingUnixDatagramServer"]) - -class BaseServer: - - """Base class for server classes. - - Methods for the caller: - - - __init__(server_address, RequestHandlerClass) - - serve_forever() - - handle_request() # if you do not use serve_forever() - - fileno() -> int # for select() - - Methods that may be overridden: - - - server_bind() - - server_activate() - - get_request() -> request, client_address - - verify_request(request, client_address) - - server_close() - - process_request(request, client_address) - - close_request(request) - - handle_error() - - Methods for derived classes: - - - finish_request(request, client_address) - - Class variables that may be overridden by derived classes or - instances: - - - address_family - - socket_type - - allow_reuse_address - - Instance variables: - - - RequestHandlerClass - - socket - - """ - - def __init__(self, server_address, RequestHandlerClass): - """Constructor. May be extended, do not override.""" - self.server_address = server_address - self.RequestHandlerClass = RequestHandlerClass - - def server_activate(self): - """Called by constructor to activate the server. - - May be overridden. - - """ - pass - - def serve_forever(self): - """Handle one request at a time until doomsday.""" - while 1: - self.handle_request() - - # The distinction between handling, getting, processing and - # finishing a request is fairly arbitrary. Remember: - # - # - handle_request() is the top-level call. It calls - # get_request(), verify_request() and process_request() - # - get_request() is different for stream or datagram sockets - # - process_request() is the place that may fork a new process - # or create a new thread to finish the request - # - finish_request() instantiates the request handler class; - # this constructor will handle the request all by itself - - def handle_request(self): - """Handle one request, possibly blocking.""" - try: - request, client_address = self.get_request() - except socket.error: - return - if self.verify_request(request, client_address): - try: - self.process_request(request, client_address) - except: - self.handle_error(request, client_address) - self.close_request(request) - - def verify_request(self, request, client_address): - """Verify the request. May be overridden. - - Return True if we should proceed with this request. - - """ - return True - - def process_request(self, request, client_address): - """Call finish_request. - - Overridden by ForkingMixIn and ThreadingMixIn. - - """ - self.finish_request(request, client_address) - self.close_request(request) - - def server_close(self): - """Called to clean-up the server. - - May be overridden. - - """ - pass - - def finish_request(self, request, client_address): - """Finish one request by instantiating RequestHandlerClass.""" - self.RequestHandlerClass(request, client_address, self) - - def close_request(self, request): - """Called to clean up an individual request.""" - pass - - def handle_error(self, request, client_address): - """Handle an error gracefully. May be overridden. - - The default is to print a traceback and continue. - - """ - print '-'*40 - print 'Exception happened during processing of request from', - print client_address - import traceback - traceback.print_exc() # XXX But this goes to stderr! - print '-'*40 - - -class TCPServer(BaseServer): - - """Base class for various socket-based server classes. - - Defaults to synchronous IP stream (i.e., TCP). - - Methods for the caller: - - - __init__(server_address, RequestHandlerClass) - - serve_forever() - - handle_request() # if you don't use serve_forever() - - fileno() -> int # for select() - - Methods that may be overridden: - - - server_bind() - - server_activate() - - get_request() -> request, client_address - - verify_request(request, client_address) - - process_request(request, client_address) - - close_request(request) - - handle_error() - - Methods for derived classes: - - - finish_request(request, client_address) - - Class variables that may be overridden by derived classes or - instances: - - - address_family - - socket_type - - request_queue_size (only for stream sockets) - - allow_reuse_address - - Instance variables: - - - server_address - - RequestHandlerClass - - socket - - """ - - address_family = socket.AF_INET - - socket_type = socket.SOCK_STREAM - - request_queue_size = 5 - - allow_reuse_address = False - - def __init__(self, server_address, RequestHandlerClass): - """Constructor. May be extended, do not override.""" - BaseServer.__init__(self, server_address, RequestHandlerClass) - self.socket = socket.socket(self.address_family, - self.socket_type) - self.server_bind() - self.server_activate() - - def server_bind(self): - """Called by constructor to bind the socket. - - May be overridden. - - """ - if self.allow_reuse_address: - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.socket.bind(self.server_address) - self.server_address = self.socket.getsockname() - - def server_activate(self): - """Called by constructor to activate the server. - - May be overridden. - - """ - self.socket.listen(self.request_queue_size) - # Adding a second call to getsockname() because of this issue - # http://wiki.python.org/jython/NewSocketModule#Deferredsocketcreationonjython - self.server_address = self.socket.getsockname() - - def server_close(self): - """Called to clean-up the server. - - May be overridden. - - """ - self.socket.close() - - def fileno(self): - """Return socket file number. - - Interface required by select(). - - """ - return self.socket.fileno() - - def get_request(self): - """Get the request and client address from the socket. - - May be overridden. - - """ - return self.socket.accept() - - def close_request(self, request): - """Called to clean up an individual request.""" - request.close() - - -class UDPServer(TCPServer): - - """UDP server class.""" - - allow_reuse_address = False - - socket_type = socket.SOCK_DGRAM - - max_packet_size = 8192 - - def get_request(self): - data, client_addr = self.socket.recvfrom(self.max_packet_size) - return (data, self.socket), client_addr - - def server_activate(self): - # No need to call listen() for UDP. - pass - - def close_request(self, request): - # No need to close anything. - pass - -class ForkingMixIn: - - """Mix-in class to handle each request in a new process.""" - - active_children = None - max_children = 40 - - def collect_children(self): - """Internal routine to wait for died children.""" - while self.active_children: - if len(self.active_children) < self.max_children: - options = os.WNOHANG - else: - # If the maximum number of children are already - # running, block while waiting for a child to exit - options = 0 - try: - pid, status = os.waitpid(0, options) - except os.error: - pid = None - if not pid: break - self.active_children.remove(pid) - - def process_request(self, request, client_address): - """Fork a new subprocess to process the request.""" - self.collect_children() - pid = os.fork() - if pid: - # Parent process - if self.active_children is None: - self.active_children = [] - self.active_children.append(pid) - self.close_request(request) - return - else: - # Child process. - # This must never return, hence os._exit()! - try: - self.finish_request(request, client_address) - os._exit(0) - except: - try: - self.handle_error(request, client_address) - finally: - os._exit(1) - - -class ThreadingMixIn: - """Mix-in class to handle each request in a new thread.""" - - # Decides how threads will act upon termination of the - # main process - daemon_threads = False - - def process_request_thread(self, request, client_address): - """Same as in BaseServer but as a thread. - - In addition, exception handling is done here. - - """ - try: - self.finish_request(request, client_address) - self.close_request(request) - except: - self.handle_error(request, client_address) - self.close_request(request) - - def process_request(self, request, client_address): - """Start a new thread to process the request.""" - import threading - t = threading.Thread(target = self.process_request_thread, - args = (request, client_address)) - if self.daemon_threads: - t.setDaemon (1) - t.start() - - -class ForkingUDPServer(ForkingMixIn, UDPServer): pass -class ForkingTCPServer(ForkingMixIn, TCPServer): pass - -class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass -class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass - -if hasattr(socket, 'AF_UNIX'): - - class UnixStreamServer(TCPServer): - address_family = socket.AF_UNIX - - class UnixDatagramServer(UDPServer): - address_family = socket.AF_UNIX - - class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass - - class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass - -class BaseRequestHandler: - - """Base class for request handler classes. - - This class is instantiated for each request to be handled. The - constructor sets the instance variables request, client_address - and server, and then calls the handle() method. To implement a - specific service, all you need to do is to derive a class which - defines a handle() method. - - The handle() method can find the request as self.request, the - client address as self.client_address, and the server (in case it - needs access to per-server information) as self.server. Since a - separate instance is created for each request, the handle() method - can define arbitrary other instance variariables. - - """ - - def __init__(self, request, client_address, server): - self.request = request - self.client_address = client_address - self.server = server - self.setup() - try: - self.handle() - finally: - self.finish() - - def setup(self): - pass - - def handle(self): - pass - - def finish(self): - pass - - -# The following two classes make it possible to use the same service -# class for stream or datagram servers. -# Each class sets up these instance variables: -# - rfile: a file object from which receives the request is read -# - wfile: a file object to which the reply is written -# When the handle() method returns, wfile is flushed properly - - -class StreamRequestHandler(BaseRequestHandler): - - """Define self.rfile and self.wfile for stream sockets.""" - - # Default buffer sizes for rfile, wfile. - # We default rfile to buffered because otherwise it could be - # really slow for large data (a getc() call per byte); we make - # wfile unbuffered because (a) often after a write() we want to - # read and we need to flush the line; (b) big writes to unbuffered - # files are typically optimized by stdio even when big reads - # aren't. - rbufsize = -1 - wbufsize = 0 - - def setup(self): - self.connection = self.request - self.rfile = self.connection.makefile('rb', self.rbufsize) - self.wfile = self.connection.makefile('wb', self.wbufsize) - - def finish(self): - if not self.wfile.closed: - self.wfile.flush() - self.wfile.close() - self.rfile.close() - - -class DatagramRequestHandler(BaseRequestHandler): - - # XXX Regrettably, I cannot get this working on Linux; - # s.recvfrom() doesn't return a meaningful client address. - - """Define self.rfile and self.wfile for datagram sockets.""" - - def setup(self): - try: - from cStringIO import StringIO - except ImportError: - from StringIO import StringIO - self.packet, self.socket = self.request - self.rfile = StringIO(self.packet) - self.wfile = StringIO() - - def finish(self): - self.socket.sendto(self.wfile.getvalue(), self.client_address) diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py deleted file mode 100644 --- a/Lib/test/test_socketserver.py +++ /dev/null @@ -1,218 +0,0 @@ -# Test suite for SocketServer.py - -from test import test_support -from test.test_support import (verbose, verify, TESTFN, TestSkipped, - reap_children) -test_support.requires('network') - -from SocketServer import * -import socket -import errno -import select -import time -import threading -import os - -NREQ = 3 -DELAY = 0.5 - -class MyMixinHandler: - def handle(self): - time.sleep(DELAY) - line = self.rfile.readline() - time.sleep(DELAY) - self.wfile.write(line) - -class MyStreamHandler(MyMixinHandler, StreamRequestHandler): - pass - -class MyDatagramHandler(MyMixinHandler, DatagramRequestHandler): - pass - -class MyMixinServer: - def serve_a_few(self): - for i in range(NREQ): - self.handle_request() - def handle_error(self, request, client_address): - self.close_request(request) - self.server_close() - raise - -teststring = "hello world\n" - -def receive(sock, n, timeout=20): - r, w, x = select.select([sock], [], [], timeout) - if sock in r: - return sock.recv(n) - else: - raise RuntimeError, "timed out on %r" % (sock,) - -def testdgram(proto, addr): - s = socket.socket(proto, socket.SOCK_DGRAM) - s.sendto(teststring, addr) - buf = data = receive(s, 100) - while data and '\n' not in buf: - data = receive(s, 100) - buf += data - verify(buf == teststring) - s.close() - -def teststream(proto, addr): - s = socket.socket(proto, socket.SOCK_STREAM) - s.connect(addr) - s.sendall(teststring) - buf = data = receive(s, 100) - while data and '\n' not in buf: - data = receive(s, 100) - buf += data - verify(buf == teststring) - s.close() - -class ServerThread(threading.Thread): - def __init__(self, addr, svrcls, hdlrcls): - threading.Thread.__init__(self) - self.__addr = addr - self.__svrcls = svrcls - self.__hdlrcls = hdlrcls - def run(self): - class svrcls(MyMixinServer, self.__svrcls): - pass - if verbose: print "thread: creating server" - svr = svrcls(self.__addr, self.__hdlrcls) - # pull the address out of the server in case it changed - # this can happen if another process is using the port - addr = svr.server_address - if addr: - self.__addr = addr - if self.__addr != svr.socket.getsockname(): - raise RuntimeError('server_address was %s, expected %s' % - (self.__addr, svr.socket.getsockname())) - if verbose: print "thread: serving three times" - svr.serve_a_few() - if verbose: print "thread: done" - -seed = 0 -def pickport(): - global seed - seed += 1 - return 10000 + (os.getpid() % 1000)*10 + seed - -host = "localhost" -testfiles = [] -def pickaddr(proto): - if proto == socket.AF_INET: - return (host, pickport()) - else: - fn = TESTFN + str(pickport()) - if os.name == 'os2': - # AF_UNIX socket names on OS/2 require a specific prefix - # which can't include a drive letter and must also use - # backslashes as directory separators - if fn[1] == ':': - fn = fn[2:] - if fn[0] in (os.sep, os.altsep): - fn = fn[1:] - fn = os.path.join('\socket', fn) - if os.sep == '/': - fn = fn.replace(os.sep, os.altsep) - else: - fn = fn.replace(os.altsep, os.sep) - testfiles.append(fn) - return fn - -def cleanup(): - for fn in testfiles: - try: - os.remove(fn) - except os.error: - pass - testfiles[:] = [] - -def testloop(proto, servers, hdlrcls, testfunc): - for svrcls in servers: - addr = pickaddr(proto) - if verbose: - print "ADDR =", addr - print "CLASS =", svrcls - t = ServerThread(addr, svrcls, hdlrcls) - if verbose: print "server created" - t.start() - if verbose: print "server running" - for i in range(NREQ): - time.sleep(DELAY) - if verbose: print "test client", i - testfunc(proto, addr) - if verbose: print "waiting for server" - t.join() - if verbose: print "done" - -class ForgivingTCPServer(TCPServer): - # prevent errors if another process is using the port we want - def server_bind(self): - host, default_port = self.server_address - # this code shamelessly stolen from test.test_support - # the ports were changed to protect the innocent - import sys - for port in [default_port, 3434, 8798, 23833]: - try: - self.server_address = host, port - TCPServer.server_bind(self) - break - except socket.error, (err, msg): - if err != errno.EADDRINUSE: - raise - print >>sys.__stderr__, \ - ' WARNING: failed to listen on port %d, trying another' % port - -tcpservers = [ForgivingTCPServer, ThreadingTCPServer] -if hasattr(os, 'fork') and os.name not in ('os2',): - tcpservers.append(ForkingTCPServer) -udpservers = [UDPServer, ThreadingUDPServer] -if hasattr(os, 'fork') and os.name not in ('os2',): - udpservers.append(ForkingUDPServer) - -if not hasattr(socket, 'AF_UNIX'): - streamservers = [] - dgramservers = [] -else: - class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass - streamservers = [UnixStreamServer, ThreadingUnixStreamServer] - if hasattr(os, 'fork') and os.name not in ('os2',): - streamservers.append(ForkingUnixStreamServer) - class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass - dgramservers = [UnixDatagramServer, ThreadingUnixDatagramServer] - if hasattr(os, 'fork') and os.name not in ('os2',): - dgramservers.append(ForkingUnixDatagramServer) - -def sloppy_cleanup(): - # See http://python.org/sf/1540386 - # We need to reap children here otherwise a child from one server - # can be left running for the next server and cause a test failure. - time.sleep(DELAY) - reap_children() - -def testall(): - testloop(socket.AF_INET, tcpservers, MyStreamHandler, teststream) - sloppy_cleanup() - testloop(socket.AF_INET, udpservers, MyDatagramHandler, testdgram) - if hasattr(socket, 'AF_UNIX'): - sloppy_cleanup() - testloop(socket.AF_UNIX, streamservers, MyStreamHandler, teststream) - # Alas, on Linux (at least) recvfrom() doesn't return a meaningful - # client address so this cannot work: - ##testloop(socket.AF_UNIX, dgramservers, MyDatagramHandler, testdgram) - -def test_main(): - import imp - if imp.lock_held(): - # If the import lock is held, the threads will hang. - raise TestSkipped("can't run when import lock is held") - - try: - testall() - finally: - cleanup() - reap_children() - -if __name__ == "__main__": - test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 17:22:16 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 17:22:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Updating_the_create=5Fconnec?= =?utf8?q?tion_function_to_version_2=2E7?= Message-ID: http://hg.python.org/jython/rev/72e9076d1b5d changeset: 6518:72e9076d1b5d user: Alan Kennedy date: Sun Apr 01 14:30:40 2012 +0100 summary: Updating the create_connection function to version 2.7 files: Lib/socket.py | 19 ++++++++++++++----- 1 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Lib/socket.py b/Lib/socket.py --- a/Lib/socket.py +++ b/Lib/socket.py @@ -1664,7 +1664,8 @@ _GLOBAL_DEFAULT_TIMEOUT = object() -def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT): +def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, + source_address=None): """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, @@ -1672,11 +1673,13 @@ *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`getdefaulttimeout` - is used. + is used. If *source_address* is set it must be a tuple of (host, port) + for the socket to bind as a source address before making the connection. + An host of '' or port 0 tells the OS to use the default. """ - msg = "getaddrinfo returns an empty list" host, port = address + err = None for res in getaddrinfo(host, port, 0, SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None @@ -1684,14 +1687,20 @@ sock = socket(af, socktype, proto) if timeout is not _GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) + if source_address: + sock.bind(source_address) sock.connect(sa) return sock - except error, msg: + except error as _: + err = _ if sock is not None: sock.close() - raise error, msg + if err is not None: + raise err + else: + raise error("getaddrinfo returns an empty list") # Define the SSL support -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 17:22:16 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 17:22:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Upgrading_SocketServer_to_2?= =?utf8?q?=2E7=2E_Step_2=3A_Add_in_the_cpython_2=2E7=2E2_modules=2E?= Message-ID: http://hg.python.org/jython/rev/7690b912322c changeset: 6516:7690b912322c user: Alan Kennedy date: Sun Apr 01 13:44:21 2012 +0100 summary: Upgrading SocketServer to 2.7. Step 2: Add in the cpython 2.7.2 modules. files: Lib/SocketServer.py | 716 ++++++++++++++++++++++ Lib/test/test_socketserver.py | 284 ++++++++ 2 files changed, 1000 insertions(+), 0 deletions(-) diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py new file mode 100644 --- /dev/null +++ b/Lib/SocketServer.py @@ -0,0 +1,716 @@ +"""Generic socket server classes. + +This module tries to capture the various aspects of defining a server: + +For socket-based servers: + +- address family: + - AF_INET{,6}: IP (Internet Protocol) sockets (default) + - AF_UNIX: Unix domain sockets + - others, e.g. AF_DECNET are conceivable (see +- socket type: + - SOCK_STREAM (reliable stream, e.g. TCP) + - SOCK_DGRAM (datagrams, e.g. UDP) + +For request-based servers (including socket-based): + +- client address verification before further looking at the request + (This is actually a hook for any processing that needs to look + at the request before anything else, e.g. logging) +- how to handle multiple requests: + - synchronous (one request is handled at a time) + - forking (each request is handled by a new process) + - threading (each request is handled by a new thread) + +The classes in this module favor the server type that is simplest to +write: a synchronous TCP/IP server. This is bad class design, but +save some typing. (There's also the issue that a deep class hierarchy +slows down method lookups.) + +There are five classes in an inheritance diagram, four of which represent +synchronous servers of four types: + + +------------+ + | BaseServer | + +------------+ + | + v + +-----------+ +------------------+ + | TCPServer |------->| UnixStreamServer | + +-----------+ +------------------+ + | + v + +-----------+ +--------------------+ + | UDPServer |------->| UnixDatagramServer | + +-----------+ +--------------------+ + +Note that UnixDatagramServer derives from UDPServer, not from +UnixStreamServer -- the only difference between an IP and a Unix +stream server is the address family, which is simply repeated in both +unix server classes. + +Forking and threading versions of each type of server can be created +using the ForkingMixIn and ThreadingMixIn mix-in classes. For +instance, a threading UDP server class is created as follows: + + class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass + +The Mix-in class must come first, since it overrides a method defined +in UDPServer! Setting the various member variables also changes +the behavior of the underlying server mechanism. + +To implement a service, you must derive a class from +BaseRequestHandler and redefine its handle() method. You can then run +various versions of the service by combining one of the server classes +with your request handler class. + +The request handler class must be different for datagram or stream +services. This can be hidden by using the request handler +subclasses StreamRequestHandler or DatagramRequestHandler. + +Of course, you still have to use your head! + +For instance, it makes no sense to use a forking server if the service +contains state in memory that can be modified by requests (since the +modifications in the child process would never reach the initial state +kept in the parent process and passed to each child). In this case, +you can use a threading server, but you will probably have to use +locks to avoid two requests that come in nearly simultaneous to apply +conflicting changes to the server state. + +On the other hand, if you are building e.g. an HTTP server, where all +data is stored externally (e.g. in the file system), a synchronous +class will essentially render the service "deaf" while one request is +being handled -- which may be for a very long time if a client is slow +to reqd all the data it has requested. Here a threading or forking +server is appropriate. + +In some cases, it may be appropriate to process part of a request +synchronously, but to finish processing in a forked child depending on +the request data. This can be implemented by using a synchronous +server and doing an explicit fork in the request handler class +handle() method. + +Another approach to handling multiple simultaneous requests in an +environment that supports neither threads nor fork (or where these are +too expensive or inappropriate for the service) is to maintain an +explicit table of partially finished requests and to use select() to +decide which request to work on next (or whether to handle a new +incoming request). This is particularly important for stream services +where each client can potentially be connected for a long time (if +threads or subprocesses cannot be used). + +Future work: +- Standard classes for Sun RPC (which uses either UDP or TCP) +- Standard mix-in classes to implement various authentication + and encryption schemes +- Standard framework for select-based multiplexing + +XXX Open problems: +- What to do with out-of-band data? + +BaseServer: +- split generic "request" functionality out into BaseServer class. + Copyright (C) 2000 Luke Kenneth Casson Leighton + + example: read entries from a SQL database (requires overriding + get_request() to return a table entry from the database). + entry is processed by a RequestHandlerClass. + +""" + +# Author of the BaseServer patch: Luke Kenneth Casson Leighton + +# XXX Warning! +# There is a test suite for this module, but it cannot be run by the +# standard regression test. +# To run it manually, run Lib/test/test_socketserver.py. + +__version__ = "0.4" + + +import socket +import select +import sys +import os +try: + import threading +except ImportError: + import dummy_threading as threading + +__all__ = ["TCPServer","UDPServer","ForkingUDPServer","ForkingTCPServer", + "ThreadingUDPServer","ThreadingTCPServer","BaseRequestHandler", + "StreamRequestHandler","DatagramRequestHandler", + "ThreadingMixIn", "ForkingMixIn"] +if hasattr(socket, "AF_UNIX"): + __all__.extend(["UnixStreamServer","UnixDatagramServer", + "ThreadingUnixStreamServer", + "ThreadingUnixDatagramServer"]) + +class BaseServer: + + """Base class for server classes. + + Methods for the caller: + + - __init__(server_address, RequestHandlerClass) + - serve_forever(poll_interval=0.5) + - shutdown() + - handle_request() # if you do not use serve_forever() + - fileno() -> int # for select() + + Methods that may be overridden: + + - server_bind() + - server_activate() + - get_request() -> request, client_address + - handle_timeout() + - verify_request(request, client_address) + - server_close() + - process_request(request, client_address) + - shutdown_request(request) + - close_request(request) + - handle_error() + + Methods for derived classes: + + - finish_request(request, client_address) + + Class variables that may be overridden by derived classes or + instances: + + - timeout + - address_family + - socket_type + - allow_reuse_address + + Instance variables: + + - RequestHandlerClass + - socket + + """ + + timeout = None + + def __init__(self, server_address, RequestHandlerClass): + """Constructor. May be extended, do not override.""" + self.server_address = server_address + self.RequestHandlerClass = RequestHandlerClass + self.__is_shut_down = threading.Event() + self.__shutdown_request = False + + def server_activate(self): + """Called by constructor to activate the server. + + May be overridden. + + """ + pass + + def serve_forever(self, poll_interval=0.5): + """Handle one request at a time until shutdown. + + Polls for shutdown every poll_interval seconds. Ignores + self.timeout. If you need to do periodic tasks, do them in + another thread. + """ + self.__is_shut_down.clear() + try: + while not self.__shutdown_request: + # XXX: Consider using another file descriptor or + # connecting to the socket to wake this up instead of + # polling. Polling reduces our responsiveness to a + # shutdown request and wastes cpu at all other times. + r, w, e = select.select([self], [], [], poll_interval) + if self in r: + self._handle_request_noblock() + finally: + self.__shutdown_request = False + self.__is_shut_down.set() + + def shutdown(self): + """Stops the serve_forever loop. + + Blocks until the loop has finished. This must be called while + serve_forever() is running in another thread, or it will + deadlock. + """ + self.__shutdown_request = True + self.__is_shut_down.wait() + + # The distinction between handling, getting, processing and + # finishing a request is fairly arbitrary. Remember: + # + # - handle_request() is the top-level call. It calls + # select, get_request(), verify_request() and process_request() + # - get_request() is different for stream or datagram sockets + # - process_request() is the place that may fork a new process + # or create a new thread to finish the request + # - finish_request() instantiates the request handler class; + # this constructor will handle the request all by itself + + def handle_request(self): + """Handle one request, possibly blocking. + + Respects self.timeout. + """ + # Support people who used socket.settimeout() to escape + # handle_request before self.timeout was available. + timeout = self.socket.gettimeout() + if timeout is None: + timeout = self.timeout + elif self.timeout is not None: + timeout = min(timeout, self.timeout) + fd_sets = select.select([self], [], [], timeout) + if not fd_sets[0]: + self.handle_timeout() + return + self._handle_request_noblock() + + def _handle_request_noblock(self): + """Handle one request, without blocking. + + I assume that select.select has returned that the socket is + readable before this function was called, so there should be + no risk of blocking in get_request(). + """ + try: + request, client_address = self.get_request() + except socket.error: + return + if self.verify_request(request, client_address): + try: + self.process_request(request, client_address) + except: + self.handle_error(request, client_address) + self.shutdown_request(request) + + def handle_timeout(self): + """Called if no new request arrives within self.timeout. + + Overridden by ForkingMixIn. + """ + pass + + def verify_request(self, request, client_address): + """Verify the request. May be overridden. + + Return True if we should proceed with this request. + + """ + return True + + def process_request(self, request, client_address): + """Call finish_request. + + Overridden by ForkingMixIn and ThreadingMixIn. + + """ + self.finish_request(request, client_address) + self.shutdown_request(request) + + def server_close(self): + """Called to clean-up the server. + + May be overridden. + + """ + pass + + def finish_request(self, request, client_address): + """Finish one request by instantiating RequestHandlerClass.""" + self.RequestHandlerClass(request, client_address, self) + + def shutdown_request(self, request): + """Called to shutdown and close an individual request.""" + self.close_request(request) + + def close_request(self, request): + """Called to clean up an individual request.""" + pass + + def handle_error(self, request, client_address): + """Handle an error gracefully. May be overridden. + + The default is to print a traceback and continue. + + """ + print '-'*40 + print 'Exception happened during processing of request from', + print client_address + import traceback + traceback.print_exc() # XXX But this goes to stderr! + print '-'*40 + + +class TCPServer(BaseServer): + + """Base class for various socket-based server classes. + + Defaults to synchronous IP stream (i.e., TCP). + + Methods for the caller: + + - __init__(server_address, RequestHandlerClass, bind_and_activate=True) + - serve_forever(poll_interval=0.5) + - shutdown() + - handle_request() # if you don't use serve_forever() + - fileno() -> int # for select() + + Methods that may be overridden: + + - server_bind() + - server_activate() + - get_request() -> request, client_address + - handle_timeout() + - verify_request(request, client_address) + - process_request(request, client_address) + - shutdown_request(request) + - close_request(request) + - handle_error() + + Methods for derived classes: + + - finish_request(request, client_address) + + Class variables that may be overridden by derived classes or + instances: + + - timeout + - address_family + - socket_type + - request_queue_size (only for stream sockets) + - allow_reuse_address + + Instance variables: + + - server_address + - RequestHandlerClass + - socket + + """ + + address_family = socket.AF_INET + + socket_type = socket.SOCK_STREAM + + request_queue_size = 5 + + allow_reuse_address = False + + def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True): + """Constructor. May be extended, do not override.""" + BaseServer.__init__(self, server_address, RequestHandlerClass) + self.socket = socket.socket(self.address_family, + self.socket_type) + if bind_and_activate: + self.server_bind() + self.server_activate() + + def server_bind(self): + """Called by constructor to bind the socket. + + May be overridden. + + """ + if self.allow_reuse_address: + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.bind(self.server_address) + self.server_address = self.socket.getsockname() + + def server_activate(self): + """Called by constructor to activate the server. + + May be overridden. + + """ + self.socket.listen(self.request_queue_size) + + def server_close(self): + """Called to clean-up the server. + + May be overridden. + + """ + self.socket.close() + + def fileno(self): + """Return socket file number. + + Interface required by select(). + + """ + return self.socket.fileno() + + def get_request(self): + """Get the request and client address from the socket. + + May be overridden. + + """ + return self.socket.accept() + + def shutdown_request(self, request): + """Called to shutdown and close an individual request.""" + try: + #explicitly shutdown. socket.close() merely releases + #the socket and waits for GC to perform the actual close. + request.shutdown(socket.SHUT_WR) + except socket.error: + pass #some platforms may raise ENOTCONN here + self.close_request(request) + + def close_request(self, request): + """Called to clean up an individual request.""" + request.close() + + +class UDPServer(TCPServer): + + """UDP server class.""" + + allow_reuse_address = False + + socket_type = socket.SOCK_DGRAM + + max_packet_size = 8192 + + def get_request(self): + data, client_addr = self.socket.recvfrom(self.max_packet_size) + return (data, self.socket), client_addr + + def server_activate(self): + # No need to call listen() for UDP. + pass + + def shutdown_request(self, request): + # No need to shutdown anything. + self.close_request(request) + + def close_request(self, request): + # No need to close anything. + pass + +class ForkingMixIn: + + """Mix-in class to handle each request in a new process.""" + + timeout = 300 + active_children = None + max_children = 40 + + def collect_children(self): + """Internal routine to wait for children that have exited.""" + if self.active_children is None: return + while len(self.active_children) >= self.max_children: + # XXX: This will wait for any child process, not just ones + # spawned by this library. This could confuse other + # libraries that expect to be able to wait for their own + # children. + try: + pid, status = os.waitpid(0, 0) + except os.error: + pid = None + if pid not in self.active_children: continue + self.active_children.remove(pid) + + # XXX: This loop runs more system calls than it ought + # to. There should be a way to put the active_children into a + # process group and then use os.waitpid(-pgid) to wait for any + # of that set, but I couldn't find a way to allocate pgids + # that couldn't collide. + for child in self.active_children: + try: + pid, status = os.waitpid(child, os.WNOHANG) + except os.error: + pid = None + if not pid: continue + try: + self.active_children.remove(pid) + except ValueError, e: + raise ValueError('%s. x=%d and list=%r' % (e.message, pid, + self.active_children)) + + def handle_timeout(self): + """Wait for zombies after self.timeout seconds of inactivity. + + May be extended, do not override. + """ + self.collect_children() + + def process_request(self, request, client_address): + """Fork a new subprocess to process the request.""" + self.collect_children() + pid = os.fork() + if pid: + # Parent process + if self.active_children is None: + self.active_children = [] + self.active_children.append(pid) + self.close_request(request) #close handle in parent process + return + else: + # Child process. + # This must never return, hence os._exit()! + try: + self.finish_request(request, client_address) + self.shutdown_request(request) + os._exit(0) + except: + try: + self.handle_error(request, client_address) + self.shutdown_request(request) + finally: + os._exit(1) + + +class ThreadingMixIn: + """Mix-in class to handle each request in a new thread.""" + + # Decides how threads will act upon termination of the + # main process + daemon_threads = False + + def process_request_thread(self, request, client_address): + """Same as in BaseServer but as a thread. + + In addition, exception handling is done here. + + """ + try: + self.finish_request(request, client_address) + self.shutdown_request(request) + except: + self.handle_error(request, client_address) + self.shutdown_request(request) + + def process_request(self, request, client_address): + """Start a new thread to process the request.""" + t = threading.Thread(target = self.process_request_thread, + args = (request, client_address)) + if self.daemon_threads: + t.setDaemon (1) + t.start() + + +class ForkingUDPServer(ForkingMixIn, UDPServer): pass +class ForkingTCPServer(ForkingMixIn, TCPServer): pass + +class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass +class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass + +if hasattr(socket, 'AF_UNIX'): + + class UnixStreamServer(TCPServer): + address_family = socket.AF_UNIX + + class UnixDatagramServer(UDPServer): + address_family = socket.AF_UNIX + + class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass + + class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass + +class BaseRequestHandler: + + """Base class for request handler classes. + + This class is instantiated for each request to be handled. The + constructor sets the instance variables request, client_address + and server, and then calls the handle() method. To implement a + specific service, all you need to do is to derive a class which + defines a handle() method. + + The handle() method can find the request as self.request, the + client address as self.client_address, and the server (in case it + needs access to per-server information) as self.server. Since a + separate instance is created for each request, the handle() method + can define arbitrary other instance variariables. + + """ + + def __init__(self, request, client_address, server): + self.request = request + self.client_address = client_address + self.server = server + self.setup() + try: + self.handle() + finally: + self.finish() + + def setup(self): + pass + + def handle(self): + pass + + def finish(self): + pass + + +# The following two classes make it possible to use the same service +# class for stream or datagram servers. +# Each class sets up these instance variables: +# - rfile: a file object from which receives the request is read +# - wfile: a file object to which the reply is written +# When the handle() method returns, wfile is flushed properly + + +class StreamRequestHandler(BaseRequestHandler): + + """Define self.rfile and self.wfile for stream sockets.""" + + # Default buffer sizes for rfile, wfile. + # We default rfile to buffered because otherwise it could be + # really slow for large data (a getc() call per byte); we make + # wfile unbuffered because (a) often after a write() we want to + # read and we need to flush the line; (b) big writes to unbuffered + # files are typically optimized by stdio even when big reads + # aren't. + rbufsize = -1 + wbufsize = 0 + + # A timeout to apply to the request socket, if not None. + timeout = None + + # Disable nagle algorithm for this socket, if True. + # Use only when wbufsize != 0, to avoid small packets. + disable_nagle_algorithm = False + + def setup(self): + self.connection = self.request + if self.timeout is not None: + self.connection.settimeout(self.timeout) + if self.disable_nagle_algorithm: + self.connection.setsockopt(socket.IPPROTO_TCP, + socket.TCP_NODELAY, True) + self.rfile = self.connection.makefile('rb', self.rbufsize) + self.wfile = self.connection.makefile('wb', self.wbufsize) + + def finish(self): + if not self.wfile.closed: + self.wfile.flush() + self.wfile.close() + self.rfile.close() + + +class DatagramRequestHandler(BaseRequestHandler): + + # XXX Regrettably, I cannot get this working on Linux; + # s.recvfrom() doesn't return a meaningful client address. + + """Define self.rfile and self.wfile for datagram sockets.""" + + def setup(self): + try: + from cStringIO import StringIO + except ImportError: + from StringIO import StringIO + self.packet, self.socket = self.request + self.rfile = StringIO(self.packet) + self.wfile = StringIO() + + def finish(self): + self.socket.sendto(self.wfile.getvalue(), self.client_address) diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_socketserver.py @@ -0,0 +1,284 @@ +""" +Test suite for SocketServer.py. +""" + +import contextlib +import imp +import os +import select +import signal +import socket +import tempfile +import unittest +import SocketServer + +import test.test_support +from test.test_support import reap_children, reap_threads, verbose +try: + import threading +except ImportError: + threading = None + +test.test_support.requires("network") + +TEST_STR = "hello world\n" +HOST = test.test_support.HOST + +HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX") +HAVE_FORKING = hasattr(os, "fork") and os.name != "os2" + +def signal_alarm(n): + """Call signal.alarm when it exists (i.e. not on Windows).""" + if hasattr(signal, 'alarm'): + signal.alarm(n) + +def receive(sock, n, timeout=20): + r, w, x = select.select([sock], [], [], timeout) + if sock in r: + return sock.recv(n) + else: + raise RuntimeError, "timed out on %r" % (sock,) + +if HAVE_UNIX_SOCKETS: + class ForkingUnixStreamServer(SocketServer.ForkingMixIn, + SocketServer.UnixStreamServer): + pass + + class ForkingUnixDatagramServer(SocketServer.ForkingMixIn, + SocketServer.UnixDatagramServer): + pass + + + at contextlib.contextmanager +def simple_subprocess(testcase): + pid = os.fork() + if pid == 0: + # Don't throw an exception; it would be caught by the test harness. + os._exit(72) + yield None + pid2, status = os.waitpid(pid, 0) + testcase.assertEqual(pid2, pid) + testcase.assertEqual(72 << 8, status) + + + at unittest.skipUnless(threading, 'Threading required for this test.') +class SocketServerTest(unittest.TestCase): + """Test all socket servers.""" + + def setUp(self): + signal_alarm(20) # Kill deadlocks after 20 seconds. + self.port_seed = 0 + self.test_files = [] + + def tearDown(self): + signal_alarm(0) # Didn't deadlock. + reap_children() + + for fn in self.test_files: + try: + os.remove(fn) + except os.error: + pass + self.test_files[:] = [] + + def pickaddr(self, proto): + if proto == socket.AF_INET: + return (HOST, 0) + else: + # XXX: We need a way to tell AF_UNIX to pick its own name + # like AF_INET provides port==0. + dir = None + if os.name == 'os2': + dir = '\socket' + fn = tempfile.mktemp(prefix='unix_socket.', dir=dir) + if os.name == 'os2': + # AF_UNIX socket names on OS/2 require a specific prefix + # which can't include a drive letter and must also use + # backslashes as directory separators + if fn[1] == ':': + fn = fn[2:] + if fn[0] in (os.sep, os.altsep): + fn = fn[1:] + if os.sep == '/': + fn = fn.replace(os.sep, os.altsep) + else: + fn = fn.replace(os.altsep, os.sep) + self.test_files.append(fn) + return fn + + def make_server(self, addr, svrcls, hdlrbase): + class MyServer(svrcls): + def handle_error(self, request, client_address): + self.close_request(request) + self.server_close() + raise + + class MyHandler(hdlrbase): + def handle(self): + line = self.rfile.readline() + self.wfile.write(line) + + if verbose: print "creating server" + server = MyServer(addr, MyHandler) + self.assertEqual(server.server_address, server.socket.getsockname()) + return server + + @unittest.skipUnless(threading, 'Threading required for this test.') + @reap_threads + def run_server(self, svrcls, hdlrbase, testfunc): + server = self.make_server(self.pickaddr(svrcls.address_family), + svrcls, hdlrbase) + # We had the OS pick a port, so pull the real address out of + # the server. + addr = server.server_address + if verbose: + print "server created" + print "ADDR =", addr + print "CLASS =", svrcls + t = threading.Thread( + name='%s serving' % svrcls, + target=server.serve_forever, + # Short poll interval to make the test finish quickly. + # Time between requests is short enough that we won't wake + # up spuriously too many times. + kwargs={'poll_interval':0.01}) + t.daemon = True # In case this function raises. + t.start() + if verbose: print "server running" + for i in range(3): + if verbose: print "test client", i + testfunc(svrcls.address_family, addr) + if verbose: print "waiting for server" + server.shutdown() + t.join() + if verbose: print "done" + + def stream_examine(self, proto, addr): + s = socket.socket(proto, socket.SOCK_STREAM) + s.connect(addr) + s.sendall(TEST_STR) + buf = data = receive(s, 100) + while data and '\n' not in buf: + data = receive(s, 100) + buf += data + self.assertEqual(buf, TEST_STR) + s.close() + + def dgram_examine(self, proto, addr): + s = socket.socket(proto, socket.SOCK_DGRAM) + s.sendto(TEST_STR, addr) + buf = data = receive(s, 100) + while data and '\n' not in buf: + data = receive(s, 100) + buf += data + self.assertEqual(buf, TEST_STR) + s.close() + + def test_TCPServer(self): + self.run_server(SocketServer.TCPServer, + SocketServer.StreamRequestHandler, + self.stream_examine) + + def test_ThreadingTCPServer(self): + self.run_server(SocketServer.ThreadingTCPServer, + SocketServer.StreamRequestHandler, + self.stream_examine) + + if HAVE_FORKING: + def test_ForkingTCPServer(self): + with simple_subprocess(self): + self.run_server(SocketServer.ForkingTCPServer, + SocketServer.StreamRequestHandler, + self.stream_examine) + + if HAVE_UNIX_SOCKETS: + def test_UnixStreamServer(self): + self.run_server(SocketServer.UnixStreamServer, + SocketServer.StreamRequestHandler, + self.stream_examine) + + def test_ThreadingUnixStreamServer(self): + self.run_server(SocketServer.ThreadingUnixStreamServer, + SocketServer.StreamRequestHandler, + self.stream_examine) + + if HAVE_FORKING: + def test_ForkingUnixStreamServer(self): + with simple_subprocess(self): + self.run_server(ForkingUnixStreamServer, + SocketServer.StreamRequestHandler, + self.stream_examine) + + def test_UDPServer(self): + self.run_server(SocketServer.UDPServer, + SocketServer.DatagramRequestHandler, + self.dgram_examine) + + def test_ThreadingUDPServer(self): + self.run_server(SocketServer.ThreadingUDPServer, + SocketServer.DatagramRequestHandler, + self.dgram_examine) + + if HAVE_FORKING: + def test_ForkingUDPServer(self): + with simple_subprocess(self): + self.run_server(SocketServer.ForkingUDPServer, + SocketServer.DatagramRequestHandler, + self.dgram_examine) + + # Alas, on Linux (at least) recvfrom() doesn't return a meaningful + # client address so this cannot work: + + # if HAVE_UNIX_SOCKETS: + # def test_UnixDatagramServer(self): + # self.run_server(SocketServer.UnixDatagramServer, + # SocketServer.DatagramRequestHandler, + # self.dgram_examine) + # + # def test_ThreadingUnixDatagramServer(self): + # self.run_server(SocketServer.ThreadingUnixDatagramServer, + # SocketServer.DatagramRequestHandler, + # self.dgram_examine) + # + # if HAVE_FORKING: + # def test_ForkingUnixDatagramServer(self): + # self.run_server(SocketServer.ForkingUnixDatagramServer, + # SocketServer.DatagramRequestHandler, + # self.dgram_examine) + + @reap_threads + def test_shutdown(self): + # Issue #2302: shutdown() should always succeed in making an + # other thread leave serve_forever(). + class MyServer(SocketServer.TCPServer): + pass + + class MyHandler(SocketServer.StreamRequestHandler): + pass + + threads = [] + for i in range(20): + s = MyServer((HOST, 0), MyHandler) + t = threading.Thread( + name='MyServer serving', + target=s.serve_forever, + kwargs={'poll_interval':0.01}) + t.daemon = True # In case this function raises. + threads.append((t, s)) + for t, s in threads: + t.start() + s.shutdown() + for t, s in threads: + t.join() + + +def test_main(): + if imp.lock_held(): + # If the import lock is held, the threads will hang + raise unittest.SkipTest("can't run when import lock is held") + + test.test_support.run_unittest(SocketServerTest) + +if __name__ == "__main__": + test_main() + signal_alarm(3) # Shutdown shouldn't take more than 3 seconds. -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 17:22:16 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 17:22:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Updating_socket_exception_si?= =?utf8?q?gnature_to_match_2=2E7?= Message-ID: http://hg.python.org/jython/rev/c49a9d054a4b changeset: 6519:c49a9d054a4b user: Alan Kennedy date: Sun Apr 01 15:04:18 2012 +0100 summary: Updating socket exception signature to match 2.7 files: Lib/socket.py | 31 ++++++++++++++++------------ Lib/test/test_socket.py | 13 +++++++---- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Lib/socket.py b/Lib/socket.py --- a/Lib/socket.py +++ b/Lib/socket.py @@ -79,22 +79,28 @@ import org.python.core.io.SocketIO from org.python.core.Py import newString as asPyString -class error(Exception): pass +class error(IOError): pass class herror(error): pass class gaierror(error): pass class timeout(error): pass class sslerror(error): pass +def _add_exception_attrs(exc): + setattr(exc, 'errno', exc[0]) + setattr(exc, 'strerror', exc[1]) + return exc + def _unmapped_exception(exc): - return error(-1, 'Unmapped exception: %s' % exc) + return _add_exception_attrs(error(-1, 'Unmapped exception: %s' % exc)) def java_net_socketexception_handler(exc): if exc.message.startswith("Address family not supported by protocol family"): - return error(errno.EAFNOSUPPORT, 'Address family not supported by protocol family: See http://wiki.python.org/jython/NewSocketModule#IPV6addresssupport') + return _add_exception_attrs(error(errno.EAFNOSUPPORT, + 'Address family not supported by protocol family: See http://wiki.python.org/jython/NewSocketModule#IPV6addresssupport')) return _unmapped_exception(exc) def would_block_error(exc=None): - return error(errno.EWOULDBLOCK, 'The socket operation could not complete without blocking') + return _add_exception_attrs(error(errno.EWOULDBLOCK, 'The socket operation could not complete without blocking')) ALL = None @@ -105,7 +111,7 @@ # (, ) : callable that raises the python equivalent exception, or None to stub out as unmapped (java.io.IOException, ALL) : lambda x: error(errno.ECONNRESET, 'Software caused connection abort'), -(java.io.InterruptedIOException, ALL) : lambda x: timeout('timed out'), +(java.io.InterruptedIOException, ALL) : lambda x: timeout(None, 'timed out'), (java.net.BindException, ALL) : lambda x: error(errno.EADDRINUSE, 'Address already in use'), (java.net.ConnectException, ALL) : lambda x: error(errno.ECONNREFUSED, 'Connection refused'), @@ -113,7 +119,7 @@ (java.net.PortUnreachableException, ALL) : None, (java.net.ProtocolException, ALL) : None, (java.net.SocketException, ALL) : java_net_socketexception_handler, -(java.net.SocketTimeoutException, ALL) : lambda x: timeout('timed out'), +(java.net.SocketTimeoutException, ALL) : lambda x: timeout(None, 'timed out'), (java.net.UnknownHostException, ALL) : lambda x: gaierror(errno.EGETADDRINFOFAILED, 'getaddrinfo failed'), (java.nio.channels.AlreadyConnectedException, ALL) : lambda x: error(errno.EISCONN, 'Socket is already connected'), @@ -144,15 +150,14 @@ } -def _map_exception(exc, circumstance=ALL): -# print "Mapping exception: %s" % exc - mapped_exception = _exception_map.get((exc.__class__, circumstance)) +def _map_exception(java_exception, circumstance=ALL): + mapped_exception = _exception_map.get((java_exception.__class__, circumstance)) if mapped_exception: - exception = mapped_exception(exc) + py_exception = mapped_exception(java_exception) else: - exception = error(-1, 'Unmapped exception: %s' % exc) - exception.java_exception = exc - return exception + py_exception = error(-1, 'Unmapped exception: %s' % java_exception) + setattr(py_exception, 'java_exception', java_exception) + return _add_exception_attrs(py_exception) _feature_support_map = { 'ipv6': True, diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1,7 +1,3 @@ -""" -AMAK: 20050515: This module is the test_socket.py from cpython 2.4, ported to jython. -""" - import java import unittest @@ -1970,11 +1966,18 @@ class TestExceptions(unittest.TestCase): def testExceptionTree(self): - self.assert_(issubclass(socket.error, Exception)) + self.assert_(issubclass(socket.error, IOError)) self.assert_(issubclass(socket.herror, socket.error)) self.assert_(issubclass(socket.gaierror, socket.error)) self.assert_(issubclass(socket.timeout, socket.error)) + def testExceptionAtributes(self): + for exc_class_name in ['error', 'herror', 'gaierror', 'timeout']: + exc_class = getattr(socket, exc_class_name) + exc = exc_class(12345, "Expected message") + self.failUnlessEqual(getattr(exc, 'errno'), 12345, "Socket module exceptions must have an 'errno' attribute") + self.failUnlessEqual(getattr(exc, 'strerror'), "Expected message", "Socket module exceptions must have an 'strerror' attribute") + class TestJythonExceptionsShared: def tearDown(self): -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 18:08:15 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 18:08:15 +0200 Subject: [Jython-checkins] =?utf8?b?anl0aG9uICgyLjUpOiAjMTgwNTogR2l2aW5n?= =?utf8?q?_threading=2EThreads_unique_names?= Message-ID: http://hg.python.org/jython/rev/920a60f5d5b5 changeset: 6520:920a60f5d5b5 branch: 2.5 parent: 6510:c514ff14cef5 user: Alan Kennedy date: Sun Apr 01 16:58:59 2012 +0100 summary: #1805: Giving threading.Threads unique names files: NEWS | 1 + src/org/python/core/FunctionThread.java | 4 ++++ 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Jython 2.5.3b2 Bugs Fixed + - [ 1805 ] threading.Thread always gets name "Thread" instead of a discriminating one - [ 1866 ] Parser does not have mismatch token error messages caught by BaseRecognizer - [ 1837 ] gderived.py and template Ant target fail on Windows - [ 1536 ] NPE in org.python.jsr223.PyScriptEngine:187 diff --git a/src/org/python/core/FunctionThread.java b/src/org/python/core/FunctionThread.java --- a/src/org/python/core/FunctionThread.java +++ b/src/org/python/core/FunctionThread.java @@ -1,5 +1,7 @@ package org.python.core; +import java.util.concurrent.atomic.AtomicInteger; + import org.python.modules._systemrestart; public class FunctionThread extends Thread @@ -7,12 +9,14 @@ private final PyObject func; private final PyObject[] args; private final PySystemState systemState; + private static AtomicInteger counter = new AtomicInteger(); public FunctionThread(PyObject func, PyObject[] args, long stack_size, ThreadGroup group) { super(group, null, "Thread", stack_size); this.func = func; this.args = args; this.systemState = Py.getSystemState(); + this.setName("Thread-"+Integer.toString(counter.incrementAndGet())); } public void run() { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 18:08:16 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 18:08:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_2=2E5_-=3E_default=29?= =?utf8?q?=3A_merge_w/2=2E5=3A_=231805=3A_Giving_threading=2EThreads_uniqu?= =?utf8?q?e_names?= Message-ID: http://hg.python.org/jython/rev/22450f53ce82 changeset: 6521:22450f53ce82 parent: 6519:c49a9d054a4b parent: 6520:920a60f5d5b5 user: Alan Kennedy date: Sun Apr 01 17:06:41 2012 +0100 summary: merge w/2.5: #1805: Giving threading.Threads unique names files: NEWS | 1 + src/org/python/core/FunctionThread.java | 4 ++++ 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Jython 2.5.3b2 Bugs Fixed + - [ 1805 ] threading.Thread always gets name "Thread" instead of a discriminating one - [ 1866 ] Parser does not have mismatch token error messages caught by BaseRecognizer - [ 1837 ] gderived.py and template Ant target fail on Windows - [ 1536 ] NPE in org.python.jsr223.PyScriptEngine:187 diff --git a/src/org/python/core/FunctionThread.java b/src/org/python/core/FunctionThread.java --- a/src/org/python/core/FunctionThread.java +++ b/src/org/python/core/FunctionThread.java @@ -1,5 +1,7 @@ package org.python.core; +import java.util.concurrent.atomic.AtomicInteger; + import org.python.modules._systemrestart; public class FunctionThread extends Thread @@ -7,12 +9,14 @@ private final PyObject func; private final PyObject[] args; private final PySystemState systemState; + private static AtomicInteger counter = new AtomicInteger(); public FunctionThread(PyObject func, PyObject[] args, long stack_size, ThreadGroup group) { super(group, null, "Thread", stack_size); this.func = func; this.args = args; this.systemState = Py.getSystemState(); + this.setName("Thread-"+Integer.toString(counter.incrementAndGet())); } public void run() { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 19:33:20 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 19:33:20 +0200 Subject: [Jython-checkins] =?utf8?b?anl0aG9uICgyLjUpOiAjMTUzNzogRml4IGZv?= =?utf8?q?r_classloading_issues_with_MATLAB/OpenJDK?= Message-ID: http://hg.python.org/jython/rev/a972112ac1b1 changeset: 6522:a972112ac1b1 branch: 2.5 parent: 6520:920a60f5d5b5 user: Alan Kennedy date: Sun Apr 01 18:16:24 2012 +0100 summary: #1537: Fix for classloading issues with MATLAB/OpenJDK files: Lib/xml/parsers/expat.py | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Lib/xml/parsers/expat.py b/Lib/xml/parsers/expat.py --- a/Lib/xml/parsers/expat.py +++ b/Lib/xml/parsers/expat.py @@ -47,12 +47,8 @@ from org.xml.sax.ext import DefaultHandler2 # Xerces -try: - # Name mangled by jarjar? - import org.python.apache.xerces.parsers.SAXParser - _xerces_parser = "org.python.apache.xerces.parsers.SAXParser" -except ImportError: - _xerces_parser = "org.apache.xerces.parsers.SAXParser" +_mangled_xerces_parser_name = "org.python.apache.xerces.parsers.SAXParser" +_xerces_parser_name = "org.apache.xerces.parsers.SAXParser" # @expat args registry @@ -88,7 +84,11 @@ "not %s" % type(namespace_separator).__name__) raise TypeError(error) - self._reader = XMLReaderFactory.createXMLReader(_xerces_parser) + # See http://bugs.jython.org/issue1537 + try: + self._reader = XMLReaderFactory.createXMLReader(_mangled_xerces_parser_name) + except: + self._reader = XMLReaderFactory.createXMLReader(_xerces_parser_name) if self.namespace_separator is None: try: -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 19:33:20 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 19:33:20 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=282=2E5=29=3A_NEWS_update?= Message-ID: http://hg.python.org/jython/rev/e2f76787357c changeset: 6523:e2f76787357c branch: 2.5 user: Alan Kennedy date: Sun Apr 01 18:18:31 2012 +0100 summary: NEWS update files: NEWS | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ Jython 2.5.3b2 Bugs Fixed + - [ 1537 ] expat: org.python.apache.xerces.parsers.SAXParser + - [ 1268 ] SAX parsers wants to load external DTDs, causing an exception - [ 1805 ] threading.Thread always gets name "Thread" instead of a discriminating one - [ 1866 ] Parser does not have mismatch token error messages caught by BaseRecognizer - [ 1837 ] gderived.py and template Ant target fail on Windows -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 19:33:20 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 19:33:20 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_2=2E5_-=3E_default=29?= =?utf8?q?=3A_merge_w/2=2E5=3A_=231537=3A_Fix_for_classloading_issues_with?= =?utf8?q?_MATLAB/OpenJDK?= Message-ID: http://hg.python.org/jython/rev/491a9451d21d changeset: 6524:491a9451d21d parent: 6521:22450f53ce82 parent: 6523:e2f76787357c user: Alan Kennedy date: Sun Apr 01 18:32:03 2012 +0100 summary: merge w/2.5: #1537: Fix for classloading issues with MATLAB/OpenJDK files: Lib/xml/parsers/expat.py | 14 +++++++------- NEWS | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Lib/xml/parsers/expat.py b/Lib/xml/parsers/expat.py --- a/Lib/xml/parsers/expat.py +++ b/Lib/xml/parsers/expat.py @@ -47,12 +47,8 @@ from org.xml.sax.ext import DefaultHandler2 # Xerces -try: - # Name mangled by jarjar? - import org.python.apache.xerces.parsers.SAXParser - _xerces_parser = "org.python.apache.xerces.parsers.SAXParser" -except ImportError: - _xerces_parser = "org.apache.xerces.parsers.SAXParser" +_mangled_xerces_parser_name = "org.python.apache.xerces.parsers.SAXParser" +_xerces_parser_name = "org.apache.xerces.parsers.SAXParser" # @expat args registry @@ -88,7 +84,11 @@ "not %s" % type(namespace_separator).__name__) raise TypeError(error) - self._reader = XMLReaderFactory.createXMLReader(_xerces_parser) + # See http://bugs.jython.org/issue1537 + try: + self._reader = XMLReaderFactory.createXMLReader(_mangled_xerces_parser_name) + except: + self._reader = XMLReaderFactory.createXMLReader(_xerces_parser_name) if self.namespace_separator is None: try: diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ Jython 2.5.3b2 Bugs Fixed + - [ 1537 ] expat: org.python.apache.xerces.parsers.SAXParser + - [ 1268 ] SAX parsers wants to load external DTDs, causing an exception - [ 1805 ] threading.Thread always gets name "Thread" instead of a discriminating one - [ 1866 ] Parser does not have mismatch token error messages caught by BaseRecognizer - [ 1837 ] gderived.py and template Ant target fail on Windows -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 20:47:53 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 20:47:53 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=282=2E5=29=3A_Fixing_socket_co?= =?utf8?q?nstant_to_name_mapping_for_error_reporting?= Message-ID: http://hg.python.org/jython/rev/1b18d875074e changeset: 6525:1b18d875074e branch: 2.5 parent: 6523:e2f76787357c user: Alan Kennedy date: Sun Apr 01 19:38:30 2012 +0100 summary: Fixing socket constant to name mapping for error reporting files: Lib/socket.py | 4 +++- Lib/test/test_socket.py | 5 +++++ 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/Lib/socket.py b/Lib/socket.py --- a/Lib/socket.py +++ b/Lib/socket.py @@ -267,7 +267,9 @@ sock_module = sys.modules['socket'] try: for name in dir(sock_module): - if getattr(sock_module, name) is const_value: + if getattr(sock_module, name) is const_value and \ + (name.startswith('SO_') or name.startswith('SOL_') or \ + name.startswith('TCP_') or name.startswith('IPPROTO_')): return name return "Unknown" finally: diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -279,6 +279,11 @@ socket.SOL_SOCKET socket.SO_REUSEADDR + def testConstantToNameMapping(self): + # Testing for mission critical constants + for name in ['SOL_SOCKET', 'IPPROTO_TCP', 'IPPROTO_UDP', 'SO_BROADCAST', 'SO_KEEPALIVE', 'TCP_NODELAY', 'SO_ACCEPTCONN', 'SO_DEBUG']: + self.failUnlessEqual(socket._constant_to_name(getattr(socket, name)), name) + def testHostnameRes(self): # Testing hostname resolution mechanisms hostname = socket.gethostname() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sun Apr 1 20:47:53 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sun, 01 Apr 2012 20:47:53 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_2=2E5_-=3E_default=29?= =?utf8?q?=3A_merge_w/2=2E5=3A_Fixing_socket_constant_to_name_mapping_for_?= =?utf8?q?error_reporting?= Message-ID: http://hg.python.org/jython/rev/623abab032b2 changeset: 6526:623abab032b2 parent: 6524:491a9451d21d parent: 6525:1b18d875074e user: Alan Kennedy date: Sun Apr 01 19:46:40 2012 +0100 summary: merge w/2.5: Fixing socket constant to name mapping for error reporting files: Lib/socket.py | 4 +++- Lib/test/test_socket.py | 5 +++++ 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/Lib/socket.py b/Lib/socket.py --- a/Lib/socket.py +++ b/Lib/socket.py @@ -272,7 +272,9 @@ sock_module = sys.modules['socket'] try: for name in dir(sock_module): - if getattr(sock_module, name) is const_value: + if getattr(sock_module, name) is const_value and \ + (name.startswith('SO_') or name.startswith('SOL_') or \ + name.startswith('TCP_') or name.startswith('IPPROTO_')): return name return "Unknown" finally: diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -275,6 +275,11 @@ socket.SOL_SOCKET socket.SO_REUSEADDR + def testConstantToNameMapping(self): + # Testing for mission critical constants + for name in ['SOL_SOCKET', 'IPPROTO_TCP', 'IPPROTO_UDP', 'SO_BROADCAST', 'SO_KEEPALIVE', 'TCP_NODELAY', 'SO_ACCEPTCONN', 'SO_DEBUG']: + self.failUnlessEqual(socket._constant_to_name(getattr(socket, name)), name) + def testHostnameRes(self): # Testing hostname resolution mechanisms hostname = socket.gethostname() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 06:12:29 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 06:12:29 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_First_pass_on_float_=5F=5Ffo?= =?utf8?q?rmat=5F=5F=2E_Adapted_from_PyString=27s_StringFormatter=2E?= Message-ID: http://hg.python.org/jython/rev/299cedecbd6d changeset: 6527:299cedecbd6d user: Frank Wierzbicki date: Tue Apr 03 21:12:19 2012 -0700 summary: First pass on float __format__. Adapted from PyString's StringFormatter. files: Lib/test/test_types.py | 57 +- src/org/python/core/PyFloat.java | 49 ++ src/org/python/core/stringlib/Formatter.java | 232 ++++++++++ 3 files changed, 313 insertions(+), 25 deletions(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -601,7 +601,6 @@ self.assertEqual(len(format(0, lfmt)), len(format(x, lfmt))) self.assertEqual(len(format(0, cfmt)), len(format(x, cfmt))) - @unittest.skipIf(is_jython, "FIXME: not working") def test_float__format__(self): # these should be rewritten to use both format(x, spec) and # x.__format__(spec) @@ -671,25 +670,30 @@ # a totaly empty format specifier means something else. # So, just use a sign flag test(1e200, '+g', '+1e+200') - test(1e200, '+', '+1e+200') + #FIXME: not working. + #test(1e200, '+', '+1e+200') test(1.1e200, '+g', '+1.1e+200') - test(1.1e200, '+', '+1.1e+200') + #FIXME: not working. + ##test(1.1e200, '+', '+1.1e+200') test(1.1e200, '+g', '+1.1e+200') - test(1.1e200, '+', '+1.1e+200') + #FIXME: not working. + #test(1.1e200, '+', '+1.1e+200') # 0 padding test(1234., '010f', '1234.000000') test(1234., '011f', '1234.000000') test(1234., '012f', '01234.000000') test(-1234., '011f', '-1234.000000') - test(-1234., '012f', '-1234.000000') - test(-1234., '013f', '-01234.000000') - test(-1234.12341234, '013f', '-01234.123412') - test(-123456.12341234, '011.2f', '-0123456.12') + #FIXME: not working. + #test(-1234., '012f', '-1234.000000') + #test(-1234., '013f', '-01234.000000') + #test(-1234.12341234, '013f', '-01234.123412') + #test(-123456.12341234, '011.2f', '-0123456.12') # issue 5782, commas with no specifier type - test(1.2, '010,.2', '0,000,001.2') + #FIXME: not working. + #test(1.2, '010,.2', '0,000,001.2') # 0 padding with commas test(1234., '011,f', '1,234.000000') @@ -697,12 +701,13 @@ test(1234., '013,f', '01,234.000000') test(-1234., '012,f', '-1,234.000000') test(-1234., '013,f', '-1,234.000000') - test(-1234., '014,f', '-01,234.000000') - test(-12345., '015,f', '-012,345.000000') - test(-123456., '016,f', '-0,123,456.000000') - test(-123456., '017,f', '-0,123,456.000000') - test(-123456.12341234, '017,f', '-0,123,456.123412') - test(-123456.12341234, '013,.2f', '-0,123,456.12') + #FIXME: not working. + #test(-1234., '014,f', '-01,234.000000') + #test(-12345., '015,f', '-012,345.000000') + #test(-123456., '016,f', '-0,123,456.000000') + #test(-123456., '017,f', '-0,123,456.000000') + #test(-123456.12341234, '017,f', '-0,123,456.123412') + #test(-123456.12341234, '013,.2f', '-0,123,456.12') # % formatting test(-1.0, '%', '-100.000000%') @@ -725,19 +730,21 @@ self.assertRaises(ValueError, format, -1e-100, format_spec) # Alternate formatting is not supported - self.assertRaises(ValueError, format, 0.0, '#') + #FIXME: not working. + ##self.assertRaises(ValueError, format, 0.0, '#') self.assertRaises(ValueError, format, 0.0, '#20f') # Issue 6902 - test(12345.6, "0<20", '12345.60000000000000') - test(12345.6, "1<20", '12345.61111111111111') - test(12345.6, "*<20", '12345.6*************') - test(12345.6, "0>20", '000000000000012345.6') - test(12345.6, "1>20", '111111111111112345.6') - test(12345.6, "*>20", '*************12345.6') - test(12345.6, "0=20", '000000000000012345.6') - test(12345.6, "1=20", '111111111111112345.6') - test(12345.6, "*=20", '*************12345.6') + #FIXME: not working. + #test(12345.6, "0<20", '12345.60000000000000') + #test(12345.6, "1<20", '12345.61111111111111') + #test(12345.6, "*<20", '12345.6*************') + #test(12345.6, "0>20", '000000000000012345.6') + #test(12345.6, "1>20", '111111111111112345.6') + #test(12345.6, "*>20", '*************12345.6') + #test(12345.6, "0=20", '000000000000012345.6') + #test(12345.6, "1=20", '111111111111112345.6') + #test(12345.6, "*=20", '*************12345.6') @unittest.skipIf(is_jython, "FIXME: not working") def test_format_spec_errors(self): diff --git a/src/org/python/core/PyFloat.java b/src/org/python/core/PyFloat.java --- a/src/org/python/core/PyFloat.java +++ b/src/org/python/core/PyFloat.java @@ -4,6 +4,9 @@ */ package org.python.core; +import org.python.core.stringlib.Formatter; +import org.python.core.stringlib.InternalFormatSpec; +import org.python.core.stringlib.InternalFormatSpecParser; import java.io.Serializable; import java.math.BigDecimal; @@ -811,6 +814,52 @@ } @Override + public PyObject __format__(PyObject formatSpec) { + return float___format__(formatSpec); + } + + @ExposedMethod(doc = BuiltinDocs.float___format___doc) + final PyObject float___format__(PyObject formatSpec) { + return formatImpl(getValue(), formatSpec); + } + + static PyObject formatImpl(double d, PyObject formatSpec) { + if (!(formatSpec instanceof PyString)) { + throw Py.TypeError("__format__ requires str or unicode"); + } + + PyString formatSpecStr = (PyString) formatSpec; + String result; + try { + String specString = formatSpecStr.getString(); + InternalFormatSpec spec = new InternalFormatSpecParser(specString).parse(); + if (spec.type == '\0'){ + return (Py.newFloat(d)).__str__(); + } + switch (spec.type) { + case '\0': /* No format code: like 'g', but with at least one decimal. */ + case 'e': + case 'E': + case 'f': + case 'F': + case 'g': + case 'G': + case 'n': + case '%': + result = Formatter.formatFloat(d, spec); + break; + default: + /* unknown */ + throw Py.ValueError(String.format("Unknown format code '%c' for object of type 'float'", + spec.type)); + } + } catch (IllegalArgumentException e) { + throw Py.ValueError(e.getMessage()); + } + return formatSpecStr.createInstance(result); + } + + @Override public double asDouble() { return getValue(); } diff --git a/src/org/python/core/stringlib/Formatter.java b/src/org/python/core/stringlib/Formatter.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/stringlib/Formatter.java @@ -0,0 +1,232 @@ +package org.python.core.stringlib; +import org.python.core.*; +import org.python.core.util.ExtraMath; + +import java.math.BigInteger; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; + + +public class Formatter { + public static String formatFloat(double value, InternalFormatSpec spec) { + InternalFormatter f = new InternalFormatter(spec); + return f.format(value); + } +} + +//Adapted from PyString's StringFormatter class. +final class InternalFormatter { + InternalFormatSpec spec; + boolean negative; + int precision; + + public InternalFormatter(InternalFormatSpec spec) { + this.spec = spec; + this.precision = spec.precision; + if (this.precision == -1) + this.precision = 6; + } + + private void checkPrecision(String type) { + if(precision > 250) { + // A magic number. Larger than in CPython. + throw Py.OverflowError("formatted " + type + " is too long (precision too long?)"); + } + + } + + private String formatExp(long v, int radix) { + checkPrecision("integer"); + if (v < 0) { + negative = true; + v = -v; + } + String s = Long.toString(v, radix); + while (s.length() < 2) { + s = "0"+s; + } + return s; + } + + static class DecimalFormatTemplate { + static DecimalFormat template; + static { + template = new DecimalFormat("#,##0.#####"); + DecimalFormatSymbols symbols = template.getDecimalFormatSymbols(); + symbols.setNaN("nan"); + symbols.setInfinity("inf"); + template.setDecimalFormatSymbols(symbols); + template.setGroupingUsed(false); + } + } + + private static final DecimalFormat getDecimalFormat() { + return (DecimalFormat)DecimalFormatTemplate.template.clone(); + } + + static class PercentageFormatTemplate { + static DecimalFormat template; + static { + template = new DecimalFormat("#,##0.#####%"); + DecimalFormatSymbols symbols = template.getDecimalFormatSymbols(); + symbols.setNaN("nan"); + symbols.setInfinity("inf"); + template.setDecimalFormatSymbols(symbols); + template.setGroupingUsed(false); + } + } + + private static final DecimalFormat getPercentageFormat() { + return (DecimalFormat)PercentageFormatTemplate.template.clone(); + } + + private String formatFloatDecimal(double v, boolean truncate) { + checkPrecision("decimal"); + if (v < 0) { + v = -v; + negative = true; + } + + DecimalFormat decimalFormat = getDecimalFormat(); + decimalFormat.setMaximumFractionDigits(precision); + decimalFormat.setMinimumFractionDigits(truncate ? 0 : precision); + + if (spec.thousands_separators) { + decimalFormat.setGroupingUsed(true); + } + String ret = decimalFormat.format(v); + return ret; + } + + private String formatPercentage(double v, boolean truncate) { + checkPrecision("decimal"); + if (v < 0) { + v = -v; + negative = true; + } + + DecimalFormat decimalFormat = getPercentageFormat(); + decimalFormat.setMaximumFractionDigits(precision); + decimalFormat.setMinimumFractionDigits(truncate ? 0 : precision); + + String ret = decimalFormat.format(v); + return ret; + } + + private String formatFloatExponential(double v, char e, boolean truncate) { + StringBuilder buf = new StringBuilder(); + boolean isNegative = false; + if (v < 0) { + v = -v; + isNegative = true; + } + double power = 0.0; + if (v > 0) + power = ExtraMath.closeFloor(Math.log10(v)); + String exp = formatExp((long)power, 10); + if (negative) { + negative = false; + exp = '-'+exp; + } + else { + exp = '+' + exp; + } + + double base = v/Math.pow(10, power); + buf.append(formatFloatDecimal(base, truncate)); + buf.append(e); + + buf.append(exp); + negative = isNegative; + + return buf.toString(); + } + + @SuppressWarnings("fallthrough") + public String format(double value) { + String string; + + if (spec.alternate) { + throw Py.ValueError("Alternate form (#) not allowed in float format specifier"); + } + int sign = Double.compare(value, 0.0d); + + if (Double.isNaN(value)) { + if (spec.type == 'E' || spec.type == 'F' || spec.type == 'G') { + string = "NAN"; + } else { + string = "nan"; + } + } else if (Double.isInfinite(value)) { + if (spec.type == 'E' || spec.type == 'F' || spec.type == 'G') { + if (value > 0) { + string = "INF"; + } else { + string = "-INF"; + } + } else { + if (value > 0) { + string = "inf"; + } else { + string = "-inf"; + } + } + } else { + + switch(spec.type) { + case 'e': + case 'E': + string = formatFloatExponential(value, spec.type, false); + if (spec.type == 'E') { + string = string.toUpperCase(); + } + break; + case 'f': + case 'F': + string = formatFloatDecimal(value, false); + if (spec.type == 'F') { + string = string.toUpperCase(); + } + break; + case 'g': + case 'G': + int exponent = (int)ExtraMath.closeFloor(Math.log10(Math.abs(value == 0 ? 1 : value))); + int origPrecision = precision; + if (exponent >= -4 && exponent < precision) { + precision -= exponent + 1; + string = formatFloatDecimal(value, !spec.alternate); + } else { + // Exponential precision is the number of digits after the decimal + // point, whereas 'g' precision is the number of significant digits -- + // and exponential always provides one significant digit before the + // decimal point + precision--; + string = formatFloatExponential(value, (char)(spec.type-2), !spec.alternate); + } + if (spec.type == 'G') { + string = string.toUpperCase(); + } + precision = origPrecision; + break; + case '%': + string = formatPercentage(value, false); + break; + default: + //Should never get here, since this was checked in PyFloat. + throw Py.ValueError(String.format("Unknown format code '%c' for object of type 'float'", + spec.type)); + } + } + if (sign >= 0) { + if (spec.sign == '+') { + string = "+" + string; + } else if (spec.sign == ' ') { + string = " " + string; + } + } + if (sign < 0 && string.charAt(0) != '-') { + string = "-" + string; + } + return spec.pad(string, '>', 0); + } +} -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 07:25:49 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 07:25:49 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_First_cut_at_complex_=5F=5Ff?= =?utf8?b?b3JtYXRfXy4=?= Message-ID: http://hg.python.org/jython/rev/8dc0dabd4e4b changeset: 6528:8dc0dabd4e4b user: Frank Wierzbicki date: Tue Apr 03 22:25:35 2012 -0700 summary: First cut at complex __format__. files: src/org/python/core/PyComplex.java | 48 ++++++++++ src/org/python/core/stringlib/Formatter.java | 12 ++ 2 files changed, 60 insertions(+), 0 deletions(-) diff --git a/src/org/python/core/PyComplex.java b/src/org/python/core/PyComplex.java --- a/src/org/python/core/PyComplex.java +++ b/src/org/python/core/PyComplex.java @@ -4,6 +4,10 @@ */ package org.python.core; +import org.python.core.stringlib.Formatter; +import org.python.core.stringlib.InternalFormatSpec; +import org.python.core.stringlib.InternalFormatSpecParser; + import org.python.expose.ExposedGet; import org.python.expose.ExposedMethod; import org.python.expose.ExposedNew; @@ -780,6 +784,50 @@ } @Override + public PyObject __format__(PyObject formatSpec) { + return complex___format__(formatSpec); + } + + @ExposedMethod(doc = BuiltinDocs.complex___format___doc) + final PyObject complex___format__(PyObject formatSpec) { + return formatImpl(real, imag, formatSpec); + } + + static PyObject formatImpl(double r, double i, PyObject formatSpec) { + if (!(formatSpec instanceof PyString)) { + throw Py.TypeError("__format__ requires str or unicode"); + } + + PyString formatSpecStr = (PyString) formatSpec; + String result; + try { + String specString = formatSpecStr.getString(); + InternalFormatSpec spec = new InternalFormatSpecParser(specString).parse(); + switch (spec.type) { + case '\0': /* No format code: like 'g', but with at least one decimal. */ + case 'e': + case 'E': + case 'f': + case 'F': + case 'g': + case 'G': + case 'n': + case '%': + result = Formatter.formatComplex(r, i, spec); + break; + default: + /* unknown */ + throw Py.ValueError(String.format("Unknown format code '%c' for object of type 'complex'", + spec.type)); + } + } catch (IllegalArgumentException e) { + throw Py.ValueError(e.getMessage()); + } + return formatSpecStr.createInstance(result); + } + + + @Override public boolean isNumberType() { return true; } diff --git a/src/org/python/core/stringlib/Formatter.java b/src/org/python/core/stringlib/Formatter.java --- a/src/org/python/core/stringlib/Formatter.java +++ b/src/org/python/core/stringlib/Formatter.java @@ -8,10 +8,22 @@ public class Formatter { + public static String formatFloat(double value, InternalFormatSpec spec) { InternalFormatter f = new InternalFormatter(spec); return f.format(value); } + + public static String formatComplex(double real, double imag, InternalFormatSpec spec) { + InternalFormatter f = new InternalFormatter(spec); + String r = f.format(real); + String i = f.format(imag); + if (i.charAt(0) == '-') { + return r + i + "j"; + } else { + return r + "+" + i + "j"; + } + } } //Adapted from PyString's StringFormatter class. -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 20:37:25 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 20:37:25 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_math=2Etrunc_support=2E?= Message-ID: http://hg.python.org/jython/rev/ba98e28a2dea changeset: 6529:ba98e28a2dea user: Frank Wierzbicki date: Wed Apr 04 11:37:09 2012 -0700 summary: math.trunc support. files: src/org/python/core/PyFloat.java | 17 +++++++++++++++++ src/org/python/core/PyInteger.java | 10 ++++++++++ src/org/python/core/PyLong.java | 11 +++++++++++ src/org/python/core/PyObject.java | 11 +++++++++++ src/org/python/modules/math.java | 4 ++++ 5 files changed, 53 insertions(+), 0 deletions(-) diff --git a/src/org/python/core/PyFloat.java b/src/org/python/core/PyFloat.java --- a/src/org/python/core/PyFloat.java +++ b/src/org/python/core/PyFloat.java @@ -9,6 +9,7 @@ import org.python.core.stringlib.InternalFormatSpecParser; import java.io.Serializable; import java.math.BigDecimal; +import java.math.RoundingMode; import org.python.expose.ExposedClassMethod; import org.python.expose.ExposedGet; @@ -799,6 +800,22 @@ } @Override + public PyObject __trunc__() { + return float___trunc__(); + } + + @ExposedMethod(doc = BuiltinDocs.float___trunc___doc) + final PyObject float___trunc__() { + if (value < Integer.MAX_VALUE) { + return new PyInteger((int)value); + } else if (value < Long.MAX_VALUE) { + return new PyLong((long)value); + } + BigDecimal d = new BigDecimal(value); + return new PyLong(d.toBigInteger()); + } + + @Override public PyComplex __complex__() { return new PyComplex(getValue(), 0.); } diff --git a/src/org/python/core/PyInteger.java b/src/org/python/core/PyInteger.java --- a/src/org/python/core/PyInteger.java +++ b/src/org/python/core/PyInteger.java @@ -868,6 +868,16 @@ } @Override + public PyObject __trunc__() { + return int___trunc__(); + } + + @ExposedMethod(doc = BuiltinDocs.int___trunc___doc) + final PyObject int___trunc__() { + return this; + } + + @Override public PyComplex __complex__() { return new PyComplex(getValue(), 0.); } diff --git a/src/org/python/core/PyLong.java b/src/org/python/core/PyLong.java --- a/src/org/python/core/PyLong.java +++ b/src/org/python/core/PyLong.java @@ -920,6 +920,17 @@ } @Override + public PyObject __trunc__() { + return long___trunc__(); + } + + @ExposedMethod(doc = BuiltinDocs.long___trunc___doc) + final PyObject long___trunc__() { + return this; + } + + + @Override public PyString __oct__() { return long___oct__(); } diff --git a/src/org/python/core/PyObject.java b/src/org/python/core/PyObject.java --- a/src/org/python/core/PyObject.java +++ b/src/org/python/core/PyObject.java @@ -1800,6 +1800,17 @@ } /** + * Equivalent to the standard Python __trunc__ method. + * Should only be overridden by numeric objects that can reasonably + * be truncated to an Integral. + * + * @return the Integral closest to x between 0 and x. + **/ + public PyObject __trunc__() { + throw Py.AttributeError("__trunc__"); + } + + /** * Equivalent to the standard Python __pos__ method. * * @return +this. diff --git a/src/org/python/modules/math.java b/src/org/python/modules/math.java --- a/src/org/python/modules/math.java +++ b/src/org/python/modules/math.java @@ -357,6 +357,10 @@ return new PyTuple(new PyFloat(x), new PyInteger(exponent)); } + public static PyObject trunc(PyObject number) { + return number.__getattr__("__trunc__").__call__(); + } + public static double ldexp(double v, PyObject wObj) { if (ZERO == v) { return v; // can be negative zero -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 20:39:33 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 20:39:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Ignore_old_style_classes_for?= =?utf8?q?_instancecheck/subclasscheck=2E_Fixes_test=5Ftypechecks?= Message-ID: http://hg.python.org/jython/rev/df14a2f59dc5 changeset: 6530:df14a2f59dc5 user: Frank Wierzbicki date: Wed Apr 04 11:39:10 2012 -0700 summary: Ignore old style classes for instancecheck/subclasscheck. Fixes test_typechecks files: src/org/python/core/Py.java | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/org/python/core/Py.java b/src/org/python/core/Py.java --- a/src/org/python/core/Py.java +++ b/src/org/python/core/Py.java @@ -2024,7 +2024,7 @@ /** * Attempt to dispatch an isinstance/issubclass call to cls's associated - * __instance/subclasscheck__. + * __instancecheck__/__subclasscheck__. * * @param checkerArg the argument to call the checker with * @param cls a Python class @@ -2034,6 +2034,11 @@ */ private static PyObject dispatchToChecker(PyObject checkerArg, PyObject cls, String checkerName) { + //Ignore old style classes. + if (cls instanceof PyClass) { + return null; + } + PyObject checker = cls.__findattr__(checkerName); if (checker == null) { return null; -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 22:45:12 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 22:45:12 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Check_for_NaN_and_Infinity_f?= =?utf8?b?b3IgZmxvYXQgX190cnVuY19fLg==?= Message-ID: http://hg.python.org/jython/rev/cad543309eb3 changeset: 6531:cad543309eb3 user: Frank Wierzbicki date: Wed Apr 04 13:44:59 2012 -0700 summary: Check for NaN and Infinity for float __trunc__. files: src/org/python/core/PyFloat.java | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/src/org/python/core/PyFloat.java b/src/org/python/core/PyFloat.java --- a/src/org/python/core/PyFloat.java +++ b/src/org/python/core/PyFloat.java @@ -806,6 +806,12 @@ @ExposedMethod(doc = BuiltinDocs.float___trunc___doc) final PyObject float___trunc__() { + if (Double.isNaN(value)) { + throw Py.ValueError("cannot convert float NaN to integer"); + } + if (Double.isInfinite(value)) { + throw Py.OverflowError("cannot convert float infinity to integer"); + } if (value < Integer.MAX_VALUE) { return new PyInteger((int)value); } else if (value < Long.MAX_VALUE) { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 23:18:24 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 23:18:24 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_for_complex_format=2E?= Message-ID: http://hg.python.org/jython/rev/ba809fe5cf75 changeset: 6532:ba809fe5cf75 user: Frank Wierzbicki date: Wed Apr 04 14:18:13 2012 -0700 summary: Fix for complex format. files: src/org/python/core/stringlib/Formatter.java | 11 ++++++--- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/org/python/core/stringlib/Formatter.java b/src/org/python/core/stringlib/Formatter.java --- a/src/org/python/core/stringlib/Formatter.java +++ b/src/org/python/core/stringlib/Formatter.java @@ -11,18 +11,21 @@ public static String formatFloat(double value, InternalFormatSpec spec) { InternalFormatter f = new InternalFormatter(spec); - return f.format(value); + String string = f.format(value); + return spec.pad(string, '>', 0); } public static String formatComplex(double real, double imag, InternalFormatSpec spec) { + String string; InternalFormatter f = new InternalFormatter(spec); String r = f.format(real); String i = f.format(imag); if (i.charAt(0) == '-') { - return r + i + "j"; + string = r + i + "j"; } else { - return r + "+" + i + "j"; + string = r + "+" + i + "j"; } + return spec.pad(string, '>', 0); } } @@ -239,6 +242,6 @@ if (sign < 0 && string.charAt(0) != '-') { string = "-" + string; } - return spec.pad(string, '>', 0); + return string; } } -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 4 23:49:16 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 04 Apr 2012 23:49:16 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Add_complex_conjugates_to_ba?= =?utf8?q?sic_types=2E_Fixes_test=5Fabstract=5Fnumbers=2E?= Message-ID: http://hg.python.org/jython/rev/81a29b78f667 changeset: 6533:81a29b78f667 user: Frank Wierzbicki date: Wed Apr 04 14:49:04 2012 -0700 summary: Add complex conjugates to basic types. Fixes test_abstract_numbers. files: src/org/python/core/PyFloat.java | 10 ++++++++++ src/org/python/core/PyInteger.java | 10 ++++++++++ src/org/python/core/PyLong.java | 9 +++++++++ src/org/python/core/PyObject.java | 11 +++++++++++ 4 files changed, 40 insertions(+), 0 deletions(-) diff --git a/src/org/python/core/PyFloat.java b/src/org/python/core/PyFloat.java --- a/src/org/python/core/PyFloat.java +++ b/src/org/python/core/PyFloat.java @@ -822,6 +822,16 @@ } @Override + public PyObject conjugate() { + return float_conjugate(); + } + + @ExposedMethod(doc = BuiltinDocs.float_conjugate_doc) + final PyObject float_conjugate() { + return this; + } + + @Override public PyComplex __complex__() { return new PyComplex(getValue(), 0.); } diff --git a/src/org/python/core/PyInteger.java b/src/org/python/core/PyInteger.java --- a/src/org/python/core/PyInteger.java +++ b/src/org/python/core/PyInteger.java @@ -878,6 +878,16 @@ } @Override + public PyObject conjugate() { + return int_conjugate(); + } + + @ExposedMethod(doc = BuiltinDocs.int_conjugate_doc) + final PyObject int_conjugate() { + return this; + } + + @Override public PyComplex __complex__() { return new PyComplex(getValue(), 0.); } diff --git a/src/org/python/core/PyLong.java b/src/org/python/core/PyLong.java --- a/src/org/python/core/PyLong.java +++ b/src/org/python/core/PyLong.java @@ -929,6 +929,15 @@ return this; } + @Override + public PyObject conjugate() { + return long_conjugate(); + } + + @ExposedMethod(doc = BuiltinDocs.long_conjugate_doc) + final PyObject long_conjugate() { + return this; + } @Override public PyString __oct__() { diff --git a/src/org/python/core/PyObject.java b/src/org/python/core/PyObject.java --- a/src/org/python/core/PyObject.java +++ b/src/org/python/core/PyObject.java @@ -1811,6 +1811,17 @@ } /** + * Equivalent to the standard Python conjugate method. + * Should only be overridden by numeric objects that can calculate a + * complex conjugate. + * + * @return the complex conjugate. + **/ + public PyObject conjugate() { + throw Py.AttributeError("conjugate"); + } + + /** * Equivalent to the standard Python __pos__ method. * * @return +this. -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Thu Apr 5 03:36:07 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Thu, 05 Apr 2012 03:36:07 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_as=5Finteger=5Fratio_impleme?= =?utf8?q?ntation=2E?= Message-ID: http://hg.python.org/jython/rev/ef7876da994f changeset: 6534:ef7876da994f user: Frank Wierzbicki date: Wed Apr 04 18:35:54 2012 -0700 summary: as_integer_ratio implementation. files: src/org/python/core/PyFloat.java | 32 ++++++++++++++++++++ 1 files changed, 32 insertions(+), 0 deletions(-) diff --git a/src/org/python/core/PyFloat.java b/src/org/python/core/PyFloat.java --- a/src/org/python/core/PyFloat.java +++ b/src/org/python/core/PyFloat.java @@ -7,6 +7,7 @@ import org.python.core.stringlib.Formatter; import org.python.core.stringlib.InternalFormatSpec; import org.python.core.stringlib.InternalFormatSpecParser; +import org.python.modules.math; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -892,6 +893,37 @@ return formatSpecStr.createInstance(result); } + @ExposedMethod(doc = BuiltinDocs.float_as_integer_ratio_doc) + public PyTuple as_integer_ratio() { + if (Double.isInfinite(value)) { + throw Py.OverflowError("Cannot pass infinity to float.as_integer_ratio."); + } + if (Double.isNaN(value)) { + throw Py.ValueError("Cannot pass NaN to float.as_integer_ratio."); + } + PyTuple frexp = math.frexp(value); + double float_part = ((Double)frexp.get(0)).doubleValue(); + int exponent = ((Integer)frexp.get(1)).intValue(); + for (int i=0; i<300 && float_part != Math.floor(float_part); i++) { + float_part *= 2.0; + exponent--; + } + /* self == float_part * 2**exponent exactly and float_part is integral. + If FLT_RADIX != 2, the 300 steps may leave a tiny fractional part + to be truncated by PyLong_FromDouble(). */ + + PyLong numerator = new PyLong(float_part); + PyLong denominator = new PyLong(1); + PyLong py_exponent = new PyLong(Math.abs(exponent)); + py_exponent = (PyLong)denominator.__lshift__(py_exponent); + if (exponent > 0) { + numerator = new PyLong(numerator.getValue().multiply(py_exponent.getValue())); + } else { + denominator = py_exponent; + } + return new PyTuple(numerator, denominator); + } + @Override public double asDouble() { return getValue(); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 00:22:02 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 00:22:02 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Extend_int_to_use_=5F=5Ftrun?= =?utf8?q?c=5F=5F=2E_Fixes_test=5Ffractions=2E?= Message-ID: http://hg.python.org/jython/rev/a57539af8010 changeset: 6535:a57539af8010 user: Frank Wierzbicki date: Thu Apr 05 15:21:50 2012 -0700 summary: Extend int to use __trunc__. Fixes test_fractions. files: src/org/python/core/PyInteger.java | 32 ++++++++++++++++- 1 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/org/python/core/PyInteger.java b/src/org/python/core/PyInteger.java --- a/src/org/python/core/PyInteger.java +++ b/src/org/python/core/PyInteger.java @@ -96,20 +96,46 @@ } // xxx /** - * @return the result of x.__int__ - * @throws Py.Type error if x.__int__ throws an Py.AttributeError + * @return convert to an int. + * @throws TypeError and AttributeError. */ private static PyObject asPyInteger(PyObject x) { + //XXX: Not sure that this perfectly matches CPython semantics. try { return x.__int__(); } catch (PyException pye) { if (!pye.match(Py.AttributeError)) { throw pye; } - throw Py.TypeError("int() argument must be a string or a number"); + try { + PyObject integral = x.__getattr__("__trunc__").__call__(); + return convertIntegralToInt(integral); + } catch (PyException pye2) { + if (!pye2.match(Py.AttributeError)) { + throw pye2; + } + throw Py.TypeError( + String.format("int() argument must be a string or a number, not '%.200s'", x)); + } } } + /** + * @return convert to an int. + * @throws TypeError and AttributeError. + */ + private static PyObject convertIntegralToInt(PyObject integral) { + if (!(integral instanceof PyInteger) && !(integral instanceof PyLong)) { + PyObject i = integral.__getattr__("__int__").__call__(); + if (!(i instanceof PyInteger) && !(i instanceof PyLong)) { + throw Py.TypeError(String.format("__trunc__ returned non-Integral (type %.200s)", + integral.getType().fastGetName())); + } + return i; + } + return integral; + } + @ExposedGet(name = "real", doc = BuiltinDocs.int_real_doc) public PyObject getReal() { return int___int__(); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 04:36:59 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 04:36:59 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Use_invoke_to_handle_getattr?= =?utf8?q?/call=2E_Thanks_pjenvey!?= Message-ID: http://hg.python.org/jython/rev/c2969d81507d changeset: 6536:c2969d81507d user: Frank Wierzbicki date: Thu Apr 05 19:36:46 2012 -0700 summary: Use invoke to handle getattr/call. Thanks pjenvey! files: src/org/python/core/PyInteger.java | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/python/core/PyInteger.java b/src/org/python/core/PyInteger.java --- a/src/org/python/core/PyInteger.java +++ b/src/org/python/core/PyInteger.java @@ -108,7 +108,7 @@ throw pye; } try { - PyObject integral = x.__getattr__("__trunc__").__call__(); + PyObject integral = x.invoke("__trunc__"); return convertIntegralToInt(integral); } catch (PyException pye2) { if (!pye2.match(Py.AttributeError)) { @@ -126,7 +126,7 @@ */ private static PyObject convertIntegralToInt(PyObject integral) { if (!(integral instanceof PyInteger) && !(integral instanceof PyLong)) { - PyObject i = integral.__getattr__("__int__").__call__(); + PyObject i = integral.invoke("__int__"); if (!(i instanceof PyInteger) && !(i instanceof PyLong)) { throw Py.TypeError(String.format("__trunc__ returned non-Integral (type %.200s)", integral.getType().fastGetName())); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 20:36:06 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 20:36:06 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Special_case_stringmap_to_co?= =?utf8?q?mpare_as_a_dict=2E_Remove_customized_unittest/case=2E?= Message-ID: http://hg.python.org/jython/rev/710fb0e26c72 changeset: 6537:710fb0e26c72 user: Frank Wierzbicki date: Fri Apr 06 11:35:53 2012 -0700 summary: Special case stringmap to compare as a dict. Remove customized unittest/case. files: Lib/unittest/case.py | 1085 ----------------------- src/org/python/core/Py.java | 26 + 2 files changed, 26 insertions(+), 1085 deletions(-) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py deleted file mode 100644 --- a/Lib/unittest/case.py +++ /dev/null @@ -1,1085 +0,0 @@ -"""Test case implementation""" - -import collections -import sys -import functools -import difflib -import pprint -import re -import warnings - -from . import result -from .util import ( - strclass, safe_repr, unorderable_list_difference, - _count_diff_all_purpose, _count_diff_hashable -) - -import platform as _platform -_is_jython = _platform.python_implementation == "Jython" -if _is_jython: - import org.python.core.PyStringMap as _stringmap - -__unittest = True - - -DIFF_OMITTED = ('\nDiff is %s characters long. ' - 'Set self.maxDiff to None to see it.') - -class SkipTest(Exception): - """ - Raise this exception in a test to skip it. - - Usually you can use TestResult.skip() or one of the skipping decorators - instead of raising this directly. - """ - pass - -class _ExpectedFailure(Exception): - """ - Raise this when a test is expected to fail. - - This is an implementation detail. - """ - - def __init__(self, exc_info): - super(_ExpectedFailure, self).__init__() - self.exc_info = exc_info - -class _UnexpectedSuccess(Exception): - """ - The test was supposed to fail, but it didn't! - """ - pass - -def _id(obj): - return obj - -def skip(reason): - """ - Unconditionally skip a test. - """ - def decorator(test_item): - if not (isinstance(test_item, type) and issubclass(test_item, TestCase)): - @functools.wraps(test_item) - def skip_wrapper(*args, **kwargs): - raise SkipTest(reason) - test_item = skip_wrapper - - test_item.__unittest_skip__ = True - test_item.__unittest_skip_why__ = reason - return test_item - return decorator - -def skipIf(condition, reason): - """ - Skip a test if the condition is true. - """ - if condition: - return skip(reason) - return _id - -def skipUnless(condition, reason): - """ - Skip a test unless the condition is true. - """ - if not condition: - return skip(reason) - return _id - - -def expectedFailure(func): - @functools.wraps(func) - def wrapper(*args, **kwargs): - try: - func(*args, **kwargs) - except Exception: - raise _ExpectedFailure(sys.exc_info()) - raise _UnexpectedSuccess - return wrapper - - -class _AssertRaisesContext(object): - """A context manager used to implement TestCase.assertRaises* methods.""" - - def __init__(self, expected, test_case, expected_regexp=None): - self.expected = expected - self.failureException = test_case.failureException - self.expected_regexp = expected_regexp - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, tb): - if exc_type is None: - try: - exc_name = self.expected.__name__ - except AttributeError: - exc_name = str(self.expected) - raise self.failureException( - "{0} not raised".format(exc_name)) - if not issubclass(exc_type, self.expected): - # let unexpected exceptions pass through - return False - self.exception = exc_value # store for later retrieval - if self.expected_regexp is None: - return True - - expected_regexp = self.expected_regexp - if isinstance(expected_regexp, basestring): - expected_regexp = re.compile(expected_regexp) - if not expected_regexp.search(str(exc_value)): - raise self.failureException('"%s" does not match "%s"' % - (expected_regexp.pattern, str(exc_value))) - return True - - -class TestCase(object): - """A class whose instances are single test cases. - - By default, the test code itself should be placed in a method named - 'runTest'. - - If the fixture may be used for many test cases, create as - many test methods as are needed. When instantiating such a TestCase - subclass, specify in the constructor arguments the name of the test method - that the instance is to execute. - - Test authors should subclass TestCase for their own tests. Construction - and deconstruction of the test's environment ('fixture') can be - implemented by overriding the 'setUp' and 'tearDown' methods respectively. - - If it is necessary to override the __init__ method, the base class - __init__ method must always be called. It is important that subclasses - should not change the signature of their __init__ method, since instances - of the classes are instantiated automatically by parts of the framework - in order to be run. - """ - - # This attribute determines which exception will be raised when - # the instance's assertion methods fail; test methods raising this - # exception will be deemed to have 'failed' rather than 'errored' - - failureException = AssertionError - - # This attribute determines whether long messages (including repr of - # objects used in assert methods) will be printed on failure in *addition* - # to any explicit message passed. - - longMessage = False - - # This attribute sets the maximum length of a diff in failure messages - # by assert methods using difflib. It is looked up as an instance attribute - # so can be configured by individual tests if required. - - maxDiff = 80*8 - - # If a string is longer than _diffThreshold, use normal comparison instead - # of difflib. See #11763. - _diffThreshold = 2**16 - - # Attribute used by TestSuite for classSetUp - - _classSetupFailed = False - - def __init__(self, methodName='runTest'): - """Create an instance of the class that will use the named test - method when executed. Raises a ValueError if the instance does - not have a method with the specified name. - """ - self._testMethodName = methodName - self._resultForDoCleanups = None - try: - testMethod = getattr(self, methodName) - except AttributeError: - raise ValueError("no such test method in %s: %s" % - (self.__class__, methodName)) - self._testMethodDoc = testMethod.__doc__ - self._cleanups = [] - - # Map types to custom assertEqual functions that will compare - # instances of said type in more detail to generate a more useful - # error message. - self._type_equality_funcs = {} - self.addTypeEqualityFunc(dict, 'assertDictEqual') - self.addTypeEqualityFunc(list, 'assertListEqual') - self.addTypeEqualityFunc(tuple, 'assertTupleEqual') - self.addTypeEqualityFunc(set, 'assertSetEqual') - self.addTypeEqualityFunc(frozenset, 'assertSetEqual') - self.addTypeEqualityFunc(unicode, 'assertMultiLineEqual') - - def addTypeEqualityFunc(self, typeobj, function): - """Add a type specific assertEqual style function to compare a type. - - This method is for use by TestCase subclasses that need to register - their own type equality functions to provide nicer error messages. - - Args: - typeobj: The data type to call this function on when both values - are of the same type in assertEqual(). - function: The callable taking two arguments and an optional - msg= argument that raises self.failureException with a - useful error message when the two arguments are not equal. - """ - self._type_equality_funcs[typeobj] = function - - def addCleanup(self, function, *args, **kwargs): - """Add a function, with arguments, to be called when the test is - completed. Functions added are called on a LIFO basis and are - called after tearDown on test failure or success. - - Cleanup items are called even if setUp fails (unlike tearDown).""" - self._cleanups.append((function, args, kwargs)) - - def setUp(self): - "Hook method for setting up the test fixture before exercising it." - pass - - def tearDown(self): - "Hook method for deconstructing the test fixture after testing it." - pass - - @classmethod - def setUpClass(cls): - "Hook method for setting up class fixture before running tests in the class." - - @classmethod - def tearDownClass(cls): - "Hook method for deconstructing the class fixture after running all tests in the class." - - def countTestCases(self): - return 1 - - def defaultTestResult(self): - return result.TestResult() - - def shortDescription(self): - """Returns a one-line description of the test, or None if no - description has been provided. - - The default implementation of this method returns the first line of - the specified test method's docstring. - """ - doc = self._testMethodDoc - return doc and doc.split("\n")[0].strip() or None - - - def id(self): - return "%s.%s" % (strclass(self.__class__), self._testMethodName) - - def __eq__(self, other): - if type(self) is not type(other): - return NotImplemented - - return self._testMethodName == other._testMethodName - - def __ne__(self, other): - return not self == other - - def __hash__(self): - return hash((type(self), self._testMethodName)) - - def __str__(self): - return "%s (%s)" % (self._testMethodName, strclass(self.__class__)) - - def __repr__(self): - return "<%s testMethod=%s>" % \ - (strclass(self.__class__), self._testMethodName) - - def _addSkip(self, result, reason): - addSkip = getattr(result, 'addSkip', None) - if addSkip is not None: - addSkip(self, reason) - else: - warnings.warn("TestResult has no addSkip method, skips not reported", - RuntimeWarning, 2) - result.addSuccess(self) - - def run(self, result=None): - orig_result = result - if result is None: - result = self.defaultTestResult() - startTestRun = getattr(result, 'startTestRun', None) - if startTestRun is not None: - startTestRun() - - self._resultForDoCleanups = result - result.startTest(self) - - testMethod = getattr(self, self._testMethodName) - if (getattr(self.__class__, "__unittest_skip__", False) or - getattr(testMethod, "__unittest_skip__", False)): - # If the class or method was skipped. - try: - skip_why = (getattr(self.__class__, '__unittest_skip_why__', '') - or getattr(testMethod, '__unittest_skip_why__', '')) - self._addSkip(result, skip_why) - finally: - result.stopTest(self) - return - try: - success = False - try: - self.setUp() - except SkipTest as e: - self._addSkip(result, str(e)) - except KeyboardInterrupt: - raise - except: - result.addError(self, sys.exc_info()) - else: - try: - testMethod() - except KeyboardInterrupt: - raise - except self.failureException: - result.addFailure(self, sys.exc_info()) - except _ExpectedFailure as e: - addExpectedFailure = getattr(result, 'addExpectedFailure', None) - if addExpectedFailure is not None: - addExpectedFailure(self, e.exc_info) - else: - warnings.warn("TestResult has no addExpectedFailure method, reporting as passes", - RuntimeWarning) - result.addSuccess(self) - except _UnexpectedSuccess: - addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None) - if addUnexpectedSuccess is not None: - addUnexpectedSuccess(self) - else: - warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failures", - RuntimeWarning) - result.addFailure(self, sys.exc_info()) - except SkipTest as e: - self._addSkip(result, str(e)) - except: - result.addError(self, sys.exc_info()) - else: - success = True - - try: - self.tearDown() - except KeyboardInterrupt: - raise - except: - result.addError(self, sys.exc_info()) - success = False - - cleanUpSuccess = self.doCleanups() - success = success and cleanUpSuccess - if success: - result.addSuccess(self) - finally: - result.stopTest(self) - if orig_result is None: - stopTestRun = getattr(result, 'stopTestRun', None) - if stopTestRun is not None: - stopTestRun() - - def doCleanups(self): - """Execute all cleanup functions. Normally called for you after - tearDown.""" - result = self._resultForDoCleanups - ok = True - while self._cleanups: - function, args, kwargs = self._cleanups.pop(-1) - try: - function(*args, **kwargs) - except KeyboardInterrupt: - raise - except: - ok = False - result.addError(self, sys.exc_info()) - return ok - - def __call__(self, *args, **kwds): - return self.run(*args, **kwds) - - def debug(self): - """Run the test without collecting errors in a TestResult""" - self.setUp() - getattr(self, self._testMethodName)() - self.tearDown() - while self._cleanups: - function, args, kwargs = self._cleanups.pop(-1) - function(*args, **kwargs) - - def skipTest(self, reason): - """Skip this test.""" - raise SkipTest(reason) - - def fail(self, msg=None): - """Fail immediately, with the given message.""" - raise self.failureException(msg) - - def assertFalse(self, expr, msg=None): - """Check that the expression is false.""" - if expr: - msg = self._formatMessage(msg, "%s is not false" % safe_repr(expr)) - raise self.failureException(msg) - - def assertTrue(self, expr, msg=None): - """Check that the expression is true.""" - if not expr: - msg = self._formatMessage(msg, "%s is not true" % safe_repr(expr)) - raise self.failureException(msg) - - def _formatMessage(self, msg, standardMsg): - """Honour the longMessage attribute when generating failure messages. - If longMessage is False this means: - * Use only an explicit message if it is provided - * Otherwise use the standard message for the assert - - If longMessage is True: - * Use the standard message - * If an explicit message is provided, plus ' : ' and the explicit message - """ - if not self.longMessage: - return msg or standardMsg - if msg is None: - return standardMsg - try: - # don't switch to '{}' formatting in Python 2.X - # it changes the way unicode input is handled - return '%s : %s' % (standardMsg, msg) - except UnicodeDecodeError: - return '%s : %s' % (safe_repr(standardMsg), safe_repr(msg)) - - - def assertRaises(self, excClass, callableObj=None, *args, **kwargs): - """Fail unless an exception of class excClass is thrown - by callableObj when invoked with arguments args and keyword - arguments kwargs. If a different type of exception is - thrown, it will not be caught, and the test case will be - deemed to have suffered an error, exactly as for an - unexpected exception. - - If called with callableObj omitted or None, will return a - context object used like this:: - - with self.assertRaises(SomeException): - do_something() - - The context manager keeps a reference to the exception as - the 'exception' attribute. This allows you to inspect the - exception after the assertion:: - - with self.assertRaises(SomeException) as cm: - do_something() - the_exception = cm.exception - self.assertEqual(the_exception.error_code, 3) - """ - context = _AssertRaisesContext(excClass, self) - if callableObj is None: - return context - with context: - callableObj(*args, **kwargs) - - def _getAssertEqualityFunc(self, first, second): - """Get a detailed comparison function for the types of the two args. - - Returns: A callable accepting (first, second, msg=None) that will - raise a failure exception if first != second with a useful human - readable error message for those types. - """ - # - # NOTE(gregory.p.smith): I considered isinstance(first, type(second)) - # and vice versa. I opted for the conservative approach in case - # subclasses are not intended to be compared in detail to their super - # class instances using a type equality func. This means testing - # subtypes won't automagically use the detailed comparison. Callers - # should use their type specific assertSpamEqual method to compare - # subclasses if the detailed comparison is desired and appropriate. - # See the discussion in http://bugs.python.org/issue2578. - # - if type(first) is type(second): - asserter = self._type_equality_funcs.get(type(first)) - if asserter is not None: - if isinstance(asserter, basestring): - asserter = getattr(self, asserter) - return asserter - - return self._baseAssertEqual - - def _baseAssertEqual(self, first, second, msg=None): - """The default assertEqual implementation, not type specific.""" - if not first == second: - standardMsg = '%s != %s' % (safe_repr(first), safe_repr(second)) - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def assertEqual(self, first, second, msg=None): - """Fail if the two objects are unequal as determined by the '==' - operator. - """ - assertion_func = self._getAssertEqualityFunc(first, second) - assertion_func(first, second, msg=msg) - - def assertNotEqual(self, first, second, msg=None): - """Fail if the two objects are equal as determined by the '==' - operator. - """ - if not first != second: - msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first), - safe_repr(second))) - raise self.failureException(msg) - - - def assertAlmostEqual(self, first, second, places=None, msg=None, delta=None): - """Fail if the two objects are unequal as determined by their - difference rounded to the given number of decimal places - (default 7) and comparing to zero, or by comparing that the - between the two objects is more than the given delta. - - Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). - - If the two objects compare equal then they will automatically - compare almost equal. - """ - if first == second: - # shortcut - return - if delta is not None and places is not None: - raise TypeError("specify delta or places not both") - - if delta is not None: - if abs(first - second) <= delta: - return - - standardMsg = '%s != %s within %s delta' % (safe_repr(first), - safe_repr(second), - safe_repr(delta)) - else: - if places is None: - places = 7 - - if round(abs(second-first), places) == 0: - return - - standardMsg = '%s != %s within %r places' % (safe_repr(first), - safe_repr(second), - places) - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def assertNotAlmostEqual(self, first, second, places=None, msg=None, delta=None): - """Fail if the two objects are equal as determined by their - difference rounded to the given number of decimal places - (default 7) and comparing to zero, or by comparing that the - between the two objects is less than the given delta. - - Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). - - Objects that are equal automatically fail. - """ - if delta is not None and places is not None: - raise TypeError("specify delta or places not both") - if delta is not None: - if not (first == second) and abs(first - second) > delta: - return - standardMsg = '%s == %s within %s delta' % (safe_repr(first), - safe_repr(second), - safe_repr(delta)) - else: - if places is None: - places = 7 - if not (first == second) and round(abs(second-first), places) != 0: - return - standardMsg = '%s == %s within %r places' % (safe_repr(first), - safe_repr(second), - places) - - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - # Synonyms for assertion methods - - # The plurals are undocumented. Keep them that way to discourage use. - # Do not add more. Do not remove. - # Going through a deprecation cycle on these would annoy many people. - assertEquals = assertEqual - assertNotEquals = assertNotEqual - assertAlmostEquals = assertAlmostEqual - assertNotAlmostEquals = assertNotAlmostEqual - assert_ = assertTrue - - # These fail* assertion method names are pending deprecation and will - # be a DeprecationWarning in 3.2; http://bugs.python.org/issue2578 - def _deprecate(original_func): - def deprecated_func(*args, **kwargs): - warnings.warn( - 'Please use {0} instead.'.format(original_func.__name__), - PendingDeprecationWarning, 2) - return original_func(*args, **kwargs) - return deprecated_func - - failUnlessEqual = _deprecate(assertEqual) - failIfEqual = _deprecate(assertNotEqual) - failUnlessAlmostEqual = _deprecate(assertAlmostEqual) - failIfAlmostEqual = _deprecate(assertNotAlmostEqual) - failUnless = _deprecate(assertTrue) - failUnlessRaises = _deprecate(assertRaises) - failIf = _deprecate(assertFalse) - - def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): - """An equality assertion for ordered sequences (like lists and tuples). - - For the purposes of this function, a valid ordered sequence type is one - which can be indexed, has a length, and has an equality operator. - - Args: - seq1: The first sequence to compare. - seq2: The second sequence to compare. - seq_type: The expected datatype of the sequences, or None if no - datatype should be enforced. - msg: Optional message to use on failure instead of a list of - differences. - """ - if seq_type is not None: - seq_type_name = seq_type.__name__ - if not isinstance(seq1, seq_type): - raise self.failureException('First sequence is not a %s: %s' - % (seq_type_name, safe_repr(seq1))) - if not isinstance(seq2, seq_type): - raise self.failureException('Second sequence is not a %s: %s' - % (seq_type_name, safe_repr(seq2))) - else: - seq_type_name = "sequence" - - differing = None - try: - len1 = len(seq1) - except (TypeError, NotImplementedError): - differing = 'First %s has no length. Non-sequence?' % ( - seq_type_name) - - if differing is None: - try: - len2 = len(seq2) - except (TypeError, NotImplementedError): - differing = 'Second %s has no length. Non-sequence?' % ( - seq_type_name) - - if differing is None: - if seq1 == seq2: - return - - seq1_repr = safe_repr(seq1) - seq2_repr = safe_repr(seq2) - if len(seq1_repr) > 30: - seq1_repr = seq1_repr[:30] + '...' - if len(seq2_repr) > 30: - seq2_repr = seq2_repr[:30] + '...' - elements = (seq_type_name.capitalize(), seq1_repr, seq2_repr) - differing = '%ss differ: %s != %s\n' % elements - - for i in xrange(min(len1, len2)): - try: - item1 = seq1[i] - except (TypeError, IndexError, NotImplementedError): - differing += ('\nUnable to index element %d of first %s\n' % - (i, seq_type_name)) - break - - try: - item2 = seq2[i] - except (TypeError, IndexError, NotImplementedError): - differing += ('\nUnable to index element %d of second %s\n' % - (i, seq_type_name)) - break - - if item1 != item2: - differing += ('\nFirst differing element %d:\n%s\n%s\n' % - (i, item1, item2)) - break - else: - if (len1 == len2 and seq_type is None and - type(seq1) != type(seq2)): - # The sequences are the same, but have differing types. - return - - if len1 > len2: - differing += ('\nFirst %s contains %d additional ' - 'elements.\n' % (seq_type_name, len1 - len2)) - try: - differing += ('First extra element %d:\n%s\n' % - (len2, seq1[len2])) - except (TypeError, IndexError, NotImplementedError): - differing += ('Unable to index element %d ' - 'of first %s\n' % (len2, seq_type_name)) - elif len1 < len2: - differing += ('\nSecond %s contains %d additional ' - 'elements.\n' % (seq_type_name, len2 - len1)) - try: - differing += ('First extra element %d:\n%s\n' % - (len1, seq2[len1])) - except (TypeError, IndexError, NotImplementedError): - differing += ('Unable to index element %d ' - 'of second %s\n' % (len1, seq_type_name)) - standardMsg = differing - diffMsg = '\n' + '\n'.join( - difflib.ndiff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines())) - standardMsg = self._truncateMessage(standardMsg, diffMsg) - msg = self._formatMessage(msg, standardMsg) - self.fail(msg) - - def _truncateMessage(self, message, diff): - max_diff = self.maxDiff - if max_diff is None or len(diff) <= max_diff: - return message + diff - return message + (DIFF_OMITTED % len(diff)) - - def assertListEqual(self, list1, list2, msg=None): - """A list-specific equality assertion. - - Args: - list1: The first list to compare. - list2: The second list to compare. - msg: Optional message to use on failure instead of a list of - differences. - - """ - self.assertSequenceEqual(list1, list2, msg, seq_type=list) - - def assertTupleEqual(self, tuple1, tuple2, msg=None): - """A tuple-specific equality assertion. - - Args: - tuple1: The first tuple to compare. - tuple2: The second tuple to compare. - msg: Optional message to use on failure instead of a list of - differences. - """ - self.assertSequenceEqual(tuple1, tuple2, msg, seq_type=tuple) - - def assertSetEqual(self, set1, set2, msg=None): - """A set-specific equality assertion. - - Args: - set1: The first set to compare. - set2: The second set to compare. - msg: Optional message to use on failure instead of a list of - differences. - - assertSetEqual uses ducktyping to support different types of sets, and - is optimized for sets specifically (parameters must support a - difference method). - """ - try: - difference1 = set1.difference(set2) - except TypeError, e: - self.fail('invalid type when attempting set difference: %s' % e) - except AttributeError, e: - self.fail('first argument does not support set difference: %s' % e) - - try: - difference2 = set2.difference(set1) - except TypeError, e: - self.fail('invalid type when attempting set difference: %s' % e) - except AttributeError, e: - self.fail('second argument does not support set difference: %s' % e) - - if not (difference1 or difference2): - return - - lines = [] - if difference1: - lines.append('Items in the first set but not the second:') - for item in difference1: - lines.append(repr(item)) - if difference2: - lines.append('Items in the second set but not the first:') - for item in difference2: - lines.append(repr(item)) - - standardMsg = '\n'.join(lines) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIn(self, member, container, msg=None): - """Just like self.assertTrue(a in b), but with a nicer default message.""" - if member not in container: - standardMsg = '%s not found in %s' % (safe_repr(member), - safe_repr(container)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotIn(self, member, container, msg=None): - """Just like self.assertTrue(a not in b), but with a nicer default message.""" - if member in container: - standardMsg = '%s unexpectedly found in %s' % (safe_repr(member), - safe_repr(container)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIs(self, expr1, expr2, msg=None): - """Just like self.assertTrue(a is b), but with a nicer default message.""" - if expr1 is not expr2: - standardMsg = '%s is not %s' % (safe_repr(expr1), - safe_repr(expr2)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsNot(self, expr1, expr2, msg=None): - """Just like self.assertTrue(a is not b), but with a nicer default message.""" - if expr1 is expr2: - standardMsg = 'unexpectedly identical: %s' % (safe_repr(expr1),) - self.fail(self._formatMessage(msg, standardMsg)) - - def _assertJythonDict(self, d, msg): - print "WHY WILL THIS NOT WORK", isinstance(d, _stringmap) - if not isinstance(d, _stringmap) and not isinstance(d, dict): - self.fail("%s:%s" % ("FOOOO", msg)) - - def assertDictEqual(self, d1, d2, msg=None): - if _is_jython: - self._assertJythonDict(d1, 'y First argument is not a dictionary') - self._assertJythonDict(d2, 'Second argument is not a dictionary') - else: - self.assertIsInstance(d1, dict, 'x First argument is not a dictionary') - self.assertIsInstance(d2, dict, 'Second argument is not a dictionary') - - if d1 != d2: - standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True)) - diff = ('\n' + '\n'.join(difflib.ndiff( - pprint.pformat(d1).splitlines(), - pprint.pformat(d2).splitlines()))) - standardMsg = self._truncateMessage(standardMsg, diff) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertDictContainsSubset(self, expected, actual, msg=None): - """Checks whether actual is a superset of expected.""" - missing = [] - mismatched = [] - for key, value in expected.iteritems(): - if key not in actual: - missing.append(key) - elif value != actual[key]: - mismatched.append('%s, expected: %s, actual: %s' % - (safe_repr(key), safe_repr(value), - safe_repr(actual[key]))) - - if not (missing or mismatched): - return - - standardMsg = '' - if missing: - standardMsg = 'Missing: %s' % ','.join(safe_repr(m) for m in - missing) - if mismatched: - if standardMsg: - standardMsg += '; ' - standardMsg += 'Mismatched values: %s' % ','.join(mismatched) - - self.fail(self._formatMessage(msg, standardMsg)) - - def assertItemsEqual(self, expected_seq, actual_seq, msg=None): - """An unordered sequence specific comparison. It asserts that - actual_seq and expected_seq have the same element counts. - Equivalent to:: - - self.assertEqual(Counter(iter(actual_seq)), - Counter(iter(expected_seq))) - - Asserts that each element has the same count in both sequences. - Example: - - [0, 1, 1] and [1, 0, 1] compare equal. - - [0, 0, 1] and [0, 1] compare unequal. - """ - first_seq, second_seq = list(actual_seq), list(expected_seq) - with warnings.catch_warnings(): - if sys.py3kwarning: - # Silence Py3k warning raised during the sorting - for _msg in ["(code|dict|type) inequality comparisons", - "builtin_function_or_method order comparisons", - "comparing unequal types"]: - warnings.filterwarnings("ignore", _msg, DeprecationWarning) - try: - first = collections.Counter(first_seq) - second = collections.Counter(second_seq) - except TypeError: - # Handle case with unhashable elements - differences = _count_diff_all_purpose(first_seq, second_seq) - else: - if first == second: - return - differences = _count_diff_hashable(first_seq, second_seq) - - if differences: - standardMsg = 'Element counts were not equal:\n' - lines = ['First has %d, Second has %d: %r' % diff for diff in differences] - diffMsg = '\n'.join(lines) - standardMsg = self._truncateMessage(standardMsg, diffMsg) - msg = self._formatMessage(msg, standardMsg) - self.fail(msg) - - def assertMultiLineEqual(self, first, second, msg=None): - """Assert that two multi-line strings are equal.""" - self.assertIsInstance(first, basestring, - 'First argument is not a string') - self.assertIsInstance(second, basestring, - 'Second argument is not a string') - - if first != second: - # don't use difflib if the strings are too long - if (len(first) > self._diffThreshold or - len(second) > self._diffThreshold): - self._baseAssertEqual(first, second, msg) - firstlines = first.splitlines(True) - secondlines = second.splitlines(True) - if len(firstlines) == 1 and first.strip('\r\n') == first: - firstlines = [first + '\n'] - secondlines = [second + '\n'] - standardMsg = '%s != %s' % (safe_repr(first, True), - safe_repr(second, True)) - diff = '\n' + ''.join(difflib.ndiff(firstlines, secondlines)) - standardMsg = self._truncateMessage(standardMsg, diff) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertLess(self, a, b, msg=None): - """Just like self.assertTrue(a < b), but with a nicer default message.""" - if not a < b: - standardMsg = '%s not less than %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertLessEqual(self, a, b, msg=None): - """Just like self.assertTrue(a <= b), but with a nicer default message.""" - if not a <= b: - standardMsg = '%s not less than or equal to %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertGreater(self, a, b, msg=None): - """Just like self.assertTrue(a > b), but with a nicer default message.""" - if not a > b: - standardMsg = '%s not greater than %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertGreaterEqual(self, a, b, msg=None): - """Just like self.assertTrue(a >= b), but with a nicer default message.""" - if not a >= b: - standardMsg = '%s not greater than or equal to %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsNone(self, obj, msg=None): - """Same as self.assertTrue(obj is None), with a nicer default message.""" - if obj is not None: - standardMsg = '%s is not None' % (safe_repr(obj),) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsNotNone(self, obj, msg=None): - """Included for symmetry with assertIsNone.""" - if obj is None: - standardMsg = 'unexpectedly None' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsInstance(self, obj, cls, msg=None): - """Same as self.assertTrue(isinstance(obj, cls)), with a nicer - default message.""" - if not isinstance(obj, cls): - standardMsg = '%s is not an instance of %r' % (safe_repr(obj), cls) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotIsInstance(self, obj, cls, msg=None): - """Included for symmetry with assertIsInstance.""" - if isinstance(obj, cls): - standardMsg = '%s is an instance of %r' % (safe_repr(obj), cls) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertRaisesRegexp(self, expected_exception, expected_regexp, - callable_obj=None, *args, **kwargs): - """Asserts that the message in a raised exception matches a regexp. - - Args: - expected_exception: Exception class expected to be raised. - expected_regexp: Regexp (re pattern object or string) expected - to be found in error message. - callable_obj: Function to be called. - args: Extra args. - kwargs: Extra kwargs. - """ - context = _AssertRaisesContext(expected_exception, self, expected_regexp) - if callable_obj is None: - return context - with context: - callable_obj(*args, **kwargs) - - def assertRegexpMatches(self, text, expected_regexp, msg=None): - """Fail the test unless the text matches the regular expression.""" - if isinstance(expected_regexp, basestring): - expected_regexp = re.compile(expected_regexp) - if not expected_regexp.search(text): - msg = msg or "Regexp didn't match" - msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) - raise self.failureException(msg) - - def assertNotRegexpMatches(self, text, unexpected_regexp, msg=None): - """Fail the test if the text matches the regular expression.""" - if isinstance(unexpected_regexp, basestring): - unexpected_regexp = re.compile(unexpected_regexp) - match = unexpected_regexp.search(text) - if match: - msg = msg or "Regexp matched" - msg = '%s: %r matches %r in %r' % (msg, - text[match.start():match.end()], - unexpected_regexp.pattern, - text) - raise self.failureException(msg) - - -class FunctionTestCase(TestCase): - """A test case that wraps a test function. - - This is useful for slipping pre-existing test functions into the - unittest framework. Optionally, set-up and tidy-up functions can be - supplied. As with TestCase, the tidy-up ('tearDown') function will - always be called if the set-up ('setUp') function ran successfully. - """ - - def __init__(self, testFunc, setUp=None, tearDown=None, description=None): - super(FunctionTestCase, self).__init__() - self._setUpFunc = setUp - self._tearDownFunc = tearDown - self._testFunc = testFunc - self._description = description - - def setUp(self): - if self._setUpFunc is not None: - self._setUpFunc() - - def tearDown(self): - if self._tearDownFunc is not None: - self._tearDownFunc() - - def runTest(self): - self._testFunc() - - def id(self): - return self._testFunc.__name__ - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - - return self._setUpFunc == other._setUpFunc and \ - self._tearDownFunc == other._tearDownFunc and \ - self._testFunc == other._testFunc and \ - self._description == other._description - - def __ne__(self, other): - return not self == other - - def __hash__(self): - return hash((type(self), self._setUpFunc, self._tearDownFunc, - self._testFunc, self._description)) - - def __str__(self): - return "%s (%s)" % (strclass(self.__class__), - self._testFunc.__name__) - - def __repr__(self): - return "<%s tec=%s>" % (strclass(self.__class__), - self._testFunc) - - def shortDescription(self): - if self._description is not None: - return self._description - doc = self._testFunc.__doc__ - return doc and doc.split("\n")[0].strip() or None diff --git a/src/org/python/core/Py.java b/src/org/python/core/Py.java --- a/src/org/python/core/Py.java +++ b/src/org/python/core/Py.java @@ -1894,12 +1894,32 @@ new File(dir, name.substring(0, index))); } + /** + * We use PyStringMap as our internal __dict__ implementation, so it should + * compare as an instance and subclass of type dict. + * + * @return true if inst is a PyStringMap and cls is type dict. + */ + private static boolean checkStringMapAsDict(PyObject inst, PyObject cls) { + if (inst instanceof PyStringMap) { + if (cls instanceof PyType) { + if (((PyType)cls).equals(PyDictionary.TYPE)) { + return true; + } + } + } + return false; + } + public static boolean isInstance(PyObject inst, PyObject cls) { // Quick test for an exact match if (inst.getType() == cls) { return true; } + if (checkStringMapAsDict(inst, cls)) { + return true; + } if (cls instanceof PyTuple) { ThreadState threadState = Py.getThreadState(); threadState.enterRecursiveCall(" in __subclasscheck__"); @@ -1968,6 +1988,12 @@ return false; } + // Note that we don't need to check for stringmap subclasses, since stringmap + // can't be subclassed. + if (checkStringMapAsDict(derived, cls)) { + return true; + } + PyObject checkerResult; if ((checkerResult = dispatchToChecker(derived, cls, "__subclasscheck__")) != null) { return checkerResult.__nonzero__(); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 21:16:39 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 21:16:39 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/91b0824f0835 changeset: 6538:91b0824f0835 user: Frank Wierzbicki date: Fri Apr 06 12:16:20 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_platform.py at 22db03646d9b files: Lib/test/test_platform.py | 254 ++++++++++++++++++++++++++ 1 files changed, 254 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_platform.py @@ -0,0 +1,254 @@ +import sys +import os +import unittest +import platform +import subprocess + +from test import test_support + +class PlatformTest(unittest.TestCase): + def test_architecture(self): + res = platform.architecture() + + if hasattr(os, "symlink"): + def test_architecture_via_symlink(self): # issue3762 + def get(python): + cmd = [python, '-c', + 'import platform; print platform.architecture()'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) + return p.communicate() + real = os.path.realpath(sys.executable) + link = os.path.abspath(test_support.TESTFN) + os.symlink(real, link) + try: + self.assertEqual(get(real), get(link)) + finally: + os.remove(link) + + def test_platform(self): + for aliased in (False, True): + for terse in (False, True): + res = platform.platform(aliased, terse) + + def test_system(self): + res = platform.system() + + def test_node(self): + res = platform.node() + + def test_release(self): + res = platform.release() + + def test_version(self): + res = platform.version() + + def test_machine(self): + res = platform.machine() + + def test_processor(self): + res = platform.processor() + + def setUp(self): + self.save_version = sys.version + self.save_subversion = sys.subversion + self.save_platform = sys.platform + + def tearDown(self): + sys.version = self.save_version + sys.subversion = self.save_subversion + sys.platform = self.save_platform + + def test_sys_version(self): + # Old test. + for input, output in ( + ('2.4.3 (#1, Jun 21 2006, 13:54:21) \n[GCC 3.3.4 (pre 3.3.5 20040809)]', + ('CPython', '2.4.3', '', '', '1', 'Jun 21 2006 13:54:21', 'GCC 3.3.4 (pre 3.3.5 20040809)')), + ('IronPython 1.0.60816 on .NET 2.0.50727.42', + ('IronPython', '1.0.60816', '', '', '', '', '.NET 2.0.50727.42')), + ('IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42', + ('IronPython', '1.0.0', '', '', '', '', '.NET 2.0.50727.42')), + ): + # branch and revision are not "parsed", but fetched + # from sys.subversion. Ignore them + (name, version, branch, revision, buildno, builddate, compiler) \ + = platform._sys_version(input) + self.assertEqual( + (name, version, '', '', buildno, builddate, compiler), output) + + # Tests for python_implementation(), python_version(), python_branch(), + # python_revision(), python_build(), and python_compiler(). + sys_versions = { + ("2.6.1 (r261:67515, Dec 6 2008, 15:26:00) \n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]", + ('CPython', 'tags/r261', '67515'), self.save_platform) + : + ("CPython", "2.6.1", "tags/r261", "67515", + ('r261:67515', 'Dec 6 2008 15:26:00'), + 'GCC 4.0.1 (Apple Computer, Inc. build 5370)'), + ("IronPython 2.0 (2.0.0.0) on .NET 2.0.50727.3053", None, "cli") + : + ("IronPython", "2.0.0", "", "", ("", ""), + ".NET 2.0.50727.3053"), + ("2.5 (trunk:6107, Mar 26 2009, 13:02:18) \n[Java HotSpot(TM) Client VM (\"Apple Computer, Inc.\")]", + ('Jython', 'trunk', '6107'), "java1.5.0_16") + : + ("Jython", "2.5.0", "trunk", "6107", + ('trunk:6107', 'Mar 26 2009'), "java1.5.0_16"), + ("2.5.2 (63378, Mar 26 2009, 18:03:29)\n[PyPy 1.0.0]", + ('PyPy', 'trunk', '63378'), self.save_platform) + : + ("PyPy", "2.5.2", "trunk", "63378", ('63378', 'Mar 26 2009'), + "") + } + for (version_tag, subversion, sys_platform), info in \ + sys_versions.iteritems(): + sys.version = version_tag + if subversion is None: + if hasattr(sys, "subversion"): + del sys.subversion + else: + sys.subversion = subversion + if sys_platform is not None: + sys.platform = sys_platform + self.assertEqual(platform.python_implementation(), info[0]) + self.assertEqual(platform.python_version(), info[1]) + self.assertEqual(platform.python_branch(), info[2]) + self.assertEqual(platform.python_revision(), info[3]) + self.assertEqual(platform.python_build(), info[4]) + self.assertEqual(platform.python_compiler(), info[5]) + + def test_system_alias(self): + res = platform.system_alias( + platform.system(), + platform.release(), + platform.version(), + ) + + def test_uname(self): + res = platform.uname() + self.assertTrue(any(res)) + + @unittest.skipUnless(sys.platform.startswith('win'), "windows only test") + def test_uname_win32_ARCHITEW6432(self): + # Issue 7860: make sure we get architecture from the correct variable + # on 64 bit Windows: if PROCESSOR_ARCHITEW6432 exists we should be + # using it, per + # http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx + try: + with test_support.EnvironmentVarGuard() as environ: + if 'PROCESSOR_ARCHITEW6432' in environ: + del environ['PROCESSOR_ARCHITEW6432'] + environ['PROCESSOR_ARCHITECTURE'] = 'foo' + platform._uname_cache = None + system, node, release, version, machine, processor = platform.uname() + self.assertEqual(machine, 'foo') + environ['PROCESSOR_ARCHITEW6432'] = 'bar' + platform._uname_cache = None + system, node, release, version, machine, processor = platform.uname() + self.assertEqual(machine, 'bar') + finally: + platform._uname_cache = None + + def test_java_ver(self): + res = platform.java_ver() + if sys.platform == 'java': + self.assertTrue(all(res)) + + def test_win32_ver(self): + res = platform.win32_ver() + + def test_mac_ver(self): + res = platform.mac_ver() + + try: + import gestalt + except ImportError: + have_toolbox_glue = False + else: + have_toolbox_glue = True + + if have_toolbox_glue and platform.uname()[0] == 'Darwin': + # We're on a MacOSX system, check that + # the right version information is returned + fd = os.popen('sw_vers', 'r') + real_ver = None + for ln in fd: + if ln.startswith('ProductVersion:'): + real_ver = ln.strip().split()[-1] + break + fd.close() + self.assertFalse(real_ver is None) + result_list = res[0].split('.') + expect_list = real_ver.split('.') + len_diff = len(result_list) - len(expect_list) + # On Snow Leopard, sw_vers reports 10.6.0 as 10.6 + if len_diff > 0: + expect_list.extend(['0'] * len_diff) + self.assertEqual(result_list, expect_list) + + # res[1] claims to contain + # (version, dev_stage, non_release_version) + # That information is no longer available + self.assertEqual(res[1], ('', '', '')) + + if sys.byteorder == 'little': + self.assertIn(res[2], ('i386', 'x86_64')) + else: + self.assertEqual(res[2], 'PowerPC') + + + @unittest.skipUnless(sys.platform == 'darwin', "OSX only test") + def test_mac_ver_with_fork(self): + # Issue7895: platform.mac_ver() crashes when using fork without exec + # + # This test checks that the fix for that issue works. + # + pid = os.fork() + if pid == 0: + # child + info = platform.mac_ver() + os._exit(0) + + else: + # parent + cpid, sts = os.waitpid(pid, 0) + self.assertEqual(cpid, pid) + self.assertEqual(sts, 0) + + def test_dist(self): + res = platform.dist() + + def test_libc_ver(self): + import os + if os.path.isdir(sys.executable) and \ + os.path.exists(sys.executable+'.exe'): + # Cygwin horror + executable = sys.executable + '.exe' + else: + executable = sys.executable + res = platform.libc_ver(executable) + + def test_parse_release_file(self): + + for input, output in ( + # Examples of release file contents: + ('SuSE Linux 9.3 (x86-64)', ('SuSE Linux ', '9.3', 'x86-64')), + ('SUSE LINUX 10.1 (X86-64)', ('SUSE LINUX ', '10.1', 'X86-64')), + ('SUSE LINUX 10.1 (i586)', ('SUSE LINUX ', '10.1', 'i586')), + ('Fedora Core release 5 (Bordeaux)', ('Fedora Core', '5', 'Bordeaux')), + ('Red Hat Linux release 8.0 (Psyche)', ('Red Hat Linux', '8.0', 'Psyche')), + ('Red Hat Linux release 9 (Shrike)', ('Red Hat Linux', '9', 'Shrike')), + ('Red Hat Enterprise Linux release 4 (Nahant)', ('Red Hat Enterprise Linux', '4', 'Nahant')), + ('CentOS release 4', ('CentOS', '4', None)), + ('Rocks release 4.2.1 (Cydonia)', ('Rocks', '4.2.1', 'Cydonia')), + ('', ('', '', '')), # If there's nothing there. + ): + self.assertEqual(platform._parse_release_file(input), output) + + +def test_main(): + test_support.run_unittest( + PlatformTest + ) + +if __name__ == '__main__': + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 21:22:52 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 21:22:52 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_test=5Fplatform_for_Jyth?= =?utf8?b?b24u?= Message-ID: http://hg.python.org/jython/rev/6125d9c28cba changeset: 6539:6125d9c28cba user: Frank Wierzbicki date: Fri Apr 06 12:22:40 2012 -0700 summary: Fix test_platform for Jython. files: Lib/test/test_platform.py | 18 +++++++++---- src/org/python/core/PySystemState.java | 5 +++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -49,15 +49,21 @@ res = platform.processor() def setUp(self): - self.save_version = sys.version - self.save_subversion = sys.subversion - self.save_platform = sys.platform + # These are readonly in Jython + if not test_support.is_jython: + self.save_version = sys.version + self.save_subversion = sys.subversion + self.save_platform = sys.platform def tearDown(self): - sys.version = self.save_version - sys.subversion = self.save_subversion - sys.platform = self.save_platform + # These are readonly in Jython + if not test_support.is_jython: + sys.version = self.save_version + sys.subversion = self.save_subversion + sys.platform = self.save_platform + @unittest.skipIf(test_support.is_jython, + "sys.version and sys.subversion are readonly in Jython.") def test_sys_version(self): # Old test. for input, output in ( diff --git a/src/org/python/core/PySystemState.java b/src/org/python/core/PySystemState.java --- a/src/org/python/core/PySystemState.java +++ b/src/org/python/core/PySystemState.java @@ -56,6 +56,11 @@ private static final String VFSZIP_PREFIX = "vfszip:"; public static final PyString version = new PyString(Version.getVersion()); + + public static final PyTuple subversion = new PyTuple(new PyString("Jython"), + Py.newString(""), + Py.newString("")); + public static final int hexversion = ((Version.PY_MAJOR_VERSION << 24) | (Version.PY_MINOR_VERSION << 16) | (Version.PY_MICRO_VERSION << 8) | -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 21:32:20 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 21:32:20 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_elements=5B1=5D_should_be_No?= =?utf8?q?ne_if_fieldname_is_=22=22=2E_Fixes_test=5Fstring=2E?= Message-ID: http://hg.python.org/jython/rev/087c751b6056 changeset: 6540:087c751b6056 user: Frank Wierzbicki date: Fri Apr 06 12:31:16 2012 -0700 summary: elements[1] should be None if fieldname is "". Fixes test_string. files: src/org/python/core/stringlib/MarkupIterator.java | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/org/python/core/stringlib/MarkupIterator.java b/src/org/python/core/stringlib/MarkupIterator.java --- a/src/org/python/core/stringlib/MarkupIterator.java +++ b/src/org/python/core/stringlib/MarkupIterator.java @@ -61,7 +61,8 @@ } PyObject[] elements = new PyObject[4]; elements[0] = new PyString(chunk.literalText); - elements[1] = new PyString(chunk.fieldName); + elements[1] = chunk.fieldName.length() == 0 + ? Py.None : new PyString(chunk.fieldName); if (chunk.fieldName.length() > 0) { elements[2] = chunk.formatSpec == null ? Py.EmptyString : new PyString(chunk.formatSpec); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 21:51:03 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 21:51:03 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Revert_stringmap_special_cas?= =?utf8?q?e_-_I_need_a_do-over=2E?= Message-ID: http://hg.python.org/jython/rev/5a9128b6662b changeset: 6541:5a9128b6662b user: Frank Wierzbicki date: Fri Apr 06 12:50:13 2012 -0700 summary: Revert stringmap special case - I need a do-over. files: src/org/python/core/Py.java | 26 ------------------------- 1 files changed, 0 insertions(+), 26 deletions(-) diff --git a/src/org/python/core/Py.java b/src/org/python/core/Py.java --- a/src/org/python/core/Py.java +++ b/src/org/python/core/Py.java @@ -1894,32 +1894,12 @@ new File(dir, name.substring(0, index))); } - /** - * We use PyStringMap as our internal __dict__ implementation, so it should - * compare as an instance and subclass of type dict. - * - * @return true if inst is a PyStringMap and cls is type dict. - */ - private static boolean checkStringMapAsDict(PyObject inst, PyObject cls) { - if (inst instanceof PyStringMap) { - if (cls instanceof PyType) { - if (((PyType)cls).equals(PyDictionary.TYPE)) { - return true; - } - } - } - return false; - } - public static boolean isInstance(PyObject inst, PyObject cls) { // Quick test for an exact match if (inst.getType() == cls) { return true; } - if (checkStringMapAsDict(inst, cls)) { - return true; - } if (cls instanceof PyTuple) { ThreadState threadState = Py.getThreadState(); threadState.enterRecursiveCall(" in __subclasscheck__"); @@ -1988,12 +1968,6 @@ return false; } - // Note that we don't need to check for stringmap subclasses, since stringmap - // can't be subclassed. - if (checkStringMapAsDict(derived, cls)) { - return true; - } - PyObject checkerResult; if ((checkerResult = dispatchToChecker(derived, cls, "__subclasscheck__")) != null) { return checkerResult.__nonzero__(); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 22:54:05 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 22:54:05 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=282=2E5=29=3A_Special_case_isi?= =?utf8?q?ntance_and_issubclass_so_stringmap_compares_as_a_dict=2E?= Message-ID: http://hg.python.org/jython/rev/196e2e8bad7b changeset: 6542:196e2e8bad7b branch: 2.5 parent: 6525:1b18d875074e user: Frank Wierzbicki date: Fri Apr 06 13:42:28 2012 -0700 summary: Special case isintance and issubclass so stringmap compares as a dict. files: src/org/python/core/Py.java | 24 ++++++++++++++++++++++-- 1 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/org/python/core/Py.java b/src/org/python/core/Py.java --- a/src/org/python/core/Py.java +++ b/src/org/python/core/Py.java @@ -1899,8 +1899,15 @@ PyClass inClass = (PyClass)inst.fastGetClass(); return inClass.isSubClass((PyClass)cls); } else if (cls instanceof PyType) { + PyType type = (PyType)cls; + + //Special case PyStringMap to compare as an instance type dict. + if (inst instanceof PyStringMap && + type.equals(PyDictionary.TYPE)) { + return true; + } + PyType instType = inst.getType(); - PyType type = (PyType)cls; // equiv. to PyObject_TypeCheck if (instType == type || instType.isSubType(type)) { @@ -1946,7 +1953,20 @@ if (derived == cls) { return true; } - return ((PyType) derived).isSubType((PyType) cls); + + PyType type = (PyType)cls; + PyType subtype = (PyType)derived; + + // Special case PyStringMap to compare as a subclass of + // PyDictionary. Note that we don't need to check for stringmap + // subclasses, since stringmap can't be subclassed. PyStringMap's + // TYPE is computed lazily, so we have to use PyType.fromClass :( + if (type == PyDictionary.TYPE && + subtype == PyType.fromClass(PyStringMap.class)) { + return true; + } + + return subtype.isSubType(type); } else if (cls instanceof PyClass && derived instanceof PyClass) { return ((PyClass) derived).isSubClass((PyClass) cls); } else if (cls.getClass() == PyTuple.class) { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 23:28:11 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 23:28:11 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_2=2E5_-=3E_default=29?= =?utf8?b?OiBNZXJnZSAyLjUu?= Message-ID: http://hg.python.org/jython/rev/e8d6b764cb10 changeset: 6543:e8d6b764cb10 parent: 6541:5a9128b6662b parent: 6542:196e2e8bad7b user: Frank Wierzbicki date: Fri Apr 06 14:27:06 2012 -0700 summary: Merge 2.5. files: src/org/python/core/Py.java | 23 +++++++++++++++++++++-- 1 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/org/python/core/Py.java b/src/org/python/core/Py.java --- a/src/org/python/core/Py.java +++ b/src/org/python/core/Py.java @@ -1929,8 +1929,15 @@ return inClass.isSubClass((PyClass) cls); } if (cls instanceof PyType) { + PyType type = (PyType)cls; + + //Special case PyStringMap to compare as an instance type dict. + if (inst instanceof PyStringMap && + type.equals(PyDictionary.TYPE)) { + return true; + } + PyType instType = inst.getType(); - PyType type = (PyType) cls; // equiv. to PyObject_TypeCheck if (instType == type || instType.isSubType(type)) { @@ -1981,7 +1988,19 @@ if (derived == cls) { return true; } - return ((PyType) derived).isSubType((PyType) cls); + PyType type = (PyType)cls; + PyType subtype = (PyType)derived; + + // Special case PyStringMap to compare as a subclass of + // PyDictionary. Note that we don't need to check for stringmap + // subclasses, since stringmap can't be subclassed. PyStringMap's + // TYPE is computed lazily, so we have to use PyType.fromClass :( + if (type == PyDictionary.TYPE && + subtype == PyType.fromClass(PyStringMap.class)) { + return true; + } + + return subtype.isSubType(type); } if (derived instanceof PyClass && cls instanceof PyClass) { return ((PyClass) derived).isSubClass((PyClass) cls); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 6 23:28:11 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 06 Apr 2012 23:28:11 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_misspelling=2E?= Message-ID: http://hg.python.org/jython/rev/c57e09fb9bc2 changeset: 6544:c57e09fb9bc2 user: Frank Wierzbicki date: Fri Apr 06 14:27:59 2012 -0700 summary: Fix misspelling. files: Lib/SimpleHTTPServer.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -133,7 +133,7 @@ length = f.tell() f.seek(0) self.send_response(200) - if not platform.python_implementaton() == "Jython": + if not platform.python_implementation() == "Jython": encoding = sys.getfilesystemencoding() self.send_header("Content-type", "text/html; charset=%s" % encoding) self.send_header("Content-Length", str(length)) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 7 03:33:48 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Sat, 07 Apr 2012 03:33:48 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Add_a_codec_to_expected_fail?= =?utf8?q?s=2E?= Message-ID: http://hg.python.org/jython/rev/5d6358d90a0f changeset: 6545:5d6358d90a0f user: Frank Wierzbicki date: Fri Apr 06 18:33:29 2012 -0700 summary: Add a codec to expected fails. files: Lib/test/regrtest.py | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1287,6 +1287,7 @@ """ test_codecencodings_cn test_codecencodings_hk + test_codecencodings_iso2022 test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 7 03:35:41 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Sat, 07 Apr 2012 03:35:41 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_modulefinder_depends_on_co?= =?utf8?q?=5Fnames_and_other_co=5F*_not_supported_by_Jython=2E?= Message-ID: http://hg.python.org/jython/rev/233077a00cda changeset: 6546:233077a00cda user: Frank Wierzbicki date: Fri Apr 06 18:35:29 2012 -0700 summary: modulefinder depends on co_names and other co_* not supported by Jython. files: CPythonLib.includes | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/CPythonLib.includes b/CPythonLib.includes --- a/CPythonLib.includes +++ b/CPythonLib.includes @@ -97,7 +97,6 @@ mimetypes.py MimeWriter.py mimify.py -modulefinder.py multifile.py mutex.py nntplib.py -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 7 04:31:13 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Sat, 07 Apr 2012 04:31:13 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Update_regrtest_skips_and_te?= =?utf8?q?st=5Fsupport=2E?= Message-ID: http://hg.python.org/jython/rev/97c33fee26cd changeset: 6547:97c33fee26cd user: Frank Wierzbicki date: Fri Apr 06 19:31:01 2012 -0700 summary: Update regrtest skips and test_support. files: Lib/test/regrtest.py | 3 ++ Lib/test/test_support.py | 38 +++++++++++++++++++-------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1224,6 +1224,7 @@ test_memoryview test_mhlib test_mmap + test_modulefinder test_msilib test_multiprocessing test_nis @@ -1240,6 +1241,7 @@ test_socket_ssl test_socketserver test_sqlite + test_ssl test_startfile test_strop test_structmembers @@ -1249,6 +1251,7 @@ test_tcl test_timeout test_tk + test_tools test_ttk_guionly test_ttk_textonly test_unicode_file diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -724,26 +724,39 @@ sys.modules.update(self.original_modules) -class EnvironmentVarGuard(object): +class EnvironmentVarGuard(UserDict.DictMixin): """Class to help protect the environment variable properly. Can be used as a context manager.""" def __init__(self): + self._environ = os.environ self._changed = {} - def set(self, envvar, value): + def __getitem__(self, envvar): + return self._environ[envvar] + + def __setitem__(self, envvar, value): # Remember the initial value on the first access if envvar not in self._changed: - self._changed[envvar] = os.environ.get(envvar) - os.environ[envvar] = value + self._changed[envvar] = self._environ.get(envvar) + self._environ[envvar] = value + + def __delitem__(self, envvar): + # Remember the initial value on the first access + if envvar not in self._changed: + self._changed[envvar] = self._environ.get(envvar) + if envvar in self._environ: + del self._environ[envvar] + + def keys(self): + return self._environ.keys() + + def set(self, envvar, value): + self[envvar] = value def unset(self, envvar): - # Remember the initial value on the first access - if envvar not in self._changed: - self._changed[envvar] = os.environ.get(envvar) - if envvar in os.environ: - del os.environ[envvar] + del self[envvar] def __enter__(self): return self @@ -751,10 +764,11 @@ def __exit__(self, *ignore_exc): for (k, v) in self._changed.items(): if v is None: - if k in os.environ: - del os.environ[k] + if k in self._environ: + del self._environ[k] else: - os.environ[k] = v + self._environ[k] = v + os.environ = self._environ class TransientResource(object): -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Mon Apr 9 22:03:33 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Mon, 09 Apr 2012 22:03:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/898e3dc7084f changeset: 6548:898e3dc7084f user: Frank Wierzbicki date: Mon Apr 09 13:03:11 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_bytes.py at 22db03646d9b files: Lib/test/test_bytes.py | 1119 ++++++++++++++++++++++++++++ 1 files changed, 1119 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_bytes.py @@ -0,0 +1,1119 @@ +"""Unit tests for the bytes and bytearray types. + +XXX This is a mess. Common tests should be moved to buffer_tests.py, +which itself ought to be unified with string_tests.py (and the latter +should be modernized). +""" + +import os +import re +import sys +import copy +import functools +import pickle +import tempfile +import unittest +import test.test_support +import test.string_tests +import test.buffer_tests + + +if sys.flags.bytes_warning: + def check_bytes_warnings(func): + @functools.wraps(func) + def wrapper(*args, **kw): + with test.test_support.check_warnings(('', BytesWarning)): + return func(*args, **kw) + return wrapper +else: + # no-op + def check_bytes_warnings(func): + return func + + +class Indexable: + def __init__(self, value=0): + self.value = value + def __index__(self): + return self.value + + +class BaseBytesTest(unittest.TestCase): + + def test_basics(self): + b = self.type2test() + self.assertEqual(type(b), self.type2test) + self.assertEqual(b.__class__, self.type2test) + + def test_empty_sequence(self): + b = self.type2test() + self.assertEqual(len(b), 0) + self.assertRaises(IndexError, lambda: b[0]) + self.assertRaises(IndexError, lambda: b[1]) + self.assertRaises(IndexError, lambda: b[sys.maxint]) + self.assertRaises(IndexError, lambda: b[sys.maxint+1]) + self.assertRaises(IndexError, lambda: b[10**100]) + self.assertRaises(IndexError, lambda: b[-1]) + self.assertRaises(IndexError, lambda: b[-2]) + self.assertRaises(IndexError, lambda: b[-sys.maxint]) + self.assertRaises(IndexError, lambda: b[-sys.maxint-1]) + self.assertRaises(IndexError, lambda: b[-sys.maxint-2]) + self.assertRaises(IndexError, lambda: b[-10**100]) + + def test_from_list(self): + ints = list(range(256)) + b = self.type2test(i for i in ints) + self.assertEqual(len(b), 256) + self.assertEqual(list(b), ints) + + def test_from_index(self): + b = self.type2test([Indexable(), Indexable(1), Indexable(254), + Indexable(255)]) + self.assertEqual(list(b), [0, 1, 254, 255]) + self.assertRaises(ValueError, self.type2test, [Indexable(-1)]) + self.assertRaises(ValueError, self.type2test, [Indexable(256)]) + + def test_from_ssize(self): + self.assertEqual(self.type2test(0), b'') + self.assertEqual(self.type2test(1), b'\x00') + self.assertEqual(self.type2test(5), b'\x00\x00\x00\x00\x00') + self.assertRaises(ValueError, self.type2test, -1) + + self.assertEqual(self.type2test('0', 'ascii'), b'0') + self.assertEqual(self.type2test(b'0'), b'0') + self.assertRaises(OverflowError, self.type2test, sys.maxsize + 1) + + def test_constructor_type_errors(self): + self.assertRaises(TypeError, self.type2test, 0.0) + class C: + pass + # allowed in 2.x + #self.assertRaises(TypeError, self.type2test, ["0"]) + self.assertRaises(TypeError, self.type2test, [0.0]) + self.assertRaises(TypeError, self.type2test, [None]) + self.assertRaises(TypeError, self.type2test, [C()]) + + def test_constructor_value_errors(self): + self.assertRaises(ValueError, self.type2test, [-1]) + self.assertRaises(ValueError, self.type2test, [-sys.maxint]) + self.assertRaises(ValueError, self.type2test, [-sys.maxint-1]) + self.assertRaises(ValueError, self.type2test, [-sys.maxint-2]) + self.assertRaises(ValueError, self.type2test, [-10**100]) + self.assertRaises(ValueError, self.type2test, [256]) + self.assertRaises(ValueError, self.type2test, [257]) + self.assertRaises(ValueError, self.type2test, [sys.maxint]) + self.assertRaises(ValueError, self.type2test, [sys.maxint+1]) + self.assertRaises(ValueError, self.type2test, [10**100]) + + def test_compare(self): + b1 = self.type2test([1, 2, 3]) + b2 = self.type2test([1, 2, 3]) + b3 = self.type2test([1, 3]) + + self.assertEqual(b1, b2) + self.assertTrue(b2 != b3) + self.assertTrue(b1 <= b2) + self.assertTrue(b1 <= b3) + self.assertTrue(b1 < b3) + self.assertTrue(b1 >= b2) + self.assertTrue(b3 >= b2) + self.assertTrue(b3 > b2) + + self.assertFalse(b1 != b2) + self.assertFalse(b2 == b3) + self.assertFalse(b1 > b2) + self.assertFalse(b1 > b3) + self.assertFalse(b1 >= b3) + self.assertFalse(b1 < b2) + self.assertFalse(b3 < b2) + self.assertFalse(b3 <= b2) + + @check_bytes_warnings + def test_compare_to_str(self): + # Byte comparisons with unicode should always fail! + # Test this for all expected byte orders and Unicode character sizes + self.assertEqual(self.type2test(b"\0a\0b\0c") == u"abc", False) + self.assertEqual(self.type2test(b"\0\0\0a\0\0\0b\0\0\0c") == u"abc", False) + self.assertEqual(self.type2test(b"a\0b\0c\0") == u"abc", False) + self.assertEqual(self.type2test(b"a\0\0\0b\0\0\0c\0\0\0") == u"abc", False) + self.assertEqual(self.type2test() == unicode(), False) + self.assertEqual(self.type2test() != unicode(), True) + + def test_reversed(self): + input = list(map(ord, "Hello")) + b = self.type2test(input) + output = list(reversed(b)) + input.reverse() + self.assertEqual(output, input) + + def test_getslice(self): + def by(s): + return self.type2test(map(ord, s)) + b = by("Hello, world") + + self.assertEqual(b[:5], by("Hello")) + self.assertEqual(b[1:5], by("ello")) + self.assertEqual(b[5:7], by(", ")) + self.assertEqual(b[7:], by("world")) + self.assertEqual(b[7:12], by("world")) + self.assertEqual(b[7:100], by("world")) + + self.assertEqual(b[:-7], by("Hello")) + self.assertEqual(b[-11:-7], by("ello")) + self.assertEqual(b[-7:-5], by(", ")) + self.assertEqual(b[-5:], by("world")) + self.assertEqual(b[-5:12], by("world")) + self.assertEqual(b[-5:100], by("world")) + self.assertEqual(b[-100:5], by("Hello")) + + def test_extended_getslice(self): + # Test extended slicing by comparing with list slicing. + L = list(range(255)) + b = self.type2test(L) + indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) + for start in indices: + for stop in indices: + # Skip step 0 (invalid) + for step in indices[1:]: + self.assertEqual(b[start:stop:step], self.type2test(L[start:stop:step])) + + def test_encoding(self): + sample = u"Hello world\n\u1234\u5678\u9abc\udef0" + for enc in ("utf8", "utf16"): + b = self.type2test(sample, enc) + self.assertEqual(b, self.type2test(sample.encode(enc))) + self.assertRaises(UnicodeEncodeError, self.type2test, sample, "latin1") + b = self.type2test(sample, "latin1", "ignore") + self.assertEqual(b, self.type2test(sample[:-4], "utf-8")) + + def test_decode(self): + sample = u"Hello world\n\u1234\u5678\u9abc\def0\def0" + for enc in ("utf8", "utf16"): + b = self.type2test(sample, enc) + self.assertEqual(b.decode(enc), sample) + sample = u"Hello world\n\x80\x81\xfe\xff" + b = self.type2test(sample, "latin1") + self.assertRaises(UnicodeDecodeError, b.decode, "utf8") + self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n") + self.assertEqual(b.decode(errors="ignore", encoding="utf8"), + "Hello world\n") + + def test_from_int(self): + b = self.type2test(0) + self.assertEqual(b, self.type2test()) + b = self.type2test(10) + self.assertEqual(b, self.type2test([0]*10)) + b = self.type2test(10000) + self.assertEqual(b, self.type2test([0]*10000)) + + def test_concat(self): + b1 = self.type2test(b"abc") + b2 = self.type2test(b"def") + self.assertEqual(b1 + b2, b"abcdef") + self.assertEqual(b1 + bytes(b"def"), b"abcdef") + self.assertEqual(bytes(b"def") + b1, b"defabc") + self.assertRaises(TypeError, lambda: b1 + u"def") + self.assertRaises(TypeError, lambda: u"abc" + b2) + + def test_repeat(self): + for b in b"abc", self.type2test(b"abc"): + self.assertEqual(b * 3, b"abcabcabc") + self.assertEqual(b * 0, b"") + self.assertEqual(b * -1, b"") + self.assertRaises(TypeError, lambda: b * 3.14) + self.assertRaises(TypeError, lambda: 3.14 * b) + # XXX Shouldn't bytes and bytearray agree on what to raise? + self.assertRaises((OverflowError, MemoryError), + lambda: b * sys.maxsize) + + def test_repeat_1char(self): + self.assertEqual(self.type2test(b'x')*100, self.type2test([ord('x')]*100)) + + def test_contains(self): + b = self.type2test(b"abc") + self.assertIn(ord('a'), b) + self.assertIn(int(ord('a')), b) + self.assertNotIn(200, b) + self.assertRaises(ValueError, lambda: 300 in b) + self.assertRaises(ValueError, lambda: -1 in b) + self.assertRaises(TypeError, lambda: None in b) + self.assertRaises(TypeError, lambda: float(ord('a')) in b) + self.assertRaises(TypeError, lambda: u"a" in b) + for f in bytes, bytearray: + self.assertIn(f(b""), b) + self.assertIn(f(b"a"), b) + self.assertIn(f(b"b"), b) + self.assertIn(f(b"c"), b) + self.assertIn(f(b"ab"), b) + self.assertIn(f(b"bc"), b) + self.assertIn(f(b"abc"), b) + self.assertNotIn(f(b"ac"), b) + self.assertNotIn(f(b"d"), b) + self.assertNotIn(f(b"dab"), b) + self.assertNotIn(f(b"abd"), b) + + def test_fromhex(self): + self.assertRaises(TypeError, self.type2test.fromhex) + self.assertRaises(TypeError, self.type2test.fromhex, 1) + self.assertEqual(self.type2test.fromhex(u''), self.type2test()) + b = bytearray([0x1a, 0x2b, 0x30]) + self.assertEqual(self.type2test.fromhex(u'1a2B30'), b) + self.assertEqual(self.type2test.fromhex(u' 1A 2B 30 '), b) + self.assertEqual(self.type2test.fromhex(u'0000'), b'\0\0') + self.assertRaises(ValueError, self.type2test.fromhex, u'a') + self.assertRaises(ValueError, self.type2test.fromhex, u'rt') + self.assertRaises(ValueError, self.type2test.fromhex, u'1a b cd') + self.assertRaises(ValueError, self.type2test.fromhex, u'\x00') + self.assertRaises(ValueError, self.type2test.fromhex, u'12 \x00 34') + + def test_join(self): + self.assertEqual(self.type2test(b"").join([]), b"") + self.assertEqual(self.type2test(b"").join([b""]), b"") + for lst in [[b"abc"], [b"a", b"bc"], [b"ab", b"c"], [b"a", b"b", b"c"]]: + lst = list(map(self.type2test, lst)) + self.assertEqual(self.type2test(b"").join(lst), b"abc") + self.assertEqual(self.type2test(b"").join(tuple(lst)), b"abc") + self.assertEqual(self.type2test(b"").join(iter(lst)), b"abc") + self.assertEqual(self.type2test(b".").join([b"ab", b"cd"]), b"ab.cd") + # XXX more... + + def test_count(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.count(b'i'), 4) + self.assertEqual(b.count(b'ss'), 2) + self.assertEqual(b.count(b'w'), 0) + + def test_startswith(self): + b = self.type2test(b'hello') + self.assertFalse(self.type2test().startswith(b"anything")) + self.assertTrue(b.startswith(b"hello")) + self.assertTrue(b.startswith(b"hel")) + self.assertTrue(b.startswith(b"h")) + self.assertFalse(b.startswith(b"hellow")) + self.assertFalse(b.startswith(b"ha")) + + def test_endswith(self): + b = self.type2test(b'hello') + self.assertFalse(bytearray().endswith(b"anything")) + self.assertTrue(b.endswith(b"hello")) + self.assertTrue(b.endswith(b"llo")) + self.assertTrue(b.endswith(b"o")) + self.assertFalse(b.endswith(b"whello")) + self.assertFalse(b.endswith(b"no")) + + def test_find(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.find(b'ss'), 2) + self.assertEqual(b.find(b'ss', 3), 5) + self.assertEqual(b.find(b'ss', 1, 7), 2) + self.assertEqual(b.find(b'ss', 1, 3), -1) + self.assertEqual(b.find(b'w'), -1) + self.assertEqual(b.find(b'mississippian'), -1) + + def test_rfind(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.rfind(b'ss'), 5) + self.assertEqual(b.rfind(b'ss', 3), 5) + self.assertEqual(b.rfind(b'ss', 0, 6), 2) + self.assertEqual(b.rfind(b'w'), -1) + self.assertEqual(b.rfind(b'mississippian'), -1) + + def test_index(self): + b = self.type2test(b'world') + self.assertEqual(b.index(b'w'), 0) + self.assertEqual(b.index(b'orl'), 1) + self.assertRaises(ValueError, b.index, b'worm') + self.assertRaises(ValueError, b.index, b'ldo') + + def test_rindex(self): + # XXX could be more rigorous + b = self.type2test(b'world') + self.assertEqual(b.rindex(b'w'), 0) + self.assertEqual(b.rindex(b'orl'), 1) + self.assertRaises(ValueError, b.rindex, b'worm') + self.assertRaises(ValueError, b.rindex, b'ldo') + + def test_replace(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.replace(b'i', b'a'), b'massassappa') + self.assertEqual(b.replace(b'ss', b'x'), b'mixixippi') + + def test_split(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.split(b'i'), [b'm', b'ss', b'ss', b'pp', b'']) + self.assertEqual(b.split(b'ss'), [b'mi', b'i', b'ippi']) + self.assertEqual(b.split(b'w'), [b]) + + def test_split_whitespace(self): + for b in (b' arf barf ', b'arf\tbarf', b'arf\nbarf', b'arf\rbarf', + b'arf\fbarf', b'arf\vbarf'): + b = self.type2test(b) + self.assertEqual(b.split(), [b'arf', b'barf']) + self.assertEqual(b.split(None), [b'arf', b'barf']) + self.assertEqual(b.split(None, 2), [b'arf', b'barf']) + for b in (b'a\x1Cb', b'a\x1Db', b'a\x1Eb', b'a\x1Fb'): + b = self.type2test(b) + self.assertEqual(b.split(), [b]) + self.assertEqual(self.type2test(b' a bb c ').split(None, 0), [b'a bb c ']) + self.assertEqual(self.type2test(b' a bb c ').split(None, 1), [b'a', b'bb c ']) + self.assertEqual(self.type2test(b' a bb c ').split(None, 2), [b'a', b'bb', b'c ']) + self.assertEqual(self.type2test(b' a bb c ').split(None, 3), [b'a', b'bb', b'c']) + + def test_split_string_error(self): + self.assertRaises(TypeError, self.type2test(b'a b').split, u' ') + + def test_split_unicodewhitespace(self): + b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F") + self.assertEqual(b.split(), [b'\x1c\x1d\x1e\x1f']) + + def test_rsplit(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.rsplit(b'i'), [b'm', b'ss', b'ss', b'pp', b'']) + self.assertEqual(b.rsplit(b'ss'), [b'mi', b'i', b'ippi']) + self.assertEqual(b.rsplit(b'w'), [b]) + + def test_rsplit_whitespace(self): + for b in (b' arf barf ', b'arf\tbarf', b'arf\nbarf', b'arf\rbarf', + b'arf\fbarf', b'arf\vbarf'): + b = self.type2test(b) + self.assertEqual(b.rsplit(), [b'arf', b'barf']) + self.assertEqual(b.rsplit(None), [b'arf', b'barf']) + self.assertEqual(b.rsplit(None, 2), [b'arf', b'barf']) + self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 0), [b' a bb c']) + self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 1), [b' a bb', b'c']) + self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 2), [b' a', b'bb', b'c']) + self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 3), [b'a', b'bb', b'c']) + + def test_rsplit_string_error(self): + self.assertRaises(TypeError, self.type2test(b'a b').rsplit, u' ') + + def test_rsplit_unicodewhitespace(self): + b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F") + self.assertEqual(b.rsplit(), [b'\x1c\x1d\x1e\x1f']) + + def test_partition(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.partition(b'ss'), (b'mi', b'ss', b'issippi')) + self.assertEqual(b.partition(b'w'), (b'mississippi', b'', b'')) + + def test_rpartition(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.rpartition(b'ss'), (b'missi', b'ss', b'ippi')) + self.assertEqual(b.rpartition(b'i'), (b'mississipp', b'i', b'')) + self.assertEqual(b.rpartition(b'w'), (b'', b'', b'mississippi')) + + def test_pickling(self): + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + for b in b"", b"a", b"abc", b"\xffab\x80", b"\0\0\377\0\0": + b = self.type2test(b) + ps = pickle.dumps(b, proto) + q = pickle.loads(ps) + self.assertEqual(b, q) + + def test_strip(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.strip(b'i'), b'mississipp') + self.assertEqual(b.strip(b'm'), b'ississippi') + self.assertEqual(b.strip(b'pi'), b'mississ') + self.assertEqual(b.strip(b'im'), b'ssissipp') + self.assertEqual(b.strip(b'pim'), b'ssiss') + self.assertEqual(b.strip(b), b'') + + def test_lstrip(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.lstrip(b'i'), b'mississippi') + self.assertEqual(b.lstrip(b'm'), b'ississippi') + self.assertEqual(b.lstrip(b'pi'), b'mississippi') + self.assertEqual(b.lstrip(b'im'), b'ssissippi') + self.assertEqual(b.lstrip(b'pim'), b'ssissippi') + + def test_rstrip(self): + b = self.type2test(b'mississippi') + self.assertEqual(b.rstrip(b'i'), b'mississipp') + self.assertEqual(b.rstrip(b'm'), b'mississippi') + self.assertEqual(b.rstrip(b'pi'), b'mississ') + self.assertEqual(b.rstrip(b'im'), b'mississipp') + self.assertEqual(b.rstrip(b'pim'), b'mississ') + + def test_strip_whitespace(self): + b = self.type2test(b' \t\n\r\f\vabc \t\n\r\f\v') + self.assertEqual(b.strip(), b'abc') + self.assertEqual(b.lstrip(), b'abc \t\n\r\f\v') + self.assertEqual(b.rstrip(), b' \t\n\r\f\vabc') + + def test_strip_bytearray(self): + self.assertEqual(self.type2test(b'abc').strip(memoryview(b'ac')), b'b') + self.assertEqual(self.type2test(b'abc').lstrip(memoryview(b'ac')), b'bc') + self.assertEqual(self.type2test(b'abc').rstrip(memoryview(b'ac')), b'ab') + + def test_strip_string_error(self): + self.assertRaises(TypeError, self.type2test(b'abc').strip, u'b') + self.assertRaises(TypeError, self.type2test(b'abc').lstrip, u'b') + self.assertRaises(TypeError, self.type2test(b'abc').rstrip, u'b') + + def test_ord(self): + b = self.type2test(b'\0A\x7f\x80\xff') + self.assertEqual([ord(b[i:i+1]) for i in range(len(b))], + [0, 65, 127, 128, 255]) + + def test_none_arguments(self): + # issue 11828 + b = self.type2test(b'hello') + l = self.type2test(b'l') + h = self.type2test(b'h') + x = self.type2test(b'x') + o = self.type2test(b'o') + + self.assertEqual(2, b.find(l, None)) + self.assertEqual(3, b.find(l, -2, None)) + self.assertEqual(2, b.find(l, None, -2)) + self.assertEqual(0, b.find(h, None, None)) + + self.assertEqual(3, b.rfind(l, None)) + self.assertEqual(3, b.rfind(l, -2, None)) + self.assertEqual(2, b.rfind(l, None, -2)) + self.assertEqual(0, b.rfind(h, None, None)) + + self.assertEqual(2, b.index(l, None)) + self.assertEqual(3, b.index(l, -2, None)) + self.assertEqual(2, b.index(l, None, -2)) + self.assertEqual(0, b.index(h, None, None)) + + self.assertEqual(3, b.rindex(l, None)) + self.assertEqual(3, b.rindex(l, -2, None)) + self.assertEqual(2, b.rindex(l, None, -2)) + self.assertEqual(0, b.rindex(h, None, None)) + + self.assertEqual(2, b.count(l, None)) + self.assertEqual(1, b.count(l, -2, None)) + self.assertEqual(1, b.count(l, None, -2)) + self.assertEqual(0, b.count(x, None, None)) + + self.assertEqual(True, b.endswith(o, None)) + self.assertEqual(True, b.endswith(o, -2, None)) + self.assertEqual(True, b.endswith(l, None, -2)) + self.assertEqual(False, b.endswith(x, None, None)) + + self.assertEqual(True, b.startswith(h, None)) + self.assertEqual(True, b.startswith(l, -2, None)) + self.assertEqual(True, b.startswith(h, None, -2)) + self.assertEqual(False, b.startswith(x, None, None)) + + def test_find_etc_raise_correct_error_messages(self): + # issue 11828 + b = self.type2test(b'hello') + x = self.type2test(b'x') + self.assertRaisesRegexp(TypeError, r'\bfind\b', b.find, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\brfind\b', b.rfind, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\bindex\b', b.index, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\brindex\b', b.rindex, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\bcount\b', b.count, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\bstartswith\b', b.startswith, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\bendswith\b', b.endswith, + x, None, None, None) + + +class ByteArrayTest(BaseBytesTest): + type2test = bytearray + + def test_nohash(self): + self.assertRaises(TypeError, hash, bytearray()) + + def test_bytearray_api(self): + short_sample = b"Hello world\n" + sample = short_sample + b"\0"*(20 - len(short_sample)) + tfn = tempfile.mktemp() + try: + # Prepare + with open(tfn, "wb") as f: + f.write(short_sample) + # Test readinto + with open(tfn, "rb") as f: + b = bytearray(20) + n = f.readinto(b) + self.assertEqual(n, len(short_sample)) + # Python 2.x + b_sample = (ord(s) for s in sample) + self.assertEqual(list(b), list(b_sample)) + # Test writing in binary mode + with open(tfn, "wb") as f: + f.write(b) + with open(tfn, "rb") as f: + self.assertEqual(f.read(), sample) + # Text mode is ambiguous; don't test + finally: + try: + os.remove(tfn) + except os.error: + pass + + def test_reverse(self): + b = bytearray(b'hello') + self.assertEqual(b.reverse(), None) + self.assertEqual(b, b'olleh') + b = bytearray(b'hello1') # test even number of items + b.reverse() + self.assertEqual(b, b'1olleh') + b = bytearray() + b.reverse() + self.assertFalse(b) + + def test_regexps(self): + def by(s): + return bytearray(map(ord, s)) + b = by("Hello, world") + self.assertEqual(re.findall(r"\w+", b), [by("Hello"), by("world")]) + + def test_setitem(self): + b = bytearray([1, 2, 3]) + b[1] = 100 + self.assertEqual(b, bytearray([1, 100, 3])) + b[-1] = 200 + self.assertEqual(b, bytearray([1, 100, 200])) + b[0] = Indexable(10) + self.assertEqual(b, bytearray([10, 100, 200])) + try: + b[3] = 0 + self.fail("Didn't raise IndexError") + except IndexError: + pass + try: + b[-10] = 0 + self.fail("Didn't raise IndexError") + except IndexError: + pass + try: + b[0] = 256 + self.fail("Didn't raise ValueError") + except ValueError: + pass + try: + b[0] = Indexable(-1) + self.fail("Didn't raise ValueError") + except ValueError: + pass + try: + b[0] = None + self.fail("Didn't raise TypeError") + except TypeError: + pass + + def test_delitem(self): + b = bytearray(range(10)) + del b[0] + self.assertEqual(b, bytearray(range(1, 10))) + del b[-1] + self.assertEqual(b, bytearray(range(1, 9))) + del b[4] + self.assertEqual(b, bytearray([1, 2, 3, 4, 6, 7, 8])) + + def test_setslice(self): + b = bytearray(range(10)) + self.assertEqual(list(b), list(range(10))) + + b[0:5] = bytearray([1, 1, 1, 1, 1]) + self.assertEqual(b, bytearray([1, 1, 1, 1, 1, 5, 6, 7, 8, 9])) + + del b[0:-5] + self.assertEqual(b, bytearray([5, 6, 7, 8, 9])) + + b[0:0] = bytearray([0, 1, 2, 3, 4]) + self.assertEqual(b, bytearray(range(10))) + + b[-7:-3] = bytearray([100, 101]) + self.assertEqual(b, bytearray([0, 1, 2, 100, 101, 7, 8, 9])) + + b[3:5] = [3, 4, 5, 6] + self.assertEqual(b, bytearray(range(10))) + + b[3:0] = [42, 42, 42] + self.assertEqual(b, bytearray([0, 1, 2, 42, 42, 42, 3, 4, 5, 6, 7, 8, 9])) + + def test_extended_set_del_slice(self): + indices = (0, None, 1, 3, 19, 300, 1<<333, -1, -2, -31, -300) + for start in indices: + for stop in indices: + # Skip invalid step 0 + for step in indices[1:]: + L = list(range(255)) + b = bytearray(L) + # Make sure we have a slice of exactly the right length, + # but with different data. + data = L[start:stop:step] + data.reverse() + L[start:stop:step] = data + b[start:stop:step] = data + self.assertEqual(b, bytearray(L)) + + del L[start:stop:step] + del b[start:stop:step] + self.assertEqual(b, bytearray(L)) + + def test_setslice_trap(self): + # This test verifies that we correctly handle assigning self + # to a slice of self (the old Lambert Meertens trap). + b = bytearray(range(256)) + b[8:] = b + self.assertEqual(b, bytearray(list(range(8)) + list(range(256)))) + + def test_iconcat(self): + b = bytearray(b"abc") + b1 = b + b += b"def" + self.assertEqual(b, b"abcdef") + self.assertEqual(b, b1) + self.assertTrue(b is b1) + b += b"xyz" + self.assertEqual(b, b"abcdefxyz") + try: + b += u"" + except TypeError: + pass + else: + self.fail("bytes += unicode didn't raise TypeError") + + def test_irepeat(self): + b = bytearray(b"abc") + b1 = b + b *= 3 + self.assertEqual(b, b"abcabcabc") + self.assertEqual(b, b1) + self.assertTrue(b is b1) + + def test_irepeat_1char(self): + b = bytearray(b"x") + b1 = b + b *= 100 + self.assertEqual(b, b"x"*100) + self.assertEqual(b, b1) + self.assertTrue(b is b1) + + def test_alloc(self): + b = bytearray() + alloc = b.__alloc__() + self.assertTrue(alloc >= 0) + seq = [alloc] + for i in range(100): + b += b"x" + alloc = b.__alloc__() + self.assertTrue(alloc >= len(b)) + if alloc not in seq: + seq.append(alloc) + + def test_extend(self): + orig = b'hello' + a = bytearray(orig) + a.extend(a) + self.assertEqual(a, orig + orig) + self.assertEqual(a[5:], orig) + a = bytearray(b'') + # Test iterators that don't have a __length_hint__ + a.extend(map(ord, orig * 25)) + a.extend(ord(x) for x in orig * 25) + self.assertEqual(a, orig * 50) + self.assertEqual(a[-5:], orig) + a = bytearray(b'') + a.extend(iter(map(ord, orig * 50))) + self.assertEqual(a, orig * 50) + self.assertEqual(a[-5:], orig) + a = bytearray(b'') + a.extend(list(map(ord, orig * 50))) + self.assertEqual(a, orig * 50) + self.assertEqual(a[-5:], orig) + a = bytearray(b'') + self.assertRaises(ValueError, a.extend, [0, 1, 2, 256]) + self.assertRaises(ValueError, a.extend, [0, 1, 2, -1]) + self.assertEqual(len(a), 0) + a = bytearray(b'') + a.extend([Indexable(ord('a'))]) + self.assertEqual(a, b'a') + + def test_remove(self): + b = bytearray(b'hello') + b.remove(ord('l')) + self.assertEqual(b, b'helo') + b.remove(ord('l')) + self.assertEqual(b, b'heo') + self.assertRaises(ValueError, lambda: b.remove(ord('l'))) + self.assertRaises(ValueError, lambda: b.remove(400)) + self.assertRaises(TypeError, lambda: b.remove(u'e')) + # remove first and last + b.remove(ord('o')) + b.remove(ord('h')) + self.assertEqual(b, b'e') + self.assertRaises(TypeError, lambda: b.remove(u'e')) + b.remove(Indexable(ord('e'))) + self.assertEqual(b, b'') + + def test_pop(self): + b = bytearray(b'world') + self.assertEqual(b.pop(), ord('d')) + self.assertEqual(b.pop(0), ord('w')) + self.assertEqual(b.pop(-2), ord('r')) + self.assertRaises(IndexError, lambda: b.pop(10)) + self.assertRaises(IndexError, lambda: bytearray().pop()) + # test for issue #6846 + self.assertEqual(bytearray(b'\xff').pop(), 0xff) + + def test_nosort(self): + self.assertRaises(AttributeError, lambda: bytearray().sort()) + + def test_append(self): + b = bytearray(b'hell') + b.append(ord('o')) + self.assertEqual(b, b'hello') + self.assertEqual(b.append(100), None) + b = bytearray() + b.append(ord('A')) + self.assertEqual(len(b), 1) + self.assertRaises(TypeError, lambda: b.append(u'o')) + b = bytearray() + b.append(Indexable(ord('A'))) + self.assertEqual(b, b'A') + + def test_insert(self): + b = bytearray(b'msssspp') + b.insert(1, ord('i')) + b.insert(4, ord('i')) + b.insert(-2, ord('i')) + b.insert(1000, ord('i')) + self.assertEqual(b, b'mississippi') + # allowed in 2.x + #self.assertRaises(TypeError, lambda: b.insert(0, b'1')) + b = bytearray() + b.insert(0, Indexable(ord('A'))) + self.assertEqual(b, b'A') + + def test_copied(self): + # Issue 4348. Make sure that operations that don't mutate the array + # copy the bytes. + b = bytearray(b'abc') + self.assertFalse(b is b.replace(b'abc', b'cde', 0)) + + t = bytearray([i for i in range(256)]) + x = bytearray(b'') + self.assertFalse(x is x.translate(t)) + + def test_partition_bytearray_doesnt_share_nullstring(self): + a, b, c = bytearray(b"x").partition(b"y") + self.assertEqual(b, b"") + self.assertEqual(c, b"") + self.assertTrue(b is not c) + b += b"!" + self.assertEqual(c, b"") + a, b, c = bytearray(b"x").partition(b"y") + self.assertEqual(b, b"") + self.assertEqual(c, b"") + # Same for rpartition + b, c, a = bytearray(b"x").rpartition(b"y") + self.assertEqual(b, b"") + self.assertEqual(c, b"") + self.assertTrue(b is not c) + b += b"!" + self.assertEqual(c, b"") + c, b, a = bytearray(b"x").rpartition(b"y") + self.assertEqual(b, b"") + self.assertEqual(c, b"") + + def test_resize_forbidden(self): + # #4509: can't resize a bytearray when there are buffer exports, even + # if it wouldn't reallocate the underlying buffer. + # Furthermore, no destructive changes to the buffer may be applied + # before raising the error. + b = bytearray(range(10)) + v = memoryview(b) + def resize(n): + b[1:-1] = range(n + 1, 2*n - 1) + resize(10) + orig = b[:] + self.assertRaises(BufferError, resize, 11) + self.assertEqual(b, orig) + self.assertRaises(BufferError, resize, 9) + self.assertEqual(b, orig) + self.assertRaises(BufferError, resize, 0) + self.assertEqual(b, orig) + # Other operations implying resize + self.assertRaises(BufferError, b.pop, 0) + self.assertEqual(b, orig) + self.assertRaises(BufferError, b.remove, b[1]) + self.assertEqual(b, orig) + def delitem(): + del b[1] + self.assertRaises(BufferError, delitem) + self.assertEqual(b, orig) + # deleting a non-contiguous slice + def delslice(): + b[1:-1:2] = b"" + self.assertRaises(BufferError, delslice) + self.assertEqual(b, orig) + + def test_empty_bytearray(self): + # Issue #7561: operations on empty bytearrays could crash in many + # situations, due to a fragile implementation of the + # PyByteArray_AS_STRING() C macro. + self.assertRaises(ValueError, int, bytearray(b'')) + + +class AssortedBytesTest(unittest.TestCase): + # + # Test various combinations of bytes and bytearray + # + + @check_bytes_warnings + def test_repr_str(self): + for f in str, repr: + self.assertEqual(f(bytearray()), "bytearray(b'')") + self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')") + self.assertEqual(f(bytearray([0, 1, 254, 255])), + "bytearray(b'\\x00\\x01\\xfe\\xff')") + self.assertEqual(f(b"abc"), "b'abc'") + self.assertEqual(f(b"'"), '''b"'"''') # ''' + self.assertEqual(f(b"'\""), r"""b'\'"'""") # ' + + def test_compare_bytes_to_bytearray(self): + self.assertEqual(b"abc" == bytes(b"abc"), True) + self.assertEqual(b"ab" != bytes(b"abc"), True) + self.assertEqual(b"ab" <= bytes(b"abc"), True) + self.assertEqual(b"ab" < bytes(b"abc"), True) + self.assertEqual(b"abc" >= bytes(b"ab"), True) + self.assertEqual(b"abc" > bytes(b"ab"), True) + + self.assertEqual(b"abc" != bytes(b"abc"), False) + self.assertEqual(b"ab" == bytes(b"abc"), False) + self.assertEqual(b"ab" > bytes(b"abc"), False) + self.assertEqual(b"ab" >= bytes(b"abc"), False) + self.assertEqual(b"abc" < bytes(b"ab"), False) + self.assertEqual(b"abc" <= bytes(b"ab"), False) + + self.assertEqual(bytes(b"abc") == b"abc", True) + self.assertEqual(bytes(b"ab") != b"abc", True) + self.assertEqual(bytes(b"ab") <= b"abc", True) + self.assertEqual(bytes(b"ab") < b"abc", True) + self.assertEqual(bytes(b"abc") >= b"ab", True) + self.assertEqual(bytes(b"abc") > b"ab", True) + + self.assertEqual(bytes(b"abc") != b"abc", False) + self.assertEqual(bytes(b"ab") == b"abc", False) + self.assertEqual(bytes(b"ab") > b"abc", False) + self.assertEqual(bytes(b"ab") >= b"abc", False) + self.assertEqual(bytes(b"abc") < b"ab", False) + self.assertEqual(bytes(b"abc") <= b"ab", False) + + def test_doc(self): + self.assertIsNotNone(bytearray.__doc__) + self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) + self.assertIsNotNone(bytes.__doc__) + self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) + + def test_from_bytearray(self): + sample = bytes(b"Hello world\n\x80\x81\xfe\xff") + buf = memoryview(sample) + b = bytearray(buf) + self.assertEqual(b, bytearray(sample)) + + @check_bytes_warnings + def test_to_str(self): + self.assertEqual(str(b''), "b''") + self.assertEqual(str(b'x'), "b'x'") + self.assertEqual(str(b'\x80'), "b'\\x80'") + self.assertEqual(str(bytearray(b'')), "bytearray(b'')") + self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')") + self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')") + + def test_literal(self): + tests = [ + (b"Wonderful spam", "Wonderful spam"), + (br"Wonderful spam too", "Wonderful spam too"), + (b"\xaa\x00\000\200", "\xaa\x00\000\200"), + (br"\xaa\x00\000\200", r"\xaa\x00\000\200"), + ] + for b, s in tests: + self.assertEqual(b, bytearray(s, 'latin-1')) + for c in range(128, 256): + self.assertRaises(SyntaxError, eval, + 'b"%s"' % chr(c)) + + def test_translate(self): + b = b'hello' + ba = bytearray(b) + rosetta = bytearray(range(0, 256)) + rosetta[ord('o')] = ord('e') + c = b.translate(rosetta, b'l') + self.assertEqual(b, b'hello') + self.assertEqual(c, b'hee') + c = ba.translate(rosetta, b'l') + self.assertEqual(ba, b'hello') + self.assertEqual(c, b'hee') + c = b.translate(None, b'e') + self.assertEqual(c, b'hllo') + c = ba.translate(None, b'e') + self.assertEqual(c, b'hllo') + self.assertRaises(TypeError, b.translate, None, None) + self.assertRaises(TypeError, ba.translate, None, None) + + def test_split_bytearray(self): + self.assertEqual(b'a b'.split(memoryview(b' ')), [b'a', b'b']) + + def test_rsplit_bytearray(self): + self.assertEqual(b'a b'.rsplit(memoryview(b' ')), [b'a', b'b']) + + # Optimizations: + # __iter__? (optimization) + # __reversed__? (optimization) + + # XXX More string methods? (Those that don't use character properties) + + # There are tests in string_tests.py that are more + # comprehensive for things like split, partition, etc. + # Unfortunately they are all bundled with tests that + # are not appropriate for bytes + + # I've started porting some of those into bytearray_tests.py, we should port + # the rest that make sense (the code can be cleaned up to use modern + # unittest methods at the same time). + +class BytearrayPEP3137Test(unittest.TestCase, + test.buffer_tests.MixinBytesBufferCommonTests): + def marshal(self, x): + return bytearray(x) + + def test_returns_new_copy(self): + val = self.marshal(b'1234') + # On immutable types these MAY return a reference to themselves + # but on mutable types like bytearray they MUST return a new copy. + for methname in ('zfill', 'rjust', 'ljust', 'center'): + method = getattr(val, methname) + newval = method(3) + self.assertEqual(val, newval) + self.assertTrue(val is not newval, + methname+' returned self on a mutable object') + for expr in ('val.split()[0]', 'val.rsplit()[0]', + 'val.partition(".")[0]', 'val.rpartition(".")[2]', + 'val.splitlines()[0]', 'val.replace("", "")'): + newval = eval(expr) + self.assertEqual(val, newval) + self.assertTrue(val is not newval, + expr+' returned val on a mutable object') + +class FixedStringTest(test.string_tests.BaseTest): + + def fixtype(self, obj): + if isinstance(obj, str): + return obj.encode("utf-8") + return super(FixedStringTest, self).fixtype(obj) + + # Currently the bytes containment testing uses a single integer + # value. This may not be the final design, but until then the + # bytes section with in a bytes containment not valid + def test_contains(self): + pass + def test_expandtabs(self): + pass + def test_upper(self): + pass + def test_lower(self): + pass + def test_hash(self): + # XXX check this out + pass + + +class ByteArrayAsStringTest(FixedStringTest): + type2test = bytearray + + +class ByteArraySubclass(bytearray): + pass + +class ByteArraySubclassTest(unittest.TestCase): + + def test_basic(self): + self.assertTrue(issubclass(ByteArraySubclass, bytearray)) + self.assertIsInstance(ByteArraySubclass(), bytearray) + + a, b = b"abcd", b"efgh" + _a, _b = ByteArraySubclass(a), ByteArraySubclass(b) + + # test comparison operators with subclass instances + self.assertTrue(_a == _a) + self.assertTrue(_a != _b) + self.assertTrue(_a < _b) + self.assertTrue(_a <= _b) + self.assertTrue(_b >= _a) + self.assertTrue(_b > _a) + self.assertTrue(_a is not a) + + # test concat of subclass instances + self.assertEqual(a + b, _a + _b) + self.assertEqual(a + b, a + _b) + self.assertEqual(a + b, _a + b) + + # test repeat + self.assertTrue(a*5 == _a*5) + + def test_join(self): + # Make sure join returns a NEW object for single item sequences + # involving a subclass. + # Make sure that it is of the appropriate type. + s1 = ByteArraySubclass(b"abcd") + s2 = bytearray().join([s1]) + self.assertTrue(s1 is not s2) + self.assertTrue(type(s2) is bytearray, type(s2)) + + # Test reverse, calling join on subclass + s3 = s1.join([b"abcd"]) + self.assertTrue(type(s3) is bytearray) + + def test_pickle(self): + a = ByteArraySubclass(b"abcd") + a.x = 10 + a.y = ByteArraySubclass(b"efgh") + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + b = pickle.loads(pickle.dumps(a, proto)) + self.assertNotEqual(id(a), id(b)) + self.assertEqual(a, b) + self.assertEqual(a.x, b.x) + self.assertEqual(a.y, b.y) + self.assertEqual(type(a), type(b)) + self.assertEqual(type(a.y), type(b.y)) + + def test_copy(self): + a = ByteArraySubclass(b"abcd") + a.x = 10 + a.y = ByteArraySubclass(b"efgh") + for copy_method in (copy.copy, copy.deepcopy): + b = copy_method(a) + self.assertNotEqual(id(a), id(b)) + self.assertEqual(a, b) + self.assertEqual(a.x, b.x) + self.assertEqual(a.y, b.y) + self.assertEqual(type(a), type(b)) + self.assertEqual(type(a.y), type(b.y)) + + def test_init_override(self): + class subclass(bytearray): + def __init__(self, newarg=1, *args, **kwargs): + bytearray.__init__(self, *args, **kwargs) + x = subclass(4, source=b"abcd") + self.assertEqual(x, b"abcd") + x = subclass(newarg=4, source=b"abcd") + self.assertEqual(x, b"abcd") + +def test_main(): + #test.test_support.run_unittest(BytesTest) + #test.test_support.run_unittest(AssortedBytesTest) + #test.test_support.run_unittest(BytesAsStringTest) + test.test_support.run_unittest( + ByteArrayTest, + ByteArrayAsStringTest, + ByteArraySubclassTest, + BytearrayPEP3137Test) + +if __name__ == "__main__": + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Mon Apr 9 22:40:41 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Mon, 09 Apr 2012 22:40:41 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Comment_out_invalid_codepoin?= =?utf8?q?ts_that_Jython_can=27t_parse=2E_For_discussion_see=3A?= Message-ID: http://hg.python.org/jython/rev/ccf7488f4020 changeset: 6549:ccf7488f4020 user: Frank Wierzbicki date: Mon Apr 09 13:40:22 2012 -0700 summary: Comment out invalid codepoints that Jython can't parse. For discussion see: http://bugs.jython.org/issue1866 files: Lib/test/test_bytes.py | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -177,14 +177,18 @@ for step in indices[1:]: self.assertEqual(b[start:stop:step], self.type2test(L[start:stop:step])) - def test_encoding(self): - sample = u"Hello world\n\u1234\u5678\u9abc\udef0" - for enc in ("utf8", "utf16"): - b = self.type2test(sample, enc) - self.assertEqual(b, self.type2test(sample.encode(enc))) - self.assertRaises(UnicodeEncodeError, self.type2test, sample, "latin1") - b = self.type2test(sample, "latin1", "ignore") - self.assertEqual(b, self.type2test(sample[:-4], "utf-8")) +#XXX: Jython doesn't support codepoints outside of the UTF-16 range even at +# parse time. Maybe someday we might push the error off to later, but for +# now I'm just commenting this whole test out. +# See http://bugs.jython.org/issue1836 for more. +# def test_encoding(self): +# sample = u"Hello world\n\u1234\u5678\u9abc\udef0" +# for enc in ("utf8", "utf16"): +# b = self.type2test(sample, enc) +# self.assertEqual(b, self.type2test(sample.encode(enc))) +# self.assertRaises(UnicodeEncodeError, self.type2test, sample, "latin1") +# b = self.type2test(sample, "latin1", "ignore") +# self.assertEqual(b, self.type2test(sample[:-4], "utf-8")) def test_decode(self): sample = u"Hello world\n\u1234\u5678\u9abc\def0\def0" -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Mon Apr 9 22:41:54 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Mon, 09 Apr 2012 22:41:54 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/20e5268eab18 changeset: 6550:20e5268eab18 user: Frank Wierzbicki date: Mon Apr 09 13:41:14 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/string_tests.py at 22db03646d9b files: Lib/test/string_tests.py | 252 +++++++++++++++++++++----- 1 files changed, 197 insertions(+), 55 deletions(-) diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -62,7 +62,7 @@ pass object = subtype(object) realresult = getattr(object, methodname)(*args) - self.assert_(object is not realresult) + self.assertTrue(object is not realresult) # check that object.method(*args) raises exc def checkraises(self, exc, object, methodname, *args): @@ -120,6 +120,14 @@ self.checkequal(2, 'aaa', 'count', '', -1) self.checkequal(4, 'aaa', 'count', '', -10) + self.checkequal(1, '', 'count', '') + self.checkequal(0, '', 'count', '', 1, 1) + self.checkequal(0, '', 'count', '', sys.maxint, 0) + + self.checkequal(0, '', 'count', 'xx') + self.checkequal(0, '', 'count', 'xx', 1, 1) + self.checkequal(0, '', 'count', 'xx', sys.maxint, 0) + self.checkraises(TypeError, 'hello', 'count') self.checkraises(TypeError, 'hello', 'count', 42) @@ -159,9 +167,27 @@ self.checkequal(3, 'abc', 'find', '', 3) self.checkequal(-1, 'abc', 'find', '', 4) + # to check the ability to pass None as defaults + self.checkequal( 2, 'rrarrrrrrrrra', 'find', 'a') + self.checkequal(12, 'rrarrrrrrrrra', 'find', 'a', 4) + self.checkequal(-1, 'rrarrrrrrrrra', 'find', 'a', 4, 6) + self.checkequal(12, 'rrarrrrrrrrra', 'find', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'find', 'a', None, 6) + self.checkraises(TypeError, 'hello', 'find') self.checkraises(TypeError, 'hello', 'find', 42) + self.checkequal(0, '', 'find', '') + self.checkequal(-1, '', 'find', '', 1, 1) + self.checkequal(-1, '', 'find', '', sys.maxint, 0) + + self.checkequal(-1, '', 'find', 'xx') + self.checkequal(-1, '', 'find', 'xx', 1, 1) + self.checkequal(-1, '', 'find', 'xx', sys.maxint, 0) + + # issue 7458 + self.checkequal(-1, 'ab', 'find', 'xxx', sys.maxsize + 1, 0) + # For a variety of combinations, # verify that str.find() matches __contains__ # and that the found substring is really at that location @@ -182,8 +208,7 @@ loc = i.find(j) r1 = (loc != -1) r2 = j in i - if r1 != r2: - self.assertEqual(r1, r2) + self.assertEqual(r1, r2) if loc != -1: self.assertEqual(i[loc:loc+len(j)], j) @@ -197,9 +222,43 @@ self.checkequal(3, 'abc', 'rfind', '', 3) self.checkequal(-1, 'abc', 'rfind', '', 4) + # to check the ability to pass None as defaults + self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a') + self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a', 4) + self.checkequal(-1, 'rrarrrrrrrrra', 'rfind', 'a', 4, 6) + self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'rfind', 'a', None, 6) + self.checkraises(TypeError, 'hello', 'rfind') self.checkraises(TypeError, 'hello', 'rfind', 42) + # For a variety of combinations, + # verify that str.rfind() matches __contains__ + # and that the found substring is really at that location + charset = ['', 'a', 'b', 'c'] + digits = 5 + base = len(charset) + teststrings = set() + for i in xrange(base ** digits): + entry = [] + for j in xrange(digits): + i, m = divmod(i, base) + entry.append(charset[m]) + teststrings.add(''.join(entry)) + teststrings = list(teststrings) + for i in teststrings: + i = self.fixtype(i) + for j in teststrings: + loc = i.rfind(j) + r1 = (loc != -1) + r2 = j in i + self.assertEqual(r1, r2) + if loc != -1: + self.assertEqual(i[loc:loc+len(j)], self.fixtype(j)) + + # issue 7458 + self.checkequal(-1, 'ab', 'rfind', 'xxx', sys.maxsize + 1, 0) + def test_index(self): self.checkequal(0, 'abcdefghiabc', 'index', '') self.checkequal(3, 'abcdefghiabc', 'index', 'def') @@ -211,6 +270,13 @@ self.checkraises(ValueError, 'abcdefghi', 'index', 'ghi', 8) self.checkraises(ValueError, 'abcdefghi', 'index', 'ghi', -1) + # to check the ability to pass None as defaults + self.checkequal( 2, 'rrarrrrrrrrra', 'index', 'a') + self.checkequal(12, 'rrarrrrrrrrra', 'index', 'a', 4) + self.checkraises(ValueError, 'rrarrrrrrrrra', 'index', 'a', 4, 6) + self.checkequal(12, 'rrarrrrrrrrra', 'index', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'index', 'a', None, 6) + self.checkraises(TypeError, 'hello', 'index') self.checkraises(TypeError, 'hello', 'index', 42) @@ -226,6 +292,13 @@ self.checkraises(ValueError, 'abcdefghi', 'rindex', 'ghi', 0, 8) self.checkraises(ValueError, 'abcdefghi', 'rindex', 'ghi', 0, -1) + # to check the ability to pass None as defaults + self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a') + self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a', 4) + self.checkraises(ValueError, 'rrarrrrrrrrra', 'rindex', 'a', 4, 6) + self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'rindex', 'a', None, 6) + self.checkraises(TypeError, 'hello', 'rindex') self.checkraises(TypeError, 'hello', 'rindex', 42) @@ -251,11 +324,7 @@ self.checkraises(TypeError, 'hello', 'expandtabs', 42, 42) # This test is only valid when sizeof(int) == sizeof(void*) == 4. - - # Jython uses a different algorithm for which overflows cannot occur; - # but memory exhaustion of course can. So not applicable. - if (sys.maxint < (1 << 32) and not test_support.is_jython - and struct.calcsize('P') == 4): + if sys.maxint < (1 << 32) and struct.calcsize('P') == 4: self.checkraises(OverflowError, '\ta\n\tb', 'expandtabs', sys.maxint) @@ -462,8 +531,9 @@ 'lstrip', unicode('xyz', 'ascii')) self.checkequal(unicode('xyzzyhello', 'ascii'), 'xyzzyhelloxyzzy', 'rstrip', unicode('xyz', 'ascii')) - self.checkequal(unicode('hello', 'ascii'), 'hello', - 'strip', unicode('xyz', 'ascii')) + # XXX + #self.checkequal(unicode('hello', 'ascii'), 'hello', + # 'strip', unicode('xyz', 'ascii')) self.checkraises(TypeError, 'hello', 'strip', 42, 42) self.checkraises(TypeError, 'hello', 'lstrip', 42, 42) @@ -645,13 +715,12 @@ EQ("bobobXbobob", "bobobobXbobobob", "replace", "bobob", "bob") EQ("BOBOBOB", "BOBOBOB", "replace", "bob", "bobby") - # XXX - Jython does not support the buffer protocol; perhaps - # it's possible for things like strings. Not likely to be in 2.5 + with test_support.check_py3k_warnings(): + ba = buffer('a') + bb = buffer('b') + EQ("bbc", "abc", "replace", ba, bb) + EQ("aac", "abc", "replace", bb, ba) - # ba = buffer('a') - # bb = buffer('b') - # EQ("bbc", "abc", "replace", ba, bb) - # EQ("aac", "abc", "replace", bb, ba) # self.checkequal('one at two!three!', 'one!two!three!', 'replace', '!', '@', 1) self.checkequal('onetwothree', 'one!two!three!', 'replace', '!', '') @@ -682,7 +751,7 @@ def test_replace_overflow(self): # Check for overflow checking on 32 bit machines - if sys.maxint != 2147483647 or test_support.is_jython or struct.calcsize("P") > 4: + if sys.maxint != 2147483647 or struct.calcsize("P") > 4: return A2_16 = "A" * (2**16) self.checkraises(OverflowError, A2_16, "replace", "", A2_16) @@ -705,6 +774,9 @@ self.checkraises(TypeError, '123', 'zfill') +# XXX alias for py3k forward compatibility +BaseTest = CommonTest + class MixinStrUnicodeUserStringTest: # additional tests that only work for # stringlike objects, i.e. str, unicode, UserString @@ -900,15 +972,15 @@ self.checkraises(TypeError, 'hello', 'endswith', (42,)) def test___contains__(self): - self.checkequal(True, '', '__contains__', '') # vereq('' in '', True) - self.checkequal(True, 'abc', '__contains__', '') # vereq('' in 'abc', True) - self.checkequal(False, 'abc', '__contains__', '\0') # vereq('\0' in 'abc', False) - self.checkequal(True, '\0abc', '__contains__', '\0') # vereq('\0' in '\0abc', True) - self.checkequal(True, 'abc\0', '__contains__', '\0') # vereq('\0' in 'abc\0', True) - self.checkequal(True, '\0abc', '__contains__', 'a') # vereq('a' in '\0abc', True) - self.checkequal(True, 'asdf', '__contains__', 'asdf') # vereq('asdf' in 'asdf', True) - self.checkequal(False, 'asd', '__contains__', 'asdf') # vereq('asdf' in 'asd', False) - self.checkequal(False, '', '__contains__', 'asdf') # vereq('asdf' in '', False) + self.checkequal(True, '', '__contains__', '') + self.checkequal(True, 'abc', '__contains__', '') + self.checkequal(False, 'abc', '__contains__', '\0') + self.checkequal(True, '\0abc', '__contains__', '\0') + self.checkequal(True, 'abc\0', '__contains__', '\0') + self.checkequal(True, '\0abc', '__contains__', 'a') + self.checkequal(True, 'asdf', '__contains__', 'asdf') + self.checkequal(False, 'asd', '__contains__', 'asdf') + self.checkequal(False, '', '__contains__', 'asdf') def test_subscript(self): self.checkequal(u'a', 'abc', '__getitem__', 0) @@ -917,10 +989,7 @@ self.checkequal(u'abc', 'abc', '__getitem__', slice(0, 3)) self.checkequal(u'abc', 'abc', '__getitem__', slice(0, 1000)) self.checkequal(u'a', 'abc', '__getitem__', slice(0, 1)) - self.checkequal(u'a', 'abc', '__getitem__', slice(0, 1L)) self.checkequal(u'', 'abc', '__getitem__', slice(0, 0)) - self.checkequal(u'', 'abc', '__getitem__', slice(0L, 0L)) - # FIXME What about negative indices? This is handled differently by [] and __getitem__(slice) self.checkraises(TypeError, 'abc', '__getitem__', 'def') @@ -934,22 +1003,28 @@ self.checkequal('', 'abc', '__getslice__', 1000, 1000) self.checkequal('', 'abc', '__getslice__', 2000, 1000) self.checkequal('', 'abc', '__getslice__', 2, 1) - # FIXME What about negative indizes? This is handled differently by [] and __getslice__ self.checkraises(TypeError, 'abc', '__getslice__', 'def') + def test_extended_getslice(self): + # Test extended slicing by comparing with list slicing. + s = string.ascii_letters + string.digits + indices = (0, None, 1, 3, 41, -1, -2, -37) + for start in indices: + for stop in indices: + # Skip step 0 (invalid) + for step in indices[1:]: + L = list(s)[start:stop:step] + self.checkequal(u"".join(L), s, '__getitem__', + slice(start, stop, step)) + def test_mul(self): self.checkequal('', 'abc', '__mul__', -1) self.checkequal('', 'abc', '__mul__', 0) self.checkequal('abc', 'abc', '__mul__', 1) self.checkequal('abcabcabc', 'abc', '__mul__', 3) self.checkraises(TypeError, 'abc', '__mul__') - # CPython specific; pypy tests via the operator module instead - if not test_support.is_jython: - self.checkraises(TypeError, 'abc', '__mul__', '') - else: - import operator - self.checkraises(TypeError, operator, '__mul__', 'abc', '') + self.checkraises(TypeError, 'abc', '__mul__', '') # XXX: on a 64-bit system, this doesn't raise an overflow error, # but either raises a MemoryError, or succeeds (if you have 54TiB) #self.checkraises(OverflowError, 10000*'abc', '__mul__', 2000000000) @@ -1008,7 +1083,14 @@ # unicode raises ValueError, str raises OverflowError self.checkraises((ValueError, OverflowError), '%c', '__mod__', ordinal) + longvalue = sys.maxint + 10L + slongvalue = str(longvalue) + if slongvalue[-1] in ("L","l"): slongvalue = slongvalue[:-1] self.checkequal(' 42', '%3ld', '__mod__', 42) + self.checkequal('42', '%d', '__mod__', 42L) + self.checkequal('42', '%d', '__mod__', 42.0) + self.checkequal(slongvalue, '%d', '__mod__', longvalue) + self.checkcall('%d', '__mod__', float(longvalue)) self.checkequal('0042.00', '%07.2f', '__mod__', 42) self.checkequal('0042.00', '%07.2F', '__mod__', 42) @@ -1018,6 +1100,8 @@ self.checkraises(TypeError, '%c', '__mod__', (None,)) self.checkraises(ValueError, '%(foo', '__mod__', {}) self.checkraises(TypeError, '%(foo)s %(bar)s', '__mod__', ('foo', 42)) + self.checkraises(TypeError, '%d', '__mod__', "42") # not numeric + self.checkraises(TypeError, '%d', '__mod__', (42+0j)) # no int/long conversion provided # argument names with properly nested brackets are supported self.checkequal('bar', '%((foo))s', '__mod__', {'(foo)': 'bar'}) @@ -1035,15 +1119,8 @@ format = '%%.%if' % prec value = 0.01 for x in xrange(60): - value = value * 3.141592655 / 3.0 * 10.0 - # The formatfloat() code in stringobject.c and - # unicodeobject.c uses a 120 byte buffer and switches from - # 'f' formatting to 'g' at precision 50, so we expect - # OverflowErrors for the ranges x < 50 and prec >= 67. - if not test_support.is_jython and x < 50 and prec >= 67: - self.checkraises(OverflowError, format, "__mod__", value) - else: - self.checkcall(format, "__mod__", value) + value = value * 3.14159265359 / 3.0 * 10.0 + self.checkcall(format, "__mod__", value) def test_inplace_rewrites(self): # Check that strings don't copy and modify cached single-character strings @@ -1079,6 +1156,9 @@ self.checkraises(ValueError, S, 'partition', '') self.checkraises(TypeError, S, 'partition', None) + # mixed use of str and unicode + self.assertEqual('a/b/c'.partition(u'/'), ('a', '/', 'b/c')) + def test_rpartition(self): self.checkequal(('this is the rparti', 'ti', 'on method'), @@ -1094,6 +1174,65 @@ self.checkraises(ValueError, S, 'rpartition', '') self.checkraises(TypeError, S, 'rpartition', None) + # mixed use of str and unicode + self.assertEqual('a/b/c'.rpartition(u'/'), ('a/b', '/', 'c')) + + def test_none_arguments(self): + # issue 11828 + s = 'hello' + self.checkequal(2, s, 'find', 'l', None) + self.checkequal(3, s, 'find', 'l', -2, None) + self.checkequal(2, s, 'find', 'l', None, -2) + self.checkequal(0, s, 'find', 'h', None, None) + + self.checkequal(3, s, 'rfind', 'l', None) + self.checkequal(3, s, 'rfind', 'l', -2, None) + self.checkequal(2, s, 'rfind', 'l', None, -2) + self.checkequal(0, s, 'rfind', 'h', None, None) + + self.checkequal(2, s, 'index', 'l', None) + self.checkequal(3, s, 'index', 'l', -2, None) + self.checkequal(2, s, 'index', 'l', None, -2) + self.checkequal(0, s, 'index', 'h', None, None) + + self.checkequal(3, s, 'rindex', 'l', None) + self.checkequal(3, s, 'rindex', 'l', -2, None) + self.checkequal(2, s, 'rindex', 'l', None, -2) + self.checkequal(0, s, 'rindex', 'h', None, None) + + self.checkequal(2, s, 'count', 'l', None) + self.checkequal(1, s, 'count', 'l', -2, None) + self.checkequal(1, s, 'count', 'l', None, -2) + self.checkequal(0, s, 'count', 'x', None, None) + + self.checkequal(True, s, 'endswith', 'o', None) + self.checkequal(True, s, 'endswith', 'lo', -2, None) + self.checkequal(True, s, 'endswith', 'l', None, -2) + self.checkequal(False, s, 'endswith', 'x', None, None) + + self.checkequal(True, s, 'startswith', 'h', None) + self.checkequal(True, s, 'startswith', 'l', -2, None) + self.checkequal(True, s, 'startswith', 'h', None, -2) + self.checkequal(False, s, 'startswith', 'x', None, None) + + def test_find_etc_raise_correct_error_messages(self): + # issue 11828 + s = 'hello' + x = 'x' + self.assertRaisesRegexp(TypeError, r'\bfind\b', s.find, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\brfind\b', s.rfind, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\bindex\b', s.index, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'\brindex\b', s.rindex, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'^count\(', s.count, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'^startswith\(', s.startswith, + x, None, None, None) + self.assertRaisesRegexp(TypeError, r'^endswith\(', s.endswith, + x, None, None, None) class MixinStrStringUserStringTest: # Additional tests for 8bit strings, i.e. str, UserString and @@ -1114,6 +1253,9 @@ self.checkequal('Abc', 'abc', 'translate', table) self.checkequal('xyz', 'xyz', 'translate', table) self.checkequal('yz', 'xyz', 'translate', table, 'x') + self.checkequal('yx', 'zyzzx', 'translate', None, 'z') + self.checkequal('zyzzx', 'zyzzx', 'translate', None, '') + self.checkequal('zyzzx', 'zyzzx', 'translate', None) self.checkraises(ValueError, 'xyz', 'translate', 'too short', 'strip') self.checkraises(ValueError, 'xyz', 'translate', 'too short') @@ -1158,34 +1300,34 @@ pass s1 = subclass("abcd") s2 = t().join([s1]) - self.assert_(s1 is not s2) - self.assert_(type(s2) is t) + self.assertTrue(s1 is not s2) + self.assertTrue(type(s2) is t) s1 = t("abcd") s2 = t().join([s1]) - self.assert_(s1 is s2) + self.assertTrue(s1 is s2) # Should also test mixed-type join. if t is unicode: s1 = subclass("abcd") s2 = "".join([s1]) - self.assert_(s1 is not s2) - self.assert_(type(s2) is t) + self.assertTrue(s1 is not s2) + self.assertTrue(type(s2) is t) s1 = t("abcd") s2 = "".join([s1]) - self.assert_(s1 is s2) + self.assertTrue(s1 is s2) elif t is str: s1 = subclass("abcd") s2 = u"".join([s1]) - self.assert_(s1 is not s2) - self.assert_(type(s2) is unicode) # promotes! + self.assertTrue(s1 is not s2) + self.assertTrue(type(s2) is unicode) # promotes! s1 = t("abcd") s2 = u"".join([s1]) - self.assert_(s1 is not s2) - self.assert_(type(s2) is unicode) # promotes! + self.assertTrue(s1 is not s2) + self.assertTrue(type(s2) is unicode) # promotes! else: self.fail("unexpected type for MixinStrUnicodeTest %r" % t) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Mon Apr 9 22:41:54 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Mon, 09 Apr 2012 22:41:54 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Skip_tests_that_currently_do?= =?utf8?b?bid0IHdvcmsu?= Message-ID: http://hg.python.org/jython/rev/c831e3426eec changeset: 6551:c831e3426eec user: Frank Wierzbicki date: Mon Apr 09 13:41:35 2012 -0700 summary: Skip tests that currently don't work. files: Lib/test/string_tests.py | 55 ++++++++++++++++++--------- 1 files changed, 37 insertions(+), 18 deletions(-) diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -171,8 +171,11 @@ self.checkequal( 2, 'rrarrrrrrrrra', 'find', 'a') self.checkequal(12, 'rrarrrrrrrrra', 'find', 'a', 4) self.checkequal(-1, 'rrarrrrrrrrra', 'find', 'a', 4, 6) - self.checkequal(12, 'rrarrrrrrrrra', 'find', 'a', 4, None) - self.checkequal( 2, 'rrarrrrrrrrra', 'find', 'a', None, 6) + + #FIXME: + if not test_support.is_jython: + self.checkequal(12, 'rrarrrrrrrrra', 'find', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'find', 'a', None, 6) self.checkraises(TypeError, 'hello', 'find') self.checkraises(TypeError, 'hello', 'find', 42) @@ -186,7 +189,9 @@ self.checkequal(-1, '', 'find', 'xx', sys.maxint, 0) # issue 7458 - self.checkequal(-1, 'ab', 'find', 'xxx', sys.maxsize + 1, 0) + #FIXME: + if not test_support.is_jython: + self.checkequal(-1, 'ab', 'find', 'xxx', sys.maxsize + 1, 0) # For a variety of combinations, # verify that str.find() matches __contains__ @@ -226,8 +231,10 @@ self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a') self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a', 4) self.checkequal(-1, 'rrarrrrrrrrra', 'rfind', 'a', 4, 6) - self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a', 4, None) - self.checkequal( 2, 'rrarrrrrrrrra', 'rfind', 'a', None, 6) + #FIXME: + if not test_support.is_jython: + self.checkequal(12, 'rrarrrrrrrrra', 'rfind', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'rfind', 'a', None, 6) self.checkraises(TypeError, 'hello', 'rfind') self.checkraises(TypeError, 'hello', 'rfind', 42) @@ -257,7 +264,9 @@ self.assertEqual(i[loc:loc+len(j)], self.fixtype(j)) # issue 7458 - self.checkequal(-1, 'ab', 'rfind', 'xxx', sys.maxsize + 1, 0) + #FIXME: + if not test_support.is_jython: + self.checkequal(-1, 'ab', 'rfind', 'xxx', sys.maxsize + 1, 0) def test_index(self): self.checkequal(0, 'abcdefghiabc', 'index', '') @@ -274,8 +283,11 @@ self.checkequal( 2, 'rrarrrrrrrrra', 'index', 'a') self.checkequal(12, 'rrarrrrrrrrra', 'index', 'a', 4) self.checkraises(ValueError, 'rrarrrrrrrrra', 'index', 'a', 4, 6) - self.checkequal(12, 'rrarrrrrrrrra', 'index', 'a', 4, None) - self.checkequal( 2, 'rrarrrrrrrrra', 'index', 'a', None, 6) + + #FIXME + if not test_support.is_jython: + self.checkequal(12, 'rrarrrrrrrrra', 'index', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'index', 'a', None, 6) self.checkraises(TypeError, 'hello', 'index') self.checkraises(TypeError, 'hello', 'index', 42) @@ -296,8 +308,11 @@ self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a') self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a', 4) self.checkraises(ValueError, 'rrarrrrrrrrra', 'rindex', 'a', 4, 6) - self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a', 4, None) - self.checkequal( 2, 'rrarrrrrrrrra', 'rindex', 'a', None, 6) + + #FIXME: + if not test_support.is_jython: + self.checkequal(12, 'rrarrrrrrrrra', 'rindex', 'a', 4, None) + self.checkequal( 2, 'rrarrrrrrrrra', 'rindex', 'a', None, 6) self.checkraises(TypeError, 'hello', 'rindex') self.checkraises(TypeError, 'hello', 'rindex', 42) @@ -715,11 +730,13 @@ EQ("bobobXbobob", "bobobobXbobobob", "replace", "bobob", "bob") EQ("BOBOBOB", "BOBOBOB", "replace", "bob", "bobby") - with test_support.check_py3k_warnings(): - ba = buffer('a') - bb = buffer('b') - EQ("bbc", "abc", "replace", ba, bb) - EQ("aac", "abc", "replace", bb, ba) + # buffer not supported in Jython. + if not test_support.is_jython: + with test_support.check_py3k_warnings(): + ba = buffer('a') + bb = buffer('b') + EQ("bbc", "abc", "replace", ba, bb) + EQ("aac", "abc", "replace", bb, ba) # self.checkequal('one at two!three!', 'one!two!three!', 'replace', '!', '@', 1) @@ -1253,9 +1270,11 @@ self.checkequal('Abc', 'abc', 'translate', table) self.checkequal('xyz', 'xyz', 'translate', table) self.checkequal('yz', 'xyz', 'translate', table, 'x') - self.checkequal('yx', 'zyzzx', 'translate', None, 'z') - self.checkequal('zyzzx', 'zyzzx', 'translate', None, '') - self.checkequal('zyzzx', 'zyzzx', 'translate', None) + #FIXME: + if not test_support.is_jython: + self.checkequal('yx', 'zyzzx', 'translate', None, 'z') + self.checkequal('zyzzx', 'zyzzx', 'translate', None, '') + self.checkequal('zyzzx', 'zyzzx', 'translate', None) self.checkraises(ValueError, 'xyz', 'translate', 'too short', 'strip') self.checkraises(ValueError, 'xyz', 'translate', 'too short') -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Tue Apr 10 02:47:46 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Tue, 10 Apr 2012 02:47:46 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_some_comments_and_code_s?= =?utf8?q?tandards=2E?= Message-ID: http://hg.python.org/jython/rev/7e02da147bb9 changeset: 6553:7e02da147bb9 user: Frank Wierzbicki date: Mon Apr 09 17:45:27 2012 -0700 summary: Fix some comments and code standards. files: src/org/python/core/BaseBytes.java | 57 +++++--- src/org/python/core/PyByteArray.java | 98 +++++++++------ 2 files changed, 93 insertions(+), 62 deletions(-) diff --git a/src/org/python/core/BaseBytes.java b/src/org/python/core/BaseBytes.java --- a/src/org/python/core/BaseBytes.java +++ b/src/org/python/core/BaseBytes.java @@ -92,9 +92,9 @@ * bounds of storage or size<0. */ protected void setStorage(byte[] storage, int size, int offset) throws IllegalArgumentException { - if (size < 0 || offset < 0 || offset + size > storage.length) + if (size < 0 || offset < 0 || offset + size > storage.length) { throw new IllegalArgumentException(); - else { + } else { this.storage = storage; this.size = size; this.offset = offset; @@ -111,9 +111,9 @@ * storage. */ protected void setStorage(byte[] storage, int size) throws IllegalArgumentException { - if (size < 0 || size > storage.length) + if (size < 0 || size > storage.length) { throw new IllegalArgumentException(); - else { + } else { this.storage = storage; this.size = size; this.offset = 0; @@ -318,15 +318,17 @@ String encoded; if (arg instanceof PyUnicode) { - if (encoding != null) + if (encoding != null) { encoded = codecs.encode((PyUnicode)arg, encoding, errors); - else + } else { throw Py.TypeError("unicode argument without an encoding"); + } } else { - if (encoding != null) + if (encoding != null) { encoded = codecs.encode((PyString)arg, encoding, errors); - else + } else { encoded = ((PyString)arg).getString(); + } } return encoded; } @@ -372,7 +374,9 @@ * @param n size of zero-filled array */ protected void init(int n) { - if (n < 0) throw Py.ValueError("negative count"); + if (n < 0) { + throw Py.ValueError("negative count"); + } newStorage(n); } @@ -389,9 +393,9 @@ Py.NotImplementedError("memoryview not yet supported in bytearray"); String format = value.get_format(); boolean isBytes = format == null || "B".equals(format); - if (value.get_ndim() != 1 || !isBytes) + if (value.get_ndim() != 1 || !isBytes) { Py.TypeError("memoryview value must be byte-oriented"); - else { + } else { // Dimensions are given as a PyTuple (although only one) int len = value.get_shape().pyget(0).asInt(); // XXX Access to memoryview bytes to go here @@ -499,7 +503,9 @@ // Need a new Fragment curr = new Fragment(fragSize); add(curr); - if (fragSize < Fragment.MAXSIZE) fragSize <<= 1; + if (fragSize < Fragment.MAXSIZE) { + fragSize <<= 1; + } } // Insert next item from iterator. if (curr.isFilledBy(value)) { @@ -510,8 +516,9 @@ } // Don't forget the bytes in the final Fragment - if (curr != null) totalCount += curr.count; - + if (curr != null) { + totalCount += curr.count; + } } /** @@ -586,8 +593,9 @@ * @throws PyException(IndexError) if the index is outside the array bounds */ protected final void indexCheck(int index) throws PyException { - if (index<0 || index>=size) + if (index<0 || index>=size) { throw Py.IndexError(getType().fastGetName() + " index out of range"); + } } /** @@ -599,10 +607,11 @@ */ protected void newStorage(int needed) { // The implementation for immutable arrays allocates exactly, and with offset zero. - if (needed > 0) + if (needed > 0) { setStorage(new byte[needed]); // guaranteed zero (by JLS 2ed para 4.5.5) - else + } else { setStorage(emptyStorage); + } } @@ -614,8 +623,9 @@ * @throws PyException(ValueError) if value<0 or value>255 */ protected static final byte byteCheck(int value) throws PyException { - if (value<0 || value>=255) + if (value<0 || value>=255) { throw Py.ValueError("byte must be in range(0, 256)"); + } return (byte) value; } @@ -644,13 +654,14 @@ * @throws PyException(ValueError) if value<0 or value>255 or string length!=1 */ protected static final byte byteCheck(PyObject value) throws PyException { - if (value instanceof PyInteger || value instanceof PyLong) + if (value instanceof PyInteger || value instanceof PyLong) { // This will possibly produce Py.OverflowError("long int too large to convert") return byteCheck(value.asInt()); - else if (value instanceof PyString) { + } else if (value instanceof PyString) { String strValue = ((PyString)value).getString(); - if (strValue.length() != 1) + if (strValue.length() != 1) { throw Py.ValueError("string must be of size 1"); + } return byteCheck(strValue.charAt(0)); } else throw Py.TypeError("an integer or string of size 1 is required"); @@ -683,7 +694,7 @@ * @param element to insert (by value) * @throws PyException(IndexError) if the index is outside the array bounds * @throws PyException(ValueError) if element<0 or element>255 - * @throws PyException(TYpeError) if the subclass is immutable + * @throws PyException(TypeError) if the subclass is immutable */ public void pyadd(int index, PyInteger element) { // This won't succeed: it just produces the right error. @@ -788,7 +799,7 @@ * @see java.util.AbstractList#add(int, java.lang.Object) * @throws PyException(IndexError) if the index is outside the array bounds * @throws PyException(ValueError) if element<0 or element>255 - * @throws PyException(TYpeError) if the owning concrete subclass is immutable + * @throws PyException(TypeError) if the owning concrete subclass is immutable */ @Override public void add(int index, PyInteger element) throws PyException { diff --git a/src/org/python/core/PyByteArray.java b/src/org/python/core/PyByteArray.java --- a/src/org/python/core/PyByteArray.java +++ b/src/org/python/core/PyByteArray.java @@ -161,9 +161,9 @@ if (step == 1) { // Efficiently copy contiguous slice int n = stop-start; - if (n<=0) + if (n<=0) { return new PyByteArray(); - else { + } else { PyByteArray ret = new PyByteArray(n); System.arraycopy(storage, offset+start, ret.storage, ret.offset, n); return ret; @@ -210,15 +210,12 @@ } /** - * Insert the element (interpreted as a Python byte value) at the given index. The default - * implementation produces a Python TypeError, for the benefit of immutable types. Mutable types - * must override it. + * Insert the element (interpreted as a Python byte value) at the given index. * * @param index to insert at * @param element to insert (by value) * @throws PyException(IndexError) if the index is outside the array bounds * @throws PyException(ValueError) if element<0 or element>255 - * @throws PyException(TYpeError) if the subclass is immutable */ public synchronized void pyadd(int index, PyInteger element) { // Open a space at the right location. @@ -256,10 +253,11 @@ @Override protected synchronized void setslice(int start, int stop, int step, PyObject value) { - if (step == 1 && stop < start) - // Because "b[5:2] = v" means insert v just before 5 not 2. - // ... although "b[5:2:-1] = v means b[5]=v[0], b[4]=v[1], b[3]=v[2] - stop = start; + if (step == 1 && stop < start) { + // Because "b[5:2] = v" means insert v just before 5 not 2. + // ... although "b[5:2:-1] = v means b[5]=v[0], b[4]=v[1], b[3]=v[2] + stop = start; + } /* * The actual behaviour depends on the nature (type) of value. It may be any kind of @@ -360,7 +358,9 @@ } else { // This is an extended slice which means we are replacing elements int n = sliceLength(start, stop, step); - if (n != len) throw SliceSizeError("bytes", len, n); + if (n != len) { + throw SliceSizeError("bytes", len, n); + } setBytes(start, step, v); } } @@ -381,9 +381,9 @@ Py.NotImplementedError("memoryview not yet supported in bytearray"); String format = value.get_format(); boolean isBytes = format == null || "B".equals(format); - if (value.get_ndim() != 1 || !isBytes) + if (value.get_ndim() != 1 || !isBytes) { Py.TypeError("memoryview value must be byte-oriented"); - else { + } else { // Dimensions are given as a PyTple (although only one) int len = value.get_shape().pyget(0).asInt(); if (step == 1) { @@ -414,7 +414,9 @@ * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice */ private void setslice(int start, int stop, int step, BaseBytes value) throws PyException { - if (value == this) value = new PyByteArray(value); // Must work with a copy + if (value == this) { + value = new PyByteArray(value); // Must work with a copy + } int len = value.size; if (step == 1) { //Delete this[start:stop] and open a space of the right size @@ -424,7 +426,9 @@ } else { // This is an extended slice which means we are replacing elements int n = sliceLength(start, stop, step); - if (n != len) throw SliceSizeError("bytes", len, n); + if (n != len) { + throw SliceSizeError("bytes", len, n); + } int no = n + value.offset; for (int io = start + offset, jo = value.offset; jo < no; io += step, jo++) { storage[io] = value.storage[jo]; // Assign this[i] = value[j] @@ -456,10 +460,10 @@ if (step == 1) { // Delete this[start:stop] and open a space of the right size storageReplace(start, stop - start, fragList.totalCount); - if (fragList.totalCount > 0) + if (fragList.totalCount > 0) { // Stitch the fragments together in the space we made fragList.emptyInto(storage, start + offset); - + } } else { // This is an extended slice which means we are replacing elements int n = sliceLength(start, stop, step); @@ -516,12 +520,13 @@ int n = sliceLength(start, stop, step); if (n > 0) { - if (step > 0) + if (step > 0) { // The first element is x[start] and the last is x[start+(n-1)*step+1] storageDeleteEx(start, step, n); - else + } else { // The first element is x[start+(n-1)*step+1] and the last is x[start] storageDeleteEx(start + (n - 1) * step + 1, -step, n); + } } } } @@ -579,7 +584,7 @@ /* * This whole method is modelled on CPython (see Objects/bytearrayobject.c : bytes_init()) - * but reorganised somewhat to maximise re-use withthe implementation of assignment to a + * but reorganised somewhat to maximise re-use with the implementation of assignment to a * slice, which essentially has to construct a bytearray from the right-hand side. * Hopefully, it still tries the same things in the same order and fails in the same way. */ @@ -589,7 +594,9 @@ * bytearray(string [, encoding [, errors]]) Construct from a text string by encoding it * using the specified encoding. */ - if (arg == null || !(arg instanceof PyString)) throw Py.TypeError("encoding or errors without sequence argument"); + if (arg == null || !(arg instanceof PyString)) { + throw Py.TypeError("encoding or errors without sequence argument"); + } init((PyString)arg, encoding, errors); } else { @@ -891,11 +898,13 @@ * @param clear if true, storage bytes guaranteed zero */ private void newStorage(int needed, boolean clear) { - if (shouldResize(needed)) + if (shouldResize(needed)) { newStorage(needed); // guaranteed zero - else { + } else { setStorage(storage, needed, (storage.length - needed) / 2); - if (clear) Arrays.fill(storage, (byte)0); // guarantee zero + if (clear) { + Arrays.fill(storage, (byte)0); // guarantee zero + } } } @@ -950,12 +959,13 @@ int g = f + (a + d); // Location of x[-b] if (shouldShrink(s2)) { - if (s2 > 0) + if (s2 > 0) { // We have far more storage than we need: shrink and copy both parts newStorage(f, a, g, b, e); - else + } else { // Need no storage as a+e+b = 0 setStorage(emptyStorage); + } } else if (a < b) { // It would be less copying if we moved A=x[:a] not B=x[-b:]. @@ -963,17 +973,20 @@ int f2 = f - (e - d); if (f2 >= 0) { // ... which luckily is still inside the array - if (a > 0) System.arraycopy(storage, f, storage, f2, a); + if (a > 0) { + System.arraycopy(storage, f, storage, f2, a); + } this.offset = f2; size = s2; } else { // ... which unfortunately is before the start of the array. // We have to move both A and B and it might be time for a new array. - if (s2<=storage.length) + if (s2<=storage.length) { // Repack it all in the existing array newStorageAvoided(f, a, g, b, e); - else + } else { newStorage(f, a, g, b, e); + } } } else /* a >= b */{ @@ -982,17 +995,20 @@ int g2 = g + (e - d); if (g2 + b <= storage.length) { // ... which luckily leaves all of B inside the array - if (b > 0) System.arraycopy(storage, g, storage, g2, b); + if (b > 0) { + System.arraycopy(storage, g, storage, g2, b); + } // this.offset is unchanged size = s2; } else { // ... which unfortunately runs beyond the end of the array. // We have to move both A and B and it might be time for a new array. - if (s2<=storage.length) + if (s2<=storage.length) { // Repack it all in the existing array newStorageAvoided(f, a, g, b, e); - else + } else { newStorage(f, a, g, b, e); + } } } } @@ -1044,10 +1060,10 @@ // Choose the new offset f' to make prepend or append operations quicker. // E.g. if insertion was near the end (b small) put most of the new space at the end. int f2; - if (a == b) + if (a == b) { // Mainly to trap the case a=b=0 f2 = (storage.length - s2) / 2; - else { + } else { // a and b are not both zero (since not equal) long spare = storage.length - s2; f2 = (int)((spare * b) / (a + b)); @@ -1117,10 +1133,10 @@ // Choose the new offset f' to make prepend or append operations quicker. // E.g. if insertion was near the end (b small) put most of the new space at the end. int f2; - if (a == b) + if (a == b) { // Mainly to trap the case a=b=0 f2 = (newStorage.length - s2) / 2; - else { + } else { // a and b are not both zero (since not equal) long spare = newStorage.length - s2; f2 = (int)((spare * b) / (a + b)); @@ -1197,14 +1213,18 @@ // It would be less copying if we moved A=x[:a] not B=x[-b:]. // If B is to stay where it is, it means A will land here: int f2 = f + d; - if (a > 0) System.arraycopy(storage, f, storage, f2, a); + if (a > 0) { + System.arraycopy(storage, f, storage, f2, a); + } this.offset = f2; } else /* a >= b */{ // It would be less copying if we moved B=x[-b:] not A=x[:a] // If A is to stay where it is, it means B will land here: int g2 = f + a; - if (b > 0) System.arraycopy(storage, g, storage, g2, b); + if (b > 0) { + System.arraycopy(storage, g, storage, g2, b); + } } } } @@ -1335,4 +1355,4 @@ upper zfill >>> - */ \ No newline at end of file + */ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Tue Apr 10 02:47:46 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Tue, 10 Apr 2012 02:47:46 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Partial_implementation_of_by?= =?utf8?q?tearray_with_init=28=29_and_slice_operations=2E?= Message-ID: http://hg.python.org/jython/rev/0b1cd09d0e3a changeset: 6552:0b1cd09d0e3a user: Jeff Allen date: Thu Apr 05 17:43:54 2012 +0100 summary: Partial implementation of bytearray with init() and slice operations. files: CoreExposed.includes | 1 + Misc/make_pydocs.py | 1 + src/org/python/core/BaseBytes.java | 1033 + src/org/python/core/BuiltinDocs.java | 8633 +++++---- src/org/python/core/PyByteArray.java | 1338 + src/org/python/core/PyByteArrayDerived.java | 1116 + src/org/python/core/__builtin__.java | 1 + src/templates/bytearray.derived | 4 + src/templates/mappings | 1 + tests/java/org/python/core/BaseBytesTest.java | 927 + tests/java/org/python/core/PyByteArrayTest.java | 1061 + 11 files changed, 10001 insertions(+), 4115 deletions(-) diff --git a/CoreExposed.includes b/CoreExposed.includes --- a/CoreExposed.includes +++ b/CoreExposed.includes @@ -5,6 +5,7 @@ org/python/core/PyBaseException.class org/python/core/PyBoolean.class org/python/core/PyBuiltinCallable.class +org/python/core/PyByteArray.class org/python/core/PyCell.class org/python/core/PyClass.class org/python/core/PyClassMethod.class diff --git a/Misc/make_pydocs.py b/Misc/make_pydocs.py --- a/Misc/make_pydocs.py +++ b/Misc/make_pydocs.py @@ -60,6 +60,7 @@ set, frozenset, BaseException, +bytearray, #buffer, # + type(f), diff --git a/src/org/python/core/BaseBytes.java b/src/org/python/core/BaseBytes.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/BaseBytes.java @@ -0,0 +1,1033 @@ +package org.python.core; + +import java.util.AbstractList; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; + +/** + * Base class for Jython bytearray (and bytes in due course) that provides most of the Java API, + * including Java List behaviour. Attempts to modify the contents through this API will throw + * a TypeError if the actual type of the object is not mutable. + *

+ * It is possible for a Java client to treat this class as a List<PyInteger>, + * obtaining equivalent functionality to the Python interface in a Java paradigm. + * The reason + * {@link } + *

Subclasses must define (from {@link PySequence}):

    + *
  • {@link #getslice(int, int, int)}
  • + *
  • {@link #repeat(int)}
  • + *
each returning an appropriate concrete type. Mutable subclasses should override:
    + *
  • {@link #pyset(int, PyObject)}
  • + *
  • {@link #setslice(int, int, int, PyObject)}
  • + *
  • {@link #del(int)}
  • + *
  • {@link #delRange(int, int)}
  • + *
+ * since the default implementations will otherwise throw an exception. + */ +public abstract class BaseBytes extends PySequence implements MemoryViewProtocol, List { + + /** + * Simple constructor of empty zero-length array of defined type. + * @param type explicit Jython type + */ + public BaseBytes(PyType type) { + super(type); // implicit setStorage( emptyStorage ); + setStorage(emptyStorage); + } + + /** + * Simple constructor of zero-filled array of defined size and type. + * @param size required + * @param type explicit Jython type + */ + public BaseBytes(PyType type, int size) { + super(type); + newStorage( size ); + } + + /** + * Construct byte array of defined type by copying values from int[]. + * + * @param type explicit Jython type + * @param value source of values (and size) + */ + public BaseBytes(PyType type, int[] value) { + super(type); + int n = value.length; + newStorage(n); + for (int i = offset, j = 0; j < n; i++, j++) // Note offset may be non-zero + storage[i] = byteCheck(value[j]); + } + + /** + * Construct byte array of defined type by copying character values from a String. These values + * have to be in the Python byte range 0 to 255. + * + * @param type explicit Jython type + * @param value source of characters + * @throws PyException if any value[i] > 255 + */ + protected BaseBytes(PyType type, String value) throws PyException { + super(type); + int n = value.length(); + newStorage(n); + int i = offset + size; + while (n > 0) + storage[--i] = byteCheck(value.charAt(--n)); + } + + /** + * Helper for constructors and methods that manipulate the storage in mutable subclasses. It + * also permits shared storage between objects, which in general is unsafe if the storage is + * subject to modification independent of the object now being created. Immutable types may + * share storage (safely). + * + * @param storage byte array allocated by client + * @param size number of bytes actually used + * @param offset index of first byte used + * @throws IllegalArgumentException if the range [offset:offset+size] is not within the array + * bounds of storage or size<0. + */ + protected void setStorage(byte[] storage, int size, int offset) throws IllegalArgumentException { + if (size < 0 || offset < 0 || offset + size > storage.length) + throw new IllegalArgumentException(); + else { + this.storage = storage; + this.size = size; + this.offset = offset; + } + } + + /** + * Helper for constructors and methods that manipulate the storage in mutable subclassesin the + * case where the storage should consist of the first part of the given array. + * + * @param storage byte array allocated by client + * @param size number of bytes actually used + * @throws IllegalArgumentException if the range [0:size] is not within the array bounds of + * storage. + */ + protected void setStorage(byte[] storage, int size) throws IllegalArgumentException { + if (size < 0 || size > storage.length) + throw new IllegalArgumentException(); + else { + this.storage = storage; + this.size = size; + this.offset = 0; + } + } + + /** + * Helper for constructors and methods that manipulate the storage in mutable subclasses in the + * case where the storage should consist of exactly the whole of the given array. + * + * @param storage byte array allocated by client + */ + protected void setStorage(byte[] storage) { + this.storage = storage; + this.size = storage.length; + this.offset = 0; + } + + + /* + * ======================================================================================== + * Support for memoryview + * ======================================================================================== + * + * This is present in order to facilitate development of PyMemoryView which a full + * implementation of bytearray would depend on, while at the same time a full implementation of + * memoryview depends on bytearray. + */ + /** + * Get hold of a memoryview on the current byte array. + * @see MemoryViewProtocol#getMemoryView() + */ + @Override + public MemoryView getMemoryView() { + if (mv == null) mv = new MemoryViewImpl(); + return mv; + } + + private MemoryView mv; + + /** + * All instances of BaseBytes have one dimension with stride one. + */ + private static final PyTuple STRIDES = new PyTuple(Py.One); + + /** + * Very simple MemoryView for one-dimensional byte array. This lacks any actual access to the + * underlying storage as the interface is not presently defined. + */ + private class MemoryViewImpl implements MemoryView { + + private final PyTuple SHAPE = new PyTuple(new PyInteger(storage.length)); + + @Override + public String get_format() { + return "B"; + } + + @Override + public int get_itemsize() { + return 1; + } + + @Override + public PyTuple get_shape() { + return SHAPE; + } + + @Override + public int get_ndim() { + return 1; + } + + @Override + public PyTuple get_strides() { + return STRIDES; + } + + @Override + public boolean get_readonly() { + return true; + } + + } + + + /* + * ======================================================================================== + * Support for construction and initialisation + * ======================================================================================== + * + * Methods here help subclasses set the initial state. They are designed with bytearray in mind, + * but note that from Python 3, bytes() has the same set of calls and behaviours, although in + * Peterson's "sort of backport" to Python 2.x, bytes is effectively an alias for str and + * it shows. + */ + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * PyObject in subclasses. + * + * @see org.python.core.ByteArray#bytearray___init__(PyObject[], String[]) + * @see org.python.core.ByteArray#ByteArray(PyObject) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + protected void init(PyObject arg) { + + if (arg == null) { + /* + * bytearray() Construct a zero-length bytearray. + */ + setStorage(emptyStorage); + + } else if (arg instanceof PyString) { + /* + * bytearray(string) Construct from a text string by default encoding and error policy. + * Cases where encoding and error policy are specified explicitly are dealt with + * elsewhere. + */ + init((PyString)arg, (String)null, (String)null); // Casts select right init() + + } else if (arg.isIndex()) { + /* + * bytearray(int) Construct a zero-initialised bytearray of the given length. + */ + init(arg.asIndex(Py.OverflowError)); // overflow if too big to be Java int + + } else if (arg instanceof BaseBytes) { + /* + * bytearray copy of bytearray (or bytes) -- do efficiently + */ + init((BaseBytes)arg); + + } else if (arg instanceof MemoryViewProtocol) { + /* + * bytearray copy of object supporting Jython implementation of PEP 3118 + */ + init(((MemoryViewProtocol)arg).getMemoryView()); + + } else { + /* + * The remaining alternative is an iterable returning (hopefully) right-sized ints. If + * it isn't one, we get an exception about not being iterable, or about the values. + */ + init(arg.asIterable()); + + } + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from a + * text string with the specified encoding in subclasses. + * + * @see #bytearray___init__(PyObject[], String[]) + * @see PyByteArray#PyByteArray(PyString, String, String) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + protected void init(PyString arg, PyObject encoding, PyObject errors) { + String enc = encoding == null ? null : encoding.asString(); + String err = errors == null ? null : errors.asString(); + init(arg, enc, err); + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from a + * text string with the specified encoding in subclasses. + * + * @see #bytearray___init__(PyObject[], String[]) + * @see PyByteArray#PyByteArray(PyString, String, String) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding + * @param errors name of optional errors policy + */ + protected void init(PyString arg, String encoding, String errors) { + // Jython encode emits a String (not byte[]) + String encoded = encode(arg, encoding, errors); + newStorage(encoded.length()); + setBytes(0, encoded); + } + + + /** + * Helper for {@linkplain #setslice(int, int, int, PyObject)}, + * for __new__ and __init__ and the Java API constructor from a + * text string with the specified encoding in subclasses. This method thinly wraps a call to + * the codecs module and deals with checking + * for PyUnicode (where the encoding argument is mandatory). + * + * @see #ByteArray(PyString, String, String) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding + * @param errors name of optional errors policy + * @return encoded string + * @throws PyException(TypeError) if the PyString is actually a PyUnicode and encoding is null + */ + protected static String encode(PyString arg, String encoding, String errors) throws PyException { + // Jython encode emits a String (not byte[]) + String encoded; + + if (arg instanceof PyUnicode) { + if (encoding != null) + encoded = codecs.encode((PyUnicode)arg, encoding, errors); + else + throw Py.TypeError("unicode argument without an encoding"); + } else { + if (encoding != null) + encoded = codecs.encode((PyString)arg, encoding, errors); + else + encoded = ((PyString)arg).getString(); + } + return encoded; + } + + + /** + * Fill a defined section of a byte array by copying character values from a String. These + * values have to be in the Python byte range 0 to 255. + * + * @param start index in this byte array at which the first character code lands + * @param value source of characters + * @throws PyException(ValueError) if any value[i] > 255 + */ + protected void setBytes(int start, String value) throws PyException { + int n = value.length(); + int io = offset + start; + for (int j = 0; j < n; j++) + storage[io++] = byteCheck(value.charAt(j)); + } + + /** + * Fill a strided slice of a byte array by copying character values from a String. These values + * have to be in the Python byte range 0 to 255. + * + * @param start index in this byte array at which the first character code lands + * @param value source of characters + * @throws PyException(ValueError) if any value[i] > 255 + */ + protected void setBytes(int start, int step, String value) throws PyException { + int n = value.length(); + int io = offset + start; + for (int j = 0; j < n; j++) { + storage[io] = byteCheck(value.charAt(j)); + io += step; + } + } + + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * int in subclasses. Construct zero-filled bytearray of specified size. + * + * @param n size of zero-filled array + */ + protected void init(int n) { + if (n < 0) throw Py.ValueError("negative count"); + newStorage(n); + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * objects supporting the Jython implementation of PEP 3118 (memoryview) in subclasses. + * + * @param value a memoryview object consistent with the slice assignment + * @throws PyException(NotImplementedError) until memoryview is properly supported + * @throws PyException(TypeError) if the memoryview is not byte-oriented + */ + protected void init(MemoryView value) throws PyException { + // XXX Support memoryview once means of access to bytes is defined + Py.NotImplementedError("memoryview not yet supported in bytearray"); + String format = value.get_format(); + boolean isBytes = format == null || "B".equals(format); + if (value.get_ndim() != 1 || !isBytes) + Py.TypeError("memoryview value must be byte-oriented"); + else { + // Dimensions are given as a PyTuple (although only one) + int len = value.get_shape().pyget(0).asInt(); + // XXX Access to memoryview bytes to go here + } + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * bytearray or bytes in subclasses. + * + * @param source bytearray (or bytes) to copy + */ + protected void init(BaseBytes source) { + newStorage(source.size); + System.arraycopy(source.storage, source.offset, storage, offset, size); + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * an arbitrary iterable Python type in subclasses. This will include generators and lists. + * + * @param iter iterable source of values to enter in the array + */ + protected void init(Iterable iter) { + /* + * Different strategy is needed from that suited to "random append" operations. We shall + * have a stream of append operations, and it might be long. + */ + FragmentList fragList = new FragmentList(); + fragList.loadFrom(iter); + + // Now, aggregate all those fragments. + // + if (fragList.totalCount>0) { + + if (fragList.size()==1) { + // Note that the first fragment is small: negligible waste if stolen directly. + Fragment frag = fragList.getFirst(); + setStorage(frag.storage, frag.count); + + } else { + // Stitch the fragments together in new storage of sufficient size + newStorage(fragList.totalCount); + fragList.emptyInto(storage, offset); + } + + } else + // Nothing in the iterator + setStorage(emptyStorage); + } + + + + + /** + * Intended as a fragment of temporary storage for use we do not know how many bytes of allocate, and we are + * reading in some kind of iterable stream. + */ + protected static class Fragment { + + static final int MINSIZE = 8; + static final int MAXSIZE = 1024; + + byte[] storage; + int count = 0; + + Fragment(int size) { + storage = new byte[size]; + } + + // Convert to byte and add to buffer + boolean isFilledBy(PyObject value) { + storage[count++] = byteCheck(value); + return count == storage.length; + } + } + + /** + * A container of temporary storage when we do not know how many bytes to allocate, and we are + * reading in some kind of iterable stream. + */ + protected static class FragmentList extends LinkedList { + + /** + * Total number of bytes being held. + */ + int totalCount = 0; + + /** + * Load bytes into the container from the given iterable + * + * @param iter iterable source of values to enter into the container + * @throws PyException(TypeError) if any value not acceptable type + * @throws PyException(ValueError) if any value<0 or value>255 or string length!=1 + */ + void loadFrom(Iterable iter) throws PyException { + + int fragSize = Fragment.MINSIZE; + Fragment curr = null; + + // Allocate series of fragments as needed, while the iterator runs to completion + // + for (PyObject value : iter) { + if (curr == null) { + // Need a new Fragment + curr = new Fragment(fragSize); + add(curr); + if (fragSize < Fragment.MAXSIZE) fragSize <<= 1; + } + // Insert next item from iterator. + if (curr.isFilledBy(value)) { + // Fragment is now full: signal a new one will be needed + totalCount += curr.count; + curr = null; + } + } + + // Don't forget the bytes in the final Fragment + if (curr != null) totalCount += curr.count; + + } + + /** + * Move the contents of this container to the given byte array at the specified index. + * This method leaves this container empty. + * @param target destination array + * @param p position to write first byte + */ + void emptyInto(byte[] target, int p) { + + for (Fragment frag : this) { + System.arraycopy(frag.storage, 0, target, p, frag.count); + p += frag.count; + } + clear(); // Encourage recycling + totalCount = 0; + } + + /** + * Move the contents of this container to a strided subset of the given byte array at the + * specified index. Bytes are assigned at start, start+step, start+2*step, and so on until + * we run out. (You must have checked beforehand that the destination is big enough.) This + * method leaves this container empty. If the step size is one, it would be much quicker to + * call {@link BaseBytes#emptyInto(byte[], int)} + * + * @param target destination array + * @param start position to write first byte + * @param step amount to advance index with each byte + */ + void emptyInto(byte[] target, int start, int step) { + int p = start; + for (Fragment frag : this) { + for (int i = 0; i < frag.count; i++) { + target[p] = frag.storage[i]; + p += step; + } + } + clear(); // Encourage recycling + totalCount = 0; + } + + } + + + + /* ======================================================================================== + * Sharable storage + * ======================================================================================== + * + * The storage is provided by a byte array that may be somewhat larger than the number of + * bytes actually stored, and these bytes may begin at an offset within the storage. + * Immutable subclasses of BaseBytes may exploit this to share storage when + * constructed from a slice of another immutable subclass. Mutable subclasses may exploit it + * to provide efficient insertions near the start of the array. + */ + + /** Empty storage constant */ + protected static final byte[] emptyStorage = new byte[0]; + + /** Storage array. */ + protected byte[] storage; + + /** Number of bytes actually used in storage array. */ + protected int size; + + /** Index of first byte used in storage array. */ + protected int offset; + + /** + * Check that an index is within the range of the array, that is 0<=index<size. + * @param index to check + * @throws PyException(IndexError) if the index is outside the array bounds + */ + protected final void indexCheck(int index) throws PyException { + if (index<0 || index>=size) + throw Py.IndexError(getType().fastGetName() + " index out of range"); + } + + /** + * Allocate fresh, zero-filled storage for the requested number of bytes and make that the size. + * If the size needed is zero, the "storage" allocated is the shared emptyStorage array. The + * allocated size may be bigger than needed, and the method chooses a value for offset. + * + * @param needed becomes the new value of this.size + */ + protected void newStorage(int needed) { + // The implementation for immutable arrays allocates exactly, and with offset zero. + if (needed > 0) + setStorage(new byte[needed]); // guaranteed zero (by JLS 2ed para 4.5.5) + else + setStorage(emptyStorage); + } + + + /** + * Check that an integer is suitable for storage in a (Python) byte array, + * and convert it to the Java byte value that can be stored there. + * (Java bytes run -128..127 whereas Python bytes run 0..255.) + * @param value to convert. + * @throws PyException(ValueError) if value<0 or value>255 + */ + protected static final byte byteCheck(int value) throws PyException { + if (value<0 || value>=255) + throw Py.ValueError("byte must be in range(0, 256)"); + return (byte) value; + } + + /** + * Check that the value of an PyInteger is suitable for storage in a (Python) byte array, + * and convert it to the Java byte value that can be stored there. + * (Java bytes run -128..127 whereas Python bytes run 0..255.) + * @param value to convert. + * @throws PyException(ValueError) if value<0 or value>255 + */ + protected static final byte byteCheck(PyInteger value) throws PyException { + return byteCheck(value.asInt()); + } + + /** + * Check that the type and value of a PyObject is suitable for storage in a (Python) byte + * array, and convert it to the Java byte value that can be stored there. + * (Java bytes run -128..127 whereas Python bytes run 0..255.) + * Acceptable types are:
    + *
  • PyInteger in range 0 to 255 inclusive
  • + *
  • PyLong in range 0 to 255 inclusive
  • + *
  • PyString of length 1
  • + *
+ * @param value to convert. + * @throws PyException(TypeError) if not acceptable type + * @throws PyException(ValueError) if value<0 or value>255 or string length!=1 + */ + protected static final byte byteCheck(PyObject value) throws PyException { + if (value instanceof PyInteger || value instanceof PyLong) + // This will possibly produce Py.OverflowError("long int too large to convert") + return byteCheck(value.asInt()); + else if (value instanceof PyString) { + String strValue = ((PyString)value).getString(); + if (strValue.length() != 1) + throw Py.ValueError("string must be of size 1"); + return byteCheck(strValue.charAt(0)); + } else + throw Py.TypeError("an integer or string of size 1 is required"); + } + + /* ======================================================================================== + * API for org.python.core.PySequence + * ======================================================================================== + */ + protected PyInteger pyget(int index) { + return new PyInteger(intAt(index)); + } + + /* We're not implementing these here, but we can give a stronger guarantee about the return + * type and save some casting and type anxiety. + */ + protected abstract BaseBytes getslice(int start, int stop, int step); + protected abstract BaseBytes repeat(int count); + + /* + * And this extension point should be overridden in mutable subclasses + */ + + /** + * Insert the element (interpreted as a Python byte value) at the given index. The default + * implementation produces a Python TypeError, for the benefit of immutable types. Mutable types + * must override it. + * + * @param index to insert at + * @param element to insert (by value) + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + * @throws PyException(TYpeError) if the subclass is immutable + */ + public void pyadd(int index, PyInteger element) { + // This won't succeed: it just produces the right error. + // storageReplace(index, 0, 1); + pyset(index, element); + } + + /* ======================================================================================== + * API for Java access as byte[] + * ======================================================================================== + * + * Just the immutable case for now + */ + + /** + * No range check access to byte[index]. + * @param index + * @return the byte at the given index + */ + private final synchronized byte byteAt(int index) { + return storage[index+offset]; + } + + /** + * Return the Python byte (in range 0 to 255 inclusive) at the given index. + * @param index of value in byte array + * @return the integer value at the index + * @throws PyException(IndexError) if the index is outside the array bounds + */ + public synchronized int intAt(int index) throws PyException { + indexCheck(index); + return 0xff & ((int)byteAt(index)); + } + + /** + * Helper to implement {@link #repeat(int)}. Use something like: + * + *
+     * 
+     * @Override
+     * protected PyByteArray repeat(int count) {
+     *     PyByteArray ret = new PyByteArray();
+     *     ret.setStorage(repeatImpl(count));
+     *     return ret;
+     * }
+     * 
+ * + * @param count the number of times to repeat this. + * @return this byte array repeated count times. + */ + protected synchronized byte[] repeatImpl(int count) { + byte[] dst = new byte[count * size]; + for (int i = 0, p = 0; i < count; i++, p += size) { + System.arraycopy(storage, offset, dst, p, size); + } + return dst; + } + + + /* ======================================================================================== + * API for java.util.List + * ======================================================================================== + */ + + /** + * Access to the bytearray (or bytes) as a {@link java.util.List}. The List interface supplied + * by BaseBytes delegates to this object. + */ + protected final List listDelegate = new AbstractList() { + + @Override + public PyInteger get(int index) { + // Not using __getitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + return pyget(index); + } + + @Override + public int size() { return size; } + + // For mutable subclass use + + /** + * Replaces the element at the specified position in this list with the specified element. + * @see java.util.AbstractList#set(int, java.lang.Object) + * @throws PyException(TypeError) if actual class is immutable + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + */ + @Override + public PyInteger set(int index, PyInteger element) throws PyException { + // Not using __setitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + PyInteger result = pyget(index); + pyset(index, element); // TypeError if immutable + return result; + } + + /** + * Inserts the specified element at the specified position in this list. + * Shifts the element currently at that position and any subsequent elements to the right. + * @see java.util.AbstractList#add(int, java.lang.Object) + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + * @throws PyException(TYpeError) if the owning concrete subclass is immutable + */ + @Override + public void add(int index, PyInteger element) throws PyException { + // Not using __setitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + pyadd(index, element); // TypeError if immutable + } + + /** + * Removes the element at the specified position in this list. Shifts any subsequent + * elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + * @see java.util.AbstractList#remove(int) + * @throws PyException(IndexError) if the index is outside the array bounds + */ + @Override + public PyInteger remove(int index) { + // Not using __delitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + PyInteger result = pyget(index); + del(index); // TypeError if immutable + return result; + } + }; + + /** + * Number of bytes in bytearray (or bytes) object. + * @see java.util.List#size() + * @return Number of bytes in byte array. + * */ + public int size() { return size;} + + /* + * @see java.util.List#isEmpty() + */ + public boolean isEmpty() { return size==0; } + + /** + * Returns true if this list contains the specified value. More formally, returns true if and + * only if this list contains at least one integer e such that o.equals(PyInteger(e)). + */ + public boolean contains(Object o) { + return listDelegate.contains(o); + } + + /* + * @return + * @see java.util.List#iterator() + */ + public Iterator iterator() { + return listDelegate.iterator(); + } + + /* + * @return + * @see java.util.List#toArray() + */ + public Object[] toArray() { + return listDelegate.toArray(); + } + + /* + * @param a + * @return + * @see java.util.List#toArray(T[]) + */ + public T[] toArray(T[] a) { + return listDelegate.toArray(a); + } + + /* + * @param o + * @return + * @see java.util.List#add(java.lang.Object) + */ + public boolean add(PyInteger o) { + return listDelegate.add(o); + } + + /* + * @param o + * @return + * @see java.util.List#remove(java.lang.Object) + */ + public boolean remove(Object o) { + return listDelegate.remove(o); + } + + /* + * @param c + * @return + * @see java.util.List#containsAll(java.util.Collection) + */ + public boolean containsAll(Collection c) { + return listDelegate.containsAll(c); + } + + /* + * @param c + * @return + * @see java.util.List#addAll(java.util.Collection) + */ + public boolean addAll(Collection c) { + return listDelegate.addAll(c); + } + + /* + * @param index + * @param c + * @return + * @see java.util.List#addAll(int, java.util.Collection) + */ + public boolean addAll(int index, Collection c) { + return listDelegate.addAll(index, c); + } + + /* + * @param c + * @return + * @see java.util.List#removeAll(java.util.Collection) + */ + public boolean removeAll(Collection c) { + return listDelegate.removeAll(c); + } + + /* + * @param c + * @return + * @see java.util.List#retainAll(java.util.Collection) + */ + public boolean retainAll(Collection c) { + return listDelegate.retainAll(c); + } + + /* + * + * @see java.util.List#clear() + */ + public void clear() { + listDelegate.clear(); + } + + /* + * @param o + * @return + * @see java.util.List#equals(java.lang.Object) + */ + public boolean equals(Object o) { + return listDelegate.equals(o); + } + + /* + * @return + * @see java.util.List#hashCode() + */ + public int hashCode() { + return listDelegate.hashCode(); + } + + /* + * @param index + * @return + * @see java.util.List#get(int) + */ + public PyInteger get(int index) { + return listDelegate.get(index); + } + + /* + * @param index + * @param element + * @return + * @see java.util.List#set(int, java.lang.Object) + */ + public PyInteger set(int index, PyInteger element) { + return listDelegate.set(index, element); + } + + /* + * @param index + * @param element + * @see java.util.List#add(int, java.lang.Object) + */ + public void add(int index, PyInteger element) { + listDelegate.add(index, element); + } + + /* + * @param index + * @return + * @see java.util.List#remove(int) + */ + public PyInteger remove(int index) { + return listDelegate.remove(index); + } + + /* + * @param o + * @return + * @see java.util.List#indexOf(java.lang.Object) + */ + public int indexOf(Object o) { + return listDelegate.indexOf(o); + } + + /* + * @param o + * @return + * @see java.util.List#lastIndexOf(java.lang.Object) + */ + public int lastIndexOf(Object o) { + return listDelegate.lastIndexOf(o); + } + + /* + * @return + * @see java.util.List#listIterator() + */ + public ListIterator listIterator() { + return listDelegate.listIterator(); + } + + /* + * @param index + * @return + * @see java.util.List#listIterator(int) + */ + public ListIterator listIterator(int index) { + return listDelegate.listIterator(index); + } + + /* + * @param fromIndex + * @param toIndex + * @return + * @see java.util.List#subList(int, int) + */ + public List subList(int fromIndex, int toIndex) { + return listDelegate.subList(fromIndex, toIndex); + } + +} diff --git a/src/org/python/core/BuiltinDocs.java b/src/org/python/core/BuiltinDocs.java --- a/src/org/python/core/BuiltinDocs.java +++ b/src/org/python/core/BuiltinDocs.java @@ -1,4115 +1,4518 @@ -// generated by make_pydocs.py - -package org.python.core; - -public class BuiltinDocs { - - // Docs for - public final static String object___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String object___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String object_doc = - "The most base type"; - - public final static String object___format___doc = - "default object formatter"; - - public final static String object___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String object___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String object___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String object___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String object___reduce___doc = - "helper for pickle"; - - public final static String object___reduce_ex___doc = - "helper for pickle"; - - public final static String object___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String object___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String object___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String object___str___doc = - "x.__str__() <==> str(x)"; - - public final static String object___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String type___abstractmethods___doc = - ""; - - public final static String type___base___doc = - "The most base type"; - - public final static String type___bases___doc = - "tuple() -> empty tuple\n" + - "tuple(iterable) -> tuple initialized from iterable's items\n" + - "\n" + - "If the argument is a tuple, the return value is the same object."; - - public final static String type___basicsize___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type___call___doc = - "x.__call__(...) <==> x(...)"; - - public final static String type___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String type___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String type___dict___doc = - ""; - - public final static String type___dictoffset___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type_doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String type___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String type___flags___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type___format___doc = - "default object formatter"; - - public final static String type___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String type___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String type___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String type___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String type___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String type___instancecheck___doc = - "__instancecheck__() -> bool\n" + - "check if an object is an instance"; - - public final static String type___itemsize___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String type___lt___doc = - "x.__lt__(y) <==> x string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String type___mro___doc = - "tuple() -> empty tuple\n" + - "tuple(iterable) -> tuple initialized from iterable's items\n" + - "\n" + - "If the argument is a tuple, the return value is the same object."; - - public final static String type___name___doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String type___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String type___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String type___reduce___doc = - "helper for pickle"; - - public final static String type___reduce_ex___doc = - "helper for pickle"; - - public final static String type___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String type___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String type___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String type___str___doc = - "x.__str__() <==> str(x)"; - - public final static String type___subclasscheck___doc = - "__subclasscheck__() -> bool\n" + - "check if a class is a subclass"; - - public final static String type___subclasses___doc = - "__subclasses__() -> list of immediate subclasses"; - - public final static String type___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String type___weakrefoffset___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type_mro_doc = - "mro() -> list\n" + - "return a type's method resolution order"; - - // Docs for - public final static String unicode___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String unicode___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String unicode___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String unicode___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String unicode_doc = - "unicode(string [, encoding[, errors]]) -> object\n" + - "\n" + - "Create a new Unicode object from the given encoded string.\n" + - "encoding defaults to the current default string encoding.\n" + - "errors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'."; - - public final static String unicode___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String unicode___format___doc = - "S.__format__(format_spec) -> unicode\n" + - "\n" + - "Return a formatted version of S as described by format_spec."; - - public final static String unicode___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String unicode___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String unicode___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String unicode___getnewargs___doc = - ""; - - public final static String unicode___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String unicode___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String unicode___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String unicode___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String unicode___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String unicode___len___doc = - "x.__len__() <==> len(x)"; - - public final static String unicode___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String unicode___mul___doc = - "x.__mul__(n) <==> x*n"; - - public final static String unicode___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String unicode___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String unicode___reduce___doc = - "helper for pickle"; - - public final static String unicode___reduce_ex___doc = - "helper for pickle"; - - public final static String unicode___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String unicode___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String unicode___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String unicode___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String unicode___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes\n" + - "\n" + - ""; - - public final static String unicode___str___doc = - "x.__str__() <==> str(x)"; - - public final static String unicode___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String unicode__formatter_field_name_split_doc = - ""; - - public final static String unicode__formatter_parser_doc = - ""; - - public final static String unicode_capitalize_doc = - "S.capitalize() -> unicode\n" + - "\n" + - "Return a capitalized version of S, i.e. make the first character\n" + - "have upper case and the rest lower case."; - - public final static String unicode_center_doc = - "S.center(width[, fillchar]) -> unicode\n" + - "\n" + - "Return S centered in a Unicode string of length width. Padding is\n" + - "done using the specified fill character (default is a space)"; - - public final static String unicode_count_doc = - "S.count(sub[, start[, end]]) -> int\n" + - "\n" + - "Return the number of non-overlapping occurrences of substring sub in\n" + - "Unicode string S[start:end]. Optional arguments start and end are\n" + - "interpreted as in slice notation."; - - public final static String unicode_decode_doc = - "S.decode([encoding[,errors]]) -> string or unicode\n" + - "\n" + - "Decodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + - "as well as any other name registerd with codecs.register_error that is\n" + - "able to handle UnicodeDecodeErrors."; - - public final static String unicode_encode_doc = - "S.encode([encoding[,errors]]) -> string or unicode\n" + - "\n" + - "Encodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + - "'xmlcharrefreplace' as well as any other name registered with\n" + - "codecs.register_error that can handle UnicodeEncodeErrors."; - - public final static String unicode_endswith_doc = - "S.endswith(suffix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S ends with the specified suffix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "suffix can also be a tuple of strings to try."; - - public final static String unicode_expandtabs_doc = - "S.expandtabs([tabsize]) -> unicode\n" + - "\n" + - "Return a copy of S where all tab characters are expanded using spaces.\n" + - "If tabsize is not given, a tab size of 8 characters is assumed."; - - public final static String unicode_find_doc = - "S.find(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the lowest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String unicode_format_doc = - "S.format(*args, **kwargs) -> unicode\n" + - "\n" + - "Return a formatted version of S, using substitutions from args and kwargs.\n" + - "The substitutions are identified by braces ('{' and '}')."; - - public final static String unicode_index_doc = - "S.index(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.find() but raise ValueError when the substring is not found."; - - public final static String unicode_isalnum_doc = - "S.isalnum() -> bool\n" + - "\n" + - "Return True if all characters in S are alphanumeric\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_isalpha_doc = - "S.isalpha() -> bool\n" + - "\n" + - "Return True if all characters in S are alphabetic\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_isdecimal_doc = - "S.isdecimal() -> bool\n" + - "\n" + - "Return True if there are only decimal characters in S,\n" + - "False otherwise."; - - public final static String unicode_isdigit_doc = - "S.isdigit() -> bool\n" + - "\n" + - "Return True if all characters in S are digits\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_islower_doc = - "S.islower() -> bool\n" + - "\n" + - "Return True if all cased characters in S are lowercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String unicode_isnumeric_doc = - "S.isnumeric() -> bool\n" + - "\n" + - "Return True if there are only numeric characters in S,\n" + - "False otherwise."; - - public final static String unicode_isspace_doc = - "S.isspace() -> bool\n" + - "\n" + - "Return True if all characters in S are whitespace\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_istitle_doc = - "S.istitle() -> bool\n" + - "\n" + - "Return True if S is a titlecased string and there is at least one\n" + - "character in S, i.e. upper- and titlecase characters may only\n" + - "follow uncased characters and lowercase characters only cased ones.\n" + - "Return False otherwise."; - - public final static String unicode_isupper_doc = - "S.isupper() -> bool\n" + - "\n" + - "Return True if all cased characters in S are uppercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String unicode_join_doc = - "S.join(iterable) -> unicode\n" + - "\n" + - "Return a string which is the concatenation of the strings in the\n" + - "iterable. The separator between elements is S."; - - public final static String unicode_ljust_doc = - "S.ljust(width[, fillchar]) -> int\n" + - "\n" + - "Return S left-justified in a Unicode string of length width. Padding is\n" + - "done using the specified fill character (default is a space)."; - - public final static String unicode_lower_doc = - "S.lower() -> unicode\n" + - "\n" + - "Return a copy of the string S converted to lowercase."; - - public final static String unicode_lstrip_doc = - "S.lstrip([chars]) -> unicode\n" + - "\n" + - "Return a copy of the string S with leading whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is a str, it will be converted to unicode before stripping"; - - public final static String unicode_partition_doc = - "S.partition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, and return the part before it,\n" + - "the separator itself, and the part after it. If the separator is not\n" + - "found, return S and two empty strings."; - - public final static String unicode_replace_doc = - "S.replace(old, new[, count]) -> unicode\n" + - "\n" + - "Return a copy of S with all occurrences of substring\n" + - "old replaced by new. If the optional argument count is\n" + - "given, only the first count occurrences are replaced."; - - public final static String unicode_rfind_doc = - "S.rfind(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the highest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String unicode_rindex_doc = - "S.rindex(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.rfind() but raise ValueError when the substring is not found."; - - public final static String unicode_rjust_doc = - "S.rjust(width[, fillchar]) -> unicode\n" + - "\n" + - "Return S right-justified in a Unicode string of length width. Padding is\n" + - "done using the specified fill character (default is a space)."; - - public final static String unicode_rpartition_doc = - "S.rpartition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, starting at the end of S, and return\n" + - "the part before it, the separator itself, and the part after it. If the\n" + - "separator is not found, return two empty strings and S."; - - public final static String unicode_rsplit_doc = - "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in S, using sep as the\n" + - "delimiter string, starting at the end of the string and\n" + - "working to the front. If maxsplit is given, at most maxsplit\n" + - "splits are done. If sep is not specified, any whitespace string\n" + - "is a separator."; - - public final static String unicode_rstrip_doc = - "S.rstrip([chars]) -> unicode\n" + - "\n" + - "Return a copy of the string S with trailing whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is a str, it will be converted to unicode before stripping"; - - public final static String unicode_split_doc = - "S.split([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in S, using sep as the\n" + - "delimiter string. If maxsplit is given, at most maxsplit\n" + - "splits are done. If sep is not specified or is None, any\n" + - "whitespace string is a separator and empty strings are\n" + - "removed from the result."; - - public final static String unicode_splitlines_doc = - "S.splitlines([keepends]) -> list of strings\n" + - "\n" + - "Return a list of the lines in S, breaking at line boundaries.\n" + - "Line breaks are not included in the resulting list unless keepends\n" + - "is given and true."; - - public final static String unicode_startswith_doc = - "S.startswith(prefix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S starts with the specified prefix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "prefix can also be a tuple of strings to try."; - - public final static String unicode_strip_doc = - "S.strip([chars]) -> unicode\n" + - "\n" + - "Return a copy of the string S with leading and trailing\n" + - "whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is a str, it will be converted to unicode before stripping"; - - public final static String unicode_swapcase_doc = - "S.swapcase() -> unicode\n" + - "\n" + - "Return a copy of S with uppercase characters converted to lowercase\n" + - "and vice versa."; - - public final static String unicode_title_doc = - "S.title() -> unicode\n" + - "\n" + - "Return a titlecased version of S, i.e. words start with title case\n" + - "characters, all remaining cased characters have lower case."; - - public final static String unicode_translate_doc = - "S.translate(table) -> unicode\n" + - "\n" + - "Return a copy of the string S, where all characters have been mapped\n" + - "through the given translation table, which must be a mapping of\n" + - "Unicode ordinals to Unicode ordinals, Unicode strings or None.\n" + - "Unmapped characters are left untouched. Characters mapped to None\n" + - "are deleted."; - - public final static String unicode_upper_doc = - "S.upper() -> unicode\n" + - "\n" + - "Return a copy of S converted to uppercase."; - - public final static String unicode_zfill_doc = - "S.zfill(width) -> unicode\n" + - "\n" + - "Pad a numeric string S with zeros on the left, to fill a field\n" + - "of the specified width. The string S is never truncated."; - - // Docs for - public final static String dict___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String dict___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String dict___contains___doc = - "D.__contains__(k) -> True if D has a key k, else False"; - - public final static String dict___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String dict___delitem___doc = - "x.__delitem__(y) <==> del x[y]"; - - public final static String dict_doc = - "dict() -> new empty dictionary\n" + - "dict(mapping) -> new dictionary initialized from a mapping object's\n" + - " (key, value) pairs\n" + - "dict(iterable) -> new dictionary initialized as if via:\n" + - " d = {}\n" + - " for k, v in iterable:\n" + - " d[k] = v\n" + - "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" + - " in the keyword argument list. For example: dict(one=1, two=2)"; - - public final static String dict___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String dict___format___doc = - "default object formatter"; - - public final static String dict___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String dict___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String dict___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String dict___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String dict___hash___doc = - ""; - - public final static String dict___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String dict___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String dict___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String dict___len___doc = - "x.__len__() <==> len(x)"; - - public final static String dict___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String dict___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String dict___reduce___doc = - "helper for pickle"; - - public final static String dict___reduce_ex___doc = - "helper for pickle"; - - public final static String dict___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String dict___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String dict___setitem___doc = - "x.__setitem__(i, y) <==> x[i]=y"; - - public final static String dict___sizeof___doc = - "D.__sizeof__() -> size of D in memory, in bytes"; - - public final static String dict___str___doc = - "x.__str__() <==> str(x)"; - - public final static String dict___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String dict_clear_doc = - "D.clear() -> None. Remove all items from D."; - - public final static String dict_copy_doc = - "D.copy() -> a shallow copy of D"; - - public final static String dict_fromkeys_doc = - "dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.\n" + - "v defaults to None."; - - public final static String dict_get_doc = - "D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None."; - - public final static String dict_has_key_doc = - "D.has_key(k) -> True if D has a key k, else False"; - - public final static String dict_items_doc = - "D.items() -> list of D's (key, value) pairs, as 2-tuples"; - - public final static String dict_iteritems_doc = - "D.iteritems() -> an iterator over the (key, value) items of D"; - - public final static String dict_iterkeys_doc = - "D.iterkeys() -> an iterator over the keys of D"; - - public final static String dict_itervalues_doc = - "D.itervalues() -> an iterator over the values of D"; - - public final static String dict_keys_doc = - "D.keys() -> list of D's keys"; - - public final static String dict_pop_doc = - "D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n" + - "If key is not found, d is returned if given, otherwise KeyError is raised"; - - public final static String dict_popitem_doc = - "D.popitem() -> (k, v), remove and return some (key, value) pair as a\n" + - "2-tuple; but raise KeyError if D is empty."; - - public final static String dict_setdefault_doc = - "D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D"; - - public final static String dict_update_doc = - "D.update(E, **F) -> None. Update D from dict/iterable E and F.\n" + - "If E has a .keys() method, does: for k in E: D[k] = E[k]\n" + - "If E lacks .keys() method, does: for (k, v) in E: D[k] = v\n" + - "In either case, this is followed by: for k in F: D[k] = F[k]"; - - public final static String dict_values_doc = - "D.values() -> list of D's values"; - - public final static String dict_viewitems_doc = - "D.viewitems() -> a set-like object providing a view on D's items"; - - public final static String dict_viewkeys_doc = - "D.viewkeys() -> a set-like object providing a view on D's keys"; - - public final static String dict_viewvalues_doc = - "D.viewvalues() -> an object providing a view on D's values"; - - // Docs for - public final static String list___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String list___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String list___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String list___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String list___delitem___doc = - "x.__delitem__(y) <==> del x[y]"; - - public final static String list___delslice___doc = - "x.__delslice__(i, j) <==> del x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String list_doc = - "list() -> new empty list\n" + - "list(iterable) -> new list initialized from iterable's items"; - - public final static String list___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String list___format___doc = - "default object formatter"; - - public final static String list___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String list___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String list___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String list___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String list___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String list___hash___doc = - ""; - - public final static String list___iadd___doc = - "x.__iadd__(y) <==> x+=y"; - - public final static String list___imul___doc = - "x.__imul__(y) <==> x*=y"; - - public final static String list___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String list___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String list___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String list___len___doc = - "x.__len__() <==> len(x)"; - - public final static String list___lt___doc = - "x.__lt__(y) <==> x x*n"; - - public final static String list___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String list___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String list___reduce___doc = - "helper for pickle"; - - public final static String list___reduce_ex___doc = - "helper for pickle"; - - public final static String list___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String list___reversed___doc = - "L.__reversed__() -- return a reverse iterator over the list"; - - public final static String list___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String list___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String list___setitem___doc = - "x.__setitem__(i, y) <==> x[i]=y"; - - public final static String list___setslice___doc = - "x.__setslice__(i, j, y) <==> x[i:j]=y\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String list___sizeof___doc = - "L.__sizeof__() -- size of L in memory, in bytes"; - - public final static String list___str___doc = - "x.__str__() <==> str(x)"; - - public final static String list___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String list_append_doc = - "L.append(object) -- append object to end"; - - public final static String list_count_doc = - "L.count(value) -> integer -- return number of occurrences of value"; - - public final static String list_extend_doc = - "L.extend(iterable) -- extend list by appending elements from the iterable"; - - public final static String list_index_doc = - "L.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + - "Raises ValueError if the value is not present."; - - public final static String list_insert_doc = - "L.insert(index, object) -- insert object before index"; - - public final static String list_pop_doc = - "L.pop([index]) -> item -- remove and return item at index (default last).\n" + - "Raises IndexError if list is empty or index is out of range."; - - public final static String list_remove_doc = - "L.remove(value) -- remove first occurrence of value.\n" + - "Raises ValueError if the value is not present."; - - public final static String list_reverse_doc = - "L.reverse() -- reverse *IN PLACE*"; - - public final static String list_sort_doc = - "L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;\n" + - "cmp(x, y) -> -1, 0, 1"; - - // Docs for - public final static String slice___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String slice___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String slice___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String slice_doc = - "slice([start,] stop[, step])\n" + - "\n" + - "Create a slice object. This is used for extended slicing (e.g. a[0:10:2])."; - - public final static String slice___format___doc = - "default object formatter"; - - public final static String slice___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String slice___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String slice___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String slice___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String slice___reduce___doc = - "Return state information for pickling."; - - public final static String slice___reduce_ex___doc = - "helper for pickle"; - - public final static String slice___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String slice___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String slice___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String slice___str___doc = - "x.__str__() <==> str(x)"; - - public final static String slice___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String slice_indices_doc = - "S.indices(len) -> (start, stop, stride)\n" + - "\n" + - "Assuming a sequence of length len, calculate the start and stop\n" + - "indices, and the stride length of the extended slice described by\n" + - "S. Out of bounds indices are clipped in a manner consistent with the\n" + - "handling of normal slices."; - - public final static String slice_start_doc = - ""; - - public final static String slice_step_doc = - ""; - - public final static String slice_stop_doc = - ""; - - // Docs for - public final static String super___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String super___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String super_doc = - "super(type) -> unbound super object\n" + - "super(type, obj) -> bound super object; requires isinstance(obj, type)\n" + - "super(type, type2) -> bound super object; requires issubclass(type2, type)\n" + - "Typical use to call a cooperative superclass method:\n" + - "class C(B):\n" + - " def meth(self, arg):\n" + - " super(C, self).meth(arg)"; - - public final static String super___format___doc = - "default object formatter"; - - public final static String super___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String super___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String super___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String super___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String super___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String super___reduce___doc = - "helper for pickle"; - - public final static String super___reduce_ex___doc = - "helper for pickle"; - - public final static String super___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String super___self___doc = - "the instance invoking super(); may be None"; - - public final static String super___self_class___doc = - "the type of the instance invoking super(); may be None"; - - public final static String super___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String super___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String super___str___doc = - "x.__str__() <==> str(x)"; - - public final static String super___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String super___thisclass___doc = - "the class invoking super()"; - - // Docs for - public final static String staticmethod___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String staticmethod___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String staticmethod_doc = - "staticmethod(function) -> method\n" + - "\n" + - "Convert a function to be a static method.\n" + - "\n" + - "A static method does not receive an implicit first argument.\n" + - "To declare a static method, use this idiom:\n" + - "\n" + - " class C:\n" + - " def f(arg1, arg2, ...): ...\n" + - " f = staticmethod(f)\n" + - "\n" + - "It can be called either on the class (e.g. C.f()) or on an instance\n" + - "(e.g. C().f()). The instance is ignored except for its class.\n" + - "\n" + - "Static methods in Python are similar to those found in Java or C++.\n" + - "For a more advanced concept, see the classmethod builtin."; - - public final static String staticmethod___format___doc = - "default object formatter"; - - public final static String staticmethod___func___doc = - ""; - - public final static String staticmethod___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String staticmethod___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String staticmethod___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String staticmethod___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String staticmethod___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String staticmethod___reduce___doc = - "helper for pickle"; - - public final static String staticmethod___reduce_ex___doc = - "helper for pickle"; - - public final static String staticmethod___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String staticmethod___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String staticmethod___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String staticmethod___str___doc = - "x.__str__() <==> str(x)"; - - public final static String staticmethod___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String float___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String float___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String float___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String float___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String float___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String float___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String float___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String float_doc = - "float(x) -> floating point number\n" + - "\n" + - "Convert a string or number to a floating point number, if possible."; - - public final static String float___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String float___float___doc = - "x.__float__() <==> float(x)"; - - public final static String float___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String float___format___doc = - "float.__format__(format_spec) -> string\n" + - "\n" + - "Formats the float according to format_spec."; - - public final static String float___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String float___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String float___getformat___doc = - "float.__getformat__(typestr) -> string\n" + - "\n" + - "You probably don't want to use this function. It exists mainly to be\n" + - "used in Python's test suite.\n" + - "\n" + - "typestr must be 'double' or 'float'. This function returns whichever of\n" + - "'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the\n" + - "format of floating point numbers used by the C type named by typestr."; - - public final static String float___getnewargs___doc = - ""; - - public final static String float___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String float___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String float___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String float___int___doc = - "x.__int__() <==> int(x)"; - - public final static String float___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String float___long___doc = - "x.__long__() <==> long(x)"; - - public final static String float___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String float___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String float___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String float___neg___doc = - "x.__neg__() <==> -x"; - - public final static String float___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String float___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String float___pos___doc = - "x.__pos__() <==> +x"; - - public final static String float___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String float___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String float___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String float___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String float___reduce___doc = - "helper for pickle"; - - public final static String float___reduce_ex___doc = - "helper for pickle"; - - public final static String float___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String float___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String float___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String float___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String float___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String float___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String float___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String float___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String float___setformat___doc = - "float.__setformat__(typestr, fmt) -> None\n" + - "\n" + - "You probably don't want to use this function. It exists mainly to be\n" + - "used in Python's test suite.\n" + - "\n" + - "typestr must be 'double' or 'float'. fmt must be one of 'unknown',\n" + - "'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n" + - "one of the latter two if it appears to match the underlying C reality.\n" + - "\n" + - "Overrides the automatic determination of C-level floating point type.\n" + - "This affects how floats are converted to and from binary strings."; - - public final static String float___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String float___str___doc = - "x.__str__() <==> str(x)"; - - public final static String float___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String float___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String float___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String float___trunc___doc = - "Returns the Integral closest to x between 0 and x."; - - public final static String float_as_integer_ratio_doc = - "float.as_integer_ratio() -> (int, int)\n" + - "\n" + - "Returns a pair of integers, whose ratio is exactly equal to the original\n" + - "float and with a positive denominator.\n" + - "Raises OverflowError on infinities and a ValueError on NaNs.\n" + - "\n" + - ">>> (10.0).as_integer_ratio()\n" + - "(10, 1)\n" + - ">>> (0.0).as_integer_ratio()\n" + - "(0, 1)\n" + - ">>> (-.25).as_integer_ratio()\n" + - "(-1, 4)"; - - public final static String float_conjugate_doc = - "Returns self, the complex conjugate of any float."; - - public final static String float_fromhex_doc = - "float.fromhex(string) -> float\n" + - "\n" + - "Create a floating-point number from a hexadecimal string.\n" + - ">>> float.fromhex('0x1.ffffp10')\n" + - "2047.984375\n" + - ">>> float.fromhex('-0x1p-1074')\n" + - "-4.9406564584124654e-324"; - - public final static String float_hex_doc = - "float.hex() -> string\n" + - "\n" + - "Return a hexadecimal representation of a floating-point number.\n" + - ">>> (-0.1).hex()\n" + - "'-0x1.999999999999ap-4'\n" + - ">>> 3.14159.hex()\n" + - "'0x1.921f9f01b866ep+1'"; - - public final static String float_imag_doc = - "the imaginary part of a complex number"; - - public final static String float_is_integer_doc = - "Returns True if the float is an integer."; - - public final static String float_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String enumerate___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String enumerate___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String enumerate_doc = - "enumerate(iterable[, start]) -> iterator for index, value of iterable\n" + - "\n" + - "Return an enumerate object. iterable must be another object that supports\n" + - "iteration. The enumerate object yields pairs containing a count (from\n" + - "start, which defaults to zero) and a value yielded by the iterable argument.\n" + - "enumerate is useful for obtaining an indexed list:\n" + - " (0, seq[0]), (1, seq[1]), (2, seq[2]), ..."; - - public final static String enumerate___format___doc = - "default object formatter"; - - public final static String enumerate___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String enumerate___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String enumerate___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String enumerate___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String enumerate___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String enumerate___reduce___doc = - "helper for pickle"; - - public final static String enumerate___reduce_ex___doc = - "helper for pickle"; - - public final static String enumerate___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String enumerate___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String enumerate___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String enumerate___str___doc = - "x.__str__() <==> str(x)"; - - public final static String enumerate___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String enumerate_next_doc = - "x.next() -> the next value, or raise StopIteration"; - - // Docs for - public final static String basestring___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String basestring___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String basestring_doc = - "Type basestring cannot be instantiated; it is the base for str and unicode."; - - public final static String basestring___format___doc = - "default object formatter"; - - public final static String basestring___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String basestring___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String basestring___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String basestring___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String basestring___reduce___doc = - "helper for pickle"; - - public final static String basestring___reduce_ex___doc = - "helper for pickle"; - - public final static String basestring___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String basestring___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String basestring___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String basestring___str___doc = - "x.__str__() <==> str(x)"; - - public final static String basestring___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String long___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String long___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String long___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String long___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String long___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String long___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String long___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String long___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String long___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String long_doc = - "long(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to a long integer, if possible. A floating\n" + - "point argument will be truncated towards zero (this does not include a\n" + - "string representation of a floating point number!) When converting a\n" + - "string, use the optional base. It is an error to supply a base when\n" + - "converting a non-string."; - - public final static String long___float___doc = - "x.__float__() <==> float(x)"; - - public final static String long___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String long___format___doc = - ""; - - public final static String long___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String long___getnewargs___doc = - ""; - - public final static String long___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String long___hex___doc = - "x.__hex__() <==> hex(x)"; - - public final static String long___index___doc = - "x[y:z] <==> x[y.__index__():z.__index__()]"; - - public final static String long___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String long___int___doc = - "x.__int__() <==> int(x)"; - - public final static String long___invert___doc = - "x.__invert__() <==> ~x"; - - public final static String long___long___doc = - "x.__long__() <==> long(x)"; - - public final static String long___lshift___doc = - "x.__lshift__(y) <==> x< x%y"; - - public final static String long___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String long___neg___doc = - "x.__neg__() <==> -x"; - - public final static String long___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String long___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String long___oct___doc = - "x.__oct__() <==> oct(x)"; - - public final static String long___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String long___pos___doc = - "x.__pos__() <==> +x"; - - public final static String long___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String long___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String long___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String long___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String long___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String long___reduce___doc = - "helper for pickle"; - - public final static String long___reduce_ex___doc = - "helper for pickle"; - - public final static String long___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String long___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String long___rlshift___doc = - "x.__rlshift__(y) <==> y< y%x"; - - public final static String long___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String long___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String long___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String long___rrshift___doc = - "x.__rrshift__(y) <==> y>>x"; - - public final static String long___rshift___doc = - "x.__rshift__(y) <==> x>>y"; - - public final static String long___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String long___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String long___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String long___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String long___sizeof___doc = - "Returns size in memory, in bytes"; - - public final static String long___str___doc = - "x.__str__() <==> str(x)"; - - public final static String long___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String long___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String long___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String long___trunc___doc = - "Truncating an Integral returns itself."; - - public final static String long___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String long_bit_length_doc = - "long.bit_length() -> int or long\n" + - "\n" + - "Number of bits necessary to represent self in binary.\n" + - ">>> bin(37L)\n" + - "'0b100101'\n" + - ">>> (37L).bit_length()\n" + - "6"; - - public final static String long_conjugate_doc = - "Returns self, the complex conjugate of any long."; - - public final static String long_denominator_doc = - "the denominator of a rational number in lowest terms"; - - public final static String long_imag_doc = - "the imaginary part of a complex number"; - - public final static String long_numerator_doc = - "the numerator of a rational number in lowest terms"; - - public final static String long_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String tuple___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String tuple___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String tuple___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String tuple___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String tuple_doc = - "tuple() -> empty tuple\n" + - "tuple(iterable) -> tuple initialized from iterable's items\n" + - "\n" + - "If the argument is a tuple, the return value is the same object."; - - public final static String tuple___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String tuple___format___doc = - "default object formatter"; - - public final static String tuple___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String tuple___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String tuple___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String tuple___getnewargs___doc = - ""; - - public final static String tuple___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String tuple___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String tuple___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String tuple___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String tuple___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String tuple___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String tuple___len___doc = - "x.__len__() <==> len(x)"; - - public final static String tuple___lt___doc = - "x.__lt__(y) <==> x x*n"; - - public final static String tuple___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String tuple___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String tuple___reduce___doc = - "helper for pickle"; - - public final static String tuple___reduce_ex___doc = - "helper for pickle"; - - public final static String tuple___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String tuple___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String tuple___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String tuple___sizeof___doc = - "T.__sizeof__() -- size of T in memory, in bytes"; - - public final static String tuple___str___doc = - "x.__str__() <==> str(x)"; - - public final static String tuple___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String tuple_count_doc = - "T.count(value) -> integer -- return number of occurrences of value"; - - public final static String tuple_index_doc = - "T.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + - "Raises ValueError if the value is not present."; - - // Docs for - public final static String str___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String str___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String str___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String str___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String str_doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String str___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String str___format___doc = - "S.__format__(format_spec) -> string\n" + - "\n" + - "Return a formatted version of S as described by format_spec."; - - public final static String str___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String str___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String str___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String str___getnewargs___doc = - ""; - - public final static String str___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String str___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String str___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String str___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String str___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String str___len___doc = - "x.__len__() <==> len(x)"; - - public final static String str___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String str___mul___doc = - "x.__mul__(n) <==> x*n"; - - public final static String str___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String str___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String str___reduce___doc = - "helper for pickle"; - - public final static String str___reduce_ex___doc = - "helper for pickle"; - - public final static String str___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String str___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String str___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String str___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String str___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes"; - - public final static String str___str___doc = - "x.__str__() <==> str(x)"; - - public final static String str___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String str__formatter_field_name_split_doc = - ""; - - public final static String str__formatter_parser_doc = - ""; - - public final static String str_capitalize_doc = - "S.capitalize() -> string\n" + - "\n" + - "Return a copy of the string S with only its first character\n" + - "capitalized."; - - public final static String str_center_doc = - "S.center(width[, fillchar]) -> string\n" + - "\n" + - "Return S centered in a string of length width. Padding is\n" + - "done using the specified fill character (default is a space)"; - - public final static String str_count_doc = - "S.count(sub[, start[, end]]) -> int\n" + - "\n" + - "Return the number of non-overlapping occurrences of substring sub in\n" + - "string S[start:end]. Optional arguments start and end are interpreted\n" + - "as in slice notation."; - - public final static String str_decode_doc = - "S.decode([encoding[,errors]]) -> object\n" + - "\n" + - "Decodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + - "as well as any other name registered with codecs.register_error that is\n" + - "able to handle UnicodeDecodeErrors."; - - public final static String str_encode_doc = - "S.encode([encoding[,errors]]) -> object\n" + - "\n" + - "Encodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + - "'xmlcharrefreplace' as well as any other name registered with\n" + - "codecs.register_error that is able to handle UnicodeEncodeErrors."; - - public final static String str_endswith_doc = - "S.endswith(suffix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S ends with the specified suffix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "suffix can also be a tuple of strings to try."; - - public final static String str_expandtabs_doc = - "S.expandtabs([tabsize]) -> string\n" + - "\n" + - "Return a copy of S where all tab characters are expanded using spaces.\n" + - "If tabsize is not given, a tab size of 8 characters is assumed."; - - public final static String str_find_doc = - "S.find(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the lowest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String str_format_doc = - "S.format(*args, **kwargs) -> string\n" + - "\n" + - "Return a formatted version of S, using substitutions from args and kwargs.\n" + - "The substitutions are identified by braces ('{' and '}')."; - - public final static String str_index_doc = - "S.index(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.find() but raise ValueError when the substring is not found."; - - public final static String str_isalnum_doc = - "S.isalnum() -> bool\n" + - "\n" + - "Return True if all characters in S are alphanumeric\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_isalpha_doc = - "S.isalpha() -> bool\n" + - "\n" + - "Return True if all characters in S are alphabetic\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_isdigit_doc = - "S.isdigit() -> bool\n" + - "\n" + - "Return True if all characters in S are digits\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_islower_doc = - "S.islower() -> bool\n" + - "\n" + - "Return True if all cased characters in S are lowercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String str_isspace_doc = - "S.isspace() -> bool\n" + - "\n" + - "Return True if all characters in S are whitespace\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_istitle_doc = - "S.istitle() -> bool\n" + - "\n" + - "Return True if S is a titlecased string and there is at least one\n" + - "character in S, i.e. uppercase characters may only follow uncased\n" + - "characters and lowercase characters only cased ones. Return False\n" + - "otherwise."; - - public final static String str_isupper_doc = - "S.isupper() -> bool\n" + - "\n" + - "Return True if all cased characters in S are uppercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String str_join_doc = - "S.join(iterable) -> string\n" + - "\n" + - "Return a string which is the concatenation of the strings in the\n" + - "iterable. The separator between elements is S."; - - public final static String str_ljust_doc = - "S.ljust(width[, fillchar]) -> string\n" + - "\n" + - "Return S left-justified in a string of length width. Padding is\n" + - "done using the specified fill character (default is a space)."; - - public final static String str_lower_doc = - "S.lower() -> string\n" + - "\n" + - "Return a copy of the string S converted to lowercase."; - - public final static String str_lstrip_doc = - "S.lstrip([chars]) -> string or unicode\n" + - "\n" + - "Return a copy of the string S with leading whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is unicode, S will be converted to unicode before stripping"; - - public final static String str_partition_doc = - "S.partition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, and return the part before it,\n" + - "the separator itself, and the part after it. If the separator is not\n" + - "found, return S and two empty strings."; - - public final static String str_replace_doc = - "S.replace(old, new[, count]) -> string\n" + - "\n" + - "Return a copy of string S with all occurrences of substring\n" + - "old replaced by new. If the optional argument count is\n" + - "given, only the first count occurrences are replaced."; - - public final static String str_rfind_doc = - "S.rfind(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the highest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String str_rindex_doc = - "S.rindex(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.rfind() but raise ValueError when the substring is not found."; - - public final static String str_rjust_doc = - "S.rjust(width[, fillchar]) -> string\n" + - "\n" + - "Return S right-justified in a string of length width. Padding is\n" + - "done using the specified fill character (default is a space)"; - - public final static String str_rpartition_doc = - "S.rpartition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, starting at the end of S, and return\n" + - "the part before it, the separator itself, and the part after it. If the\n" + - "separator is not found, return two empty strings and S."; - - public final static String str_rsplit_doc = - "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in the string S, using sep as the\n" + - "delimiter string, starting at the end of the string and working\n" + - "to the front. If maxsplit is given, at most maxsplit splits are\n" + - "done. If sep is not specified or is None, any whitespace string\n" + - "is a separator."; - - public final static String str_rstrip_doc = - "S.rstrip([chars]) -> string or unicode\n" + - "\n" + - "Return a copy of the string S with trailing whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is unicode, S will be converted to unicode before stripping"; - - public final static String str_split_doc = - "S.split([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in the string S, using sep as the\n" + - "delimiter string. If maxsplit is given, at most maxsplit\n" + - "splits are done. If sep is not specified or is None, any\n" + - "whitespace string is a separator and empty strings are removed\n" + - "from the result."; - - public final static String str_splitlines_doc = - "S.splitlines([keepends]) -> list of strings\n" + - "\n" + - "Return a list of the lines in S, breaking at line boundaries.\n" + - "Line breaks are not included in the resulting list unless keepends\n" + - "is given and true."; - - public final static String str_startswith_doc = - "S.startswith(prefix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S starts with the specified prefix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "prefix can also be a tuple of strings to try."; - - public final static String str_strip_doc = - "S.strip([chars]) -> string or unicode\n" + - "\n" + - "Return a copy of the string S with leading and trailing\n" + - "whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is unicode, S will be converted to unicode before stripping"; - - public final static String str_swapcase_doc = - "S.swapcase() -> string\n" + - "\n" + - "Return a copy of the string S with uppercase characters\n" + - "converted to lowercase and vice versa."; - - public final static String str_title_doc = - "S.title() -> string\n" + - "\n" + - "Return a titlecased version of S, i.e. words start with uppercase\n" + - "characters, all remaining cased characters have lowercase."; - - public final static String str_translate_doc = - "S.translate(table [,deletechars]) -> string\n" + - "\n" + - "Return a copy of the string S, where all characters occurring\n" + - "in the optional argument deletechars are removed, and the\n" + - "remaining characters have been mapped through the given\n" + - "translation table, which must be a string of length 256."; - - public final static String str_upper_doc = - "S.upper() -> string\n" + - "\n" + - "Return a copy of the string S converted to uppercase."; - - public final static String str_zfill_doc = - "S.zfill(width) -> string\n" + - "\n" + - "Pad a numeric string S with zeros on the left, to fill a field\n" + - "of the specified width. The string S is never truncated."; - - // Docs for - public final static String property___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String property___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String property___delete___doc = - "descr.__delete__(obj)"; - - public final static String property_doc = - "property(fget=None, fset=None, fdel=None, doc=None) -> property attribute\n" + - "\n" + - "fget is a function to be used for getting an attribute value, and likewise\n" + - "fset is a function for setting, and fdel a function for del'ing, an\n" + - "attribute. Typical use is to define a managed attribute x:\n" + - "class C(object):\n" + - " def getx(self): return self._x\n" + - " def setx(self, value): self._x = value\n" + - " def delx(self): del self._x\n" + - " x = property(getx, setx, delx, \"I'm the 'x' property.\")\n" + - "\n" + - "Decorators make defining new properties or modifying existing ones easy:\n" + - "class C(object):\n" + - " @property\n" + - " def x(self): return self._x\n" + - " @x.setter\n" + - " def x(self, value): self._x = value\n" + - " @x.deleter\n" + - " def x(self): del self._x\n" + - ""; - - public final static String property___format___doc = - "default object formatter"; - - public final static String property___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String property___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String property___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String property___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String property___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String property___reduce___doc = - "helper for pickle"; - - public final static String property___reduce_ex___doc = - "helper for pickle"; - - public final static String property___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String property___set___doc = - "descr.__set__(obj, value)"; - - public final static String property___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String property___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String property___str___doc = - "x.__str__() <==> str(x)"; - - public final static String property___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String property_deleter_doc = - "Descriptor to change the deleter on a property."; - - public final static String property_fdel_doc = - ""; - - public final static String property_fget_doc = - ""; - - public final static String property_fset_doc = - ""; - - public final static String property_getter_doc = - "Descriptor to change the getter on a property."; - - public final static String property_setter_doc = - "Descriptor to change the setter on a property."; - - // Docs for - public final static String int___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String int___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String int___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String int___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String int___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String int___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String int___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String int___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String int___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String int_doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String int___float___doc = - "x.__float__() <==> float(x)"; - - public final static String int___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String int___format___doc = - ""; - - public final static String int___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String int___getnewargs___doc = - ""; - - public final static String int___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String int___hex___doc = - "x.__hex__() <==> hex(x)"; - - public final static String int___index___doc = - "x[y:z] <==> x[y.__index__():z.__index__()]"; - - public final static String int___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String int___int___doc = - "x.__int__() <==> int(x)"; - - public final static String int___invert___doc = - "x.__invert__() <==> ~x"; - - public final static String int___long___doc = - "x.__long__() <==> long(x)"; - - public final static String int___lshift___doc = - "x.__lshift__(y) <==> x< x%y"; - - public final static String int___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String int___neg___doc = - "x.__neg__() <==> -x"; - - public final static String int___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String int___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String int___oct___doc = - "x.__oct__() <==> oct(x)"; - - public final static String int___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String int___pos___doc = - "x.__pos__() <==> +x"; - - public final static String int___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String int___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String int___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String int___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String int___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String int___reduce___doc = - "helper for pickle"; - - public final static String int___reduce_ex___doc = - "helper for pickle"; - - public final static String int___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String int___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String int___rlshift___doc = - "x.__rlshift__(y) <==> y< y%x"; - - public final static String int___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String int___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String int___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String int___rrshift___doc = - "x.__rrshift__(y) <==> y>>x"; - - public final static String int___rshift___doc = - "x.__rshift__(y) <==> x>>y"; - - public final static String int___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String int___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String int___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String int___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String int___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String int___str___doc = - "x.__str__() <==> str(x)"; - - public final static String int___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String int___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String int___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String int___trunc___doc = - "Truncating an Integral returns itself."; - - public final static String int___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String int_bit_length_doc = - "int.bit_length() -> int\n" + - "\n" + - "Number of bits necessary to represent self in binary.\n" + - ">>> bin(37)\n" + - "'0b100101'\n" + - ">>> (37).bit_length()\n" + - "6"; - - public final static String int_conjugate_doc = - "Returns self, the complex conjugate of any int."; - - public final static String int_denominator_doc = - "the denominator of a rational number in lowest terms"; - - public final static String int_imag_doc = - "the imaginary part of a complex number"; - - public final static String int_numerator_doc = - "the numerator of a rational number in lowest terms"; - - public final static String int_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String xrange___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String xrange___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String xrange_doc = - "xrange([start,] stop[, step]) -> xrange object\n" + - "\n" + - "Like range(), but instead of returning a list, returns an object that\n" + - "generates the numbers in the range on demand. For looping, this is \n" + - "slightly faster than range() and more memory efficient."; - - public final static String xrange___format___doc = - "default object formatter"; - - public final static String xrange___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String xrange___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String xrange___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String xrange___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String xrange___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String xrange___len___doc = - "x.__len__() <==> len(x)"; - - public final static String xrange___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String xrange___reduce___doc = - ""; - - public final static String xrange___reduce_ex___doc = - "helper for pickle"; - - public final static String xrange___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String xrange___reversed___doc = - "Returns a reverse iterator."; - - public final static String xrange___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String xrange___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String xrange___str___doc = - "x.__str__() <==> str(x)"; - - public final static String xrange___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String file___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String file___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String file_doc = - "file(name[, mode[, buffering]]) -> file object\n" + - "\n" + - "Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n" + - "writing or appending. The file will be created if it doesn't exist\n" + - "when opened for writing or appending; it will be truncated when\n" + - "opened for writing. Add a 'b' to the mode for binary files.\n" + - "Add a '+' to the mode to allow simultaneous reading and writing.\n" + - "If the buffering argument is given, 0 means unbuffered, 1 means line\n" + - "buffered, and larger numbers specify the buffer size. The preferred way\n" + - "to open a file is with the builtin open() function.\n" + - "Add a 'U' to mode to open the file for input with universal newline\n" + - "support. Any line ending in the input file will be seen as a '\\n'\n" + - "in Python. Also, a file so opened gains the attribute 'newlines';\n" + - "the value for this attribute is one of None (no newline read yet),\n" + - "'\\r', '\\n', '\\r\\n' or a tuple containing all the newline types seen.\n" + - "\n" + - "'U' cannot be combined with 'w' or '+' mode.\n" + - ""; - - public final static String file___enter___doc = - "__enter__() -> self."; - - public final static String file___exit___doc = - "__exit__(*excinfo) -> None. Closes the file."; - - public final static String file___format___doc = - "default object formatter"; - - public final static String file___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String file___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String file___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String file___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String file___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String file___reduce___doc = - "helper for pickle"; - - public final static String file___reduce_ex___doc = - "helper for pickle"; - - public final static String file___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String file___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String file___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String file___str___doc = - "x.__str__() <==> str(x)"; - - public final static String file___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String file_close_doc = - "close() -> None or (perhaps) an integer. Close the file.\n" + - "\n" + - "Sets data attribute .closed to True. A closed file cannot be used for\n" + - "further I/O operations. close() may be called more than once without\n" + - "error. Some kinds of file objects (for example, opened by popen())\n" + - "may return an exit status upon closing."; - - public final static String file_closed_doc = - "True if the file is closed"; - - public final static String file_encoding_doc = - "file encoding"; - - public final static String file_errors_doc = - "Unicode error handler"; - - public final static String file_fileno_doc = - "fileno() -> integer \"file descriptor\".\n" + - "\n" + - "This is needed for lower-level file interfaces, such os.read()."; - - public final static String file_flush_doc = - "flush() -> None. Flush the internal I/O buffer."; - - public final static String file_isatty_doc = - "isatty() -> true or false. True if the file is connected to a tty device."; - - public final static String file_mode_doc = - "file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"; - - public final static String file_name_doc = - "file name"; - - public final static String file_newlines_doc = - "end-of-line convention used in this file"; - - public final static String file_next_doc = - "x.next() -> the next value, or raise StopIteration"; - - public final static String file_read_doc = - "read([size]) -> read at most size bytes, returned as a string.\n" + - "\n" + - "If the size argument is negative or omitted, read until EOF is reached.\n" + - "Notice that when in non-blocking mode, less data than what was requested\n" + - "may be returned, even if no size parameter was given."; - - public final static String file_readinto_doc = - "readinto() -> Undocumented. Don't use this; it may go away."; - - public final static String file_readline_doc = - "readline([size]) -> next line from the file, as a string.\n" + - "\n" + - "Retain newline. A non-negative size argument limits the maximum\n" + - "number of bytes to return (an incomplete line may be returned then).\n" + - "Return an empty string at EOF."; - - public final static String file_readlines_doc = - "readlines([size]) -> list of strings, each a line from the file.\n" + - "\n" + - "Call readline() repeatedly and return a list of the lines so read.\n" + - "The optional size argument, if given, is an approximate bound on the\n" + - "total number of bytes in the lines returned."; - - public final static String file_seek_doc = - "seek(offset[, whence]) -> None. Move to new file position.\n" + - "\n" + - "Argument offset is a byte count. Optional argument whence defaults to\n" + - "0 (offset from start of file, offset should be >= 0); other values are 1\n" + - "(move relative to current position, positive or negative), and 2 (move\n" + - "relative to end of file, usually negative, although many platforms allow\n" + - "seeking beyond the end of a file). If the file is opened in text mode,\n" + - "only offsets returned by tell() are legal. Use of other offsets causes\n" + - "undefined behavior.\n" + - "Note that not all file objects are seekable."; - - public final static String file_softspace_doc = - "flag indicating that a space needs to be printed; used by print"; - - public final static String file_tell_doc = - "tell() -> current file position, an integer (may be a long integer)."; - - public final static String file_truncate_doc = - "truncate([size]) -> None. Truncate the file to at most size bytes.\n" + - "\n" + - "Size defaults to the current file position, as returned by tell()."; - - public final static String file_write_doc = - "write(str) -> None. Write string str to file.\n" + - "\n" + - "Note that due to buffering, flush() or close() may be needed before\n" + - "the file on disk reflects the data written."; - - public final static String file_writelines_doc = - "writelines(sequence_of_strings) -> None. Write the strings to the file.\n" + - "\n" + - "Note that newlines are not added. The sequence can be any iterable object\n" + - "producing strings. This is equivalent to calling write() for each string."; - - public final static String file_xreadlines_doc = - "xreadlines() -> returns self.\n" + - "\n" + - "For backward compatibility. File objects now include the performance\n" + - "optimizations previously implemented in the xreadlines module."; - - // Docs for - public final static String complex___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String complex___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String complex___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String complex___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String complex___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String complex___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String complex___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String complex_doc = - "complex(real[, imag]) -> complex number\n" + - "\n" + - "Create a complex number from a real part and an optional imaginary part.\n" + - "This is equivalent to (real + imag*1j) where imag defaults to 0."; - - public final static String complex___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String complex___float___doc = - "x.__float__() <==> float(x)"; - - public final static String complex___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String complex___format___doc = - "complex.__format__() -> str\n" + - "\n" + - "Converts to a string according to format_spec."; - - public final static String complex___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String complex___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String complex___getnewargs___doc = - ""; - - public final static String complex___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String complex___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String complex___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String complex___int___doc = - "x.__int__() <==> int(x)"; - - public final static String complex___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String complex___long___doc = - "x.__long__() <==> long(x)"; - - public final static String complex___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String complex___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String complex___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String complex___neg___doc = - "x.__neg__() <==> -x"; - - public final static String complex___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String complex___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String complex___pos___doc = - "x.__pos__() <==> +x"; - - public final static String complex___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String complex___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String complex___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String complex___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String complex___reduce___doc = - "helper for pickle"; - - public final static String complex___reduce_ex___doc = - "helper for pickle"; - - public final static String complex___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String complex___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String complex___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String complex___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String complex___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String complex___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String complex___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String complex___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String complex___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String complex___str___doc = - "x.__str__() <==> str(x)"; - - public final static String complex___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String complex___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String complex___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String complex_conjugate_doc = - "complex.conjugate() -> complex\n" + - "\n" + - "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j."; - - public final static String complex_imag_doc = - "the imaginary part of a complex number"; - - public final static String complex_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String bool___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String bool___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String bool___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String bool___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String bool___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String bool___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String bool___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String bool___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String bool___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String bool_doc = - "bool(x) -> bool\n" + - "\n" + - "Returns True when the argument x is true, False otherwise.\n" + - "The builtins True and False are the only two instances of the class bool.\n" + - "The class bool is a subclass of the class int, and cannot be subclassed."; - - public final static String bool___float___doc = - "x.__float__() <==> float(x)"; - - public final static String bool___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String bool___format___doc = - ""; - - public final static String bool___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String bool___getnewargs___doc = - ""; - - public final static String bool___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String bool___hex___doc = - "x.__hex__() <==> hex(x)"; - - public final static String bool___index___doc = - "x[y:z] <==> x[y.__index__():z.__index__()]"; - - public final static String bool___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String bool___int___doc = - "x.__int__() <==> int(x)"; - - public final static String bool___invert___doc = - "x.__invert__() <==> ~x"; - - public final static String bool___long___doc = - "x.__long__() <==> long(x)"; - - public final static String bool___lshift___doc = - "x.__lshift__(y) <==> x< x%y"; - - public final static String bool___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String bool___neg___doc = - "x.__neg__() <==> -x"; - - public final static String bool___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String bool___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String bool___oct___doc = - "x.__oct__() <==> oct(x)"; - - public final static String bool___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String bool___pos___doc = - "x.__pos__() <==> +x"; - - public final static String bool___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String bool___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String bool___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String bool___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String bool___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String bool___reduce___doc = - "helper for pickle"; - - public final static String bool___reduce_ex___doc = - "helper for pickle"; - - public final static String bool___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String bool___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String bool___rlshift___doc = - "x.__rlshift__(y) <==> y< y%x"; - - public final static String bool___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String bool___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String bool___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String bool___rrshift___doc = - "x.__rrshift__(y) <==> y>>x"; - - public final static String bool___rshift___doc = - "x.__rshift__(y) <==> x>>y"; - - public final static String bool___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String bool___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String bool___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String bool___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String bool___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String bool___str___doc = - "x.__str__() <==> str(x)"; - - public final static String bool___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String bool___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String bool___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String bool___trunc___doc = - "Truncating an Integral returns itself."; - - public final static String bool___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String bool_bit_length_doc = - "int.bit_length() -> int\n" + - "\n" + - "Number of bits necessary to represent self in binary.\n" + - ">>> bin(37)\n" + - "'0b100101'\n" + - ">>> (37).bit_length()\n" + - "6"; - - public final static String bool_conjugate_doc = - "Returns self, the complex conjugate of any int."; - - public final static String bool_denominator_doc = - "the denominator of a rational number in lowest terms"; - - public final static String bool_imag_doc = - "the imaginary part of a complex number"; - - public final static String bool_numerator_doc = - "the numerator of a rational number in lowest terms"; - - public final static String bool_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String classmethod___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String classmethod___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String classmethod_doc = - "classmethod(function) -> method\n" + - "\n" + - "Convert a function to be a class method.\n" + - "\n" + - "A class method receives the class as implicit first argument,\n" + - "just like an instance method receives the instance.\n" + - "To declare a class method, use this idiom:\n" + - "\n" + - " class C:\n" + - " def f(cls, arg1, arg2, ...): ...\n" + - " f = classmethod(f)\n" + - "\n" + - "It can be called either on the class (e.g. C.f()) or on an instance\n" + - "(e.g. C().f()). The instance is ignored except for its class.\n" + - "If a class method is called for a derived class, the derived class\n" + - "object is passed as the implied first argument.\n" + - "\n" + - "Class methods are different than C++ or Java static methods.\n" + - "If you want those, see the staticmethod builtin."; - - public final static String classmethod___format___doc = - "default object formatter"; - - public final static String classmethod___func___doc = - ""; - - public final static String classmethod___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String classmethod___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String classmethod___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String classmethod___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String classmethod___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String classmethod___reduce___doc = - "helper for pickle"; - - public final static String classmethod___reduce_ex___doc = - "helper for pickle"; - - public final static String classmethod___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String classmethod___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String classmethod___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String classmethod___str___doc = - "x.__str__() <==> str(x)"; - - public final static String classmethod___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String set___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String set___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String set___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String set___contains___doc = - "x.__contains__(y) <==> y in x."; - - public final static String set___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String set_doc = - "set() -> new empty set object\n" + - "set(iterable) -> new set object\n" + - "\n" + - "Build an unordered collection of unique elements."; - - public final static String set___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String set___format___doc = - "default object formatter"; - - public final static String set___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String set___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String set___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String set___hash___doc = - ""; - - public final static String set___iand___doc = - "x.__iand__(y) <==> x&y"; - - public final static String set___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String set___ior___doc = - "x.__ior__(y) <==> x|y"; - - public final static String set___isub___doc = - "x.__isub__(y) <==> x-y"; - - public final static String set___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String set___ixor___doc = - "x.__ixor__(y) <==> x^y"; - - public final static String set___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String set___len___doc = - "x.__len__() <==> len(x)"; - - public final static String set___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String set___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String set___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String set___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String set___reduce___doc = - "Return state information for pickling."; - - public final static String set___reduce_ex___doc = - "helper for pickle"; - - public final static String set___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String set___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String set___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String set___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String set___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String set___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes"; - - public final static String set___str___doc = - "x.__str__() <==> str(x)"; - - public final static String set___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String set___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String set___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String set_add_doc = - "Add an element to a set.\n" + - "\n" + - "This has no effect if the element is already present."; - - public final static String set_clear_doc = - "Remove all elements from this set."; - - public final static String set_copy_doc = - "Return a shallow copy of a set."; - - public final static String set_difference_doc = - "Return the difference of two or more sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in this set but not the others.)"; - - public final static String set_difference_update_doc = - "Remove all elements of another set from this set."; - - public final static String set_discard_doc = - "Remove an element from a set if it is a member.\n" + - "\n" + - "If the element is not a member, do nothing."; - - public final static String set_intersection_doc = - "Return the intersection of two or more sets as a new set.\n" + - "\n" + - "(i.e. elements that are common to all of the sets.)"; - - public final static String set_intersection_update_doc = - "Update a set with the intersection of itself and another."; - - public final static String set_isdisjoint_doc = - "Return True if two sets have a null intersection."; - - public final static String set_issubset_doc = - "Report whether another set contains this set."; - - public final static String set_issuperset_doc = - "Report whether this set contains another set."; - - public final static String set_pop_doc = - "Remove and return an arbitrary set element.\n" + - "Raises KeyError if the set is empty."; - - public final static String set_remove_doc = - "Remove an element from a set; it must be a member.\n" + - "\n" + - "If the element is not a member, raise a KeyError."; - - public final static String set_symmetric_difference_doc = - "Return the symmetric difference of two sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in exactly one of the sets.)"; - - public final static String set_symmetric_difference_update_doc = - "Update a set with the symmetric difference of itself and another."; - - public final static String set_union_doc = - "Return the union of sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in either set.)"; - - public final static String set_update_doc = - "Update a set with the union of itself and others."; - - // Docs for - public final static String frozenset___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String frozenset___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String frozenset___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String frozenset___contains___doc = - "x.__contains__(y) <==> y in x."; - - public final static String frozenset___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String frozenset_doc = - "frozenset() -> empty frozenset object\n" + - "frozenset(iterable) -> frozenset object\n" + - "\n" + - "Build an immutable unordered collection of unique elements."; - - public final static String frozenset___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String frozenset___format___doc = - "default object formatter"; - - public final static String frozenset___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String frozenset___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String frozenset___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String frozenset___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String frozenset___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String frozenset___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String frozenset___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String frozenset___len___doc = - "x.__len__() <==> len(x)"; - - public final static String frozenset___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String frozenset___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String frozenset___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String frozenset___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String frozenset___reduce___doc = - "Return state information for pickling."; - - public final static String frozenset___reduce_ex___doc = - "helper for pickle"; - - public final static String frozenset___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String frozenset___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String frozenset___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String frozenset___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String frozenset___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String frozenset___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes"; - - public final static String frozenset___str___doc = - "x.__str__() <==> str(x)"; - - public final static String frozenset___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String frozenset___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String frozenset___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String frozenset_copy_doc = - "Return a shallow copy of a set."; - - public final static String frozenset_difference_doc = - "Return the difference of two or more sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in this set but not the others.)"; - - public final static String frozenset_intersection_doc = - "Return the intersection of two or more sets as a new set.\n" + - "\n" + - "(i.e. elements that are common to all of the sets.)"; - - public final static String frozenset_isdisjoint_doc = - "Return True if two sets have a null intersection."; - - public final static String frozenset_issubset_doc = - "Report whether another set contains this set."; - - public final static String frozenset_issuperset_doc = - "Report whether this set contains another set."; - - public final static String frozenset_symmetric_difference_doc = - "Return the symmetric difference of two sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in exactly one of the sets.)"; - - public final static String frozenset_union_doc = - "Return the union of sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in either set.)"; - - // Docs for - public final static String BaseException___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String BaseException___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String BaseException___dict___doc = - ""; - - public final static String BaseException_doc = - "Common base class for all exceptions"; - - public final static String BaseException___format___doc = - "default object formatter"; - - public final static String BaseException___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String BaseException___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String BaseException___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String BaseException___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String BaseException___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String BaseException___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String BaseException___reduce___doc = - ""; - - public final static String BaseException___reduce_ex___doc = - "helper for pickle"; - - public final static String BaseException___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String BaseException___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String BaseException___setstate___doc = - ""; - - public final static String BaseException___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String BaseException___str___doc = - "x.__str__() <==> str(x)"; - - public final static String BaseException___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String BaseException___unicode___doc = - ""; - - public final static String BaseException_args_doc = - ""; - - public final static String BaseException_message_doc = - ""; - - // Docs for - public final static String function___call___doc = - "x.__call__(...) <==> x(...)"; - - public final static String function___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String function___closure___doc = - ""; - - public final static String function___code___doc = - ""; - - public final static String function___defaults___doc = - ""; - - public final static String function___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String function___dict___doc = - ""; - - public final static String function_doc = - "function(code, globals[, name[, argdefs[, closure]]])\n" + - "\n" + - "Create a function object from a code object and a dictionary.\n" + - "The optional name string overrides the name from the code object.\n" + - "The optional argdefs tuple specifies the default argument values.\n" + - "The optional closure tuple supplies the bindings for free variables."; - - public final static String function___format___doc = - "default object formatter"; - - public final static String function___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String function___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String function___globals___doc = - ""; - - public final static String function___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String function___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String function___module___doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String function___name___doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String function___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String function___reduce___doc = - "helper for pickle"; - - public final static String function___reduce_ex___doc = - "helper for pickle"; - - public final static String function___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String function___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String function___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String function___str___doc = - "x.__str__() <==> str(x)"; - - public final static String function___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String function_func_closure_doc = - ""; - - public final static String function_func_code_doc = - ""; - - public final static String function_func_defaults_doc = - ""; - - public final static String function_func_dict_doc = - ""; - - public final static String function_func_doc_doc = - ""; - - public final static String function_func_globals_doc = - ""; - - public final static String function_func_name_doc = - ""; - - // Docs for - public final static String instancemethod___call___doc = - "x.__call__(...) <==> x(...)"; - - public final static String instancemethod___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String instancemethod___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String instancemethod___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String instancemethod_doc = - "instancemethod(function, instance, class)\n" + - "\n" + - "Create an instance method object."; - - public final static String instancemethod___format___doc = - "default object formatter"; - - public final static String instancemethod___func___doc = - "the function (or other callable) implementing a method"; - - public final static String instancemethod___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String instancemethod___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String instancemethod___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String instancemethod___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String instancemethod___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String instancemethod___reduce___doc = - "helper for pickle"; - - public final static String instancemethod___reduce_ex___doc = - "helper for pickle"; - - public final static String instancemethod___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String instancemethod___self___doc = - "the instance to which a method is bound; None for unbound methods"; - - public final static String instancemethod___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String instancemethod___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String instancemethod___str___doc = - "x.__str__() <==> str(x)"; - - public final static String instancemethod___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String instancemethod_im_class_doc = - "the class associated with a method"; - - public final static String instancemethod_im_func_doc = - "the function (or other callable) implementing a method"; - - public final static String instancemethod_im_self_doc = - "the instance to which a method is bound; None for unbound methods"; - - // Docs for - public final static String code___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String code___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String code___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String code_doc = - "code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n" + - " varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n" + - "\n" + - "Create a code object. Not for the faint of heart."; - - public final static String code___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String code___format___doc = - "default object formatter"; - - public final static String code___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String code___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String code___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String code___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String code___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String code___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String code___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String code___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String code___reduce___doc = - "helper for pickle"; - - public final static String code___reduce_ex___doc = - "helper for pickle"; - - public final static String code___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String code___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String code___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String code___str___doc = - "x.__str__() <==> str(x)"; - - public final static String code___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String code_co_argcount_doc = - ""; - - public final static String code_co_cellvars_doc = - ""; - - public final static String code_co_code_doc = - ""; - - public final static String code_co_consts_doc = - ""; - - public final static String code_co_filename_doc = - ""; - - public final static String code_co_firstlineno_doc = - ""; - - public final static String code_co_flags_doc = - ""; - - public final static String code_co_freevars_doc = - ""; - - public final static String code_co_lnotab_doc = - ""; - - public final static String code_co_name_doc = - ""; - - public final static String code_co_names_doc = - ""; - - public final static String code_co_nlocals_doc = - ""; - - public final static String code_co_stacksize_doc = - ""; - - public final static String code_co_varnames_doc = - ""; - - // Docs for - public final static String frame___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String frame___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String frame_doc = - ""; - - public final static String frame___format___doc = - "default object formatter"; - - public final static String frame___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String frame___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String frame___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String frame___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String frame___reduce___doc = - "helper for pickle"; - - public final static String frame___reduce_ex___doc = - "helper for pickle"; - - public final static String frame___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String frame___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String frame___sizeof___doc = - "F.__sizeof__() -> size of F in memory, in bytes"; - - public final static String frame___str___doc = - "x.__str__() <==> str(x)"; - - public final static String frame___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String frame_f_back_doc = - ""; - - public final static String frame_f_builtins_doc = - ""; - - public final static String frame_f_code_doc = - ""; - - public final static String frame_f_exc_traceback_doc = - ""; - - public final static String frame_f_exc_type_doc = - ""; - - public final static String frame_f_exc_value_doc = - ""; - - public final static String frame_f_globals_doc = - ""; - - public final static String frame_f_lasti_doc = - ""; - - public final static String frame_f_lineno_doc = - ""; - - public final static String frame_f_locals_doc = - ""; - - public final static String frame_f_restricted_doc = - ""; - - public final static String frame_f_trace_doc = - ""; - - // Docs for - public final static String traceback___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String traceback___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String traceback_doc = - ""; - - public final static String traceback___format___doc = - "default object formatter"; - - public final static String traceback___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String traceback___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String traceback___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String traceback___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String traceback___reduce___doc = - "helper for pickle"; - - public final static String traceback___reduce_ex___doc = - "helper for pickle"; - - public final static String traceback___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String traceback___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String traceback___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String traceback___str___doc = - "x.__str__() <==> str(x)"; - - public final static String traceback___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String traceback_tb_frame_doc = - ""; - - public final static String traceback_tb_lasti_doc = - ""; - - public final static String traceback_tb_lineno_doc = - ""; - - public final static String traceback_tb_next_doc = - ""; - -} +// generated by make_pydocs.py + +package org.python.core; + +public class BuiltinDocs { + + // Docs for + public final static String object___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String object___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String object_doc = + "The most base type"; + + public final static String object___format___doc = + "default object formatter"; + + public final static String object___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String object___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String object___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String object___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String object___reduce___doc = + "helper for pickle"; + + public final static String object___reduce_ex___doc = + "helper for pickle"; + + public final static String object___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String object___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String object___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String object___str___doc = + "x.__str__() <==> str(x)"; + + public final static String object___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String type___abstractmethods___doc = + ""; + + public final static String type___base___doc = + "The most base type"; + + public final static String type___bases___doc = + "tuple() -> empty tuple\n" + + "tuple(iterable) -> tuple initialized from iterable's items\n" + + "\n" + + "If the argument is a tuple, the return value is the same object."; + + public final static String type___basicsize___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type___call___doc = + "x.__call__(...) <==> x(...)"; + + public final static String type___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String type___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String type___dict___doc = + ""; + + public final static String type___dictoffset___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type_doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String type___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String type___flags___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type___format___doc = + "default object formatter"; + + public final static String type___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String type___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String type___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String type___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String type___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String type___instancecheck___doc = + "__instancecheck__() -> bool\n" + + "check if an object is an instance"; + + public final static String type___itemsize___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String type___lt___doc = + "x.__lt__(y) <==> x string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String type___mro___doc = + "tuple() -> empty tuple\n" + + "tuple(iterable) -> tuple initialized from iterable's items\n" + + "\n" + + "If the argument is a tuple, the return value is the same object."; + + public final static String type___name___doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String type___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String type___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String type___reduce___doc = + "helper for pickle"; + + public final static String type___reduce_ex___doc = + "helper for pickle"; + + public final static String type___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String type___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String type___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String type___str___doc = + "x.__str__() <==> str(x)"; + + public final static String type___subclasscheck___doc = + "__subclasscheck__() -> bool\n" + + "check if a class is a subclass"; + + public final static String type___subclasses___doc = + "__subclasses__() -> list of immediate subclasses"; + + public final static String type___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String type___weakrefoffset___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type_mro_doc = + "mro() -> list\n" + + "return a type's method resolution order"; + + // Docs for + public final static String unicode___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String unicode___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String unicode___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String unicode___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String unicode_doc = + "unicode(string [, encoding[, errors]]) -> object\n" + + "\n" + + "Create a new Unicode object from the given encoded string.\n" + + "encoding defaults to the current default string encoding.\n" + + "errors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'."; + + public final static String unicode___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String unicode___format___doc = + "S.__format__(format_spec) -> unicode\n" + + "\n" + + "Return a formatted version of S as described by format_spec."; + + public final static String unicode___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String unicode___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String unicode___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String unicode___getnewargs___doc = + ""; + + public final static String unicode___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String unicode___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String unicode___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String unicode___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String unicode___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String unicode___len___doc = + "x.__len__() <==> len(x)"; + + public final static String unicode___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String unicode___mul___doc = + "x.__mul__(n) <==> x*n"; + + public final static String unicode___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String unicode___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String unicode___reduce___doc = + "helper for pickle"; + + public final static String unicode___reduce_ex___doc = + "helper for pickle"; + + public final static String unicode___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String unicode___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String unicode___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String unicode___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String unicode___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes\n" + + "\n" + + ""; + + public final static String unicode___str___doc = + "x.__str__() <==> str(x)"; + + public final static String unicode___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String unicode__formatter_field_name_split_doc = + ""; + + public final static String unicode__formatter_parser_doc = + ""; + + public final static String unicode_capitalize_doc = + "S.capitalize() -> unicode\n" + + "\n" + + "Return a capitalized version of S, i.e. make the first character\n" + + "have upper case and the rest lower case."; + + public final static String unicode_center_doc = + "S.center(width[, fillchar]) -> unicode\n" + + "\n" + + "Return S centered in a Unicode string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String unicode_count_doc = + "S.count(sub[, start[, end]]) -> int\n" + + "\n" + + "Return the number of non-overlapping occurrences of substring sub in\n" + + "Unicode string S[start:end]. Optional arguments start and end are\n" + + "interpreted as in slice notation."; + + public final static String unicode_decode_doc = + "S.decode([encoding[,errors]]) -> string or unicode\n" + + "\n" + + "Decodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + + "as well as any other name registerd with codecs.register_error that is\n" + + "able to handle UnicodeDecodeErrors."; + + public final static String unicode_encode_doc = + "S.encode([encoding[,errors]]) -> string or unicode\n" + + "\n" + + "Encodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + + "'xmlcharrefreplace' as well as any other name registered with\n" + + "codecs.register_error that can handle UnicodeEncodeErrors."; + + public final static String unicode_endswith_doc = + "S.endswith(suffix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S ends with the specified suffix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "suffix can also be a tuple of strings to try."; + + public final static String unicode_expandtabs_doc = + "S.expandtabs([tabsize]) -> unicode\n" + + "\n" + + "Return a copy of S where all tab characters are expanded using spaces.\n" + + "If tabsize is not given, a tab size of 8 characters is assumed."; + + public final static String unicode_find_doc = + "S.find(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the lowest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String unicode_format_doc = + "S.format(*args, **kwargs) -> unicode\n" + + "\n" + + "Return a formatted version of S, using substitutions from args and kwargs.\n" + + "The substitutions are identified by braces ('{' and '}')."; + + public final static String unicode_index_doc = + "S.index(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.find() but raise ValueError when the substring is not found."; + + public final static String unicode_isalnum_doc = + "S.isalnum() -> bool\n" + + "\n" + + "Return True if all characters in S are alphanumeric\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_isalpha_doc = + "S.isalpha() -> bool\n" + + "\n" + + "Return True if all characters in S are alphabetic\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_isdecimal_doc = + "S.isdecimal() -> bool\n" + + "\n" + + "Return True if there are only decimal characters in S,\n" + + "False otherwise."; + + public final static String unicode_isdigit_doc = + "S.isdigit() -> bool\n" + + "\n" + + "Return True if all characters in S are digits\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_islower_doc = + "S.islower() -> bool\n" + + "\n" + + "Return True if all cased characters in S are lowercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String unicode_isnumeric_doc = + "S.isnumeric() -> bool\n" + + "\n" + + "Return True if there are only numeric characters in S,\n" + + "False otherwise."; + + public final static String unicode_isspace_doc = + "S.isspace() -> bool\n" + + "\n" + + "Return True if all characters in S are whitespace\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_istitle_doc = + "S.istitle() -> bool\n" + + "\n" + + "Return True if S is a titlecased string and there is at least one\n" + + "character in S, i.e. upper- and titlecase characters may only\n" + + "follow uncased characters and lowercase characters only cased ones.\n" + + "Return False otherwise."; + + public final static String unicode_isupper_doc = + "S.isupper() -> bool\n" + + "\n" + + "Return True if all cased characters in S are uppercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String unicode_join_doc = + "S.join(iterable) -> unicode\n" + + "\n" + + "Return a string which is the concatenation of the strings in the\n" + + "iterable. The separator between elements is S."; + + public final static String unicode_ljust_doc = + "S.ljust(width[, fillchar]) -> int\n" + + "\n" + + "Return S left-justified in a Unicode string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String unicode_lower_doc = + "S.lower() -> unicode\n" + + "\n" + + "Return a copy of the string S converted to lowercase."; + + public final static String unicode_lstrip_doc = + "S.lstrip([chars]) -> unicode\n" + + "\n" + + "Return a copy of the string S with leading whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is a str, it will be converted to unicode before stripping"; + + public final static String unicode_partition_doc = + "S.partition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, and return the part before it,\n" + + "the separator itself, and the part after it. If the separator is not\n" + + "found, return S and two empty strings."; + + public final static String unicode_replace_doc = + "S.replace(old, new[, count]) -> unicode\n" + + "\n" + + "Return a copy of S with all occurrences of substring\n" + + "old replaced by new. If the optional argument count is\n" + + "given, only the first count occurrences are replaced."; + + public final static String unicode_rfind_doc = + "S.rfind(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the highest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String unicode_rindex_doc = + "S.rindex(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.rfind() but raise ValueError when the substring is not found."; + + public final static String unicode_rjust_doc = + "S.rjust(width[, fillchar]) -> unicode\n" + + "\n" + + "Return S right-justified in a Unicode string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String unicode_rpartition_doc = + "S.rpartition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, starting at the end of S, and return\n" + + "the part before it, the separator itself, and the part after it. If the\n" + + "separator is not found, return two empty strings and S."; + + public final static String unicode_rsplit_doc = + "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in S, using sep as the\n" + + "delimiter string, starting at the end of the string and\n" + + "working to the front. If maxsplit is given, at most maxsplit\n" + + "splits are done. If sep is not specified, any whitespace string\n" + + "is a separator."; + + public final static String unicode_rstrip_doc = + "S.rstrip([chars]) -> unicode\n" + + "\n" + + "Return a copy of the string S with trailing whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is a str, it will be converted to unicode before stripping"; + + public final static String unicode_split_doc = + "S.split([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in S, using sep as the\n" + + "delimiter string. If maxsplit is given, at most maxsplit\n" + + "splits are done. If sep is not specified or is None, any\n" + + "whitespace string is a separator and empty strings are\n" + + "removed from the result."; + + public final static String unicode_splitlines_doc = + "S.splitlines([keepends]) -> list of strings\n" + + "\n" + + "Return a list of the lines in S, breaking at line boundaries.\n" + + "Line breaks are not included in the resulting list unless keepends\n" + + "is given and true."; + + public final static String unicode_startswith_doc = + "S.startswith(prefix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S starts with the specified prefix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "prefix can also be a tuple of strings to try."; + + public final static String unicode_strip_doc = + "S.strip([chars]) -> unicode\n" + + "\n" + + "Return a copy of the string S with leading and trailing\n" + + "whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is a str, it will be converted to unicode before stripping"; + + public final static String unicode_swapcase_doc = + "S.swapcase() -> unicode\n" + + "\n" + + "Return a copy of S with uppercase characters converted to lowercase\n" + + "and vice versa."; + + public final static String unicode_title_doc = + "S.title() -> unicode\n" + + "\n" + + "Return a titlecased version of S, i.e. words start with title case\n" + + "characters, all remaining cased characters have lower case."; + + public final static String unicode_translate_doc = + "S.translate(table) -> unicode\n" + + "\n" + + "Return a copy of the string S, where all characters have been mapped\n" + + "through the given translation table, which must be a mapping of\n" + + "Unicode ordinals to Unicode ordinals, Unicode strings or None.\n" + + "Unmapped characters are left untouched. Characters mapped to None\n" + + "are deleted."; + + public final static String unicode_upper_doc = + "S.upper() -> unicode\n" + + "\n" + + "Return a copy of S converted to uppercase."; + + public final static String unicode_zfill_doc = + "S.zfill(width) -> unicode\n" + + "\n" + + "Pad a numeric string S with zeros on the left, to fill a field\n" + + "of the specified width. The string S is never truncated."; + + // Docs for + public final static String dict___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String dict___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String dict___contains___doc = + "D.__contains__(k) -> True if D has a key k, else False"; + + public final static String dict___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String dict___delitem___doc = + "x.__delitem__(y) <==> del x[y]"; + + public final static String dict_doc = + "dict() -> new empty dictionary\n" + + "dict(mapping) -> new dictionary initialized from a mapping object's\n" + + " (key, value) pairs\n" + + "dict(iterable) -> new dictionary initialized as if via:\n" + + " d = {}\n" + + " for k, v in iterable:\n" + + " d[k] = v\n" + + "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" + + " in the keyword argument list. For example: dict(one=1, two=2)"; + + public final static String dict___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String dict___format___doc = + "default object formatter"; + + public final static String dict___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String dict___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String dict___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String dict___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String dict___hash___doc = + ""; + + public final static String dict___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String dict___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String dict___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String dict___len___doc = + "x.__len__() <==> len(x)"; + + public final static String dict___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String dict___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String dict___reduce___doc = + "helper for pickle"; + + public final static String dict___reduce_ex___doc = + "helper for pickle"; + + public final static String dict___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String dict___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String dict___setitem___doc = + "x.__setitem__(i, y) <==> x[i]=y"; + + public final static String dict___sizeof___doc = + "D.__sizeof__() -> size of D in memory, in bytes"; + + public final static String dict___str___doc = + "x.__str__() <==> str(x)"; + + public final static String dict___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String dict_clear_doc = + "D.clear() -> None. Remove all items from D."; + + public final static String dict_copy_doc = + "D.copy() -> a shallow copy of D"; + + public final static String dict_fromkeys_doc = + "dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.\n" + + "v defaults to None."; + + public final static String dict_get_doc = + "D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None."; + + public final static String dict_has_key_doc = + "D.has_key(k) -> True if D has a key k, else False"; + + public final static String dict_items_doc = + "D.items() -> list of D's (key, value) pairs, as 2-tuples"; + + public final static String dict_iteritems_doc = + "D.iteritems() -> an iterator over the (key, value) items of D"; + + public final static String dict_iterkeys_doc = + "D.iterkeys() -> an iterator over the keys of D"; + + public final static String dict_itervalues_doc = + "D.itervalues() -> an iterator over the values of D"; + + public final static String dict_keys_doc = + "D.keys() -> list of D's keys"; + + public final static String dict_pop_doc = + "D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n" + + "If key is not found, d is returned if given, otherwise KeyError is raised"; + + public final static String dict_popitem_doc = + "D.popitem() -> (k, v), remove and return some (key, value) pair as a\n" + + "2-tuple; but raise KeyError if D is empty."; + + public final static String dict_setdefault_doc = + "D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D"; + + public final static String dict_update_doc = + "D.update(E, **F) -> None. Update D from dict/iterable E and F.\n" + + "If E has a .keys() method, does: for k in E: D[k] = E[k]\n" + + "If E lacks .keys() method, does: for (k, v) in E: D[k] = v\n" + + "In either case, this is followed by: for k in F: D[k] = F[k]"; + + public final static String dict_values_doc = + "D.values() -> list of D's values"; + + public final static String dict_viewitems_doc = + "D.viewitems() -> a set-like object providing a view on D's items"; + + public final static String dict_viewkeys_doc = + "D.viewkeys() -> a set-like object providing a view on D's keys"; + + public final static String dict_viewvalues_doc = + "D.viewvalues() -> an object providing a view on D's values"; + + // Docs for + public final static String list___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String list___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String list___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String list___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String list___delitem___doc = + "x.__delitem__(y) <==> del x[y]"; + + public final static String list___delslice___doc = + "x.__delslice__(i, j) <==> del x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String list_doc = + "list() -> new empty list\n" + + "list(iterable) -> new list initialized from iterable's items"; + + public final static String list___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String list___format___doc = + "default object formatter"; + + public final static String list___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String list___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String list___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String list___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String list___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String list___hash___doc = + ""; + + public final static String list___iadd___doc = + "x.__iadd__(y) <==> x+=y"; + + public final static String list___imul___doc = + "x.__imul__(y) <==> x*=y"; + + public final static String list___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String list___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String list___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String list___len___doc = + "x.__len__() <==> len(x)"; + + public final static String list___lt___doc = + "x.__lt__(y) <==> x x*n"; + + public final static String list___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String list___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String list___reduce___doc = + "helper for pickle"; + + public final static String list___reduce_ex___doc = + "helper for pickle"; + + public final static String list___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String list___reversed___doc = + "L.__reversed__() -- return a reverse iterator over the list"; + + public final static String list___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String list___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String list___setitem___doc = + "x.__setitem__(i, y) <==> x[i]=y"; + + public final static String list___setslice___doc = + "x.__setslice__(i, j, y) <==> x[i:j]=y\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String list___sizeof___doc = + "L.__sizeof__() -- size of L in memory, in bytes"; + + public final static String list___str___doc = + "x.__str__() <==> str(x)"; + + public final static String list___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String list_append_doc = + "L.append(object) -- append object to end"; + + public final static String list_count_doc = + "L.count(value) -> integer -- return number of occurrences of value"; + + public final static String list_extend_doc = + "L.extend(iterable) -- extend list by appending elements from the iterable"; + + public final static String list_index_doc = + "L.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + + "Raises ValueError if the value is not present."; + + public final static String list_insert_doc = + "L.insert(index, object) -- insert object before index"; + + public final static String list_pop_doc = + "L.pop([index]) -> item -- remove and return item at index (default last).\n" + + "Raises IndexError if list is empty or index is out of range."; + + public final static String list_remove_doc = + "L.remove(value) -- remove first occurrence of value.\n" + + "Raises ValueError if the value is not present."; + + public final static String list_reverse_doc = + "L.reverse() -- reverse *IN PLACE*"; + + public final static String list_sort_doc = + "L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;\n" + + "cmp(x, y) -> -1, 0, 1"; + + // Docs for + public final static String slice___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String slice___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String slice___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String slice_doc = + "slice([start,] stop[, step])\n" + + "\n" + + "Create a slice object. This is used for extended slicing (e.g. a[0:10:2])."; + + public final static String slice___format___doc = + "default object formatter"; + + public final static String slice___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String slice___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String slice___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String slice___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String slice___reduce___doc = + "Return state information for pickling."; + + public final static String slice___reduce_ex___doc = + "helper for pickle"; + + public final static String slice___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String slice___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String slice___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String slice___str___doc = + "x.__str__() <==> str(x)"; + + public final static String slice___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String slice_indices_doc = + "S.indices(len) -> (start, stop, stride)\n" + + "\n" + + "Assuming a sequence of length len, calculate the start and stop\n" + + "indices, and the stride length of the extended slice described by\n" + + "S. Out of bounds indices are clipped in a manner consistent with the\n" + + "handling of normal slices."; + + public final static String slice_start_doc = + ""; + + public final static String slice_step_doc = + ""; + + public final static String slice_stop_doc = + ""; + + // Docs for + public final static String super___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String super___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String super_doc = + "super(type) -> unbound super object\n" + + "super(type, obj) -> bound super object; requires isinstance(obj, type)\n" + + "super(type, type2) -> bound super object; requires issubclass(type2, type)\n" + + "Typical use to call a cooperative superclass method:\n" + + "class C(B):\n" + + " def meth(self, arg):\n" + + " super(C, self).meth(arg)"; + + public final static String super___format___doc = + "default object formatter"; + + public final static String super___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String super___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String super___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String super___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String super___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String super___reduce___doc = + "helper for pickle"; + + public final static String super___reduce_ex___doc = + "helper for pickle"; + + public final static String super___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String super___self___doc = + "the instance invoking super(); may be None"; + + public final static String super___self_class___doc = + "the type of the instance invoking super(); may be None"; + + public final static String super___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String super___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String super___str___doc = + "x.__str__() <==> str(x)"; + + public final static String super___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String super___thisclass___doc = + "the class invoking super()"; + + // Docs for + public final static String staticmethod___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String staticmethod___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String staticmethod_doc = + "staticmethod(function) -> method\n" + + "\n" + + "Convert a function to be a static method.\n" + + "\n" + + "A static method does not receive an implicit first argument.\n" + + "To declare a static method, use this idiom:\n" + + "\n" + + " class C:\n" + + " def f(arg1, arg2, ...): ...\n" + + " f = staticmethod(f)\n" + + "\n" + + "It can be called either on the class (e.g. C.f()) or on an instance\n" + + "(e.g. C().f()). The instance is ignored except for its class.\n" + + "\n" + + "Static methods in Python are similar to those found in Java or C++.\n" + + "For a more advanced concept, see the classmethod builtin."; + + public final static String staticmethod___format___doc = + "default object formatter"; + + public final static String staticmethod___func___doc = + ""; + + public final static String staticmethod___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String staticmethod___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String staticmethod___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String staticmethod___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String staticmethod___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String staticmethod___reduce___doc = + "helper for pickle"; + + public final static String staticmethod___reduce_ex___doc = + "helper for pickle"; + + public final static String staticmethod___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String staticmethod___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String staticmethod___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String staticmethod___str___doc = + "x.__str__() <==> str(x)"; + + public final static String staticmethod___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String float___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String float___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String float___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String float___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String float___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String float___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String float___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String float_doc = + "float(x) -> floating point number\n" + + "\n" + + "Convert a string or number to a floating point number, if possible."; + + public final static String float___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String float___float___doc = + "x.__float__() <==> float(x)"; + + public final static String float___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String float___format___doc = + "float.__format__(format_spec) -> string\n" + + "\n" + + "Formats the float according to format_spec."; + + public final static String float___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String float___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String float___getformat___doc = + "float.__getformat__(typestr) -> string\n" + + "\n" + + "You probably don't want to use this function. It exists mainly to be\n" + + "used in Python's test suite.\n" + + "\n" + + "typestr must be 'double' or 'float'. This function returns whichever of\n" + + "'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the\n" + + "format of floating point numbers used by the C type named by typestr."; + + public final static String float___getnewargs___doc = + ""; + + public final static String float___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String float___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String float___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String float___int___doc = + "x.__int__() <==> int(x)"; + + public final static String float___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String float___long___doc = + "x.__long__() <==> long(x)"; + + public final static String float___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String float___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String float___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String float___neg___doc = + "x.__neg__() <==> -x"; + + public final static String float___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String float___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String float___pos___doc = + "x.__pos__() <==> +x"; + + public final static String float___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String float___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String float___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String float___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String float___reduce___doc = + "helper for pickle"; + + public final static String float___reduce_ex___doc = + "helper for pickle"; + + public final static String float___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String float___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String float___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String float___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String float___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String float___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String float___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String float___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String float___setformat___doc = + "float.__setformat__(typestr, fmt) -> None\n" + + "\n" + + "You probably don't want to use this function. It exists mainly to be\n" + + "used in Python's test suite.\n" + + "\n" + + "typestr must be 'double' or 'float'. fmt must be one of 'unknown',\n" + + "'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n" + + "one of the latter two if it appears to match the underlying C reality.\n" + + "\n" + + "Overrides the automatic determination of C-level floating point type.\n" + + "This affects how floats are converted to and from binary strings."; + + public final static String float___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String float___str___doc = + "x.__str__() <==> str(x)"; + + public final static String float___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String float___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String float___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String float___trunc___doc = + "Returns the Integral closest to x between 0 and x."; + + public final static String float_as_integer_ratio_doc = + "float.as_integer_ratio() -> (int, int)\n" + + "\n" + + "Returns a pair of integers, whose ratio is exactly equal to the original\n" + + "float and with a positive denominator.\n" + + "Raises OverflowError on infinities and a ValueError on NaNs.\n" + + "\n" + + ">>> (10.0).as_integer_ratio()\n" + + "(10, 1)\n" + + ">>> (0.0).as_integer_ratio()\n" + + "(0, 1)\n" + + ">>> (-.25).as_integer_ratio()\n" + + "(-1, 4)"; + + public final static String float_conjugate_doc = + "Returns self, the complex conjugate of any float."; + + public final static String float_fromhex_doc = + "float.fromhex(string) -> float\n" + + "\n" + + "Create a floating-point number from a hexadecimal string.\n" + + ">>> float.fromhex('0x1.ffffp10')\n" + + "2047.984375\n" + + ">>> float.fromhex('-0x1p-1074')\n" + + "-4.9406564584124654e-324"; + + public final static String float_hex_doc = + "float.hex() -> string\n" + + "\n" + + "Return a hexadecimal representation of a floating-point number.\n" + + ">>> (-0.1).hex()\n" + + "'-0x1.999999999999ap-4'\n" + + ">>> 3.14159.hex()\n" + + "'0x1.921f9f01b866ep+1'"; + + public final static String float_imag_doc = + "the imaginary part of a complex number"; + + public final static String float_is_integer_doc = + "Returns True if the float is an integer."; + + public final static String float_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String enumerate___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String enumerate___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String enumerate_doc = + "enumerate(iterable[, start]) -> iterator for index, value of iterable\n" + + "\n" + + "Return an enumerate object. iterable must be another object that supports\n" + + "iteration. The enumerate object yields pairs containing a count (from\n" + + "start, which defaults to zero) and a value yielded by the iterable argument.\n" + + "enumerate is useful for obtaining an indexed list:\n" + + " (0, seq[0]), (1, seq[1]), (2, seq[2]), ..."; + + public final static String enumerate___format___doc = + "default object formatter"; + + public final static String enumerate___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String enumerate___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String enumerate___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String enumerate___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String enumerate___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String enumerate___reduce___doc = + "helper for pickle"; + + public final static String enumerate___reduce_ex___doc = + "helper for pickle"; + + public final static String enumerate___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String enumerate___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String enumerate___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String enumerate___str___doc = + "x.__str__() <==> str(x)"; + + public final static String enumerate___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String enumerate_next_doc = + "x.next() -> the next value, or raise StopIteration"; + + // Docs for + public final static String basestring___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String basestring___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String basestring_doc = + "Type basestring cannot be instantiated; it is the base for str and unicode."; + + public final static String basestring___format___doc = + "default object formatter"; + + public final static String basestring___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String basestring___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String basestring___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String basestring___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String basestring___reduce___doc = + "helper for pickle"; + + public final static String basestring___reduce_ex___doc = + "helper for pickle"; + + public final static String basestring___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String basestring___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String basestring___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String basestring___str___doc = + "x.__str__() <==> str(x)"; + + public final static String basestring___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String long___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String long___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String long___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String long___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String long___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String long___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String long___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String long___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String long___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String long_doc = + "long(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to a long integer, if possible. A floating\n" + + "point argument will be truncated towards zero (this does not include a\n" + + "string representation of a floating point number!) When converting a\n" + + "string, use the optional base. It is an error to supply a base when\n" + + "converting a non-string."; + + public final static String long___float___doc = + "x.__float__() <==> float(x)"; + + public final static String long___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String long___format___doc = + ""; + + public final static String long___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String long___getnewargs___doc = + ""; + + public final static String long___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String long___hex___doc = + "x.__hex__() <==> hex(x)"; + + public final static String long___index___doc = + "x[y:z] <==> x[y.__index__():z.__index__()]"; + + public final static String long___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String long___int___doc = + "x.__int__() <==> int(x)"; + + public final static String long___invert___doc = + "x.__invert__() <==> ~x"; + + public final static String long___long___doc = + "x.__long__() <==> long(x)"; + + public final static String long___lshift___doc = + "x.__lshift__(y) <==> x< x%y"; + + public final static String long___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String long___neg___doc = + "x.__neg__() <==> -x"; + + public final static String long___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String long___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String long___oct___doc = + "x.__oct__() <==> oct(x)"; + + public final static String long___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String long___pos___doc = + "x.__pos__() <==> +x"; + + public final static String long___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String long___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String long___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String long___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String long___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String long___reduce___doc = + "helper for pickle"; + + public final static String long___reduce_ex___doc = + "helper for pickle"; + + public final static String long___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String long___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String long___rlshift___doc = + "x.__rlshift__(y) <==> y< y%x"; + + public final static String long___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String long___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String long___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String long___rrshift___doc = + "x.__rrshift__(y) <==> y>>x"; + + public final static String long___rshift___doc = + "x.__rshift__(y) <==> x>>y"; + + public final static String long___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String long___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String long___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String long___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String long___sizeof___doc = + "Returns size in memory, in bytes"; + + public final static String long___str___doc = + "x.__str__() <==> str(x)"; + + public final static String long___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String long___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String long___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String long___trunc___doc = + "Truncating an Integral returns itself."; + + public final static String long___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String long_bit_length_doc = + "long.bit_length() -> int or long\n" + + "\n" + + "Number of bits necessary to represent self in binary.\n" + + ">>> bin(37L)\n" + + "'0b100101'\n" + + ">>> (37L).bit_length()\n" + + "6"; + + public final static String long_conjugate_doc = + "Returns self, the complex conjugate of any long."; + + public final static String long_denominator_doc = + "the denominator of a rational number in lowest terms"; + + public final static String long_imag_doc = + "the imaginary part of a complex number"; + + public final static String long_numerator_doc = + "the numerator of a rational number in lowest terms"; + + public final static String long_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String tuple___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String tuple___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String tuple___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String tuple___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String tuple_doc = + "tuple() -> empty tuple\n" + + "tuple(iterable) -> tuple initialized from iterable's items\n" + + "\n" + + "If the argument is a tuple, the return value is the same object."; + + public final static String tuple___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String tuple___format___doc = + "default object formatter"; + + public final static String tuple___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String tuple___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String tuple___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String tuple___getnewargs___doc = + ""; + + public final static String tuple___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String tuple___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String tuple___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String tuple___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String tuple___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String tuple___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String tuple___len___doc = + "x.__len__() <==> len(x)"; + + public final static String tuple___lt___doc = + "x.__lt__(y) <==> x x*n"; + + public final static String tuple___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String tuple___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String tuple___reduce___doc = + "helper for pickle"; + + public final static String tuple___reduce_ex___doc = + "helper for pickle"; + + public final static String tuple___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String tuple___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String tuple___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String tuple___sizeof___doc = + "T.__sizeof__() -- size of T in memory, in bytes"; + + public final static String tuple___str___doc = + "x.__str__() <==> str(x)"; + + public final static String tuple___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String tuple_count_doc = + "T.count(value) -> integer -- return number of occurrences of value"; + + public final static String tuple_index_doc = + "T.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + + "Raises ValueError if the value is not present."; + + // Docs for + public final static String str___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String str___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String str___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String str___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String str_doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String str___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String str___format___doc = + "S.__format__(format_spec) -> string\n" + + "\n" + + "Return a formatted version of S as described by format_spec."; + + public final static String str___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String str___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String str___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String str___getnewargs___doc = + ""; + + public final static String str___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String str___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String str___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String str___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String str___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String str___len___doc = + "x.__len__() <==> len(x)"; + + public final static String str___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String str___mul___doc = + "x.__mul__(n) <==> x*n"; + + public final static String str___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String str___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String str___reduce___doc = + "helper for pickle"; + + public final static String str___reduce_ex___doc = + "helper for pickle"; + + public final static String str___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String str___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String str___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String str___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String str___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes"; + + public final static String str___str___doc = + "x.__str__() <==> str(x)"; + + public final static String str___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String str__formatter_field_name_split_doc = + ""; + + public final static String str__formatter_parser_doc = + ""; + + public final static String str_capitalize_doc = + "S.capitalize() -> string\n" + + "\n" + + "Return a copy of the string S with only its first character\n" + + "capitalized."; + + public final static String str_center_doc = + "S.center(width[, fillchar]) -> string\n" + + "\n" + + "Return S centered in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String str_count_doc = + "S.count(sub[, start[, end]]) -> int\n" + + "\n" + + "Return the number of non-overlapping occurrences of substring sub in\n" + + "string S[start:end]. Optional arguments start and end are interpreted\n" + + "as in slice notation."; + + public final static String str_decode_doc = + "S.decode([encoding[,errors]]) -> object\n" + + "\n" + + "Decodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + + "as well as any other name registered with codecs.register_error that is\n" + + "able to handle UnicodeDecodeErrors."; + + public final static String str_encode_doc = + "S.encode([encoding[,errors]]) -> object\n" + + "\n" + + "Encodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + + "'xmlcharrefreplace' as well as any other name registered with\n" + + "codecs.register_error that is able to handle UnicodeEncodeErrors."; + + public final static String str_endswith_doc = + "S.endswith(suffix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S ends with the specified suffix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "suffix can also be a tuple of strings to try."; + + public final static String str_expandtabs_doc = + "S.expandtabs([tabsize]) -> string\n" + + "\n" + + "Return a copy of S where all tab characters are expanded using spaces.\n" + + "If tabsize is not given, a tab size of 8 characters is assumed."; + + public final static String str_find_doc = + "S.find(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the lowest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String str_format_doc = + "S.format(*args, **kwargs) -> string\n" + + "\n" + + "Return a formatted version of S, using substitutions from args and kwargs.\n" + + "The substitutions are identified by braces ('{' and '}')."; + + public final static String str_index_doc = + "S.index(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.find() but raise ValueError when the substring is not found."; + + public final static String str_isalnum_doc = + "S.isalnum() -> bool\n" + + "\n" + + "Return True if all characters in S are alphanumeric\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_isalpha_doc = + "S.isalpha() -> bool\n" + + "\n" + + "Return True if all characters in S are alphabetic\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_isdigit_doc = + "S.isdigit() -> bool\n" + + "\n" + + "Return True if all characters in S are digits\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_islower_doc = + "S.islower() -> bool\n" + + "\n" + + "Return True if all cased characters in S are lowercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String str_isspace_doc = + "S.isspace() -> bool\n" + + "\n" + + "Return True if all characters in S are whitespace\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_istitle_doc = + "S.istitle() -> bool\n" + + "\n" + + "Return True if S is a titlecased string and there is at least one\n" + + "character in S, i.e. uppercase characters may only follow uncased\n" + + "characters and lowercase characters only cased ones. Return False\n" + + "otherwise."; + + public final static String str_isupper_doc = + "S.isupper() -> bool\n" + + "\n" + + "Return True if all cased characters in S are uppercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String str_join_doc = + "S.join(iterable) -> string\n" + + "\n" + + "Return a string which is the concatenation of the strings in the\n" + + "iterable. The separator between elements is S."; + + public final static String str_ljust_doc = + "S.ljust(width[, fillchar]) -> string\n" + + "\n" + + "Return S left-justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String str_lower_doc = + "S.lower() -> string\n" + + "\n" + + "Return a copy of the string S converted to lowercase."; + + public final static String str_lstrip_doc = + "S.lstrip([chars]) -> string or unicode\n" + + "\n" + + "Return a copy of the string S with leading whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is unicode, S will be converted to unicode before stripping"; + + public final static String str_partition_doc = + "S.partition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, and return the part before it,\n" + + "the separator itself, and the part after it. If the separator is not\n" + + "found, return S and two empty strings."; + + public final static String str_replace_doc = + "S.replace(old, new[, count]) -> string\n" + + "\n" + + "Return a copy of string S with all occurrences of substring\n" + + "old replaced by new. If the optional argument count is\n" + + "given, only the first count occurrences are replaced."; + + public final static String str_rfind_doc = + "S.rfind(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the highest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String str_rindex_doc = + "S.rindex(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.rfind() but raise ValueError when the substring is not found."; + + public final static String str_rjust_doc = + "S.rjust(width[, fillchar]) -> string\n" + + "\n" + + "Return S right-justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String str_rpartition_doc = + "S.rpartition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, starting at the end of S, and return\n" + + "the part before it, the separator itself, and the part after it. If the\n" + + "separator is not found, return two empty strings and S."; + + public final static String str_rsplit_doc = + "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in the string S, using sep as the\n" + + "delimiter string, starting at the end of the string and working\n" + + "to the front. If maxsplit is given, at most maxsplit splits are\n" + + "done. If sep is not specified or is None, any whitespace string\n" + + "is a separator."; + + public final static String str_rstrip_doc = + "S.rstrip([chars]) -> string or unicode\n" + + "\n" + + "Return a copy of the string S with trailing whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is unicode, S will be converted to unicode before stripping"; + + public final static String str_split_doc = + "S.split([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in the string S, using sep as the\n" + + "delimiter string. If maxsplit is given, at most maxsplit\n" + + "splits are done. If sep is not specified or is None, any\n" + + "whitespace string is a separator and empty strings are removed\n" + + "from the result."; + + public final static String str_splitlines_doc = + "S.splitlines([keepends]) -> list of strings\n" + + "\n" + + "Return a list of the lines in S, breaking at line boundaries.\n" + + "Line breaks are not included in the resulting list unless keepends\n" + + "is given and true."; + + public final static String str_startswith_doc = + "S.startswith(prefix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S starts with the specified prefix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "prefix can also be a tuple of strings to try."; + + public final static String str_strip_doc = + "S.strip([chars]) -> string or unicode\n" + + "\n" + + "Return a copy of the string S with leading and trailing\n" + + "whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is unicode, S will be converted to unicode before stripping"; + + public final static String str_swapcase_doc = + "S.swapcase() -> string\n" + + "\n" + + "Return a copy of the string S with uppercase characters\n" + + "converted to lowercase and vice versa."; + + public final static String str_title_doc = + "S.title() -> string\n" + + "\n" + + "Return a titlecased version of S, i.e. words start with uppercase\n" + + "characters, all remaining cased characters have lowercase."; + + public final static String str_translate_doc = + "S.translate(table [,deletechars]) -> string\n" + + "\n" + + "Return a copy of the string S, where all characters occurring\n" + + "in the optional argument deletechars are removed, and the\n" + + "remaining characters have been mapped through the given\n" + + "translation table, which must be a string of length 256."; + + public final static String str_upper_doc = + "S.upper() -> string\n" + + "\n" + + "Return a copy of the string S converted to uppercase."; + + public final static String str_zfill_doc = + "S.zfill(width) -> string\n" + + "\n" + + "Pad a numeric string S with zeros on the left, to fill a field\n" + + "of the specified width. The string S is never truncated."; + + // Docs for + public final static String property___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String property___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String property___delete___doc = + "descr.__delete__(obj)"; + + public final static String property_doc = + "property(fget=None, fset=None, fdel=None, doc=None) -> property attribute\n" + + "\n" + + "fget is a function to be used for getting an attribute value, and likewise\n" + + "fset is a function for setting, and fdel a function for del'ing, an\n" + + "attribute. Typical use is to define a managed attribute x:\n" + + "class C(object):\n" + + " def getx(self): return self._x\n" + + " def setx(self, value): self._x = value\n" + + " def delx(self): del self._x\n" + + " x = property(getx, setx, delx, \"I'm the 'x' property.\")\n" + + "\n" + + "Decorators make defining new properties or modifying existing ones easy:\n" + + "class C(object):\n" + + " @property\n" + + " def x(self): return self._x\n" + + " @x.setter\n" + + " def x(self, value): self._x = value\n" + + " @x.deleter\n" + + " def x(self): del self._x\n" + + ""; + + public final static String property___format___doc = + "default object formatter"; + + public final static String property___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String property___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String property___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String property___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String property___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String property___reduce___doc = + "helper for pickle"; + + public final static String property___reduce_ex___doc = + "helper for pickle"; + + public final static String property___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String property___set___doc = + "descr.__set__(obj, value)"; + + public final static String property___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String property___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String property___str___doc = + "x.__str__() <==> str(x)"; + + public final static String property___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String property_deleter_doc = + "Descriptor to change the deleter on a property."; + + public final static String property_fdel_doc = + ""; + + public final static String property_fget_doc = + ""; + + public final static String property_fset_doc = + ""; + + public final static String property_getter_doc = + "Descriptor to change the getter on a property."; + + public final static String property_setter_doc = + "Descriptor to change the setter on a property."; + + // Docs for + public final static String int___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String int___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String int___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String int___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String int___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String int___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String int___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String int___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String int___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String int_doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String int___float___doc = + "x.__float__() <==> float(x)"; + + public final static String int___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String int___format___doc = + ""; + + public final static String int___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String int___getnewargs___doc = + ""; + + public final static String int___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String int___hex___doc = + "x.__hex__() <==> hex(x)"; + + public final static String int___index___doc = + "x[y:z] <==> x[y.__index__():z.__index__()]"; + + public final static String int___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String int___int___doc = + "x.__int__() <==> int(x)"; + + public final static String int___invert___doc = + "x.__invert__() <==> ~x"; + + public final static String int___long___doc = + "x.__long__() <==> long(x)"; + + public final static String int___lshift___doc = + "x.__lshift__(y) <==> x< x%y"; + + public final static String int___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String int___neg___doc = + "x.__neg__() <==> -x"; + + public final static String int___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String int___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String int___oct___doc = + "x.__oct__() <==> oct(x)"; + + public final static String int___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String int___pos___doc = + "x.__pos__() <==> +x"; + + public final static String int___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String int___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String int___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String int___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String int___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String int___reduce___doc = + "helper for pickle"; + + public final static String int___reduce_ex___doc = + "helper for pickle"; + + public final static String int___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String int___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String int___rlshift___doc = + "x.__rlshift__(y) <==> y< y%x"; + + public final static String int___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String int___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String int___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String int___rrshift___doc = + "x.__rrshift__(y) <==> y>>x"; + + public final static String int___rshift___doc = + "x.__rshift__(y) <==> x>>y"; + + public final static String int___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String int___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String int___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String int___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String int___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String int___str___doc = + "x.__str__() <==> str(x)"; + + public final static String int___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String int___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String int___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String int___trunc___doc = + "Truncating an Integral returns itself."; + + public final static String int___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String int_bit_length_doc = + "int.bit_length() -> int\n" + + "\n" + + "Number of bits necessary to represent self in binary.\n" + + ">>> bin(37)\n" + + "'0b100101'\n" + + ">>> (37).bit_length()\n" + + "6"; + + public final static String int_conjugate_doc = + "Returns self, the complex conjugate of any int."; + + public final static String int_denominator_doc = + "the denominator of a rational number in lowest terms"; + + public final static String int_imag_doc = + "the imaginary part of a complex number"; + + public final static String int_numerator_doc = + "the numerator of a rational number in lowest terms"; + + public final static String int_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String xrange___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String xrange___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String xrange_doc = + "xrange([start,] stop[, step]) -> xrange object\n" + + "\n" + + "Like range(), but instead of returning a list, returns an object that\n" + + "generates the numbers in the range on demand. For looping, this is \n" + + "slightly faster than range() and more memory efficient."; + + public final static String xrange___format___doc = + "default object formatter"; + + public final static String xrange___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String xrange___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String xrange___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String xrange___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String xrange___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String xrange___len___doc = + "x.__len__() <==> len(x)"; + + public final static String xrange___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String xrange___reduce___doc = + ""; + + public final static String xrange___reduce_ex___doc = + "helper for pickle"; + + public final static String xrange___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String xrange___reversed___doc = + "Returns a reverse iterator."; + + public final static String xrange___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String xrange___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String xrange___str___doc = + "x.__str__() <==> str(x)"; + + public final static String xrange___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String file___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String file___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String file_doc = + "file(name[, mode[, buffering]]) -> file object\n" + + "\n" + + "Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n" + + "writing or appending. The file will be created if it doesn't exist\n" + + "when opened for writing or appending; it will be truncated when\n" + + "opened for writing. Add a 'b' to the mode for binary files.\n" + + "Add a '+' to the mode to allow simultaneous reading and writing.\n" + + "If the buffering argument is given, 0 means unbuffered, 1 means line\n" + + "buffered, and larger numbers specify the buffer size. The preferred way\n" + + "to open a file is with the builtin open() function.\n" + + "Add a 'U' to mode to open the file for input with universal newline\n" + + "support. Any line ending in the input file will be seen as a '\\n'\n" + + "in Python. Also, a file so opened gains the attribute 'newlines';\n" + + "the value for this attribute is one of None (no newline read yet),\n" + + "'\\r', '\\n', '\\r\\n' or a tuple containing all the newline types seen.\n" + + "\n" + + "'U' cannot be combined with 'w' or '+' mode.\n" + + ""; + + public final static String file___enter___doc = + "__enter__() -> self."; + + public final static String file___exit___doc = + "__exit__(*excinfo) -> None. Closes the file."; + + public final static String file___format___doc = + "default object formatter"; + + public final static String file___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String file___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String file___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String file___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String file___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String file___reduce___doc = + "helper for pickle"; + + public final static String file___reduce_ex___doc = + "helper for pickle"; + + public final static String file___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String file___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String file___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String file___str___doc = + "x.__str__() <==> str(x)"; + + public final static String file___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String file_close_doc = + "close() -> None or (perhaps) an integer. Close the file.\n" + + "\n" + + "Sets data attribute .closed to True. A closed file cannot be used for\n" + + "further I/O operations. close() may be called more than once without\n" + + "error. Some kinds of file objects (for example, opened by popen())\n" + + "may return an exit status upon closing."; + + public final static String file_closed_doc = + "True if the file is closed"; + + public final static String file_encoding_doc = + "file encoding"; + + public final static String file_errors_doc = + "Unicode error handler"; + + public final static String file_fileno_doc = + "fileno() -> integer \"file descriptor\".\n" + + "\n" + + "This is needed for lower-level file interfaces, such os.read()."; + + public final static String file_flush_doc = + "flush() -> None. Flush the internal I/O buffer."; + + public final static String file_isatty_doc = + "isatty() -> true or false. True if the file is connected to a tty device."; + + public final static String file_mode_doc = + "file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"; + + public final static String file_name_doc = + "file name"; + + public final static String file_newlines_doc = + "end-of-line convention used in this file"; + + public final static String file_next_doc = + "x.next() -> the next value, or raise StopIteration"; + + public final static String file_read_doc = + "read([size]) -> read at most size bytes, returned as a string.\n" + + "\n" + + "If the size argument is negative or omitted, read until EOF is reached.\n" + + "Notice that when in non-blocking mode, less data than what was requested\n" + + "may be returned, even if no size parameter was given."; + + public final static String file_readinto_doc = + "readinto() -> Undocumented. Don't use this; it may go away."; + + public final static String file_readline_doc = + "readline([size]) -> next line from the file, as a string.\n" + + "\n" + + "Retain newline. A non-negative size argument limits the maximum\n" + + "number of bytes to return (an incomplete line may be returned then).\n" + + "Return an empty string at EOF."; + + public final static String file_readlines_doc = + "readlines([size]) -> list of strings, each a line from the file.\n" + + "\n" + + "Call readline() repeatedly and return a list of the lines so read.\n" + + "The optional size argument, if given, is an approximate bound on the\n" + + "total number of bytes in the lines returned."; + + public final static String file_seek_doc = + "seek(offset[, whence]) -> None. Move to new file position.\n" + + "\n" + + "Argument offset is a byte count. Optional argument whence defaults to\n" + + "0 (offset from start of file, offset should be >= 0); other values are 1\n" + + "(move relative to current position, positive or negative), and 2 (move\n" + + "relative to end of file, usually negative, although many platforms allow\n" + + "seeking beyond the end of a file). If the file is opened in text mode,\n" + + "only offsets returned by tell() are legal. Use of other offsets causes\n" + + "undefined behavior.\n" + + "Note that not all file objects are seekable."; + + public final static String file_softspace_doc = + "flag indicating that a space needs to be printed; used by print"; + + public final static String file_tell_doc = + "tell() -> current file position, an integer (may be a long integer)."; + + public final static String file_truncate_doc = + "truncate([size]) -> None. Truncate the file to at most size bytes.\n" + + "\n" + + "Size defaults to the current file position, as returned by tell()."; + + public final static String file_write_doc = + "write(str) -> None. Write string str to file.\n" + + "\n" + + "Note that due to buffering, flush() or close() may be needed before\n" + + "the file on disk reflects the data written."; + + public final static String file_writelines_doc = + "writelines(sequence_of_strings) -> None. Write the strings to the file.\n" + + "\n" + + "Note that newlines are not added. The sequence can be any iterable object\n" + + "producing strings. This is equivalent to calling write() for each string."; + + public final static String file_xreadlines_doc = + "xreadlines() -> returns self.\n" + + "\n" + + "For backward compatibility. File objects now include the performance\n" + + "optimizations previously implemented in the xreadlines module."; + + // Docs for + public final static String complex___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String complex___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String complex___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String complex___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String complex___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String complex___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String complex___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String complex_doc = + "complex(real[, imag]) -> complex number\n" + + "\n" + + "Create a complex number from a real part and an optional imaginary part.\n" + + "This is equivalent to (real + imag*1j) where imag defaults to 0."; + + public final static String complex___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String complex___float___doc = + "x.__float__() <==> float(x)"; + + public final static String complex___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String complex___format___doc = + "complex.__format__() -> str\n" + + "\n" + + "Converts to a string according to format_spec."; + + public final static String complex___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String complex___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String complex___getnewargs___doc = + ""; + + public final static String complex___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String complex___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String complex___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String complex___int___doc = + "x.__int__() <==> int(x)"; + + public final static String complex___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String complex___long___doc = + "x.__long__() <==> long(x)"; + + public final static String complex___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String complex___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String complex___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String complex___neg___doc = + "x.__neg__() <==> -x"; + + public final static String complex___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String complex___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String complex___pos___doc = + "x.__pos__() <==> +x"; + + public final static String complex___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String complex___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String complex___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String complex___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String complex___reduce___doc = + "helper for pickle"; + + public final static String complex___reduce_ex___doc = + "helper for pickle"; + + public final static String complex___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String complex___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String complex___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String complex___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String complex___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String complex___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String complex___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String complex___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String complex___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String complex___str___doc = + "x.__str__() <==> str(x)"; + + public final static String complex___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String complex___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String complex___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String complex_conjugate_doc = + "complex.conjugate() -> complex\n" + + "\n" + + "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j."; + + public final static String complex_imag_doc = + "the imaginary part of a complex number"; + + public final static String complex_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String bool___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String bool___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String bool___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String bool___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String bool___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String bool___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String bool___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String bool___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String bool___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String bool_doc = + "bool(x) -> bool\n" + + "\n" + + "Returns True when the argument x is true, False otherwise.\n" + + "The builtins True and False are the only two instances of the class bool.\n" + + "The class bool is a subclass of the class int, and cannot be subclassed."; + + public final static String bool___float___doc = + "x.__float__() <==> float(x)"; + + public final static String bool___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String bool___format___doc = + ""; + + public final static String bool___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String bool___getnewargs___doc = + ""; + + public final static String bool___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String bool___hex___doc = + "x.__hex__() <==> hex(x)"; + + public final static String bool___index___doc = + "x[y:z] <==> x[y.__index__():z.__index__()]"; + + public final static String bool___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String bool___int___doc = + "x.__int__() <==> int(x)"; + + public final static String bool___invert___doc = + "x.__invert__() <==> ~x"; + + public final static String bool___long___doc = + "x.__long__() <==> long(x)"; + + public final static String bool___lshift___doc = + "x.__lshift__(y) <==> x< x%y"; + + public final static String bool___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String bool___neg___doc = + "x.__neg__() <==> -x"; + + public final static String bool___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String bool___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String bool___oct___doc = + "x.__oct__() <==> oct(x)"; + + public final static String bool___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String bool___pos___doc = + "x.__pos__() <==> +x"; + + public final static String bool___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String bool___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String bool___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String bool___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String bool___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String bool___reduce___doc = + "helper for pickle"; + + public final static String bool___reduce_ex___doc = + "helper for pickle"; + + public final static String bool___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String bool___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String bool___rlshift___doc = + "x.__rlshift__(y) <==> y< y%x"; + + public final static String bool___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String bool___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String bool___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String bool___rrshift___doc = + "x.__rrshift__(y) <==> y>>x"; + + public final static String bool___rshift___doc = + "x.__rshift__(y) <==> x>>y"; + + public final static String bool___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String bool___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String bool___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String bool___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String bool___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String bool___str___doc = + "x.__str__() <==> str(x)"; + + public final static String bool___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String bool___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String bool___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String bool___trunc___doc = + "Truncating an Integral returns itself."; + + public final static String bool___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String bool_bit_length_doc = + "int.bit_length() -> int\n" + + "\n" + + "Number of bits necessary to represent self in binary.\n" + + ">>> bin(37)\n" + + "'0b100101'\n" + + ">>> (37).bit_length()\n" + + "6"; + + public final static String bool_conjugate_doc = + "Returns self, the complex conjugate of any int."; + + public final static String bool_denominator_doc = + "the denominator of a rational number in lowest terms"; + + public final static String bool_imag_doc = + "the imaginary part of a complex number"; + + public final static String bool_numerator_doc = + "the numerator of a rational number in lowest terms"; + + public final static String bool_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String classmethod___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String classmethod___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String classmethod_doc = + "classmethod(function) -> method\n" + + "\n" + + "Convert a function to be a class method.\n" + + "\n" + + "A class method receives the class as implicit first argument,\n" + + "just like an instance method receives the instance.\n" + + "To declare a class method, use this idiom:\n" + + "\n" + + " class C:\n" + + " def f(cls, arg1, arg2, ...): ...\n" + + " f = classmethod(f)\n" + + "\n" + + "It can be called either on the class (e.g. C.f()) or on an instance\n" + + "(e.g. C().f()). The instance is ignored except for its class.\n" + + "If a class method is called for a derived class, the derived class\n" + + "object is passed as the implied first argument.\n" + + "\n" + + "Class methods are different than C++ or Java static methods.\n" + + "If you want those, see the staticmethod builtin."; + + public final static String classmethod___format___doc = + "default object formatter"; + + public final static String classmethod___func___doc = + ""; + + public final static String classmethod___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String classmethod___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String classmethod___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String classmethod___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String classmethod___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String classmethod___reduce___doc = + "helper for pickle"; + + public final static String classmethod___reduce_ex___doc = + "helper for pickle"; + + public final static String classmethod___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String classmethod___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String classmethod___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String classmethod___str___doc = + "x.__str__() <==> str(x)"; + + public final static String classmethod___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String set___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String set___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String set___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String set___contains___doc = + "x.__contains__(y) <==> y in x."; + + public final static String set___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String set_doc = + "set() -> new empty set object\n" + + "set(iterable) -> new set object\n" + + "\n" + + "Build an unordered collection of unique elements."; + + public final static String set___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String set___format___doc = + "default object formatter"; + + public final static String set___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String set___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String set___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String set___hash___doc = + ""; + + public final static String set___iand___doc = + "x.__iand__(y) <==> x&y"; + + public final static String set___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String set___ior___doc = + "x.__ior__(y) <==> x|y"; + + public final static String set___isub___doc = + "x.__isub__(y) <==> x-y"; + + public final static String set___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String set___ixor___doc = + "x.__ixor__(y) <==> x^y"; + + public final static String set___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String set___len___doc = + "x.__len__() <==> len(x)"; + + public final static String set___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String set___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String set___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String set___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String set___reduce___doc = + "Return state information for pickling."; + + public final static String set___reduce_ex___doc = + "helper for pickle"; + + public final static String set___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String set___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String set___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String set___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String set___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String set___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes"; + + public final static String set___str___doc = + "x.__str__() <==> str(x)"; + + public final static String set___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String set___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String set___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String set_add_doc = + "Add an element to a set.\n" + + "\n" + + "This has no effect if the element is already present."; + + public final static String set_clear_doc = + "Remove all elements from this set."; + + public final static String set_copy_doc = + "Return a shallow copy of a set."; + + public final static String set_difference_doc = + "Return the difference of two or more sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in this set but not the others.)"; + + public final static String set_difference_update_doc = + "Remove all elements of another set from this set."; + + public final static String set_discard_doc = + "Remove an element from a set if it is a member.\n" + + "\n" + + "If the element is not a member, do nothing."; + + public final static String set_intersection_doc = + "Return the intersection of two or more sets as a new set.\n" + + "\n" + + "(i.e. elements that are common to all of the sets.)"; + + public final static String set_intersection_update_doc = + "Update a set with the intersection of itself and another."; + + public final static String set_isdisjoint_doc = + "Return True if two sets have a null intersection."; + + public final static String set_issubset_doc = + "Report whether another set contains this set."; + + public final static String set_issuperset_doc = + "Report whether this set contains another set."; + + public final static String set_pop_doc = + "Remove and return an arbitrary set element.\n" + + "Raises KeyError if the set is empty."; + + public final static String set_remove_doc = + "Remove an element from a set; it must be a member.\n" + + "\n" + + "If the element is not a member, raise a KeyError."; + + public final static String set_symmetric_difference_doc = + "Return the symmetric difference of two sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in exactly one of the sets.)"; + + public final static String set_symmetric_difference_update_doc = + "Update a set with the symmetric difference of itself and another."; + + public final static String set_union_doc = + "Return the union of sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in either set.)"; + + public final static String set_update_doc = + "Update a set with the union of itself and others."; + + // Docs for + public final static String frozenset___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String frozenset___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String frozenset___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String frozenset___contains___doc = + "x.__contains__(y) <==> y in x."; + + public final static String frozenset___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String frozenset_doc = + "frozenset() -> empty frozenset object\n" + + "frozenset(iterable) -> frozenset object\n" + + "\n" + + "Build an immutable unordered collection of unique elements."; + + public final static String frozenset___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String frozenset___format___doc = + "default object formatter"; + + public final static String frozenset___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String frozenset___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String frozenset___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String frozenset___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String frozenset___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String frozenset___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String frozenset___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String frozenset___len___doc = + "x.__len__() <==> len(x)"; + + public final static String frozenset___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String frozenset___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String frozenset___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String frozenset___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String frozenset___reduce___doc = + "Return state information for pickling."; + + public final static String frozenset___reduce_ex___doc = + "helper for pickle"; + + public final static String frozenset___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String frozenset___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String frozenset___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String frozenset___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String frozenset___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String frozenset___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes"; + + public final static String frozenset___str___doc = + "x.__str__() <==> str(x)"; + + public final static String frozenset___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String frozenset___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String frozenset___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String frozenset_copy_doc = + "Return a shallow copy of a set."; + + public final static String frozenset_difference_doc = + "Return the difference of two or more sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in this set but not the others.)"; + + public final static String frozenset_intersection_doc = + "Return the intersection of two or more sets as a new set.\n" + + "\n" + + "(i.e. elements that are common to all of the sets.)"; + + public final static String frozenset_isdisjoint_doc = + "Return True if two sets have a null intersection."; + + public final static String frozenset_issubset_doc = + "Report whether another set contains this set."; + + public final static String frozenset_issuperset_doc = + "Report whether this set contains another set."; + + public final static String frozenset_symmetric_difference_doc = + "Return the symmetric difference of two sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in exactly one of the sets.)"; + + public final static String frozenset_union_doc = + "Return the union of sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in either set.)"; + + // Docs for + public final static String BaseException___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String BaseException___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String BaseException___dict___doc = + ""; + + public final static String BaseException_doc = + "Common base class for all exceptions"; + + public final static String BaseException___format___doc = + "default object formatter"; + + public final static String BaseException___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String BaseException___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String BaseException___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String BaseException___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String BaseException___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String BaseException___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String BaseException___reduce___doc = + ""; + + public final static String BaseException___reduce_ex___doc = + "helper for pickle"; + + public final static String BaseException___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String BaseException___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String BaseException___setstate___doc = + ""; + + public final static String BaseException___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String BaseException___str___doc = + "x.__str__() <==> str(x)"; + + public final static String BaseException___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String BaseException___unicode___doc = + ""; + + public final static String BaseException_args_doc = + ""; + + public final static String BaseException_message_doc = + ""; + + // Docs for + public final static String bytearray___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String bytearray___alloc___doc = + "B.__alloc__() -> int\n" + + "\n" + + "Returns the number of bytes actually allocated."; + + public final static String bytearray___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String bytearray___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String bytearray___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String bytearray___delitem___doc = + "x.__delitem__(y) <==> del x[y]"; + + public final static String bytearray_doc = + "bytearray(iterable_of_ints) -> bytearray.\n" + + "bytearray(string, encoding[, errors]) -> bytearray.\n" + + "bytearray(bytes_or_bytearray) -> mutable copy of bytes_or_bytearray.\n" + + "bytearray(memory_view) -> bytearray.\n" + + "\n" + + "Construct an mutable bytearray object from:\n" + + " - an iterable yielding integers in range(256)\n" + + " - a text string encoded using the specified encoding\n" + + " - a bytes or a bytearray object\n" + + " - any object implementing the buffer API.\n" + + "\n" + + "bytearray(int) -> bytearray.\n" + + "\n" + + "Construct a zero-initialized bytearray of the given length."; + + public final static String bytearray___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String bytearray___format___doc = + "default object formatter"; + + public final static String bytearray___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String bytearray___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String bytearray___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String bytearray___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String bytearray___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String bytearray___iadd___doc = + "x.__iadd__(y) <==> x+=y"; + + public final static String bytearray___imul___doc = + "x.__imul__(y) <==> x*=y"; + + public final static String bytearray___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String bytearray___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String bytearray___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String bytearray___len___doc = + "x.__len__() <==> len(x)"; + + public final static String bytearray___lt___doc = + "x.__lt__(y) <==> x x*n"; + + public final static String bytearray___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String bytearray___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String bytearray___reduce___doc = + "Return state information for pickling."; + + public final static String bytearray___reduce_ex___doc = + "helper for pickle"; + + public final static String bytearray___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String bytearray___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String bytearray___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String bytearray___setitem___doc = + "x.__setitem__(i, y) <==> x[i]=y"; + + public final static String bytearray___sizeof___doc = + "B.__sizeof__() -> int\n" + + " \n" + + "Returns the size of B in memory, in bytes"; + + public final static String bytearray___str___doc = + "x.__str__() <==> str(x)"; + + public final static String bytearray___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String bytearray_append_doc = + "B.append(int) -> None\n" + + "\n" + + "Append a single item to the end of B."; + + public final static String bytearray_capitalize_doc = + "B.capitalize() -> copy of B\n" + + "\n" + + "Return a copy of B with only its first character capitalized (ASCII)\n" + + "and the rest lower-cased."; + + public final static String bytearray_center_doc = + "B.center(width[, fillchar]) -> copy of B\n" + + "\n" + + "Return B centered in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String bytearray_count_doc = + "B.count(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the number of non-overlapping occurrences of subsection sub in\n" + + "bytes B[start:end]. Optional arguments start and end are interpreted\n" + + "as in slice notation."; + + public final static String bytearray_decode_doc = + "B.decode([encoding[, errors]]) -> unicode object.\n" + + "\n" + + "Decodes B using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + + "as well as any other name registered with codecs.register_error that is\n" + + "able to handle UnicodeDecodeErrors."; + + public final static String bytearray_endswith_doc = + "B.endswith(suffix [,start [,end]]) -> bool\n" + + "\n" + + "Return True if B ends with the specified suffix, False otherwise.\n" + + "With optional start, test B beginning at that position.\n" + + "With optional end, stop comparing B at that position.\n" + + "suffix can also be a tuple of strings to try."; + + public final static String bytearray_expandtabs_doc = + "B.expandtabs([tabsize]) -> copy of B\n" + + "\n" + + "Return a copy of B where all tab characters are expanded using spaces.\n" + + "If tabsize is not given, a tab size of 8 characters is assumed."; + + public final static String bytearray_extend_doc = + "B.extend(iterable int) -> None\n" + + "\n" + + "Append all the elements from the iterator or sequence to the\n" + + "end of B."; + + public final static String bytearray_find_doc = + "B.find(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the lowest index in B where subsection sub is found,\n" + + "such that sub is contained within s[start,end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String bytearray_fromhex_doc = + "bytearray.fromhex(string) -> bytearray\n" + + "\n" + + "Create a bytearray object from a string of hexadecimal numbers.\n" + + "Spaces between two numbers are accepted.\n" + + "Example: bytearray.fromhex('B9 01EF') -> bytearray(b'\\xb9\\x01\\xef')."; + + public final static String bytearray_index_doc = + "B.index(sub [,start [,end]]) -> int\n" + + "\n" + + "Like B.find() but raise ValueError when the subsection is not found."; + + public final static String bytearray_insert_doc = + "B.insert(index, int) -> None\n" + + "\n" + + "Insert a single item into the bytearray before the given index."; + + public final static String bytearray_isalnum_doc = + "B.isalnum() -> bool\n" + + "\n" + + "Return True if all characters in B are alphanumeric\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_isalpha_doc = + "B.isalpha() -> bool\n" + + "\n" + + "Return True if all characters in B are alphabetic\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_isdigit_doc = + "B.isdigit() -> bool\n" + + "\n" + + "Return True if all characters in B are digits\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_islower_doc = + "B.islower() -> bool\n" + + "\n" + + "Return True if all cased characters in B are lowercase and there is\n" + + "at least one cased character in B, False otherwise."; + + public final static String bytearray_isspace_doc = + "B.isspace() -> bool\n" + + "\n" + + "Return True if all characters in B are whitespace\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_istitle_doc = + "B.istitle() -> bool\n" + + "\n" + + "Return True if B is a titlecased string and there is at least one\n" + + "character in B, i.e. uppercase characters may only follow uncased\n" + + "characters and lowercase characters only cased ones. Return False\n" + + "otherwise."; + + public final static String bytearray_isupper_doc = + "B.isupper() -> bool\n" + + "\n" + + "Return True if all cased characters in B are uppercase and there is\n" + + "at least one cased character in B, False otherwise."; + + public final static String bytearray_join_doc = + "B.join(iterable_of_bytes) -> bytes\n" + + "\n" + + "Concatenates any number of bytearray objects, with B in between each pair."; + + public final static String bytearray_ljust_doc = + "B.ljust(width[, fillchar]) -> copy of B\n" + + "\n" + + "Return B left justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String bytearray_lower_doc = + "B.lower() -> copy of B\n" + + "\n" + + "Return a copy of B with all ASCII characters converted to lowercase."; + + public final static String bytearray_lstrip_doc = + "B.lstrip([bytes]) -> bytearray\n" + + "\n" + + "Strip leading bytes contained in the argument.\n" + + "If the argument is omitted, strip leading ASCII whitespace."; + + public final static String bytearray_partition_doc = + "B.partition(sep) -> (head, sep, tail)\n" + + "\n" + + "Searches for the separator sep in B, and returns the part before it,\n" + + "the separator itself, and the part after it. If the separator is not\n" + + "found, returns B and two empty bytearray objects."; + + public final static String bytearray_pop_doc = + "B.pop([index]) -> int\n" + + "\n" + + "Remove and return a single item from B. If no index\n" + + "argument is given, will pop the last value."; + + public final static String bytearray_remove_doc = + "B.remove(int) -> None\n" + + "\n" + + "Remove the first occurance of a value in B."; + + public final static String bytearray_replace_doc = + "B.replace(old, new[, count]) -> bytes\n" + + "\n" + + "Return a copy of B with all occurrences of subsection\n" + + "old replaced by new. If the optional argument count is\n" + + "given, only the first count occurrences are replaced."; + + public final static String bytearray_reverse_doc = + "B.reverse() -> None\n" + + "\n" + + "Reverse the order of the values in B in place."; + + public final static String bytearray_rfind_doc = + "B.rfind(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the highest index in B where subsection sub is found,\n" + + "such that sub is contained within s[start,end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String bytearray_rindex_doc = + "B.rindex(sub [,start [,end]]) -> int\n" + + "\n" + + "Like B.rfind() but raise ValueError when the subsection is not found."; + + public final static String bytearray_rjust_doc = + "B.rjust(width[, fillchar]) -> copy of B\n" + + "\n" + + "Return B right justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String bytearray_rpartition_doc = + "B.rpartition(sep) -> (head, sep, tail)\n" + + "\n" + + "Searches for the separator sep in B, starting at the end of B,\n" + + "and returns the part before it, the separator itself, and the\n" + + "part after it. If the separator is not found, returns two empty\n" + + "bytearray objects and B."; + + public final static String bytearray_rsplit_doc = + "B.rsplit(sep[, maxsplit]) -> list of bytearray\n" + + "\n" + + "Return a list of the sections in B, using sep as the delimiter,\n" + + "starting at the end of B and working to the front.\n" + + "If sep is not given, B is split on ASCII whitespace characters\n" + + "(space, tab, return, newline, formfeed, vertical tab).\n" + + "If maxsplit is given, at most maxsplit splits are done."; + + public final static String bytearray_rstrip_doc = + "B.rstrip([bytes]) -> bytearray\n" + + "\n" + + "Strip trailing bytes contained in the argument.\n" + + "If the argument is omitted, strip trailing ASCII whitespace."; + + public final static String bytearray_split_doc = + "B.split([sep[, maxsplit]]) -> list of bytearray\n" + + "\n" + + "Return a list of the sections in B, using sep as the delimiter.\n" + + "If sep is not given, B is split on ASCII whitespace characters\n" + + "(space, tab, return, newline, formfeed, vertical tab).\n" + + "If maxsplit is given, at most maxsplit splits are done."; + + public final static String bytearray_splitlines_doc = + "B.splitlines([keepends]) -> list of lines\n" + + "\n" + + "Return a list of the lines in B, breaking at line boundaries.\n" + + "Line breaks are not included in the resulting list unless keepends\n" + + "is given and true."; + + public final static String bytearray_startswith_doc = + "B.startswith(prefix [,start [,end]]) -> bool\n" + + "\n" + + "Return True if B starts with the specified prefix, False otherwise.\n" + + "With optional start, test B beginning at that position.\n" + + "With optional end, stop comparing B at that position.\n" + + "prefix can also be a tuple of strings to try."; + + public final static String bytearray_strip_doc = + "B.strip([bytes]) -> bytearray\n" + + "\n" + + "Strip leading and trailing bytes contained in the argument.\n" + + "If the argument is omitted, strip ASCII whitespace."; + + public final static String bytearray_swapcase_doc = + "B.swapcase() -> copy of B\n" + + "\n" + + "Return a copy of B with uppercase ASCII characters converted\n" + + "to lowercase ASCII and vice versa."; + + public final static String bytearray_title_doc = + "B.title() -> copy of B\n" + + "\n" + + "Return a titlecased version of B, i.e. ASCII words start with uppercase\n" + + "characters, all remaining cased characters have lowercase."; + + public final static String bytearray_translate_doc = + "B.translate(table[, deletechars]) -> bytearray\n" + + "\n" + + "Return a copy of B, where all characters occurring in the\n" + + "optional argument deletechars are removed, and the remaining\n" + + "characters have been mapped through the given translation\n" + + "table, which must be a bytes object of length 256."; + + public final static String bytearray_upper_doc = + "B.upper() -> copy of B\n" + + "\n" + + "Return a copy of B with all ASCII characters converted to uppercase."; + + public final static String bytearray_zfill_doc = + "B.zfill(width) -> copy of B\n" + + "\n" + + "Pad a numeric string B with zeros on the left, to fill a field\n" + + "of the specified width. B is never truncated."; + + // Docs for + public final static String function___call___doc = + "x.__call__(...) <==> x(...)"; + + public final static String function___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String function___closure___doc = + ""; + + public final static String function___code___doc = + ""; + + public final static String function___defaults___doc = + ""; + + public final static String function___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String function___dict___doc = + ""; + + public final static String function_doc = + "function(code, globals[, name[, argdefs[, closure]]])\n" + + "\n" + + "Create a function object from a code object and a dictionary.\n" + + "The optional name string overrides the name from the code object.\n" + + "The optional argdefs tuple specifies the default argument values.\n" + + "The optional closure tuple supplies the bindings for free variables."; + + public final static String function___format___doc = + "default object formatter"; + + public final static String function___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String function___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String function___globals___doc = + ""; + + public final static String function___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String function___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String function___module___doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String function___name___doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String function___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String function___reduce___doc = + "helper for pickle"; + + public final static String function___reduce_ex___doc = + "helper for pickle"; + + public final static String function___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String function___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String function___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String function___str___doc = + "x.__str__() <==> str(x)"; + + public final static String function___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String function_func_closure_doc = + ""; + + public final static String function_func_code_doc = + ""; + + public final static String function_func_defaults_doc = + ""; + + public final static String function_func_dict_doc = + ""; + + public final static String function_func_doc_doc = + ""; + + public final static String function_func_globals_doc = + ""; + + public final static String function_func_name_doc = + ""; + + // Docs for + public final static String instancemethod___call___doc = + "x.__call__(...) <==> x(...)"; + + public final static String instancemethod___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String instancemethod___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String instancemethod___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String instancemethod_doc = + "instancemethod(function, instance, class)\n" + + "\n" + + "Create an instance method object."; + + public final static String instancemethod___format___doc = + "default object formatter"; + + public final static String instancemethod___func___doc = + "the function (or other callable) implementing a method"; + + public final static String instancemethod___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String instancemethod___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String instancemethod___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String instancemethod___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String instancemethod___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String instancemethod___reduce___doc = + "helper for pickle"; + + public final static String instancemethod___reduce_ex___doc = + "helper for pickle"; + + public final static String instancemethod___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String instancemethod___self___doc = + "the instance to which a method is bound; None for unbound methods"; + + public final static String instancemethod___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String instancemethod___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String instancemethod___str___doc = + "x.__str__() <==> str(x)"; + + public final static String instancemethod___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String instancemethod_im_class_doc = + "the class associated with a method"; + + public final static String instancemethod_im_func_doc = + "the function (or other callable) implementing a method"; + + public final static String instancemethod_im_self_doc = + "the instance to which a method is bound; None for unbound methods"; + + // Docs for + public final static String code___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String code___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String code___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String code_doc = + "code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n" + + " varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n" + + "\n" + + "Create a code object. Not for the faint of heart."; + + public final static String code___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String code___format___doc = + "default object formatter"; + + public final static String code___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String code___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String code___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String code___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String code___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String code___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String code___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String code___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String code___reduce___doc = + "helper for pickle"; + + public final static String code___reduce_ex___doc = + "helper for pickle"; + + public final static String code___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String code___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String code___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String code___str___doc = + "x.__str__() <==> str(x)"; + + public final static String code___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String code_co_argcount_doc = + ""; + + public final static String code_co_cellvars_doc = + ""; + + public final static String code_co_code_doc = + ""; + + public final static String code_co_consts_doc = + ""; + + public final static String code_co_filename_doc = + ""; + + public final static String code_co_firstlineno_doc = + ""; + + public final static String code_co_flags_doc = + ""; + + public final static String code_co_freevars_doc = + ""; + + public final static String code_co_lnotab_doc = + ""; + + public final static String code_co_name_doc = + ""; + + public final static String code_co_names_doc = + ""; + + public final static String code_co_nlocals_doc = + ""; + + public final static String code_co_stacksize_doc = + ""; + + public final static String code_co_varnames_doc = + ""; + + // Docs for + public final static String frame___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String frame___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String frame_doc = + ""; + + public final static String frame___format___doc = + "default object formatter"; + + public final static String frame___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String frame___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String frame___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String frame___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String frame___reduce___doc = + "helper for pickle"; + + public final static String frame___reduce_ex___doc = + "helper for pickle"; + + public final static String frame___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String frame___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String frame___sizeof___doc = + "F.__sizeof__() -> size of F in memory, in bytes"; + + public final static String frame___str___doc = + "x.__str__() <==> str(x)"; + + public final static String frame___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String frame_f_back_doc = + ""; + + public final static String frame_f_builtins_doc = + ""; + + public final static String frame_f_code_doc = + ""; + + public final static String frame_f_exc_traceback_doc = + ""; + + public final static String frame_f_exc_type_doc = + ""; + + public final static String frame_f_exc_value_doc = + ""; + + public final static String frame_f_globals_doc = + ""; + + public final static String frame_f_lasti_doc = + ""; + + public final static String frame_f_lineno_doc = + ""; + + public final static String frame_f_locals_doc = + ""; + + public final static String frame_f_restricted_doc = + ""; + + public final static String frame_f_trace_doc = + ""; + + // Docs for + public final static String traceback___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String traceback___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String traceback_doc = + ""; + + public final static String traceback___format___doc = + "default object formatter"; + + public final static String traceback___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String traceback___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String traceback___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String traceback___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String traceback___reduce___doc = + "helper for pickle"; + + public final static String traceback___reduce_ex___doc = + "helper for pickle"; + + public final static String traceback___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String traceback___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String traceback___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String traceback___str___doc = + "x.__str__() <==> str(x)"; + + public final static String traceback___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String traceback_tb_frame_doc = + ""; + + public final static String traceback_tb_lasti_doc = + ""; + + public final static String traceback_tb_lineno_doc = + ""; + + public final static String traceback_tb_next_doc = + ""; + +} diff --git a/src/org/python/core/PyByteArray.java b/src/org/python/core/PyByteArray.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/PyByteArray.java @@ -0,0 +1,1338 @@ +package org.python.core; + +import java.util.Arrays; + +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedType; + +/** + * Partial implementation of Python bytearray. At the present stage of development, the class + * provides: + *
    + *
  • constructors (both __init__ and the Java API constructors),
  • + *
  • the slice operations (get, set and delete)
  • + *
  • a List<PyInteger> implementation for the Java API
  • + *
+ * and this is founded on a particular approach to storage management internally. However, the + * implementation does not support the memoryview interface either for access or a a + * source for its constructors although the signatures are present. The rich set of string-like + * operations due a bytearray is not implemented. + * + */ + at ExposedType(name = "bytearray", base = PyObject.class, doc = BuiltinDocs.bytearray_doc) +public class PyByteArray extends BaseBytes { + + public static final PyType TYPE = PyType.fromClass(PyByteArray.class); + + /** + * Create a zero-length Python bytearray of explicitly-specified sub-type + * @param type explicit Jython type + */ + public PyByteArray(PyType type) { + super(type); + } + + /** + * Create a zero-length Python bytearray. + */ + public PyByteArray() { + super(TYPE); + } + + /** + * Create zero-filled Python bytearray of specified size. + * @param size of bytearray + */ + public PyByteArray(int size) { + super(TYPE); + init(size); + } + + /** + * Construct bytearray by copying values from int[]. + * + * @param value source of the bytes (and size) + */ + public PyByteArray(int[] value) { + super(TYPE, value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the + * source. + * @param value source of the bytes (and size) + */ + public PyByteArray(BaseBytes value) { + super(TYPE); + init(value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the + * source. + * @param value source of the bytes (and size) + */ + public PyByteArray(MemoryViewProtocol value) { + super(TYPE); + init(value.getMemoryView()); + } + + /** + * Create a new array filled from an iterable of PyObject. The iterable must yield objects + * convertible to Python bytes (non-negative integers less than 256 or strings of length 1). + * @param value source of the bytes (and size) + */ + public PyByteArray(Iterable value) { + super(TYPE); + init(value); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually a + * PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + public PyByteArray(PyString arg, PyObject encoding, PyObject errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually a + * PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (may be null to select the default for this + * installation) + * @param errors name of optional errors policy + */ + public PyByteArray(PyString arg, String encoding, String errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new bytearray object from an arbitrary Python object according to the same rules as + * apply in Python to the bytearray() constructor: + *
    + *
  • bytearray() Construct a zero-length bytearray (arg is null).
  • + *
  • bytearray(int) Construct a zero-initialized bytearray of the given length.
  • + *
  • bytearray(iterable_of_ints) Construct from iterable yielding integers in [0..255]
  • + *
  • bytearray(string [, encoding [, errors] ]) Construct from a text string, optionally using + * the specified encoding.
  • + *
  • bytearray(unicode, encoding [, errors]) Construct from a unicode string using the + * specified encoding.
  • + *
  • bytearray(bytes_or_bytearray) Construct as a mutable copy of bytes or existing bytearray + * object.
  • + *
+ * When it is necessary to specify an encoding, as in the Python signature + * bytearray(string, encoding[, errors]), use the constructor + * {@link #PyByteArray(PyString, String, String)}. If the PyString is actually a PyUnicode, an + * encoding must be specified, and using this constructor will throw an exception about that. + * + * @param arg primary argument from which value is taken (may be null) + * @throws PyException in the same circumstances as bytearray(arg), TypeError for non-iterable, + * non-integer argument type, and ValueError if iterables do not yield byte [0..255] values. + */ + public PyByteArray(PyObject arg) throws PyException { + super(TYPE); + init(arg); + } + + /* ======================================================================================== + * API for org.python.core.PySequence + * ======================================================================================== + */ + + /** + * Returns a slice of elements from this sequence as a PyByteArray. + * + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @return a PyByteArray corresponding the the given range of elements. + */ + @Override + protected synchronized PyByteArray getslice(int start, int stop, int step) { + if (step == 1) { + // Efficiently copy contiguous slice + int n = stop-start; + if (n<=0) + return new PyByteArray(); + else { + PyByteArray ret = new PyByteArray(n); + System.arraycopy(storage, offset+start, ret.storage, ret.offset, n); + return ret; + } + } else { + int n = sliceLength(start, stop, step); + PyByteArray ret = new PyByteArray(n); + n += ret.offset; + byte[] dst = ret.storage; + for (int io = start + offset, jo = ret.offset; jo < n; io += step, jo++) + dst[jo] = storage[io]; + return ret; + } + } + + + /** + * Returns a PyByteArray that repeats this sequence the given number of times, as + * in the implementation of __mul__ for strings. + * @param count the number of times to repeat this. + * @return this byte array repeated count times. + */ + @Override + protected synchronized PyByteArray repeat(int count) { + PyByteArray ret = new PyByteArray(); + ret.setStorage(repeatImpl(count)); + return ret; + } + + /** + * Sets the indexed element of the bytearray to the given value. + * This is an extension point called by PySequence in its implementation of + * {@link #__setitem__} + * It is guaranteed by PySequence that the index is within the bounds of the array. + * Any other clients calling pyset(int) must make the same guarantee. + * + * @param index index of the element to set. + * @param value the value to set this element to. + * @throws PyException(AttributeError) if value cannot be converted to an integer + * @throws PyException(ValueError) if value<0 or value>255 + */ + public synchronized void pyset(int index, PyObject value) throws PyException { + storage[index+offset] = byteCheck(value); + } + + /** + * Insert the element (interpreted as a Python byte value) at the given index. The default + * implementation produces a Python TypeError, for the benefit of immutable types. Mutable types + * must override it. + * + * @param index to insert at + * @param element to insert (by value) + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + * @throws PyException(TYpeError) if the subclass is immutable + */ + public synchronized void pyadd(int index, PyInteger element) { + // Open a space at the right location. + storageReplace(index, 0, 1); + storage[index] = byteCheck(element); + } + + /** + * Sets the given range of elements according to Python slice assignment semantics. If the step + * size is one, it is a simple slice and the operation is equivalent to deleting that slice, + * then inserting the value at that position, regarding the value as a sequence (if possible) or + * as a single element if it is not a sequence. If the step size is not one, but start=stop, it + * is equivalent to insertion at that point. If the step size is not one, and start!=stop, the + * slice defines a certain number of elements to be replaced, and the value must be a sequence + * of exactly that many elements (or convertible to such a sequence). + *

+ * When assigning from a sequence type or iterator, the sequence may contain arbitrary + * PyObjects, but acceptable ones are PyInteger, PyLong or PyString of length 1. If + * any one of them proves unsuitable for assignment to a Python bytarray element, an exception + * is thrown and this bytearray is unchanged. + * + *

+     * a = bytearray(b'abcdefghijklmnopqrst')
+     * a[2:12:2] = iter( [65, 66, 67, long(68), "E"] )
+     * 
+ * + * Results in a=bytearray(b'abAdBfChDjElmnopqrst'). + *

+ * + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value an object consistent with the slice assignment + */ + @Override + protected synchronized void setslice(int start, int stop, int step, PyObject value) { + + if (step == 1 && stop < start) + // Because "b[5:2] = v" means insert v just before 5 not 2. + // ... although "b[5:2:-1] = v means b[5]=v[0], b[4]=v[1], b[3]=v[2] + stop = start; + + /* + * The actual behaviour depends on the nature (type) of value. It may be any kind of + * PyObject (but not other kinds of Java Object). The function is implementing assignment to + * a slice. PEP 3137 declares that the value may be "any type that implements the PEP 3118 + * buffer interface, which isn't implemented yet in Jython. + */ + // XXX correct this when the buffer interface is available in Jython + /* + * The following is essentially equivalent to b[start:stop[:step]]=bytearray(value) except + * we avoid constructing a copy of value if we can easily do so. The logic is the same as + * BaseBytes.init(PyObject), without support for value==null. + */ + + if (value instanceof PyString) { + /* + * Value is a string (but must be 8-bit). + */ + setslice(start, stop, step, (PyString)value); + + } else if (value.isIndex()) { + /* + * Value behaves as a zero-initialised bytearray of the given length. + */ + setslice(start, stop, step, value.asIndex(Py.OverflowError)); + + } else if (value instanceof BaseBytes) { + /* + * Value behaves as a bytearray, and can be can be inserted without making a copy + * (unless it is this object). + */ + setslice(start, stop, step, (BaseBytes)value); + + } else if (value instanceof MemoryViewProtocol) { + /* + * Value supports Jython implementation of PEP 3118, and can be can be inserted without + * making a copy. + */ + setslice(start, stop, step, ((MemoryViewProtocol)value).getMemoryView()); + + } else { + /* + * The remaining alternative is an iterable returning (hopefully) right-sized ints. If + * it isn't one, we get an exception about not being iterable, or about the values. + */ + setslice(start, stop, step, value.asIterable()); + + } + } + + + + /** + * Sets the given range of elements according to Python slice assignment semantics from a + * zero-filled bytearray of the given length. + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param len number of zeros to insert consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, int len) throws PyException { + if (step == 1) { + // Delete this[start:stop] and open a space of the right size = len + storageReplace(start, stop - start, len); + Arrays.fill(storage, start + offset, (start + offset) + len, (byte)0); + + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) throw SliceSizeError("bytes", len, n); + for (int io = start + offset; n > 0; io += step, --n) + storage[io] = 0; + } + } + + + /** + * Sets the given range of elements according to Python slice assignment semantics from a + * PyString. + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value a PyString object consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, PyString value) throws PyException { + String v = value.asString(); + int len = v.length(); + if (step == 1) { + // Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, len); + setBytes(start, v); + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) throw SliceSizeError("bytes", len, n); + setBytes(start, step, v); + } + } + + /** + * Sets the given range of elements according to Python slice assignment semantics from an + * object supporting the Jython implementation of PEP 3118. + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value a memoryview object consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, MemoryView value) throws PyException { + // XXX Support memoryview once means of access to bytes is defined + Py.NotImplementedError("memoryview not yet supported in bytearray"); + String format = value.get_format(); + boolean isBytes = format == null || "B".equals(format); + if (value.get_ndim() != 1 || !isBytes) + Py.TypeError("memoryview value must be byte-oriented"); + else { + // Dimensions are given as a PyTple (although only one) + int len = value.get_shape().pyget(0).asInt(); + if (step == 1) { + // Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, len); + // System.arraycopy(value.storage, value.offset, storage, start + // + offset, len); + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) throw SliceSizeError("bytes", len, n); + // int no = n + value.offset; + // for (int io = start + offset, jo = value.offset; jo < no; io += step, jo++) { + // storage[io] = value.storage[jo]; // Assign this[i] = value[j] + // } + } + } + } + + /** + * Sets the given range of elements according to Python slice assignment semantics + * from a bytearray (or bytes). + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value a bytearray (or bytes) object consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, BaseBytes value) throws PyException { + if (value == this) value = new PyByteArray(value); // Must work with a copy + int len = value.size; + if (step == 1) { + //Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, len); + System.arraycopy(value.storage, value.offset, storage, start + + offset, len); + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) throw SliceSizeError("bytes", len, n); + int no = n + value.offset; + for (int io = start + offset, jo = value.offset; jo < no; io += step, jo++) { + storage[io] = value.storage[jo]; // Assign this[i] = value[j] + } + } + } + + + /** + * Sets the given range of elements according to Python slice assignment semantics from a + * bytearray (or bytes). + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param iter iterable source of values to enter in the array + * @throws PyException(SliceSizeError) if the iterable size is inconsistent with an extended + * slice + */ + private void setslice(int start, int stop, int step, Iterable iter) { + /* + * As we don't know how many elements the iterable represents, we can't adjust the array + * until after we run the iterator. We use this elastic byte structure to hold the bytes until then. + */ + FragmentList fragList = new BaseBytes.FragmentList(); + fragList.loadFrom(iter); + + if (step == 1) { + // Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, fragList.totalCount); + if (fragList.totalCount > 0) + // Stitch the fragments together in the space we made + fragList.emptyInto(storage, start + offset); + + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != fragList.totalCount) throw SliceSizeError("bytes", fragList.totalCount, n); + fragList.emptyInto(storage, start + offset, step); + } + } + + +// Idiom: +// if (step == 1) { +// // Do something efficient with block start...stop-1 +// } else { +// int n = sliceLength(start, stop, step); +// for (int i = start, j = 0; j < n; i += step, j++) { +// // Perform jth operation with element i +// } +// } + + + + /* + * Deletes an element from the sequence (and closes up the gap). + * @param index index of the element to delete. + */ + protected synchronized void del(int index) { + // XXX Change SequenceIndexDelegate to avoid repeated calls to del(int) for extended slice + storageDelete(index, 1); + } + + /* + * Deletes contiguous sub-sequence (and closes up the gap). + * @param start the position of the first element. + * @param stop one more than the position of the last element. + */ + protected synchronized void delRange(int start, int stop) { + // XXX Use the specialised storageDelete() + storageReplace(start, stop-start, 0); + } + + /** + * Deletes a simple or extended slice and closes up the gap(s). + * + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step from one element to the next + */ + protected synchronized void delslice(int start, int stop, int step) { + if (step == 1) { + // Delete this[start:stop] and closing up the space + storageDelete(start, stop - start); + } else { + // This is an extended slice which means we are removing isolated elements + int n = sliceLength(start, stop, step); + + if (n > 0) { + if (step > 0) + // The first element is x[start] and the last is x[start+(n-1)*step+1] + storageDeleteEx(start, step, n); + else + // The first element is x[start+(n-1)*step+1] and the last is x[start] + storageDeleteEx(start + (n - 1) * step + 1, -step, n); + } + } + } + + /** + * Convenience method to create a ValueError PyException with the message + * "attempt to assign {type} of size {valueSize} to extended slice of size {sliceSize}" + * + * @param valueType + * @param valueSize size of sequence being assigned to slice + * @param sliceSize size of slice expected to receive + * @throws PyException (ValueError) as detailed + */ + public static PyException SliceSizeError(String valueType, int valueSize, int sliceSize) + throws PyException { + String fmt = "attempt to assign %s of size %d to extended slice of size %d"; + return Py.ValueError(String.format(fmt, valueType, valueSize, sliceSize)); + // XXX consider moving to SequenceIndexDelegate.java or somewhere else generic + } + + + /** + * Initialise a mutable bytearray object from various arguments. This single initialisation must + * support: + *

    + *
  • bytearray() Construct a zero-length bytearray.
  • + *
  • bytearray(int) Construct a zero-initialized bytearray of the given length.
  • + *
  • bytearray(iterable_of_ints) Construct from iterable yielding integers in [0..255]
  • + *
  • bytearray(string [, encoding [, errors] ]) Construct from a text string, optionally using + * the specified encoding.
  • + *
  • bytearray(unicode, encoding [, errors]) Construct from a unicode string using the + * specified encoding.
  • + *
  • bytearray(bytes_or_bytearray) Construct as a mutable copy of bytes or existing bytearray + * object.
  • + *
+ * Unlike CPython we are not able to support the initialisation:
  • bytearray(memory_view) + * Construct as copy of any object implementing the buffer API.
  • Although effectively + * a constructor, it is possible to call __init__ on a 'used' object so the method does not + * assume any particular prior state. + * + * @param args argument array according to Jython conventions + * @param kwds Keywords according to Jython conventions + * @throws PyException in the same circumstances as bytearray(arg), TypeError for non-iterable, + * non-integer argument type, and ValueError if iterables do not yield byte [0..255] values. + */ + @ExposedNew + @ExposedMethod(doc = BuiltinDocs.bytearray___init___doc) + final synchronized void bytearray___init__(PyObject[] args, String[] kwds) { + + ArgParser ap = new ArgParser("bytearray", args, kwds, "source", "encoding", "errors"); + PyObject arg = ap.getPyObject(0, null); + // If not null, encoding and errors must be PyString (or PyUnicode) + PyObject encoding = ap.getPyObjectByType(1, PyBaseString.TYPE, null); + PyObject errors = ap.getPyObjectByType(2, PyBaseString.TYPE, null); + + /* + * This whole method is modelled on CPython (see Objects/bytearrayobject.c : bytes_init()) + * but reorganised somewhat to maximise re-use withthe implementation of assignment to a + * slice, which essentially has to construct a bytearray from the right-hand side. + * Hopefully, it still tries the same things in the same order and fails in the same way. + */ + + if (encoding != null || errors != null) { + /* + * bytearray(string [, encoding [, errors]]) Construct from a text string by encoding it + * using the specified encoding. + */ + if (arg == null || !(arg instanceof PyString)) throw Py.TypeError("encoding or errors without sequence argument"); + init((PyString)arg, encoding, errors); + + } else { + // Now construct from arbitrary object (or null) + init(arg); + } + + } + + + @Override + public int __len__() { + return list___len__(); + } + + @ExposedMethod(doc = BuiltinDocs.list___len___doc) + final int list___len__() { + return size; + } + + +// Based on PyList and not yet properly implemented. +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___ne___doc) +// final synchronized PyObject bytearray___ne__(PyObject o) { +// return seq___ne__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___eq___doc) +// final synchronized PyObject bytearray___eq__(PyObject o) { +// return seq___eq__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___lt___doc) +// final synchronized PyObject bytearray___lt__(PyObject o) { +// return seq___lt__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___le___doc) +// final synchronized PyObject bytearray___le__(PyObject o) { +// return seq___le__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___gt___doc) +// final synchronized PyObject bytearray___gt__(PyObject o) { +// return seq___gt__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___ge___doc) +// final synchronized PyObject bytearray___ge__(PyObject o) { +// return seq___ge__(o); +// } +// +// @Override +// public PyObject __imul__(PyObject o) { +// return bytearray___imul__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___imul___doc) +// final synchronized PyObject bytearray___imul__(PyObject o) { +// if (!o.isIndex()) { +// return null; +// } +// int count = o.asIndex(Py.OverflowError); +// +// int size = size(); +// if (size == 0 || count == 1) { +// return this; +// } +// +// if (count < 1) { +// clear(); +// return this; +// } +// +// if (size > Integer.MAX_VALUE / count) { +// throw Py.MemoryError(""); +// } +// +// int newSize = size * count; +// if (storage instanceof ArrayList) { +// ((ArrayList) storage).ensureCapacity(newSize); +// } +// List oldList = new ArrayList(storage); +// for (int i = 1; i < count; i++) { +// storage.addAll(oldList); +// } +// gListAllocatedStatus = storage.size(); // now omit? +// return this; +// } +// +// @Override +// public PyObject __mul__(PyObject o) { +// return bytearray___mul__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___mul___doc) +// final synchronized PyObject bytearray___mul__(PyObject o) { +// if (!o.isIndex()) { +// return null; +// } +// return repeat(o.asIndex(Py.OverflowError)); +// } +// +// @Override +// public PyObject __rmul__(PyObject o) { +// return bytearray___rmul__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___rmul___doc) +// final synchronized PyObject bytearray___rmul__(PyObject o) { +// if (!o.isIndex()) { +// return null; +// } +// return repeat(o.asIndex(Py.OverflowError)); +// } +// +// @Override +// public PyObject __add__(PyObject o) { +// return bytearray___add__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___add___doc) +// final synchronized PyObject bytearray___add__(PyObject o) { +// PyByteArray sum = null; +// if (o instanceof PySequenceList && !(o instanceof PyTuple)) { +// if (o instanceof PyByteArray) { +// List oList = ((PyByteArray) o).storage; +// List newList = new ArrayList(storage.size() + oList.size()); +// newList.addAll(storage); +// newList.addAll(oList); +// sum = fromList(newList); +// } +// } else if (!(o instanceof PySequenceList)) { +// // also support adding java lists (but not PyTuple!) +// Object oList = o.__tojava__(List.class); +// if (oList != Py.NoConversion && oList != null) { +// List otherList = (List) oList; +// sum = new PyByteArray(); +// sum.bytearray_extend(this); +// for (Iterator i = otherList.iterator(); i.hasNext();) { +// sum.add(i.next()); +// } +// } +// } +// return sum; +// } +// +// @ExposedMethod(doc = BuiltinDocs.bytearray___contains___doc) +// final synchronized boolean bytearray___contains__(PyObject o) { +// return object___contains__(o); +// } +// +// @ExposedMethod(doc = BuiltinDocs.bytearray___delitem___doc) +// final synchronized void bytearray___delitem__(PyObject index) { +// seq___delitem__(index); +// } +// + @ExposedMethod(doc = BuiltinDocs.bytearray___setitem___doc) + final synchronized void bytearray___setitem__(PyObject o, PyObject def) { + seq___setitem__(o, def); + } + +// @ExposedMethod(doc = BuiltinDocs.bytearray___getitem___doc) +// final synchronized PyObject bytearray___getitem__(PyObject o) { +// PyObject ret = seq___finditem__(o); +// if (ret == null) { +// throw Py.IndexError("index out of range: " + o); +// } +// return ret; +// } +// +// @Override +// public PyObject __iter__() { +// return bytearray___iter__(); +// } +// +// @ExposedMethod(doc = BuiltinDocs.bytearray___iter___doc) +// public synchronized PyObject bytearray___iter__() { +// return new PyFastSequenceIter(this); +// } +// +// @Override +// protected String unsupportedopMessage(String op, PyObject o2) { +// if (op.equals("+")) { +// return "can only concatenate storage (not \"{2}\") to storage"; +// } +// return super.unsupportedopMessage(op, o2); +// } +// +// public String toString() { +// return bytearray_toString(); +// } +// + @ExposedMethod(names = "__repr__", doc = BuiltinDocs.bytearray___repr___doc) + final synchronized String bytearray_toString() { + // XXX revisit: understand the thread state logic and use encode() +// ThreadState ts = Py.getThreadState(); +// if (!ts.enterRepr(this)) { +// return "[...]"; +// } + StringBuilder buf = new StringBuilder("bytearray(b'"); + final int last = size()-1; + for (int i=0; i<=last; i++) { + int element = intAt(i); + if (Character.isISOControl(element)) + buf.append(String.format("\\x%02x", element)); + else + buf.append((char)element); + } + buf.append("')"); +// ts.exitRepr(this); + return buf.toString(); + } + + + + + + /* + * ======================================================================================== + * Manipulation of storage capacity + * ======================================================================================== + * + * Here we add to the inherited variables defining byte storage, the methods necessary to resize + * it. + */ + + /** + * Choose a size appropriate to store the given number of bytes, with some room for growth. + * @param size + * @return n >= needed + */ + private static final int roundUp(int size) { + // XXX Consider equivalent case statement + int alloc = size + (size >> 3) + (size < 9 ? 3 : 6); // As CPython + // XXX What's a good allocation unit size here? + final int ALLOC = 8; + return (alloc+(ALLOC-1)) & ~(ALLOC-1); // round up to multiple of ALLOC + } + + /** + * Used mainly to prevent repeated attempts to shrink an array that is already minimal. + */ + private static final int minAlloc = roundUp(1); + + /** + * Decide whether a new storage array should be allocated (but don't do it). This method returns + * true if the needed storage is bigger than the allocated array length. + * + * @param needed number of bytes needed + * @return true if needed number of bytes justifies a new array + */ + private final boolean shouldGrow(int needed) { + return needed > storage.length; + } + + /** + * Decide whether a smaller storage array should be allocated (but don't do it). This method + * returns true if the needed storage size is much smaller than the allocated array length. + * + * @param needed number of bytes needed + * @return true if needed number of bytes justifies a new array + */ + private final boolean shouldShrink(int needed) { + return needed == 0 || (needed * 2 + minAlloc) < storage.length; + } + + /** + * Decide whether a new storage array should be allocated (but don't do it). This method returns + * true if the needed storage is bigger, or much smaller, than the allocated array length. + * + * @param needed number of bytes needed + * @return true if needed number of bytes justifies a new array + */ + private final boolean shouldResize(int needed) { + return shouldGrow(needed) || shouldShrink(needed); + } + + /** + * Allocate fresh storage for at least the requested number of bytes. Spare bytes are alloceted + * evenly at each end of the new storage by choice of a new value for offset. + * If the size needed is zero, the "storage" allocated is the shared emptyStorage array. + * @param needed becomes the new value of this.size + */ + protected void newStorage(int needed) { + if (needed > 0) { + byte[] s = new byte[roundUp(needed)]; // guaranteed zero (by JLS 2ed para 4.5.5) + setStorage(s, needed, (s.length - needed) / 2); + } else + setStorage(emptyStorage); + } + + /** + * Ensure there is storage for at least the requested number of bytes, optionally clearing + * elements to zero. After the call, the needed number of bytes will be available, + * and if requested in the second parameter, they are guaranteed to be zero. + * @param needed number of bytes + * @param clear if true, storage bytes guaranteed zero + */ + private void newStorage(int needed, boolean clear) { + if (shouldResize(needed)) + newStorage(needed); // guaranteed zero + else { + setStorage(storage, needed, (storage.length - needed) / 2); + if (clear) Arrays.fill(storage, (byte)0); // guarantee zero + } + } + + + + /** + * Delete d elements at index a and prepare to insert + * e elements there by moving aside the surrounding elements. + * The method manipulates the storage array contents, size and + * offset. It will allocate a new array storage if necessary, + * or if desirable for efficiency. If the initial storage looks like this: + *
    +     *       |-                  s                -|
    +     * |--f--|--------a--------|---d---|-----b-----|----------------|
    +     * 
    + * then after the call the (possibly new) storage looks like this: + *
    +     *            |-                   s'                -|
    +     * |----f'----|--------a--------|----e----|-----b-----|--------------|
    +     * 
    + * where the contents of regions of length a and b=size-(a+d) have + * been preserved, although probably moved, and the gap between them has been adjusted to + * the requested size. + *

    + * The effect on this PyByteArray is that: + *

    +     * this.offset = f'
    +     * this.size = s' = a + e + b
    +     * 
    + * The method does not implement the Python repertoire of slice indices but avoids indexing + * outside the bytearray by silently adjusting a to be within it. + * Negative d or e is treated as 0 and if d is too large, it is truncated to the array end. + * @param a index of hole in byte array + * @param d number to discard (will discard x[a,a+d-1]) + * @param e size of hole to open (will be x[a, a+e-1]) + */ + private void storageReplace(int a, int d, int e) { + + int s = this.size; + + // Some of these should perhaps be errors but let's silently correct insane requests + if (a<0) a=0; else if (a>s) a = s; + if (d<0) d=0; else if (d>s-a) d = s-a; + if (e<0) e=0; + + if (e != d) { + // Otherwise, everything stays where it is. + // Handy derived values: + int b = s - (a + d); // which is >= 0 + int s2 = a + e + b; // which is >= 0 + int f = this.offset; // Location of x[0] + int g = f + (a + d); // Location of x[-b] + + if (shouldShrink(s2)) { + if (s2 > 0) + // We have far more storage than we need: shrink and copy both parts + newStorage(f, a, g, b, e); + else + // Need no storage as a+e+b = 0 + setStorage(emptyStorage); + + } else if (a < b) { + // It would be less copying if we moved A=x[:a] not B=x[-b:]. + // If B is to stay where it is, it means A will land here: + int f2 = f - (e - d); + if (f2 >= 0) { + // ... which luckily is still inside the array + if (a > 0) System.arraycopy(storage, f, storage, f2, a); + this.offset = f2; + size = s2; + } else { + // ... which unfortunately is before the start of the array. + // We have to move both A and B and it might be time for a new array. + if (s2<=storage.length) + // Repack it all in the existing array + newStorageAvoided(f, a, g, b, e); + else + newStorage(f, a, g, b, e); + } + + } else /* a >= b */{ + // It would be less copying if we moved B=x[-b:] not A=x[:a] + // If A is to stay where it is, it means B will land here: + int g2 = g + (e - d); + if (g2 + b <= storage.length) { + // ... which luckily leaves all of B inside the array + if (b > 0) System.arraycopy(storage, g, storage, g2, b); + // this.offset is unchanged + size = s2; + } else { + // ... which unfortunately runs beyond the end of the array. + // We have to move both A and B and it might be time for a new array. + if (s2<=storage.length) + // Repack it all in the existing array + newStorageAvoided(f, a, g, b, e); + else + newStorage(f, a, g, b, e); + } + } + } + + } + + + /** + * Use the existing storage but move two blocks within it to leave a gap of the required size. + * This is the strategy usually used when the array is still big enough to hold the required + * new value, but we can't leave either block fixed. + * If the initial storage looks like this: + * + *
    +     * |-----f-----|--------a--------|---d---|----------b----------|----------|
    +     * 
    + * + * then after the call the storage looks like this: + * + *
    +     *        |-                             s'                          -|
    +     * |--f'--|--------a--------|---------e---------|----------b----------|---|
    +     * 
    + * + * where the regions of length a and b=size-(a+d) have been preserved + * and the gap between them adjusted to specification. The new offset f' is chosen heuristically + * by the method to optimise the efficiency of repeated adjustment near either end of the array, + * e.g. repeated prepend or append operations. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+e+b
    +     * 
    + * + * Arguments are not checked for validity at all. + * a, e and b are non-negative and not all zero. + * + * @param f location (with offset) of A + * @param a length of A + * @param g = f+a+d location (with offset) of B + * @param b length of B + * @param e gap between A and B in new storage. + */ + private void newStorageAvoided(int f, int a, int g, int b, int e) { + + // Shorthands + int s2 = a + e + b; + + // Choose the new offset f' to make prepend or append operations quicker. + // E.g. if insertion was near the end (b small) put most of the new space at the end. + int f2; + if (a == b) + // Mainly to trap the case a=b=0 + f2 = (storage.length - s2) / 2; + else { + // a and b are not both zero (since not equal) + long spare = storage.length - s2; + f2 = (int)((spare * b) / (a + b)); + } + // We have a new size and offset (but the same storage) + size = s2; + offset = f2; + + // This puts B at + int g2 = f2 + a + e; + + // We can make do with the existing array. Do an in place copy. + if (f2 + a > g) { + // New A overlaps existing B so we must copy B first + if (b > 0) System.arraycopy(storage, g, storage, g2, b); + if (a > 0) System.arraycopy(storage, f, storage, f2, a); + } else { + // Safe to copy A first + if (a > 0) System.arraycopy(storage, f, storage, f2, a); + if (b > 0) System.arraycopy(storage, g, storage, g2, b); + } + + } + + + /** + * Allocate new storage and copy two blocks from the current storage to it. If the initial + * storage looks like this: + * + *
    +     * |--f--|--------a--------|---d---|-----b-----|----------------|
    +     * 
    + * + * then after the call the (definitely new) storage looks like this: + * + *
    +     *            |-                   s'                -|
    +     * |----f'----|--------a--------|----e----|-----b-----|--------------|
    +     * 
    + * + * where the regions of length a and b=size-(a+d) have been preserved + * and the gap between them adjusted to specification. The new offset f' is chosen heuristically + * by the method to optimise the efficiency of repeated adjustment near either end of the array, + * e.g. repeated prepend or append operations. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+e+b
    +     * 
    + * + * Arguments are not checked for validity at all. + * a, e and b are non-negative and not all zero. + * + * @param f location (with offset) of A + * @param a length of A + * @param g = f+a+d location (with offset) of B + * @param b length of B + * @param e gap between A and B in new storage. + */ + private void newStorage(int f, int a, int g, int b, int e) { + // Enough room for the data and the gap + int s2 = a + e + b; + // Preserve a reference to the current data in the storage being discarded + byte[] source = this.storage; + // New storage with a bit of elbow-room + byte[] newStorage = new byte[roundUp(s2)]; + // Choose the new offset f' to make prepend or append operations quicker. + // E.g. if insertion was near the end (b small) put most of the new space at the end. + int f2; + if (a == b) + // Mainly to trap the case a=b=0 + f2 = (newStorage.length - s2) / 2; + else { + // a and b are not both zero (since not equal) + long spare = newStorage.length - s2; + f2 = (int)((spare * b) / (a + b)); + } + setStorage(newStorage, s2, f2); + + // Copy across the data + if (a > 0) System.arraycopy(source, f, storage, offset, a); + if (b > 0) System.arraycopy(source, g, storage, offset + (a + e), b); + } + + + /** + * Delete d elements at index a by moving together the surrounding + * elements. The method manipulates the storage array, size and + * offset, and will allocate a new storage array if necessary, or if the deletion + * is big enough. If the initial storage looks like this: + * + *
    +     * |-                           L                              -|
    +     *       |-                  s                -|
    +     * |--f--|--------a--------|---d---|-----b-----|----------------|
    +     * 
    + * + * then after the call the (possibly new) storage looks like this: + * + *
    +     * |-                 L'                     -|
    +     *      |-                  s'               -|
    +     * |-f'-|--------a--------|-----b-----|-------|
    +     * 
    + * + * where the regions of length a and b=size-(a+d) have been preserved + * and the gap between them eliminated. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+b
    +     * 
    + * The method does not implement the Python repertoire of slice indices but avoids indexing + * outside the bytearray by silently adjusting a to be within it. + * Negative d is treated as 0 and if d is too large, it is truncated to the array end. + * + * @param a index of hole in byte array + * @param d number to discard (will discard x[a,a+d-1]) + * @param e size of hole to open (will be x[a, a+e-1]) + */ + private void storageDelete(int a, int d) { + // storageReplace specialised for delete (e=0) + int s = this.size; + + // Some of these should perhaps be errors but let's silently correct insane requests + if (a < 0) a = 0; else if (a > s) a = s; + if (d < 0) d = 0; else if (d > s - a) d = s - a; + + // Handy derived values + int b = s - (a + d); // which is >= 0 + int s2 = s - d; // which is >= 0 + int f = this.offset; // Location of x[0] + int g = f + (a + d); // Location of x[-b] + + if (shouldShrink(s2)) { + // We have far more storage than we need: shrink and copy both parts + // Preserve a reference to the current data in the storage being discarded + byte[] source = this.storage; + // New storage with a bit of elbow-room + newStorage(s2); + // Copy across the data + if (a > 0) System.arraycopy(source, f, storage, offset, a); + if (b > 0) System.arraycopy(source, g, storage, offset + a, b); + + } else { + if (a < b) { + // It would be less copying if we moved A=x[:a] not B=x[-b:]. + // If B is to stay where it is, it means A will land here: + int f2 = f + d; + if (a > 0) System.arraycopy(storage, f, storage, f2, a); + this.offset = f2; + + } else /* a >= b */{ + // It would be less copying if we moved B=x[-b:] not A=x[:a] + // If A is to stay where it is, it means B will land here: + int g2 = f + a; + if (b > 0) System.arraycopy(storage, g, storage, g2, b); + } + } + } + + /** + * Delete d elements on a stride of c beginning at index + * a by moving together the surrounding elements. The method manipulates the + * storage array, size and offset, and will allocate a + * new storage array if the deletion is big enough. If the initial storage looks like this: + * + *
    +     * |-                               L                                -|
    +     *       |-                    s                    -|
    +     * |--f--|-----a-----|---------e---------|-----b-----|----------------|
    +     * 
    + * + * then after the call the (possibly new) storage looks like this: + * + *
    +     * |-                  L'                  -|
    +     *      |-                s'               -|
    +     * |-f'-|-----a-----|---(e-d)---|-----b-----|-------|
    +     * 
    + * + * where the regions of length a and b=size-(a+e) have been preserved + * and the e intervening elements reduced to e-d elements, by removing + * exactly the elements with indices (relative to the start of valid data) a+k*c + * for k=0...d-1. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+b
    +     * 
    + * + * The method does not implement the Python repertoire of slice indices but avoids indexing + * outside the bytearray by silently adjusting a to be within it. Negative d is treated as 0 and + * if d is too large, it is truncated to the array end. + * + * @param a index of hole in byte array + * @param c (>0) step size between the locations of elements to delete + * @param d number to discard (will discard x[a+k*c] for k=0...d-1) + */ + private void storageDeleteEx(int a, int c, int d) { + + // XXX Base this on storageReplace with the same a>> for method in dir(bytearray): + ... print method + ... + __add__ + __alloc__ + __class__ + __contains__ + __delattr__ + __delitem__ + __doc__ + __eq__ + __format__ + __ge__ + __getattribute__ + __getitem__ + __gt__ + __hash__ + __iadd__ + __imul__ + __init__ + __iter__ + __le__ + __len__ + __lt__ + __mul__ + __ne__ + __new__ + __reduce__ + __reduce_ex__ + __repr__ + __rmul__ + __setattr__ + __setitem__ + __sizeof__ + __str__ + __subclasshook__ + append + capitalize + center + count + decode + endswith + expandtabs + extend + find + fromhex + index + insert + isalnum + isalpha + isdigit + islower + isspace + istitle + isupper + join + ljust + lower + lstrip + partition + pop + remove + replace + reverse + rfind + rindex + rjust + rpartition + rsplit + rstrip + split + splitlines + startswith + strip + swapcase + title + translate + upper + zfill + >>> + */ \ No newline at end of file diff --git a/src/org/python/core/PyByteArrayDerived.java b/src/org/python/core/PyByteArrayDerived.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/PyByteArrayDerived.java @@ -0,0 +1,1116 @@ +/* Generated file, do not modify. See jython/src/templates/gderived.py. */ +package org.python.core; + +import java.io.Serializable; + +public class PyByteArrayDerived extends PyByteArray implements Slotted { + + public PyObject getSlot(int index) { + return slots[index]; + } + + public void setSlot(int index,PyObject value) { + slots[index]=value; + } + + private PyObject[]slots; + + private PyObject dict; + + public PyObject fastGetDict() { + return dict; + } + + public PyObject getDict() { + return dict; + } + + public void setDict(PyObject newDict) { + if (newDict instanceof PyStringMap||newDict instanceof PyDictionary) { + dict=newDict; + } else { + throw Py.TypeError("__dict__ must be set to a Dictionary "+newDict.getClass().getName()); + } + } + + public void delDict() { + // deleting an object's instance dict makes it grow a new one + dict=new PyStringMap(); + } + + public PyByteArrayDerived(PyType subtype) { + super(subtype); + slots=new PyObject[subtype.getNumSlots()]; + dict=subtype.instDict(); + } + + public PyString __str__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__str__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__str__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__str__(); + } + + public PyString __repr__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__repr__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__repr__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__repr__(); + } + + public PyString __hex__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__hex__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__hex__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__hex__(); + } + + public PyString __oct__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__oct__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__oct__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__oct__(); + } + + public PyFloat __float__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__float__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyFloat) + return(PyFloat)res; + throw Py.TypeError("__float__"+" returned non-"+"float"+" (type "+res.getType().fastGetName()+")"); + } + return super.__float__(); + } + + public PyComplex __complex__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__complex__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyComplex) + return(PyComplex)res; + throw Py.TypeError("__complex__"+" returned non-"+"complex"+" (type "+res.getType().fastGetName()+")"); + } + return super.__complex__(); + } + + public PyObject __pos__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__pos__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__pos__(); + } + + public PyObject __neg__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__neg__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__neg__(); + } + + public PyObject __abs__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__abs__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__abs__(); + } + + public PyObject __invert__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__invert__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__invert__(); + } + + public PyObject __reduce__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__reduce__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__reduce__(); + } + + public PyObject __add__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__add__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__add__(other); + } + + public PyObject __radd__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__radd__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__radd__(other); + } + + public PyObject __sub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__sub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__sub__(other); + } + + public PyObject __rsub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rsub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rsub__(other); + } + + public PyObject __mul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__mul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__mul__(other); + } + + public PyObject __rmul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rmul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rmul__(other); + } + + public PyObject __div__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__div__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__div__(other); + } + + public PyObject __rdiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rdiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rdiv__(other); + } + + public PyObject __floordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__floordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__floordiv__(other); + } + + public PyObject __rfloordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rfloordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rfloordiv__(other); + } + + public PyObject __truediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__truediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__truediv__(other); + } + + public PyObject __rtruediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rtruediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rtruediv__(other); + } + + public PyObject __mod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__mod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__mod__(other); + } + + public PyObject __rmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rmod__(other); + } + + public PyObject __divmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__divmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__divmod__(other); + } + + public PyObject __rdivmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rdivmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rdivmod__(other); + } + + public PyObject __rpow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rpow__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rpow__(other); + } + + public PyObject __lshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__lshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__lshift__(other); + } + + public PyObject __rlshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rlshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rlshift__(other); + } + + public PyObject __rshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rshift__(other); + } + + public PyObject __rrshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rrshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rrshift__(other); + } + + public PyObject __and__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__and__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__and__(other); + } + + public PyObject __rand__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rand__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rand__(other); + } + + public PyObject __or__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__or__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__or__(other); + } + + public PyObject __ror__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ror__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ror__(other); + } + + public PyObject __xor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__xor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__xor__(other); + } + + public PyObject __rxor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rxor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rxor__(other); + } + + public PyObject __lt__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__lt__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__lt__(other); + } + + public PyObject __le__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__le__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__le__(other); + } + + public PyObject __gt__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__gt__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__gt__(other); + } + + public PyObject __ge__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ge__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ge__(other); + } + + public PyObject __eq__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__eq__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__eq__(other); + } + + public PyObject __ne__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ne__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ne__(other); + } + + public PyObject __iadd__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iadd__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__iadd__(other); + } + + public PyObject __isub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__isub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__isub__(other); + } + + public PyObject __imul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__imul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__imul__(other); + } + + public PyObject __idiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__idiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__idiv__(other); + } + + public PyObject __ifloordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ifloordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ifloordiv__(other); + } + + public PyObject __itruediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__itruediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__itruediv__(other); + } + + public PyObject __imod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__imod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__imod__(other); + } + + public PyObject __ipow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ipow__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ipow__(other); + } + + public PyObject __ilshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ilshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ilshift__(other); + } + + public PyObject __irshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__irshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__irshift__(other); + } + + public PyObject __iand__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iand__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__iand__(other); + } + + public PyObject __ior__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ior__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ior__(other); + } + + public PyObject __ixor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ixor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ixor__(other); + } + + public PyObject __int__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__int__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger||res instanceof PyLong) + return res; + throw Py.TypeError("__int__"+" should return an integer"); + } + return super.__int__(); + } + + public PyObject __long__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__long__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyLong||res instanceof PyInteger) + return res; + throw Py.TypeError("__long__"+" returned non-"+"long"+" (type "+res.getType().fastGetName()+")"); + } + return super.__long__(); + } + + public int hashCode() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__hash__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger) { + return((PyInteger)res).getValue(); + } else + if (res instanceof PyLong) { + return((PyLong)res).getValue().intValue(); + } + throw Py.TypeError("__hash__ should return a int"); + } + if (self_type.lookup("__eq__")!=null||self_type.lookup("__cmp__")!=null) { + throw Py.TypeError(String.format("unhashable type: '%.200s'",getType().fastGetName())); + } + return super.hashCode(); + } + + public PyUnicode __unicode__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__unicode__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyUnicode) + return(PyUnicode)res; + if (res instanceof PyString) + return new PyUnicode((PyString)res); + throw Py.TypeError("__unicode__"+" should return a "+"unicode"); + } + return super.__unicode__(); + } + + public int __cmp__(PyObject other) { + PyType self_type=getType(); + PyObject[]where_type=new PyObject[1]; + PyObject impl=self_type.lookup_where("__cmp__",where_type); + // Full Compatibility with CPython __cmp__: + // If the derived type don't override __cmp__, the + // *internal* super().__cmp__ should be called, not the + // exposed one. The difference is that the exposed __cmp__ + // throws a TypeError if the argument is an instance of the same type. + if (impl==null||where_type[0]==TYPE||Py.isSubClass(TYPE,where_type[0])) { + return super.__cmp__(other); + } + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) { + return-2; + } + int c=res.asInt(); + return c<0?-1:c>0?1:0; + } + + public boolean __nonzero__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__nonzero__"); + if (impl==null) { + impl=self_type.lookup("__len__"); + if (impl==null) + return super.__nonzero__(); + } + PyObject o=impl.__get__(this,self_type).__call__(); + Class c=o.getClass(); + if (c!=PyInteger.class&&c!=PyBoolean.class) { + throw Py.TypeError(String.format("__nonzero__ should return bool or int, returned %s",self_type.getName())); + } + return o.__nonzero__(); + } + + public boolean __contains__(PyObject o) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__contains__"); + if (impl==null) + return super.__contains__(o); + return impl.__get__(this,self_type).__call__(o).__nonzero__(); + } + + public int __len__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__len__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger) + return((PyInteger)res).getValue(); + throw Py.TypeError("__len__ should return a int"); + } + return super.__len__(); + } + + public PyObject __iter__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iter__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + impl=self_type.lookup("__getitem__"); + if (impl==null) + return super.__iter__(); + return new PySequenceIter(this); + } + + public PyObject __iternext__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("next"); + if (impl!=null) { + try { + return impl.__get__(this,self_type).__call__(); + } catch (PyException exc) { + if (exc.match(Py.StopIteration)) + return null; + throw exc; + } + } + return super.__iternext__(); // ??? + } + + public PyObject __finditem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(key); + } catch (PyException exc) { + if (exc.match(Py.LookupError)) + return null; + throw exc; + } + return super.__finditem__(key); + } + + public PyObject __finditem__(int key) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(new PyInteger(key)); + } catch (PyException exc) { + if (exc.match(Py.LookupError)) + return null; + throw exc; + } + return super.__finditem__(key); + } + + public PyObject __getitem__(PyObject key) { + // Same as __finditem__, without swallowing LookupErrors. This allows + // __getitem__ implementations written in Python to raise custom + // exceptions (such as subclasses of KeyError). + // + // We are forced to duplicate the code, instead of defining __finditem__ + // in terms of __getitem__. That's because PyObject defines __getitem__ + // in terms of __finditem__. Therefore, we would end with an infinite + // loop when self_type.lookup("__getitem__") returns null: + // + // __getitem__ -> super.__getitem__ -> __finditem__ -> __getitem__ + // + // By duplicating the (short) lookup and call code, we are safe, because + // the call chains will be: + // + // __finditem__ -> super.__finditem__ + // + // __getitem__ -> super.__getitem__ -> __finditem__ -> super.__finditem__ + + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(key); + return super.__getitem__(key); + } + + public void __setitem__(PyObject key,PyObject value) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setitem__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(key,value); + return; + } + super.__setitem__(key,value); + } + + public PyObject __getslice__(PyObject start,PyObject stop,PyObject step) { // ??? + if (step!=null) { + return __getitem__(new PySlice(start,stop,step)); + } + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getslice__"); + if (impl!=null) { + PyObject[]indices=PySlice.indices2(this,start,stop); + return impl.__get__(this,self_type).__call__(indices[0],indices[1]); + } + return super.__getslice__(start,stop,step); + } + + public void __setslice__(PyObject start,PyObject stop,PyObject step,PyObject value) { + if (step!=null) { + __setitem__(new PySlice(start,stop,step),value); + return; + } + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setslice__"); + if (impl!=null) { + PyObject[]indices=PySlice.indices2(this,start,stop); + impl.__get__(this,self_type).__call__(indices[0],indices[1],value); + return; + } + super.__setslice__(start,stop,step,value); + } + + public void __delslice__(PyObject start,PyObject stop,PyObject step) { + if (step!=null) { + __delitem__(new PySlice(start,stop,step)); + return; + } + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delslice__"); + if (impl!=null) { + PyObject[]indices=PySlice.indices2(this,start,stop); + impl.__get__(this,self_type).__call__(indices[0],indices[1]); + return; + } + super.__delslice__(start,stop,step); + } + + public void __delitem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delitem__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(key); + return; + } + super.__delitem__(key); + } + + public PyObject __call__(PyObject args[],String keywords[]) { + ThreadState ts=Py.getThreadState(); + if (ts.recursion_depth++>ts.systemState.getrecursionlimit()) + throw Py.RuntimeError("maximum __call__ recursion depth exceeded"); + try { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__call__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(args,keywords); + return super.__call__(args,keywords); + } finally { + --ts.recursion_depth; + } + } + + public PyObject __findattr_ex__(String name) { + return Deriveds.__findattr_ex__(this,name); + } + + public void __setattr__(String name,PyObject value) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setattr__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(PyString.fromInterned(name),value); + return; + } + super.__setattr__(name,value); + } + + public void __delattr__(String name) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delattr__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(PyString.fromInterned(name)); + return; + } + super.__delattr__(name); + } + + public PyObject __get__(PyObject obj,PyObject type) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__get__"); + if (impl!=null) { + if (obj==null) + obj=Py.None; + if (type==null) + type=Py.None; + return impl.__get__(this,self_type).__call__(obj,type); + } + return super.__get__(obj,type); + } + + public void __set__(PyObject obj,PyObject value) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__set__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(obj,value); + return; + } + super.__set__(obj,value); + } + + public void __delete__(PyObject obj) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delete__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(obj); + return; + } + super.__delete__(obj); + } + + public PyObject __pow__(PyObject other,PyObject modulo) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__pow__"); + if (impl!=null) { + PyObject res; + if (modulo==null) { + res=impl.__get__(this,self_type).__call__(other); + } else { + res=impl.__get__(this,self_type).__call__(other,modulo); + } + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__pow__(other,modulo); + } + + public void dispatch__init__(PyObject[]args,String[]keywords) { + Deriveds.dispatch__init__(this,args,keywords); + } + + public PyObject __index__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__index__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger||res instanceof PyLong) { + return res; + } + throw Py.TypeError(String.format("__index__ returned non-(int,long) (type %s)",res.getType().fastGetName())); + } + return super.__index__(); + } + + public Object __tojava__(Class c) { + // If we are not being asked by the "default" conversion to java, then + // we can provide this as the result, as long as it is a instance of the + // specified class. Without this, derived.__tojava__(PyObject.class) + // would broke. (And that's not pure speculation: PyReflectedFunction's + // ReflectedArgs asks for things like that). + if ((c!=Object.class)&&(c!=Serializable.class)&&(c.isInstance(this))) { + return this; + } + // Otherwise, we call the derived __tojava__, if it exists: + PyType self_type=getType(); + PyObject impl=self_type.lookup("__tojava__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(Py.java2py(c)).__tojava__(Object.class); + return super.__tojava__(c); + } + + public Object __coerce_ex__(PyObject o) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__coerce__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(o); + if (res==Py.NotImplemented) + return Py.None; + if (!(res instanceof PyTuple)) + throw Py.TypeError("__coerce__ didn't return a 2-tuple"); + return((PyTuple)res).getArray(); + } + return super.__coerce_ex__(o); + } + + public String toString() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__repr__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (!(res instanceof PyString)) + throw Py.TypeError("__repr__ returned non-string (type "+res.getType().fastGetName()+")"); + return((PyString)res).toString(); + } + return super.toString(); + } + +} diff --git a/src/org/python/core/__builtin__.java b/src/org/python/core/__builtin__.java --- a/src/org/python/core/__builtin__.java +++ b/src/org/python/core/__builtin__.java @@ -296,6 +296,7 @@ dict.__setitem__("True", Py.True); dict.__setitem__("False", Py.False); dict.__setitem__("bytes", PyString.TYPE); + dict.__setitem__("bytearray", PyByteArray.TYPE); dict.__setitem__("memoryview", PyMemoryView.TYPE); // Work in debug mode by default diff --git a/src/templates/bytearray.derived b/src/templates/bytearray.derived new file mode 100644 --- /dev/null +++ b/src/templates/bytearray.derived @@ -0,0 +1,4 @@ +base_class: PyByteArray +want_dict: true +ctr: +incl: object diff --git a/src/templates/mappings b/src/templates/mappings --- a/src/templates/mappings +++ b/src/templates/mappings @@ -10,6 +10,7 @@ ClasspathPyImporter.derived:org.python.core.ClasspathPyImporterDerived PyFileIO.derived:org.python.modules._fileio.PyFileIODerived array.derived:org.python.core.PyArrayDerived +bytearray.derived:org.python.core.PyByteArrayDerived classmethod.derived:org.python.core.PyClassMethodDerived complex.derived:org.python.core.PyComplexDerived defaultdict.derived:org.python.modules._collections.PyDefaultDictDerived diff --git a/tests/java/org/python/core/BaseBytesTest.java b/tests/java/org/python/core/BaseBytesTest.java new file mode 100644 --- /dev/null +++ b/tests/java/org/python/core/BaseBytesTest.java @@ -0,0 +1,927 @@ +package org.python.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.python.util.PythonInterpreter; + +import junit.framework.TestCase; + +/** + * Unit test of org.python.core.BaseBytes, a class that supplies much of the behaviour of the Jython + * bytearray. In fact, it supplies almost all the immutable behaviour, and is abstract. In order to + * test it, we need to define a concrete extension nested class MyBytes that is, almost, the Jython + * 3.x bytes type. + *

    + * Tests here are aimed at: + *

      + *
    • construction of a correct internal buffer through the init methods
    • . + *
    • access methods for immutable types (such as {@link BaseBytes#getslice(int, int, int)}
    • . + *
    • access methods for mutable types throw exceptions
    • . + *
    • the java.util.List interface
    • . + *
    + * From this list the test currently lacks testing deletion, testing the List API and memoryview. + *

    + * The bulk of the functionality is tested in the Python regression tests (from CPythonLib. This + * test class can be extended to test subclasses of BaseBytes, and all the tests defined here will + * run for the subclass. + */ +public class BaseBytesTest extends TestCase { + + // Constants for array sizes + public static final int SMALL = 7; // Less than minimum storage size + public static final int MEDIUM = 25; // Medium array size + public static final int LARGE = 10000; // Large enough for performance measurement + public static final int HUGE = 100000; // Serious performance challenge + + /** + * @param name + */ + public BaseBytesTest(String name) { + super(name); + } + + static PythonInterpreter interp = null; + + Random random; + + public static char toChar(int b) { + return Character.toChars(0xff & b)[0]; + } + + /** + * Turn a String into ints, but in the Python byte range, reducing character codes mod 256. + * + * @param s the string + * @return + */ + public static int[] toInts(String s) { + int n = s.length(); + int[] r = new int[n]; + for (int i = 0; i < n; i++) { + int c = s.codePointAt(i); + r[i] = 0xff & c; + } + return r; + } + + /** + * Generate ints at random in the range 0..255. + * + * @param random the random generator + * @param n length of array + * @return the array of random values + */ + public static int[] randomInts(Random random, int n) { + int[] r = new int[n]; + for (int i = 0; i < n; i++) { + r[i] = random.nextInt(256); + } + return r; + } + + /** + * Generate ints at random in a restricted range. + * + * @param random the random generator + * @param n length of array + * @param lo lowest value to generate + * @param hi highest value to generate + * @return the array of random values + */ + public static int[] randomInts(Random random, int n, int lo, int hi) { + int[] r = new int[n]; + int m = hi + 1 - lo; + for (int i = 0; i < n; i++) { + r[i] = lo + random.nextInt(m); + } + return r; + } + + /** + * Compare expected and result array sections at specified locations and length. + * + * @param expected reference values + * @param first first value to compare in expected values + * @param result bytearray from method under test + * @param start first value to compare in result values + * @param len number of values to compare + */ + static void checkInts(int[] expected, int first, BaseBytes result, int start, int len) { + int end = first + len; + if (end > expected.length) end = expected.length; + for (int i = first, j = start; i < end; i++, j++) + assertEquals("element value", expected[i], result.intAt(j)); + } + + /** + * Compare expected and result array in their entirety. + * + * @param expected + * @param result + */ + static void checkInts(int[] expected, BaseBytes result) { + // Size must be the same + assertEquals("size", expected.length, result.size()); + // And each element + for (int i = 0; i < expected.length; i++) + assertEquals("element value", expected[i], result.intAt(i)); + } + + /** + * Compare expected List and result array in their entirety. + * + * @param expected + * @param result + */ + static void checkInts(List expected, BaseBytes result) { + // Size must be the same + assertEquals("size", expected.size(), result.size()); + // And each element + for (int i = 0; i < result.size; i++) { + PyInteger res = result.pyget(i); + PyInteger exp = expected.get(i); + // System.out.printf(" expected[%2d]=%3d b[%2d]=%3d\n", + // i, exp.asInt(), i, res.asInt()); + assertEquals("element value", exp, res); + } + } + + /** + * Compare expected List and result object in their entirety. + * + * @param expected + * @param result + */ + static void checkInts(List expected, PyObject result) { + checkInts(expected, (BaseBytes)result); + } + + /** + * Turn array into Iterable, treating as unsigned (Python-style) bytes, and producing + * an abusive mixture of object types. + * + * @return iterable list + */ + public static Iterable iterableBytes(int[] source) { + List list = new ArrayList(source.length); + int choose = 0; + for (int b : source) { + switch(choose++){ + case 0: + PyInteger i = new PyInteger(b); + list.add(i); + break; + + case 1: + PyLong l = new PyLong(b); + list.add(l); + break; + + default: + PyString s = new PyString(toChar(b)); + list.add(s); + choose = 0; + break; + } + } + return list; + } + + /* + * (non-Javadoc) + * + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + random = new Random(20120310L); + } + + + /** + * Test method for {@link org.python.core.BaseBytes#init(int)} via MyBytes constructor, and for + * {@link org.python.core.BaseBytes#size()}. + */ + public void testSize() { + // Local constructor from byte[] + int[] aRef = toInts("Chaque coquillage incrust?"); + BaseBytes a = getInstance(aRef); + System.out.println(toString(a)); + assertEquals(aRef.length, a.size()); + // init(int) at various sizes + for (int n : new int[] {0, 1, 2, 7, 8, 9, MEDIUM, LARGE, HUGE}) { + a = getInstance(n); + // System.out.println(toString(a)); + assertEquals("size()", n, a.size()); + assertEquals("__len__()", n, a.__len__()); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(BaseBytes)} via constructor on MyBytes. + */ + public void testInit_intArray() { + int[] aRef = toInts("Dans la grotte o? nous nous aim?mes"); + BaseBytes a = getInstance(aRef); + // Copy constructor b = bytes(a) + BaseBytes b = getInstance(a); + System.out.println(toString(b)); + assertEquals(a.size(), b.size()); + // assertEquals(a.storage, b.storage); // Supposed to share? + // Check we got the same bytes + for (int i = 0; i < a.size(); i++) + assertEquals(a.intAt(i), b.intAt(i)); + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(BaseBytes)} via constructor on MyBytes. + */ + public void testInit_Iterable() { + int[] aRef = toInts("A sa particularit?."); + // Make an Iterable of that + Iterable ia = iterableBytes(aRef); + BaseBytes a = getInstance(ia); + System.out.println(toString(a)); + assertEquals(aRef.length, a.size()); + checkInts(aRef, a); + + // Special cases: zero length + BaseBytes b = getInstance(iterableBytes(new int[0])); + // System.out.println(toString(b)); + assertEquals(0, b.size()); + + // Special cases: very short (innards of init() take a short cut in this case) + int[] cRef = toInts(":-)"); + BaseBytes c = getInstance(iterableBytes(cRef)); + // System.out.println(toString(c)); + assertEquals(cRef.length, c.size()); + checkInts(cRef, c); + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(PyObject)} via constructor on MyBytes. + */ + public void testInit_PyObject() { + // A scary set of objects + final PyObject[] brantub = {null, + new PyInteger(5), + new PyString("\u00A0\u00A1\u00A2\u00A3\u00A4"), + getInstance(new int[] {180, 190, 200}), + new PyXRange(1, 301, 50)}; + // The array contents we should obtain + final int[][] prize = { {}, + {0, 0, 0, 0, 0}, + {160, 161, 162, 163, 164}, + {180, 190, 200}, + {1, 51, 101, 151, 201, 251}}; + // Work down the lists + for (int dip = 0; dip < brantub.length; dip++) { + int[] aRef = prize[dip]; + BaseBytes a = getInstance(brantub[dip]); + // System.out.println(toString(a)); + assertEquals(aRef.length, a.size()); + // Check we got the same bytes + checkInts(aRef, a); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(PyObject)} via constructor on MyBytes, + * but where every example produced some kind of exception. + */ + public void testInit_Exceptions() { + // Need interpreter for exceptions to be formed properly + interp = new PythonInterpreter(); + // A scary set of objects + final PyObject[] brantub = {Py.None, + new PyInteger(-1), + new PyLong(0x80000000L), + new PyString("\u00A0\u0100\u00A2\u00A3\u00A4"), + new PyString("\u00A0\u00A0\u1000\u00A3\u00A4"), + new PyXRange(3, -2, -1), + new PyXRange(250, 257)}; + // The PyException types we should obtain + final PyObject[] boobyPrize = {Py.TypeError, // None + Py.ValueError, // -1 + Py.OverflowError, // 0x80000000L + Py.ValueError, // \u0100 byte + Py.ValueError, // \u1000 byte + Py.ValueError, // -1 in iterable + Py.ValueError // 256 in iterable + }; + // Work down the lists + for (int dip = 0; dip < brantub.length; dip++) { + PyObject aRef = boobyPrize[dip]; + try { + BaseBytes a = getInstance(brantub[dip]); + System.out.println(toString(a)); + fail("Exception not thrown for " + brantub[dip]); + } catch (PyException pye) { + // System.out.println(pye); + PyObject a = pye.type; + assertEquals(aRef, a); + } + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#pyget(int)}. + */ + public void testPyget() { + // Need interpreter + interp = new PythonInterpreter(); + // Fill and access via pyget + int[] aRef = randomInts(random, MEDIUM); + BaseBytes a = getInstance(aRef); + for (int i = 0; i < MEDIUM; i++) { + PyInteger r = a.pyget(i); + // System.out.printf(" aRef[%2d]=%3d r=%3d\n", i, aRef[i], r.asInt()); + assertEquals(aRef[i], r.asInt()); + } + // Check IndexError exceptions generated + for (int i : new int[] {-1, -100, MEDIUM, MEDIUM + 1}) { + try { + PyInteger r = a.pyget(i); + fail("Exception not thrown for pyget(" + i + ") =" + r); + } catch (PyException pye) { + assertEquals(Py.IndexError, pye.type); + // System.out.printf(" Exception: %s\n", pye); + } + } + } + + /** + * Test method for {@link BaseBytes#getslice(int, int, int)}. + * + * @see PySequence#__getslice__(PyObject, PyObject) + */ + public void testGetslice() { + // getslice() deals with start, stop, step already 'interpreted' by SequenceIndexDelegate. + String ver = "L'un a la pourpre de nos ?mes"; + final int L = ver.length(); + int[] aRef = toInts(ver); + BaseBytes a = getInstance(aRef); + List bList = new ArrayList(L); + + final int[] posStart = new int[] {0, 1, 18, L - 8, L - 1}; + final int[] negStart = new int[] {0, 3, 16, L - 10, L - 1}; + + // Positive step + for (int step = 1; step < 4; step++) { + for (int start : posStart) { + // Use step positively + for (int stop = start; stop <= L; stop++) { + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i < stop; i += step) { + // System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, step, i); + bList.add(new PyInteger(aRef[i])); + } + // Generate test result + // System.out.printf(" getslice(%d,%d,%d)\n", start, stop, step); + BaseBytes b = a.getslice(start, stop, step); + // System.out.println(toString(b)); + // Now check size and contents + checkInts(bList, b); + } + } + } + + // Negative step + for (int step = -1; step > -4; step--) { + for (int start : negStart) { + // Use step positively + for (int stop = -1; stop <= start; stop++) { + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i > stop; i += step) { + // System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, step, i); + bList.add(new PyInteger(aRef[i])); + } + // Generate test result + // System.out.printf(" getslice(%d,%d,%d)\n", start, stop, step); + BaseBytes b = a.getslice(start, stop, step); + // System.out.println(toString(b)); + // Now check size and contents + checkInts(bList, b); + } + } + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#repeat(int)}. + */ + public void testRepeatInt() { + String spam = "Spam, "; // Could it be anything else? + final int maxCount = 10; + final int L = spam.length(); + int[] aRef = toInts(spam); + BaseBytes a = getInstance(aRef); + + for (int count = 0; count <= maxCount; count++) { + // Reference answer + int[] bRef = new int[count * L]; + for (int i = 0; i < count; i++) + for (int j = 0; j < L; j++) + bRef[i * L + j] = aRef[j]; + // Test + BaseBytes b = a.repeat(count); + // System.out.println(toString(b)); + checkInts(bRef, b); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#pyset(int,PyObject)}, that it throws an + * exception by default. Override in tests of mutable subclasses. + */ + public void testPyset() { + PyObject bRef = Py.TypeError; + int[] aRef = toInts("This immutable type seems to allow modifications."); + BaseBytes a = getInstance(aRef); + int start = a.size() / 2; + PyInteger x = new PyInteger('x'); + + try { + a.pyset(start, x); + System.out.println(toString(a)); + fail(String.format("Exception not thrown for pyset(%d,%s)", start, x)); + } catch (PyException pye) { + // System.out.println(pye); + PyObject b = pye.type; + assertEquals(bRef, b); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#setslice(int,int,int,PyObject)}, that it + * throws an exception by default. Override in tests of mutable subclasses. + */ + public void testSetslice3() { + PyObject bRef = Py.TypeError; + int[] aRef = toInts("This immutable type seems to allow modifications."); + BaseBytes a = getInstance(aRef); + int start = a.size() / 4; + int stop = (3 * a.size() + 3) / 4; + int step = 3; + BaseBytes x = new MyBytes(randomInts(random, SMALL)); + + try { + a.setslice(start, stop, step, x); + System.out.println(toString(a)); + fail(String.format("Exception not thrown for setslice(%d,%d,%d,%s)", start, stop, step, + x)); + } catch (PyException pye) { + // System.out.println(pye); + PyObject b = pye.type; + assertEquals(bRef, b); + } + } + + /* + * Note that JUnit test classes extending this one inherit all the test* methods, and they will + * be run by JUnit. Each test uses getInstance() methods where it might have used a constructor + * with a similar signature. The idea is to override the getInstance() methods to return an + * instance of the class actually under test in the derived test. + */ + public BaseBytes getInstance(PyType type) { + return new MyBytes(type); + } + + public BaseBytes getInstance() { + return new MyBytes(); + } + + public BaseBytes getInstance(int size) { + return new MyBytes(size); + } + + public BaseBytes getInstance(int[] value) { + return new MyBytes(value); + } + + public BaseBytes getInstance(BaseBytes value) throws PyException { + return new MyBytes(value); + } + + public BaseBytes getInstance(MemoryViewProtocol value) throws PyException { + return new MyBytes(value); + } + + public BaseBytes getInstance(Iterable value) throws PyException { + return new MyBytes(value); + } + + public BaseBytes getInstance(PyString arg, PyObject encoding, PyObject errors) + throws PyException { + return new MyBytes(arg, encoding, errors); + } + + public BaseBytes getInstance(PyString arg, String encoding, String errors) throws PyException { + return new MyBytes(arg, encoding, errors); + } + + public BaseBytes getInstance(PyObject arg) throws PyException { + return new MyBytes(arg); + } + +// protected BaseBytes getInstance(int start, int stop, BaseBytes source) { +// return new MyBytes(start, stop, source); +// } + + /** + * Extension of class under test that makes the internal variables visible and adds constructors + * like a derived class would. + */ + public static class MyBytes extends BaseBytes { + + public static final PyType TYPE = PyType.fromClass(MyBytes.class); + + /** + * Create a zero-length Python byte array of explicitly-specified sub-type + * + * @param type explicit Jython type + */ + public MyBytes(PyType type) { + super(type); + } + + /** + * Create a zero-length Python byte array of my type. + */ + public MyBytes() { + super(TYPE); + } + + /** + * Create zero-filled Python byte array of specified size. + * + * @param size of byte array + */ + public MyBytes(int size) { + super(TYPE, size); + } + + /** + * Create from integer array + * + * @param value + */ + MyBytes(int[] value) { + super(TYPE, value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the source byte array. + * + * @param value of the bytes + */ + public MyBytes(BaseBytes value) { + super(TYPE); + init(value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the source. + * + * @param value source of the bytes (and size) + */ + public MyBytes(MemoryViewProtocol value) { + super(TYPE); + init(value.getMemoryView()); + } + + /** + * Create a new array filled from an iterable of PyObject. The iterable must yield objects + * convertible to Python bytes (non-negative integers less than 256 or strings of length 1). + * + * @param value of the bytes + */ + public MyBytes(Iterable value) { + super(TYPE); + init(value); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually + * a PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + public MyBytes(PyString arg, PyObject encoding, PyObject errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually + * a PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (may be null to select the default for this + * installation) + * @param errors name of optional errors policy + */ + public MyBytes(PyString arg, String encoding, String errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new MyBytes object from an arbitrary Python object according to the same rules + * as apply in Python to the bytes() constructor: + *

      + *
    • bytes() Construct a zero-length bytes (arg is null).
    • + *
    • bytes(int) Construct a zero-initialized bytes of the given length.
    • + *
    • bytes(iterable_of_ints) Construct from iterable yielding integers in [0..255]
    • + *
    • bytes(string [, encoding [, errors] ]) Construct from a text string, optionally using + * the specified encoding.
    • + *
    • bytes(unicode, encoding [, errors]) Construct from a unicode string using the + * specified encoding.
    • + *
    • bytes(bytes_or_bytearray) Construct as a mutable copy of existing bytes or bytearray + * object.
    • + *
    + * When it is necessary to specify an encoding, as in the Python signature + * bytes(string, encoding[, errors]), use the constructor + * {@link #MyBytes(PyString, String, String)}. If the PyString is actually a PyUnicode, an + * encoding must be specified, and using this constructor will throw an exception about + * that. + * + * @param arg primary argument from which value is taken (may be null) + * @throws PyException in the same circumstances as bytes(arg), TypeError for non-iterable, + * non-integer argument type, and ValueError if iterables do not yield byte + * [0..255] values. + */ + public MyBytes(PyObject arg) throws PyException { + super(TYPE); + init(arg); + } + + /** + * Constructor for local use that avoids copying the source data, providing a range-view + * into it. The need for this arises (probably) during expressions that refer to a slice as + * just one term. It is safe because MyBytes is immutable. But it may not be wise if the + * source object is a large array from which only a small part needs to be retained in + * memory. + * + * @param type explicit Jython type + * @param start index of first byte to use in source + * @param stop 1 + index of last byte to use in source + * @param source of the bytes + */ + protected MyBytes(int start, int stop, BaseBytes source) { + super(TYPE); + setStorage(source.storage, stop - start, start); + } + + /** + * Returns a PyByteArray that repeats this sequence the given number of times, as in the + * implementation of __mul__ for strings. + * + * @param count the number of times to repeat this. + * @return this byte array repeated count times. + */ + @Override + protected MyBytes repeat(int count) { + MyBytes ret = new MyBytes(); + ret.setStorage(repeatImpl(count)); + return ret; + } + + /** + * Returns a range of elements from the sequence. + * + * @see org.python.core.PySequence#getslice(int, int, int) + */ + @Override + protected MyBytes getslice(int start, int stop, int step) { + MyBytes r; + if (step == 1) { + // This is a contiguous slice [start:stop] so we can share storage + r = new MyBytes(); + if (stop > start) r.setStorage(storage, stop - start, start + offset); + } else { + // This is an extended slice [start:stop:step] so we have to copy elements from it + r = new MyBytes(sliceLength(start, stop, step)); + int iomax = r.size + r.offset; + for (int io = r.offset, jo = start; io < iomax; jo += step, io++) + r.storage[io] = storage[jo]; // Assign r[i] = this[j] + } + return r; + } + + /** + * Return number of elements + * + * @see org.python.core.PyObject#__len__() + */ + @Override + public int __len__() { + return size; + } + + } + + /** + * An object that for test purposes (of construction and slice assignment) contains an array of + * values that it is able to offer for reading through the MemoryView interface. + */ + public static class MemoryViewable extends PyObject implements MemoryViewProtocol { + + public static final PyType TYPE = PyType.fromClass(MemoryViewable.class); + + private MemoryView mv; + private byte[] store; + + /** + * Store integer array as bytes: range must be 0..255 inclusive. + * + * @param value integers to store + */ + MemoryViewable(int[] value) { + super(TYPE); + int n = value.length; + store = new byte[n]; + for (int i = 0; i < n; i++) + store[i] = (byte)value[i]; + } + + @Override + public MemoryView getMemoryView() { + if (mv == null) mv = new MemoryViewImpl(); + return mv; + } + + /** + * All instances of MemoryViewable have one dimension with stride one. + */ + private static final PyTuple STRIDES = new PyTuple(Py.One); + + /** + * Very simple MemoryView for one-dimensional byte array. + */ + class MemoryViewImpl implements MemoryView { + + private final PyTuple shape = new PyTuple(new PyInteger(store.length)); + + @Override + public String get_format() { + return "B"; + } + + @Override + public int get_itemsize() { + return 1; + } + + @Override + public PyTuple get_shape() { + return shape; + } + + @Override + public int get_ndim() { + return 1; + } + + @Override + public PyTuple get_strides() { + return STRIDES; + } + + @Override + public boolean get_readonly() { + return true; + } + + } + } + + /** + * Stringify in a form helpful when testing buffer manipulation. Show picture if not too long. + */ + protected String toString(BaseBytes b) { + Image i = new Image(); + i.showSummary(b); + if (b.storage.length >= 0 && b.storage.length <= 70) { + i.padTo(15); + i.showContent(b); + } + return i.toString(); + } + + /** + * Apparatus for producing a nice representation when studying buffer management. + */ + protected static class Image { + + private StringBuilder image = new StringBuilder(100); + + private void repeat(char c, int n) { + for (int i = 0; i < n; i++) + image.append(i == 0 ? '|' : ' ').append(c); + } + + // Show in image s[pos:pos+n] (as 2*n characters) + private void append(byte[] s, int pos, int n) { + if (pos < 0 || pos + n > s.length) return; + for (int i = 0; i < n; i++) { + int c = 0xff & ((int)s[pos + i]); + if (c == 0) + c = '.'; + else if (Character.isISOControl(c)) c = '#'; + image.append(i == 0 ? '|' : ' ').append(toChar(c)); + } + } + + // Show an extent of n bytes (as 2*n charactrs) + public void padTo(int n) { + while (n > image.length()) + image.append(' '); + } + + /** + * Write summary numbers offset [ size ] remainder + * + * @param b + */ + public String showSummary(BaseBytes b) { + image.append(b.offset); + image.append(" [ ").append(b.size).append(" ] "); + image.append(b.storage.length - (b.offset + b.size)); + return image.toString(); + } + + /** + * Make text image of just the buffer boundaries. + * + * @param b + */ + public String showExtent(BaseBytes b) { + repeat('-', b.offset); + repeat('x', b.size); + int tail = b.storage.length - (b.offset + b.size); + repeat('-', tail); + image.append('|'); + return image.toString(); + } + + /** + * Make text image of the buffer content and boundaries. + * + * @param b + */ + public String showContent(BaseBytes b) { + append(b.storage, 0, b.offset); + append(b.storage, b.offset, b.size); + int tail = b.storage.length - (b.offset + b.size); + append(b.storage, b.offset + b.size, tail); + image.append('|'); + return image.toString(); + } + + @Override + public String toString() { + return image.toString(); + } + } + + /** + * Example code equivalent to the code illustrating suboffsets in the C API at The new-style Py_buffer + * struct. buf is an n-dimensional array of Object, implementing the storage of + * some Python type, and it is required to access one element of it at an index defined by n + * integers in sequence. + * + * @param n The number of dimensions the memory represents as a multi-dimensional array. + * @param buf An n-dimensional array containing the value of the object + * @param strides An array of length n giving the number of elements to skip to get to a new + * element in each dimension + * @param suboffsets An array the length of n. + * @param indices An array of n indices indexing the element to retrieve. + * @return + */ + private static Object getItem(int n, Object buf, int[] strides, int[] suboffsets, int[] indices) { + for (int i = 0; i < n; i++) { + Object[] p = (Object[])buf; + buf = p[indices[i] * strides[i] + suboffsets[i]]; + } + return buf; + } + + /* + * If it was an ndim-dimensional array of byte, we treat it as an (ndim-1)-dimensional array of + * byte[] arrays. This method exemplifies getting just one byte. + */ + private static byte getByte(int ndim, Object buf, int[] strides, int[] suboffsets, int[] indices) { + int n = ndim - 1; + byte[] b = (byte[])getItem(n, buf, strides, suboffsets, indices); + return b[indices[n] + suboffsets[n]]; + } + +} diff --git a/tests/java/org/python/core/PyByteArrayTest.java b/tests/java/org/python/core/PyByteArrayTest.java new file mode 100644 --- /dev/null +++ b/tests/java/org/python/core/PyByteArrayTest.java @@ -0,0 +1,1061 @@ +package org.python.core; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import org.python.util.PythonInterpreter; + + +/** + * JUnit tests for PyByteArray. + */ +public class PyByteArrayTest extends BaseBytesTest { + + /** + * Constructor required by JUnit. + * @param name + */ + public PyByteArrayTest(String name) { + super(name); + } + + + /** + * Generate character codes for in a pattern matching an intended deletion or slice to be + * replaced. If c="adb", something like b'aaaaaaddddbbbb' where the 'd' characters should be + * deleted or replaced in the slice operation. + * + * @param na number of c.charAt(0) characters + * @param nd number of c.charAt(1) characters + * @param nb number of c.charAt(2) characters + * @param c character codes + * @return filled array + */ + public static int[] patternInts(int na, int nd, int nb, String c) { + int[] r = new int[na + nd + nb]; + int p = 0; + for (int i = 0; i < na; i++) + r[p++] = c.charAt(0); + for (int i = 0; i < nd; i++) + r[p++] = c.charAt(1); + for (int i = 0; i < nb; i++) + r[p++] = c.charAt(2); + return r; + } + + /** + * Generate character codes for 'a', 'D', 'b' in a pattern matching an intended deletion or + * slice to be replaced. Something like b'aaaaaaddddbbbb' where the 'E' characters should be + * deleted or replaced in the slice operation. + * + * @param na number of a characters + * @param nd number of D characters + * @param nb number of b characters + * @return filled array + */ + public static int[] adbInts(int na, int nd, int nb) { + return patternInts(na, nd, nb, "aDb"); + } + + /** + * Generate character codes for 'a', 'E', 'b' in a pattern matching an intended result of slice + * replacement. Something like b'aaaaaaEEEbbbb' where the 'E' characters are the replacement in + * the slice operation. + * + * @param na number of a characters + * @param ne number of E characters + * @param nb number of b characters + * @return filled array + */ + public static int[] aebInts(int na, int ne, int nb) { + return patternInts(na, ne, nb, "aEb"); + } + + /** + * Generate a tuple of int arrays at random in the range 0..255 for testing slice operations. + * In effect, the method generates 4 arrays of random data A, B, D, E and returns an array of three arrays formed thus: + * { A + D + B, A + E + B, E } where + means concatenation. This can be used to test slice + * assignment and deletion. + * + * @param random the random generator + * @param na the number of elements in A + * @param nd the number of elements in D (the deleted material) + * @param nb the number of elements in B + * @param ne the number of elements in E (the inserted material, 0 for slice deletion) + * @return three arrays of length na + nd + nb, na + ne + nb, and ne. + */ + public static int[][] randomSliceProblem(Random random, int na, int nd, int nb, int ne) { + int[] adb = new int[na + nd + nb]; + int[] aeb = new int[na + ne + nb]; + int[] e = new int[ne]; + int[][] ret = { adb, aeb, e }; + int p=0, q = 0; + // The A values go into adb and aeb + for (int i = 0; i < na; i++) { + int a = random.nextInt(256); + adb[p++] =a; + aeb[q++] =a; + } + // The D values go into adb only + for (int i = 0; i < nd; i++) { + int d = random.nextInt(256); + adb[p++] =d; + } + // The E values go into e and aeb + for (int i = 0; i < ne; i++) { + int x = random.nextInt(256); + e[p++] =x; + aeb[q++] =x; + } + // The B values go into adb and aeb + for (int i = 0; i < nb; i++) { + int b = random.nextInt(256); + adb[p++] =b; + aeb[q++] =b; + } + return ret; + } + + + /** + * Check result of slice operations, synthesised from the elements passed. This method accepts + * the 'dimensions' of a slice problem and tests whether a resulting byte array contains the + * correct result. The data elements have come from two existing arrays of (potentially) random + * data X and Y. Let N=na+nd+nb. The client has generated, in effect, 4 arrays A=X[:na], + * B=X[-nb:N], D=X[na:nb] and E=Y[:ne], and posed the problem setslice( A + D + B, E ), where + + * means concatenation in this expression, to which the answer should be A + E + B. This method + * checks that the result is exactly that. + * + * @param na the number of elements in A + * @param nd the number of elements in D (the deleted material) + * @param nb the number of elements in B + * @param ne the number of elements in E (the inserted material, 0 for slice deletion) + * @param x source of the A, D and B data + * @param y source of the E data + * @param result the result to be tested against A+E+B + */ + public static void checkSlice(int na, int nd, int nb, int ne, int[] x, int[] y, BaseBytes result) { + // Check the size is right + assertEquals("size", na + ne + nb, result.size()); + // Check that A is preserved + checkInts(x, 0, result, 0, na); + // Check that E is inserted + checkInts(y, 0, result, na, ne); + // Check that B is preserved + checkInts(x, na + nd, result, na + ne, nb); + } + + /** + * Check result of extended slice operations, synthesised from the elements passed. This method + * accepts the 'dimensions' of a slice problem and tests whether a resulting byte array contains + * the correct result. The result array has been filled from (the whole of) array x[], then + * slice assignment took place from y[k] to element u[start + k*step]. + * + * @param start + * @param step + * @param n number of steps + * @param x source of the original data + * @param y source of the assigned data + * @param u the result to be tested against properly selected elements of x and y + */ + public static void checkSlice(int start, int step, int n, int[] x, int[] y, BaseBytes u) { + // Check the size is right + assertEquals("size", x.length, u.size()); + if (step > 0) { + // Check before start of slice + int px = 0, py = 0; + for (; px < start; px++) + assertEquals("before slice", x[px], u.intAt(px)); + // Check slice-affected region at n assignments and n-1 gaps of length step-1. + if (n>0) assertEquals("first affected", y[py++], u.intAt(px++)); + for (int i = 1; i < n; i++) { + for (int j = 1; j < step; j++, px++) { + assertEquals("in gap", x[px], u.intAt(px)); + } + assertEquals("next affected", y[py++], u.intAt(px++)); + } + // Check after slice-affected region + for (; px < x.length; px++) + assertEquals("after slice", x[px], u.intAt(px)); + + } else { + // Negative step but easier to think about as a positive number + step = -step; + + // Check after start of slice + int px = x.length - 1, py = 0; + for (; px > start; --px) + assertEquals("after slice", x[px], u.intAt(px)); + // Check slice-affected region at n assignments and n-1 gaps of length step-1. + if (n>0) assertEquals("first affected", y[py++], u.intAt(px--)); + for (int i = 1; i < n; i++) { + for (int j = 1; j < step; j++, px--) { + assertEquals("in gap", x[px], u.intAt(px)); + } + assertEquals("next affected", y[py++], u.intAt(px--)); + } + // Check before slice-affected region + for (; px >= 0; px--) + assertEquals("before slice", x[px], u.intAt(px)); + + } + } + + /* (non-Javadoc) + * @see org.python.core.BaseBytesTest#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + } + + + /** + * Test method for {@link PyObject#__getslice__(PyObject, PyObject)}. + * + * @see BaseBytes#getslice(int, int) + */ + public void test__getslice__2() { + int verbose = 0; + // __getslice__() deals with start, stop values also relative to the end. + String ver = "D?rob?e au sang de nos c?urs"; + final int L = ver.length(); + int[] aRef = toInts(ver); + BaseBytes a = getInstance(aRef); + List bList = new ArrayList(L); + + // Need interpreter (for Py.None and exceptions) + interp = new PythonInterpreter(); + + final int[] posStart = new int[] {0, 8, 16, L - 5, L - 1}; + + for (int start : posStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start > 0) + // The other way of saying [start:stop] is [start-L:stop] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [0:stop] is [:stop] + pyStart_L = Py.None; + + for (int stop = start; stop <= L; stop++) { + + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i < stop; i++) { + if (verbose >= 5) System.out.printf(" (%d,%d) i=%d\n", start, stop, i); + bList.add(new PyInteger(aRef[i])); + } + + // PyObject versions of stop + if (stop < L) + // The other way of saying [start:stop:+s] is [start:stop-L:+s] + pyStop_L = new PyInteger(stop - L); + else + // The other way of saying [start:L:+s] is [start::+s] + pyStop_L = Py.None; + pyStop = new PyInteger(stop); + + // Generate test result and check it + doTest__getslice__2(a, pyStart, pyStop, bList, verbose + 2); + // Repeat same result specifying start relative to end + doTest__getslice__2(a, pyStart_L, pyStop, bList, verbose); + // Repeat same result specifying stop relative to end + doTest__getslice__2(a, pyStart, pyStop_L, bList, verbose); + // Repeat same result specifying start and stop relative to end + doTest__getslice__2(a, pyStart_L, pyStop_L, bList, verbose); + } + } + } + + /** + * Common code to check {@link PyByteArray#__getslice__(PyObject, PyObject)} against a reference + * answer. + * + * @param a object under test + * @param pyStart + * @param pyStop + * @param bList reference answer + * @param verbose 0..4 control output + */ + private void doTest__getslice__2(BaseBytes a, + PyObject pyStart, + PyObject pyStop, + List bList, + int verbose) { + if (verbose >= 4) System.out.printf(" __getslice__(%s,%s)\n", pyStart, pyStop); + PyObject b = a.__getslice__(pyStart, pyStop); + if (verbose >= 3) System.out.println(toString((BaseBytes)b)); + checkInts(bList, b); + } + + /** + * Test method for {@link PyObject#__getslice__(PyObject, PyObject, PyObject)}. + * + * @see BaseBytes#getslice(int, int, int) + */ + public void test__getslice__3() { + int verbose = 0; + // __getslice__() deals with start, stop values also relative to the end. + String ver = "Quand je br?le et que tu t'enflammes ;"; + final int L = ver.length(); + int[] aRef = toInts(ver); + BaseBytes a = getInstance(aRef); + List bList = new ArrayList(L); + + // Need interpreter (for Py.None and exceptions) + interp = new PythonInterpreter(); + + // Positive step + + final int[] posStart = new int[] {0, 9, 22, L - 11, L - 1}; + // final int[] posStart = new int[] {0, 9, L-1}; + + for (int step = 1; step < 4; step++) { + PyInteger pyStep = new PyInteger(step); + for (int start : posStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start > 0) + // The other way of saying [start:stop:+s] is [start-L:stop:+s] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [0:stop:+s] is [:stop:+s] + pyStart_L = Py.None; + + for (int stop = start; stop <= L; stop++) { + + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i < stop; i += step) { + if (verbose >= 5) System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, + step, i); + bList.add(new PyInteger(aRef[i])); + } + + // PyObject versions of stop + if (stop < L) + // The other way of saying [start:stop:+s] is [start:stop-L:+s] + pyStop_L = new PyInteger(stop - L); + else + // The other way of saying [start:L:+s] is [start::+s] + pyStop_L = Py.None; + pyStop = new PyInteger(stop); + + // Generate test result and check it + doTest__getslice__3(a, pyStart, pyStop, pyStep, bList, verbose + 2); + // Repeat same result specifying start relative to end + doTest__getslice__3(a, pyStart_L, pyStop, pyStep, bList, verbose); + // Repeat same result specifying stop relative to end + doTest__getslice__3(a, pyStart, pyStop_L, pyStep, bList, verbose); + // Repeat same result specifying start and stop relative to end + doTest__getslice__3(a, pyStart_L, pyStop_L, pyStep, bList, verbose); + } + } + } + + // Negative step + + final int[] negStart = new int[] {0, 5, 14, L - 10, L - 1}; + // final int[] negStart = new int[] {0, 5, L-1}; + + for (int step = -1; step > -4; step--) { + PyInteger pyStep = new PyInteger(step); + for (int start : negStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start < L - 1) + // The other way of saying [start:stop:-s] is [start-L:stop:-s] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [L-1:stop:-s] is [:stop:-s] + pyStart_L = Py.None; + + for (int stop = start; stop >= -1; stop--) { + + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i > stop; i += step) { + if (verbose >= 5) System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, + step, i); + bList.add(new PyInteger(aRef[i])); + } + + // PyObject versions of stop + if (stop >= 0) + // The other way of saying [start:stop:-s] is [start:stop-L:-s] + pyStop_L = new PyInteger(stop - L); + else { + // intended final value is 0, but [start:-1:-s] doesn't mean that + stop = -(L+1); // This does. + pyStop_L = Py.None; // And so does [start::-s] + } + pyStop = new PyInteger(stop); + + // Generate test result and check it + doTest__getslice__3(a, pyStart, pyStop, pyStep, bList, verbose + 2); + // Repeat same result specifying start relative to end + doTest__getslice__3(a, pyStart_L, pyStop, pyStep, bList, verbose); + // Repeat same result specifying stop relative to end + doTest__getslice__3(a, pyStart, pyStop_L, pyStep, bList, verbose); + // Repeat same result specifying start and stop relative to end + doTest__getslice__3(a, pyStart_L, pyStop_L, pyStep, bList, verbose); + } + } + } + } + + /** + * Common code to check {@link PyByteArray#__getslice__(PyObject, PyObject, PyObject)} against a + * reference answer. + * + * @param a answer from method under test + * @param pyStart + * @param pyStop + * @param pyStep + * @param bList reference answer + * @param verbose 0..4 control output + */ + private void doTest__getslice__3(BaseBytes a, + PyObject pyStart, + PyObject pyStop, + PyObject pyStep, + List bList, + int verbose) { + if (verbose >= 4) System.out.printf(" __getslice__(%s,%s,%s)\n", pyStart, pyStop, pyStep); + PyObject b = a.__getslice__(pyStart, pyStop, pyStep); + if (verbose >= 3) System.out.println(toString((BaseBytes)b)); + checkInts(bList, b); + } + + + /** + * Test method for {@link PyByteArray#__setitem__(int,PyObject)}, and through it of + * {@link PyByteArray#pyset(int,PyObject)}. + */ + public void testPyset() { + int verbose = 0; + + // Need interpreter + interp = new PythonInterpreter(); + + // Fill with random stuff + int[] aRef = randomInts(random, MEDIUM); + BaseBytes a = getInstance(aRef); + for (int i = 0; i < MEDIUM; i++) { + int b = aRef[i] ^ 0x55; // != a[i] + PyInteger pyb = new PyInteger(b); + a.__setitem__(i, pyb); + int ai = a.pyget(i).asInt(); + if (verbose >= 3) { + System.out.printf(" __setitem__(%2d,%3d) : a[%2d]=%3d\n", i, b, i, ai); + } + assertEquals(b, ai); + } + + // Check ValueError exceptions generated + int[] badValue = {256, Integer.MAX_VALUE, -1, -2, -100, -0x10000, Integer.MIN_VALUE}; + for (int i : badValue) { + PyInteger b = new PyInteger(i); + try { + a.__setitem__(0, b); + fail("Exception not thrown for __setitem__(" + 0 + ", " + b + ")"); + } catch (PyException pye) { + assertEquals(Py.ValueError, pye.type); + if (verbose >= 2) System.out.printf(" Exception: %s\n", pye); + } + } + + // Check IndexError exceptions generated + PyInteger x = new PyInteger(10); + for (int i : new int[] {-1 - MEDIUM, -100 - MEDIUM, MEDIUM, MEDIUM + 1}) { + try { + a.__setitem__(i, x); + fail("Exception not thrown for __setitem__(" + i + ", x)"); + } catch (PyException pye) { + assertEquals(Py.IndexError, pye.type); + if (verbose >= 2) System.out.printf(" Exception: %s\n", pye); + } + } + + } + + /** + * Test method for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is simple (a contiguous 2-argument slice). + */ + public void testSetslice2() { + int verbose = 0; + + // Tests where we transform aaaaaDDDDbbbbb into aaaaaEEEEEEEbbbbb. + // Lists of the lengths to try, for each of the aaaa, DDDD, bbbb, EEEEEE sections + int[] naList = {2, 5, 0}; // Interesting cases: slice is at start, or not at start + int[] ndList = {5, 20, 0}; // Slice to replace is small, large or zero + int[] nbList = {4, 7, 0}; // Interesting cases: slice is at end, or not at end + int[] neList = {4, 5, 6, 20, 0}; // Insert smaller, same, large or zero + + for (int ne : neList) { + int[] eInts = new int[ne]; + Arrays.fill(eInts, 'E'); + PyByteArray e = new PyByteArray(eInts); + + for (int nd : ndList) + for (int na : naList) + for (int nb : nbList) { + int[] aRef = adbInts(na, nd, nb); + int[] bRef = aebInts(na, ne, nb); + + PyByteArray b = getInstance(aRef); + + byte[] oldStorage = b.storage; + + if (verbose >= 2) { + System.out.printf("setslice(%d,%d,%d,e[len=%d])\n", + na, na + nd, 1, ne); + if (verbose >= 3) System.out.println(toString(b)); + } + + b.setslice(na, na + nd, 1, e); + + if (verbose >= 2) { + boolean avAlloc = (b.storage != oldStorage) + && (bRef.length <= oldStorage.length); + if (b.storage.length * 2 < oldStorage.length) avAlloc = false; + System.out.println(toString(b) + (avAlloc ? " avoidable new" : "")); + } + checkInts(bRef, b); + } + } + + // Insertions at a range of positions and all sizes with random data + + final int AMAX = SMALL; + final int BMAX = SMALL; + final int DMAX = MEDIUM; + final int EMAX = MEDIUM; + + int[] xInts = randomInts(random, AMAX + DMAX + BMAX, 'u', 'z'); + int[] yInts = randomInts(random, EMAX, 'A', 'H'); + PyByteArray x = getInstance(xInts); + PyByteArray y = getInstance(yInts); + + int[] nbList2 = {0, 1, BMAX}; + + for (int na = 0; na <= AMAX; na++) + for (int nb : nbList2) { + for (int nd = 0; nd < DMAX; nd++) + for (int ne = 0; ne < EMAX; ne++) { + PyByteArray u = x.getslice(0, na + nd + nb, 1); + PyByteArray e = y.getslice(0, ne, 1); + if (verbose >= 2) { + System.out.printf("setslice(start=%d, stop=%d, step=%d, e[len=%d])\n", + na, na + nd, 1, ne); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.setslice(na, na + nd, 1, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(na, nd, nb, ne, xInts, yInts, u); + } + } + } + + /** + * Test method for {@link PyByteArray#__setslice__(PyObject, PyObject, PyObject)}, when the + * slice to replace is simple (a contiguous 2-argument slice). + */ + public void test__setslice__2() { + int verbose = 0; + // __setslice__() deals with start, stop values also relative to the end. + String ver = "Cet autre affecte tes langueurs"; + final int L = ver.length(); + int[] uRef = toInts(ver); + + // Need interpreter (for Py.None and exceptions) + interp = new PythonInterpreter(); + + // Source of assigned values. + int[] eRef = randomInts(random, 2*SMALL, 'V', 'Z'); + BaseBytes eFull = new BaseBytesTest.MyBytes(eRef); + + final int[] posStart = new int[] {0, 4, 10, 18, L - 9}; + final int[] posStop = new int[] {0, 3, 9, 17, L - 10, L}; + + for (int start : posStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start > 0) + // The other way of saying [start:stop] is [start-L:stop] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [0:stop] is [:stop] + pyStart_L = Py.None; + + for (int stop : posStop) { + if (stop < start) continue; // Skip backwards cases + + // PyObject versions of stop + if (stop < L) + // The other way of saying [start:stop] is [start:stop-L] + pyStop_L = new PyInteger(stop - L); + else + // The other way of saying [start:L] is [start:] + pyStop_L = Py.None; + pyStop = new PyInteger(stop); + + for (int n = 0; n <= eRef.length; n++) { + // Generate test result and check it + doTest__setslice__2(uRef, pyStart, pyStop, eFull, n, eRef, start, stop, + verbose + 2); + // Repeat same result specifying start relative to end + doTest__setslice__2(uRef, pyStart_L, pyStop, eFull, n, eRef, start, stop, + verbose); + // Repeat same result specifying stop relative to end + doTest__setslice__2(uRef, pyStart, pyStop_L, eFull, n, eRef, start, stop, + verbose); + // Repeat same result specifying start and stop relative to end + doTest__setslice__2(uRef, pyStart_L, pyStop_L, eFull, n, eRef, start, stop, + verbose); + } + } + } + } + + /** + * Common code to check {@link PyByteArray#__setslice__(PyObject, PyObject, PyObject)} against a + * reference answer. + * + * @param uRef to initialise the object to test + * @param pyStart + * @param pyStop + * @param eFull byte array from which to take a slice to insert + * @param n length of the slice to take from eFull + * @param eRef from which eFull was initialised + * @param verbose 0..4 control output + */ + private void doTest__setslice__2(int[] uRef, + PyObject pyStart, + PyObject pyStop, + BaseBytes eFull, + int n, + int[] eRef, + int start, int stop, int verbose) { + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 4) { + System.out.printf(" __setslice__(%s,%s,e[0:%d])\n", pyStart, pyStop, n); + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + // Now do the test + u.__setslice__(pyStart, pyStop, e); + if (verbose >= 3) System.out.println("u'= " + toString(u)); + int nd = stop-start; + int nb = uRef.length-stop; + checkSlice(start, nd, nb, n, uRef, eRef, u); + } + + /** + * Test method for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is extended (3-argument slice and step!=0). Note that PySequence checks and + * converts arguments first, so we need only test with valid combinations of indices. + */ + public void testSetslice3() { + int verbose = 0; + + // Need interpreter + interp = new PythonInterpreter(); + + // Source of assigned values. + int[] eRef = randomInts(random, MEDIUM, 'A', 'H'); + BaseBytes eFull = new BaseBytesTest.MyBytes(eRef); + int[] uRef = randomInts(random, MEDIUM, 'm', 's'); + + // Positive step sizes we will try + int[] posStep = {2, 3, 5, 8, 25, 100}; + + for (int start = 0; start < uRef.length; start++) { + // Bytes from start to end of array + int len = uRef.length - start; + for (int step : posStep) { + // Allowable number of assignments to end of array at given step size + int nmax = (len + step - 1) / step; + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) + 1; + // But any stop value in this range results in n assignments + for (int stop = last + 1; stop < last + step; stop++) { + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(start=%d, stop=%d, step=%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.setslice(start, stop, step, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + // Negative step sizes we will try + int[] negStep = {-1, -2, -5, -8, -25, -100}; + + for (int start = uRef.length - 1; start >= 0; start--) { + // Bytes from slice start to start of array + int len = start + 1; + for (int step : negStep) { + // Allowable number of assignments to end of array at given step size + int nmax = (len + (-step) - 1) / (-step); + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) - 1; + // But any stop value in this range results in n assignments + for (int stop = last; stop > last - (-step) && stop >= 0; stop--) { + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(start=%d, stop=%d, step=%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.setslice(start, stop, step, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + } + + + /** + * Test method for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is extended (3-argument slice and step!=0). Note that PySequence checks and + * converts arguments first, so we need only test with valid combinations of indices. + */ + public void test__setslice__3() { + int verbose = 0; + + // Need interpreter + interp = new PythonInterpreter(); + + // Source of assigned values. + int[] eRef = randomInts(random, MEDIUM, 'A', 'H'); + BaseBytes eFull = new BaseBytesTest.MyBytes(eRef); + + // Forwards cases + + int[] uRef = randomInts(random, MEDIUM, 'm', 's'); + + // Positive step sizes we will try + int[] posStep = {2, 3, 5, 8, 25, 100}; + + for (int start = 0; start < uRef.length; start++) { + PyInteger pyStart = new PyInteger(start); + // Bytes from start to end of array + int len = uRef.length - start; + for (int step : posStep) { + PyInteger pyStep = new PyInteger(step); + // Allowable number of assignments to end of array at given step size + int nmax = (len + step - 1) / step; + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) + 1; + // But any stop value in this range results in n assignments + for (int stop = last + 1; stop < last + step; stop++) { + PyInteger pyStop = new PyInteger(stop); + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(%d,%d,%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.__setslice__(pyStart, pyStop, pyStep, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + // Negative step sizes we will try + int[] negStep = {-1, -2, -5, -8, -25, -100}; + + for (int start = uRef.length - 1; start >= 0; start--) { + PyInteger pyStart = new PyInteger(start); + // Bytes from slice start to start of array + int len = start + 1; + for (int step : negStep) { + PyInteger pyStep = new PyInteger(step); + // Allowable number of assignments to end of array at given step size + int nmax = (len + (-step) - 1) / (-step); + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) - 1; + // But any stop value in this range results in n assignments + for (int stop = last; stop > last - (-step) && stop >= 0; stop--) { + PyInteger pyStop = new PyInteger(stop); + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(%d,%d,%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.__setslice__(pyStart, pyStop, pyStep, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + } + + /** + * Performance for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is simple and contiguous (2-argument slice). + */ + public void testSetsliceTime() { + int verbose = 0; + timeSetslice(100, SMALL, 2*SMALL, verbose); + timeSetslice(100, MEDIUM, MEDIUM, verbose); + timeSetslice(10, LARGE, LARGE/5, verbose); + timeSetslice(10, HUGE, HUGE/5, verbose); + } + + /** + * Tabulate the elapsed time for calls to setslice, for a given array size and maximum slice + * length to insert arrays of a range of sizes. + * + * @param repeats number of repeats over which to average + * @param N of bytearray subjected to the change + * @param M Size of change (inserted, removed or replaced slice) + * @param verbose Control level of textual output 0=none CSV-style, 1=just the timings, etc.. + */ + protected void timeSetslice(int repeats, int M, int N, int verbose) { + + // Trials we intend to do: insertion at a variety of points. + int[] startList = new int[11]; // 11 means 0%, 10%, 20%, ... 100% of N + for (int i = 0; i < startList.length; i++) + startList[i] = N * i / (startList.length - 1); + + // Insertion slice sizes. + int[] changeList = new int[11]; // 0%, ... 100% of M + for (int i = 0; i < changeList.length; i++) + changeList[i] = M * i / (changeList.length - 1); + + // We are going to tabulate this for each startList and changeList entry. + long[][] elapsed = new long[startList.length][changeList.length]; + // Initialise the timing record + for (int row = 0; row < startList.length; row++) + for (int col = 0; col < changeList.length; col++) + elapsed[row][col] = Long.MAX_VALUE; + + // Create test material as bytearrays + int[] xRef = randomInts(random, N, 'u', 'z'); + PyByteArray x = getInstance(xRef); + int[] yRef = randomInts(random, M, 'A', 'H'); + PyByteArray y = getInstance(yRef); + + // We will time repeated calls: need a fresh bytearray each time + PyByteArray[] u = new PyByteArray[repeats]; + + // Now take the shortest of 10 trials in each row and column + + // Work through the combinations necessary + for (int trial = 0; trial < 10; trial++) { + for (int row = 0; row < startList.length; row++) { + int na = startList[row]; + int nd = 0; + // nd = changeList[3]; // XXX experiment + // if (na+nd>N) nd = N-na; // XXX experiment + for (int col = 0; col < changeList.length; col++) { + int ne = changeList[col]; + int start = na; + int stop = na + nd; + // Data to replace the slice with + PyByteArray e = y.getslice(0, ne, 1); + + if (trial == 0) { + // First trial: do once untimed in order ensure classes loaded. + doTimeSetslice(u, start, stop, e, x, verbose); + checkSlice(na, nd, N - (na + nd), ne, xRef, yRef, u[0]); + } + + // Now do the trial properly + long t = doTimeSetslice(u, start, stop, e, x, -1); + + // Retain the shortest time so far + if (t < elapsed[row][col]) elapsed[row][col] = t; + } + } + } + + // Tabulate the time for each array size and change size + + System.out.print(" N , na "); + for (int col = 0; col < changeList.length; col++) + System.out.printf(", ne=%7d", changeList[col]); + System.out.println(", elements inserted: time in microseconds."); + + for (int row = 0; row < startList.length; row++) { + System.out.printf("%8d, %8d", N, startList[row]); + for (int col = 0; col < changeList.length; col++) { + double usPerCall = (1e-3 * elapsed[row][col]) / repeats; + System.out.printf(", %10.3f", usPerCall); + } + System.out.println(); + } + + } + + /** + * Time trial of {@link PyByteArray#setslice(int,int,int)}. Every element of the array of test + * objects will be initialised to the same value then the specified slice replacement will take + * place, with the block of repetitions timed. + * + * @param u array of test objects + * @param start + * @param stop + * @param e to insert over [start:stop] + * @param x value from which to initialise each test object + * @param verbose amount of output + * @return elapsed time in nanoseconds for setslice operation on array of objects + */ + private long doTimeSetslice(PyByteArray[] u, + int start, + int stop, + BaseBytes e, + BaseBytes x, + int verbose) { + + // The call is either to do a time trial (block of test objects) or one test + int repeats = 1; + if (verbose < 0) + // We're doing a timed trial on an array of identical objects. + repeats = u.length; + else + // We're testing the correctness of the code with one object. + repeats = 1; + + // Set up clean bytearray objects + for (int i = 0; i < repeats; i++) + u[i] = new PyByteArray(x); + + // First trial: do once untimed in order ensure classes loaded. + PyByteArray v = u[0]; + byte[] oldStorage = v.storage; + + if (verbose >= 3) { + System.out.printf("setslice(%d,%d,%d,e[%d])\n", start, stop, 1, e.size()); + System.out.println("u = " + toString(v)); + System.out.println("e = " + toString(e)); + } + + // Start the clock + long beginTime = System.nanoTime(); + // Do the work lots of times + for (int i = 0; i < repeats; i++) + u[i].setslice(start, stop, 1, e); + // Stop the clock + long t = System.nanoTime() - beginTime; + + // Diagnostic printout + if (verbose >= 2) { + byte[] newStorage = v.storage; + boolean avAlloc = (newStorage != oldStorage); + if (newStorage.length * 2 < oldStorage.length) avAlloc = false; + System.out.println("u'= " + toString(v) + (avAlloc ? " new" : "")); + } + + return t; + } + + +// /** +// * Test method for {@link org.python.core.PyByteArray#del(int)}. +// */ +// public void testDel() { +// fail("Not yet implemented"); +// } +// +// /** +// * Test method for {@link org.python.core.PyByteArray#delRange(int, int)}. +// */ +// public void testDelRange() { +// fail("Not yet implemented"); +// } +// + + + + /* + * Note that JUnit test classes extending this one inherit all the test* methods, and they will + * be run by JUnit. Each test uses getInstance() methods where it might have used a constructor + * with a similar signature. The idea is to override the getInstance() methods to return an + * instance of the class actually under test in the derived test. + */ + public PyByteArray getInstance(PyType type) { + return new PyByteArray(type); + } + + public PyByteArray getInstance() { + return new PyByteArray(); + } + + public PyByteArray getInstance(int size) { + return new PyByteArray(size); + } + + public PyByteArray getInstance(int[] value) { + return new PyByteArray(value); + } + + public PyByteArray getInstance(BaseBytes source) { + return new PyByteArray(source); + } + + public PyByteArray getInstance(Iterable source) { + return new PyByteArray(source); + } + + public PyByteArray getInstance(PyString arg, PyObject encoding, PyObject errors) { + return new PyByteArray(arg, encoding, errors); + } + + public PyByteArray getInstance(PyString arg, String encoding, String errors) { + return new PyByteArray(arg, encoding, errors); + } + + public PyByteArray getInstance(PyObject arg) throws PyException { + return new PyByteArray(arg); + } + + +} -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Tue Apr 10 20:38:08 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Tue, 10 Apr 2012 20:38:08 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_OMG_we_forgot_the_R_in_RPart?= =?utf8?b?aXRpb24gOiku?= Message-ID: http://hg.python.org/jython/rev/c8b6eeb51a2a changeset: 6554:c8b6eeb51a2a parent: 6551:c831e3426eec user: Frank Wierzbicki date: Tue Apr 10 11:35:28 2012 -0700 summary: OMG we forgot the R in RPartition :). files: src/org/python/core/PyString.java | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/org/python/core/PyString.java b/src/org/python/core/PyString.java --- a/src/org/python/core/PyString.java +++ b/src/org/python/core/PyString.java @@ -1275,7 +1275,7 @@ String sep; if (sepObj instanceof PyUnicode) { - return unicodePartition(sepObj); + return unicodeRpartition(sepObj); } else if (sepObj instanceof PyString) { sep = ((PyString) sepObj).getString(); } else { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Tue Apr 10 20:38:09 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Tue, 10 Apr 2012 20:38:09 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_default_-=3E_default?= =?utf8?b?KTogTWVyZ2Uu?= Message-ID: http://hg.python.org/jython/rev/f15da0d415db changeset: 6555:f15da0d415db parent: 6554:c8b6eeb51a2a parent: 6553:7e02da147bb9 user: Frank Wierzbicki date: Tue Apr 10 11:37:43 2012 -0700 summary: Merge. files: CoreExposed.includes | 1 + Misc/make_pydocs.py | 1 + src/org/python/core/BaseBytes.java | 1044 + src/org/python/core/BuiltinDocs.java | 8633 +++++---- src/org/python/core/PyByteArray.java | 1358 + src/org/python/core/PyByteArrayDerived.java | 1116 + src/org/python/core/__builtin__.java | 1 + src/templates/bytearray.derived | 4 + src/templates/mappings | 1 + tests/java/org/python/core/BaseBytesTest.java | 927 + tests/java/org/python/core/PyByteArrayTest.java | 1061 + 11 files changed, 10032 insertions(+), 4115 deletions(-) diff --git a/CoreExposed.includes b/CoreExposed.includes --- a/CoreExposed.includes +++ b/CoreExposed.includes @@ -5,6 +5,7 @@ org/python/core/PyBaseException.class org/python/core/PyBoolean.class org/python/core/PyBuiltinCallable.class +org/python/core/PyByteArray.class org/python/core/PyCell.class org/python/core/PyClass.class org/python/core/PyClassMethod.class diff --git a/Misc/make_pydocs.py b/Misc/make_pydocs.py --- a/Misc/make_pydocs.py +++ b/Misc/make_pydocs.py @@ -60,6 +60,7 @@ set, frozenset, BaseException, +bytearray, #buffer, # + type(f), diff --git a/src/org/python/core/BaseBytes.java b/src/org/python/core/BaseBytes.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/BaseBytes.java @@ -0,0 +1,1044 @@ +package org.python.core; + +import java.util.AbstractList; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; + +/** + * Base class for Jython bytearray (and bytes in due course) that provides most of the Java API, + * including Java List behaviour. Attempts to modify the contents through this API will throw + * a TypeError if the actual type of the object is not mutable. + *

    + * It is possible for a Java client to treat this class as a List<PyInteger>, + * obtaining equivalent functionality to the Python interface in a Java paradigm. + * The reason + * {@link } + *

    Subclasses must define (from {@link PySequence}):

      + *
    • {@link #getslice(int, int, int)}
    • + *
    • {@link #repeat(int)}
    • + *
    each returning an appropriate concrete type. Mutable subclasses should override:
      + *
    • {@link #pyset(int, PyObject)}
    • + *
    • {@link #setslice(int, int, int, PyObject)}
    • + *
    • {@link #del(int)}
    • + *
    • {@link #delRange(int, int)}
    • + *
    + * since the default implementations will otherwise throw an exception. + */ +public abstract class BaseBytes extends PySequence implements MemoryViewProtocol, List { + + /** + * Simple constructor of empty zero-length array of defined type. + * @param type explicit Jython type + */ + public BaseBytes(PyType type) { + super(type); // implicit setStorage( emptyStorage ); + setStorage(emptyStorage); + } + + /** + * Simple constructor of zero-filled array of defined size and type. + * @param size required + * @param type explicit Jython type + */ + public BaseBytes(PyType type, int size) { + super(type); + newStorage( size ); + } + + /** + * Construct byte array of defined type by copying values from int[]. + * + * @param type explicit Jython type + * @param value source of values (and size) + */ + public BaseBytes(PyType type, int[] value) { + super(type); + int n = value.length; + newStorage(n); + for (int i = offset, j = 0; j < n; i++, j++) // Note offset may be non-zero + storage[i] = byteCheck(value[j]); + } + + /** + * Construct byte array of defined type by copying character values from a String. These values + * have to be in the Python byte range 0 to 255. + * + * @param type explicit Jython type + * @param value source of characters + * @throws PyException if any value[i] > 255 + */ + protected BaseBytes(PyType type, String value) throws PyException { + super(type); + int n = value.length(); + newStorage(n); + int i = offset + size; + while (n > 0) + storage[--i] = byteCheck(value.charAt(--n)); + } + + /** + * Helper for constructors and methods that manipulate the storage in mutable subclasses. It + * also permits shared storage between objects, which in general is unsafe if the storage is + * subject to modification independent of the object now being created. Immutable types may + * share storage (safely). + * + * @param storage byte array allocated by client + * @param size number of bytes actually used + * @param offset index of first byte used + * @throws IllegalArgumentException if the range [offset:offset+size] is not within the array + * bounds of storage or size<0. + */ + protected void setStorage(byte[] storage, int size, int offset) throws IllegalArgumentException { + if (size < 0 || offset < 0 || offset + size > storage.length) { + throw new IllegalArgumentException(); + } else { + this.storage = storage; + this.size = size; + this.offset = offset; + } + } + + /** + * Helper for constructors and methods that manipulate the storage in mutable subclassesin the + * case where the storage should consist of the first part of the given array. + * + * @param storage byte array allocated by client + * @param size number of bytes actually used + * @throws IllegalArgumentException if the range [0:size] is not within the array bounds of + * storage. + */ + protected void setStorage(byte[] storage, int size) throws IllegalArgumentException { + if (size < 0 || size > storage.length) { + throw new IllegalArgumentException(); + } else { + this.storage = storage; + this.size = size; + this.offset = 0; + } + } + + /** + * Helper for constructors and methods that manipulate the storage in mutable subclasses in the + * case where the storage should consist of exactly the whole of the given array. + * + * @param storage byte array allocated by client + */ + protected void setStorage(byte[] storage) { + this.storage = storage; + this.size = storage.length; + this.offset = 0; + } + + + /* + * ======================================================================================== + * Support for memoryview + * ======================================================================================== + * + * This is present in order to facilitate development of PyMemoryView which a full + * implementation of bytearray would depend on, while at the same time a full implementation of + * memoryview depends on bytearray. + */ + /** + * Get hold of a memoryview on the current byte array. + * @see MemoryViewProtocol#getMemoryView() + */ + @Override + public MemoryView getMemoryView() { + if (mv == null) mv = new MemoryViewImpl(); + return mv; + } + + private MemoryView mv; + + /** + * All instances of BaseBytes have one dimension with stride one. + */ + private static final PyTuple STRIDES = new PyTuple(Py.One); + + /** + * Very simple MemoryView for one-dimensional byte array. This lacks any actual access to the + * underlying storage as the interface is not presently defined. + */ + private class MemoryViewImpl implements MemoryView { + + private final PyTuple SHAPE = new PyTuple(new PyInteger(storage.length)); + + @Override + public String get_format() { + return "B"; + } + + @Override + public int get_itemsize() { + return 1; + } + + @Override + public PyTuple get_shape() { + return SHAPE; + } + + @Override + public int get_ndim() { + return 1; + } + + @Override + public PyTuple get_strides() { + return STRIDES; + } + + @Override + public boolean get_readonly() { + return true; + } + + } + + + /* + * ======================================================================================== + * Support for construction and initialisation + * ======================================================================================== + * + * Methods here help subclasses set the initial state. They are designed with bytearray in mind, + * but note that from Python 3, bytes() has the same set of calls and behaviours, although in + * Peterson's "sort of backport" to Python 2.x, bytes is effectively an alias for str and + * it shows. + */ + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * PyObject in subclasses. + * + * @see org.python.core.ByteArray#bytearray___init__(PyObject[], String[]) + * @see org.python.core.ByteArray#ByteArray(PyObject) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + protected void init(PyObject arg) { + + if (arg == null) { + /* + * bytearray() Construct a zero-length bytearray. + */ + setStorage(emptyStorage); + + } else if (arg instanceof PyString) { + /* + * bytearray(string) Construct from a text string by default encoding and error policy. + * Cases where encoding and error policy are specified explicitly are dealt with + * elsewhere. + */ + init((PyString)arg, (String)null, (String)null); // Casts select right init() + + } else if (arg.isIndex()) { + /* + * bytearray(int) Construct a zero-initialised bytearray of the given length. + */ + init(arg.asIndex(Py.OverflowError)); // overflow if too big to be Java int + + } else if (arg instanceof BaseBytes) { + /* + * bytearray copy of bytearray (or bytes) -- do efficiently + */ + init((BaseBytes)arg); + + } else if (arg instanceof MemoryViewProtocol) { + /* + * bytearray copy of object supporting Jython implementation of PEP 3118 + */ + init(((MemoryViewProtocol)arg).getMemoryView()); + + } else { + /* + * The remaining alternative is an iterable returning (hopefully) right-sized ints. If + * it isn't one, we get an exception about not being iterable, or about the values. + */ + init(arg.asIterable()); + + } + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from a + * text string with the specified encoding in subclasses. + * + * @see #bytearray___init__(PyObject[], String[]) + * @see PyByteArray#PyByteArray(PyString, String, String) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + protected void init(PyString arg, PyObject encoding, PyObject errors) { + String enc = encoding == null ? null : encoding.asString(); + String err = errors == null ? null : errors.asString(); + init(arg, enc, err); + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from a + * text string with the specified encoding in subclasses. + * + * @see #bytearray___init__(PyObject[], String[]) + * @see PyByteArray#PyByteArray(PyString, String, String) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding + * @param errors name of optional errors policy + */ + protected void init(PyString arg, String encoding, String errors) { + // Jython encode emits a String (not byte[]) + String encoded = encode(arg, encoding, errors); + newStorage(encoded.length()); + setBytes(0, encoded); + } + + + /** + * Helper for {@linkplain #setslice(int, int, int, PyObject)}, + * for __new__ and __init__ and the Java API constructor from a + * text string with the specified encoding in subclasses. This method thinly wraps a call to + * the codecs module and deals with checking + * for PyUnicode (where the encoding argument is mandatory). + * + * @see #ByteArray(PyString, String, String) + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding + * @param errors name of optional errors policy + * @return encoded string + * @throws PyException(TypeError) if the PyString is actually a PyUnicode and encoding is null + */ + protected static String encode(PyString arg, String encoding, String errors) throws PyException { + // Jython encode emits a String (not byte[]) + String encoded; + + if (arg instanceof PyUnicode) { + if (encoding != null) { + encoded = codecs.encode((PyUnicode)arg, encoding, errors); + } else { + throw Py.TypeError("unicode argument without an encoding"); + } + } else { + if (encoding != null) { + encoded = codecs.encode((PyString)arg, encoding, errors); + } else { + encoded = ((PyString)arg).getString(); + } + } + return encoded; + } + + + /** + * Fill a defined section of a byte array by copying character values from a String. These + * values have to be in the Python byte range 0 to 255. + * + * @param start index in this byte array at which the first character code lands + * @param value source of characters + * @throws PyException(ValueError) if any value[i] > 255 + */ + protected void setBytes(int start, String value) throws PyException { + int n = value.length(); + int io = offset + start; + for (int j = 0; j < n; j++) + storage[io++] = byteCheck(value.charAt(j)); + } + + /** + * Fill a strided slice of a byte array by copying character values from a String. These values + * have to be in the Python byte range 0 to 255. + * + * @param start index in this byte array at which the first character code lands + * @param value source of characters + * @throws PyException(ValueError) if any value[i] > 255 + */ + protected void setBytes(int start, int step, String value) throws PyException { + int n = value.length(); + int io = offset + start; + for (int j = 0; j < n; j++) { + storage[io] = byteCheck(value.charAt(j)); + io += step; + } + } + + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * int in subclasses. Construct zero-filled bytearray of specified size. + * + * @param n size of zero-filled array + */ + protected void init(int n) { + if (n < 0) { + throw Py.ValueError("negative count"); + } + newStorage(n); + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * objects supporting the Jython implementation of PEP 3118 (memoryview) in subclasses. + * + * @param value a memoryview object consistent with the slice assignment + * @throws PyException(NotImplementedError) until memoryview is properly supported + * @throws PyException(TypeError) if the memoryview is not byte-oriented + */ + protected void init(MemoryView value) throws PyException { + // XXX Support memoryview once means of access to bytes is defined + Py.NotImplementedError("memoryview not yet supported in bytearray"); + String format = value.get_format(); + boolean isBytes = format == null || "B".equals(format); + if (value.get_ndim() != 1 || !isBytes) { + Py.TypeError("memoryview value must be byte-oriented"); + } else { + // Dimensions are given as a PyTuple (although only one) + int len = value.get_shape().pyget(0).asInt(); + // XXX Access to memoryview bytes to go here + } + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * bytearray or bytes in subclasses. + * + * @param source bytearray (or bytes) to copy + */ + protected void init(BaseBytes source) { + newStorage(source.size); + System.arraycopy(source.storage, source.offset, storage, offset, size); + } + + /** + * Helper for __new__ and __init__ and the Java API constructor from + * an arbitrary iterable Python type in subclasses. This will include generators and lists. + * + * @param iter iterable source of values to enter in the array + */ + protected void init(Iterable iter) { + /* + * Different strategy is needed from that suited to "random append" operations. We shall + * have a stream of append operations, and it might be long. + */ + FragmentList fragList = new FragmentList(); + fragList.loadFrom(iter); + + // Now, aggregate all those fragments. + // + if (fragList.totalCount>0) { + + if (fragList.size()==1) { + // Note that the first fragment is small: negligible waste if stolen directly. + Fragment frag = fragList.getFirst(); + setStorage(frag.storage, frag.count); + + } else { + // Stitch the fragments together in new storage of sufficient size + newStorage(fragList.totalCount); + fragList.emptyInto(storage, offset); + } + + } else + // Nothing in the iterator + setStorage(emptyStorage); + } + + + + + /** + * Intended as a fragment of temporary storage for use we do not know how many bytes of allocate, and we are + * reading in some kind of iterable stream. + */ + protected static class Fragment { + + static final int MINSIZE = 8; + static final int MAXSIZE = 1024; + + byte[] storage; + int count = 0; + + Fragment(int size) { + storage = new byte[size]; + } + + // Convert to byte and add to buffer + boolean isFilledBy(PyObject value) { + storage[count++] = byteCheck(value); + return count == storage.length; + } + } + + /** + * A container of temporary storage when we do not know how many bytes to allocate, and we are + * reading in some kind of iterable stream. + */ + protected static class FragmentList extends LinkedList { + + /** + * Total number of bytes being held. + */ + int totalCount = 0; + + /** + * Load bytes into the container from the given iterable + * + * @param iter iterable source of values to enter into the container + * @throws PyException(TypeError) if any value not acceptable type + * @throws PyException(ValueError) if any value<0 or value>255 or string length!=1 + */ + void loadFrom(Iterable iter) throws PyException { + + int fragSize = Fragment.MINSIZE; + Fragment curr = null; + + // Allocate series of fragments as needed, while the iterator runs to completion + // + for (PyObject value : iter) { + if (curr == null) { + // Need a new Fragment + curr = new Fragment(fragSize); + add(curr); + if (fragSize < Fragment.MAXSIZE) { + fragSize <<= 1; + } + } + // Insert next item from iterator. + if (curr.isFilledBy(value)) { + // Fragment is now full: signal a new one will be needed + totalCount += curr.count; + curr = null; + } + } + + // Don't forget the bytes in the final Fragment + if (curr != null) { + totalCount += curr.count; + } + } + + /** + * Move the contents of this container to the given byte array at the specified index. + * This method leaves this container empty. + * @param target destination array + * @param p position to write first byte + */ + void emptyInto(byte[] target, int p) { + + for (Fragment frag : this) { + System.arraycopy(frag.storage, 0, target, p, frag.count); + p += frag.count; + } + clear(); // Encourage recycling + totalCount = 0; + } + + /** + * Move the contents of this container to a strided subset of the given byte array at the + * specified index. Bytes are assigned at start, start+step, start+2*step, and so on until + * we run out. (You must have checked beforehand that the destination is big enough.) This + * method leaves this container empty. If the step size is one, it would be much quicker to + * call {@link BaseBytes#emptyInto(byte[], int)} + * + * @param target destination array + * @param start position to write first byte + * @param step amount to advance index with each byte + */ + void emptyInto(byte[] target, int start, int step) { + int p = start; + for (Fragment frag : this) { + for (int i = 0; i < frag.count; i++) { + target[p] = frag.storage[i]; + p += step; + } + } + clear(); // Encourage recycling + totalCount = 0; + } + + } + + + + /* ======================================================================================== + * Sharable storage + * ======================================================================================== + * + * The storage is provided by a byte array that may be somewhat larger than the number of + * bytes actually stored, and these bytes may begin at an offset within the storage. + * Immutable subclasses of BaseBytes may exploit this to share storage when + * constructed from a slice of another immutable subclass. Mutable subclasses may exploit it + * to provide efficient insertions near the start of the array. + */ + + /** Empty storage constant */ + protected static final byte[] emptyStorage = new byte[0]; + + /** Storage array. */ + protected byte[] storage; + + /** Number of bytes actually used in storage array. */ + protected int size; + + /** Index of first byte used in storage array. */ + protected int offset; + + /** + * Check that an index is within the range of the array, that is 0<=index<size. + * @param index to check + * @throws PyException(IndexError) if the index is outside the array bounds + */ + protected final void indexCheck(int index) throws PyException { + if (index<0 || index>=size) { + throw Py.IndexError(getType().fastGetName() + " index out of range"); + } + } + + /** + * Allocate fresh, zero-filled storage for the requested number of bytes and make that the size. + * If the size needed is zero, the "storage" allocated is the shared emptyStorage array. The + * allocated size may be bigger than needed, and the method chooses a value for offset. + * + * @param needed becomes the new value of this.size + */ + protected void newStorage(int needed) { + // The implementation for immutable arrays allocates exactly, and with offset zero. + if (needed > 0) { + setStorage(new byte[needed]); // guaranteed zero (by JLS 2ed para 4.5.5) + } else { + setStorage(emptyStorage); + } + } + + + /** + * Check that an integer is suitable for storage in a (Python) byte array, + * and convert it to the Java byte value that can be stored there. + * (Java bytes run -128..127 whereas Python bytes run 0..255.) + * @param value to convert. + * @throws PyException(ValueError) if value<0 or value>255 + */ + protected static final byte byteCheck(int value) throws PyException { + if (value<0 || value>=255) { + throw Py.ValueError("byte must be in range(0, 256)"); + } + return (byte) value; + } + + /** + * Check that the value of an PyInteger is suitable for storage in a (Python) byte array, + * and convert it to the Java byte value that can be stored there. + * (Java bytes run -128..127 whereas Python bytes run 0..255.) + * @param value to convert. + * @throws PyException(ValueError) if value<0 or value>255 + */ + protected static final byte byteCheck(PyInteger value) throws PyException { + return byteCheck(value.asInt()); + } + + /** + * Check that the type and value of a PyObject is suitable for storage in a (Python) byte + * array, and convert it to the Java byte value that can be stored there. + * (Java bytes run -128..127 whereas Python bytes run 0..255.) + * Acceptable types are:
      + *
    • PyInteger in range 0 to 255 inclusive
    • + *
    • PyLong in range 0 to 255 inclusive
    • + *
    • PyString of length 1
    • + *
    + * @param value to convert. + * @throws PyException(TypeError) if not acceptable type + * @throws PyException(ValueError) if value<0 or value>255 or string length!=1 + */ + protected static final byte byteCheck(PyObject value) throws PyException { + if (value instanceof PyInteger || value instanceof PyLong) { + // This will possibly produce Py.OverflowError("long int too large to convert") + return byteCheck(value.asInt()); + } else if (value instanceof PyString) { + String strValue = ((PyString)value).getString(); + if (strValue.length() != 1) { + throw Py.ValueError("string must be of size 1"); + } + return byteCheck(strValue.charAt(0)); + } else + throw Py.TypeError("an integer or string of size 1 is required"); + } + + /* ======================================================================================== + * API for org.python.core.PySequence + * ======================================================================================== + */ + protected PyInteger pyget(int index) { + return new PyInteger(intAt(index)); + } + + /* We're not implementing these here, but we can give a stronger guarantee about the return + * type and save some casting and type anxiety. + */ + protected abstract BaseBytes getslice(int start, int stop, int step); + protected abstract BaseBytes repeat(int count); + + /* + * And this extension point should be overridden in mutable subclasses + */ + + /** + * Insert the element (interpreted as a Python byte value) at the given index. The default + * implementation produces a Python TypeError, for the benefit of immutable types. Mutable types + * must override it. + * + * @param index to insert at + * @param element to insert (by value) + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + * @throws PyException(TypeError) if the subclass is immutable + */ + public void pyadd(int index, PyInteger element) { + // This won't succeed: it just produces the right error. + // storageReplace(index, 0, 1); + pyset(index, element); + } + + /* ======================================================================================== + * API for Java access as byte[] + * ======================================================================================== + * + * Just the immutable case for now + */ + + /** + * No range check access to byte[index]. + * @param index + * @return the byte at the given index + */ + private final synchronized byte byteAt(int index) { + return storage[index+offset]; + } + + /** + * Return the Python byte (in range 0 to 255 inclusive) at the given index. + * @param index of value in byte array + * @return the integer value at the index + * @throws PyException(IndexError) if the index is outside the array bounds + */ + public synchronized int intAt(int index) throws PyException { + indexCheck(index); + return 0xff & ((int)byteAt(index)); + } + + /** + * Helper to implement {@link #repeat(int)}. Use something like: + * + *
    +     * 
    +     * @Override
    +     * protected PyByteArray repeat(int count) {
    +     *     PyByteArray ret = new PyByteArray();
    +     *     ret.setStorage(repeatImpl(count));
    +     *     return ret;
    +     * }
    +     * 
    + * + * @param count the number of times to repeat this. + * @return this byte array repeated count times. + */ + protected synchronized byte[] repeatImpl(int count) { + byte[] dst = new byte[count * size]; + for (int i = 0, p = 0; i < count; i++, p += size) { + System.arraycopy(storage, offset, dst, p, size); + } + return dst; + } + + + /* ======================================================================================== + * API for java.util.List + * ======================================================================================== + */ + + /** + * Access to the bytearray (or bytes) as a {@link java.util.List}. The List interface supplied + * by BaseBytes delegates to this object. + */ + protected final List listDelegate = new AbstractList() { + + @Override + public PyInteger get(int index) { + // Not using __getitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + return pyget(index); + } + + @Override + public int size() { return size; } + + // For mutable subclass use + + /** + * Replaces the element at the specified position in this list with the specified element. + * @see java.util.AbstractList#set(int, java.lang.Object) + * @throws PyException(TypeError) if actual class is immutable + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + */ + @Override + public PyInteger set(int index, PyInteger element) throws PyException { + // Not using __setitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + PyInteger result = pyget(index); + pyset(index, element); // TypeError if immutable + return result; + } + + /** + * Inserts the specified element at the specified position in this list. + * Shifts the element currently at that position and any subsequent elements to the right. + * @see java.util.AbstractList#add(int, java.lang.Object) + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + * @throws PyException(TypeError) if the owning concrete subclass is immutable + */ + @Override + public void add(int index, PyInteger element) throws PyException { + // Not using __setitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + pyadd(index, element); // TypeError if immutable + } + + /** + * Removes the element at the specified position in this list. Shifts any subsequent + * elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + * @see java.util.AbstractList#remove(int) + * @throws PyException(IndexError) if the index is outside the array bounds + */ + @Override + public PyInteger remove(int index) { + // Not using __delitem__ as it applies Python index semantics to e.g. b[-1]. + indexCheck(index); + PyInteger result = pyget(index); + del(index); // TypeError if immutable + return result; + } + }; + + /** + * Number of bytes in bytearray (or bytes) object. + * @see java.util.List#size() + * @return Number of bytes in byte array. + * */ + public int size() { return size;} + + /* + * @see java.util.List#isEmpty() + */ + public boolean isEmpty() { return size==0; } + + /** + * Returns true if this list contains the specified value. More formally, returns true if and + * only if this list contains at least one integer e such that o.equals(PyInteger(e)). + */ + public boolean contains(Object o) { + return listDelegate.contains(o); + } + + /* + * @return + * @see java.util.List#iterator() + */ + public Iterator iterator() { + return listDelegate.iterator(); + } + + /* + * @return + * @see java.util.List#toArray() + */ + public Object[] toArray() { + return listDelegate.toArray(); + } + + /* + * @param a + * @return + * @see java.util.List#toArray(T[]) + */ + public T[] toArray(T[] a) { + return listDelegate.toArray(a); + } + + /* + * @param o + * @return + * @see java.util.List#add(java.lang.Object) + */ + public boolean add(PyInteger o) { + return listDelegate.add(o); + } + + /* + * @param o + * @return + * @see java.util.List#remove(java.lang.Object) + */ + public boolean remove(Object o) { + return listDelegate.remove(o); + } + + /* + * @param c + * @return + * @see java.util.List#containsAll(java.util.Collection) + */ + public boolean containsAll(Collection c) { + return listDelegate.containsAll(c); + } + + /* + * @param c + * @return + * @see java.util.List#addAll(java.util.Collection) + */ + public boolean addAll(Collection c) { + return listDelegate.addAll(c); + } + + /* + * @param index + * @param c + * @return + * @see java.util.List#addAll(int, java.util.Collection) + */ + public boolean addAll(int index, Collection c) { + return listDelegate.addAll(index, c); + } + + /* + * @param c + * @return + * @see java.util.List#removeAll(java.util.Collection) + */ + public boolean removeAll(Collection c) { + return listDelegate.removeAll(c); + } + + /* + * @param c + * @return + * @see java.util.List#retainAll(java.util.Collection) + */ + public boolean retainAll(Collection c) { + return listDelegate.retainAll(c); + } + + /* + * + * @see java.util.List#clear() + */ + public void clear() { + listDelegate.clear(); + } + + /* + * @param o + * @return + * @see java.util.List#equals(java.lang.Object) + */ + public boolean equals(Object o) { + return listDelegate.equals(o); + } + + /* + * @return + * @see java.util.List#hashCode() + */ + public int hashCode() { + return listDelegate.hashCode(); + } + + /* + * @param index + * @return + * @see java.util.List#get(int) + */ + public PyInteger get(int index) { + return listDelegate.get(index); + } + + /* + * @param index + * @param element + * @return + * @see java.util.List#set(int, java.lang.Object) + */ + public PyInteger set(int index, PyInteger element) { + return listDelegate.set(index, element); + } + + /* + * @param index + * @param element + * @see java.util.List#add(int, java.lang.Object) + */ + public void add(int index, PyInteger element) { + listDelegate.add(index, element); + } + + /* + * @param index + * @return + * @see java.util.List#remove(int) + */ + public PyInteger remove(int index) { + return listDelegate.remove(index); + } + + /* + * @param o + * @return + * @see java.util.List#indexOf(java.lang.Object) + */ + public int indexOf(Object o) { + return listDelegate.indexOf(o); + } + + /* + * @param o + * @return + * @see java.util.List#lastIndexOf(java.lang.Object) + */ + public int lastIndexOf(Object o) { + return listDelegate.lastIndexOf(o); + } + + /* + * @return + * @see java.util.List#listIterator() + */ + public ListIterator listIterator() { + return listDelegate.listIterator(); + } + + /* + * @param index + * @return + * @see java.util.List#listIterator(int) + */ + public ListIterator listIterator(int index) { + return listDelegate.listIterator(index); + } + + /* + * @param fromIndex + * @param toIndex + * @return + * @see java.util.List#subList(int, int) + */ + public List subList(int fromIndex, int toIndex) { + return listDelegate.subList(fromIndex, toIndex); + } + +} diff --git a/src/org/python/core/BuiltinDocs.java b/src/org/python/core/BuiltinDocs.java --- a/src/org/python/core/BuiltinDocs.java +++ b/src/org/python/core/BuiltinDocs.java @@ -1,4115 +1,4518 @@ -// generated by make_pydocs.py - -package org.python.core; - -public class BuiltinDocs { - - // Docs for - public final static String object___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String object___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String object_doc = - "The most base type"; - - public final static String object___format___doc = - "default object formatter"; - - public final static String object___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String object___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String object___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String object___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String object___reduce___doc = - "helper for pickle"; - - public final static String object___reduce_ex___doc = - "helper for pickle"; - - public final static String object___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String object___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String object___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String object___str___doc = - "x.__str__() <==> str(x)"; - - public final static String object___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String type___abstractmethods___doc = - ""; - - public final static String type___base___doc = - "The most base type"; - - public final static String type___bases___doc = - "tuple() -> empty tuple\n" + - "tuple(iterable) -> tuple initialized from iterable's items\n" + - "\n" + - "If the argument is a tuple, the return value is the same object."; - - public final static String type___basicsize___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type___call___doc = - "x.__call__(...) <==> x(...)"; - - public final static String type___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String type___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String type___dict___doc = - ""; - - public final static String type___dictoffset___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type_doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String type___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String type___flags___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type___format___doc = - "default object formatter"; - - public final static String type___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String type___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String type___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String type___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String type___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String type___instancecheck___doc = - "__instancecheck__() -> bool\n" + - "check if an object is an instance"; - - public final static String type___itemsize___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String type___lt___doc = - "x.__lt__(y) <==> x string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String type___mro___doc = - "tuple() -> empty tuple\n" + - "tuple(iterable) -> tuple initialized from iterable's items\n" + - "\n" + - "If the argument is a tuple, the return value is the same object."; - - public final static String type___name___doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String type___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String type___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String type___reduce___doc = - "helper for pickle"; - - public final static String type___reduce_ex___doc = - "helper for pickle"; - - public final static String type___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String type___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String type___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String type___str___doc = - "x.__str__() <==> str(x)"; - - public final static String type___subclasscheck___doc = - "__subclasscheck__() -> bool\n" + - "check if a class is a subclass"; - - public final static String type___subclasses___doc = - "__subclasses__() -> list of immediate subclasses"; - - public final static String type___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String type___weakrefoffset___doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String type_mro_doc = - "mro() -> list\n" + - "return a type's method resolution order"; - - // Docs for - public final static String unicode___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String unicode___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String unicode___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String unicode___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String unicode_doc = - "unicode(string [, encoding[, errors]]) -> object\n" + - "\n" + - "Create a new Unicode object from the given encoded string.\n" + - "encoding defaults to the current default string encoding.\n" + - "errors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'."; - - public final static String unicode___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String unicode___format___doc = - "S.__format__(format_spec) -> unicode\n" + - "\n" + - "Return a formatted version of S as described by format_spec."; - - public final static String unicode___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String unicode___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String unicode___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String unicode___getnewargs___doc = - ""; - - public final static String unicode___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String unicode___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String unicode___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String unicode___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String unicode___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String unicode___len___doc = - "x.__len__() <==> len(x)"; - - public final static String unicode___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String unicode___mul___doc = - "x.__mul__(n) <==> x*n"; - - public final static String unicode___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String unicode___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String unicode___reduce___doc = - "helper for pickle"; - - public final static String unicode___reduce_ex___doc = - "helper for pickle"; - - public final static String unicode___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String unicode___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String unicode___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String unicode___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String unicode___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes\n" + - "\n" + - ""; - - public final static String unicode___str___doc = - "x.__str__() <==> str(x)"; - - public final static String unicode___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String unicode__formatter_field_name_split_doc = - ""; - - public final static String unicode__formatter_parser_doc = - ""; - - public final static String unicode_capitalize_doc = - "S.capitalize() -> unicode\n" + - "\n" + - "Return a capitalized version of S, i.e. make the first character\n" + - "have upper case and the rest lower case."; - - public final static String unicode_center_doc = - "S.center(width[, fillchar]) -> unicode\n" + - "\n" + - "Return S centered in a Unicode string of length width. Padding is\n" + - "done using the specified fill character (default is a space)"; - - public final static String unicode_count_doc = - "S.count(sub[, start[, end]]) -> int\n" + - "\n" + - "Return the number of non-overlapping occurrences of substring sub in\n" + - "Unicode string S[start:end]. Optional arguments start and end are\n" + - "interpreted as in slice notation."; - - public final static String unicode_decode_doc = - "S.decode([encoding[,errors]]) -> string or unicode\n" + - "\n" + - "Decodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + - "as well as any other name registerd with codecs.register_error that is\n" + - "able to handle UnicodeDecodeErrors."; - - public final static String unicode_encode_doc = - "S.encode([encoding[,errors]]) -> string or unicode\n" + - "\n" + - "Encodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + - "'xmlcharrefreplace' as well as any other name registered with\n" + - "codecs.register_error that can handle UnicodeEncodeErrors."; - - public final static String unicode_endswith_doc = - "S.endswith(suffix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S ends with the specified suffix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "suffix can also be a tuple of strings to try."; - - public final static String unicode_expandtabs_doc = - "S.expandtabs([tabsize]) -> unicode\n" + - "\n" + - "Return a copy of S where all tab characters are expanded using spaces.\n" + - "If tabsize is not given, a tab size of 8 characters is assumed."; - - public final static String unicode_find_doc = - "S.find(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the lowest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String unicode_format_doc = - "S.format(*args, **kwargs) -> unicode\n" + - "\n" + - "Return a formatted version of S, using substitutions from args and kwargs.\n" + - "The substitutions are identified by braces ('{' and '}')."; - - public final static String unicode_index_doc = - "S.index(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.find() but raise ValueError when the substring is not found."; - - public final static String unicode_isalnum_doc = - "S.isalnum() -> bool\n" + - "\n" + - "Return True if all characters in S are alphanumeric\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_isalpha_doc = - "S.isalpha() -> bool\n" + - "\n" + - "Return True if all characters in S are alphabetic\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_isdecimal_doc = - "S.isdecimal() -> bool\n" + - "\n" + - "Return True if there are only decimal characters in S,\n" + - "False otherwise."; - - public final static String unicode_isdigit_doc = - "S.isdigit() -> bool\n" + - "\n" + - "Return True if all characters in S are digits\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_islower_doc = - "S.islower() -> bool\n" + - "\n" + - "Return True if all cased characters in S are lowercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String unicode_isnumeric_doc = - "S.isnumeric() -> bool\n" + - "\n" + - "Return True if there are only numeric characters in S,\n" + - "False otherwise."; - - public final static String unicode_isspace_doc = - "S.isspace() -> bool\n" + - "\n" + - "Return True if all characters in S are whitespace\n" + - "and there is at least one character in S, False otherwise."; - - public final static String unicode_istitle_doc = - "S.istitle() -> bool\n" + - "\n" + - "Return True if S is a titlecased string and there is at least one\n" + - "character in S, i.e. upper- and titlecase characters may only\n" + - "follow uncased characters and lowercase characters only cased ones.\n" + - "Return False otherwise."; - - public final static String unicode_isupper_doc = - "S.isupper() -> bool\n" + - "\n" + - "Return True if all cased characters in S are uppercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String unicode_join_doc = - "S.join(iterable) -> unicode\n" + - "\n" + - "Return a string which is the concatenation of the strings in the\n" + - "iterable. The separator between elements is S."; - - public final static String unicode_ljust_doc = - "S.ljust(width[, fillchar]) -> int\n" + - "\n" + - "Return S left-justified in a Unicode string of length width. Padding is\n" + - "done using the specified fill character (default is a space)."; - - public final static String unicode_lower_doc = - "S.lower() -> unicode\n" + - "\n" + - "Return a copy of the string S converted to lowercase."; - - public final static String unicode_lstrip_doc = - "S.lstrip([chars]) -> unicode\n" + - "\n" + - "Return a copy of the string S with leading whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is a str, it will be converted to unicode before stripping"; - - public final static String unicode_partition_doc = - "S.partition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, and return the part before it,\n" + - "the separator itself, and the part after it. If the separator is not\n" + - "found, return S and two empty strings."; - - public final static String unicode_replace_doc = - "S.replace(old, new[, count]) -> unicode\n" + - "\n" + - "Return a copy of S with all occurrences of substring\n" + - "old replaced by new. If the optional argument count is\n" + - "given, only the first count occurrences are replaced."; - - public final static String unicode_rfind_doc = - "S.rfind(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the highest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String unicode_rindex_doc = - "S.rindex(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.rfind() but raise ValueError when the substring is not found."; - - public final static String unicode_rjust_doc = - "S.rjust(width[, fillchar]) -> unicode\n" + - "\n" + - "Return S right-justified in a Unicode string of length width. Padding is\n" + - "done using the specified fill character (default is a space)."; - - public final static String unicode_rpartition_doc = - "S.rpartition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, starting at the end of S, and return\n" + - "the part before it, the separator itself, and the part after it. If the\n" + - "separator is not found, return two empty strings and S."; - - public final static String unicode_rsplit_doc = - "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in S, using sep as the\n" + - "delimiter string, starting at the end of the string and\n" + - "working to the front. If maxsplit is given, at most maxsplit\n" + - "splits are done. If sep is not specified, any whitespace string\n" + - "is a separator."; - - public final static String unicode_rstrip_doc = - "S.rstrip([chars]) -> unicode\n" + - "\n" + - "Return a copy of the string S with trailing whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is a str, it will be converted to unicode before stripping"; - - public final static String unicode_split_doc = - "S.split([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in S, using sep as the\n" + - "delimiter string. If maxsplit is given, at most maxsplit\n" + - "splits are done. If sep is not specified or is None, any\n" + - "whitespace string is a separator and empty strings are\n" + - "removed from the result."; - - public final static String unicode_splitlines_doc = - "S.splitlines([keepends]) -> list of strings\n" + - "\n" + - "Return a list of the lines in S, breaking at line boundaries.\n" + - "Line breaks are not included in the resulting list unless keepends\n" + - "is given and true."; - - public final static String unicode_startswith_doc = - "S.startswith(prefix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S starts with the specified prefix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "prefix can also be a tuple of strings to try."; - - public final static String unicode_strip_doc = - "S.strip([chars]) -> unicode\n" + - "\n" + - "Return a copy of the string S with leading and trailing\n" + - "whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is a str, it will be converted to unicode before stripping"; - - public final static String unicode_swapcase_doc = - "S.swapcase() -> unicode\n" + - "\n" + - "Return a copy of S with uppercase characters converted to lowercase\n" + - "and vice versa."; - - public final static String unicode_title_doc = - "S.title() -> unicode\n" + - "\n" + - "Return a titlecased version of S, i.e. words start with title case\n" + - "characters, all remaining cased characters have lower case."; - - public final static String unicode_translate_doc = - "S.translate(table) -> unicode\n" + - "\n" + - "Return a copy of the string S, where all characters have been mapped\n" + - "through the given translation table, which must be a mapping of\n" + - "Unicode ordinals to Unicode ordinals, Unicode strings or None.\n" + - "Unmapped characters are left untouched. Characters mapped to None\n" + - "are deleted."; - - public final static String unicode_upper_doc = - "S.upper() -> unicode\n" + - "\n" + - "Return a copy of S converted to uppercase."; - - public final static String unicode_zfill_doc = - "S.zfill(width) -> unicode\n" + - "\n" + - "Pad a numeric string S with zeros on the left, to fill a field\n" + - "of the specified width. The string S is never truncated."; - - // Docs for - public final static String dict___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String dict___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String dict___contains___doc = - "D.__contains__(k) -> True if D has a key k, else False"; - - public final static String dict___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String dict___delitem___doc = - "x.__delitem__(y) <==> del x[y]"; - - public final static String dict_doc = - "dict() -> new empty dictionary\n" + - "dict(mapping) -> new dictionary initialized from a mapping object's\n" + - " (key, value) pairs\n" + - "dict(iterable) -> new dictionary initialized as if via:\n" + - " d = {}\n" + - " for k, v in iterable:\n" + - " d[k] = v\n" + - "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" + - " in the keyword argument list. For example: dict(one=1, two=2)"; - - public final static String dict___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String dict___format___doc = - "default object formatter"; - - public final static String dict___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String dict___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String dict___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String dict___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String dict___hash___doc = - ""; - - public final static String dict___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String dict___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String dict___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String dict___len___doc = - "x.__len__() <==> len(x)"; - - public final static String dict___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String dict___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String dict___reduce___doc = - "helper for pickle"; - - public final static String dict___reduce_ex___doc = - "helper for pickle"; - - public final static String dict___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String dict___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String dict___setitem___doc = - "x.__setitem__(i, y) <==> x[i]=y"; - - public final static String dict___sizeof___doc = - "D.__sizeof__() -> size of D in memory, in bytes"; - - public final static String dict___str___doc = - "x.__str__() <==> str(x)"; - - public final static String dict___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String dict_clear_doc = - "D.clear() -> None. Remove all items from D."; - - public final static String dict_copy_doc = - "D.copy() -> a shallow copy of D"; - - public final static String dict_fromkeys_doc = - "dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.\n" + - "v defaults to None."; - - public final static String dict_get_doc = - "D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None."; - - public final static String dict_has_key_doc = - "D.has_key(k) -> True if D has a key k, else False"; - - public final static String dict_items_doc = - "D.items() -> list of D's (key, value) pairs, as 2-tuples"; - - public final static String dict_iteritems_doc = - "D.iteritems() -> an iterator over the (key, value) items of D"; - - public final static String dict_iterkeys_doc = - "D.iterkeys() -> an iterator over the keys of D"; - - public final static String dict_itervalues_doc = - "D.itervalues() -> an iterator over the values of D"; - - public final static String dict_keys_doc = - "D.keys() -> list of D's keys"; - - public final static String dict_pop_doc = - "D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n" + - "If key is not found, d is returned if given, otherwise KeyError is raised"; - - public final static String dict_popitem_doc = - "D.popitem() -> (k, v), remove and return some (key, value) pair as a\n" + - "2-tuple; but raise KeyError if D is empty."; - - public final static String dict_setdefault_doc = - "D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D"; - - public final static String dict_update_doc = - "D.update(E, **F) -> None. Update D from dict/iterable E and F.\n" + - "If E has a .keys() method, does: for k in E: D[k] = E[k]\n" + - "If E lacks .keys() method, does: for (k, v) in E: D[k] = v\n" + - "In either case, this is followed by: for k in F: D[k] = F[k]"; - - public final static String dict_values_doc = - "D.values() -> list of D's values"; - - public final static String dict_viewitems_doc = - "D.viewitems() -> a set-like object providing a view on D's items"; - - public final static String dict_viewkeys_doc = - "D.viewkeys() -> a set-like object providing a view on D's keys"; - - public final static String dict_viewvalues_doc = - "D.viewvalues() -> an object providing a view on D's values"; - - // Docs for - public final static String list___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String list___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String list___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String list___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String list___delitem___doc = - "x.__delitem__(y) <==> del x[y]"; - - public final static String list___delslice___doc = - "x.__delslice__(i, j) <==> del x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String list_doc = - "list() -> new empty list\n" + - "list(iterable) -> new list initialized from iterable's items"; - - public final static String list___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String list___format___doc = - "default object formatter"; - - public final static String list___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String list___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String list___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String list___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String list___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String list___hash___doc = - ""; - - public final static String list___iadd___doc = - "x.__iadd__(y) <==> x+=y"; - - public final static String list___imul___doc = - "x.__imul__(y) <==> x*=y"; - - public final static String list___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String list___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String list___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String list___len___doc = - "x.__len__() <==> len(x)"; - - public final static String list___lt___doc = - "x.__lt__(y) <==> x x*n"; - - public final static String list___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String list___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String list___reduce___doc = - "helper for pickle"; - - public final static String list___reduce_ex___doc = - "helper for pickle"; - - public final static String list___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String list___reversed___doc = - "L.__reversed__() -- return a reverse iterator over the list"; - - public final static String list___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String list___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String list___setitem___doc = - "x.__setitem__(i, y) <==> x[i]=y"; - - public final static String list___setslice___doc = - "x.__setslice__(i, j, y) <==> x[i:j]=y\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String list___sizeof___doc = - "L.__sizeof__() -- size of L in memory, in bytes"; - - public final static String list___str___doc = - "x.__str__() <==> str(x)"; - - public final static String list___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String list_append_doc = - "L.append(object) -- append object to end"; - - public final static String list_count_doc = - "L.count(value) -> integer -- return number of occurrences of value"; - - public final static String list_extend_doc = - "L.extend(iterable) -- extend list by appending elements from the iterable"; - - public final static String list_index_doc = - "L.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + - "Raises ValueError if the value is not present."; - - public final static String list_insert_doc = - "L.insert(index, object) -- insert object before index"; - - public final static String list_pop_doc = - "L.pop([index]) -> item -- remove and return item at index (default last).\n" + - "Raises IndexError if list is empty or index is out of range."; - - public final static String list_remove_doc = - "L.remove(value) -- remove first occurrence of value.\n" + - "Raises ValueError if the value is not present."; - - public final static String list_reverse_doc = - "L.reverse() -- reverse *IN PLACE*"; - - public final static String list_sort_doc = - "L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;\n" + - "cmp(x, y) -> -1, 0, 1"; - - // Docs for - public final static String slice___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String slice___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String slice___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String slice_doc = - "slice([start,] stop[, step])\n" + - "\n" + - "Create a slice object. This is used for extended slicing (e.g. a[0:10:2])."; - - public final static String slice___format___doc = - "default object formatter"; - - public final static String slice___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String slice___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String slice___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String slice___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String slice___reduce___doc = - "Return state information for pickling."; - - public final static String slice___reduce_ex___doc = - "helper for pickle"; - - public final static String slice___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String slice___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String slice___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String slice___str___doc = - "x.__str__() <==> str(x)"; - - public final static String slice___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String slice_indices_doc = - "S.indices(len) -> (start, stop, stride)\n" + - "\n" + - "Assuming a sequence of length len, calculate the start and stop\n" + - "indices, and the stride length of the extended slice described by\n" + - "S. Out of bounds indices are clipped in a manner consistent with the\n" + - "handling of normal slices."; - - public final static String slice_start_doc = - ""; - - public final static String slice_step_doc = - ""; - - public final static String slice_stop_doc = - ""; - - // Docs for - public final static String super___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String super___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String super_doc = - "super(type) -> unbound super object\n" + - "super(type, obj) -> bound super object; requires isinstance(obj, type)\n" + - "super(type, type2) -> bound super object; requires issubclass(type2, type)\n" + - "Typical use to call a cooperative superclass method:\n" + - "class C(B):\n" + - " def meth(self, arg):\n" + - " super(C, self).meth(arg)"; - - public final static String super___format___doc = - "default object formatter"; - - public final static String super___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String super___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String super___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String super___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String super___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String super___reduce___doc = - "helper for pickle"; - - public final static String super___reduce_ex___doc = - "helper for pickle"; - - public final static String super___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String super___self___doc = - "the instance invoking super(); may be None"; - - public final static String super___self_class___doc = - "the type of the instance invoking super(); may be None"; - - public final static String super___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String super___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String super___str___doc = - "x.__str__() <==> str(x)"; - - public final static String super___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String super___thisclass___doc = - "the class invoking super()"; - - // Docs for - public final static String staticmethod___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String staticmethod___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String staticmethod_doc = - "staticmethod(function) -> method\n" + - "\n" + - "Convert a function to be a static method.\n" + - "\n" + - "A static method does not receive an implicit first argument.\n" + - "To declare a static method, use this idiom:\n" + - "\n" + - " class C:\n" + - " def f(arg1, arg2, ...): ...\n" + - " f = staticmethod(f)\n" + - "\n" + - "It can be called either on the class (e.g. C.f()) or on an instance\n" + - "(e.g. C().f()). The instance is ignored except for its class.\n" + - "\n" + - "Static methods in Python are similar to those found in Java or C++.\n" + - "For a more advanced concept, see the classmethod builtin."; - - public final static String staticmethod___format___doc = - "default object formatter"; - - public final static String staticmethod___func___doc = - ""; - - public final static String staticmethod___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String staticmethod___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String staticmethod___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String staticmethod___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String staticmethod___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String staticmethod___reduce___doc = - "helper for pickle"; - - public final static String staticmethod___reduce_ex___doc = - "helper for pickle"; - - public final static String staticmethod___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String staticmethod___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String staticmethod___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String staticmethod___str___doc = - "x.__str__() <==> str(x)"; - - public final static String staticmethod___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String float___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String float___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String float___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String float___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String float___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String float___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String float___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String float_doc = - "float(x) -> floating point number\n" + - "\n" + - "Convert a string or number to a floating point number, if possible."; - - public final static String float___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String float___float___doc = - "x.__float__() <==> float(x)"; - - public final static String float___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String float___format___doc = - "float.__format__(format_spec) -> string\n" + - "\n" + - "Formats the float according to format_spec."; - - public final static String float___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String float___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String float___getformat___doc = - "float.__getformat__(typestr) -> string\n" + - "\n" + - "You probably don't want to use this function. It exists mainly to be\n" + - "used in Python's test suite.\n" + - "\n" + - "typestr must be 'double' or 'float'. This function returns whichever of\n" + - "'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the\n" + - "format of floating point numbers used by the C type named by typestr."; - - public final static String float___getnewargs___doc = - ""; - - public final static String float___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String float___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String float___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String float___int___doc = - "x.__int__() <==> int(x)"; - - public final static String float___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String float___long___doc = - "x.__long__() <==> long(x)"; - - public final static String float___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String float___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String float___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String float___neg___doc = - "x.__neg__() <==> -x"; - - public final static String float___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String float___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String float___pos___doc = - "x.__pos__() <==> +x"; - - public final static String float___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String float___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String float___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String float___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String float___reduce___doc = - "helper for pickle"; - - public final static String float___reduce_ex___doc = - "helper for pickle"; - - public final static String float___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String float___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String float___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String float___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String float___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String float___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String float___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String float___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String float___setformat___doc = - "float.__setformat__(typestr, fmt) -> None\n" + - "\n" + - "You probably don't want to use this function. It exists mainly to be\n" + - "used in Python's test suite.\n" + - "\n" + - "typestr must be 'double' or 'float'. fmt must be one of 'unknown',\n" + - "'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n" + - "one of the latter two if it appears to match the underlying C reality.\n" + - "\n" + - "Overrides the automatic determination of C-level floating point type.\n" + - "This affects how floats are converted to and from binary strings."; - - public final static String float___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String float___str___doc = - "x.__str__() <==> str(x)"; - - public final static String float___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String float___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String float___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String float___trunc___doc = - "Returns the Integral closest to x between 0 and x."; - - public final static String float_as_integer_ratio_doc = - "float.as_integer_ratio() -> (int, int)\n" + - "\n" + - "Returns a pair of integers, whose ratio is exactly equal to the original\n" + - "float and with a positive denominator.\n" + - "Raises OverflowError on infinities and a ValueError on NaNs.\n" + - "\n" + - ">>> (10.0).as_integer_ratio()\n" + - "(10, 1)\n" + - ">>> (0.0).as_integer_ratio()\n" + - "(0, 1)\n" + - ">>> (-.25).as_integer_ratio()\n" + - "(-1, 4)"; - - public final static String float_conjugate_doc = - "Returns self, the complex conjugate of any float."; - - public final static String float_fromhex_doc = - "float.fromhex(string) -> float\n" + - "\n" + - "Create a floating-point number from a hexadecimal string.\n" + - ">>> float.fromhex('0x1.ffffp10')\n" + - "2047.984375\n" + - ">>> float.fromhex('-0x1p-1074')\n" + - "-4.9406564584124654e-324"; - - public final static String float_hex_doc = - "float.hex() -> string\n" + - "\n" + - "Return a hexadecimal representation of a floating-point number.\n" + - ">>> (-0.1).hex()\n" + - "'-0x1.999999999999ap-4'\n" + - ">>> 3.14159.hex()\n" + - "'0x1.921f9f01b866ep+1'"; - - public final static String float_imag_doc = - "the imaginary part of a complex number"; - - public final static String float_is_integer_doc = - "Returns True if the float is an integer."; - - public final static String float_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String enumerate___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String enumerate___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String enumerate_doc = - "enumerate(iterable[, start]) -> iterator for index, value of iterable\n" + - "\n" + - "Return an enumerate object. iterable must be another object that supports\n" + - "iteration. The enumerate object yields pairs containing a count (from\n" + - "start, which defaults to zero) and a value yielded by the iterable argument.\n" + - "enumerate is useful for obtaining an indexed list:\n" + - " (0, seq[0]), (1, seq[1]), (2, seq[2]), ..."; - - public final static String enumerate___format___doc = - "default object formatter"; - - public final static String enumerate___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String enumerate___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String enumerate___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String enumerate___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String enumerate___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String enumerate___reduce___doc = - "helper for pickle"; - - public final static String enumerate___reduce_ex___doc = - "helper for pickle"; - - public final static String enumerate___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String enumerate___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String enumerate___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String enumerate___str___doc = - "x.__str__() <==> str(x)"; - - public final static String enumerate___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String enumerate_next_doc = - "x.next() -> the next value, or raise StopIteration"; - - // Docs for - public final static String basestring___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String basestring___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String basestring_doc = - "Type basestring cannot be instantiated; it is the base for str and unicode."; - - public final static String basestring___format___doc = - "default object formatter"; - - public final static String basestring___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String basestring___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String basestring___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String basestring___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String basestring___reduce___doc = - "helper for pickle"; - - public final static String basestring___reduce_ex___doc = - "helper for pickle"; - - public final static String basestring___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String basestring___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String basestring___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String basestring___str___doc = - "x.__str__() <==> str(x)"; - - public final static String basestring___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String long___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String long___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String long___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String long___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String long___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String long___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String long___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String long___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String long___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String long_doc = - "long(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to a long integer, if possible. A floating\n" + - "point argument will be truncated towards zero (this does not include a\n" + - "string representation of a floating point number!) When converting a\n" + - "string, use the optional base. It is an error to supply a base when\n" + - "converting a non-string."; - - public final static String long___float___doc = - "x.__float__() <==> float(x)"; - - public final static String long___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String long___format___doc = - ""; - - public final static String long___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String long___getnewargs___doc = - ""; - - public final static String long___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String long___hex___doc = - "x.__hex__() <==> hex(x)"; - - public final static String long___index___doc = - "x[y:z] <==> x[y.__index__():z.__index__()]"; - - public final static String long___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String long___int___doc = - "x.__int__() <==> int(x)"; - - public final static String long___invert___doc = - "x.__invert__() <==> ~x"; - - public final static String long___long___doc = - "x.__long__() <==> long(x)"; - - public final static String long___lshift___doc = - "x.__lshift__(y) <==> x< x%y"; - - public final static String long___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String long___neg___doc = - "x.__neg__() <==> -x"; - - public final static String long___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String long___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String long___oct___doc = - "x.__oct__() <==> oct(x)"; - - public final static String long___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String long___pos___doc = - "x.__pos__() <==> +x"; - - public final static String long___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String long___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String long___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String long___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String long___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String long___reduce___doc = - "helper for pickle"; - - public final static String long___reduce_ex___doc = - "helper for pickle"; - - public final static String long___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String long___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String long___rlshift___doc = - "x.__rlshift__(y) <==> y< y%x"; - - public final static String long___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String long___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String long___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String long___rrshift___doc = - "x.__rrshift__(y) <==> y>>x"; - - public final static String long___rshift___doc = - "x.__rshift__(y) <==> x>>y"; - - public final static String long___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String long___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String long___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String long___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String long___sizeof___doc = - "Returns size in memory, in bytes"; - - public final static String long___str___doc = - "x.__str__() <==> str(x)"; - - public final static String long___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String long___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String long___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String long___trunc___doc = - "Truncating an Integral returns itself."; - - public final static String long___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String long_bit_length_doc = - "long.bit_length() -> int or long\n" + - "\n" + - "Number of bits necessary to represent self in binary.\n" + - ">>> bin(37L)\n" + - "'0b100101'\n" + - ">>> (37L).bit_length()\n" + - "6"; - - public final static String long_conjugate_doc = - "Returns self, the complex conjugate of any long."; - - public final static String long_denominator_doc = - "the denominator of a rational number in lowest terms"; - - public final static String long_imag_doc = - "the imaginary part of a complex number"; - - public final static String long_numerator_doc = - "the numerator of a rational number in lowest terms"; - - public final static String long_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String tuple___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String tuple___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String tuple___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String tuple___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String tuple_doc = - "tuple() -> empty tuple\n" + - "tuple(iterable) -> tuple initialized from iterable's items\n" + - "\n" + - "If the argument is a tuple, the return value is the same object."; - - public final static String tuple___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String tuple___format___doc = - "default object formatter"; - - public final static String tuple___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String tuple___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String tuple___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String tuple___getnewargs___doc = - ""; - - public final static String tuple___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String tuple___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String tuple___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String tuple___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String tuple___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String tuple___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String tuple___len___doc = - "x.__len__() <==> len(x)"; - - public final static String tuple___lt___doc = - "x.__lt__(y) <==> x x*n"; - - public final static String tuple___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String tuple___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String tuple___reduce___doc = - "helper for pickle"; - - public final static String tuple___reduce_ex___doc = - "helper for pickle"; - - public final static String tuple___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String tuple___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String tuple___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String tuple___sizeof___doc = - "T.__sizeof__() -- size of T in memory, in bytes"; - - public final static String tuple___str___doc = - "x.__str__() <==> str(x)"; - - public final static String tuple___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String tuple_count_doc = - "T.count(value) -> integer -- return number of occurrences of value"; - - public final static String tuple_index_doc = - "T.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + - "Raises ValueError if the value is not present."; - - // Docs for - public final static String str___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String str___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String str___contains___doc = - "x.__contains__(y) <==> y in x"; - - public final static String str___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String str_doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String str___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String str___format___doc = - "S.__format__(format_spec) -> string\n" + - "\n" + - "Return a formatted version of S as described by format_spec."; - - public final static String str___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String str___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String str___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String str___getnewargs___doc = - ""; - - public final static String str___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String str___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String str___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String str___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String str___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String str___len___doc = - "x.__len__() <==> len(x)"; - - public final static String str___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String str___mul___doc = - "x.__mul__(n) <==> x*n"; - - public final static String str___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String str___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String str___reduce___doc = - "helper for pickle"; - - public final static String str___reduce_ex___doc = - "helper for pickle"; - - public final static String str___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String str___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String str___rmul___doc = - "x.__rmul__(n) <==> n*x"; - - public final static String str___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String str___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes"; - - public final static String str___str___doc = - "x.__str__() <==> str(x)"; - - public final static String str___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String str__formatter_field_name_split_doc = - ""; - - public final static String str__formatter_parser_doc = - ""; - - public final static String str_capitalize_doc = - "S.capitalize() -> string\n" + - "\n" + - "Return a copy of the string S with only its first character\n" + - "capitalized."; - - public final static String str_center_doc = - "S.center(width[, fillchar]) -> string\n" + - "\n" + - "Return S centered in a string of length width. Padding is\n" + - "done using the specified fill character (default is a space)"; - - public final static String str_count_doc = - "S.count(sub[, start[, end]]) -> int\n" + - "\n" + - "Return the number of non-overlapping occurrences of substring sub in\n" + - "string S[start:end]. Optional arguments start and end are interpreted\n" + - "as in slice notation."; - - public final static String str_decode_doc = - "S.decode([encoding[,errors]]) -> object\n" + - "\n" + - "Decodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + - "as well as any other name registered with codecs.register_error that is\n" + - "able to handle UnicodeDecodeErrors."; - - public final static String str_encode_doc = - "S.encode([encoding[,errors]]) -> object\n" + - "\n" + - "Encodes S using the codec registered for encoding. encoding defaults\n" + - "to the default encoding. errors may be given to set a different error\n" + - "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + - "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + - "'xmlcharrefreplace' as well as any other name registered with\n" + - "codecs.register_error that is able to handle UnicodeEncodeErrors."; - - public final static String str_endswith_doc = - "S.endswith(suffix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S ends with the specified suffix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "suffix can also be a tuple of strings to try."; - - public final static String str_expandtabs_doc = - "S.expandtabs([tabsize]) -> string\n" + - "\n" + - "Return a copy of S where all tab characters are expanded using spaces.\n" + - "If tabsize is not given, a tab size of 8 characters is assumed."; - - public final static String str_find_doc = - "S.find(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the lowest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String str_format_doc = - "S.format(*args, **kwargs) -> string\n" + - "\n" + - "Return a formatted version of S, using substitutions from args and kwargs.\n" + - "The substitutions are identified by braces ('{' and '}')."; - - public final static String str_index_doc = - "S.index(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.find() but raise ValueError when the substring is not found."; - - public final static String str_isalnum_doc = - "S.isalnum() -> bool\n" + - "\n" + - "Return True if all characters in S are alphanumeric\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_isalpha_doc = - "S.isalpha() -> bool\n" + - "\n" + - "Return True if all characters in S are alphabetic\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_isdigit_doc = - "S.isdigit() -> bool\n" + - "\n" + - "Return True if all characters in S are digits\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_islower_doc = - "S.islower() -> bool\n" + - "\n" + - "Return True if all cased characters in S are lowercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String str_isspace_doc = - "S.isspace() -> bool\n" + - "\n" + - "Return True if all characters in S are whitespace\n" + - "and there is at least one character in S, False otherwise."; - - public final static String str_istitle_doc = - "S.istitle() -> bool\n" + - "\n" + - "Return True if S is a titlecased string and there is at least one\n" + - "character in S, i.e. uppercase characters may only follow uncased\n" + - "characters and lowercase characters only cased ones. Return False\n" + - "otherwise."; - - public final static String str_isupper_doc = - "S.isupper() -> bool\n" + - "\n" + - "Return True if all cased characters in S are uppercase and there is\n" + - "at least one cased character in S, False otherwise."; - - public final static String str_join_doc = - "S.join(iterable) -> string\n" + - "\n" + - "Return a string which is the concatenation of the strings in the\n" + - "iterable. The separator between elements is S."; - - public final static String str_ljust_doc = - "S.ljust(width[, fillchar]) -> string\n" + - "\n" + - "Return S left-justified in a string of length width. Padding is\n" + - "done using the specified fill character (default is a space)."; - - public final static String str_lower_doc = - "S.lower() -> string\n" + - "\n" + - "Return a copy of the string S converted to lowercase."; - - public final static String str_lstrip_doc = - "S.lstrip([chars]) -> string or unicode\n" + - "\n" + - "Return a copy of the string S with leading whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is unicode, S will be converted to unicode before stripping"; - - public final static String str_partition_doc = - "S.partition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, and return the part before it,\n" + - "the separator itself, and the part after it. If the separator is not\n" + - "found, return S and two empty strings."; - - public final static String str_replace_doc = - "S.replace(old, new[, count]) -> string\n" + - "\n" + - "Return a copy of string S with all occurrences of substring\n" + - "old replaced by new. If the optional argument count is\n" + - "given, only the first count occurrences are replaced."; - - public final static String str_rfind_doc = - "S.rfind(sub [,start [,end]]) -> int\n" + - "\n" + - "Return the highest index in S where substring sub is found,\n" + - "such that sub is contained within s[start:end]. Optional\n" + - "arguments start and end are interpreted as in slice notation.\n" + - "\n" + - "Return -1 on failure."; - - public final static String str_rindex_doc = - "S.rindex(sub [,start [,end]]) -> int\n" + - "\n" + - "Like S.rfind() but raise ValueError when the substring is not found."; - - public final static String str_rjust_doc = - "S.rjust(width[, fillchar]) -> string\n" + - "\n" + - "Return S right-justified in a string of length width. Padding is\n" + - "done using the specified fill character (default is a space)"; - - public final static String str_rpartition_doc = - "S.rpartition(sep) -> (head, sep, tail)\n" + - "\n" + - "Search for the separator sep in S, starting at the end of S, and return\n" + - "the part before it, the separator itself, and the part after it. If the\n" + - "separator is not found, return two empty strings and S."; - - public final static String str_rsplit_doc = - "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in the string S, using sep as the\n" + - "delimiter string, starting at the end of the string and working\n" + - "to the front. If maxsplit is given, at most maxsplit splits are\n" + - "done. If sep is not specified or is None, any whitespace string\n" + - "is a separator."; - - public final static String str_rstrip_doc = - "S.rstrip([chars]) -> string or unicode\n" + - "\n" + - "Return a copy of the string S with trailing whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is unicode, S will be converted to unicode before stripping"; - - public final static String str_split_doc = - "S.split([sep [,maxsplit]]) -> list of strings\n" + - "\n" + - "Return a list of the words in the string S, using sep as the\n" + - "delimiter string. If maxsplit is given, at most maxsplit\n" + - "splits are done. If sep is not specified or is None, any\n" + - "whitespace string is a separator and empty strings are removed\n" + - "from the result."; - - public final static String str_splitlines_doc = - "S.splitlines([keepends]) -> list of strings\n" + - "\n" + - "Return a list of the lines in S, breaking at line boundaries.\n" + - "Line breaks are not included in the resulting list unless keepends\n" + - "is given and true."; - - public final static String str_startswith_doc = - "S.startswith(prefix[, start[, end]]) -> bool\n" + - "\n" + - "Return True if S starts with the specified prefix, False otherwise.\n" + - "With optional start, test S beginning at that position.\n" + - "With optional end, stop comparing S at that position.\n" + - "prefix can also be a tuple of strings to try."; - - public final static String str_strip_doc = - "S.strip([chars]) -> string or unicode\n" + - "\n" + - "Return a copy of the string S with leading and trailing\n" + - "whitespace removed.\n" + - "If chars is given and not None, remove characters in chars instead.\n" + - "If chars is unicode, S will be converted to unicode before stripping"; - - public final static String str_swapcase_doc = - "S.swapcase() -> string\n" + - "\n" + - "Return a copy of the string S with uppercase characters\n" + - "converted to lowercase and vice versa."; - - public final static String str_title_doc = - "S.title() -> string\n" + - "\n" + - "Return a titlecased version of S, i.e. words start with uppercase\n" + - "characters, all remaining cased characters have lowercase."; - - public final static String str_translate_doc = - "S.translate(table [,deletechars]) -> string\n" + - "\n" + - "Return a copy of the string S, where all characters occurring\n" + - "in the optional argument deletechars are removed, and the\n" + - "remaining characters have been mapped through the given\n" + - "translation table, which must be a string of length 256."; - - public final static String str_upper_doc = - "S.upper() -> string\n" + - "\n" + - "Return a copy of the string S converted to uppercase."; - - public final static String str_zfill_doc = - "S.zfill(width) -> string\n" + - "\n" + - "Pad a numeric string S with zeros on the left, to fill a field\n" + - "of the specified width. The string S is never truncated."; - - // Docs for - public final static String property___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String property___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String property___delete___doc = - "descr.__delete__(obj)"; - - public final static String property_doc = - "property(fget=None, fset=None, fdel=None, doc=None) -> property attribute\n" + - "\n" + - "fget is a function to be used for getting an attribute value, and likewise\n" + - "fset is a function for setting, and fdel a function for del'ing, an\n" + - "attribute. Typical use is to define a managed attribute x:\n" + - "class C(object):\n" + - " def getx(self): return self._x\n" + - " def setx(self, value): self._x = value\n" + - " def delx(self): del self._x\n" + - " x = property(getx, setx, delx, \"I'm the 'x' property.\")\n" + - "\n" + - "Decorators make defining new properties or modifying existing ones easy:\n" + - "class C(object):\n" + - " @property\n" + - " def x(self): return self._x\n" + - " @x.setter\n" + - " def x(self, value): self._x = value\n" + - " @x.deleter\n" + - " def x(self): del self._x\n" + - ""; - - public final static String property___format___doc = - "default object formatter"; - - public final static String property___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String property___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String property___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String property___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String property___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String property___reduce___doc = - "helper for pickle"; - - public final static String property___reduce_ex___doc = - "helper for pickle"; - - public final static String property___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String property___set___doc = - "descr.__set__(obj, value)"; - - public final static String property___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String property___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String property___str___doc = - "x.__str__() <==> str(x)"; - - public final static String property___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String property_deleter_doc = - "Descriptor to change the deleter on a property."; - - public final static String property_fdel_doc = - ""; - - public final static String property_fget_doc = - ""; - - public final static String property_fset_doc = - ""; - - public final static String property_getter_doc = - "Descriptor to change the getter on a property."; - - public final static String property_setter_doc = - "Descriptor to change the setter on a property."; - - // Docs for - public final static String int___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String int___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String int___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String int___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String int___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String int___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String int___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String int___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String int___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String int_doc = - "int(x[, base]) -> integer\n" + - "\n" + - "Convert a string or number to an integer, if possible. A floating point\n" + - "argument will be truncated towards zero (this does not include a string\n" + - "representation of a floating point number!) When converting a string, use\n" + - "the optional base. It is an error to supply a base when converting a\n" + - "non-string. If base is zero, the proper base is guessed based on the\n" + - "string content. If the argument is outside the integer range a\n" + - "long object will be returned instead."; - - public final static String int___float___doc = - "x.__float__() <==> float(x)"; - - public final static String int___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String int___format___doc = - ""; - - public final static String int___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String int___getnewargs___doc = - ""; - - public final static String int___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String int___hex___doc = - "x.__hex__() <==> hex(x)"; - - public final static String int___index___doc = - "x[y:z] <==> x[y.__index__():z.__index__()]"; - - public final static String int___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String int___int___doc = - "x.__int__() <==> int(x)"; - - public final static String int___invert___doc = - "x.__invert__() <==> ~x"; - - public final static String int___long___doc = - "x.__long__() <==> long(x)"; - - public final static String int___lshift___doc = - "x.__lshift__(y) <==> x< x%y"; - - public final static String int___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String int___neg___doc = - "x.__neg__() <==> -x"; - - public final static String int___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String int___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String int___oct___doc = - "x.__oct__() <==> oct(x)"; - - public final static String int___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String int___pos___doc = - "x.__pos__() <==> +x"; - - public final static String int___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String int___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String int___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String int___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String int___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String int___reduce___doc = - "helper for pickle"; - - public final static String int___reduce_ex___doc = - "helper for pickle"; - - public final static String int___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String int___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String int___rlshift___doc = - "x.__rlshift__(y) <==> y< y%x"; - - public final static String int___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String int___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String int___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String int___rrshift___doc = - "x.__rrshift__(y) <==> y>>x"; - - public final static String int___rshift___doc = - "x.__rshift__(y) <==> x>>y"; - - public final static String int___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String int___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String int___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String int___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String int___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String int___str___doc = - "x.__str__() <==> str(x)"; - - public final static String int___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String int___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String int___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String int___trunc___doc = - "Truncating an Integral returns itself."; - - public final static String int___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String int_bit_length_doc = - "int.bit_length() -> int\n" + - "\n" + - "Number of bits necessary to represent self in binary.\n" + - ">>> bin(37)\n" + - "'0b100101'\n" + - ">>> (37).bit_length()\n" + - "6"; - - public final static String int_conjugate_doc = - "Returns self, the complex conjugate of any int."; - - public final static String int_denominator_doc = - "the denominator of a rational number in lowest terms"; - - public final static String int_imag_doc = - "the imaginary part of a complex number"; - - public final static String int_numerator_doc = - "the numerator of a rational number in lowest terms"; - - public final static String int_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String xrange___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String xrange___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String xrange_doc = - "xrange([start,] stop[, step]) -> xrange object\n" + - "\n" + - "Like range(), but instead of returning a list, returns an object that\n" + - "generates the numbers in the range on demand. For looping, this is \n" + - "slightly faster than range() and more memory efficient."; - - public final static String xrange___format___doc = - "default object formatter"; - - public final static String xrange___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String xrange___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String xrange___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String xrange___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String xrange___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String xrange___len___doc = - "x.__len__() <==> len(x)"; - - public final static String xrange___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String xrange___reduce___doc = - ""; - - public final static String xrange___reduce_ex___doc = - "helper for pickle"; - - public final static String xrange___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String xrange___reversed___doc = - "Returns a reverse iterator."; - - public final static String xrange___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String xrange___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String xrange___str___doc = - "x.__str__() <==> str(x)"; - - public final static String xrange___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String file___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String file___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String file_doc = - "file(name[, mode[, buffering]]) -> file object\n" + - "\n" + - "Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n" + - "writing or appending. The file will be created if it doesn't exist\n" + - "when opened for writing or appending; it will be truncated when\n" + - "opened for writing. Add a 'b' to the mode for binary files.\n" + - "Add a '+' to the mode to allow simultaneous reading and writing.\n" + - "If the buffering argument is given, 0 means unbuffered, 1 means line\n" + - "buffered, and larger numbers specify the buffer size. The preferred way\n" + - "to open a file is with the builtin open() function.\n" + - "Add a 'U' to mode to open the file for input with universal newline\n" + - "support. Any line ending in the input file will be seen as a '\\n'\n" + - "in Python. Also, a file so opened gains the attribute 'newlines';\n" + - "the value for this attribute is one of None (no newline read yet),\n" + - "'\\r', '\\n', '\\r\\n' or a tuple containing all the newline types seen.\n" + - "\n" + - "'U' cannot be combined with 'w' or '+' mode.\n" + - ""; - - public final static String file___enter___doc = - "__enter__() -> self."; - - public final static String file___exit___doc = - "__exit__(*excinfo) -> None. Closes the file."; - - public final static String file___format___doc = - "default object formatter"; - - public final static String file___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String file___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String file___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String file___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String file___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String file___reduce___doc = - "helper for pickle"; - - public final static String file___reduce_ex___doc = - "helper for pickle"; - - public final static String file___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String file___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String file___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String file___str___doc = - "x.__str__() <==> str(x)"; - - public final static String file___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String file_close_doc = - "close() -> None or (perhaps) an integer. Close the file.\n" + - "\n" + - "Sets data attribute .closed to True. A closed file cannot be used for\n" + - "further I/O operations. close() may be called more than once without\n" + - "error. Some kinds of file objects (for example, opened by popen())\n" + - "may return an exit status upon closing."; - - public final static String file_closed_doc = - "True if the file is closed"; - - public final static String file_encoding_doc = - "file encoding"; - - public final static String file_errors_doc = - "Unicode error handler"; - - public final static String file_fileno_doc = - "fileno() -> integer \"file descriptor\".\n" + - "\n" + - "This is needed for lower-level file interfaces, such os.read()."; - - public final static String file_flush_doc = - "flush() -> None. Flush the internal I/O buffer."; - - public final static String file_isatty_doc = - "isatty() -> true or false. True if the file is connected to a tty device."; - - public final static String file_mode_doc = - "file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"; - - public final static String file_name_doc = - "file name"; - - public final static String file_newlines_doc = - "end-of-line convention used in this file"; - - public final static String file_next_doc = - "x.next() -> the next value, or raise StopIteration"; - - public final static String file_read_doc = - "read([size]) -> read at most size bytes, returned as a string.\n" + - "\n" + - "If the size argument is negative or omitted, read until EOF is reached.\n" + - "Notice that when in non-blocking mode, less data than what was requested\n" + - "may be returned, even if no size parameter was given."; - - public final static String file_readinto_doc = - "readinto() -> Undocumented. Don't use this; it may go away."; - - public final static String file_readline_doc = - "readline([size]) -> next line from the file, as a string.\n" + - "\n" + - "Retain newline. A non-negative size argument limits the maximum\n" + - "number of bytes to return (an incomplete line may be returned then).\n" + - "Return an empty string at EOF."; - - public final static String file_readlines_doc = - "readlines([size]) -> list of strings, each a line from the file.\n" + - "\n" + - "Call readline() repeatedly and return a list of the lines so read.\n" + - "The optional size argument, if given, is an approximate bound on the\n" + - "total number of bytes in the lines returned."; - - public final static String file_seek_doc = - "seek(offset[, whence]) -> None. Move to new file position.\n" + - "\n" + - "Argument offset is a byte count. Optional argument whence defaults to\n" + - "0 (offset from start of file, offset should be >= 0); other values are 1\n" + - "(move relative to current position, positive or negative), and 2 (move\n" + - "relative to end of file, usually negative, although many platforms allow\n" + - "seeking beyond the end of a file). If the file is opened in text mode,\n" + - "only offsets returned by tell() are legal. Use of other offsets causes\n" + - "undefined behavior.\n" + - "Note that not all file objects are seekable."; - - public final static String file_softspace_doc = - "flag indicating that a space needs to be printed; used by print"; - - public final static String file_tell_doc = - "tell() -> current file position, an integer (may be a long integer)."; - - public final static String file_truncate_doc = - "truncate([size]) -> None. Truncate the file to at most size bytes.\n" + - "\n" + - "Size defaults to the current file position, as returned by tell()."; - - public final static String file_write_doc = - "write(str) -> None. Write string str to file.\n" + - "\n" + - "Note that due to buffering, flush() or close() may be needed before\n" + - "the file on disk reflects the data written."; - - public final static String file_writelines_doc = - "writelines(sequence_of_strings) -> None. Write the strings to the file.\n" + - "\n" + - "Note that newlines are not added. The sequence can be any iterable object\n" + - "producing strings. This is equivalent to calling write() for each string."; - - public final static String file_xreadlines_doc = - "xreadlines() -> returns self.\n" + - "\n" + - "For backward compatibility. File objects now include the performance\n" + - "optimizations previously implemented in the xreadlines module."; - - // Docs for - public final static String complex___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String complex___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String complex___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String complex___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String complex___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String complex___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String complex___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String complex_doc = - "complex(real[, imag]) -> complex number\n" + - "\n" + - "Create a complex number from a real part and an optional imaginary part.\n" + - "This is equivalent to (real + imag*1j) where imag defaults to 0."; - - public final static String complex___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String complex___float___doc = - "x.__float__() <==> float(x)"; - - public final static String complex___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String complex___format___doc = - "complex.__format__() -> str\n" + - "\n" + - "Converts to a string according to format_spec."; - - public final static String complex___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String complex___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String complex___getnewargs___doc = - ""; - - public final static String complex___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String complex___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String complex___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String complex___int___doc = - "x.__int__() <==> int(x)"; - - public final static String complex___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String complex___long___doc = - "x.__long__() <==> long(x)"; - - public final static String complex___lt___doc = - "x.__lt__(y) <==> x x%y"; - - public final static String complex___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String complex___ne___doc = - "x.__ne__(y) <==> x!=y"; - - public final static String complex___neg___doc = - "x.__neg__() <==> -x"; - - public final static String complex___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String complex___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String complex___pos___doc = - "x.__pos__() <==> +x"; - - public final static String complex___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String complex___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String complex___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String complex___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String complex___reduce___doc = - "helper for pickle"; - - public final static String complex___reduce_ex___doc = - "helper for pickle"; - - public final static String complex___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String complex___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String complex___rmod___doc = - "x.__rmod__(y) <==> y%x"; - - public final static String complex___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String complex___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String complex___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String complex___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String complex___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String complex___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String complex___str___doc = - "x.__str__() <==> str(x)"; - - public final static String complex___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String complex___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String complex___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String complex_conjugate_doc = - "complex.conjugate() -> complex\n" + - "\n" + - "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j."; - - public final static String complex_imag_doc = - "the imaginary part of a complex number"; - - public final static String complex_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String bool___abs___doc = - "x.__abs__() <==> abs(x)"; - - public final static String bool___add___doc = - "x.__add__(y) <==> x+y"; - - public final static String bool___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String bool___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String bool___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String bool___coerce___doc = - "x.__coerce__(y) <==> coerce(x, y)"; - - public final static String bool___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String bool___div___doc = - "x.__div__(y) <==> x/y"; - - public final static String bool___divmod___doc = - "x.__divmod__(y) <==> divmod(x, y)"; - - public final static String bool_doc = - "bool(x) -> bool\n" + - "\n" + - "Returns True when the argument x is true, False otherwise.\n" + - "The builtins True and False are the only two instances of the class bool.\n" + - "The class bool is a subclass of the class int, and cannot be subclassed."; - - public final static String bool___float___doc = - "x.__float__() <==> float(x)"; - - public final static String bool___floordiv___doc = - "x.__floordiv__(y) <==> x//y"; - - public final static String bool___format___doc = - ""; - - public final static String bool___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String bool___getnewargs___doc = - ""; - - public final static String bool___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String bool___hex___doc = - "x.__hex__() <==> hex(x)"; - - public final static String bool___index___doc = - "x[y:z] <==> x[y.__index__():z.__index__()]"; - - public final static String bool___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String bool___int___doc = - "x.__int__() <==> int(x)"; - - public final static String bool___invert___doc = - "x.__invert__() <==> ~x"; - - public final static String bool___long___doc = - "x.__long__() <==> long(x)"; - - public final static String bool___lshift___doc = - "x.__lshift__(y) <==> x< x%y"; - - public final static String bool___mul___doc = - "x.__mul__(y) <==> x*y"; - - public final static String bool___neg___doc = - "x.__neg__() <==> -x"; - - public final static String bool___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String bool___nonzero___doc = - "x.__nonzero__() <==> x != 0"; - - public final static String bool___oct___doc = - "x.__oct__() <==> oct(x)"; - - public final static String bool___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String bool___pos___doc = - "x.__pos__() <==> +x"; - - public final static String bool___pow___doc = - "x.__pow__(y[, z]) <==> pow(x, y[, z])"; - - public final static String bool___radd___doc = - "x.__radd__(y) <==> y+x"; - - public final static String bool___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String bool___rdiv___doc = - "x.__rdiv__(y) <==> y/x"; - - public final static String bool___rdivmod___doc = - "x.__rdivmod__(y) <==> divmod(y, x)"; - - public final static String bool___reduce___doc = - "helper for pickle"; - - public final static String bool___reduce_ex___doc = - "helper for pickle"; - - public final static String bool___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String bool___rfloordiv___doc = - "x.__rfloordiv__(y) <==> y//x"; - - public final static String bool___rlshift___doc = - "x.__rlshift__(y) <==> y< y%x"; - - public final static String bool___rmul___doc = - "x.__rmul__(y) <==> y*x"; - - public final static String bool___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String bool___rpow___doc = - "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; - - public final static String bool___rrshift___doc = - "x.__rrshift__(y) <==> y>>x"; - - public final static String bool___rshift___doc = - "x.__rshift__(y) <==> x>>y"; - - public final static String bool___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String bool___rtruediv___doc = - "x.__rtruediv__(y) <==> y/x"; - - public final static String bool___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String bool___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String bool___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String bool___str___doc = - "x.__str__() <==> str(x)"; - - public final static String bool___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String bool___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String bool___truediv___doc = - "x.__truediv__(y) <==> x/y"; - - public final static String bool___trunc___doc = - "Truncating an Integral returns itself."; - - public final static String bool___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String bool_bit_length_doc = - "int.bit_length() -> int\n" + - "\n" + - "Number of bits necessary to represent self in binary.\n" + - ">>> bin(37)\n" + - "'0b100101'\n" + - ">>> (37).bit_length()\n" + - "6"; - - public final static String bool_conjugate_doc = - "Returns self, the complex conjugate of any int."; - - public final static String bool_denominator_doc = - "the denominator of a rational number in lowest terms"; - - public final static String bool_imag_doc = - "the imaginary part of a complex number"; - - public final static String bool_numerator_doc = - "the numerator of a rational number in lowest terms"; - - public final static String bool_real_doc = - "the real part of a complex number"; - - // Docs for - public final static String classmethod___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String classmethod___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String classmethod_doc = - "classmethod(function) -> method\n" + - "\n" + - "Convert a function to be a class method.\n" + - "\n" + - "A class method receives the class as implicit first argument,\n" + - "just like an instance method receives the instance.\n" + - "To declare a class method, use this idiom:\n" + - "\n" + - " class C:\n" + - " def f(cls, arg1, arg2, ...): ...\n" + - " f = classmethod(f)\n" + - "\n" + - "It can be called either on the class (e.g. C.f()) or on an instance\n" + - "(e.g. C().f()). The instance is ignored except for its class.\n" + - "If a class method is called for a derived class, the derived class\n" + - "object is passed as the implied first argument.\n" + - "\n" + - "Class methods are different than C++ or Java static methods.\n" + - "If you want those, see the staticmethod builtin."; - - public final static String classmethod___format___doc = - "default object formatter"; - - public final static String classmethod___func___doc = - ""; - - public final static String classmethod___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String classmethod___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String classmethod___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String classmethod___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String classmethod___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String classmethod___reduce___doc = - "helper for pickle"; - - public final static String classmethod___reduce_ex___doc = - "helper for pickle"; - - public final static String classmethod___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String classmethod___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String classmethod___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String classmethod___str___doc = - "x.__str__() <==> str(x)"; - - public final static String classmethod___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - // Docs for - public final static String set___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String set___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String set___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String set___contains___doc = - "x.__contains__(y) <==> y in x."; - - public final static String set___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String set_doc = - "set() -> new empty set object\n" + - "set(iterable) -> new set object\n" + - "\n" + - "Build an unordered collection of unique elements."; - - public final static String set___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String set___format___doc = - "default object formatter"; - - public final static String set___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String set___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String set___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String set___hash___doc = - ""; - - public final static String set___iand___doc = - "x.__iand__(y) <==> x&y"; - - public final static String set___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String set___ior___doc = - "x.__ior__(y) <==> x|y"; - - public final static String set___isub___doc = - "x.__isub__(y) <==> x-y"; - - public final static String set___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String set___ixor___doc = - "x.__ixor__(y) <==> x^y"; - - public final static String set___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String set___len___doc = - "x.__len__() <==> len(x)"; - - public final static String set___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String set___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String set___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String set___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String set___reduce___doc = - "Return state information for pickling."; - - public final static String set___reduce_ex___doc = - "helper for pickle"; - - public final static String set___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String set___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String set___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String set___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String set___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String set___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes"; - - public final static String set___str___doc = - "x.__str__() <==> str(x)"; - - public final static String set___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String set___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String set___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String set_add_doc = - "Add an element to a set.\n" + - "\n" + - "This has no effect if the element is already present."; - - public final static String set_clear_doc = - "Remove all elements from this set."; - - public final static String set_copy_doc = - "Return a shallow copy of a set."; - - public final static String set_difference_doc = - "Return the difference of two or more sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in this set but not the others.)"; - - public final static String set_difference_update_doc = - "Remove all elements of another set from this set."; - - public final static String set_discard_doc = - "Remove an element from a set if it is a member.\n" + - "\n" + - "If the element is not a member, do nothing."; - - public final static String set_intersection_doc = - "Return the intersection of two or more sets as a new set.\n" + - "\n" + - "(i.e. elements that are common to all of the sets.)"; - - public final static String set_intersection_update_doc = - "Update a set with the intersection of itself and another."; - - public final static String set_isdisjoint_doc = - "Return True if two sets have a null intersection."; - - public final static String set_issubset_doc = - "Report whether another set contains this set."; - - public final static String set_issuperset_doc = - "Report whether this set contains another set."; - - public final static String set_pop_doc = - "Remove and return an arbitrary set element.\n" + - "Raises KeyError if the set is empty."; - - public final static String set_remove_doc = - "Remove an element from a set; it must be a member.\n" + - "\n" + - "If the element is not a member, raise a KeyError."; - - public final static String set_symmetric_difference_doc = - "Return the symmetric difference of two sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in exactly one of the sets.)"; - - public final static String set_symmetric_difference_update_doc = - "Update a set with the symmetric difference of itself and another."; - - public final static String set_union_doc = - "Return the union of sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in either set.)"; - - public final static String set_update_doc = - "Update a set with the union of itself and others."; - - // Docs for - public final static String frozenset___and___doc = - "x.__and__(y) <==> x&y"; - - public final static String frozenset___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String frozenset___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String frozenset___contains___doc = - "x.__contains__(y) <==> y in x."; - - public final static String frozenset___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String frozenset_doc = - "frozenset() -> empty frozenset object\n" + - "frozenset(iterable) -> frozenset object\n" + - "\n" + - "Build an immutable unordered collection of unique elements."; - - public final static String frozenset___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String frozenset___format___doc = - "default object formatter"; - - public final static String frozenset___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String frozenset___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String frozenset___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String frozenset___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String frozenset___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String frozenset___iter___doc = - "x.__iter__() <==> iter(x)"; - - public final static String frozenset___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String frozenset___len___doc = - "x.__len__() <==> len(x)"; - - public final static String frozenset___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String frozenset___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String frozenset___or___doc = - "x.__or__(y) <==> x|y"; - - public final static String frozenset___rand___doc = - "x.__rand__(y) <==> y&x"; - - public final static String frozenset___reduce___doc = - "Return state information for pickling."; - - public final static String frozenset___reduce_ex___doc = - "helper for pickle"; - - public final static String frozenset___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String frozenset___ror___doc = - "x.__ror__(y) <==> y|x"; - - public final static String frozenset___rsub___doc = - "x.__rsub__(y) <==> y-x"; - - public final static String frozenset___rxor___doc = - "x.__rxor__(y) <==> y^x"; - - public final static String frozenset___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String frozenset___sizeof___doc = - "S.__sizeof__() -> size of S in memory, in bytes"; - - public final static String frozenset___str___doc = - "x.__str__() <==> str(x)"; - - public final static String frozenset___sub___doc = - "x.__sub__(y) <==> x-y"; - - public final static String frozenset___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String frozenset___xor___doc = - "x.__xor__(y) <==> x^y"; - - public final static String frozenset_copy_doc = - "Return a shallow copy of a set."; - - public final static String frozenset_difference_doc = - "Return the difference of two or more sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in this set but not the others.)"; - - public final static String frozenset_intersection_doc = - "Return the intersection of two or more sets as a new set.\n" + - "\n" + - "(i.e. elements that are common to all of the sets.)"; - - public final static String frozenset_isdisjoint_doc = - "Return True if two sets have a null intersection."; - - public final static String frozenset_issubset_doc = - "Report whether another set contains this set."; - - public final static String frozenset_issuperset_doc = - "Report whether this set contains another set."; - - public final static String frozenset_symmetric_difference_doc = - "Return the symmetric difference of two sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in exactly one of the sets.)"; - - public final static String frozenset_union_doc = - "Return the union of sets as a new set.\n" + - "\n" + - "(i.e. all elements that are in either set.)"; - - // Docs for - public final static String BaseException___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String BaseException___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String BaseException___dict___doc = - ""; - - public final static String BaseException_doc = - "Common base class for all exceptions"; - - public final static String BaseException___format___doc = - "default object formatter"; - - public final static String BaseException___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String BaseException___getitem___doc = - "x.__getitem__(y) <==> x[y]"; - - public final static String BaseException___getslice___doc = - "x.__getslice__(i, j) <==> x[i:j]\n" + - " \n" + - " Use of negative indices is not supported."; - - public final static String BaseException___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String BaseException___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String BaseException___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String BaseException___reduce___doc = - ""; - - public final static String BaseException___reduce_ex___doc = - "helper for pickle"; - - public final static String BaseException___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String BaseException___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String BaseException___setstate___doc = - ""; - - public final static String BaseException___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String BaseException___str___doc = - "x.__str__() <==> str(x)"; - - public final static String BaseException___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String BaseException___unicode___doc = - ""; - - public final static String BaseException_args_doc = - ""; - - public final static String BaseException_message_doc = - ""; - - // Docs for - public final static String function___call___doc = - "x.__call__(...) <==> x(...)"; - - public final static String function___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String function___closure___doc = - ""; - - public final static String function___code___doc = - ""; - - public final static String function___defaults___doc = - ""; - - public final static String function___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String function___dict___doc = - ""; - - public final static String function_doc = - "function(code, globals[, name[, argdefs[, closure]]])\n" + - "\n" + - "Create a function object from a code object and a dictionary.\n" + - "The optional name string overrides the name from the code object.\n" + - "The optional argdefs tuple specifies the default argument values.\n" + - "The optional closure tuple supplies the bindings for free variables."; - - public final static String function___format___doc = - "default object formatter"; - - public final static String function___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String function___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String function___globals___doc = - ""; - - public final static String function___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String function___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String function___module___doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String function___name___doc = - "str(object) -> string\n" + - "\n" + - "Return a nice string representation of the object.\n" + - "If the argument is a string, the return value is the same object."; - - public final static String function___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String function___reduce___doc = - "helper for pickle"; - - public final static String function___reduce_ex___doc = - "helper for pickle"; - - public final static String function___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String function___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String function___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String function___str___doc = - "x.__str__() <==> str(x)"; - - public final static String function___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String function_func_closure_doc = - ""; - - public final static String function_func_code_doc = - ""; - - public final static String function_func_defaults_doc = - ""; - - public final static String function_func_dict_doc = - ""; - - public final static String function_func_doc_doc = - ""; - - public final static String function_func_globals_doc = - ""; - - public final static String function_func_name_doc = - ""; - - // Docs for - public final static String instancemethod___call___doc = - "x.__call__(...) <==> x(...)"; - - public final static String instancemethod___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String instancemethod___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String instancemethod___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String instancemethod_doc = - "instancemethod(function, instance, class)\n" + - "\n" + - "Create an instance method object."; - - public final static String instancemethod___format___doc = - "default object formatter"; - - public final static String instancemethod___func___doc = - "the function (or other callable) implementing a method"; - - public final static String instancemethod___get___doc = - "descr.__get__(obj[, type]) -> value"; - - public final static String instancemethod___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String instancemethod___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String instancemethod___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String instancemethod___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String instancemethod___reduce___doc = - "helper for pickle"; - - public final static String instancemethod___reduce_ex___doc = - "helper for pickle"; - - public final static String instancemethod___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String instancemethod___self___doc = - "the instance to which a method is bound; None for unbound methods"; - - public final static String instancemethod___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String instancemethod___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String instancemethod___str___doc = - "x.__str__() <==> str(x)"; - - public final static String instancemethod___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String instancemethod_im_class_doc = - "the class associated with a method"; - - public final static String instancemethod_im_func_doc = - "the function (or other callable) implementing a method"; - - public final static String instancemethod_im_self_doc = - "the instance to which a method is bound; None for unbound methods"; - - // Docs for - public final static String code___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String code___cmp___doc = - "x.__cmp__(y) <==> cmp(x,y)"; - - public final static String code___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String code_doc = - "code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n" + - " varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n" + - "\n" + - "Create a code object. Not for the faint of heart."; - - public final static String code___eq___doc = - "x.__eq__(y) <==> x==y"; - - public final static String code___format___doc = - "default object formatter"; - - public final static String code___ge___doc = - "x.__ge__(y) <==> x>=y"; - - public final static String code___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String code___gt___doc = - "x.__gt__(y) <==> x>y"; - - public final static String code___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String code___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String code___le___doc = - "x.__le__(y) <==> x<=y"; - - public final static String code___lt___doc = - "x.__lt__(y) <==> x x!=y"; - - public final static String code___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String code___reduce___doc = - "helper for pickle"; - - public final static String code___reduce_ex___doc = - "helper for pickle"; - - public final static String code___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String code___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String code___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String code___str___doc = - "x.__str__() <==> str(x)"; - - public final static String code___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String code_co_argcount_doc = - ""; - - public final static String code_co_cellvars_doc = - ""; - - public final static String code_co_code_doc = - ""; - - public final static String code_co_consts_doc = - ""; - - public final static String code_co_filename_doc = - ""; - - public final static String code_co_firstlineno_doc = - ""; - - public final static String code_co_flags_doc = - ""; - - public final static String code_co_freevars_doc = - ""; - - public final static String code_co_lnotab_doc = - ""; - - public final static String code_co_name_doc = - ""; - - public final static String code_co_names_doc = - ""; - - public final static String code_co_nlocals_doc = - ""; - - public final static String code_co_stacksize_doc = - ""; - - public final static String code_co_varnames_doc = - ""; - - // Docs for - public final static String frame___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String frame___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String frame_doc = - ""; - - public final static String frame___format___doc = - "default object formatter"; - - public final static String frame___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String frame___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String frame___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String frame___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String frame___reduce___doc = - "helper for pickle"; - - public final static String frame___reduce_ex___doc = - "helper for pickle"; - - public final static String frame___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String frame___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String frame___sizeof___doc = - "F.__sizeof__() -> size of F in memory, in bytes"; - - public final static String frame___str___doc = - "x.__str__() <==> str(x)"; - - public final static String frame___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String frame_f_back_doc = - ""; - - public final static String frame_f_builtins_doc = - ""; - - public final static String frame_f_code_doc = - ""; - - public final static String frame_f_exc_traceback_doc = - ""; - - public final static String frame_f_exc_type_doc = - ""; - - public final static String frame_f_exc_value_doc = - ""; - - public final static String frame_f_globals_doc = - ""; - - public final static String frame_f_lasti_doc = - ""; - - public final static String frame_f_lineno_doc = - ""; - - public final static String frame_f_locals_doc = - ""; - - public final static String frame_f_restricted_doc = - ""; - - public final static String frame_f_trace_doc = - ""; - - // Docs for - public final static String traceback___class___doc = - "type(object) -> the object's type\n" + - "type(name, bases, dict) -> a new type"; - - public final static String traceback___delattr___doc = - "x.__delattr__('name') <==> del x.name"; - - public final static String traceback_doc = - ""; - - public final static String traceback___format___doc = - "default object formatter"; - - public final static String traceback___getattribute___doc = - "x.__getattribute__('name') <==> x.name"; - - public final static String traceback___hash___doc = - "x.__hash__() <==> hash(x)"; - - public final static String traceback___init___doc = - "x.__init__(...) initializes x; see help(type(x)) for signature"; - - public final static String traceback___new___doc = - "T.__new__(S, ...) -> a new object with type S, a subtype of T"; - - public final static String traceback___reduce___doc = - "helper for pickle"; - - public final static String traceback___reduce_ex___doc = - "helper for pickle"; - - public final static String traceback___repr___doc = - "x.__repr__() <==> repr(x)"; - - public final static String traceback___setattr___doc = - "x.__setattr__('name', value) <==> x.name = value"; - - public final static String traceback___sizeof___doc = - "__sizeof__() -> int\n" + - "size of object in memory, in bytes"; - - public final static String traceback___str___doc = - "x.__str__() <==> str(x)"; - - public final static String traceback___subclasshook___doc = - "Abstract classes can override this to customize issubclass().\n" + - "\n" + - "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + - "It should return True, False or NotImplemented. If it returns\n" + - "NotImplemented, the normal algorithm is used. Otherwise, it\n" + - "overrides the normal algorithm (and the outcome is cached).\n" + - ""; - - public final static String traceback_tb_frame_doc = - ""; - - public final static String traceback_tb_lasti_doc = - ""; - - public final static String traceback_tb_lineno_doc = - ""; - - public final static String traceback_tb_next_doc = - ""; - -} +// generated by make_pydocs.py + +package org.python.core; + +public class BuiltinDocs { + + // Docs for + public final static String object___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String object___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String object_doc = + "The most base type"; + + public final static String object___format___doc = + "default object formatter"; + + public final static String object___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String object___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String object___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String object___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String object___reduce___doc = + "helper for pickle"; + + public final static String object___reduce_ex___doc = + "helper for pickle"; + + public final static String object___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String object___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String object___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String object___str___doc = + "x.__str__() <==> str(x)"; + + public final static String object___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String type___abstractmethods___doc = + ""; + + public final static String type___base___doc = + "The most base type"; + + public final static String type___bases___doc = + "tuple() -> empty tuple\n" + + "tuple(iterable) -> tuple initialized from iterable's items\n" + + "\n" + + "If the argument is a tuple, the return value is the same object."; + + public final static String type___basicsize___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type___call___doc = + "x.__call__(...) <==> x(...)"; + + public final static String type___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String type___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String type___dict___doc = + ""; + + public final static String type___dictoffset___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type_doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String type___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String type___flags___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type___format___doc = + "default object formatter"; + + public final static String type___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String type___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String type___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String type___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String type___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String type___instancecheck___doc = + "__instancecheck__() -> bool\n" + + "check if an object is an instance"; + + public final static String type___itemsize___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String type___lt___doc = + "x.__lt__(y) <==> x string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String type___mro___doc = + "tuple() -> empty tuple\n" + + "tuple(iterable) -> tuple initialized from iterable's items\n" + + "\n" + + "If the argument is a tuple, the return value is the same object."; + + public final static String type___name___doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String type___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String type___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String type___reduce___doc = + "helper for pickle"; + + public final static String type___reduce_ex___doc = + "helper for pickle"; + + public final static String type___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String type___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String type___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String type___str___doc = + "x.__str__() <==> str(x)"; + + public final static String type___subclasscheck___doc = + "__subclasscheck__() -> bool\n" + + "check if a class is a subclass"; + + public final static String type___subclasses___doc = + "__subclasses__() -> list of immediate subclasses"; + + public final static String type___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String type___weakrefoffset___doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String type_mro_doc = + "mro() -> list\n" + + "return a type's method resolution order"; + + // Docs for + public final static String unicode___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String unicode___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String unicode___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String unicode___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String unicode_doc = + "unicode(string [, encoding[, errors]]) -> object\n" + + "\n" + + "Create a new Unicode object from the given encoded string.\n" + + "encoding defaults to the current default string encoding.\n" + + "errors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'."; + + public final static String unicode___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String unicode___format___doc = + "S.__format__(format_spec) -> unicode\n" + + "\n" + + "Return a formatted version of S as described by format_spec."; + + public final static String unicode___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String unicode___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String unicode___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String unicode___getnewargs___doc = + ""; + + public final static String unicode___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String unicode___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String unicode___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String unicode___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String unicode___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String unicode___len___doc = + "x.__len__() <==> len(x)"; + + public final static String unicode___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String unicode___mul___doc = + "x.__mul__(n) <==> x*n"; + + public final static String unicode___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String unicode___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String unicode___reduce___doc = + "helper for pickle"; + + public final static String unicode___reduce_ex___doc = + "helper for pickle"; + + public final static String unicode___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String unicode___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String unicode___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String unicode___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String unicode___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes\n" + + "\n" + + ""; + + public final static String unicode___str___doc = + "x.__str__() <==> str(x)"; + + public final static String unicode___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String unicode__formatter_field_name_split_doc = + ""; + + public final static String unicode__formatter_parser_doc = + ""; + + public final static String unicode_capitalize_doc = + "S.capitalize() -> unicode\n" + + "\n" + + "Return a capitalized version of S, i.e. make the first character\n" + + "have upper case and the rest lower case."; + + public final static String unicode_center_doc = + "S.center(width[, fillchar]) -> unicode\n" + + "\n" + + "Return S centered in a Unicode string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String unicode_count_doc = + "S.count(sub[, start[, end]]) -> int\n" + + "\n" + + "Return the number of non-overlapping occurrences of substring sub in\n" + + "Unicode string S[start:end]. Optional arguments start and end are\n" + + "interpreted as in slice notation."; + + public final static String unicode_decode_doc = + "S.decode([encoding[,errors]]) -> string or unicode\n" + + "\n" + + "Decodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + + "as well as any other name registerd with codecs.register_error that is\n" + + "able to handle UnicodeDecodeErrors."; + + public final static String unicode_encode_doc = + "S.encode([encoding[,errors]]) -> string or unicode\n" + + "\n" + + "Encodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + + "'xmlcharrefreplace' as well as any other name registered with\n" + + "codecs.register_error that can handle UnicodeEncodeErrors."; + + public final static String unicode_endswith_doc = + "S.endswith(suffix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S ends with the specified suffix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "suffix can also be a tuple of strings to try."; + + public final static String unicode_expandtabs_doc = + "S.expandtabs([tabsize]) -> unicode\n" + + "\n" + + "Return a copy of S where all tab characters are expanded using spaces.\n" + + "If tabsize is not given, a tab size of 8 characters is assumed."; + + public final static String unicode_find_doc = + "S.find(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the lowest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String unicode_format_doc = + "S.format(*args, **kwargs) -> unicode\n" + + "\n" + + "Return a formatted version of S, using substitutions from args and kwargs.\n" + + "The substitutions are identified by braces ('{' and '}')."; + + public final static String unicode_index_doc = + "S.index(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.find() but raise ValueError when the substring is not found."; + + public final static String unicode_isalnum_doc = + "S.isalnum() -> bool\n" + + "\n" + + "Return True if all characters in S are alphanumeric\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_isalpha_doc = + "S.isalpha() -> bool\n" + + "\n" + + "Return True if all characters in S are alphabetic\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_isdecimal_doc = + "S.isdecimal() -> bool\n" + + "\n" + + "Return True if there are only decimal characters in S,\n" + + "False otherwise."; + + public final static String unicode_isdigit_doc = + "S.isdigit() -> bool\n" + + "\n" + + "Return True if all characters in S are digits\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_islower_doc = + "S.islower() -> bool\n" + + "\n" + + "Return True if all cased characters in S are lowercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String unicode_isnumeric_doc = + "S.isnumeric() -> bool\n" + + "\n" + + "Return True if there are only numeric characters in S,\n" + + "False otherwise."; + + public final static String unicode_isspace_doc = + "S.isspace() -> bool\n" + + "\n" + + "Return True if all characters in S are whitespace\n" + + "and there is at least one character in S, False otherwise."; + + public final static String unicode_istitle_doc = + "S.istitle() -> bool\n" + + "\n" + + "Return True if S is a titlecased string and there is at least one\n" + + "character in S, i.e. upper- and titlecase characters may only\n" + + "follow uncased characters and lowercase characters only cased ones.\n" + + "Return False otherwise."; + + public final static String unicode_isupper_doc = + "S.isupper() -> bool\n" + + "\n" + + "Return True if all cased characters in S are uppercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String unicode_join_doc = + "S.join(iterable) -> unicode\n" + + "\n" + + "Return a string which is the concatenation of the strings in the\n" + + "iterable. The separator between elements is S."; + + public final static String unicode_ljust_doc = + "S.ljust(width[, fillchar]) -> int\n" + + "\n" + + "Return S left-justified in a Unicode string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String unicode_lower_doc = + "S.lower() -> unicode\n" + + "\n" + + "Return a copy of the string S converted to lowercase."; + + public final static String unicode_lstrip_doc = + "S.lstrip([chars]) -> unicode\n" + + "\n" + + "Return a copy of the string S with leading whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is a str, it will be converted to unicode before stripping"; + + public final static String unicode_partition_doc = + "S.partition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, and return the part before it,\n" + + "the separator itself, and the part after it. If the separator is not\n" + + "found, return S and two empty strings."; + + public final static String unicode_replace_doc = + "S.replace(old, new[, count]) -> unicode\n" + + "\n" + + "Return a copy of S with all occurrences of substring\n" + + "old replaced by new. If the optional argument count is\n" + + "given, only the first count occurrences are replaced."; + + public final static String unicode_rfind_doc = + "S.rfind(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the highest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String unicode_rindex_doc = + "S.rindex(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.rfind() but raise ValueError when the substring is not found."; + + public final static String unicode_rjust_doc = + "S.rjust(width[, fillchar]) -> unicode\n" + + "\n" + + "Return S right-justified in a Unicode string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String unicode_rpartition_doc = + "S.rpartition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, starting at the end of S, and return\n" + + "the part before it, the separator itself, and the part after it. If the\n" + + "separator is not found, return two empty strings and S."; + + public final static String unicode_rsplit_doc = + "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in S, using sep as the\n" + + "delimiter string, starting at the end of the string and\n" + + "working to the front. If maxsplit is given, at most maxsplit\n" + + "splits are done. If sep is not specified, any whitespace string\n" + + "is a separator."; + + public final static String unicode_rstrip_doc = + "S.rstrip([chars]) -> unicode\n" + + "\n" + + "Return a copy of the string S with trailing whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is a str, it will be converted to unicode before stripping"; + + public final static String unicode_split_doc = + "S.split([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in S, using sep as the\n" + + "delimiter string. If maxsplit is given, at most maxsplit\n" + + "splits are done. If sep is not specified or is None, any\n" + + "whitespace string is a separator and empty strings are\n" + + "removed from the result."; + + public final static String unicode_splitlines_doc = + "S.splitlines([keepends]) -> list of strings\n" + + "\n" + + "Return a list of the lines in S, breaking at line boundaries.\n" + + "Line breaks are not included in the resulting list unless keepends\n" + + "is given and true."; + + public final static String unicode_startswith_doc = + "S.startswith(prefix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S starts with the specified prefix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "prefix can also be a tuple of strings to try."; + + public final static String unicode_strip_doc = + "S.strip([chars]) -> unicode\n" + + "\n" + + "Return a copy of the string S with leading and trailing\n" + + "whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is a str, it will be converted to unicode before stripping"; + + public final static String unicode_swapcase_doc = + "S.swapcase() -> unicode\n" + + "\n" + + "Return a copy of S with uppercase characters converted to lowercase\n" + + "and vice versa."; + + public final static String unicode_title_doc = + "S.title() -> unicode\n" + + "\n" + + "Return a titlecased version of S, i.e. words start with title case\n" + + "characters, all remaining cased characters have lower case."; + + public final static String unicode_translate_doc = + "S.translate(table) -> unicode\n" + + "\n" + + "Return a copy of the string S, where all characters have been mapped\n" + + "through the given translation table, which must be a mapping of\n" + + "Unicode ordinals to Unicode ordinals, Unicode strings or None.\n" + + "Unmapped characters are left untouched. Characters mapped to None\n" + + "are deleted."; + + public final static String unicode_upper_doc = + "S.upper() -> unicode\n" + + "\n" + + "Return a copy of S converted to uppercase."; + + public final static String unicode_zfill_doc = + "S.zfill(width) -> unicode\n" + + "\n" + + "Pad a numeric string S with zeros on the left, to fill a field\n" + + "of the specified width. The string S is never truncated."; + + // Docs for + public final static String dict___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String dict___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String dict___contains___doc = + "D.__contains__(k) -> True if D has a key k, else False"; + + public final static String dict___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String dict___delitem___doc = + "x.__delitem__(y) <==> del x[y]"; + + public final static String dict_doc = + "dict() -> new empty dictionary\n" + + "dict(mapping) -> new dictionary initialized from a mapping object's\n" + + " (key, value) pairs\n" + + "dict(iterable) -> new dictionary initialized as if via:\n" + + " d = {}\n" + + " for k, v in iterable:\n" + + " d[k] = v\n" + + "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" + + " in the keyword argument list. For example: dict(one=1, two=2)"; + + public final static String dict___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String dict___format___doc = + "default object formatter"; + + public final static String dict___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String dict___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String dict___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String dict___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String dict___hash___doc = + ""; + + public final static String dict___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String dict___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String dict___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String dict___len___doc = + "x.__len__() <==> len(x)"; + + public final static String dict___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String dict___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String dict___reduce___doc = + "helper for pickle"; + + public final static String dict___reduce_ex___doc = + "helper for pickle"; + + public final static String dict___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String dict___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String dict___setitem___doc = + "x.__setitem__(i, y) <==> x[i]=y"; + + public final static String dict___sizeof___doc = + "D.__sizeof__() -> size of D in memory, in bytes"; + + public final static String dict___str___doc = + "x.__str__() <==> str(x)"; + + public final static String dict___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String dict_clear_doc = + "D.clear() -> None. Remove all items from D."; + + public final static String dict_copy_doc = + "D.copy() -> a shallow copy of D"; + + public final static String dict_fromkeys_doc = + "dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.\n" + + "v defaults to None."; + + public final static String dict_get_doc = + "D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None."; + + public final static String dict_has_key_doc = + "D.has_key(k) -> True if D has a key k, else False"; + + public final static String dict_items_doc = + "D.items() -> list of D's (key, value) pairs, as 2-tuples"; + + public final static String dict_iteritems_doc = + "D.iteritems() -> an iterator over the (key, value) items of D"; + + public final static String dict_iterkeys_doc = + "D.iterkeys() -> an iterator over the keys of D"; + + public final static String dict_itervalues_doc = + "D.itervalues() -> an iterator over the values of D"; + + public final static String dict_keys_doc = + "D.keys() -> list of D's keys"; + + public final static String dict_pop_doc = + "D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n" + + "If key is not found, d is returned if given, otherwise KeyError is raised"; + + public final static String dict_popitem_doc = + "D.popitem() -> (k, v), remove and return some (key, value) pair as a\n" + + "2-tuple; but raise KeyError if D is empty."; + + public final static String dict_setdefault_doc = + "D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D"; + + public final static String dict_update_doc = + "D.update(E, **F) -> None. Update D from dict/iterable E and F.\n" + + "If E has a .keys() method, does: for k in E: D[k] = E[k]\n" + + "If E lacks .keys() method, does: for (k, v) in E: D[k] = v\n" + + "In either case, this is followed by: for k in F: D[k] = F[k]"; + + public final static String dict_values_doc = + "D.values() -> list of D's values"; + + public final static String dict_viewitems_doc = + "D.viewitems() -> a set-like object providing a view on D's items"; + + public final static String dict_viewkeys_doc = + "D.viewkeys() -> a set-like object providing a view on D's keys"; + + public final static String dict_viewvalues_doc = + "D.viewvalues() -> an object providing a view on D's values"; + + // Docs for + public final static String list___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String list___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String list___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String list___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String list___delitem___doc = + "x.__delitem__(y) <==> del x[y]"; + + public final static String list___delslice___doc = + "x.__delslice__(i, j) <==> del x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String list_doc = + "list() -> new empty list\n" + + "list(iterable) -> new list initialized from iterable's items"; + + public final static String list___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String list___format___doc = + "default object formatter"; + + public final static String list___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String list___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String list___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String list___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String list___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String list___hash___doc = + ""; + + public final static String list___iadd___doc = + "x.__iadd__(y) <==> x+=y"; + + public final static String list___imul___doc = + "x.__imul__(y) <==> x*=y"; + + public final static String list___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String list___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String list___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String list___len___doc = + "x.__len__() <==> len(x)"; + + public final static String list___lt___doc = + "x.__lt__(y) <==> x x*n"; + + public final static String list___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String list___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String list___reduce___doc = + "helper for pickle"; + + public final static String list___reduce_ex___doc = + "helper for pickle"; + + public final static String list___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String list___reversed___doc = + "L.__reversed__() -- return a reverse iterator over the list"; + + public final static String list___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String list___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String list___setitem___doc = + "x.__setitem__(i, y) <==> x[i]=y"; + + public final static String list___setslice___doc = + "x.__setslice__(i, j, y) <==> x[i:j]=y\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String list___sizeof___doc = + "L.__sizeof__() -- size of L in memory, in bytes"; + + public final static String list___str___doc = + "x.__str__() <==> str(x)"; + + public final static String list___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String list_append_doc = + "L.append(object) -- append object to end"; + + public final static String list_count_doc = + "L.count(value) -> integer -- return number of occurrences of value"; + + public final static String list_extend_doc = + "L.extend(iterable) -- extend list by appending elements from the iterable"; + + public final static String list_index_doc = + "L.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + + "Raises ValueError if the value is not present."; + + public final static String list_insert_doc = + "L.insert(index, object) -- insert object before index"; + + public final static String list_pop_doc = + "L.pop([index]) -> item -- remove and return item at index (default last).\n" + + "Raises IndexError if list is empty or index is out of range."; + + public final static String list_remove_doc = + "L.remove(value) -- remove first occurrence of value.\n" + + "Raises ValueError if the value is not present."; + + public final static String list_reverse_doc = + "L.reverse() -- reverse *IN PLACE*"; + + public final static String list_sort_doc = + "L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;\n" + + "cmp(x, y) -> -1, 0, 1"; + + // Docs for + public final static String slice___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String slice___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String slice___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String slice_doc = + "slice([start,] stop[, step])\n" + + "\n" + + "Create a slice object. This is used for extended slicing (e.g. a[0:10:2])."; + + public final static String slice___format___doc = + "default object formatter"; + + public final static String slice___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String slice___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String slice___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String slice___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String slice___reduce___doc = + "Return state information for pickling."; + + public final static String slice___reduce_ex___doc = + "helper for pickle"; + + public final static String slice___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String slice___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String slice___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String slice___str___doc = + "x.__str__() <==> str(x)"; + + public final static String slice___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String slice_indices_doc = + "S.indices(len) -> (start, stop, stride)\n" + + "\n" + + "Assuming a sequence of length len, calculate the start and stop\n" + + "indices, and the stride length of the extended slice described by\n" + + "S. Out of bounds indices are clipped in a manner consistent with the\n" + + "handling of normal slices."; + + public final static String slice_start_doc = + ""; + + public final static String slice_step_doc = + ""; + + public final static String slice_stop_doc = + ""; + + // Docs for + public final static String super___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String super___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String super_doc = + "super(type) -> unbound super object\n" + + "super(type, obj) -> bound super object; requires isinstance(obj, type)\n" + + "super(type, type2) -> bound super object; requires issubclass(type2, type)\n" + + "Typical use to call a cooperative superclass method:\n" + + "class C(B):\n" + + " def meth(self, arg):\n" + + " super(C, self).meth(arg)"; + + public final static String super___format___doc = + "default object formatter"; + + public final static String super___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String super___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String super___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String super___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String super___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String super___reduce___doc = + "helper for pickle"; + + public final static String super___reduce_ex___doc = + "helper for pickle"; + + public final static String super___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String super___self___doc = + "the instance invoking super(); may be None"; + + public final static String super___self_class___doc = + "the type of the instance invoking super(); may be None"; + + public final static String super___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String super___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String super___str___doc = + "x.__str__() <==> str(x)"; + + public final static String super___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String super___thisclass___doc = + "the class invoking super()"; + + // Docs for + public final static String staticmethod___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String staticmethod___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String staticmethod_doc = + "staticmethod(function) -> method\n" + + "\n" + + "Convert a function to be a static method.\n" + + "\n" + + "A static method does not receive an implicit first argument.\n" + + "To declare a static method, use this idiom:\n" + + "\n" + + " class C:\n" + + " def f(arg1, arg2, ...): ...\n" + + " f = staticmethod(f)\n" + + "\n" + + "It can be called either on the class (e.g. C.f()) or on an instance\n" + + "(e.g. C().f()). The instance is ignored except for its class.\n" + + "\n" + + "Static methods in Python are similar to those found in Java or C++.\n" + + "For a more advanced concept, see the classmethod builtin."; + + public final static String staticmethod___format___doc = + "default object formatter"; + + public final static String staticmethod___func___doc = + ""; + + public final static String staticmethod___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String staticmethod___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String staticmethod___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String staticmethod___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String staticmethod___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String staticmethod___reduce___doc = + "helper for pickle"; + + public final static String staticmethod___reduce_ex___doc = + "helper for pickle"; + + public final static String staticmethod___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String staticmethod___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String staticmethod___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String staticmethod___str___doc = + "x.__str__() <==> str(x)"; + + public final static String staticmethod___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String float___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String float___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String float___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String float___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String float___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String float___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String float___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String float_doc = + "float(x) -> floating point number\n" + + "\n" + + "Convert a string or number to a floating point number, if possible."; + + public final static String float___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String float___float___doc = + "x.__float__() <==> float(x)"; + + public final static String float___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String float___format___doc = + "float.__format__(format_spec) -> string\n" + + "\n" + + "Formats the float according to format_spec."; + + public final static String float___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String float___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String float___getformat___doc = + "float.__getformat__(typestr) -> string\n" + + "\n" + + "You probably don't want to use this function. It exists mainly to be\n" + + "used in Python's test suite.\n" + + "\n" + + "typestr must be 'double' or 'float'. This function returns whichever of\n" + + "'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the\n" + + "format of floating point numbers used by the C type named by typestr."; + + public final static String float___getnewargs___doc = + ""; + + public final static String float___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String float___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String float___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String float___int___doc = + "x.__int__() <==> int(x)"; + + public final static String float___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String float___long___doc = + "x.__long__() <==> long(x)"; + + public final static String float___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String float___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String float___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String float___neg___doc = + "x.__neg__() <==> -x"; + + public final static String float___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String float___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String float___pos___doc = + "x.__pos__() <==> +x"; + + public final static String float___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String float___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String float___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String float___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String float___reduce___doc = + "helper for pickle"; + + public final static String float___reduce_ex___doc = + "helper for pickle"; + + public final static String float___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String float___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String float___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String float___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String float___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String float___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String float___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String float___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String float___setformat___doc = + "float.__setformat__(typestr, fmt) -> None\n" + + "\n" + + "You probably don't want to use this function. It exists mainly to be\n" + + "used in Python's test suite.\n" + + "\n" + + "typestr must be 'double' or 'float'. fmt must be one of 'unknown',\n" + + "'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n" + + "one of the latter two if it appears to match the underlying C reality.\n" + + "\n" + + "Overrides the automatic determination of C-level floating point type.\n" + + "This affects how floats are converted to and from binary strings."; + + public final static String float___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String float___str___doc = + "x.__str__() <==> str(x)"; + + public final static String float___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String float___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String float___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String float___trunc___doc = + "Returns the Integral closest to x between 0 and x."; + + public final static String float_as_integer_ratio_doc = + "float.as_integer_ratio() -> (int, int)\n" + + "\n" + + "Returns a pair of integers, whose ratio is exactly equal to the original\n" + + "float and with a positive denominator.\n" + + "Raises OverflowError on infinities and a ValueError on NaNs.\n" + + "\n" + + ">>> (10.0).as_integer_ratio()\n" + + "(10, 1)\n" + + ">>> (0.0).as_integer_ratio()\n" + + "(0, 1)\n" + + ">>> (-.25).as_integer_ratio()\n" + + "(-1, 4)"; + + public final static String float_conjugate_doc = + "Returns self, the complex conjugate of any float."; + + public final static String float_fromhex_doc = + "float.fromhex(string) -> float\n" + + "\n" + + "Create a floating-point number from a hexadecimal string.\n" + + ">>> float.fromhex('0x1.ffffp10')\n" + + "2047.984375\n" + + ">>> float.fromhex('-0x1p-1074')\n" + + "-4.9406564584124654e-324"; + + public final static String float_hex_doc = + "float.hex() -> string\n" + + "\n" + + "Return a hexadecimal representation of a floating-point number.\n" + + ">>> (-0.1).hex()\n" + + "'-0x1.999999999999ap-4'\n" + + ">>> 3.14159.hex()\n" + + "'0x1.921f9f01b866ep+1'"; + + public final static String float_imag_doc = + "the imaginary part of a complex number"; + + public final static String float_is_integer_doc = + "Returns True if the float is an integer."; + + public final static String float_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String enumerate___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String enumerate___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String enumerate_doc = + "enumerate(iterable[, start]) -> iterator for index, value of iterable\n" + + "\n" + + "Return an enumerate object. iterable must be another object that supports\n" + + "iteration. The enumerate object yields pairs containing a count (from\n" + + "start, which defaults to zero) and a value yielded by the iterable argument.\n" + + "enumerate is useful for obtaining an indexed list:\n" + + " (0, seq[0]), (1, seq[1]), (2, seq[2]), ..."; + + public final static String enumerate___format___doc = + "default object formatter"; + + public final static String enumerate___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String enumerate___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String enumerate___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String enumerate___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String enumerate___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String enumerate___reduce___doc = + "helper for pickle"; + + public final static String enumerate___reduce_ex___doc = + "helper for pickle"; + + public final static String enumerate___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String enumerate___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String enumerate___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String enumerate___str___doc = + "x.__str__() <==> str(x)"; + + public final static String enumerate___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String enumerate_next_doc = + "x.next() -> the next value, or raise StopIteration"; + + // Docs for + public final static String basestring___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String basestring___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String basestring_doc = + "Type basestring cannot be instantiated; it is the base for str and unicode."; + + public final static String basestring___format___doc = + "default object formatter"; + + public final static String basestring___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String basestring___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String basestring___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String basestring___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String basestring___reduce___doc = + "helper for pickle"; + + public final static String basestring___reduce_ex___doc = + "helper for pickle"; + + public final static String basestring___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String basestring___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String basestring___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String basestring___str___doc = + "x.__str__() <==> str(x)"; + + public final static String basestring___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String long___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String long___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String long___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String long___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String long___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String long___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String long___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String long___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String long___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String long_doc = + "long(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to a long integer, if possible. A floating\n" + + "point argument will be truncated towards zero (this does not include a\n" + + "string representation of a floating point number!) When converting a\n" + + "string, use the optional base. It is an error to supply a base when\n" + + "converting a non-string."; + + public final static String long___float___doc = + "x.__float__() <==> float(x)"; + + public final static String long___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String long___format___doc = + ""; + + public final static String long___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String long___getnewargs___doc = + ""; + + public final static String long___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String long___hex___doc = + "x.__hex__() <==> hex(x)"; + + public final static String long___index___doc = + "x[y:z] <==> x[y.__index__():z.__index__()]"; + + public final static String long___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String long___int___doc = + "x.__int__() <==> int(x)"; + + public final static String long___invert___doc = + "x.__invert__() <==> ~x"; + + public final static String long___long___doc = + "x.__long__() <==> long(x)"; + + public final static String long___lshift___doc = + "x.__lshift__(y) <==> x< x%y"; + + public final static String long___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String long___neg___doc = + "x.__neg__() <==> -x"; + + public final static String long___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String long___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String long___oct___doc = + "x.__oct__() <==> oct(x)"; + + public final static String long___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String long___pos___doc = + "x.__pos__() <==> +x"; + + public final static String long___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String long___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String long___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String long___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String long___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String long___reduce___doc = + "helper for pickle"; + + public final static String long___reduce_ex___doc = + "helper for pickle"; + + public final static String long___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String long___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String long___rlshift___doc = + "x.__rlshift__(y) <==> y< y%x"; + + public final static String long___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String long___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String long___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String long___rrshift___doc = + "x.__rrshift__(y) <==> y>>x"; + + public final static String long___rshift___doc = + "x.__rshift__(y) <==> x>>y"; + + public final static String long___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String long___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String long___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String long___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String long___sizeof___doc = + "Returns size in memory, in bytes"; + + public final static String long___str___doc = + "x.__str__() <==> str(x)"; + + public final static String long___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String long___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String long___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String long___trunc___doc = + "Truncating an Integral returns itself."; + + public final static String long___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String long_bit_length_doc = + "long.bit_length() -> int or long\n" + + "\n" + + "Number of bits necessary to represent self in binary.\n" + + ">>> bin(37L)\n" + + "'0b100101'\n" + + ">>> (37L).bit_length()\n" + + "6"; + + public final static String long_conjugate_doc = + "Returns self, the complex conjugate of any long."; + + public final static String long_denominator_doc = + "the denominator of a rational number in lowest terms"; + + public final static String long_imag_doc = + "the imaginary part of a complex number"; + + public final static String long_numerator_doc = + "the numerator of a rational number in lowest terms"; + + public final static String long_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String tuple___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String tuple___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String tuple___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String tuple___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String tuple_doc = + "tuple() -> empty tuple\n" + + "tuple(iterable) -> tuple initialized from iterable's items\n" + + "\n" + + "If the argument is a tuple, the return value is the same object."; + + public final static String tuple___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String tuple___format___doc = + "default object formatter"; + + public final static String tuple___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String tuple___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String tuple___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String tuple___getnewargs___doc = + ""; + + public final static String tuple___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String tuple___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String tuple___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String tuple___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String tuple___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String tuple___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String tuple___len___doc = + "x.__len__() <==> len(x)"; + + public final static String tuple___lt___doc = + "x.__lt__(y) <==> x x*n"; + + public final static String tuple___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String tuple___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String tuple___reduce___doc = + "helper for pickle"; + + public final static String tuple___reduce_ex___doc = + "helper for pickle"; + + public final static String tuple___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String tuple___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String tuple___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String tuple___sizeof___doc = + "T.__sizeof__() -- size of T in memory, in bytes"; + + public final static String tuple___str___doc = + "x.__str__() <==> str(x)"; + + public final static String tuple___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String tuple_count_doc = + "T.count(value) -> integer -- return number of occurrences of value"; + + public final static String tuple_index_doc = + "T.index(value, [start, [stop]]) -> integer -- return first index of value.\n" + + "Raises ValueError if the value is not present."; + + // Docs for + public final static String str___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String str___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String str___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String str___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String str_doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String str___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String str___format___doc = + "S.__format__(format_spec) -> string\n" + + "\n" + + "Return a formatted version of S as described by format_spec."; + + public final static String str___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String str___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String str___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String str___getnewargs___doc = + ""; + + public final static String str___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String str___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String str___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String str___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String str___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String str___len___doc = + "x.__len__() <==> len(x)"; + + public final static String str___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String str___mul___doc = + "x.__mul__(n) <==> x*n"; + + public final static String str___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String str___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String str___reduce___doc = + "helper for pickle"; + + public final static String str___reduce_ex___doc = + "helper for pickle"; + + public final static String str___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String str___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String str___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String str___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String str___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes"; + + public final static String str___str___doc = + "x.__str__() <==> str(x)"; + + public final static String str___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String str__formatter_field_name_split_doc = + ""; + + public final static String str__formatter_parser_doc = + ""; + + public final static String str_capitalize_doc = + "S.capitalize() -> string\n" + + "\n" + + "Return a copy of the string S with only its first character\n" + + "capitalized."; + + public final static String str_center_doc = + "S.center(width[, fillchar]) -> string\n" + + "\n" + + "Return S centered in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String str_count_doc = + "S.count(sub[, start[, end]]) -> int\n" + + "\n" + + "Return the number of non-overlapping occurrences of substring sub in\n" + + "string S[start:end]. Optional arguments start and end are interpreted\n" + + "as in slice notation."; + + public final static String str_decode_doc = + "S.decode([encoding[,errors]]) -> object\n" + + "\n" + + "Decodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + + "as well as any other name registered with codecs.register_error that is\n" + + "able to handle UnicodeDecodeErrors."; + + public final static String str_encode_doc = + "S.encode([encoding[,errors]]) -> object\n" + + "\n" + + "Encodes S using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n" + + "'xmlcharrefreplace' as well as any other name registered with\n" + + "codecs.register_error that is able to handle UnicodeEncodeErrors."; + + public final static String str_endswith_doc = + "S.endswith(suffix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S ends with the specified suffix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "suffix can also be a tuple of strings to try."; + + public final static String str_expandtabs_doc = + "S.expandtabs([tabsize]) -> string\n" + + "\n" + + "Return a copy of S where all tab characters are expanded using spaces.\n" + + "If tabsize is not given, a tab size of 8 characters is assumed."; + + public final static String str_find_doc = + "S.find(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the lowest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String str_format_doc = + "S.format(*args, **kwargs) -> string\n" + + "\n" + + "Return a formatted version of S, using substitutions from args and kwargs.\n" + + "The substitutions are identified by braces ('{' and '}')."; + + public final static String str_index_doc = + "S.index(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.find() but raise ValueError when the substring is not found."; + + public final static String str_isalnum_doc = + "S.isalnum() -> bool\n" + + "\n" + + "Return True if all characters in S are alphanumeric\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_isalpha_doc = + "S.isalpha() -> bool\n" + + "\n" + + "Return True if all characters in S are alphabetic\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_isdigit_doc = + "S.isdigit() -> bool\n" + + "\n" + + "Return True if all characters in S are digits\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_islower_doc = + "S.islower() -> bool\n" + + "\n" + + "Return True if all cased characters in S are lowercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String str_isspace_doc = + "S.isspace() -> bool\n" + + "\n" + + "Return True if all characters in S are whitespace\n" + + "and there is at least one character in S, False otherwise."; + + public final static String str_istitle_doc = + "S.istitle() -> bool\n" + + "\n" + + "Return True if S is a titlecased string and there is at least one\n" + + "character in S, i.e. uppercase characters may only follow uncased\n" + + "characters and lowercase characters only cased ones. Return False\n" + + "otherwise."; + + public final static String str_isupper_doc = + "S.isupper() -> bool\n" + + "\n" + + "Return True if all cased characters in S are uppercase and there is\n" + + "at least one cased character in S, False otherwise."; + + public final static String str_join_doc = + "S.join(iterable) -> string\n" + + "\n" + + "Return a string which is the concatenation of the strings in the\n" + + "iterable. The separator between elements is S."; + + public final static String str_ljust_doc = + "S.ljust(width[, fillchar]) -> string\n" + + "\n" + + "Return S left-justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String str_lower_doc = + "S.lower() -> string\n" + + "\n" + + "Return a copy of the string S converted to lowercase."; + + public final static String str_lstrip_doc = + "S.lstrip([chars]) -> string or unicode\n" + + "\n" + + "Return a copy of the string S with leading whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is unicode, S will be converted to unicode before stripping"; + + public final static String str_partition_doc = + "S.partition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, and return the part before it,\n" + + "the separator itself, and the part after it. If the separator is not\n" + + "found, return S and two empty strings."; + + public final static String str_replace_doc = + "S.replace(old, new[, count]) -> string\n" + + "\n" + + "Return a copy of string S with all occurrences of substring\n" + + "old replaced by new. If the optional argument count is\n" + + "given, only the first count occurrences are replaced."; + + public final static String str_rfind_doc = + "S.rfind(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the highest index in S where substring sub is found,\n" + + "such that sub is contained within s[start:end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String str_rindex_doc = + "S.rindex(sub [,start [,end]]) -> int\n" + + "\n" + + "Like S.rfind() but raise ValueError when the substring is not found."; + + public final static String str_rjust_doc = + "S.rjust(width[, fillchar]) -> string\n" + + "\n" + + "Return S right-justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String str_rpartition_doc = + "S.rpartition(sep) -> (head, sep, tail)\n" + + "\n" + + "Search for the separator sep in S, starting at the end of S, and return\n" + + "the part before it, the separator itself, and the part after it. If the\n" + + "separator is not found, return two empty strings and S."; + + public final static String str_rsplit_doc = + "S.rsplit([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in the string S, using sep as the\n" + + "delimiter string, starting at the end of the string and working\n" + + "to the front. If maxsplit is given, at most maxsplit splits are\n" + + "done. If sep is not specified or is None, any whitespace string\n" + + "is a separator."; + + public final static String str_rstrip_doc = + "S.rstrip([chars]) -> string or unicode\n" + + "\n" + + "Return a copy of the string S with trailing whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is unicode, S will be converted to unicode before stripping"; + + public final static String str_split_doc = + "S.split([sep [,maxsplit]]) -> list of strings\n" + + "\n" + + "Return a list of the words in the string S, using sep as the\n" + + "delimiter string. If maxsplit is given, at most maxsplit\n" + + "splits are done. If sep is not specified or is None, any\n" + + "whitespace string is a separator and empty strings are removed\n" + + "from the result."; + + public final static String str_splitlines_doc = + "S.splitlines([keepends]) -> list of strings\n" + + "\n" + + "Return a list of the lines in S, breaking at line boundaries.\n" + + "Line breaks are not included in the resulting list unless keepends\n" + + "is given and true."; + + public final static String str_startswith_doc = + "S.startswith(prefix[, start[, end]]) -> bool\n" + + "\n" + + "Return True if S starts with the specified prefix, False otherwise.\n" + + "With optional start, test S beginning at that position.\n" + + "With optional end, stop comparing S at that position.\n" + + "prefix can also be a tuple of strings to try."; + + public final static String str_strip_doc = + "S.strip([chars]) -> string or unicode\n" + + "\n" + + "Return a copy of the string S with leading and trailing\n" + + "whitespace removed.\n" + + "If chars is given and not None, remove characters in chars instead.\n" + + "If chars is unicode, S will be converted to unicode before stripping"; + + public final static String str_swapcase_doc = + "S.swapcase() -> string\n" + + "\n" + + "Return a copy of the string S with uppercase characters\n" + + "converted to lowercase and vice versa."; + + public final static String str_title_doc = + "S.title() -> string\n" + + "\n" + + "Return a titlecased version of S, i.e. words start with uppercase\n" + + "characters, all remaining cased characters have lowercase."; + + public final static String str_translate_doc = + "S.translate(table [,deletechars]) -> string\n" + + "\n" + + "Return a copy of the string S, where all characters occurring\n" + + "in the optional argument deletechars are removed, and the\n" + + "remaining characters have been mapped through the given\n" + + "translation table, which must be a string of length 256."; + + public final static String str_upper_doc = + "S.upper() -> string\n" + + "\n" + + "Return a copy of the string S converted to uppercase."; + + public final static String str_zfill_doc = + "S.zfill(width) -> string\n" + + "\n" + + "Pad a numeric string S with zeros on the left, to fill a field\n" + + "of the specified width. The string S is never truncated."; + + // Docs for + public final static String property___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String property___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String property___delete___doc = + "descr.__delete__(obj)"; + + public final static String property_doc = + "property(fget=None, fset=None, fdel=None, doc=None) -> property attribute\n" + + "\n" + + "fget is a function to be used for getting an attribute value, and likewise\n" + + "fset is a function for setting, and fdel a function for del'ing, an\n" + + "attribute. Typical use is to define a managed attribute x:\n" + + "class C(object):\n" + + " def getx(self): return self._x\n" + + " def setx(self, value): self._x = value\n" + + " def delx(self): del self._x\n" + + " x = property(getx, setx, delx, \"I'm the 'x' property.\")\n" + + "\n" + + "Decorators make defining new properties or modifying existing ones easy:\n" + + "class C(object):\n" + + " @property\n" + + " def x(self): return self._x\n" + + " @x.setter\n" + + " def x(self, value): self._x = value\n" + + " @x.deleter\n" + + " def x(self): del self._x\n" + + ""; + + public final static String property___format___doc = + "default object formatter"; + + public final static String property___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String property___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String property___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String property___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String property___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String property___reduce___doc = + "helper for pickle"; + + public final static String property___reduce_ex___doc = + "helper for pickle"; + + public final static String property___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String property___set___doc = + "descr.__set__(obj, value)"; + + public final static String property___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String property___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String property___str___doc = + "x.__str__() <==> str(x)"; + + public final static String property___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String property_deleter_doc = + "Descriptor to change the deleter on a property."; + + public final static String property_fdel_doc = + ""; + + public final static String property_fget_doc = + ""; + + public final static String property_fset_doc = + ""; + + public final static String property_getter_doc = + "Descriptor to change the getter on a property."; + + public final static String property_setter_doc = + "Descriptor to change the setter on a property."; + + // Docs for + public final static String int___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String int___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String int___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String int___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String int___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String int___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String int___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String int___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String int___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String int_doc = + "int(x[, base]) -> integer\n" + + "\n" + + "Convert a string or number to an integer, if possible. A floating point\n" + + "argument will be truncated towards zero (this does not include a string\n" + + "representation of a floating point number!) When converting a string, use\n" + + "the optional base. It is an error to supply a base when converting a\n" + + "non-string. If base is zero, the proper base is guessed based on the\n" + + "string content. If the argument is outside the integer range a\n" + + "long object will be returned instead."; + + public final static String int___float___doc = + "x.__float__() <==> float(x)"; + + public final static String int___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String int___format___doc = + ""; + + public final static String int___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String int___getnewargs___doc = + ""; + + public final static String int___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String int___hex___doc = + "x.__hex__() <==> hex(x)"; + + public final static String int___index___doc = + "x[y:z] <==> x[y.__index__():z.__index__()]"; + + public final static String int___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String int___int___doc = + "x.__int__() <==> int(x)"; + + public final static String int___invert___doc = + "x.__invert__() <==> ~x"; + + public final static String int___long___doc = + "x.__long__() <==> long(x)"; + + public final static String int___lshift___doc = + "x.__lshift__(y) <==> x< x%y"; + + public final static String int___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String int___neg___doc = + "x.__neg__() <==> -x"; + + public final static String int___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String int___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String int___oct___doc = + "x.__oct__() <==> oct(x)"; + + public final static String int___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String int___pos___doc = + "x.__pos__() <==> +x"; + + public final static String int___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String int___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String int___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String int___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String int___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String int___reduce___doc = + "helper for pickle"; + + public final static String int___reduce_ex___doc = + "helper for pickle"; + + public final static String int___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String int___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String int___rlshift___doc = + "x.__rlshift__(y) <==> y< y%x"; + + public final static String int___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String int___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String int___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String int___rrshift___doc = + "x.__rrshift__(y) <==> y>>x"; + + public final static String int___rshift___doc = + "x.__rshift__(y) <==> x>>y"; + + public final static String int___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String int___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String int___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String int___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String int___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String int___str___doc = + "x.__str__() <==> str(x)"; + + public final static String int___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String int___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String int___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String int___trunc___doc = + "Truncating an Integral returns itself."; + + public final static String int___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String int_bit_length_doc = + "int.bit_length() -> int\n" + + "\n" + + "Number of bits necessary to represent self in binary.\n" + + ">>> bin(37)\n" + + "'0b100101'\n" + + ">>> (37).bit_length()\n" + + "6"; + + public final static String int_conjugate_doc = + "Returns self, the complex conjugate of any int."; + + public final static String int_denominator_doc = + "the denominator of a rational number in lowest terms"; + + public final static String int_imag_doc = + "the imaginary part of a complex number"; + + public final static String int_numerator_doc = + "the numerator of a rational number in lowest terms"; + + public final static String int_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String xrange___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String xrange___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String xrange_doc = + "xrange([start,] stop[, step]) -> xrange object\n" + + "\n" + + "Like range(), but instead of returning a list, returns an object that\n" + + "generates the numbers in the range on demand. For looping, this is \n" + + "slightly faster than range() and more memory efficient."; + + public final static String xrange___format___doc = + "default object formatter"; + + public final static String xrange___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String xrange___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String xrange___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String xrange___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String xrange___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String xrange___len___doc = + "x.__len__() <==> len(x)"; + + public final static String xrange___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String xrange___reduce___doc = + ""; + + public final static String xrange___reduce_ex___doc = + "helper for pickle"; + + public final static String xrange___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String xrange___reversed___doc = + "Returns a reverse iterator."; + + public final static String xrange___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String xrange___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String xrange___str___doc = + "x.__str__() <==> str(x)"; + + public final static String xrange___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String file___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String file___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String file_doc = + "file(name[, mode[, buffering]]) -> file object\n" + + "\n" + + "Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n" + + "writing or appending. The file will be created if it doesn't exist\n" + + "when opened for writing or appending; it will be truncated when\n" + + "opened for writing. Add a 'b' to the mode for binary files.\n" + + "Add a '+' to the mode to allow simultaneous reading and writing.\n" + + "If the buffering argument is given, 0 means unbuffered, 1 means line\n" + + "buffered, and larger numbers specify the buffer size. The preferred way\n" + + "to open a file is with the builtin open() function.\n" + + "Add a 'U' to mode to open the file for input with universal newline\n" + + "support. Any line ending in the input file will be seen as a '\\n'\n" + + "in Python. Also, a file so opened gains the attribute 'newlines';\n" + + "the value for this attribute is one of None (no newline read yet),\n" + + "'\\r', '\\n', '\\r\\n' or a tuple containing all the newline types seen.\n" + + "\n" + + "'U' cannot be combined with 'w' or '+' mode.\n" + + ""; + + public final static String file___enter___doc = + "__enter__() -> self."; + + public final static String file___exit___doc = + "__exit__(*excinfo) -> None. Closes the file."; + + public final static String file___format___doc = + "default object formatter"; + + public final static String file___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String file___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String file___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String file___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String file___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String file___reduce___doc = + "helper for pickle"; + + public final static String file___reduce_ex___doc = + "helper for pickle"; + + public final static String file___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String file___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String file___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String file___str___doc = + "x.__str__() <==> str(x)"; + + public final static String file___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String file_close_doc = + "close() -> None or (perhaps) an integer. Close the file.\n" + + "\n" + + "Sets data attribute .closed to True. A closed file cannot be used for\n" + + "further I/O operations. close() may be called more than once without\n" + + "error. Some kinds of file objects (for example, opened by popen())\n" + + "may return an exit status upon closing."; + + public final static String file_closed_doc = + "True if the file is closed"; + + public final static String file_encoding_doc = + "file encoding"; + + public final static String file_errors_doc = + "Unicode error handler"; + + public final static String file_fileno_doc = + "fileno() -> integer \"file descriptor\".\n" + + "\n" + + "This is needed for lower-level file interfaces, such os.read()."; + + public final static String file_flush_doc = + "flush() -> None. Flush the internal I/O buffer."; + + public final static String file_isatty_doc = + "isatty() -> true or false. True if the file is connected to a tty device."; + + public final static String file_mode_doc = + "file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"; + + public final static String file_name_doc = + "file name"; + + public final static String file_newlines_doc = + "end-of-line convention used in this file"; + + public final static String file_next_doc = + "x.next() -> the next value, or raise StopIteration"; + + public final static String file_read_doc = + "read([size]) -> read at most size bytes, returned as a string.\n" + + "\n" + + "If the size argument is negative or omitted, read until EOF is reached.\n" + + "Notice that when in non-blocking mode, less data than what was requested\n" + + "may be returned, even if no size parameter was given."; + + public final static String file_readinto_doc = + "readinto() -> Undocumented. Don't use this; it may go away."; + + public final static String file_readline_doc = + "readline([size]) -> next line from the file, as a string.\n" + + "\n" + + "Retain newline. A non-negative size argument limits the maximum\n" + + "number of bytes to return (an incomplete line may be returned then).\n" + + "Return an empty string at EOF."; + + public final static String file_readlines_doc = + "readlines([size]) -> list of strings, each a line from the file.\n" + + "\n" + + "Call readline() repeatedly and return a list of the lines so read.\n" + + "The optional size argument, if given, is an approximate bound on the\n" + + "total number of bytes in the lines returned."; + + public final static String file_seek_doc = + "seek(offset[, whence]) -> None. Move to new file position.\n" + + "\n" + + "Argument offset is a byte count. Optional argument whence defaults to\n" + + "0 (offset from start of file, offset should be >= 0); other values are 1\n" + + "(move relative to current position, positive or negative), and 2 (move\n" + + "relative to end of file, usually negative, although many platforms allow\n" + + "seeking beyond the end of a file). If the file is opened in text mode,\n" + + "only offsets returned by tell() are legal. Use of other offsets causes\n" + + "undefined behavior.\n" + + "Note that not all file objects are seekable."; + + public final static String file_softspace_doc = + "flag indicating that a space needs to be printed; used by print"; + + public final static String file_tell_doc = + "tell() -> current file position, an integer (may be a long integer)."; + + public final static String file_truncate_doc = + "truncate([size]) -> None. Truncate the file to at most size bytes.\n" + + "\n" + + "Size defaults to the current file position, as returned by tell()."; + + public final static String file_write_doc = + "write(str) -> None. Write string str to file.\n" + + "\n" + + "Note that due to buffering, flush() or close() may be needed before\n" + + "the file on disk reflects the data written."; + + public final static String file_writelines_doc = + "writelines(sequence_of_strings) -> None. Write the strings to the file.\n" + + "\n" + + "Note that newlines are not added. The sequence can be any iterable object\n" + + "producing strings. This is equivalent to calling write() for each string."; + + public final static String file_xreadlines_doc = + "xreadlines() -> returns self.\n" + + "\n" + + "For backward compatibility. File objects now include the performance\n" + + "optimizations previously implemented in the xreadlines module."; + + // Docs for + public final static String complex___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String complex___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String complex___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String complex___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String complex___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String complex___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String complex___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String complex_doc = + "complex(real[, imag]) -> complex number\n" + + "\n" + + "Create a complex number from a real part and an optional imaginary part.\n" + + "This is equivalent to (real + imag*1j) where imag defaults to 0."; + + public final static String complex___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String complex___float___doc = + "x.__float__() <==> float(x)"; + + public final static String complex___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String complex___format___doc = + "complex.__format__() -> str\n" + + "\n" + + "Converts to a string according to format_spec."; + + public final static String complex___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String complex___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String complex___getnewargs___doc = + ""; + + public final static String complex___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String complex___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String complex___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String complex___int___doc = + "x.__int__() <==> int(x)"; + + public final static String complex___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String complex___long___doc = + "x.__long__() <==> long(x)"; + + public final static String complex___lt___doc = + "x.__lt__(y) <==> x x%y"; + + public final static String complex___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String complex___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String complex___neg___doc = + "x.__neg__() <==> -x"; + + public final static String complex___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String complex___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String complex___pos___doc = + "x.__pos__() <==> +x"; + + public final static String complex___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String complex___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String complex___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String complex___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String complex___reduce___doc = + "helper for pickle"; + + public final static String complex___reduce_ex___doc = + "helper for pickle"; + + public final static String complex___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String complex___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String complex___rmod___doc = + "x.__rmod__(y) <==> y%x"; + + public final static String complex___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String complex___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String complex___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String complex___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String complex___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String complex___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String complex___str___doc = + "x.__str__() <==> str(x)"; + + public final static String complex___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String complex___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String complex___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String complex_conjugate_doc = + "complex.conjugate() -> complex\n" + + "\n" + + "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j."; + + public final static String complex_imag_doc = + "the imaginary part of a complex number"; + + public final static String complex_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String bool___abs___doc = + "x.__abs__() <==> abs(x)"; + + public final static String bool___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String bool___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String bool___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String bool___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String bool___coerce___doc = + "x.__coerce__(y) <==> coerce(x, y)"; + + public final static String bool___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String bool___div___doc = + "x.__div__(y) <==> x/y"; + + public final static String bool___divmod___doc = + "x.__divmod__(y) <==> divmod(x, y)"; + + public final static String bool_doc = + "bool(x) -> bool\n" + + "\n" + + "Returns True when the argument x is true, False otherwise.\n" + + "The builtins True and False are the only two instances of the class bool.\n" + + "The class bool is a subclass of the class int, and cannot be subclassed."; + + public final static String bool___float___doc = + "x.__float__() <==> float(x)"; + + public final static String bool___floordiv___doc = + "x.__floordiv__(y) <==> x//y"; + + public final static String bool___format___doc = + ""; + + public final static String bool___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String bool___getnewargs___doc = + ""; + + public final static String bool___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String bool___hex___doc = + "x.__hex__() <==> hex(x)"; + + public final static String bool___index___doc = + "x[y:z] <==> x[y.__index__():z.__index__()]"; + + public final static String bool___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String bool___int___doc = + "x.__int__() <==> int(x)"; + + public final static String bool___invert___doc = + "x.__invert__() <==> ~x"; + + public final static String bool___long___doc = + "x.__long__() <==> long(x)"; + + public final static String bool___lshift___doc = + "x.__lshift__(y) <==> x< x%y"; + + public final static String bool___mul___doc = + "x.__mul__(y) <==> x*y"; + + public final static String bool___neg___doc = + "x.__neg__() <==> -x"; + + public final static String bool___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String bool___nonzero___doc = + "x.__nonzero__() <==> x != 0"; + + public final static String bool___oct___doc = + "x.__oct__() <==> oct(x)"; + + public final static String bool___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String bool___pos___doc = + "x.__pos__() <==> +x"; + + public final static String bool___pow___doc = + "x.__pow__(y[, z]) <==> pow(x, y[, z])"; + + public final static String bool___radd___doc = + "x.__radd__(y) <==> y+x"; + + public final static String bool___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String bool___rdiv___doc = + "x.__rdiv__(y) <==> y/x"; + + public final static String bool___rdivmod___doc = + "x.__rdivmod__(y) <==> divmod(y, x)"; + + public final static String bool___reduce___doc = + "helper for pickle"; + + public final static String bool___reduce_ex___doc = + "helper for pickle"; + + public final static String bool___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String bool___rfloordiv___doc = + "x.__rfloordiv__(y) <==> y//x"; + + public final static String bool___rlshift___doc = + "x.__rlshift__(y) <==> y< y%x"; + + public final static String bool___rmul___doc = + "x.__rmul__(y) <==> y*x"; + + public final static String bool___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String bool___rpow___doc = + "y.__rpow__(x[, z]) <==> pow(x, y[, z])"; + + public final static String bool___rrshift___doc = + "x.__rrshift__(y) <==> y>>x"; + + public final static String bool___rshift___doc = + "x.__rshift__(y) <==> x>>y"; + + public final static String bool___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String bool___rtruediv___doc = + "x.__rtruediv__(y) <==> y/x"; + + public final static String bool___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String bool___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String bool___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String bool___str___doc = + "x.__str__() <==> str(x)"; + + public final static String bool___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String bool___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String bool___truediv___doc = + "x.__truediv__(y) <==> x/y"; + + public final static String bool___trunc___doc = + "Truncating an Integral returns itself."; + + public final static String bool___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String bool_bit_length_doc = + "int.bit_length() -> int\n" + + "\n" + + "Number of bits necessary to represent self in binary.\n" + + ">>> bin(37)\n" + + "'0b100101'\n" + + ">>> (37).bit_length()\n" + + "6"; + + public final static String bool_conjugate_doc = + "Returns self, the complex conjugate of any int."; + + public final static String bool_denominator_doc = + "the denominator of a rational number in lowest terms"; + + public final static String bool_imag_doc = + "the imaginary part of a complex number"; + + public final static String bool_numerator_doc = + "the numerator of a rational number in lowest terms"; + + public final static String bool_real_doc = + "the real part of a complex number"; + + // Docs for + public final static String classmethod___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String classmethod___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String classmethod_doc = + "classmethod(function) -> method\n" + + "\n" + + "Convert a function to be a class method.\n" + + "\n" + + "A class method receives the class as implicit first argument,\n" + + "just like an instance method receives the instance.\n" + + "To declare a class method, use this idiom:\n" + + "\n" + + " class C:\n" + + " def f(cls, arg1, arg2, ...): ...\n" + + " f = classmethod(f)\n" + + "\n" + + "It can be called either on the class (e.g. C.f()) or on an instance\n" + + "(e.g. C().f()). The instance is ignored except for its class.\n" + + "If a class method is called for a derived class, the derived class\n" + + "object is passed as the implied first argument.\n" + + "\n" + + "Class methods are different than C++ or Java static methods.\n" + + "If you want those, see the staticmethod builtin."; + + public final static String classmethod___format___doc = + "default object formatter"; + + public final static String classmethod___func___doc = + ""; + + public final static String classmethod___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String classmethod___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String classmethod___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String classmethod___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String classmethod___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String classmethod___reduce___doc = + "helper for pickle"; + + public final static String classmethod___reduce_ex___doc = + "helper for pickle"; + + public final static String classmethod___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String classmethod___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String classmethod___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String classmethod___str___doc = + "x.__str__() <==> str(x)"; + + public final static String classmethod___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + // Docs for + public final static String set___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String set___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String set___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String set___contains___doc = + "x.__contains__(y) <==> y in x."; + + public final static String set___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String set_doc = + "set() -> new empty set object\n" + + "set(iterable) -> new set object\n" + + "\n" + + "Build an unordered collection of unique elements."; + + public final static String set___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String set___format___doc = + "default object formatter"; + + public final static String set___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String set___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String set___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String set___hash___doc = + ""; + + public final static String set___iand___doc = + "x.__iand__(y) <==> x&y"; + + public final static String set___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String set___ior___doc = + "x.__ior__(y) <==> x|y"; + + public final static String set___isub___doc = + "x.__isub__(y) <==> x-y"; + + public final static String set___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String set___ixor___doc = + "x.__ixor__(y) <==> x^y"; + + public final static String set___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String set___len___doc = + "x.__len__() <==> len(x)"; + + public final static String set___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String set___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String set___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String set___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String set___reduce___doc = + "Return state information for pickling."; + + public final static String set___reduce_ex___doc = + "helper for pickle"; + + public final static String set___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String set___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String set___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String set___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String set___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String set___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes"; + + public final static String set___str___doc = + "x.__str__() <==> str(x)"; + + public final static String set___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String set___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String set___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String set_add_doc = + "Add an element to a set.\n" + + "\n" + + "This has no effect if the element is already present."; + + public final static String set_clear_doc = + "Remove all elements from this set."; + + public final static String set_copy_doc = + "Return a shallow copy of a set."; + + public final static String set_difference_doc = + "Return the difference of two or more sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in this set but not the others.)"; + + public final static String set_difference_update_doc = + "Remove all elements of another set from this set."; + + public final static String set_discard_doc = + "Remove an element from a set if it is a member.\n" + + "\n" + + "If the element is not a member, do nothing."; + + public final static String set_intersection_doc = + "Return the intersection of two or more sets as a new set.\n" + + "\n" + + "(i.e. elements that are common to all of the sets.)"; + + public final static String set_intersection_update_doc = + "Update a set with the intersection of itself and another."; + + public final static String set_isdisjoint_doc = + "Return True if two sets have a null intersection."; + + public final static String set_issubset_doc = + "Report whether another set contains this set."; + + public final static String set_issuperset_doc = + "Report whether this set contains another set."; + + public final static String set_pop_doc = + "Remove and return an arbitrary set element.\n" + + "Raises KeyError if the set is empty."; + + public final static String set_remove_doc = + "Remove an element from a set; it must be a member.\n" + + "\n" + + "If the element is not a member, raise a KeyError."; + + public final static String set_symmetric_difference_doc = + "Return the symmetric difference of two sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in exactly one of the sets.)"; + + public final static String set_symmetric_difference_update_doc = + "Update a set with the symmetric difference of itself and another."; + + public final static String set_union_doc = + "Return the union of sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in either set.)"; + + public final static String set_update_doc = + "Update a set with the union of itself and others."; + + // Docs for + public final static String frozenset___and___doc = + "x.__and__(y) <==> x&y"; + + public final static String frozenset___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String frozenset___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String frozenset___contains___doc = + "x.__contains__(y) <==> y in x."; + + public final static String frozenset___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String frozenset_doc = + "frozenset() -> empty frozenset object\n" + + "frozenset(iterable) -> frozenset object\n" + + "\n" + + "Build an immutable unordered collection of unique elements."; + + public final static String frozenset___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String frozenset___format___doc = + "default object formatter"; + + public final static String frozenset___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String frozenset___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String frozenset___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String frozenset___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String frozenset___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String frozenset___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String frozenset___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String frozenset___len___doc = + "x.__len__() <==> len(x)"; + + public final static String frozenset___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String frozenset___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String frozenset___or___doc = + "x.__or__(y) <==> x|y"; + + public final static String frozenset___rand___doc = + "x.__rand__(y) <==> y&x"; + + public final static String frozenset___reduce___doc = + "Return state information for pickling."; + + public final static String frozenset___reduce_ex___doc = + "helper for pickle"; + + public final static String frozenset___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String frozenset___ror___doc = + "x.__ror__(y) <==> y|x"; + + public final static String frozenset___rsub___doc = + "x.__rsub__(y) <==> y-x"; + + public final static String frozenset___rxor___doc = + "x.__rxor__(y) <==> y^x"; + + public final static String frozenset___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String frozenset___sizeof___doc = + "S.__sizeof__() -> size of S in memory, in bytes"; + + public final static String frozenset___str___doc = + "x.__str__() <==> str(x)"; + + public final static String frozenset___sub___doc = + "x.__sub__(y) <==> x-y"; + + public final static String frozenset___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String frozenset___xor___doc = + "x.__xor__(y) <==> x^y"; + + public final static String frozenset_copy_doc = + "Return a shallow copy of a set."; + + public final static String frozenset_difference_doc = + "Return the difference of two or more sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in this set but not the others.)"; + + public final static String frozenset_intersection_doc = + "Return the intersection of two or more sets as a new set.\n" + + "\n" + + "(i.e. elements that are common to all of the sets.)"; + + public final static String frozenset_isdisjoint_doc = + "Return True if two sets have a null intersection."; + + public final static String frozenset_issubset_doc = + "Report whether another set contains this set."; + + public final static String frozenset_issuperset_doc = + "Report whether this set contains another set."; + + public final static String frozenset_symmetric_difference_doc = + "Return the symmetric difference of two sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in exactly one of the sets.)"; + + public final static String frozenset_union_doc = + "Return the union of sets as a new set.\n" + + "\n" + + "(i.e. all elements that are in either set.)"; + + // Docs for + public final static String BaseException___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String BaseException___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String BaseException___dict___doc = + ""; + + public final static String BaseException_doc = + "Common base class for all exceptions"; + + public final static String BaseException___format___doc = + "default object formatter"; + + public final static String BaseException___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String BaseException___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String BaseException___getslice___doc = + "x.__getslice__(i, j) <==> x[i:j]\n" + + " \n" + + " Use of negative indices is not supported."; + + public final static String BaseException___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String BaseException___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String BaseException___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String BaseException___reduce___doc = + ""; + + public final static String BaseException___reduce_ex___doc = + "helper for pickle"; + + public final static String BaseException___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String BaseException___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String BaseException___setstate___doc = + ""; + + public final static String BaseException___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String BaseException___str___doc = + "x.__str__() <==> str(x)"; + + public final static String BaseException___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String BaseException___unicode___doc = + ""; + + public final static String BaseException_args_doc = + ""; + + public final static String BaseException_message_doc = + ""; + + // Docs for + public final static String bytearray___add___doc = + "x.__add__(y) <==> x+y"; + + public final static String bytearray___alloc___doc = + "B.__alloc__() -> int\n" + + "\n" + + "Returns the number of bytes actually allocated."; + + public final static String bytearray___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String bytearray___contains___doc = + "x.__contains__(y) <==> y in x"; + + public final static String bytearray___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String bytearray___delitem___doc = + "x.__delitem__(y) <==> del x[y]"; + + public final static String bytearray_doc = + "bytearray(iterable_of_ints) -> bytearray.\n" + + "bytearray(string, encoding[, errors]) -> bytearray.\n" + + "bytearray(bytes_or_bytearray) -> mutable copy of bytes_or_bytearray.\n" + + "bytearray(memory_view) -> bytearray.\n" + + "\n" + + "Construct an mutable bytearray object from:\n" + + " - an iterable yielding integers in range(256)\n" + + " - a text string encoded using the specified encoding\n" + + " - a bytes or a bytearray object\n" + + " - any object implementing the buffer API.\n" + + "\n" + + "bytearray(int) -> bytearray.\n" + + "\n" + + "Construct a zero-initialized bytearray of the given length."; + + public final static String bytearray___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String bytearray___format___doc = + "default object formatter"; + + public final static String bytearray___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String bytearray___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String bytearray___getitem___doc = + "x.__getitem__(y) <==> x[y]"; + + public final static String bytearray___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String bytearray___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String bytearray___iadd___doc = + "x.__iadd__(y) <==> x+=y"; + + public final static String bytearray___imul___doc = + "x.__imul__(y) <==> x*=y"; + + public final static String bytearray___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String bytearray___iter___doc = + "x.__iter__() <==> iter(x)"; + + public final static String bytearray___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String bytearray___len___doc = + "x.__len__() <==> len(x)"; + + public final static String bytearray___lt___doc = + "x.__lt__(y) <==> x x*n"; + + public final static String bytearray___ne___doc = + "x.__ne__(y) <==> x!=y"; + + public final static String bytearray___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String bytearray___reduce___doc = + "Return state information for pickling."; + + public final static String bytearray___reduce_ex___doc = + "helper for pickle"; + + public final static String bytearray___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String bytearray___rmul___doc = + "x.__rmul__(n) <==> n*x"; + + public final static String bytearray___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String bytearray___setitem___doc = + "x.__setitem__(i, y) <==> x[i]=y"; + + public final static String bytearray___sizeof___doc = + "B.__sizeof__() -> int\n" + + " \n" + + "Returns the size of B in memory, in bytes"; + + public final static String bytearray___str___doc = + "x.__str__() <==> str(x)"; + + public final static String bytearray___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String bytearray_append_doc = + "B.append(int) -> None\n" + + "\n" + + "Append a single item to the end of B."; + + public final static String bytearray_capitalize_doc = + "B.capitalize() -> copy of B\n" + + "\n" + + "Return a copy of B with only its first character capitalized (ASCII)\n" + + "and the rest lower-cased."; + + public final static String bytearray_center_doc = + "B.center(width[, fillchar]) -> copy of B\n" + + "\n" + + "Return B centered in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String bytearray_count_doc = + "B.count(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the number of non-overlapping occurrences of subsection sub in\n" + + "bytes B[start:end]. Optional arguments start and end are interpreted\n" + + "as in slice notation."; + + public final static String bytearray_decode_doc = + "B.decode([encoding[, errors]]) -> unicode object.\n" + + "\n" + + "Decodes B using the codec registered for encoding. encoding defaults\n" + + "to the default encoding. errors may be given to set a different error\n" + + "handling scheme. Default is 'strict' meaning that encoding errors raise\n" + + "a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" + + "as well as any other name registered with codecs.register_error that is\n" + + "able to handle UnicodeDecodeErrors."; + + public final static String bytearray_endswith_doc = + "B.endswith(suffix [,start [,end]]) -> bool\n" + + "\n" + + "Return True if B ends with the specified suffix, False otherwise.\n" + + "With optional start, test B beginning at that position.\n" + + "With optional end, stop comparing B at that position.\n" + + "suffix can also be a tuple of strings to try."; + + public final static String bytearray_expandtabs_doc = + "B.expandtabs([tabsize]) -> copy of B\n" + + "\n" + + "Return a copy of B where all tab characters are expanded using spaces.\n" + + "If tabsize is not given, a tab size of 8 characters is assumed."; + + public final static String bytearray_extend_doc = + "B.extend(iterable int) -> None\n" + + "\n" + + "Append all the elements from the iterator or sequence to the\n" + + "end of B."; + + public final static String bytearray_find_doc = + "B.find(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the lowest index in B where subsection sub is found,\n" + + "such that sub is contained within s[start,end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String bytearray_fromhex_doc = + "bytearray.fromhex(string) -> bytearray\n" + + "\n" + + "Create a bytearray object from a string of hexadecimal numbers.\n" + + "Spaces between two numbers are accepted.\n" + + "Example: bytearray.fromhex('B9 01EF') -> bytearray(b'\\xb9\\x01\\xef')."; + + public final static String bytearray_index_doc = + "B.index(sub [,start [,end]]) -> int\n" + + "\n" + + "Like B.find() but raise ValueError when the subsection is not found."; + + public final static String bytearray_insert_doc = + "B.insert(index, int) -> None\n" + + "\n" + + "Insert a single item into the bytearray before the given index."; + + public final static String bytearray_isalnum_doc = + "B.isalnum() -> bool\n" + + "\n" + + "Return True if all characters in B are alphanumeric\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_isalpha_doc = + "B.isalpha() -> bool\n" + + "\n" + + "Return True if all characters in B are alphabetic\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_isdigit_doc = + "B.isdigit() -> bool\n" + + "\n" + + "Return True if all characters in B are digits\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_islower_doc = + "B.islower() -> bool\n" + + "\n" + + "Return True if all cased characters in B are lowercase and there is\n" + + "at least one cased character in B, False otherwise."; + + public final static String bytearray_isspace_doc = + "B.isspace() -> bool\n" + + "\n" + + "Return True if all characters in B are whitespace\n" + + "and there is at least one character in B, False otherwise."; + + public final static String bytearray_istitle_doc = + "B.istitle() -> bool\n" + + "\n" + + "Return True if B is a titlecased string and there is at least one\n" + + "character in B, i.e. uppercase characters may only follow uncased\n" + + "characters and lowercase characters only cased ones. Return False\n" + + "otherwise."; + + public final static String bytearray_isupper_doc = + "B.isupper() -> bool\n" + + "\n" + + "Return True if all cased characters in B are uppercase and there is\n" + + "at least one cased character in B, False otherwise."; + + public final static String bytearray_join_doc = + "B.join(iterable_of_bytes) -> bytes\n" + + "\n" + + "Concatenates any number of bytearray objects, with B in between each pair."; + + public final static String bytearray_ljust_doc = + "B.ljust(width[, fillchar]) -> copy of B\n" + + "\n" + + "Return B left justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)."; + + public final static String bytearray_lower_doc = + "B.lower() -> copy of B\n" + + "\n" + + "Return a copy of B with all ASCII characters converted to lowercase."; + + public final static String bytearray_lstrip_doc = + "B.lstrip([bytes]) -> bytearray\n" + + "\n" + + "Strip leading bytes contained in the argument.\n" + + "If the argument is omitted, strip leading ASCII whitespace."; + + public final static String bytearray_partition_doc = + "B.partition(sep) -> (head, sep, tail)\n" + + "\n" + + "Searches for the separator sep in B, and returns the part before it,\n" + + "the separator itself, and the part after it. If the separator is not\n" + + "found, returns B and two empty bytearray objects."; + + public final static String bytearray_pop_doc = + "B.pop([index]) -> int\n" + + "\n" + + "Remove and return a single item from B. If no index\n" + + "argument is given, will pop the last value."; + + public final static String bytearray_remove_doc = + "B.remove(int) -> None\n" + + "\n" + + "Remove the first occurance of a value in B."; + + public final static String bytearray_replace_doc = + "B.replace(old, new[, count]) -> bytes\n" + + "\n" + + "Return a copy of B with all occurrences of subsection\n" + + "old replaced by new. If the optional argument count is\n" + + "given, only the first count occurrences are replaced."; + + public final static String bytearray_reverse_doc = + "B.reverse() -> None\n" + + "\n" + + "Reverse the order of the values in B in place."; + + public final static String bytearray_rfind_doc = + "B.rfind(sub [,start [,end]]) -> int\n" + + "\n" + + "Return the highest index in B where subsection sub is found,\n" + + "such that sub is contained within s[start,end]. Optional\n" + + "arguments start and end are interpreted as in slice notation.\n" + + "\n" + + "Return -1 on failure."; + + public final static String bytearray_rindex_doc = + "B.rindex(sub [,start [,end]]) -> int\n" + + "\n" + + "Like B.rfind() but raise ValueError when the subsection is not found."; + + public final static String bytearray_rjust_doc = + "B.rjust(width[, fillchar]) -> copy of B\n" + + "\n" + + "Return B right justified in a string of length width. Padding is\n" + + "done using the specified fill character (default is a space)"; + + public final static String bytearray_rpartition_doc = + "B.rpartition(sep) -> (head, sep, tail)\n" + + "\n" + + "Searches for the separator sep in B, starting at the end of B,\n" + + "and returns the part before it, the separator itself, and the\n" + + "part after it. If the separator is not found, returns two empty\n" + + "bytearray objects and B."; + + public final static String bytearray_rsplit_doc = + "B.rsplit(sep[, maxsplit]) -> list of bytearray\n" + + "\n" + + "Return a list of the sections in B, using sep as the delimiter,\n" + + "starting at the end of B and working to the front.\n" + + "If sep is not given, B is split on ASCII whitespace characters\n" + + "(space, tab, return, newline, formfeed, vertical tab).\n" + + "If maxsplit is given, at most maxsplit splits are done."; + + public final static String bytearray_rstrip_doc = + "B.rstrip([bytes]) -> bytearray\n" + + "\n" + + "Strip trailing bytes contained in the argument.\n" + + "If the argument is omitted, strip trailing ASCII whitespace."; + + public final static String bytearray_split_doc = + "B.split([sep[, maxsplit]]) -> list of bytearray\n" + + "\n" + + "Return a list of the sections in B, using sep as the delimiter.\n" + + "If sep is not given, B is split on ASCII whitespace characters\n" + + "(space, tab, return, newline, formfeed, vertical tab).\n" + + "If maxsplit is given, at most maxsplit splits are done."; + + public final static String bytearray_splitlines_doc = + "B.splitlines([keepends]) -> list of lines\n" + + "\n" + + "Return a list of the lines in B, breaking at line boundaries.\n" + + "Line breaks are not included in the resulting list unless keepends\n" + + "is given and true."; + + public final static String bytearray_startswith_doc = + "B.startswith(prefix [,start [,end]]) -> bool\n" + + "\n" + + "Return True if B starts with the specified prefix, False otherwise.\n" + + "With optional start, test B beginning at that position.\n" + + "With optional end, stop comparing B at that position.\n" + + "prefix can also be a tuple of strings to try."; + + public final static String bytearray_strip_doc = + "B.strip([bytes]) -> bytearray\n" + + "\n" + + "Strip leading and trailing bytes contained in the argument.\n" + + "If the argument is omitted, strip ASCII whitespace."; + + public final static String bytearray_swapcase_doc = + "B.swapcase() -> copy of B\n" + + "\n" + + "Return a copy of B with uppercase ASCII characters converted\n" + + "to lowercase ASCII and vice versa."; + + public final static String bytearray_title_doc = + "B.title() -> copy of B\n" + + "\n" + + "Return a titlecased version of B, i.e. ASCII words start with uppercase\n" + + "characters, all remaining cased characters have lowercase."; + + public final static String bytearray_translate_doc = + "B.translate(table[, deletechars]) -> bytearray\n" + + "\n" + + "Return a copy of B, where all characters occurring in the\n" + + "optional argument deletechars are removed, and the remaining\n" + + "characters have been mapped through the given translation\n" + + "table, which must be a bytes object of length 256."; + + public final static String bytearray_upper_doc = + "B.upper() -> copy of B\n" + + "\n" + + "Return a copy of B with all ASCII characters converted to uppercase."; + + public final static String bytearray_zfill_doc = + "B.zfill(width) -> copy of B\n" + + "\n" + + "Pad a numeric string B with zeros on the left, to fill a field\n" + + "of the specified width. B is never truncated."; + + // Docs for + public final static String function___call___doc = + "x.__call__(...) <==> x(...)"; + + public final static String function___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String function___closure___doc = + ""; + + public final static String function___code___doc = + ""; + + public final static String function___defaults___doc = + ""; + + public final static String function___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String function___dict___doc = + ""; + + public final static String function_doc = + "function(code, globals[, name[, argdefs[, closure]]])\n" + + "\n" + + "Create a function object from a code object and a dictionary.\n" + + "The optional name string overrides the name from the code object.\n" + + "The optional argdefs tuple specifies the default argument values.\n" + + "The optional closure tuple supplies the bindings for free variables."; + + public final static String function___format___doc = + "default object formatter"; + + public final static String function___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String function___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String function___globals___doc = + ""; + + public final static String function___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String function___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String function___module___doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String function___name___doc = + "str(object) -> string\n" + + "\n" + + "Return a nice string representation of the object.\n" + + "If the argument is a string, the return value is the same object."; + + public final static String function___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String function___reduce___doc = + "helper for pickle"; + + public final static String function___reduce_ex___doc = + "helper for pickle"; + + public final static String function___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String function___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String function___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String function___str___doc = + "x.__str__() <==> str(x)"; + + public final static String function___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String function_func_closure_doc = + ""; + + public final static String function_func_code_doc = + ""; + + public final static String function_func_defaults_doc = + ""; + + public final static String function_func_dict_doc = + ""; + + public final static String function_func_doc_doc = + ""; + + public final static String function_func_globals_doc = + ""; + + public final static String function_func_name_doc = + ""; + + // Docs for + public final static String instancemethod___call___doc = + "x.__call__(...) <==> x(...)"; + + public final static String instancemethod___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String instancemethod___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String instancemethod___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String instancemethod_doc = + "instancemethod(function, instance, class)\n" + + "\n" + + "Create an instance method object."; + + public final static String instancemethod___format___doc = + "default object formatter"; + + public final static String instancemethod___func___doc = + "the function (or other callable) implementing a method"; + + public final static String instancemethod___get___doc = + "descr.__get__(obj[, type]) -> value"; + + public final static String instancemethod___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String instancemethod___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String instancemethod___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String instancemethod___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String instancemethod___reduce___doc = + "helper for pickle"; + + public final static String instancemethod___reduce_ex___doc = + "helper for pickle"; + + public final static String instancemethod___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String instancemethod___self___doc = + "the instance to which a method is bound; None for unbound methods"; + + public final static String instancemethod___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String instancemethod___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String instancemethod___str___doc = + "x.__str__() <==> str(x)"; + + public final static String instancemethod___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String instancemethod_im_class_doc = + "the class associated with a method"; + + public final static String instancemethod_im_func_doc = + "the function (or other callable) implementing a method"; + + public final static String instancemethod_im_self_doc = + "the instance to which a method is bound; None for unbound methods"; + + // Docs for + public final static String code___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String code___cmp___doc = + "x.__cmp__(y) <==> cmp(x,y)"; + + public final static String code___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String code_doc = + "code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n" + + " varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n" + + "\n" + + "Create a code object. Not for the faint of heart."; + + public final static String code___eq___doc = + "x.__eq__(y) <==> x==y"; + + public final static String code___format___doc = + "default object formatter"; + + public final static String code___ge___doc = + "x.__ge__(y) <==> x>=y"; + + public final static String code___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String code___gt___doc = + "x.__gt__(y) <==> x>y"; + + public final static String code___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String code___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String code___le___doc = + "x.__le__(y) <==> x<=y"; + + public final static String code___lt___doc = + "x.__lt__(y) <==> x x!=y"; + + public final static String code___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String code___reduce___doc = + "helper for pickle"; + + public final static String code___reduce_ex___doc = + "helper for pickle"; + + public final static String code___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String code___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String code___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String code___str___doc = + "x.__str__() <==> str(x)"; + + public final static String code___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String code_co_argcount_doc = + ""; + + public final static String code_co_cellvars_doc = + ""; + + public final static String code_co_code_doc = + ""; + + public final static String code_co_consts_doc = + ""; + + public final static String code_co_filename_doc = + ""; + + public final static String code_co_firstlineno_doc = + ""; + + public final static String code_co_flags_doc = + ""; + + public final static String code_co_freevars_doc = + ""; + + public final static String code_co_lnotab_doc = + ""; + + public final static String code_co_name_doc = + ""; + + public final static String code_co_names_doc = + ""; + + public final static String code_co_nlocals_doc = + ""; + + public final static String code_co_stacksize_doc = + ""; + + public final static String code_co_varnames_doc = + ""; + + // Docs for + public final static String frame___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String frame___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String frame_doc = + ""; + + public final static String frame___format___doc = + "default object formatter"; + + public final static String frame___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String frame___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String frame___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String frame___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String frame___reduce___doc = + "helper for pickle"; + + public final static String frame___reduce_ex___doc = + "helper for pickle"; + + public final static String frame___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String frame___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String frame___sizeof___doc = + "F.__sizeof__() -> size of F in memory, in bytes"; + + public final static String frame___str___doc = + "x.__str__() <==> str(x)"; + + public final static String frame___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String frame_f_back_doc = + ""; + + public final static String frame_f_builtins_doc = + ""; + + public final static String frame_f_code_doc = + ""; + + public final static String frame_f_exc_traceback_doc = + ""; + + public final static String frame_f_exc_type_doc = + ""; + + public final static String frame_f_exc_value_doc = + ""; + + public final static String frame_f_globals_doc = + ""; + + public final static String frame_f_lasti_doc = + ""; + + public final static String frame_f_lineno_doc = + ""; + + public final static String frame_f_locals_doc = + ""; + + public final static String frame_f_restricted_doc = + ""; + + public final static String frame_f_trace_doc = + ""; + + // Docs for + public final static String traceback___class___doc = + "type(object) -> the object's type\n" + + "type(name, bases, dict) -> a new type"; + + public final static String traceback___delattr___doc = + "x.__delattr__('name') <==> del x.name"; + + public final static String traceback_doc = + ""; + + public final static String traceback___format___doc = + "default object formatter"; + + public final static String traceback___getattribute___doc = + "x.__getattribute__('name') <==> x.name"; + + public final static String traceback___hash___doc = + "x.__hash__() <==> hash(x)"; + + public final static String traceback___init___doc = + "x.__init__(...) initializes x; see help(type(x)) for signature"; + + public final static String traceback___new___doc = + "T.__new__(S, ...) -> a new object with type S, a subtype of T"; + + public final static String traceback___reduce___doc = + "helper for pickle"; + + public final static String traceback___reduce_ex___doc = + "helper for pickle"; + + public final static String traceback___repr___doc = + "x.__repr__() <==> repr(x)"; + + public final static String traceback___setattr___doc = + "x.__setattr__('name', value) <==> x.name = value"; + + public final static String traceback___sizeof___doc = + "__sizeof__() -> int\n" + + "size of object in memory, in bytes"; + + public final static String traceback___str___doc = + "x.__str__() <==> str(x)"; + + public final static String traceback___subclasshook___doc = + "Abstract classes can override this to customize issubclass().\n" + + "\n" + + "This is invoked early on by abc.ABCMeta.__subclasscheck__().\n" + + "It should return True, False or NotImplemented. If it returns\n" + + "NotImplemented, the normal algorithm is used. Otherwise, it\n" + + "overrides the normal algorithm (and the outcome is cached).\n" + + ""; + + public final static String traceback_tb_frame_doc = + ""; + + public final static String traceback_tb_lasti_doc = + ""; + + public final static String traceback_tb_lineno_doc = + ""; + + public final static String traceback_tb_next_doc = + ""; + +} diff --git a/src/org/python/core/PyByteArray.java b/src/org/python/core/PyByteArray.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/PyByteArray.java @@ -0,0 +1,1358 @@ +package org.python.core; + +import java.util.Arrays; + +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedType; + +/** + * Partial implementation of Python bytearray. At the present stage of development, the class + * provides: + *
      + *
    • constructors (both __init__ and the Java API constructors),
    • + *
    • the slice operations (get, set and delete)
    • + *
    • a List<PyInteger> implementation for the Java API
    • + *
    + * and this is founded on a particular approach to storage management internally. However, the + * implementation does not support the memoryview interface either for access or a a + * source for its constructors although the signatures are present. The rich set of string-like + * operations due a bytearray is not implemented. + * + */ + at ExposedType(name = "bytearray", base = PyObject.class, doc = BuiltinDocs.bytearray_doc) +public class PyByteArray extends BaseBytes { + + public static final PyType TYPE = PyType.fromClass(PyByteArray.class); + + /** + * Create a zero-length Python bytearray of explicitly-specified sub-type + * @param type explicit Jython type + */ + public PyByteArray(PyType type) { + super(type); + } + + /** + * Create a zero-length Python bytearray. + */ + public PyByteArray() { + super(TYPE); + } + + /** + * Create zero-filled Python bytearray of specified size. + * @param size of bytearray + */ + public PyByteArray(int size) { + super(TYPE); + init(size); + } + + /** + * Construct bytearray by copying values from int[]. + * + * @param value source of the bytes (and size) + */ + public PyByteArray(int[] value) { + super(TYPE, value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the + * source. + * @param value source of the bytes (and size) + */ + public PyByteArray(BaseBytes value) { + super(TYPE); + init(value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the + * source. + * @param value source of the bytes (and size) + */ + public PyByteArray(MemoryViewProtocol value) { + super(TYPE); + init(value.getMemoryView()); + } + + /** + * Create a new array filled from an iterable of PyObject. The iterable must yield objects + * convertible to Python bytes (non-negative integers less than 256 or strings of length 1). + * @param value source of the bytes (and size) + */ + public PyByteArray(Iterable value) { + super(TYPE); + init(value); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually a + * PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + public PyByteArray(PyString arg, PyObject encoding, PyObject errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually a + * PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (may be null to select the default for this + * installation) + * @param errors name of optional errors policy + */ + public PyByteArray(PyString arg, String encoding, String errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new bytearray object from an arbitrary Python object according to the same rules as + * apply in Python to the bytearray() constructor: + *
      + *
    • bytearray() Construct a zero-length bytearray (arg is null).
    • + *
    • bytearray(int) Construct a zero-initialized bytearray of the given length.
    • + *
    • bytearray(iterable_of_ints) Construct from iterable yielding integers in [0..255]
    • + *
    • bytearray(string [, encoding [, errors] ]) Construct from a text string, optionally using + * the specified encoding.
    • + *
    • bytearray(unicode, encoding [, errors]) Construct from a unicode string using the + * specified encoding.
    • + *
    • bytearray(bytes_or_bytearray) Construct as a mutable copy of bytes or existing bytearray + * object.
    • + *
    + * When it is necessary to specify an encoding, as in the Python signature + * bytearray(string, encoding[, errors]), use the constructor + * {@link #PyByteArray(PyString, String, String)}. If the PyString is actually a PyUnicode, an + * encoding must be specified, and using this constructor will throw an exception about that. + * + * @param arg primary argument from which value is taken (may be null) + * @throws PyException in the same circumstances as bytearray(arg), TypeError for non-iterable, + * non-integer argument type, and ValueError if iterables do not yield byte [0..255] values. + */ + public PyByteArray(PyObject arg) throws PyException { + super(TYPE); + init(arg); + } + + /* ======================================================================================== + * API for org.python.core.PySequence + * ======================================================================================== + */ + + /** + * Returns a slice of elements from this sequence as a PyByteArray. + * + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @return a PyByteArray corresponding the the given range of elements. + */ + @Override + protected synchronized PyByteArray getslice(int start, int stop, int step) { + if (step == 1) { + // Efficiently copy contiguous slice + int n = stop-start; + if (n<=0) { + return new PyByteArray(); + } else { + PyByteArray ret = new PyByteArray(n); + System.arraycopy(storage, offset+start, ret.storage, ret.offset, n); + return ret; + } + } else { + int n = sliceLength(start, stop, step); + PyByteArray ret = new PyByteArray(n); + n += ret.offset; + byte[] dst = ret.storage; + for (int io = start + offset, jo = ret.offset; jo < n; io += step, jo++) + dst[jo] = storage[io]; + return ret; + } + } + + + /** + * Returns a PyByteArray that repeats this sequence the given number of times, as + * in the implementation of __mul__ for strings. + * @param count the number of times to repeat this. + * @return this byte array repeated count times. + */ + @Override + protected synchronized PyByteArray repeat(int count) { + PyByteArray ret = new PyByteArray(); + ret.setStorage(repeatImpl(count)); + return ret; + } + + /** + * Sets the indexed element of the bytearray to the given value. + * This is an extension point called by PySequence in its implementation of + * {@link #__setitem__} + * It is guaranteed by PySequence that the index is within the bounds of the array. + * Any other clients calling pyset(int) must make the same guarantee. + * + * @param index index of the element to set. + * @param value the value to set this element to. + * @throws PyException(AttributeError) if value cannot be converted to an integer + * @throws PyException(ValueError) if value<0 or value>255 + */ + public synchronized void pyset(int index, PyObject value) throws PyException { + storage[index+offset] = byteCheck(value); + } + + /** + * Insert the element (interpreted as a Python byte value) at the given index. + * + * @param index to insert at + * @param element to insert (by value) + * @throws PyException(IndexError) if the index is outside the array bounds + * @throws PyException(ValueError) if element<0 or element>255 + */ + public synchronized void pyadd(int index, PyInteger element) { + // Open a space at the right location. + storageReplace(index, 0, 1); + storage[index] = byteCheck(element); + } + + /** + * Sets the given range of elements according to Python slice assignment semantics. If the step + * size is one, it is a simple slice and the operation is equivalent to deleting that slice, + * then inserting the value at that position, regarding the value as a sequence (if possible) or + * as a single element if it is not a sequence. If the step size is not one, but start=stop, it + * is equivalent to insertion at that point. If the step size is not one, and start!=stop, the + * slice defines a certain number of elements to be replaced, and the value must be a sequence + * of exactly that many elements (or convertible to such a sequence). + *

    + * When assigning from a sequence type or iterator, the sequence may contain arbitrary + * PyObjects, but acceptable ones are PyInteger, PyLong or PyString of length 1. If + * any one of them proves unsuitable for assignment to a Python bytarray element, an exception + * is thrown and this bytearray is unchanged. + * + *

    +     * a = bytearray(b'abcdefghijklmnopqrst')
    +     * a[2:12:2] = iter( [65, 66, 67, long(68), "E"] )
    +     * 
    + * + * Results in a=bytearray(b'abAdBfChDjElmnopqrst'). + *

    + * + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value an object consistent with the slice assignment + */ + @Override + protected synchronized void setslice(int start, int stop, int step, PyObject value) { + + if (step == 1 && stop < start) { + // Because "b[5:2] = v" means insert v just before 5 not 2. + // ... although "b[5:2:-1] = v means b[5]=v[0], b[4]=v[1], b[3]=v[2] + stop = start; + } + + /* + * The actual behaviour depends on the nature (type) of value. It may be any kind of + * PyObject (but not other kinds of Java Object). The function is implementing assignment to + * a slice. PEP 3137 declares that the value may be "any type that implements the PEP 3118 + * buffer interface, which isn't implemented yet in Jython. + */ + // XXX correct this when the buffer interface is available in Jython + /* + * The following is essentially equivalent to b[start:stop[:step]]=bytearray(value) except + * we avoid constructing a copy of value if we can easily do so. The logic is the same as + * BaseBytes.init(PyObject), without support for value==null. + */ + + if (value instanceof PyString) { + /* + * Value is a string (but must be 8-bit). + */ + setslice(start, stop, step, (PyString)value); + + } else if (value.isIndex()) { + /* + * Value behaves as a zero-initialised bytearray of the given length. + */ + setslice(start, stop, step, value.asIndex(Py.OverflowError)); + + } else if (value instanceof BaseBytes) { + /* + * Value behaves as a bytearray, and can be can be inserted without making a copy + * (unless it is this object). + */ + setslice(start, stop, step, (BaseBytes)value); + + } else if (value instanceof MemoryViewProtocol) { + /* + * Value supports Jython implementation of PEP 3118, and can be can be inserted without + * making a copy. + */ + setslice(start, stop, step, ((MemoryViewProtocol)value).getMemoryView()); + + } else { + /* + * The remaining alternative is an iterable returning (hopefully) right-sized ints. If + * it isn't one, we get an exception about not being iterable, or about the values. + */ + setslice(start, stop, step, value.asIterable()); + + } + } + + + + /** + * Sets the given range of elements according to Python slice assignment semantics from a + * zero-filled bytearray of the given length. + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param len number of zeros to insert consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, int len) throws PyException { + if (step == 1) { + // Delete this[start:stop] and open a space of the right size = len + storageReplace(start, stop - start, len); + Arrays.fill(storage, start + offset, (start + offset) + len, (byte)0); + + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) throw SliceSizeError("bytes", len, n); + for (int io = start + offset; n > 0; io += step, --n) + storage[io] = 0; + } + } + + + /** + * Sets the given range of elements according to Python slice assignment semantics from a + * PyString. + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value a PyString object consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, PyString value) throws PyException { + String v = value.asString(); + int len = v.length(); + if (step == 1) { + // Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, len); + setBytes(start, v); + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) { + throw SliceSizeError("bytes", len, n); + } + setBytes(start, step, v); + } + } + + /** + * Sets the given range of elements according to Python slice assignment semantics from an + * object supporting the Jython implementation of PEP 3118. + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value a memoryview object consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, MemoryView value) throws PyException { + // XXX Support memoryview once means of access to bytes is defined + Py.NotImplementedError("memoryview not yet supported in bytearray"); + String format = value.get_format(); + boolean isBytes = format == null || "B".equals(format); + if (value.get_ndim() != 1 || !isBytes) { + Py.TypeError("memoryview value must be byte-oriented"); + } else { + // Dimensions are given as a PyTple (although only one) + int len = value.get_shape().pyget(0).asInt(); + if (step == 1) { + // Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, len); + // System.arraycopy(value.storage, value.offset, storage, start + // + offset, len); + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) throw SliceSizeError("bytes", len, n); + // int no = n + value.offset; + // for (int io = start + offset, jo = value.offset; jo < no; io += step, jo++) { + // storage[io] = value.storage[jo]; // Assign this[i] = value[j] + // } + } + } + } + + /** + * Sets the given range of elements according to Python slice assignment semantics + * from a bytearray (or bytes). + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param value a bytearray (or bytes) object consistent with the slice assignment + * @throws PyException(SliceSizeError) if the value size is inconsistent with an extended slice + */ + private void setslice(int start, int stop, int step, BaseBytes value) throws PyException { + if (value == this) { + value = new PyByteArray(value); // Must work with a copy + } + int len = value.size; + if (step == 1) { + //Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, len); + System.arraycopy(value.storage, value.offset, storage, start + + offset, len); + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != len) { + throw SliceSizeError("bytes", len, n); + } + int no = n + value.offset; + for (int io = start + offset, jo = value.offset; jo < no; io += step, jo++) { + storage[io] = value.storage[jo]; // Assign this[i] = value[j] + } + } + } + + + /** + * Sets the given range of elements according to Python slice assignment semantics from a + * bytearray (or bytes). + * + * @see #setslice(int, int, int, PyObject) + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step the step size. + * @param iter iterable source of values to enter in the array + * @throws PyException(SliceSizeError) if the iterable size is inconsistent with an extended + * slice + */ + private void setslice(int start, int stop, int step, Iterable iter) { + /* + * As we don't know how many elements the iterable represents, we can't adjust the array + * until after we run the iterator. We use this elastic byte structure to hold the bytes until then. + */ + FragmentList fragList = new BaseBytes.FragmentList(); + fragList.loadFrom(iter); + + if (step == 1) { + // Delete this[start:stop] and open a space of the right size + storageReplace(start, stop - start, fragList.totalCount); + if (fragList.totalCount > 0) { + // Stitch the fragments together in the space we made + fragList.emptyInto(storage, start + offset); + } + } else { + // This is an extended slice which means we are replacing elements + int n = sliceLength(start, stop, step); + if (n != fragList.totalCount) throw SliceSizeError("bytes", fragList.totalCount, n); + fragList.emptyInto(storage, start + offset, step); + } + } + + +// Idiom: +// if (step == 1) { +// // Do something efficient with block start...stop-1 +// } else { +// int n = sliceLength(start, stop, step); +// for (int i = start, j = 0; j < n; i += step, j++) { +// // Perform jth operation with element i +// } +// } + + + + /* + * Deletes an element from the sequence (and closes up the gap). + * @param index index of the element to delete. + */ + protected synchronized void del(int index) { + // XXX Change SequenceIndexDelegate to avoid repeated calls to del(int) for extended slice + storageDelete(index, 1); + } + + /* + * Deletes contiguous sub-sequence (and closes up the gap). + * @param start the position of the first element. + * @param stop one more than the position of the last element. + */ + protected synchronized void delRange(int start, int stop) { + // XXX Use the specialised storageDelete() + storageReplace(start, stop-start, 0); + } + + /** + * Deletes a simple or extended slice and closes up the gap(s). + * + * @param start the position of the first element. + * @param stop one more than the position of the last element. + * @param step from one element to the next + */ + protected synchronized void delslice(int start, int stop, int step) { + if (step == 1) { + // Delete this[start:stop] and closing up the space + storageDelete(start, stop - start); + } else { + // This is an extended slice which means we are removing isolated elements + int n = sliceLength(start, stop, step); + + if (n > 0) { + if (step > 0) { + // The first element is x[start] and the last is x[start+(n-1)*step+1] + storageDeleteEx(start, step, n); + } else { + // The first element is x[start+(n-1)*step+1] and the last is x[start] + storageDeleteEx(start + (n - 1) * step + 1, -step, n); + } + } + } + } + + /** + * Convenience method to create a ValueError PyException with the message + * "attempt to assign {type} of size {valueSize} to extended slice of size {sliceSize}" + * + * @param valueType + * @param valueSize size of sequence being assigned to slice + * @param sliceSize size of slice expected to receive + * @throws PyException (ValueError) as detailed + */ + public static PyException SliceSizeError(String valueType, int valueSize, int sliceSize) + throws PyException { + String fmt = "attempt to assign %s of size %d to extended slice of size %d"; + return Py.ValueError(String.format(fmt, valueType, valueSize, sliceSize)); + // XXX consider moving to SequenceIndexDelegate.java or somewhere else generic + } + + + /** + * Initialise a mutable bytearray object from various arguments. This single initialisation must + * support: + *

      + *
    • bytearray() Construct a zero-length bytearray.
    • + *
    • bytearray(int) Construct a zero-initialized bytearray of the given length.
    • + *
    • bytearray(iterable_of_ints) Construct from iterable yielding integers in [0..255]
    • + *
    • bytearray(string [, encoding [, errors] ]) Construct from a text string, optionally using + * the specified encoding.
    • + *
    • bytearray(unicode, encoding [, errors]) Construct from a unicode string using the + * specified encoding.
    • + *
    • bytearray(bytes_or_bytearray) Construct as a mutable copy of bytes or existing bytearray + * object.
    • + *
    + * Unlike CPython we are not able to support the initialisation:
  • bytearray(memory_view) + * Construct as copy of any object implementing the buffer API.
  • Although effectively + * a constructor, it is possible to call __init__ on a 'used' object so the method does not + * assume any particular prior state. + * + * @param args argument array according to Jython conventions + * @param kwds Keywords according to Jython conventions + * @throws PyException in the same circumstances as bytearray(arg), TypeError for non-iterable, + * non-integer argument type, and ValueError if iterables do not yield byte [0..255] values. + */ + @ExposedNew + @ExposedMethod(doc = BuiltinDocs.bytearray___init___doc) + final synchronized void bytearray___init__(PyObject[] args, String[] kwds) { + + ArgParser ap = new ArgParser("bytearray", args, kwds, "source", "encoding", "errors"); + PyObject arg = ap.getPyObject(0, null); + // If not null, encoding and errors must be PyString (or PyUnicode) + PyObject encoding = ap.getPyObjectByType(1, PyBaseString.TYPE, null); + PyObject errors = ap.getPyObjectByType(2, PyBaseString.TYPE, null); + + /* + * This whole method is modelled on CPython (see Objects/bytearrayobject.c : bytes_init()) + * but reorganised somewhat to maximise re-use with the implementation of assignment to a + * slice, which essentially has to construct a bytearray from the right-hand side. + * Hopefully, it still tries the same things in the same order and fails in the same way. + */ + + if (encoding != null || errors != null) { + /* + * bytearray(string [, encoding [, errors]]) Construct from a text string by encoding it + * using the specified encoding. + */ + if (arg == null || !(arg instanceof PyString)) { + throw Py.TypeError("encoding or errors without sequence argument"); + } + init((PyString)arg, encoding, errors); + + } else { + // Now construct from arbitrary object (or null) + init(arg); + } + + } + + + @Override + public int __len__() { + return list___len__(); + } + + @ExposedMethod(doc = BuiltinDocs.list___len___doc) + final int list___len__() { + return size; + } + + +// Based on PyList and not yet properly implemented. +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___ne___doc) +// final synchronized PyObject bytearray___ne__(PyObject o) { +// return seq___ne__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___eq___doc) +// final synchronized PyObject bytearray___eq__(PyObject o) { +// return seq___eq__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___lt___doc) +// final synchronized PyObject bytearray___lt__(PyObject o) { +// return seq___lt__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___le___doc) +// final synchronized PyObject bytearray___le__(PyObject o) { +// return seq___le__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___gt___doc) +// final synchronized PyObject bytearray___gt__(PyObject o) { +// return seq___gt__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___ge___doc) +// final synchronized PyObject bytearray___ge__(PyObject o) { +// return seq___ge__(o); +// } +// +// @Override +// public PyObject __imul__(PyObject o) { +// return bytearray___imul__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___imul___doc) +// final synchronized PyObject bytearray___imul__(PyObject o) { +// if (!o.isIndex()) { +// return null; +// } +// int count = o.asIndex(Py.OverflowError); +// +// int size = size(); +// if (size == 0 || count == 1) { +// return this; +// } +// +// if (count < 1) { +// clear(); +// return this; +// } +// +// if (size > Integer.MAX_VALUE / count) { +// throw Py.MemoryError(""); +// } +// +// int newSize = size * count; +// if (storage instanceof ArrayList) { +// ((ArrayList) storage).ensureCapacity(newSize); +// } +// List oldList = new ArrayList(storage); +// for (int i = 1; i < count; i++) { +// storage.addAll(oldList); +// } +// gListAllocatedStatus = storage.size(); // now omit? +// return this; +// } +// +// @Override +// public PyObject __mul__(PyObject o) { +// return bytearray___mul__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___mul___doc) +// final synchronized PyObject bytearray___mul__(PyObject o) { +// if (!o.isIndex()) { +// return null; +// } +// return repeat(o.asIndex(Py.OverflowError)); +// } +// +// @Override +// public PyObject __rmul__(PyObject o) { +// return bytearray___rmul__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___rmul___doc) +// final synchronized PyObject bytearray___rmul__(PyObject o) { +// if (!o.isIndex()) { +// return null; +// } +// return repeat(o.asIndex(Py.OverflowError)); +// } +// +// @Override +// public PyObject __add__(PyObject o) { +// return bytearray___add__(o); +// } +// +// @ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.bytearray___add___doc) +// final synchronized PyObject bytearray___add__(PyObject o) { +// PyByteArray sum = null; +// if (o instanceof PySequenceList && !(o instanceof PyTuple)) { +// if (o instanceof PyByteArray) { +// List oList = ((PyByteArray) o).storage; +// List newList = new ArrayList(storage.size() + oList.size()); +// newList.addAll(storage); +// newList.addAll(oList); +// sum = fromList(newList); +// } +// } else if (!(o instanceof PySequenceList)) { +// // also support adding java lists (but not PyTuple!) +// Object oList = o.__tojava__(List.class); +// if (oList != Py.NoConversion && oList != null) { +// List otherList = (List) oList; +// sum = new PyByteArray(); +// sum.bytearray_extend(this); +// for (Iterator i = otherList.iterator(); i.hasNext();) { +// sum.add(i.next()); +// } +// } +// } +// return sum; +// } +// +// @ExposedMethod(doc = BuiltinDocs.bytearray___contains___doc) +// final synchronized boolean bytearray___contains__(PyObject o) { +// return object___contains__(o); +// } +// +// @ExposedMethod(doc = BuiltinDocs.bytearray___delitem___doc) +// final synchronized void bytearray___delitem__(PyObject index) { +// seq___delitem__(index); +// } +// + @ExposedMethod(doc = BuiltinDocs.bytearray___setitem___doc) + final synchronized void bytearray___setitem__(PyObject o, PyObject def) { + seq___setitem__(o, def); + } + +// @ExposedMethod(doc = BuiltinDocs.bytearray___getitem___doc) +// final synchronized PyObject bytearray___getitem__(PyObject o) { +// PyObject ret = seq___finditem__(o); +// if (ret == null) { +// throw Py.IndexError("index out of range: " + o); +// } +// return ret; +// } +// +// @Override +// public PyObject __iter__() { +// return bytearray___iter__(); +// } +// +// @ExposedMethod(doc = BuiltinDocs.bytearray___iter___doc) +// public synchronized PyObject bytearray___iter__() { +// return new PyFastSequenceIter(this); +// } +// +// @Override +// protected String unsupportedopMessage(String op, PyObject o2) { +// if (op.equals("+")) { +// return "can only concatenate storage (not \"{2}\") to storage"; +// } +// return super.unsupportedopMessage(op, o2); +// } +// +// public String toString() { +// return bytearray_toString(); +// } +// + @ExposedMethod(names = "__repr__", doc = BuiltinDocs.bytearray___repr___doc) + final synchronized String bytearray_toString() { + // XXX revisit: understand the thread state logic and use encode() +// ThreadState ts = Py.getThreadState(); +// if (!ts.enterRepr(this)) { +// return "[...]"; +// } + StringBuilder buf = new StringBuilder("bytearray(b'"); + final int last = size()-1; + for (int i=0; i<=last; i++) { + int element = intAt(i); + if (Character.isISOControl(element)) + buf.append(String.format("\\x%02x", element)); + else + buf.append((char)element); + } + buf.append("')"); +// ts.exitRepr(this); + return buf.toString(); + } + + + + + + /* + * ======================================================================================== + * Manipulation of storage capacity + * ======================================================================================== + * + * Here we add to the inherited variables defining byte storage, the methods necessary to resize + * it. + */ + + /** + * Choose a size appropriate to store the given number of bytes, with some room for growth. + * @param size + * @return n >= needed + */ + private static final int roundUp(int size) { + // XXX Consider equivalent case statement + int alloc = size + (size >> 3) + (size < 9 ? 3 : 6); // As CPython + // XXX What's a good allocation unit size here? + final int ALLOC = 8; + return (alloc+(ALLOC-1)) & ~(ALLOC-1); // round up to multiple of ALLOC + } + + /** + * Used mainly to prevent repeated attempts to shrink an array that is already minimal. + */ + private static final int minAlloc = roundUp(1); + + /** + * Decide whether a new storage array should be allocated (but don't do it). This method returns + * true if the needed storage is bigger than the allocated array length. + * + * @param needed number of bytes needed + * @return true if needed number of bytes justifies a new array + */ + private final boolean shouldGrow(int needed) { + return needed > storage.length; + } + + /** + * Decide whether a smaller storage array should be allocated (but don't do it). This method + * returns true if the needed storage size is much smaller than the allocated array length. + * + * @param needed number of bytes needed + * @return true if needed number of bytes justifies a new array + */ + private final boolean shouldShrink(int needed) { + return needed == 0 || (needed * 2 + minAlloc) < storage.length; + } + + /** + * Decide whether a new storage array should be allocated (but don't do it). This method returns + * true if the needed storage is bigger, or much smaller, than the allocated array length. + * + * @param needed number of bytes needed + * @return true if needed number of bytes justifies a new array + */ + private final boolean shouldResize(int needed) { + return shouldGrow(needed) || shouldShrink(needed); + } + + /** + * Allocate fresh storage for at least the requested number of bytes. Spare bytes are alloceted + * evenly at each end of the new storage by choice of a new value for offset. + * If the size needed is zero, the "storage" allocated is the shared emptyStorage array. + * @param needed becomes the new value of this.size + */ + protected void newStorage(int needed) { + if (needed > 0) { + byte[] s = new byte[roundUp(needed)]; // guaranteed zero (by JLS 2ed para 4.5.5) + setStorage(s, needed, (s.length - needed) / 2); + } else + setStorage(emptyStorage); + } + + /** + * Ensure there is storage for at least the requested number of bytes, optionally clearing + * elements to zero. After the call, the needed number of bytes will be available, + * and if requested in the second parameter, they are guaranteed to be zero. + * @param needed number of bytes + * @param clear if true, storage bytes guaranteed zero + */ + private void newStorage(int needed, boolean clear) { + if (shouldResize(needed)) { + newStorage(needed); // guaranteed zero + } else { + setStorage(storage, needed, (storage.length - needed) / 2); + if (clear) { + Arrays.fill(storage, (byte)0); // guarantee zero + } + } + } + + + + /** + * Delete d elements at index a and prepare to insert + * e elements there by moving aside the surrounding elements. + * The method manipulates the storage array contents, size and + * offset. It will allocate a new array storage if necessary, + * or if desirable for efficiency. If the initial storage looks like this: + *
    +     *       |-                  s                -|
    +     * |--f--|--------a--------|---d---|-----b-----|----------------|
    +     * 
    + * then after the call the (possibly new) storage looks like this: + *
    +     *            |-                   s'                -|
    +     * |----f'----|--------a--------|----e----|-----b-----|--------------|
    +     * 
    + * where the contents of regions of length a and b=size-(a+d) have + * been preserved, although probably moved, and the gap between them has been adjusted to + * the requested size. + *

    + * The effect on this PyByteArray is that: + *

    +     * this.offset = f'
    +     * this.size = s' = a + e + b
    +     * 
    + * The method does not implement the Python repertoire of slice indices but avoids indexing + * outside the bytearray by silently adjusting a to be within it. + * Negative d or e is treated as 0 and if d is too large, it is truncated to the array end. + * @param a index of hole in byte array + * @param d number to discard (will discard x[a,a+d-1]) + * @param e size of hole to open (will be x[a, a+e-1]) + */ + private void storageReplace(int a, int d, int e) { + + int s = this.size; + + // Some of these should perhaps be errors but let's silently correct insane requests + if (a<0) a=0; else if (a>s) a = s; + if (d<0) d=0; else if (d>s-a) d = s-a; + if (e<0) e=0; + + if (e != d) { + // Otherwise, everything stays where it is. + // Handy derived values: + int b = s - (a + d); // which is >= 0 + int s2 = a + e + b; // which is >= 0 + int f = this.offset; // Location of x[0] + int g = f + (a + d); // Location of x[-b] + + if (shouldShrink(s2)) { + if (s2 > 0) { + // We have far more storage than we need: shrink and copy both parts + newStorage(f, a, g, b, e); + } else { + // Need no storage as a+e+b = 0 + setStorage(emptyStorage); + } + + } else if (a < b) { + // It would be less copying if we moved A=x[:a] not B=x[-b:]. + // If B is to stay where it is, it means A will land here: + int f2 = f - (e - d); + if (f2 >= 0) { + // ... which luckily is still inside the array + if (a > 0) { + System.arraycopy(storage, f, storage, f2, a); + } + this.offset = f2; + size = s2; + } else { + // ... which unfortunately is before the start of the array. + // We have to move both A and B and it might be time for a new array. + if (s2<=storage.length) { + // Repack it all in the existing array + newStorageAvoided(f, a, g, b, e); + } else { + newStorage(f, a, g, b, e); + } + } + + } else /* a >= b */{ + // It would be less copying if we moved B=x[-b:] not A=x[:a] + // If A is to stay where it is, it means B will land here: + int g2 = g + (e - d); + if (g2 + b <= storage.length) { + // ... which luckily leaves all of B inside the array + if (b > 0) { + System.arraycopy(storage, g, storage, g2, b); + } + // this.offset is unchanged + size = s2; + } else { + // ... which unfortunately runs beyond the end of the array. + // We have to move both A and B and it might be time for a new array. + if (s2<=storage.length) { + // Repack it all in the existing array + newStorageAvoided(f, a, g, b, e); + } else { + newStorage(f, a, g, b, e); + } + } + } + } + + } + + + /** + * Use the existing storage but move two blocks within it to leave a gap of the required size. + * This is the strategy usually used when the array is still big enough to hold the required + * new value, but we can't leave either block fixed. + * If the initial storage looks like this: + * + *
    +     * |-----f-----|--------a--------|---d---|----------b----------|----------|
    +     * 
    + * + * then after the call the storage looks like this: + * + *
    +     *        |-                             s'                          -|
    +     * |--f'--|--------a--------|---------e---------|----------b----------|---|
    +     * 
    + * + * where the regions of length a and b=size-(a+d) have been preserved + * and the gap between them adjusted to specification. The new offset f' is chosen heuristically + * by the method to optimise the efficiency of repeated adjustment near either end of the array, + * e.g. repeated prepend or append operations. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+e+b
    +     * 
    + * + * Arguments are not checked for validity at all. + * a, e and b are non-negative and not all zero. + * + * @param f location (with offset) of A + * @param a length of A + * @param g = f+a+d location (with offset) of B + * @param b length of B + * @param e gap between A and B in new storage. + */ + private void newStorageAvoided(int f, int a, int g, int b, int e) { + + // Shorthands + int s2 = a + e + b; + + // Choose the new offset f' to make prepend or append operations quicker. + // E.g. if insertion was near the end (b small) put most of the new space at the end. + int f2; + if (a == b) { + // Mainly to trap the case a=b=0 + f2 = (storage.length - s2) / 2; + } else { + // a and b are not both zero (since not equal) + long spare = storage.length - s2; + f2 = (int)((spare * b) / (a + b)); + } + // We have a new size and offset (but the same storage) + size = s2; + offset = f2; + + // This puts B at + int g2 = f2 + a + e; + + // We can make do with the existing array. Do an in place copy. + if (f2 + a > g) { + // New A overlaps existing B so we must copy B first + if (b > 0) System.arraycopy(storage, g, storage, g2, b); + if (a > 0) System.arraycopy(storage, f, storage, f2, a); + } else { + // Safe to copy A first + if (a > 0) System.arraycopy(storage, f, storage, f2, a); + if (b > 0) System.arraycopy(storage, g, storage, g2, b); + } + + } + + + /** + * Allocate new storage and copy two blocks from the current storage to it. If the initial + * storage looks like this: + * + *
    +     * |--f--|--------a--------|---d---|-----b-----|----------------|
    +     * 
    + * + * then after the call the (definitely new) storage looks like this: + * + *
    +     *            |-                   s'                -|
    +     * |----f'----|--------a--------|----e----|-----b-----|--------------|
    +     * 
    + * + * where the regions of length a and b=size-(a+d) have been preserved + * and the gap between them adjusted to specification. The new offset f' is chosen heuristically + * by the method to optimise the efficiency of repeated adjustment near either end of the array, + * e.g. repeated prepend or append operations. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+e+b
    +     * 
    + * + * Arguments are not checked for validity at all. + * a, e and b are non-negative and not all zero. + * + * @param f location (with offset) of A + * @param a length of A + * @param g = f+a+d location (with offset) of B + * @param b length of B + * @param e gap between A and B in new storage. + */ + private void newStorage(int f, int a, int g, int b, int e) { + // Enough room for the data and the gap + int s2 = a + e + b; + // Preserve a reference to the current data in the storage being discarded + byte[] source = this.storage; + // New storage with a bit of elbow-room + byte[] newStorage = new byte[roundUp(s2)]; + // Choose the new offset f' to make prepend or append operations quicker. + // E.g. if insertion was near the end (b small) put most of the new space at the end. + int f2; + if (a == b) { + // Mainly to trap the case a=b=0 + f2 = (newStorage.length - s2) / 2; + } else { + // a and b are not both zero (since not equal) + long spare = newStorage.length - s2; + f2 = (int)((spare * b) / (a + b)); + } + setStorage(newStorage, s2, f2); + + // Copy across the data + if (a > 0) System.arraycopy(source, f, storage, offset, a); + if (b > 0) System.arraycopy(source, g, storage, offset + (a + e), b); + } + + + /** + * Delete d elements at index a by moving together the surrounding + * elements. The method manipulates the storage array, size and + * offset, and will allocate a new storage array if necessary, or if the deletion + * is big enough. If the initial storage looks like this: + * + *
    +     * |-                           L                              -|
    +     *       |-                  s                -|
    +     * |--f--|--------a--------|---d---|-----b-----|----------------|
    +     * 
    + * + * then after the call the (possibly new) storage looks like this: + * + *
    +     * |-                 L'                     -|
    +     *      |-                  s'               -|
    +     * |-f'-|--------a--------|-----b-----|-------|
    +     * 
    + * + * where the regions of length a and b=size-(a+d) have been preserved + * and the gap between them eliminated. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+b
    +     * 
    + * The method does not implement the Python repertoire of slice indices but avoids indexing + * outside the bytearray by silently adjusting a to be within it. + * Negative d is treated as 0 and if d is too large, it is truncated to the array end. + * + * @param a index of hole in byte array + * @param d number to discard (will discard x[a,a+d-1]) + * @param e size of hole to open (will be x[a, a+e-1]) + */ + private void storageDelete(int a, int d) { + // storageReplace specialised for delete (e=0) + int s = this.size; + + // Some of these should perhaps be errors but let's silently correct insane requests + if (a < 0) a = 0; else if (a > s) a = s; + if (d < 0) d = 0; else if (d > s - a) d = s - a; + + // Handy derived values + int b = s - (a + d); // which is >= 0 + int s2 = s - d; // which is >= 0 + int f = this.offset; // Location of x[0] + int g = f + (a + d); // Location of x[-b] + + if (shouldShrink(s2)) { + // We have far more storage than we need: shrink and copy both parts + // Preserve a reference to the current data in the storage being discarded + byte[] source = this.storage; + // New storage with a bit of elbow-room + newStorage(s2); + // Copy across the data + if (a > 0) System.arraycopy(source, f, storage, offset, a); + if (b > 0) System.arraycopy(source, g, storage, offset + a, b); + + } else { + if (a < b) { + // It would be less copying if we moved A=x[:a] not B=x[-b:]. + // If B is to stay where it is, it means A will land here: + int f2 = f + d; + if (a > 0) { + System.arraycopy(storage, f, storage, f2, a); + } + this.offset = f2; + + } else /* a >= b */{ + // It would be less copying if we moved B=x[-b:] not A=x[:a] + // If A is to stay where it is, it means B will land here: + int g2 = f + a; + if (b > 0) { + System.arraycopy(storage, g, storage, g2, b); + } + } + } + } + + /** + * Delete d elements on a stride of c beginning at index + * a by moving together the surrounding elements. The method manipulates the + * storage array, size and offset, and will allocate a + * new storage array if the deletion is big enough. If the initial storage looks like this: + * + *
    +     * |-                               L                                -|
    +     *       |-                    s                    -|
    +     * |--f--|-----a-----|---------e---------|-----b-----|----------------|
    +     * 
    + * + * then after the call the (possibly new) storage looks like this: + * + *
    +     * |-                  L'                  -|
    +     *      |-                s'               -|
    +     * |-f'-|-----a-----|---(e-d)---|-----b-----|-------|
    +     * 
    + * + * where the regions of length a and b=size-(a+e) have been preserved + * and the e intervening elements reduced to e-d elements, by removing + * exactly the elements with indices (relative to the start of valid data) a+k*c + * for k=0...d-1. The effect on this PyByteArray is that: + * + *
    +     * this.offset = f'
    +     * this.size = s' = a+b
    +     * 
    + * + * The method does not implement the Python repertoire of slice indices but avoids indexing + * outside the bytearray by silently adjusting a to be within it. Negative d is treated as 0 and + * if d is too large, it is truncated to the array end. + * + * @param a index of hole in byte array + * @param c (>0) step size between the locations of elements to delete + * @param d number to discard (will discard x[a+k*c] for k=0...d-1) + */ + private void storageDeleteEx(int a, int c, int d) { + + // XXX Base this on storageReplace with the same a>> for method in dir(bytearray): + ... print method + ... + __add__ + __alloc__ + __class__ + __contains__ + __delattr__ + __delitem__ + __doc__ + __eq__ + __format__ + __ge__ + __getattribute__ + __getitem__ + __gt__ + __hash__ + __iadd__ + __imul__ + __init__ + __iter__ + __le__ + __len__ + __lt__ + __mul__ + __ne__ + __new__ + __reduce__ + __reduce_ex__ + __repr__ + __rmul__ + __setattr__ + __setitem__ + __sizeof__ + __str__ + __subclasshook__ + append + capitalize + center + count + decode + endswith + expandtabs + extend + find + fromhex + index + insert + isalnum + isalpha + isdigit + islower + isspace + istitle + isupper + join + ljust + lower + lstrip + partition + pop + remove + replace + reverse + rfind + rindex + rjust + rpartition + rsplit + rstrip + split + splitlines + startswith + strip + swapcase + title + translate + upper + zfill + >>> + */ diff --git a/src/org/python/core/PyByteArrayDerived.java b/src/org/python/core/PyByteArrayDerived.java new file mode 100644 --- /dev/null +++ b/src/org/python/core/PyByteArrayDerived.java @@ -0,0 +1,1116 @@ +/* Generated file, do not modify. See jython/src/templates/gderived.py. */ +package org.python.core; + +import java.io.Serializable; + +public class PyByteArrayDerived extends PyByteArray implements Slotted { + + public PyObject getSlot(int index) { + return slots[index]; + } + + public void setSlot(int index,PyObject value) { + slots[index]=value; + } + + private PyObject[]slots; + + private PyObject dict; + + public PyObject fastGetDict() { + return dict; + } + + public PyObject getDict() { + return dict; + } + + public void setDict(PyObject newDict) { + if (newDict instanceof PyStringMap||newDict instanceof PyDictionary) { + dict=newDict; + } else { + throw Py.TypeError("__dict__ must be set to a Dictionary "+newDict.getClass().getName()); + } + } + + public void delDict() { + // deleting an object's instance dict makes it grow a new one + dict=new PyStringMap(); + } + + public PyByteArrayDerived(PyType subtype) { + super(subtype); + slots=new PyObject[subtype.getNumSlots()]; + dict=subtype.instDict(); + } + + public PyString __str__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__str__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__str__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__str__(); + } + + public PyString __repr__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__repr__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__repr__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__repr__(); + } + + public PyString __hex__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__hex__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__hex__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__hex__(); + } + + public PyString __oct__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__oct__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__oct__"+" returned non-"+"string"+" (type "+res.getType().fastGetName()+")"); + } + return super.__oct__(); + } + + public PyFloat __float__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__float__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyFloat) + return(PyFloat)res; + throw Py.TypeError("__float__"+" returned non-"+"float"+" (type "+res.getType().fastGetName()+")"); + } + return super.__float__(); + } + + public PyComplex __complex__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__complex__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyComplex) + return(PyComplex)res; + throw Py.TypeError("__complex__"+" returned non-"+"complex"+" (type "+res.getType().fastGetName()+")"); + } + return super.__complex__(); + } + + public PyObject __pos__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__pos__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__pos__(); + } + + public PyObject __neg__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__neg__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__neg__(); + } + + public PyObject __abs__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__abs__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__abs__(); + } + + public PyObject __invert__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__invert__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__invert__(); + } + + public PyObject __reduce__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__reduce__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__reduce__(); + } + + public PyObject __add__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__add__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__add__(other); + } + + public PyObject __radd__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__radd__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__radd__(other); + } + + public PyObject __sub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__sub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__sub__(other); + } + + public PyObject __rsub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rsub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rsub__(other); + } + + public PyObject __mul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__mul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__mul__(other); + } + + public PyObject __rmul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rmul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rmul__(other); + } + + public PyObject __div__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__div__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__div__(other); + } + + public PyObject __rdiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rdiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rdiv__(other); + } + + public PyObject __floordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__floordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__floordiv__(other); + } + + public PyObject __rfloordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rfloordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rfloordiv__(other); + } + + public PyObject __truediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__truediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__truediv__(other); + } + + public PyObject __rtruediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rtruediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rtruediv__(other); + } + + public PyObject __mod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__mod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__mod__(other); + } + + public PyObject __rmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rmod__(other); + } + + public PyObject __divmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__divmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__divmod__(other); + } + + public PyObject __rdivmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rdivmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rdivmod__(other); + } + + public PyObject __rpow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rpow__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rpow__(other); + } + + public PyObject __lshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__lshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__lshift__(other); + } + + public PyObject __rlshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rlshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rlshift__(other); + } + + public PyObject __rshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rshift__(other); + } + + public PyObject __rrshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rrshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rrshift__(other); + } + + public PyObject __and__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__and__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__and__(other); + } + + public PyObject __rand__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rand__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rand__(other); + } + + public PyObject __or__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__or__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__or__(other); + } + + public PyObject __ror__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ror__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ror__(other); + } + + public PyObject __xor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__xor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__xor__(other); + } + + public PyObject __rxor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rxor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rxor__(other); + } + + public PyObject __lt__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__lt__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__lt__(other); + } + + public PyObject __le__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__le__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__le__(other); + } + + public PyObject __gt__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__gt__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__gt__(other); + } + + public PyObject __ge__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ge__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ge__(other); + } + + public PyObject __eq__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__eq__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__eq__(other); + } + + public PyObject __ne__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ne__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ne__(other); + } + + public PyObject __iadd__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iadd__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__iadd__(other); + } + + public PyObject __isub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__isub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__isub__(other); + } + + public PyObject __imul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__imul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__imul__(other); + } + + public PyObject __idiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__idiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__idiv__(other); + } + + public PyObject __ifloordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ifloordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ifloordiv__(other); + } + + public PyObject __itruediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__itruediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__itruediv__(other); + } + + public PyObject __imod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__imod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__imod__(other); + } + + public PyObject __ipow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ipow__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ipow__(other); + } + + public PyObject __ilshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ilshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ilshift__(other); + } + + public PyObject __irshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__irshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__irshift__(other); + } + + public PyObject __iand__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iand__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__iand__(other); + } + + public PyObject __ior__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ior__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ior__(other); + } + + public PyObject __ixor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ixor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ixor__(other); + } + + public PyObject __int__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__int__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger||res instanceof PyLong) + return res; + throw Py.TypeError("__int__"+" should return an integer"); + } + return super.__int__(); + } + + public PyObject __long__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__long__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyLong||res instanceof PyInteger) + return res; + throw Py.TypeError("__long__"+" returned non-"+"long"+" (type "+res.getType().fastGetName()+")"); + } + return super.__long__(); + } + + public int hashCode() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__hash__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger) { + return((PyInteger)res).getValue(); + } else + if (res instanceof PyLong) { + return((PyLong)res).getValue().intValue(); + } + throw Py.TypeError("__hash__ should return a int"); + } + if (self_type.lookup("__eq__")!=null||self_type.lookup("__cmp__")!=null) { + throw Py.TypeError(String.format("unhashable type: '%.200s'",getType().fastGetName())); + } + return super.hashCode(); + } + + public PyUnicode __unicode__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__unicode__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyUnicode) + return(PyUnicode)res; + if (res instanceof PyString) + return new PyUnicode((PyString)res); + throw Py.TypeError("__unicode__"+" should return a "+"unicode"); + } + return super.__unicode__(); + } + + public int __cmp__(PyObject other) { + PyType self_type=getType(); + PyObject[]where_type=new PyObject[1]; + PyObject impl=self_type.lookup_where("__cmp__",where_type); + // Full Compatibility with CPython __cmp__: + // If the derived type don't override __cmp__, the + // *internal* super().__cmp__ should be called, not the + // exposed one. The difference is that the exposed __cmp__ + // throws a TypeError if the argument is an instance of the same type. + if (impl==null||where_type[0]==TYPE||Py.isSubClass(TYPE,where_type[0])) { + return super.__cmp__(other); + } + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) { + return-2; + } + int c=res.asInt(); + return c<0?-1:c>0?1:0; + } + + public boolean __nonzero__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__nonzero__"); + if (impl==null) { + impl=self_type.lookup("__len__"); + if (impl==null) + return super.__nonzero__(); + } + PyObject o=impl.__get__(this,self_type).__call__(); + Class c=o.getClass(); + if (c!=PyInteger.class&&c!=PyBoolean.class) { + throw Py.TypeError(String.format("__nonzero__ should return bool or int, returned %s",self_type.getName())); + } + return o.__nonzero__(); + } + + public boolean __contains__(PyObject o) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__contains__"); + if (impl==null) + return super.__contains__(o); + return impl.__get__(this,self_type).__call__(o).__nonzero__(); + } + + public int __len__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__len__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger) + return((PyInteger)res).getValue(); + throw Py.TypeError("__len__ should return a int"); + } + return super.__len__(); + } + + public PyObject __iter__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iter__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + impl=self_type.lookup("__getitem__"); + if (impl==null) + return super.__iter__(); + return new PySequenceIter(this); + } + + public PyObject __iternext__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("next"); + if (impl!=null) { + try { + return impl.__get__(this,self_type).__call__(); + } catch (PyException exc) { + if (exc.match(Py.StopIteration)) + return null; + throw exc; + } + } + return super.__iternext__(); // ??? + } + + public PyObject __finditem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(key); + } catch (PyException exc) { + if (exc.match(Py.LookupError)) + return null; + throw exc; + } + return super.__finditem__(key); + } + + public PyObject __finditem__(int key) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(new PyInteger(key)); + } catch (PyException exc) { + if (exc.match(Py.LookupError)) + return null; + throw exc; + } + return super.__finditem__(key); + } + + public PyObject __getitem__(PyObject key) { + // Same as __finditem__, without swallowing LookupErrors. This allows + // __getitem__ implementations written in Python to raise custom + // exceptions (such as subclasses of KeyError). + // + // We are forced to duplicate the code, instead of defining __finditem__ + // in terms of __getitem__. That's because PyObject defines __getitem__ + // in terms of __finditem__. Therefore, we would end with an infinite + // loop when self_type.lookup("__getitem__") returns null: + // + // __getitem__ -> super.__getitem__ -> __finditem__ -> __getitem__ + // + // By duplicating the (short) lookup and call code, we are safe, because + // the call chains will be: + // + // __finditem__ -> super.__finditem__ + // + // __getitem__ -> super.__getitem__ -> __finditem__ -> super.__finditem__ + + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(key); + return super.__getitem__(key); + } + + public void __setitem__(PyObject key,PyObject value) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setitem__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(key,value); + return; + } + super.__setitem__(key,value); + } + + public PyObject __getslice__(PyObject start,PyObject stop,PyObject step) { // ??? + if (step!=null) { + return __getitem__(new PySlice(start,stop,step)); + } + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getslice__"); + if (impl!=null) { + PyObject[]indices=PySlice.indices2(this,start,stop); + return impl.__get__(this,self_type).__call__(indices[0],indices[1]); + } + return super.__getslice__(start,stop,step); + } + + public void __setslice__(PyObject start,PyObject stop,PyObject step,PyObject value) { + if (step!=null) { + __setitem__(new PySlice(start,stop,step),value); + return; + } + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setslice__"); + if (impl!=null) { + PyObject[]indices=PySlice.indices2(this,start,stop); + impl.__get__(this,self_type).__call__(indices[0],indices[1],value); + return; + } + super.__setslice__(start,stop,step,value); + } + + public void __delslice__(PyObject start,PyObject stop,PyObject step) { + if (step!=null) { + __delitem__(new PySlice(start,stop,step)); + return; + } + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delslice__"); + if (impl!=null) { + PyObject[]indices=PySlice.indices2(this,start,stop); + impl.__get__(this,self_type).__call__(indices[0],indices[1]); + return; + } + super.__delslice__(start,stop,step); + } + + public void __delitem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delitem__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(key); + return; + } + super.__delitem__(key); + } + + public PyObject __call__(PyObject args[],String keywords[]) { + ThreadState ts=Py.getThreadState(); + if (ts.recursion_depth++>ts.systemState.getrecursionlimit()) + throw Py.RuntimeError("maximum __call__ recursion depth exceeded"); + try { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__call__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(args,keywords); + return super.__call__(args,keywords); + } finally { + --ts.recursion_depth; + } + } + + public PyObject __findattr_ex__(String name) { + return Deriveds.__findattr_ex__(this,name); + } + + public void __setattr__(String name,PyObject value) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setattr__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(PyString.fromInterned(name),value); + return; + } + super.__setattr__(name,value); + } + + public void __delattr__(String name) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delattr__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(PyString.fromInterned(name)); + return; + } + super.__delattr__(name); + } + + public PyObject __get__(PyObject obj,PyObject type) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__get__"); + if (impl!=null) { + if (obj==null) + obj=Py.None; + if (type==null) + type=Py.None; + return impl.__get__(this,self_type).__call__(obj,type); + } + return super.__get__(obj,type); + } + + public void __set__(PyObject obj,PyObject value) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__set__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(obj,value); + return; + } + super.__set__(obj,value); + } + + public void __delete__(PyObject obj) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delete__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(obj); + return; + } + super.__delete__(obj); + } + + public PyObject __pow__(PyObject other,PyObject modulo) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__pow__"); + if (impl!=null) { + PyObject res; + if (modulo==null) { + res=impl.__get__(this,self_type).__call__(other); + } else { + res=impl.__get__(this,self_type).__call__(other,modulo); + } + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__pow__(other,modulo); + } + + public void dispatch__init__(PyObject[]args,String[]keywords) { + Deriveds.dispatch__init__(this,args,keywords); + } + + public PyObject __index__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__index__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger||res instanceof PyLong) { + return res; + } + throw Py.TypeError(String.format("__index__ returned non-(int,long) (type %s)",res.getType().fastGetName())); + } + return super.__index__(); + } + + public Object __tojava__(Class c) { + // If we are not being asked by the "default" conversion to java, then + // we can provide this as the result, as long as it is a instance of the + // specified class. Without this, derived.__tojava__(PyObject.class) + // would broke. (And that's not pure speculation: PyReflectedFunction's + // ReflectedArgs asks for things like that). + if ((c!=Object.class)&&(c!=Serializable.class)&&(c.isInstance(this))) { + return this; + } + // Otherwise, we call the derived __tojava__, if it exists: + PyType self_type=getType(); + PyObject impl=self_type.lookup("__tojava__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(Py.java2py(c)).__tojava__(Object.class); + return super.__tojava__(c); + } + + public Object __coerce_ex__(PyObject o) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__coerce__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(o); + if (res==Py.NotImplemented) + return Py.None; + if (!(res instanceof PyTuple)) + throw Py.TypeError("__coerce__ didn't return a 2-tuple"); + return((PyTuple)res).getArray(); + } + return super.__coerce_ex__(o); + } + + public String toString() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__repr__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (!(res instanceof PyString)) + throw Py.TypeError("__repr__ returned non-string (type "+res.getType().fastGetName()+")"); + return((PyString)res).toString(); + } + return super.toString(); + } + +} diff --git a/src/org/python/core/__builtin__.java b/src/org/python/core/__builtin__.java --- a/src/org/python/core/__builtin__.java +++ b/src/org/python/core/__builtin__.java @@ -296,6 +296,7 @@ dict.__setitem__("True", Py.True); dict.__setitem__("False", Py.False); dict.__setitem__("bytes", PyString.TYPE); + dict.__setitem__("bytearray", PyByteArray.TYPE); dict.__setitem__("memoryview", PyMemoryView.TYPE); // Work in debug mode by default diff --git a/src/templates/bytearray.derived b/src/templates/bytearray.derived new file mode 100644 --- /dev/null +++ b/src/templates/bytearray.derived @@ -0,0 +1,4 @@ +base_class: PyByteArray +want_dict: true +ctr: +incl: object diff --git a/src/templates/mappings b/src/templates/mappings --- a/src/templates/mappings +++ b/src/templates/mappings @@ -10,6 +10,7 @@ ClasspathPyImporter.derived:org.python.core.ClasspathPyImporterDerived PyFileIO.derived:org.python.modules._fileio.PyFileIODerived array.derived:org.python.core.PyArrayDerived +bytearray.derived:org.python.core.PyByteArrayDerived classmethod.derived:org.python.core.PyClassMethodDerived complex.derived:org.python.core.PyComplexDerived defaultdict.derived:org.python.modules._collections.PyDefaultDictDerived diff --git a/tests/java/org/python/core/BaseBytesTest.java b/tests/java/org/python/core/BaseBytesTest.java new file mode 100644 --- /dev/null +++ b/tests/java/org/python/core/BaseBytesTest.java @@ -0,0 +1,927 @@ +package org.python.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.python.util.PythonInterpreter; + +import junit.framework.TestCase; + +/** + * Unit test of org.python.core.BaseBytes, a class that supplies much of the behaviour of the Jython + * bytearray. In fact, it supplies almost all the immutable behaviour, and is abstract. In order to + * test it, we need to define a concrete extension nested class MyBytes that is, almost, the Jython + * 3.x bytes type. + *

    + * Tests here are aimed at: + *

      + *
    • construction of a correct internal buffer through the init methods
    • . + *
    • access methods for immutable types (such as {@link BaseBytes#getslice(int, int, int)}
    • . + *
    • access methods for mutable types throw exceptions
    • . + *
    • the java.util.List interface
    • . + *
    + * From this list the test currently lacks testing deletion, testing the List API and memoryview. + *

    + * The bulk of the functionality is tested in the Python regression tests (from CPythonLib. This + * test class can be extended to test subclasses of BaseBytes, and all the tests defined here will + * run for the subclass. + */ +public class BaseBytesTest extends TestCase { + + // Constants for array sizes + public static final int SMALL = 7; // Less than minimum storage size + public static final int MEDIUM = 25; // Medium array size + public static final int LARGE = 10000; // Large enough for performance measurement + public static final int HUGE = 100000; // Serious performance challenge + + /** + * @param name + */ + public BaseBytesTest(String name) { + super(name); + } + + static PythonInterpreter interp = null; + + Random random; + + public static char toChar(int b) { + return Character.toChars(0xff & b)[0]; + } + + /** + * Turn a String into ints, but in the Python byte range, reducing character codes mod 256. + * + * @param s the string + * @return + */ + public static int[] toInts(String s) { + int n = s.length(); + int[] r = new int[n]; + for (int i = 0; i < n; i++) { + int c = s.codePointAt(i); + r[i] = 0xff & c; + } + return r; + } + + /** + * Generate ints at random in the range 0..255. + * + * @param random the random generator + * @param n length of array + * @return the array of random values + */ + public static int[] randomInts(Random random, int n) { + int[] r = new int[n]; + for (int i = 0; i < n; i++) { + r[i] = random.nextInt(256); + } + return r; + } + + /** + * Generate ints at random in a restricted range. + * + * @param random the random generator + * @param n length of array + * @param lo lowest value to generate + * @param hi highest value to generate + * @return the array of random values + */ + public static int[] randomInts(Random random, int n, int lo, int hi) { + int[] r = new int[n]; + int m = hi + 1 - lo; + for (int i = 0; i < n; i++) { + r[i] = lo + random.nextInt(m); + } + return r; + } + + /** + * Compare expected and result array sections at specified locations and length. + * + * @param expected reference values + * @param first first value to compare in expected values + * @param result bytearray from method under test + * @param start first value to compare in result values + * @param len number of values to compare + */ + static void checkInts(int[] expected, int first, BaseBytes result, int start, int len) { + int end = first + len; + if (end > expected.length) end = expected.length; + for (int i = first, j = start; i < end; i++, j++) + assertEquals("element value", expected[i], result.intAt(j)); + } + + /** + * Compare expected and result array in their entirety. + * + * @param expected + * @param result + */ + static void checkInts(int[] expected, BaseBytes result) { + // Size must be the same + assertEquals("size", expected.length, result.size()); + // And each element + for (int i = 0; i < expected.length; i++) + assertEquals("element value", expected[i], result.intAt(i)); + } + + /** + * Compare expected List and result array in their entirety. + * + * @param expected + * @param result + */ + static void checkInts(List expected, BaseBytes result) { + // Size must be the same + assertEquals("size", expected.size(), result.size()); + // And each element + for (int i = 0; i < result.size; i++) { + PyInteger res = result.pyget(i); + PyInteger exp = expected.get(i); + // System.out.printf(" expected[%2d]=%3d b[%2d]=%3d\n", + // i, exp.asInt(), i, res.asInt()); + assertEquals("element value", exp, res); + } + } + + /** + * Compare expected List and result object in their entirety. + * + * @param expected + * @param result + */ + static void checkInts(List expected, PyObject result) { + checkInts(expected, (BaseBytes)result); + } + + /** + * Turn array into Iterable, treating as unsigned (Python-style) bytes, and producing + * an abusive mixture of object types. + * + * @return iterable list + */ + public static Iterable iterableBytes(int[] source) { + List list = new ArrayList(source.length); + int choose = 0; + for (int b : source) { + switch(choose++){ + case 0: + PyInteger i = new PyInteger(b); + list.add(i); + break; + + case 1: + PyLong l = new PyLong(b); + list.add(l); + break; + + default: + PyString s = new PyString(toChar(b)); + list.add(s); + choose = 0; + break; + } + } + return list; + } + + /* + * (non-Javadoc) + * + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + random = new Random(20120310L); + } + + + /** + * Test method for {@link org.python.core.BaseBytes#init(int)} via MyBytes constructor, and for + * {@link org.python.core.BaseBytes#size()}. + */ + public void testSize() { + // Local constructor from byte[] + int[] aRef = toInts("Chaque coquillage incrust?"); + BaseBytes a = getInstance(aRef); + System.out.println(toString(a)); + assertEquals(aRef.length, a.size()); + // init(int) at various sizes + for (int n : new int[] {0, 1, 2, 7, 8, 9, MEDIUM, LARGE, HUGE}) { + a = getInstance(n); + // System.out.println(toString(a)); + assertEquals("size()", n, a.size()); + assertEquals("__len__()", n, a.__len__()); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(BaseBytes)} via constructor on MyBytes. + */ + public void testInit_intArray() { + int[] aRef = toInts("Dans la grotte o? nous nous aim?mes"); + BaseBytes a = getInstance(aRef); + // Copy constructor b = bytes(a) + BaseBytes b = getInstance(a); + System.out.println(toString(b)); + assertEquals(a.size(), b.size()); + // assertEquals(a.storage, b.storage); // Supposed to share? + // Check we got the same bytes + for (int i = 0; i < a.size(); i++) + assertEquals(a.intAt(i), b.intAt(i)); + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(BaseBytes)} via constructor on MyBytes. + */ + public void testInit_Iterable() { + int[] aRef = toInts("A sa particularit?."); + // Make an Iterable of that + Iterable ia = iterableBytes(aRef); + BaseBytes a = getInstance(ia); + System.out.println(toString(a)); + assertEquals(aRef.length, a.size()); + checkInts(aRef, a); + + // Special cases: zero length + BaseBytes b = getInstance(iterableBytes(new int[0])); + // System.out.println(toString(b)); + assertEquals(0, b.size()); + + // Special cases: very short (innards of init() take a short cut in this case) + int[] cRef = toInts(":-)"); + BaseBytes c = getInstance(iterableBytes(cRef)); + // System.out.println(toString(c)); + assertEquals(cRef.length, c.size()); + checkInts(cRef, c); + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(PyObject)} via constructor on MyBytes. + */ + public void testInit_PyObject() { + // A scary set of objects + final PyObject[] brantub = {null, + new PyInteger(5), + new PyString("\u00A0\u00A1\u00A2\u00A3\u00A4"), + getInstance(new int[] {180, 190, 200}), + new PyXRange(1, 301, 50)}; + // The array contents we should obtain + final int[][] prize = { {}, + {0, 0, 0, 0, 0}, + {160, 161, 162, 163, 164}, + {180, 190, 200}, + {1, 51, 101, 151, 201, 251}}; + // Work down the lists + for (int dip = 0; dip < brantub.length; dip++) { + int[] aRef = prize[dip]; + BaseBytes a = getInstance(brantub[dip]); + // System.out.println(toString(a)); + assertEquals(aRef.length, a.size()); + // Check we got the same bytes + checkInts(aRef, a); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#init(PyObject)} via constructor on MyBytes, + * but where every example produced some kind of exception. + */ + public void testInit_Exceptions() { + // Need interpreter for exceptions to be formed properly + interp = new PythonInterpreter(); + // A scary set of objects + final PyObject[] brantub = {Py.None, + new PyInteger(-1), + new PyLong(0x80000000L), + new PyString("\u00A0\u0100\u00A2\u00A3\u00A4"), + new PyString("\u00A0\u00A0\u1000\u00A3\u00A4"), + new PyXRange(3, -2, -1), + new PyXRange(250, 257)}; + // The PyException types we should obtain + final PyObject[] boobyPrize = {Py.TypeError, // None + Py.ValueError, // -1 + Py.OverflowError, // 0x80000000L + Py.ValueError, // \u0100 byte + Py.ValueError, // \u1000 byte + Py.ValueError, // -1 in iterable + Py.ValueError // 256 in iterable + }; + // Work down the lists + for (int dip = 0; dip < brantub.length; dip++) { + PyObject aRef = boobyPrize[dip]; + try { + BaseBytes a = getInstance(brantub[dip]); + System.out.println(toString(a)); + fail("Exception not thrown for " + brantub[dip]); + } catch (PyException pye) { + // System.out.println(pye); + PyObject a = pye.type; + assertEquals(aRef, a); + } + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#pyget(int)}. + */ + public void testPyget() { + // Need interpreter + interp = new PythonInterpreter(); + // Fill and access via pyget + int[] aRef = randomInts(random, MEDIUM); + BaseBytes a = getInstance(aRef); + for (int i = 0; i < MEDIUM; i++) { + PyInteger r = a.pyget(i); + // System.out.printf(" aRef[%2d]=%3d r=%3d\n", i, aRef[i], r.asInt()); + assertEquals(aRef[i], r.asInt()); + } + // Check IndexError exceptions generated + for (int i : new int[] {-1, -100, MEDIUM, MEDIUM + 1}) { + try { + PyInteger r = a.pyget(i); + fail("Exception not thrown for pyget(" + i + ") =" + r); + } catch (PyException pye) { + assertEquals(Py.IndexError, pye.type); + // System.out.printf(" Exception: %s\n", pye); + } + } + } + + /** + * Test method for {@link BaseBytes#getslice(int, int, int)}. + * + * @see PySequence#__getslice__(PyObject, PyObject) + */ + public void testGetslice() { + // getslice() deals with start, stop, step already 'interpreted' by SequenceIndexDelegate. + String ver = "L'un a la pourpre de nos ?mes"; + final int L = ver.length(); + int[] aRef = toInts(ver); + BaseBytes a = getInstance(aRef); + List bList = new ArrayList(L); + + final int[] posStart = new int[] {0, 1, 18, L - 8, L - 1}; + final int[] negStart = new int[] {0, 3, 16, L - 10, L - 1}; + + // Positive step + for (int step = 1; step < 4; step++) { + for (int start : posStart) { + // Use step positively + for (int stop = start; stop <= L; stop++) { + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i < stop; i += step) { + // System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, step, i); + bList.add(new PyInteger(aRef[i])); + } + // Generate test result + // System.out.printf(" getslice(%d,%d,%d)\n", start, stop, step); + BaseBytes b = a.getslice(start, stop, step); + // System.out.println(toString(b)); + // Now check size and contents + checkInts(bList, b); + } + } + } + + // Negative step + for (int step = -1; step > -4; step--) { + for (int start : negStart) { + // Use step positively + for (int stop = -1; stop <= start; stop++) { + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i > stop; i += step) { + // System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, step, i); + bList.add(new PyInteger(aRef[i])); + } + // Generate test result + // System.out.printf(" getslice(%d,%d,%d)\n", start, stop, step); + BaseBytes b = a.getslice(start, stop, step); + // System.out.println(toString(b)); + // Now check size and contents + checkInts(bList, b); + } + } + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#repeat(int)}. + */ + public void testRepeatInt() { + String spam = "Spam, "; // Could it be anything else? + final int maxCount = 10; + final int L = spam.length(); + int[] aRef = toInts(spam); + BaseBytes a = getInstance(aRef); + + for (int count = 0; count <= maxCount; count++) { + // Reference answer + int[] bRef = new int[count * L]; + for (int i = 0; i < count; i++) + for (int j = 0; j < L; j++) + bRef[i * L + j] = aRef[j]; + // Test + BaseBytes b = a.repeat(count); + // System.out.println(toString(b)); + checkInts(bRef, b); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#pyset(int,PyObject)}, that it throws an + * exception by default. Override in tests of mutable subclasses. + */ + public void testPyset() { + PyObject bRef = Py.TypeError; + int[] aRef = toInts("This immutable type seems to allow modifications."); + BaseBytes a = getInstance(aRef); + int start = a.size() / 2; + PyInteger x = new PyInteger('x'); + + try { + a.pyset(start, x); + System.out.println(toString(a)); + fail(String.format("Exception not thrown for pyset(%d,%s)", start, x)); + } catch (PyException pye) { + // System.out.println(pye); + PyObject b = pye.type; + assertEquals(bRef, b); + } + } + + /** + * Test method for {@link org.python.core.BaseBytes#setslice(int,int,int,PyObject)}, that it + * throws an exception by default. Override in tests of mutable subclasses. + */ + public void testSetslice3() { + PyObject bRef = Py.TypeError; + int[] aRef = toInts("This immutable type seems to allow modifications."); + BaseBytes a = getInstance(aRef); + int start = a.size() / 4; + int stop = (3 * a.size() + 3) / 4; + int step = 3; + BaseBytes x = new MyBytes(randomInts(random, SMALL)); + + try { + a.setslice(start, stop, step, x); + System.out.println(toString(a)); + fail(String.format("Exception not thrown for setslice(%d,%d,%d,%s)", start, stop, step, + x)); + } catch (PyException pye) { + // System.out.println(pye); + PyObject b = pye.type; + assertEquals(bRef, b); + } + } + + /* + * Note that JUnit test classes extending this one inherit all the test* methods, and they will + * be run by JUnit. Each test uses getInstance() methods where it might have used a constructor + * with a similar signature. The idea is to override the getInstance() methods to return an + * instance of the class actually under test in the derived test. + */ + public BaseBytes getInstance(PyType type) { + return new MyBytes(type); + } + + public BaseBytes getInstance() { + return new MyBytes(); + } + + public BaseBytes getInstance(int size) { + return new MyBytes(size); + } + + public BaseBytes getInstance(int[] value) { + return new MyBytes(value); + } + + public BaseBytes getInstance(BaseBytes value) throws PyException { + return new MyBytes(value); + } + + public BaseBytes getInstance(MemoryViewProtocol value) throws PyException { + return new MyBytes(value); + } + + public BaseBytes getInstance(Iterable value) throws PyException { + return new MyBytes(value); + } + + public BaseBytes getInstance(PyString arg, PyObject encoding, PyObject errors) + throws PyException { + return new MyBytes(arg, encoding, errors); + } + + public BaseBytes getInstance(PyString arg, String encoding, String errors) throws PyException { + return new MyBytes(arg, encoding, errors); + } + + public BaseBytes getInstance(PyObject arg) throws PyException { + return new MyBytes(arg); + } + +// protected BaseBytes getInstance(int start, int stop, BaseBytes source) { +// return new MyBytes(start, stop, source); +// } + + /** + * Extension of class under test that makes the internal variables visible and adds constructors + * like a derived class would. + */ + public static class MyBytes extends BaseBytes { + + public static final PyType TYPE = PyType.fromClass(MyBytes.class); + + /** + * Create a zero-length Python byte array of explicitly-specified sub-type + * + * @param type explicit Jython type + */ + public MyBytes(PyType type) { + super(type); + } + + /** + * Create a zero-length Python byte array of my type. + */ + public MyBytes() { + super(TYPE); + } + + /** + * Create zero-filled Python byte array of specified size. + * + * @param size of byte array + */ + public MyBytes(int size) { + super(TYPE, size); + } + + /** + * Create from integer array + * + * @param value + */ + MyBytes(int[] value) { + super(TYPE, value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the source byte array. + * + * @param value of the bytes + */ + public MyBytes(BaseBytes value) { + super(TYPE); + init(value); + } + + /** + * Create a new array filled exactly by a copy of the contents of the source. + * + * @param value source of the bytes (and size) + */ + public MyBytes(MemoryViewProtocol value) { + super(TYPE); + init(value.getMemoryView()); + } + + /** + * Create a new array filled from an iterable of PyObject. The iterable must yield objects + * convertible to Python bytes (non-negative integers less than 256 or strings of length 1). + * + * @param value of the bytes + */ + public MyBytes(Iterable value) { + super(TYPE); + init(value); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually + * a PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (must be a string type) + * @param errors name of optional errors policy (must be a string type) + */ + public MyBytes(PyString arg, PyObject encoding, PyObject errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new array by encoding a PyString argument to bytes. If the PyString is actually + * a PyUnicode, the encoding must be explicitly specified. + * + * @param arg primary argument from which value is taken + * @param encoding name of optional encoding (may be null to select the default for this + * installation) + * @param errors name of optional errors policy + */ + public MyBytes(PyString arg, String encoding, String errors) { + super(TYPE); + init(arg, encoding, errors); + } + + /** + * Create a new MyBytes object from an arbitrary Python object according to the same rules + * as apply in Python to the bytes() constructor: + *

      + *
    • bytes() Construct a zero-length bytes (arg is null).
    • + *
    • bytes(int) Construct a zero-initialized bytes of the given length.
    • + *
    • bytes(iterable_of_ints) Construct from iterable yielding integers in [0..255]
    • + *
    • bytes(string [, encoding [, errors] ]) Construct from a text string, optionally using + * the specified encoding.
    • + *
    • bytes(unicode, encoding [, errors]) Construct from a unicode string using the + * specified encoding.
    • + *
    • bytes(bytes_or_bytearray) Construct as a mutable copy of existing bytes or bytearray + * object.
    • + *
    + * When it is necessary to specify an encoding, as in the Python signature + * bytes(string, encoding[, errors]), use the constructor + * {@link #MyBytes(PyString, String, String)}. If the PyString is actually a PyUnicode, an + * encoding must be specified, and using this constructor will throw an exception about + * that. + * + * @param arg primary argument from which value is taken (may be null) + * @throws PyException in the same circumstances as bytes(arg), TypeError for non-iterable, + * non-integer argument type, and ValueError if iterables do not yield byte + * [0..255] values. + */ + public MyBytes(PyObject arg) throws PyException { + super(TYPE); + init(arg); + } + + /** + * Constructor for local use that avoids copying the source data, providing a range-view + * into it. The need for this arises (probably) during expressions that refer to a slice as + * just one term. It is safe because MyBytes is immutable. But it may not be wise if the + * source object is a large array from which only a small part needs to be retained in + * memory. + * + * @param type explicit Jython type + * @param start index of first byte to use in source + * @param stop 1 + index of last byte to use in source + * @param source of the bytes + */ + protected MyBytes(int start, int stop, BaseBytes source) { + super(TYPE); + setStorage(source.storage, stop - start, start); + } + + /** + * Returns a PyByteArray that repeats this sequence the given number of times, as in the + * implementation of __mul__ for strings. + * + * @param count the number of times to repeat this. + * @return this byte array repeated count times. + */ + @Override + protected MyBytes repeat(int count) { + MyBytes ret = new MyBytes(); + ret.setStorage(repeatImpl(count)); + return ret; + } + + /** + * Returns a range of elements from the sequence. + * + * @see org.python.core.PySequence#getslice(int, int, int) + */ + @Override + protected MyBytes getslice(int start, int stop, int step) { + MyBytes r; + if (step == 1) { + // This is a contiguous slice [start:stop] so we can share storage + r = new MyBytes(); + if (stop > start) r.setStorage(storage, stop - start, start + offset); + } else { + // This is an extended slice [start:stop:step] so we have to copy elements from it + r = new MyBytes(sliceLength(start, stop, step)); + int iomax = r.size + r.offset; + for (int io = r.offset, jo = start; io < iomax; jo += step, io++) + r.storage[io] = storage[jo]; // Assign r[i] = this[j] + } + return r; + } + + /** + * Return number of elements + * + * @see org.python.core.PyObject#__len__() + */ + @Override + public int __len__() { + return size; + } + + } + + /** + * An object that for test purposes (of construction and slice assignment) contains an array of + * values that it is able to offer for reading through the MemoryView interface. + */ + public static class MemoryViewable extends PyObject implements MemoryViewProtocol { + + public static final PyType TYPE = PyType.fromClass(MemoryViewable.class); + + private MemoryView mv; + private byte[] store; + + /** + * Store integer array as bytes: range must be 0..255 inclusive. + * + * @param value integers to store + */ + MemoryViewable(int[] value) { + super(TYPE); + int n = value.length; + store = new byte[n]; + for (int i = 0; i < n; i++) + store[i] = (byte)value[i]; + } + + @Override + public MemoryView getMemoryView() { + if (mv == null) mv = new MemoryViewImpl(); + return mv; + } + + /** + * All instances of MemoryViewable have one dimension with stride one. + */ + private static final PyTuple STRIDES = new PyTuple(Py.One); + + /** + * Very simple MemoryView for one-dimensional byte array. + */ + class MemoryViewImpl implements MemoryView { + + private final PyTuple shape = new PyTuple(new PyInteger(store.length)); + + @Override + public String get_format() { + return "B"; + } + + @Override + public int get_itemsize() { + return 1; + } + + @Override + public PyTuple get_shape() { + return shape; + } + + @Override + public int get_ndim() { + return 1; + } + + @Override + public PyTuple get_strides() { + return STRIDES; + } + + @Override + public boolean get_readonly() { + return true; + } + + } + } + + /** + * Stringify in a form helpful when testing buffer manipulation. Show picture if not too long. + */ + protected String toString(BaseBytes b) { + Image i = new Image(); + i.showSummary(b); + if (b.storage.length >= 0 && b.storage.length <= 70) { + i.padTo(15); + i.showContent(b); + } + return i.toString(); + } + + /** + * Apparatus for producing a nice representation when studying buffer management. + */ + protected static class Image { + + private StringBuilder image = new StringBuilder(100); + + private void repeat(char c, int n) { + for (int i = 0; i < n; i++) + image.append(i == 0 ? '|' : ' ').append(c); + } + + // Show in image s[pos:pos+n] (as 2*n characters) + private void append(byte[] s, int pos, int n) { + if (pos < 0 || pos + n > s.length) return; + for (int i = 0; i < n; i++) { + int c = 0xff & ((int)s[pos + i]); + if (c == 0) + c = '.'; + else if (Character.isISOControl(c)) c = '#'; + image.append(i == 0 ? '|' : ' ').append(toChar(c)); + } + } + + // Show an extent of n bytes (as 2*n charactrs) + public void padTo(int n) { + while (n > image.length()) + image.append(' '); + } + + /** + * Write summary numbers offset [ size ] remainder + * + * @param b + */ + public String showSummary(BaseBytes b) { + image.append(b.offset); + image.append(" [ ").append(b.size).append(" ] "); + image.append(b.storage.length - (b.offset + b.size)); + return image.toString(); + } + + /** + * Make text image of just the buffer boundaries. + * + * @param b + */ + public String showExtent(BaseBytes b) { + repeat('-', b.offset); + repeat('x', b.size); + int tail = b.storage.length - (b.offset + b.size); + repeat('-', tail); + image.append('|'); + return image.toString(); + } + + /** + * Make text image of the buffer content and boundaries. + * + * @param b + */ + public String showContent(BaseBytes b) { + append(b.storage, 0, b.offset); + append(b.storage, b.offset, b.size); + int tail = b.storage.length - (b.offset + b.size); + append(b.storage, b.offset + b.size, tail); + image.append('|'); + return image.toString(); + } + + @Override + public String toString() { + return image.toString(); + } + } + + /** + * Example code equivalent to the code illustrating suboffsets in the C API at The new-style Py_buffer + * struct. buf is an n-dimensional array of Object, implementing the storage of + * some Python type, and it is required to access one element of it at an index defined by n + * integers in sequence. + * + * @param n The number of dimensions the memory represents as a multi-dimensional array. + * @param buf An n-dimensional array containing the value of the object + * @param strides An array of length n giving the number of elements to skip to get to a new + * element in each dimension + * @param suboffsets An array the length of n. + * @param indices An array of n indices indexing the element to retrieve. + * @return + */ + private static Object getItem(int n, Object buf, int[] strides, int[] suboffsets, int[] indices) { + for (int i = 0; i < n; i++) { + Object[] p = (Object[])buf; + buf = p[indices[i] * strides[i] + suboffsets[i]]; + } + return buf; + } + + /* + * If it was an ndim-dimensional array of byte, we treat it as an (ndim-1)-dimensional array of + * byte[] arrays. This method exemplifies getting just one byte. + */ + private static byte getByte(int ndim, Object buf, int[] strides, int[] suboffsets, int[] indices) { + int n = ndim - 1; + byte[] b = (byte[])getItem(n, buf, strides, suboffsets, indices); + return b[indices[n] + suboffsets[n]]; + } + +} diff --git a/tests/java/org/python/core/PyByteArrayTest.java b/tests/java/org/python/core/PyByteArrayTest.java new file mode 100644 --- /dev/null +++ b/tests/java/org/python/core/PyByteArrayTest.java @@ -0,0 +1,1061 @@ +package org.python.core; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import org.python.util.PythonInterpreter; + + +/** + * JUnit tests for PyByteArray. + */ +public class PyByteArrayTest extends BaseBytesTest { + + /** + * Constructor required by JUnit. + * @param name + */ + public PyByteArrayTest(String name) { + super(name); + } + + + /** + * Generate character codes for in a pattern matching an intended deletion or slice to be + * replaced. If c="adb", something like b'aaaaaaddddbbbb' where the 'd' characters should be + * deleted or replaced in the slice operation. + * + * @param na number of c.charAt(0) characters + * @param nd number of c.charAt(1) characters + * @param nb number of c.charAt(2) characters + * @param c character codes + * @return filled array + */ + public static int[] patternInts(int na, int nd, int nb, String c) { + int[] r = new int[na + nd + nb]; + int p = 0; + for (int i = 0; i < na; i++) + r[p++] = c.charAt(0); + for (int i = 0; i < nd; i++) + r[p++] = c.charAt(1); + for (int i = 0; i < nb; i++) + r[p++] = c.charAt(2); + return r; + } + + /** + * Generate character codes for 'a', 'D', 'b' in a pattern matching an intended deletion or + * slice to be replaced. Something like b'aaaaaaddddbbbb' where the 'E' characters should be + * deleted or replaced in the slice operation. + * + * @param na number of a characters + * @param nd number of D characters + * @param nb number of b characters + * @return filled array + */ + public static int[] adbInts(int na, int nd, int nb) { + return patternInts(na, nd, nb, "aDb"); + } + + /** + * Generate character codes for 'a', 'E', 'b' in a pattern matching an intended result of slice + * replacement. Something like b'aaaaaaEEEbbbb' where the 'E' characters are the replacement in + * the slice operation. + * + * @param na number of a characters + * @param ne number of E characters + * @param nb number of b characters + * @return filled array + */ + public static int[] aebInts(int na, int ne, int nb) { + return patternInts(na, ne, nb, "aEb"); + } + + /** + * Generate a tuple of int arrays at random in the range 0..255 for testing slice operations. + * In effect, the method generates 4 arrays of random data A, B, D, E and returns an array of three arrays formed thus: + * { A + D + B, A + E + B, E } where + means concatenation. This can be used to test slice + * assignment and deletion. + * + * @param random the random generator + * @param na the number of elements in A + * @param nd the number of elements in D (the deleted material) + * @param nb the number of elements in B + * @param ne the number of elements in E (the inserted material, 0 for slice deletion) + * @return three arrays of length na + nd + nb, na + ne + nb, and ne. + */ + public static int[][] randomSliceProblem(Random random, int na, int nd, int nb, int ne) { + int[] adb = new int[na + nd + nb]; + int[] aeb = new int[na + ne + nb]; + int[] e = new int[ne]; + int[][] ret = { adb, aeb, e }; + int p=0, q = 0; + // The A values go into adb and aeb + for (int i = 0; i < na; i++) { + int a = random.nextInt(256); + adb[p++] =a; + aeb[q++] =a; + } + // The D values go into adb only + for (int i = 0; i < nd; i++) { + int d = random.nextInt(256); + adb[p++] =d; + } + // The E values go into e and aeb + for (int i = 0; i < ne; i++) { + int x = random.nextInt(256); + e[p++] =x; + aeb[q++] =x; + } + // The B values go into adb and aeb + for (int i = 0; i < nb; i++) { + int b = random.nextInt(256); + adb[p++] =b; + aeb[q++] =b; + } + return ret; + } + + + /** + * Check result of slice operations, synthesised from the elements passed. This method accepts + * the 'dimensions' of a slice problem and tests whether a resulting byte array contains the + * correct result. The data elements have come from two existing arrays of (potentially) random + * data X and Y. Let N=na+nd+nb. The client has generated, in effect, 4 arrays A=X[:na], + * B=X[-nb:N], D=X[na:nb] and E=Y[:ne], and posed the problem setslice( A + D + B, E ), where + + * means concatenation in this expression, to which the answer should be A + E + B. This method + * checks that the result is exactly that. + * + * @param na the number of elements in A + * @param nd the number of elements in D (the deleted material) + * @param nb the number of elements in B + * @param ne the number of elements in E (the inserted material, 0 for slice deletion) + * @param x source of the A, D and B data + * @param y source of the E data + * @param result the result to be tested against A+E+B + */ + public static void checkSlice(int na, int nd, int nb, int ne, int[] x, int[] y, BaseBytes result) { + // Check the size is right + assertEquals("size", na + ne + nb, result.size()); + // Check that A is preserved + checkInts(x, 0, result, 0, na); + // Check that E is inserted + checkInts(y, 0, result, na, ne); + // Check that B is preserved + checkInts(x, na + nd, result, na + ne, nb); + } + + /** + * Check result of extended slice operations, synthesised from the elements passed. This method + * accepts the 'dimensions' of a slice problem and tests whether a resulting byte array contains + * the correct result. The result array has been filled from (the whole of) array x[], then + * slice assignment took place from y[k] to element u[start + k*step]. + * + * @param start + * @param step + * @param n number of steps + * @param x source of the original data + * @param y source of the assigned data + * @param u the result to be tested against properly selected elements of x and y + */ + public static void checkSlice(int start, int step, int n, int[] x, int[] y, BaseBytes u) { + // Check the size is right + assertEquals("size", x.length, u.size()); + if (step > 0) { + // Check before start of slice + int px = 0, py = 0; + for (; px < start; px++) + assertEquals("before slice", x[px], u.intAt(px)); + // Check slice-affected region at n assignments and n-1 gaps of length step-1. + if (n>0) assertEquals("first affected", y[py++], u.intAt(px++)); + for (int i = 1; i < n; i++) { + for (int j = 1; j < step; j++, px++) { + assertEquals("in gap", x[px], u.intAt(px)); + } + assertEquals("next affected", y[py++], u.intAt(px++)); + } + // Check after slice-affected region + for (; px < x.length; px++) + assertEquals("after slice", x[px], u.intAt(px)); + + } else { + // Negative step but easier to think about as a positive number + step = -step; + + // Check after start of slice + int px = x.length - 1, py = 0; + for (; px > start; --px) + assertEquals("after slice", x[px], u.intAt(px)); + // Check slice-affected region at n assignments and n-1 gaps of length step-1. + if (n>0) assertEquals("first affected", y[py++], u.intAt(px--)); + for (int i = 1; i < n; i++) { + for (int j = 1; j < step; j++, px--) { + assertEquals("in gap", x[px], u.intAt(px)); + } + assertEquals("next affected", y[py++], u.intAt(px--)); + } + // Check before slice-affected region + for (; px >= 0; px--) + assertEquals("before slice", x[px], u.intAt(px)); + + } + } + + /* (non-Javadoc) + * @see org.python.core.BaseBytesTest#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + } + + + /** + * Test method for {@link PyObject#__getslice__(PyObject, PyObject)}. + * + * @see BaseBytes#getslice(int, int) + */ + public void test__getslice__2() { + int verbose = 0; + // __getslice__() deals with start, stop values also relative to the end. + String ver = "D?rob?e au sang de nos c?urs"; + final int L = ver.length(); + int[] aRef = toInts(ver); + BaseBytes a = getInstance(aRef); + List bList = new ArrayList(L); + + // Need interpreter (for Py.None and exceptions) + interp = new PythonInterpreter(); + + final int[] posStart = new int[] {0, 8, 16, L - 5, L - 1}; + + for (int start : posStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start > 0) + // The other way of saying [start:stop] is [start-L:stop] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [0:stop] is [:stop] + pyStart_L = Py.None; + + for (int stop = start; stop <= L; stop++) { + + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i < stop; i++) { + if (verbose >= 5) System.out.printf(" (%d,%d) i=%d\n", start, stop, i); + bList.add(new PyInteger(aRef[i])); + } + + // PyObject versions of stop + if (stop < L) + // The other way of saying [start:stop:+s] is [start:stop-L:+s] + pyStop_L = new PyInteger(stop - L); + else + // The other way of saying [start:L:+s] is [start::+s] + pyStop_L = Py.None; + pyStop = new PyInteger(stop); + + // Generate test result and check it + doTest__getslice__2(a, pyStart, pyStop, bList, verbose + 2); + // Repeat same result specifying start relative to end + doTest__getslice__2(a, pyStart_L, pyStop, bList, verbose); + // Repeat same result specifying stop relative to end + doTest__getslice__2(a, pyStart, pyStop_L, bList, verbose); + // Repeat same result specifying start and stop relative to end + doTest__getslice__2(a, pyStart_L, pyStop_L, bList, verbose); + } + } + } + + /** + * Common code to check {@link PyByteArray#__getslice__(PyObject, PyObject)} against a reference + * answer. + * + * @param a object under test + * @param pyStart + * @param pyStop + * @param bList reference answer + * @param verbose 0..4 control output + */ + private void doTest__getslice__2(BaseBytes a, + PyObject pyStart, + PyObject pyStop, + List bList, + int verbose) { + if (verbose >= 4) System.out.printf(" __getslice__(%s,%s)\n", pyStart, pyStop); + PyObject b = a.__getslice__(pyStart, pyStop); + if (verbose >= 3) System.out.println(toString((BaseBytes)b)); + checkInts(bList, b); + } + + /** + * Test method for {@link PyObject#__getslice__(PyObject, PyObject, PyObject)}. + * + * @see BaseBytes#getslice(int, int, int) + */ + public void test__getslice__3() { + int verbose = 0; + // __getslice__() deals with start, stop values also relative to the end. + String ver = "Quand je br?le et que tu t'enflammes ;"; + final int L = ver.length(); + int[] aRef = toInts(ver); + BaseBytes a = getInstance(aRef); + List bList = new ArrayList(L); + + // Need interpreter (for Py.None and exceptions) + interp = new PythonInterpreter(); + + // Positive step + + final int[] posStart = new int[] {0, 9, 22, L - 11, L - 1}; + // final int[] posStart = new int[] {0, 9, L-1}; + + for (int step = 1; step < 4; step++) { + PyInteger pyStep = new PyInteger(step); + for (int start : posStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start > 0) + // The other way of saying [start:stop:+s] is [start-L:stop:+s] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [0:stop:+s] is [:stop:+s] + pyStart_L = Py.None; + + for (int stop = start; stop <= L; stop++) { + + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i < stop; i += step) { + if (verbose >= 5) System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, + step, i); + bList.add(new PyInteger(aRef[i])); + } + + // PyObject versions of stop + if (stop < L) + // The other way of saying [start:stop:+s] is [start:stop-L:+s] + pyStop_L = new PyInteger(stop - L); + else + // The other way of saying [start:L:+s] is [start::+s] + pyStop_L = Py.None; + pyStop = new PyInteger(stop); + + // Generate test result and check it + doTest__getslice__3(a, pyStart, pyStop, pyStep, bList, verbose + 2); + // Repeat same result specifying start relative to end + doTest__getslice__3(a, pyStart_L, pyStop, pyStep, bList, verbose); + // Repeat same result specifying stop relative to end + doTest__getslice__3(a, pyStart, pyStop_L, pyStep, bList, verbose); + // Repeat same result specifying start and stop relative to end + doTest__getslice__3(a, pyStart_L, pyStop_L, pyStep, bList, verbose); + } + } + } + + // Negative step + + final int[] negStart = new int[] {0, 5, 14, L - 10, L - 1}; + // final int[] negStart = new int[] {0, 5, L-1}; + + for (int step = -1; step > -4; step--) { + PyInteger pyStep = new PyInteger(step); + for (int start : negStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start < L - 1) + // The other way of saying [start:stop:-s] is [start-L:stop:-s] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [L-1:stop:-s] is [:stop:-s] + pyStart_L = Py.None; + + for (int stop = start; stop >= -1; stop--) { + + // Make a reference answer by picking elements of aRef in slice pattern + bList.clear(); + for (int i = start; i > stop; i += step) { + if (verbose >= 5) System.out.printf(" (%d,%d,%d) i=%d\n", start, stop, + step, i); + bList.add(new PyInteger(aRef[i])); + } + + // PyObject versions of stop + if (stop >= 0) + // The other way of saying [start:stop:-s] is [start:stop-L:-s] + pyStop_L = new PyInteger(stop - L); + else { + // intended final value is 0, but [start:-1:-s] doesn't mean that + stop = -(L+1); // This does. + pyStop_L = Py.None; // And so does [start::-s] + } + pyStop = new PyInteger(stop); + + // Generate test result and check it + doTest__getslice__3(a, pyStart, pyStop, pyStep, bList, verbose + 2); + // Repeat same result specifying start relative to end + doTest__getslice__3(a, pyStart_L, pyStop, pyStep, bList, verbose); + // Repeat same result specifying stop relative to end + doTest__getslice__3(a, pyStart, pyStop_L, pyStep, bList, verbose); + // Repeat same result specifying start and stop relative to end + doTest__getslice__3(a, pyStart_L, pyStop_L, pyStep, bList, verbose); + } + } + } + } + + /** + * Common code to check {@link PyByteArray#__getslice__(PyObject, PyObject, PyObject)} against a + * reference answer. + * + * @param a answer from method under test + * @param pyStart + * @param pyStop + * @param pyStep + * @param bList reference answer + * @param verbose 0..4 control output + */ + private void doTest__getslice__3(BaseBytes a, + PyObject pyStart, + PyObject pyStop, + PyObject pyStep, + List bList, + int verbose) { + if (verbose >= 4) System.out.printf(" __getslice__(%s,%s,%s)\n", pyStart, pyStop, pyStep); + PyObject b = a.__getslice__(pyStart, pyStop, pyStep); + if (verbose >= 3) System.out.println(toString((BaseBytes)b)); + checkInts(bList, b); + } + + + /** + * Test method for {@link PyByteArray#__setitem__(int,PyObject)}, and through it of + * {@link PyByteArray#pyset(int,PyObject)}. + */ + public void testPyset() { + int verbose = 0; + + // Need interpreter + interp = new PythonInterpreter(); + + // Fill with random stuff + int[] aRef = randomInts(random, MEDIUM); + BaseBytes a = getInstance(aRef); + for (int i = 0; i < MEDIUM; i++) { + int b = aRef[i] ^ 0x55; // != a[i] + PyInteger pyb = new PyInteger(b); + a.__setitem__(i, pyb); + int ai = a.pyget(i).asInt(); + if (verbose >= 3) { + System.out.printf(" __setitem__(%2d,%3d) : a[%2d]=%3d\n", i, b, i, ai); + } + assertEquals(b, ai); + } + + // Check ValueError exceptions generated + int[] badValue = {256, Integer.MAX_VALUE, -1, -2, -100, -0x10000, Integer.MIN_VALUE}; + for (int i : badValue) { + PyInteger b = new PyInteger(i); + try { + a.__setitem__(0, b); + fail("Exception not thrown for __setitem__(" + 0 + ", " + b + ")"); + } catch (PyException pye) { + assertEquals(Py.ValueError, pye.type); + if (verbose >= 2) System.out.printf(" Exception: %s\n", pye); + } + } + + // Check IndexError exceptions generated + PyInteger x = new PyInteger(10); + for (int i : new int[] {-1 - MEDIUM, -100 - MEDIUM, MEDIUM, MEDIUM + 1}) { + try { + a.__setitem__(i, x); + fail("Exception not thrown for __setitem__(" + i + ", x)"); + } catch (PyException pye) { + assertEquals(Py.IndexError, pye.type); + if (verbose >= 2) System.out.printf(" Exception: %s\n", pye); + } + } + + } + + /** + * Test method for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is simple (a contiguous 2-argument slice). + */ + public void testSetslice2() { + int verbose = 0; + + // Tests where we transform aaaaaDDDDbbbbb into aaaaaEEEEEEEbbbbb. + // Lists of the lengths to try, for each of the aaaa, DDDD, bbbb, EEEEEE sections + int[] naList = {2, 5, 0}; // Interesting cases: slice is at start, or not at start + int[] ndList = {5, 20, 0}; // Slice to replace is small, large or zero + int[] nbList = {4, 7, 0}; // Interesting cases: slice is at end, or not at end + int[] neList = {4, 5, 6, 20, 0}; // Insert smaller, same, large or zero + + for (int ne : neList) { + int[] eInts = new int[ne]; + Arrays.fill(eInts, 'E'); + PyByteArray e = new PyByteArray(eInts); + + for (int nd : ndList) + for (int na : naList) + for (int nb : nbList) { + int[] aRef = adbInts(na, nd, nb); + int[] bRef = aebInts(na, ne, nb); + + PyByteArray b = getInstance(aRef); + + byte[] oldStorage = b.storage; + + if (verbose >= 2) { + System.out.printf("setslice(%d,%d,%d,e[len=%d])\n", + na, na + nd, 1, ne); + if (verbose >= 3) System.out.println(toString(b)); + } + + b.setslice(na, na + nd, 1, e); + + if (verbose >= 2) { + boolean avAlloc = (b.storage != oldStorage) + && (bRef.length <= oldStorage.length); + if (b.storage.length * 2 < oldStorage.length) avAlloc = false; + System.out.println(toString(b) + (avAlloc ? " avoidable new" : "")); + } + checkInts(bRef, b); + } + } + + // Insertions at a range of positions and all sizes with random data + + final int AMAX = SMALL; + final int BMAX = SMALL; + final int DMAX = MEDIUM; + final int EMAX = MEDIUM; + + int[] xInts = randomInts(random, AMAX + DMAX + BMAX, 'u', 'z'); + int[] yInts = randomInts(random, EMAX, 'A', 'H'); + PyByteArray x = getInstance(xInts); + PyByteArray y = getInstance(yInts); + + int[] nbList2 = {0, 1, BMAX}; + + for (int na = 0; na <= AMAX; na++) + for (int nb : nbList2) { + for (int nd = 0; nd < DMAX; nd++) + for (int ne = 0; ne < EMAX; ne++) { + PyByteArray u = x.getslice(0, na + nd + nb, 1); + PyByteArray e = y.getslice(0, ne, 1); + if (verbose >= 2) { + System.out.printf("setslice(start=%d, stop=%d, step=%d, e[len=%d])\n", + na, na + nd, 1, ne); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.setslice(na, na + nd, 1, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(na, nd, nb, ne, xInts, yInts, u); + } + } + } + + /** + * Test method for {@link PyByteArray#__setslice__(PyObject, PyObject, PyObject)}, when the + * slice to replace is simple (a contiguous 2-argument slice). + */ + public void test__setslice__2() { + int verbose = 0; + // __setslice__() deals with start, stop values also relative to the end. + String ver = "Cet autre affecte tes langueurs"; + final int L = ver.length(); + int[] uRef = toInts(ver); + + // Need interpreter (for Py.None and exceptions) + interp = new PythonInterpreter(); + + // Source of assigned values. + int[] eRef = randomInts(random, 2*SMALL, 'V', 'Z'); + BaseBytes eFull = new BaseBytesTest.MyBytes(eRef); + + final int[] posStart = new int[] {0, 4, 10, 18, L - 9}; + final int[] posStop = new int[] {0, 3, 9, 17, L - 10, L}; + + for (int start : posStart) { + PyObject pyStart, pyStop, pyStart_L, pyStop_L; + pyStart = new PyInteger(start); + if (start > 0) + // The other way of saying [start:stop] is [start-L:stop] + pyStart_L = new PyInteger(start - L); + else + // The other way of saying [0:stop] is [:stop] + pyStart_L = Py.None; + + for (int stop : posStop) { + if (stop < start) continue; // Skip backwards cases + + // PyObject versions of stop + if (stop < L) + // The other way of saying [start:stop] is [start:stop-L] + pyStop_L = new PyInteger(stop - L); + else + // The other way of saying [start:L] is [start:] + pyStop_L = Py.None; + pyStop = new PyInteger(stop); + + for (int n = 0; n <= eRef.length; n++) { + // Generate test result and check it + doTest__setslice__2(uRef, pyStart, pyStop, eFull, n, eRef, start, stop, + verbose + 2); + // Repeat same result specifying start relative to end + doTest__setslice__2(uRef, pyStart_L, pyStop, eFull, n, eRef, start, stop, + verbose); + // Repeat same result specifying stop relative to end + doTest__setslice__2(uRef, pyStart, pyStop_L, eFull, n, eRef, start, stop, + verbose); + // Repeat same result specifying start and stop relative to end + doTest__setslice__2(uRef, pyStart_L, pyStop_L, eFull, n, eRef, start, stop, + verbose); + } + } + } + } + + /** + * Common code to check {@link PyByteArray#__setslice__(PyObject, PyObject, PyObject)} against a + * reference answer. + * + * @param uRef to initialise the object to test + * @param pyStart + * @param pyStop + * @param eFull byte array from which to take a slice to insert + * @param n length of the slice to take from eFull + * @param eRef from which eFull was initialised + * @param verbose 0..4 control output + */ + private void doTest__setslice__2(int[] uRef, + PyObject pyStart, + PyObject pyStop, + BaseBytes eFull, + int n, + int[] eRef, + int start, int stop, int verbose) { + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 4) { + System.out.printf(" __setslice__(%s,%s,e[0:%d])\n", pyStart, pyStop, n); + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + // Now do the test + u.__setslice__(pyStart, pyStop, e); + if (verbose >= 3) System.out.println("u'= " + toString(u)); + int nd = stop-start; + int nb = uRef.length-stop; + checkSlice(start, nd, nb, n, uRef, eRef, u); + } + + /** + * Test method for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is extended (3-argument slice and step!=0). Note that PySequence checks and + * converts arguments first, so we need only test with valid combinations of indices. + */ + public void testSetslice3() { + int verbose = 0; + + // Need interpreter + interp = new PythonInterpreter(); + + // Source of assigned values. + int[] eRef = randomInts(random, MEDIUM, 'A', 'H'); + BaseBytes eFull = new BaseBytesTest.MyBytes(eRef); + int[] uRef = randomInts(random, MEDIUM, 'm', 's'); + + // Positive step sizes we will try + int[] posStep = {2, 3, 5, 8, 25, 100}; + + for (int start = 0; start < uRef.length; start++) { + // Bytes from start to end of array + int len = uRef.length - start; + for (int step : posStep) { + // Allowable number of assignments to end of array at given step size + int nmax = (len + step - 1) / step; + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) + 1; + // But any stop value in this range results in n assignments + for (int stop = last + 1; stop < last + step; stop++) { + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(start=%d, stop=%d, step=%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.setslice(start, stop, step, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + // Negative step sizes we will try + int[] negStep = {-1, -2, -5, -8, -25, -100}; + + for (int start = uRef.length - 1; start >= 0; start--) { + // Bytes from slice start to start of array + int len = start + 1; + for (int step : negStep) { + // Allowable number of assignments to end of array at given step size + int nmax = (len + (-step) - 1) / (-step); + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) - 1; + // But any stop value in this range results in n assignments + for (int stop = last; stop > last - (-step) && stop >= 0; stop--) { + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(start=%d, stop=%d, step=%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.setslice(start, stop, step, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + } + + + /** + * Test method for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is extended (3-argument slice and step!=0). Note that PySequence checks and + * converts arguments first, so we need only test with valid combinations of indices. + */ + public void test__setslice__3() { + int verbose = 0; + + // Need interpreter + interp = new PythonInterpreter(); + + // Source of assigned values. + int[] eRef = randomInts(random, MEDIUM, 'A', 'H'); + BaseBytes eFull = new BaseBytesTest.MyBytes(eRef); + + // Forwards cases + + int[] uRef = randomInts(random, MEDIUM, 'm', 's'); + + // Positive step sizes we will try + int[] posStep = {2, 3, 5, 8, 25, 100}; + + for (int start = 0; start < uRef.length; start++) { + PyInteger pyStart = new PyInteger(start); + // Bytes from start to end of array + int len = uRef.length - start; + for (int step : posStep) { + PyInteger pyStep = new PyInteger(step); + // Allowable number of assignments to end of array at given step size + int nmax = (len + step - 1) / step; + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) + 1; + // But any stop value in this range results in n assignments + for (int stop = last + 1; stop < last + step; stop++) { + PyInteger pyStop = new PyInteger(stop); + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(%d,%d,%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.__setslice__(pyStart, pyStop, pyStep, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + // Negative step sizes we will try + int[] negStep = {-1, -2, -5, -8, -25, -100}; + + for (int start = uRef.length - 1; start >= 0; start--) { + PyInteger pyStart = new PyInteger(start); + // Bytes from slice start to start of array + int len = start + 1; + for (int step : negStep) { + PyInteger pyStep = new PyInteger(step); + // Allowable number of assignments to end of array at given step size + int nmax = (len + (-step) - 1) / (-step); + for (int n = 1; n <= nmax; n++) { + // Location of last i + int last = start + step * (n - 1) - 1; + // But any stop value in this range results in n assignments + for (int stop = last; stop > last - (-step) && stop >= 0; stop--) { + PyInteger pyStop = new PyInteger(stop); + // Now do the test + PyByteArray u = getInstance(uRef); + BaseBytes e = eFull.getslice(0, n, 1); + if (verbose >= 2) { + System.out.printf("setslice(%d,%d,%d, e[len=%d])\n", + start, stop, step, n); + if (verbose >= 3) { + System.out.println("u = " + toString(u)); + System.out.println("e = " + toString(e)); + } + } + u.__setslice__(pyStart, pyStop, pyStep, e); + if (verbose >= 1) System.out.println("u'= " + toString(u)); + checkSlice(start, step, n, uRef, eRef, u); + } + } + } + } + + } + + /** + * Performance for {@link org.python.core.PyByteArray#setslice(int,int,int,PyObject)}, when the + * slice to replace is simple and contiguous (2-argument slice). + */ + public void testSetsliceTime() { + int verbose = 0; + timeSetslice(100, SMALL, 2*SMALL, verbose); + timeSetslice(100, MEDIUM, MEDIUM, verbose); + timeSetslice(10, LARGE, LARGE/5, verbose); + timeSetslice(10, HUGE, HUGE/5, verbose); + } + + /** + * Tabulate the elapsed time for calls to setslice, for a given array size and maximum slice + * length to insert arrays of a range of sizes. + * + * @param repeats number of repeats over which to average + * @param N of bytearray subjected to the change + * @param M Size of change (inserted, removed or replaced slice) + * @param verbose Control level of textual output 0=none CSV-style, 1=just the timings, etc.. + */ + protected void timeSetslice(int repeats, int M, int N, int verbose) { + + // Trials we intend to do: insertion at a variety of points. + int[] startList = new int[11]; // 11 means 0%, 10%, 20%, ... 100% of N + for (int i = 0; i < startList.length; i++) + startList[i] = N * i / (startList.length - 1); + + // Insertion slice sizes. + int[] changeList = new int[11]; // 0%, ... 100% of M + for (int i = 0; i < changeList.length; i++) + changeList[i] = M * i / (changeList.length - 1); + + // We are going to tabulate this for each startList and changeList entry. + long[][] elapsed = new long[startList.length][changeList.length]; + // Initialise the timing record + for (int row = 0; row < startList.length; row++) + for (int col = 0; col < changeList.length; col++) + elapsed[row][col] = Long.MAX_VALUE; + + // Create test material as bytearrays + int[] xRef = randomInts(random, N, 'u', 'z'); + PyByteArray x = getInstance(xRef); + int[] yRef = randomInts(random, M, 'A', 'H'); + PyByteArray y = getInstance(yRef); + + // We will time repeated calls: need a fresh bytearray each time + PyByteArray[] u = new PyByteArray[repeats]; + + // Now take the shortest of 10 trials in each row and column + + // Work through the combinations necessary + for (int trial = 0; trial < 10; trial++) { + for (int row = 0; row < startList.length; row++) { + int na = startList[row]; + int nd = 0; + // nd = changeList[3]; // XXX experiment + // if (na+nd>N) nd = N-na; // XXX experiment + for (int col = 0; col < changeList.length; col++) { + int ne = changeList[col]; + int start = na; + int stop = na + nd; + // Data to replace the slice with + PyByteArray e = y.getslice(0, ne, 1); + + if (trial == 0) { + // First trial: do once untimed in order ensure classes loaded. + doTimeSetslice(u, start, stop, e, x, verbose); + checkSlice(na, nd, N - (na + nd), ne, xRef, yRef, u[0]); + } + + // Now do the trial properly + long t = doTimeSetslice(u, start, stop, e, x, -1); + + // Retain the shortest time so far + if (t < elapsed[row][col]) elapsed[row][col] = t; + } + } + } + + // Tabulate the time for each array size and change size + + System.out.print(" N , na "); + for (int col = 0; col < changeList.length; col++) + System.out.printf(", ne=%7d", changeList[col]); + System.out.println(", elements inserted: time in microseconds."); + + for (int row = 0; row < startList.length; row++) { + System.out.printf("%8d, %8d", N, startList[row]); + for (int col = 0; col < changeList.length; col++) { + double usPerCall = (1e-3 * elapsed[row][col]) / repeats; + System.out.printf(", %10.3f", usPerCall); + } + System.out.println(); + } + + } + + /** + * Time trial of {@link PyByteArray#setslice(int,int,int)}. Every element of the array of test + * objects will be initialised to the same value then the specified slice replacement will take + * place, with the block of repetitions timed. + * + * @param u array of test objects + * @param start + * @param stop + * @param e to insert over [start:stop] + * @param x value from which to initialise each test object + * @param verbose amount of output + * @return elapsed time in nanoseconds for setslice operation on array of objects + */ + private long doTimeSetslice(PyByteArray[] u, + int start, + int stop, + BaseBytes e, + BaseBytes x, + int verbose) { + + // The call is either to do a time trial (block of test objects) or one test + int repeats = 1; + if (verbose < 0) + // We're doing a timed trial on an array of identical objects. + repeats = u.length; + else + // We're testing the correctness of the code with one object. + repeats = 1; + + // Set up clean bytearray objects + for (int i = 0; i < repeats; i++) + u[i] = new PyByteArray(x); + + // First trial: do once untimed in order ensure classes loaded. + PyByteArray v = u[0]; + byte[] oldStorage = v.storage; + + if (verbose >= 3) { + System.out.printf("setslice(%d,%d,%d,e[%d])\n", start, stop, 1, e.size()); + System.out.println("u = " + toString(v)); + System.out.println("e = " + toString(e)); + } + + // Start the clock + long beginTime = System.nanoTime(); + // Do the work lots of times + for (int i = 0; i < repeats; i++) + u[i].setslice(start, stop, 1, e); + // Stop the clock + long t = System.nanoTime() - beginTime; + + // Diagnostic printout + if (verbose >= 2) { + byte[] newStorage = v.storage; + boolean avAlloc = (newStorage != oldStorage); + if (newStorage.length * 2 < oldStorage.length) avAlloc = false; + System.out.println("u'= " + toString(v) + (avAlloc ? " new" : "")); + } + + return t; + } + + +// /** +// * Test method for {@link org.python.core.PyByteArray#del(int)}. +// */ +// public void testDel() { +// fail("Not yet implemented"); +// } +// +// /** +// * Test method for {@link org.python.core.PyByteArray#delRange(int, int)}. +// */ +// public void testDelRange() { +// fail("Not yet implemented"); +// } +// + + + + /* + * Note that JUnit test classes extending this one inherit all the test* methods, and they will + * be run by JUnit. Each test uses getInstance() methods where it might have used a constructor + * with a similar signature. The idea is to override the getInstance() methods to return an + * instance of the class actually under test in the derived test. + */ + public PyByteArray getInstance(PyType type) { + return new PyByteArray(type); + } + + public PyByteArray getInstance() { + return new PyByteArray(); + } + + public PyByteArray getInstance(int size) { + return new PyByteArray(size); + } + + public PyByteArray getInstance(int[] value) { + return new PyByteArray(value); + } + + public PyByteArray getInstance(BaseBytes source) { + return new PyByteArray(source); + } + + public PyByteArray getInstance(Iterable source) { + return new PyByteArray(source); + } + + public PyByteArray getInstance(PyString arg, PyObject encoding, PyObject errors) { + return new PyByteArray(arg, encoding, errors); + } + + public PyByteArray getInstance(PyString arg, String encoding, String errors) { + return new PyByteArray(arg, encoding, errors); + } + + public PyByteArray getInstance(PyObject arg) throws PyException { + return new PyByteArray(arg); + } + + +} -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 03:47:51 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 03:47:51 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Support_None_args_better_in_?= =?utf8?q?find/rfind/index/rindex=2E?= Message-ID: http://hg.python.org/jython/rev/b193da0a642e changeset: 6556:b193da0a642e user: Frank Wierzbicki date: Tue Apr 10 18:47:45 2012 -0700 summary: Support None args better in find/rfind/index/rindex. files: Lib/test/string_tests.py | 6 +- src/org/python/core/PyString.java | 127 +++++++++------- src/org/python/core/PyUnicode.java | 28 +- 3 files changed, 89 insertions(+), 72 deletions(-) diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -1041,7 +1041,11 @@ self.checkequal('abc', 'abc', '__mul__', 1) self.checkequal('abcabcabc', 'abc', '__mul__', 3) self.checkraises(TypeError, 'abc', '__mul__') - self.checkraises(TypeError, 'abc', '__mul__', '') + + #FIXME: Jython currently returns a NotImplemented singleton for these. + # I'm betting this is *very* outdated behavior. + if not test_support.is_jython: + self.checkraises(TypeError, 'abc', '__mul__', '') # XXX: on a 64-bit system, this doesn't raise an overflow error, # but either raises a MemoryError, or succeeds (if you have 54TiB) #self.checkraises(OverflowError, 10000*'abc', '__mul__', 2000000000) diff --git a/src/org/python/core/PyString.java b/src/org/python/core/PyString.java --- a/src/org/python/core/PyString.java +++ b/src/org/python/core/PyString.java @@ -1426,19 +1426,19 @@ } public int index(String sub) { - return str_index(sub, 0, null); + return str_index(sub, null, null); } - public int index(String sub, int start) { + public int index(String sub, PyObject start) { return str_index(sub, start, null); } - public int index(String sub, int start, int end) { - return str_index(sub, start, Py.newInteger(end)); + public int index(String sub, PyObject start, PyObject end) { + return str_index(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_index_doc) - final int str_index(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_index_doc) + final int str_index(String sub, PyObject start, PyObject end) { int index = str_find(sub, start, end); if (index == -1) throw Py.ValueError("substring not found in string.index"); @@ -1446,19 +1446,19 @@ } public int rindex(String sub) { - return str_rindex(sub, 0, null); + return str_rindex(sub, null, null); } - public int rindex(String sub, int start) { + public int rindex(String sub, PyObject start) { return str_rindex(sub, start, null); } - public int rindex(String sub, int start, int end) { - return str_rindex(sub, start, Py.newInteger(end)); + public int rindex(String sub, PyObject start, PyObject end) { + return str_rindex(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_rindex_doc) - final int str_rindex(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_rindex_doc) + final int str_rindex(String sub, PyObject start, PyObject end) { int index = str_rfind(sub, start, end); if(index == -1) throw Py.ValueError("substring not found in string.rindex"); @@ -1466,23 +1466,26 @@ } public int count(String sub) { - return str_count(sub, 0, null); + return str_count(sub, null, null); } - public int count(String sub, int start) { + public int count(String sub, PyObject start) { return str_count(sub, start, null); } - public int count(String sub, int start, int end) { - return str_count(sub, start, Py.newInteger(end)); + public int count(String sub, PyObject start, PyObject end) { + return str_count(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_count_doc) - final int str_count(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_count_doc) + final int str_count(String sub, PyObject start, PyObject end) { + if (sub == null) { + throw Py.TypeError("count() takes at least 1 argument (0 given)"); + } int[] indices = translateIndices(start, end); int n = sub.length(); if(n == 0) { - if (start > getString().length()) { + if (indices[2] > getString().length()) { return 0; } return indices[1] - indices[0] + 1; @@ -1500,44 +1503,44 @@ } public int find(String sub) { - return str_find(sub, 0, null); + return str_find(sub, null, null); } - public int find(String sub, int start) { + public int find(String sub, PyObject start) { return str_find(sub, start, null); } - public int find(String sub, int start, int end) { - return str_find(sub, start, Py.newInteger(end)); + public int find(String sub, PyObject start, PyObject end) { + return str_find(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_find_doc) - final int str_find(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_find_doc) + final int str_find(String sub, PyObject start, PyObject end) { int[] indices = translateIndices(start, end); int index = getString().indexOf(sub, indices[0]); - if (index < start || index > indices[1]) { + if (index < indices[2] || index > indices[1]) { return -1; } return index; } public int rfind(String sub) { - return str_rfind(sub, 0, null); + return str_rfind(sub, null, null); } - public int rfind(String sub, int start) { + public int rfind(String sub, PyObject start) { return str_rfind(sub, start, null); } - public int rfind(String sub, int start, int end) { - return str_rfind(sub, start, Py.newInteger(end)); + public int rfind(String sub, PyObject start, PyObject end) { + return str_rfind(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_rfind_doc) - final int str_rfind(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_rfind_doc) + final int str_rfind(String sub, PyObject start, PyObject end) { int[] indices = translateIndices(start, end); int index = getString().lastIndexOf(sub, indices[1] - sub.length()); - if (index < start) { + if (index < indices[2]) { return -1; } return index; @@ -2046,19 +2049,19 @@ } public boolean startswith(PyObject prefix) { - return str_startswith(prefix, 0, null); + return str_startswith(prefix, null, null); } - public boolean startswith(PyObject prefix, int offset) { + public boolean startswith(PyObject prefix, PyObject offset) { return str_startswith(prefix, offset, null); } - public boolean startswith(PyObject prefix, int start, int end) { - return str_startswith(prefix, start, Py.newInteger(end)); + public boolean startswith(PyObject prefix, PyObject start, PyObject end) { + return str_startswith(prefix, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_startswith_doc) - final boolean str_startswith(PyObject prefix, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_startswith_doc) + final boolean str_startswith(PyObject prefix, PyObject start, PyObject end) { int[] indices = translateIndices(start, end); if (prefix instanceof PyString) { @@ -2088,19 +2091,19 @@ } public boolean endswith(PyObject suffix) { - return str_endswith(suffix, 0, null); + return str_endswith(suffix, null, null); } - public boolean endswith(PyObject suffix, int start) { + public boolean endswith(PyObject suffix, PyObject start) { return str_endswith(suffix, start, null); } - public boolean endswith(PyObject suffix, int start, int end) { - return str_endswith(suffix, start, Py.newInteger(end)); + public boolean endswith(PyObject suffix, PyObject start, PyObject end) { + return str_endswith(suffix, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.str_endswith_doc) - final boolean str_endswith(PyObject suffix, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.str_endswith_doc) + final boolean str_endswith(PyObject suffix, PyObject start, PyObject end) { int[] indices = translateIndices(start, end); String substr = getString().substring(indices[0], indices[1]); @@ -2126,14 +2129,17 @@ * Turns the possibly negative Python slice start and end into valid indices * into this string. * - * @return a 2 element array of indices into this string describing a + * @return a 3 element array of indices into this string describing a * substring from [0] to [1]. [0] <= [1], [0] >= 0 and [1] <= - * string.length() - * + * string.length(). The third element contains the unadjusted + * start value. */ - protected int[] translateIndices(int start, PyObject end) { + protected int[] translateIndices(PyObject start, PyObject end) { + int iStart; + int iStartAdjusted; int iEnd; - if(end == null) { + + if(end == null || end == Py.None) { iEnd = getString().length(); } else { iEnd = end.asInt(); @@ -2147,16 +2153,23 @@ } else if(iEnd > n) { iEnd = n; } - if(start < 0) { - start = n + start; - if(start < 0) { - start = 0; + if(start == null || start == Py.None) { + iStart = 0; + } else { + iStart = start.asInt(); + } + + iStartAdjusted = iStart; + if(iStartAdjusted < 0) { + iStartAdjusted = n + iStartAdjusted; + if(iStartAdjusted < 0) { + iStartAdjusted = 0; } } - if(start > iEnd) { - start = iEnd; + if(iStartAdjusted > iEnd) { + iStartAdjusted = iEnd; } - return new int[] {start, iEnd}; + return new int[] {iStartAdjusted, iEnd, iStart}; } public String translate(String table) { diff --git a/src/org/python/core/PyUnicode.java b/src/org/python/core/PyUnicode.java --- a/src/org/python/core/PyUnicode.java +++ b/src/org/python/core/PyUnicode.java @@ -924,18 +924,18 @@ return new PyUnicode(getString().substring(begin, end)); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final int unicode_index(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final int unicode_index(String sub, PyObject start, PyObject end) { return str_index(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final int unicode_rindex(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final int unicode_rindex(String sub, PyObject start, PyObject end) { return str_rindex(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final int unicode_count(PyObject subObj, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final int unicode_count(PyObject subObj, PyObject start, PyObject end) { final PyUnicode sub = coerceToUnicode(subObj); if (isBasicPlane()) { return str_count(sub.getString(), start, end); @@ -960,13 +960,13 @@ return count; } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final int unicode_find(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final int unicode_find(String sub, PyObject start, PyObject end) { return str_find(sub, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final int unicode_rfind(String sub, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final int unicode_rfind(String sub, PyObject start, PyObject end) { return str_rfind(sub, start, end); } @@ -1135,13 +1135,13 @@ return unicodeJoin(seq); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final boolean unicode_startswith(PyObject prefix, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final boolean unicode_startswith(PyObject prefix, PyObject start, PyObject end) { return str_startswith(prefix, start, end); } - @ExposedMethod(defaults = {"0", "null"}, doc = BuiltinDocs.unicode___getslice___doc) - final boolean unicode_endswith(PyObject suffix, int start, PyObject end) { + @ExposedMethod(defaults = {"null", "null"}, doc = BuiltinDocs.unicode___getslice___doc) + final boolean unicode_endswith(PyObject suffix, PyObject start, PyObject end) { return str_endswith(suffix, start, end); } -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 03:50:17 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 03:50:17 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/a8a9174eba0a changeset: 6557:a8a9174eba0a user: Frank Wierzbicki date: Tue Apr 10 18:50:01 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_str.py at 22db03646d9b files: Lib/test/test_str.py | 434 +++++++++++++++++++++++++++++++ 1 files changed, 434 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_str.py b/Lib/test/test_str.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_str.py @@ -0,0 +1,434 @@ + +import struct +import sys +from test import test_support, string_tests + + +class StrTest( + string_tests.CommonTest, + string_tests.MixinStrUnicodeUserStringTest, + string_tests.MixinStrUserStringTest, + string_tests.MixinStrUnicodeTest, + ): + + type2test = str + + # We don't need to propagate to str + def fixtype(self, obj): + return obj + + def test_basic_creation(self): + self.assertEqual(str(''), '') + self.assertEqual(str(0), '0') + self.assertEqual(str(0L), '0') + self.assertEqual(str(()), '()') + self.assertEqual(str([]), '[]') + self.assertEqual(str({}), '{}') + a = [] + a.append(a) + self.assertEqual(str(a), '[[...]]') + a = {} + a[0] = a + self.assertEqual(str(a), '{0: {...}}') + + def test_formatting(self): + string_tests.MixinStrUnicodeUserStringTest.test_formatting(self) + self.assertRaises(OverflowError, '%c'.__mod__, 0x1234) + + def test_conversion(self): + # Make sure __str__() behaves properly + class Foo0: + def __unicode__(self): + return u"foo" + + class Foo1: + def __str__(self): + return "foo" + + class Foo2(object): + def __str__(self): + return "foo" + + class Foo3(object): + def __str__(self): + return u"foo" + + class Foo4(unicode): + def __str__(self): + return u"foo" + + class Foo5(str): + def __str__(self): + return u"foo" + + class Foo6(str): + def __str__(self): + return "foos" + + def __unicode__(self): + return u"foou" + + class Foo7(unicode): + def __str__(self): + return "foos" + def __unicode__(self): + return u"foou" + + class Foo8(str): + def __new__(cls, content=""): + return str.__new__(cls, 2*content) + def __str__(self): + return self + + class Foo9(str): + def __str__(self): + return "string" + def __unicode__(self): + return "not unicode" + + self.assertTrue(str(Foo0()).startswith("<")) # this is different from __unicode__ + self.assertEqual(str(Foo1()), "foo") + self.assertEqual(str(Foo2()), "foo") + self.assertEqual(str(Foo3()), "foo") + self.assertEqual(str(Foo4("bar")), "foo") + self.assertEqual(str(Foo5("bar")), "foo") + self.assertEqual(str(Foo6("bar")), "foos") + self.assertEqual(str(Foo7("bar")), "foos") + self.assertEqual(str(Foo8("foo")), "foofoo") + self.assertEqual(str(Foo9("foo")), "string") + self.assertEqual(unicode(Foo9("foo")), u"not unicode") + + def test_expandtabs_overflows_gracefully(self): + # This test only affects 32-bit platforms because expandtabs can only take + # an int as the max value, not a 64-bit C long. If expandtabs is changed + # to take a 64-bit long, this test should apply to all platforms. + if sys.maxint > (1 << 32) or struct.calcsize('P') != 4: + return + self.assertRaises(OverflowError, 't\tt\t'.expandtabs, sys.maxint) + + def test__format__(self): + def test(value, format, expected): + # test both with and without the trailing 's' + self.assertEqual(value.__format__(format), expected) + self.assertEqual(value.__format__(format + 's'), expected) + + test('', '', '') + test('abc', '', 'abc') + test('abc', '.3', 'abc') + test('ab', '.3', 'ab') + test('abcdef', '.3', 'abc') + test('abcdef', '.0', '') + test('abc', '3.3', 'abc') + test('abc', '2.3', 'abc') + test('abc', '2.2', 'ab') + test('abc', '3.2', 'ab ') + test('result', 'x<0', 'result') + test('result', 'x<5', 'result') + test('result', 'x<6', 'result') + test('result', 'x<7', 'resultx') + test('result', 'x<8', 'resultxx') + test('result', ' <7', 'result ') + test('result', '<7', 'result ') + test('result', '>7', ' result') + test('result', '>8', ' result') + test('result', '^8', ' result ') + test('result', '^9', ' result ') + test('result', '^10', ' result ') + test('a', '10000', 'a' + ' ' * 9999) + test('', '10000', ' ' * 10000) + test('', '10000000', ' ' * 10000000) + + def test_format(self): + self.assertEqual(''.format(), '') + self.assertEqual('a'.format(), 'a') + self.assertEqual('ab'.format(), 'ab') + self.assertEqual('a{{'.format(), 'a{') + self.assertEqual('a}}'.format(), 'a}') + self.assertEqual('{{b'.format(), '{b') + self.assertEqual('}}b'.format(), '}b') + self.assertEqual('a{{b'.format(), 'a{b') + + # examples from the PEP: + import datetime + self.assertEqual("My name is {0}".format('Fred'), "My name is Fred") + self.assertEqual("My name is {0[name]}".format(dict(name='Fred')), + "My name is Fred") + self.assertEqual("My name is {0} :-{{}}".format('Fred'), + "My name is Fred :-{}") + + d = datetime.date(2007, 8, 18) + self.assertEqual("The year is {0.year}".format(d), + "The year is 2007") + + # classes we'll use for testing + class C: + def __init__(self, x=100): + self._x = x + def __format__(self, spec): + return spec + + class D: + def __init__(self, x): + self.x = x + def __format__(self, spec): + return str(self.x) + + # class with __str__, but no __format__ + class E: + def __init__(self, x): + self.x = x + def __str__(self): + return 'E(' + self.x + ')' + + # class with __repr__, but no __format__ or __str__ + class F: + def __init__(self, x): + self.x = x + def __repr__(self): + return 'F(' + self.x + ')' + + # class with __format__ that forwards to string, for some format_spec's + class G: + def __init__(self, x): + self.x = x + def __str__(self): + return "string is " + self.x + def __format__(self, format_spec): + if format_spec == 'd': + return 'G(' + self.x + ')' + return object.__format__(self, format_spec) + + # class that returns a bad type from __format__ + class H: + def __format__(self, format_spec): + return 1.0 + + class I(datetime.date): + def __format__(self, format_spec): + return self.strftime(format_spec) + + class J(int): + def __format__(self, format_spec): + return int.__format__(self * 2, format_spec) + + + self.assertEqual(''.format(), '') + self.assertEqual('abc'.format(), 'abc') + self.assertEqual('{0}'.format('abc'), 'abc') + self.assertEqual('{0:}'.format('abc'), 'abc') + self.assertEqual('X{0}'.format('abc'), 'Xabc') + self.assertEqual('{0}X'.format('abc'), 'abcX') + self.assertEqual('X{0}Y'.format('abc'), 'XabcY') + self.assertEqual('{1}'.format(1, 'abc'), 'abc') + self.assertEqual('X{1}'.format(1, 'abc'), 'Xabc') + self.assertEqual('{1}X'.format(1, 'abc'), 'abcX') + self.assertEqual('X{1}Y'.format(1, 'abc'), 'XabcY') + self.assertEqual('{0}'.format(-15), '-15') + self.assertEqual('{0}{1}'.format(-15, 'abc'), '-15abc') + self.assertEqual('{0}X{1}'.format(-15, 'abc'), '-15Xabc') + self.assertEqual('{{'.format(), '{') + self.assertEqual('}}'.format(), '}') + self.assertEqual('{{}}'.format(), '{}') + self.assertEqual('{{x}}'.format(), '{x}') + self.assertEqual('{{{0}}}'.format(123), '{123}') + self.assertEqual('{{{{0}}}}'.format(), '{{0}}') + self.assertEqual('}}{{'.format(), '}{') + self.assertEqual('}}x{{'.format(), '}x{') + + # weird field names + self.assertEqual("{0[foo-bar]}".format({'foo-bar':'baz'}), 'baz') + self.assertEqual("{0[foo bar]}".format({'foo bar':'baz'}), 'baz') + self.assertEqual("{0[ ]}".format({' ':3}), '3') + + self.assertEqual('{foo._x}'.format(foo=C(20)), '20') + self.assertEqual('{1}{0}'.format(D(10), D(20)), '2010') + self.assertEqual('{0._x.x}'.format(C(D('abc'))), 'abc') + self.assertEqual('{0[0]}'.format(['abc', 'def']), 'abc') + self.assertEqual('{0[1]}'.format(['abc', 'def']), 'def') + self.assertEqual('{0[1][0]}'.format(['abc', ['def']]), 'def') + self.assertEqual('{0[1][0].x}'.format(['abc', [D('def')]]), 'def') + + # strings + self.assertEqual('{0:.3s}'.format('abc'), 'abc') + self.assertEqual('{0:.3s}'.format('ab'), 'ab') + self.assertEqual('{0:.3s}'.format('abcdef'), 'abc') + self.assertEqual('{0:.0s}'.format('abcdef'), '') + self.assertEqual('{0:3.3s}'.format('abc'), 'abc') + self.assertEqual('{0:2.3s}'.format('abc'), 'abc') + self.assertEqual('{0:2.2s}'.format('abc'), 'ab') + self.assertEqual('{0:3.2s}'.format('abc'), 'ab ') + self.assertEqual('{0:x<0s}'.format('result'), 'result') + self.assertEqual('{0:x<5s}'.format('result'), 'result') + self.assertEqual('{0:x<6s}'.format('result'), 'result') + self.assertEqual('{0:x<7s}'.format('result'), 'resultx') + self.assertEqual('{0:x<8s}'.format('result'), 'resultxx') + self.assertEqual('{0: <7s}'.format('result'), 'result ') + self.assertEqual('{0:<7s}'.format('result'), 'result ') + self.assertEqual('{0:>7s}'.format('result'), ' result') + self.assertEqual('{0:>8s}'.format('result'), ' result') + self.assertEqual('{0:^8s}'.format('result'), ' result ') + self.assertEqual('{0:^9s}'.format('result'), ' result ') + self.assertEqual('{0:^10s}'.format('result'), ' result ') + self.assertEqual('{0:10000}'.format('a'), 'a' + ' ' * 9999) + self.assertEqual('{0:10000}'.format(''), ' ' * 10000) + self.assertEqual('{0:10000000}'.format(''), ' ' * 10000000) + + # format specifiers for user defined type + self.assertEqual('{0:abc}'.format(C()), 'abc') + + # !r and !s coercions + self.assertEqual('{0!s}'.format('Hello'), 'Hello') + self.assertEqual('{0!s:}'.format('Hello'), 'Hello') + self.assertEqual('{0!s:15}'.format('Hello'), 'Hello ') + self.assertEqual('{0!s:15s}'.format('Hello'), 'Hello ') + self.assertEqual('{0!r}'.format('Hello'), "'Hello'") + self.assertEqual('{0!r:}'.format('Hello'), "'Hello'") + self.assertEqual('{0!r}'.format(F('Hello')), 'F(Hello)') + + # test fallback to object.__format__ + self.assertEqual('{0}'.format({}), '{}') + self.assertEqual('{0}'.format([]), '[]') + self.assertEqual('{0}'.format([1]), '[1]') + self.assertEqual('{0}'.format(E('data')), 'E(data)') + self.assertEqual('{0:d}'.format(G('data')), 'G(data)') + self.assertEqual('{0!s}'.format(G('data')), 'string is data') + + msg = 'object.__format__ with a non-empty format string is deprecated' + with test_support.check_warnings((msg, PendingDeprecationWarning)): + self.assertEqual('{0:^10}'.format(E('data')), ' E(data) ') + self.assertEqual('{0:^10s}'.format(E('data')), ' E(data) ') + self.assertEqual('{0:>15s}'.format(G('data')), ' string is data') + + self.assertEqual("{0:date: %Y-%m-%d}".format(I(year=2007, + month=8, + day=27)), + "date: 2007-08-27") + + # test deriving from a builtin type and overriding __format__ + self.assertEqual("{0}".format(J(10)), "20") + + + # string format specifiers + self.assertEqual('{0:}'.format('a'), 'a') + + # computed format specifiers + self.assertEqual("{0:.{1}}".format('hello world', 5), 'hello') + self.assertEqual("{0:.{1}s}".format('hello world', 5), 'hello') + self.assertEqual("{0:.{precision}s}".format('hello world', precision=5), 'hello') + self.assertEqual("{0:{width}.{precision}s}".format('hello world', width=10, precision=5), 'hello ') + self.assertEqual("{0:{width}.{precision}s}".format('hello world', width='10', precision='5'), 'hello ') + + # test various errors + self.assertRaises(ValueError, '{'.format) + self.assertRaises(ValueError, '}'.format) + self.assertRaises(ValueError, 'a{'.format) + self.assertRaises(ValueError, 'a}'.format) + self.assertRaises(ValueError, '{a'.format) + self.assertRaises(ValueError, '}a'.format) + self.assertRaises(IndexError, '{0}'.format) + self.assertRaises(IndexError, '{1}'.format, 'abc') + self.assertRaises(KeyError, '{x}'.format) + self.assertRaises(ValueError, "}{".format) + self.assertRaises(ValueError, "{".format) + self.assertRaises(ValueError, "}".format) + self.assertRaises(ValueError, "abc{0:{}".format) + self.assertRaises(ValueError, "{0".format) + self.assertRaises(IndexError, "{0.}".format) + self.assertRaises(ValueError, "{0.}".format, 0) + self.assertRaises(IndexError, "{0[}".format) + self.assertRaises(ValueError, "{0[}".format, []) + self.assertRaises(KeyError, "{0]}".format) + self.assertRaises(ValueError, "{0.[]}".format, 0) + self.assertRaises(ValueError, "{0..foo}".format, 0) + self.assertRaises(ValueError, "{0[0}".format, 0) + self.assertRaises(ValueError, "{0[0:foo}".format, 0) + self.assertRaises(KeyError, "{c]}".format) + self.assertRaises(ValueError, "{{ {{{0}}".format, 0) + self.assertRaises(ValueError, "{0}}".format, 0) + self.assertRaises(KeyError, "{foo}".format, bar=3) + self.assertRaises(ValueError, "{0!x}".format, 3) + self.assertRaises(ValueError, "{0!}".format, 0) + self.assertRaises(ValueError, "{0!rs}".format, 0) + self.assertRaises(ValueError, "{!}".format) + self.assertRaises(IndexError, "{:}".format) + self.assertRaises(IndexError, "{:s}".format) + self.assertRaises(IndexError, "{}".format) + + # issue 6089 + self.assertRaises(ValueError, "{0[0]x}".format, [None]) + self.assertRaises(ValueError, "{0[0](10)}".format, [None]) + + # can't have a replacement on the field name portion + self.assertRaises(TypeError, '{0[{1}]}'.format, 'abcdefg', 4) + + # exceed maximum recursion depth + self.assertRaises(ValueError, "{0:{1:{2}}}".format, 'abc', 's', '') + self.assertRaises(ValueError, "{0:{1:{2:{3:{4:{5:{6}}}}}}}".format, + 0, 1, 2, 3, 4, 5, 6, 7) + + # string format spec errors + self.assertRaises(ValueError, "{0:-s}".format, '') + self.assertRaises(ValueError, format, "", "-") + self.assertRaises(ValueError, "{0:=s}".format, '') + + def test_format_auto_numbering(self): + class C: + def __init__(self, x=100): + self._x = x + def __format__(self, spec): + return spec + + self.assertEqual('{}'.format(10), '10') + self.assertEqual('{:5}'.format('s'), 's ') + self.assertEqual('{!r}'.format('s'), "'s'") + self.assertEqual('{._x}'.format(C(10)), '10') + self.assertEqual('{[1]}'.format([1, 2]), '2') + self.assertEqual('{[a]}'.format({'a':4, 'b':2}), '4') + self.assertEqual('a{}b{}c'.format(0, 1), 'a0b1c') + + self.assertEqual('a{:{}}b'.format('x', '^10'), 'a x b') + self.assertEqual('a{:{}x}b'.format(20, '#'), 'a0x14b') + + # can't mix and match numbering and auto-numbering + self.assertRaises(ValueError, '{}{1}'.format, 1, 2) + self.assertRaises(ValueError, '{1}{}'.format, 1, 2) + self.assertRaises(ValueError, '{:{1}}'.format, 1, 2) + self.assertRaises(ValueError, '{0:{}}'.format, 1, 2) + + # can mix and match auto-numbering and named + self.assertEqual('{f}{}'.format(4, f='test'), 'test4') + self.assertEqual('{}{f}'.format(4, f='test'), '4test') + self.assertEqual('{:{f}}{g}{}'.format(1, 3, g='g', f=2), ' 1g3') + self.assertEqual('{f:{}}{}{g}'.format(2, 4, f=1, g='g'), ' 14g') + + def test_buffer_is_readonly(self): + self.assertRaises(TypeError, sys.stdin.readinto, b"") + + def test_encode_and_decode_kwargs(self): + self.assertEqual('abcde'.encode('ascii', 'replace'), + 'abcde'.encode('ascii', errors='replace')) + self.assertEqual('abcde'.encode('ascii', 'ignore'), + 'abcde'.encode(encoding='ascii', errors='ignore')) + self.assertEqual('Andr\202 x'.decode('ascii', 'ignore'), + 'Andr\202 x'.decode('ascii', errors='ignore')) + self.assertEqual('Andr\202 x'.decode('ascii', 'replace'), + 'Andr\202 x'.decode(encoding='ascii', errors='replace')) + + def test_startswith_endswith_errors(self): + with self.assertRaises(UnicodeDecodeError): + '\xff'.startswith(u'x') + with self.assertRaises(UnicodeDecodeError): + '\xff'.endswith(u'x') + for meth in ('foo'.startswith, 'foo'.endswith): + with self.assertRaises(TypeError) as cm: + meth(['f']) + exc = str(cm.exception) + self.assertIn('unicode', exc) + self.assertIn('str', exc) + self.assertIn('tuple', exc) + +def test_main(): + test_support.run_unittest(StrTest) + +if __name__ == "__main__": + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 03:54:58 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 03:54:58 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Add_skips=2E?= Message-ID: http://hg.python.org/jython/rev/bf226e0ded46 changeset: 6558:bf226e0ded46 user: Frank Wierzbicki date: Tue Apr 10 18:54:53 2012 -0700 summary: Add skips. files: Lib/test/test_str.py | 40 +++++++++++++++++-------------- 1 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Lib/test/test_str.py b/Lib/test/test_str.py --- a/Lib/test/test_str.py +++ b/Lib/test/test_str.py @@ -299,13 +299,15 @@ self.assertEqual('{0:^10s}'.format(E('data')), ' E(data) ') self.assertEqual('{0:>15s}'.format(G('data')), ' string is data') - self.assertEqual("{0:date: %Y-%m-%d}".format(I(year=2007, - month=8, - day=27)), - "date: 2007-08-27") + #FIXME: not supported in Jython yet: + if not test_support.is_jython: + self.assertEqual("{0:date: %Y-%m-%d}".format(I(year=2007, + month=8, + day=27)), + "date: 2007-08-27") - # test deriving from a builtin type and overriding __format__ - self.assertEqual("{0}".format(J(10)), "20") + # test deriving from a builtin type and overriding __format__ + self.assertEqual("{0}".format(J(10)), "20") # string format specifiers @@ -414,18 +416,20 @@ self.assertEqual('Andr\202 x'.decode('ascii', 'replace'), 'Andr\202 x'.decode(encoding='ascii', errors='replace')) - def test_startswith_endswith_errors(self): - with self.assertRaises(UnicodeDecodeError): - '\xff'.startswith(u'x') - with self.assertRaises(UnicodeDecodeError): - '\xff'.endswith(u'x') - for meth in ('foo'.startswith, 'foo'.endswith): - with self.assertRaises(TypeError) as cm: - meth(['f']) - exc = str(cm.exception) - self.assertIn('unicode', exc) - self.assertIn('str', exc) - self.assertIn('tuple', exc) + #FIXME: not working in Jython. + if not test_support.is_jython: + def test_startswith_endswith_errors(self): + with self.assertRaises(UnicodeDecodeError): + '\xff'.startswith(u'x') + with self.assertRaises(UnicodeDecodeError): + '\xff'.endswith(u'x') + for meth in ('foo'.startswith, 'foo'.endswith): + with self.assertRaises(TypeError) as cm: + meth(['f']) + exc = str(cm.exception) + self.assertIn('unicode', exc) + self.assertIn('str', exc) + self.assertIn('tuple', exc) def test_main(): test_support.run_unittest(StrTest) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 04:25:33 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 04:25:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Add_skips=2E?= Message-ID: http://hg.python.org/jython/rev/48edc9935673 changeset: 6560:48edc9935673 user: Frank Wierzbicki date: Tue Apr 10 19:25:27 2012 -0700 summary: Add skips. files: Lib/test/test_cgi.py | 49 ++++++++++++++++--------------- 1 files changed, 25 insertions(+), 24 deletions(-) diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py --- a/Lib/test/test_cgi.py +++ b/Lib/test/test_cgi.py @@ -75,30 +75,31 @@ ("a=+b=a", {'a': [' b=a']}), ("&b=a", ValueError("bad query field: ''")), ("b&=a", ValueError("bad query field: 'b'")), - ("a=a+b&b=b+c", {'a': ['a b'], 'b': ['b c']}), - ("a=a+b&a=b+a", {'a': ['a b', 'b a']}), - ("x=1&y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), - ("x=1;y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), - ("x=1;y=2.0;z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), - ("Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env", - {'Hbc5161168c542333633315dee1182227:key_store_seqid': ['400006'], - 'cuyer': ['r'], - 'expire': ['964546263'], - 'kid': ['130003.300038'], - 'lobale': ['en-US'], - 'order_id': ['0bb2e248638833d48cb7fed300000f1b'], - 'ss': ['env'], - 'view': ['bustomer'], - }), - - ("group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse", - {'SUBMIT': ['Browse'], - '_assigned_to': ['31392'], - '_category': ['100'], - '_status': ['1'], - 'group_id': ['5470'], - 'set': ['custom'], - }) +#FIXME: None of these are working in Jython +# ("a=a+b&b=b+c", {'a': ['a b'], 'b': ['b c']}), +# ("a=a+b&a=b+a", {'a': ['a b', 'b a']}), +# ("x=1&y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), +# ("x=1;y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), +# ("x=1;y=2.0;z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), +# ("Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env", +# {'Hbc5161168c542333633315dee1182227:key_store_seqid': ['400006'], +# 'cuyer': ['r'], +# 'expire': ['964546263'], +# 'kid': ['130003.300038'], +# 'lobale': ['en-US'], +# 'order_id': ['0bb2e248638833d48cb7fed300000f1b'], +# 'ss': ['env'], +# 'view': ['bustomer'], +# }), +# +# ("group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse", +# {'SUBMIT': ['Browse'], +# '_assigned_to': ['31392'], +# '_category': ['100'], +# '_status': ['1'], +# 'group_id': ['5470'], +# 'set': ['custom'], +# }) ] def first_elts(list): -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 04:25:33 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 04:25:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/1a81cfd14c13 changeset: 6559:1a81cfd14c13 user: Frank Wierzbicki date: Tue Apr 10 19:24:48 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_cgi.py at 22db03646d9b files: Lib/test/test_cgi.py | 394 +++++++++++++++++++++++++++++++ 1 files changed, 394 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_cgi.py @@ -0,0 +1,394 @@ +from test.test_support import run_unittest, check_warnings +import cgi +import os +import sys +import tempfile +import unittest + +class HackedSysModule: + # The regression test will have real values in sys.argv, which + # will completely confuse the test of the cgi module + argv = [] + stdin = sys.stdin + +cgi.sys = HackedSysModule() + +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +class ComparableException: + def __init__(self, err): + self.err = err + + def __str__(self): + return str(self.err) + + def __cmp__(self, anExc): + if not isinstance(anExc, Exception): + return -1 + x = cmp(self.err.__class__, anExc.__class__) + if x != 0: + return x + return cmp(self.err.args, anExc.args) + + def __getattr__(self, attr): + return getattr(self.err, attr) + +def do_test(buf, method): + env = {} + if method == "GET": + fp = None + env['REQUEST_METHOD'] = 'GET' + env['QUERY_STRING'] = buf + elif method == "POST": + fp = StringIO(buf) + env['REQUEST_METHOD'] = 'POST' + env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded' + env['CONTENT_LENGTH'] = str(len(buf)) + else: + raise ValueError, "unknown method: %s" % method + try: + return cgi.parse(fp, env, strict_parsing=1) + except StandardError, err: + return ComparableException(err) + +parse_strict_test_cases = [ + ("", ValueError("bad query field: ''")), + ("&", ValueError("bad query field: ''")), + ("&&", ValueError("bad query field: ''")), + (";", ValueError("bad query field: ''")), + (";&;", ValueError("bad query field: ''")), + # Should the next few really be valid? + ("=", {}), + ("=&=", {}), + ("=;=", {}), + # This rest seem to make sense + ("=a", {'': ['a']}), + ("&=a", ValueError("bad query field: ''")), + ("=a&", ValueError("bad query field: ''")), + ("=&a", ValueError("bad query field: 'a'")), + ("b=a", {'b': ['a']}), + ("b+=a", {'b ': ['a']}), + ("a=b=a", {'a': ['b=a']}), + ("a=+b=a", {'a': [' b=a']}), + ("&b=a", ValueError("bad query field: ''")), + ("b&=a", ValueError("bad query field: 'b'")), + ("a=a+b&b=b+c", {'a': ['a b'], 'b': ['b c']}), + ("a=a+b&a=b+a", {'a': ['a b', 'b a']}), + ("x=1&y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), + ("x=1;y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), + ("x=1;y=2.0;z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), + ("Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env", + {'Hbc5161168c542333633315dee1182227:key_store_seqid': ['400006'], + 'cuyer': ['r'], + 'expire': ['964546263'], + 'kid': ['130003.300038'], + 'lobale': ['en-US'], + 'order_id': ['0bb2e248638833d48cb7fed300000f1b'], + 'ss': ['env'], + 'view': ['bustomer'], + }), + + ("group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse", + {'SUBMIT': ['Browse'], + '_assigned_to': ['31392'], + '_category': ['100'], + '_status': ['1'], + 'group_id': ['5470'], + 'set': ['custom'], + }) + ] + +def first_elts(list): + return map(lambda x:x[0], list) + +def first_second_elts(list): + return map(lambda p:(p[0], p[1][0]), list) + +def gen_result(data, environ): + fake_stdin = StringIO(data) + fake_stdin.seek(0) + form = cgi.FieldStorage(fp=fake_stdin, environ=environ) + + result = {} + for k, v in dict(form).items(): + result[k] = isinstance(v, list) and form.getlist(k) or v.value + + return result + +class CgiTests(unittest.TestCase): + + def test_escape(self): + self.assertEqual("test & string", cgi.escape("test & string")) + self.assertEqual("<test string>", cgi.escape("")) + self.assertEqual(""test string"", cgi.escape('"test string"', True)) + + def test_strict(self): + for orig, expect in parse_strict_test_cases: + # Test basic parsing + d = do_test(orig, "GET") + self.assertEqual(d, expect, "Error parsing %s" % repr(orig)) + d = do_test(orig, "POST") + self.assertEqual(d, expect, "Error parsing %s" % repr(orig)) + + env = {'QUERY_STRING': orig} + fcd = cgi.FormContentDict(env) + sd = cgi.SvFormContentDict(env) + fs = cgi.FieldStorage(environ=env) + if isinstance(expect, dict): + # test dict interface + self.assertEqual(len(expect), len(fcd)) + self.assertItemsEqual(expect.keys(), fcd.keys()) + self.assertItemsEqual(expect.values(), fcd.values()) + self.assertItemsEqual(expect.items(), fcd.items()) + self.assertEqual(fcd.get("nonexistent field", "default"), "default") + self.assertEqual(len(sd), len(fs)) + self.assertItemsEqual(sd.keys(), fs.keys()) + self.assertEqual(fs.getvalue("nonexistent field", "default"), "default") + # test individual fields + for key in expect.keys(): + expect_val = expect[key] + self.assertTrue(fcd.has_key(key)) + self.assertItemsEqual(fcd[key], expect[key]) + self.assertEqual(fcd.get(key, "default"), fcd[key]) + self.assertTrue(fs.has_key(key)) + if len(expect_val) > 1: + single_value = 0 + else: + single_value = 1 + try: + val = sd[key] + except IndexError: + self.assertFalse(single_value) + self.assertEqual(fs.getvalue(key), expect_val) + else: + self.assertTrue(single_value) + self.assertEqual(val, expect_val[0]) + self.assertEqual(fs.getvalue(key), expect_val[0]) + self.assertItemsEqual(sd.getlist(key), expect_val) + if single_value: + self.assertItemsEqual(sd.values(), + first_elts(expect.values())) + self.assertItemsEqual(sd.items(), + first_second_elts(expect.items())) + + def test_weird_formcontentdict(self): + # Test the weird FormContentDict classes + env = {'QUERY_STRING': "x=1&y=2.0&z=2-3.%2b0&1=1abc"} + expect = {'x': 1, 'y': 2.0, 'z': '2-3.+0', '1': '1abc'} + d = cgi.InterpFormContentDict(env) + for k, v in expect.items(): + self.assertEqual(d[k], v) + for k, v in d.items(): + self.assertEqual(expect[k], v) + self.assertItemsEqual(expect.values(), d.values()) + + def test_log(self): + cgi.log("Testing") + + cgi.logfp = StringIO() + cgi.initlog("%s", "Testing initlog 1") + cgi.log("%s", "Testing log 2") + self.assertEqual(cgi.logfp.getvalue(), "Testing initlog 1\nTesting log 2\n") + if os.path.exists("/dev/null"): + cgi.logfp = None + cgi.logfile = "/dev/null" + cgi.initlog("%s", "Testing log 3") + cgi.log("Testing log 4") + + def test_fieldstorage_readline(self): + # FieldStorage uses readline, which has the capacity to read all + # contents of the input file into memory; we use readline's size argument + # to prevent that for files that do not contain any newlines in + # non-GET/HEAD requests + class TestReadlineFile: + def __init__(self, file): + self.file = file + self.numcalls = 0 + + def readline(self, size=None): + self.numcalls += 1 + if size: + return self.file.readline(size) + else: + return self.file.readline() + + def __getattr__(self, name): + file = self.__dict__['file'] + a = getattr(file, name) + if not isinstance(a, int): + setattr(self, name, a) + return a + + f = TestReadlineFile(tempfile.TemporaryFile()) + f.write('x' * 256 * 1024) + f.seek(0) + env = {'REQUEST_METHOD':'PUT'} + fs = cgi.FieldStorage(fp=f, environ=env) + # if we're not chunking properly, readline is only called twice + # (by read_binary); if we are chunking properly, it will be called 5 times + # as long as the chunksize is 1 << 16. + self.assertTrue(f.numcalls > 2) + + def test_fieldstorage_multipart(self): + #Test basic FieldStorage multipart parsing + env = {'REQUEST_METHOD':'POST', 'CONTENT_TYPE':'multipart/form-data; boundary=---------------------------721837373350705526688164684', 'CONTENT_LENGTH':'558'} + postdata = """-----------------------------721837373350705526688164684 +Content-Disposition: form-data; name="id" + +1234 +-----------------------------721837373350705526688164684 +Content-Disposition: form-data; name="title" + + +-----------------------------721837373350705526688164684 +Content-Disposition: form-data; name="file"; filename="test.txt" +Content-Type: text/plain + +Testing 123. + +-----------------------------721837373350705526688164684 +Content-Disposition: form-data; name="submit" + + Add\x20 +-----------------------------721837373350705526688164684-- +""" + fs = cgi.FieldStorage(fp=StringIO(postdata), environ=env) + self.assertEqual(len(fs.list), 4) + expect = [{'name':'id', 'filename':None, 'value':'1234'}, + {'name':'title', 'filename':None, 'value':''}, + {'name':'file', 'filename':'test.txt','value':'Testing 123.\n'}, + {'name':'submit', 'filename':None, 'value':' Add '}] + for x in range(len(fs.list)): + for k, exp in expect[x].items(): + got = getattr(fs.list[x], k) + self.assertEqual(got, exp) + + _qs_result = { + 'key1': 'value1', + 'key2': ['value2x', 'value2y'], + 'key3': 'value3', + 'key4': 'value4' + } + def testQSAndUrlEncode(self): + data = "key2=value2x&key3=value3&key4=value4" + environ = { + 'CONTENT_LENGTH': str(len(data)), + 'CONTENT_TYPE': 'application/x-www-form-urlencoded', + 'QUERY_STRING': 'key1=value1&key2=value2y', + 'REQUEST_METHOD': 'POST', + } + v = gen_result(data, environ) + self.assertEqual(self._qs_result, v) + + def testQSAndFormData(self): + data = """ +---123 +Content-Disposition: form-data; name="key2" + +value2y +---123 +Content-Disposition: form-data; name="key3" + +value3 +---123 +Content-Disposition: form-data; name="key4" + +value4 +---123-- +""" + environ = { + 'CONTENT_LENGTH': str(len(data)), + 'CONTENT_TYPE': 'multipart/form-data; boundary=-123', + 'QUERY_STRING': 'key1=value1&key2=value2x', + 'REQUEST_METHOD': 'POST', + } + v = gen_result(data, environ) + self.assertEqual(self._qs_result, v) + + def testQSAndFormDataFile(self): + data = """ +---123 +Content-Disposition: form-data; name="key2" + +value2y +---123 +Content-Disposition: form-data; name="key3" + +value3 +---123 +Content-Disposition: form-data; name="key4" + +value4 +---123 +Content-Disposition: form-data; name="upload"; filename="fake.txt" +Content-Type: text/plain + +this is the content of the fake file + +---123-- +""" + environ = { + 'CONTENT_LENGTH': str(len(data)), + 'CONTENT_TYPE': 'multipart/form-data; boundary=-123', + 'QUERY_STRING': 'key1=value1&key2=value2x', + 'REQUEST_METHOD': 'POST', + } + result = self._qs_result.copy() + result.update({ + 'upload': 'this is the content of the fake file\n' + }) + v = gen_result(data, environ) + self.assertEqual(result, v) + + def test_deprecated_parse_qs(self): + # this func is moved to urlparse, this is just a sanity check + with check_warnings(('cgi.parse_qs is deprecated, use urlparse.' + 'parse_qs instead', PendingDeprecationWarning)): + self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, + cgi.parse_qs('a=A1&b=B2&B=B3')) + + def test_deprecated_parse_qsl(self): + # this func is moved to urlparse, this is just a sanity check + with check_warnings(('cgi.parse_qsl is deprecated, use urlparse.' + 'parse_qsl instead', PendingDeprecationWarning)): + self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], + cgi.parse_qsl('a=A1&b=B2&B=B3')) + + def test_parse_header(self): + self.assertEqual( + cgi.parse_header("text/plain"), + ("text/plain", {})) + self.assertEqual( + cgi.parse_header("text/vnd.just.made.this.up ; "), + ("text/vnd.just.made.this.up", {})) + self.assertEqual( + cgi.parse_header("text/plain;charset=us-ascii"), + ("text/plain", {"charset": "us-ascii"})) + self.assertEqual( + cgi.parse_header('text/plain ; charset="us-ascii"'), + ("text/plain", {"charset": "us-ascii"})) + self.assertEqual( + cgi.parse_header('text/plain ; charset="us-ascii"; another=opt'), + ("text/plain", {"charset": "us-ascii", "another": "opt"})) + self.assertEqual( + cgi.parse_header('attachment; filename="silly.txt"'), + ("attachment", {"filename": "silly.txt"})) + self.assertEqual( + cgi.parse_header('attachment; filename="strange;name"'), + ("attachment", {"filename": "strange;name"})) + self.assertEqual( + cgi.parse_header('attachment; filename="strange;name";size=123;'), + ("attachment", {"filename": "strange;name", "size": "123"})) + self.assertEqual( + cgi.parse_header('form-data; name="files"; filename="fo\\"o;bar"'), + ("form-data", {"name": "files", "filename": 'fo"o;bar'})) + + +def test_main(): + run_unittest(CgiTests) + +if __name__ == '__main__': + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 04:36:06 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 04:36:06 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_This_is_broken_for_me=2C_but?= =?utf8?q?_worked_recently_-_has_dinsdale_changed=3F?= Message-ID: http://hg.python.org/jython/rev/bb341fb29093 changeset: 6561:bb341fb29093 user: Frank Wierzbicki date: Tue Apr 10 19:36:00 2012 -0700 summary: This is broken for me, but worked recently - has dinsdale changed? files: Lib/test/test_socket.py | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1832,6 +1832,8 @@ result = socket.getnameinfo(address, flags) self.failUnlessEqual(result[1], expected) + @unittest.skipIf(test_support.is_jython, + "FIXME: this is broken but worked recently - has dinsdale changed?") def testHost(self): for address, flags, expected in [ ( ("www.python.org", 80), 0, "dinsdale.python.org"), -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 16:51:02 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 16:51:02 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_test=5Fcompileall_looks_very?= =?utf8?q?_cpython_specific=2E_We_may_want_to_do_our_own_later=2E?= Message-ID: http://hg.python.org/jython/rev/aa42f0c223d3 changeset: 6562:aa42f0c223d3 user: Frank Wierzbicki date: Wed Apr 11 07:50:51 2012 -0700 summary: test_compileall looks very cpython specific. We may want to do our own later. files: Lib/test/regrtest.py | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1197,6 +1197,7 @@ test_cd test_cl test_commands + test_compileall test_crypt test_ctypes test_curses -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 17:19:27 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 17:19:27 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Add_a_skip=2E?= Message-ID: http://hg.python.org/jython/rev/5b0b0c69084d changeset: 6563:5b0b0c69084d user: Frank Wierzbicki date: Wed Apr 11 08:19:20 2012 -0700 summary: Add a skip. files: Lib/test/test_email.py | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_email.py b/Lib/test/test_email.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_email.py @@ -0,0 +1,16 @@ +# Copyright (C) 2001,2002 Python Software Foundation +# email package unit tests + +# The specific tests now live in Lib/email/test +from email.test.test_email import TestEncoders, suite +from test import test_support + +def test_main(): + #This one doesn't work on Jython + del TestEncoders.test_encode7or8bit + + s = suite() + test_support.run_unittest(suite()) + +if __name__ == '__main__': + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 18:02:15 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 18:02:15 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_add_format_and_=5F=5Fformat?= =?utf8?q?=5F=5F_to_PyUnicode=2E_Just_using_PyString=27s_version_for_now?= =?utf8?q?=2E?= Message-ID: http://hg.python.org/jython/rev/2aef40e6d51c changeset: 6564:2aef40e6d51c user: Frank Wierzbicki date: Wed Apr 11 09:02:02 2012 -0700 summary: add format and __format__ to PyUnicode. Just using PyString's version for now. files: src/org/python/core/PyString.java | 2 +- src/org/python/core/PyUnicode.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletions(-) diff --git a/src/org/python/core/PyString.java b/src/org/python/core/PyString.java --- a/src/org/python/core/PyString.java +++ b/src/org/python/core/PyString.java @@ -2570,7 +2570,7 @@ } } - private String buildFormattedString(String value, PyObject[] args, String[] keywords, MarkupIterator enclosingIterator) { + protected String buildFormattedString(String value, PyObject[] args, String[] keywords, MarkupIterator enclosingIterator) { StringBuilder result = new StringBuilder(); MarkupIterator it = new MarkupIterator(value, enclosingIterator); while (true) { diff --git a/src/org/python/core/PyUnicode.java b/src/org/python/core/PyUnicode.java --- a/src/org/python/core/PyUnicode.java +++ b/src/org/python/core/PyUnicode.java @@ -1340,6 +1340,20 @@ return new PyTuple(new PyUnicode(this.getString())); } + @Override + public PyObject __format__(PyObject formatSpec) { + return str___format__(formatSpec); + } + + @ExposedMethod(doc = BuiltinDocs.unicode_format_doc) + final PyObject unicode_format(PyObject[] args, String[] keywords) { + try { + return new PyUnicode(buildFormattedString(getString(), args, keywords, null)); + } catch (IllegalArgumentException e) { + throw Py.ValueError(e.getMessage()); + } + } + public Iterator iterator() { return newSubsequenceIterator(); } -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 20:27:05 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 20:27:05 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Baby_step_for_=5F=5Fpackage?= =?utf8?b?X18gc3VwcG9ydC4=?= Message-ID: http://hg.python.org/jython/rev/62ff5fc17504 changeset: 6565:62ff5fc17504 user: Frank Wierzbicki date: Wed Apr 11 11:26:55 2012 -0700 summary: Baby step for __package__ support. files: src/org/python/core/PyModule.java | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/org/python/core/PyModule.java b/src/org/python/core/PyModule.java --- a/src/org/python/core/PyModule.java +++ b/src/org/python/core/PyModule.java @@ -60,6 +60,7 @@ ensureDict(); __dict__.__setitem__("__name__", name); __dict__.__setitem__("__doc__", doc); + __dict__.__setitem__("__package__", Py.None); } public PyObject fastGetDict() { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 20:39:30 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 20:39:30 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/da71a6c54430 changeset: 6566:da71a6c54430 user: Frank Wierzbicki date: Wed Apr 11 11:37:15 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_popen.py at 22db03646d9b files: Lib/test/test_popen.py | 52 ++++++++++++++++++++++++++++++ 1 files changed, 52 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_popen.py b/Lib/test/test_popen.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_popen.py @@ -0,0 +1,52 @@ +#! /usr/bin/env python +"""Basic tests for os.popen() + + Particularly useful for platforms that fake popen. +""" + +import unittest +from test import test_support +import os, sys + +# Test that command-lines get down as we expect. +# To do this we execute: +# python -c "import sys;print sys.argv" {rest_of_commandline} +# This results in Python being spawned and printing the sys.argv list. +# We can then eval() the result of this, and see what each argv was. +python = sys.executable + +class PopenTest(unittest.TestCase): + def _do_test_commandline(self, cmdline, expected): + cmd = '%s -c "import sys;print sys.argv" %s' % (python, cmdline) + data = os.popen(cmd).read() + '\n' + got = eval(data)[1:] # strip off argv[0] + self.assertEqual(got, expected) + + def test_popen(self): + self.assertRaises(TypeError, os.popen) + self._do_test_commandline( + "foo bar", + ["foo", "bar"] + ) + self._do_test_commandline( + 'foo "spam and eggs" "silly walk"', + ["foo", "spam and eggs", "silly walk"] + ) + self._do_test_commandline( + 'foo "a \\"quoted\\" arg" bar', + ["foo", 'a "quoted" arg', "bar"] + ) + test_support.reap_children() + + def test_return_code(self): + self.assertEqual(os.popen("exit 0").close(), None) + if os.name == 'nt' or test_support.is_jython: + self.assertEqual(os.popen("exit 42").close(), 42) + else: + self.assertEqual(os.popen("exit 42").close(), 42 << 8) + +def test_main(): + test_support.run_unittest(PopenTest) + +if __name__ == "__main__": + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 20:39:33 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 20:39:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/813254047207 changeset: 6567:813254047207 user: Frank Wierzbicki date: Wed Apr 11 11:38:37 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_popen.py at 22db03646d9b files: Lib/test/test_popen.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_popen.py b/Lib/test/test_popen.py --- a/Lib/test/test_popen.py +++ b/Lib/test/test_popen.py @@ -40,7 +40,7 @@ def test_return_code(self): self.assertEqual(os.popen("exit 0").close(), None) - if os.name == 'nt' or test_support.is_jython: + if os.name == 'nt': self.assertEqual(os.popen("exit 42").close(), 42) else: self.assertEqual(os.popen("exit 42").close(), 42 << 8) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 20:39:33 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 20:39:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_for_Jython=2E?= Message-ID: http://hg.python.org/jython/rev/09f6f42c25e8 changeset: 6568:09f6f42c25e8 user: Frank Wierzbicki date: Wed Apr 11 11:39:18 2012 -0700 summary: Fix for Jython. files: Lib/test/test_popen.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_popen.py b/Lib/test/test_popen.py --- a/Lib/test/test_popen.py +++ b/Lib/test/test_popen.py @@ -40,7 +40,7 @@ def test_return_code(self): self.assertEqual(os.popen("exit 0").close(), None) - if os.name == 'nt': + if os.name == 'nt' or test_support.is_jython: self.assertEqual(os.popen("exit 42").close(), 42) else: self.assertEqual(os.popen("exit 42").close(), 42 << 8) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 20:46:46 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 20:46:46 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Update_for_=5F=5Fpackage=5F?= =?utf8?b?Xy4=?= Message-ID: http://hg.python.org/jython/rev/54c36a67dc8f changeset: 6569:54c36a67dc8f user: Frank Wierzbicki date: Wed Apr 11 11:46:39 2012 -0700 summary: Update for __package__. files: Lib/test/test_jy_internals.py | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_jy_internals.py b/Lib/test/test_jy_internals.py --- a/Lib/test/test_jy_internals.py +++ b/Lib/test/test_jy_internals.py @@ -281,11 +281,11 @@ from org.python.core import PyModule, PyInstance test = PyModule("test", {}) exec "a = 2" in test.__dict__ - self.assertEquals(len(test.__dict__), 3) + self.assertEquals(len(test.__dict__), 4) #test = PyInstance.__tojava__(test, PyModule) exec "b = 3" in test.__dict__ - self.assertEquals(len(test.__dict__), 4) + self.assertEquals(len(test.__dict__), 5) def test_main(): test_support.run_unittest(__name__) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 20:50:20 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 20:50:20 +0200 Subject: [Jython-checkins] =?utf8?b?anl0aG9uOiBfX3BhY2thZ2VfXw==?= Message-ID: http://hg.python.org/jython/rev/faf2b3128826 changeset: 6570:faf2b3128826 user: Frank Wierzbicki date: Wed Apr 11 11:50:15 2012 -0700 summary: __package__ files: Lib/test/test_module.py | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -1,6 +1,6 @@ # Test the module type -from test_support import verify, vereq, verbose, TestFailed +from test.test_support import verify, vereq, verbose, TestFailed from types import ModuleType as module # An uninitialized module has no __dict__ or __name__, and __doc__ is None @@ -49,19 +49,19 @@ foo = module("foo") vereq(foo.__name__, "foo") vereq(foo.__doc__, None) -vereq(foo.__dict__, {"__name__": "foo", "__doc__": None}) +vereq(foo.__dict__, {"__name__": "foo", "__package__": None, "__doc__": None}) # ASCII docstring foo = module("foo", "foodoc") vereq(foo.__name__, "foo") vereq(foo.__doc__, "foodoc") -vereq(foo.__dict__, {"__name__": "foo", "__doc__": "foodoc"}) +vereq(foo.__dict__, {"__name__": "foo", "__package__": None, "__doc__": "foodoc"}) # Unicode docstring foo = module("foo", u"foodoc\u1234") vereq(foo.__name__, "foo") vereq(foo.__doc__, u"foodoc\u1234") -vereq(foo.__dict__, {"__name__": "foo", "__doc__": u"foodoc\u1234"}) +vereq(foo.__dict__, {"__name__": "foo", "__package__": None, "__doc__": u"foodoc\u1234"}) # Reinitialization should not replace the __dict__ foo.bar = 42 @@ -70,7 +70,7 @@ vereq(foo.__name__, "foo") vereq(foo.__doc__, "foodoc") vereq(foo.bar, 42) -vereq(foo.__dict__, {"__name__": "foo", "__doc__": "foodoc", "bar": 42}) +vereq(foo.__dict__, {"__name__": "foo", "__package__": None, "__doc__": "foodoc", "bar": 42}) verify(foo.__dict__ is d) if verbose: -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 21:07:53 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 21:07:53 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/7741d6623484 changeset: 6571:7741d6623484 user: Frank Wierzbicki date: Wed Apr 11 12:06:24 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_property.py at 22db03646d9b files: Lib/test/test_property.py | 231 ++++++++++++++++++++++++++ 1 files changed, 231 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_property.py b/Lib/test/test_property.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_property.py @@ -0,0 +1,231 @@ +# Test case for property +# more tests are in test_descr + +import sys +import unittest +from test.test_support import run_unittest + +class PropertyBase(Exception): + pass + +class PropertyGet(PropertyBase): + pass + +class PropertySet(PropertyBase): + pass + +class PropertyDel(PropertyBase): + pass + +class BaseClass(object): + def __init__(self): + self._spam = 5 + + @property + def spam(self): + """BaseClass.getter""" + return self._spam + + @spam.setter + def spam(self, value): + self._spam = value + + @spam.deleter + def spam(self): + del self._spam + +class SubClass(BaseClass): + + @BaseClass.spam.getter + def spam(self): + """SubClass.getter""" + raise PropertyGet(self._spam) + + @spam.setter + def spam(self, value): + raise PropertySet(self._spam) + + @spam.deleter + def spam(self): + raise PropertyDel(self._spam) + +class PropertyDocBase(object): + _spam = 1 + def _get_spam(self): + return self._spam + spam = property(_get_spam, doc="spam spam spam") + +class PropertyDocSub(PropertyDocBase): + @PropertyDocBase.spam.getter + def spam(self): + """The decorator does not use this doc string""" + return self._spam + +class PropertySubNewGetter(BaseClass): + @BaseClass.spam.getter + def spam(self): + """new docstring""" + return 5 + +class PropertyNewGetter(object): + @property + def spam(self): + """original docstring""" + return 1 + @spam.getter + def spam(self): + """new docstring""" + return 8 + +class PropertyTests(unittest.TestCase): + def test_property_decorator_baseclass(self): + # see #1620 + base = BaseClass() + self.assertEqual(base.spam, 5) + self.assertEqual(base._spam, 5) + base.spam = 10 + self.assertEqual(base.spam, 10) + self.assertEqual(base._spam, 10) + delattr(base, "spam") + self.assertTrue(not hasattr(base, "spam")) + self.assertTrue(not hasattr(base, "_spam")) + base.spam = 20 + self.assertEqual(base.spam, 20) + self.assertEqual(base._spam, 20) + + def test_property_decorator_subclass(self): + # see #1620 + sub = SubClass() + self.assertRaises(PropertyGet, getattr, sub, "spam") + self.assertRaises(PropertySet, setattr, sub, "spam", None) + self.assertRaises(PropertyDel, delattr, sub, "spam") + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_property_decorator_subclass_doc(self): + sub = SubClass() + self.assertEqual(sub.__class__.spam.__doc__, "SubClass.getter") + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_property_decorator_baseclass_doc(self): + base = BaseClass() + self.assertEqual(base.__class__.spam.__doc__, "BaseClass.getter") + + def test_property_decorator_doc(self): + base = PropertyDocBase() + sub = PropertyDocSub() + self.assertEqual(base.__class__.spam.__doc__, "spam spam spam") + self.assertEqual(sub.__class__.spam.__doc__, "spam spam spam") + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_property_getter_doc_override(self): + newgettersub = PropertySubNewGetter() + self.assertEqual(newgettersub.spam, 5) + self.assertEqual(newgettersub.__class__.spam.__doc__, "new docstring") + newgetter = PropertyNewGetter() + self.assertEqual(newgetter.spam, 8) + self.assertEqual(newgetter.__class__.spam.__doc__, "new docstring") + + +# Issue 5890: subclasses of property do not preserve method __doc__ strings +class PropertySub(property): + """This is a subclass of property""" + +class PropertySubSlots(property): + """This is a subclass of property that defines __slots__""" + __slots__ = () + +class PropertySubclassTests(unittest.TestCase): + + def test_slots_docstring_copy_exception(self): + try: + class Foo(object): + @PropertySubSlots + def spam(self): + """Trying to copy this docstring will raise an exception""" + return 1 + except AttributeError: + pass + else: + raise Exception("AttributeError not raised") + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_docstring_copy(self): + class Foo(object): + @PropertySub + def spam(self): + """spam wrapped in property subclass""" + return 1 + self.assertEqual( + Foo.spam.__doc__, + "spam wrapped in property subclass") + + @unittest.skipIf(sys.flags.optimize <= 2, + "Docstrings are omitted with -O2 and above") + def test_property_setter_copies_getter_docstring(self): + class Foo(object): + def __init__(self): self._spam = 1 + @PropertySub + def spam(self): + """spam wrapped in property subclass""" + return self._spam + @spam.setter + def spam(self, value): + """this docstring is ignored""" + self._spam = value + foo = Foo() + self.assertEqual(foo.spam, 1) + foo.spam = 2 + self.assertEqual(foo.spam, 2) + self.assertEqual( + Foo.spam.__doc__, + "spam wrapped in property subclass") + class FooSub(Foo): + @Foo.spam.setter + def spam(self, value): + """another ignored docstring""" + self._spam = 'eggs' + foosub = FooSub() + self.assertEqual(foosub.spam, 1) + foosub.spam = 7 + self.assertEqual(foosub.spam, 'eggs') + self.assertEqual( + FooSub.spam.__doc__, + "spam wrapped in property subclass") + + @unittest.skipIf(sys.flags.optimize <= 2, + "Docstrings are omitted with -O2 and above") + def test_property_new_getter_new_docstring(self): + + class Foo(object): + @PropertySub + def spam(self): + """a docstring""" + return 1 + @spam.getter + def spam(self): + """a new docstring""" + return 2 + self.assertEqual(Foo.spam.__doc__, "a new docstring") + class FooBase(object): + @PropertySub + def spam(self): + """a docstring""" + return 1 + class Foo2(FooBase): + @FooBase.spam.getter + def spam(self): + """a new docstring""" + return 2 + self.assertEqual(Foo.spam.__doc__, "a new docstring") + + + +def test_main(): + run_unittest(PropertyTests, PropertySubclassTests) + +if __name__ == '__main__': + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 21:07:53 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 21:07:53 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Different_exception_in_Jytho?= =?utf8?q?n=2E?= Message-ID: http://hg.python.org/jython/rev/0d7e67f04548 changeset: 6572:0d7e67f04548 user: Frank Wierzbicki date: Wed Apr 11 12:07:46 2012 -0700 summary: Different exception in Jython. files: Lib/test/test_property.py | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_property.py b/Lib/test/test_property.py --- a/Lib/test/test_property.py +++ b/Lib/test/test_property.py @@ -146,7 +146,8 @@ def spam(self): """Trying to copy this docstring will raise an exception""" return 1 - except AttributeError: + #This raises a TypeError in Jython. + except (AttributeError, TypeError): pass else: raise Exception("AttributeError not raised") -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Wed Apr 11 21:13:04 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Wed, 11 Apr 2012 21:13:04 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Not_sure_we_should_try_to_te?= =?utf8?q?st_readline=2E?= Message-ID: http://hg.python.org/jython/rev/80dabc21a534 changeset: 6573:80dabc21a534 user: Frank Wierzbicki date: Wed Apr 11 12:12:57 2012 -0700 summary: Not sure we should try to test readline. files: Lib/test/regrtest.py | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1276,6 +1276,7 @@ test_distutils test_dumbdbm test_pbcvm + test_readline test_shutil test_urllib2_localnet """ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Thu Apr 12 00:20:09 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Thu, 12 Apr 2012 00:20:09 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_skip_test=5Fsys=5Fsetprofile?= =?utf8?q?_and_test=5Fsys=5Fsettrace_for_now=2E?= Message-ID: http://hg.python.org/jython/rev/e6f6619ab24e changeset: 6574:e6f6619ab24e user: Frank Wierzbicki date: Wed Apr 11 15:19:58 2012 -0700 summary: skip test_sys_setprofile and test_sys_settrace for now. files: Lib/test/regrtest.py | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1278,6 +1278,8 @@ test_pbcvm test_readline test_shutil + test_sys_setprofile + test_sys_settrace test_urllib2_localnet """ #Last group above should be re-evaluated before releasing 2.7. -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Thu Apr 12 02:01:09 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Thu, 12 Apr 2012 02:01:09 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_from=3A?= Message-ID: http://hg.python.org/jython/rev/638e70391f1b changeset: 6575:638e70391f1b user: Frank Wierzbicki date: Wed Apr 11 16:35:14 2012 -0700 summary: from: http://hg.python.org/cpython/Lib/test/test_json.py at 22db03646d9b files: Lib/test/test_json.py | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_json.py b/Lib/test/test_json.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_json.py @@ -0,0 +1,17 @@ +"""Tests for json. + +The tests for json are defined in the json.tests package; +the test_suite() function there returns a test suite that's ready to +be run. +""" + +import json.tests +import test.test_support + + +def test_main(): + test.test_support.run_unittest(json.tests.test_suite()) + + +if __name__ == "__main__": + test_main() -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Thu Apr 12 02:01:09 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Thu, 12 Apr 2012 02:01:09 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Skip_test_for_now=2E?= Message-ID: http://hg.python.org/jython/rev/dc4d480864c8 changeset: 6576:dc4d480864c8 user: Frank Wierzbicki date: Wed Apr 11 17:00:59 2012 -0700 summary: Skip test for now. files: Lib/test/test_json.py | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_json.py b/Lib/test/test_json.py --- a/Lib/test/test_json.py +++ b/Lib/test/test_json.py @@ -8,8 +8,11 @@ import json.tests import test.test_support +from json.tests.test_unicode import TestUnicode def test_main(): + #FIXME: Investigate why test_bad_encoding isn't working in Jython. + del TestUnicode.test_bad_encoding test.test_support.run_unittest(json.tests.test_suite()) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Thu Apr 12 02:38:52 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Thu, 12 Apr 2012 02:38:52 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Add_step_to_itertools_count_?= =?utf8?q?function=2E?= Message-ID: http://hg.python.org/jython/rev/6bc032612d2e changeset: 6577:6bc032612d2e user: Frank Wierzbicki date: Wed Apr 11 17:38:46 2012 -0700 summary: Add step to itertools count function. files: src/org/python/modules/itertools.java | 23 +++++++++++--- 1 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/org/python/modules/itertools.java b/src/org/python/modules/itertools.java --- a/src/org/python/modules/itertools.java +++ b/src/org/python/modules/itertools.java @@ -84,22 +84,35 @@ public static PyString __doc__count = new PyString( - "count([firstval]) --> count object\n\nReturn a count object whose .next() " - + "method returns consecutive\nintegers starting from zero or, if specified, from firstval."); + "count(start=0, step=1) --> count object\n\n" + + "Return a count object whose .next() method returns consecutive values.\n" + + " Equivalent to:\n" + + "\n" + + " def count(firstval=0, step=1):\n" + + " x = firstval\n" + + " while 1:\n" + + " yield x\n" + + " x += step\n"); + + public static PyIterator count(final int init) { + return count(init, 1); + } /** * Creates an iterator that returns consecutive integers starting at init. */ - public static PyIterator count(final int init) { + public static PyIterator count(final int init, final int step) { return new PyIterator() { int counter = init; + int stepper = step; public PyObject __iternext__() { - return new PyInteger(counter++); + return new PyInteger(counter+=stepper); } public PyString __repr__() { - return (PyString)(Py.newString("count(%d)").__mod__(Py.newInteger(counter))); + return (PyString)(Py.newString("count(%d, %d)").__mod__(new PyTuple( + Py.newInteger(counter), Py.newInteger(stepper)))); } }; -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 13 23:08:26 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 13 Apr 2012 23:08:26 +0200 Subject: [Jython-checkins] =?utf8?b?anl0aG9uICgyLjUpOiBGaXggIzE4NzMgKHNs?= =?utf8?q?ice_deletion_error_with_-ve_step=29_and_add_tests_that_would_hav?= =?utf8?q?e?= Message-ID: http://hg.python.org/jython/rev/b0d1a8983efa changeset: 6578:b0d1a8983efa branch: 2.5 parent: 6542:196e2e8bad7b user: Jeff Allen date: Thu Apr 12 14:03:03 2012 +0100 summary: Fix #1873 (slice deletion error with -ve step) and add tests that would have detected it. The new tests in Lib/test/test_list_jy.py should perhaps be moved eventually to CPython's list_tests.py as they are not specific to Jython. files: Lib/test/test_list_jy.py | 103 +++++++++- src/org/python/core/SequenceIndexDelegate.java | 2 +- 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_list_jy.py b/Lib/test/test_list_jy.py --- a/Lib/test/test_list_jy.py +++ b/Lib/test/test_list_jy.py @@ -104,9 +104,108 @@ self.assert_(lst[1] in (1,10)) self.run_threads(tester) +class ExtendedSliceTestCase(unittest.TestCase): + '''Really thrash extended slice operations on list.''' + type2test = list + + def test_extended_slice_delete(self): + # Based on list_tests.CommonTest.test_extendedslicing . + # In the cited test case, the stop value is nearly always the default + # (None), meaning the end of the list, and often the start value is too. + # This contributed to the release of http://bugs.jython.org/issue1873 . + # This is a supplementary test focused on correct stopping. + + initial = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13] + expected1 = self.type2test([ 0, 1, 2, 3, 4, 5, 10,11,12,13]) + expected2 = self.type2test([ 0, 1, 2, 4, 6, 8, 10, 12,13]) + expected4 = self.type2test([ 0, 1, 3, 4, 5, 7, 8, 9, 11,12,13]) + + # Positive step + a = self.type2test(initial) + del a[6:10:1] + self.assertEqual(a, expected1) + a = self.type2test(initial) + del a[3:13:2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[3:12:2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[2:11:4] + self.assertEqual(a, expected4) + a = self.type2test(initial) + del a[2::4] + self.assertEqual(a, expected4) + + # Negative step (same results) + a = self.type2test(initial) + del a[9:5:-1] + self.assertEqual(a, expected1) + a = self.type2test(initial) + del a[11:1:-2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[11:2:-2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[10:1:-4] + self.assertEqual(a, expected4) + a = self.type2test(initial) + del a[10::-4] + self.assertEqual(a, expected4) + + def test_extended_slice_assign(self): + # Based on list_tests.CommonTest.test_extendedslicing . + # In the cited test case, the stop value is nearly always the default. + # This is a supplementary test focused on correct stopping. + + aa, bb, cc = 91, 92, 93 + src = self.type2test([aa,bb,cc]) + initial = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13] + expected1 = self.type2test([ 0, 1, 2, 3, 4, 5,aa,bb,cc, 9,10,11,12,13]) + expected2 = self.type2test([ 0, 1, 2,aa, 4,bb, 6,cc, 8, 9,10,11,12,13]) + expected4 = self.type2test([ 0, 1,aa, 3, 4, 5,bb, 7, 8, 9,cc,11,12,13]) + + # Positive step + a = self.type2test(initial) + a[6:9:1] = src + self.assertEqual(a, expected1) + a = self.type2test(initial) + a[3:9:2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[3:8:2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[2:11:4] = src + self.assertEqual(a, expected4) + a = self.type2test(initial) + a[2::4] = src + self.assertEqual(a, expected4) + + # Negative step (same results, as src is reversed) + src.reverse() + a = self.type2test(initial) + a[8:5:-1] = src + self.assertEqual(a, expected1) + a = self.type2test(initial) + a[7:2:-2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[7:1:-2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[10:1:-4] = src + self.assertEqual(a, expected4) + a = self.type2test(initial) + a[10::-4] = src + self.assertEqual(a, expected4) + + def test_main(): - test_support.run_unittest(ListTestCase, ThreadSafetyTestCase) - + test_support.run_unittest(ListTestCase, + ThreadSafetyTestCase, + ExtendedSliceTestCase) if __name__ == "__main__": test_main() diff --git a/src/org/python/core/SequenceIndexDelegate.java b/src/org/python/core/SequenceIndexDelegate.java --- a/src/org/python/core/SequenceIndexDelegate.java +++ b/src/org/python/core/SequenceIndexDelegate.java @@ -121,7 +121,7 @@ stop--; } } else if(step < 0) { - for(int i = start; i >= 0 && i >= stop; i += step) { + for(int i = start; i >= 0 && i > stop; i += step) { delItem(i); } } -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 13 23:08:26 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 13 Apr 2012 23:08:26 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_2=2E5_-=3E_default=29?= =?utf8?b?OiBNZXJnZSAyLjUu?= Message-ID: http://hg.python.org/jython/rev/15effb1ed703 changeset: 6579:15effb1ed703 parent: 6577:6bc032612d2e parent: 6578:b0d1a8983efa user: Frank Wierzbicki date: Fri Apr 13 13:44:31 2012 -0700 summary: Merge 2.5. files: Lib/test/test_list_jy.py | 103 +++++++++- src/org/python/core/SequenceIndexDelegate.java | 2 +- 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_list_jy.py b/Lib/test/test_list_jy.py --- a/Lib/test/test_list_jy.py +++ b/Lib/test/test_list_jy.py @@ -104,9 +104,108 @@ self.assert_(lst[1] in (1,10)) self.run_threads(tester) +class ExtendedSliceTestCase(unittest.TestCase): + '''Really thrash extended slice operations on list.''' + type2test = list + + def test_extended_slice_delete(self): + # Based on list_tests.CommonTest.test_extendedslicing . + # In the cited test case, the stop value is nearly always the default + # (None), meaning the end of the list, and often the start value is too. + # This contributed to the release of http://bugs.jython.org/issue1873 . + # This is a supplementary test focused on correct stopping. + + initial = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13] + expected1 = self.type2test([ 0, 1, 2, 3, 4, 5, 10,11,12,13]) + expected2 = self.type2test([ 0, 1, 2, 4, 6, 8, 10, 12,13]) + expected4 = self.type2test([ 0, 1, 3, 4, 5, 7, 8, 9, 11,12,13]) + + # Positive step + a = self.type2test(initial) + del a[6:10:1] + self.assertEqual(a, expected1) + a = self.type2test(initial) + del a[3:13:2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[3:12:2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[2:11:4] + self.assertEqual(a, expected4) + a = self.type2test(initial) + del a[2::4] + self.assertEqual(a, expected4) + + # Negative step (same results) + a = self.type2test(initial) + del a[9:5:-1] + self.assertEqual(a, expected1) + a = self.type2test(initial) + del a[11:1:-2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[11:2:-2] + self.assertEqual(a, expected2) + a = self.type2test(initial) + del a[10:1:-4] + self.assertEqual(a, expected4) + a = self.type2test(initial) + del a[10::-4] + self.assertEqual(a, expected4) + + def test_extended_slice_assign(self): + # Based on list_tests.CommonTest.test_extendedslicing . + # In the cited test case, the stop value is nearly always the default. + # This is a supplementary test focused on correct stopping. + + aa, bb, cc = 91, 92, 93 + src = self.type2test([aa,bb,cc]) + initial = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13] + expected1 = self.type2test([ 0, 1, 2, 3, 4, 5,aa,bb,cc, 9,10,11,12,13]) + expected2 = self.type2test([ 0, 1, 2,aa, 4,bb, 6,cc, 8, 9,10,11,12,13]) + expected4 = self.type2test([ 0, 1,aa, 3, 4, 5,bb, 7, 8, 9,cc,11,12,13]) + + # Positive step + a = self.type2test(initial) + a[6:9:1] = src + self.assertEqual(a, expected1) + a = self.type2test(initial) + a[3:9:2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[3:8:2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[2:11:4] = src + self.assertEqual(a, expected4) + a = self.type2test(initial) + a[2::4] = src + self.assertEqual(a, expected4) + + # Negative step (same results, as src is reversed) + src.reverse() + a = self.type2test(initial) + a[8:5:-1] = src + self.assertEqual(a, expected1) + a = self.type2test(initial) + a[7:2:-2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[7:1:-2] = src + self.assertEqual(a, expected2) + a = self.type2test(initial) + a[10:1:-4] = src + self.assertEqual(a, expected4) + a = self.type2test(initial) + a[10::-4] = src + self.assertEqual(a, expected4) + + def test_main(): - test_support.run_unittest(ListTestCase, ThreadSafetyTestCase) - + test_support.run_unittest(ListTestCase, + ThreadSafetyTestCase, + ExtendedSliceTestCase) if __name__ == "__main__": test_main() diff --git a/src/org/python/core/SequenceIndexDelegate.java b/src/org/python/core/SequenceIndexDelegate.java --- a/src/org/python/core/SequenceIndexDelegate.java +++ b/src/org/python/core/SequenceIndexDelegate.java @@ -121,7 +121,7 @@ stop--; } } else if(step < 0) { - for(int i = start; i >= 0 && i >= stop; i += step) { + for(int i = start; i >= 0 && i > stop; i += step) { delItem(i); } } -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 13 23:21:07 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 13 Apr 2012 23:21:07 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=282=2E5=29=3A_backport_fix_for?= =?utf8?q?_unicode_rpartition_=28forgot_to_do_it_here_first=29=2E?= Message-ID: http://hg.python.org/jython/rev/76310e1a0785 changeset: 6580:76310e1a0785 branch: 2.5 parent: 6578:b0d1a8983efa user: Frank Wierzbicki date: Fri Apr 13 14:21:00 2012 -0700 summary: backport fix for unicode rpartition (forgot to do it here first). files: src/org/python/core/PyString.java | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/org/python/core/PyString.java b/src/org/python/core/PyString.java --- a/src/org/python/core/PyString.java +++ b/src/org/python/core/PyString.java @@ -1243,7 +1243,7 @@ String sep; if (sepObj instanceof PyUnicode) { - return unicodePartition(sepObj); + return unicodeRpartition(sepObj); } else if (sepObj instanceof PyString) { sep = ((PyString) sepObj).getString(); } else { -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Fri Apr 13 23:21:52 2012 From: jython-checkins at python.org (frank.wierzbicki) Date: Fri, 13 Apr 2012 23:21:52 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_2=2E5_-=3E_default=29?= =?utf8?q?=3A_Null_merge_from_2=2E5_=28rpartition_backport=29=2E?= Message-ID: http://hg.python.org/jython/rev/5eb134450d9c changeset: 6581:5eb134450d9c parent: 6579:15effb1ed703 parent: 6580:76310e1a0785 user: Frank Wierzbicki date: Fri Apr 13 14:21:44 2012 -0700 summary: Null merge from 2.5 (rpartition backport). files: -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 00:43:06 2012 From: jython-checkins at python.org (alex.gronholm) Date: Sat, 14 Apr 2012 00:43:06 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=282=2E5=29=3A_Fixed_=231730_--?= =?utf8?q?_allowing_arbitrary_attributes_in_functools=2Epartial=2C_its?= Message-ID: http://hg.python.org/jython/rev/99b8d4f16639 changeset: 6582:99b8d4f16639 branch: 2.5 parent: 6580:76310e1a0785 user: Alex Gr?nholm date: Sat Apr 14 01:39:48 2012 +0300 summary: Fixed #1730 -- allowing arbitrary attributes in functools.partial, its subclasses and subclasses of zipimport.zipimporter to match CPython behavior files: Lib/test/test_functools_jy.py | 20 ++++++++ Lib/test/test_zipimport_jy.py | 11 ++++ NEWS | 1 + src/org/python/modules/_functools/PyPartial.java | 16 ++++++ src/org/python/modules/zipimport/zipimporterDerived.java | 24 ++++++++++ src/templates/zipimporter.derived | 2 +- 6 files changed, 73 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_functools_jy.py b/Lib/test/test_functools_jy.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_functools_jy.py @@ -0,0 +1,20 @@ +from functools import partial +import unittest + +from test import test_support + + +class PartialDictTest(unittest.TestCase): + def test_assign_attribute(self): + partial(lambda: None).somevar = 1 + + def test_subclass_assign_attribute(self): + class A(partial): pass + A(lambda: None).somevar = 1 + + +def test_main(): + test_support.run_unittest(PartialDictTest) + +if __name__ == "__main__": + test_main() diff --git a/Lib/test/test_zipimport_jy.py b/Lib/test/test_zipimport_jy.py --- a/Lib/test/test_zipimport_jy.py +++ b/Lib/test/test_zipimport_jy.py @@ -1,8 +1,12 @@ +from zipimport import zipimporter +from tempfile import NamedTemporaryFile import unittest import sys +import os.path import java.lang.Package from test import test_support +from zipfile import ZipFile class SyspathZipimportTest(unittest.TestCase): def setUp(self): @@ -31,8 +35,15 @@ from syspathpkg import module self.assertEquals(module.__name__, 'syspathpkg.module') +class ZipImporterDictTest(unittest.TestCase): + def test_subclass_assign_attribute(self): + class A(zipimporter): pass + path = os.path.abspath('tests/modjy/lib_python_folder/test_modules.zip') + A(path).somevar = 1 + def test_main(): test_support.run_unittest(SyspathZipimportTest) + test_support.run_unittest(ZipImporterDictTest) if __name__ == "__main__": test_main() diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Jython 2.5.3b2 Bugs Fixed + - [ 1730 ] functools.partial incorrectly makes __doc__ property readonly - [ 1537 ] expat: org.python.apache.xerces.parsers.SAXParser - [ 1268 ] SAX parsers wants to load external DTDs, causing an exception - [ 1805 ] threading.Thread always gets name "Thread" instead of a discriminating one diff --git a/src/org/python/modules/_functools/PyPartial.java b/src/org/python/modules/_functools/PyPartial.java --- a/src/org/python/modules/_functools/PyPartial.java +++ b/src/org/python/modules/_functools/PyPartial.java @@ -149,6 +149,22 @@ } @Override + public void __setattr__(String name, PyObject value) { + partial___setattr__(name, value); + } + + @ExposedMethod + final void partial___setattr__(String name, PyObject value) { + ensureDict(); + super.__setattr__(name, value); + } + + @Override + public PyObject fastGetDict() { + return __dict__; + } + + @Override @ExposedGet(name = "__dict__") public PyObject getDict() { ensureDict(); diff --git a/src/org/python/modules/zipimport/zipimporterDerived.java b/src/org/python/modules/zipimport/zipimporterDerived.java --- a/src/org/python/modules/zipimport/zipimporterDerived.java +++ b/src/org/python/modules/zipimport/zipimporterDerived.java @@ -16,9 +16,33 @@ private PyObject[]slots; + private PyObject dict; + + public PyObject fastGetDict() { + return dict; + } + + public PyObject getDict() { + return dict; + } + + public void setDict(PyObject newDict) { + if (newDict instanceof PyStringMap||newDict instanceof PyDictionary) { + dict=newDict; + } else { + throw Py.TypeError("__dict__ must be set to a Dictionary "+newDict.getClass().getName()); + } + } + + public void delDict() { + // deleting an object's instance dict makes it grow a new one + dict=new PyStringMap(); + } + public zipimporterDerived(PyType subtype) { super(subtype); slots=new PyObject[subtype.getNumSlots()]; + dict=subtype.instDict(); } public PyString __str__() { diff --git a/src/templates/zipimporter.derived b/src/templates/zipimporter.derived --- a/src/templates/zipimporter.derived +++ b/src/templates/zipimporter.derived @@ -1,4 +1,4 @@ base_class: zipimporter -want_dict: false +want_dict: true ctr: incl: object -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 02:27:07 2012 From: jython-checkins at python.org (alex.gronholm) Date: Sat, 14 Apr 2012 02:27:07 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fixed_=231730_--_allowing_ar?= =?utf8?q?bitrary_attributes_in_functools=2Epartial=2C_its?= Message-ID: http://hg.python.org/jython/rev/b5e1eb0d2546 changeset: 6583:b5e1eb0d2546 parent: 6581:5eb134450d9c user: Alex Gr?nholm date: Sat Apr 14 01:39:48 2012 +0300 summary: Fixed #1730 -- allowing arbitrary attributes in functools.partial, its subclasses and subclasses of zipimport.zipimporter to match CPython behavior (transplanted from 99b8d4f16639d6e210c09c6f5f68eb0d86598db7) files: Lib/test/test_functools_jy.py | 20 ++++++++++ Lib/test/test_zipimport_jy.py | 8 ++++ NEWS | 1 + src/org/python/modules/_functools/PyPartial.java | 16 ++++++++ 4 files changed, 45 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_functools_jy.py b/Lib/test/test_functools_jy.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_functools_jy.py @@ -0,0 +1,20 @@ +from functools import partial +import unittest + +from test import test_support + + +class PartialDictTest(unittest.TestCase): + def test_assign_attribute(self): + partial(lambda: None).somevar = 1 + + def test_subclass_assign_attribute(self): + class A(partial): pass + A(lambda: None).somevar = 1 + + +def test_main(): + test_support.run_unittest(PartialDictTest) + +if __name__ == "__main__": + test_main() diff --git a/Lib/test/test_zipimport_jy.py b/Lib/test/test_zipimport_jy.py --- a/Lib/test/test_zipimport_jy.py +++ b/Lib/test/test_zipimport_jy.py @@ -1,6 +1,7 @@ import unittest import sys import java.lang.Package + from test import test_support from zipimport import zipimporter @@ -42,8 +43,15 @@ obj = MyJavaClass() self.assertTrue(isinstance(obj, zipimporter)) +class ZipImporterDictTest(unittest.TestCase): + def test_subclass_assign_attribute(self): + class A(zipimporter): pass + path = os.path.abspath('tests/modjy/lib_python_folder/test_modules.zip') + A(path).somevar = 1 + def test_main(): test_support.run_unittest(SyspathZipimportTest) + test_support.run_unittest(ZipImporterDictTest) if __name__ == "__main__": test_main() diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Jython 2.5.3b2 Bugs Fixed + - [ 1730 ] functools.partial incorrectly makes __doc__ property readonly - [ 1537 ] expat: org.python.apache.xerces.parsers.SAXParser - [ 1268 ] SAX parsers wants to load external DTDs, causing an exception - [ 1805 ] threading.Thread always gets name "Thread" instead of a discriminating one diff --git a/src/org/python/modules/_functools/PyPartial.java b/src/org/python/modules/_functools/PyPartial.java --- a/src/org/python/modules/_functools/PyPartial.java +++ b/src/org/python/modules/_functools/PyPartial.java @@ -149,6 +149,22 @@ } @Override + public void __setattr__(String name, PyObject value) { + partial___setattr__(name, value); + } + + @ExposedMethod + final void partial___setattr__(String name, PyObject value) { + ensureDict(); + super.__setattr__(name, value); + } + + @Override + public PyObject fastGetDict() { + return __dict__; + } + + @Override @ExposedGet(name = "__dict__") public PyObject getDict() { ensureDict(); -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 15:24:37 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 15:24:37 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Re-enabling_skipped_tests=2C?= =?utf8?q?_in_agreement_with_Frank=3A_failures_most_likely_caused?= Message-ID: http://hg.python.org/jython/rev/00cd195883bc changeset: 6584:00cd195883bc user: Alan Kennedy date: Sat Apr 14 14:22:52 2012 +0100 summary: Re-enabling skipped tests, in agreement with Frank: failures most likely caused by bad DNS config on Unbuntu running inside a VM on a Mac. files: Lib/test/test_socket.py | 7 ------- 1 files changed, 0 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1832,8 +1832,6 @@ result = socket.getnameinfo(address, flags) self.failUnlessEqual(result[1], expected) - @unittest.skipIf(test_support.is_jython, - "FIXME: this is broken but worked recently - has dinsdale changed?") def testHost(self): for address, flags, expected in [ ( ("www.python.org", 80), 0, "dinsdale.python.org"), @@ -1891,7 +1889,6 @@ self.failUnlessEqual(sockaddr.address.hostAddress, "127.0.0.1") self.failUnlessEqual(sockaddr.port, 80) - @unittest.skip("FIXME: broken") def testIPV6AddressesFromGetAddrInfo(self): addrinfo = socket.getaddrinfo("localhost", 80, socket.AF_INET6, socket.SOCK_STREAM, 0, 0) if not addrinfo and is_bsd: @@ -1903,7 +1900,6 @@ self.failUnless(sockaddr.address.hostAddress in ["::1", "0:0:0:0:0:0:0:1"]) self.failUnlessEqual(sockaddr.port, 80) - @unittest.skip("FIXME: broken") def testAddressesFrom2Tuple(self): for family, addr_tuple, jaddress_type, expected in [ (socket.AF_INET, ("localhost", 80), java.net.Inet4Address, ["127.0.0.1"]), @@ -1915,7 +1911,6 @@ self.failUnless(sockaddr.address.hostAddress in expected) self.failUnlessEqual(sockaddr.port, 80) - @unittest.skip("FIXME: broken") def testAddressesFrom4Tuple(self): for addr_tuple in [ ("localhost", 80), @@ -1928,7 +1923,6 @@ self.failUnlessEqual(sockaddr.address.scopeId, 0) self.failUnlessEqual(sockaddr.port, 80) - @unittest.skip("FIXME: broken") def testSpecialHostnames(self): for family, sock_type, flags, addr_tuple, expected in [ ( socket.AF_INET, None, 0, ("", 80), ["localhost"]), @@ -1940,7 +1934,6 @@ sockaddr = socket._get_jsockaddr(addr_tuple, family, sock_type, 0, flags) self.failUnless(sockaddr.hostName in expected, "_get_jsockaddr returned wrong hostname '%s' for special hostname '%s'(family=%d)" % (sockaddr.hostName, addr_tuple[0], family)) - @unittest.skip("FIXME: broken") def testNoneTo_get_jsockaddr(self): for family, flags, expected in [ ( socket.AF_INET, 0, ["localhost"]), -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 17:35:13 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 17:35:13 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_for_some_issues_=231857?= =?utf8?q?=3A_A_combination_of_the_use_ephemeral_ports_and?= Message-ID: http://hg.python.org/jython/rev/10816fbd95c7 changeset: 6585:10816fbd95c7 user: Alan Kennedy date: Sat Apr 14 16:34:00 2012 +0100 summary: Fix for some issues #1857: A combination of the use ephemeral ports and deferred socket creation on jython resulted in attempts to bind to port '0', which failed with 'Address already in use' errors. files: Lib/test/test_xmlrpc.py | 24 ++---------------------- 1 files changed, 2 insertions(+), 22 deletions(-) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -91,7 +91,6 @@ s = xmlrpclib.dumps((new_d,), methodresponse=True) self.assertIsInstance(s, str) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_newstyle_class(self): class T(object): pass @@ -307,6 +306,7 @@ try: serv.socket.settimeout(3) serv.server_bind() + serv.server_activate() global ADDR, PORT, URL ADDR, PORT = serv.socket.getsockname() #connect to IP address directly. This avoids socket.create_connection() @@ -314,7 +314,6 @@ #causes slowdown e.g. on vista which supports AF_INET6. The server listens #on AF_INET only. URL = "http://%s:%d"%(ADDR, PORT) - serv.server_activate() serv.register_introspection_functions() serv.register_multicall_functions() serv.register_function(pow) @@ -366,6 +365,7 @@ serv.socket.settimeout(3) serv.server_bind() try: + serv.server_activate() global ADDR, PORT, URL ADDR, PORT = serv.socket.getsockname() #connect to IP address directly. This avoids socket.create_connection() @@ -373,7 +373,6 @@ #causes slowdown e.g. on vista which supports AF_INET6. The server listens #on AF_INET only. URL = "http://%s:%d"%(ADDR, PORT) - serv.server_activate() paths = ["/foo", "/foo/bar"] for path in paths: d = serv.add_dispatcher(path, SimpleXMLRPCServer.SimpleXMLRPCDispatcher()) @@ -450,7 +449,6 @@ # situation more gracefully, these tests should be modified appropriately. class SimpleServerTestCase(BaseServerTestCase): - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_simple1(self): try: p = xmlrpclib.ServerProxy(URL) @@ -461,7 +459,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_nonascii(self): start_string = 'P\N{LATIN SMALL LETTER Y WITH CIRCUMFLEX}t' end_string = 'h\N{LATIN SMALL LETTER O WITH HORN}n' @@ -476,7 +473,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_unicode_host(self): server = xmlrpclib.ServerProxy(u"http://%s:%d/RPC2"%(ADDR, PORT)) self.assertEqual(server.add("a", u"\xe9"), u"a\xe9") @@ -493,7 +489,6 @@ self.assertEqual(response.status, 404) self.assertEqual(response.reason, 'Not Found') - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_introspection1(self): try: p = xmlrpclib.ServerProxy(URL) @@ -508,7 +503,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_introspection2(self): try: # test _methodHelp() @@ -521,7 +515,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") @unittest.skipIf(sys.flags.optimize >= 2, "Docstrings are omitted with -O2 and above") def test_introspection3(self): @@ -536,7 +529,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_introspection4(self): # the SimpleXMLRPCServer doesn't support signatures, but # at least check that we can try making the call @@ -550,7 +542,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_multicall(self): try: p = xmlrpclib.ServerProxy(URL) @@ -568,7 +559,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_non_existing_multicall(self): try: p = xmlrpclib.ServerProxy(URL) @@ -590,7 +580,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_dotted_attribute(self): # Raises an AttributeError because private methods are not allowed. self.assertRaises(AttributeError, @@ -601,7 +590,6 @@ # This avoids waiting for the socket timeout. self.test_simple1() - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_partial_post(self): # Check that a partial POST doesn't make the server loop: issue #14001. conn = httplib.HTTPConnection(ADDR, PORT) @@ -611,12 +599,10 @@ class MultiPathServerTestCase(BaseServerTestCase): threadFunc = staticmethod(http_multi_server) request_count = 2 - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_path1(self): p = xmlrpclib.ServerProxy(URL+"/foo") self.assertEqual(p.pow(6,8), 6**8) self.assertRaises(xmlrpclib.Fault, p.add, 6, 8) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_path2(self): p = xmlrpclib.ServerProxy(URL+"/foo/bar") self.assertEqual(p.add(6,8), 6+8) @@ -777,12 +763,10 @@ # enough to choose the scheme (HTTP) self.url = 'http://' - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_close(self): p = xmlrpclib.ServerProxy(self.url) self.assertEqual(p('close')(), None) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_transport(self): t = xmlrpclib.Transport() p = xmlrpclib.ServerProxy(self.url, transport=t) @@ -818,7 +802,6 @@ # reset message class SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.MessageClass = mimetools.Message - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_basic(self): # check that flag is false by default flagval = SimpleXMLRPCServer.SimpleXMLRPCServer._send_traceback_header @@ -837,7 +820,6 @@ # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_fail_no_info(self): # use the broken message class SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.MessageClass = FailingMessageClass @@ -883,7 +865,6 @@ def tearDown(self): self.cgi = None - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_cgi_get(self): with test_support.EnvironmentVarGuard() as env: env['REQUEST_METHOD'] = 'GET' @@ -901,7 +882,6 @@ self.assertEqual(status, '400') self.assertEqual(message, 'Bad Request') - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_cgi_xmlrpc_response(self): data = """ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 19:13:34 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 19:13:34 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Fix_more_issues_in_=231857?= =?utf8?q?=3A_Non-daemon_threads_were_causing_the_test_suite_to?= Message-ID: http://hg.python.org/jython/rev/5f3c1eb21b87 changeset: 6586:5f3c1eb21b87 user: Alan Kennedy date: Sat Apr 14 18:12:22 2012 +0100 summary: Fix more issues in #1857: Non-daemon threads were causing the test suite to hang. files: Lib/test/test_xmlrpc.py | 10 +++------- 1 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -428,7 +428,9 @@ self.evt = threading.Event() # start server thread to handle requests serv_args = (self.evt, self.request_count, self.requestHandler) - threading.Thread(target=self.threadFunc, args=serv_args).start() + t = threading.Thread(target=self.threadFunc, args=serv_args) + t.setDaemon(True) + t.start() # wait for the server to be ready self.evt.wait(10) @@ -635,7 +637,6 @@ #A test case that verifies that a server using the HTTP/1.1 keep-alive mechanism #does indeed serve subsequent requests on the same connection class KeepaliveServerTestCase1(BaseKeepaliveServerTestCase): - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_two(self): p = xmlrpclib.ServerProxy(URL) #do three requests. @@ -656,7 +657,6 @@ #ask for two keepalive requests to be handled. request_count=2 - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_close(self): p = xmlrpclib.ServerProxy(URL) #do some requests with close. @@ -674,7 +674,6 @@ self.assertGreaterEqual(len(self.RequestHandler.myRequests[-1]), 2) self.assertGreaterEqual(len(self.RequestHandler.myRequests[-2]), 2) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_transport(self): p = xmlrpclib.ServerProxy(URL) #do some requests with close. @@ -714,7 +713,6 @@ def setUp(self): BaseServerTestCase.setUp(self) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_gzip_request(self): t = self.Transport() t.encode_threshold = None @@ -726,7 +724,6 @@ b = self.RequestHandler.content_length self.assertTrue(a>b) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_bad_gzip_request(self): t = self.Transport() t.encode_threshold = None @@ -737,7 +734,6 @@ with cm: p.pow(6, 8) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_gsip_response(self): t = self.Transport() p = xmlrpclib.ServerProxy(URL, transport=t) -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 19:42:37 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 19:42:37 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Emulating_cpython_ValueError?= =?utf8?q?_more_precisely=3A_Fixes_another_issue_in_=231857=3A?= Message-ID: http://hg.python.org/jython/rev/8202bf4aedb5 changeset: 6587:8202bf4aedb5 user: Alan Kennedy date: Sat Apr 14 18:41:24 2012 +0100 summary: Emulating cpython ValueError more precisely: Fixes another issue in #1857: Error message not exactly as expected files: Lib/test/test_xmlrpc.py | 1 - src/org/python/core/PyString.java | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -832,7 +832,6 @@ else: self.fail('ProtocolError not raised') - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_fail_with_info(self): # use the broken message class SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.MessageClass = FailingMessageClass diff --git a/src/org/python/core/PyString.java b/src/org/python/core/PyString.java --- a/src/org/python/core/PyString.java +++ b/src/org/python/core/PyString.java @@ -1659,9 +1659,9 @@ } return bi.intValue(); } catch (NumberFormatException exc) { - throw Py.ValueError("invalid literal for int() with base " + base + ": " + getString()); + throw Py.ValueError("invalid literal for int() with base " + base + ": '" + getString()+"'"); } catch (StringIndexOutOfBoundsException exc) { - throw Py.ValueError("invalid literal for int() with base " + base + ": " + getString()); + throw Py.ValueError("invalid literal for int() with base " + base + ": '" + getString()+"'"); } } @@ -1733,10 +1733,10 @@ 0,0, "invalid decimal Unicode string"); } else { - throw Py.ValueError("invalid literal for long() with base " + base + ": " + getString()); + throw Py.ValueError("invalid literal for long() with base " + base + ": '" + getString()+"'"); } } catch (StringIndexOutOfBoundsException exc) { - throw Py.ValueError("invalid literal for long() with base " + base + ": " + getString()); + throw Py.ValueError("invalid literal for long() with base " + base + ": '" + getString()+"'"); } } -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 19:50:21 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 19:50:21 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Adding_test=5Fsupport=2Ecapt?= =?utf8?q?ured=5Fstdin=28=29=3A_Fixes_another_issue_in_=231857=2C_which?= Message-ID: http://hg.python.org/jython/rev/f9fd1f69ed01 changeset: 6588:f9fd1f69ed01 user: Alan Kennedy date: Sat Apr 14 18:49:00 2012 +0100 summary: Adding test_support.captured_stdin(): Fixes another issue in #1857, which required the function files: Lib/test/test_support.py | 3 +++ Lib/test/test_xmlrpc.py | 2 +- 2 files changed, 4 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -827,6 +827,9 @@ def captured_stdout(): return captured_output("stdout") +def captured_stdin(): + return captured_output("stdin") + #======================================================================= # Decorator for running a function in a different locale, correctly resetting diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -877,7 +877,7 @@ self.assertEqual(status, '400') self.assertEqual(message, 'Bad Request') - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") + #@unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_cgi_xmlrpc_response(self): data = """ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 19:53:33 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 19:53:33 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Deleting_a_line_which_should?= =?utf8?q?_have_been_deleted_in_the_last_checkin=2C_but_was?= Message-ID: http://hg.python.org/jython/rev/056d24d5cf10 changeset: 6589:056d24d5cf10 user: Alan Kennedy date: Sat Apr 14 18:52:23 2012 +0100 summary: Deleting a line which should have been deleted in the last checkin, but was only commented out files: Lib/test/test_xmlrpc.py | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -877,7 +877,6 @@ self.assertEqual(status, '400') self.assertEqual(message, 'Bad Request') - #@unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") def test_cgi_xmlrpc_response(self): data = """ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 20:48:31 2012 From: jython-checkins at python.org (alan.kennedy) Date: Sat, 14 Apr 2012 20:48:31 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Changing_the_cause_of_a_skip?= =?utf8?q?ped_test_in_test=5Fxmlrpc=2Epy?= Message-ID: http://hg.python.org/jython/rev/2ee18829e246 changeset: 6590:2ee18829e246 user: Alan Kennedy date: Sat Apr 14 19:47:18 2012 +0100 summary: Changing the cause of a skipped test in test_xmlrpc.py files: Lib/test/test_xmlrpc.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -145,7 +145,7 @@ xmlrpclib.loads(strg)[0][0]) self.assertRaises(TypeError, xmlrpclib.dumps, (arg1,)) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") + @unittest.skipIf(test_support.is_jython, "FIXME: #1875 not working in Jython") def test_default_encoding_issues(self): # SF bug #1115989: wrong decoding in '_stringify' utf8 = """ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 20:53:09 2012 From: jython-checkins at python.org (shashank.bharadwaj) Date: Sat, 14 Apr 2012 20:53:09 +0200 Subject: [Jython-checkins] =?utf8?q?jython_=28merge_default_-=3E_default?= =?utf8?q?=29=3A_merge?= Message-ID: http://hg.python.org/jython/rev/c614d45fdd74 changeset: 6592:c614d45fdd74 parent: 6591:a6ff07bed361 parent: 6590:2ee18829e246 user: Shashank Bharadwaj date: Sat Apr 14 12:52:42 2012 -0600 summary: merge files: Lib/test/test_xmlrpc.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -145,7 +145,7 @@ xmlrpclib.loads(strg)[0][0]) self.assertRaises(TypeError, xmlrpclib.dumps, (arg1,)) - @unittest.skipIf(test_support.is_jython, "FIXME: #1857 not working in Jython") + @unittest.skipIf(test_support.is_jython, "FIXME: #1875 not working in Jython") def test_default_encoding_issues(self): # SF bug #1115989: wrong decoding in '_stringify' utf8 = """ -- Repository URL: http://hg.python.org/jython From jython-checkins at python.org Sat Apr 14 20:53:08 2012 From: jython-checkins at python.org (shashank.bharadwaj) Date: Sat, 14 Apr 2012 20:53:08 +0200 Subject: [Jython-checkins] =?utf8?q?jython=3A_Updated_the_jnr-*_and_jffi-*?= =?utf8?q?_jars_to_the_updated_versions=2E_We_now_pull_from?= Message-ID: http://hg.python.org/jython/rev/a6ff07bed361 changeset: 6591:a6ff07bed361 parent: 6589:056d24d5cf10 user: Shashank Bharadwaj date: Sat Apr 14 12:51:54 2012 -0600 summary: Updated the jnr-* and jffi-* jars to the updated versions. We now pull from https://github.com/jnr, and has changed from org.jruby.* to jnr.*. Also updated the .classpath and the build files (and added the pydevproject, but if it bothers anybody feel free to delete it) files: .classpath | 15 +++++---- .pydevproject | 7 ++++ build.xml | 10 ++++-- extlibs/jffi-1.2.2-SNAPSHOT.jar | Bin extlibs/jffi-Darwin.jar | Bin extlibs/jffi-i386-FreeBSD.jar | Bin extlibs/jffi-i386-Linux.jar | Bin extlibs/jffi-i386-SunOS.jar | Bin extlibs/jffi-i386-Windows.jar | Bin extlibs/jffi-ppc-Linux.jar | Bin extlibs/jffi-sparc-SunOS.jar | Bin extlibs/jffi-sparcv9-SunOS.jar | Bin extlibs/jffi-x86_64-FreeBSD.jar | Bin extlibs/jffi-x86_64-Linux.jar | Bin extlibs/jffi-x86_64-Windows.jar | Bin extlibs/jffi.jar | Bin extlibs/jnr-constants-0.8.3-SNAPSHOT.jar | Bin extlibs/jnr-ffi-0.7.4-SNAPSHOT.jar | Bin extlibs/jnr-netdb-0.4.jar | Bin extlibs/jnr-netdb-1.0.6-SNAPSHOT.jar | Bin extlibs/jnr-posix-2.1-SNAPSHOT.jar | Bin extlibs/jnr-posix.jar | Bin src/org/python/core/Py.java | 10 ++++++- src/org/python/core/PySystemState.java | 2 +- src/org/python/core/io/FileIO.java | 2 +- src/org/python/core/util/PlatformUtil.java | 2 +- src/org/python/modules/errno.java | 2 +- src/org/python/modules/posix/PosixModule.java | 8 ++-- src/org/python/modules/posix/PyStatResult.java | 2 +- src/org/python/modules/posix/PythonPOSIXHandler.java | 10 +++--- tests/java/org/python/core/PySystemStateTest.java | 2 +- 31 files changed, 45 insertions(+), 27 deletions(-) diff --git a/.classpath b/.classpath --- a/.classpath +++ b/.classpath @@ -12,13 +12,11 @@ - + - + - - @@ -38,8 +36,11 @@ - - - + + + + + + diff --git a/.pydevproject b/.pydevproject new file mode 100644 --- /dev/null +++ b/.pydevproject @@ -0,0 +1,7 @@ + + + + +Default +python 2.7 + diff --git a/build.xml b/build.xml --- a/build.xml +++ b/build.xml @@ -156,7 +156,7 @@ - + @@ -216,9 +216,11 @@ - - - + + + + + diff --git a/extlibs/jffi-1.2.2-SNAPSHOT.jar b/extlibs/jffi-1.2.2-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..84a4e739945b3531ee234b468b1a158d6f17b5cd GIT binary patch literal 135780 zc$|#8bDU&fl0ICvZQHhO+qUiMvTfT&SC?(uwyiF{Jv+1e+waWmzMGkmpFB6?{t2_Aa}=b3L7)Ks_A;=I5dipaFUUV4E2<($D=8;Nuka5w2mswbYId$Jiq?Ndfqw+$ zzpKd#%1MfeDyz`Riap3qPRK~p(#^q2(^5 at O&NL}8EHdvNInhW>kJ3of3PFG$7ON$r zQTLK~v}H#rAxkSMyW~*Spx{6wB{3_Z`XEmzJ^cAcirHDJcYg>oLLfN}7EyZcNoovC z)1cNI!QP-SD|2*WXaW>K;lFI4`zISf{)n-?E&czj0rd|JYg0Qz%l}0W{x5n~W at i7J zGRD6uTiUspI at uZ8{5Mbj?XI*R9Uts~008TM1n*z(lKjVA&UD5$hR)8e3KMcbj3~TE ztX$DQ!Xa86pocja=~(TeNiYhbVcwb0Xy9y>xIR*#*{yV50sWHiu+bM1sB(q`~AE7NhSKDd>bgoT-EYn}#Uz=;bo9nDy&n7Cna7iSR2Xq-b%r zTZ8!*BO^z2%gj;v8;>}5?*mHR@?3&i6yW9uK?z^*6NPGVArI?J^>2*nh@=*@EpM%e zjbbLGNiGP`(yAlgxwUsa!JFh{e5ka&_t*KXn+GgsG|N_BIu`THQ4`{@4Kg-Z&v0A_a7soSm(+E_ZkR9sE21JBL(*^j#4GUB&d&65<t1 at emjlD4j`cY;*z6Yo6q~si^tu&Wh{=~$pdg>|T z{*dY~^T{#-mfskGUS(4&2wCn#zbCA>TDdfB|^x=%PM&L~f*3L+fpH6XA#Uxi{QjwlkfxR{d60ChW+ zX)%Dwx&`_Ry2mf#EpTp7Jq6#ilX=5HDN|^l?Tl@$iJSRk+xccKY-50b#}6RAw=jZj z(>^G|1c8|h&tO at E84v7kR77A;2O%yB617GtA`JtG zSqREKwSW_8iV=g-I|-SVm}KVq%Fe-jX`NzTN_}`*dno$|;z>`BWm7%SDB9%y+0G_R zT6(bMSBr>^r*YQFmU*i2l~WqGWt;tt1Nj&Nl>$FNSs(PwhA!ztbphUk^p;Jo=b$?-&pDG?6ceXzBodY^i+w z5Lr*Oo@&i>dOUegyq-FFGJh1SB!AXaA$}@p54yUg+DY^*X*FaGw8vYn{QR{S_f2q80NEh!^keo z(W)RX$5rQt1jhrXeS!P at C1CqC;Lt(GX5D=RXm933*8M*YC~icZhY7SS#njc|)6dDbxKC;2Mj^Dt;CuNNgps+< z?2rP*Jc9hp&nPc(h0xm}Hz-EioPGdy0b}UTK1Re_`U%v9Qdr*1ja{I~>lWNt=)FT7 z0MMoc!x3fIi9vV-8;}-k7_|O~O3uv;@{0j(Exu!_wdjl#j9H<`??cOQEtLUC{mlX}3eL??g8dQ!aX*i7N0JcU zUDd^4YOGjfbCWf at wk}8uvIl`*T(gBXh67v0Z@ z1ihx~eUdOTkl|GFBVeLA%-9c at t9Ptmf~JCgwA8lOPSk5u#j&lfLltfsy%XS(1b9&X zbeDtkbef!L4I-ieC*^Td7=Rg=huyZ!o?>|Mmq2s{i~syy^{i=FoA+PuZrq7m!uBF4 z%6B;9&6o|0@)941L3spP%*Y=vi9GJJsh38fqoD4c`+2Q(!zkJ29MX#`qns at U%FOAF zfA9!cGCX`9cn52Y9|po_3IvNKm9HaU-qe~Ek;)L}Jvh6 at gJzIStK~wOra#Tle2-o~ zvqt)*H&ys>VO?#C)jJ4}QAf}Cg?eceej7kQz2^0zSgKJV9D!7J!3tti6VB$%-SGfubGU57P^My2j$80samLPHYV3HbmSxPm z9_~NiyI*{FHpqYPe1Cm`_ljV at SH*dhA2|TK>e1d?MTCLD<3HR& z!cTyy!T3-y?62m?ZM_KnCP3j>bNR?Q_dQ#)bM|w zMW6;MlH(V!H>+*S#ioN$nV`N4zJPZ>`aqB9aK;9zXx~W{S#;s`Z2Gm3*w?;wK0EEP zKwg6FwtMf~oB`G27GckoTZ=eGG8X!&qDmKUNPn9yWx%8e2zs?1&@})boG!IY$?#rX z*C*7Fz)f$;OPO_HtJu$bMoFH{d~#|Yus}ZyQQd8X`l2D$Vtq4KLU8NT{_PDELW{Y5 z+&HEH=Gt?jNDP~Hk_t+8YO?ethF{yZqjV*1`HOGWwQSsZ=7!s>d?Yg(qx at y~tQgUL zoM!<}$L((IV@@;{R_X>EpPC*YEyt~^#YdoYEOXASqr*>~iqMBW%85Nb7I&PD^^gj+ zZz}=YZly%5#xoaxohBixvd#8pZ7KH3Ru!IM)63eA-oa$xXnLBT)it09mPOVlG%;eu zAvA1)3<`tY5ycqHF0(ZxG6HhD!C_;NGg)@>PGM++%$JHz5fRQ)yc_~N(C%kTi7-3U zd!bxD5Dguxm3!6&&xX3wVDBj#KLL|$v1z0V at DOK#;xKLyeW6Z%1t(^Q~p&Ge; z*TSPE%1MQ6g3PsWv3W at 1sAXgrZRU3g%@p6_nsH;3XG0tWIZ9SmsO|uo^Fz~w=Twy6 z)l&M4hoZ82Dtck4N7#s_QQ4-ebxv$Ka!f6uh}Bh_H&lAcCv2{E%Gk`r#+_U-NQCJ( zGJ`L~yx1&hU^GlOCdc$RhIPw%66717iHUxqZno>zidN#1S_=2lT1t}ARF;yYv=u0l z`%9XglB+;HNC~adEX?;3`XbNjH3UV^H`HQH_{fZCueMUdC;P8 at MBDwpA@pNzEr-AH zfcbF%%7||#E#z6cRzcH&Gnh#imkN!Po}9in^W<~GeW zhx0sOm~(f{Qw%Eci|x6h+{+2i=mBo_n6{Y9xa9f8!o?dSt>EVzJUlz9GTAY{LUqWLjTKT|A|wu at NKN>wsJ4nzlOR*zN{{ar1I91JD32 zJU%Q8Lr8ds1OWmRuq!XP`FUBAASr2jX0x+(_WCX$8+jTG&HMy^T2pkZ_$CW>4$ z+w at KaM&9|>oMW{OBR6J`6Eudjqx?h$v?jx7Ob)fWFd;L!l8@3vsBieNy1sSk(;?{=Axq0PQGlo)J%53 z7+uP*u`!7h95eD#O0MsXs>}NLzL|;DB;z;DnyRy4-#S&8Fmx#AiDsfH1Lpk;$7%8h zy?CXd7OOf`zgW@$un)kTC$D~?dx%qb5^K2Bu_GHbPUa#L3*~}R#@|>!6_C=ljyei9GCIEV7lH<{3G0f2dI1l zW2d!)?S&BzSHoX{wcn0~o$oO|3Q6m&%1*G(qx&XVb>2_+h)^~|vNU)FRwd)7M~&A{ z7sR3HAbNw+$(8KJZ(IRscTzBQP at SPGpxeD!P--jXprAR@>%^oRO;Bb-qj%d#tI at PT zzxLb$xE<4a`8H{1!~6og>-Bf_Hpv|TfPumoNNxe~KP at r#TktX*?4vuPVGNd>-PstI*H7Z|7E at Cpgahygci^#`;|D zKeEB{++uBN96`CPY+~6=yqZWqt*;n{!vJH=M}3 at t)Qmwz8*opkLE&JGD--gGl156)v2vkkvvZ^HmEI zxl+$sbm9|f|MQbqCu`A*P~@!ReC(041)Z9T{W zNzIQU7tmc=(`x7-f1=wNYJi&*gUsolOxt>5-WVUy0sgvx9x{QJ`zzzE9nrB2uk1kI z-9Wd9ka!~^0DPesx&lIek*+M7%VBf=0?OaXr+95`BA_|FCO_nM%RewaT%vOeQG&me zQV3#rLIVk`DJ9G~M)gq+Z`uW8RRbL`#k701TzO+Uc7GZz&p5zHI74Ct2!)Wb)1O2tU z>O_6A|p3%yjw)tF at 1)i6(f z(mpThY-SkuGpJuvQ8g+>G0psZC7g%`%mb5tT9>#PV=mTBV3TkZ6CU)D at mX#OW9gS!A6kITA>y!1)CT!kfbPB z36=<__X?!hW@iE-4YeuUs$$Mi(^BiBM!P)crV-2!~7Ep5vo`$#E6-TUol at J5m8Kl1*cQT7sZx(y zkt5R;FoakV8mx?N24%!1O)Q`-$$qw5U8t_l)Sj0%Y&CZ>Rx$#_0K%|yanH8|iVuxR z{}O+-PTup$(o}Jst6U at 1Wqb{c{nlQ+4Q(kJ!|0X#(n`2PkpodkY=F`g!yE%xHmM$n zM;r-_mL)N at 5)eX-rE_W?nj=kTqKTz5)*j}@iRnvKJhBL!;gVp2ad&&iK)NDfDFV(p zV%7Gluc1Yy6)>Os-eFJQ!*~Lx-OV(!)^2awAWfD~uh3RpJSuEYr=^&vXrl~mvOS&e zI<&0F=1M7p#*e>|U?|z{90JDu4AvwTZ3f6tdX8 z3*+u?3bnG(rt8F+GB#-%C2D9C%$Ml9o5t5~4 at -!N)FXN5nMo5u6EW=Y0a)y@&&TsJ zn&=R at y>+XwZ+_c2gJ`6`%kujTYmOtR>4!jeN&)%_!>JRWIPn3^c84q-|4ThRXxL`D zE2q~T&2&eGF^iL*eqn6tVcj#zt~J`OFpO~F4-O={DXz{(fVqH|y?2B!>O1&dNtoT#yUxJnXZpCkj3b+Fk;B~I$v3mC+S}NZ}OJT)t?&6gPLav1| zxO`%{CMNkN2pl} z$t75)jMlI}!2eo|TFO#I4FCZEynp}znE%HeR9QniL-RjnNZHcP+{V)`ku|ywXdnC_0Xm#TAvHVf;GhjlA^{!&3EqTKeXC27>773!JW1v&@Q32? zT8hOZK!dD#=>q$M-o{H at 8ase$vXX>>_JAA|;w2fPxZXf+C{WP0#ZT at u+Kb47#pbPs z-xMfm#}*9nrAMtv736kp`@(xm7)Y)a#r}N=H8^gVMyVUbVN7eK z*3M-UyqK5hW9i=n8$46n|TrA{XYENI3_u1*16fiiOJ42c6+|(gNG|z0pxcs6`Nv& zfznV~SW+uTyK3!QHwlN&qUDb`P?Q;*o at dvK!KZ^)R2UmoN5t$?r{VEYml0Y zz5*Rl5}cVZtH8LF-$vfD&IdE7ro&)pLf^dAm96yNDA(D6o!ZenI zFhw~8*3M5A$XFjPpTiQR`faOPRt|BPsQ=eV`!L_7uY&^s;3NkCp!~lr`G23S5-m#u z?WGjH5vA%O`iLfucPSk4Z3ayV2sz+w6cdz<2w{SVs0Si`?ncuwiN+=X(pgZ7*)tdT zl8NS=Qf8NccnZ3L<^?%)i-6Qxmz`f3ZlyVv=Ia^rzo&iWXJ#5rs59{SUb^3>yLQ~C zd0#dkl6l_mljM=-#QcKtp68|c)`fS_?r`~i)4IvKZlYcT^1x2R=HC;-{4UAyKSl8T zs0R3v at 0<~P5bmTAdywv|5x at 7#{7ZITPk%ky`-S_bjqHqV?z|Iz2 at m>@d->lk;Ggvz zUinWn^N+1c&%ZZ4eu)o$N4`ddr-^=`29C{4l4 at k=`nf&O at TWD32d~WVJx5U>7eu7f z8pYX>>Yz!Qzm8N8&Z41!YR&qrE8^(eV3(zQGmLCF||Z=m_!9k@?Jar8Xebq>Xf^q7_&6a?zkT5E651 z1W4Q=;LDMSVTZxA at 6~Kr-^0J|5L6Hsyl)&4o*PTHKUMVkDb_gOZyg+f$cr|RXnEj~ zX(@VrnHup+fsVJZlsN^*Ds%%`94tnneGN-HgZtOQomRZqV=>?6+D;zRk3)6&0*^dL zoQv!5;i9vgUid>gB%B!WU=QObKQeb{4dy9W at dL4u(_2L1HhF%efzc0!%c!fBBt_2_ zu&uMAIh2JrBOV~XZ9nKpOG`mCnW{1cmp2KG+6*;f5~^H@+&Yc#9*Cp at zJ^&4447OW`76PwDqV zg&%b$-{K3hzP^&gA+(v?2F2Xuph@*sOul=tI96~W$&MwE)Lv4?Vm<`ED96tuj{(U_ z=Pk)naIRG+ at t-(KGgr^f9bRzjGlEZ>R{R6AZAShqX9mrqjZAp5EE?DBPbadN>{}~2 zalhr2 zNqQ99c?#ZxkemX_2D{10KT#Hv$h%Mt7&5?Yw=g;t!{g|eKV$&oAMh#(IgJ6=pD<>4Lxuf3$4rkBs zD({IvPboBGiF9(^pzLal>Bz6 zO+KAH^7es`2OcJv{G>h4uq{W)I$_fj at y4lC(!I^K(nYQvF4rAS(!o?B|8IO8YjoFrb zv3i6k+B}{2fWKL4&3dtXWJo>8^62U8&>W;Cf(z%M*pC;BbBYVoueht(thzIV^VV2- zg%Ic2BySBJ{^Z%+EBb?GWDf-K<~fE3u)4Aiu)4wy at Iv>9`_I^B_ejcEyaE at n;_lPK z;w*i#l;N at +!>Mk&jpK%n%Qe%2?gw-lPm)U0M$(G$v} zR at jym4}n&SC%=rA(M|_?FDZ-GXGrA7lT}l&BhCu_P zNqWqHi7}g&sw+Uv6!6+ipTGp&ANoNx5kQuFeINLhfFW`26~HQ}9HkYy&w0OvT^zfN z!0cxlSSgh`WpYVqA+cKtm8#q5VM+~q3BJ?g2JUBmQCh!SqXkuovy zJCY9zq_I!gDyy&ea*yf|s&_iFYz8W4pvKI#_;z8fZZ}GGWgS(XP`45LjnwKnwHckU zAVub=U$}&=J=`?zau|#|iTaOhQMK}FAUxI2jt z=F8)8oy1sXzD zG);w5GQHah;xFB$v8imXPLb`UOXkBHnzbCqr~Q`8Amn6{|LcxA}(MT-(zml*~e48VVXMZ+_V>NuhwFBFu zWlYTHJW>%YbwtSls`TEp^cJDLuIo5Jx3wVHL;<&?pebP26yyWD)xdVBc at 714jRg9# znoZO>J~8(#>yYdOprViZ=Z=$6R1?7;+JT3_DV&0Y&{Yn&LB_C>{g5rf%NG*%s_SEe z7+aaYpb>(NBmn%x at x*TmkXqUm{F!e?wF+H&w#}0?;Y2QeFOw_&GWWTB7=(dJS5+PJ zykBSH8Oq`~9^icFgdb{7W|LQRiS?sP+>-R!zW=Do#;WS{iAvyP4w!j=G8c^;EZcB* z(7e~vK`fhdVSf`Wo5Vqhd6!4TzTQ!4X;PA-ikZb-E1Pi_2YC7}ki);oVOzqVJBRmz zNrjJg`l`1Ln8O`y&@-vulex>3%bU%_V!N56?1wYE!!>32gIdS~8}^ClZY!w|U{b;F zva?D at t$IRek5n|Xaw6d8KG)$XV&>SvBWVO8c# zQ!Br=7YD#+RgPc53nv4FS|JPds0m)Uh2_B9KGe?~k+>3u at QviZxhe~O84s4gZ4V-5 z*Wci#`tCG-craP-m@$a*Y35q*M*@-A&1AN2WNMsbrWWqAkN*aEb>2Up1bE0nRrK}#ZPB@ zJDG?hN0WniAaSNmU3~V;EV{n~)e3Rp;atlAFpp2?4+h0^CFvS+oA(ahHl_83dNhv+ zqIo05)S{gn>gxZ>FVycaG7a(IT#1e=@Qq$xIDj&ZYD=^gL!I}MB2 at 3|GApbLOafop zr1GNovKu~br5oEiej+}a at 51U%oVZ#@HCt1~@89fFTZTS5 at VdyMM zmsK|Bhh)R28b1XdW#oM9v|2r3`heN|4a1g4J9;eqM=xx`P&s4b7}_EaFv}de@%ISP zDvuO?%W82$Aj$K1#;S>hFJ0QnET8`RW7-us+?uBabu6lr(yZe#u%^27_Z9fV*J9QAJAMf zJwSW<+*Z4U8?A&GyO?E=FC?1 zUS~itRUDV1!`|~uhlQr2t)>z)GNCrPbMYxdT6g3IUzlniplY2m-mSrK4HJf8I~z+3FuAHt2bh*W2-+bPt2Gl0QN&F z61Xy_hZSA{^9KvSlv^_DQcKs;=$BEQzTe|70_NF-*-POF*8>h)=z*1$?2;>dk&uJ} zYxyMeY%F~2GF2AmNFBn?~YysS=T9XY#PaXmc&X-~qM!=cq0(`QG=0{~yJU%@^%FT2V9aM3UMHg7!lu8_mI zg57Mk8U;8~hkVk4eY+8He0s1`^v4UEDOGK7nfl{pp2D at qU>1C7^32Iqn$Y_E_U~Rb z_bdrFL_hI&p^XawEwReG@{L|=^UIkzu-A{bx?#;w`ey120e at 1ron^l>C z7>oddD41UZZQww^R)col&$ulEao6CJeoSooPHg#>ZHDplc!nfK#Y#L7Pry?_e~v!g zXPk<5&*T<@l?XQjD3ZcLBP-shg zF6zP*bb($6wtz3>J$xpXd7h=d^PyhXYYv+`$KVfS3v25Xv!liqI_Mu zU}}Mlm!fSVN at +t46t*g?Q4L7}0t*FB4A^Fj at 4AG_l!<+ie*xtUf#?w3O`XOm&E%-% z2Z&^rns=OVpKN;fwDtJ;a{@3#mk?+nBq72V;zJUGnZSS{1X2yghr_TNffNaC!U*-( z0Qg`)C$`d7b2D9!w~owC+GgGGtgS68@$^(MKJrZ**A%`t4<;ZpoB5j_e?qclS^hFD at U zLn(RW8=zT&I;X4LB0L!7RtJJkGLxLQxrd^?9KzUjSDP_4=W at t^;j>4V011<1@&dJ* zV8`Wnsc$EKsX3435ZawBb(C^P56hhhY>ZI^b&g3#tz(bSJ|IT5<7qOfo2_v%|~*FALRW z2iF at wX&MTmu at gb22F7Odq_7ZQMcoAXI;7FZKX&w4g8(H<0dYA-xB%1P2l^}JhCN2P zN#yNj#NG70!*<8r;%hN!!mfSIKrnO;U|1`Y?FaQ7s1ONcX z|M5|fh^d*OtBuQF9|x&w|BZ(ERrWr?+^(^#z+$Mj4fXwO3J_>I!#SW+@*m_VG4Ylji2 zPeWT2x!32a)z9TZXmUWMDp6FWPrOGk>R()`>TN}-tA0jyStV0!7^U~1-0Wzocqr6$ ztL!koB9F1d)OcrZg>TODBdqoEmyK1VNKLcYTy=G&t6*qJ`NP26MfIPx$632QFOnHh zHsq+Hz#*(7`Ya}0(OgYBwN)Y_5v$*d)GShP$XIH>mx>-ER74uG=R=h?oCwr7Q?zV{ zPpQi+x#4*3<*SL0HW)1r;zG?t-p(3_Cz^Y at ugq7v)X^>pf39wUA{7pwrfN1xY3ZGe z@#>*-yXNPXGjZLih*5KqRF5gt(-|Yom_$1#>=H!;Mnm$XCG>?xYod_MUS!#JyThDK zkhIMyIeT6k%nszUufKnHGr7!Gt*OvHNi^T9ec*(81%=5 at fzXrAqk++#p~1oD!{p at mE|yymBGjxfW*GY{gh? z3cwSv#7d0_(!b$MLcTG@?th;eg|rT>kTM*GuJoM>;C#v*Co0Qw=!W(1cKY-6oXEf$ z{t9KVGZa{42qy$TV+Csdp>fXabLQcX8{pyndga;M3LwKOq}z)T%19I$ZHQtVNEfceXJK%0tr1nxKkpuP9U-Pb%#Vyi*8H-HxYeILz%=l`5bgnPERY$dj}QK|jX4Ryr633> z-VeH!c>ks_r at ISeGnB?CfI`+EjeU%0!JQT13-qrk*HK^c%JFAWvIYSFVE@;Y6R~vq zvnc)JvBy6$PVP_oxtXflJDEtzGc)~TWlCPNTM$4A{g&MHs5l#*Co2Jw0_d1EGfu)H z6a*L}EJm-1Y<0 zl+)hiqM0sOL*Eob7OhE0-+3Z1hoe(TlSkctVc&<}R*NnLT#+s&Xf|I%mboU*F;OaF z#j^7RwBV5x4BT`Gt#9IM)!J+TYmcB%aj`^Cl%JOq))mDT##XhG9dNaIm|OvI)(DS~ z2>%Z6Fx at l&2(rW(ZaS~5H+!ac57{QuwD^4}7t13>esD$-X}d$HehmA7k8XSS4TT{U zmJk7 at YoEdw0t3}=l{p3JPa&m3+;KX}oUBSw^g#S;@VS?-m^(I#r>1)l66-0C+5xFa zKx!P`ou436MDa6R#?cUcZ3iHR=oSoWyEMLOG&1BJAtiXK%mB5lA)b#nXdhuSUq=N6 za69Dj>qosi<%7z)@R~W5aH-IiAFczZF0hP$|0*1le!O=lxF>jI{J25EX<1aUBQmsm2 zhz8$BRHvvN(Szsar4BkK5W-Ayo%$mVrlH8l%7RZ%j3eQL at 95bA1IorfT9Q_GL8 z({Dm(-(M9dH4;XD_pY(z<9?K4qY;Xpg2v6lV}(fzg{>#UcK_8Xvqq54oImN63HfiC zasP6jz|8(1Ii%f)r at dKl!N-0tlJt~43Vka79-yxH`=vDNfK;{W-1aRYF@ zC(WMgbw{_{)f(%H50d-a0XEMQ(sz0v8b4RqxVaDBsnauQN>+ at EILG%P`aZe^!1irqoP%v$+aodx2+7CqSEsGNJFqnstnI5xKl&;82Mw5DABsnN>rTptobwbwTJ9 at Mr<$XnW}&gz)5Syp!J)vTm4V at b6} zVc}{KfzUv{&IEHEL`T|+3N_DsLin;G#e^+aQ$;z!CVK at 3Xj+2_Z>)Y!R*WPmq8c(d zsZEKovnneSaeM3}#({aPB#Jc6P(q&Z!pl-Q*Gc!7G3B*aa8!E!vK(tQw(NaSoh#kEH2>YXk>m-+6&ydpNY z&pgqY+Ez&lJu$SR%xVa>D|?9zs(C((=BT;9QjKl31+6B at R!-3T`lVlO-_<4MzT6I*g^Sqy;YB5)fm1(HP4ZWC7B7QT(`r-6ueVW5*E4!6tpE->&_wR_ zZZtZJ<5X0Cr$0 zSZarZ?+N8wAa+z50ns>D}qJ))MvrIa*Q9bV3qbDdI|4}#?9 z1;{Bc2?F{C%}2?H`y{&cfpoI at X?%+e5q6qf1WyEFlF%T(#|6VLH)x-68*f at x4I4+a zF1<~5>>GB-voh%qVzo141*tKFB4B2L|LHAe3l6# zLN9G0yhsH7oi`W-!(hbFdEzQjtHmT8u)cP&If8`69YDjpZ)aA-9l*mrg?oCPL2fP% zZa)WMbx6|u#?P2=mjFU52+5yb?-2P?UHl|zNQ{iKL?kuk+0hajl^~Lib*Fa;JHgAS z#>Qu*oP$u?v-*EJyXCokHODx^&)eqcmgVIAbVSqWCr^F&)tu$OMHX0qzw3e%{3W7( zYyK+q_=zX?E_ezbE?OHg-1`pIB_lNZ1Z6i8=ddad;ca at t(%K;SxmiqiMEd)Qtj|%L zJid=zJ4kF)kTpgCar+FIu4)Z&c1`p*p|)iTu8AXT1*z|Lg(A7 at -#SPJK- zHu+Vt(6BBma|;6YxW2GD)dxzzpRPJ~2KljlV6}^ki at grGUtqP}sWp*f8Ml&Wg)8cW z?RrEw`IxOzC;UPg;AbquCJ7c@}(?2_0DM9L8bHSRzW*8|a1Tu{+0 zr30*Nk^!)uq{{(=Y|oRIF<;bcTzxXOG)HE>(7yu at I9E=4N27`Lr^lSHIcGfE=zl*R z?Z5++-nBwgNlDTeY7QiaIw6 at mMh)5OHMm4m1o9+-T-TQr8p}i^gap(W>nIXAsEcbU z5`$M0_)}zB+Q&@1+PU z*r8eO+|u<|-%V7tU38xLn1y!Y*47rB-rl^cs_D>MsCuXE851mer!WKEpN{NmC(BQ! zCQ+TJrAcxeYkUAfj(Ya$E1cBoYpGG{7Q!1!`JnRbytT5W5=^#qbRo8{Ny7=4h=WrW z5^_=mWngjn+aGJeqT-~db=*qS>Dk`0HgH)1Pq?6KxgjZtt}sdIyL4Hd7O_=8w~N^f zLAR=)ZOlhI51);<&=GDX?`im at yzJp8xUI37v0BDy&|t1aoHkDmTCk5`3**24vx7?n1t;Jcs~Udfq$%T zkWot+Yd3?um}c~gNx;|D-7ZrS>nQQ(CG>y9Fa}1Oh;Lp=BOjo`%M4Dkj-I3>{?urk|YVa`9#Onuf-voHK)n6u4O{QXyGiP$oMUOqgC1Dtl@})jZo)m z^^V#joEs8yIux2;*rB at 2I#Cz!k)v>Zp4WLmEb7Zn)poIlb~2wzl$yj|FF8wlVm?_J zm9Cc7r5c4E&+>!`2q*2jup8 z18lie1l#8#B`h?ARfM7DSat;cJJ(ha1jU5W2tnWH1TOhlZW{%${Sk+w at xFqUc<=tM zp)qqcXk|X;o4ujsh8B!9^6LLLL7G-YQ+fe*(yp8eh+*C&?AY* zVbKT>H(=T!TnW;nzNXf(kkwfqzhf7P3TTnDZVWPjWg at tMlJb!o%0arw7nzJOe{$Is*RXl;qFl zpG48W`q|r at mude76eR6TY`fTwW=%t zZwsQC2Nc*EcYA-+`%KQOVfo3gETwSO0i2aT9P)xiZfVB at 6obvK zbYsVNk0Ab_6a9cl9__odkFeN=IkZNi;w=sWrvB2TDTFz3p_gf*%r|e~8AzUKCQ0&k z)yLdNrpzgI18L8cQQBNvZxk`Aa_-n5LPp(1?30B0d%Rx)Maw3ou{?a6$J(&@D~h(q z%EK{LrlJYq+Y)Xd-4wD*_YJ>07CZ2o#qZa)#UXvQDFO}6(ri-`K|bV;GEcf4%A5(t zTePAd7i~iy)Tf0VuUx7Mj?&4uDi)w1=)RRYwZ`O z08*lVd&2QQ&o}*pr=|hvp|XU^$KKSLktWWT7#|!=fG_o;jtBl@?NW>0#uN at QA}L%NB&AKX6 at fpamxty2i9yli zOok}HQG_Yn1d2x5WQ`_l)MNh;X$)DT8-mj&uop^X)D$^fQ=(YH09lkGKfwqw at -YF4 zC<&q}d6eXhrbv%7VN7J2P)X1PDxpH86tRLtNpw)WICIp6h&gZkTDp*}KFeh?Y;55=Aavj%9VHPPo*vgH< zP_t%jd#PlZ<(xQb&cRlApdHokd#L8;*Ak2dbI_w5=`u>}@S%f%Awxssc;!}QFwwfe z0+x#VvN)F_MUyBjwe8(3o2Yf#FVKVoy~5C?RVJ|5 at k&@2CoLjC&Q`%?6)ZNB>;^nk zTxAci_cKFN^?hV>bmRDyM&0Wq>p-X0j?ymis7oSk3QjmuWx75}*!NuSk#WMh#Mrg7 zjDc=su7LxxeD`xOBbLwc<4P_tJd;;%A}yK!kFj?Q&#h~^L}S~wxntY5ZQDDxZQHi( z+_AN at W9v?`!=2xvFZ6IqK}yM(jr&NMby`YwnFVoX?UH-)?gGRafY235s_ z%eKvC z%=;FZ-9nT}{Dx>zB@)wtI5SX~g7`&EaObRk^$`vKu@~)!t zqmPy2_dckuobj--c>YmKGYO1W^GUG2L#O`7i$r=`<`>3TM*>zJ^! z{c}x){@Xt!E0va38-llmK@`N5t!2w?ZvJNI_~C_?q!OK-VOvosDZO#Nh2xd-xe=6W<(cXtukgkXt`RQBG?hqR(1z*jxY;E~>voto$=R$f8!|lfV8Z zb*(4>c^|Vm+Yy{SCce%FGpg4jESi@^&Y3|$;xKw*bRvf}#m!L)eM(yG9aZzRp(cyN z4l7h9-7`~u-2S$_Eg&t&8>%>MINTiNOdk3zMR>96OgxaH0WwW8U6Y-um^&4VR0L)O zO`McUMCeJ at 9{vf=z7_)2vlxO8#Hm0(B)3}1*0K_ha?%~{nk?F2mMMAP|5Z2ypn}O1 zZa6!G+8`V}jkYrZhIVBh1Cg10PlVRcq?h{US+?cRPPYa5NU7fh5k(D?GzaiM26e(Iz$1)IguQX#s<*(gE#;y1*MYfylyECJD~w zQ7L=v+M#9q0pS at w)PS+60oJP<@_Xct!V at uX1af;UOhnVx)ULxp%AFr*&jl4aZH0V` z8#c?a!_HT{V!JbDn5W>&5_o)x_38EVCa1=)RjsxzR{TB!{)$8EfxPkIsWlOauJ&jh z>I5f(qU`rwbt5X>*%*mNhh*~6SvfipwKj2ADT~4&Ott*w5*mj}tBQ5iIpxvrTzwth zh53BTLlsi2Q!L)+-?u5TJZ~mU*3eA>B z^G()Y#{q_`C<&kZhgX7Yd!d18goi>RnCGzKs9Sz-dz-c4ny-B%iZ z$lyv0&=R9 at 1dsuBPtK97cLnruPFJdGFM=)i{ph#taVc4~#1cy8d51;c;gUuLs z3A_$YQ#mtAo&wT)qOe&~6yzW;m}TTpUzoDe+GyuwSY?o-h+uZ|N=Ue34p`NwCh(@* zQ2iW;>|oueOfCrA(4=e)Pij(gmoWP)U9RFw3z;=nB#30lpShu+cZ=(N^kiv5%iUnlvj- z6pPlq4g*5dQuK)eRe&H8xJL at UR7y@Z((egVt_eX*rv6O~V-(zo2ZN6?tnlnt{x+YI z3spQD!$RC=9}FudZyM#iIfQaxckhuv>WV;ZYJ6a6tRIp^Q0gvOz=ph`;y7L<5yzXr zf~?MIeiR_Sa`wP at y%dwMU8>Mg(oUwkleO4{(Jsa}8M7X2ohudm9K^UC`fQD< z$qu>HGZ7Xs-cGoULBFjiz9JdyIfCUdMdVO}>402fAV|gT$Fy0j&{|@UXw4M|c2mZ< zUHWXDuGyB0dXvFYd;mU$R6i5riCywb0IrSNeyN~M>QQGYfn at vBOmvhwpHR0Q^TtHn z*Brz8ce{k|43R?*=8cWGucf^8t8}|qu8D*%?2;i7%5~ zd)oz0#h*UP&ZM(nvQ`u#3XPCSaCsC=ui9Vj3i8HgV;_{G&d&1i?#kz!)ma*H&axMw zx at P9?a%|XIg-mPQmJxcf(l~mD8%>%6CpS~ZF|89rXwou_xI(5)Q)NhPRHbt;7AZ7P zg%17};{6l?uZc2jAM`!b2}wBxchdcnb-TB*e+H$S7_6zUn*#qBxxed{|E75N1x|9x zCx=;=>Sl6)3jgJYvNF3S?}9eS9c>i1Hp`4+G&Tdwl;n8C>vJr!jiNiR@|m}TSxdiL zRx$9b@`%#?=hNBB)h}>H9$&Peiv zU;xm?p1ht{O at v|ZoP{g}D?xF%yen at wb?43mk&@peb^6B);y?}S+6xkSLD)G$*!VRX z1vAE;by#bEGMjovi at Ef+^@BR9SbQ}eo at la*q4)!5k?>JOdP1;QLZU?ivfWE*E{SW9 zzeIZna)Ka%LquY?0k7nJu^DvAw at RCCL$cb?cf*A&f`KA3)Uq6AYoCICMZVejR_Z%m z$91?N?X|7D6T3`9-Gq at IUq~A+_aA(_ejOt&)-PV(38Oy))UJ_gcTW!x&irc$Ux4hz(AtMG0?@>Z z`!pb(r4W`pR3f3J7&*-bS5+WeERgSnY6m|j*}2cF!gdHWoTmpO77}{jMmy-F!fcsKGf2oV+(OhIxg}lLfm}a(N=>Glhge=8P^BqQXxh z3v6 at p0oi1U^+POUv0c%|E64=#$Rfoa)*Kikv%la91+(uo!5`{ap%rE7fJ-JXUHYW{^J@%=A_`AXee$)A4;^J;Jq5W4>>af|;YiUjx%U|is6)5Tu at 0Yq22SV2xV z55$9xlwuVQRzpptQT1W;$FJogZpeZ z^7GHe88gWG5}V3I2`nLFXdNXwpo`JSfv}eM_D335|6(q`CCyeoA(RI_9&AL-RrsL~ z-gV3?=I=kW%g&{w|Lpp;%pgonDwpAiaX%8eAlB#pP~dCOZU9bb^r at Pq|{)k3p$i{k>Iwvyd zT071uBumA9;S)Zn6i;2)OjG#?JXjymcx|zyC7RQAQTXF(3=EU)%%En8#NYDfOAhae zM7~2FZY1dqBWZ2m^qPMC|UwVsBUwIxT(WbTTUmgq7h>2 z*3?|)PG^JTv6)NOsF_Ba6MaSf)zY^v0QK?c=M%VHT@>N7J8Rv^`WLLmovYd&m%dBB zW#dA!UKHOTxISm_Uz%1dNF-+X&>$d7h#(+j|GV at 2cRGcFg}b$r`G1Nbrfcaq<7;3E zD5b2a*4}K&QY4u{TV#{)q0e4I?8rokiI#Z>bEg{fv2`&D$mF;6NYq*!HZfZofsHbl za7HlBP6!%OX_ybZ?#Bw9n$^$22fAmlSTH>=18E at 5z_N=sf3^9OD_0qf_ytJvDldGl7? zg(zD)w!V{mS&S zPS;^Qbg5;$r{rtjW!9F*y2+lleBwo$E&Q!;z}8+_uBF){O0a53mtDP^z{JjeHica- zdH%51b>Wl2Qs2Q~xyQ8)hWSYajVo#z_#?IXp9-M`Beb*Z1jk%Ab6mm3Kp?O{^_Os> z2%UQBUQbS~a5LlFRJ_gEG?842=TgURYNfE at n5Hkwbr}bbZnvJ|4yHqBTfZfzT>7zT zLX3Z#;C<`3?Y*z23$8Yoen|<^r}1?lj98f at 6Mnn9qiq-lZ*Xv%A+4y>NH_bb`ZnrZ zb$QQwmm&yF7pfP17ZI1Vx9%{Tx8{f&T)`wfoZ*-pLhc4>#Xbm=w71SM{cCxM*7$)I zTtNJ9npZ|9S#O2myL(^Az#$39z_CJ{ZM!-tz_azb!i))kb-LPno8c zpWz>0Yn574Er6nJ-;bG9C_J#qo$&HUReQ5Zml3{6J=gUW4Z|;A?e%GAA6eK^+)|8U zIV9lJ5Yf!SM4=BeQ=EL>0J>R-Q%~Lu>*)2#_(e0Zq=b}j*B;hrSh!X;Z0oF)n4pyS zwy#){0R?KzIm>!dXY(n?1h=B}^ZA)vmua?Yl27f(8gWzyQoy%V9l{T0?5b&#bIwal z at MPE{MB4nUMt7`m*(nP;u>sEzowMk>bk-OM1*j~%);e^-&}h}u!{*Dlgk at UzE756g zJV}iBHl6IHwRHq6jEYN?;PH+c1<6|YHEU<J#ZPZARoNrSce5{?<9^8%3DrEm`E{RPOTYGO z8;jpqIpZSruopc~SVxXBn_c)%W8blxY(SF-f;zcyY%bFcIQ@&Yt47W|nrl&1O=AF+ zjXal$Q*M_98BqjwSbje(!0e(qd at r~YtCTU+KXmD19LhF(>Nc_L{w%A|poL32E5>)s z9 at R)Uxz%uWG1%Inz;4!NmS+wK^harXt=|0-?c%gl(u<#R_E;FRpcWk|#5tB)&Lo0>BBs!Q<(&?8#&7sc$X7n>Il=ubI-eDCV09Ec4;AD`l_5 zq1Wa>G!&EQ9EhLM2PODLoE~=;<9;!q)~g}Uy*N1^5c#m8c-VSOzgYe6qO+YBT~}?Xp=FQhZ)I0<)VD|F at CQD z?>ivv2gy`96A9PUKg)7zD6gNoqFwcB^UpyNQ-&w2%1==yQ_rbFxQ=wFqhjpJ4&8%N zJiWq)JS#zi7cKPp27<;WH_42%!LPg;{-n%wnc0TW2|v-41|XycKi~a}RI3APnIFqXV4}S>_gT6ESoic(yAaQ>sAXD3DI5Fg-RpyB*nhWUC-veOg#Ut zH3|e-RZ$?1w!$i?99GdUnv4iX6PvjuddB;uxif+lx&{LV92Yd6+Ag3D&7dDqjzDPS z1^=$|q!TE%C7)DjPgKp@*&8E{l72IEyXI!y%=5fs&GMa5Tk?$%_xXq#wtf?vZrW5S zxK3DjXFZP|kjp+nV(F41Q|2w8ia!@$nw78oyuFcE_Gg0pZcmDNdgHc5hzv%Eo~I+` zy78}{xSkwG_}e9ue8*iJhm$pzln3J_kG3gTZ|StJXi$dy>GC6qI4z^obLV)2oCQ_K zT)CrZPPw;K`&ahdhM1#Gr7-ip9f~Mn~=H2}zgF4QTGVMb9?R&$Xl}&+zEs at M$3C%=vlX4T1G~t7HU5BYzn%mbPm>}aqe*}(5 zzIPC{(~?>1ar{o`=UN}IJ4?<#-Xz8N7B2 at vi=*!#u;t1Sk*(+rJRQbQ+j6Z~<+x`z~OaDVv;{T+!)VweHA1Grb2M5)nCi2+` zxHpYU%>PhZ`YBWZ!b*XrN`@7Me4vRxQ%@dDfy}YB+(_rY0k#s)#l*gz$!EK8K*55V zmFuj5{jgnALsR!o3XlicZTeGi*}kG67B9SwNn7b({X7{XPygd%p%T8r_f at eF(i0Wx zFFC?nf{)pJ)O>mAzra{e@;?tM{#l*;^HBdAh|$E}Ud+kS-NM`bzui0eA0~#!Dg1|t z;lHihb>TgabRjn)3P}HhZdpJwaZ$(;+!15--+)vcm$M0fcGZiJ%=8|*5pRoj7X_O~#?ElQ2prVY?fmiRdOC at 8i}Ke` zgE9z|!}xZ6xzd~ne9;F|xKev2&&U`LxvVcxO18v{eLe%`SFEBlHsRkNi%!Q*=PN10 z`2TV^6qZ7t|5LOz{Bt-k|9_&X%1%!96bdF*CO>T)|En^Hs+`k`Fv{12%hd#jjC7HL ze6h_+#+V4sJP8vhgsQi6J)O%gcdn<}WW#ls)HlkRETc5R{(Pe7EN}IBI1TjOb=;Zn z_4U`+;}LbxEQEleOj+0;jl zc at Y_E4I9-gM?37t_?d7)f(Ai3)-(6-L~0olBf5H>o{2xsG=gx at 66%C?BzHrS!z2FC z3T*^+rLxwH*J0Hh`NT2jQ-K@!Gsg1P3?S6%U!cedsjn;Uytm)Y5cJ8znZlhMXTNs; z>rQ`EF5u$w-fGIVNJVfOB&`bpp#-;IkR?l?}yjy628Tk*VKQ9>#a5W*zkD{ z^r+C8K3pBf%h(*I(zJn>*p|#Ti^t1`r&e>fVzT|4t?z>CLp|!WFF9fL!!5tpfJlz8 z^Wb0k at Fu4x+^Z-cAX_B=maO|fweHp2Jxt}DO#YYZk2buY`bqkCp*gD?o4(;FfX3Q8 zl7iyFdMHXdh=f!L4F;m>$^Zvl?pg2PS4cX0K;w z at 6OFi$IdU$PEW57_gW9HUXSmy`TS{$u$j{rzzg?_-HHnuD>L|aJ>Z+=o;v?~W2n$0 zU;)J$i-khz%#V;i0t4re(jSOxnpB2?cgSU~PI`;AlC%^Nw{)T{Hi64(m6~3SsxGvZbjn_+e>-W~EgC%j)3(Ra3WrtgOebP?o!Jc` zyLLJ4)x{Ujs{pB-Hw{;{;n7cw4xxJWBwbKve^Pf`pB|oPzcWCGBG&%_v{3zRi9!xR zrzXU(T&x{Q3%{if<;FE$DdU63sCE>N&^GN+wy;ihxz?kK!#qBqTQRa-u=;T{#Ur3P z6Y6B8YKLl&T`tyWU9Q#<`(ug5A;4Z^#MeAji4$-6HdCQxi<&S%+#*(~e{>7)QbpvwQD9lMy(ZRL3)$78M at tQru$#zAYp zYsgmsBSAiYKvg at 51%ce`)_VN}< zBZ5qZkEnU%cn(~p7Lc%D>sSgybU6b~iR~6t#c$%NSM2PxYiRL at YRXwP!4%(fqV%I~ zzDa at INgLT?Nmvg;l4fb&@lo#7L8W7fDSeO>qdE7dFYnDOlz`L}5?{9^OeihoBh!$n zdZq%Yue2y3TcS61tw#|lUfalxCVyF({`y|k6+N5W25i`JEO}msV!%PhO&f-eFx?{x$ZLFBE6aXQ0+Y0P-esP%W$Je$^S(O;%fO8ew+=z3 at 8Yw?r9>5aA zr*SsG4V(g_zRqrb&CoPt`ogJyTDfaE{yHgNnXSf{hnl?Eum-)eo+uzs^qs>*YNAX) ze3*ywOwUR@)W;O*i+jyRfq$Eg=5`lVI!-u^ML!RG4 at X9OTDgSJ+>52mYh&U_r9C at r zs)in;k`=upfnu^M4&T&f6~oDuOV(oaxBe zT0|DVMOdLOCe^++Kk9iR)Kh^>%wsQHz=No;k0kyFCG_v=+O45J^D9W9Y?sVtJ%Z2! zabBJ67090oQ%GzT)bSJuS3MArN0I1SomABxJ)HP}5EHKIzYa*XZJ(1!r;6cdKY%}o zSb#Qu5r#2TbWd$c&)Lh7TGCCMX`im4v|NV}G5#bo)>Olpp99lu<5JUcr1^p%egF{)IDi-hKY$gi{=$NiD+^pFO}f8Y>CtM~ zT~s$zZDuBcG0_2s2R?*`<2+EIDGkoC2H{X$(N2dtSgeeBn7SyDeij7WP1+qD*{`Sp zv-VgU%%0kdzxCEA#$5>zjuT4maSr0lIoRrA$Oy7W$xv`B^(ci;fYo6-A(-x-B6nxYz z29HHOB)k2Fsg2lApg1MIRo4nw0jogvAxs1C0*WPd8XJO$7QsY$GDasQEMYtQ4Q1q3stG-y1N=Ae|(g@*Ay3Q7fNpnTo{t9wA#+ago{llGjI8j8zoI! zhhoKPWITricmjatrfO3*43cCm67V7lR~0=}u69*++g;h1RrTG)73~RNryHvm1Ks5v zHWoX!4eM>|>lIr3%{@NoE`IpAm$^Ayz`x6}c94>2J9c*$?N2SZWaiuC2}uRKl`%iL zdc)ZU%PlY|PpkNB`&qC6);Bw~3!$fu!!4*zbFq$!{aDeGIFygfHA=2mRLFSK)>MBc zp0t}u880X)$qje5jTLbYz|#>TN~7~aN8f)6SS!nJ07|n;rhB9_e^o-!$Uk{f>B~@M zuCB#f|6S7kxpSR`*_pER3JDgjZ<&GMkRmy;>{(oqnrZK}tmwsQ7NSmJ9G#5jriHHOWA&~(@r3xOJy7V3^+UU^o?T-9NWuuK+7~5Ld5>XhlR$Bp{PYL zfV}zj`bQ?ESg7BeLY3~EB$_3Zmy0*UlzQ|`IhZ%*sp50|u}zBAQ3CCkr#`-^h|jdd z%z)#sJ`Wok{2TF+Z4)cHWVgZfv7_~`Ff#|f4pRI{H at S|4q-^r=)D>*L6Na-M6bwY4 z7{nXCNu&?ql`2NJ#6*0wj}F0lNoe0A7f-(I&#?n$BT*T at l$03O>5mB2C*Yq<#p$iP z)V*xM^~Fig9>{>f7?jT5(KhAs(11TlRCZI;?|I^p{bQ0%4e-l_P%T1%KZ at N{c579x zG6w7zRr_rrXqo5Zvl0Zl2!n_venz@#lxD zdGp<_h4Zs-XwE#gfAO*D`Ol+I9kjj at Cj>k@|{Psf?SFY-+%brg(=uJ0)yoS={;#-paPfqjSFdB`o8~ z)>sHw#+Z4>S2PU}dV_9;?^U_I>`77$8U7Iy{3Ehhc}7@!LRouQ*xG`ojSZ!P4I{+; z*0G06exuqk)khEkxnRs?nE(>s$fb>8wR8GSM45#jrhw#hWs78LxQ-y<4P!K4DeIA? zks!e*hh52%<;c;PQO*RE+zJFfaR^^~wGiLxk5yCG5xZcL=o(1IB0RV at URMlwe1|*8 zS||%@QNxg2+d2RT5V at +J2YC0Ui!mVnXy5UAV|L?5n057mXrP+I$e at k2<5mvF$UuIW zUOUz!cw2O%)o|6c7P+v|_a&oO#rt#DYKj61&JJd5?Q~5v5V`r52T;>iDHK%@+u}Ku z(}AN;9C9OTikYxx&{FP(mo at oAlE}kOd+$&84X*l0N_B`RKceJ}`-SQTR7-0rW*%K2 z#EqGr6r0i_RKv*%Kg-K;!<{%n(DGqlc*K2-lCUQRdP3XMiuzyh)NBxIr;d2gnS9{Z zl`mc50RT`<4gAV{LGM&d_z5QV?Pmx%yfOThOMadKgYfyk%7)(HYMG`;eiDi|g2lqk z%L?IUlz_o6Mgh8eG9KaTCOmEf1jf5FQ1W-0VD(^(7S`VDcp4@#D$RX>a&(VQ>>rId zxPz9QewHnJ|13IpjjT7VBnJ4YXM at CXdkyjK-EDmn{x ztSKCZ6c=qO(7Fs*ZF2PH3~mKh%1Kz;_YLc=_AL!sg@&I#RU5W`pg$KMo=?b}$6BnGu(9x(rn}_lCSb7jd--Eh?9`q;EnM!sYlGL<|y( zyjv>$K%W0j7XXiniZFWaaE6fVqR%#cg)9!=Uwy2q(eKwnd4|^36W+jK at +TTv*Y=9N z&1(G>O<(iI?h7bCknoVksw_-(alDpkMco8i^|-5!obP(E!DX`sp0mJ#!E#Fc?n&KvO*6KfHF^97*sLY# zdjWbfPJ9NT2 z6Lym=$XgE at QyzhYXO_y1mD2}t&kP0wbJ4w at aIKruTMUYR8etB>W|Dnt;<}GWqlHjQ z2Bm#@{B>($b~k&?iIPL^sxt`kjk+%u&Ka_C`VJ^LLtgHxHMo^^c3GMIrj!t{lC|+I z&%btO)z{5BCpzF}fDQdz(bQNR*YeE5_&gYf59NFWgqq7_Rlu(7P%s at Hr0rx$BAN(< zNTrOSMFZ?b7GznKxN)opcix2hI4mxIDPJwEnht!PRNRxE4Y7nSi=X{MPpVWW4VYAIf7O z+$!)l5OosG$KLN{zW`IBEAvrG3*(dczjj7a;fd;m!9hSgp+G)qc^};VPA^Y>Z!bqeAd*0CI7BXlS at KHqdUB^Cn=gau(nPzN_B2QA7> zrY6L!#Dd%9TTOrejXgXCJmz4A&xvv38~7}Y1lBS7FZp!-4=&EBWpI#aSBE{rG2{({tt~9cbJ((m={K-99r5sMG2}( z0VZ1;p6%212^4|l at _-L!g5dd(E1q#nhhNn~Z5y at 6OX+*d5yG50n=M8=*)=x~DZ;=0 za9XKJ85P&=Yh7Q~7?V+n=nmsppnSC!)5b>o!DyI9$Bio<$w7X6QsaX14-fnj z^5P1){~fB&htLTxRkxSE8jsp>?u7i}w1((>@&(~JUlR1rt65?Kf;)v}I^0HJIpOKq z5w-P6gY~&UoR_uM*eb?_^0BsdvZ913szd_)ayk8S{S<8Vl#GNTq)#R02V+O>W~sK5 zJ=dc=!#fvH8U997$F6vkE>h3kWhNObLC>N;+_9EHkJ~2Q?3h&H z)dt7Buo!${2|ibGKotL$BvJw6;E>kP1fJusOfNp1CtK_l+?jL1LSY*F?pXI*!S}zQ zUXBxo47UG7ViVNA9Z>l1B2h{0KbzVbc53(-#{Y1}N^F<*EO(5Ay=gUAO(- z=NsS-6br)8xBY~Oz#AHD#gc88 zIp7Sk!Dx493m6-)2;2_dq2tZJ?ZE9}?(E$zv2WFHT;k?M)M at TKXVh#^p#VNLrXgMxTR1KGJzZOF?N+JE-s=2bk?wQXGbr#O z&Ac0w)k8G$1{13w_SW-;qCOuO?9GGVjt zsaNQ{X?3J%fV>@;Yz~A~BZd#y_sW1^%4cz89F$qhck;hvyLjyl-nr z{f~Ra#`ymJGY-Dh)z|L at RpYPMiYkCA@0EKVLCzRkWh%sS{vyI)CH)zZH^A#c)37p8 z^rugn9wZDk*{mct?tyyP3hF7 at tdw??a|8?9#E!^}3k6Fo8N at 9LKJ_v6S}6C}klt7T z8P$0y1cmyw+f3o8l*$)BR2r86Sp7ZQp;NKT at KAI};xwL=jrx6b%*ttUf9Zf1%RA^# zlhaFl3d2vS?gU?cuLl>!Xg_%EI7?QkDV`Q*m`{|4C-%!pck?px<}&pvLxd&S$H&RW zMZD4JP5d%L^7^P^TGpzm?k+O17<06kJS}r=Epzc?c-7?C82y+BCi-WQQyLfb=H^+I zQ_S%O%aj-cKv at 7e(G}?pdm9l{zGR=2R!#ExLEp-vFOCadOJuAfxmW`L;uxQjD-ErTzq~ z;BlykEnZDmH~%})e+}8#{#EP$7=#=8|3e`B?_{w5N+8rzLRUfgvh2my#D(*Vk$IlTLUBI}u7pDT3i_AkD9 at oAqP}Ii;LY;% z!}4_YcCE266J#B at 93Bpd&FRX7)m)Zn0qq050Q0PeSu at WkI>UU8Hak~E3VXzXIdkJ^ zr!-MGZa9=2t*eeb+z^%i3 at y_7DA5kP*KuA|P}hbOy3x2n9mZ#(PKyw)HLu0B#vuMyk2%T;1oQ3`rfyYWAndUfhKD z{@Amk!Qa;l2bL_EQw3CiefTZ;01k|G#&JvRdSy~wGjN&;FI at lCLw>%uW$QwMfcU`w zTkRV)cUKQH_y2SWO+77iEsQTJQd}I#;wTl7W&m9Tg#1b_wyIuCyC^8LHiq>YX&y!B zC(LV^*@+WiScHsU6>y)t+CyTd!L|!Z zj7Z*QGqEhf1_txj!%tZ;JW(;I3jW;W`368brB*AQJ>tz&O;&2a>p<~{3JBzTkOO?> zZ&p{HWVJ>1OWwCKUy-sf^6N6?#jHn)Pf6BMgO$ZN7N at a?2AlDS_-;c;#8S&`&fUJz zmD-ca=#-nJY&UeV>Fa;~R!xX(oT;+e&9U%qB`@Yq4lGbOJ{WUV4BW1J_r@^CJL!Ji{=`y=0jLq at Yon*BWvwFw%*Fh8- at AL zQ5+5|DTVoH^Act=C1n;gx$Jc;qbw%_G^=pd6uEFY^snU{LZNET-m!6X$~c=1Ih&#< zC^*un69idKZf+ZXl2n>gJrY*e5%)gcujzuN6-Hq~N%wwDy6 zd88;1wdB=+qI;fmIxLo_@=z;QJ31TAb9Ibv`l?j;UgkK5l6y^6&20K5uAa7%NmUK7 zXxZtwJMLvgf at a68;RGL}2H at -`QTltP?--7k=rXm^C`y#8OZIy*F)I~i-OWkS`S=#8 zv)j{sV(yN0f&M-b`Yz7W05P~{!A2_`1k9zU@|6T>HWP-6%et{GHhh?Of=O*-*-**m zLZs#}PHHc=R0sN8*I9ktdrzzOnJP`x`h%Lop6)seT5D!L#@OBs`hu-%esTm2Cx~@~ zVT4Vdjr$5OJ at 1v{Eo)peH90K4 at 3)n@>|#DVpn8-y71f2+y=Se*{w?)H6twq_Ygx zY%6tnTr|UK*0(^uDIwmbq5fK at D$F;!QF{pzoE9+l3?vpwc;at}>{?J09mvG>T2-AD zLhk=Ghn!gydo5Age>tGNjOg8Hs`rHru7ueW%V%9~jSyb=j8x84UU&o^a9r<)-%eV4 zgUvC5#%Q5nq4tLvpiqTn=Lw;fLR|VHHgFF?5$@Mjwgn{-^Q|E3kMw^f zvsL3faLj!AbxM>h-D0x8WiIx`VUxwRpU`^#4PJ*PvOqiVRC3F at L%lxuO%{DTKH at -e z4!?J)aH!FjE`D~j$|v#^u&@Ks|Mq%IG93R`LXKZDv#GUb5 at 4wR;jQ-*0h6K5_xk=X zjrY#ZA0HWwsr0{Y6R5gzk5Eq2zCh_GFNjO5QoBte9nmO5u|d*(qd4)*<|{3yKRER& zr`e5|*M|DgD~HJekaP{ET+w_%)o8*%4`G)+fI0Ay;>>gDv%BO&6Kl9Y{PF8qevIw6 zC*#t9HmYL|g~j@%pqml=f4aCO2_I$tNv#N1o^jl_P=G9{U={0 zK28A%R0Jj5h=pCuw8In4-s2Q5tO*64+PdEI3FjB95R%ma2oj~PJ>#lee`e-CMbyS8 zD2b$zFicpO^WCNB>TVfnpFDMsWIiP at 5sdJK z at DtLIeZ6~~kZ^o at _;^?mY0idNk)kGi=iy-wt}O$3`@i%VoSd3eSYIH4X+Wf$E|$&R z?7P`+D?{Q!r#q16=2Q`aTw43`CWRRjHlpj7SvNngW}9kmdY0KmODxxG86hD%h-I`QCJ9s;++lU+dRt(9)OtEN25z^BV5U4~bRa8!d#jxjy#l1I&6wFH47oFExH+zaUB>go^DcLe05MowlfS zn-kFFt3XA_P3e1^4LWg^%>ceRZ{x at Er%Hl+M1jA(MMd7+rMkrWxA3<gji*f}VGMpGAQC|@nnc1Q64 zb;F98mIS8$DFbJb{;eR!|BKG`pQD$xKD7u=Faw}GvwuxPz<|cdtp4%Uk?z>WXz4O1_ at b!AVy!sA6*oT_Me}%kFJ^A8hAmCUGt_#L+g~FIP;y*nx z9SMpzYvCush9pd7;f9j$B4eWjghKISc>L8y8emu<<0J3Y(MbTfih5H+9%k|qp}o_C z4^E6io!(0m3=Ws_2H24V>mww>`s-&A zfHh?^-KA6e!`7!GPpl%jUVGhn&8yTd3cDV+edCcJvmAG2(K+{K^Xmq$Be0O0Px7K# z$b_v{Z&08hRLK4v;`Nrehpeqy!FqFOnYiw9 at 7)~w!;9Q0LbLNnclur>iJn7043pip zTuSW>A*cPLYg5a8h55JcvdYeM^^yHSo*?L?$leVH at f0-Dd*=460PJ};)nb}3g(R{?ss(gXQ@>-xkL#>#_ zY%~A4rDh=m%id7)?xv*fNC!P|h*)7aCZD%}4ao1Ay&3P{5_j$`(x8;xh1;3sjoRzp zXMSiw at B;{E$l-$5XtUXOEQzBr4vH8p7`xaVc1P7xU`hfT=`vq6_S%+;i3-Ni6xlh))01+|ivb zl9NL6f6>2}fllam`wVjZWvth}_RYUmJV`70_o^f|&|A at GWa4~ffr2K727T0k4?lT6 z^bIV9yir{AGmAH5L1V1-0A2aNX!{0IiPa1`T6K)S?JTIZ>pkpy11it;6f-JowK}cZ z;p_ at u8>q(yc3V3e&y*vw?HUDiZ~?Y;<<+&wiPsl5)8<)kc*sF&wq#l7e#R%VT2Oya zkMY1|p#n=wEw#$zm5>N<&od*pGiKE{=(8A??1w#~R%D%OALWFYjoz-Beo~32fV2L{ zDVv}#Ith6;Gc7Wn9^32!BQr)Tu8xtYtY(#tv#k_urPw6JLWy)QVQrwb(>^^Ul{n&!%#)lnbc_ulWWH67Xg z&H0vfm!WeaL-<#@1+N=CZ&uSVg3 at 5cS;|$xO6x;wG*l&^!{fdcHmX=B0^W;}RRJsq z$+~qmH^_ArBJGH>h)rZs$jK2W|2kLcD zsjp_yj3Vv{Rtnj>(;SP}(hDw7HAzko(oZ at B3bqO$tS^-EHwR62!vrB$=9A~e3Zj at P z*$nL`jT*AS?Bc!kDrIK(r+E at kT-mY3oo6#Z2lORsAxzRo92J{v$q at Vj9UEW`>&Ql7 z*_$iJLQyaf9_4 at Pn6f!vV*7tsdj}xTo at ZaMZCleer)}G|ZQGc(ZQI?`c2Aq%wr$() zo&Wvaw{P#=|9cy|v5{GopOXhsajGg$=834R at CAGBxRv!8l7_r>WLaOJ?#5t`WpFIp zS(K&CjhQVZepj4x{$S5G(@zi_e#z!}5#>r}d_YAl3fl)F-Tg}X*_#J`4He_emV(ea z&ziE4DSlePvg;DN1kvB zk9Si1VP!$`C*d>?>WuU%6QkP1i1weT4M~w=;dl4>F@=L?Wij+m!w^>x{Yu4>L!k%x zk2#ePUi3h06Cgx45F47x?cG|h%{b$L(fT@!lymBFS at Wvo?aBzA(Nw*d4V}$rb8BjX z!Oa3E_7XB}t`v5=_TO5*L<;r{Q7Usa#^II+m;_NQ{b*4Ia$galZnfis;uAbGLa1RN z%tZy0yv4|`4*9w1Z~XE~t&C%09}86$$+?Nb&}j`}?0JIn7l-H45~+*PphBH|oS0q3YG2YVWck86t at Y_bVOR?aWT9yK zL^o91i{{Cl;j%A at iFw8}J^3G^7`xI^`Um&lm5G%#v}1+{pb;Ll(JvB6MPj-!x|B=T zpAi4`D`-g+C3y4KZCUz%u?#>+l#S)TEd#K%o>#!)mCq#C#L>->%aJo*wq07Pp at HkQ zfwHYgS3C<#3A~uM^={l;B_r_#{!S_scF5mByb+I>jwwNX5Edt#md+Sgj zQs_&Cg{7fa at -Q-19r?i9Ub3l1#p`vQsckuf$CZb6V~rj1{)X?nA5a*6?7 at ON2&iAZ z5Hmk?XF{v=!2zrM(28{C#}n6OR8iEx1rLl~CO^>)YAzFE^^uf7&;5Zi>9vp){8|cQ zYVER=;Hd5LwxMakB>b%~D7Bna%E_bH#jI at IwUPl-Ia$2J09EBMEk0mXhdBW}zZz1M z*;}`$kzfVbEd8Du~h26hL1`uikK1LU%i)qC^nfNtZL1)BRIP01nMr~Um>1r{tK zek8t>M$>J!LQkm?eD7|bSZF;ns at f0s{#=yZg_4WjnmN{<>=;=PsG)utJ9W3_9JbDl z=ze1%KL{j4Uvev(d+g@?#f{}uht!~gAA3`>wJq&Nzw0AipgVRZ|8&*5F24lO9&hDA zZ}eXVpCVvToUqOL0L%Su%6^C0hq-nNzJ+eN<=mz0UvNf6$k`m~4qi4imG;VPg!CAF z!=sgdJWQexIO0~aXE5{=d?QA7B)cPt8c5PG zW&dA?(2p<%pMLtke*PaIAiV$O{>uN1luKS{4;|IT<1No?0I4T{Pm)|Zi at v~eEsv+Tccyc0(Y at Q8zNB$k)dkoN>>e*mvX!40V19u|7|^)DBM!J<=n|Ow zM-t-b^S{1yAIR$rps-{dF!D-wT{smc at lPK)fLWlm7Sn1`C5gt!0!Tk`6j_jiMQoO^o>Buv=>lhyp-&9Y_> z>0Bpi#$B$9TcCIHl0#8gXmm4fEBbzT+Ij-)emU4nKZo#USv;9sXCFdC?xASr?0%(Q z^?W^D#nuPRol$LN{4N;&$aUo)FJqniVYlAlY1{T({nV`c665Mr%ssbF`bVADv?SnT zDL3}1Hs!J#`E1EJ`U^gx2W)aMHBUV!dX^=FXoJXv!m%}g>UNS0U7E1)PbxMD_5Mlb z_SPb6Z&@e5kK(tabZJw516MXP at L|R9Uc-5-oBM;fmqLw^B%E|kz-`6vCM2Aq?pD;W z$kdfdFJRQr^fBdg<9RcfbdCjA51M8~&-p(}%$AeEuHqs-<*W^6DV^f4Jc z=p)A>Da%WZ^{uU)6i>3c8|;sc+mq4nr9 at X*nvUBnckI|x>@?m9`F9>!OArnyv$#@g zG=$EA9 at 6%0Mcw>e2#~q$&7J%WoLx+Fn1b$^>zkYN+j5|@C6QX}E&3~Z>x)~Pnz&iN zXb!l7E&9=TGg~l%XcFg3gE>7qG7~Gxs*-+F9aVwfK``W#n~JI{nC~mm6)cTDR~MA7 zc7=1rxGOwUTV*i*#WBqqt#-%RQxp at -8D<&wipAtEjHIgbY4Ysw!DgY#^1`WxtCl7Jbs=(a%yFU zifHh-55dL4h|XgldB?p>+<&lA0<9{Gr>JabX|O#lJXY)1#p)W;l78^Io_DTsGos2! zLB?cdco`iDlk`n8LKl?fwpA_bELqc^v!*eca*k`H%0g%>dur zwUyicz^6t1Y4-S_6kw6Dr=^OC1j}#+Wj~892IP)t1%WV3=73p`KI)GZA5;K3KR<0R_Okjk8ciP#N2Gk4?qpdVa$E^M at CA=$!aXXtfC z+$I#A<+XQoS1>m}+K5^NnX|Xbo|>C*toF2+M1KZ(ZbW{%7fB=?GOIi+qcrSn|5LDN z>`I16?zPU$9ZjawoP70Jrr|o{*JWqm#rt at H^sXXdLua2XhSux7J&R_M`4POyk?i;8 zM{F*Od4gguL(J!N^=UH?qI z|JN`oTV|!egx#0 at vB$w7=K@=q>479xLk9skPAKh(czS5UvBL?DGuj}Ji|DIbnlp~* zfp+FlLMw8S_NJ_Ckq;jDFWDjuAL*(jTDF+C8#=)LsPxTJE7?n_?q>VfoWQa^&dHnf zFXvCP9BMzbJ!vl1ckMNoQQkSK`RzHG*e)pk*A}SluBxOUJ%4S%Z+&%lrb*iIpN*6Q zlTJ*Ns;4^HSRrWlQS87!NUr^zzt7w8Jh8W)THv+^tCB*$9$P}cwrgYG(yX_ZzSpbb z43Os~L}f_O8Dr#-i}C`pI_-4r+v?;6d@>IycDjB%3}SVw%ogCQ<+ZwgdU?r%&T3er z)8Y$3fUbckJH%s_EWTMAdhQ9<0e& z7P9xzauy=5HHoVBvWH4}iOneAVWJ0T0-p*bL8APv^9IV_uKyDA!19BQZ zJC03KURn8RgGMj;KpyJ1Xs?vxWvigaA}nBe$5{RgombnNyFZE;ZNz5NnTOGO0RF~M zJ9LMum$rHLSHmR3#4QxN;&cp~4(N63uGUL{zS at ct?M2hB8Rt}}wrL4`UgExOo3dQ} zELO>*_` z-FK%-_^?A3TtCvX^&3>rE_nVTBKi4vbBobNmIF?lJ05t?z|fC~&@LHay#gZtQX>Dq zbqP`3`2J_ZQYy1a4&Cs$m$u4yMoT&=u8m`Mc1XYUS9yEDo(4r|sf7D+R}Jzp>oPG* zz*FsLhtvoyHTNj}k;+R0Z09BX9QkqF?h(eyboy-^-U8JtuxGrd zM!UsDwEvvCO3^Z`r92hZhEbQk zX$Y=;6ywq9HyzG_WebO3%ZgEpj!{(7fs!`Mn3^`rglP*UQb>zU(uA#|$js>-oOUji z`pO;cD}r`ya+S at iT>Dz8`2=eVk9e;2g!|aN%`AO?iv|PR%i(KF_^6w<4q0u>q1LM5 zge%HB+ibx3;A4vp1GnugS;wc-FFHO6r(QKN8^@RpiwW6=iPS99Rywai at Ro}NZ5z+P zi)PWflhz?N$KL_{BB%YSz75-{+J_;2?SNFw*~;}n)0Qp`J);Tt329r;44*ija)x-~}Bc^S;5e7$6X-L{1E`08-tD)TV$t((W^W zCGZH at X{>h^S7Ub(sP(esBeU6{au4NOscTScp7FJoI=rfY^^7LywL~B`Livsid{t8QNdy;-T%tJGfyg#DezZr#FAd;ejoxfkz_q2R z%E;F0_(J_Xlh%Vsjx3g!bD&^j_w?%)=cB5;BEu-TA5RoVf5>^FJ4KGNV$MMV!=`>- zA^$09mG4BV!!sA~e3f>0pN)ba0ot}4F@&~~E99GZcHN9&)js52xB+o6&Au)F*l-*S z>1D`>>PTZ+J21Op*{PIqRTA%G z8RVo4E8%JNe5{AsT*Jo9<2nLi*s2 at DkpE8nd?=lS|3+fZp zXo;z;bkIk0=+%WBdk-SAKM<(oqY1rcX~;ssHJXPE!>1M~9c274r3PQ$Xz8(}DjiqB z7Qyd$Aet|#U6+Qm9ZL2*N)#buX(eu0BbykUpz+B`k0v!ay%H*z!2RF6qAF?IIZQ=|d)f1cdl>F9ay_YTb8kVMYTG`&|il zym)9vNIsdL0=o!Kj(_t7*Oc_|BAagm5iF6I|C0C3Qf)-^dH;h2YYYd`Sc~m^uy#x^8B3Ok8qLh^PUjw>UikKaB7DI%VUtI1GA5gyk7KZM0j)s zqLA1j-)Pr#;~yzZQEVAShz$^K6 at LgH5I5>byAb&^QFTJL3Y2^9d+=1VEAf~v%{)1Jn)K;!2rGn-ii;DXz-DVjL}ALMOXur!xm^@ zn}P8WqgTP5EDf?dBj1$XVi-+NeOL?~6KEaeqG{T$iY}bd^kK7y7A|0$G4Ubc*MZX( zgX at F=--`P5gM#0DqfdoBas_;{iWwv2_gJp at MN`HLp3z+LMdT-qP_MTh3_fzGw|ol@ z5cseV$jERPzwj8axzVxBsWV~Iqd~}v0>&r}m|*?`3M2{6_(Fll=j+~h%Fe)_cxHIO zc|pOLUHsBvknBX0Jf=hll2MA6gkh2tB&QlB1|@%9Iy6OSUXU)xk1-WQUMqo8c5dTLUY7(5R3P^lv{pRyF%%l%av3$MX{( zgr#PS5|hq$#%i>H?p1x2_CjO&eSm3Kdo;WHKG})gAxQ+KhYKZ47qIdqju}i3bettj z$1MMt_5CKALhKC&u~8t6#W6GdtBf$;eEc-afi(`)TXiH_M7bwk?#zNt5MvOr_^yE! zWrPO}ieoBGA|?}Wh>SeZyz=M++FzK7A9SUhK!a?$9b|7kUOOxxl~6q at jctl;Z%N!= zd!sklgwALyDx-}&ul5hjWD9buD$fibzy6aXDV02 at i{IZ;tXqf|bnO(er-CFGp%nb2 zd8GR^M?$UWR*7;*^@5*9DR+logp5|uG0{y~%Ug(IN|8p%ty*&9D?>JmGBg&!8C?y9 z>Joyv2 at qE)yf{EHEz5Oe7fOys96)Rr`F-o(B;tsKX?peRx88y~fnr2Ml5}!T$4^HE zZnAN?16D*oF#aPHGTd)*>10Y|(I-BvV>07wMii&y19Gt!Mk%! zNe?@doX9a0AIc?llYSbhY at 8n7z{=_bMe@)KeiE6A=0f%cV?J6*y8=c<9ZiDg9ah^Z#}v{UB!fpc2oy!* zP;#DMJG}1``m<{V)d1#VvhkL(JWOgP3^&cNMF~tE1jYVU#qe20AJqE?@LLJh3SJY2 z(Z!MkXD?+r98}Pk(U~blW+WStm!wNl{R3rT1UsAOzo;xTE1nX6lU}miJ4LcE4|QIQ z7fCSJ70WQQ>Y at D@NjCf95y{Lr6Ls(VS(4EUmtj`wsi at C)VR=+%S)6gI$Hd1IWO=mM zG&gyxm&nITZFyv0F(;EP?rRs$a<4Vcf_g0JJuk=XPe2S9^qe6PPcZvpG|7y(&ldjI zqcg<*!gTXcDnM7R+FzKw4ey=#s-9^{J|(P2(8qFb{}R^|d<$HYsf4LWM3ej*(<-NG zftknU)k()Cg-N$WM!f<^R=ol#vsQ^HM1EG48qSxfO(p$J$f2S>n1DnuXab9vkcp)P zvgxG~MHy!tE{5nQO?ZFxJ<6p{O{WO95IU;vkcc|ttg4L5{|PfKf|wk2N`o5e*`)>9 zgkZ9;e(evFn$T+>SRC2SiD~hTvIzw$VB97ni)hz8-?2=f3r%E{IUQAGds3U{j*Hf^ z#XAk at 3J8XFAjl&*rd1H`(bEtudJ^j^e{vjDh4XV_FA{Ml3-6>89tC9RL10irv=liw zK${sbG5^fKPM?I6F at qpy22IKc9Gm=O0ss;$#@GH^LS!o_{>t2JuxPV6=I1q6Ok%sj zavOe@>Mg`ZHADg9FKF-G!MX0A-VBr20ZBa1yS_EG?>DBz;U^Yjg~pn955dwH_leRE zi78iP@=MZ3c|ihuuG_m>tx9!S6jCA*b>6(=jKWnJDBhz44NpR-_#oc9D#z8UoRgc7 z_gz+eBk0PyRv0B*i}FV**OVIuhg??lsE1QJih-5=JM_bmj+sr`3OU6GR65SVOyQN} zJSHfPXaBlg774(mGiw8b${rGt)jud}xK~PP-GqkL+(#8T2?vgxf%PU at f>k&6!8fea z&=O*q5TTbO>dPkDq at 2@ecKnlF&}O|@W2Nw*K3-E}l$O>61A_?`HX|ftvR}x|u)r*k z&6HMt|Lj$&C%<+<*E(N~Fiofj%2ui<3A6%3|A`lNMzl(+``~^PS7j$AE=u%I} zrGfN=HXH#%1QPZ?)iXhaBe-uH?!^Fz05d at YnK__LU4JHS;3Ib*BNt95Z(PhgxR`lzuyd#20?+|9~_&k9<995k%U8q at j4=30O`EDX4=HnJK-7 z4m5-Nb0h|2$?}o*{ldWi^omXHk?B2bBmj}hD3vKoIs;HLd8B0KOx4()ys9&9LvPBK z_K!MKHb`RK6NcFKm?pd_<_)!R2=5ZaRUy;}=md|PC^*REQ`UpBkk57L0#8AJP7l~u z68eNs)Pe%GJPCYZ4CKrN*tH>mOH&|+HeU`y;lHVy1E7fADOHf#g%t!35JV|^k_N}t zLh(oNar80WZ>e27wD-^l*>ya7W5E?ig365r7k(3-X&|}MhI3(v{D3W#%Pyq1K_+z- zs!}E%Q&tF(vyk0Wu|?;DixypJy$D}{K~EH9*(H+rr;jJ3yJ`JLQg+iACnnMlO(*Y| z%sjChyP`GqhG`j$Q~#$Lz$9n_4h}<1^S5c5f=J+Vv`1Ef*&yhYC;_AO(4;Cd_;bNw zDF4~li)ZMm&hyT7#9aOTk at fY&wAE0sH2*uOr2&>OfkqXsQ>r0&z(nT4EI2t&f6of{ z7VPggvsQpV7rCVfr8Ru1fVxQwA>@Z5A5goHeU{D24cV+&JmQh+8xo=-f{E+P5ODg= zdGO{3E!u;*i?(gA)7kV&`+s383TvwH;9YejXyKZ|U_nHJ9^xbG(A<8Js>m|~gD|f* zYBxv{EP>S0AvgPsL0MG%hH$EXb>jkg5`Fd%<0FO1nd#{BC$^N2e_(r0Z#x^0c%v}X z8I9r;f?!SIit`f;`q>@i?^c1VFEibZE6M&XrOJ9 zigTzocKfjTIh@>%rrLX$hR}3j&h*d#p8-g+P-xT`AQ at JsT`&^dDfT;qZbhIxW+@#* z4 at 6k^f6H+g^n$b2(%#7=F^V%HWk19Cqe9ji^u+p-v}+N}t`y`K+wIlCnH66sP$z6# z13DI3KWMIOwZ^M}A3H6Aq(w>w0~8~OaS%g>MJQRx1)CMYX`-oWeaEaY{wv4wRHZm9 zP)l)W!cfnvL#om2Mk`)0%%!?#)UrY*HuTE;uCrwjU&mk5p)`;EF`mPG6n+r6)Jh6~ zuBh6~(A(vDVn+>G59qfQ+0BJg9hUsL$pLPL3#gw;N5qW*uOG2+yiA7BSOKNI0LFL% zg7ppv;r-K(Z(xX6Uk~|Lt+fJXdWK^uplK8vM9$UBRB80P2*wjU)EVy1NY+SIBQF%Q ziJED0xZm3#b4hHb20qHGUS`n#?lvok)A%DML at I8CprVis5*ENssBJ9x2>B~y=|}lT z7w2l52LgRAcXbC|=#bL&4;@T_HOdhjni-ubA!kpD%n6)ygY2j;5B$lWYr7`Kbd$_W z!dbJ>=2*CfDYM|}IJ`H0`yg#YCt>T+u#CyNaCKN|eb&P%GD6i2k19gb-JV zQBEddS)>|A&OEx%+F>XZg&f}A$5y49`1OSF7;wF_ekzD-Yc;$h>pMQ-0P8k;Nnn4* zS}TmMgD5%-uVCkcr4=35;Z`%T%AMBePH%p#Gqu&8-R;cjee6WvpGxz46(;dbYQc%D z#RgoJBkdsmk&KH{ug)D0QmMWt`+^P!1Txxd1X&8=vxfDOs^Xa!wmZm8XupQ? zM7}WJUR=;0haA^ku*MNF+hhY4H(Gbb_97H`UvOFP4G8x8f5QP7e1aJr)O`6iZ1RGr zIl8EoW)%pD{y-giFneQzm5ex1L88xl8}5lwyJ1&1^QA^ien)l;D2z3%GZ{r~KCOFK zfl6mo3)DkUIMjo=JK5PqjIV{$RLK20CGf|}wWpO4iUvc50MTmCa8~~|+kt}eezH8D z7>tNf!gAF>=H9&m5b z_I*Rct-E&noj0!gR4=)=ye~11SYH+&3fUGPGEF%0QL4ktdpi4`vxZ%S_{@Ij>x&T- zoNs(%v(J*TJ at QTuzKKQGNqD|_(Q7P1Yo*9 at Y%%dImcdQ3B*nHkM7Hx#oNTfRF^%)W z7M1_1GS^N+28F4O(Wut#U2O=Wj$x{a1j(VL#f&Mjh}U}+&X;Dqa$#J`pm(}1iPAn> zXElZ1?elYmHuoF+8x$|7me{m{d52b%om_GYB!+^ z7ugg0W71|9^##?xX*%Al9SU#VHB3H0-J`yPrK6X3NrwG*%xF=2>~L_*4*nUF}zE%x1l^tT1gMrVcA zY##C|x8)-)merq`7Z8-p?0petn6ymn1FvT6Hp~nG6O(#v(_KjT%&mQhfT*44qt4yw zqmsh0E}?8wJ*p|jIuvU_)zJQtYgcEfdQBnv22t$}f+M(lI8B?dPT!9`m at 6c8hp@uZ zn0PkZ;3i9wVp&`w+chZ5c`=DBHlbKcRFOcQazdB`QJ6vjJvh at nLG()LWZ3GN=4^uD zgtddK19}AvT4$XdVs&12gcB<84iNa6p6Jxu*52>2t}lRfsLsA~btUUWG& zerV~*^`A7G2-l4K-~`Oq!SdOvl}#a z%#eeiN0>tcM}C@?_{k#~aii0jaa67TYN`UA?N;jm)pfhtH8_Wzj? zc-hG+KDDsOMT`> zVM353cFm`_1*qajpaatq`iD<3oaP&Oq-x;$?!5g^qJldG?8lTa>T>y}v;H=67P6R_I5Y={Ps7G=c{9T|mmIb<3SkRJG4` zlv)K$Tb*+LT{jwhTTfacFlO)kKZWRr1M=Me7eTRu at _=wbr#vHdL8m at LeNhv@wC%3S zfiGcXlsNqukTafju%>unzY(AUm`zC*z>=leU!wn$LtPQA1bJ z8tKDcLRR$_!zE2QOKahe&@ zqcl6LS7t(_D7XJcJtF at R^^}J#^N?4!Y%Fol1gjT9*M-8I<8jP#VPa at r2i@1)8)P+O z&^L1J+^bRetgiv_Hxu79G(&%xxki95f$!z0)p2aEQ7>s at Mhd6iM-HM|IeVwKZiIPG z`2JhLVRZ&&sVpv$#U- at 1fIL?k8_(t%+*Cnwkj^ETj24M5B3U5v7YHd3JyrbCtJE=y z+42c9;91OYB21B10i#jcmZ at -P7sbsXbBTgDqnhQVZzXIT%4M=`(a;t at pD%Jvk3?fv zq1L(DD+u2ti!JQ8fagMqRVmnfCk^kdVA4z~JDbGf9h%j0Uf_kFSbL6x=}^E%Py8F9 zmiO>Og=6X*AG+FdlSP zfDp1UPyj&$6j+E0iLm&ukRv1vuN+VUS9H}VC9Fi4C=j|*Ff0 at biEw^!`}n005*XC7 zPt`ACTA%oFB^GWw;)t*S((NQ%rvR+e(mjVx{V%JfF#FeP35$Y0CZFP~mlLK9<^En1 zb-=~PiQ?Ulc0XNT z>#o!}cm2E<3VwZVP*}}%pM4Dh%=%jbWwReGPIX>5+j$wW4KE#==5)C4()18wwSM?< zwSJ^}4W?=7qjiS$rs#A+A9 zyPHm!UN__PVT>of{p7u;vECotd!em#$iHY1_ugnLJ?&(g%&4hL9e=D{6QJM z4E>S;{4fCubbfQ6i)F5c$6ovAa(5WLjd#OgCw9LSsU4b_odji$q5~ya{+^3NknumR zxw+a6CGo*y9~zZ~c49vJ?N7XXA9}>BHqETAhDVVNvd2LsDmNaV#IEX;ezFQFQkPXl zkUnEmL5jIw1oDa%?+UDs1_3KxT at s(;j0RM*cqdE-d59LA4FPz!S zJnF6MJaW7H<;czt=0Tb-&4!t6N{Scxc#3!VWSY;$L$mL(hH3vupEZ8{o+JI8#t&HE zlrPa9)DOBIc0-fRB(=S2UIYyPj4&{KWWjZ6ONl|%mRjgz=?IIak%sCKeU zK>*z>T;%rYKP7%DAL{=Hkt7K1h54jLeZq6`qb~pcw>yYRI*p274wO(+RP!5WgWBi& z<0`B2bHCI_b!H3Z)~ToN-1hYwa&s{MH9glLS3E?Gj62!=px0~$%z)MOw9|W?EaERM z&tH14PB&F6il|Ia{j1KC at voF<9QHh+(ea!>)>pIkE3*O4Pkrr-)o0Vtulx{x-?FuN z>Q#o5tUeX3p$v~plsIsMT#6!tVsD_hM#@%_Jrguz+;d0Hs8UR_eAD+go?rBcd7TN< z?{N{+^uIaL^DgtAZ#)TY`8q||Mf^KvURS$U>G>!IUtlu44e3~aEL5*U8X~Tr^Isdj zJDR*hW3D%5#IH_1*_e5=HR?{=JcrX&tXyqe8orNMHg1y8b4azYd#uD>Jk at _no4gMh z8+EEblo)vz9k*6})D;8V>Q0tv>=%23xN6NR_e|#TocUd9YCVxYh~_bwdb=>$5Cxt; z at sGa1Grs&g({V>mh8dmr)7u?0+hw34YxabOHrN~$sgKw^(_u}D0e=sE>$S^w+CX7m zuEJ{fprspA^CdKQI|zd5B!|zI{U2UOedPM at zW&vM4})3Gl82W+>ot0B3?W>hhbh zr9tOTC}sZTsuGcS60#tA)$8JS!`KE7ex_UeTRp&_nMvSqoVYeeC*50?mxt4o3n>Br zkNFhbCvRG22d4BuWgUKKu3Tu`=|sFbGE1R$p%}8 at HXWS;#kyIksLv~l(G^JTZfb3q z)xf0!KW`PCLb7<0TC{8B$POKwuoL?@E`K=cH!=HBsQ@!pn2(D=ew4`|w at -n at i zRiY+=IsNu!_Qca6>ke2i_)nhA4$d?6Gp-}Bllm4$l5|1tU-y4jF*wYw{=n}KD=!Go z-!6uM^y~`*gYqBUzVGzEC%S}uK;&vez2Bn#DOfKQ{)PRJ1o^&GsPW at x>H$)CzOSuF zg;WXcv4S8PBaA^E z^!tkR=|La*Qff2BNlc^EK_99k8b%rA08zI~24JB32}hCY%+oX0h5FpxB{ z)(kA{YBv6}S{3umDz{c at zGHVkGQ_7$>aSSPoM6>|r5A;$QAql-pWRnI1&U1M`?=YTq{o_C>%Ln;C|p!yYMQz?)Wyqv5!f5^lsubhxNwz=NY;GHucRC^H`=?`44GFrynL+_w~@40Y^Zw|&?DuZlm?(9WgL!QADK3I51W zJ50D|HAtB!NjT?5*w9YqejRdBD$iGAx`*qJkk2e&x#T`W7WBRIkKj`% zeAH_wv{wkqwum0>5Eq`|Qq+fQwMMi#kjl159$WFt=R?Q2DGTWnGmf~k2zZmNb`7%M zxtSvP;oSRulv at CRmUc}Y7T)-Ti!d~FzCjsnq8OR-pE4nVZT-H~JS)PxO4^1kHH2Cf zz at xewd9#ral*(1SxpmWzR(Q!yn_ik5#ouQlVgh<@t>IgEu~E4_V6|s z5D>y&73u$SdxQV6v%&w&9D=Kg_JsgOo*@Tp*`AUr25XC=MZ6?U*Gy(mFbD+GjGlb< zlQTGQ3{H-mZo#Vi9Pvi+gjAh|;+ecq-{#6B%W&{b$11HbrCr!w5W*TAb9I7CTejhd0Ye~=az7#FKV3*MY zI3G8o)M$ZrZ5poGN002uuAU*WF at zC80I4vP+%c+_nPlA5aq at B$)#_9D0HWwV{78xm zW!=`^HlSo329Z_M^kq-cB8vfeWHiIjYtWtleLWwVUuF3omy|Wp;~s~dK=Aq2LADIC z?mQO8caH8W9lI*?}IgTLk~On{mlDYa7qB=6T)lOe1~=lJDjN2a5W$XJ+Nn> zQByKJR23BA4noJ{!WHnR>;@hU2 at A_eW#p;AB0szn=L%b6BsBCLf^Ps6J`eW=1QDF; zNyZFx+s&CobbU-JPwqg at sPH+p1XuU2r1-u(kl_{`QD2!?C-w;)&gU0A==R;sj~>hu z&g?h==|^8BNnQ%bUpRh99Ih5)NVzLK`o8a9b%E4lUQ3s4#WR<`ANUp}5gUuf0mYNv zU&Dhe-EY}&cp9Z{Q{K)3YZ(@Qf;vpRUZz zGoTvt%BXj;D#tj*kJJU5n~DjWlAKk at 2Op2eMQWjhws81V4g zTkgUtAKcd$``&i{(AX;~p&LrG=3bC)wrA|eip+q88bb!v47DN#`BHZ}0Uk^*3#N&X zglOEcGn<`?6cfE-5*LD!A|h)6XoQ ziS?=oHAOWvhf(DzZ%{2h$%2(h|Gb29DD#RK at Sv9otbnLi?#b at RA2yXGzhhcTX5B)_|3T=JjAQlfTm_ zq0PhH@**u&C{v9?+X#}_-oLZdsu}Y3^X&3pk(Dw;pc#^9-q1$;25xPe0Ja6)%|*de zcY^BY(3xp7vag(){S^%vd}DVXd2y-;^2(*!$vXMBw4ZnNI)8qUO^~7_v+dv{V3Bt- z7Bb0YlDG&L74wIBYB9u5&hcZS+E8>ln|OlTQ&lzyJysS<^X5#|QC$xtL`rz&O7*fQb*xP+e4&U2QwW^5U9O+V1jgO@(1 z(=&BXyF{Ea%|pr%F!>HXFlN!%)Hb{Z1Ilb_f45Khv8VGHzhzq{0x)fQn)Ye9d(?oy zYZZtKWSd47Riva>9hLhETcYvh&m+Ey!kQF}I4b_oo1>DDfVd<8Ao`hqW3RJP@*wI>ai1D&q6jAsV% zD0QsKHmrXZ4d-%q=z6+RTPm+;3AAuGfh>!Ys=u>JERX*Ht_}T^b&b5`;|!m|UJ3FN zl4qwGb at qm^^!2_A5W_`XLe;W2^O49pQ4iZ=QO1)SUU)0!{xiVS%Y5rI-ei}M0ixdVe89stjbAA-YpLI62H0Bojbg#O2SMO-fY-!fsNs~5CV}beWbV9*@Y;Lk-^Pi zW3)Ab`3asLBqLZ#{+G=D62 at Nw$Yf<`{iU_^zm&0-!L{PjaB9>TBFmnIl!gCvZn!qy zltMLWhP$LZJ$Y@@0o%USt=D%qaxr#cZoNAIFQjfEvY&qyPq9p=_1rc!x`^fa2>ivR z!sC?UitTIj`B0=33d4t42*Zb7fLmghh!c;KyhhrrX%)2qP|_}Gk+e-)BWhN*N?V{) z>MRK at ev;UvW~Ft_nh|=7$af=K7cXKhey9rcx#p#Gho)VTOZA5XX0Lw1=MJ>eZ zugoU^E#5i8*v~PlHo&BLy&A^P$dB9LP;0(+*Qm{3c*dpWCz_W2POIy;>xQ=8y3FWe zOE}IR)wHT*c82l7X9#zCR>ENRN>-~^&!E#-&|^JINrMv3_Y8bp zov|stO2hFEdZ2A!SE4zXR~X*KDf$5f={IP!(Z at 80K01Y_C_yHRxm!T&q6Epy7=@L^ zY47KzU<1;-#XEsBDP!S4VgP-!q)Rt4hx1%ZqJCs1?{YIqgsa<-e`031+x zm~z&7nLo-9k&PO529_AE5K at gEYXY7a(^%z`Mj?S`v>OmS{j1i0D0VbKSv9L!6tadY zI}7JueV>(3f%Vn~QYeS5RA!qii>3#p-bh*I9_xypl2_JQa3p9>!PM_p(a{y~VRJ-E+Q82h z{(F2XS0?rt3IYTq1om&^Qw2lwzizJG-`a^(-O|p)-u*w*6NM`aoH7%fb|dH zANSZgSAZVoNZN4cpYA^HdA?tMCIBjRpbE4*KndS(LNQ0-i1GpR04hOGrp)9p-|G^n z-fNR{5G71xpoPX_*3*R{J^rDtXK!08 at m<c9X)bs*mNt>Gv5lsX4x)l3$5~yOBDtf;wv|h%RCCsz+!YxZe&}`*tVar=u!szxLR{ko5qSs%_|%j%KXHZQaRJ zBb3drPlu##lfajAQGe3>k(up^*7*fGFK4sjZX5M}{@Vc<6(iPoQe>>3w3Jq+$Yz&# z9Ay8Sf;RruJyAd>LC at t%+Lx?2fiIc&{B=%qAEKIU1X0Uvzj6)VlFHA^p4ZSI6?g5} zS2~};g`sJ=e|F!8;w(yt(kdCFhDpAlYsel+zucuDjj0dS0}M27RvchOK@@=|A1H_i z{dZnX9EbK@?Ww!)PSzsI7?~jcAC$dQfTin}B^nvFZQFKa*tTukjttwjZQHhO+s at 9@ zwa=|OyUy*deqE1ijxjO*`HdOJgPy}>$DsW!B$#DZ5+WyoC7>|^W}m2m_N0$}(Tnxz zf0!DKr!6b|0i0)cy!wjP4V_;`7&i<4~# zK<5;ak4wIE7JKd__6sMmxD>teXam9%WKdp=qaZ%)YS0CNjS5fCI1hvTy= zuitl1Sbo~v_3{D*L4?;94aHOKQJCqhthHqeG*H#QQ1k3a_xXt-7D*C;SYl_u0)>hx z^q-~kw{tXGNA}`iA*OY(Ckm0mn3J^XmZ26`eQ694-U}8MW^aTjvxx7-%1YB(xJ~33 z#*_$&C=_^(QD(dlhxMNmYtLNhM9s3`Ct;C at CSUs1aHWR5(>js8r#$jX01>i6i5K5$ zB$>FN6ro-qhP)Y&@mj;^Vu+FuI)B4_YHuwzNp10}BoN2a2}EgpRXCUuZ$p5s)Lr$8 zto316bEx&^2jaY>B0(6XstU*nm>uj3t#Ve1Jwz*IutMVDITE1(Z~L6kD7 z7iJ9uGF+>#fI;FQm&ZY^08+smW9(zwJ8Reai|Z$@IcK71dT1Ye1&2mfnK?HQirefK z%QKZ#gqMxs8`7VN)GghJ*H#)eLRLFhkhPX4ksNqSR77KI<_0qWqY zZ452-^SdK#|LFvTj&x&}zU7C$VzyX{k*torxz(4ZPI$~a>aBasJDKIyX}0-#FZk{E zDeqo(z81(A(O!PBuq3Sf()0W43(k*L3(kP%(V~&C&mdq(9ThZU41bznjBto> zs^5rVXrCJ at Vr7lrDtKT4I>H=Pw!Rg95SkYB4mtbyjEOqi_zv5X8*dQGEpAAXQb&cM zVqY1hhRP2RLA=Ddg0F0?*`~rxkpGH*is8>6Ud)1vu~nx%l!2=)+Y;U~>R2tq4-&yL zV9$iYTT;S8#GNLFzK6hLticpFw*?9KmZZHc3=~{6lJ#9^Zc5!nmmqekvZ2M!0S5Pk zdyT_^6p at Lplq(cwayH$VOgxcjVotF&N2AFvttCnNG1XY0YlqzE!FEok!I8@&vTpZG zu?pY5&~MiGRSKxv!%72W^YKe1aK6k)OB!>Y_n0#bF7xe-bUT9Wd?g8Gc57&&MV`WQ=diP`fI+`TO;rp*jHRwTT8npP;MrCj5i z`SL8A)D|j8=6Q_W>ma>AzAn2^5qMH4Kt-YZc`%_(p%nVATyJtx&E9)-*NcVbR(6B6 zOxhA~3mvHyO&f5dRvCYiFv!Ku%?sut}A;&S8zu&eT71Pn0nRW27O z3lMM5&|lV0d{@zn^p>L={uMDr$&2KcrCa{4s at JuZ`j*EB{uO}_;xkfL?X!HJ&40&U zc$bovYPHpENdB4q(@sHBHb``YbgX(mJ)miu)GllNUdR7aR1 at QCL)g1}kaefd`;3=o z3$kDGQGQl!KiT1e at f_Cs8s0G^lnc5INLlYlDOh3zFMPaR!Tk6c-`vPtHI8&8s4!kx zTe{o}EnWuIG1lo9s}-#`j69TlO#73Ukx4jsRG!PtQ$J|CtO{*zajW$~J}p(|G-70i zBGYwU8&|%~WI({)@=X(U)T449c~ca(Zd9kEm8j%M*c_wp1qYhhLWfmJ^5veQ0;GsGeYPFfgnu

    %H}VC^ftq at D4S!ML?RZtsHe>Z2j~+K z3nxs~cwIIRF`E)~$fQ9471vLYqJjrhO3vjS0b|j?8&ogf*gU|OI4i##BQ~!?HR^KJQnrNZrY6Sm5Xy zs1~Tos*oLE#MUL7Reetsm&-w0tAfucPJ&ldF^( z^-7;MH1ccr8f8nhGNwGwByE|jTygq?($CE;f$mZ;pi`Lj!)j17tq zRvQw3DI3*MMl3a`GrR3!1jx+zv!U)rwIwosD#7|>hI7D~x|mwVWeXRe at e0mHAa-v% zX8`dlu*rL3O{q67DwCMn683UYIFx9J z+m!TjlH+9^Vx-7N8Unqt+!^BV*p^oGi(suWNR8d;wE?ari{&F at M6F0-1?2`=Re6BK~l*ml;l-6~~~+8!?s|Jw>oj at W~tj zfj}eCGPu=Vf}Tp(w-YtAgwB>KDrIamWf9cgrZ`c4;GMZRgfON8sjjhCL~1^GRKr?l zwWqdwXfvTFmkiEJ$H=m^tvJM+M5R1hR9xECuyFL&maID8)Tl{4+QY=3npHX0RHw0Z zaCA*e33Fgh-#VOelQ>fMZheBYsGGV;sMKRytO$EFQ%Kx(+`;bWCV=}lOzQI{f}r4lUua5 zp_}=R0w(%&+19fr2ALZ@`2CZj>p8|)ZvJKD%}3zZ1Kqw=UM<~GySxM=Kju}c(My*0 zQ56gSQxS9n;I30gv3q3kI&|s53Om)kH*i~n8?erp=RGKK%1#_d^mj*u-m_wnz4t)=LK(94Nvp7qhhouHl%;!o at B`{UnQbg39SIGWr3g?sDR37G+Uc;TDFxu0U at 6msKu08oU> z_{7K%W#r5XKi9bWKtdLi?{|CD2Wp|U)81iXKsmwMqRmgQ zQ)``q*2Z-T_fH;?`ot4Kiqav6K$rgf at lAffCO8-DmdnQU(Z%)Pb<>%)b;H-~1td2} zgM&G3DMnCn07x6Y7mqH5;>bCcGSopud5nR$OgUgwwb$|>+h)r3cBL{g#&>AV=Vnty z%TQSLzWy%J<&e`?x)Haq7xS4*;ewHTa+kZmu0JXmystmXL$(`Ly8o_^ecNGQF%)P; z=f7KKJmQ$o1uf3h(wD3BNotB-&4F7pawUyhxsgFjVaU>>-+|?_8`@4qIfoST4*SG7 zK at vRV6O|}wMDj)*jSf0lPLf&b(tvRrds``CG2&u)K1!|8GGv}*pyH at hn1W^V0{oti z2L|)qi?B at kJ?o&qalHyEB1fNVC?`DEt4xhazL)OLSY6S|Pw{-EjV}s=j&3sg(xy2i z4N8AFSzx51g*X at a`>0yZ3|W8brP(M_8H4CoQ%z_u`4~SUHC?1t4L^f)TAS}?=h|;g zgHhZeHb|!(mUmXf(a_5?a{*wH1_8_?QH)4=<=k*Uev9ZUfA2)D=m?GS8oK}yLthXX z1MJwsvFmG0&`_|`oY>SfpSp-c+W;A++hncIgv16hi6_7Oga!)nWqZtp`zwq|r?HkY z)Ns<#4mq7}KBKF^pzL_*MqRloC~3uxK%(ghmfllS=u7-Nl(G>|IoDWJ9rc)%l^`EM z*%PA*b?CWF0yInq_TtbTv1m+_+Mi4!^L#)46`Qx?TOJLd002xd000#Ke-3;??l$_? z=7x&Sc6PQ7e+|V+s+#|h at 4u&w;?tzSBsBAbI{ac$CE)3k{lv`q6(q?U at j;Y|$B3oG zP0o!JG}}S}w{IcC1K6&$-vR6CbHS-~oM?Ur#qhoYX-$AR=ZKq0Ce+uepJZ};xIDMa zYd_62!1IX^?2c(_K)naJAE|%p&X_9c?lr&}7x{$91XZchP(eifnmY{JQknp(( zJ`{kZ2L%OKIE{*p&l(rL(oU7|crhA1N~~7k2UY?r_93hJOp4|REKDF;+0d56l7uMU zBfg_d_E8~%5<^S4CH1W=w;7*>7eQN0GCOyW6dXBtMDvHIeJ$&3k%lP;o3mG7aOb^S zLmNaSEn<{!z$nI?H1M=<6+Ib+Ds0%0G)}TkvA%W-A!qS`s(W_w=o=4sIx8~uca}@kAc4f%RvI^x~J?oAfhKC*(HG8I!!9 zw!h2?N{*-mV;ClJF{UTfUtV$>BsA}g-nEWMafV*$$%TKoOh_?FF|&-Eu7sTxg9%QN zhiD_J%Y~aAXt+Qx%Z#v2GRGL^m{_VS)NHAX_biNWKzMic8KP7ouMKI53j?7_tk&!U zz?Qqggb;UD at 55jx+Xd;bqo-;IdcSuzxf30rBcqo+7VeWLSGXbBmbqof-rQbwm?_&w z%HHgGL*SLZ!ZSeNF>rID!n7nDhEZTt7u4;QJnxmXhR4`v%91I01;~aWv at EYRo6A2% z_R;MXhR at t`3=kOtRJK at ci6xAb*l7%*nJL_nbQ`2Hv!*F|McFE4_Nk+s*k$YQ{Vs*T zU4nvkM!ApGzZOI{FmrodC+{hqTNB&E4Ut6Q|I#;Nqft_MeM#ls5?f|rv-GM{c$UTK zsYfS`&7x^fXpzpAI at E6Cn8s&vMj3_PRuYkX$lvRJfSkoSZ&1lj!E9PYw~epPFjvSjQg{lfu9d*nwYH z-=;RKbHMZ^xNB`b4~sOp7>g?M=`IFLzAsk%om)*evY(|rb%z?B#%G(n3LPPMK((ZL zehb;Qk}0*$X`AV^vzSrjLzA$=Rzz+nU|o>(8Wk(iq<`$RVcxv(h{=pI9}!GBSRfEd z=>hNKH<2VDfkzj!&;s=v=~VO!_3^quJ5@!bqGgYB^@X-0&Ll at tsW#Q5iTr22q}fwK zS&^{u3|?#))Lt(PIEdRm3`nT!9uEv%$Gja3 at 7*rNOC5lD{0*S*qmYp7;KUJRY|p{9 zSLFVV5ax))$6SGRrhO~(c3z!kWN6gNZcgJdG_gJSXCwi&t9V0*IEs*k5U*+-m4WLZ z76OpLfigK--mHRi8L?~Z>2|nN4cR`_D|@?RD>l5WAgr70o`GPmsvjpdn5!!s&FR&! zq59wk^K at v+@DEIFr&n(uyhB=12v`E>&=*7McMVz at a30!zB3{-Utw{yL?PCNYdaEd{TahPMY%vQ!7wGrxW{%f;pxI9(>oLs at kADHGYs9l%b^_QCSZO|E8{Lx=w z+#g_H{YKD`4Y%d=cppI`muTs?>9gU20?;*3>e!^jqQAT!Nd_Wrz)5#)KmCl=VDZFx z#CyO$i93QiZ36 at _Dc|sfQO>~C#MwVPi6JH|S~lT!F)H%{l7f7g3s7*W5m^m!^pOxy z_uZ1SI}dlPt?(;(@9)`BRvn4?py=|mYA1}?uA76U!RI(bm`@b>)PMfYn9OU!}$u&^C)k$Qvs*UCrIRsb*ikNvwp)sOYRS3X$-i$7hNoW6s;wXu`2gSd@}EwP}j zwVkbvv5nJze#OpG)>cGPhv#8q8iUpkVz0+1udW9d{|VH7SuR8z1Y94DVGP(&@WE&V z=0czLr|q@)QpTK!nV-L3`@OHbTK~bRAt$+%-05`kc;(qHyVJ&o_uKmcx0n0-GB8{L z(YVq)bwN&iAJE6pF+-Ia2Pr&vlGvXMyX-tw!2nrb?;=$t5qxtgPGu2%b0JQCA7OPi zP8kuw&S{cd1K5Jo1ce7M1G5=;5v4^1kzL-31+Phf?{e|m{SXR0iT-h8D7dBP<_1cu z?!3z6IuFl--^SLIY;5=B9)&T4Mth)#hdO(-Odj15ZVR6LR0Q=h$tm>4Z$ZR|95 z#7~;$?|dE5D*VTat>fmMYWEG8aI^TeZ3Oa?DxRCV6ic@~o9VO0Ks#3k$4rglrEy!`?P9R^%^~R*eWpR8!hF!iwnayqGcpHA4_Ab#N; z+al_dHEYxjsSU_~tVm7#P2#j>KFdcFPClz4 z(Lb*xuQ^`0$;NK at _amHm>&p at Q<-sIQf--TI!(UAl3i;U-h7B1hES zf&(6b0mN|jLKtBry?hkeQ$L7+4zkGf$hPQA+24dA-4i3GgkCQ at 88fpC-zG~1qm&!d z6sUgRPmR3^G89+4Ec^Mq(2y4iYH;dkS~LRvT^E{IT{7i$uYNbJQ1kJ=Bqira3-X&^ zP56#mTI0Z;*s!>voXq+~u7V+CjlPfF+!4h?hZ+g6EvR4Ul|nLCu=!Z;P*zr+8*;&n zc!z?<_N#rWqr`v^o4u5y)Nra_Qs5vsoaHka2#TaXqpg-w+-nVHSOS=-K&9qt+4lCE z`V#(Usq)EvXIqVQ)9Qr|x)-6+F#tmIN&YadZy9N0`o}u at v;%#k>}K2460RyWs!0?r zKUyY++G5i+CPFg1>$kKXMg?|?J(#89BLGM at K!?f>xo?R5FFJ>yxPC at b3{e<&9=4;| zHSNs_H*1yV>Jko5zmUqA;bAFV5>LQHAHtVA#5Y at VEu)b(M2v^g0;@Yi9Vn}NN-SgQ z!>1mNVaSDa>>PXTqfn9$x_^Zbr!R4{_n*0&3IYIt{(m;#5KAa3Fmf>dg&yS%MJ!|F z-`++EF!~cDauNmv!T|z+VMA1C2*8vS1WEyB;TkDMNT~7JCJlY>#WT~d`_7%68ny>= z)HDSJf94xej_jL_pFqH%ObIs*v^|c~HsCp$a80qtdi-Bh>MXCf)4^B33$2 z;}~W at An2;cTF-=A5un7zQxoe>1K}tzTD%V5+9Qqe(&LWlsl40+=_q)JSV(Ye_cCWs1%pe6e0nJtS;lP5IN^vTm$B=2aZHIuACeH|3HYXBBpuc+rzQma-P*s&BPwYZcWu6EH897vh zlvh=#D#wvWrpmJY5x7z;A$8VjCtutFrf-65PM?VfuKX8(bEZxy-lth{v`FSJVY(*8 zIYugVeAUDH*j(8vtT)=t6OHA7hR=!9)wpOXph_3(hjy2vGF?*ki9^G1n$-3h=5)X! zMLY>LD;0zTf3m#In+%OxusOjZm#%E0hseVVu?h0=jj$U at p%vE+t(ycVK?Q9X>Fx2j^Z3-}%3#~D-xm(FzfD4}EH1wFGxat5{5DGzGE#ekD z`I(PelD@#6o!8>Peus>nU96ev@~!yX`yEWZ z6?pjm>lzxUKiQHm?*{m3@=gy?+&JFm6$^G(<5sef^vgyAt-vSdLUt5xPg?jh3K55? z+QlPWjGk2ZOB$B|L&CI>hx{zE11BYDng^St=QzX+D9c#jaa?p(;ZW#v9r{Wq$+R|vT}t>O^wW?$?sKR at Vz zQ+^7~eCS-6f9J_q2O6!0E_|nW5HfOP8$^w;-8sP^sKIBuUgU7k_+ALH^8#)pw}2;c zdrb7`EHABS at XH(qgxE)`Lr$a2HNU`*Zn95Lvq8AU4!pVO9QfWD!j%(j;`I*U#N5!y z!LXAhe3{MyT6 at R{EsV2lGMpKcY(l$==ux2Yy&s&Va8nqniK#YgJmUjrmoZBwrCu$E$REMBz*tLv*nZp$_HJ}KeM(7}a?W~3K)^mg9li!Ce59e~2=B^TMO&itD%5)rPJcg) z_WeMXPzMMAFbw=}uTK4!g`B?@EES~{k@(@g6Rhfu8oV&$@Dcfg;FCgkAORVI9Vnp1 z2-S2dNu>7o>m{vOE!^*n&fsnhl3Zm~%1B6#`tWvR5Iso|6!5i*OLiVReHIqJK4xZg z0fyt2;D?N1RP9&*VO9uF2c7FW^5z^Au{R;*iFIx+FH2M97|Qlp1KSNaEUzOd18vx0 zU+SCHtM1FgDL{|%47-#Vre<|&GsCC6SK3b2EjJBAscC7Da}IHj>Y*p~%%<99me_E7 z*BULk#ljMO`6b&XwSUlqN&`|!iZGDH0vyqG;I>f03eI?qZHe(6M4K0_Oc+z~X!51$ znXNHXb?SBPL+^=C)OjJINk!8p3|4lCn0<5}-FjIYCV2`wE|C^mZquYa*Pp5P+xmt7 zUd&H!0;}bqrOeFS1 at JD@0RS5eFLB-MbU)*h*k06l+8f zJP!>8x?1}Bt%H9D)>BX>8|jsoI%euP4lu|KKrm#X6~II5_d=<$cV{dT*OFih| z4O=U2EN32LH;gkWg5bnQjF}|KHqUl^ri4L^91+yvS$_cWRkBYff4SV4NE~1RKVQg$ z!!Dhk)H*Y*M6!LGPJX|i1QxM6rbgN6l at ZsdOZ=6<&EFP at X*kAFFaE$?5d;8$;lIQE zKNNClV<$6PBS&HdV at F$O2SZ~qTPvggZ~sDRLIH^%nFl70U?5e`jcB*jkKhL&Wq=l`wAIn0Nuh8w99L6)^T at n%@)KyQIMjn;>vva-^#W4`RL^B}zy+CP zrl5r4sfCOo=j&?B3si!*!UTp&mI0Qbc4*MgfHQ`m6f}5oXJ}3^Pp7kT5m1u*T^6+hUltx zq66AetF0yZIOuV-2v<*#_Ztj^U z4Fm?Tk5Q=U2Y(lELpS+q(N@{sLN67cMY0tIfD4v6kOAl4M^!v*rq~LyML&Nkt3W7- z4~*c0{vtOo5EHKA>sPzeZl{q?Cuu&*Q0aHLcLzig5AU~)ZS6V!noBsmcQ3I!+bmXm zeno8=oewNKdKB=G at d7a=M(B|VH#K52R@{7u>^!BEFiefi7Uw==bniSj%ulrb?ZNTx zBKXJwgtBP4=)fEiTAcu{j0nTbI)6?;iI9sP?F|?)1Sf~E04LW*hLk}pZN*n`#}VMh zKhiD4M8Js<7L3~X!-3Q&H4`Ea(m>8s5t$LsjO1R_;G?iMW*iZ)(CwNhe at qQR0%9o# z;S-!i0f~;EYVUKeIvug at Wh2{3UXV<6j2%DgX;jQtkrDU(iZrE{YJ81^%$DMUrOjQi zt>d)d31CRSGr`r2SOzC5<&?GmP3(;|-mQ{aDSM?^gmNJ{^Pg*lr at r+v~3aP;dxTD)!Max{Gh0+TGl`*HP)nlDiG@}jv^k! zG!w_nLDf3nuTKR at f32~?s+u!p=?t-@>3iA));$kwLPHV&aeE+&4^K(8d!8cSE z#%vF04RA)`H+sDfHD&z-7bg%XKQwYTT8Jra6hpY?R=Ex8)2vhq4}m_{=`v>Z_`u^! zh1M9emvY@;ZP#v?$W6h at YX07Kf|j&p$w=ny?Pk>~uzr?mIb`OV at V#h3_o9P!ado8> z^0iv^HZURqHEvU(#=BI)Sl*VJCJ!x5lOp7BZ|dA~m(&KHNH**~Z at DP$uwAqcCl7F` z8LQ1AZ;3P%Y=Jout9jO%;8>TCp+=^4#SGSF(u#P16E+Ij<$j3)m`ZBEu1GOW#VF9F zB(YT5_B3^FLoj7hZi>b(SaIdB7XbKd3+6G3L*$n06lywn+-QS18C5j2Xj*W^I<6if z3yq-=bA*9m`aB+D;T~cFQEK6gOAH1%WTxJ03&sk)tLeZL2sH~O?1yjV1lKMN-m)(( zFe7v~AN at g4M)#$gMd0aPF+{V2>H4f%6voYZ9U9-%&)HRs-$mI*KcNXWD$+(06HLf7 z(h^2=dNgGK3(YpBNjTwqPO*ySMvL!F7^9!9k~3Na(c`Bn=!J at lkQMz?#{1U`AS2za z7DcOc1*@Mvf~!zAYm$o09U>wNf9T@)Cx=(ruNgTR5$qr1fLMb`Md#9eCL~&77nlJc0k*Bhms|!)wts&;7T*S zG9rO+9<%0xD`vNkVidnn^zjI(zvoY%k at h|GpZ})P;on`5;Qqn#+W+N*yRwa=zRCZ7 zCCl{JcE{ zirk*sVElY_MrnE}gAv}VKcClVY}xWU^!sow5k`15-YA*9uV!$DL5FCzxa)41j%HAI zy2KdhQnTz*F-6dTA%Jjnc zSR)JQw-)RQSC*VeVv(w56KWs at EKVeKHx?dIq(w!M2J5pBT{5W+y`O$FXS0^0bYGJy zOmJF{U+H86KeoqxT+Or^J2cHrD33k?Ts1Efs?C0Km at yP9CTTjVO0C5n>ovX7_sJkM z)bC(z?1 z4>!+oJT{>fURPlE>oY+$naIbYUff5D>m>7xNOCFo#@(_COKj(0dcM3zrThn>v%M%< z((@)rpV*-YDP@)7zs=&tr4j~(qL14{+o%7&AKWtRmmc{80HE*>(n$WjO7LGrroR^5 zueHkbZxDQ!{OR4XyfqU6v{LOU3!Zn7}i zk|O2QtO`eB(|CXxvs(;1Fi>O1v at -5Y`l`CLHeQ(s#vye|PT$9cCeyFqwZs+ABlK;_ zUp&S{&nkK5b*YtPm1~n}$gVZl{M|jywNVxg&;fn&+nqmHkj-`Mi29vVN3Jk83gnujz6U-m`Hz0#HdF2ryXmQ0>|i*NxTgbagQ9fB~1Q zxzjg*EL)Z*$DQ}ZYtQ}s711>M#O+Ajn_P0E$mU&Beqe&_`LCzQAUPnQXq82_dl z{znOPR9AyEtFy31sY+bFMG#(WVI}=ZZ?iBP5>Hx8*VU`tm2}NIA!^|DFsAz3Z at 30; z_H|YW=^u|6*j))0h44-%vX~rAr!&*GJ}zEfasVjFN#KWQuv(DdN2l-VEQmxyxu&*M zn$&Gq)yP(t at MCK-aRkQixKS28>vvSW`?s#5eU*I5xXUI&sw*aBlek?v<96bJt~{Ia zF3R<+6}tFCtu18XaFGb#`f>ZpKeUBYcb2m)U}M%P&Bk0}h at dtmXEzf3S-*+RV06r` z(<)hTc~k%QdBPe*l{j`>*zzr#+;=I{lNZbBWO*dZkTKvoUBemIt!_;CQ34^+dNw17 z#-WO}%STd0VwW%dS$WyUxR%eJ=@-}|vEo>vZ4rMt-V!y%Gzo%W;JrDirg!&&3yU*p zw8U>VCC(Ai26ISUQ8zm5w%+VE)38vK zGi0ZJvEBSTX{F8)?t?{kAam*m{qN9{(sy(cc5tx$XNpkLmi@;FvOsG^LDh%?)kvOCPD2U8M?emt5*j5f zZFTk0n6+HCq2ACz@=cC6IJo-ykJFYIH&&_=e)|(yZLZUqp4V9!Z(k=TbO4&GVMM`R z*oy0w2iwSPFC}&$aE%>#(tU%)VKhi^7`=K)iHJ6H$Ju1uNHORp6$;K)dtB#DhAlx8 zdd)bhqtOOxww0#DlSXHz7PhsUn!s07Ss^X~5 z2+5*bx5yYG5vfmx&(*iqmrh4dr02ac!i`k2x;KzR6kLsu53K|(>tlt+2MwX1+zj+l zA)sU#Z1*tgQJd=oZkVDo2^c6ZtP7~pm4rLMUAyn7iuLZ0YutuX$d!J9m7$e*@D8ut1Dq zK1!lP?Ek-z{FG*}D zuai+;6>(EPHxPrKPJ3&8xw_0{FQVknu(g<#0-aT7feFe=QQlC1hW<&_?EIL`pT;C@ zQv%&2w`+9W#=jPBjNx4!5n7xPvW$Cl7&A2kHLa1s6;jTSHnG$hn+ z#zLe+^mgiP+)7n`)g6X*sAVg>iJDkqtikEKF0E3h1dkRB;yh$AL%}YK2?k~j1zMEQ zP`e5NLLb0a at wW5n#a~wjbD4V@(0QUV)jhp_$>qDSn1PDJ!r& zSQfl2TKhzv%GiXUW$I|ao#N;S_z+l3o)@uU7`?!nzjXgdF}wiC}9=lS at wSHP$&#DR3MJhGxFKuFF_Q5G3U^hdY!3 zx?NK@F!oT_=D_a`+yHxAW1QDs8S6+W%`&8y5V-9T9Fzepa84gIEive ztu`u$CPcbymO%o>yqXZb_1A+ at cqmb;%-XG(!MIkTdn+(sE6 zPS2XG_j$wCNS-HYx3-Epo35nqO%-AkHMuB$`1YBhXDkJ%qryY at Q;FosFu_bYq at 5!qMS-;G^bgpz)r3!9^^{l<{+<8LQV$7 ziw;W?X|P@@DA_JjcQj&m3pI18PhlNZ$~UM@#W`(=3>~ie9+n=XOf+Lw0DhreCW{3% zGa2CHIQ!tdFPT!fF-hB=(@R9I#PQ;a!`h6bF8^ zXh>$m)7Ttea&b#HR+_vg$yU_g?G5Sd-6dO8qRz`TKq(F<-^(EilNG4wX)o4w?ea5NB1iDz+EhU0-uKEk2r1-r)Ad*8~$a>E_>h{4MJb_)r3d zuiJYs{J__NNAax9%+70Z)tOQ4T997({S$7oG@}l~BcR}Mb7>Xe1sXn at 3*CYKQg5&i z0*nkN)4?tsLEEbu at yzVU73fSzE11uu;SWGvcr21by4e7BkrB^U9}?19v1KYlS#n

    tK>7%F*NboAOh at hns;&;#?UdJH at fT9Uo36+KTzOD+7(}T z1Zc&=un*1|ssytP5`qWJSEqmXpaXRmKjq353 zS at P?`V|qiNC;Op^KKCRM74#`nq#FOnTQJ0^yQDA7-T6Tw5qRv%mF|%5Kg!~l*05kM6{U?5&_i82C zSaF87rK@%v?=xZ3xnKn^a#C|B-z-=mdO2Yq7a!!^lt VPDcw8k6bt+q5ff$H(iK zFWe98p%nAWVNVL9+ineBxrq==-t)l`b7DK{Uj*2y6J+MwnR4 at E%%t>b{S;C~wO}Pn zcagyjn7m7NGWc!h>nLaDuTr at m0d)pmh8zx at ix8(L*rFba&3hm7Xy`N<*B*CNXXq;S z*6wSRGHcbk4~LN#>qIjjxJaQN%~)pabhB at lGJ1&z*bf=hzenedR-t zBqcB<`O_gT;mh;}8fPdNQYw_$k7pZk6BW3xN=tyQD(myNC=NFAb7zdDkLlyavg5PA zRL>Ub&&3zOmE1v1EM at enCfp}lMy=-UH+#XUSM-Cr at 6+#^W(+l zO~)IOB?udSJ*GM=#SNuK`&_QvVd|{hfx?1AH_H|5n%bn+mj^%|0@@BZsMPysut+6@ zndCGvTC&bIROoXcKZD?)*^7 at LV9(w~L$U;_!#Hx%9)t(G@?Yg&?h053prlFdkCx0o zZ)0O^ond|sLBUeKiS%j8AXO2VhzegoGppDNCy!o5 zq{6NsI-*@}z&_Z7W?#MI at C8fZ6=U=17Y9%1G?3v21x|t at 5)==KU63ir3+b4>d~TCl z8}^E~`UDX6Yx~gKET%NnI{zWZr1u*BRn+V?tnCvUbOCExp1zxd0rN-78H%Dh<*w$b zf}Nmq;dQs)3)GztNz;x%XLqn{f|m%7tq`&smSLmn=uNQca)lk-8LAei(^uA0Yuhgk z!T`!(JCg5&MZ6>4%Iy8nN;GBtPX1=K&=myL$hH#9U#IVA9ylFtr>jCO^AvZu9vaY~ zVKAEp0=|szx}Sw#Q{*k;uhXa^2M7h|PZl_)^Y|&mS7fy*+_Ft_gGsV|k3q2xov7i+aSC|WsAh!-0Ze&(45 zzlcuG*3xnF$m9L)G%%yP;|qX3gauYie>Dg+$vzhu8rVtRlX0|7{rfiD(@|!U$fR#+ zDGA7C^3KrTSFM)7MzB9v7}R}W7DaFh#}*f_9GMgfL^3VYNv?U|}h;ueX_k znVdp>6qQ1XQ4MLVCE`vx_)e+V4c?~&6`7_pXUbx)>5-R5L)Gc%CyUaTY}EF-0RpJG zJ43S!yL?qHMh!Wv6xlRfg zw_F6gYy_}546!tKX;Iv$X)Q%ZN4rLTSQDti$G9g+rYa-{69=MJo-_G^-sx}E{wu0) z!VH?SVVqbm#Rm%l)5|$fQ6_iCwNg{W;Wl~hd8YIDVbw9$kmCXD#b6SQnmM8ai1t?o z+5-aIF*9K-xDO-l;FVxw4DrfQvyc>xQrlAK>x at o};p;kh=&dHUfZ$lIt?;7wu=KMd z?bxJwjU|g%2l29qZ?W{V-(mqF6F;*vsQ8yhoZ*|bS4rvPO9Ex^gc;Oke=Z}Ovx9U9 z4X8q5?v^Z2 at N$RX47f??XmTLT%tC<2pcw#GPXuk`VMD3Qo+2j8jer!+&T?SV>3v09 z5XAR_XB7n90n(r&y=EPypm at cE&2-s3&RXh}y`bLl^KZH&yaFTSbOySyQOJ{SoAw`p zN2k0%?E{YHB3YCiFiPoldA{WDl_K<`ayBX)Y at uL zX+h3!K`XQ!gwH0v_=@)4HTT{;`Qh_74R&0fiy;07001P=ztv#>^P#1&iN3Ry(?88d z#w39F;k}cLIWb1Or8f_f$uIA5}lQ?1o6 zDbVy=b!)k13~?QaX?I#PJJlIT_Uw5~4KMlofTC-V>bEU9k#O2j% zraTutI>oy72Kg4Kt6-N0TW#>_^D6WRuIU at n>ZYBW1jW{CpR||bwTW=+vXiDNw_GhP z#len0f5)%b9(6V9=}q@@qXMJSQ0u2*eT{(Xa|iH`if|#R5%|?^IY-BtX6%JVSstZO zqHU_9n?C#+g_7FUmvZ4CEvzY|lYL#X0=z3^j9aSf!y^sT8)}6BA|1h3JHrL#$xV5v!^3>1haU%rHV734Wr&Q6UPZm(CN5ObMeyYRJd>RQxATBb zs>G8Kr3jv*k0zM%jJAekP3Ig93jT;2lG5|SAIjkg+vGpS`q!Wy2Y8}Y{0S=ZpP(}S z_n?Z{IvAUq+7OG|sOVdn8;RREI_cZ|?JK^*gbWq~G7oM%2BQ?jUL4 at BavJZ{FB^xB at 0&G@&~KbY<8CSvytWRcHW`%g7U~oL6 at -PI8fy;K zI7jqQKK!OY0~j1>*gEuEGGqvC8}U|5AJnk1tGhkXAf8p26{T>6*;36e(pkJdMs00^ z?xx|XRy&d!QX6%lEWHMBC at P>F2x1 at EweQY*r?iQJb+*KgCrv|bbrZoRQ at gKxJU|8< zi0F`yh)RHg)y=4f>r8#R;wii3TjXCkWA<=Rr+jZg;s8Z$7}*&P?|ISOfqa8^BXczp zrC2XhBl0Slsq43(&anM9E(p4!^kUSF8E1|RMEXiqw%Jpv2Fg4&${aBRirR7ny)*M0 zrjp57^%L?CB{1E$%vS9+trXI=S!bfh*tA#@A%#4VWQCbNdC{w9$ZC~|-3$KTUp*}L znL8C22nZ1b2nfmlguHYllaf{ZSH-SEWyTgo2#pUMp3d2VdU2JcVnG?Q4Dv2^5Q2KJ zLNbDtj6c-?d#7pZviFWitouN_a52;&jRPIDXc2 zncW3ek{c(AS5AFIRY0W`jvPjKM`o`J%7H?~d}LbOHh09T4S=^9+o(E&9XTJpus2ti zb>F^#t(w$lZEVb{Z{0A9#@Pr4Sf>+jIPVW1&R#m0(P8bRH`c$m0cH$KhjQ39Kyz7a zw8JLdy1usKZ at R*aH0p-)@LjA}68fcmt`jizk3a14G?ivj7ha`(A&i9R87qdNg>a5b zZUoO^!g4bdg{{~z7LVuo0{bwKtGAW)_9S?PSynLMy_Wbm*hh?@n}?mB#jL zi6az zOc|=E#&(;+HukPALZu%&=-Jl^WmzAjZ&vU72aR%hxxajto1OHhz_abF9B&0_nX`jS z>k#tZ{BN{B5>7wj=TdBG7-tdAFNP2CO;yEmAX^Ec?O;X_2>AcAK$!;<~_j9s5?!6?@TYbVJ}fGn(POZmzc-a*ATVJ@{tH7458FVM49No zdhUUL$?*p9MBIPMesTW&mSw_L0xIkM$Kf!c5cWh-pll-TTM}L3FwCYEN at BB1C`*qv zM|`0EyPb)qpHgl9aWUTDe~a+_uR2vK7Pe;ACeC)Y|JA`ns{F?ty~?V58=c=1sBSgd z?^QM99%zJEEV+f{f<}sPB*Nk~i_F$cxyJC9 at H=d|e#srgZ3*nl`5>Hx!HqqiES|^l z%+&boKk?dfuP*$YJsq9FN{E%_UQKU}B{5|1ZY$&$N_cn}d+I*N z4aCbF6q>|Gthj}0dTi5E>9IkfF7kZc88|9t zJw$KhvrtKFUo_c4yZN8fS+g60gSkEgP&U|1%WM at UstEo1M6lKTzeKKOnH)yXo_azO z_XDA0zh+a<*sj3Ydaz1Bz-0j>er};KaaeB%9#yVc-xmWwAbX`0A#Plt;Km$)&WxG47403`{NR+;BTFTKx-`ftc*p%I(=5&HA2_#TBb;t`kBg$mbdNm}ox&x4a*sTlt&i^? zpZM%|28`)(1HP&@b6O|$q0d at LqD+A?^yP{}-e4ZXqAQYR7GpMkP(A*|Cxx&qRptGe zP5k*1{$J1pO#fjTE)ha-y^Kg=pXO{@v_B{>beh at k0D0454nSB#Su4wQK^4fVgI;hq zDkd=q-NhMv-?aL)ClHynN{rtzmBkAg^b4`MioR zG5H~}+z=V>xF0ZI2v3xGU;a|}yaPf3T>l(}$UknE_HT+)7KV-nj_&`8p#C}im&VnY zbe|v^Uz6M#t9Zq|t{zcXMNTRF29=*`pm0fe*sDdx$$W}r9Nb4 at bl^@e;#GcsI*yk? zkLLI|pVMT=q2uBG`7>lU6voXoqXCh>6u3&tWNtzqK&Xl%ZOAin71Ut#$D7Qlu!pc_ z<_~SnMoUPN<`oKK*M#CcUEx+8E at E@GPgRs4oBa{-$69iKqZvnR>eWutbyVaMPI*Ck zZgpYh6V|MaF@*wy%v-y39ffC4rIMZ)SRrT*}i~z}W5C2yNTD zxA8`#j|7>MV+1iE%Dd(XTJJe+Q#I^b5j8W#9G=1P9SZ$MK~mu7h0k?U3e#e_Kol@# zq-0RQ7N*ek-{0R&aU5adpLeGQ2?E0X|68}VFcY&iwlJ{$x8il?Kb;!OMs#Zq9Xf4_ z- at Gt&1+ruWVNZ%iUQI!dC=5F=klxy$<}B_!DFlaY2J20_|FR2+8j3h*=9_RW?}{G| z%&kGpWNA9ga=MtfJFK$X0+lsb7X(;kZm7(Th`;<`|?Zq;dbo?y%5oUF6-V0NOG zZ-BZh>^`uT(QMV0#8RVF&V|ZhV^zLq8*jSpW?Q3KzVb2L#XJXiQDdRHfY>WMO!||L z4VQe=c82OyEl5`{XFL1(D-mnnrhJpkF=O>$i7$H;rzZ|KK-pwUH at v_!5G{RyX%HmH zt1>@CWiBsrE8Q6DwE9<1%46C`n0FsC4=!iK58J-g#@1Y6R6S~ZuAtk`I_4l at N}IR} z8P?SqRzT_(w^7Cp7Ra6aU*R?8ecT%q$AhA5Qx82|C_5od8mjw<4gvPA!#{uJJ3s7T zdE{NJ#g?f_B3#hFowFZ7_yQ6IEU5QH)C!1Vq_}e}!G<8y6$x{(78E4kY3 at TOMTyb1 z30QX at A2HylO`d-)F`a<=!ubn`eD&QtNRIJ=J^qg&!6%xe%lc^Pb7+cHTQU*5-XA-z zUg-)m0Z9JxL<_iH!rHf6tu;1D`aK?(s9DQACUqyF=@UaynnzMwFd>8ZqmR+Ti8+9# zM+b(@ua9^h_92*2ej1QVjdcx!YSP5#t+uykH#6`Uvv(PDaOsfb+b#BiEcOBG^u}^= z_0?uhb&nODOHNE)CD#H9iG}!sYlb!X7_F=H*}J+gTa%eg(gNKd%d#QU_B!~O7_8V_ zj>&ks5G#P?Cw8$UwlVrH$G;o9t*JnJ84L(WInny at GIlfENJD{Y4lZRKq4FZRsz?w<+9HitIxLMdT0X5z5LiGR zjUnxhHu+0T^9qii4lWoW29k&UY`NN~FAP1{^U|v`X)wu{^fiNQXiMk#)w%2Q()ZE} zXXE|yauf8Y#ZxF|5YP}4LVpE5nMgup6Q1^}9uv-f1zuf0F|V8z&4Oy?3V at KElPlYY zgMf}xIb)w0WMpB!3r#_obw->W>K$xk?`TS%+=eg!=;G373eocLbE?+V|=23%3 zUB`{HftrsR{8S>3!&cdQ2XrE^v5F)+TGRhbp5)eR(4o2gs*Y<75rXLyaIX$T_T&_qIs zZ{V|<)5=@r0ACtsSyyUIBoMwN70EpFR;C at gu?17}6&}A?{(#hN^`-PUkj<2f?H1Tj z0n at hfM@tkaTqXMR*|+q^E=I^QAKow|99Oj)^1d4Vux`SPWZY%#&Ay}$^b}%0P4GBP z7D3PqZ^)|HjJERj%zjwIm1$n~Z5blFfLzT`Ij_(QY%r%!@~rd_VR$TmZ2)ej^xk)R zR#{jFPQ02QYq at i|mI+2L=88{E!>)=2BYBAjBQx?|Y2x!kPn}-5yKRE&O#>m_X2A94 ziDAFGZ_99drBV?7tU9{-=B623)wAT%4BO=F25EbGMdKwBY}ec5{KVc~)OUJ?kKYMz zcXY+)rV at PFhv@u7{3aRPv^|7_w>D7M2^DL4W{Lmt(oOjRh>_e&MLIVlynj zsn`^P+vBV|MU%UoM3Ge7w~=R-A!9*Ez9fRq8^7e2nCo}ycXTFoa7y9wOSNhDftHFf z1%65 at Q?g`5f?`2|@CqLx4VWXn0Ffegc!ICL;Z@;$Ut8TOLLRg~+jeaQ!bG*QzzcE0 z-F=04ELF(rbzQqUiG0VXU#{5_T>DBU@)d8p2H$HM(mR8C`*)J;_eK9;f&idT;w_|C z6Ka)Fjh at KbvytmI$VUSq+bY5oKIf6Z(WORkRCZgy3)egL)igBuJC^9SF0TNT64v3w zkUp3pRal-;h)+zuR0KDtbT^vmvBX?aVotJB3}#h6t{<-i__=uSjF=&Nrl4X&uFWNU{Gttb at lW?R*z;@NmH%X%Gyav2c#BXXtXpwJ6qHRY at sp zjKJ+w65<$b2CiX+pT*4nkhW+msQ*rF!x84ip&`9TSo78M8pmoo2gv3 at b@p(2I=!!! zVKOkqWGRa_)IXk*f{n^zWN0co9ub<#WI`b}bUif|8(Fu3m)SkMa?aOW3GKcKk4Tfn z5fgMEY)g=Q{hed5?%QB+ne81yM2vm_1Std}^{$Aamt+KD=ru9Z2U)uU>^m)in73Ob z2b$$kP;@VW?H{-CEuS?E(NdSu~Ewf=Jn zokFbGL6=a%%zjacEqVq-0=_w_QW85G6_p)Dv;II at k?7xiVbpaf<24dI+<`qb?&zSgIM(`WdS`m809o3Xv-9 z&##)Fa)SyX9|1>yGt4R=qtC2Fh8^vOge?ytqt_6A3IGU|J68Smx&NAk(7~jyo zyaX at y9E$q{$6i*uV+&2fIEu%x_+=pPMG%=maFGuG+mdim$jhRVm^aTb^8GoI#C(&F z>Jtoanbx-YNl2KrnOx3;^@-D(eX@;PkcmWpP{=Y8GA at ash^Tc)2m-Pjfb{F1twBXr z6Z8FJYplINPmGVd_VS=_Dw!f9MIda at ie2gZcH=kP+UaOX1=VDM9bRl`!61Hb=fTNY7 at u8=fdQZW5D2?41;xJ at wVly`Yicx%RWyBx_`B~X?k8cy zC-eoD%oTl46T}vZ*Z=T<#xFL%CW5DA_sW&G`NdwegD*lWI{?0n&8I4=>F9wS(sHUn zsEPcu%;P9Dj9jUPj3!BRAg)9M1zjf3PzsGdA~xPmcw<_LeQ0Q=pfxw&T3+Dd2F**f z=S at 4);NXkC<(DdAjwRoeQ~J#jGzOJsSs-)Z*k2#eG5>5#$i#65nu|O43r&3Z#ZV$) zV039#^tKz!;n~JDE@)ql{jxyq7oTKwEgo%$WR8XbIPKrn|Ia~F2>IUkC+W$jK~%}7 z1ZUnyv0f^n+2GmdU$Qi8{Nv?ma1ao8=)Z*!3YnQXnwS|l|FeqhqH3d#`whtl11z0R zCKuMuriQ`N=6ei;o)(0(OigJhu{UTgdNsqyL~Zk#BRl*z-(W)C574f9!mE_|{KMtT z52|Pu4&s64jEs)kvrKo>tW2I3-_P42JrGj^i5GYM}CMsAL*+qwu|Rn)>3;N~-*cK2aiuK1dldMOic1(12uh;|poRF)i23i-^T;i(Xv^}8 z*L30Rb>y|Z#m}S{)LF2nBFDT8`}m00p+>-%f{Fd1ec|U$KN$m9&X6Zq&2|#A_Ewq` zm$@BaF(agF+#$+mRqgzS1b5dk+6D`%v&=p5B&syk--rC?86 zfRAv1Pq)_#IvVN2?iAJ=Dxbn`M-`HL<|ONMGCR(Zf>{K`JX9V^Kh886mbst+ at ejn! z{Cn?y^A4eBTj4%DaYltSjFK0U%3TacjXd~k_DZFMU*9XGGfsbs{+5poxqr}4v97IP zmbpATmH7<%NY3^&-lc|C)jH%lS@^pHzM(V4?xdx7^Y5y8qZM*gw)t7Ouw9Du{&+O^+T zjD$bV!mvKHCP`h}gy;Q5^h-Yo!gx$Q7Z)$Jg%cUmlFK$OTAf(U8d^grM3&+i#_>wg zFg;EneyM8&C#;s4vAU$Lw!3^;u`e%Q9rJDQ=U?mzSid^XvurIs5Lv}D8}wO6623g*MUQL%1mrctm;%_yTMSN{r}V4%R&DqFm~ zUd-N(+-)!@;{N^w{-(g4b$fwZhW#}Gd-B#{GV772>+|{44#f0Y4$Vj-bemvQ2`&*v zT*>4|_6iNL7hF24ads{Zy3_GSPV2h*)N}jg z$X+3T|FPM*tJt6-LDuJ-G))Dx2puIsEHGpX)rf|OZb5QA8uhjn^Bh0bekua;-f?gq zEh=;;T>+9n%S8GFlqqdU8p-41*>_{0ISRNm)QHf<^^~8AZ=GKrYN&H-MyYBmx`#US zas0|}VhifFEUH6 at 7fkD=2TaJQAqq7}VQRa%oz6xp^tDKYa!oc4JjWoo?-R~y6GanR zsl>i(wy@^dP2$-z7$-reS`!IIjanGwMeuA@$Xg9Mb5WP`r$2b at Qayv(6e_&doZ`ojyPnoYnZ1mT*J2a1oHy(n7N(nWNZT4Z)mb!{ zM}k-AdR|Hf8usMCvq_v=)$cT4Q{TfSo50sV9pA`_x)F*+Zil}|Y7^F`R?;n^v#&Jk zMjyI6{az;|A&q(2f)grtH(8Nh at EnNWD$(=a{zUkLidDRe)9B914X4kmvp?wBnLLWN zz2K_0mlnj$gvMy3&O#K7yyA`FSA3EM7Aj|Y^ZD?ZGeLvs<}sYU?8cZ_JNO9Vu$4#O>qky zIq56lY=4FwMMy#>wMG2GGhKk16p$eat#k~K6pq^Lfj!Ph2*^;u2S^{*lkEXq?8Uji zN(xV|eEFU*$t5+6eX-r{{5>upBUbO~hNYdE^MQ}`T;dKP2=SW6E-5BGv2ZR>LsXQ` zKyrOBL{eXejEP=31=WHs6mUZl?nx5N7Aql#W#7-dy7MI~46GB~^*WPkb|?G>MA|K# zQF=q7Cb&r$*!7q2p>8(G8Vw2rqzB<|WdQyQ8tq>~jaKUOYG at n3evJpHIv~-YK|-Ph z303oJ{W3%+G>1k*MtjX6hM+*ANEy#retdnewzKKFZD at pP_`R^8(5mJu{3-Y;cHTL{ z2!3<)WDvLR`N-v&?KIUg@^*iD=?k(PoGo0^SM9ekZ4yB>99-GmU6Mi&kE~84f(fpo zGdN%(EW}3VkgCcli`Fxk5J3wU283y+B`wW?pvInqlMWoR)Im?SGCYDCk7(Axe5eXA zf3$?5ywZa4ylRc$fVh(bCS`3ZE0WfC(C^}7UrJMP9xgALl9d#r!uB24vo5jez^1o0 zFrBxiGPYV<_1lv{BvX)~{jdl{4o8eZN|RNXGj+1oNncD;k(#r-V2QKQIcFI{(PG|5 z at -pAI^ptI)Os9+pFlCR9j!K)zOgcw#n{2FDC9iD!0yLgyir7qu&5J)`rfkieR*5nq zi<`(y9ZE?}VHD?OmGdM7?aU<-FjR=*F65F at shbT8bDpR@VzkhakuK5MCu^gz_Ixp_ z$(>wY>HN5*B(v5IjvMa%!D2wcL#Dc5w^wT*D4a7#z$E&RTAek&R}Ive4jOm}Fk&A- zFpr`hJRT8bwr#b7oe-DtSYf)u*4;i;zpZLe5|*@QRv~fW!X9yp_IsgAPi;#;Rj2 at I z+V{IVT~vrUWfFCy)c at E$Zng7*U{(_uWvh)Ok-Nb(W8eM$%y?cn26t1kYtF(nhwhBB zR6vU|s%E<~K0n*oP-&84HG)AIQGQJBt2PLY@}(;Ix-rNFBgu=IWFtFPG2R~vR$HSk zg3jU&OFdaWy7lGWO>LDXtrE9Vdu?`>B-c=vl*IqMHPJTx&7|J(Adu(2w}3hmHd()$*oINg&Y~Dim<10ZWO{3L{A#-!E8}01 zPrA+zILB3ENoP(kkzcE&>a9oJ at jjR&yK6S096ud|q4k?RA at mqv`|YtmQsimqNW-<8 zxNQO(T>)~X?+_v7sa0L%O&{JNhqY%#N{SL?=ZtsY4B{c7mwTKgt2yrUkwO%0yY5*2 zMM#>9=J#0gQ07EzF$bdw{P5yS(8BfAt>NfajV|uBN1L?$$|{zR`oeWM9F?F3E2#jF z7U$@$mqxvosn^e4f5ga at pI((n6_cJZ0*iFW=U!AoTT76hjI4^Hw~uK?_@?rGnl&0uL9?^i8oJ9#=tp3?f#ZcZ2S;1*dWWj>rpg+y&TKx5Sln0$ z*gT|yYx*&{gXhieFc)C*Gt1JVD|_{IHuX*kGvsFJi at lt%07KEPS2k8`G6wPxZ`Kp) zz{bq$W at BJ&A5nODEf06_xzlpbOKI3g#z-BZoWP?4NcwRTn14pwxWXN#CY{Kb<5pZ~ zkyyr*s$zf95%KrEENC~aIfOjO4 at tE-{WJat6Sh!brI;$BW0^T9PaElYle*N zy0?856YWfugMY2KCeY}tlQVpBZ&g(Mdw?&OXqeaxo)rAIRB2)bnlC$$LAzt+cVSR4 zZ(vgPk^~aDf3~{ujN<VnPB*uxd)0LYl;+X`r_?%#E0Y%1%U_ic)mAq3KtVu4!2XslDPmx4En;Wu zY~toDVqj!$^7m!*L?vArFd;O)-KEOLLd_&>biaW6?Snd$er2){J}TkpUG9@*PWV%t zclu)?sw3#T{Jb^_$WBR?@eUT($qXmcgWJ<{a6xo4YO)v>`xs$}V5$CC4twLAZhdyG z^GUg}785FVT{}Yo*oi_u0zkpJeIcF#^bWawGY<+|kf^RDwhoKv7^ZGe%I-a+NGo-N z`2+G8ZTq%*DOML7s z4mdW;X{DB?OhZTNWf%{(<-y{V+TdHNwj{}beWMU%K&A$xKJ)VDU4IO0qV>T2w9ipw zATAcC2}qy2`z~a8!VvMy`BQ{wPL;^(a}`(>|DW=XxU*MbZFV zBej+Q$eDg}ZRpu05G4;L{XS}#RGa7}Y}t$YVaNb=cQekF5PMWJZNQ>Hshi2fc--zU zEX3++ at Pa?HEs(#(%Kc{-+W&w({Ii-WncRKbYp;7d{>h at r9y1iRZf*t&w>I at -72wKE+$ z818gYi*T*>vevApCJMPsFxO*t%yRx1=E>jFvi}nj`0xG4 zVwJ2=g^-3mLU(eWb1X_lkKxTVL9o#g9b7HVWg7C3s_&qG4jF)e5!Dd;#Fdr2K= z{4|ankP5|*nVLKu@`hqPD9uotU<;|Zn82T*s*ME3E6`k z+NCr;r*r}qBEAUog`bNDWU$#*ZMd(TJJct+gKm`U?+}9qYz%g_GF$P`zv?%PGiMP^ zMcX9zwV`d--fQq>TI4jpLy9I3dz;3J#M*@N9r5wLbTe&#TKCJX`{BDF?>{RL)HSgc z?|8jLVp at msfBfQhat`epb*X>be#7y&#$*j%V`+m`bg!BJ10hVInWLGwD{kJ?gQ_aS1P7Te+_N3q9Bp`_yiu|{c;_#UH z3zUC at k=1Nas~dd`dplY|ODTBJd?jA7|9h6)Ds*Q;E)nssn3x9x0n61Ej=}m+9`fPY zmam8WQ%;lDElHoxj}tr~@orcmcmjhl+Xs~6k8{j~eME5UboO<_aB>vRtJ4 at TG= z#&2{+fy4!sqs=2kQ#?^0I=Uu`s$E`nzCQ{x23^jjdlRX~4{`nnq9dm$3!wWp4C zAERyoa9FfP^*-Om1oLWl=?1 at DS>hD=AU+wbBbeYO^PnnDj;S4)lM9Hy`Fif`>Blg~ zeKa at V@WqIvlXG&{4=J2ftd2iUl8^xzHpcB98zr at md=DgaDVsPJ-7Z8Xq14L&2UU1S z7IkJ%zg}c_fsi&VMaL9B7$v(FlKNqYc>T5B|ZgCmUKgujwYX!(kt zS3c%fWqXMKLQuCCZ8-S}77_Ln^qD-Ni|9NwdVn%dAY=zx$Ol0}Y|`K*cZQMdT8}uA zpO*9~N*o|wnt`KMNcDbd-W(nK*Guqm|5s&|Kj;1q@^AYN{6mR|OxVT3+S$VPAJ6{~ zDf$;&Peuh*6Yb-RRO|6{P_mGesNa*Mhv_(0<`LFBC|WV8pPv?6A$@oIo zI*)S>o|-aRDSgn$Y{_3URa$146x=6ndGoy%8qa&_4H|c@$)e6`^CxT42o3sgZUic> z4v|~u5B;$&y4C&P6$nS3bG}uzsASdKNM1da)d5qEM6`wqLc^Pl4bj|Dv5n;b`q`oH zBv4|qz}l!S*!;F5&0w3nFj|VD{iX60CZ=#Jipua5RHm at L00N7gBOc2Z&bI24MYkmX zt%7cFz)5(P@AS(I<7lQiPn zz^z11dV1D4(+`y+RCFuuE3|6A)PS_Y!}T130UioK5=RF^DKPu=0E zLAk^Q>HI4xAC^TY-6E6o4oFaUpZ+Bo_cB<-A(0h4eqr&Mvwlh;1?(u%P~!?iFU*%f z_s#^EZDMfC-*t<${l9^7{S~=#WWSxgP}36St%ZFbu$f51vIHhohXp2Gg#{-u$}nad4L7YBSc7vP`Yj!`8`^XQUW1|Gjxl$f zOEkaZNYQG0gjUk0>~if^busnku46nT?Anlildq4wsC|IwI6raZRg>=@#mP6`>V6_k zjw(jAI7jz5_$2eV0bXNafqMQ z0CJ1H_9CwvfRT3&|B5k&1dbWTVWzfEFStDx27LOpC~uOhtqG8 z{@#Ip!+Lm9p^7&8dP;T($N&m36aIzmNIvd>a{uRKTEP5myTiXAa{iBGScjU76OIJZ zhj at 3TV0o|uCsQek|T+O>sI1%ylm at RPRovKTkJl z`R(_^4VygDG4V=2+`d(*20~OzP|hsOfv;ti3)+X%PWUXY*dsoPN%gs{sRNQEas|{;4&!Mil#Fu_XQZ2I2vI(J5KP1S}zEsCm zIv2v>^+v5tlU;@FqGyliPRCda0n=Vd1kw|yOwuaEQKK)b`^-1Fz<`h#p$W;%NkSy1 zkC6oDU`40bF9<7r%(}9=W%K|i{nXl4Ur7J#91fBJzbO|CGwR+L?AH5C;07IwDNSy7 zCAPoi{A2K2Lt0xykWz6deFJTx?I!Swm+izRzB3oj8}pYzgaab1oFi^wcCt?xq4Z11 zZfVQx5T5VKwK|^f!u1lK at 5VJpf%^8q&=Uk$I9da65X5(^4?l!3$AuB;8M1O2K5T>e z!FhKp$2v$)II_KeTfJ)ATPPT+TJ#4PK`p5wleAbyx71TCk3o*xo9?vP6!n`cH0$^hHRu*dMkbqgYprr)#V{apI at 8_U2I6To;_dU9kfo z?mj%29jOTCYxWzo2 zM!Vn_c`?d{WFYhT#IxK&sn{rN;cOo9E~5wLRJW|wkRIs>WmPcvuB9-#NjH%EWCC)` zQ_50xO+`n9{(eq-Q}LfLbASC)2jOGe()yFHse}D(o8A8u$N3+C_)2T?y at E)5V-(~x@;*W%86kZ9SCWr+* zPNGLGu30R|{QjFxxMvE!85B#Q^=1#rR;E|Kf!)TmQ&e4?cmBeAj7 z8EN~~$#rOZ;h7tE#9+UUlnjoce2={<3s}PH&T&5G=IDcEOWdJ`tzt<)F!$i?p%=Mi zMNzV4mYfTUJ^EH`@!L!}Q_0^#Mg~F($&iX*dZ*R0P;L at Qm*1m|(vZwwMMu41+nBBh zvd at wPncX>jN-Gz at ntO7cGh)_CC%sf6Cf^wVxJBPox94Z^Cv`Tf8~zaSRj#9w+mAD z%EuDCMxTaS@~by=Sn70$%LD*-(roFP61S0Qm&Yn#Nl#9;^Gs_GWmXk~DlRNbl#PN$ zO6&GY=cC49ezBXV-d9l#gw>FzollA{OUJ$$Or#xgG!&Rxu(VG^pr%AJqmkD|)!7Dd zH@!F|d2IZOF~@+cdo6wa4PS`Ps9!Jvb2%-V$IbwKhANAGCZgDr&MC?3MDLtZu99hK z>8Dld$G1!iq=$@buH3e1&)-Ipr*%UyLu(IzBx|qQ2KO4SUMWQCzmh<6d34lYZuGkN ziCmX7z7-rju#XCvy~6^V4bRL$=9RlG<3$d%3bITlU(Sje=ojA^*jtoHP^(gv2=BTU){M-nqS~xTwcWFj~{ZgRSH at d zhWO=rxPqYm6Ju?0)|9iMZ13|h(_GW;{!nW&FP>7z^W(+4!+E9Df0fF8sJgh*%;Z6G zi3Zsv_N9F%t$~M&?dPZ$hU7)6eEj>ayEtL25|QsvK6)*8TZ?V;Kt(2Vf{Lix4=G0; zy=)x|o_04wD(zo|td^yXs?vC$=I|$skp+sa(k6Z8Sw(gA55^=*7?Ei at M+HtAO(EV* zuLq1YNMnWq`l+hEKhC17Mpq4gE{>YI_910XSsf`dMD?TRt;}|0ZNg21zz)nGr%BGr z#+^H3`fl=2HQVfJADz?{o(B}GT at bASYYIOG-Q937xA9XYfR|VAmZ#`->_}ioInh5! zoeM6zeLPf{okFIBT9Z}M1x}7|DQN>6JB!+4(zMIkov6}8uFrpW0>VMHr+|RP8PcpM zU~~Q}g#0Yv8m*T)-JdWzKhX`wvl!nK6LuFp0w?{D=&^xyBA3ierjbpDB)!b0iphUs zRi*X;jrSM3 at axf16ypjH(F6U^D1KN~%F5~!u9w_n4%#-Tv}ZbDUdFhs+t1qA&R{C* z7Mtj=-2%0Oc}4CC(RUO1I|S?=jO!$B?$+Ny*X-nLB8{LasESqgjF at rbZSJxSgxKq> zwQZv2v0;~f6^EP?CvY~)Q_`l^FyI)~8}OZ9eWth5y%7l6pB8L3Z|%WyR$l5oJb z^^(Mh$0D#tPjst`%`Ku+5;2}f!fT+QCt#oU<1gw-zXTMW0Ds~G4T!%jHvGSuVg5^J zVapCh2{o=X0K)%oip(yQWao+E=5i*mFduyX(P>M at 0uYX2GIk4w~+a#*jy46Ge1kk5 at M&Dth5XSI|+>p-eXT^8S{iIESmi(%Z zJnVO)5miDE6D8(e9e%5U1(wGcT3Owk{Bu2uS_K`o%*%7*g25m`Y<<1BK1 zaiNHt+P6+UD4;s-q33cmB#pyF^Y+*B9t6^CK2zC-1u(-g;P)j^DZ5sJsvT zq+~cnFG863Nhkmc(AO2me=(VdXZo3p0%a1wNY-zUq^?dyY9kt= z1Z#vs(VLQ>6h)2A{2jK*0+xlDL^4d#$%O2HygjM98%d1?H+^KBw=}VA|A0;AP^K|; z_ltj?7KZDA+=NTZ*mUCJxqm- at 6Dw&=Q=JhRhD|VTo7&L1Q#_zhCCFs27~8Mrf=y9N5F|%HCiTACp#JVP&f31gQDym-`0oZ(F{(|J)YPYP5lPKy;2q2Z-c1 z8>a4##?CwDJC~G6Noz=VGi%Y>w08w$kv6`SlpSJhq1){6x7-|Z^ zSwPZCvfMpkFqfx_U)Ua>dS5MmE=84P$({GZS8ySXlF<-7%d< zT7-v;;bA?t1WihY8GhT9l&3z at j_fbEK>dJMVF4?T-Y_4GY&X(q``$Od(GRant*<%f za?y$p{ywiT;UgzenM>vU;t{fGjmAb?0RcM0AHbWd>!(IB{lo=UTmUgGTssf$IW4VB z&6zX7!w~+0f#^%Fx~z-|^PQxAU{WbA%vZu9^6nS_l-zp)n8aRPAAT)q3ut!Q at gbYhZh_Cu~WN~nj8FbHce zVhYBNwgrEt#iIE9u{tr6a3)A;jbQ&TMresQukVCN5zR&hq(%0J1rr0 z*+tUm{_)fKSDIZ3-~EX8-jMpz(G-v&H8M${~Fv6^m%O6x-|ix&GUBs5{*WI1%*ONJa1+kuGZts*J5V3 zUPVqvUP_PA7#mgvEJu7_Dr_~nq4Z%=6ld8L9-g-UHKJVcC1?kw2A%pSkvdPliI26AyN_KWxqFfCGNnI8MD)n z6)GA74756eg8|QIhZ#S{SDrYap}g4=eegTPc%^P?hx>O6#?ix^g~e00KK;faxv+J} zwI$=AHHgQ)!YdB4<^0~^UQ}_UUjcO_?BOSq``9a6ep(pJaoYWsO8ko5a#QC at H5ua@ z-3tg*(8q*7!&tDRu%yu-{T*iw=~^wl$qw}H#qY%^`)jvkdqmatmOr)<|0j51{r^Bp z{Fen~6Vrd*ldAN{qbi~CHPPd1i^q_JK*H0&Q;q8DG#apkhDwq4;IN_;F2=K-s<+JqGO-P4By&J&=xr* zUlf1IccN4+$~#s29Fokzd}Hbhs~R?^{VzbWGue614&iZ(j;Dy~xZ*5EmozwX)|*Hq zjH>eYhka!So~GJN*Z0aRpU#RM?*$&q3mTFjQ at +VcMP($ThfNhwq0Ge zZQHhO+cvt(wr$(CZJS;E`ple}ch2)YgNVH{*1co at xnt$Zow)MK2yWkkg=Ff@#@Z~! zjne(J7z$--ZZhi~o7~_d9G~DREw`Vyo(GXDUEBU$8y}+;$hN()+KehroM6m3hAUAxFig|8$CTch;0zA;Y*IsWO6zz3tlc>X7`7L5n_I$giQwO6n8FzFsY%zRRb)`)C$VHH{5%(dlNviAOqgLKWWeyRHBFj7GN?@;=GC45)Z zQCi?f;mIhL$q==u$|a|S66Xt+??Hfup~;Fh;AA9%;k|9NK^BLFOej|IO{N?DH?nSy zZ5bsDTs%ov(wFNkr<*pf>#whe2Xuc%R%LSXGV#bAXzGZodMI3~ekv;WqFojt!!6e< z{RDz!Ivo1Z4c!srRP*)f-*tZTjGsQ+j^vIdXH9KRy*^r(1-Upl8$4h|=kFhrt0uEB zD=eQjVK1JfxYR5g+Yw(w&TUn0G!x5wsUM5>;L4P>JT1#D)C)Or^;F8IjrfbxK;@N( z at K&J&oRW&xH>(f8=SkWFu%WHRCwL;QS%}qp?%d&lu!z!)f>2;*wW3 at z^`4}FseK6e z_9b%Cm3{H~o9!#`Hz=elB8(MGrOt|1&fX0xO1GhaFhd{eEtG1)uxA at k1N*6v!YwCH zpUrEvB4i6IeaRi(y)1>flYC4#If$;C>;xkmSSIB zm{*!A_%**&oKTYaXG&_k%4C8F>F>WpzpkzfnvXC50GH$d0Caz^r2k{fySj}tjtOda zg0<_j5$l at wWO0H``xfn)PC!lB}m$4BSq>G$c*7msV7 zY&TQK4m*N*I{n&;_)4p(|Z9nuD|8f!4{^pCgNMBxsh^MM4Myyu%?xbOh-=XUk#jW|E;6|2FpK!4j)N7cPpRFF zxvBYnyECs3J=4#zlKL>G7SsFiK^DetA|3`ujGG$kn4RER#x;V;@&Wjt6Q;2bSQus2 ztO+~J$$0oP`mu}LtBJv?xcx(pYcUA}18E;5=g-$X*h)?{Jzt}F(r$L#Arg!s#A9(y zrC{4agCls$xrQ^Mhw<2W%luLbEc8KOrfY-lkgVbtBwyN*-L9~%Q#V7#uHlSC0apcQ z17}M{XO~|~t~4D=5A0J^_x9CXvK*mHoLK76#r!~RuIHDX!dS{j>uKm;u_pGYJS)81 z$=h);t%ut5C>pNj_K$+K+&SmUhn(RWVTP-D7_Q`@pr=__olXn_e0<|s!c9sF*UE`p zs3truZi&?-G9{Nv+F)eoFNsQF25RPFUV2`>VPI_3+C|$BKv_0)$LF<9G=^#057MFe z_Bi`Ms7|i((;^@r-zVI3UK`k}aF=J}L$y!C7GdS1u4oi4>n59Br#2 at +RjJ`tFSno) zjm!XCkh>k|sJ%tLXJ@{?^@OVP{Ae2T!^f-sE`Fe59IBvj?;cLtf zp?Yq=>5o6q0QLdmYuO9wE*qAEdF$l9?T@}I0<0T|?&7}YpKx0V#{`xcr~#}SumIKx zRfBoU*_jvMM{5i03uuRRi}s-y)&i>zn}U5y_1Xk@)7t^24S50M4!_No3rowSkL*3~ zpJ6cTkMf8WA7B7nAJ4Sw+A0+E%Hh{yiNK>(wdfKNcPBEY*ZaDpqjwyIs3$ricHPML z>n>^2!`zWDDXZ7*LG`0q=FW^7&Su8srGnwB(MFr!8SC}gjMUYXl=MNv>uGrT6$rn) z$^EEU+m+C1WU%S|`H1P at 00ziKK8z^@)ujCBl2FjCaOBG2omu`%4k5MAb*|~R_nWvL z7t(cqO5#yfSJx3=i(<6pHBT09)J{UWlU&&NLia7tNphzU$@eNWLB9T&V22nf+-k!C zlqOS6>Usj at 1CJ;@T6e}RwI|zgY-W%tODU;N;mB|zE3-O-o*>D?R`c;?$GgUOo=1k^ z*;DXfoLjiFbsnviOp+RYt~f{mjeNj20JlvEzm-&Ga3uO| zB at k_&5sUKv94y at J?i{oNH}tC7KoJ7)Zn&z55I@!6QhLR$T7e3s+^D83-rXHmC{M-m z?JRBKb!ISSC(@79%mB$x%-bfCWN at 698UF(iF(!EzL%2>&dx9oT^WCDAT_AU^D|Z+= zh^yJYv%uMi22`A?5ZZ1w2(@0acwJDN2&jH1ag~vs>_HfI#E_jQ;@}P4(8w+J+ylRr z^1={g+XVyFslXHVV6^O~?U&6=D0LX8iY&qMRp2dq)R`ChU8vaQfhCv*@M?imxL8*5 zNFI9{>p>PO^LN$R?~tdb{TqGAM-}LR2ImQ(yb0%-KnI-l=`+C{Zb1c7=TTYeV6c$c zTm&o>!5~3%c?eiaK@^+e3+LG8-O8u}yy#6Fo1qKtRzlt?>-}}z&SJEa;?L_9Zr~)C zF1ua>&Nr~~$?|SMGNx1PSsAq*fcsPITdpcgy!(sd0I`&_3oW$+Z`^Wl%7jl~IH?=_ z()!NNiw}|}?XNi`jw-APK4_Mayt2#Sov^KA1JJoN_~;=vrK=h1O{6l?CBs>Y<97;qz}BI#z`G_pjlQ+{X{Ky@(MFj5|e&)W{5w`uC5^% z4tsqEje!SENyL8bCVs&7AjLaEze{W1B?z*VJq6kxl(a62j|V#X>0 at t9=Mc)rB?{lg zzFEraT1*@3{qa#>w3P;!?&Jm_ at Fw*~s6S8Svqfgv at J=#^jJz~;Tm&=C4uyHsTPP&RIVN3BTZnp$ZQMwBg#(%9-N;DT{utVWlgmRKJ0Nf8IdFJt&}=F zG3zB-o*9iZDr-l>Ti~!8qF2xg?@+*t-S%hvs80=%Zx(IY=>1d}r at YiwV9=b=MVoQK z at cPhV2;=4vlr0QCyWyu+IEbH;v9^7sP~SFt&!?^HNt<}+)oVjn4hK9r0W*}EBe$94 zY|SJ{RKT(RPH4%9^2kSO!#`RW5;NLDW9Ab?&m;;S3l%))M{_fA6x_6NbPA+*Mz`+l zg}3hZIW1NzcDq7Od_Q250?aUrXDXX5$Hh+|20Bwd(U4LJ0xxf zj?|_gU#2~lXua^l!RA9Tfo68>0`6DXW^%_Vft*Ro$~H_S9wkh87!>e60j9%z_;mF> ziq2BMF+M*VcX&LWAUMuYK2LOY`f$lT!)77gUf{Lz%ynP`*pNohex<+>b>y>Ap^-O{ z*JO;9ol%?z{ebE-M#L+C=SuNs at H$YH;0kcHhB at W6_k;E``vBH)xB9%9)SI&LBoKqA|tw35ZuASpPZ{;4%$6VR<_hnV- z=|I2#Yc0L}qk)02H#re!OzT>j=v-RL{qX~m=cx&ZFVf!B?ka`zF*WA{s<#JwOqN&E zp+N$&+wou)hl82yW}4D<;VFXXV>#nEFNwj1-EXktjtC#g{T|qRNrIVujwDufW$|7n z=)V0R(`=<3T8{y!NYcRkh+K0*@^pxQ+x`f8vTxMA>K0H9iz|S&e1Wa!Jk4W-Lxy_3 zxx+elHU?ZB0w3pI`3l|R8=jAZ_z3Tf`#VAYiejS*9|sZDkz9cHbQ at mVdVx4VjDt3} z+{>6Ll^IgJq at QluYe{{uyTh=>wnhM%mx0j!zX*{O!h1(xu|tytqI*aGKa0q;8~0k? zB!Y-l(=D>|vcX$~PEE~qX%$;*ZXyKm&e0(E^r&C_&mQrvKDyO>aN at d}w!I at p>H*w& z8~^8aPW)g_-Kw8}+c)agC!6yNcq`R6?sceNBKK+W;GWX{Err8tBD=RF4sQ{T>>Ofr zC%YfI*H)N^)8&)pB=4{;*}^7dj#4p4#EJ6Tu_6m-w1&E__vn<6~1{ zX^F<;0`;2(+9z|AZ#rgc*S2TV23x}~OZN3#*LPD at B%aypz!@qi{8DgDX91|8ur=#qM;XIXst0l at 95TGkA`L}DY!`}UjMovMWaqVlvr>4on#cjgf->+9LKo5VF0wo3~l3>;&qeV zaZ>&AymDj52WU-*9~kX|3LmeCpcb!?XCM?FCNNoc=uJ#mFCZK;P2oO?;I81KM8Ss9 z*nVNZa*D$e%Zq8OYO`TKj)o5t4Jg!I{NmLX7dkbi-Ll2%7B)|I at +>^_l? zJS5e{kspC89gx12v5t!jx5}#eCUAer{wsaUvQ64Qd#u^ZOBZzrkXTDzCF;(jf z8D-fnVg3>%!34216+5++CzMv0Xb%$A&H~nx*{gbKP{WS=X|rFj{4ONM<|-q=eFv|u zs=R=JOohH;4xdB5YPg!7R~l-;`Oza3Pqq#_sm04y;#-&D-uuNSfS zQ_#do(S4MFgYRC{O|(sikthwJ_}A)~v`a;@{W0G#Zv>@6B at j7;dl;4H=-O{^jrs89 zdwx6uZ9YJ*?%6EnXNFUaAvRNyoJDpIuAB1Yk*VS3P`1MlFq_1Ku#Ght4UQQwdNMn~S z>eF7%h6RR;V>L7EA=^5~@wH96or5!_^b>W9S|#hs1W-UOmtcoLOt at wo)oF^JCX&&X z^@-8|UlvXE36 at 7`X)0+l=}4u({7AHB!HtF1bq7(Uty9UQHJ^K>{Z zihnmcMHCm(#OBPqWq8dP6bvprKYMB={VAV;D9tQ*%SgK{v;f2SAwLulN5NiZ07!TK zmVB5cvsWUZPe*hmy_jSrI;tgdxShmG*j)d`e!E=CDTIU;(=eZ6Z2nOv%YnEr at kSy!kPcqm0!Pmc}b>T!F_ at sT(ln0UHr=teqU z%zL$*gEpZ1 at T*sQ!}>;oHEGa&E*_?#yff>R at LCu z9c7G3xC3+j_i0se^PW@@U%)r(mA8AUHTs8fj{v|6LZ1&#fld!{%z-;dty(nYtdJA; zrD1j+n+_9>7><{J72+-oU%K z8$pfssM~o~LI#(Kv3gJ&Xn31~izwB63;}>0#E%z{PvEoL13WMdwljjv!wEAcj640= zt?Av8SeRdU2y?FCIb8e at -J!ID9Vk1^OiA0Km%zG3 zJ;FECW}G5%K4_~`tm41@^-k?h)Xtae7Rz=bF7Vxf{MJ#4GpVbxWq-sdDGxxjJEVK_ zYQ{B%>$s2=$B`D>F=FADv%|7`8#$V at l`wJn5rp at YA%9;gbk9s76F{ix?ziBt1E&7M zN8`H^CBf8S&X&jg2^N-w`s6PqNbvg8NIH32v<1g`Y at FPBc`&z->5-$0W&lF_vlRO; z+BaW731YIV%#M}GX{RC%#2YRw`5p%omTeoh@|qQ=o|G|46})jdV{b8HwWN%vKnsvL zCN&}7Pw^RrzC^;ZX>3gnn;r-H*Mes_y6#2SKqOh((ficlVHcs*g_84{$9b0`AB!iJ zM!g$J`{6Js{ira`sdN~XQ(F2t6q#w?%+hrt(L4$=1b#}8Ma3_$)vmC2$$BM%d5OmE z_XqlOvm(TpBWp#x5>mWKt;U5Ui7+CHDqwCjmee6XxJ3ZoH=?rvnkdx)DVK at 6Q)Ik@ z{p*=j$B5o!{5caA;J+;r{Cl!h*u&Pq#==O+#ope|(V6&PGO$Vi6;%gYAAGp>~S=jNEZ~@|E8-Za&r3Tk?zEdm`5o-pvF0WTiya<=y)B z-TE_>E`dm-T~tZY&lsEgH;P?@O;TV^e5JpvtErRNub8O_J9m=`6?PrIe}yT2yG5Bg z6K%jO*R{i95fZzNNJiN2oLn{M22ItYGjD~;YqvjX%Ctk??#kX3KTdO1sUnD0=&)kW z=tP|!Zg?XPHTfc&@&>>-?fl?DPv(K=%p-#xk*D5&OGWL7)>h8#UVjI0RH z;KE*C=S1sTH&9?rBCI+SK>EYBMoVT+yO>ccAUDSZB=#EpwyVkp1` z=nRTUTDC34>iY}YXB4dXfL$p2srIp+UX1CG?=M(%wPw_bs6RJP0~7#&=l at s^lD2Sm zwl?`&I^`|J1%3>k4w(cjL?H4&rNni9DK4Vj7{*ejpq4PC}lTeCJyPZm|&E8b$85jthx?_Hf-gO%k!){Xf`8z8s?xSna@};!K`$VTeiu4 z=*-;Vhvhk0S1~?nbl-$V(UfetMlkE`K*E{wwsjv&U9x3tPyV{V(fmSO6V=^a;hZYQ zPDf{_p*Ii9Ds{zC5Uc9cXrTV7ycLTIB2Qv}CO)*6}KPweFPGg>Eh z_6hvJqk2ZbzGqpYXw2%4sGBo~iZzDg8Gi6)I465(4*9K(Q>+f5TN4wAUr-M_FePtA z{zi5N4ZwC5$3$_^n1e(=!#yTfL{y6W0{>SnU#lT~H2Y)E4F704&Hq4X|KFfjq~!Yf zF)~90rDy_Q`SH#}gm3ku at JL8Q&4~rr^*iZY`iAC7X;NQngyFH^zX1Fa at 2K{Ph>3N( zM=mF)i92raYwQ5ZS7rJ8LSr%NIaz-y{Zv!XpT(-0K9Z>L9gnwK-=6J6rA;}`T}e0& z!SMX at DexIYsF6^Mjm6AA8b=LMe5nQ%DyPty!-DVV?>W>7i%D0WU{?mlLZXZWYmPTq{WQZ1b#@Oqvv09$?f^E3!>ETI>{+9k z2o#w?DnK_J4FfcfBt$CyAzU(5I9)pOoQ;?^i_nL(^oqjmFR=7V_#=Wjez`VqQd&DR z8(^Ghbzt$ZMs?skZfZKZtoz3s2x}S<{;#X`MQ>b+bIv>{p8}J^zd}d?bz$(szyJUc z5dJn|`1b(zzmA!YNzszmQb7q_85;u?Bu9WM(nhhOBbYU8TC!|n4FHkFLXrkTleh3k zhDZqxoefNBw(QbsV#CdG at pjBS4|m0>x_Q#s`SWoR{aD#9IU|tCgkgHW^tZdu-b z&y=zKejlJA^vxRJL5 at WjaZbORE=|5 at E?wtdueMc zY+qX*opQBJZ?!l!1!tofK7?=m9iI`0>YXT1{Rk zDu%S#MBZq_jSwYE3RFixvo8g*YN;~HTPZ>q;H#7|bw4D>Pdpq7>=;beLat0h&0TKGm|h-cv>wmA2q`2(e~BHw;}SSVA!CRHlOf)V z9`$>8(UZaYB at QGg0HYj2L_T+kFSHSr!8i(D)Ch8kFt}U=#SEjTUE#SZRboEg7Jt$ckj39KzNns0wXV)14Yb8B<^tFTtG#=$5zb*8@@IgYth z7KvrtI(a7=OG##!^ut at SCTY$or28n$Odg-mTlcP!*tV*Z?$769f?bC}1rb<4puq at O zoYG;u6&ZBuW2A(32j;;)5$t?9SJy&AUEP{HhA^F3*VM7h3k-FWFWS$LLkXZbOhQi| zUm;FkD{iR5@=>5z-X-29>YH(Qq-QJ#S at 2519t%17>u56zBcf;Js-lOKspP%w^V4GG z3ZPq{IL at M?>l9hhdd6nE&4GF at iAbb7&M{B5nn&OASia{7wUfAd`;gSoOLU6taN4;0=6b?+2%<>Awx>CD2XKiUp%DHXn? zJEK1GCOq at Ir8T0rZxnjvzGOTCp6VtXbHb%R4$Q`-GV2kBNvHRGhsnGtoQ_DpK|CIi zeu6wIB={n|Q6%t!eKtzqhdrk?;EUIGbg~AmsD>sn)Ya?L94Kd at RhnYf z^qvNEIjAh^Bf{Z#R%+Ua>`H(j`0NE-U$9WX>^ce^N?Ic=3+W~ofYknd2zYnOntdkF=Jz{TG8UczHA&pFu3 zrh)E=dfo4e2JH$Iaz?FLV(Fw^aVX>+{`m$na;)@IkIZp30^JB_M6%BuS!P%NEyva?FUFz^T=1hMHOQ4m^NlCmU5%HRt zWAM)U_Su@A>NYR(cFpnijq!CS;JX0m!%^gQ z;pi6DtB0N*>hJQ}f~r|&p}GW5 zV0JNnwMgccH at j>W9wYVg09>Q;*JNsgxo-o=V)1{FS?JqhxP;jA-0Wrya)oXfZF)kv zIlE=jp|Gk4_stu}plPf}!Q#&4M`@q+$LZ0rP;52Io#hdY`_3l<7mGllI>H&KO-E%4 z8Cp>1v)LWuAa(RdJ*NNY{KEg&e=&a3x(Kg7en-vU`yKzu%=6#)9skkjsUAhR4R9k) z_^LmV0FO|>K#-n`!SGMN!{)9h8XgJ%-}^k#krJ>P#xk?kILu7VUamfmQ2Aj^P${S@ z)cY*;@0rB&b8}1eV+eefINL0mYv?ebXcjQfUiyy}@t at xnd+J+v+%^@m2$tfTALB6g zlPpsR9L_hPLVqVW4js8KB45MaXrPQW;UsA3T#xsDLy>-Pohi7AtpiKF#`+wqxAdFL zPTOd;mY}_G3qUTFf{pj2F3PtXXzJ0F;hJ5h=Tih}rrAyR#q-(2GRdP>TCMgrhvFtO zlZ!K5el{QpvChuX*up=$+L24=7_bCNSJ^M1WUH~l2=&nlRc;xqRtoD?Zk5Stung$4 zSAHbnlnFBqnd8BDKA?Ppg?iHitPh#b*^@I$Wy_92B)re)$L-aLvZ8|V7>`=!K&B1= z8DO>HJ5q21EiuqVxVGMv`4$n;ZlO z0C2(%! zaZIhv;K)Eww$;$c#^{Re5Y0_1zeBBqI{%q-ez5AZrb7cCCN|3!fzje~T2{CLJa#q7 z3TFPkj5=gM`*t`ov>x+8C~7tic0)f8io{yvVnqM2OwC5^WucWT))>fd*JJbjbfad> zyMCWywmso75<;L2M}Th7!W4~&?dTYh<7j>%xZ;uKDTe`G)QHrG!Lzh*jw21(OzAuz zvZuikizpBnOj?(TA+}1s)}6cdEMx9;XioWEV>fP0rUQ at q=cC at YtUhC7LK`F6Vsb-h zYdt at 6PG`pr&L8p_+p?a?xYu{mE4MgpWZY-JS*G(KSK5dV2!A7`fSfO6Bqu~XYpmSQ zE0)ljXtZ(l%FuOaFeD>Wg0)bdJnB*r9F)Jc9g`j+dT20kHKk)VUC3D4amr4=R3k6z z%KJrFZ-S&<5Je0`7!+}9BS~Wt392&cb{+O!gQDxkz)3}OZ5_iif&Mx`n+9M>7qTr z-SzIL?3%sU?=rRC$8*(M}&(MlUrL!<0jVS2KX$^4$e=^K(53%VIUAwmePUBD$GTnBwRtu~FRz%;*S9T(ULkXi3;a-vVq`7=s{78h+fcR|+bLNKkQcH4EZ?PI` zY>eLHDw at N#JpmWm*4l*VMo}{cRCA2=STqH*4t6EF_<+p5-hc7|+Z~(jLYr&bCeCKr z&{DVX`~{RP-PM<bw)J|*dIVy%csgjB~)j*+Y z at N6}aZK4v!v_rJmK>T`~B5f)t8?lZ35bI}V!LkcFB<(|Hqua^|$2)Nu6$0c~8_Rb( zIs^zC2-^mS6(nA!jJqjyToL6AaItr`a;>K}+V68ty$WU(OAobE;Bd1=!>uUUCCZ_j$!=U`b(EM3 zE{c}YGHDL$D3piuu!WN{euxmgwTVtsXm7J&Qd zGxpItiaG9du at 4m`fb0PYI1~1kNp0q7?5GHN9w<7Yjy8}(Cuq6c_P``vVQ31Jvn!nt zD!Ytm92Cf%Q{(R^c@%lrtMla`iI!cjGRlRuO-;d!mhzb7kmSTFMYS{`=US!GdB;C+X<3vpa`c6f|S2Z9>!DLKj+6KqPr6&ofmY zLgUu5d%Zy04c;-;Fnc1MgW;ohP_AzWDwp>o8Lboec1CR9$D{h(abUh1XO~9KFOXku z91&Q~2unkw*~cx|1?)kP-VhRx at ovHMUcXBU;%34Tvu}UsApl!n5^*09Od26bW$p}$ zm7dVcd1BZd;Cw|sykgVt=6DBxV8`v^a#J=BAapQLJ`+-=GaQo*qMEAy(sa#D;KVH| zq_xbu-4K)EwAh*WU~&#!C+Ak1_GHg^F?(@xg~l?2w|{QtyEvi_UK!hxi*hqedxOgj zH%r+cSZoolwRmR^@oZ9hCn!GSVi)`j8&jaT9 at ba~SPai?n)nGVNcz6YB>W7tSHNWbXZF4&%+VKN+w0YHxguqehgzg ztK~X08_=Tq_9zzLEb45&r$Z71a-#ApDNL^5Za at NjtN%G?n~#pg#9%k1>PwTnL5#>? zh?BoB+&1VTOgbBAk-Tp-$S1qQBcPQ%$e#Ud;dx zzVPkyqwqH1V)l at R$eV~I=Zt>KH#iYeukx>TbW1UO)Z#x+`+pYc|3Cs^X5eXIYx4gn zBzfTa>0v^0@({?APJ5#{>5-pcP{m z%=TxUP)~GO-hX{lF8em|jz6v{F)#oC*Z+zb_#fN7vi{lbwc)+$Afp9DLvWOlOj;E@ z0qBq`D2S*+BLYaFa*geV#p>cZw+`D=LN={J63%`L{HhRMR~L!GUtU{;dGnCrF>~)?V7V5asUFEli4!`#%M3j}ax0C#h$zY9xy)9tpmPY96h@(Et=h0_kCx&3Dv2w7nf z)bPj%r8^gnQet<4sw_DP_IVix!MkE^dr70D9%Q2CRRDjRQLMOrTLtrzESXS!m?H+0 z;!V2vFtCM+D{Zgin=Z-ZH5E at J1P3ZqoqWee7 at IOdY8#SvyJDe%@*YnhBDO(ZHv-K;> zWUG`?oAIVYz;ERZBenX1i9c??y}Iz_02l=EyW{*3aK?v=IvGHbNvRIls}k}nu|_6H zCst`3eO7|+){F01pF0oU6tlgfAs!k#%c!($l(S7lKf`B?fFSmkHC-k0Dk7-_7X?-F zt~9RV+KeF at zAMcs3*ow#l0wPhdD`&a>cbcV+)GvFcK^~E!>)9%Xz)k<4Z!}EGX6iK zH94h!zNE61(uODsPn3z3P1G(w5>!BZAm9db>g+6foPIB}ElR`>JcnPdqOF0E>+{id z3txd>*~4iBS+472C*Eg#=ZD)OX8U(GJw?k*UxV7xN zYHe&|rpvFlL!F|Q$>LZyu5~WZ!Zx1l8JU4<^$ux*vq5d6I;vgbv3#lH8JR?>EWzzV zx7LiO`AkbAICGsidBrFZnxn((wjZKp_kbnl`1|{(WyRi0Hhqad5EIA4tj`|Wg{{53v!)Cmd+Lnd^}1CkOH20ws}E}wPE)UqyY_n=c9nY{{KxXI z-WX`oibFSZ=L_&0*F@)!pkAA%j6;+O2Z82(Nxff(e7n0gx~WI1V at uI8Znx4AfRfSA6Fp%P0EV>6hMZu18Cnb+K>oWKw#!_JecR z89nE1vlF6`NspiW?WpN{a*wgCV%zsRo-wv_TA8|dyPtr;Mu?_FIC1ub{bLYLh{r_K z!t6t-n1{m&PB;?M1rY7|gQAeXQ_lHu3NBy`dytSHQ2~+4S%uy-ys^$sW{c|2c+Eq0 z5d45+z at 4)&?c?$t2nzsn$~dzyhA^K3BIodDp_PPce!6>%+2iWnuiqujPb%30M$Ji@ zLTV5}kIcpq%+MY5QQ%|#7N at 2_$D;ErUHEu^hc{o^Hojz0tch10oJBcPJ(Se`i6_Dc zDN;>2UqLlrGRjgm>LOw*-0nNXJDv#vj)FazNp45UnkYfZnkn%q!M!Z7US^5w%(dhW z&Lhh**QZia?lya(Yy!TLWf`jY36hBYBll1y&=`DRnkqcy8*hi%C1+z%CI+KWDYX!} zRji6y0hz{f(24p0f$A0042d at gzQuzGPG|WDQB#^VjCcu>C!IUbFDC0nh zpUi2^v=KTSvLIBd;?zImcd68CEe8YPcMA~AG9U9I0h$lrd0)1f4sv?BzX9a?LZPuW z(BaT at s14SJpd2-|TxySZv;9ArA%cvhek9N>f=*tQmVuC33Y5BbT=Agx{PLplEVfb* zYCdO#YvgfGA2XOmymd7}dQ9BmwdGmQJqyc=Y|*M;P>8Nx!cypX)C^%H$Gy4%FFGm5 z9kTmGZ;LX?0J;v4%x1}`JFgv|RD)Il6wBrWp?PWb$~HKvP~oXxN~o%Klt=LI74$Xk z7%!G(+fD>M{{A({N>^aJDbE$K?eM|e=u7N1KY&qvI+GccANKCPyPFs0lE|H?fH?X& zQx7!pEqj229>*f4_x$B>(+dY4Ee zOi{)a(L*=|;lwJlX#^Qs2ja_> z-7p?wN~bV4iy?k at 8PrZ3gnikjFfvV*9=W-FsE>XVm%(R8^0tZPx%cUN8H^spRPWq4 zjVGs9k(crvIJ z9KwrO3hKT2*)JKS?giVFrjJohEMcQ;!L{~7p>*)4H~hupE$QLh84*b?kGwM3%qVu# zj6Oca>~6eF#i5h*&!!Pjdj_HGJ!aE{W23;ycsjc7GM_-w>-3@`i(-poh_VdPzSNMf zXWV+w10Lsx0T6E}ih3bKXMb+ErFd*+fB#aE>g_;wXA4OAsa&jd64_5-ph>{+q{=b*3Gx?@+mz1g{f`3j zf&VRo=zqE!0**%J|JA(?QMUO9HqzG?seYn9u~m>t8H%t8FbSnk9Mp;-aHx<#(4%gB z*~AGMjkV+KIy6P at 3yg1>Zx_6$@Cqh>;jAP!HtVjapg>8CkK>IAXJ#r2Bll>6=Y;p9 z?IhbPyWxE|r{)?EW4Jl+sjZGQ#_7jJ=JT4RVkX6nW7pCUqiL|=tqIZrFn#Y9zhtS(#i;OQ1 zNd#PVV+fK=YBO`GG*-D3D5}k_${O`xbBdAKDv>Rgp>D9y50!*#c~Tvtr+g!mwu#yA zRp=LW=bH2*UN>lG*rmQ%WL)WM2WYUO_@ zG!O4DnmP%mk~&fAGAlnGL_=YliE~5g#l`{{qA9%{z4T50m!I|~(dRk|z^jbIa!jjuC3iJJ)(R#awL17y=cOUb{` z$|fnP)V64QwM*;-$nrsT zh#Yml;(PL>oClbv&F%7O^6NWx&d6+fK@~C%OSl1d#;QR^wuLfj1 zfX?B^pIGG>`ftg>|0{CxKQa{mtW&5;*rTXmd~q_RO~b(U2 at A4n0Lz*JB?yZo1BUSb zFc6#-rUwj|E=*u{E;gD0LE1z`aieML?W?b?Y;*s?kA%|Kg`y3I!@a9mgx8si*9g at W zzT?Ft{R2{~==gK%MsNG&bK)ZN_sypgK>2Mu`htBA{KDL!5EC9k4fbIDTp0M=en_Zl z-YW4kYlZtLIDWda^^-z_jJY$a4euc#CG(XbL$FPl`#Fl7jv+%A^BQe3F0XX}36LA~ zODg-ua~?Q+g}w41>LK%K)|)MpDf#TVA;Umf-J|)*L&K$ejZtNbO~obB7b9Sbz$OEjkv}KsHrxok<>fZU4vztoDQPlA z>U9rV_&sd2yip6Xplz_i%9CpgrfkEusRJ3Ep_q$R&~@rQPgj{UqD7q1%ac;I+?d7+ z5VZ}2GC@eqb+!7;- at Q&+Nxou3C4_IPy7`LzUnT)C0(djSwOOJ%fSy#(iEs%=^a zY*{l54{anr+fI3R>0AQ+mAW>l!0V&=V))2JIVBZpVzh{}2J}gAfoeOCw~T8IGK-~* z!};Na{0#co96h!P7NtT(zS at B7E4j}07gF=-d zWGGYZ8mU1E6|C$*C8!U!bosr<#!$0bu>oD~3W9Jb*cpSIP><9a0^;Nog&G4uG)s3t zI!kv*IxBb38cTJe(k{}{Dkb`NuxaCDVm_%jmr$&YX6(5^l5xk1wuw5oBCJaNj|+i5 z5LX!;>g-t~g>=-os-;m8MenCQlRFGE53i1a`ibN{l6?#HrOsjp5?mspRGfkVLfK~i z{0UpL#m>|^DjD106=%QCB_BEgkf at CV2kzx zZ!pp5`=c0c&N*AZE`8P~%Kwk9cL2_$?Y4$9vF%K38wR zF}^wHyzlqd_x$gv>Z-1;>Zb=+6U=x11BiESug&I?Yd3QrglH>hJiAfaX zSvf4y%^k_a)XvZQRDy!+`N2DebO!bY*qQa}JUz0gOCFl#5y%TSAF!$Y;h8Nw*BNQ6^6wm<%ox{o;d12d;F at FQ|;SuT(m$bxo z-{m^HAs~7F`9+gGq?Rp&$0x+ecU0~-Kzpow(Qgh+LP<^7l1iSV>>D#W%qPwAqro&} zZYho>hX%WoERNULY`$wtrq&+OrEhXZa{uYwz?;H*VNBM5MiCIm+3?dS^1ul?Q8_;Z zujb13Km#9!U~ma+48t4Z%B>NBKu(Xh=6h-hN_N?}kWYY*&-g&@k*9h1GwnuI5}g8fR_ws2Y5+Z+GZ|jNlFWvI3eQJGvs_ISqe|1jOi&eRBf!wm>ZYM zEiR^>Ic~V2PxMjkyL+5?N$&Ga71L4VTfV1xLFPHVu)&2Cw}xD5J^$k$IITK at N4u8r)5g4cJA#MU)mb2yQ25ny7}2W^RK>oazLn zKI#PBpTZA-IjZerHCLUUFQPt`_te$eyQv6xZf5I9Uag8d%q-K6sD!piMg&!iE5DLD~fdCYE~fex_0z z-vIBj#pTrY3FuT}yvF6iiy{OpW^MI|E^9ll{Stvh>^X=b^7GU&e$ zA02VfJpFW2Wqbk{5whR6l_+364E7LwO!qM8oX$fd40YI<2bd?AM-mPs9HX6O9CY^6 z57PJ2k0hL at 989>(ejITf{b>9S_kHDu6VQst$zk6mUn=F2=CYC=bK70{&N}N*DaMVj z`OB at 0_VLQ@uHM|Yo~GuU>wI3Tklraj;>!U|1RFtp1SGJB)s@>nhZ4ph|Q^7Grzm*7OU!lrLe8aJ2sbjE+ z>%%+zd{5~SrMP>`D|mwUUCl<$SH#s z#L5BZwl#+_#5#s9jbadLin={%220Q3ECHCq1 z!Rt%#_<}JSn=cyo5}TEQ$P%8|)P%_n{ltg!G|Ajpw&CF)gVK~3W)c2NW|RT}0>bjY z)ieGVZS21l4%+f)g4lq?)T_o+?RIJp>TqDl0xXSQBuPF+x>yW0s)v(BnW;nPx=q{2 zCrO?!bp+Y#Q4s&c^YkNRNFfl3=ib-(DEpeD*U$eA(E#Nf64FsSsDjvzDEtThy_GDs zhJcc|6pp(KU8U=|0EoNm#-gMCU}Gp0{4R#2^fh&m<&{~Z9P=N=Rh?4AJI at TSCU>I7 zE$yqj!kgf?9xc?PV(rLmXNxs=g5$)lXL3a1Ww|S~9;pZD%l6EMr7I%YeeF~e zBdG(4MQ|wAs;_BUDWmp=kE^LX7aDLz*27%X*Fye8HaiWdx)ZWI9Q&kb04_Da<8CyB zxdSnH3qpTmOe*nZM)s`oF^<|$j_9VTlWGjJ4mXHV#srz=%64X`?U7uTPULM*b1+#{ zqQKuPNv{3~4cR}eIrb_vrd%lNfp_Bwf{YO}8QilH2%X+{_ciYj-jA+0S(*csT^V6B z%Y!ZA3(rS;@vwz_^O`w3|E6qP`o*M~_23cIY~`F3AzWYAj9?J_c_s)(F%WK??AE{y zZ;bt9$)+=c at t0h{$dDi#0VAzVkaoH4*iQI~4(`cfkyn2RIUFMwSjZ#nzT`0-S|6A at HN1LfPDWCgCi`BoD7}*ja0QaXLM2IPl~ij@~pq4?%RMi zaj5jb?wcSuF(`!&D!GIVx@%Kg8r|=U;ckGif}l at t-gDu^iu}7l0TF1w3bh)wn&x4z z$;+P&$M&HhrSnR&GIOtv-mA~jrfO=i>yExFJ#gzCZKY#zG7WO#9rLmZr3jJM`n9roBr zADQO7xLsfXdwTRPgrYxlXqrge-6SmBwflnF3|!Kcg8_sxtXbMMk6 at X(X_K59v6c2? zd67aIuL;1G+^OK4+^agG2A2KfD%?J#{b#4JvpdgSq4^7G#3z%(M?wubZ9tM7JlC&P zKFUk*SbH9PNgmc*Y-gWI+3!+in9UZOZD?>QB7Rw}uT>wXlf;82b%Z4Me%p`yXZkJNe3qf#m5 znE?~Vouyq{@*uyin>FNWPEm4x{3>T}=d%j)s6ChqN&17!0HSs*WEl3iexL(Y8R<=v z)}_gEMRI;1U5@=$WHFar$P1fPPQxHxNO`iP8`y79F>XLF2Nj_pNI_ZychvX+4E3BZP at F>K0p%-H}jFS;N_PCf#Dx46V+1YzWU| zaY*}w<@P5$X90O=n`~E*JBFHG8ED}h!K8W*BE_R&UBrjcyRVPIo^Up at 4UfsCAr4~Z zYUm{ew?kcocm48^`19%zCALxSaapA5)Qhp7*#hS+H6QCOHX;q%?Bfrf{q^>reFGxq zj;}vc at J+$8jTyJAWtt0PhH2L$&^c0(tOnm7yG&+Yrc82y_sWfLR??Pq-h&zXxKu%I5D+!oS-xxHs$c=1NcOIhl}%)4HcL+%aDM zLLITur(O&<)3#(gG%Xt;XWu-$R*bgg at fYW6>Xu2xq}BGIekslJQRr`Lm(+j at k-bAC zlFL{=?2@$5(~&oTXuU}upx5e2xw9p|yG*{OO1LieQIGK9JPRqyUV*dxlLmj(7K$xl zYjsupfbL5BVjGUsT$>rnz4-us31M=7KDJ!*z8m zm3 at APWQgS^tk)14$eI!1U1IJHT^}gm=?-_Lev01{uvpGbYG3 at QRH80k@jIp)VwxXi zx#wxbU)%<_fpxox+Yg2v0|;MKb_t8wtSfM7nqKyt|JbT8*!&^mbI6AI(E1fyzHr9M z1i8*=v`fAu$~4D-NV>Lbw&VnVN;Eo00rQ86!zi+aYv7Dmd{sQ-)_Cg9QOLgmn`IZh zk+uoI{e at 61jS7HwA4C zr{o(f#7Pgbz5Row$k>oG{|93!=5;A-$T1L;&rp|t*eIJ$a79OCMMuD#=};*X)`}xP z4?e`>kUtDtg$x#w&Y^H1?enP`i%>X@&eC1BriwaXeVT##PM)k_kqAAuwJH{hD at WC;ht>$Nqk7dX{8UEwXq z3VR`ftZ|U3)xHbilr at _vJK&BmVaVAGXqFgSyQQdIX4U z at Nmg2i2?-(QDnVFjzy1YGfv&QA`u}XzM(K=R8;x`2yhx$&v7`V94R7({4Vzb>d9x>DC6M~YCy>}3ar$Wa$6F2+aF0bYhF2*X_D z2ze{26YSx1rhV>Q%u=vf3y)O6Cr^c^&9q;sKZKo1FX#{Tk84ejtJLe(JW&{!Tpep)hAUMg zx2(a#WLZVTY*!FRaB7Q@=scO?2jOPTkFb}_a;|XJ57W-2$@k1tzDJUobu}JNY4*@R z*5u==*z6HxwP5K+i4?^%Uv_LTa;w!)n2Zysq(wsduv2Lr!t&4eNKcWzYi&B6Xt4m4 zThyw%jN7ALu%uM=5Mgl=1AoIus#n7Den}ZXdkcoV!HYv%wO?s`%d?U$D`q9jrD-M` zYV=iJSTXPJ&_BYm?Wbxd+_qF4=>wsF|1Qcu*wEdPb{>0QXs+DI->!8uIZa@$16!6U zoD3`RmV8{cwogLZl6?5~E7POZVh0)(((C4D0GSs8Z#W;=tfA7NsMm%6WZ76D4pV|@_;s2j4Rf3P-tWFLL#l8OmjtLrUwFXjlZ8$XcgcJf zn#GvF;FW*9m@#vEW5?%$OczrcgcVc%q+LLpgD|jCLSs5FKuekV1!JDpjsTGEMF>u* zxnMl;*y;+hi1piE+{GUni}58zv_vbAH30*3UU5Wg*N|T7$)(#f7ephCf7nKcyPoLC ztsxX=uH%zk$6fc_<_>UteadbswXQYthA=c%os8fn_ykdPM||HJu7Aas5P z!Q>kneTL49|HAo=_pBmiiaMR9NaXoef_-i~|Lc}&flQonODxogI58fwZF!zw3-lJq zflG)}4&A|X!bZM7BU?T(P|n>t+Qi7mtHG>o!;LjUmcl%vQ^p;V#!j zD){=RP^Mtk4CHShN&3soaR2{-u531NOg+Bf^KO= zN(?3MkfT^C7;8+-F{IYCY9siEVC5xa$*?8-vM}=5>nAkjZPI11lwO<3{^30H(sQ44 zy6w;J50*aQ3uA}_kAg!}$TH%ntAWO{hI~IiT&z)QveDOkGaVj}V>k_Ktu`PVikW-d zxxu9VwB;0zDBWzWL2Tdjh*NJl*gP`*T=`k>a{>Iy9%Ogy`9( z8ZU+uJ!UI(nXf44^Zwlx1!JvMmgn8GIxG%-Zz+bWV{1-su-%DSV!;mKau9OG_k;5v|Ww>FRq z6}E$k(k>BpZN4BM%@5`t_R3JOpGgco+9_A|1S*c*`PqiRYfQb|i zxiTvYI>%gj0=}fJ8 at pm0_q63mszt1d4h8+dBy~d=u9&-$g{Dkhk)D`RTsqxR3#x2> zltng##tc`t4=&9I*!LSajIld7VvDCfaah+yU!9euyMG6z~a!@oewvyE%`Ztz{ekf z5+uQ%a8|`?;9$^N3PG4uO?2PR^4Ue)5ZKHTKsL_YCH`y>YC)uE{nV{b;uDrl><)7s zm(L<&z5RJ{z=%$tUb=i at 4%7{sH*T)LcrLfyrUd4MSvA9Y>TAsN8^nQ+aDDJ;xeq;J zZyJ&2sR&N;tsxP`Y5T!Cz5F&N_;dqm)LkzAiU7naD2O7Ei%Ge>3( zVch)~BLG}#mo=rEi_{27y1+v at v-8zd4ww7^VK^R%*zQb#&P}M0r5BF0nTO~4W|QYl zgp&0$tFLwq=^!(O=kXuwhSIJ{tOf}L1fK3cGQxk2JNcKRz7~`R-e|)X3NW)(WE)At~%g?^%+AjqoNSpj{d&@ez_#GjGM)el^9*UP7yjCPF4M#sP9 z+_Sg5ue&+hOw8<%G|-h?_>LvFM+v`rS(}=gyxZL2Htu(9-Jyv?cfQ3r3{sxXZeAL( z`b-4*U)_cyIJCj>U82|q=iT<1?>ZAa^ZEoNGj{As2kTS3&^{bj5j^AiY(i|`gk#*u zV);x$Y(IwcJ;&npNEh_3#QOJKhY})x&LQxVyf?u4?FHrqA`^9G8lI%`=P_XZDTMQb zG)gg(DZX#FoTf@$5EI+BJ}Psagy4s2XtW$;6mVI#BI2eDj3~y8l8bp8XaI+vQ<05I zEOqcFfh+{LG7)5FhFgBKxzGCE5DZBDgGq;dbY>W&Kz1aZ&q5D0kp^cRwb$O+vE$lreX9wVyw6#cfREcx9S8NeMrgtitOryCy94Au`)G8aS} z3a+ExZ^Fdf-{kk>NVE_ssAcXoL9ZvgH7wXv2)8&8%HpABjAy?GAPB#I{}wb}JV<@0 z!RCaFR%YulnWXM1ULR1jrE!CR#`1-x zK&Ag0 at VA&^Lza1Y_inIWA{Z*Co9KkJL^24h7B$AsPJY8D_YjaSm1v(;Y(4=$3Y_TX z3P(<*JXpt)ygfFd`ROV4?93LbDRS$!l&~y4V~a4<@kyT$t%=Q5iFdlumynUMAu!hb zpz~`Lp>Ww=u1MCM%=~2DX}8|4WFhRnyjeGs)v07sp!vZ*17seLnf3HtWNkvRso9c# z`Y4iUMw82j(~PA+dpO%N*vZQe_j>*#f%Me)G{9$V43SJ)ZD#ChE3i#tY$sAV^SLJ$ zB|n%iGB>kjYJUkpZeI+?efSF*g;xDCWAvwP^Fp|T$)cyToVcrNl1ekZVfOr~4~0FZ zW$=d~?#JD!&#g%S?|^J$8^C3f#qsTA(27&Cj5cT17()6LsK->3gx$#R6V3}@P1Qr$ zbUv-lozkswo>*PeqAEUiaC#dwlwBMkYr&X+jKU_C8Fa!rqH8KPx3Dk~&vYj-PnkIF zit`$NcpcB_;xQ41_BQoSMl$qLiseb at fd2pzI*&|O7w1tqhL1Caos>pfugwf<(F&3H z^5(WWSV?u5B85(bYu3zSEVp`aJEK>ju~~4Jd5)z=Vg-pV3 at gpmmbGaJYrnDU#U>NT zDgIsBXcOJs>IyO4ezF`M$gsVUL%Ku!sV4l&LC4czL8Cbi^=MI at 7(zietloBarY? zb<|p>vM8lRgY>%3mF^JNmlAP(-ue}<;^CO82w@@?($w5HH9^o5C%9 at M-WO-d!fC3d z at Vj9SjkpHmBnrogQ}A-A9c9z&1*tH?ghSARLYjoIE(wBb1ltlhx5fvT$_JOu2bae(r6yRkf;ryB8Dl at TH=f>* z2MkKRg*Sm!a8oFLiDEY8${cF7BQ|N2CL=L;tnsxlVnZ+xm{{xMv6tJ at gs;*PGn3K= z?o79SQg|dC9^kr2;1x{{J~E*DhY3PY$lfCb>np1}hdm^R%`=OpZJK;_|Kd_(!w*K# z;dS6kFrHjwM z&mY|-fJ3SiH(I at A0+ExJR|;1Hv1Z$!ixrtOi%In6N;Zw?m?O%R?k>;4&C at l2eXYZ@egY)a&5^yFfKxYWE<@_?xNIs zTUvE+YOdSMa;_#Br9MCRCs}!IuZD2qqlrcyp9R7q at Qw1ZPX(#OrBGD&v1?hh*0fFL zUP1}R->g!^iED~Z9b)tXnNTfK+n3LGr(Ic#(h%;~H`pOpm*3#ahP4Kiz~Ida3M%3%PXVTC4y%cT6o1$GS41~~OjH7)KOE$Y+) zs}(C{^^(v?+rHMzN|_oPYub~LscKU~-WxB60wt!n(?;9a=ty!}`D51exsQ0e4C+mq z19+d09JPt?`xaBDsn{XHUxp-bT6II5=K?bWhjM!wo at Sx3uPcdlzJl04ob%U$-4~XV zJ1_f{Ol2Sb&=Rz=+Y5No5?HF?0_xChJs zTur8jwCnVU(JvIsg;pK2wT`=#xTchtJBxNvE_*J2r(Qb_HRP7mQs%(CIkA4o_j;T+ zP2nrOpL8j=F_H4|@~~?-@`#cztgNwCq4Yl$X$fISaZsts7Fx(*h~AWoUTo0sNS>J# zt|>JybonE9&dMd8O%%QvrQX#Mw=C1+9E+=&=)M?Lpb13en{~-m=HRR_ZyHUyT6>}T zmD4}bzTfR2`f)(dWSiMN{#-pp2Oy_&K=N9+!Umt{d&=95}!05dLshy=T&Q80A$4tTe1onLYiTI=yGS_f3een*sh^Jv!qS z$_=Q8YCF$eK1WhLBiY!c1`btrMGmREH%VE at O5D|lx zMaI(WSRJkjDZ_0Ch85?cqC0ohVo9wYw$hd^t2~Cb){5e1Xc0YtvkcE;y9 at X`r%*7l z3TCiFI>oo2-B`=5dDMJ8>RB$ypzWG)Hq0^es>&WR0krxqz`;{X--*D5XTVj_{>=QMl7yV at t{nP27PT`q0p;v0RPV5smq!;t$ z{Or}+_wQ{5W<7QShcSCzDqF!5Vy}wdJ|d4W=UEuF?DwwUwq<&ocSEUN`Vn+-k#1&L zgEe~oG;8>=j#gz7VA>buO|C-jUGCwBpIclf&#b_Fwgj%ac3SXwXaUt=pSmpauyQ@; z=g)`v?+fpvPavFw+^%FmaKSkl8q|LL!6>4wL*%@}J zzBBGa4e{<f`?Qx8(o4$n&eKBtlUzv1C`=sBJ?iEE7q7jMky7~7r;pHa{CG4&1KE1SPEpSkxrhd6P1$v=AOZ+TFAX?sSW zeQ&`=2q(Jy$?o49hVsUI{Aq5 at _l~1`3elP~=fFa1+5 z{Sz+zG5n3+JD;KU`G>ospCaCH2$7LkKBG#ZHbCm58-^c))Yg$w*ZtPdJ#{LQ~Yuk>ZD&?rF#iZ+d#c=)P)H5X*8yRkTZrlaOc>wA%CLrc6di(>LYGZ z9QgK0cR@#{9f>#R>o`yb at s7};IN}D$j!+jSK5RMzKsbUyARdFM z51r1)GZ!#>9?Ce{51I**cnApf$YO5Cr;lscicdHdK8+MMZPjnk{ zLo$Lj`KeEGTjHd{7?dXM1F=v0qmIA>qbu{4{YGnKrT-jf8^qqEi(qT$*~|lOUz at x~ zc5i(bKl-}4&f5d4E9(}J*o(C_>H&810lzi-R73zwIR6F4De1?$E$_91Ic^WJ{sqRw zc+0kr^GvjF>%g-g*4Nq_bmb2K-44G>=DgDlpFCiwulB=Qo#5PAZVlLgI0?&k?+;_n z#Nz`cv~A1~xMy-=4d~>G#^Y1_9pN@^Yi)ad#%eTOvzNWq5`FG9YpUb#Y)X2L`tB{^ zW5=+=1>XSACzsPt>5zrI=d&R+Qm7U%vl`UgcvKdkhy8 z1OyEHKg*B}ZEP&<%!Tdk+)VBM%c$|+vL{>n1qF0J2KwYQL=KMm>C+=UCG;mO)5vklrM1xo;0rMr*Zw+}^?5EW|hX>EoarmcsmV*<& zX5EfQYuZIO%-xEB at b`v0uU at HBk)u-88F%+3d)2Gxrork*Jv0jo%Vq()d1>wSh0Er0)paCuBCcvV7s&CTsp0FE}*{UED3 at zd%b$MvJf*b}HLxV_oGYe566L z1{5AS4&pu1zb&EAu)14C2C57SeAy*YC+52{D&VIQ*J_vG!5O~;#B8t|FOpR&@-WBmh(y**k?K99u{2B34#5Z9 z2BPpu!FcGeVhP;EKkdn*64)yS>R+YOkR-6p(xQp!?T{~@mVL(NPCz7~P?HmJq>k!QR8;z#G(3cvq5 z%nl+)QMe&pARcxcNh~u2nj&}!S!f-)4}OSJu8h=9a^NXdCevcDJyX?=CHnLjb$U|0 zJ!$sTWJ(BC&tPF-r(&~_m{Dr+b4K7XY>)a)5D54Z%sNMQbqPk4m?BXk>x#`Z{f|%q zXSJqkn|`+#{HKbB${q25)NIQ-%~0+7QMg}`yYT{yq>Y(9awVzbU9B}GQni*PrOh?b zKUJx5GM3=7Di8*LO{w^~F3WTq4(|gGJL4)kSzv(K(TL`IheaDD`qINRzf^epgfY%Fb{(q+ zg3USVjKEU+{%~_ZXvy#AYR=$s^8m}P%%F?U%y*{@x44*dvb@=H at G;VT*8zjv9ZHU9 z^-i7)o~9lge7RJ|BA}NMm3upC{YJQ*G-|YGLHYH at Hkhp$lks*KHhwGTSYIIwg)*1k zqM`V!G|W at pssmjLJ14s(gvY`K-)tL^JgnWlo3yi=jy_((pos&)U#TUPoMQA};67tR z0b}caKfes+z2ZDtcVV0`zsawq at Cp!l2Jh^B6RJZ#QrNA(#UNqiMN7<&kw-HK{*r7~ zKt1*dM{SV_Ko5QCo{)PVD?{?+PB`e>x!mC^^ybt2ofSqP*a*)}9A6Z78_`D4Uj~#$ z`0*Ou1I7FLX6iLR=`K&Y;ubg8ECGk#4_1Dva7RASFh^X=wu3!=>Ol97d)aWqrxiQj zk*=oatofUirZKKcgsv3k2wz1N=*1;7N1do*_O*vPRgner7W(V(I* zPXO!k4u1mGASxr&CH#PB^zjB95yZ?NJBqQ5|3*K0!JcGg?$oQI{xt__jp`)%@49v zZ%7h^frjRhN@~j<<%Ed=xtK7p`INPQgnc(n at HKJC6kl6I?;5HjP2j-`onoMY at 5Gt8 z`I+EL#mjJ+yD#DW^q{fSMs3|l48XBr?V?5)Z3e|~3-Z#LINS=T2{!gek5w2rk3=ef z7WKszZ=a6;eR_=+{=4*HsPm?rbcx{_XhO~QrhC=ep7@%J&Dw8%s_e31r;yw4b?zy2 z3EX%Jsr#WDW$#HP?|es!Huw%L1t z_g3qyMP at h_L3c7Rf|~vpy$nf~Xo}&XSY5>KCpOc=fY_YDDvfU8ZOg}4> zYB5qj_`^Ux%$#L>s!;4FwQOv$XewGUHEKPL_4%=cYUOr3Uy(QNBANLKcx=T0)`Wr! z6pbUVnIZ_uCC8PBFC99wxNA$PcPX>{Ye-3WCzyV$4|8q^FZ49n#EJzUc{zfRG60Gv z%BYkSu_FkN*aKx09vRysortME{eks{N+`c&RHLv13qNni(uH9kGY4XUg^D=N`+ at eG z=RW8Ei?;(Dham00cq9GKc>AaGi-e(_iOs*;8kBYIQUBr%3~s$dTMI?8N=->yI;|D1 zWi=faO?VHgBD4Hd*caCzQrmFlB9Qr$k}y*u^S_6r;#}javC${=Y-Id!o at sZ!-u!qu ze?tOMy)cUpO$vx;6zxPn%=+FcqavdsyMdN|Iv)GJ_ac=K+=lhKf;yC*1 at Lj-ZFq5p zLl$_Uus(t})}TB9HxX6QVZuZEY-laML>G_%+vohK8uYUF)@;9!z at xdxA&#D4yndXp zt3Io7bOs+h2BlsQjLq#k!{dHD5tw^Yd~oDl9{1D at c&Upekoee2&7>s6N{zdy_`jc+ zSmwZvi-9A&_FFHjvh10Z2>b0;lQF%6MGAjwx)db@<4Z`i=7LROX&?m&D8r)iS!1p8 zw#jYm8qc*T#%;2NMzCaPXSyZKwJ<6pMcA zmPdiY*&Mo+Y&+_+$EjA?@AdT6jGr}Ba at Bwalzb_J!zRI$&pp{LAe+UD#L^b&6ORs` zy2{mAk^#Mp=;tcLr`T%Lvz5uR?~omQ zuw223-x$!~yhbBJwj9rbw;Y{<=Bj|0Wp1aTn$*X5O8TP}3%DD1oWt{*%=CaJOD zMovA0*lp{JvTS1r?RVui6yRtbh3Tu$Lhr5^PCY8gFI(lNA^$`ipDn~=Di&kFu|BBU zkmj}e{iFS+eaCuZ9U25=4g~}R|9 at 8y{|lAsFh1W^alYi;k}@`Bq#L_skR&D-it(B( z*J!k~Y}UwtwvBj=wnCN=l$}W~YtuIAo8L=P0|QCI3-=UxK}4%i*IM=r8uD!R{uRnX9{F6q%?&k(Uv~H`h at PV>)ZBd8puva&GEgm_6 zJl!6EEuvIT8ldzXC$&ctlwy}?zcvJ*cE=9F9&Npi)*~$cTE!tQ|A_`DKj%*E(U$)d zbqFBP33&2q=OOm#mZ!VMnuIdp-4O*)nDU+s;|lVhgy;_~M at S-(^A#IN^-D6A-WoP! zCpv0n&w3#D;~;e~)57}>1<~HdYs^eMmt)~EpOW7*H+XCGlLq?fK>G&2*;YuQ;bX zoU%JB-KKFlWe8f%gVroa==W(+yKL1i`l6B|fOg~0mBDa at p+A!67A0A|pV?t*@d4f@ zKDt7pWE13)*0h~Q!Wzthb6X#66uP*J1Pb at U1>g4;FosD(N(!Q+}WNmQ^Y*p`k?dn;B(Md?6XxRgREp zb+N;9APwL9VmDq7*@pbb{3MN%Tm*E7k21A at auiiZlH;oLd>Z??mCoolMN~;=Dl45? z1~uzjU`d&hbGseA>lo(Nc)A7E;_a}DRv|Q8SW5zfaop0~!jTO>SGBslRoLwl4Gh z1WJ~8I6=|4B5kQV?j8r-*e5#r>EApxJ~Az^v)iEDi3Ni#BQDy${Fx%wDfP_MM|!yJ z79V4K80CnqdRWB=Nxr_*(fgOG4wi zOF5q)k3>=pIhwE#Q}XP|a-+C#S&S06BZ^)le}$1cm3Q1;#ar!Yr)233N{kPn)bMqm zE~8)F0BF)%5LZ?oAvql_LEB|fsDKuR{{RYx|A_u-lo^IU#s+i4JA!<+T=9+QRrRqjJ-UgB|Y?QIj1a1QftTY-uq2q2FXLA1dwy3_Wo2d_PPZ(1a6A4VjXKl4mqS5rT z;^<9E{}3zMddf&gpC$COK%8*Phd?O6vu;u at 0WVLj);DoZFH`H!{JY?DfvLYbUXEA^ zB0#P=Y at urx#KMV0ejk0o_2j&f6-rPx0g}Vme~I{@(9=g2uv(su#NXG4$UII&&!67i zZ!?Q45z&h}Gp+>o#BNzoq4uz)aQqjxz$D?8?9CvvZCT%M0hgK4Y3>gqSdl zMJ}1hTYH{OvP6y1&9F$1(M_}brGS)^OR}=YFUj~9ezoh0gMX-2 at SbIT;H at 3ev~HaI z2DYY(?F6CgNFFvPitPqlfcVTC0pPtB;trIE_xF!fR|C=(f~H37K*SXVSeeY(q@;)V zB$snGHE^?fmS>O)e?K0`)!rJH$3IOP?Ceo+WuQ$!D#BtUyV at s(Lq4`WKVB?KC%NHm ztc*3d2 z6=#A!ifG1=bP)Accg8|p at f8IA?3WP^Vxv35`W5lxDmlpzlT0UD)&+0ywX1|vGp)iX z&KRacNe=B!u2_A!N21XB%3-YlTt$2he72CV;%@O;;D9Q3t at UuxITaMXX@@2CFI~O- z^O at 69W~~9ody|B_;bR^*Y3!m#CYD^*#(w6)dirzuf|k{p5l|i}hH#jz zsE4-XxikkrEZ1vLGG-Aj9e8|g)9P5oCYjC5j^|Jk4)3-*bsEKIUO(Jj$sMe11sGhh z-1_1|H2dfxXm#s#-B`jlRqSm2{^E)V6k~S((SEs2rd8&!sb?qLaI=J>igc%CXI)<_ zBc~uAiOk4jgAU)c96+~+e)yxSG#|ZIhuV&e*VJ&>md7G}_!o{&k7>xYD5s3Ew(Rr} z+nQB!1m3l1iT52{>-C>YuAoQpqreCk=*HweSWE1x;)FmCyzlBPf`U`+Dn-Z$O^aDs z_nN>+K_hx{{RFUxci?nkAvV#k8JxB(2!W;WqpdxvHf1fH-b#T*90^Kks}*xHr^A}Y zONqy;6mZ-5W^LPPb+jRfIa**~JYr~js0*cFN3IK2MP74Ma~7KnF7YLCcVe@WHd%X#V2+{`+D*?#PI?6ci| zT-^Kh{tU4Lxxi9O6VFsZ6qyc+;AkjIeKNuhu{dY?5DM*}OZ*_aD at O$kSs&;it?pzo zBLjDbx3j|{4{plH?k?*+!eo8e%)uAd=l2*qCTrGy--Mg2r-xabKg!oAS{YQX_8;Fm zLhWD;9nMR6Yy~#Ww94FNPpM{XQLa;Nn=`yG!IhhfDj(D6~#HQm!2XU z5 at 2hZe9W+8p{?WJUOW8Z&d^FN*a-2FK?)O~)H3l1N{d-J;5)Aosl?r-!J-RW64Pjw zmi=9yIoN2}I0ti_?159cc#jv-bgB{<_5()}r&c>V54hTd|# z%Qs)yD;=S-VIAYVIu`5o1JQ&+QRhZW7-HO1_7&>Glh(j_8!uL|nRyG^ndTDzuQc)DA8lZg} z05e`=_IVhJ+kH|;<`PnfQYXsG|KJhQKiBLGM@}b(X#xtMQ8b2C;V=ao_BDYcA=IT; z;?5EqikJvR`3v>w$L1AER|ya!9+HCgG-C1#jY1g?%M$^Xdx+UYubG#ea(HEo0zAjq zrh_#4z!C1qQUNIY%MY$7Fo~QLpS9)B&@XFarR}xj;|qG>v2!`D6y7AH5P}|&a?|@4 zukgLss!qil3ht5M#niV+{%5gERA9|=JBjK~ri at n;`v32;FlT?{?*4m4`t3iq3jT}G z{%c{xcESz_Ad6mGY_Q*A&|TOJ3E^Q`^FSyf(}BOS+mRu0#$)r(3?SVU4aLOG$S^za z=4Q0V9bY0Ez@`jR`{bK~i*jO(ietvK<}t1* zA~h)x+(Q^Hnr-4)8A|BFv4xhcn^=~s1$kYiZ-6>cMfUJnhqf_*)v!d_00^GwM1Cc& z^9z`Kmq!;PQc*zH4Cb~eqH);j4#>>VEvgJ{Oh+)IFn|1qNeX$1$3E3>sBRQ`$Z;nfZSp!Jq}z*%_a7l0gkO8$r>wkz$3A$3q6U2_i9pBM^zLaDJT9r z9)Tw$SupY%(vCQBEh)CVXk^@V`yGJuX_epKw->xVEKIe!NG~8vETpis1dqT at yYX~4 zHq173lgW>=$;4 at DJ2WCU#9m~=lnX!3^jYcFrh1z0`w;w$W?I2JnIcQdZ{<*-PUnH0 ztMdc{jmvSB2dt(7rn(me#nNAkFzS>W5|dwK__w)+O`L~Vyh^-)xL0mHvLsUKrIR^q zTLM-U<8G!1uEbV@!)r#~M)sv+CfVfN$%l6h6Ewh`!^$9lkl4*vMd6PlAw8k33pPh; z+wCm~eJI5=-r>EN+t!KI766jzd6NypO#k*pX9_3K-z#WWg$zg7Hv)uRpCU)wvcRQ( zdEm^hg~z=6aPmTHcE`s+V{w z$`VQ>sgz1cNhL)asYIonUP-Tn_x at +z)Vt=~d&hnHOdoeX&i9;q&hPxr?|1G!zu%3F zyA7Y0mUPvf`B49Qew5>!ms<7HFX--0lMyY6u5|Y(aPvqOk$#`CYy0XHk6}r}ErJf# z!-@}I?tVAbEWdy0H^~mA^_z!POVkUm9^9C0H?P{$X`*yr`df$Q6&hQ-Dn1Jw+x-6b zh&JUO(ZKgwS_O`8dS=Z=^xDO%!yah9_LKj;G+x at GHK+dHR6+<603-kz^Fsk2cLyIE zU6)0U`cZ-LG=@I$A1h=37)Xy^C_OeTZjD|zgUzR`+PG!8;`gttP6dFA9h5vVQ3Sc9 zz>RQ70>A>_t&NK8_w!>uF_qo;^+dqb4U$@S;_sOnRN1B(+jyIay&GIB6_#3a^NhVD z^^8->$X6K(y)>dWdUAoa)LMb)-*#Vl*1~eu$dZf5p;u{3RlGW#)&5{glX|D8a%Nhv z_Wz{LH!`~~Uf%uU^SAY{s3+pn&fI<6Z~Amn)_R{f9pCn}iMC#e%(xK7Sn+~(Ei z>i7K2_3a_a`34F(8I_yEK7Sh>8veYtWWX6t;<)ihN z17XaR{b#C4}z4mBg$k8|I9X`nl#tnxm7gx~se7`lY zBl%0ZQD>Rs`NC$47E0Gq!@jPx!WsP`MT#fe{8`Eu;*+~o>i505+s6pH z_&_?+V4}k2g+{aMHV*X-y+81JqUN=vlG>H4tU_HE#``~Za9J*~EX0{D|Kd__e8H3F zKE6q%ZmdPeJG at j@ZSrXO<88y-rMsAJvQ)G51jM|n&DO_f!LWU?;nmaaR!&Q5jV48Q zM9VKf^gZOvs-VORy0g90yu}^%CR7hlPQ8|^4Ij#tPFZs)E#=R9hZPiSCiN|Q`XbjQ z6n*pgmcY;IF%Zt`awohdUblO-Ermax5Gv% zb;teo*eR9M9P>ZB^&Tl6`SXLrpm2DLVRqYuhjnRFe3BG2?Yd3m2mOk|bFQmDC<@Pe zaJ1{r{tsc{3w9ozaUn_Z+`XCv0ok%HEswA!ck0xg9W~dDu7t%K3U*e_ocC~Gue#4W z!KbR<%seVRm5}-Nm1nmeamzlN{`=Fikr at iF4HqF%F}*lxZs$sknRJ`f!aesCZjP!9>pQW#vqnVx z+u3id-1nYnc*e at xYhU7FWqiKZaKWr|+R>L9iwb)5|Jc%dOfzS&B_M0Fon=pn?tp6D zG=FMjREWnFMsHOw@NHMb%{-m7!Fu!$k+O2C7qMR3B`SzZYHxRw`qsu${kYg1W4jnvFxAiZr zRjIc}bo-6P at 8vX_XA0O>I|@-mZ9jNiiO5=@U(kJ{=u%<(lH)K{mkxA;GmuS&HH%euBHLPn=JI6m^m!$XboA{SPV7SQ&) z&Di|fe($L=B}kiW3EuiHq%LW#kW$#utqT8>eNb6tzgVU7gf8V+4W-;Aw`_3K zc}Y(B!u*qSbZ5sNwZC`$i{9V+j;P80-G8_DN=%{FndsiD>*wb#*KX0hqBWwmS$R3T zcw at HZ^cLAQquSvaG`BY06OT3aTSyx-ud&&WdM3Bz8FU%_7E-e>`+8#Q at uAh_IcAHJ zYY)s6cy=nw&2D|RMOUQcouTbv?&?cpskZZycZNFTdgo8st^CZ1WuhqkY54wtrCggB zy~2Fm(ePDrl)GwQ!?LHI at t(i`p at q}~y_ at c-TQYm!w7Z=PC^VAL9q at K{oOJe(@x;w9 zvU=-u{vOP0*j?YEbn9!(uzsvd#46)0ebusJizMAuS41mZ+hyqPFMjo}kD6M+)wkWP zH5RP-o-5J%_ICY~bARa7QxEDEteNmm|HkLgSI#LtD-%a$N~>#v%$iCq56lYc6-cn@ zjxfnRA9XhU{1w&OHIfahkB9vxZ>!q0RPJ5w&}#v$+0*kRw#Qr1U~ZcuUZouzE6WPV5Pje>vwr9=L73KLwh5N;M%lFJE;&1BKov2nyzW!Yf|8 z*@va0>1ALns;WKNPFqb%Wc5B-5j7z at wTe^s3!k@)%=fpmRI^m;3b4BNYXIeM*^0r! zk-LJea*umQR at 4r*WbC|4tu4Q(TG3dT(NfjeJE_3Uclq*JQxVUF0)lcv`0J^}zrV>M z{Wi$hyFrVIBP&5MMqKRT2ym4QK5}Ca#hWz77IU{*gA&8FmSL8M?}2g=P>LzQwSZ7ouON}f!Sm=02D;bv{Za>tDob;p!l6Jd zVUjrt at WExxnSLKYE3<{T`6W at Xp%_8FV>Z>z)6^IrC$QY%!Zm<$mEb;!L2;`ju&1)( z7(wV;S}BBzl`#)1dosBU!d`(14vZjXFwy9oE!pc307fSX480Lg4YQ^ZKZ at lB zY{pGV0asAykgUu}2zwV)V8ByBhXTNb0px|m}ES at 0t#Ugh~Lm>0awt|+rdbh@=#Zr zlNw1oW)zFbpfO_6xO;FNpROfTC4zpYh`@7bcs{8*xZe?1 at X>N{(;;xxhH%qmpcP!T z!p0^FjEQw%vzdfSW#gW({r+G^ZWM%g5~B8Xr?N!aCs5LS#+nxhB1Q)mft9&gcK3b ze}kZ%COo_cek4=7I~dL3N$Cz(VPKtFg};vIt{_yL1VcXPmh_C1T=#uUtq z*tnKVW)7kmk at USPdpS^8iBhoME=VGH=MNv0C4X^JDY*KCz;|x+E4isaAYV51t2JZ6 zok#uHPe#G&oABdSI7SAB5=_`bdUq_ZgRyCmfmLXGGQSysPovM=Ve=6*tsOJ{pQMtz zXIlqTW4_a0X`BA~%X*+oFL56tpjFJ+Nn}RiliuE_xX0owf#UE~Qmi2(K?HJ{*4 at +% zmTMXC6_tm2r*6D=`0$A`(P67HfJ6>Ra+ANJ#DOcgmIOX#QHkT1tw3aKh2h(+xxqL8 z$Wl5Zn3+HzKSQBqw?Baqj|Ls7$3xxLLQ2_Dy(5_f()3olH0>O?@mv|W#f`Vg*lGCG zwQ;JA9EUDU1RkKv_lY0Q*axx`=s5lo$KCgvdCE!x^uaFzut;9+zz}_D>=;7Ni%M}7 za{_JKh_OsXI{&j}N~GaFHg_eR22*`_z7dWY)j?KQ`o zz$^Icvqt7gFu+a1u)1~Y=Qj!QX}adk^6vr7TZFs4hSDrP^0(foUbGly9Gkxr86tnD zaviSy9`~8lh>mB!t9*K|t_&*Z#H`^qf0D6kiF~i>reAY*0x>BT!GZ$ zzxk?VPd0OHB0ke-CB63)VD^Z at 8&>xP1qc-XV!_qw)a(03~p=_`R&&A z=glM?+n6M}bB z5LpcJrzhjWAiW7Bq0pD82?R<-7yDb(_<>IYFC_&sfVlD|I6mH zg3{ZEZD1G^#b8|{r;fqfgod(dpcA#mLNbylwQBlwmJ#P|KhQ zY-=ja$JFxAo}XD#=uK_d}PN?Bfm>X9#jj^~>1__z<& z%ldo)YM(Hyha;Aeo6&q%r1*Hl<%1Itq)!vx)|BAaCSzSO~j3$ z0N|Mj!6TT?A`oWC_vG8jOV3WZxdSxS4=7_x9()p;oPfB|V`C#}B+Qr26SD?6PdC?q z>U4Rk3Wy^%=19%U&p z`fg%z#isej>>5B>o>4Aq4_}W7&H0QOIVfi at iu{sEeB*EiUyOGPCGte6ru+G7GX7iF zaN;%;o0~_l!VxQPICl~X3oRlLrT^sN!?|rxzQz$EpON4N8Yn3NN;+3g#>wDGQGiic zP at r-YE^rd-x}jmqVGbO)8ReK)5t(H8Bsew{N>XXWyHjUeb_((W@ z2Z~g?No3CAM)QEdaG(YhoOx?p1BS-fPcb*`@?w=ab>pv_PhmgVP&4eY1qO+ at c9d3mKqPM zX!}AAU6#<@&xN%|&0-^;{?-$|;@<{>=lEK<+gdTIBy$ CBqfmm diff --git a/extlibs/jffi-Darwin.jar b/extlibs/jffi-Darwin.jar index b07bd604719895c22a10d80694e317ffa108cd45..842abe4f47ef6b45fb7d2c1702500787bb638c77 GIT binary patch literal 67048 zc${>Xb8IDE^zG|Tt(n at kZQJJ5wrx&r+n(B-;?}m?+gsc2`~LCr at _xyCCt1l^C!dq- zo$O?1Da%1Z!GnSQ00ZkSj1>m^zYZK26qtg9x(I`eq9oJT1Q?j||3-g+_56qaa=KVG z{13DJPe1?D|3MW*6lEkO)YKUjB<~fbCgtTA80V4X7-(mvW}8)+m)Q0|E>mLY&h*mq zGtwGh(clye53ydIxiP93a;j=>d9)&D(+`LTaY*hdi1KaDP;E86ze5p at ykm^9su;t@`JmCDvGVc9~Eb#$fn zykuP0W?^}{N!Y;GOcu}ctOKW+ciZ*n&a-*{R<7&uOfHYB#ZfNXf47g*C0C{&A&C&H z*vNGuM%<1BdlsSS77Zeq&X5sUH}lQDeWsk{ohJ)~_moA|cj>#{Nb?8R(CWb^&bNb%b5w4nLHf{4}a zTK)=iPjIqYT4aZ>)6K57P*Su1EGDsf2}I_PKTuvunga@#6!oo_bSIP<2k4 at 5qAgV{ ze$&$SJWkr2*U;IV+v1|nSw*(kL&b?LI5E{%T372IC{9W3FhLtf28#(0DPtl0#6SNx zc2>;X&u at qYcRpAxQpTvZ)KjCiq;c+zle;7CWQC)y=jkUK*Ny3p_f7oqstM+id|BorZT^#tat6q#Xe*#vP)K}1lz<>4%g#I{M|`k*KBsgMG#IQd&YQzvOBkz+2K-vkbzO( z(sA>r-hz5@*gTEyY#Spdr=L*hQ{0&b2>`Df at t zZVIcXGVaVu7zD at s|7%*_h3*l6{hjkqOhSx5T+VrJgf^y!4p%UQ{&lxy7RdP+dSrt5 zYYv$&W0pQ;QRz+fSOmen0?rv+{iJf6Ch7SWK697eu>SAG^OdQN$!`FXUc9}6LG%|SNv}HTiN;7ZVlHbeWhDH>iCWC>{+oH4 zU09kvwc_ at ZW<~rvU5MiWVJVL+GZlyFP!%ENCx7lytY2k*CCB>fX^a`=6VNLHk|{x4 z(3*yk_ieAg-aS^eM=?#@QtX5kCoeV4maVx&P`9#*gp=2iGg&q)%lZ}r|`ECawVT%eEkmO7y)e8M|N6vD`57%`=# z7d!~A|D%Oie24p2oXL|Z{nv4nP|Ao<-U}X5+2C;eQr`j5ryf zs-6rAdisKZ&y0lXt*UkJ>E~#3??IkrXI&I0y)Tlqz%5Lgu)qY>EpsPQy3; zwHcmBT=PuSR#o7mGG25DePCkao|XNI6^o zVu^RV?)Oy7_oYK8$mapkEl#*0w3{@dItivbu3EE|%-C(Wa4ALM*ngprVv$*lm`r5PA43;4{g_MGhc{CGBKK+ki818EWMPi9~0EwoS>0xC#fZp^|ls?cPeLxLH zRxb_RbcXrTAzc%ze-nL7{lG90y=0sDYiLS6>u|m+f21pI6_J#DU!}lu-o;Je9GYHy zlEf+Ux9K(^9A at r9Mhk%NwOL>boR at Z#TeuHpH0W#u_gOCyw$jP*jL$ z!NtkK6MxGB5^?yH?_JoBi}+rp`CYNE_Lun5;&m9#reL+U5ByOMc?qmc>lajiGm5j2 z_@&o(lM^=IwBQxEWZ%Vk)!<7TmL&Hs=xB?y=(*oA64p&*bt%15=ky16)FCRHO3FaY ztV5PWE-te at Qt8FQI{HZbK@|EXpFYHL=1d!iW at 2|53lYL0QsdAGK`@20?ZWG2j%f4O zV at m2!Ftjx%i}_dV3NEO(@Hi%aDZ2s9+dE1lUMoa%sZgHhr{4nrM~QObv2LS?Yt#2f z22G_b{Zv6 at tlM3%-i0%7DMnTp(fs~VI at asooj;&0(qb0CGC{@aqf$va_tM4f*uH^V zN9PUuMreGn4`}4`%kOi<-o>|`Ma=V_2kAs**|fh3`DNM^P8YVVRYh!Kmzj)6FX$Uw znu)}l0|l}^SuLKv>$5&1k)qcN5Eb?4p44T;W08oD2GmCKl~yiZ1xNCI)1my?uC&O% zh5#CRijXsb+6Ra{Z(Py>a?_DG=MW{=kfw89$;GZaghQ5Og5&6IE}6-HbSqYl#)&v$NyC`@^)$agUZ7?_tC9D*Q=G{wbCs zpA5f{WzuU=1dR%~a3lj$$*zgVkN+B$6VtxQ2WBh at XlvxCfr%#YZ1$Kk>wmN5|Pvhbc%C) zJ-MfU?j>o6efk-T@$^$4oNPiYIMLi55*bxW?23=!YnHiRfbzz-C#N~Vo!2MP at 7m2S z0l>RJAH0gB>z{tLn}QN{_ZKy~+y_PH17l6twRwrEvkTPhA3t3_AQ|392vb&RN)VWOD>0{$ZCt1*b0h^8`C)s at F zTlPNgX=x<&Xw=(&5%~|U_xbc87&LOQmKjXr)DCS&HS>%3IY2~)SJ8;j+U}hm`gDQ| zPlXQJe?Mr!AcKGOXI+~9H73T%#ElypMjQVSjBI>d at z;kKyo{D;KqN{0XVe$^Tp=Fs zi~TyRa#fO15#wQqTRD;(N~oGqx}J73OX96Q+>_%Ld}UHVs3lK_59W8pT90V{Uub`& zoeJg?|5$4$d*SC{9_cPvTIntxhW7!(^wRg9Q9 at E_8?=9G_0-kEL9j08=1{t;2{h`1jF?ow zvmNmp8K>JP!SI>D&j%e-+0D(7ON>k^J`V#e+Lj%GWJui|m05R}d|eu~fFKXqx+J>W z73fC!KIHcg|D>3J0r=TR6od@}Hjz%t`@fnzOmU^dSBp*q`30ShTqh_eAL{A`zRSygn?yk%Q39!#0K=(#JS+pb!;x{fZN6BCf!3pai=@S2T83WMMj26NA& zHf0yUej=?!zL|eTeApLKHXVY#`&dc>?#uWy!)IiQD`a)r=L>IQ#B&_rxituX>yP2b z%1>FXk1dI=Km2MRHfGcgUNZg(;1N^LK_{`~XZ>83qjwXENQUY8MLixk;N^lk1gSFF zWf1JIy2p&Xu at WxdO%G1w(nts?%<|UjgvD*46Qda#3FB{2+4VJW0 at JlGv}g^Uo1U`r zOl&{;hkb~=S?`pT({Pfk&`5hdlN<7aNBXF&taelT<6100Aw~Pxy8x-WTO at bT@?UB? zPcF>wo-E~_F=&{k1eMX~zl#^9;*0fxFxL#h5!3~N%Dl8pP#zKejK*Yefx)~$Oug~b zJ0E)3GjC=k1QtvTN|f~M0qaH&%u<%=0jM8}u^=5yb0aRN4=YfzaPwbpIh5t1m$lGk z0&UO|;9zuf-<8n34mNBNEVG5m?*r{9%4r&g_piJ3_#uDwP4sxTvuy4?VwvDg)IUbI zW&~I{a|42{*ER*KuxmvoJh!pHs_`vmHbzLy`s=W_0V1c?45$EGvt;cTS+ z&sFUhAM|+y9GiZvQ^6cAYEVqxHv}VThNL^j&$^}W at ox^1Zx|2+p)GL>E!L-&^y86_ zh%Llkujrhbr>Np at 3{QQs**YzDy6 at dn?r5{- z!FM0m!%S&L!Li!ZYt-`hn}70?VXf!0&#>s*mwLlskrT5CA7Py-+!je6xg$V$mFWam zZdJUCd8S>hL3V&B0xb$ie6p(uAW3g7$vK5{TlFbj7`j{c<2O$2WiMr3kjp-KhDjU| z5$%BNerw*rng_Q#O?q45=50jv-unnQ+nqd5J at Q=VW$(iL*3N~RWD@}R^(2`(#_QukU?FWaHmNgvnwgCE6V!Ft%2E^^Lbeb2xi}k@)A~c!;KHVV(vUkHwJ!UPFop0)Nhw|LtYlEZIhIj=V-_Id7XP4Os9;#- z{($WhIGWqKiROE+#{WoYq7o?=dmmD3FeE97&TdR)axhFm-M>;d(dZ20ikB z`Gq+%{XX_~+C%7E$3iAnUMR~fS!^nWLk@=8I^cw^>RDnUt=Q<^~KO~*hgioUDP-1$sJ=cN&yB*4uC z;+QPsE6we9!~6ujz-afMzu_`ZM54M3r&0xw8P1!F2-5ByxOz zBr7lC`iFp~H+wwwS}B_3ggHi>tmb at E(=x#r;u-zntS31}@g^wkNgocj!2K!Ks#5 at k zy1c!<2|?Lwz|4!(l-}#?d~7QY(NGYU|G|?*V3<0-A{dv1hBeZX3}>2X?;$tzq=*FI zmt1y!?Dj{f)HGxAaxsW;K{n+{*b3(dO&$mQ6bonMitk0p(y0K-hZ~A%xC#uq^~t4v z at RIM`@4WZ`o_Vh3o-e-F9w)Y=lGThpvPEs11OZsmqFk3?6PQUymcxwk(X8+%n+Z>F z5MRPw-sC+)%s3aU#N~Nr#H)o-p9B{jNbHyz*43<&hG$ttv5J0`ZDOAM at txP@NUPHO zvla2~ty}Y3a@|_#-W|K-+Ub=P32)wPf4lK+;Mik=k261AFw{#P-;r6M%&tPIVt&@- z7tH=p*@)XU@(fetLIqh}>FLcEA5t!toq3i>{wV%%2c1qCCPu&c-0!ABA`mUxfDp82 zo;&droSp*=dni4Q+VXArz>$!J$Z`(>TOg}?fUKbIIr1?uF{qME!r(ox=C0yqWRgGO zK7)|n>;RiJ=H}g#a_GA{>(7hjE8QzaQkH6d_tl4EMr2p`f`TfI9Nv9*uvwxOokbp+ z+DwY)$wU at 7k0mATaY>o>40eDU=>6KFKGk=GpmvMibBaYV|9)@Xg*uSOsTF&|5C#PJ zU?cXUUDDe6u&Ca7P;S4tn at Be0Yl@|&@q*`UgVZBNuvll$uWfT(LI3-$JQi2{7nuDj?ipuY(UI!VRI#X~a*@6I2|H~|8hlb$yQp<0F#RD0u5`hXC6}0quvsUaio~MehWHlP03|9k$Ze8*eZd z9sf{|Do&u*e&IA+Xd5=6BQH{dn67R3sum{eZ#H6k3rD_)S`VrRrT|>MzgT(^>*^8M2uZce>JzLH z8D-d3+`jEbV{F7{JJVBrOW at xzINyYOCcz(Ij-Paw%XgeRQASG=*&oiBo;8@ z{C*dTn zo2E6;aT>B?$|?n5kFrV1RqXJcy>f)c~v;R0+tzTmAq*Q3W_uo6?X2$ zWlK`R)rHULQlcBK`5|h at vwQ89LYbD&mwxgJfAR`MvZgyKU|L@`Mn={{LbgDinZ}r} z?%W_!)u$G$bP3aPmQS}zakImU^{`G}mKZY??}trH at j)BSgdO7_Ftct*v9q-cFc*HM zq%m2et)UG>R{eSzKvfk$RDr6Pyg-Zm52-#fX;1zySi_6IP%ONcRf&J#Sjku{60yDg zP|fSErRiib(ga)aQq^%};9vFR(d)?ma3+fjh+I9FkY}Wjr+KH!t2YSc&z5%Lmv%OB zMUgb$iDVDH+$IOuLHfgeE^e)80HID(VbkcJaIiOg`&pKx>A8o!l2$mvnP3Ec3IJHj zOvm7DWQ>8FUm26jEI4`?!9a6tNGZWL{;SWv>mP!X#y~55w at 6(q-I}S2;RSO+$3aOo zrvmurHLf~UqG9$o-l?RTgvA_6iT;Y}SD-%WDw$?sWb+PdG@;>XD%&x%!S4%`EIZmC zDI|Cxd3qjty^_3XIDdGzslNE7v1DNAi;~u;ZlYmzERq8Sx&HW%>?mS7G8;>;d|6j> z>)Zm?gNoc&$TjgGtn8j~(g0Vtk8JGzDi1>`pTk>V=*l(n5mmwqjr at QT%xy~5ZHn9n z^GqQ2M_FRMq&Z~fm9LzqPpLvT!5#4rszfDw@$ls zE1PEHG8qenn zbU(EAbB6kyDfRK9zUjYmync{h3~5-R-gOLQOsw;di0lrCg5vD2T)svSsPGrtlOl1w-KS`FL20A=}pIVqc zfhV>M9xx64lAcQqFpYvw{B?*w>nX1i+BaQI?~>m9oTUDMB{*CxwH96O(%`GuA#Sa; zGvgUYvnGzTu$slmG$6CcS~X6;9i|Y#NM|+06^y2TReOZ{;7)JG%Jp0?^U%A0M)tmb z7NJg~3@|L1*QErxU%c5oC6ACpV>TR5RChhb(eoR)v`ixB9Bxo{UnHAGUW_H`&ra6M z`yHQ+CF>J3(Mh>nq!Dx`+xA~%M-+H;B2UEguWL~AAde$g9P-9auB;tkIyzeph|x*< zTu0Amh)A{bW90bhG6$JhhN4NKJVhB9 at faS0VIG@xn>aTV1d;B6x|nkVSaCh$*E)=}y z2G2sYl9OmQwEF}eP+&&hNdtbtRxan}pA9nWZW zk4ECk2VePCEuI`1Jd=uO41He+2@!8m^rGH-lb!Zk*KCcgh)<}`KlwU*^|gR*&eQRdj=5449z=WT>9 at eL5Ic%{z4ruV3MZ*}k=!Lo> z0UeV-&wv1}vFnwaZtJmkPQLm>@Mp}7njj;1XM3Ju?;rpTX9Hsa!tGn95FgS3@(s5= zzamaT3bgZ^S1x{(Ybt=`yCWAc9>i at -NQH5LzwgX>!>u^8Eg8U-v1@C^9sKGT0AIVes$B7%MDALP{H;nM8Nb|?#K~WW|Phw;?u^ST# zhZyyf4SqxNpuNi_@!}bVOvnc3Pk*HOR|0) zw3{tMAys+Wp*6!^;tB*Zpe0$95KyiWX;6jSnkLUy`Kwc_X6!R$!^6!U?3|-?*)~%1 zFJFs~|8K3os{!$kU0JI&XF|rG=#j?1`*XZL9ahfTm6Xq)D+^by(dq);p<4r>>jL6* zKUMWA7dJ#pRxtT>^|b3-!_#E-l+RZ&)%u?@-!6|HH-`$!)IM=r-vmmRuZ`;h-0!9q zXep)6sc>{P%xE);cZM4{&9sP==X}qD)t$Va;_0XWt5CFilrEoQ}X3d@^w>ovnzOVyKOSBgKnkb zJhDS~7*0CVFbbRZl>`(_KmtmeH87Omzf~IN=f^w;0KnR=y%;sK3a(A%p8XpJLY9EO zqS^3>Vz0!N{DFnHgOLBB_TzCVPhl at Fdtfer%F6$~GYby1iI&Yr7ZVZDs{mj*1qB=K zZ$)s4h)VBogVPdFR9{~Ph5 at h^_(X+ZTvcQcwRbnAW7d*Td?u1mo2h7nlANRiHVB at 6 zQ&LbGU1)I at lNOQM?r_s ziLkqQ&aCxvI4v@>cBz0fNwvV35HT at 2CU;lJJ3FgoKO4alWPG>&a zj at k*cS*WkN>l$#`xL?kn`S8dTkSlQ{JX$WDF_kV8A!%!!9X|H&nd86eADajHD}ThG zGQqiGbE{FC0o|Pff#6q;P8LyUM~+U$S97>yly!)9+A&`+8Rz%9NeBG!wO}eK zZ=4EeBnoG~997q=rHUNvN>tvZ=&vX_=L2fURmdqRJ at CpRAOscJ5zO(6`sFqXTl zR6PbFPU_Sz^&dF${0cm0_TN$FRdB9Crmfe+@@$28AHzvm at ub_q^wQ>hT+Bv3a=SEF zTn#vKb7!eICwA?cn{TRRFcZ{tpn8`@PI+``JpZ7RvW<0JuHexs@;W|a_N*uTPUO?_ zWIL{wa<2EulwzGe2-Ly8&@a=z>i14`ZB at V4UmoSrQu+el&K+u;Ns9~I#|G*@QXK0q zI~>pa!Xsy)t#abk$FB|C_Xx}RZihHaSWg*lkI8bS1Vlk*QzJA}zyQ98ZauwOlcC@)#I)e7`gl}y; zP$Z!AJiE&n%)48J4Vub3TkKR5g3gk<0z2S+ at AjmA-z;$Pt at wX~ZEPLa0WoahR zFO`T7|40&lILUO0-Ll7h`NDA}aAP6B=fDm4N)WRyP*V{`X(3=%zGxd=)Cmj2IL$LI8X?@jR7wuq*2wvaP zu-!&=r$~mURHjobg>`w1Kku-wfx`dJb=&KAV}X6o9{a<3;ri at wIg1iY(^dc_XH2*m zX5&Z1 at DUoQXr*F@*Cw6KmRjyrF)+5Q_D^Gm#mMh+sm|VqBkHGQd)7Zs3%H=CyG$D< zdzGdP-^V8xq2>&Oso#WVPsy8O{1#-*ypT`S>to^eKJOhQqksrmcun6gkVN&l|7)nHsL at 4R@O`9PD7n zj7=0r at t$m;*8AX at U-l;G3}J=zb%tkiJow2uB1zr3> z2_t*#KvK*pHk59(JG8L~EjMgpS6YJXG*7meng1zKe_+6Sx%kt(^#0v_=M(F0x0zfY z|Apv&w+2QL*#BQ#%7;#}e2bj43 at z6MwjeGF>FeTQSYiLHtdw!iqa0Dl{@HG&x>YTc zM1Hj-LrL at f$wy_~lT2>SWeMA}~GaE4KR0HMm%) z`{C`Lc(Fj=^6rrUCokAW!g2+rwJ)>|Z|>pPL?O^)6rNCHhMlgGJZPS95DDu<;siwOC!)D_=|t+(UN1aKvw18 z;W)1Pi{1ItTJrNxvQD9meB0bXM1QWNsmF-b)JXJbE`Z&_m-`*5oaMh5&t~6M&f+ at p zh`U(0n0YU4+SeXqJLO$Hs$aX9d1aU~s{R1p`)mh#8z8Dd*+6%5&!g1N7$^d3yWmy0 z2`Y!<9QI-7?U%SNu*x3bRG;1DNgN>B|0I&ans_ at AeX^j8aTD>Avdk;M8Y(DEF=auN zWih&8F;hC`C+Xh5g_KoV?e8!8y0lW`T2k|AJO^)6+rZtbQ$GE7uKib#obRGVkuL4g z6t5-BTkL7K_wDO^ZHkwvGI*^I0Z|{j at 7jIGnF*r0!_3(xX8Yiq<8h_lxwiR9&)F~z zL)6ajvA!&zi?;B(M93famx`V|tow_5Z!>cP&!2joZ`U0TEfPB9Z^RvzV7 at KRncyMZ zLG(<#=3RpG1dJ*nlh>770i%_$=5M*(XH39Tuh?53Y?DbcT-Q at X;5Y5Ld%sz4edzey zbKH63-GC(cvKfK$c?n{DZk<}~yUq}|q zyHvSM`*TX`9Wu3^0ZoqHXI-i#$z_uNvkN+RFZj<=!PlpNbw1Q~L+nkWpIq}S(8yj^ zyOT}oZ4}C9AO1-U!eUr~k;J%Ar~c*{%2>sXK#V at nqQZ**yyx22?~dIvgzA$@zqT$7 z=*^FDXZH7jzU|Nz+l4DL?s66x21s;rb*`c$11XgoyOi7Mj$UJ`O~MdIBo+FE(PIXq zDcB(Y^-ZSEsk>|jR21*|xPqIS1I&~Q(&V_3JdTeYf&(V>nhdwY6s++8|FmK6sxy77eRIXdJ*lG7?ieAFJz+eS_jj7|Vo zk*^}9SKjh%%w`eHRjIzWb0}TgoYS9fImI&pg4NuNy+SB&4g{nd%UxEx6>qeX(Bn_! z0DBn;4MiUsn$2(8kh8{@0%KjMXQw+ at ZG(Laley$VWfr~YR{KL=2{DAYO}khI at 6os< z{s)%$-_drP%vxNf2i>WUC#9vOQaZ+LLe=)-TI}KG<=QSlE}c`EaQ%B<|;`RQB5pH#@*Fa$1}iL at dau$te^htg?8xsfAN zB7ik+?%w>q7GeqO9-F{CNVLlBe1eDGTu6%1OuV9#c9EsEd+iRvalrxhiDGnO%ySd~ ze}9rdg1{{FGs0H8UV%{aUppws&&9 at HXHpI;#x}yVa(OOFekk$l0*d`8(b4G7UP-G3o&$3CpP{tA&K3TE+@(?K}3c zH7$A8iO7X_dmBI76v)mAI^-0sv$yX2D#(WKElbN5t`q^kBfPm}caT&kc~8_sX5># zhn?!x{*TZ^YJ#8!Ipx`l^$~{NEG~pP5n)qmP~4y$$~QWdYI*L`s}{9muIIa5!XF;P zjv#M$IV_^8eQ;6kuiLe_DFnX{D(V3w7we3JAFK(Z-370ql|hBuEUO4p6Msu$iW9q z#&$f7&R(tB)pfdjaNY>;Eehuu^4f|}UHS`$B-j>9#!ohEPD$OH$8^)YUmq*f+&7c& zPG at x&)KSVd_=(Z));WFBl%^JBDHSzxjN1vKG-kV8**ZlXi)b_Yv)Rb`nzx9F at k{wp z+bGD7WlM03nuNF*T0{=9nm+0-VHB%qCkP_<7lka?RO(K9t2H7gvuxuYp`pRQ#*R=; z{m{zM){G(J)o*(8PGa{YyQE&d3UjV^1H(we5T+S(N?)FW{~;Q(kXMgpI(&v(R_(!&9>d7GPIj z8tNe^@r*|_$IYD9%ozs$0vmDMWu5k)^%Q6#r4UV+v!1!{*@FPQJh7yZF4hmqz#un) z8;0?86-!$AL&V_A?q?W|)$4P^#}IvciHMaAeL)F-!ByDn#}nHW?3=LR$IE_TTaQ+t zB*ZG{yMX%o%CxozZj|o=L3Yb_J|_YIPV!k|H#ELB?@x3+&3VTV+^jA_j5LmI4m1S? zMc(9^el$=z7WfHPLs($Ty9fqEWez>>xZGSO;g^csW#TOpbr)RjJ=p;}Z>N?$><@q? z*o2jb?_Xse`{JL#*wea~jE(SbhKJE_Ion(NZx|m(e2s3Wovc;Ia at NLy7LHx|X^}_s zk_qJRi~D^#u1KjFT>Z|_cGej at 0MS_rh8M$50xG_SZ9tM5sLLN7#LtUQx9f`c+RYrjU&bXUHi~?#(t$vq zc9o&)GqCS=KzZL$M~LgOe8iKsINO9$XwLa1!78ZB{HS(a(bO*GaB7mGww>J62&pi* z<6Ffk`{OMjr-&QNau=0rs~fu_;WyIT&iI}fzCV2*m-)+ at X4G9y;q@$b89OKZYwBO4 zR9MsFK(pQRRXPmTK5IKAzm(W!A?{n(bwJ`C5&O6EyNbE+NW>n4=K6D3c8eFT0$*u_ zP>3*%)?0+bFkS$VEI0Dp-!bZybe&7D%cEQ7!_{%Wb z=!&L&fc;|h6>SnDOq8 zckjtxJ>g+OqJn@#EIj)m=eBzM+ub3xK$MH2d*nfgG{Pc=7J>gZN86u-pynJ58B|D+HE+Buk`29N>yz!qyXxXOd3v at U@e~`Sam!A|api>KC&X z>W2P0tU8>q?>~%p)klTt=OT)RS=UBQHyhuA2qA$##HicBlZy=DpX$x~S)IH%Yv?R! z_kAKMQr953LuVdk1fp(a(CrSWB1uY;ae|D)^M`lrX0kG&Jv&j9jTMTdhU}HCOmovS zg+*?WKLO0Cyv;UupVNcaD6Bt#QSIl&$@xR|{j*SHuA9xCs2|q=teVyNT)M9JH?woi zuf^3dp~YL{Ce|Zty!?y8zrUxS^J(7v9K-x}Z?;{%5eKu|7LOf)ul=2eiOHhdhPyFp z2^V(koUdDLa1}ulqi;Kxc!A1&iIQ4V>H90R8}i6p0Kz_uCf&FMlE3k8xm_-0cQS`u z#$$f7G}}S)t3*h(Le&KX`{dMW9w+((((%^9_`T1O&&`WaeeWD1Xu~;P{F7 at m6>8Sb zz;?X>1g}Zsk#TvgjhsxGu0w^Kex?QgHQsIROP(b6ll#c|`sVo?mzMQbpf6{gA`H*#s at n zyP+8xeljwCJ@|72Jh#9?(_<3+pEk}=py+bI2KSG3D#-h=aPxPJkam-pceSYYWyn=# zb=F}|q?>R4itt?w^x#1D8s`O~QD6 at V4+135Zbw{H3RUie;Ph79e}eGE5XYp8E(U#iEev*EdSVhh!zL z2jBME3 at e9sqZX7+5npE^{)PQGn=&bMj&Nt_;qwaN>&SiZS;a(poy#=l=$(8QFgZ`e z_xR?SB|=+n at +@eBHXgDK8)Vy8~C? z9XB9f5#OKx7{lZMJbN$CXWHgt-V*zpDXZ(n+H7ptwnGDly`XM`$)RV!#rQ#s_0{%L zahsWu{Oq^;^S%lC1F0L+Lfu4-t;d!*kv0!=Fv}NsfshGLHIjz!k{}YETX!>=Pq-PN>I_rsU5Z at ehi_qPgAOfT z!8`M0yjz|ant$rLN~C>)b4#J?yt>bXm+jl~gqPf6qP?ttDT;>*V_){FqTe^=m-eT2 zzPVJ5jr&7;&5L^IlBG`nBvDf>%4;`2Rbre&V>cXzePVzNHr;V;oyVHt zYS6IXj|8wq#{O+u$GS~O;A6_1);R@?zx-x{>hMD&tZ3I&){Jhzcs$5pE=xFOlk$tx zSFqeUafP0I!WqS_`q81-{9zM2tQgPY!g^s~#U09*r0&mT;Xh at CRGHGDj0So5LaM@yPfMi5`+-f4azVxObM)7ZAt&;r)_ z|6|r}=>Dq?_1-4JH?86Ea3c}^K?8qN6YGMK2dY+FZu)aJR4I(?8a^M&V=3jXJ6tPN z)mPs9qdL9-&R_^RJe`Dx&)6OP$Y^X7_srpu(1P>&R>IPb6eE(|30R{@!byUy)tr zhB?g|MckEtMBnwpw92{Ta+;rtqrAQT9rY3qA^J4Ru3z*lN<=|Nh*msj=+?7&cs$C< zgJ8v+kY3q$9^G>G(Q$m=%Maw^)_d{6FKB4d=qbuEv538MYwqV?=M^GS32gS z4==l=ZqRZWu!AK{%d$rMPqe?>NWDrUp1NIAG>^Jnb#$k?T~G9Ot;s9!Czjkbigw#^ zoaU#V3$)w0+-+x4j+uTSuJ>oAk0j3Xvv5o>pdB_X#WGeO5gy=6D8!lj(Yx)(rqVg3 zKE(O+v4<>Xu>1Dn`Lv0{X+Vu~7CVt?*v=uu0ljD3XgwfCg%?FsO&)Qt1h-r-Qw0}z z9yYwQ-COKOcvibNtsGtfk at 4Zh_ZkH#$<%R(#Nc_IV7ju{8|B#HXsn15t3U1a zkK(Pue~N_{oj&UA4M~pa!Ckv- at cMcVu0=MEyO-%#4&VKY?F4H{E&=yZC#0b*#EumN zr at oW`^!ofx%)!j;nrSXeE2#2V)|(x3>s{uBCxG${mZ`YMr;Pg>h1%mtrxV2nBK>A+ zu9v&FjjJb{Dplv7G!2_cwNQHW*`M^>AkZEL*M*;WZf>55Iwm3Q6JrXTsLnC9EYo{> zMZWEAU=;mNJkUCGE;spc)(yv`aZDgax><&b%i~;hfJR?|d$BKwhmM;py26c#YY%;M zVW{cW*CqX0eWFQYZOLz6r7vKy3D3NLmh6U&ydNqY8(ND-pW8p`38TMsO&06 at -}EvW z)}Bh7Y0EQ+Z>~_1U^_x_eg4w*0lVU0f%s!*bTui<=(ApbgX|cE8o@>xlg*AB`Q%fe z{!-646|o7Mhi^g&j2^q82dwk)E2yH0AAyU0XonajDJ^IWo?$%3hWLFnf at -@SX69dO z6vn|Q-b=cU1G|_Sp#kt*Xw~K0!t8aV*N$vQYv@>@^?XNgfH-Z#8?XF2N!!)7eVZPX{W}dwzFA+MA-!C_>z3qy+y9&J(ltI`)7il$kGWr?;wpCCG$M$-HCo5 z?tg+6H+inffuSwY({g~?>*qRYfz|h)dN`=QN8I5oU;dl#EiO^^ka$KoxS`hUoOHjji{Dt|}M&flM)17~!^tpxUKuUc! zg)*R+q>z_c&}_%68;{BTjV#CQ$?_d0Xu8%qePI={R~oF0a!c{{D`4_#TQW<8mjvR` z?Ty$@Bg-gg;{5QskjxVxeQTde>TMar!M^n$+QV_*^y4QYm=e{xy>o3A(`PtVxV+0> zGY!Ib9K<)U_PrwkbWZ`hnE^RSs)Ca&M6wAyJ9ZMZw?HZE>uhs6Mj6J2CajUOx96J| zH_n6H8zOt9{tCwpO8C$Xj27}f`4`Jjyd|>g&osF@;IrIzkVNlM6Lr46V_cWhBzqXotn3YtPDDS*Z>R z*43n-5QU}v1LPz^(U^XDmuM1e*lYyp$dC3&Qg8Xs@?K}>L!bCwcW3e(Q%A)({c)B6 z@=L9kXyVwE)=9FG1xrY++JrX843k94ZiAoDeM4+#==L;VXdpJbJg19M{1ks>WZkAP1w{lJgqV~Yt!K5(D+|$ zyk$@vOcW&w!G_ at O?(Ptr!QC}@aCi4%aCZn!aCdhJ5C{<5-Q6ALeYi%)= z?dt04K7IS%{&8ySdFGdYYpvndUbkn5t-h9|d9*Ct4>uM4`|wz6pUB8(Nkx7T`?aa7 zPbPtXpvL{}iU_)^p>T80=#t>_<$#B$#Uf29P2mqk-{H=Q;ihIs>`1q<%wD15=@T)%k|mX1v99Nl#m7Uw&w;Bs~Gd@|b4gkz}; zVRb%oA5bPv9i*gaWa|qVXs2n?ygKz9d7oUp(v~zj>K#>o52ck=))ua;?YD+_Pfj!#bttWN4 at -!7^`?@~Erwt9GiVypc5 at TpFW+#!%sD z&x4}W8BI3&r*!;B(wbRSt;1j>QV$O~y1s>nM at m-*zo~#zKvP>oL*Y0Ki0-z!ba(Hz zl&1V6a at SVPw&8hsi*tRVFg?j=5sbK3*@CN%#?b<6%g#|DT%MaM7?!~|{-Yf;Bc#b- z#4qt at XX{FMGhF-4VnuVBY8>klf_!@hpN=W9r}k%g$D?E0g&iOJvTBOjl4{?W_QrNt zx_}WrpXsdm5hdz6 at jT#CpluPWlJTse5x0~7BhxC at 71u)JsMdI2&%SF19w0ZvkWqg~ zZ_;VG%O8I~2~X5~*LiAbc%@O5DLn8!6g1_|pNp8sTx+lW&GwPo2iSg&in)H_Xp4Sq zWr3H?kLUb#CNiIcGcu!mXnJmht(Uj{LAC-RE>Q{pw`Rrv2cJYCTrEvJG}6RJF;F$I8i=JB zigeag&sf>y2J%Q6dC>1d{cqKvYs{VBcW^r-gAT!vlFs2h?Ge*BfbYeya{}`;{f-TIsM&H%~w`BmtbH%r407hY!VdU!) z-ga^1>vhFFShuwP8lmL=`Pa3yz-PFfK~CVY>Yqk+bW|+IE;MtX_ZA@#-;Lm3MnO0D zNSGYpImjmre?aL!U?q#$0}^3T4WfUcunNAZT)>HFf(zq1D2mvM~;oq>1- z>o2^+2J=ZZxCP~pv~vah$-F}b{Ykkq3Ju}f`JInAcm~#o3d+9L>=&Ki2 at rVywu86V zJ##?#X));1d;DY2B{wPVzsdWOuZf`Y#h&+qx5S=Rp!%Y&%b*~*JALro>DMH|TT0I{ z!3y9jnD+=U1n#;FF$m^b6#bKRy9;r&qb2~nCs58h2#MmPc&GmZzUCLj11BItaJON= zI$s=H-MVqF>o5cHwy_Y6p`YCcKY|6($%fuoYM&ZR*6eoA7SWBNo=d<;3UH?IJK2j! z;#@n0Okzgh3}IvsdG9tE^jaQO;>hms>&rJFEw~L1b_Z%F06kD~pzyCTGbUOhZ~pbA zOu-gL9>Pmt{i%ylc4NJ_T>Q?esg at Lk(C{&K-wfHtKGoYaTG4 z5rU^SBEq{8O(5&>7o-Co9CxanfZ#3Z=h8Z)LEFK#T0F2ZX0ORla$?PEqJFe`Ob8#S zmqw@#{TyTG!YgEhx*KCKNVXm4e9w_4P`Ftu40V_v;vWt3=+3yK=M{XZF=z)wW753V$HRGcwpKBXon>e~uXV%(A1`1pEZIr6GP{JvH~A!Uk6%ZtcVNsCeTwFCYM} zLIZnb2Ktx)A7G?lV-M(YNqBt~Z_ at 2EL??uI6>yvQ`yTk|Lk#`5v8)Bchn~E*;PGP@ zzzOahV{oniX&LBEur#yR)o-?7jUC!-TW+ZC1Y-h;mmN^KU? zP^9{qc%=nKDj2n7+6k_s>?S$3rxk*IRsd&&)PB+NJj_jaZ>k-NnUenw z3GP{Wa6-(gSLOLj|Mc6}8yFW_3`dyv|6&ESlgOY%Fho5Ht?@%F3hm+fKp`@yo=15Q zFF4Owz8&SyC;rYx at RjDS*s93jU0$%S=5A<^hql1Zwy1%)H{NiToq#pF%3Y zdtJRQ;Jvp2hX0KH1pmPyeZ9{$iqyAwCrd;5M!5XqXlMUT#s6sf2AB@@Yzw&-3GP$>Z$~aD z4T7H$(wy4Sw12Fl-h_5Vt(4{vn{Fm&U*w=vS7F4y_}-hH0z zU$on*8zP(EA##6C at OVxU=r)WHtr{|(+3|CKRuFjiAo=7Y`Rql7NJa#e4*lgtX*;KvsvbNs^!=IGvxQT4=44399RX! zDe7-ACIkc7h*PxRB24&!cmw)?O?hY50Vj-i-hnm16qUE&zzZxBfR$WV&Y5C>5wrli z0c!_frEJeMVHpqvY|7QgZ)1WUVAIfi2 at yA?>Z44!fM`IrffCpZ3%Ct8gt05{BKPdxjoBLkvfh27Kn4unkbb zic&sv45$DeG2RgdR1iN?3K}<$jA0Wn-eXNf2c{88>AXSPPy;EjDj2btnj)KA=-7y* z=-imZQqJ519I#5T)0E!418#tyheGO7F$bih zO!6h`l_-~KFzk~7kFv1()F2Yf0r)7BAjx{+-7oF^hmj^ulJz{4%LEwqv4BS@*fmO! zA;v&yq=|}TJq_hD28Mkk;86m0jRLfRK42MX!X{adL%EEIVGjm80%6z4L5Ao9w2>xg zlJ#(u%g`A1!GKp|*bTPUK{x?p*Z?+AEgo<>reIHM=8E#z6XU)UAYcd^zzSl;a~T5< zvCV8z9y?;(w*mz8VFOq|wYWf)n1WwYGt-pEmKgVq00BMN0A>&?E)XrIAXI9mkMh{a z1!z6k7N}&R>5#Di=2Be;F6lj zpgfkxxGx3>sKb8HgB-DeY|#Z+QZo^h$Kn|G1pon6*bh3;C6kAF z_#4K3HlR}pwucs^j0Mb(DwvR*F{35?-Vl*jZK_bGr* zIoKX*kTNEaEUF+zaz=vkm>lCi0njOP9**Q54|tV^HKYRNVE{)X3ydXaSSXKiFx;a7 zuadBalpstnoD13t9Cy^P|bIE4w(Gon(**_8JR7_Y^E4>fQvy|^fLAzJiy3}HVWPcWM; zl<_=NZ#lHT8q9MM{IwLy|KSKMhkjRuc`k&%mO$B#AnZru2`00J68*m%p at jViJi%yx zeEmn1xD*&I7X*nIt8mt}j7P5+Gqkled6+BO=M0VY^j&0>lpLhgBvQIO)dJw&F8y$~ zicOy*(@6QYYPauQY|6m1f27j9mKM9L+9L`L7iQWi2|5=p3CX?83 at zN;q{6Vg_{;kZ zQ5g at tf7(JDR3Yt3se?}Kh#0?Wd#}Tt at 4ZLcK`vG_6&dLn2*PbiqDO=csC&Ie*pmne zHy(yYY>XQA at 6~J>h0{FZcbckfT)Xb at SZrO{K&NCPm4QpiJ5-~ssXJKIbBeef!Y}@A z;X8XgS}dfz>OcvJ+%8xA5WAb(m2}o2X(Nstb_R9VeRuVICH=1LS}Zr)D^igRB0L?` zIaqpi*J|uWC0=hGg;vt9DUa{guIlhoGxCq=PvUUIxlcYTK2 zAFf_^{3cGH=3r?+Nu49*R1P1b&XkH)|7pvUk0-S&JAHmJ^s+{K0Vp-1WK4d-9)8+v z6EWV_+UuDqP+4QV>P$z+$3)aQQEVFP;{VRTKR(*`hq3 at Z;Pe1 at 4tjxNYm6(%kP|ZbtqF9N+ zKV6K$pJFRH#bqNoRZN(4r%0H at RUy4Elp?+V|L^`cS^Pix>d54|-uQ?@rQBpUubypF z@~;fdsw{qnaRWMEx(YN7T6NTLaYJKIcn-{+or?{&cJO8Y{ zaw(-6yoU?+#KCQ at 3aB`ITo29CT+(R8L}Ur~e~TN^_3|9yb{_n+i9~1Ld?*jN-%(1NaBm>WUXQ~`Q;PZN(WceH)8K`pz*vQ= z(?#@9n6tW#&Mv9dsXFN}gN0k34&aNcEia9)fS%O!C&V`}| z^cs{t2C52;R?e}21Ku#Z^+a%)R7C`l! zMtXeymvPsoNSyx9*MhP_)bDP0(TA1czL8Cu3T at SuD|7YcrcF=*)@r$Ht;L0_F=?6& z<}OkX(VeSdI58AD*2K;*S$^F}Ot_1SI(sn>BbS}h_B=S}YADv`uBLD$o((m}*)VWS zEHR`Ef5Ol-yj#rOoLLZ3zK!jea3aj~5!s#j5Jlh)^L^G`a|ag(Gbr0fgA}zBiQ%$} z$(I-b`xQQ~TYQPd_VAK#X zDy};JFBbW?nhFVM at dBd`zJyW8yVzy9zP_AK17CN z`{t{i^p3B)Cw-AKhrxstbhBB9nWN8_FNMQT-jyTtpy#Uc?IT3Q(*Wik&p_(%Yx^os zr};UaN`(^!Vcq616c5ETE3{G_38cfe<4cszd)gwt?LU7gad{|W?KHf)8py2HRQcybVh8Ww>|BI1ENftUk7`w{QRN2l)tr$asWy&A4w8QLC#B{ZgG^M;Hc85*~b z{3Yq1KTaMcUS`imdZ~Q&f?H{fT`jN?*p at NiZf6xnyk$!Yb!}JlnSCU}W~VU6vkwz5 z|G3M>S0^i%j>rq#Wzn)EIktZPQm%R%dWSNiMK`EH at wO{gj-SGBk1HBDwwJnj*OQ at s zE=b|)^jCBdn&J8`|Hn#8n=Wq5!J_uH^lgB!8F^U6Fdw<^6hjh8YjWk%BYw at 7qLJH+ zh at 8f*H3kVab9(UlY#njIUkFtLCgL&0D1<&;KheF=U1&9(@B4(jukflR49*3b-j}vL zyt2aG<9y-IF~f88Rc&SrXj-ruZV+FvmRDmJc1+)hm`W at z#0U2t+0f zF=eDrY23E?>Fs5JQsO3j*F at mW6_sYw2TiUUi{|nrgw{b}yAYdJFYy`nm(lLUuZBzF z(y;_`g*0<9ijyb`o0~1bhY54|}Hhj|;lxfPTiy*tIPDWY(e_(Qs~A2w4MI6tq7 zk8N0WtUvF}DYc(khLbnYWght$t0sPoIjW91&ZlUFtzygYipHP6Fs{^>({;&FoXw=pjdVe-&9*<)jXW^h;qNf%m2|gTH^%1q(+f3}uWg{)h_0!W56GXs(`9tqO5NUO} znbt75K|H!X#OPKx?7qPp#=m5frOyuQ7NJ}@d7+vqc+{MFhzhi+kv^gPj|Ny}zfuKZ zOT^=5XHz6?R%{q>(10h;!SW}BVP$s83KcE@`3u65Gx*3^zfl#L3VVP&4`B(zSCuUU zc>^p0RPfp*ypsDk1C9An7sC!NvhNL8Y*of(`0<%ME9e)$hF; zO2stBe(i@>CGUMIK$?Uv(VY&7Qt9l8u1ANG&e%mD?5hrxMDz1YVDLRIh?&(J$y|_dNBNsHm;F z>#fS)GQwCs*!m?xKY5-3V-aUK0Mqu>ASv#4ntvHApMeJI&SO zz~@b(p~^%XK?rp^hNh+5Le+7oBr8#>n-M4nVqTCVe9 at C__7RnN+f$u-B at sFZ^Sxv2 zG3BNsm1eADwIKaUL>ApAC5??%&kSU~WIb+a%89m^=1ckxF}u3h`&C~1`)1`YtseS{ z7VuY5EswS8*Qj9lC=WbOQ*A!hYmh-+WMc)T~SB9D*%BTD(%J^a&in>*Xgp%7wN!xccn)+0h*|x9g-i at 1O z9Q!w4;sx)=XSVY1eXm}*be3)4Uvuq7wrqk*zK#(65X6PDeZffm at U~jDjahi75&Zzy z-feqWvNR6R96E8p_uK(++hP?GVT>24U}T844hdfWN>TcNMd${e&TLZd-0txlfpDpN6IalupAb7a~-X>xy=%WSk_5>^bDP zp?`l7HlaE~n+$L5{1+bh+u`^r?!Pj=NS&+#LAPbyv}1#nqzQYqL?c}aDMTxvd~GH= zJ5#sVFg>F{yzuizSM(p>DBvc^s)NS8pZBh~Yx!~=&fvzop^8r_XWp$TNWAqpCq)>e zEe_KO{7SH~QS=npvwaByBD3E~=@P94v?)HaOoH at _>O_WivdzA-%s)ZYZP5O8DFkI$ zG+0C($fW;pCYycB>?!Mux^F?Zu<-&h!!yrL9KW}F%H{`)?%SHAIOa}Du?ULCMEQy3 zga(isKL(df!sMy?^ov>#k~))e12X9r3#m~MW=e=>DWr``4JDV;i z7PM>cmbua6w@{aU*FO%E4_@)g=U^CTe<~N*Tj!zhzgs#8VeD5n at s&%>2*Hm& zey$K|wFbW;+$>d9ODvZx)vM&RV&9 at d2lUjhF|K$vsJcS2>}rwLvzmaAC8;krn^!QALwYohG at 9p~hR5U{uIY4Vi%6DyCyKV;sS&Clfj zGIPJ2;s at Xw-k*6I|8Z6^Q{2BGL8rU;@z}e>N|H2++v=Efq4vu(myXY4Iw$L=u$$vd zB%Wt<##3aWV}X-&v#Zn4aYJ~7GZjgH$R7MaI at Xs~l(Sl^OWh0xc|l_Jx at A}N at J;Jt zasD?bnj>8ZOLQ;3QKt`gRr#~@)s+ay=z_q_UMFcSgc~ITv9KpSs|@*Xdr!=sDWSi}JZknE!1l;ozoc6`pLhP^LYeJplh60uAjquN@}0ar8%H_tidnHoRNo%4LnHL> z0`i~T8CP&I8fd}$u?zLcz0x5u=>3*ZWV%64>T28im at vrI#KHfifB~``f7c~TV}=Ok z4<&s1az(BSziwJlG8e$HZ`=^opjBWwfnZ)e`$78;vGUPZ^&Zu_yXWU3f5#XCG7KfY z9LqkoyqzZYxme+qpKH)Y4KmekAd$ z)2m;|1~kzf5$EtANDI&r(G5QjMZVOB(c*7Nls%qJqC)mbs^4}sfXBAqj@^vWe{!u* zd{Bi0WcSv#IBha3wMd(dr-jN at b~56Yp2biQ?73Uo53LccD_U9(Y;q=(jn2)>WCWMT zw@}MWE*xgwAlGkO#w;EjT(=jZUAE>wwQPA|m$j`jsIo{^h)96)xV*@`VwYv2`9TjxrR<+ at 4jf#HzAy20em8aQ(K zz%BkjK`TqT>#jL-P_=MMrdjt0?LytC^w6LhxEITNnUhjd;=G=VhVW?bletrQ%JB8BjfZp<7{ctc^>_XFO7>O=>}T zC%iVLY=3W*s89pXo4&)&pj%9%=h-)Ey<(R=DM6pZ5YU{Ba)!i(Jl()sFWY*~t|o%# z{0)VPfY?!+$GSrX-M>R~bbHZH^-(Z%Y1^=#d9O^z)F(o(rf{l&ye4wjtOh;D6>al_ z()&PIp3CIDwDRuri=}*J;E=0F<4H?GdnHc^itu*Yo60p`n(Zem`KN!{@Kz at NCn#~= zODD3(w&W%-$Vqa~gMyGy6K-!b3BOM|*6qdplF7mJ5!&Ud=c}o9%2B`JV?g*G*E!n` zdrCIO at dQh5RUOQn>DRnU6JF}jiNh1PXcQn(aHJ8tx4_SLVC-7*zWhm0dudQJGzgo z(|EkW`PWl&-PsT#Cw_W)GQvgSssX|ajR(B0CZrr%w7L%;{#~O- at vsd(m86UFa=bD3 at Bv82;0v*Btb=Hf+X#Af~1ji zf5oL at N9`S|T|eJF>s?5S%z-T{vGIA|sauAi{Izr8U0o}{GwP at 1)7=_#;@@55BjausiXF86To;a(u7}e* zZqWRUzRO5lLj3ss%~xS`je{>*5=zYrUX81B zO4{XPba9pdW1`sCI+T>I;D0c;J$1;^-)OxCdr)8UcK8cpqbEZ_~3TIPxM0`?z94e-8&+;2_ z(U3q;DiYbk~c>P2T6E zR>}Y!M at JBs`Cc?%lX%U~*(5GJl-v=Mq;{?*?yH^8!zBp)uetCHFCveMi;tivXi96` z at Q@E-aPGsNHE~GW|G%Kkje%@2-Zm-TZZF(dW+{V~gMTrr++LF`V=us&4ZPni6XaCl zR42dXEAAD?KH=Ai)xU{9E8NBQlv?5g8+US0Wd+nc7}#)kcWk=v{&}ueq`CdVz#l=r*eAv#0r}S6tTn9 zHLzK4TY>ZbfEyf#i8Q=x2(*jU+-Vlbue**z1I>DB=);Lh=B*4y#wjw;pY||fR!US` zq0y2sw5P3*O*hBp6k_I+`dKxBSHh8{D$;100l%JQAAaMYP%dM6P)VWNF~cW})dAEr zIYKd~LtF7-3D0euM4n2anw*oS6~&+NM-1B&D+P2wbB`VL%lMBazPUy;!w`U6#nS60 zm at Oz3HVvh`Sazxn{!B&*&e88di#kz=>X$-`A|&M_?~j7tGm~(zHo11SaF1~Fr4S(A zOjgtDeT4>xS5*|xZo%vL2|5DB0b{i3DzT)oiMi4LCIZYjseFX-({tIC(hXtjEXeOD z2t at SAxrieV+kVgomVI;Hbk85G8(PYV>d_c^(wy=Nn|z{X+8I6y61{cm#eLo)8V?${ zevb)M#({QoX4EPzr~{Hh=rr=riVm)>YyR3>xXE%nbc$3O at oNu~^afVnW$cT67`-l? zMTjv$|8Rc%($T1_t+y$P*SHyRhq|Kl1l-_MJqq!j`{;j%P3mdi-bf2rnks#p!52G) zPv3-yOzk^H1UEvQaxgY;M8IoB#S_TA9AwFP2yb`1NJL)u3&3v%wf*Eny=cni;bx6J z-b7dd)#7!Ovw!Iprb8EA2ylOjm~CCA%m;Fu=!PMOgZFulKKOwnsHYt7G?FAT{_qk3)1 z{e0hwYyJOv4akUqRLO=ONG`9U!jBGfV&;T4a|t|c)=485C30J{@@07k?zsKRILeyp zXop9yx*08wo0a*^&EmAiF!kg0iY0VIbddjUS)my at 4+a$F3I863gj*6#oyg}t$GSk} zrw*{ZQ$id4Tt|`$I%UQGtbW0N3c~x?L-E?Bo<>YO$1A!=&Hwr~q|-kIynL8}?6|uT zwCdu_byw&9+w&p1Mh;CocmFxKY-;^m>2SqOCpZ1?&*j3>*rNF%YiTv+1Y3x~i6Hrj z^Qi^FFMnWdJT`)EcLo{<{EASOiFI$BFaWmiev7bzF13iAR4a001%+qR5Ox8QsMU8S zm~*?*i0g5WWb{%$ zBj^b1!A%(WYALAkzfXcjh}ZE4Z6qciU)5I$h&mN#PPTiTBvo`0BHqn*}!l+rED z#2Qy#FN8Wjie=ZmL{8kd|ML^VX`a8vT3^oBOgS-CAi-`s{N(t?%3JLPy$xgHrpU{=lmGIUi>^)jhBu`WE~h?n)r!_O5!ur>zg^-r+R}0J;~T|2?$^%p<9& zc97t|a)ryem7<@AC=|?28J!`+sf4(XHEBR}-I}vKx(+9yU1?UF|vyd`;1G5k^ zo&#~+gq-6p28huNvcJhg8(7{u*INLW!EcguTEa+^p}jWRc&)-7%x(KLYwmS z^N46AkEQWiX*-u^Nk|dfmVBLWwEvq0ofmzl>o?%Ho6OhV6|&`U;6u8n3KOv!DIQF3 ze^}ul)RHTa&3}&^!Rs739Z+Ot$x4I?qW+Bx>x;-v>6{5A{6!cUN~<0EsB-aqP`m#L zZjtzc+|pO;f`c5q7D`Bw5S_dxq1qCmW|M$iB79%@$X>BZrEim9P$Jx at d10#EA_J84 z!!L8X0HWn-?qMOWG%&#|;PlRmA#fhmI`zV;De2kKh{Y7wjQ6KJBQ8Dg+ at fzvh~S(v(HKLUX{-V$}gM4 at Ff zRN at SuA(@Gx;xV!5q3Hh2z?lYuP~@)y`H%_M@;zrTR%cN)v%y;= zoZua&);Y7`N#iRQcur{Yc|~7nk{yXL$WynZ5-6pGfUR|*{oNPl~-Ieu3!p9dV#M4>OO)Un90ILV-&ty3*FE|KliX8C|0kx3G2 zqT08KelVt838Fb`yc8{LXC~fa{Iuobi=u7mJ5}AEtr#mYq{(nhGeBi>J<-~q{gtes zN`rT+h!f3Ti5;>i&Fh89dOE(xh*#oEmibnuU752g>Y&QFRI15ZP`PfYbs&)X$AdA= zF5yun%5c_eE6gxC>m7rf!p+udzLFhJHPbHIQyS4A5z7rGp+CDBjqjIj`Ce;k^Pf4?1kt(*ogD96w(qj zx|N#PXXBIgu5_pRNvm+-TgqOAiG}FY2(5#=rlwgCfb3 at WnDF4 zLe;Dp$`NX2ZF~DDU+x0V!j|4^>;9VMW%zSE+GBZwMm^%+CjLI0l%*(ZG4NVK*-1s1 z;@OnoztQNt<=~lGOz|>Gu%i@!gpuO at KU@W%CjD7g$Z{vOGU^YRb; z0u4{Vl>@V1406E)cF`;TS2Il=HjlvG at Pw0yB*^8>?y=3cjx4vOo0%-F4%B)`4$l$D zjn2`SZ>^dgU1>gEparb=8seC4DGn|3u{1f+B{w at +T|n9nuf}>ER+S!W7*=~*BKWme z+Vo7eOz72 at FHKw?njF?!3#&u>Am45 at N!lD})>~U9T5CSIEY|`RT9v*lx3ZX_uJSq* zJKXg$sVpQpbUBEw@^*-(K=>-(?%+$1ni)R$3r?rAwR#F9PT+Fo*{pRQtoX4RRec?k zW?S%>!qrZulMJ6rHC*wuN7-OBJpLNlx}ZlpSEgHP064FQYW7lVstS;k?>Ru{D%?HDR$lxiYl8rTf4NtEyP$i|4 z%E$xkF}x)qvkpgsAsRjx9xFw8A@(+KP#Dxq{2q{y0?1Q?OV>@d~ zx~B`hxBbGHBgw_W+^%KQ$@nc#`GY)z^a0c=?8#W|;Of&MI}&?fqj`X%>LaB|n!kcL zr#F1Ee;Moh`5oWr!&`t at 6zO^11xFx*vbG=Y2D^Q35tFle=!$L4Rm4m7?d at v+%t7-N ziSugMg1fli<%>ny<>m*+(#Bop<)ySz{oi+xsB!GC&UVJC5>a(0VY at +rGt{&5iLUmk zK%!qw7B?QeT$Ez8xh#HBC)Hihx-bDWm&D0cb2GP83wIv1b#r1m|D3R$4W&5XuL4y{ zszhVSu-ptC%v{YnUmdPL(Xwhkquf2zSWZqyedxWh>#ED!dJ%nBXx~W2Y`>H(L7K{s zDhfo)Nl+hu!t?^0bTTS-PBVbE;8Qc{2gF`ByExl`0?2Q2{SThKQN=eA#Mb>?PI&|F z;Ay7!iZ@$py+k%IV`Gn6;&D}>CX%IsS;9P(W%;#j(OMakGWv^G&z+P#1@&AH(U~fG^hJ0?~k{NWTp)c0fFvNXZSt>- zZG<8K7T}GA_q_p5X9Aw27X_~3_RDGHgJ!IVv9iU`5{|)h=4R{}yA(qo7TyoC$&ANn z5fwhR6yc^#2kXsA1qnyxz0P2+54ha)DnOsbeJDBaiBqq|I z+6s3z at +rtf?i}~_ED?UUjwpJTFX;5jnIPRbj7$pp&%qt0 at vm^Mb6JZF zZ7+iGxHJ3}NC!iUS%IdABwx))WNwkMXoCHc#V$Iq!`BnOo*IvwiKg^;vOFzr^`b7U zA&)}_QjVl)`OI$j+Jo>;kM#Wuh2c#NROa_W9joRK$g4?$Gq2WWfK0c)ZoNuJ#uK7N z%n~1XhsS9QHDCQ~pYVZ~K>L88P-HV-WjY$Ew-htVTDnH&KN+Ydd`|T{6GT;CW(;by z#}}C|TUt2aR_x6DQVAFP;`}sU4o|nI;CX`!|I+%u{PlAnIiC{Yy$e=Z;99;_RI$6R zt)kGGgX#FP#rDVQEZF}nW3Te(*aGM68`;Zm|C6SkR;zZtv+Xj6SR97FwZpEjORd{q zOuOz9_fMK%E at uS&^@{GpwN4M}4C~vBuS<{~S7VyZGYa{&hKxZRL_g~mZxwzO`anBc zv>XDUD7x;TWG at +7c~QaJWDrb3;l=qrZx-y+rdeMt2>xY)e;Bl6YG>AxI<9<_2#a+` z5JxY(Z|0TApgC?=vHU$>(Uoz_z^;C+9lxdS6S5;z3tG`+RMMNAm=U{XCz80~rm*is z^@~8L at gOvEZTIfxzsqc--`ZBgG;>yds3xRj({m74O`)W%+m6DHcwy+uZT-~uRuuU1L}+2*g65Dm8OsZ0{}zVf z>bAK>)2lBs=tLCHquXn`18zpeI`y5%e_8CU5-1pFyFp>lttds at zsDAt89otGzb-IH zu0ggB>6=5puqxu^ZUl6xRNQ3wPs2If1s3x)Z;N|O{M-}T??8cu1Q1r;S7`ZSZ#g6P zzUssVh=n_7lXVR>BQn~i_;O&2-%S at 4qL!)`aZ_-0_L?Akm<1o64a^?V+iyWpk)vDY zhs8x_z`nY!pttm~Ww%Hpe8omW{PZQVZbcYXP(HqHv{iUFEUQfj{+uu!dAJPTKK}(x zT0k<`h7_k5wG!jgp2`r!wI==*Cj0E6{WiJgBxEs-HfL*T!YH0V)Qb?7^GZx6yCGG8 z at XU0H3`#`g$AsH&V<8f?*Dbj8Rv_D2&YdHG^?5=^kXSukv#L!V&a7HJDyb&d_1m4G z7=WI=0KpY1YowbmeGB*fBwv=uQ`|3q`wM4ow9l5>#kBpiG{uvZ=RMD4{y-*deYu`Dk4i%IdyS at 7+L^+k3o4dt*}=k`nGRE5g}D3hF_R%B;LpZ&X6f!QFy( z&c*K#&E9*G1Qp>8UItm{PLX%kS;f|TUH_$css+#9L+)DQ< zxi!ncU7xqEqV1n2G&%^jjUW^jd#!E=2tk0)97! z5WP5=t;VfDcs{2`rV7k;7AG_UMfQf|u*IMb6L0-Et|O9g5)}oc z4&+-&^Zzohp#FRF1~R9^tG60y at 1Fv3CQJj6GRhD$thE1}nYtHtOH_9cHE7a>Rop(` zL*gMBy=hXs2SG^?`K-$BAeh>ty*CEfp|h9eTGwr);*2|v`Af`_Cx`Ym8M?I?S=Bfa zm)arv!Sbkt&??S{0e63nFRn*#zs(O7fX0PMQmOenjiamz$EM%MNL#E~t5sCdE3lDD z&C`-6Oj-~>A9dRWCC|*%UvftWH+GEw1dTL|T^7t972gKEi|%NvCZO$JIZ?F1U0HTJ z^^nbBo?B=w5 at Oc&jih_Oduu9~hZu5>@WQQ~if=Mg{Ur053F|^>EX=IpGxm*(8xvbt zsoFFV9^l>M&MSODv5eAbL0Y#u+T+#QtIGndEeVZNCb}EckF-wOoPbSPl?sKNyV`-i z2p1mR4h~|B_HIOKt{xIngGB3MP+qDVfu8vfN)+=J8SW9oGx1q(!jRz&ooCG~1fiSC zsqM)LSkuVAfRDY5fc!W$bp=hLyknQmZ5-Lju;EWMswKP^jkoBby|)6s7%30OT$SZE zF7Fkn<_2^Jr-lGvUM-NfHvC4FBfb&U)YA?ZE=+La2w|)D>kvhXR;T#A(%A4))x(?T z7s0n)6D+!qE2g))?d`4n at 9L9fUzLq(fS%unk8MRWbg zBR8tr+_bJ_lr zN9ErF$KSbcNe{L8%$9&9F0dEzt!r>AE3%be1iOqWBPjohFbMGe-ny=`5pdWgHnxN#B7vWl% zjH`IM6PjMPOmn(g#BjRVr9yqDqQ5b82KCZYsQ${E8QJpp_1Dc&nf|m?m5}Sg_#1f;&M2 z1ee8Kg1rO+Ebi{^9yD0c#odDYBEf?McXwN0kp&j^&sXQ-zd5IRs%ECArst{dXY8im z^vK17Eui6&i-Bk}0f*}HbHrsG2&RI^DS)^93k%fQ^hBe0=l!je zyLQ%f^w!DP>gr`qCi>|&jeLi*ekqqgOGMXz!-o)62Q05i&494sr_^K6-vHu^hVY0| z$k+z(@!V2>;9Y&Pny{L#c|-d{;d;%?+x_@!@Z^ALuhB?wJE- zPjq>+Fnb~_dVXI*eRWlB!f}PXh6ClZ!&6Ukq>RA52-(2wH+hhDu21o`HNow}#xoEC zj~4xn6B}n%R$(6hqc)$7cYQ!6%jeGSxzn}P`|HpgE-_gl7*_6D)Sn3oC0d*n9c8;T zBsd4h10=8VF*>HPAU`qBd*eboJlervvDy4xlIZ at riHgL|K&|Pi?bML2qy-$>1t_jW z at M%DvMv_(Ogm%U05&CCvb{@4T*lxKlVR at _8)8jVar20R at NSg*_6D3zZEn9_N2&q+e z6%|{LlDeQnLJ5#7frQ~9^?MFbRT9jvis<;~#dXwMih*0;QzndCQ4&B~{@k1b=e^N- zRkDN=3kGWisvUB9#V!t_fB~XZd{r-8|err#ZwpCZ6(DtxKGU!D%0R9udd5oz! zji+zzpHRCRy^qJ0xQbW%sk=3^6r!H|dImd5z8M~J>n>eI9Lf6hh6M5tp-Q=5J&;!C z-|Ju70*UZ)chq}7o1{zZSzDhv_oGjbM^R942$B$?a5_Pz;{0m~HOh5`7+%LT z8C>`f2f&%hO9nlCwAH`Bbu|LcPTbZV(DpKgRSyCzQNR=~;l at Zb6Xc6KGF+`{EdI?j z-LwqrUnU`a2{%25f32JPP0BWRfu*Kh$TE!DT$6v-^13df%3a^(5W=^SC5HMRkOV$t zw_&8b(6D$*8{vM`X7}?x=Hvrj2TXb4#THNC=K& z-ebr4WI;h|f*?GKKEgY1WH?>)mQ*{{_K`50Yrs(m+`sceq@&F?{Ti825SD4!CxN_= z0hz9*2ALzw_TC(53eteu4#8G7K|gv}qWYu6GA&Z>$rg7GecAc}uD$dyl=ILT6jM|5 zrO{Yc{Q$a+%XO48DRK13YaJhZ%bdRZ|6b!Y#M2>pD2}X`mY|7=6?ED}{=hjt)BRB} zD5Xi`_VrELE(@~r(CZpXR4t70T#V<|t%4%zBmP`zE_YPH1IT(=M8SEv(-0`(o at 9D2 zSuw#2U2v;3cDBinA=U*1qUvj!Kv<1_LaVtQPXeX32g=JbJS at d}=o3=S4$BQ(67+Ce=o5b)NwON3 z&JlQ9H;X0B!no74eC-k+YEIf$-*-(y*^cCdpUAx^W8A24nhbI;0%;DD?@3)@0#NhoSMF=|+tOHw`y<(tUC#QBcGL(wja0q5j1E2l#ly zdvPrOO*$WNS02;bG?Nzl`b|a_6Hwh8u2!9IZPQC6VoLLheb@&GC`a>-FTsiVBV8Em z6ayfnmIO?kOZWlr6~|GF_cO0PuHC$|B$FT`sMlvqO6Fd(&Hu=?~k-B1?kwx}C#sxR+rP|ocg5%9VtP%GC;%2>P_P)I;`R7>949^r+ zxFboCsdg0lF&|ykIH+Np|4Yk}HZIdq0_Mw)rA?2HNR0jDmTMtW1 zlqX=onPyV?+VG?Yn0d(aEAXqdC5Sz!^-2xwEL#(;@ZY9}6l^w7i}IG1^PIHpku<-qoO~*4 at TO7={W{mYOWK#y z at WiE&7auG40I*mov&27zZ+3`yKm!+Gq38nxUw=8rp1v(=+Lk%Q$Ru{%q7O`;i``;B zUavlQYLcX?8=4(f&1pL_Az?jSqj>p{=PTid at u-Ym3j=a5kqX38B&x#}bh0;^pW zfxZA`ynLLPO{xAc=NA*^!OrK$_v#A0x1Q>wn+u>>XRS5%6P0z^9u?~p+ICS~Ui90Q zpbblsEmqg?!Fs4czzQGG6H#jkdd6qHlY)2`<0PG59AVZ3!8n7_TPD$f>P5s z+63iK)`3&qIm(+5$`I8aQSRmuUMR(2=ayNRJ6 at 26>}`_Lb>83%0_D;#soZz-mQz{y zL_B|2;!UzY#P}W)`kL9D at R4P1gZo~1rHf?%S_5#hnl$-bQ~$f3z^zwEp at gX8hD$$X zZ=+s!dPI%nq?VEliE=d43*9=`;)2by1LD_55cFR@(ao#Ld>k9bFnn)XE1KXS)a*^> zj4SxG?-}qPReYS>_(bzB at jQ#-C2^eqYB)D5Yx5G}DPfPl$70s=J5C#e=Qbpn$&q(S zUUy&Lop7}gSgXg5!4({`HpV)q!|Z at aKabvD&_tBEj#KiDEeB6Oi9v zqjUBdm{nLce5wqWxSzD(-WD4)amJ6xG4rt at 3c|nzdt#Y64yWrX68lMR$#=dDUvArJ zzL5ydy%P_(D=k;r=U$2Z0nX^z5=;Wq*xGE48GO0zjT!qydD?#not#*<_m6K;I0amT zPu0|1XlI!XEg8yopQ^25C>?4q-Q~8La2yVX%neh at tdWVYj=UuY9qtdDhub)@P=ua( zzl3u_POK)+xgDYpx9rzqBFCIpl&5c6NH_zOMvB{c3lX?*Y68?xDh7q7ShrL)S#Uv_ zGfIt-haMd4&fhaZuJh`Dmj+JBR%5yA?Vp_Q)o3t8cz*xLXpVBAxF{5tSR2l2os6=g zvA5Ic+cB>e{i3#fxFq<@LWx};^Yh?J4M!pXS$By3g7-7`$ij!#5iJMw?r__vI~DTf z;g-J*`M=Kn-wVH4^KEh-(8Gg;hyl|Fbk=t#)%eA3X6m{DEtrn at T7Qf1^37kt5bMVWZ zIqXvLiZgla_%QC&S?j1;@dM60tsRo-I}@Cn zZxSP!Za8PbL$^ev at Vzy-gHf`^A1vaZeQ>#tA%ox&quV1s|Ec%=bUk=Ic|H36Hpytv zNrmlR?}dyep3iU25~QLFACck95f|i69s#Xh at 0i<>o|LLGa&Dbzx3b}!HvTi-(vD9- z7#@Xd%g8g~UA`T#x&tW;o|V&|1I%oct3nj-k)CA`1II6)13#{>HumFu)wgmCZ2hmf z8Ft6s&{#P2jd8T)4fWG3_F`TOX1D~W25mt>JGi)tsCkkvTW~yK#4lft?yEApYcaI zwGOSLJlo$2p<_cpbudBnHd(JDTonv(^IPQt6tuq)_i>wC;=^yq_>B|ZGA2v}JR+r4 zZmgj3Ak&6V&fkJ at 6QnB<1Wv4jG7o%R$KB;3O_MQhR at CO1-=T at G70x72Y zv3JTj z2qeii^D!5l!C#b#9Ugzm_q;@cWJgduxbPxq2F0x>--U^}T2W0)i2ZtK7KXR<$B>5B zAH$u}b1z5V?dI>I04bjAZKm?m1 z)>aS*D+I_C@$Vxfx{M%QMmU}$yzarNFI)Yu5HrL>17hPGF>#JSx<}~VgQH&nqpvh( zh%GY&UK1j?3->_Z*g*e)jjzLAwNzJ^e at d%uLdWQ|&hU~qeQ_bZ?(;%g4s%AwDo!T2sjo&EiWfc%!Yfba&wdA;#Nwe1Uwsl&`wb))7iW1gTe*fsLf6~MC zU(wjYwwvF2skh$H`}_*ysj6&0jl2oeqN<9IGEZOUDs at X2RLV*ITatNRWDraoKlOKv z$7FgG&}iv$%VK}JM^5sW^6jgoKm&^KeXWHJRSKHNCCW7VM zTV7RFP)4}gp&nUOq^)~kU|?WLha~@lpo&hg~TA>g8tNqSnaY&7mfoKQb0O(9b4wC zN^a at GvWs_@4>^Htyqf^A_Cb~LY2Bv{ABOeVInzuYe&SC+ at oOqMzn}!nTX0p4 at dDrA z2p+~yspK6AJt}#|u#|nX-#)Zc8Z;8+ztxr^r&m!Q zN0=39QfXgmP!E#SlO@=kIt2n2Srj#ra_TTabA%=3%!)~HsdnhmN1>H&5iwqMoT+;&=VG ztIix?egByw+>h9}4SJUD(~|=9zw$!?zw#K at A1qB=b;bhqc3X0QU00o9z|7q{v!EW- zdTiJo-u3EuJ@&OoCU7fmDfQ7)!Z-)kLRCL^MQQ0#uWD;Oc_vqx zy at UpzX_5C&ELb?c6}dR`%adp5qw)6>{gCL6N#)H!j*Wi#n-3RvUGt1SV^J}>EY*CM z|Gt1H?3<6qpvOrK^_LFgo&sAM77Vn#&`2oKOF)5FVZm5FZHXXKu_F;`?IWR-wtd*` z1X{w0GF|O98(oVDVRDy&B0rF`tF}^RN0txoNr_D z>f59IF==_oLnL-%Io1)L1@<1cTg3ahmVx$A`$(u?8TN<0y8&Ux4iiEr{C8#g12*RQ zE?(C81%g``0qcxpqLX2TBlPi3AkJK)PYN^MQv{!T1WY|3hNceBVtquBnvV4IXI7>T z7o1^1+a#uGD|9x0pplvvP$^Vw)Je(EPt4E%NmcadDncUN?;XPgTyhF*zo9m=Mz~!P zMuaj+8xTdDsSSlKensZ}NF4D)OKQoOtpu;H8blqZavC2SdcYw1BGOJ*sv~vQ-U%2b#$XGQSI6tx0XN at fY@EzikINPntfu-7eBf z{TmS+X#-5z%ocVjuIh;9P+iF_Y~P+R=Bs2EC;4g@^$x~dUH_JX34tu>}ac!*wT{iUJ$ zPE(j9vmlssx+d!p#KQ=>Uc=iP8)D at i2k`%AoQ5z9WoI5A&EYz`+W}n#)XHR3TcS0t z`fCp!m~Bb-OxYbga#J?~Wm{8~eGBFi%xW{@1N at e5-0J4v>EaGE*=zUM)?nAGT%Sdy zcR6T?z;m6P+FwWM?#6#H*Ks=9 at IBA4bApPC3Ek4p=Z%DpYFy2W&z zoRg(Que3;zJv*N+W7C|?@2{Jsm!2F1U1>(Ns)%$0w*s$yDO=T9{ikt_gsNW4k+ADA zhgRtp at 4GztK5YEWNY`VrGG%VEDBRxqMJb=m;X-%WbYr1+RP(7w16}lSQ(ydkDEWq` zImPDVUTd at _y*CeP{Li!ta3<)M*C=6~zc3y7!P z@^@+0>U|kJvY-7T|3?t_iz*&8pq~-S;~#g8e88SKesthE at s)2Q<4zUQAV(16%VI9%6L~2(0CtDhx>hnh3a*sdr#}W_t~a;P?*T z?cdVIiyEI0(>|}BJ2zkX?nh~xh$JhYk0_lr8I8+7IE!S!uoJ!iwR1i=^K9b~ZjMN! z8cPn#2n(VZA8`wBLI!*cK|FyBC8Y4Ua)0_cl`j%qv^{yVEC}oyDJ{n&C>$D9`C!p^ z78JIZC$8E__Ta)zmL2-N zHZeq-%+=T~ri(aAL>u3aBxcV*%8)iwhLO}FnB_HU$(i8w?ZD_Qa?P}X;iU4(aB!gn zI&JW9 at HKoIXYfccWJ%p8!4*b{{_B at 3p9YwTH}6`QYIZX1btC!OK0qR+m%<#f1%;<; z-txQpw-&|_-|ZX zA?AaI>3W(RY;OSeq$r^aTP7jr35YxaO`b)zZ0~h(vOT4mU7HVwLn^PPTtBH{5n-RY>ZuOI) zz3iBdJ5zeCM=~g9(4hZ3m(C}Zl;D+WSySXHk3K*tS6hBJzWO;gqR=n15b(q>4UiB( zRM-fMBg4>wDYYO|3By}xutS0w#M`STOvJ!fcvB?f at QWK_hA6Me{3Je+i}YE+Ma2yk zJMPFL^7K`t(oW?X;i{JZtWexph6lukVoJHRlLK zkh6u)$*nq0g(Q(^Ejs|pM-3uR)WZxmAcQ4t`@~#j4)2bfGBG+b!{Llq*GBbD1Kb+O zG|#24+>~1>Z)nz>3AU{Xdbvq};u`5?q8i&xpX{~MpJZO6!0$e8wZAlaqQaKB1>u&X z_c65qm+q{qdbP6GkS!?~9xf2^(^sSn5mFc&bp&w!>OcO6^%O8g-^7(x0eHaQxN5h+ z0LQv{R9x*fi(ZHFq1bD8i^v(ntPGQH4sf!Pp1*ORxAjsn!gZB0_;kd}wZ)tA4{q(u zPX3CuW&GWnEZDnvtAKgnZ>=bC%jm at XaK-Ru#R+rz8eTtg2vD(oXc4jVu6JOz>{_^A zPxcZWm_E|fBH95`SF at O>`#ouY1!zxBFwdqI)#ldmBhfU1ZE4|jN7E+)vx7bkC_Bz% zaS};_v#iD at QTgb&lvHcvM+ at jNQy0HHrV?$e#htD9NsmPNM0|Sx6y8*x3hEbc1JmDt zCY!3SQV+19g&TrNpMXVP9JGF}yTd=*->>oHT)7XxY9*_0z{*pIVr6B zG-V%m#iF&u+peKUNcNBWXkH{%;GJXYPI3C(hKOsNzhg0_M4CW-3C9SKDm?lI6F-P| zI at V=fQw0{g%jvsL*H-_L1TdVGpn0Ol3lq8=rA9&sU4BY at Lo-66eY+66<&h|FC*CA>ug^oxC(wh!pG1zVqLbvuswnV`==K~?sY}I zSx1JU>`(8;7n|SFT>0lyguaI3oKhkMQBSpr3nIUu!zF*b=9~bwml8ujC?P;z`Qj-YrkmchL9!fW$GCK8l?rr-_u!Kkn`m!Ra`U+$^NN1A;QstGtG0}gP z3fxg)32&MKqR7v9k|9?kL%SotnIJm>R68Kj?=*Yh;l4M8UZ^nN6J at d7cR|G4q+&U_ zuT8!zebdZv|0uh9y8I>c*9RSVZQ^9T9}SvYlRi6{Wn+U66@|Czn_0&+1p2SX4nPuL zuRiLd0E at nc05vjvk>I$WF9gWbObsID9AO9n%EGXtivYjjMny2i3};Gze8Hg4L_xW( zGQYbkDFNfR);O^=W@&v?R8r8hX^ zq4lGXVH*2q?3BMutGh*T<`G(08pK&}gS#&)-|mCPRK$W88~i3{RBAOe%e=CBQtP#-&?%(6z$N8$T3_w2=gWuk}_~Au9zsOxVt7f0j zUD#|mbgM2w{_f=PSx2tX+>NYHLMQQ#%%M)=*?&bSjE_AmxRZ6j1f+BS8VAVIDg-nl3y z3D=QJQam7Q(3!~aDi9Z};lkYy!e9R!IjCUy)SSF$pA{q!okZkNL^?9db#(Qne-HDr zkaUTQX*qx)x}Ls0mE@}>(K at r6Pg%SMx6LH;&x=en at HY&nax{Mx46XvwgG?erf0pPa zf^~nvXi%DIwu^uMwu7H*gF=}GHshiVVzBATju7}cC`JWL57ph#sJ0vdE3lk!Lkjp`w!Y-O_-aUdqjX2RByt7 zAd%8ki5$#2ruHA(gkgx(ZR6Q3QVfB=67mQcmym5r@&2 at 6@_v-GVDWy(TeDXc)CaD^ zD^gTz?I+9P7=SWR^3&yW2-qr26!VgHSrz;2RjNVqlM~?xjP9w8ApTit+nKZf0u{n6 zlrs+CJSx9Eo2CzndBqCDK9;K+vHVG5+^y;oGK-GERd}m1{3W>fRv2|j%a5~vm;)CP zzs;lk^(^htvuy+%hLbx<7y?8NWGV+lV&U6w z`n`$PR5qhkyhXo)AH~R+CRsNf%Lk#4yE zQ73vEMBq?{=1j#ak^a#8PP_9SxeAgboXa%WENM;9f2bm~uG$a_-)j12Tipjjur7aK z%g34r>&o7CxM67{aA5Y~?{AR}F3tsQ>tSBf!R*8QF?;u=caz4O2pyQ)Gq$~Mq5%x; zsoPv(=rJG-3=-DBbGec&R1Jpqh;1fRbXIWYKN2Hk8&X!G+F_y}^F<+M;~Lj7;oF2a zkck72s_8vcim_lXf_0VKw-^HauCVr81RXAjKXj11Ic3Ze6}_7>U&%!qCHja!O!E4a zFieFtzxH4F9>3v7kyUt$kL8%q_3e~nT$bE|3ICB_Z{H(qi={nwoBJOpI1Ht4PabPi zwvCm+x&Ls~GyOv)jGDuWkPe$f-AecbyNc(+{l^ByD|6H{%uVG6$t$TabW!1Tg at 4R> zQc>DsHO`lG5fzUCss3Z((f at Y-s&o3BZGfJX3wHwIlEo+Fc3Q)Qh4VbvuuS2$Z5;mP zDJY9(cI3gr4>dUU({D!RD(6$ndCH$0fqiH*?!PqC`bi{jGH^rm(&-CHnM~a%)A1)P==!{_3TlOc)L(W??v=2 z<>iKt0Sgj^XMakWd361RC(A7)&X2~KOxxWS_DiT&c+fcf-`dw3Loc&(Q zO;`VGC#5%SeO=a`)6cU?ug=s;9U<)-VK%!{LcuqK%8AbFo10o_l3G8N?igi%Gtike zItG_l*IA`hJLy~UFK;$B2(xnaK5mU>_i5tf2ugLNFQj9xRy6wgPWI%khfyAL%@GRi z*}%`rSdxM-FiwD?yiaW%>-n9h7OHxxWsLFKs`(N3EX)eKiPWif>DWL5DD_M4;e3^vxf!zox}`FWI!@DEn+Ql+PqaP1ixQwfV+R#TF5Gbk4o z6`2>z?oSx#gc*cuQj)v5glh_Yg6E=*?J$)RLhIEsR>Ss>nM(PgNqZl-h$oK*!?&5eE~Sw9BrJC?LX z*R=Hy>T1-*IE)Sr4r>%Y`G*L#V16KX$yngf&{=MrT}35p@#MdZn46stTfqFN+w~t~ zVNOW;?L5A( zxUM~z{#Rw?Q_HI)S`eZbkh2SiVMf1FvIv{STBBk7pIpgfU&jb2&2DUA0iJcG>37 at O zhfUL_%wKMwVjkTDY_r!tTLjL|)r4gIDUS2=HqtFp5Y9jSId0lWWLIE_^q(cllx+jW zx&V$lo}mx_Dy?c|t@{FrDEkCM;jU%rR2;8f?GqOZfj_!fLh9B~J%l(@GYM;p_2`A} zT`|LVsj7pWh*Nd(_0bNl)3 at p{+4W?0vfh;HF!8^PV*jUTGG;94NIMJ|Sd7*i-R!s1 zOzbPU0$M7Si;_I$nZ`g5 at tssJnllv^k4lb6LeYMY)c3TPAIajAX6H}NHOUG_dq3_T z=5{K3GqLK=JN}JK)a%v7_mVruRY%osv-}jqnoewk9n6xhb!xb+bm~i!xl+k(bjjv* zUFbNUU{>B0>eR`8YFKKysO5daS(i at m5I3>StR_FvX8&IV8o&QRK#XMM?yi~Ns)3(i zlc_qhh?K7mMGz%Bz^!zoid6#X^!ML`J|*150VI6G`MoA*>T_141j^=l!Zuoor{+ at a z4&Qov%U?uwGu~B@^w944htq|uvub-fE)N-C9Uid#tb(xdS7=jL8CF_nkY!I(*$0;l z_Q(H(&NlcbE~7G7jsMd$Y;CN%x!lEKMQ=ua!#Z`*(FMC4KjjU0Z at g1gCFl9kO6kBv z=Hv1EeJeR8%`>Ep4BfaN7NP^_B;9mwuoHuz>|u?$N87gmsgb(cn!|CNchKo_k}i8m zfxh=FUU>mLGQB^!fU2q7b?Mv%sx8RZR*3*2LouDOkjX4a=uZm3701X)%}t%1wOZB$ z0q)+3R~Gw|SHB}R38rc=yGnI|HgP7~^j03sSlaS&-0ZP>NcvZG;rs4Vl at 9kq@BfQD z1mBCkJYMUey$X98%B2iXS2FjrHe^9}wQm|0iPF=jW|PjJxJ$X1iTi^N|V8VWazbzZR at EH1vtq!u)3; zY#HlO+aIQ1SlIja1OLLEvZa}A_s_{JQ|mnZBXsjSEVAUC_CVGT3I(IC at R~Fudgs&8 z;AIl=p`rgK=)a3Nm-p%Yny_9ZXPi9W at o&6Kzi%(--Kj(d1uwnHZ+?2;n^8? zuN8eY6yNrra}{iAk|=u3x_|%m&-fBfk!99Q&%!{Tvm}q`PPHIhk=I?SY`6(XKSugy zKIigJWGv|54We@;BzsD!$q;$weKS07m!N<6! z)>wQH6|~(+jX&#kkj{ny3z!N73v%o;%yinMbv52y8ET$7n?`yDZEmNA=OXNOrT#-%djHOpsIA4^jdYs#5TMUxH=pdyKcv(>#?C8*WV{{E z<&v%`%TNd;N_!~zL`Q1TxqAQh=B7}D>O^2tea%xr`w1nq3zcfr7~6ySP2L~FCR)iH zRE8 at EVSLTy>Jnle)sw*VJOh33Q(Ec)=7rhBp0pJ8J9MEM@=SEok4Daa!aqd=vA;`3 zWp`(y;#5OqXaqk`zN%Z z3YquK_M|Zs!1qU}lcDg0q+Fm$J&T0Ia_Ny8D2elK7zSc-d!$LO#5)IGXIIQm5 z2P2GoC`HLPn?-H$f^R?~Q%7Zj#jxChUH8BE0j(_4*2)amm={@E1QTmzg0XGXih|sJ z>;gNr%luAW`qVjz?y0$>a z`>TttYtvn51FMa?{P0F|+cgvG7{{bIu3ejDJl8Vms*%S08mt at op0S z*=Tmf&U76XwMbQ&hx3X4xv|HS5#IaB?UTH6U|j(Dne}3I at -a2*<K+`X^2^z)>zIqTXYj&EfW)}af+!QAn)(*ki at gMi(-IL>Y5g?q^m+>ip+ zF=Pr5#J$O$52~~Mb-s1~65F3}yr)%V at x+!dx9dBB;X|z;W{o^a7DRfnc;wn+*OdZ8 z0~KCqrrVbCuBCEougP0x&uGYJSa*kJKAh=Qh+Uzq#@r`pZ&}NK at nTLFCqMq6dzaTY zF+Ey(10B2`%4?ilqD(BNp&HAqU8y;aK1}g>Dx61PcD&jQ5-kL;Vfc*dtbQ|(=LFUv zh#qw$mTd|J)&1L;fMqjv&23jdJH^hiySqma>Ia1vwF%mrhXiTX|D_8G_eubI!dAMih8c#3I at XO# z$4@%`cwL{J*Z at g|`P?w`RbLt1Q?xwb} zD^CdfRjE(bblC3^m1O?W*YH-$_V~C;rG3MB-Aheo?}aq_LSmKP3JQEbe9#&i2#MlR z{PMH!TnvWP40RCW6`lW>Bwm4|A>XEJl5XOl`e;K5(?=`GT}N z8FXs%@3rmM&MowiZm8?eU)BeExAyLoV8f~=DEo`^9`sB7+pD9`mpS<#uzq>j6Rxs^ zkH_ zQSb+eV6WQDMXakOUF4&=7C$i=W1+HWPaO`AxCfSuBv|zfA$+ga at 6^i{mg!mHMKE znjfY)Y|iCu&Pe-zD{kJ)j=40k0o&MsZ};b_ZY&#akP_{IQVP+tz+4(zG2ZWM#d}R3 zKH#yt9#=vCT}E{lt~QdKL{{F-wkrg!B}$`?4&CiYzW9+KHRP^V!c}@v2feywJdtM$ z{mU{S*P)2$Vz|geU{pqeb(u8c+Y4+2=Wqn|rA9!)E7T*8RqP43$@T%8=#zSqOjC-D zF|{V*8I9=ikoH*fi<}0%A9K9kE6^W^LT%}K0m$K?Q|znI43B81HDFD{du+!>?Zl*E zW;RRvA}R5MNneqX(N at BvIL9Kh0Bxv~KxbYu9C at g!XL+}lMzXLdfwL#GwRI@&efobj zeiJ=Ial}oCtt??kR};;cQ^_j`0fpmC at BHb7bX!jeyC43^@;%Cnl}_5*Mgq%&TbAPS z7W;5Hq+w-!q?6L?@$h at f6s6wmL;kWt5c at bms<`lO%!r$2dK+*y-*zpc_~7}9r*qnl z1%QtML;vo&@{QxJ0zBC$u{o{;4fr%Ej at H{Rh~5jKK3T(x0YHEe={~o;agFamOxsX0 zs4!tbSxW)v7YN at BD~5pEgilzO=DXZ5TsJ0slPIGsSI#_OE~1vn`7asdu2BOsZ9hhK z)ZDh?V7HkP3GqNa{K32D%tBny7C!L%R8|Jk_dOYU1$S6T8C!ex at O5x3{W5iR22 zk7v%}A=kz$IhP6FBhOX8%NAhYF#JbIF_6#DF?HiEc!1tHaF%my at c8PpF8F+A`0Ipu z-uEpuHGXU5x8PM;L2c~26+M$bGJ&B-VX|%J_IfPG%_ICl#X*os%!K?l=ASP)w|n;Z z8ozof8wGm_$0vr5VkA}yHiLKl{AK+UX4_7$qsXmm at K65krnEBh{2eXc5_}X~6}6bz zOZq6V94|9OE1xBiwxdR9D_ehHylmc8ac#u(J6ZSGIu-wDpNZPBLy&GV75$m3oslfq zXZw4b-34%%_?!K?D0P0t>1Ej4Vljrp8!kDp?{t?_r at Ghii1Uxo-H9@NDE%&Ol8hlk z;8(ALIjDDhId>HJ=>_#8#n at h@^-5!;=iCez_gFIfhu#z>>d~e-=mdI~II$5wlNn52 zqsS*FAXC9G_mIHc&VWtUw9dwz9*C7Nlup&MAqxeMkMQ4;KeKvZArzrY<}?|1xgyL2 zB7U at VRJ=?{A~SA3;hTv}Eu=FC?`7FBn9G&(?-=o>+&c3}0{uGIc%`FOx4I>PBbT*z zozJ%374huhz at _KzW>fnS|6cUWbCU}g=V6j(uGu3lQx6VDOV4GdAZ-c0b$8J{WS0MR|6LjF| zy~v`108e5aW^wZ^Ji*kaQls>xHZ`c|XNmWToJKSP!LL7Zo|IP){f0Gc9p?F^oe>h{ z4ZVs2Y7h&%fY#*u94aBEwF|0#n1Mu2#7~lYHHpbkAGZ&8NSia)84%o+VXd*&GP=wA z1ZA;9eK*$+r`%|8gB3czD9UA|h*3c6-7&GM7}YCz+s6R>A0{2(JB9Q1i3I2V4G zi%xL%b)-%yK;wzNq;QF2YDr_F?ddHTzko?VLJF+QAuqX9L8(M at U$fgjdaWXm0Q~bD zoA>mR{M4n*=>J at -aXl{Fnz|`9a2o#lopAO-9{AR{p2sY?tdLZ91rICQ{QJ<};{j at 0 zJkDpoD8wBX;h1A_gv~@W&c4vF!*i$NhZf^^vJTRLoj(DDJTi#~$>qRPvJ;x;%4-g8 zf}%Zl8v=@pfdJ`>y_AIFA#9jLKjGVPX!8-t$WKp9jDV+!R at ayy@9hVtJAb^FGU)FY z*aZc1&GxjiJEh0Vo4VjlI^L~iZW2GfAwsaL6B>k06tvtcM zLrt5?+$M40Td4h`8^W2*KKBUM)2Pd8_(K%p4NmpGE5R^9Om$g}G$4+w=YYCvbaQrL zCs3-yp=))Ik at -<%5-9RzS_wuOIa#= zgl?le72>3GdHI|2^$w}B^q=0nzIjzE4n0!o7M;(HI;FYHdjBesX`@ZC@$;jVqaia^ zOj|4Yzz&ev?P4TS=0 at Qbq-7cL$Mg2wdG_z2c6?(`lJ?^n2pV*zDb?7fMbl~+vv{{Z zeMvsh%f+c@@$B*19ZLogiIBS&w$Yn}bnh=hk~Zik*vP66xvkIwy>;@V&>;#Bp(|T* z=e at E+02}b2%zh+INsxBZR!*9o)P^IAtiV3MM79l(x|{AlJZDH at V_a~!Mwk?F z)&BFD*|XjVtRON>W+rrSokq8r`|^!pYZK#x9fy42(Akd2%=3=Z2sbxFkdQ$ChDDz3 zZ~UMxIid44{4=VEbCQ&F_H3igcfUD|`GN8x)5Oq`=y@>FV{}|L^%2U6$aoR&-OXxL z9B#4Lye)4)_tkx>b;yDbWk=-k2s1tN8yYod+kg at _iMV{YUfNa$XKOTc`x`C=GEFa> zmRk*|2UjKkc>bFxUygF^v#1t8jxgC%xfuM>ZRWC3DibEVwfDk4tjJUuNj<{k zq~T;|I=3WC_f#0Wy at H$Hw3=Hn=dkle?e|swGyR>gv*tQ{*6 at Xf0d^O5?{w8Qvj33r zB`6RxhP>(jW81renqc0qDFPM{5v4-}RJur!P6C3WARtYoD-r2LK%^!?ks^d9O={>> zn)Dh}2%TVPQiFuvLg<8)|NHx{znPugGv{J=o_S{XoO7|^X#vMDI@~^Em)hRWtIldh z+}NYnNqRT*JFC-3BcBAW_P1frrTe~SO6`UW2Zu}OM7yOagZjw9ZNVk4MvPG$EVP*0 zwC>=`0mhzo_ne-ll67#EZFEub{TO3!5yeIsX%9)OZ7=JqA%e?1B9}D{p0n5R_9ZX{ z3PfFbn<$t_(TcMYmu(srxtyGhBg!qc3)GYu5jtP zp5PV<-weKUE~?}+d$_-^{B6j~w%w>haIDR at I9r3_v8ZE>)1$Ei#p7Fi84i+{jtpY! z+6rbl;ktmJzc=h3f5S;^ED)OE6GCs)um at s zr_r-bpHCm`fkyzm1bomQ6CeD=24i!_x1D9Vl`BvDO`!DW^!t~H=bvU5*j=~ghgkTi zDqhq`rn8b`uYnrzQtN$r`z*;b4ZVUagNXxGM}XUZFK9mQ4}W&G58V5p+lGxr z4y{1Z8ytj3(!`rFhX4cJ%drQK16TfPvaP7M1Ao{h-X;9D4EX-V%h=Jy5YpqpQUmn07y2lSLEJPzL!2>n*%JSn?>=j|}W2fF5LK4Xz z3gEw4T#q*=)-~7{PTbmMFAxk8sxN4y{G-y(fj;9_PVLI3SdLioC}uu+V%$DZ!vTw{ z0CR?Ew>^Qg;IcGZ;*R(+l7E;QTn>O3A93#b2Fu{F2Pw6yDdN<-jT--s^uRsJ4J381 z0rUI`oXP*b3r-s?QlFYB#i)ei087e5+ju$m?w7ZIKq7~xv{yIi*ax8M1jO{7pQc`-AD+E7<;PT|Vp1Pvy^)urd5$2U}gKzQ)k*Y}TGFV7 zWGce`*ZJ1B9aq}yM{qs*b~IE~QO#L+t7X^EiDSVd=0T~Hfjq3_f}hjV9)hBoC6|F3 z%z3ei8#NWgeGJ={@@u}4Ku>|9gWB&z?{tVwCK|XGYNFUy3fgAWAhG&JP>KJwf@|!b#2lD< z!wT|y!d7Bmx0i(Zs|Uo7JDiXm^yM67&rUwk!WZFR(C|yAvWyNZo^K)*Fv>>OEq9(Z zvKlr%p-ohVDBLw+y_ps=TpaR%Z^x*<z;VU?pozLFUxIq=T>fY=K at CfbL^s=(?0*f^mKe8ceNPRb(Ya!uI8dp zh!(+b{oJdZP%QO!fUqV2to=E~9oS^Qk~7KCD&*G5Bj*kC*)%7-7+--MCiVW|Y8?+I z7B7FUFJ5*iTw$ReFdO$TqPHK2_)}QrLKpgtXT_w);zU0LZzq2P${g-CPJ0`ifgs4fpGlvI}6cR;bs4iyrW~-z*W+-vjtL*iRnG# zDa9tdcT4Bj$&D}hs5#BwnP%|6odq-6?wEZ>h=cxCsB3JvHprmxy3ujF=(bNK4Q6t2 zzG;l_!E!^u>%XTREq$*upSkB`c&NI*#~H`C|LA#3I~VDp-Cho1BiVsX+`$^B9lBMK zDrSdqPx9r*{VzmmM_lmxei*2E82IV|@e!f9%+|QyA~si;yyIhc?q$uW)xJkE&Yu-p z#=RZAx7NVM`;Rc1m-HvX$i?W@&x&Gu{bYOUVGB0q+e-RbrlRDa!ohX_Z_+-R_TRkX zL(y-Gi41>oTa(>2TLahb^{S6_y|z}6-15Cf{JR8FnAc9wd}fo(qp0ey0Dxk9f~e%V_zp5>&y z&oV9~rMZaXVF5ggE=b1S8fr5RRQ2>V0eR{YMaf7icXsyk?mNmdMt|v4F{~ zFiqTG1UxEo{83^qAh-Q1NwYNCBW!{4!0v0(s;3^c3HsAD|a;HE*`x8NEQ_^#tmA`bh9&XGoPgee#Z3RH(Dh<`+!Zc>Ugv{pn z9#k83(qFAobIthDtnAd<@CM0)sPQ;U>@fl at Eilgvg z%7{<)<7`7^0=tE~CxUwX=*NmUMdqZscpmJr-u3ssB|nmT at kH8F+A0cnrJ;8DI{BVF z_-0Je1=Juh6CJ|8*LEE>xHtQsFWzfoM)hMLXu=2b at uGhR#`WpRnRL{YbmOFF>c3{( z$MaclT+I2_Cuoe*h5gvO6cK{T@@#mBu_%st*~WccK=JO^1#h_WF5xE>wEN#SYs6q# zSQGx_E*ZF3;=h%^{UQBAYqu-BC&5b3j> z0j%2#&M!9B!9 at Vsp!_7oL(lcG(WborM-+7m>&U-(@-fadFGkT2X-dlg7A>#^PaH~Y z^^~&zj$@>o zlhr{+bh1ME{v#xg!e6dPJEr(1m}wbR~WTj=#NRrf1Daly4a*qN2W zd9;?=Ib;nl|BnJaHsHOH_Q#FBUFQ zqU7%%hyJ7;Y_`v`Gg!|kAvXBx(%RS}fNUf;`S0 at qzk25epB|BIDg95>)2|#!g}KOk zy0)gDPw(9HHsD)IVu%J`E0EUBdEYHzkRTfd7Uu8O{vFE`XjT&e2w^wV|i#tILBKwM`Cm- z-6+o4$3o-aWKHF+s=%EbiHkALb5YJ}9GGR19El-zG9d|lawAA1?6ioPXwbodxn(b* z*KT?#C_KtJ`Wi<1vr+14=|XDRhY`=L-f%$2yf4{jOXd8krP>m=y9;?g$X=Of;PsM> z{i5bZ`b3Obz{P3t14_{FI1x(ea10a(`v7w4C<+k ztf;iZQCun>7MrJ636NV7C_q)}bq9&e*2tzMPMkED+2`^I?x z7m$r#Q=BuX3*y$avi=@2ob&`jGRRTa^gPUb3@!YGu#91CY_Ppt-2tJ=Z$5-UP&UnjA--%ZN3D<^-_- zSRA$H66K%jVdRbo2PLm*mbzCdPWfl^kMb{O#Qr4GCIJpOiG=V{{^gvsfa?3Hqx{bB zzIv|jNtD-yFX7GV^&s*)mJ`=tCwOypFSUl5@^AMQ{Pd?N`Fl(8m)?^fGzHS{UDD52 zw3D at U3T~d at L$iz~o}2Qa#3GL2sOTozY^>T at J_Wgpdqei9*AcZpX2GEbn^i&th>v=& zMbPe}uSWnz$ua*3tjOjBO3OdUGGFteMt{pu$DzM`)#QxkVC9m_ at fv9+YO09K(2bWOT(KYy^Q_;BsHF at 05Ph{sG1DXzjWXuEWb*at}5ObB$ zIz4@!^mG6qR2_aU5N0fdIz;0}tr4OTNI7yG8n;#dqClO>3gVP at Ag#%6IvCZ#g;8Ix zpiEz#^6pD5n<4(jlP{kqJvuu;~jPw zvW6c6ir at FoBbStg*v?7?_HhLt?(ak^^XaLMGM5S_#-C-^Mu-$rJg&4G5ssbCTORHZ zI2#@EGaR;m6zbMzM!L%0h+*5glYXqDZF8y8!A;g?)Sl{df~fT$g#Hrnu1{loz0U z(n{Lq^(?S$yb?q5x<<*7LpFUph9-LA{}t3LX}frWo9EbHNx2B>!QC5U at iwQ^59>7B z$zbK3uq41K^zbB6ckM#JU^=|JvtaLRROwyrmr3&HlOhgE*;0{!8nk%!SgVnvLz4$L zxIH=ZQ-}mZ*T5Sg2G8}7Af92Wi*aR*FY5>A2CWgoM8HRIis-zh>(PdpLPiSdocIKM#_zJpZr~J;&J!LlBHzj3t9|CX?1fB!H_L zI!BAHeA~qjxN_Ul)<3>jr-EnvZ~Z&munH?KJ2!3Mj&Ff~wuN)Fu;{2j_rSYI=f0}< z$+v!;h+o0sp5fY_!R_}I6q<465W}UrP~^n5z<1eBa=2lB%&*Sv&IeCR&Qu%V3{`(x zlfAa$C-*uO^><}-gYq?ZS_{}`M4!zV^qa7zo?rhXbZzmh28J0G{8ONLvbXI59?sQ> z5mhx;3Im*VoE)3DftqN~L(;dx`fXYe};>uH|K ze at Wo47cLS0vH{m|J_=hQNr6#UH~A;*4W2p)A8Ke~)%y=$ge^P_%USyi!Di6NU$MWZ zU>mCxEv3l6yeTpAPmSx at Qz@Y{20|;!)gq&IyAnCzm5& z at ax46*71JHN9P#V-D_>EQ=X#l^D3wE8=hjtR_DGs;k= zE){vkyt5 at eXg_prTHXOuu%7z75lb*=vk3GM4$k~JvTnyZe=z5pGGl-|9>?ufwQaNp z>R;7x-`2*4Tt9k$BwMhRLJ6fpKTUV$VQP+p)vV7a4wUcY5oibXHEUmu)-is at pp7@i zRN-F$T-b=8=kCY*e2wq;{$Y}E7l|A0UN!z}gG<4ki_eTPndio7Q5PNDMsZCtH6^Yg zu!4G=+TShQr!`!k-?x~x7Mu1ZK0Y{h=3z@(k#V7!#~pm!vliU7%CYPe?iL59zeP=A^m^b70WrBN z2kJNc%@wz?F7`FSITVa~a)h=1GsqR2N8#6`y;O{FdDddTyY=Wi_)gQD=t*}Hwc4q! zhuKah9ji at oUwT)NtwabJFx(IDy{vI8=xbE*ft1vi;B0%SF;y!|zBB`OjLxfmFseE6 z^AM8%9j(lPk1jA1zLLTsIA;I6E<@JKuc%A-_c>Ev at uMno`U< zo+F>g)g7uzE!y}fx5oaR2J at OfYW=FTx6BfyKD!dYcJ$zCeLOEF6C(og^^w}weDe|I zHe?SD%o#xLBWj*?Sg|5ABqP>X7#`{GRxuDX8f25c$BVn`*8vEUE`dwVt^s!oDKdX0 zmc~FPg4?g7?>-R);r+ zb=sYmTTnrlV|hyvsXnK0grLjNzm1sVWbYFMxl2impwkey>GQM0JnhPGtFA-x=Go*g zIT){Tv?9hc2K~7nlFSa1E_CJtzxpoMzQVx=Vp^t-L=oa2WVesalO;*uvz--PgXNQN z+~3Yohz{d8Ci!bgs!?mjf)%-Ko;E}K0jLV at MSSZ#PECC at JyFawqjG5+;TIBbsnifro?T{2|{5KO9{In67+Ky|@gzw$xDdE9|kZM~{as-(f zJGd at IEE}MGKBRo~2p}hdBS+**KytQ4pC6BPIyt6guQ|8~FtvFV$g4T`)xw+b$b(!^ z&N|=}yAG$imleDn#Yy%egq_G&*5R{-w4T%IbVtrh&rqB at JMU)Y5ht!*_sw?0121%D zkWWm=#T422fBw8MWEa7Q3=>32{Y)ai<(P`zPWQ>7J0|uMg1%}RQQH?WzsQ>LJ|~}0 zwy`M2Zot;(0a@*{a9e7~J=AEM#fUKlRE&gcOqtC?&q!yzx6MGBDaJTqo)vJr#L2y8 zryN&gH)oF)vqL?q5EBmj`AhB%><#PV+FK<1rQe<2{KS1?Qm6C=YPl&|_u6IZt-!=~Vhp*%Z&cr(_QH556NO_&g#hQ}!`!=w|?Bn7fdGn8Jl< zlTyD?BUTkyg98=50{^4}*%}LHFP$~IG(LpMj=vaD+Gu1 at _5c0i_|Qd4bKC#X!B4}q zgBDkV)qdZ%L&SjI&yQX4sLWf?`;JIE(uvkW76j;tll!mapiOYMrRaN-VPjyd$$pzE zO{zZadk*qgdF5d9kPI84<;od59#1K3WM#6?-G~oIBLB63-xd58o4mIu_vcglcv-UL zNSIHS$ePe9S&66QUC6_rlNKj_zvrwETZ;ndz58-pc_PERIRkm{?B_+%poqR^k!j?u ztv?xIa&`xt#%11`J$I%?g+4ntxS`ohR&5GK;s^fvqg68e&3(UeE-XUou1&$N?L#l^ z(Bld~1^;D%39`W(-Z6G}C&lOA3HvPox0agQ9qET->7az`5y+&5IGe_b(^1iuzBSec}RVV6QEmmE%r6 zzD at c*`#{7n$FN~8$9+Fc>7SL{%bg^H^IAd;_or%pgl5Q!2JGQinN6X_*SOToV=bKF zuHeLzwPWlYf6p?ST%i%;&xS6#+JNiyfGAdNC+x^*e(y*>c&(Vz11 zGR2Yl6Yk&97iKcGYz7<6P1JRyLBGsCHhw0$7>q!QG~btgNM0w2R!z%{gU z at Ul>^b$WfT>;M}t1RJb1y?Z{|d27l#NG)t&n?MuL!2E`F at ns>Cou9z4uZR3ZVZd)v zXtMrf&kGVY at O${0%lueIN-;;CX{5|c#fg7_Ouj`@@kV$kFwFm{+PPxSJZlCr^2$8 zpfG_Yg**!7>wiYl7N9aLNwyv0Y*wsvpzF2 at Sala#w4W)UEJ at C@8SYTpVLUU}0lZra zMBj at Z@4YeE8#h7R{Jqx%CUBJfpy3InM+%KkCkuE^0FPL^ocG`1-oO_+!An9GtH;K% z$FB+3ub$H<>N^LA6Iui at XC_~fZ8t%D0NCW2N+p>?9IldvD;=rLTwWK5Fp}5n)O&Dt z3B-Scm|eiR-`&H$b4lx<=l!H|59<8dEZIc8Vr^_RFbJ1X`0p+GqmprLbQbaxrbaAU zstnj~xv>NA9<%}ju>q-=)K9oGv>vu;CBI59Uk0bY1!&#R&-QcageWY?z6&Wqp{5n< z4JIXAG at cLyHf)m%6r at WX462|zpWhH*F~5W7_ zn2LS^MUcqthaAeFHDKJbbG!OwPz9z5wg`y$+<72)6s3__%X(}-V=e2tHv92^bXw=W#@B#f+Y*0OEK7%x2+%rOw6_yS?_!b zduC*?Rz^{;juJnJXw7!aX)^GzuYsI8grw)sE9<;}BJ{!N9Y5Z9&u8QBq!t}9fccci zRrb<_?FFr_zZE*Ey}?)C`|p;zqVj?vKjQR4zV~Ou)vigke&^Uf&V{?_<(#y-X++-b z^S3_qk~*|A!yV=J!* zDJ*b4uTd)J&1qzUs_~ga{2kOi^?CLC zqK6*c?*b(ViM(#}Uy_y0CZziL?OOmqHr^j{XBwahNi3r+_0X!3bao=GYCotEr-0-T(}tf zAfhUM!aoyZ#;UW`{_tdB_m$eTkKu%%o6M~qkI^G(=sfSRSYybVUEoM{mP6r@?V+bK z$yPHiVJo8`*5TUJpJu(P at Q2c(XQv_73G9dt>topB3-TK(JIcYxD^RiH{-H);p%sUF zii_rvpIgV*<=9oj at vJ|2UQ>b*1l;zOtklNh>D;w7&O$*xHORoH9YvYD=}nx-h&i8y zw|%pqZ7-wp^Rq9)*}^*~UVgWr&1{)RaMO)g^nTul`^&G4KfD^D?ZL?P%rf=VNEKH@ zKsLAG!SnaPGPR~?beWEQVvvpoz?~Y7=Fi)=Q~gzssyWIRs6$1N^y>jn4EO3gX~E~0 zx|i;3Zfge_fBYe3E-iR*bh(AYUzbz$1_6hoG)vHpzz?7onO#zYKS*5=jC2yWv z#~*x|AKL<#1PUj;MH3wVC~i=smqQlkLx6kl2tFBWJmhCl9rA3pxbd;MlBdYc^}iPy za<=MRy`Y^2nT&!QS^h1nuIF*D+nHSp?gR*xIpr(s|hxDt{zhZ~X7!bd0i>;}d*E+kG`t=iVHyuZ7DFmr};OxsRM zy;v(_ at bWc3qYLy}_C!Z;)RTSb&h-7v(+7_`99v(+ z=}b8rJX$gW%kX at Jv_8o}Y4~j>Tl~WQxC>z&#tpROejPo!tC>^%m`W@%DTgh5yQW96 z&344eCHu{+j*sYqB-W}27Z57$*{fo8P)EnoZOf8RSF8Vc@)!QOG!K71X-p!mANl(6 zxpLmUuF zr!n~$PW`xZhcM8$l^sYUcW`q1nhJqy*|4Oc9?bHwiE$HQG1lp0TB0O_;l~G}AFo%pKl~T=#IlK6!R^ zi#5nn9p2&>kyujZSerQ$N3nSQQPY4AJRubQ`}dnCk;uO1@*yX&WG%}-&h8-Q at 9f<)et+&BTK$mg5d{c)4Dd;BG;3aD@ zo5Moeb5*s0v-)hhWRF0>cMN-Z*Dmb^T at t0^q%TeX%s`jj6vXwnd|#|^-`C+MN}zQN z^(%-n8$Lrbs|q*b31W6d>9ZHq1x)Sxb&LKQ-Y|P&=|j>{1E(B}orjBb!Vn|ml|$7t zN{&7a(jQE2W zqVMlfpS4WG#?RN#H7}RNvq8VNYS;%GL=EmG!ty;^Nz}f-gij0Hbr^$ihu~Co~_w&|L at LwZ#O5{q0GuSIOMa%;)aC z*ABA2I^O{?pFX>N?(lG%Sp0;@&gH7er99FW4wyxg{^}gM#u{uXzV?JZyFK`zF8-oP zTxUPC)XD9a*yxBtqi`ds4NCnGyPzBCPLQ%(hkWal94Abj9;p0p{KmLdIaJ~dr+ZT0 zD=g;7xG*(1v){*2mibj6aosA&n{PhyUK1qb5)l|%`HSpPwQgpFvy14SGYP42g-fwS z#zIIfY*1`amaCJ9CYgdHNIH#G8uw9p#@Yi#8XAx_Re`42QnolyI_ab=C+oGV8Sc_| z(X-quQZ7!Xl|0oRsW`8kJOa}*=uUV?y0fdzRVECUi$DLAx)W;nF#D0wnzI=naN!{k z$o9(Y#3=`SS-N23wG-`0mW^vxX*3pueU zJ~gkIiR#IpJ?%MHLSTF+t3%3N*|)>0*a@{>1!U;sH%;7iMbOv3m_w4&C?BoC6ZfRA zOeSTUp4$l^c3k4{{lDbg1Rv(w=lr~{@C45PUeSq%xpB}!;4Nv=HDPB<9Atd^Cn&`B z_IHIo_ at 7SFqFCbThL%m3#|@;jqKv~fGaUMpKYJ>>J-D_;pStuC!j0_gnf5xgtKQ1= zBeQNyj7mTa^pCV!MKcS|=vu3`;x=zzrFfPQM4rHDA{}f5BS^7kZvhBMxII9U{Yffl zOx}_y^0P*=9|ev#UuZ|<65KNNbH!4~J%l1o+=%;L6XJ|-zfDDR}a z$@41|%Aa^(Q;>2q`^D7r>{M!%`7x?l&-s=I|6S-V-Fn{RgBCFnXcg=9W%~7vM{KzW zxE>?>Z?%@mrO+q20fw^3>ZJGqrs8k1vDHV~K_c%iQ;La#4q||BiGH`za~hJ{C9l5^ zD!k&r9J2KyrekBWXP^J*THqfm2*1-nki2-s%DWp@>~en}w6Oazrm(`!gZBz>+L_ZL zlM|tOhr#tbo%~ar?=+dF+_&p29K7^EMrypl+#c76^k^;U#t;|m-gGCU+~C!+rtfjo zUz;}Jx0-Mp$R&HeKQ$+2M20`LCt|3OAe3|D;ov^MLJ$ml#N&JSN(I=kOL8rEQFg%I z at Y*A>uXWeBNq(7K1P&jgdiEKIoSNAD4-e19E|QF*X5QRd1V#Kv8Kfk-L%Gse>T9=pSp0LpdQe&J!@@gm# z($QdvJ;c=T!+uZ5rTu#f@@nsMN@*}~^S z0|tTOko!o#=bz#0Z#%vU;evHZV=i8yQg`lYNniJaGH>k7)n9`zH4H%Se at L=z-*w|2 z{BV0P at t{LmV*_r5IB1IIpo(>`$5xio1mtpcZ*OOLxl1DLmxNKCcY=|-F4iEs(-&uX zCEq!HI~KAGzKF2KXTm~bg|3 at T*?+cGLVo6YI2)$$40rRl zcFg4XrTDe#!{NDWr_TH#acn?R{k&*rgnK=JqWb_D at I?a|Jy3AqdK*c|2fVg7iLjU| zQMH`63o-Wf^_PTi1s+PC)VDoqd243hT_B2hupOoM{U0uNpkaLMpJmps*D&sAV7XtT zhio1d0Osxn_HUk>#$<73EwL>?B&B$NQ$H_FXl4*X)b!iky7Tqu))FF|(`u!(>3?5m z{#~6s1_=h7Ufx at M`aVuO%PJIiX@($;;T(}W*{8uRWG$m4E{szrg-PX zk{lWf6pg7D)f@&k(>Kg<=b?POyor7x51@}oN0Ow~-O34 at BgNpFnJlrC=R(u1N~{l0JTtqDp$9)zsh zh0QN0_ozg>icHEX_Y-bET>X-1djB!t4{l!RA>x2l(0W2qZO}+>9^1OHVUO(F^U~22Tt55R)N>K} z2oYf{ur|oWDd-<#m2LIWFWZ2DYGnM%*SRekr*^{p!B6PQ_O1qZ0JQOclP2Y2?YgsEd at qXv!2Nfkb|M2##SNLYOON&u^8gVizWL+{CbqYUBhKTbbJ z9_Iqh)|HQX^==sHAiNR#W9@}-DRh6Z+^!0@%G3`jZ|AMruIb5+j|!DLAIA!HuvYZ} z(X-xpI0-chFfeC^gQiVvrFnYS4~xV#u-z1!`O(u~pc77UX?!Q(7d=-1Gzoa0`7+=z zS6r3UC=UNE;Wv-28an;B)H zg0`C_b0mR_|L*%mm!cs+GTdr>X9#nc{r9ytw6_^$K&fJtfys!g}V@;3tNkMKG5bF*1N1R83=Ws&!PGvOZj@&Lcx>?q7&Uot# zhTZQQ)sSTX1^$iHRhm!H3>lpu~* zKZ<=&Rn}Nh?c+cvFH#*D{8QddvixD+6*;jVb^~TeiUSD7T*I=!edgzJ45+ zzZd*)T(0(8xOaeSc6^jw(Rr`WpUuv1qRlO=Jx0Jeooumc{d#q9q at VMk;)R6;&fY0g zK at 786URhc7sHJFvEyby^d^5=AXg^4-`@3J|yNT9veY at _#%8}WuX77rMdSL5F_N!M# z?yQLw@WM)gTG$Vex&1bXm-CFen%tFwuK2BezwAA{6jl}H$+G<2O zDSDzRYD-yZ9M`q*@~quvd0BO76?T8fv-G?4_bRQ9 zNoL5FqNJ3aRCdbr_ggZ?H*=O}YVu at U{NN4AGNmyoRY5jZk7S%|7it(T*QyQQGwhyVESUb|aWP?7N9 zRCiCUu56wozqr`EU!X+%pkVNI4I8Bo{pNaUX&p!4M*v&O-9WtLfbth9!mByg=Q~eq zV?UJcj{nr2jxb7V4(f>-*ep+J{ISXWQhIuQ0(|$GuE+wl~l&+?> znez&t+&=TReNj~5<^*l=B)zx&GIQ6`V76N`s4*^(T~v1U#q6uI6emCHSp_M(g}k88 z-M(wwH||%C2Cs~$g~^d8CZ?3MaQh57pHNj?n&hG-WXc%N#~58B8=|bX0sHuVq00u< zI_FCLdytXXqQj5W-9gtY)H|*lKx?%=e!FJ;+tP!^P~R&yb~Z#;A; zXAsT~b~Uh4kx2 at Bu7)>1Bj`XU>JY^w**RTV3;9PX}LFQRd+yDWN-?T at qc9p`4-M(7Mp1hu=4@<)`cdZaM<2XF3__ zKy*4WPW+fIJi1*nw`id%`etaa~#*Em#XKE5HzX!aZ_{C~~;x$VKne*c3^qX3ENo4YKzWxLy$?_Xk;0 z6B!VoTa<=9>a_?`UFIVt>sJ?U1)GyztiN6drq~;XP}B6MesV?Rn7S%se}C4mW}^MZ znv>L%g?e0*)e$Ql+#lqnEsL7|)Jabn4d4o~I6XUdFcA3>@w>Aci^;EwpnM)%OQ5#s z)5LjQt6~7!kl)nIv4CSqx#uH=U+pe#h3^O5S&uRQ at 2mrtbV)mdjV*K1zw6h{iy}Wc z6F=)i@(*P#TAANVPnExaux~S2b~rzpxx$;`b*GKW=1`(Rd%n?@V8m01wWulj?2)p7 zAQ_gLyYkz?b&IMaVAo-JSaxmXCE8#J!}aP{RFn8GIP;Bj;ov2Gqp>4HNhqMm;rRx^ zG{@iS at o1BM|J2V+Kdus!)P`tekw$#Q;p09RXsqAEa>~mhKvx}<*;hylsVcdn*8=sj z*icHIbrv1GngKob1YMa5hK;}D}qE+Iyea!Yg2NAqGvKVB77C04ykc5&}Nsi!yiN<_k5jev|H0lm#+Q*vU6{}g zNlo5XzP+m@>=)${cK+esK^Jcu6 at 33VXpxbMW?fcN3E$V~bzOhAm?^1w^Gx>H3s>t) zf&X|?Mi?kpxGN6duOB}|>SMIB?N4=5K4 at XMJFBqMi>ed(*p_5!hW;A8DdZJMXNvz+ z?R^UAo4#cz(tOf_DZt3dW>}}g;eDchb?As}Mn3l5GODlNb+pArbB%=(L$xbP3u}s@ z=3(k-y#V39 at gI>Y1pf8yAMvuVFAj%rr;1;u3sdfockrQrW^di;2DjS zYo>U0A8Bu6l$WNp=U{+PPgX}>K<*aHw6kdjr3P?V&C>_tQLO&f<=Wbrd_Y&_vZDCj zkEtmw^7-yf_-h9?D`tm$td5C)*cJ02Hak?TQzRm6`YPZ;_Rk?>nH6W$p`zVd5Sb%q zc(L&r!C$@^RCJ=j`~5dyX&NytNx2X(vKSO7 at XWae7jQk{->OD}CSE877P0=`RvfpB zRj)!gtFi$VuKHx8nox7bqKXuZy!nWp=#u~5JDq!ric6cqVXCn|A`nZ8OAEqQS&xS_ zmYI!27leKw#-jWp&As{L))I=ZSa^gryF5`Z;h4I5cBzD8>*^U>iST(syh`jhm9YWW z(f;=6S%&>LKJdh=^KX5m>v at CvY;&<`T at ebZKwe$fs*@Yzes^cFzZ0Z<)ASv*68Wd>!+t z{c5w1i(hGpa at wkXBlli+Kgp=js}oJ){~2%_U#%e26QGEP+!y*CAdUA%^eS|w5-*@R zd5s-4(upX!MunVT0g`xEL>-T at vql(EnOB|1Sz+Y0MiNmPUB`=g9U_RgMF%3PowG2_ zp+q*sntW$sEfGk)i&j?1>1~c8hM;kd?V-en=olW{uK+px9YmVEJ-Ydu_a(3xeg$E` zn9lQ_vCIaHr9_ at VxKY^&=;lC2?#skmvmcgr`j}ZJkIP~cUv==%SL3kA+ z24=_KMWe4LaG~wdK(sqglf3=l={>Z+0`)514>6_C8AdmP`cyC)beI?J2|)p8r%Eed>)i{-1cW;Ik1Z%zqj##!Cw& znjw&H$*g#QJk=lF#tRxe)kDCC0@(3uJTw+O@;)qwcm?6`hI}30fjE&{z?_yK*zW`T zPMr}BZ$qMpQV0hpvM)Lt;Q%IIL8IP;d?Qx#(8TaG$B at s&YF=6d5yFcaIrT at tF{kW^ zczIYD5x|S;KjpzU at c^93VrVfQ)bObwnjjDCKgA$uzfLvLB|Iq1X*B}$iY$ze=bvEUAmTE4;JE>PUbFbI%J!dLq9;fSMD`gs|-=t>?ouzAHoC|&2 zB^avi%FQzKlxdXJ<>_;EiBmdvy2{Xo&^9`M#?GYN53rZ)%`ER^UokEMyZq at -#<VunKW{V8 zxO7UtDA6?*>P!c^KvsXHylB-GPX}V&rq^IOW$!Yk!!X*@wO9^D-JPj#`1||GiJRQqqudvI4w7LWYAjldmJdQ}0k zoyQLL&xoJ1+S_@|rJl-Ey-XkXmz0yYm})L}Tq$$6o%c<>ITGZ&vi-NGved8Thh^1& zaaH%IccdJC^M<-_X;C-qmXLzgMmgq%gGTp=rH!?af|-$@U(q11&cB}_)B9m%-_rTP z5=ja at dPZZUVe-ZeXrEm5QrzF7A!&c~efp6b0I9m=Ua9i39vk+$Xwe1yrR-8yR0k$dhW$p6BbhVfg4EigRG`M zdSHtQg{^sCzH3&JCtzza0k|%qEMBp%X`W3Euv``;yv+# zyT#4Y(){O1YWi+&^C{^dK=HBO1insgpa^3LUTLljN)hqL2Pmdpl2gO)k(0#GNZO1& z7S-r~2>CFfJpQ5w-zp*${af{s2Im+}SA(N1PftVM7&gguqH{%ZbI^j-e9A!6#rW8W zcP6Z(Vquge*aY(*vM^m}KJ^){OdYvjHH60xPVj&AmXIUNEF@%IbEsNKKvbaj?;b}i z7oPeYMJzA>H-CDgZTr}KlwVXbYB1_ at 5LlPVo7Y4ef+)RpPgHU}mg8o(lP*(-T>htK zL}{+_WAkfi95)ZqQLAVtU0?iRL&SFT*Q8Om_E~nAz9?e6550bS$3fTU5>BYYdm8gEznK zAHQ9_eiry*DC=|FnU+Qv>x_)}aks9aPRK!CANQ2G^L+;ax1u4r5;aw`kYz_>OP}J? zzMe7cum>>_0oHO~j*fpdl!qGN1l0bmW5|*K`gjiw^0q9A{vBR6!(b*_U%VL4GftOM zmWg at 2?k9Y(;)7M}bnRXp*D`nAjYxCEF^5!h8 at a1g%HfCGp5+5e3zK_9DUwpqvv1p&MvbJ9>|5GjbHPLeP zQc8J6eV(Z|ud>p?ugeqWL%8wYM{oXbs{$vsl`Z8HKjzQ3+o9M|Q9Pqh{Yg{o at 4Eti zixlU$I9qhK83=6;4OhsSIQ8mVwX|1dS8Oj_S-WEQ^33fO&$n)fK9-i7IQ{VV3hv#x zdyeS3><>(jS$u4%mEh0W_cp!!{xsSs#c7=2agr&x(DK at +#!B`Hhvu_nv8$tqjb+(fa68m3jOc{q?1mr_(H7 z&;7aX*o5q(sXI=5zH;p8tJ}V=PfgCb7HD;KcmH(FS$Sn9$G&~0 at fW4mC;kl8e(CEV zG4(FTvYv*MJY5r3EdKsbi-C*H(oG at waE?>{p1{b=50A9MlM6M2uFQXR{nP at Dzfp7l z6~u<}CLR4HdYC)ysYuU$F}4`-!iD>$wHnC?71Wld&YZS%*M0oFB}UC+m(~0 at 2yc-y7Sh4p>@Y1*&a{49eeGnxsHBZTwti1{^hCsLQA#7-1nZd zPFdGb{;XiyDzzP+X&=wbI at M;ylo-K%b6#Ft&CLxV`%-tPn@$P5Y7 at 6GTXfcf3ofl{ znk at B!!GTL}@pOgEekXc8-1&1tnBeRj6*bAuPPe3{i94=&EbzIjH&xJeezo4acWnyE zI~Otr+U5Sw?BQARVcn`ruZ+SQEejr;PF?rmbgTLO2$hnfR?Yc;PS4r8ee#9W?Pgc5 zvgeCjzE`esC-ULDZ}+&a_*5ExiHmwCq at 5KYX;L3oGkfzU#{H)c)dj~3RITLmD!E8Xbe<5p9M%T00531Wl$VU5GC#!+#$F_(BKl>3BjG<9$bP;aCdhI?#|-w?(PnYEwJq6tGc>6shgUf zp7-WeSNGKX=uuUGg+qb*Z%p7ti$VQw0~rbqN=ZsXoK;R)n*C!O3QF~VN|B((|4EhR zm_l^^A&Y;8`_KNDR7qS}PFm`_2Ah&JP-${PQGu0h4qbtjX?k*|QJrIvYxn5aq~s at O z7Foq<*&k4m(6m$H^V3ol5wsPI9m*+Uj~3nt9dcpAD8zjwUMM{oV^W}@lp)%R_92v9 zuQBh;F8wb3|CI_9RO|nhHQYb5aj<4r{r}d5`9BrbT>QMOiq;Npp6vf;W#12*?k-%R zpf-h}p~(JUv7NQ4jfI6ZD<|6*HW$asZcKfRAFuqrh|<|8Srw&)g~j$vOv|Cg_)#bc z;&$SUeVadE6UAlWf{3Jo2g9tpeaK4YO+B^>r@%FO%ep3}Ix+HvS$K(zbokAwX`%KN zljX90Gr(*Y$mFeK6}ac-?akNl-1DaWWXC1<!7hVo25T5_TU92L4cA$z!9AM%kh!@wen zm!h^qNHVB`%O9u}luuLEo0w20n6FQ`uVM}1gt~3M2K|!tM=ke(nV)$97sVG+8K9mC z$Zk-9N#_ycYcQ>}rfc;mX(e9m#k`;ae!RE=w;o)@pJg4k8u8-$!z<$aAK%yE&)j5J z#KuD&RyiI$Bsv0i=;4xC_g7kBbK^o?F^WIs`lHT^$lgeF;3SgG`^0aDyOPcuQD%e@ zLCE~3c2_E2ni1zksj5RYpwBQncyYo`>0#6x*^C&R$b$i2{HlYSZ2zGfSBvo*^PB09QZZavxp;^Vfj!{1pNmf91mz^r$K( zOf(+~J%bN-XbW;X{0D|LS1|#lTv2bN|FigC at _i7REWzCy%@z=m z>PY-AQNc{9Nv_BFwdL8h(f*3Q-xk6do@}i|Ci2;3fS(_tH69InG0%I3j8>0e{zomP zF!`+=aWQjPAkZIp^Blh(T>hLFAheDOgw3s{C;)FRK-;7Pz#VUxZqE?H0;LOv-+mZp z?Iz=;DE*XKtg8UV_-ROjJuE~W^e89WimA3;-YKeJ>~7j}y|zUCU=PN=om}2Bnyx(v zE9b+WCwTv$-U7~3oe!hk*_mL~y`z32ZpO&pzNHLbk?L^G$$n{L{Y+i?Js at AZZ z3;Rq3DF)Sl9Y+#pG2(~p{M7yvR$k0tVwW_>rcW9QmqB-!*_KX`luASBk(p at Pr#a0P zxZRY^nyurA at 4((f3~%;HUP)5vUTnNwLvT_Zu{7vR9w#~vEldF^oXw=c$pTgbEn=16 zv9a7>8-amCS1~M;Q%qYU98 z_!Y)nyyKea6 at 38&j;0!(CPkoY;=4Y4<^tgzA)bE&>-M|FJ<+XaFw7*ZxOnQ+)R3Q> z>7xd|ibKk()`GCl;XVqKLVFYwt}{%5 at Z%^$2nNMIrK33w0Uf7Vg+ at oDri$IHAtI9b zti`QAa3QeZW8y$iStQ`^s=s$96l69P{UP*G1Y>Hnc z1$9Nz6g7)DOc=avDJ=?bFF54!7GM+?4F&rOXQfxrbG<06_3qxS@}#mQ{2F>XVHz!Y zJi~Dv^h$I<09js=%3_|)9Ta_NoHG;)9wTf*@jfc2iFjEqqI#_lmIyaS zT$sKWR_g*MC!n_>%XR#oW1ovNt`YlHuzGs;t at T+@&vbk3RtKHieD}=ncFXJOG>G5O zG9SB$<^167)b{}u;jZV63HBG0$Co%dy`70);f_8p71SQx^#zs8wvk|P?#Zxy6yaz# zEg)0KVR&xm_VjQ%V)^Zp2x_(bS=cpS{0ZshG5S$Sk8 zSgZnhHJGcRUGv#8&zt!z?{~Wc%q6hh;dgB4bB^K@{@B={m@?dSKHXv`JE>t|*>-us z%rfVEypE9R7^=Q8|GC}We5M6#xohGD6rBEOGxd%sQ|M{?dFEwwl_7WsG86XTkBMTd z@!hk(%bZC&-h6V}D_()L8Be!JqNcsSo_*cA0iRr6TJDem)l4=db|^;tn?%1HUz0g) zA)gg)h~nO!v%Z{^#$AJVuQ8*lalYq*O84gjmGBB4U9NYI!TXo~I~KOg;HM+KvTpEz z&IzepmFJn5+#hhZsDIt-q14G?3|Q&mL4j?e{Uf$vfMQF)xLO&D-0M23K2>zBTrpS=ko$W7Ox2Ibp0ke!=XgQW!XL z0=#b%{eX1s_br9zzQ%b?wM<;=e7wBGY2H38fh-};V+ppRZD&C{FS&4pxmmsnt_s?# zz%-$E=W);cI{+PP`}>D^#le-%&Sp#X$*~W8PWjrp(Sz=TQ7qjSKjv#L>e)_7)N<3# z7JwD;n)66po&umW9(oZ8bl|rY(KiZepYkltKM(7YX)$O8_R>;})Ck>V*ov^{Kx9|1 zjY=oU0LKF|N#yX`g1$SKqer4QJ9p=z6crs#XG<#|)>~~IQ=(lDw|B_^_DsavY|hFC zmYE!9ht;vWP@{0x)*BV=Hpo)WjOhDI*N(ya%Lw4 at wnb*d-}Mf4=YzC%DK&1#i}f;A zEQMMKzrThsPr~+A{F-nO=qv1DalHou+`syGZjVhkayE2rJ4Swbzv7>~ISEX0^n8Qd zB3Ontynk!dq&U!$*Z1VDWzRb?A|Kj-d=I407h+o!1;h+w4PN98!17lJLB3+bL2^zI zJvW$OCmX91?I(oObJ0Wdf$`V zc!qB{Mf~^eAos at suMx9yH(8T at LIhn2YpOk7meNx}CL(yd&30z>=9B)Y z(TVqXQGh(y?HzRnS%J|@OBTq3X}Q1lgbHFf{n?Bnrtyc(s9r8i4 at ccQW&ogE(*o6m z9I}IkFf3%~M+j9f1noNtWS0;@MoZSrO{1hh4U1w7Ia1;Pl=JCSB at H9KzlzN6)#HgZzH0D;}L&Fo>$UqnsZMUDXoFh9wSdk~J35=6zY zm3ME!*u%E=mNzIIqR(II%-vqHP>wRLbRjsy{qM{f_Q4=MHtdj&foS)1QDm^iM-u2G z-JfJnuzZT1?A7D^6 at Yu+ZDa%ThAJ-ADT0XP18!Jj$Yo5riZQu8-{uIq;)aSjMPWfM zqCRCoAm8#Gr}QBljyQK0TjT{`xGu;QS&5MonwdMJbS)y-M6$$@tdswK)8V zfSRM0njAZXz&IEPo&DVMf`2|_`qy!h=?6vp46CId{V^oy=$Uip6Obo5moI(yKQdB-Cc#cOL^U(AM?9?7hrEz~@=|0`sNh+8~B}t+%z(LF?EjtPT#_C1j|rj`V2rXHo51g{WUngTG6Or6902{Cu6B}jnXfu52tXnzM?0RV zJmVhnVOvj?EF;m;s8yyX3=-gsM2`m%aE22?GMdI}F2XcNaF1TMI{fR^$Jj5UPTS!a zR3>h?c={lYGmV(6&&|FA6=KI=Rxg`K(5vF6L=5I|Nb*69%82iVd7Uq7jPo`YaZA+v zpgZJ)C@&zYi1mms9{Tf)@+pLy0&=BpR?RGt`j<98+A&^CYGOb9;r#y09brO$*t$MV z&dk*bmRIj^mph)p38uxZz=IeJ-gtXG7NIRx%s{^>N6%fK6kv9XnnQQ~ zk6^8GqsGi3O-=~qA#0^hbmAdVs*lcO>?!(1wF6&N(Y$YdmkVB0r%4ay?nNl*^6*6j zbKFd;{<$$dP8 at V*b|*fMn13S>m^Z*LG8Y>&ZeFi3Ng)odNJ8YS`|z!f1YG z8pXmun%OMwDE1wbjeNL$P4#V4Y5^os)US6h zcAswxqJ&1kz&b(hup?2Kw?fqe87g|qzQXy$Y!pkwb}o9EQAP$P#-MN at Gw_zTw#_O- zak|_S6Ww?2)0`n?3Q>(MT%+Eh#B0+a_ReJE>1 zG+HG{X1!SD;HPP}jgt|1q28zBrSNMkS{$=FS)qv+9epKxX_DY$vYk9<8P^*fzeoDda@&x%_effJgXp z=vZnP7 at 5Oq)$+~G57o8g{G at t6jj>fgZEE7;e!X9alE+7o0Tm_=m7tO>nCcMVc}0;(7=5E2ttN z7pi-+M8GF2^eu{@f5>4XIG&aD{XFa2Js6*6`w>Uy zk&~*x?d&~7a0O*>YoJ;%sj?D6l_3u3E(DvTo%PlAKIB^vF1`n48rZ20z=zLX1WQ`! z$9v{s;~qO^W8+@`w>&wb#SS>2VNmfQ at GX!8W%Z-?DeZ;rmO4o~eQ%>`V;n?8)bn+! z8~W$o8R`NbxhK>NIXiN=I-ot?9<2LZLwO23HHSx+>CJ6oiCw)Wfm<91KBD;j=e(>{H2t+@}@mfoz; z6f{-_pI()3M_-hs at H?VeTs59MmuZpt>^HR^zERMh^g$Yt>g{XH^w101O<9$D}BuctU4K3a5+c*xee0`qb)gm)u1d*%1eKEqite?Q*G2WRx!Ni^#U;llZ%BfT;O*x8UH4&S1 zR1b2byD7s+m(p2TSTP;C7OIFAdy66g^Yf-MhH|P!AAdT;F+_En8AH9qSNAwBt$(0d zEE+G$I3XcxcDa~KM$!=`ly+I7NTe3}vXgqr=U)ZYIjM~(8P-Ahp3Dh}ojN|~5TvED zxu(!|Mn>jH(dzuWU0ec>ex=yTKZ>qAM%eKq_izxq&6tlRocG38(<+SE;7pkT`n)l# z$F=?WLSI&`;VwxC+oJ&-FFTTS>3%jnfh1jeWKj?G(WAz<^BuusxE`1(on$@$$BtU5 zFw2bImvUa=foI(GzO3vFK<-xs+a#@?d$!zd!o3L7}KFDEE<( zp`?gCBq1ly8X9%aSGVOf6j_v~qH$SH!cDlPr78-!i7w!fHe{ToH_u0mXS~pI2(l1; zxg0b4j|&E^r$*TU2xJGs0|`aRIB0g^U>YXK3Docn5pBfBiy25F&)xMxJ(3KG at s0D3 z856T?S-iiH_cIu(b$jnfHM#(~2?I)_d5}yx;i=GTAA{m!S61MuaB5A0;zL*JgE&ZP z`B3`xyZl&?+C7!9LVUZn>5xJ_yA7}+?_SF(llLCWDf#bS!zeZOA2r3x`!7VH9lHFG zoDP1#wA~4y?hap=1d!A!|Fe;Q2O`i;2ah7+R=pQ&;;R8#S(J8z7bQWna9W%6tz at -r zHwd*AL9@{-s^Y7`TG}*kw(I9<-`6Xi#UJaij(;10JCa2MeU0jXD at KIF|g2+M-so*1)hqu)<8_93&y0{a|%BM zsjCG^g2oWqU(Hik2FuP9oJRTW;89=vPoHfe<>0FvmVx`Tkl*-nti-y)_pg@ zS)$q#*ql3W=zkkpG0QFoc!2{q)_;HiCg+YA+I9Fs>K|)}<~nRE^p8!0`o|)>4m0lp zKGmi{=iH$PWwQDSENqz-=WR{t)K9!-Qp(0T5E2sJHhmo#eVOn8sfgi!Er1@*ZS+{_ zRbc2t$km*tBK9QqFyCXh4XshO;=Sdr36fyBwkZ+1mS7(YHxL;=VC$54FSF%3a$Yeu z!96Bnh-(dPF}hizVftg??0Dj at 4@6k)lTK-)@i|0 at 5EhTawsBSxu4iddE|z z`tWUMj<{cK!fO5NKBP|WAFB3854E$9Ar#$Yyx_X)a{jq at o?j;P|AkJG$oLOFI-9Wn2b=pv zG9j4hMp6%ayYGxf^c-v!56+ouMOC=`7Oc|bXRm2>4hcj z6H__J`n9zc-x^DLY_x`o$Yq)wCX$kPc5=kNl4?SuqNX`$iQH8@#^Uz z598YB(p5$EUu}dA!GZ_9W7=u?QTeX{jPJZ#>m;sWg>yfvP9U0l`6k7 z2G9K})|u#FPw~BA6mgC*7x5h9aMPszjA=S!UUTps%>5Wn{h6rEI#xV7)vP3zkLVXH zWpccJL1|_fBWl!#Xg1XhkKk_m`Ncp-Jzc{Lc6AV|OChi`X)HmSbM2I8n~qKupBU;iT54Gx>bEY+ z0I|AK@;VdpO{$bQ^~$fHG#htT1j4UEs*K{*B6^~unB$a=?Z4^F<7=`C7&T)wNlN+* zv=$hBC&S`2qCPF{B&ua0e^xHhuZ>DN_cE0&p^FK$_1-f&M4)onys zCZCJ#l5juk+QYiJscK)iT*a#^iBU%-N4}G=m4xA7e~*#n*OqDgx#_+Hwd{atBZTU&K-lRr8gDL at k@pFA(!Ch#%Onm3kRw)~4TM>`ZFz+dCYu!V#xhN4<3LTKG}o0c zZr!$zf>Y#0>HyJi)hY_N?%z^%fdOm5BPqU(BuA|A5|!EC{t#V=;K8_XuNVeg at -BUD zuj-7cmsruBgy|Rv$Y51(`SB|>*qB?KjZ`Zhho3a<^EkgItD!-<#SAVX?es~_HI!}- z%6{R6&P!Q7#&R*u?MFG653^IvJT2?G<~fhNc%VajmN103&Ja_q_B&KpN6ker>=$=g z%DmkzHwg~{EMEgXW%wnd{&=v`33zOF=bEA%KoWGp?mhaUj9dk9KXv51s67kMe~lt- z0GxRF3(xNSr~-`jJzA0!imnK+YOy~&LL*JoDD35RPtcmr1c0C$nZW=Y;$~(m z9hY^#R#fft;bIz??wYc8B1oD6I=Z}!mLIn=}ie=hZ3wo}zWT#?z at oaDNH zrxv2<2Sy+aZA*%AZ>dYsQ8fA;fxFAKJNDJCJK{{X>7zev$ImcAVFl16f;f_JTl zB=vv>1HrykV3exUXw<1T&$mwkJ(~te|%bPFNqB#A0;Be!&DDnn?$LrEZrYeyVMh75->di;&qE=PS zq3 at A^>!&|X)5qsJK!hk-+0gcR;C_vGhwL10R^7{mNpmGZ6#BqfuR2S&jW&E{#83wK z-UEOs7%E^~P|(YjD8FGv5!%{wuFr}h&Pe**8xc;x0N3^3&?1Sn zI!}td9vuvI64DePp|>p(Lx-|1S5Z_C8Wof?ed+|MrP6`o3iE#req8~HcSc-lw{p5y zxP2Dvwc13l at wi%&w!-oAq}+n=2<7Tle{+2Dq-GtPBkbDB at hvg&xc?Cb<6*wKb{u|O z_}j#BE625 at PVkJW&EB#8fNF17C`+rTm7xy_;S7WN&^9eUqJi3h@|vc0k!<1$ma)j~ z`RA$W{g0r|Atx8N&PH6~$TFIPR`uo9#TPo8%jWsJAP!+h9(A-5g_ zZJcwrFrsf-GJ!tUt7{6pnLFwD()DrA0+6RM4emd;AzevR*vjmaC}BZoNF3Q0CYRWC za5)xhihtx`2Y5mmFA+HusUT=r7uUh??*e~Yda#ade0<^ErYE|u4MuQV9L+yO>)%BV zOXa at ISHfB_ZewGwwD_wPZ{S&T0PNyiJ%}}xTOxdlqsd3U?UOZ at kt&gmAb%N}bSwrb z^}2CFIX>;`_>=T~)(^!d+kLK)PaLlPBQ~xTZ(}Ew=_>3J35EKv8zGgPUM=IwQ;o0i z15uAeR2TnrGdUa|ln=l^8gtDM7~Wv~!gko!QnN9--9Wm)?o+)oc+jN_C*+p{qejU4 z)L{loEK7uxfqhtR7sPAuoDjF#A^0d?aA9qeK*ApqwjZ1)j*2j<31-m)8?Qw-vlZ&j zkS~ldbl4t_hxhU?9ZncD8u~wFSk~mU7t-h0og#rQ{r8x1U$}pDjlF*<2fMvtO|9Y2 z1(%M>-{{@e9xx_CJ#F*nwOvCA#nTever1wxUG(q;f?^#AvtAT2D>-s*doW<==mY%|(-cM&dEO+vE zUL1OuJ%-kIuGyyIZgZVvePw-v6?E2Q_)!G%@0|Uy$2@!y$o}{lwE;G#0Mm-B*Dq~) z{acG3gT<^by^mE*7=ho at 5|-$8kn)R&Cxa00iSi^?I%y-9cJ3MH`aXwxwLaWSzp#ZQ zprtPlGo>Gv6+~Sl)9hH^?TM$_t<|S$%dP0vh}mIVUT;$BG);J5CdJoHL-giEon>Ks1}Pv&RrpkG2WS9VqNcG9G)?0HhOs zz?|S?T8L|L{yH$FBEb(YEjU=$hSJ)8AgZYYt4Kf=s2y at 0s)v{8BeqB8zbqv+ zMV2%mY0KcKTK6&Ja|Up8T$AB5UU(Pzc(nPwtf}%^TMym`|5S*-`;tq#Y#0h#Jhu1p zu)N#R7k7OkOYXs=XsL at -j750Bjt?lQsN0@{_b()cm%7 z)Crctnh4_>!e7LioxyRnFKp3n8sm(fzMLuMb$v z1FT@|Te1j{wA?vm_kx*Udj~v~?3aiq;kx1gZDx_-lAkqTI4!Y6WEB@`Yaf2NlIjJG z4T~q=u+K%c%O^q#U7Q$U{9NJe-gI(}jVoI}%+##n;jr6oQYV0W at m15JHC?#XR7#q at P+>)e zX5T&C){>fF$K-*IMAO%UbnAIc8fe3%>7Vj9Zs@$$cX0GYfjfIb(O~QJR^zR>Vz>Mh z8XjTboR7LHPmJQYIw=7 at bcP@GRm$3SWWJL>h`;1Qkn~F at Vq3hS-!4o_Vsv11TU_d} zyR+R&Vg7k5^W#uwv;iOd(%?wu;sBu~+>$Z1t+C%0q7nv-#o*0p^T#Rcn~uU0 at 863! za9`8c;dN5-oo0^m*Y2v1xjO^CBplRew|JilM8wu>ltB4wIcXRBwTgv)#}zdvz>$k6 zT)!Tt2-{2rOd~Da{eEoCV*onnP>sO{_8Qm6nXV_VRc7>Fh9PVOOdcAM;)RKSU-ze= z-|c*4E3j}UGM2T;Xf8P1eQ(0cr)^~;>Hreav9808gmLEk3B1;w&)iM6lY~96rRRNz z+_Lrj(<qOi~L at lw5($_{qx|`CFtoBk|A&wF5^k*N9vjTR4o<@Nwr$ zn9gB2aSJxB@;_Rvpr$_KZ+u2*u&e*mka@)0het(qpC1TU@@YAQ`1*L%fI+ at LE`afw z%7do;V{p_bl9f!LuAe7nG~QH!3axlG at ee*@%eT+ck*v^1n9|rZW7LSF!B7}?nFHVoH;FwiIM&l<}6|}yirnO?00GAq8d2)YT>!f?av3{hw z#P4=4QpKvNtcld_yfUizc~*3JVgiUPG0^cEzyKvIJ^ho&-(rId$TESkn^T;f#!X1v zS!Lu1pWXl7rsnAS&F z(%OT$zAw8?!$gt?<=`@(1jxyJrb56QoEJjOfp79H!S&FQrny3(gN4iGQGc5pheKwA z%YiZ_3VL+!FwFSA$?Z2nA-Vok)rGBW<=|Q&q+tL2wVQl2loDMMhleCgvSH^piUQ}P z-7_W&!{T0hvQDLdjpj>UY=?_AdzQ at _%ho%mjb4YMJ$Km7n81ygOI{QQzIr{9O$Uos zY^RM;2kLG`j1nrg-OOwAd%C1sxGJ<2hPLUa&n|uH&tE{{f5vIymey^wwMJ1>%6V%L zlc~3%xIov({a-s>-}Oo+&1$L%Z!eQuaCo7H%t_I?n@#mf-hT;xJ{=uk(j?}tvYV}I zP#YMhLubz7sp7WLww|wRFc^qb8ITA1V=}ubo?(xCBU^Mv+k at vXCFCzvlpyW3+nV|@ z$k~WNIkM?8EwLhF1E9IHa1EEc8ymaAr%f?_K`!buw`0jnRcK7Os3zEI}y`;(Mrh1!x4_+K91rZj^Y81 z;)$;a3p_y=fmolIPhVWFbmkCGrA#S(bp!-PPQ}N8c1?b#@e2`Cgd^h`9+ z*^Jl6O-Prq-Hg&1|L^GNb{vXLf%=@rKu3BQ8 at CD)AOb{92ah}3Y>ow5C6cA zsZ>TZ-6sJJg9QdZ^#-iEirJNhs6yjjAGe3B?t8fXSz4BaQP%Y&kZe#%d`odN2fcS<=8_%+5mctU9&oZ*-L*NOW}-7nEC=D}z!KeNgG16ZK7>D==m(P-IQWXCZ*r zM)nEI-JFWxp6PEzT$4fW+VCWc8e-U*@OO}+)cdxyOWASl8GcMaodAS$UAi12OxG*! ziqBjU=Tae=L{QrHOfOLqf&)h4 at 4z|o^y^2JLo)uHs^|_Nn$X^At$77&a{SiI{>WIs}`b z>?sQO>8ePlBv;ivEM`jvyFX`|WRkrsY`5oe3qL!>YHKdBA$X|#3T9HJ36&3aPv0M= zVJ=E5azTP_dc^dB`y(<}%xzP)K~r}~apsD~p+wpu*Wq&nD*mms6oR9AlTm3Qj`LlW z`MM*U?7gXOijF?tcwA46r?vMVCOT;L`1-%6vidD&ihMS_Duou(mL^jkk}0l$Q#^^kjJSL44=u*ucB09wpEsWpc>P#ZBr&q|~m4zbFIC*~XZbNezsD zjxxmVHWLS}*ruZM>D%!v1)R|6()HfV)+4v-#8Xm|%KRc-(FjKCPCIaqZ|%KHo4!jM zyGt9o%_<%N7NJhTs!|D$(dp2m{>CqSxM+HD{I<> zP*=Smkw#H8w7r*N1#4gnncFYMD*OgTBd&mrM>|d~# z_FpY?Sw&pqE6PwnnH26swrC*g;M+^e!a9z5-I)jg2ZbSv<$QCI6;}v5B z*u^xu8?q1kA+jiOmq+Z|jKy4oO0laaZFN#FEb&0RH|%(@DiC=7ZQn=62iL!S%~VvH zPU1;~aYGsa_=DewDZ9p5*lo}-617Iwc65#ow_D?Mm;cx4PV2Lt(?txZ)sb4nQoBpf zRMlxcE at FEWdJ`+i=TF5AEBK{mdm$Xs^5spI@(l?9ptSEhG4$!?9*{jQFrZ7hD3Gp0 zpdk)Zm1cPN#$@fOcxjL{C2Uvi0n%K-R at nElYH&9|=jVO%I9_*j&R)S{N{0&=r-akC z`tlq9-6T4k4meA??x`B8$7!|6?=ZTnQmzM8gH?*qf1u1ng3Y4uA=HWEiuj>{E7l2b z6qvrUdy}dL;+kWja2PiD#LqrvTTnQ0+T8jxty_7+?Rv)Bx#wpr=Yg3Ge}U=Wh^n}X z%b|Jgp_evy0-v2fnL3|ux7^n#1$H(U67T7{xo=*Bo*c=5mj)s#Fy0m(s{T)!i5+W* z<)UxoEeoy`dkcfktk|uitq05*Tl-W{a|e34C0F#4sUBNZT~1Fh3Y<)manV7fT-%r4 z>#$R&2YowC!#U9;r+(x+n4>QDvUM3<2P(=V?(Vd8u896IgV3%ihnPU&3lVwa8v? zs(iL7_Nl)O$aIIr>7r9y;1M=3RK*vrMQUE=9+Zg>%t)h)W^une=}#|D=@4lBRXeU4 z;=tvqil3=WpJGm%VKyR{0cKXlJ(mJ&ur#x?#j`f$&3~a;@W4%5Xii#cR!*_xF}omC zhwZd~c3H%Ovvh7l{kj>s#+B8V#VFV#$-m%n_l!O_i_jc~_sxsgDi#UrWcyaw?XREAzL#m|UD)SuD5T{2^*r2HJJQ95)N9Lwx)B{1-Z zpe)a*-pD-M(m8v6N9aSvXM939;#@tLy`4F}#YCoPUr{Bv{}ZbnVcp{yK(Oa?{|)Pw z*6HO_cmR9kfaSvO#A1R|`CXEgFZvE$KVPur at QP$_Fq<?%+4up*dC1RtP6jv{br>*H9#~;JHx}@b{DS=K~X-LR9Ns7MsB#f!1lJf9H!r)0jsO!XF2T>bkohZMJBec`b#A z9?nVKNfm2?BStcw{mgUQ5%?=5%umXhrZ>fC4IYWOK4or5J||FXf>*}70rkOx)7zx| z!<>KgERte?xuyrWOuW{b6ndY^*N(+V=$*ytoh{xr_^Z81 z=#$p?X(1N8)4H3ZQ}5r2DOhsS*qAt*(iNCaD-#WHh(!B?~C2(}7S5mSHw$>FFgn zv8fpQoJ!61 at mz;`fcXvHGw7BncAkyWAEt{-8 at w4mH|(U@{Gw0yb>-ZrqV63nnR%58 zY!(>OZ381*MUTsN#4rmGV52uAxQzhAMoB{$%RdiUFSxaXO8s$ovZ&>v=*sU9O5x2k zs`(mPzSI28UYKbjCw5?ZCxozm`-9~d3?sTwl0e#^{Y#JNP>1y16vIn^02hV3T_BK{ z%34nxH(W4g!oW*(4JD%U{V?aV=rR`w+ElXXAa3%=(y-vg10E%gfzt<1J~mpnyD9#Q z7;)7%@k9gIFTo0^Glo)z at x>gq9}|>Rfue5}d_IPUF#XNYC6dFh_;0#&1b=1OG%$8= zD#5e^7c at jna$hcylhJ-e{&ZTp7?kK#X6c<|OZHzF`YD0 at D*V(;iDH*@X*<7dSu at 6LQ6VpIHTn!Smpa#k2y(5AKUm8kE1BDYrzJGrNX>saZc=|U+dSWf~tLc zw;tq}M!4pRx@~wewJj+S#c}POsQHEude-r6-rzgEeZcPB1pg${qj>4}W259zZxumt zyP)DV79RZWDyxS${z~X9Oz1~wBJ9d=7rgmBQY7W?!l0W=%1*|l$WV$E{zpxKqmN;l zSLDUaRKDnAl+=&HnBs3)G(Js2Zp_^f#(|LyM!(&p%X(Ay#$+<~pty`~l?Hm*wTMLK z9Nb@@Dt2+TMSQKV$Rr at K*sZv^_X~iOvbGP_Qi_~IW>JB)L}kvfCUH)LQvbX5G{*UW z(A1hRA}5+H-Hj@(zK}N5qidD5UjqimR-$t+b*J<6b2)|n*t}8@{Ji at WfY~=pr7;!A zeo`+jzeW7V)RCxH`updPZvz}bAFTF+k7>#Y2zEyRI7h)P+Ebqd*1n=*e{Ag at 6uto_ zyN4CPF%O{R$C#TF_d*{h%R1IjAv$j~FQw$h?_&CfENfREoG1l5%MKr|g{_!x0c&Nr zTQT~Kt-ni+#<^fq at 2l6e#{AfM>1>6$;bwWD$oaGtShNJJNYA`Z>FtK7C at uIN=f9Ft+A@(JH z5xLrB3z~!d!ez at RhoUvs>-c`jwQtw_E9?6 at HK|9Y+77f6v~`TyLQIyuBk-}fvb8*+?L)%Omo`_Ypl95IsekYx(Xr=wZdB*ogg17)UAYbV3GeB zE at kM6Hc|{15)WE#2#8nPdJiLQOO=qkPudCWwUtIt-3fP at kc4M3fF%I!h2-B$#tma; zdmP(zB~{)j_Y4b$65rt3c6~3si~W9(BOl}O7k66?)OS3Bnc(-1bv1%nA59VK>_>Po zf_XiTjg89j`N$n7_)R`*>MWSS>E=`L;_X%SOXO}y4(OS4^+P_0(fqEh6ZB)vaH zY`|yZx>Y>iEMCNXpR+k1?kXj5ZF*zIlPbSLh<@g!SY#P4t)f#zU-r93`pq}yDU|ps zif28|y2-<)sdmxIsASf#q--fJcaK;Y`$(407qc2GSS`SeXD$zhwDRr)_ttuGUM*j) zC^Z%)i^s-({!hJH(K12|8#*!PvMtTumGXK`TI^rh?@^BNY?TieF;|FN1EnjI?c5qg zDGr$%JPl;Cqb(}bdY#fO$}x5$+zoD4Ka+SGoIj;m)41Ev)GTs#s|>g#g>6m|kCX5m zIxMR8$VoZ`huxzS|61akWg=#cd>c{i(UiQFM?b36I9#?OEaR(YH7cUjX^z^L93s`n zpxEd8Hc+cFa6^XKY~v_MblnCe6)eua^| z at pFXxuvPPnHk!9J>lPJCgB?1FefeVbvR<`k+Z|Rbjc#Pi<7+>EJ7khwJrEd6V8i2D z-qrj0tv+#wZfvd)sQd0e$N)A1n5ucdcUSK_GJi+~PXlB>tyF8hM|lqcv at 4(4&v7Az z*8C7tK at fq+1ADBf4*cT at 3Wi2R=YDZzg(avKgr at UZ@_hgBAk8Jb z7yc|Ar`C)hF6O?(2RDXYTq%)h!%BRyE50jb+&0?TasfQF4&(4ufPCP4hn=XG9hdkL zf at A_c`A=J#CT;wJfJ~H&Wr<@{MOW0!H=DWhc$dj74!g%9$wodJ$a%bssNcY;wW!p~ zYQpS9;JHZ>$1Et2%z at qwJX_k13Dyaj3WTuh#R!PIXcW21$lpX>X~?SrgOukjPcjXE zRp{dAW=3Sy%=*?!of*V0y^z$P^Xd`WH?hszTrAiaR?K$D6*S8MT|{4rkym4*H;f>_ zVJ?q=D!qsha82dc3^IxAoGFn7#VS?Wd69U9Ns`}syj;!p7N;|#9^Yuy%cSUaY1I>? z=#|ulM9BU!LZHE)ylp8P5j?M0V)(tuCC>-Xl+rWfqtTUT`NK^zUG at m^FQfxh1*nZ-4;9H}x)4{iy zxKNMhUj=2{oy4~*SxxW)$K%?M#xewlC480lXABB0yftxnBIKyOP zT%zW+$@+xpwIlPNe&Bi)y`7>ym{2+&QJG&7mf26#7*EHwYr81G<&nCJa2&cUp2oL_ zS8@{e#kI>=P3UHDT3ZfhM-#j6*i2A+t!v(4^2-PA3U|Mx at k6$F@&?Om`9LniTjwNA zn^;_Szc8mCOUF8$@Y*()s at 5FQti+)RUhA}wrwh%@eWis#?IikgH9Ajq-Aww0h3!Eo zDQ>jHcD8rz9w~g&&%DZ6CaRqOr1D)9H%>kz7TWV5(m@}=!OvkpQS!R=t1 at _>?uZvD z%)2a}2|nA5C)*6?B at UqB0OUmC6P~oTFjVj+GW#kbT6BTizvke1?gH6?sMsedVnHaX zBiJz1HnUKZmbl|OoXx7h5fuW87G-_biWjYa3t?IHw}0{X)JHf=dHKU%o<-ec7}h~) z%INob&SR#E&eV at BVvCn(|2-P`bo0-0CzbUBCyXkvQV{B%o15#gRgU_RO>lhl4`2pt z2vA1IHMY7+pV~i~lwrB1YlfZ4eRFm6Lk_A74=O@@@bVNTpSQIb at t?bqf%hc6el8?n zRKb#yOYX1ddY_`p&6Di>g at vn$Wjwo%j^g|!*r6c#&vD$7V9b-u;ip+75UK}yx&&q7bP z#pO^>a?wxQYt8u?Mvon&ku|3MB-5B8*lc*$utk3_M{w~;xupjXoV;K^SV)(rri^+0 zk?YLK-zh3aU+pDm;9H=mP{@+m6fbU{ms>e4neBgB@=X>f{FXtA#F^Bs&99S7ZCQ?L z{LGkHRE`^d`5A*-T=OhIqUv$E_koal>MS{yLVTh+7Z#`EHIrPUz)fImUxrA z+PohB(l|12Gx4y`OuYwN0umd z*B`L*Kg?`|qM*S_b7P0LWS!$*DE`$g7k2Gw{PT4EnPPQ)`md9jXnX2;{3*L>Ul2;4 zFhUdJG0aq2&aY}R28`Mvc=Y0PFQ7R}m4mi-{2811#pZ}#>Huopx1yEB5aE_RDU(eS zRBR%;G?5)zV(jSQkqtpiKI_)bo|JQ{&zUO%*PIbs1L2we)iHR%ZFw-f(GZ_y}GJ_ z1Iq*&(_95eXc$*ve)3#c#Rsg;h#Tb)iG&iB42%ZNAsnmON-Mjqw#m!w-|g zCQtO`-kZg!fs5QPcbU^N!;A==eo8-%r?fpT?y`B7x1{dYsVvXKJX5AbZ3-b+V5_!> zwXE5A$qyNH=JbOtA3#>+OJks;_AXEd&|-2#ua5k z_J&}Q3ykTEn99?hIwZv<#L~BRhXqb&U%0Qgl5RZ0x5%!NvqgV1{-n7q{}_LdFMn{9 z#xa$|8wHH#9d`(Ae=JcyKVQo+a*>20b9s8FToWQeo^jZ+LIoPj$cFV*yOGH?Oyut} z$5GDwt{LKwE5E0cmXBY=08SNK4W$|4TIT=*k2}h!C2^C_vF2mpJw>zj2Go`gR0$tv z5`c-8kKvG_`Oq|eCZkKFiN*{<=!?A{qXd#Ns2kW=Q2 zrA`l*H>7+n!4fWW at m`9Nblvy>H6 z^j)ZE$F1IP_d9hc2E)T)g*T at 8@G=>)zoqU@%T7ke;z?vj+JDMuRDd~XSUQ`leqb3Q zoVg_1IG*Y$<#DgDwSR$E at u1)ab5{5>RsX0BJXYHBCC}kUIbI6;)N*- at fTxQi^hFg0 zZ-{oLe{qF3;-~5cUBt4dV*z)|TLMBaWh6j2$Sxz4M&L?RkwW8J9u7=={#@2guStwG zZgkWsQ&mdQm9TdTJv2BGJG1>l1YUt=VT)0(IL?Z5GU~RC)nJ0Bd1dwrzk~j%F>L1H z)uYAY-)OQvQ-+Z-8(K$Zo^g-dun^+P!U21MTKJY>q5R>3%L&l*B;!R&BKYV%8`y6@ zVo9>o{1o%S%FcQ=fzgU$c3StF*i=CR{DbW3TTFK>!|3q{gEKPn%kdv127QDTS5>~aJpyf?3hZRaM22<@`;rHgpYNyF zX+8S6L+Eat)!WQ$BLm7b$SX#Wh-7L}?tdhSwO6|7i%AQ at qXcbB=!I!H@?>?zhm1ro zGR=#u#VL&~vgOcPl9|W$h-b!)6n)i2AZU+Wq>pQ;Q_WFP;@3X9KF}<8j>^O9YRjkL zC;AFMB{LviSg(j2^`~esw=&>8`BfkBjr^VcG5tAA$$$~W@`C#IaL+QX`sC+9{^lr} z`>x7*X!0pp`K1q*w)mD<&jR~p*%-MGZdR-wraR%Pr2$*<^dO5eurMQ|fjO6b0KZTI zRxSKzfz3K<_@{`$C)+1&kME|@P^BQkoEaT6ly}jK_s75?-OxN`h4&j&pEc)MQ%2eE z#`y_wtOVWmV2jU8JDXGJ`~G~4cL+CH&^2m*>6g({NlvxAg!Lh)HR z>U6h|useW6{m>F;yhdkO9u;TjEhM2NlD(UDvwPvkcK!_1TYK!e0S+iT;_>OFxu<^i z5%xq3?&_0r=hHY}eRP+Y&x_qevj^p3opTI>frQD1FX<5e{bt7poT+4IH8GWJx0l2$ zU(wP4WeH)B?$$*gTc`6UJnz05_4;J4CGClDW~h%HpDt&?AFe zqpGsReJV%jOJi;ibiRr)_71*KL+Q8xEcx<24!^u^=n8+XP>PPaA%U>GRRKTSs6BCs z!@ZWXS8}ej;FVJus$o#w%=&#SW}SH5OHGzM?Hoq%!CC+xf(I$?-9lz{bv&#Y?#vJs zIiaj&7l!{V1$l1Wj?(~Fs(oNNtIOTM#ZTv{XT2tryghKzNIBh5jL~PTi&5h#A#p~0 z)v3T1Y9ST<<@k%eX6QFVSRJ*mKuy2e;Q++~dHxhM-e+tG++(jbtz!%J;lX3^ON=?MC0tRjYVDAH=rp>hbx_Cc>f+ zzF(3(kQDv=NbD%Et{PTrRa3m$Epl|~O-jdzCIa>A8(4d^XCZZeYa-hbADZ&TFK=nG zU;E>DA9J2GyFj%4JM;R;-4*|z2PjnyRHEhm;{GkxSg8ERU%0)UU}yXy;(!E$Erl8o z at V6FXuKnc+WElIv2z%0}?D*sxI5GzIB}zM^NeENf(%Dc+{Uzejmzwl%Rl5725k=IB zG&1$ld at QE$1qee#mi&kdwdZnYRu16IJ%ko*h{HOkN$ z0}Hz!Ok!r4ICHY}X1X0Et=c|-1P$92vGC+23ubJw)Fox76Bc!s`e?fQl4KG04thGv zvY1~f@qM^S2qW|C5L_j(_ZW|S*U z+ZAb#v!$MlV^oD!=iYxk6QPZbfe=_{h}X49Pcb^*JGl#D5*IJ at Gw$`x{nTFgbM13e z{!Lb8;ka+{n#WTY8$^v^PZWO4Jg!Wcj?r5Ad)Q#*9)DB)iabiv!uh`rR{F7axm)aT zXWx4rH&NQnZBZtPZ<`FlO=F4yeBwlHvodLNVDUTKVRypye8wwMCt+D;lXiio<;NcJ znJlolcY%|)?6G7Bx$LXdqkjl^;;MM1T=ddTsRUiz5=wLmCyA&Nh>>jq=w|7SgZ?W2 zKvJMNz$^U%ck?ohjPp(Xd;N1<@ytLY>@&n|)ppx`edzu9KFpfFPyJ=wWJgyrB%Tm{ zyZy*xyZz8?6K%>1 at N)>J^F06-Y9yh~8|rm06*3Yl>#(G4dW=#{k=(h;+)_BX-xg%D z{n2DI4wpVCT9W1eVB=&yTNQGuaidC zBO;9}{JiA3q8_%4zjl(6^9;71J{u)#lA-e5y9X`A_X^232o8R{^Th~fakccPc^YQ_ zWRoSclgI5`6gtRB*LHP$i(xnY>$U#ZN7%cw9Ww{uUK`;4~BG$5f7{as*1StdCnov;Eu@^%$lNXb+hj0zbA z^`tM}G5fuSxYR7o2h+|f{Z^6XtJ-!B&GXtm0*V?I zmVXSLI~gZ&G&9#|JsTp3<55^ea+J|GTr9KDbkp#fKrhaK#MEvIKE0SJZqC^@OQwDkN|GQ(fWv0Rjd?y zUYK(phlSsoGp_7TPhd3(97oKURF0 at q-;8t=ijv14TxP_C(w zBMk>idI#ju*zJ*VNc8paJK&le2ZR;~xz9rhny}r`k6uOw1+6LnVD}}0xCLlZh4zzl z^|ZhDUv;i3FG4 at O%lwOy{)quqd3`)Ey?0dED}hLOJBpHn4r_WS*`Y~+G!WH+T4_sQ z>Yu#o+{fe{t3L&YMJvb^AIqr-h8bUpQW{vU{Fs9Y zliMl#?S{G-lya(na3}wpFac=E1>L+Fu!l02JdN82l%s|4*#cJ;eBhe%#@2zxTpTzv zZ2LXEUhm+bOImQk+WNldC!QV>KIyv;uLD$K&(ka1_?L-8&xlXs`{VK)y|_p2L45y4 zuERFVfv$0V02A01?^AlXh)A|$YWlnjY3)$mzzsRL+tu$RBQ13`a-#V@`R}<`;;53- zqT?>zn+87O!fgGa#3xg4nA=PpnWr6J#rG^2u4A1a zK*wRIvTv}(tG*IYX0|Hv5-8Z!py29nJ}SY-aWi!`!T=#?Y#t0f+zFuQb&=~xdo`j< zIvH#0dKuyzGsxe}Q}NJ7v5s#fLT zlKwsMGJ;U;y}ORqmu?H~FNDqJ3DN|&*bdW$9CNU`%d5V?DI*oTIoMu=P9*OqZq`z= zIbH`aI6pv}HD_;mj2`oWwi8aIe!MI%G*$ct(lR~;7l+xx_p%%`OBqms;M4wQcPlN- zkaHwk at uPYw{9HTh0v+D$d)PtND#AslhDc4?Wd%y5w~C1m#C{Q&Wg){u?Jspc%O%L##^x z(<2-o6X at BK5OEis3DwD@O;O~?=#|JN+gZsVYuHEt at 8YSWD$;IhUtM3-zT zQ8R-^#|KiL%oU7v501 at lp|uuR92Ms1;a{pZNEza(j6Lg4Wtkq?SzR>}I%g9+jaW;5 z3;Bio;#NGjCqlgE$5751|DKncxa;U)z&LCs{_V at giJ{fGQcCHgJR#LW4AFNA^yJG^ zY|N1Hg}}Qdg~Y&$n0wk`vNI>n at 5o0o1ji6h;wCuX2mOw-hBA!+Wf)_kcO#~^+fRdXITTAF6 at _;b}R z*;pq(kW7DrspS$+|3F%&GvabHY)MqtgPw_hql@=*b?@6n+mIv-B8=2?M3SXc#l}9d zOZ-Xh>6T;4)EDO*hkL8JtNkR_T&;hDo2{6^#XUV~;`126i396IlMIs1xXS((zTFCH z!UmKx>Nmmi7mQEOI8KEpemOzl9Wt?AcG0W}eL&RM(q$?`R*?ZNLzWm%%C8LxZu3-Ep+-LJG270!8g|UMaU{<^iG*0CGBR~_$!!~vPl1W-Ij!hD4HsWQ$@;Fl$C at RX$rikZHkqhw)9A(?19Ub$wbM^(EUP at 0kn6&b?S{}H at 4gt`3M+f350`H`_4mP-GT z(=iNI!%Om37)dS4uMGETlL&^9X>uieBxgJ}zT=I%4bSYR>TE3n^-pV!n+`S2RmZq1 zi__O0#8gSYI&Q;>V^@%ci(;?vof0Yd-uX{zzFaBb0m9&D)Y_cfts?I=b4YK=a?=d6 zk=?lp{<-hc!gNgxj3?Gk_FSBQYlCRnY=iZXoLeZnh!L);5mBz*R57-`aE1+JZH5g# zg#oz20DmZq#=4`gjDzSv*jx5I-kb6 at dj`|SnuTzI+WjYC3JJKK2 at XT0LUx@+H%tG0TBn80hi|8W=Fv+ zLhdkh%8jG(TV#A?KItTK002jX&(DHtbMGU`73 zrQt$Mj+a>R#=_UXUp$SU5bj8OF6~uLR$vk~_e$cT1_(Wk(b9|lX_$1{_OHtx zm7`CWA~SuLJuXL*mp!gi at -ovT9bhcd4rMZ4k0*-u(oShE8IJ8Tm8SX8$LtW9Mp?_9 z=Va<@wUuCcvK*i-LUfYd5VhlJBH`Zu+*RU67`f}4<@5)ab=U)<-O at XGm$b3_m($zC zE}5 at 6dZIy3FE97+w0NwuJwijbYU9?EDcu at 7LoyqmKtG(RxWOgGfxcrj6l6B3YT(U0 zQtGo;J1npwK{XET+o0c6jG^X=^PVs~JTSKrpshN#+qGK=Detb6UOCI8oHwcbvBS{{!&)9km4wtu8vwqFnr(Q}?S67pN2LF**9Xc6)y^`$7 zXO6vN7M9w+4w6fPHUfURY#uoc$=~LIs$#!rjhB}TyTY+fKmAob$+&Vm+*B8mh`f_G z9C}gxR5DdQ=a=pCt-?(@q-aBx3ltJC!Om9Wk}6ne;u~JlW+Pn@j#MrjX3986z z!Ro>9P59Lt01dt;lo^d4_h#N^N-D$1t)D`W`J8{ygGl@?Y)}W!FN~bD+&5>CTMvOY z0oZ0-HIB%ENe&LQy?^#hdSMC7 at w0FmeD$!{b(1K${?J*FqA79dUHsItznWt0Yz#z< ziHQ!`4n0+&3JEpKpD~L$&A4Wy?*EpL6XjqAq59n4W!&r#GZt3(4)nV^?`9eAq*d}$ z^1~81%K8o3a6aq-f;R;lX_J1J;>?}=Q29Ic6RG-o^L6dkPC)YoAsF5Xk;et7ic?5$I27 at O>9(55zG8ZfHeyXoqAVBYALg4 zernIJGeBygrN1XJ=lfORJ5P68bzyHN!2$9z8Xj`qF#MFZACbP<^Jg<}GVi&Ub8ZkDwjJ>wJuE2FDe&@-D|OHI%C0;4aJ^^# z%o#+}i)Hpj9Xhy5z^Uw=AvQ72&vw_m at 718YJy-(~_ zOX{q5n=0V%M39L~V$bA!bN~uil_FwDiJs-%uyO^K~WW zP57R&x;}3|ZF!9#4KTFQ#WWH};z?dxbnxh`LV*Kq7fRNM8Hs;0eP{f8+)y->3Fy;Z zSrRK1a~`kv)u1_(jxXE=wggY+qas>VO{ABKN*yQfcFdkh8|r`S*i1wm1)~pa`SAex zoW|$n^BSH}I^qYmw2Ra4j|FLxk^Y>iZroe8xfitZNpBR(Q$|t*Uv^6`81mV5FL>gd z=l5LRqa-`J00gij+6L zTfHZy at jXWuD06Yd^bc{KWicZ4rUf?h^CBMt!h3{nPYA=j_~DqQ3b~1{a=J&jx6WF& z1x{U?`XzB4DUwJ0w6$|>>hP(Osq@%zMkq~Vcz at mFDv9ot5+IL&wuJJ^CQEq=?9LtC ziNW}f=BvX(cdr5_66Dc|j=J|}*Wfpg=vptZoaK(`>ZK(?UVr=knOt&RL|?Zxg66tOhMR{;uM zKN=dTzU)gUTA^ea>x0QbaWC=m)~|nK6hgAbsniqb3QsUu at zmY{a&sdwiqD?~8;#)JUoPG6&csrxnRaZw{ZV*^ zM?2=9Ih*g_^aWdA1bSZ6o{5M<#4n|9(f{R|oXm?B;nKL${#PhpP7qGu!_2)f%N|3w z)3GPi^cm9At3jDBI at j2Q(P at gGVb^&N*a+f$L=!ZauHk;F`}y85XE9q>XHseWlhh5^ zfq%E+IFAJc&4>zsm;)AtHc$<7m&>+M&n at Ur6|W_{=D9-EK=d9mqrXuFv?6z3_HCAPnCY)Nb(#Ob9?S zx0cxo4-h38g)c&!XYlHvb-F|+?)c~z*uD$DQfp9vJkIB3|bWjN)An}-53xBO;y zTh#7}5__wPQ at B)l_(Rd!O1J7zS?JY#|4B}cA;~mCLc at poF1Ho}BP5C{&Nm^OGB4;| zueI&+a&YWB-W!8*3gH`jaZeQySXwuC+$O#dUj&GOo%p^O2TK2{VE^HaDBx?Nd)yLR zEpEW?ud?>!q81KS`@B5UNFe$bW|w8(rUSUXWi@|3&PS)7?X2EzQLA(Mu~xO$8Ai6` zSHSF>sfXPsko1Wk&YR?|crldG{Al#qm+5_k^L^~GAuDt3%dk??2}t<_sy)1w^!gG7 z*yf9?N%Mzm1Aj7gkB;pV4(R`alO7`KFP?hEdhHuO4IAW`w~OAp$5V?4EI64)7AU`t{OHu>oc?Pfe-_ z0KMeS0ds1XGuEE6NYuewwVcgYM)4^ZHzCNP>B9gsS9=EDMTldIuOI(u?X#o zMa7=@gXqPkYty%%%m*WFtWwOkRCJjAciOeCAIzf?-qn<{$4G6J6w8~y|dKmI#>vf<9l=O!}xmTMv4c~lS$!&9c zpKf at R_x%_qjrYJEoNTd+tCP0x0-(+Z?OusK&oUpbc_`WnssnaR6LQ!ZtCYP(IIHq2 z0Rwk~mDitrx3NGM%5!jF1rTRLVLFm-eK5Uf>Jx~y&N+D*1b-RX&?6B6WE{v#->I8_ z%QHXsC4NVJ7AVeJpr;bWm-yItCx!ZEyZydA*gu6^Ozh)piNrA~|2kPL! z&5$i at Heb0eSFtYijdu0$qasw#K2)0|1FWBQrsn};>7lWggWkyuZTK5qVGU};Tky48 zpO^Tejj4MKCgP)z`vTaDCS at OK3j(G&wAkC>H at eiHEe82QViWW5=|nLve{x?+<6a?y zIlQY=gisZ`8dDoK5kuMY*?R{#A@;;Q1n27omq83|PoBevGJzBuhzvd*6QDpB=sa@( z_l%`~x7pS=|FN%&J^qQ0)Lm&rkIgz;R{}0aAnwPu{m5Qnea(Q&;_DhSCpmwVjYx=6 zs?bM650h4%e2${`Seu5<`4 at SF4 zNGSi6^K{q;T0=Xv`;5k}g|`a>pNo=!Fxt*$=jN^NLy3J`DG%zfkH!_3 z0OB at cc!%hHmOgl7O&<`r(>1pBEzTWGfnXJ_adCt&S>aGb3jO1q%2yWN!#p?Dj zBxighGJY_Zl0K}7JF;^lZ#`@;TAanVJ`9o%Fm3AN({;UzPuyP36Vrko!f1N}K5r5v zq56Z6urg#Jmm+4UqzUEuL2?pbaHo^WIop^h!&cGxm61#HQl2z*fiQM#GhJYi%b8N@ zJ3X1l8^sY_YY4dMwI}yJPy2C~p|~y_s at 8_#kUIf&?vrGkmgIssx-cNc0+alC3}R|Q zm9KTlJ*(okud%i{SBjbxV%NHQKJ zS41|&WwwUHAux;gHX$P=aUjb|T|6)WANt{r$yONz)7no_owOruYH|T>{$t(P8=&3x zi2YJ<-I^k7jJcIx;!NA7*ZHpNQde_6jl4}WVSV`vg4(w3Izl>OY(msY@$oEY&^q)j zBd<2uAGeLS781)cme>+=R56Gh)~SAs%?0)AlN42dWWId) zFj${m?a`U|-{k`FZcjJgoQ&MNvU;>wa{1%8$=N&KS5x(M$gP!^Gn}{uYdXM zFN)yEf at EK&smVSxSH6rIZd>hN8H@?5bAv&&>XMLuufH(@_;tbinqh8a-?5AJYTjhD z)2r&W8|QrfuRU>_(%#21>omak+cJgX7pYzC)b2F_38+s!<=d4t7sNa!D3U~(-qdUs z)lZeh=do$x>_|cV3>JU&>ley%zi$U4aD4VJrV*;0#T7#~<;Gou9N#>No9eZ~5*>dO zdFfNxU61%kQ8i~GUg!wf30Rf46;^h|4cTh<4;J;RFcawSNpZ9`C~bnmeLlMrOe*3_ z9#T}bg`TvfwYEyf{UGLrmu>ul>q;Z$`!QonE}eleBc$yswQ=AVnk6~E at Ua+D=J5t5 zrUFOHPmWfzr7>R`8-5>@DWW>c*{TmUv((oVCNiT{6ed=3tzE;+{l2i?CD$Bih;K_a zxrws8UjCenQ4yxc+SyK^K4rQJHB;-9c2gVovr)7pOn!Z*^n%VcGQyTV2Sh0DGl zOY(Ijk!7EPr>NR*Q at -}YW}@WmUakKzlfz#8)$lwwL|8=keIf%iqrqL)XOqe2e6#Us zIEkMZ(;YL{skNDU(I98ddG3ngQ70F$Ct~$ZpaR#(2l_9m#X8 zQ*_;_9N46)4m72&v`JlW1jEi(KjSp**$)B`B5F1E zxhOgPO2&Q=6Fd3Pcgq~lZaPnFN!|YxUPc>0$y#Wzd{PpKF1N)zyDK!W^pZbwB3ha| zFTfms-?lWNUDosMx|AjoYL_pB*(ao(JLAdKlbTvgWapG3vE+T=XBgQ^t-{Mw>KO4b_^*DJ-}PM%25B- at H> zF1+5wMFPFH5y8-pc}VOZ6CQuLm&~lA6&qCECvmXb_Y%D|5*B-?aTA&ky}qaG<&W3ckxn2R%b7I{q!D(pnt8k9|4~k}X%0!-j}ZB(VmoFO zL95$TkXk+b8hbE}=Wf$s2N4SR8jaoQJ`Yly8yOV9h$hU;g}kGYERhM4kQD6YU2eD~ zKKi!nP2T+BI`w>2GtS&u!UV6@tu0`@ zfjN;P(rwMN4xV8+imQb=!{b~>f6iXt%bGp+kev7|jXK$g{@M)e^T{&BAi9jRj?9vl zAYAx}{?InGEX_%1(uGt=I2rW}-N>xQ&Em1VXYfp*2W-Q1VaXUvE$VqVW_GNO=p2i= zmQf+fq{tVz36Kan0^(Dixb@^RPb=SYtWSv0cf^*8cQp7{Q5CrsDvlmeMc^8c=Ubye zFi}!Nl6JFyjoo?(D$MPzMXo2i`?6DHlP&ji0QwJnB6NSPGuno~fK=pR;Xc6s_psRi zB{(n_Vle+N5B7hdWB+&Pe+`fQ-%=dH^539j|KH^Q74!A~CU5ya1la$+T{}$grXBMyjIQ218`=+v+oz%+<0T#wz07`&c?QFV`DoTTN`|_ZQHiL-2K10b>FM^>P?-Vp6ULb zo}QYXIX&lx90Vjh;6J6dFh&^ge-tFevGHn at 1RX$nVIbD^Udi+8DmleaRIF5HxF zAvPg81DTqja1&iej-OOFIy9*Vn at a80$gn(a++tHkJIDOsbyiTbwDLN1!eCejvgdQC?i&yt`YBt8}Vf;We)7XDT3 zA9kNqYxUI_$Okn?1%kCjI!!$e#^E# zdUn{DL~Rw at 0Ke6wju*{475_r{#d@|A+3`@!{nLinW`C5xR`rnBnypajkhlqLw)Kt) ztFN74mLhFPS#MpNC>{D3SC?aBkRC(~nq)18YdM at rW8lG7(;vP}Fi|=23!b7vg{rjN@!UPH-Gphbamb zA`7dInkrHr_yeIA1}yeW1C~F8BqRkjlcdVH$q&(pLyoKQ1sT?wWMgzEPZ+k|1tEkv zB=77%7eOSz0VjC*^o|sDNvtiax4NU#Tg!(jnoD?PWbWCq{>u-{2qWbE+lL%1im(T4 zA2w{fum@(J25h{@3sS##_Fzxw4IgYz_zigo;l-;eYVOkFJz{iT=nV8O3TnQt!*t^@ zlLOh8^>T?pP+eLHpJeaymv_dX9_o{rM at p}~FgNTj6DqQZpt>M~~yim%sGg34=KG9#P0#z9C+WizSU({3(OnM|x9pLZ-Jd zZFic(y^UHv3?V+7_dKZZT5r7AI1L^|(R!%Z!qh~8)2y)3Bpbk;ERv0?aVFvdM9}@& z++xRr6ZW!5x%nwHHVg^-nSXr)^qJZx z=Hc2Fn|NN}JhGpsM$R7~Vtndf--gl`PXEag0zx}`MeLJFB?`D1#N|IVr;@zFcx~W* ziQ?vFLLPFoM>|K9+4<(czy2rq)A5BntYoTepY3S>CD{vua30N%9NAxrAO_?~jF>%* zPXoete7zp%{fY|ii3wKX80d2gc$MTmBK?d8k3yx~hP(rP(y7GC z4O>SD{muwYMhFM}G5w7Ix(x=}M~*d=%<&Ecz5{_W(~fXtA3eStPXT)!@*#-ZW^ed5 zd}`aTv8IFulKS}?zrVxuV{6;$<*0b&!xZKM?Tu$As+4(g7SF3cVP^9AdVRKXGiuU*g?8{XFy>Nz*T6uHSCE z`?=B6pRoPe5jfGV6rOQY1|YW2cm8((y&~l6paX+Y z^nKP;17rSNK&spVYqSY}>>Uoi6Rr50b-;Da{E1RX59#G1@(1f^8PSyBy z8N8E1`1mT_pBUJFf9f34Dzb6+TjT2-P$net7<|(MrZ|6_29H2HY<8B0mJ8c048V0QA<~!pLY(w2llyP_>Lv)I3f;PF|f1~>I=ox$mSu(Hk-+<@T zlK5Z)yJ1fG at pl&iwfc(7#;`(&b=p#2Gy%?eMdzFo{!lxcSvd3XAFuR%4eM}PeM*aO`r-0Uv z+&HEX(4YFZ8weku*s^E(*TEl`_yZqsr6V`6pEsm>Vn!gafOUQy{|wlukrkQcPFQnr zAFX2{cz_+4iGpnDD;?O?pZT|Gvw(Td`B$MnZ?LINiQ at uT6tE4o+Q;~4LzcRh)S41B zeZ;y&rRA359*B*jGEmk7OaPzD(+5s~(#67q_nN6iC2xm;@CEUXhTi)WSX)8hlsn5d z%*})D=}XLw0AL+l$KMxw2V3to4QvZkK6H%(U|N%ThDKEkjzT$Is|4)qGtIpU^tA#y zEtrNMEDx=~S_G>{8^Lyn^u9n4z~Bnd^fB at Yr)XW*7xImwp1%MVk)3C5O?$)_Seq|l z&O4b88SoogN2%nCVgMhhi=Na&w7BbCC$s}T{a%lG{*C$4%3DuZUJ`GITmOfgB8fEA&PQa5WqYCi!(cZ*nRW`}!Qvtqnp8Ksmj*-3D+8{29%A zBdl}RlHM4&@rQJH7IX23-IWaR>{-h5hq^gKTJxBJy8%LXa7w<21;qE6p7X`zB0;9) z&OUf!0Y9G|O>-qb_<-73K>cs at fX-LHxWDned{YrA*E|7w(SbzgO4neWr`o)E6d=MK z*Xfxq#*pbisD{_p%uY=RAK_yrA3&?1;~7BOb^eK(rA1-00{t`}k}(!ZfqG z4**v75`#!0Cvk)m|K=@zct2&--^s(g069CthJ4}~w~-58$19oA!Alo0Q?!8{Tb{d-u4=JKl6wS at gxrwY9n2@2eyxsZ02 z%1-^hrwXyv^rVRRfv!*1Q13OtvfscreP}alqDXlNkyE*cA@@mlHnl-}dsx+{q3<*`n_A4-2_<>|heP zL#ltw3;2NGbGeUHvqgD(FvU-Ua{%dOcC~|TIi)T6Ynb$(9ft$5TCF}mDFWujCwrbr zeK&n3y^vpw6R-G4Kg0sew~AlmNdscfPr3>E_<_+bplgwU){~)dUjPn&#UdAMUGe-h zW_mgDMZx=(aJl2W1?a=SJ zTmi(3v6{Mony}G_cls~G4WDP35hZ_>`!4~&^+yq>|1%f}Ij1Kb65|=^?G}1xvj at x% z_wx{NJ^yMAX83OJ@&veX<62pVg#W_&x6`~ihaSVp(?^O0OH+E#cQ&dsea6wY#GW0b zzaZO8!p#g&z=r`Z5x>=t(jSCC!5m*W!1LwOjX&ItvfigHAnjz$nHU%xZwXS}JTSdk#&HVKP6sBjpjQ8RJ`l?dfe2F0Fn~BYbE{MJ!DK8YubEvBZEB~D5hLl|O z$E|TZ2&}Y44fVyJE$mwRm7P^B-AAkjlPW$=mTpH26OuxjXgk)d`0ZFk1~cm(r=&_| zP=Zzm!RqP>^h~u6X-xO8Xod)lH1BpRw`bO$X6R8DQs{+Bk+Yi0NE zjcfZrajg^IEYXXZy`BXut7_|??g|{LgVm-%Omzi%#n+;-((ukIY9kp4gyLY>F>xx2dk%|3sOqZf`FFIxnb=}gGzao51&5+b9>cu8s{e*rL~lFi zr{h1w0(IOSZh0vw at Q9d3nRBY8vrVJGS3bu_uA?5 at 3%f5!<7)*6YT)B{lBg*RriX&r z8#N07G3tNJ+!-ne$@VXDo;J~2=CFIU}g#zpGkRMpQsi#*z#*{fVUJDL6YD+V7gvg|gex$t$a`@9eC at X7SB^ z`*pZbJYIH2Gz(q&{6}XHPJC_CePfnI1BRJQ|`wa^RSN z+e-EJ37lTZ$!cEl;BNHwoAwy1{Dv=5AR22zAO|t6C@)!$*_0W|MNdyy3%w^~fpoZB zP0eH`80Zq}=mXAPN*peIhBqv3djKJ5PpX*gz$)a;cnYfEv$$E_0hYWC4?%twDG~mZ z{g`_DH8a??lD8_%5od-OTY(JsVFjM^J(?53ZTG8gxFG(_`s0w>_{X$%ZbWi+RyCZ; zAN;^`{_!rxX;%B9#!+3g1A+8JKyye%HfL_Hv74o`D4xPV7xPATNLYDDwoYH_;hm?| z8Act=Q7$^VRFM$hPOZs+rUv^RsH4Q>S$5Cdq^z~6`7v2!&->vDTn~!B`Z?}$#X)-B z$D`i7WITA@=_CumXog;!Q=SN396bIT*E` zralAJjG1EI0vRLG`H&Uu`v-BUGGiuU#DzwVagXHsv-i@<@rA9nL ztgSquBu7D-vC`HPAX9R5Zl^^oPUU32pmJW{4HS11l;m=?`uO=4Y$wBF{4mD5yBL)4 zF at E9cfO5zc(lS_0Pp`BKkQr=)2+|o}>B5R#YwVL-aA(+N=hHGsJOTg6viOV|X!4UV zZgCsrZV8J{g2XnWZ5Hn&%BR?S23*3|#7%4t6WZ;kSp!?>5=)_;lLGv!9tzU%@uh^O zjT=dlwqYriuLg%0YIm}Ra!@H|>SyEs;Ir&AAq@>fK+Sd0j at 38lkYd<19C9f_0L0F6 z at ip~pE|z}J$IfKF(fYrtpw!Hc8Br+rS6fus13qum*XlGluJD at Xq`E{Vc+GiDa485{ z|A@%8Bp21lILJ-%LI2e^{;?lN;n^xXY z7Tcf9i6I-awy=Ukd*~}+96C&B&}2Ip!vFYE-v2PvsS8f1y}q?j%Z0IpoCyzlimDG6 z{-hVlAq7Gb&|?!Q`u at 5Y^6wLiV~tAmO#QpXwIyE(e>5X#UL`j;IQX&=-(vuq`=rZ` zULxn9x7bG5674dk5E*}APf023V|i-$zrs8lqmJ~mW;%EanhizQ!y=iAns4!VRmpVY z2N+hmB at oV`SqN-T&}kD}!TO&Ut%j}=Z?6Y at IppYkGh#s#Hg*Nx`r4ivM=0&%L9v13 zw6u7)m8o>6D1youvFdbaJD}(7ujens8{)0od>=bd^g|`pZe-d1_Ph!1f=AO=oAMl) zfWmJxQrzw0hZp|1wBggBrx^S|uesJFvG_E0#n)n%lap6GqI+Ima!ZD1UA2w)4KW+6N>4H8YS8?Z$>B*K>$1*8>IIFF4|O;f8>F zD>%TN_ore0wvpem at U;BOs_%E4Zzo)Xs)!Htd(TJ at _#?!)C#`oL(E9#)P`Ssw_6xVp zKltCb`)3adIE=> zvC42yzWF8x`lb2Oj3Mq4KnNsfhnoLHdYF(&3f%e=@ceD(8|udu{^ud8eJ~;|X)RcK;JejG(I)a2*76{(9Nu^Ba#muD!Wn%zYlb|L~~6pFY`dSN_<* zxfTQdMY}=tiwfKl2sEF#v4ignhM3;o%MkxyB)AR*-hcNf#lJQI^5NcObL3_XIV-JBxIde~w2*bZM$-zp+HwQLAqKLfovZmweIksf>?w!{LDM{ciB zJBtblMOy-M4~H91JUG9h1mxQ1AAi5qA^xbrxu(hpdos&E_PLp0%Ps3;BlS2Unl{|$ zvHhUL?!h0v-}Tsr^_!1(*V@@6 at GyYPMH_Iwe5t-@hxXzmnC{K7%s<9)=JDDhynYAX ztG*!lvL0k0J$PI3H%324uOL2rplvbC-gX2&9Qx7=0{85&iT~Gc$X~Z>5YUWJy!v!Q z`Q-|@!OFJ7xF^>GxOjy~CO@=bhF}5(he&>2RiXy(*BK$gPXIlTn$U&}UyyKv8+TZs zA?*8b5iK}|W)hbTvqi5vWdf(Vu=nNiw at na(T8t5+wgXtWga4V`Ux{%<8Mf`kMKtFd zGA!p~35#0}yOnsD%84Y|hK>>Gp2Q9I(Pa)(?8Gv0uv%w^E?Nt`{d|bajob-Y`!~!+ z`0a7NQcUbW>g7f at L4mGl>x at b_dBrN_m2toV-Bbijkoh zBYN!zTt{lp*t0;F8Ta85qp_ricSt{Bxw?~9(- z at QnD02OEnY)(6wj&H_Ah*py}ji;Dx!&`gFLb68vx?Edu0rZ@&$!IxoY+CD7{bhvIT zi;FSw(2iECF`{HUlF3OEA2alE1HMV;`RTV0V*@`mo^D#9C^ihIzmoRxh+jk!OnR}a zU7L_CWHHiRmynW5TCvhye6TTFm3WC>t*E#?3AIDvUDc37Ona5LUP)UVkV9MQv6_gF zoT#``g;qW*e?x#P-j%amj~%cvRI-(`laEK}xB|Kypa(NF+%8Ryjud^qKo;#- at JAiE zm{xf8{e+cqG~C9D*{-K2lP_>a`+(db{d{_KqCA9Eb2 zOpW+}l+>trkNkifQiWcG5C_$w*^yn^3%|m3W;F@*Z9>{nUB)}`1wJP}NqN8oq9pud z2!VfP-pMv(cf^W6(e%Z3`u{OIk{jhY5G>Po2NX;H5Ismi#WmvHpWt%;R8yo5#Q$WM zkXQdq)ujMOWL+Wp2m&27R5wE$zDVkoLY7hg`BtS?OK}HrfemU;*bs1<&+(rAy9vaq z^(3kd+<%!b)C^mT6)gvlyyi-=oBDZo5RZC z59mTaU)wIu`_-=k+XoV2Q~Aw}7;xa!Au8m){}6$TDEKf9atfs0`=IH}Yn`=1)ut`f zQm<|b(@>ErpQh!VlvS`Rm$9ppRsAL+UM1SupaPV~*fg8XpyVurXKXxafoIG*X`%Tw z9oP^=r*0v8PP$b at mqs9mxoMd=bCicTDw->U3#3VeIwpmd!;O_eBn at wrE4ivQ)m{m9 z<(=<)4+XC*8ANJ;gDA*7m=Q+bhP5bMC#Pgc2olUY zG{G>1M-84=g$O_Of`in8$Xkv`r(iG&G83}N+hRV*6AI=%c&V_pLN!UZFt`}7JI0@{ zW2<%quSJ)KuH8gZnm52LDQ_YU14hBEA6PI=f=Va^;KV!duiJZJMpIK)M_&v}0tKZT zLT(iaW-Yyoq)s4dL~~?<8hg~dj^*-?B&~McjN%i_57TJobaaRyHe;zB-^$T-`-GC< zBocTZM4a5-eI$-J20$B at qPg|Y1i;7;4Syc;v>=&+^OVMed>N~kq$ch}p?8v5fRoVd z+#L<9)37IOv6fB^q-^4hi2=&!uO9>gt`8CutbvxpvK~!pcps$teRY&Z?4Fo#geKA+ z<3FlGQd4Qf%}6P9Jg+kVWMYzXZIF%GEdm0gF?7j0zhz4*JZb`PNGctl?B=Mmf5rB$ zZq at GdV1%np{Tx}1569(`i6Jc7;n%0_;$V)+$#T88`9;={#0E__A70;QS at oNo?RYBY zof`Mqk^Slptjn>d%58!e8Sy;*Z_iRCg83xbT{=15MHfu}@7qq$td}4|~a8w69gM^{l-~_R$PmQYfHM_R at S!4c! z;6Qrua0G~U3(s4&q at OB$)OkE#F_%yBxA`0H-NXy6K2b2`H0kf-926ovLyj8E8oN at nYu4p7iLiz1evGl;I= zgCojfIKDB{MowB9Gpo}#z&i`WxD`y$PP7Ihhw}Up75XOgyZ*Qr3wqBcwr{MdhQ}1N zCc)@>nkfeTT at GQ2|0-R9&}m$JuYt*wXbnIM)2!BXT at wMpm-06#!FAU`6 zGKym{^HHJQt;MYmn%z{dL!yny6uKt2MRzknuC`;VL>AC^uqzLav)px`rTD|@I9fEq zt|62adZm>(KIil;sEKuMv^yFCquM@*!pBg;1Y+bTgNW+|Sc<$@YIz{kw^h;DqQMbM%64~AU zf!<-!X>e{c5550VPySK1{>A(cLLs$a6uPgpYM*xzjS;tlJD7sWML1bBEu1FX%rx@(>$Zr%@iS_hpHId}4VzsHNygeZA~CXmPSR%~(% z)|zOIArvync&e2VsvOO-`YwB+3gQXwv&IHjEmZ?59<6Q`H9&3L>#)(qCSxNyRh4Wj zP)dhb8lDmroqd$GBuCm-kX8lAe3)M7m>N;j9f7RB(|gX8XR6%+P(NIM4b_h;3^OLL z*kIg64Bgo{7A?W}{aWZ?P=_scJ)8}so0biy-|*|%*WonXC0%a-q1mQ567mOdGLo^%&tI`Q}=?yQ| z1K#9(rlvNVO0zBENthd001dU5MK$gW9(L8L^Y#u)v~`vS_8-wYxr}cvQn6Lh8E at Z6 zhq!KIWy;IGlH#Ph`@!Mrq_iwh<--36W~8S!491*XT#qRX=hRMZ(1cBGL?aoNr5-z} z0$0Q!k~I~vbwvfJ!cF^)+F{mUX)h+S`dp9nCVq`;ay)aS1^WUl*M(p5wYUv2L9(%k zBT?;^LDfj`5uR?d3`V>qBuz{_D#jeJcB6M27noH$?Byhv&N^UoXE1`?JHc5H2bw~% zUKTwB(qtIh-8y3RB56zdG$_In%QHmcr9{`eixFIGeYa)Vyt78$wgttPzf8ftklR-J4bW3L zJ}3~sGzdt^3cyC<1<~Ms3HL(D|D7EMQsy)LjuNTt&~zPgg1`|REsJba?vv}i7j?l# zo2KpB93Q}Mvt)Up=yS#K#TL+!*geMmU|kXG?x#O0y$W4{Hp$aYPpQ|uub*6Eq-tN) z%&v_S#=S&~?ZAE6jbFd>A+Mc(F+orOblBw_+NAXj{Z9&{!O74A)TE*=4OrVU7n6qXgw+iT at q>9DqVMRYpTLUPz=tP} z=hr4jwB1+lMc*&!B6csjRHH6 zqf3oFLzNNx$VXsR`$RIqbeMTv!qDlvDo>cKqo1PeveM1bofS-*Ruyd$wkA*`i^Tj3oW__iz)u8WsHx%udgMJU*3A}WJQ+9}=dkV3W z%JSvg6mt8D73~mEw%C+n&+_15cl*?L&L~>$zJEWZHNC>+yhBX?zR8V;K>NC-GnWu9 zjv+$BF$z}H-9F($)&0CStHrH28&{n4EJjxNp!(b7PnSWmYmPQ^&tl3K_W1^j`g1oJ z?p)Ml1~9P!Q4ZwNR(A6M?N*@$QD2{BO()79!PZKtLP9?97=W{H|C+ zQ&VTOx)dr)=l0wk4n#L?ebdLcy&C53DKhlLF*DQ^^xk*}QhbUH8d$6?F7jx9QQ1Al z;_o&W!0j8sm)I#=3bq8C#cw0vIG(nY*P`U7$6vxsiX8w0dW^j$QrvJ+y+5+9x(R`? zBdtHI&}(Q?+`l_|;+&Pr>wKV)qD=U_ybWovG6WPn(%ckqN1^2wuWtnh%2O7~Jzg6z zgr{S#y|OvrSthveVx0bY9x=iB^+QNk=V_~s1~%r4f|>ELG}$v;@_&M*-jtSZs=pWf)S|#W^=aLTbTw;hZ~j}8j{vKda~9CGf{#_E1L#`3QvsCG16LvRd7aCg*eZl3(vOs#I8&@ z2z7oA113AgLO(PX+yjcIwPIhemm-Lp#6je~p+mqie&}C@#lMM819@{eXJVUmpcjA3 zSi=^m;YLyhV$gTqLbE_s^sfSJ6Vp7{5LJH--k9?0U^NjU>HykZ?69`c=CtEgjF2_j z))E=hxEn%z!YwBWkr^$*;P9&ACx0AayA1xCbKfcfy?ts>Gv39i5k at Md0?9+&4 at lsE z+RlH2F*<^1{@v1`$LiS+c#65ar~~zzJK at Hu+5PfhW2Fg@aA*pO8tBnzoiSfJtgML?=u3`M4%KrSWIa>=n1 at z{-5dA213} z9c=fipftei<5WjkW2 at BX>Nq}1Kd$%uL&hTiZQ{q-x7^y{0?th6b3MA1VxFM!u*JAj zMrqvoSp>{mO(1%`JbaJX0a>XvS}gLv6cbXP{hXlycGh2*4{TRWz$oR!#rHlBC8R{I z0QUisZYH>0=1swyqZ>ZIjUi|pcPNb~tk&I5q+5``^!C>vBUH!)ON at XLOX0P8Gi!G# zU5I)ii%)1^UDGY at E*;iLNh~l8%NU2ugfOGW8rEN8|IU3Y;=>54T^5S$-t)q2=f1y) z>@EY00-J?Z4mZOpLiJk at 6z!-4eETC8Sq};kVd6Go?DnD5<40+Heu9LoM5fBarzQNI zuP5U6JjU){u)U_)SN}`OgRhnK{oAjhnpUfDfT|5KgZB9!-XPwS3RLzP1a;)yp2ixT;=TB zPsm4hh24;}R~i at YbU1ZaxE$|;>%z>;f}uZJDKkAO`^V_KW=C-&^C at IEri-t7m1FC_96Osa zwiJyzn`4=wEBF~BcUi=C9St(Z_EG90tDGKfv=cI)6(WtJ{xyGzMPg*bh3b zOSW}I3dUZQ<5_P==z?{Z$%Teo$9QyC<85a|{fZlVbA at Z@rd|pRgk}2R&S{T8=z0CS~~d7?G;8 zCE^)>;zT^fbD2o2ONzf^_~LDfu9uQ00`A&{yTM0A4zj*68Iv6mJlWRHFNtUi&IwPFNwP~bO`rFt8hY1mcr at 8tqZK2 z?3?A2LG|iXb8{tZ1j27Ywn~~HqL%sILwH3y#q#;6(9AM1sJI9;-gX+}k4OXq%o^rV zx|lmGQ+R=t8 at pjwjT@Q{)-k&tsO?#mfT}Gxg4S-{rWs(U^1OWj=UiZIMk at Bk71~=_ z`VAB%NJ~d?hU#WL{(7?NqZ)Vh_0LJzwGXk9^u at P^e|K$b7}w}|RvCWk at zwX+N4Qj-e5N4nK(C0 zI~=*mRAx{lcR^Om_m*^unDE4b)zZpecg-jLE?>pm%M>}Ts0Kgv1MIJOtIm+$gIH(V zp%599i0z_TT6dsN2kUU)>=9O4WDog18^FKoa-y{3WY;~idiy^~8fe&d_*^J at n? zW;|_ht#vuobB`}MdCt{4`chjdws5W6$`riIQCF^KcESVg>ipwaj&{LyP@?!D3V3XV z&cPwudth`7m%Vx7U$9GB(Zn>*s&pFzEz+FQqnmBE?V&e5?@ZBfG(LWd_%8(K3$~($ zgtEQ}q*u0D3P<@3_n1??T*ln!>VMuTJR}uhx8}%ez67ROPIk{DC_9o5ziPs!8_eaeIL|j+4$@M+aEZI zJ>sRg*=m5A13P|B>LmF at Q>zy7hsYyLJJMQQ88qV`zb~Z`jC9TQizP~g{7300(7Vxh zPNqk_`*r%6`HId~9%!$E=DuN54>l0}{gr5|)82I{yfD!DTjw zh0K^T)l##1rl7RSYOGY}$VJ7EvVNj#fVD9|$|_4{fKy?B^E`Z&GS_n6##y>?a!6Ck zQ8|RBX%c&_g5 at YODgj!imtMV=4ZyM=u1Sk-Hab=Z`jCLZjj&$p?k(K3qNOe< z8dU)!iy`05s0=MJB?{aui^#l1+-^OCs4_`#e?J=#~hUTe{QuU+%I{FW7qcS=}#7jnYoUGMin{ZMA9 z1#`8 at hG?5hRRoQ)G>jT41WJX at M9yESCsP?B`h6~;@8Ou%0tKaB3k$d32ZNeZ8^oVb z5pt(|tXb;~e2@%ZSEG!ctfT9-J6 z5H0M5yMuJSfm1+C_m#sG`BSvzpr6uA>ks!lMSb+uh{Pl^%fAx`%i?~q2WbQf>m1Vh zP)LX at VneBkqIreipA%Ym1P2h?^ZaO?TBQ-&!#nMJ-Q&l`L>EzZaE7pFaNbfaxVx}F0^1<6RG}&V>(~L*Qzq; zZnC_Kfa$pXeZ!Vdh~OV3qR7fmZIfz z-l*j=qW-dxeci9pnti)dqWSW{s3mqRsm1+IOIPU1laAH;dbzE=rfn918MzKx&g($S z@~MqCUE`%3*0xVTI-_ses)*mH<*44 at QG5K?O&Pz at Kcjl#i|l9yhkqw)my%%wyw~sOlQX+4|~cS7Z3nzp6Dqj(X+U64;$X z3hn=Dnr09?`&pFvYF}X=rM46)jaSR!)?>>ZZTLLGZE||2r1sYz_mYS&%IY~Qa`U}> zv;TK0p1>(UVPP*cwo*BGmqWZ2xz5AL1i`Z*m46fvjl)@kui}EVgc7E}G3Ax$U3xNs z#c4``{x?A=h9KXoOxpP=39e(zO5WcBZ;JE*X73xdoT{M8d;jMOaW at bY z;JpzV_p|pRpj?>RWd|hueSk9J{`(NlQrq9%at?74_g;&?!E=1X^P6NpO-NX9$QmM0 zX#_FGBW&B!qID at l$~}8Mbk$VQPRB!E;@Ds;=#82xzu6KO>B(5&@ZymuhPJ^O z|F-8CX#3l@|Aer>hhZpXo224?s3qbRoXyte$uyr5eP)F=zc?9_l9cG0GJ~A$a;Hj5 zbjBDwB6U`7=K7*Vm?FOcO=*XL;m(19GdLdf=KRBkG}rOxtr`nNo(fB1ct$aLpBToz z5yyTY6 at Qg;m55TPO;u5?PeQV5oGW_<{3v#&e6T5`XptU9#E~7dC6%NbAzFuqaS{ZRa1F_2!o~6b$&-eVZ-c)~Zjf%SvnA z6b#IAL$0erKE-a at 3kD^n7|Ep=jinfsr5IVI$!ZEz zmYIqdnTiCNigO$}rp!6apM-M{%SES3|7xj6O{BMbmQTXvp9VcgZ_w%I!3QJ?9VDJX zlyVVbtYdh-Th zoZP0CUgNV5oO<)?@}*oet{5j?9P^KG3d6c~d{X%+U$ zvm}${NGyv+$JQ`Q^mxmcK-c1PHPkH#crRN^>F>jSzioF$1dMBz!%fpZ5OXh+{2nn^ zJuUm$!q)_hJi0|_%z}*1l$$v)a}4(~Wd(c%-PZ9-PylNgOQ_G>^v4slv46<+<#xj+Vz}DYeNzqtr?`3seP^eTRZ}NlCs8Ssor#2+A0G$_!F3 z9hFaAv^f&6Y&C6qWo^Jtf_Ppcc$%!-&4BmpUU9<|+un^%CXznw-f06HB?VtgavhjL z)T|PsC;*g&7EZR$d4xCEJtX%lPc*b^@$d{^)Jru_5dNJHjPKUkTIOcWrid~%^kTf; zHGuzz>kIiS at K3y+Hc-*qjmO)3hEu=6<^gd2w773|QccK*!%Dh#pNtd2~lN^%}HAm_;r+*@EhpbF* zf<-Hrfrb23(6kZZ$~QGN{8sC0(|P3(Q$r5-nsl(&ZLCa8w947SGG>pi4t^-a+z<{+b$Kw)u;9w$TW#d| z^fc;JCvbFL>-Xp0eXTVtKJu!6H#qgL^-WAx$8o&XL~{t!09l{-D(l}Tc&17-cT7B% z#&(mo4F<})t!{`s4!NM)t1WV$<*3U<#Z~m^Hwm#- at J*_apvL~WhLnhHTZ^j`U*iZL z9E|#|n77CSJ>ls%9MS&HbtX((s^Qo7!AOKCtYI at M#tJ2uZ)8KU7m^65=J2iyhpnn*Ne8*egW(&X9TV^SZNO%$E;xQ7Qqco;n7ZMGQk3~*x3 zi|mu$DFalUu&gQxejga}cA1M-yfFCDE{AVZ*E%_*rW&9mIxiy>)A`H6pmZWYV0D3T z4g_RwnA^3B3_31bS(uo`skVG(v*K#)gWmVL9mGGFT9uU^Ft?H{`Egmo7T5Vgt^@>z ze*DF19?&=FS|@%3EV%x(xH{DfG63?pYYi3>HryxFRS>H&RPlld2&Z$9Z1Aoe4zT2$ z=R9%naMQr7KZJda?7!3-NY(O>a69`5kU#H*GQ1>`Q%Q;Hx^RgT zps3P_jYENW7h1-A{VIL3V|f%(NZqOI786&4#YASJm0 z!HkGAtXx!sO)Y&4s5hAk{2_(?IK036>_;;$h29HeN>Bp|z;Wh<5q~D3VdYe+l21=n zKBuM&RTg#-^)8mMY0pGDuj)3S58{k3|7JW3H#ategE%8uOt*q#nrGTt;T!Peug+Zk z3Vu^d^^+9&D9*UumCEhszO$i3<9GK*p%Hcb(_g0i^3i-&w7g2v_Wpsj5Gk)P$#TeM z)JUxIP4e0p)lqT&JcWFE4stKekS_ at CsXJH0_B0z(WLLR+5%1KHf7+Iq!RvKz?i9 at 9 zE2w^UlU4VJEGdgtO1UWEYz#|0%d1E+{(&fWkG>-4^`+k1f_eD+oq(}M0k0sAX+$CQ zeQ({H{#z}6l%>^K?Cc} zIA3eNFeY3 at nPcQFB7!SqrvpQcPQDr6yqqvDdG6{y{ITMrR^!w_`u-B)klZq<9Wr at OkU zt4`NBKf8bQhweYhkUd|U(*VVMqKl&P$*1{lVSWnZj+^wMTl9SUp~O%$M at tdLgcOm;Y3a)%!*xq&bM=G1AW^UI)A;l)NdD9g}1PaI&itBo0*>t^#8aKo1ahc zajWi9{nYSCs@%qr9<-r%X;8p0m*?i{%Rb;#by=!Ul}S>rSuTf%-tV(P6HWShjI{-r z(4{kPgO`*b$bt{bi1;lJhrT(F%%zY_gj^k&*1Lu#9=mlrus(|T zt at CQ9;(p}y6+XbSiB1-G5U?{?*eD;M&eoTVd;frSiL_!4a$vmIBMDuJPeJxzYzB`y zj8tl85~^rtA`%@V&$>FOYpP|RWws~YG at DDT8EdJ1(xb^s`=m^9y)HX)ALsNn{v{np zS-NRbsa2df5w!P~^abYoX0}e8&2?St_;}gU=h~F+W#ZX{sRuOi+|b&~R=x!<0p^f< z at 1KYoxbsAxQiYt4GDHEINdg^h$5DKw5ZQw2R#5Hh-of0%lo1Bq4*RPmq06o;NNU`I z%77A$zjr7%`Lv)R6H#utT=w at q zI8S=wx>gsAA+nI)LM5x_+ at xd#ISOJOZmu=`xYu=}8209+D1PwGNu*fY?m+nEyA(|Q zZRUcc^!5mrm+4jWTAlZ3`+*r_oWB^7mNdVylupQ--?*K=GB#&{YD0A?I1k+y)OGWH z{qs*q2{nBAw9qJ$!B`Q#4-82&*l)&Ft1|qo<^2en!mU&+*D)CrjYHLF9s3(JtsD}H zwYsu6$IIsxVQzoOtr5^P z&)2k at I#;HNo;e5)6a^ny<;T at Q76g+ITIE$=PNbrae%EBO8Cj94e-p at +-}$tyX)L?P zT{T6&FPvYG*w!?C7dA7Jq4Ma1{7v-nb0J+vj*2h$5pLYD$7T2GYv>_iaii*RZMJ0bc{1`{@&iF%W`zfEGNAQ^!u2xNB{htQyMK^s; zbAcsVg>Mh`8{3r<;A?N1Bc2~^{+C|K7%qsRnfK52x at Jj=WJEKs6F!_5Kv0e%sg_up zn~jS36G!}2(7xjv(Op`yPmQHvlz_%X@%|99LcUWb5q7vjHB2}^;|i42zo+{6&KS+N z-7x=^7YMhSie5D_S^2|gR=PYryZwm&;qu6HnTR0Dfkx_8R-=R=w8x7>-~E5v)Ug_o6j!FNV+e|jEh%JxaMM&(QN8<~#jkqrzo`QI3jjLzuq2Dp5- zJPJW84fdX6{d0tFes^%jDV>npeuVot`Sp*LsLm{xCPJs?DzlFkXD}3ahcK>t_}d{Q z*{S?)uX<_Y_e|cX@^OARo)%S{Rg~F)tt&TQudC$MBPo0sbJlPVqCHBs>-|1*>MCmI zJ+w^3IDHCNhr&+#!SNEyyphAP9CDNgH>46Y%Rki5Yc7n0_e z&U{X|3h#>@>$AB;-l25b$<{hCfu8 at k_KT{j#9I|@rFT+lj`A4*0 zGN3z%qjh9ZjnTO|J+Dc9x^QzJ11ZRmF(-y2Nqn647(`^%=QAZm$>sZQ{sjL^Q$11| z>-HGiH|Tlw7}|DdvEu_M--#;tWV-E7W#u)$V}WQ3)1R;UHX-%NmRFfKGkA7WtxRV+w|os_R$1XJHQ(?nZRE$g`Zd|@$>>dD5W2g6vy zjE)Q|(&^R!T|6(zV2YKP3wG|3n)%sp2G)6m7fjhR6`e~uF%MaOIx6A)psekAW6l(! zE0JJ0ihsEivib}A$ToT07%44M{lz%S)Zvb`h4&r%BEvArs!)mW^alPu at lH;=)0WNK zt^PMI&1khP%^v=EEx>5x#a>Te2fRF-aJ$_p-Qr0T>S$|P%k}C={qbkQC933nU-zS` z*XzN%UfDhEb8yd(?t1A=@1$w$#_l~QuL|iWyjfm;A#+XVRS;49jQ at CU$h(H at Qd5wAvr<_>i`|jHnar`#di*otd?}W zNsjLZn3PgJB5F~H^*=wA?jeLi!DTi*msP+AzA_}-5~!?&=SveTIvl9i0ept|ARyG; zL8ctA;P7U7);Kp}Ib at K3sp=~)rFH?U!7p?B8_?Nv(lBU10eNQ-M0kcN)@Dm5Wjsx1 zFNKV%He44a at D)kxjqJKD6D7JIb;9s^Al|WaR&Q!~ps~FP_#y_S6a|MRqS|iC^l*w&sYfP+-5UCDt^`n-Zq_KRH0SbRE^0& zO0xlDFN3b6i9bD5 at mi6nyn!P)FO(Orb5F{q*9+pal#J77t0k*-67COH*tAM?o4fg zZyXBvMz4+(ok7jG^kw}xzjIT%Faj`^w4JfSyj!Xe5*f==!dhynSBGD(05uxT2p^;P+p=GAFNTeo0kI0Ajugdt28wE0fITbEc%%uZWt3Zjmy?(y4$WC8k@!7 zsTp~v)So16HW+sYw)Mslmo~H#EWl`cT$3`R*eEvjK|3*dES&18n1DBN01H#X8o2m@ zspEx|G(zWy7_9MoNjTljMJ?epF}=jAIEaK(+;w-T`gbBN>g*d%hfarWwY-c?RbXjC}GIPUN|EVMW at NZ@~g zx$x~XpQcWDLdOTDy^C_Y_w{P^Q`B9)C#m;4u-I*Mq$}#i$KG~6E(vO4zXk~qb_&^b zT at n0O80xGMPB*xgrdI(6z{lrU{3*J-AzT7xza|*FeRsl`h8fok3ZPfS!*4$+-*`_E zWGbJ}%XEKN!W at VW4pRuA?6t#@X7*9MAqB511Yq<&5OajQU?UQ_UogAx-jHKdne8Uo zQghuNR<_+fsiZyI5+<=%n}Kp3c#OAQR!HTmw_S3x6(~ijXK_ at iGnebR zIx!9mielhA=Iw^mA82LXa+u4`XD+B0!dmvHNG8KT*N`<0>67N*5ZSQkSme at yOvnUY z%_=EQfbrsk(KUC*HMActWOX}kI;_tvNeWN<3RMaTRg#;FIUy4 at +x1O(VjN1S8mA} zY_!?c>iA3%UlB(ybnC>Q2k^R9x^`r&;CKZe0w9iSTJ7S*UywEc{c at ex9bi6A!xbr* zm*9{3;JglUg|&vC;))SoU9(FYzPAueyrJpA zy6lYiUJ$H7)>JpcATpF+v4?pLfeMBimXPu^`HVFla(Cl3%TROYMI{5R#y-OmvWi$$ z^W at v?*T!RCa-Kin!Tprli^h$n)+(D+v`gqE;V3w_Kb!O+uH(AC+^}+BPAqufaxzYM#YDR2lK-h^e`z-t%zHN_8pC0Fe7h!2+FPrxhPxb-3ah zsLwmPN%KdZxSxZVtYw1s)Z4ny1YyR- at OujJ)n?FSxu%N-(r-IZH~Dz9{p!ieTP6un z7a-h!Mf@(d79tb88w7a5RqO77FPPpF_A at F_MG8@u{iKv1273U&fy5M`FR>od;45N= z$Wsh3B~u61MuDORf;BFdNlO5YM%la|C$$T!_XSSE;zdxLdu%O3FNhcteu at TOVCq2M zV8sCubHKK`=DP8VEID|CladEts4bf=c~}TLo4yrs$VnP(6bdiv6TO#4nhC*J!d6NA zt6E0NJV at S8j2Arr5m$1llOz|l!Qg-FL0V7mQAqcUa%gV~qyM=8h}|^F)SUxNfD^D^ zTO6h~N!JL`tv|Emvt`U!Cm5{3AKY0U{A{4S2R~+dK8M=#^gHf`G&^Jvt56kyOK at 53y>RvcJzAYF|QI9W5W`Dm)ZD?^x8h$M_-SLHZ&YP=AIvpHOLqo zEd=gIL3()ZepVk=e0Vj{dcDMZwCBCkDp;p8Ha?Q?q*LQ^X|=SA)Sj4Z^Dz&cgc>x| z3&3(AVpnNT0}nPUe=Sb{ac05IsK86bF!Jsh^n?h>wIKJNs9BHpyqdGQQ!$~{R3Ed4m{q&Cc)90FPB$V$QbZ;t9-JSXoD3RG;sU zqGaLDX1fY_|NW)Al}MMyWbT=v*bX|Mf3)~i96l;Qkqk}uUL_m79vf9~ysAYjPJ}k( zG_`tH#BJXV-i*gGd~OmHkV4|DD7Kg*S!dgXXAC?~Z61fYjiY;)-p>pU@(45(mqkXB ze?cEE(R-^LzWMB>M^1J8LlJms+W^Ta6M%@%56Gof40-~;*+6kuCaZ=VvT$aJgn7y zB#`QGV`3BS5JSv*?2siv>T85(dx at +34Hy7^0+|etphbt6g-q2xbx<{3HX`B_w{Q8Q z4#+>Bj>=YD(@z;E3=>#7I1Q3n|JJt*%!)CNah~6J0G}mnCbHf-(c3PBI=>TW7wvR+3GCra|@e8iP*Z` zJUv}smg+bX;#_{bJqR+t)+_WKpmZcJ>~%;moDiUY#Xbu{sX_QIt#6*`19G+Ke*A9fYl{c8nL4XjE;A>$ zPYKbTJfY}nqN0(Z|7W at NA3=;G7+|G8bF|8rvb-`TAHYWUyjtp92l2lfB4T6HxsvHniQ{A-B+mE2%V~i$T(5~CIZQHhO+qN}rPusRJZR44??e1wkZQIs)ck*SQbCSI)b=QxT>qp&{ zm8?}N^576~ARsUxAcysFA|U^tfCYg7QIymWWt3HtV*Z{40a5uM6b9trKNQpDa at F`h z%>F-N{HOnoDvBz}N=d3~FeyqsC{9l)$TKo6Aj&h+%}&p?sIe at w?;g2Li=(+R$SBOp zXoAFmQZhcqc?0rd)zIbD)IIX)M9*g)5%%K|JyQ`BJQNWWJrEHC;%DNfF*pd|;oQ_P z1s+nKID7!!fdAbP2ne>t|G#&L|77Q6%dGN$b%**tge^M{7o)bVlZEpycjo`s;s3%% zHA8aD(m_C|r$9jn|4+D`m6a_cD-#=&g at eOo528QD3V=nZOLq{Az9mD_JRa}D&RmgG ze~BykPqGEeO0Cp5oOZO?Z%q9%3@=Q3Fj;Hu?1ZodG3JgDth5g!2LR_2S#(VETPLil zop~8fuR|-U^;Q%rsu;}Whrk?fOG_ at qu>H-~&d$xxy?ILu`-#BGTVTNh>xuWxAM`~C z(Z&I4BJ6OfkS}_)-dAHpe=4KLdkNErPGMu94eiIn2->iUO6Y8Sfu7 at n{UFueJiWHEKRl-LHy?&k73%V&>>Se~`4FFk~adDCOU$?IPCr^7v#~6m`WA&Mf#_(Ys_88v6 z2F(x+UCGf(Q-3&?Vcf~IXU(tBm_sTDIchn;j26;gTHJ>1cL64mH}H%@QK?2FE zoP>`bf4CIUb74?SU^>RQtU7>?$9jY^KU~#yORUciuZWPmmjKbAzuO&~_ ztxzxojNWN)B%gEpw+ax+_&s2AO%T6}dbbC6GY%?g_;h~4`xCPke+yCj`|lnjlAw6J zd4{QYTOg1-*P;{LBi&jP#S%JBj6JXF${_ zz at xibFu0H9n*R8*D;0n*5>qFAi%Ipms(2eBjAZ{lh&GnE#0O- at 9kM@h5!B3-2&+(Yb+ at ZZj0ML^_R zs at ZoL(-U!6M{jFnYadEm8S$%-57&kddzMybtXfnsJZm1z+&lr*T*z1vmWm~T#=yqi zYy#FUb$^Y6?C->H7#5H`O$v1I?4s>G2>rI2B|;M#nx5BGO_OQ6Ba~Mnur!4R!*l|> zWcB1rLRC+C9b%f2H-9R=TDCSebwn$Z0Xyuq#%2n2S}&TfOflR$y;pNptIjlOwyZvT zW-B=(hZ~P{MvS4z`7&$0V2+X18fynibtWk4HTsAG=_-Ph9pzN$x`FOeM;zb?i?8-A zVzp)+Em+chNYlM+jhX{|oMvpkW4k|SZ>vw_P4~t1B-V<(_E<=gD3Vfeg9d;w=2zu8 zeMrlqj_oCAn=3mbG`*!DZy zT`Ml&9J1c-^;G?>hvO}a(>vY2AD5@&Y^Ze)bT}B at RhgHzhr5Dr;d`Fd#>>c^Mu4*9m*5WuceMZ5i!T(E%K0K-8bz8_Q8T zQ`@U2UEM^nnB+DS;#r&I`9x=bDEa5H9O9mG-tF=4Yqr_75ajU^?z!1(HagUCUwmMc z&9>d1&TJrU`dnrSG$%_B0jnqC*aI|G!SAS(hS{v4?9#mnmu^ITWMrglZ=*zSKBKm5 zKGmJ9n2RCmRF|1OK2ySk>jr%EQ!SFe#05O+9uG=2DC{G*GqR`uP-8Djc8KK`LW?6b z at _rs9&}J(a!;$gPXfnwreXQf$p0Uqva}KB`KTuaNYPu|O+D{5_eh-n?GVMro5G)`f z=hOZL7?*V}h at x-NM@G;O-?W#N at CThLV2G`!h;$$&}feza0RDx$Ha*oBB9O=duA zR;8ET$F at a)<(OWx)DbENNUr zXT^>Bj=s0=e&_aRJZTQ^hjblFr~+x)3aJwLq?H33Em6aAD?i-(f%ewjvWFFdy$j;J ze`$4bQ-&NH+zX~ac`~c4q{lOP%||l&uG;;YnB0ZrA`h7JM-5o740RWd1g}UOKr=b= zN3ES!ANWfGN}oEk;kyrS0#Js$V2lN=d7ub;Iz+iZ&c`y^uG(Fp+Ffz+cC-d#KGC=p zfb|9tY&$Pl`x(jxs=3>O-7KGX{6v=#F$z0Y85r5|W!zI{mW){s9h_#Nlat1kjzym9 zUJ=JHjuxUjUhbA-A+dJ1Eo{DP8(ps5sdG|4pn-=~+SjLK{*5CGcmxBfbnHbS&i#UY zyi5_CaIA!c%P<@!Fy5s*E(PaR6ttbLgsv at +v4nr93L(#cdFTugYE;=WUR^e?a|mhP z73`pRXMe*GHV_DuL5d?riKu2Z`O}MV+SzzpB(Se$Ws#Gg&Uae-=Y#@^pQSYN&(rcE zN9maUB|=n22*xisQx?wV8H8`ed)~RRNP1gwmVrtL4`VPLVb?D*1FzzfdE#byu6m{b(h(jc<(*Ahx;R$_050 z6}9c>#c8y<2YKw*>HDnJD>iIoqyXgfyXpG1w~QTpH{G!#^4lRBg9BxdPJj%^ou=qr z{n1co-b`?)ohd4_+ar at dxmf=A_%rex%BcS!zwzqb(SETOaD8p at A=E$tMy$+!AF-ix zvJ at cE_lh|+m0`^(VN^bPBD|}=CKq-J#%?IeLsCRkh=>A4oWRUqkEza0P2$`3G`04L zpcYQQRF-grcfb6`Zz)s;5F|G$^_nV;Apfd#OvoLm$1I0o71Ga-W0Dp9IH2Pvh3SN{ z&aOV>uu4Q6V_c&-BR+%lJ)PAWxK`l2N3SphC-%+}gVKsZiMM<`iA^KF5Obw4$gWDL=SRFvOur>B`Sv57~HKR at PZJcagS5dQ7GrY3X zPc_RORmzoAvaDt;~GB#w0|F)?XG~> ze5fI)@Lc-ELh9m;8{9ywKtGd~TKU7}7>n@&3fM(aiU?~K>lh|bv at yE`4S|px)-Wc| z`|XRUSxS718L0j$fyj&5S18{l4S5p(jHHGn78q~C)^TA#P=*!^KP0;)3H(EdB!;}> z;B|Dhn0DQIi79FiZ{A_zYPCB`jm0 zqX(0}G17o4LVP2e3cO2jW zu0BX=j%yDNQ9*b%p5=!5cG}pY#0U#5uvnmsFydN1Qn{`1Bb=-b9cm_O`8+bu8fwQa zbD at L^nZ99$jB^OTATw&@9dfQ7raF_qyWkv{U5z1D_sC-)j$7mCLyt(p!x8AQMO_=vsr zp(nzyF2kWV%JVfOH>3mmSEFYKHtQ0`W;5_SswBDKel4lwU|bgrzeyrkmM-}4mc-MF zGvCs8WAji&P;_dm_aO3-1j5^5$EFcI`N=sw+MzJalN(#Z`y+HP9d^>=ESU2NDR&3b*?!zd1-sJ(|B;F3-eYSMGc){nGA;MjYTeYJrM0u5#G= z61mup+d^)YG%i2sQhxiil~X1JZq`X#QBm=(+0Y=tT%7 zMQU?af8lz*n*=kKs7Dy;iWAJ6R~O%w)DTj~CK~w`j|`kIScz8cLNv84-fpbDq)r`Y z?FK*fY$M+6mY6V at y>8m3!@|yej8LtPYfcQluHU{r>c9PNcE=`cdbzdz>$p=*D|eNG zHXggWZ;84u+y(Px_$ZKVj&ips*hSY)rE4IBTt-xfR z4Il at L6zq#h at s8jW+@40vV*R4x^37O*qK4Wak6)QE;_fo`9U9QM6Tf!^<*!2C+JOIFG%#EQ}!#hWYmho`&m1*9yxgctnTbmpWU5jq-U#87z?Vu-fq7&95>?5eM zf^)q?tjNE34TtTup(|_S_dhDIsOA|ss4w6-yGLR{5*id;a6&9Y2$pwe*&M57Ko~TC z^jH*Ex)A%mh3bnXVSmx^s&j~&< z!riTTi5A_VoG)Gue7|XbA*Zzm;=zYg1CJwYho7onrk{@KEJ>(+?XR1)WHt?{2BkeG zOKIn8;7iP6lUnGONu~zVwEW1lOG(WxkvMVQ) zTEWU9!M4^(Gc54FeET~bw|Oj1yH4mkjPsl*fO-^`nbg2;ZPS26kT_=lk;j8!VEc24 zoO4)G&~|8%n6&JTCyQBX=I_SLR4p^K**P7xuali46*xD0vP_C>j^2~HEX#90%l`HH z=pO~Z_=pq1XJ$T`Lc8Xw3>MW`KX>>Q*ga^d at erjClaQ|8asv?n&67QT!aWJ9+nEp` z^H!-!rclc06q9^*0~Pbnd?LtLVRx})K6bNkc#$VfbMi>uTr6o2OaN3`?!O z`<#kQn1#TUNPzeTm%hgztIcFhv{I4zQ7jxRhO+0Bp||Ii%EC5YxOD*;d1smr)Q;L! zf}I=|?|7BO+B`8E7OW2tEBQ=p*BKy>vMEK+>WaHWCMX3+DaePp_ zn|TNG2hibHU+rI63~(dK{Pp2qGxCBXd>uNlcTUp=O2t6SBoCL z0TR^Cok{f7wtX$Tdum14S6Bhcn5Ep(hyZ(?AR2fk at ykWTO!_rTCz-lu zgf)l$*sh)+l)l~O1Vg?(H_R>%SBD4Q_J|`)S6T9ZZ>4Sz3&aVNGyeO>eV-tJiMyYe z&(E=aN0+Xz0u85=+&A=FKOt#IodoX_{8N-wc*Qt3#kl)jH^i>#h^e+qG+IMzwZ8*p z9;LEpRO;^cyw`wR!%16)1C9)LJbDfyLJq4ouhd+wuT)-Hvuw!anGF4topl2Vv!;v^ zox@&8s>%mNr61>tSPYoenpx5&*Fh{0!|%UK;}?C&G at Z5FD{d`S8E*!N?z|K0d4~*2 zZcxnS7`*r#(BcdokVp_mr6O47DL?-GV_4w zmS>Phl<eby0}O5Z7eRXDOfBEKM-4c&jw<R1N>j|nk at +Mq7SzLmC?b%6!@ zhZ=J-!_#gi+HBE at k|igi;VWDEErFhFesQgl$Sz9t{-n*S{$7dG%f`s$|$a1g&b&*_Orpy?AY6woZ86GAnjdks5F2&>Sr3pX;{2G{ zuLr>#uU!s$(NTlac?fIO>9zlCCzvAS+NYS0pqdjYm&fE{mE at 16yi z6_}iUI(2c+ADUV5f^!deD5Y?RT=iOH(X-<=5cSefsUG zDG^EjK5jxuWnBae<$}5g1ipB1nmSw6%;%l`7a!X&>#R;(rYh-v(xG&;gyQ6XI at uq(tl65ERQ{x#Qv*1fTOp&O2 zgu$jn*GtBx|4WK?0&y5gZ#}ojGOUPBR90DRD=!VpW^6DuVm?5+=E)R!68Uu2X35aw at C_{|MODH)8BONY+G at +m*@Z8HuILG zkKZHqViqvC at n_){iY?4DqU{LqM7_<*Q at 6Ne1FDDbLbtw*hp0|IfhPGLGBi=a6|9-Q z=NMeIm7iE4<&3h>bDC>mhnk*Nh+xl;i-n^rh`Vlu1x1L%HZjgcg{zC4 at D^75-YykJ zJ at dqFVNCHP7iIPp5%7fjoKCo16Ye?G`!B)F*nYg1D=DCk{9^-RJl;uN>#j){m&^0@ zkqc6im~f<`SO at 4$=4!R-M0{e$e_su>63;~JC=PTI|EIpDV&&Y7D7aPFNNSfh zBgQ_Pp_-`G=TkYL%OySIXrmZ|h=|K2kwOvkXe~r&D*nUPjo4WH(3i{iGwW#6B?qU3 z6($JYTu_(OnysrGuA5k3Avou)noCyQ!1+EtG5pRu6!@;PQbS715aa$q8|VHp0SB)3 z=ISJzE8SG++gw-|9MQ?3DK~bh~M)pK7T zdz$>UO4*N;yrR9zLPo_-VKrtJQS}!M+OoIv5CKaO;+ at P|4`bhQR9lnqg=;`S`>cLinT5`)QRPGUU_I;Uek@ zx_o|{0Z)?Aow>hB2aO-eKNIi(c2Y9mrH~z@?Zi03YazsDl*NHA(^BbQrrq~0<^B)D zrT+*sic#PVbQkOwyG`~;VZ=gWX&t3qFqQ;M867aT=qDC at 1ylkdX?PvzADjXI@&J|{ zvEx4_anA>6JDlxusmO>wuy%Ejo_ at mHKrP4!zxrq45cF_G;lTZGBA{h}bXKhfs5vj% zZ%O}P%jb at Xf79TWS*34_q!N%fV+H}l41Oour%h;a=CtCFEB;MpBTVds4b_{TM|Z_W zJAgImss&;V at v1j;p*-xL)OQX<=M3yJAoyGga(%t)2kYYJ{T_2`Ww+bWqhZoMU- at +(z$=BV|FNiw4dtMk`ppv?w;;v&v0+4&V zGu|P*{^s|l$&HrnuTj$4bJYSBtZQD`)$8cDuI1|T!zsI}^@vIz9l7k6+u9{A#M9rc z4~@jo>fBEUWR`^Q%7PR;veHgR7Q%yZqpQ~dXDvoc##nTwey#4Fx_9%&#LaJLmHh?C z%%i!xTk4s`z*`Sw-0QOBWfqh-Nh-8(wl6~YI5U_{vRb)NVWR(>fK;AH5nCMa{|>el zirH;;PKI%zlr??a_FfERi2Jb~yxS9C;>e!zY#Xy+nqQxj9PmLX|Ak|qyw94O6duVB zP;}v%Q(apY7FZtx(HyX3?n3CdB<>nspBcJzb25Qqg(weGw;-p`$f795w5BRvq=3cD zMx)z9qdP*QJ3ym5Nx|g}iXPle`TGOqzR&hINfvI)nMkghE|(%bvI3)rU5Kop>4}Ht zXnhx;ir;Lr0#;AkP~@rW^x6}w1+SfSWcA?5#|zZv*F>*$Q$PmQ4A at 2;Pt=1Sz)#p9 zl8Ohc5mAt2V}&R~l3yi}k~4L0iJ%d!58bkC%*p5pbATmkBeM$J{~mr%VvB*sBza_e zad6nNYn>YzP|+!Bq&-9F`mHmq8K+5!5UUH9J9T_N%~{$1Fim at V$a_x_hwU17;vRRx z5;ye(8}5p$B+MRUJbD)jRl_ss6uZ6;7hz1LHmn~gkRJ1ytbuWllO~zEL&aG+GVPvZ zs+HE=3%9z-(mYU4Y)xCfX;;!QD&m~pbWb&>1Jln^yN^@P#){zL+?cQ#4PYr6Ho#G_ zt0$n5S4nNIi2U!SH$a=!xCLjh)k`T{om~7pvMzFV0rKkl4Ept<;#S>!7ZrTDavmw_ zT-PineZ$UX&J{oL6+b(2ULRHvEF-#xJ==k>`)Inyd-JA4mh at eD`4Sg+ssG9(<>?W& z*?d3%nsSRV&=#zjkQ1J$*gtAt?Lvn`p~t*c_l)crU5$DMknSlOjR^yu?zYF-iyW$t3tKDr{c`rpFwET>#X1*(}pZKc%we zaSmYgvkU=(H$ttIwb)J9(%n>S at UfG2Ns&rERbUA!wd+EGsGc)m7%w%lMq$=Xc5U|> zZdP~HDL|W}MtE{~vAYJpU00V0*4zO;_!V1DIr1oOo@;s$pPn{fPszh=-+hw4`V<`}M> z%4cT6pDlB3^h0o^|fw)eH07Ry4Zs{D#lPg!w`|JCfc zb57h9XEwWji{+#Vnrl^+y0fQdG(7Ca7WvCFp0y*j&eo4EV8|W at ZSk_Auq)n6eGDxslxh--=A|<=1{9-RI3q at MC@ca zcUEa8k2{#Z1E1QH3n}-NJ0^yRQeAtf4xY2)mJ~;ya^v_N*y`sjfWZ?y1CNnhOT=#6 zfBQYMVii_#Sn_w(mg4d5DwD>DnYR6zg4n+g;}Mj8 at Jki}hS7go#bomPWQVD@(xm%n z6Nf4U-W7ZhvhH^U>REgQrVj5MQpemCh~_wb1a=PZz}RUR*#?nQBRA8eD{u>&)%Vqz zVwHPA<@fiziil<5 at 7BhDCGI{li;gVx5a9A zq$ahoHc?Ovmqj|#QU(Db`L5+sAiURx!)kOcWyKvp!koOwdkYF!+-;~hboE&CItp2? zQoj++&kFJ1 at +VT&da#YaiT{@28jyZhz~>$$?tSjQXazGm>v)-7iukYW0M2Cv)F~+` znI>bRJ+SIR7Q-H0oWhGX)=Odc2A5Zpc4 at I;-V33VK1@((>$jhvTu&6owf0#N2W?VT zbHb9WP$#Jdo|8?YA2UuoE1HWtfq5+4L7k5;J#2EW=bAtNS-$pxYp)Q+vsB5ja*AAc zmPQE^ZxG>Z;d$IrGmMQf*r)UNNsBsN&}jbY88A#^?4k| z8V{Z|?U*sGa=0?x at L8Chn0+zBD81GrJ4gm5d;G at xaQvk8zAt+zOc+x_=C%n#b;kE_ zR{)ITNFoX^?i!=te%N0*X;#FaYIQLk$&VA3G^riQMyMF#9fJ)V1_^7WVEgJ<)pZ3| z0$4_}xpdbMJ?f5#G3ri(@iB1SOn0yw3~RCU4K5wI(vW&b6H3(!pC<7sziD)B zYo61d@)%X4nuk3#(_Ff%A#N*zzA??%_^6q52V5gF%8YmLu5<52X5ly(!jdBoe$Ca? z7)))^iK|z%0^o6hT2Ifp>@Ye|_DPAaIFwN`gKSieC!hi!u%Pq6-a!(vv5qGna0ek8 z)vGWSr)~N$2QneOx!|%cG}X4UF&7$be~%qBTK?OsKGn6cgpi+^BKhgg0C8o8bKnm}5ICc_y&j29>Y`qu*AwiIpr%|v|*trv+f zYBVPTQn~nJJCSVZcjFyYZPi6AUXhBeS}`9D#-`#0j`qZ&moK)~h8=^F zM|H1~WtBK>NAZ2yW+{6y-GD?DbqGt at wZ!YYYrCq~!ZFmNkif06(U)^`zGnN at Jj8my0|~_pj=0 zrTH`$i*<~0Jb#Ib6PR8Z$Z7dfo{@*7zca1B81f&@{Y0HwFdz)4UKXCc>N=a~alBAE z6g)|{Ewq(3cGUrujB`XDXCq$_sy`*zt~G)~ ztTvZDW+ymbeYF~>MmF~AIFKhvyTVYFIrfV+m0H$bza)~}=FLi?IQ7`0*DYIc$}qBY z{p4xVkL+x0fjs!aGzg)!WDiA=#;Y3^AR7aLua}z~nZ^v3i{z9Y%iug?X&=+-;*;j^ zxKVYGxxr}{Mr-4yFBg;xV;x}G+?2iYT;ksfmLWA&u`nsBQ7a&O0!7Cm;u|V;*ARFn z+JnG`gZ1qL`>9UIoy>PUoeF~fVIuAJTv?4|P`D!gQog_8F3kN8DqY*mJTTrP;oi3R z`hdHAPjEd at 4Ecrkq1hnyF(cb#>_9ORsJv3bRwV4^;BhcxKAP)icQAvAcB6byjXn{L zPpK^~O_~dl`Wv>b;aBLKbKg^?V=6XNQ z%*{xr-l9wM~$RmeM!=dBh3)>{`_{`HdIyOL7OHpdPpwIxl?-h?(q=z zGC6$nXLo)fC`O>B28QHYIXjc2I at V;Pz+2(g=s4 at x4nZ(6F38pog(O=6vzjEv#Z-Uz zGVezpNC#klG4gMsqv8`Rea0L}0ndBbUu|Eb`nI^#QNT`EMJ5EVIY&FekLfR$74aoG z1;=t9kyNUKsDWE?$XUO{+YpF;4A#I|_f762X1tL|AtqiA(SXHh%8=8SHnM?zY>^m* zDHQy8gT(VFi|Y&dar8a}2byVqyy;j1htXHeqGP80SDCjfEGE-!uZ-Kxg21LrQDq6g zHt2ijrUA`MZG+*|tNzrU at 8=|JVie;>%8eOL=5*$@zk=ClESVGXvLh~Op*K(G!-Bq5 zW1^J|N{LU+T;@N6pP=#B^QY^FY83^9oteI3LG~Zb#i$b;>}@xO9i9DINh30 zNxfeXSBvs#Inm{l40Z3o4X_ zl at 7vq-{89+)Wh6OKQ at lWQ0HP#D4X^gRRkt}NzKOK at 1#IjKE`B>gQ5t%2_R|0$ik^4 zA%BpTZPnEfs4-yU8pazPAD9{Fl(4Y|60!w-N0EYkRz4{3V${o9^-a*rZyATu9Dz1g z-u@>PYk8rq_#bc9R~ERFE(gQG#z!#GW|D`I{8`l~@qygXVF4uelpG#=FXnKcJ&?lOt^Y=CwUtR{KJ#-uGJ`j<6rkp>{l+M6{}VpEZ9pLE7r*_h0*ftvuaC}=2?EcAdA6o0iO at wGtbv~T^F zZ_x14<*4Z$Qln)E7?cy=(PHq3akc8sqJ%zO4+ at U3G8U#Z!U*=4@!ipUVg`wVNek=n|0wn$EXOnh5%0U<7C4TOS zhi^U`qJC-@&i($Xar(C2aaV=}sgcM;@9f+245mkcVLnP_U3ZJ3 at I_p$<`eYY_A_Zg zeoVgmXb9M2_z`m&ofTrig2B5~y(c3G1N@~IYHv)muw$Pk6VV0-CehnnT=dv$S>`^dn4D4?tPMQ z-;LLyu#qU at 55e+1?tCU@{bFdEB=*Pn28Zs7^*Ch%l*tdwrOE3ODBkD#g93=IY+QBr ztcR^(m-B`$_nJ5o7Zs{=*@#3BG}DtpW$JIYF&B46P-aMduht0Lk|242(JgN_y8V-d zy3_3TapdpYv>XYi{4twN3N0p}_~J%E*@6u1vBg27mF;u!q_x+v5PY}m7sG)Wb|VE? z`OsNw4Cy$*Ze`#v0*2qu`;RTJ*;9dh%IdJ!5S&qllw4^W%Qbf*-C-H7h1CGPb%|Iu zQ3smlH~1LGz^2Z%h%o)${J`?Hb_V^n9&n!*MY?#taL^oIc9)BZobx{TkeTWplTaN2 z(QK5>3Z=o)_eOmNE{VfLhGr++RaiK*CK}sLqvG5|h{gv&myHI-A z2jgwjl`M7I6=em42N-B4o221=mCwsB-%!5i%#;bJZ;Izj+Ck!}vJ;JQtnE2-XFy)_ z&+ANbIkivou_YhbuYw<7UT-1%Na-pyu`)G*tStZs-e7#Wzz(e}i;GPtxz}>vhj|5e zug5G3YtD#J2n{CuV1IH4hWyFyjkAo;(M*Os1Uuw*1PY~+Z3gQ4?#+wRu!~i4y?eDN zMR=>mkT;)Y=t}_?cpPQ`QdY(BFyMu{NsmiGq{wB;NytztF^e6F z{)BCdj_a~CK*dRz{5z{szyEgBGi9dgq)d0u*|*xXV|~8bTz^^i4`D>M7-T=Sq5&pq zheV0|e(5xKsn9;{0B$E89B_WWQ|~H8S&w9#YyWX7%&VS-5k)Iqc5;U62o<`s`PnQ7 zN}~_C6-e;k+jHAF%Wdvm>$Ix|*s4g-EY>ExToo?LUjQQp!zsy+uPG72R3$rBZRm%>EDg2Oi-=P*j%%e z9|7Ytt9=*1!0Rt8D{uty3Oe05DQ{>UUCf;%cU!x3b*^@sKF~1cWPNwd*~;V65n}7s zGINhR?_WmA$fA^>d&s?bhz0LLqAisDJfEmCWDyW&Ow=g+$j7tL$)CpwQa=ip4h!Q! zvKY!dRmU4Qr}dZCDXgn$2e%LJb~SahVf8lC;d2A5uO!x05sB!y-rLWnEcZs^q5s8Z z(&*_~!g+*D-4V{jTD{Jr zsj2mwI9SBnXN at Yz3>Fz`Rt%GHI6h-C{~W at TfIk~^S+oWx at g+3qP9myzIJ=U17Aw4; zr>R(+)^j9K|5q6!Jx|kdu;49EYqSu{GrY=|sQfOP&ph61hJX#ac&BuzfDQ6xB$+ko zM{Hg at jU$%fAsS?0tDr%tm887%d?Y`JY36i-{SaA9gYq2_l0l`+7YTf06X=wN;mtq7-XG|A+(Q{hWa{WJk67j8A7PLQcp#)r`o~Sb^d? zGSVYF^*~Hsk$TZajv~8T2;m8vs4NoWZZC{=3y9k;Qzz!NN{|(@!Two{F5?!y>KMrS zm95E^-7(<&E#`_~US#*ztzZ(H+Anb^yWsOH%ELPUF;30%=*+Ih=&Jf*GLA}uCeeBI z+0hT~bu-VZFYr7TReIOoI7GaWAMT1tiMn9yhvr&t$RV&3*H>272QU9J8N0jtW;XsX zw6`h}meQ*)ZB`^WKhtw7_CqHB;z_ScTT=4$A(Pb{K*0Z*yHTr_Dz>|fr}!v?5|!;q zz>Si(j4&{PHQG2ehF2OwYm~ma}Q1vl+&y2?u1bWo4ec1oo*%}gG6J8tS zf|nNVR)I_?IIPD%auFSwZ}LFM#qXJCW at T~(R}7^jOB3PX{rGEZ;e_QmbFlCvm>RjC z8l+Hq_rd)Y2wxZ!I_Lii94S1I-XkuZW!`(Re-!{HmX9napV`aMcf5-oStVmt1!6_V zNB%*<2PdMXGI<$8`(X0F5 at PnE^uH2jepY%dsX;7$MFh;C=_`0hZlmp1;hxC%`twu zGyhzL%@N)L at P#s>C{wJ+Lz{?Hdfw$9V<$N9V{>l?xSFJ zpA{uJW~!Py$w|vw28kU6A z;C$F;Td6TVRuDf01af9}-5E;(!Ht7gZWj^7u#CDp zB^cnP*6l&sVCSY8tnh7WijmkLw9Igz^K at dxBy>zaB71Ms4(+{r-OaEhILM7Z!NwmC z97T{YKT`M<@>is2apCBe`1yT at 41fxwKNQaJZgL>XcO1^#!3E`%3nys37J`zD0#KOd zkF_OV54!k?q|P(kGQNDU^(ik{u85lwFinPJsis}<-h2Fo~e=!p`M zwn6BX8?(9!?Z&z*m*RY<21wu?xEII(2;*;!2KhfDtt0B%5$ zzi7(j%{WZr+e#xBfh7=uW6eIaan%{~1nwV`V}Io0*EkFj>d=H0&Lt?5B?7 zA=hRh|6j+T&D8eh8>~O%Tc!YSlezvF#;H zc`f~_Gi{RGV#ie^gZifsU|8|R`%ST5hkLK?^&EkEF_*uN4uf$_`7S;dwTt7NHgIR$9 zX29nf?=e)6yjP&Se=&qL^N+UIU}ko4?O*V$jm!U1`w4L`@B2!yHAUp-c8JydyH_Ye?7sL4#y`yo>;-Q8N?l*yn+3WPcCB-#DmrKkiHun*U0g; z^)=8MNP1%GDlUK*w#yAf9><#Q=TtfIt8umqs zZ4BY{h_6CeE8sJTO(qte2;7PNZnX7#)IQ`-fWlcEh0*vi+2BW4;9S*O&>b8fo2J?e zb_cSQW(XTl`_ticb7*R*UAc);g_kc)g31fUc0=uF3GL3QgUV64#>L}R#(Acz6d%+uv$KhD)p~X6mhE$H2|H!BLBwPmP*$e&v zM at n1WnBLhR6lpRkF_qNfue}yMtM`uJf%S!OQA+^>@zv_^D)<+MbFdw-0?ekmAWic2 z1{$Hm=ZR~xtr>t^OSZAn&)Cyeb7Kk=cuH=!OsVc&ydPZNqilQ@=>@Axw2LlIolH%? zoM`$N)bs&=?ZepgyN1!1E&MkAA-~>&OQl-skf$6Hkd6%hB4A>}4e3ew=5Ty)sKQ5k z^QMkUoJCMyNd#hl-Fk!G1JW7<|d6gYdhcGZpEem8HwQ*Eq)-;gD?(E?hAivHmc zVemq2JN}G~4Wz>~1$EG>m9Jotw7VU#Q1bZy`VGvC3&^>M zTguaF28#n at Y6kBOy5X0tW^g+GS{ytFe!)dW;O3gaKwz5uQEtuPxCgIOFvw}MEV_dR z(gUU97H7?%7wbF_d>`sqY6fTEuO-2q at XJ~=czfVqY6c$+tWvsTEQ`antl`LQ&mtxw zodrkvug$%c;!+j!AM`kSd)!D$685XKvFTuSsZEaC9=cI=YEx}EFbgj7u`C+o1H2wq z1Z|d0ordhVg)K`?%n0i>S=ixB5l9_?DLFTd!?`{I$D_^8Pdoazi;pYCLj*1G0*6K_ zv2Y|L{h2Hwu|6-cWO>X+bdG!$3s(ml$Rw8d=CkDX*-hj{*Wj;#c;NhJH&0^Wx#v%` z&QM?CKo1f;yQ77zl;-vti|LmmGDk+tKLqXSb)ZO at p1o?xZ*4%q1hr at gA>DrwX2q6* zzddw72_~iqX24xzyeS{~Ox at vx;|#}x8R|58YxWf(X}Ku*g1hWE at Ad-TpNx2~r={G! zeTviz at g2ThZl&E!0t(%Vw2!T=$2SApF+fHF-%y zggDJkhjq!<<^i387)od36DTl!+5}|wbTN!EmBoXw5592!ws z1}ZnhBs1_$Twp);^3J9nt5)&Pl;|g>^<8d#%>{xG#RFROiBQSF!4_x7Rm3MZ5<_Or z6hjv$A^sF}zh^{6b|)X-b|@N;q|6AMuU=4x=rT?P&o^}U?b|^6Cg3ZpWAF*mmS73K zWgPwYk>>@l at eI}Hn1Kr;CJ zK4rRBNFhBFerrpuxPoZ?`M7+3ohRNdtzcs&Yhvl3kC0P{Tdr0PiCdZx{xzB8C=Mvq zE7aE}2Rnd$Z`(k=pX zz=7jhE3S~%q)F at 8P9^+(SJj)0-AC9iTFSe87kr at T>R8a^bMAmfqDzhWbexJK+FL at G&>%OG|d4($JGHeOXLgSEh2cH2*8Pr zITHj}1^&v4{x4&3=GMEReHx3gG=SJXjfK@|cEcPYNL;!3nAE)6`BRP(kf-VIuCJ7DGMP}3M| z6)W;}D)DtH at pY<$F=`@{*BA4*;81W6t73AJq*cIHPdN*KtgO)NS9hZ<`^>L{0 zXI3BR+K$J)_%_H7thF$mS8+iFq-e!9=&M5S8YgpoYn5V0xNF%2#)y!>56C%i7WT%< z#g$KzDu1Cljr0gR?dTC6r#!;z*n9czgS$KSM)&W2#IyT at -~6p-fA^(=gfRjf5|ofu zO$hUIg~FSU8=D>Rsr2BV_jl`a&w)0DZ=mqsQZ!sX3;8I`M?MRaG8APj%k zPH&h?2Y+6pq~K{f9;kAyBDJnxH;98b z+t+WP?;V=dsz at 7RXOldR)SkpZw>(q+#1Vcs at Copoy;DkagSz8ufbkwsSIzr^N-&MH zc^BjA-|A3Y3|&v^_k!3E+)U=-aOcz!KuANpE7#V70Gz~nOn=0cVa&IDFYp0g0T`_RlXV0;wg9hcrMmd_ zAn{;b?E}d$qEi_NDi4V*RM8(zeSP9__`&j2T^Q7i54vQBQc%5Rc` z-g1LA`T-r(L}<&^j|-puUJOk=e)9;Jq~!-eeWRI3*`8<`05sO$(#l&0PNC!C zTYJ0I$84sbeH|vD at l}JrI7(w;HcOjw_1*{i*fQM293dNT?TETQX8kih{z~&}=^fGP zK6;TSX}*e&zhVX?Hd!H+81{bW$mh+rq>Rc(V|3|MTHg1? zhWw_O)2}SDHXU?Y;Lg>4B^NH?&PfI!xQ&)gXqE5t7eQ~pJzfUJ1^eaJY(BYT&fj_M zGeMfS&+y9+j~B!h3i&Zy``Qei^@i~ppmHf>BZ?LNf{(&KfgFGPRMg9#+3*G2fW at w~ zK+{L}$^%FIO5p3Z;79)U8^`msM{M}%ct2oNdjRX!o+Jq0rF_NTUNRL)C-eeurTh%O zAA`IH6cZ4kl}->ZawC4Z at CG61pdw>}pVnJrulR9U9Rvk{mx{|_j*B^;Roq%O6>S?X z+)9l~vj;Q4K6-MH{w5TNQj}(jfo<}emLuSoq&ELsQ5FR4{@M3vmd z6dTF`Q>PrU77PRrsoq9^`wb2}N)M`5N5+ZaALEQ(2LXqCae||m13e77PzQ38-UkIY zZhiucf-GQlL~bo7wm%qxevMy#;5D|c8v+fUInPmb0IH5@!E;z;G2}xZ%~zelobXr-4DH3Xrdj2- at nVCWcsd@OVL?CQWar+60jYf*75z3l zfB|5!&CI{NoCa+bmJ7lApicvNbnsKeB#b9yY2{AE*Qd?0K`QLvWLdi87Qo_aM50d!M9CP#E=I=?@ux2wOfctEB&?6-*oK2-C)Nq z9o8@~2l at J6A^c_u?0jnME*~Ek{22Xj4Y=5oSbgdc{spMfaq+}Kv&r)ZC1`{AI*o%( zD2feJ$0zyfyTQFA|Nf~Kd|#{X#N+^UT0aI6-8jYVV~Xy+_x)3Roq-_5M!;?wV7HQ8 z-UyenVc7QI`?- zq^3RSdShpa4VmYFO`hv7cq90AOiu=#!5H-AUS|b)v8_t;(LGQ^oYowxPo7`F`2x~V z7qAC)@F3=ZxJ`*eZg+yKSn&a6Hx6;xG}K|-Cep5Ad`VZT`{fp!(yra~HD!RaU2Fh{ zU49b1)%M^a`JhuiDf-)s!C@`mt3vsC4v~$w$OB`w#nxr{07Pk5rG8IGYz)w=>;?$R z+fDD=$GwhTPq+G;Vs=pH1M(+!IX-szP6lNxx{_HoN^F)D0ub;nY`suF&~Elh(dARO zr)_w*XHRgC{D~#_rYC~4*laDgg9VPG-SU8_NPWw$Ma5~-7N;x0UhNK>=Lq=M?<)g< z6<}EaZl&A`E?Mf8qfYsl$g-5>`{a3jqF(_6tnM4TY!)8wWrGK2%uSz{JtMVB#V3)t?Bm1~L%T8#Ru0Z=5I+`97L8K at -Ukm zfe_peUL$x11W>s--Ghrr#fIC`{o$^q*MYp0Hvl=gL4^ckt6N#U>PVTXeDKSs<$8fl3i}HTDruB^ORi} z+*^RYUH-RX#P19R77m}dhBK3oTm#kPi}L@&~qxUiwzmd zZq&DNZ#TUMO6ONHf(MAoS+>RjbYR#aJJJ>p7SVE9AQn8Nu03o8o_qGjZ2meF-+1Ls zs6K8tbH)CqgLdFA;M*rh0Myw~Kkyge3iH3fk`?Dt-vY3ao17rAE;(v7C_-mky34Yc z6O;}@WaR87PccV)Vh{D*fZu1wUhpU6Q;LQfbWt{x=zUWLgzW5=QDp}}ll8XV* z21hb*XhSQuLQBN5A~rl##AX86aJKjtfK4gi|pbXh$JGV)=9T?B860Uhj?o{D_ z^$zGnC$T|Xi2*T+C%i*AaUz3*o5AqMNe)Viw_{TLWs=|E=ICqyMhQHi8tg=U#=)wx znTJOBQMebdlP85MOyYL|j?o)WVtnVh_dyFP$wa0k=}buwc61kHi2iGZnt&@Q$&x<< zVouQGuMau28?Aw?QzuQu*4Tey{yf9#iKL`z7lO{+z;$j6 zy8k|ZEu=0+&H6MJ${jp6{1j4vKdacO9WC#{zjn-iimWDxQRth)qAtFb+3>UR%CXw_ z2%}>x34D}ZM4SdLRjN1h3fvT!Ms18 at V{q)HI>LV7Qa0nkk>m%sd8}6bK6~ZTrVsYx za7ia$?G2qHUGGPg^Y)4j!7kMYU7;q>3}}oQQt0bAhX?ThH0Q`m?3TyEcatt803U*^ z)oSP&Z5lojr#=3C8opx3q~kc1F=nNI<2VhhbovXRTjbk>dc$7f0>AFZ6Yin!aS+vG zG0UbfDZ`;FE~k$NP|W?7{-&fjRN%+%r{xZUB-Po=9+2rN}APpF%91~rN1P& z;_)cBIeh-YNcGARiQHVY36>bnwIp2C$Lvivf`?y3W2~VLO5Ow|aeH~(wD=g5jO`pg z6dQXYLE$wi1mJuD(RE1@{?REIUeW=?Gy*XVK}3JR^2-D#(DV#IxyH at k3MT)=ZSkg0 zF5+4e__4UnSKsu}MFsCP3N_#~DEBLA29FEw>*n#8$)B2Q!Z3azA-_m!pNT4{dD!cD zybNTw22YnG^3)&m#H06PkuL7vqd%tklTA3`R*qXz`ZisT{b{Ky`lAy}u|NU8$Dg!C z{U=hEPu9gR6&8CJ;&^wx-od|}{COY$y`6t&^83B~cMkuZ!N2YN+s3~g{5y+( z at 8tC&{JV#LALifLyqwN|yZLVy{~qG^2l)3s`sVMSe|`f^3)i^H7V7tR(n=#vFZ|2x zDx(!-aXuyW|Ni~&{nvA-Y at zM5vW0H=l)~p;_*B6M-H45sDf+yO)~w*aIZ3j`90b?0 z{^`7JCI6oh at c;gOrGE?V|KWZ2{^;8t&y{l*ED-L#>A}0F&%5vbC4qU1ix=FpWXZfG zP{x1H{R`&J%?kV^>z)M*esb?Ufq7XA?+M)h;JmDR7B9Z%;jEwdvo4*R^}~k)Q2PFb z58kuj{<-`~;NeC8x4mxxkE<%zUONp?u#`{=7AP_;Ep2HV=AKKNX3~4gG>J{xLaj_D zGdsz&lRd*+(xjjSPlXDlgo{w1Ld2 at b;S#ZGMUcn=saiEE0!Pa+2T at VcKO!CxIr_hA zuf6x|Ju8{LW(3dk|HpZrH<@|&x7K%A- at 5F(T*+oI+Uw{bE3arskt)WcA0u5BA0=R5x zP`P?>P`P|bP`M5G7H~4S`S}0E#SB+#cufP9IR`Qmv|Sk9bjg*}HYHJqmRmSKy~yl= zBb}5ZvCfzrC8lQU%J#@gM)lYvFp;x4oju{5vZ~D?_sNlLCfpI{6cZ9jWaCkXlE^p` z9hoqaASHLoDOrigw2nwTk?MrY|BVGqHqXmTAhy<1L98av?S0_C_Tt_cdoT&7CU~StXjz3FTze%^T&OM5=#{ z8j#$kO<5%q>yg)JamsDjtfZ0mX&TXBOxdXkD6mHJ#L<~ZnUZjRUL3mQj3XLLQNfOE zCxYP!N24h at ou05{}Y`H;|Zn95lv)~^^3^-N{=rnvwxlJUl$g>bYRjdjf552 zm>n{!yD8y7Ld2tKQ+J!7JNKxmMvN9z%g{!FjZK?_!3nl>httedCrM{gS;R&Cg#x?f zRD#HHIoH+mjIwOg>R{H#Wu+_A?Wn5*ll!cGldTsX$N!_ib3hBQ9q0x!zyPohH~<{d za#(x7$!`AM}`C<#Zb2lLg^G)4YNt|oz#-_DEW7}n>D>v|IEWfXaDR|Yaf5<#{c;9C;sxA4?pn! zRf%u>bl4+D0 z&{R4e|JvF5cM>=_&G=4^o{;-KRF?ZbK(C?s=jYw{RA~PtB3(6gT6y_ibXxk%A^ODi z(R+f*OZeX~ed}Zyd~Z;B!o*Wq`jms at P*6E$;v24=qSi$x?!YI5%9l;s z{^5 at P^E2t^uBWbTrvIlcmDDkNgT%1VA(58(66w20A_1&NDOxm)e2jry&k)d&Wf;1J zq20wWFv!r7VQ{7yMn1}ryp~~XkA{yjjHVdI?_dZlWEgWYkXsol1{p at O3}ZJiwCrOT zxSnBL!@xoY=M4-)8rpAVXt{}DRKw7IhKidQ0yi=YX&6W`3~3<$!Z3CtL;HS)@hrob zhQWOd;0}KHT?K)B#Ze|$OkUXFv#Sr)~!@$)H!yjfCznX!3h++6D2BM)w$A=h3 z1{jhW#y`a1yqcln8iqkP!;qI@#LY15Wgs4gQ7=Ql!!Yh;81yhWd<PjBjOVi7+^#3{IIL*~u{0#gM#=VKBxp zu!CV}C&PH0VL)LBBpHUUVHm%XVPr2u%XJLSk7?M;(5_)ngW~|h at E}9Q%?x9M45PPe zn8z@*l)-T;L;GzELmy*s4l<12z)-P|Veoo}VGV&B7}_-?Z(U4j|0C1&a9S5Ezkk%1HJ+r2g+(BauKi at xElCZ;QPRzfw{G?AGiWI0DK+z zEih-9M79EZfv*B%z|`duaRVV>FK`$*4xCgck&A(Cz%{@Fz$?I<6%yGF+y(pyIHO)7 zUSKP5EpP<*C2)2?BI|+Oz~_LU0H-xbWG&DSJOYdXGgpEGt^^(degT}n3hf5m3Vath zakWGmfPUaG at CU%R2DSko0Uick0?O7RCcqZpqrd~e4}iY{OV>$c6R;cj4Dci1Enx0? zCp78nLz z0Hikb3!oL)4SX6n2K)(_y%}`@JAsb_j|0C1rf-o*4bTqU06Yr31e9+ at ZUJ4ueZWtE zvo4j$I^as+L0}9x?J~4Ga3ydAcn!E<8`=@r13U`+3^?%v5?KN?16klsUoKLHng5U~XMfqQ^wfY*StE|*9h&;{HIJO%s$I5mWJ0Xl$dfro(SfwFeQ z1$aMj74QJ?J>XBkoG@|=xB|EXcoO(EFueo$3tSFd4?F_A07wzE7a#-o0^bJS0^CvL z4{$s16!0o=x{Q7YYy36hPZi8PZI z at _w?3w30TmnQS3j$))5nvW-$nXJKiN&L#8T at +DehoCEq09BHt#*$alzh$@j=8`9App`5}3Z{D?eHULY@$elXVG`}R3NmHb9=>+LS=_F~Ybh31c^d4!NbgDF6I!&sOPM2m#XGk-p zGo`bn_e!&*v!!#SbEVnRdD8o&^CgEgN17{LAkCBJOBYHDq=nKV=^|;dv_x7eRZ162 zPRS*?C6DBle3D9Z{(Uw#qL(iayi`rGJ97i`yzlB>M%d&WQy)g+mdQJE2)UXB!Fy>6xVvJ+l;Q z&7 at -Z=QdF+wmPN65}}p-8F{68!Xxw#(qb2%5)_3zD;pc%l}hb;VKhz?pl}b=WCAX~ zjTk$LDj;Js-bCYxq^t;t*qfB@@3EJ#YthbdCLCX5>s(IEuJd;gpvyjj&9 zE<7e^GJ;hJ1;!8*2+V5rY6CWN3HF5vir5Wjw3K?KfS8m(FqoiFI834f0a=UXZsCDZ z7ZR{il at l^DCn;cKqhf0zL5Tns zZ59-$Gof^e$OyCw6%%R}Lr|byTEo5c+AJlpD$}<%tFQ|IN+ at F=38PfeYKqX&ok-dC z0aZvK-m08Xz;luU5vP}BHpKBmSWv)LDl0N;>2iWqQi#e4R4F(D2zUQ&aw^d#r+Q)v z7P(Pl;tz#3lwMN6jmZla-WMxe)NW^@VClcZ;SF{NF=9%raG#Pa!m3l~5iRF)kUhVpTVZByp4AxYQ&vcr*zP9!;)h zvFe&#VkzDvq*ZXpXmX2L2Qjh4hNPH%&2GV#6&ZP&1V^4GkC?j<6YC$46mtUZRtq(V zr&-M5W>26-s6m9>5F8PkykhZ#m|*LA#p36s at e^ucuUPyb7H~PmV$&=t7I4`dchp2h z2LC3(!N18T)+7)U%s`)5lR!)`1ASsm;-gJsbC%N(6$}k+5}~y5HH$S$voGKhTG2NN zg+_4ZZ1RgWvY$4xkiUMhMuwPZH}Q+LvY)oHSU2&DwX&bKvd~^DM1 at +}Pg~h17$8B# z{(#Fb(lXlPBaDk6>`$5%C}+DfpEh4_(GrgAj454f6#AHrXvqa_PG8W68nA<$Yg36H zf#akT6|g(%V=coj&?~xt-D)vcrY%vFAG)~RX)1GxHA+`Zk!5OEQSMAovKX~3 at o-Ej zQlY6#F{+BxBB~&^6ePWXB6%4wN&2XK}3SGdN6SE5^Bt>9 at ZuK~w^=Yf}jUjwfLZv#`a5}5%wfQ5h?s0CI7O~7`b6G#HPfjz)}-~ezR at Gx)$ zcnbJ#R{CG>`=w-6O2$ytD))qw7$4;ZLVCz*IWA}9RjF7e7752&wdbb|kTvwMMm|k` zNRZt| z3X-g&Y;Hgyt at QWCL^KB6b zuX-zkR`1#r7JFLcMeyRP$-HD6}c~#AvcjwxF_8eQh$&i zlaTsoSwiZh5WNr=cJz=2d{1-`@+m0}E*+K~dXxLn`WUrN7W5`x|3$X~TcV|iLLVQV>z)E=$7tz4Ue z$Oq{+gPlx)fV?xLA|6yFRW>eFepoiU4kIzhS|48(tdn2ig zuKk~%f}e`qvp?x`Ge__H=QCLUfB&34xKWu6lviw2W({ooXM6u|`&3}vkADv5eCPX} z?aof;P0k_bzdKKG&2rVaKIpo_wa4|S>v7jNT>tL+qf2s6b)V^;?Ox!%#J$^njr&{f z-*~FLE4}NzmwUUsS+CP~qJM at zTeSYM zOgV3N9(F$C{66fcbl<$<;T4_rJL~_QKFCLXR%xSWhv!ZI*;Spj*VR5y_w72;!k%q9 z>ioTPx at WG3B-yh|CGW}J3%rZHlJ8{SY~O{x at A_W$z3#i;|AhbB)jzK8uI;J4vG(h= zqqSJLk~YZS?;dvloBP}D|8W1peX{3bPmSj?PrK(<&t0BJJ$HLYy|?%tMjfa7gZ at kX z&-su0pM^iGs?*h)d5{>SzI zQU7xNFA&Y&)xTc&_;l9>=&^_BT-?PSZiRW_9QP0bszj{`Bo4p_P4tt;RzT`ax z(XaEZ^Ihh<(szsRQQr~YQQ!A`$9=D&J<9y2`d$7S#5Cf+)_*%P=4<|E{ZiFwRZFWb zsp>>z9lQieP+$Vn%bI`H5+O!tNC!v zKD5E%ny=M7TXU at DCpBX=uh#s&<}Wo;?J2eA*4Eax)?QW{s*Ts~sy$eHU+vM_w`)&X zcG|Ktm(5+aaM}80k!7)EiDkDfyKC83mOZ)b*s_zB&scum@(Y%`mM>f0y8N=`7t}4O zbJs1eySwhQbr02j8JRa)_w%|p>fWj=U$J<_h7~O9iCnK(>T}NHVT%)e%TrawgyW0KT{fwf_nRf->LKS4 zmOE62J#l at ZwuL^*nLT%%HbHxtR*%ZiCytLz(MwgbSGH)nP)eFp&K?k(`&355nXvY~ zOqJnnsq9Fn_3x^7shk%g?77qQS at 2U08NM>Q;90NhQW^R{TxYpv^CZ!@1sEvL_luRH zx;EqQNhSMLZum8UOe$B=6jf#}FS8?}zH`Rv*8{*{dEr)m1{f_jx8MuFc)7XV>AODL z-(zOzOTGf9o0-#4|B!{b5KPMqGgAv at d`5l at 2aOmmLswn=uEubl5ySooqd}j6Jvy^+ zCeT-l24 z(#|4(Uq;c-rPw$+zi{NQfsErqv(29e({5pY3}(c_oPut at jI1y-Rba*%%uEZI zmeuBn_0v)o<~}O3#>{*h%(#Vl1I*}JGjkqB$?|%?gBGtVV*ge z9?~;2<6uTC%(W?H}ueZb6I1!jD^nYo{q zy4=h>2PV*--wRk~((HX5%h!#TtbC_>fj&DNoKkppAg98fj>2QqbjY-HnEiSmn05=Z z9!%20#K8<$m^;A?S(vB5j9QrAf^kMH8HF8;mZ+H-1{09Y%yBU77G~OMXj2Qb0?dfa zwMB>C7I#lkgYho5#iiwXTlgl7vkVKzJn z`5KsE3-fz0&V-p+ihYX#3)2o}+``-nCYdxd-vcvZVWypdQS=Ing zF=i}!S6Wcd!$BhtADOTPZ-9j)T{sWFe1^#$mH93hN80S^U%<3jm}%H+8L%*Ozywav z?8!wVtw-bQ#J*S3w6L04Of(GblN<-AhJ~Z)!a3gtnZb-X=R3iSWh|@Zne5#{Ip&Kq z*;{;a%um21d%0DU5slX%_MQo&v5>qoxv|=a#*_&?EyJR1q_=Q1&V@|NF3ao*#@T0P z_Je7+Fy8<(Xkq?Lby=9ovrtceeteic)aDlbd{0@;RQnj2Y|rKI^^|^2e=qv!?!sQwKxWWla~RC9h1m~g+`@bn zjPpt}^D{633-cay?RE=O4Q9x~$Y91S3_V6NZehL(rs66y^P5 at hJyoU^?Aa)3VOE0~ zvM at bhMl8(TVCZ|Wa?Cfu1T4(>+3a0drrGKo_+?>Mff=$e2{2<8<_>!B^uuQ6NiYrz z^BS$$!km3BYPK*d!Hig#onS^S%$;B=uC}bq!L(SI--Ah7m~&?%h8AW6m{AMU52j+k z%p3yav at qWT(_&%%3}(Q>%sUS`W??P?GiG7Z=drhonf7kL1T4(g!L(bLzkwOGFe|W_ zYWax83ot_#=6<^1`WG|vLof~tbJF?HWiWbQX8lW at cTRq{Ms?K-Xdl$IPa at L-nPH2~ zQ842cCIiN?C*KQJGu3`nv*q3KVn2=Hp2A)nfz0T&W}E+$dU0L8&8!}(>nl?xJEHhb z%@+g4eDVB*HlOA|RQDG4s{u0YC+ce?`nd#5V6WNJU0_-)%pnJR*P7LLrb|7VO1M?i zJM6n*vvgR>KiWe-qp&bpz<1r|q+zr7U9*{fPMd>Xu($BqW%fd!n0vtt+-O&*Vm7lg1=3vP*iGihp8=+4&@8hEOmfgHQx9hO&1RX)zyxkK%P3&}WXSLl zTL5P^yeko-pX=tb|K+MoAIYCn=;vlCbIarr3xzZ46}rQ>qmZe%RgXp}6zYqH!s;1J_3XCB>{jhz4E;QVQiHeV$1vyD zvt+V;5GN at nh84U_CZ3+x(9l5l at lRG|_=;4SZQHiZE+n&RQ`@{tgAFr@`8 at uFGTR)5 zWS~p`&UDQp+-gTZA7}J;{+ab>Al+dw)hpTCNx5A~uWHUQ)y+ zw(t#TAGx(~?=HUpv)*myqfaxz%qHfmYvx?Qj+o_`#bA;jH;?>lX+4IFadgG-bTdq} z9=R^YQ$xEnjhE5-&MQXW`R;_CZlM+)uwOAUnMrgNVe>pvc$s zbg69i0`^vJV>Ipw#}qPrz}yylFEDA(T_a at pbua#&V&m5Y;|Ax~#98-oXde}b^Qb_a zy~IAw3rXQPe-`$P6|jeXo`g(*n0?QE^!4`(kXdab^A===?liZ>^m(l2T;FkkaZE8Y zUNDDG&OeSlX2fS5{=K*4_!!zHCwEv@?>mNebuCerFGe=NLg!tDN0KOH1}uK{f!SkW zuA9fsD(0Bm!HnExj at V%uvAfO8kHC!Goj-~)d#KHBh|MiIK8DSbgO}0wA`jZnaU!~g z3|)MT>F3w;bX}9@>R;)*%nw>}Y(6357G at rp!B1F@;DH&lFdqQpxW{t*5X_K;8K9*s z%spUQ?zJ2ZquMRZaWIFbPM$Hq=-C90BZshY>6UOlOuyA;&a6bPH zGVPx<&y3S9B;XE?=9O8})4CyhP z0_QKbiQ(k?1%?+BuAjBJ`;e~7#mi{AmJ|E-Ix at w6f9H)u_WkSc)kQy7BdX-nh5Oe* z+FqZ|k31`-A4hukEc`082W%|-K4e-r3j>CQj(63%uG3UhuuKG zbR~Kd6;I at 8C*x1#$9dF<^PU;`zQ0p(HpZy0Yr6QF`FcoYj0(-G8a|O7yD}IbEn;E3 zeTdUO&S`&x)9&Vc?<-0BRh;%? zoc2*p`}3Ud10`vFczHBiUHdj#rG~cVxwBc!Ls0sdC5RG)sCgFDkW}%|R$Dczc?xPw zP*cT}*3_2NT!Iis#MB>#X}edtKLc-`ClHoW1vzMI0=c zuA7P2*FkSbnN7sJAf5=X9s*Yn^&y9 at Ao3xQZlXyi0O^GGk5{BXhf0vc0Qv71B#n`T40_7Ew2es9Q*kc|?qXm*A at BJR85>KvUj!EdfrVN~3 z4e&_^#d`~%k<>r?G>N9omvSTtF%Px-71h`=(&!W0JZF>)cMh5qUNNqlGd;oXPV+vI z))!br2CgDo!tl-jStFPxrnZR4M?rQvWz>tK>pRi)(dc>)@xFiPJl|1HgX`qc^~k21 z-Odzb9Ti!(irmevK&T76*M*R5(e<_9#6<+!Wkb_R4?@}%KTylwksVy8QIQr30}WR( z8!-^l6LftbrE<-G5vlWWU6_ibOMze_7(^Zsl{fZ219 at 6OYj|Dj-KsGNUloGKYdVEM zNQdCT6peQDy+ve82>!C1^yvSBpn% z!FancJlX8KY|jDe1ySw8dVynxOEb_(2m-r;k%e1dP7P7IJGy>~o6hBZpO1C{L11wt z+YFZr|N99TA*7QGq}Zyv{mA;#-pSFI4EJ{Q&Z+*!ssC3Q--FdKhmQZdQ3TsV_2&0(H0?=QDB6p8!5Z;KDID758EGUCJ492X|*Nj{rCQh*`D|*|I9Q7s^EUZFZ(5Kl^3N zsTFpjf7~vWq!NYdu`#ReW8YP2#&blE_h7|!f1sF60BSJ6WEyV6{K=l{r|x5m?*8f& z4^PD#_n5Oqo1bTPqc_aas24I^+H3{?o^wCHdH&CBzUCbI!jQCoLu)+<=X( zCwRTUP4J%E@~IO}TO_ zd5KBiTNId7%A8yXdHAH69jUNN^+!U*{yDQTTyJVChvVID at m~8SW@%0ZLr8U5)ru+? zYm_hW?4%^k=)g3oUW)e|HzN#)#YEK7(!4_dFk{$9_h!e;fowP@)z56ik$<%w<7Ixh z^taPMUq|^%{Pvs0Cl1uOzJsnScZZJ#9e#R2PWPH;_ at kUDo+pJKRSIqeVfl>=!`RBp zV;M)*8##?Wkp+K~JVSR4b656zH+pXQj at Z^ypG$f8QG9wfn{j-6e5(%{ zT)*HHG4kRo*k_vI(ouuX_0&Ex^F{~o9s at B*da6lvfjVsMJ}+Ip3sy9f`_>UH9c33> zPaS&_F+ZmdCBI_T^p%wH5BQv+sB%D^qkh8H}VJo{Gft5L6H~UQVqa01!^j_ z`7wKXJG=#68BWTH78N3% zp{gehqtNwlfYcq)u*rPw+t>qU at 0v*0*Y90i3GLICmo8_KLBNhNEFN_xe0>2r-PB^%GIm#9YgPtcNeOp_ at yG7fNW`mmk z$#pGm9!-|tA;-lG&L3FmWP0$2n4cj8gb>@(^HD~BWXRqlGS(Jb4B=)*uTB!aM`@QKiMj$Q at Yn#i%gL9 at k+WXDUoSZY+dM(DbgcjAncS zI*jU-!x?%!R_M-JAW$iHISPAl4z$_cY#K}R{Pi#f^B(t|?pRI#ZyO=?#jAgBT1a<9 z#w-q%2w{FDeEYxojfQmTb5O)I%h?4$wdCDf8GCA;FW19I^txN+oE-d9Zzet1Q|`6yCgLG(;Q2 z_`ZCm{))`Yrrz4xYkfpZG)xY^x}mP9F0;BrdlL at bq!;|s)}D<*qwaT#Lj03u=Ea*~ zhEUx!cs_kI3o0yBWsV4FLrYd5nrLXxwp#q zB}`s at -|*bsT{4#-7J)aFzeM3*cY`cS^jnk&!bPoB{;~4EjQzRv!h4qaxqqC!rG6O^ z`{fZy`sNz at gFf^(mbdPsz(Q`snx6Bbl+gFs-U*74hxbSJI7qHQ%FAmCf~E$}9~WNw z;+c~;{{AE`*!!}!J)Y%rY$-cFi5>OnhOmldy3*dczx4;WR5J|jd=dC3Ni8njDE9lw zU)lB^g6qZ<9vULgAm30bzZaL2EFEC?{#M_I<7}>9_o-kEb*UW6i_t6pF>Ty z*AOVI7!zo>^lSTF(iR|8#zJ7ARVmTytpAhHUbbpQ^?S3vk~2c1PnT)2x~{oqRvkR- z>$cy5wZzz%!|x0{uwQ3u at wQev3M<5VtIxI at 6lbTTwAQ}imhsNwHhXHf=i}Mhz#q!8 z8EUN4K1ORq!4}>Gu=%)mhLZ1t2W1Y#H&wAw>FGg_TLU=v2Wd7zn><^Ll9)<3Lr+`JhGBva&_`sO zvgg^2MFzv*X(^{XJ})>#A<*M>2h!}8C=@IOLvqoIzBc+!mkTtFXL5uO(73>bHEkcP z^80rp%g>xGDdECp`1YUT|qYdZeU7ZqXJJetU2XK$cg zz!=KeQqIa%h8jr=gv+MK54jy)dlYBJ!A%iE0+{)9h1le8$LNmcOy>yGJ9Ta z+WcOVSB6o+Rk<&hQmR&v at DH9&lcU~pkJJZs60$l^Os~&2B#^}(d%}|Erm;>H02`+X zXW2JwcURtiRoBe+&4lVGiKElY`_FQ-1^zq)Ya~|uxY-w2-d8^{^f5AQ*0)UZlA4uv z32y|6X3rKDz10&NxT_lBAY}XHqj~riG9;<>#ki#uVh;+x4K+_u{k?U5+q0YWV<0^s zZVNhBP*3+|1y=VtTn*-Qa+2|^*%sB=-KD4$oXskgY=4y7c_gD;k z&zBO%3jz#8ZyP?#*L-NHfA0?AVkB0cKlT0a9s7$M=f}Yr(wahvAGAigXF$F at JP=f+ zLG?fNw+7*73UnvLvNMw_HEMhpaKz2J+?Jrn*VsCBuek_xiuHZa=j%2S4{KR+^o5!C zzOeQ?wonjUR6|&MI|4Op9_LQYo~H#mcGg at I9Ih=$ufeTz^Qu~q>M!ky98M|NW>QVC70OO1ufwu-wmPQXEDMzyxR0A+_xK)v$^Cg>W|x8pTeXJ7c&~s5 zYi9|j!PYJfTS`&>tn8i2+Vw0WbQns%Sos<(F at 1x$q35fBQQKrwLC8eMVBYk%UodXd z;G!i;YP}1YO2B0&D$3+Ouxj}!ES^b&rSbV at _r%G)+JuRxFD4Wz<$o4bAHy{%T520B z%kO^#_wzohNBRKyVLTB|2-EKPvwG%6w*Bo{?$;sO=u)jpb*CzAqZ?08NF`yU8E()9 zOdwy=-SqiV6ArJ28`>U8cv@~{@N}V|ENv_sz$BMMj;&Muto<&%=xW>5xA95yGf&*Y zy?_=CYH$%~832Ks9{pYCqE!ZKyO0#r%6ubHozonLvb|n=ZpKX-sUE?#~R2+nSCBgN^-r-D$@wbM_^QfhCPEuBA|n;cgmA)*kQH z<9|u{AVwh>hRDJMRoexup*7s4AfEF<-BK+j;RB}~-^GFTEqe@^(NjE~may&Jn>2Cd z7bOf)U`MQ7eMKTvFSAzLm}G*x$5y|&*(6q|BowFOB1tcGr^l;|rQsr-3yQ`iu42~r z;+6X6gDvs0AG(NK@~J@$KVr8>n48+5zjMM_pN;n7B!9fe6&qKo^d6CM9o2Oq%LRAL zHVQ^+3k?dV&lbXjNQ|uoY3BMz#|}asC1~1HqT5Oqxx^C%jlU3}cq{p>F(~qdu*ri(FHTW^*yOncGe!PUW?CjZ6mllupYpiZpUrJU8W?H-!u?sUIts8Nw zrS#jByL`oRTG at EEh~}#B1hVQmDc6lg6x{FBz297`wdm8xF*MRlTS7Ev#6_=<=81Cl zXBEZmkS*-jN~?py0`I zXKZef>4?{3 at pJ>E{btf?EEY~ikEn*%8`c{UC1g3;{*7$n1+v9`CZ zJ_)9IV6J|7K^vT~nnRD`h2h;@nf4YEt~j(Q)#pyo+fmAmxrQRCE9>9(u#tEAY|6!l z%oiPrZP_VOzHZ1YL-M?VtDB?TYv>3+K*m1$saE4(Zl66QR1Ny}IKxW6#bs&v)HxlV8Wn!uXehu;Q zG$h;0eKKr4i{g31Hopd{dK`%W=JXCW@)b$RBS_b59H+N<N0I56bxF;38sg2STiS zrq9NkmJv0u1geC8sTxuuzh|83ST8E{xl)9ntmTkvX`Nt;ao|SWoK>9#;C*KV-bd%E zN3r|xp-l(s(fA-aOa!3sX~K0;k}0N4$e!_=ltim8RlHF%buo_<1iA#=&f19uPmnSwgbFv zihVb$`bNNfBP}OC!*R?%x*sPpkT(#=53rntK9L}c-}o(X$BdDQ_Y4~Y11kf=N`3NQ z4F9^$Go1ZTc8P(m_a|By+2{d45MzatK?a8ZOJ!wPKBe*nZ<1V2L5S0b_g^v%18}ZQ&@Gzma0ffKZJTdw+qP}nwr%X#w(acLwsG>E`seW46 z^-RskNrHev0sS`=P@?#N{vYEv5Gateuo6FwxQqzh*EkT6-2YG^f#iRv(sPtS>OYpr z&qV&2|A#8gFC#7 at tf)jQEpjhCIUyxULpuj6Nkch3In$s(zsR(6=rAdWXiqIBH7%wL z6ah>!#XmnSTpmtRPSGxt%=c*G0p2biG7N>;SL_beojxY~I+Q#_QrE!- at _l5933^#UGT~=lqDRUcVH at g43xBuumPCI6qUO+%# z2Eagg|6g<~a{~(#6LT5{T1Hw&+lwxDFU28L_MArZ-;ku_X7Wj8!jW)I%Dn{zu*7bG z6iUSr(9I;$=J}b{zresE%o|tU1Nxd~n%*A5J+)ar%VYW(o$S*Xi^H+7EDXFz#BujCm z7R(`ZkzJ~dhelOtB(rZDh|n6|&ViyubpX+DJ>x at LP^WvI<+=y5w6zH1fX%6Uh6 at jV zyw^_XT^HJ`Yv5XDsEi5%FC5^GU~N}HHw1xS&sNAm69iEqc3?qV_*!7Q=6_1#JMgA! zj_v>QBOG1^+7SdP!yoad!RZqO`3ktf_Y;P&1!$A~tt2AMZ6W9c+2w(BhTjUk0S-#O zc-4W#t9#E~d(@!)w1Nbt-TI}EgI0TRWgAA`0qAJwSZ#oJz>iXL{``d84Yk>M+32ge z#I|Ay%7(8oy+wh)GJ59ybFFgq#d-CmdF5jvZ%32vWtDGP?EIZ192%zxZ;8Oyz%p7GMaBHe6}DXh-cQgXfJV zzt at M9RMPf+78%6zzv1j?aS8O55y~nDT>`A4DDO%^KJ&jI_SeE|5Lku$1rs0*x^8=r zwSR`jm%1*Q%p}^I5gxpb4cms)r|-a?EJMcTl_9!+REb+zQx#3gzZv at yY zGZ}Sut{}2Vy}Le}8_wT!>`LsP(Hx)m36RT^7~Z~zuPv^=Zpm+IgW_QN=BFAOJjE7( z`0;?L_ODthkh!c;gD~W0{d>~LZ$VwEga1}TWQDfAb8LF+;JN1l6EvkB!wC%y#U``?#k zJh22uG at nMBaVnAe@f3&F>11=`lTGERC~qaDl+{$N1hk$l$dpk%WANAFT&ilPo2Y42 z%3?z)XQ!3aNJ*7}_%jyV>YGU`Jxa2qDIa4*(eIcmuW2YPn44Fy!%I$qTW8<`apV~q zJit{pE)gj)h+{^_QRM{|R7CwQ87gDO?2;&4u{2Oxk8A{YJ`|!qFi6u+tWdGEj6MrB zK+F);wlZ at d%YiVeY#gp&7bH<@Q(QC$50uE|0fjYw)RXR3uVidDFd+$;2%4(8&aJA@ zDw$UrKI=+m0B>oQsFj_bRtY`D$(gCo4%?qKMqn4;^e%#p at c^;DF?zywW<1NWRP&-v zMZF|zbSHX8IqNxB^8Pk at S8Vnr6XNcv3w1Kz?6MLq_#}Hq!M>lo(7_FqYY{pVc#xiz z*|%0(JjJ;9Qc+&fb!`Uznhj03td(*R&ct*+(8k7%sWUsyzYKH1-M)4pyc5E)RDAqM z99igg!uuBN0lhTXGKqgY*@WB_aG}}LtN%njh1+BIcM&bZ3kEEz*3*T!P at ZXQq3u8B zS(&OCK4j z6lO>BjzCxB_ at 2P6RFqjStz0jKwN@F#WFpWvZW#BVe)??He$xL^ZSGSQ z?p1YFRFQSjF9HOA(XA_*H7q~JfqVObyTo<_-aO;Gjcj|4Z1iXl>>t?Xdirm{y%pAa z1b!r_wx0O7;Jq!^Vzc%lnm1U+#t*I7}rpW}S%Z97r}FZZwPae+V8vjXFf|IFHm zZsU0KZ^k6QJm|x3ee5P0~9Ko69 zW;~pQX(JJE-$zwX!l=TqHO$&wDw7bQ@>;&xKVeI+Ka1)#{$t+gDEb=r-Pn+*aW}o` zv3c}XZNP5b=CMDzDz}`JTw(c|&Ea;ne5zV~l{~M11~ly$G#x)iRf}F$s{V5n zzB0L;qH$b#?S6Uo$vsW at VW(y*W)@?5q%7c>pRuk zo(YkovE}ek;3z|jRX4$YuyI=BZ<*55c|Sd)0}EOr%joNRlg)357=YpW0!U{!TaS%3 z>ME$gsiXQ at fJ+_eM-jw^p066Ocjc|z`sltII84lv?wEr2@%dEaANZI=RXw$R?!NFn zSxLW+P|nS^R at xwQt1^s{aVK=#@@?_HFa4}K`{+Ny%c;JPOuX(eG3{tQ+jxk2SE=qc zKEi~oBp8(W*856qYXZydi;*5%P+<3ndXBty~RarfNb zVlf@@2B7?D8-6&7zk?32O&wX at yzj-F!885xP~1yND8$<~dp$eA2z1?&``TUJL%-iq zb)n|swz8Ay=}0We at zq~0PharebT+gbEl^t8zy6q${qBFPtp at nS+z9Un@dKnYXuM{> zd&{cY7-W;WeHFAFzcBM~`q!Pev0H&^&_({zcir`hFR^-G3fuJ)g%OTho2l zcv?*bH>7Yg8LTLv{(M$952*7y12utS0!P at Er>74mwvK46Ph^u=a3#&P^ovr2llv(IQRmX$dbE>h>MTGl)8s138cjeRS zJA6Z;npO5~biEIk)3H-Oq3dQ5*K&0bIsuoqMV0aU;i0FnfO#a at N9AJ|;q^OG*I+A) z)AgPVYfJlUa#D20)8x4j at b6(TO#8UY_W`PtcK-UyL;IsT_F?|B&-J9XqKgUp>2=ob zTe*3r8yoRY>h*JF|89M4HybN9ZQXeo!tTw~i%>dz!gSJoX&P;Zct?MJcYUye9G>- z*}xo_z*&hs{Knr$3zX%_ZJHRilu_Iz;F at t&GCx<^D-UelB>#Jm$!T zh0c?V at X+Z9UU=+|Ib(W5B!vqzIhXMINIo$@Yzk7Sxb;q-IF|2Yz?II?{OfWOaK#e=YT3^c^q5uSC?$xR}=KR zC;1Y48PB+_o}O#!1}b{OF&E_UmQ%oo*5qX?Rh3#;aEnL055FP`r_RPsl4Epv+W!lGIZ^=84BbDWzPOCn- zW{~@^?z1yEl?I>e;kTwqQ=x&cOw2joXC_a&bm`HtbANNI&KrhSZXN36%K=DFPXx^jtFtlFx*?qy7+`#;p>^UYMQks(c;LCKp2K&yMK|I%nj~2#{3GeR`CAIVD z-!sNHw^rB>-5Aq&PQH-7SB3WOw4d%KwaX$e#^>o>I;x+L(dRQ8`A<<)+M;fHo~$2%?8xU-h1{s1r0FQh+&vS4aG917rVJTVyoX znAIl6#EWm-VJ=Smw+<=U&sXo`8Mekz0oko?)RFp#=AP~OXJ3%DflUg=2XL>*N%+wb zEcFN0s!rrecRvkRQTQd3>z#>R at n#L?iy_eUFBsMuZem)NlhDhfWtx|XFXA8F={s}d z*HIS at g1{Aq*3RQI6YyuomsglCgoQ*LDZT^e=|~J8)`8Sx<+p~X3PZ2V at q+{6eObnV z)XUJ{QnDsY at A|BPvhkO)CeOGAH<+y5SgS9z8%z*}r>*!xQP4<6-=7V3oOC9i@R>CVV)03XVYN-JEEWl8iQhXum%e^UoVPR8up;~qDGdo0Yk7hztgOds=*AFJpQ z0HS&=(wQ}>nNgQ(b*VpGtRVvn|DA-h$GY`j%2;zftc=~SgfAiIbVc25%-um81+MhI z#OY(zouxMbDct&W-#1h&2!OtmNy8W6Mq+gp;B7U8+r9dpdb!qnvIcr8u+Dy at cNj-K zrzdp;ja87QHg57kP1e zl{TW%$@t{r at o_40TA;jYLI_(&C}`AmWp%|P<9{Z(+HzNaQ>7^q_O_Gq2LDUh_Cti at U-QAxUmE*h0Hm at Lk ziB}yZl!ZBhgGpH5^fDG0Xz2dwC at D1ajnULj+Nes8rKctuQ&Eg(Skg^Xj1sOUN{(NE zHTc`Rj1Z3+Dg2g`-=$AYPEL|`LERAB+nS&HBk8I+{SlSLxC5jVeACcUB!-mQth#CN z?uEM~avq6ZZ2UA&t;vsD{b4D85A=o)Rnr^L19E6;^|CgvSiztw^gk6}!@zl{V_}`J!!6YT<@5%bqWRz5+_(d_D zw!+Dn&JyuBBIb#$vc}*dUj!R>bg-c`M*>mit&2VV!MhGKg>GZqjL=C0;@kq&uyx0SK1>U+r^(;-? zIa9{S3ICQucd#cdOa5D}Lv!0;G~^kobjudv1?q9fqcwHOHEfhQVr;gi!KjzHofsb2 zO@>l`&nfdA9dFE5ic+f^crJvQ$`*I!{=zf6*++ z)PngJ151WT4yN>gbaaJ}{1R>kzV_6!#jfRpHIvWk8NK_^&3e~Xi%IbcBRew=@`%tqz_`eZz~> z-*ABO#5D at p%Af9{?A91{^<|DQ^)y9pu5%X%wUUO0nj^kOTE?>0JYwi6^|KM<$E`iz z!lWuoQVnVXr0y)H-F$|I5)@NZw3LH`5cs2YG(L*po#MLV<y~{Zr}kM2(I)f ztHht~dqn0l=Yt}Ux?bODPIshX?5qJxP7a-D9g56Fr={YI`+2;2mlC-x)HEY=4GS0A zk$a4v<{MtE2o*vnZ5E35H1x*H1{Z&@b_}Si!1Nzn6xKTDZYu2w$v!8?F%-17|>YDJCFZd6b>l$p3$<%pwm*>GqD1smJ9?zdFTIe1;(kDMYoA!EK zPsG&s^KvT2ca5s7d%pT9C^6Q$#;i$5pb7N>%hAr=j-_R4n$TTuFh~B0hH}}?3JH+K zVrj2`?27f{|c!WU9B(P5)c6;NI?-xQG7%Nnxw6j8U|$^37Y zk}nBK at Ke@anZzent32v9+IrDP7Wsu8`O|-aEE&5*oFPJ$TWflP;2CC08J*L}!L-7k zIoqDedX16&{X-1X?4GPI)86iWak|@0wA2*o=hWFJ)Z|Xc$g;X}7Gw>1e_F>V>F`Uu z$*-cq_8sYW2XgN1y>b|7KRED4j>~sr+sr5)!BBuSMB0?XL-pcsxeJ5^=iEuax;D&b zkJL;J34{vxFC6ERc7xH!YPn2=Yr;)X4p;9SFN-U()XQjZ;-k)}Y0J>rz&k?>h68RO z^2;qabkyi4T#VhvlJ}L=U9_N-jE$!#=}ONpfhebiVTv9ilBjCIg_fpNCI-dTRdqQ? zom?N2o!Deyo=XkjQP5(4zeipMlzx4Ge*tbo0W6KG(~!nJBXI!%{4XJU`!Gk`wLr4v zay&DCgd`(YZHYz_iFUFtJ~~IeE4o=dqBrRdOm9X%B{iM`oDO^*&0%oczD at rGie3>( znB1V4%Cp~3S#?(ckfzE^U*m||~^^u0QIWpKFp{@EJud$zl|#LfaB6-EbQakS^u|3q6$o>N0aASlxo`ID( z+~Hz(!-S~a+4=QjXN>Obd|-qyv9tT8XtDkPd=tkzA8Ucd*dGdiu8i%tU1I>pWg&sk z*qtdq31O;tcJv)4`dF~NSboU2clLH)ANeMKrgNFr#`_#OUR-{bmQ5H z7lk%okT0wU`T)!(*uFX}UWT#&BCOpW8zIb1{j5%7bTjCF+XIcL!a4*ql3O_XmB~_KFI>)Iq!v_KGq-l5jwTJu#b{#2%bJcIW{gYdGB? z`=23y7(}`O_KFfd%6Ra at lP642Hu1p1-y}$;-BPS{I-=8J6K%(#KHt?H*7Hn?uS#3A=Y}hCY?~uFkt!hX926az?OQ)8oeg z%YHJyGKVZWF(e;#L%CO9aD{b<-?X_Z at cZjPh?~FKtOK$5=b^7?roA)wl;Zr`iwR`e z`hzgqNV)3~@BCnJj)AX;RqoOQOa*>({|$qs8Q$4K6$!xqN~dt46<$y#qviomRghTmK at b$lHwh72L6r{A`XWx$^wOZAaP>`p-6nz(QEotM72=EuBkL*1kY)c ze3g`BpDWTs|5s9_>j!=-?ra6NCbdGRGB at G_rXF#{9S56OOH_)D?5{ZdWHPm4 at sOR% z^{19=hAqo1^Um60et2Jjhvg?#CnC!7PS3r@*>HaW{;boM2wgQ{&roIRGtenLcw1S< zh?F_0QNDxI&0)j8ae(Z!@v0a!wFp= zZ&AvWXIAEa#WI8{-TV}?>%mUG=tg(%;KH$a>(IHSZh=sS>azRv##5f0-6g(>gKSz> zn?dre`N(H4f~pAG%aGJyjL4wp33*OaL~bjcZY9 at g@_pw$_`Xrl&?gOm9~2Y`SEQG! zS}e?MwPU(iB(JJn`K8zdiZxZR=5&3buWJ=)_Gk;w`KpFcqUPEl_!HZn&YZ9CcEQ&p zoVS2*okb7hA7`p7S3>*`k9*7GOI{(YeEwg_C(27V9p1$+G-nbV)laT$9J ztv;d4>%cs`GgxLEDCzXonL$i#LB?`Qy{JWRgxuyXY~plB2}k_;{;RY_DK3dH*>oIh z%4ruU0=91bQ8tJ^y(HW)8HDuZlCX*$#E!J_iOhNl-Z!yhf@%W!mi=Q6{i3pnKCIbc z)HFSo1$_<$Qq-`QrO3K^Y$c7}sSavo+erI>Z#p-|x1wJWkCq6H^5CzrxW8VZE+7S8 zG4%W+;KjOzzG(#J1;Q~IFh_{I{NnobjeCOfL}m57<+fGeSzejWYMnI2g7d!^BXkQL zKyXq>!yAv~7})F$FsT`R=`=l|(hq&nbRv$9j(=bdn$VA)tim0FowP7h3f9mpBU2<$goDF8vm-j zltk`JV7bz{{rWQ#_HL9xVb2ZQG6a^Ba at phLmG>ZlW~^YYJX`ggMWFnnYmfMFW)f(H zk2eP9Q*POs=YE)-I3$6(>LWFG-72PHbK2m)0MUk9fdHpfN`a+y&LH_{)biXV#k8`Y z^WaJh?K58o9M)Sqi*K5epORG?vv!O5l(UI`l1yun5+2S at Ap<|%+r1_N*z^o{m>((* zU#pa{6dU}^dBP3 at 5?mPtr#RoSBAm at w<`x+I18l`$`I5qcvv8u6HP+T~vQBLIS`WX& zAN!Tq&lf5uwdM>p;lq=E69|{Y&Q*_6D^YqcjZ+*Jv at PTPuniT4ec{4>u=2Qv~y z at S+6EY=2>slT1%go)h~%0ddykJ$*g!97YQ6Culm9zQgG7ulsaGYyyBOlo||yLCIsE z=)V))+3q95RVg8CPfr76U}pH+(BGX!HzVO8QI%fFN+zBZs_A4PeR}T-Zf>mAr?4Lb zufWtzU6{B%(hID2v8KKIy+Rg|#Pi22ANNXLF*)Ji-7XiEFNvSJYX(W#ditk*3VIpk z>z^=)R5hCXw6aSHkr1K=-G(fJPXqYxkG5T}M~4PHrz)a8l>kly9^5QaA5C9wmqoNM zpUYK+krgs{fN$bAq+NWTMy~`X9O0=AecC3wZ&hW#a-|d7W?m^Uv?);VPOaf z)!s1ieL>M_i$U9o_-tWlE_{^E0J5rzWZ=!_B97rwD#uDrp>0Yyp`4~>7&Ow- at a_eT z{_I03Zdt$XJRb9#89z8m9R6Mx2I03+dEc2ktZDn_wIEM1Q(n~)iCCL0kBfYz8<3h^ zIi7|sGlB-UQFbxVVi6)YVvbs|-zmVE?@2e${zC_V=sBnxU2dEIdJk4I28K%!Lv42m zEQR?{+CV+&vzSptNts2yOZjNx2PyJO#hxmWu|Rp1AHc8&lz4O$$INwowS}r$VFXn> z55SM at O*R9B&{IYX(7zE4^C9ESJ1^VH>;VWC_D~+ z at -2EXwxMF?+U-GwkY_dak5Of{CXmL+tT}uVliwc%Y9HtJ;s(i&7K%4`AeP at kS@0~I zKzgXkt&uQ+#C+9=7cTWWWno7-E+zbFZwiCKN=h^JA#G5k3!cIYEqS9hs(>T6e at Fcu z$f~C^CVOE*rC8w0R%PrWRas>$QBeW_v(u={nu=s2VS+h`&5j7D6j6KBE~1_p*P zDHeizzPu-vQ4e>4#d$S8JSodgE0OMDPFSG4yIUY)UO!Auv)nt2ADbl5rAxHfVy>5k z%)Km>y|exg7)l>Q##58z9;(vx#5Gv$Yvm{@E>WD###F+qbnEog`=jvo0Ii#?!7>H9e4f0$N=cR+?0Py*d#U4I at 7 zag7rnnfiMKI~nncFKo#ryc+ z?MQN7vfvl06%P3)XAJNvEA~OS%t7lkPA_vgd4lG6{i;gi1Ub8&;%uCF__j*m#lfDN z4t#QWXPVHZV>$ba9r>XBtI=D~U(Yp|53@(om4afH9J*;!^9Vl{PFWai^lv{kAnQE7;&{WvDzM at M#0nw z{49R4usZvOY+xtu at qNL=r%mhfq?`!Bcl_ at 1hch@M6x7O&wABGig{FuZ3B6nh*bqa% z-%+jeTqJtmpo*fIB_a at oghZ#fjSuhY??h(Fk=eGSKP`_xK2zAJUf_1kwZm z?PEYpfnCo~WhkOn-pqa8P4Az_04EuCHmQyHJRdm#>+BCQ)E z_MwrMU6fcB>Jql1?_1JKkP83(^UCJF>!^42ijX+MYj=-n8$C at 9MZJY~FFdlDQp|Z}Tc6t7cY8R?0#NQz9lhEr(CY0~P$+q$=|8{TpMh*r)3V&v^OzOUylM zS<*+|#F$9^@KH=REI)*I{gXREKCP2aV-jrsIsU2ioAU8AqdRtxE^$!D{j(dw9n2G> zsB;6Ro*~eCu^aeFeTbAQ&5~U3S0X)?L{)O)s?J8DiQmas8a;}mIAT)sNpRA&3!*~* zn_$ZWy+WsVk}sz4wsgc*H+ON*gVvTg^5gp->WEji{C+dhi^?AI-!R^+7erj-Y;7NA z4#IdrW0A?@naU|EI`z2H4Nn?G58|$`kLhbQcmf}BkMXIAraj7&!lYS^^OM)oRzyf@ zR|9)&BKDQyRkCP3^U9aQeZ9>%5$NS4(9bWqHKu7oc(f- at JB$Haw?H~DCjvv-H%0tS zPINxq;FH-(SnG=;k9-OEU%el>c(aFj2ZXyP^9Q7)YP(xN4`eKm?14f15)J^AY>D-} z%5^?5bI=ZR8t3h)iYM7sA4o-m3O8g0HS2W>T-evipkg1_PGhAmmgS7Ji|@pgFqwGu zLp#H{a=bF_y0czx^!k)5lfjtu;6YsBg|^qKorAVO(l@&y)%l?tgy7O zW*x->XZ`s2xijI(!p2A$G^tczn8VFInoCg7{fx(=IO2$yjzXVC`VW!3^KGMC(TA?1 z(_6Jzc@`*b2497%JtOhA;#%1^!c-mzZXC)wH!_Mhn&xRh4%;(}#67Bd at U@A=*oc2& z%`b_52Kwk7U4oCWw8xTV3qPAM6RQoLVk!69Gx9&7(T~2;PP-+%R(hI at FZ+P>D|lh^ zrNcGlDcd1ZOri~*hR+t~MQYA{H%5RUQKf2?Iz%-@(5Pe$JLcu_hE;#g2r=7ND<~66 zv at t+BTk_?*=tLr3T1 at tsng|{y+)|20gzsjc*D%w^!z{(2nFNblZ)}9GzV|@XeM{Z= z(F%S~;k%WPnLy&7?+9hkTLj$g(*C|~bW5dnGpj)t9}r`Sg#7AgF^t^KOzT^2F08#y zmQycd)ZM0i?4&HnDfFn_MpFaOEZ3f1ugrXpvbIT}@U!+zEt!hQKDIH}f3|vPiJUVC z){F at MTll7#r}Kh%@I{jG)wq6mZ}E{8m$7^vfB2dM=?YqojFVeDF1navObm&M`v9V_ziAM}_cAtI+ zX7!m7A at zZ8P_77Q*3Zvc%gNq-)rp%oSaBM-&vNm<)>)hII$+#v?*bs_5Trrf!hQx&aS)Pz at Ng2reL+^NORf+aABtA1wq8%MfZUMj|#u zEcF0qeYegw`qNsGR>feekXhqOdQ!nD=6?Tpx)<&=lMsY^_I88gbal%Jm+nbyW zP{}rxLreCXRWIpyYp at b@Wh*A^pI;D506X{G83uan(nG0 at ej;gX!md~0#AexWMSz=4 z711L}HHq=tre=y1YSF_|K$1FykyAo>yfZn?*RdUoqE#Ft7BB^m)gKJvRSsH*42e6Z z*~KKPX$h+7Dt?gnRHPWLT=BKFukP;!8ti!q;sIY|zDqih_1M)&KOzk2*(?UBhBM%} z=*vGVUafyZ&tVFfc1n^?U`qbUn~OOm`EM}XwEn6omufLX{M60CpNI?S^bs%N1EztU zP;@*r{(EQg_s$Im>{V&bO96}UbVS-<_BNa>wh%evQNxMqK}thfDcKAJ%^A^`=T|a* z&`p!SOD|MIZN~)X&7!+oVZNb3S#RAy3wrlTd(H}`Mi(m3u4PUC(ti&%r2Ln{*4hDI+yQxDt`fHT at h zq05v6Yaz}^wwq+D`$i-4JbJCvvwP$#)3dANE2leab9I(T at Tnqh^N+G1cN2w7kn&H< zmuOk*3adI=C at q&0bN#o`ftVWy~y}GWI;Yf_-vmSwtc-N at _*r8w(T)8k&NA ziA8&-Km|SXmyD9V{VrwAm!zEiHUdg2YRxvS>Dy(6ZJLjuM8^qR!t?f=EmOC_+vQZv z+ms~bIWJeyc70wse-Hn?WV%jeQg=UPzFJk4JbGJAid6WX9 at yQ>i*D9l=9ciS^hw2w z7}sd0MmeFS at u^P1drpD$Zcc1NIM>GZgYO$kY^1;;04ndvl<<9fK5$AXT8YGk-Z}^h zR`s7;d|!3S))r7pw$fBFL9@;jjAbjEToO#HbV19)F0236G+&faNH*-VIdTqM%dak) zpbaGt&4^VDn2ujp4G7axrxk-L-S(uwM9yA&!PhaGcPfV?(dc`uUb{Xokg&Wb$ zNf6=!IoOLk8WA+}31*-#>oO1)hMPn~DHn085Nz~>$1d~t)&*-DMFZw>HEMWZv^iB97=D{BckmI3d*1m~t$SIi82gk!)g2^*JZjsvyuR*yn%=j{>CO zN`@W294NjlR^6DhjFhUx$XY|?en90mJ9;HJ%QP1_-k}^JQ^L@~qJ^S(30uBKEZ?9! zj-x~uqEwsg!JB*^PNb==q1V(mNf at h=Cs*%MYK|x`mnt=@mtR=4)$1Rq-XEw^9t1+t zuZL&<4$_Q;@1Vo4}&3W_9==k?B?WWg{)s-S17jg(H)d$fP5MlAuj}( zCnB#9#}sii-vv-^i;xFB+^xJW at _n?x(08u1DGZqdq`(h|<#lh at p0*7+5IOb^) zD&i5a<)<+RG(d4qbvSiC1LS863zc3qffv7&MsedV<<~$ZRYLBShS1yjF|NmESI1zZ zHHL7PsGiCq8bp!UJt at TNKoU^6dVAL-%d@(OgVrQ5^q&+oT6s8$HgTs)pUMa}acN*1 zL>oHlLC+7}aC1%M3#YgU`Y!o{nHF<}jUIZ5q3gvb&NvBdI1a zbQ>t$jTBzyhcA1_Fa6XLUcnf_P=b;JnH?#$YR{xcDTP_#YeU^tCdvDk6PU#gO%jKl zT8Aoj$(q$l)1^u^GBsN0ZOKq=+S23lqJpHxm2{T at sS7*Jjy2XZ~ z3(cL{@=$FQlOKbO9L{A5_stUOi}X&~i+X2TNLuy?FjaLQNIW{Fn6;pw=Gy2`_0UATG*q911*cQwz z#xs)5oi?jT_K(>6-H!qGn-9lThqrP*A9TOUJ~`%dk-bUJVFKr+6O(+nHEt;rU)LaQ zAjK4wGQ=^6Kz&#Puzs14Q(o#AM~xnt615WKDM3w%uqQDT{CaN!R^kt+TK1H8qab4s z9y#rRn$DF8J4}LRxi{HapIcFRdS-tKaXE{u>ubbMc_d zwz_~apR*wbNm+T$*vIc=M4?IwMm1fcm~qL$_~cBszQ36MFsEd3qi9ic$Nap4uZJ5| zAul-!w_YbX`k_ql0mwfHU82vd*(Mn~=Q&Dl3xoK2-q6ar0^%F at kx9m}z<|X+aQ^cQ zvfD?0xSCwn{j`H;NlB7SsQpcdDKNC5MRf|h(DOjHBHeO;#j&^`oeFtMOM=A_d};DE z!epBC+UVhEJIO_UnkCC&`Z&pvwKR(gi7;viGvH}&?;=YC;T_Xv87~~Lrwnp z>j|jRG{f%rYatvz2V0rPv#p5Ns#B=^_l4|QAuv9Yi%xUr!SN6+>8*Ls^Vn? z2HHCm<8EM+=ctM za*@;drU;)qhd1%&5d{?Kq>?hq#DWvBE#@gX<~bN)<$smr9>Rd&%Ay3MdWo}w*t>W) zVZ1q?nQDnx6H0<~RkzJay$l8MLyEe{Vn z;0L z48n%Nqq`KsUcaz8j;Fly%ZfGpQ6;1a7=EERW9ed$mfJQ^@;dUGlt;zN>dtvoeNY at W zS)1bA^c6=kvQ^pVlF>NQK}OVrsr+)x$sVa3TP4*h)vADp?VtCmypS#syOa*jM6YYM zX5g06Wv+&6)c8Iyr3V=s5 at Pt9~I71g at HuuAwzejz35_d+$yuoC&e|p!AKCGz`Yn z(`dNzt(1#TUjig#x;_e*2WK?#)%q`mjR2*CHCpT~G3S;Zkfl$^e5A>^Htr$IRG|`Ee_(YuXrbOGh$yblg#5e- at lVPom*THa_HAIjwx>G- zvUQI&8h>$QIMH<5_T)GPplUC51Ob2A0odG&w=bC at u)s|IQg=(1_4&I--tB!-a9>Bn zWU0v76vTA;;l+ZKP4BI*_y?M`uYxnbokYG+&`@YnCzw=L;tq>VwFFoOt~2xQaEH}a z1qSuqoCM|D&sluGxsDF|sT>ApVtK&h&ddhyi&f%`Gm($jcDSJmOW*Bp zj~pypj=qF?-sM!}Wj-F*vo)|7L)YzRB?q*YX~6fehTA~IG%Cd7T2nR3XH2pPS!7JI zyZMdPrQl{MP)IKV!9SKk>26x}nmfRi*f6dj=tbJ7cVTWffqTmzSTgoVTMKIS$)y)d zM$hA58bLFc3^gwWX?>(viL*&YHaQhGDPsm_R*fAw*&mh0{OXikP>v3$CzZRuqG0Y$ z*?ZmKkGz!JnU~_yP?E!%ne7;xlR4=*CKqIcKCg zS)*7gLtI_M{77-(hJl+bUkWf~hmko=4xqVLKMBQ|a$Ij9L>H~_~VeF}H zZe at i<)-uUeA*{l+_0c^3f;|>s1UT5v(RfM;GlCJMt4CVk?|Jc3Gz_0%RI`b*b~#P- zIx*n?t08$GL{rWjV(s~!(mTN!^&jkaQVH1WAD{}18=>PnHp=Oi64)jzvdzS|&_3d{ z*xK!OSQ%FOd&BF%OCTnTARadlY-YpY;LH~p*NSGPs)TakOmst52UNuS zQUSehwWY|@bEaE{!9qV(2y0*a?!uZ>{PFLvBlPz=gG)P^Q|5OtN!GJ;$&!w>aPSrU zGi44ptL~S+f at o_L32wm?f)m``83+&{1Pj64gF|o_7~Cz8K!Ot-f(3UE zF2UX1nZafl`EuW_`|kIu?ycA7SD)&&d-v{D`|MM7PA})3KfHj9ApVW%`GEOFv$jz?qL$fxSl38iz0rdC$&Y?=rGUF88ei|{ zs)y at LGPOv%-BoTuB2{sA{pjtoZA4D?&b^G1J1SZvM*?WFE!r+6#D>Mw&QL%AluPhI zXMRdvDpU at Ce0$K~z8%LSr%=PP%=LJ$h{*E?RvEEvHSN6VYbuLy>Z)#4d^G*=4X2)~ z13d(-GQ!y~!3h&Yr_zUI<+ErRhIDd4P~+{i3W(N;USpSB_`NY<4Wefd!V^4l*tegmeUib8%`)ZMu>yZaIu$b`cf5OCK zUxsE5KEl?y7Il~6v(jG*^hQLiVrxceiR|Us{aweU=YMQVlQa?masJS?vi&mQ_%nce zZSDw1r6FRqncnM_peuv)+tXFjknZ>8GCt*qQnq<)DSy+4lTdxFm1y)OAbY6z7FN3+vDi^(Y z+4%qjXR?6herDi#4tK0;wwBA9;Y@@vj7NVc+*+Tyd`@wilF*KNHpR*058e at su+Ur>Ar4*mhZXgu z+c$fu7oUF~;(4R~pmyMTb*}IHuAFCEQ{{$NM6P5DUs8VfdrRnw9$ z`p~Yx$vp2Rg6-E5n=)dSN^r=d%RiE?sy;U{b2aW;s1PGrJ6a{Tk at -zY$8O5;nNF7k z(&k&G8?IuUgy`{Z8hY_0j(<6jOimUA%UqDonT)85427(Nqe>zIiegfOz=m~R)`qU at C35u3h!US6Qh zdE%cpk;mVYK9S|Zj0=b)Ru06?!=~@$wc<7>#1aUkG2{UNhuuXqg`)zE5Z-%oHXyS*ZUThH3rVl6W+>ERZ|pBW4x1l8g@=n;p>q7vgubUC at oR`Di6xQ*Ydqgr^`{*P!MCmpBaV(RstO0?-QGo$fM|eE#H8W! z)GIQ?OmAQ8jq)E7UG1{i at O}g_Fap*$ytciipilg#TQto>dMF0kod9H$!fn#g3dDsJ z1s?x7YJ+B8De7k2i!sW}S*(ORQ1YA>>l&U^b at 0^O2`5-&53yNFapeRG`CSNB-f+NZ zrc4=6b;RytsZWQ0lnrpan}#PyAhvN4R{a&Ln1w4cYYt7w|Mrw%xt5{kZAVDjqUkd(0Ph_l z#Zb^_8}gA4wpB-IqTRc at UVlJ@tHi?y@`lo}*X7Dem0et~0r(=nu%Lr~^V6rN`HIc; z)GalLV3_`;ct61BkvC)ES)F=vwId6qDo<(4;_`Sh^|2O2Yj|I2p^Hrh)0P9qrml`E zVjaH2jF#WsPw3}QRg6`3A5K$kwIAPVUzH*)LT6(@HNnwHB4oqpdy7DfDW7cE6(y+G z;67wP7+p87WNx%(Phof_btQ~l=D0eIMG*b*&W-4YncEic9D|VKAip+ysLwenl#m=? z)rDe|X+Ej$IFaW387Zr6{+s81z7J48&L=M&H z?OpEHS92h@ zsQG&UQ|)l{@2gzErW|-WHUB88rN at o(FHXQu=tp%Tvy at Y@U}Xkq+1PZ at UvUQV;JIMf zsT`R4XMsh_*pkhY{{0t_ at v&q}cg}ik$K8qRI$4_z{DV0&PS7C8KValenm{X+)|L`f zxW&j}swpDVBfvMU;-=gFG&kN>^iYn>7#2q*AAHKbLDu-kCKIv4sr!XDf`|&xmUi7- z`WAOkg9-Ly*GerZr{){!axS5lbEy4qb2hWd!yOuxj~(7^vpwOZLS>EHTp3)fpG=b! zr?V1X;#Fu_=8A7~S`CMXPj!Y#_I-iioL_rDBlT{1s^+rWr83$pQRQ*UL`20r5^l4+ zK at 7e7+BUzF&%|Zuv(DH!6Z3|gJ}0+Y62NQ at V$yHhxsqtacU^wRE6CvGO|Foue*rMa zWb$dH=@8w8N)Ba`O*m(XSf;-F#LQq2g}cA?AD?LIZxm7%3qRvD_rRL3v6#o8FLzpF zzD1d8M>Gzd>T4_>Cgm4T&S_*74 at I%%`-K#&_?D3MG5JUka#J7fMwX~ue{qFByK?N48U9G1%}B3l&T{L{ij`2m|02E4 z=J!pJwV5yOkeN`F1bM}gCyqYgHzC#zx~yza$F|^Z8O)2GrOdJ??8w(d_2&uj=Nh9< z5CJUxcBj&6P__ at E7L2SPA6XJOoIw~Xgjvp`zm*OVJY~(=Wl03#iNA{3*{lxq2j}+E zJ>T5vvr#%pFw6h&^*$GgZVr>pxQ1LzQx-=BqB_RI*RAfGczj73a43Xrxtp-;n at Oby zyRcHWhl+Z{(idBajWJs=c8qyK$ivCo{OEO+YT|K~XjEf#TE at PXiw06f4U(9wSg(Eh z+ZB^8R3CC=W at noxGDV1Y@at)gVp2!e*T{Ep>Xzwx5 at FWd=tFK_F?mfqk+QeddhpzSOlJn= zwx{UFwbaX at dkvS)W!mPU3_@$QfErfJsT}e7oNzkn(ZSf#F^!f}dl{FL#HXis75VKe3l)E5 at 0-J4q{ujdsBoAJ%B+w=Rb`F&CCC=T zqO-4KJoNuwaw(P$!zyOV!j3lCCdnI}Ud{JE5=n?^|7=lBkk<@vuguhLN)K*5Twn at 1 z)U4hXOmoDcmG#*Fgw at vPHEtFJgKBLD0?Wo?gUF@^#Y~%jXeJr4LY&Hjy8u*2dc&=& z{ET3}kV~fz2}g#ea!K2(#eH6_Ro4R)vyyMsq>*03Zhi at SDl_S8rYblySG--gT4ux8 zGcCBLDmLDFTI8yUIuHBUwGBOI)S-9xqC2}%Wyi)iWZ>v;iHa*09ZFA0)mkiYBm7=qz2Di}%c~GbSUc3Dqi)E` z)IzJ7;84JJZK1?sv7zxyWJxe-Di>4S*=8S(!_=zV;s2}3i!sFgw7#$S=2MuHF(cIJ zy5%vD%{dsnvQ2~^%7}d}E&tX)zF4LA9*Rtx1e7gte)^pHq|ix{I^mCzb8Uo)vbRDI5}=jXJ(jyno%X-F0NXx( zAvf at vS{|2Y#6V-K>Gk^;KEyxP{!mJp7JF?hgUoY!4z0G;Wp4Xap82rnT_<08VfNYP z|6!YaoSbsC7o=;~krA)xBk{MD-QKIda7_)*(tN!zelgkj-8a8w9I7-JYWguE=xuwa zalR2zh-nGq#t*cIrq;7(iBWF8c?H;b!EA3^Dn+L+$c48S+fu6jzL4QjO>ip77S(rb zrfQi;ZQ+*vA=lSXu5(*R)tgzPAR7Ee98E^=o!DA!m1WRnTr1#lOS5X9k2S^y#H&gV zjE&}yoI$peJg*{P{y*jj?3F)E6CAl*g!HEqSkiy)!4v?^pZjf%j^N| zuWV}`d;S(^nb{b0KF at 3Nj%VXu-D53wXwmkWsDcys4;U-K&n%v1V9%pmpI)u#yQ~8~ z(61_C-%b1Y?znU3G!c!^m2S%D3RJ(qw?eax6bipz`P)C<_zL5-JKjkU){~AfXNCML z3@>`Tfx-s(HP}ra2!aue+$Y>z!|Fn5g{~1j1+uj8m(g`}mt>bW%tt$sYjtUD$z&Bl ztr-QuN=1;l{ulC<46%4=ye@=$Z`L#a2>02=ORRYR_=6sN;RKHkGecL*CthdmslD7X zq4bseF>CQS`C9$9UC#&;ye_TLuD5l%UavG|GBL}n5ubAW1}s)ROo(t}2$}fgQ0{wZ zj0RG>k4v3no!Gqp%T_PB2xrB2iv9}qb+H#FBvPL^AJMC0Kb_nokq3RINWa4R-t@>O zo)?#J$7sl;$VF?DuEP0fP^3Mltak{V#FJPSU4d zV-=!_g;xGDP_)vYe$fQseEzzQ8}>3Yq-J(jaBX3oq!18i-I5ACY=9q0M{Oy!5bT$^9R{$x?p z+D${Aykv!iTfcf2{MGcf#AcR3it;j1lP40P(}i?vAbd59ScNC4XNrOs8cab3 at zWwT zR@7nI*O6TcN>!9X2oNxO#_GFtO z!iqPmN*8!s(M9`V_#|oBP~(tY5Y$Y*lmq7OW>R;YDy0d)K7ssLC`cW}jFU^%-;Lm$ zCF%*a&fsg9Wif(FOU1dl)xCRNQ{}|8I;`%~a9Q8<8uof&x_x+)`84z#-RCNY*)ilV z?*R2>0S`~oj?{jp};rCPWhHc7#}bPZEkGkan2%%eT9AN=pIRnkVKFD)RGif zw{5M?l}FL)rK&b?p at f>s!6wqrS3*nWeRaBuDKGPpol}U{Zi}LTI3ipg`4z#RWE*T7 z`HUMu*cF@)vvU^HLH%PMz%F2KlhQ at Mi~(Kuvw1fpoOG%ejfFpG+YfcyA_W5 zHj^6ci&rCyN!KcQw{KmC_%)lV^rF5d%9m0Jy z#Q9n;_m8wxJ`Is#b=@=%0;vqUo6c}3O~e*P3VFd74`(cnb>=R$ha3Bk*48F+oIMF;79F_|D?k_1jYRId!(ZObP*k_X2Q4w1)DEKO-ITqH6jw8gIN0=oO-$3}+&{i2qRNVQP-{ZhsEw6JkUl38ME>-86S!?B z?)-NV*M-%2vz9HbC~$=SEl&57IGs4HF**6Qggs_nL3(jeY`gQ?vuTxc*A3b5qx^kk zu^v=d0WgiOuBC|}$i3GMcZV4F!3z4^&9-l_pMpxrki&KfyY|vX_h%2fLou9)3<<&C z|EyZZUJqFDabOCz*SOs?K$9Xqp)w(t-n3kY%V^C|F7*^Ln{1#nl=-~s3}|O99khLP z*LWX+nj;t9Ms>xlTm!`GDUdz6suE=;VA23RVmCR~+G#AL1f|^G4T^cgEabB+RDa{Tu=S1&v}O3q>KK<&b at ekEdbbU= zoqDDOz-jU5m7O`^Z-Q$2bgVgeIm9TAB=8ScI5Wm(b!m!azVejS)eUCs)y0&Ee%*ih z_K?P&*JF8H4VvDus}Pq^Dx=W at mdatn%sTcI)i0bO_ix%{cb`{ z-y{gUh=y2+6-Rkgh#L)m$WEKv^Ea;ul9*VjwKYt*g>oHc?pMMF^V5a-ap))N*JyzY zk}!{p-8lA$zLMwf828__rehHhXw`Yh62zusDBOvR-0Jpimw4o26u#(BF8lNti^Wec z^cgJ&*vf2YKzT?p-97ff at Kb)S?k8J9k^ed>XUqc2y|STBpr{yawI^|42h2IuWbocg zs`NmE$CK(PBgUb4+m0$Tf-%$Pq8e++YqI#@+wkic?;stumGBXj7RdxUEM;GOKJ3pg zoQVQh?Q-^$CWxFfSA1ibS_%kn>?I)uo`jNZZFcuy at MT&>&d|Zs>};A44ldDnuIk6v ze3Y&wTf(MTC1@*Q!6KvP=+#M3R*Qgxk#(KQ_<2vGy+4urg)hiBPTp9)tpfMH?J$pp zg at 48b%VUu`Se3g8ePoI}C3u;)5{%eC)oy+}%Ex}uTlu9x at Dt|&7Qsby0$ZxHn)wGS zwHp^jw>a{^taU3D^MFZ1XZo(?6T4=7P7a62)z9(u3-&9VUApRojGR$z2OIY%smUD7 z7)AJ^lxh*{F at ai>jm8}TY5BUECmQjLt9rpba~x at kjhDY6FfT z*rjFquCR)Y5P6NXd_EBLTuh<0pMlVAV=L$}*G#YHSp++Vh$$k0?73VPL77x|Ulzde zJIRieuUcaKssrhel*6PY#Ybl_|~?4m(Xve*c|rtK6fd zz$3M(mJ9`9a at ZJ&H&(<$zmJ4z)wUE(jr+izLaSTUSs4jVgkphX4 at HCmx#?A~$P3`} zJ(O0E0R!EFp1b=3^GrpYB7O)Y+J|Ht+N zhV?6=*>d#RZkVxi#-Dg9^z}ClP>6P0a=w-5G at L&R_Fco4Zqj!YzxfBM45`?kze%_X-qcMC2vLmUZSZ1jK zSZ9 at mnx*_)KMw2wkjTzJUVt$*F-S0ixBm`ReSu)gF^4(g5(@PNl!p^v7rWZgv z$GAr$!N3W{>?PfPx&7LM_WOg~SL$40G#-pgxmfSe01L$@TqNFC@?{^~o1wef>_gnT zW3{iC%QzF+I8Q*#1GIazDy(}J(Dq}CCHwY%ixvC!$lM5Z>k}@xi()B^AWU&fSsG6! z-WTJZRuO3V*YhjGG8QcwcAhe at 4-f-9`iCUjeqBfL{XzCIy*H|t&yw^ScLtM|G|*B3 z9gLoVF&stzT^v`o4%c64TWuecCz#&XC=`rQ6)M}i(Tl#Vur1+%D}mREHW7q=*G34% z91mM4E5N}HiS_;$AyUh~>gA{d)qfGE#nDG+2Sp;WXkWZ(XC~}K<3R|{@+wJ&9?0KF zKcSO`ygYbrwf)?K%pctlMt)q|>tiYDf%^ho6C>yufKb*0?caTb?y`NG^U&`*F{Jq;=|bY*VY0or9=OYxInVMi z4s)Y&u}Dlmi{AFUY5#|Ev*f&HtfP^5Mu^6b_7tj4rSQN7dsTmU0{c zG(t3-P!dc?2#GYhdRThzMlH*RUoX9lDz)LWbxaeK7= z%j_SZPLl{-9rY|17ezg577q_w=4N~V3x+6Y&j%; zHMmDPfIfFSj%D(z#S8qPN#2koXcEN#hJ7j+Kig8PVtlq8*rAz&b)aYe5-ni{QUV1CG&J%4AR`CtjbcCwA&ba#^cj-etQO~*>EUD!Zt2*r{tXAMK&omY?#N~1Fbdx?NSVDk6tB|FscooK5$ zjr(+)e$W_{B$KN!$Pe30l226L&nEgFZ~KF^_tNTlJr2BR`|AA%bJ8oun*5`AZ2U=y$VUTxOY$omFnb32kz~OkwHvYM z$@oZi-A3|x<51;RnB-2>^Zr5`*_$K8vPevNyeOaf&D*STRe2f8cpJ6MewB$Z5L>E~ zQz2W at +6iR8AJVHoi?~@D_CSc-j~e``dH7>N%_ at _GfSkR(4Q%P=JLR4tr61~soe4h0 zU|HaIzj!)dd||<|*v3_egPJV9;9HVhK4W|o-A0`hFpNSO zV5aAL;w5#%SYPPxFB){06?1}khUAdnDDFA_(WiCOrXfax0T1AoMdW$^{Gb*SL<5f< z00Rhv*9{Ccum70a zw(v3RCOcls6Pa}Qux}A{78O&E`hCEFwiRMnE6oKGbh{4);G5 at 3tRjL-xxIID%BkCF ztN7Mxq%qCdy}hd2p8@>I+OMsqa2(;ytPSIG!KISCB at 7+zQoir|>6tU&McnNAa-Q^=PegO3xxav)JugP6+UbwiXC^b-*S}r_ z#pz>2v{~&T`2g2o z^a#cbHE2m>OEt at _9TI(9r+1O!J;hAd;$u1yThhR9GF3`9S9E0h8=)MK!Zu-$;iFT` zKXpf<@SsxVrf-V+d_!Ap6KD#fAFPth*fr(UqzUp5JZ&$63#BAgF5U!=RW9VjBD?(p%w}rtkBmW#VLn1vt zjwI=NdiDUQhpapUSrWFFu(vY2+Y{fnvg4HdvMp`|7x)W!SHK;48Kic>e01>d!A9}W zHW;QqPmex$rrc at rVQo%`IH-U@=1a)N*9(%3!cT2QzN*K5dow6`V-FkX(w!5pNPs2(n0bjO3i zT`GlMCO&v)8Ld}K7xL_v1o6nvj=%5Y=CEqCFWl!?zg}4#uhQ;wcL&k?7QBk6*?BhY zHTRYO>fNuhxc0~!eT)qn9H_oU#bNsUc3Fc;D5oyqB7$#A;VCcda`$Ees`*BIN519R zt3j_}^7}G8-y74C!>jiYy=U!3#Ndmtnys))3h$U?hvsn!?~UO*MCm-FxOHp&ka6q7 zaX+!Q&y1)PqM7>#h z`W10U(yobf!s~4V1Z1y}aK&7 at 9luRm<@`%RHVxXBbI1xFon3gMcC21TD(}z5_+P{> zrQU|z60#t3K3t*-8Dt!@w%%{lMsB_Kz0v7W+h at rG7(ry@uM=U|As`5=nR)WG*yWz(YbM$-+O}<+u8N zN$Tc^wGH5r+sDxG^MWTYKLDu$TUWa*ifOQK7mEdaHrq;c8XDeb*E0nDj_r1)I1OT@ zBRmU=?DFHxnYx#6FgE`L6O&9{Gi}L#y9!91&-400fIOZQ{6Mocn$5cRq<~|;{7j4=at~rM9Oqu9C zG7z$Z#vUvfp4k01cZ=cU=N7f3)8t#Pr`k+*n0JMCCkJ^4Q=Uf*KE*!8S-h501|~lW z-H7f6>}C&2GFT!9?FO^sOkx?Bu;U&`AIN)Df$@*DH+H+ugOEY-I4`*oc-(lbIC;x+ zz#BrcE0#<4kS~uEHb_`Pp22I54Oz(GY6!UMlEay3Y|^eu~x ztRj$Aa?9<%`j%!bd8*c4M!vTyHZp5l+FEDs?t8&-y=&Y6*d~92q$E~Kv`gxH3+L}~ z?QnU8(MnYbQ3n1I0!8>`Kd$Dq6xK*m31uw2eKW~BqTMIkG%4g|p=-k{M5w$E;&S~q zwMaGMq^Pmm;qV9bSEW^>e|R?J%l&|e=1kvg$k%(_#x1tX3KWrCVsb4)EGd_B_bf%C zDvvU==l)FO(1L#4-Pja(;l9z^=mWf9cbX3=MA{lfM7NeX{P||_WJfdH at arJoUUA2% z=OwkpQ!q_Jk|DGqaS*meWgu>}iO=l>m~#V|p-5JCoqP0(?!A=ZKh$=gjQB1LoB?J< zizg}LR5kTOfWS=3aTklL*_%7zvNhKmyQtmkUH0l5NVURVQS)Pbj?aC+Xxle=gc|%YE-0 at dZgP?Q75$T^Ld-{@m(X9M$jh*+8 z7L7ysmT~>Pv*lI&O-p~t zmO-z^s2&=b9{@HE at y=AlO!dQ9V$JNa$kOp3ng)smZ|BlO{-&ur`%KuQ7uzMn(c#X&+cR?7pLue3g;NCyGFE5y+eNW6E&{oIL at QK z`W7K+u8ro9E~ijKkiHu7_pwYB;H+HBSMF;PsfV9F22qIdyjBxEoq;i-1NNWV#H>zqA4WpY}7^YX$P{?o#Y>(3r1 zrEj|X7vOnOPsFw3sk6kFkH?-WA>NtznIAw|z$;D4?j(5rzW|5B1)$+B&fT!9vxaXW zyB%C`LGV at m2`by)q}h;wUwCnbIM9q(Fn5QcyzahXwIsyXyMHDlFf~vX{mk3^_d(Us zn$GFC%YDwyht6!sf*9C&B(uwMVJR)&|80~(8j2R$x4{LM0}qcb(Q5B-ukiJ-SO8~@ zYXjySV{{h-zolMnIvzMTB8 at 2N=kJ*qkjYIsfY(>{UAJO3;c$+lfZ!fmHR6k2;9YS1 zJFuwB^{dgAL&FP{ZVgNBd`ye(bikt{xT_H}(_ycZH#e$rtx^4}9IAMM_=?fJv$#Ld zto$`#xvKwHbA1F5MM`O|+?@}cZ28!l2Y2U>y9;}qhEl*AO`DgBxH{twdh$B6_tZfK z<>8&a?{DvU-*-pfFYWz|0p2|589phqk7m*tScyaESO9-Z`va-Q^80)px(P9j@F8)tN^E1OZjYD(>MJmz5eP^ z+#@8j`F|nM-2EqMJ;M&Hj*%Ei)YnwdJIL)B%?QdmBg@^{1#)5G9qe*@OKn!B>PpBwCOtroKL2T03l1}9Z-SS+5v6YqCAZ?K^POLVeZhtti? z<1F(%!D8d1K6Qyp?o3tU`w1(TRio~#Ta!KtPb4Itkdl;(2zaq(%#(%NQc@9ih^96CLzCU1U;oZ?G zzlrdn%zGQWW7o)j2W!j89*ODr=nuFv88w)-gu!>v!9%7N`l*0-A&+~D;KVQDAr<}S zmwy0!x_7({3x3Fh94(i#$G4MnS|*Ai(omXG(D$>CkwAWgN3hF^dUrNL1=T!Y1uh~f zzcvN~SguO*E2g(LU%St^FF_!uZ&t&gn`%hKsKt=oBbk>!<=_SQ4J(Nt_N!(n$rg)+ zqWMGq(x~4YGEjE1EBr*pjdxmFbo%aN%aWOa;rPlJk}-+4o-2i1!ZR zkmyZ*nd$&~!|pdoJ+K>$H!wGFE~A$3=$nD(x at Y(j!j%OIXa98)IjZF$x3qUl3NE_s z7#n%8U_JG3Bem?hy@;YNueIuGL;;h5H*U at WgAGTsd0QPk<9`C4m8+P|FX47g?|sP^qh*n99fT?4pjfG!vGyK0u23>vz5%H)u1Z#F0IRBQPe z7G;J{Iz~Zha6bC4r_g&ZgDNC>^IiUM`IQ6Aq;;C+HNzn~lx04j9q_0_iKKv5QP;y6 zbgbG*-wFl{*rP~zcA+V*GGf|WMe;j!(r!=Dv}cnZT5Wd0$-S3Td2dk>NY$;pTG`tSN~BiaW#b}!jS0BFrx%V z)Wzbh`sfkDI4a^ipB`+dxCjJvN$V>mkpb5gI4c1#&wUywJj!~8u`u}5V13O-PhJ^*t at Bzw?;{0deXzt)vE z>Gv_93-_DJo0eZG1oKgycVRR77QNgIR$!R%TH>m~ zMq&Fwi0(S(#{tCVpY5)~ix5QwxJ{f49L+NMwpH->8(?dLxw_sM+4Bx*!HlxtL|HJQ zEZoXP^q(7$i}u7DzA<%FqRB#ZOV#>Ek9SnBTpeK<)pgLY5K;aX;N7I?)VWGoU!{o^ ziO-Z>Cv|iqT&&7kf;ubuglKUXTJV9a&FYZ_N!6WQKgXVvl!?MHk~-k#7Qw*{J)6`w z103BM8Gl@*yI==+(LIw(^Dl0Paj)34hT5Cx-G}}p`MH#X^{dT}Rv5F3SodA8vCdMv zTi}=`i<|8MU7iV7=Ko5^tBp$%7){r2kynb7$Um?GYM*7=#Pa4(_~J3lB#jkW4&7Z_9&QhBApd9a4~ zvUpg)ks9$Lj|}H0Zx#3KcsP>o0IY{|CeXMz+CnFBJfsOTzR8%u{;M(Tg!xyYycYcVNJzYW zJSbBmnhQ9yMOz6Lx1k at PHDEW^ry(34wHLH>ew9 at w@*4%KQ;M3FG18#=Do^qgY-{~&+$$c`_u&AiM zVOGt8EVv21i=(=n?>YVx-QCuLCfJ2YY|htYzv}z!n&zD-`=Ob6{rdHo${)H|1ASZC zv$I#gmq+zJh0jfk3$h9aymgwN`~sbC3?jQDKh<+i?sy`6Y#8^|x1=~KD7vEbc8Q_= z8HBF2o16=;w at 7X1z;CGC?qj-|lGZvkx>uv6KoYLjLPUD?x2~HsF5nWacj9~VT<89` zHoy1`k{m$OALem98 at -2V(_J-bgdm2I9H;0~#_a|#eb8^B65m6-fGSi=ja6GTE-of! z;kV&0^?h1B=q=PEySJt?R<%9wHNWOH3e{Lv8n(brgFCjZ9bB*uGF9^jM^}l|JF)Vs ztlLog-P~N!!fw@|f|9U<=C$8le z;6J9)?y$gkA0Stfk~>?`nNSp8&$?RliL&(q-c at 4KW{_f%Pjq<}gg$pMrd|0w83S1W z+5cr;6A{PbiX?8R#Mi?HCMm$?b(|YT-qntLN!KUa_%+(uCOb18Z!YBdgP*NR0}y{3 zJ>9oDN#9`C(8BER at O;iaw~1rdaNtYP#mtv9WcZTF+9A1ltPHEFDSrtfGVH9hjzUtf ziT(7-h^vCcJID4ToC;1poUAl|^$u`tt**o7CG8zp%;fY+$f;GL@%0))y*@-OPr^&J zCw4x%UwWa6`eK;w$6-$COc(N)RP(lRyl}XOHCQ~3Vc}Ky-S_|M?NG`=MR`Rtx`8w&@v at 0CZ`%J2pdsF(R2v`=Q! zwSJz;XuOSagWXy>P1Q9_$d2E2lASSo6A99Plx7VsJNY`67LZ+}75UXGzVEpBydF_* ziX~%B>=#j9eX;$nf6GhH6?WEYotb14d*Fh+cPfEIJ|E4s(UrG`X zt)9Bsdh2k&HO(nFB*e9zD(ZewOtLxNr3*MwHu-EmeT*(G^Jy;o;dbSn0clN?lu+jQ z^Y)acb at MCz_nN1N>FEPx4tXjt#CHia(xX80FYXt#^^~aTi6mO#zZk$~tGnOBqbgsNPgfb~bMohlm`}^DTCz}os`~;Hk zx4g5OhoS*7Qz5H+w(zs_1 at vUd<7!L%L)M_c*tv84$as2=(F=2s0Kz-PwFGlo^f|t( zJ5jB(E1?oigtgPVE4a}^cQ%}KoM^G>6uTlqhf+E|uHD-CI4+)ham}1J=_Lu{PiK=q zK7A+FiK1)>c!9f))M~e3vep at V_p&A3=Z#qG(7W+m33bEh*|oya6+GK>`0(H8<-KEK ztzfuLR{G}EZMnr(MtmS+eL(nCyq}2HpgU_$uF_z2%*}&&QLdq!T%VQmgRo%o0ZEGl z at 0UI4(B;I^s~(urq8NqANA?D9sjq8&u4%_N){PA<5;Bi7EK{GdW(T?0ba40*@?H^k zAwG8=nMPSP7B#byIjyb=m0VcnSfQx3)zL91F#mUf_y26q(JmCw{%;NU|CD?GFX;a) z`2Jt5IE?#$k$?ZcC;y*x+W&j<=Koi<{eO3t^#6lc{-0Ic|J&vNNyq)aUB*HG|5bI@ WR>#8rkHJ{~F6n>6w}Stp_kRH2QWReR diff --git a/extlibs/jffi-x86_64-Windows.jar b/extlibs/jffi-x86_64-Windows.jar index 4b0ab94dd7d084d4497c13dc9c8f5bcf93e4dd10..8235a3484884243b1d17d5e19340e4166f3b0b55 GIT binary patch literal 114 zc$^FHW at h1H00FK3!&VGPfCUJ%@-p at Ronl}J at MdJT_ll`ivRTUti;358NV{?cVh4>#E+ at Gc-r76ZFr!38)`ga&C1nVCd zz}-#F?$6n`KMnJL!j#06<)o!FG?|s8ZO;uD1Gf5*W3zhZ#;)65(lSpGEv{_hAo3xJ8u zU*NF+31{XAaCI{QxY+hM9|U7!_g7;{{qH at Po4EW5=KmImt2 at B)ug2m(7*Izi3&3B` z%73xa7U1$12;{#b{&9i7>JrZXhy4%OMe?tW{ynSy!ua2_iRfP&|2q~D{za$%nmxq- z+VbDB<}W(@@7VGe1NFaI^0yyW8lf at x_zw^e(I5Yc at v47!Ldni-W^dx^8k)E!KPZYB z_Fi9KUF=@|+;b=1&C0B*&p at szRm`kfy|UnDFSCFrN4;<7UAP;HvMUiuQ~phLR at B9^ zC;R68nDqwybdPL|(T=&Fu53yjxrXV(me%L at 5dkr{=bF;fZs4X^dxZuD at jRJKV|kp% zFazHcaxQv$5O=>*U9J&?YM at umrfacPC2m6bD0UTIhFnx zZBvwxACw30jV}hk`DMdsl3}vfTY?wXv2LFJ+!>Qi{BclK_i5=(>Q$MyWKl`G6OH at i z>%pG02|64l-Thn*44pn1VVJ2%^*vg&?E5;ys(uR%fp3ue4dEejNcJ0~l z1QnEw_=)ErJ&Zn;!(EyQ8n4-xFy6J4gvj=70NA~%xG)bgRA-QB&_4y z$-tGda|qR7fk$b|W-Z&K2Byfc+CbnZ2f(&Nzjd;tFarp1Y2F_$mLiYjHSlq at 4>M^( z at rf1q_<31rOV6CvO6BVnx>h}6 at CwluyF$BrnCkF4=~}QBy`Ig*V%w{1C0??eR&|GE zm0b(-@@IBRNp?zs%^VhU)l{XV4J-*eZa%W8SE<-1xsW6xMm2MvXl#N&I^XS+GJ_L6 zXYvPywS{GPjAEwh_JId$@o#IJ8n(bG&nlx!=1@>cCr{$kU11>_MSSJZ?4*)=bBmHV z?d!GIuclz?T0N%DX_AwH26G*Wl27^HFsJEd%?t;OK2arOAsVap!%E{(zm<8}a~s5l zSqS)RT=4BK7chkAU4+j5H!9S%wzjI#D5*A1cUk1| ziE at p;#m41($Iq7t!Ta1s>#RSt^>mp#Z<*Mwfjh!_$%YBbbYF0V>g at t?8eID(qvL;D zmYaFLG~)}8?(j)1EH0w^HsR%*T&_tjQNc7<5PgXP?s!M^9w+c8J+d$Sw_F0gA6pNU z%$+-+GFR8OkVVITrhMjao{^M4XN?elRr>!y^S{ws3Md3WAc`8gGxTCDSy!i=!^ymy z`i&G8o3Fo((Zq~BsBLVIQSfUxI?s3BDb}55-0ibhuaB!H8O8~uRFV`t!DN%a_9bCM z4Fc_d?Hk^VR+yA)p87B><;JIO&Dyy(#d>OoD_;VK9cYr`PiwSzDC|?-sI_B$>xJCC z9~|lvT$p|&>*EwVAs~f%0iybf%TfcMVE#F*6UPkfc*H-MO!!wf0{p_(cuFI9PnB^T`{f2bP1lxEpr;unQ%s*GQ(W%WI{#zjLK_coIJT=reFd&E zICa4-EUy1bq;FO+>M}rH)yd4qkLtJ`}by`Jah(W^5IVv$mRLTEt z(^|h$79s8T2Jgta8yhBWNvf_!vcpYap$0aOD79g5kgeG&~Y^MyFKu}*8QKwSvs;zxEo?M at ft~zhF${a0jf|9>eDcu`s z8P$6GAff}i$D@)7;Vu5#l=LW#)$u$PSWuTXJPX&C^Th=wNoW>}qFSRg?1SgDQpKDT zPHFlxmLwu$v40qNkElJ8MN}K_&)t(uBpe`tD({(v at 68!_x4P3W!>mvBpI|ZQ~z?AXWA#Z zrj;hBWQD>e(b5dqX}MeLf$p9Kd!B-~^dsADaa$8KomQ4 at Ll=bT#H<=>I%7?$MXY-x z3;ix at 9iBPzFcwr|Q=ignOow7)v7S>(U_=sSaFr9cI1yz6AWS at nl*eW{4D3%F)bS!+ zB!v63${JO$yj`I?fX0j#m+o`&_w8|_J=xJ~Y3U70!RmhNQM($jT*{byne?H!h73*3 ztY&J>NTq$K9>p>%k(k at 5?MLL(Hux*`bmu*q%*?V%!jy?o+{Dd0X)n?ROlqX&!-}$* z-UY-{FOiP&FrDom3(8L&nMKqK*-rw&mb at aUF+ZO9J6}r70Rb@%J#jgFivTYrqr-AK z%7PO3Vw4lx%uHno#KV$uypGIrSwHN#C40T2GCF(iL$>$iRsvs2?g at 7-(#$v_!)!M$ zohdV5jApdEn=#HXNxp9l$3W+*n0pt7&dDm-=gitlajhaVnli0=`Z=v~UWfb9P(=-k zUj>F5So}R-J2|z=D?e4p>mX<~0}ZaJhh!amf6?e&LIQw&+m zcC$<5&AJ*2(5KAJ!6r_7#6)=m4jmO(YOkvlrq!FK z(Z#AXmFQ(Hb{Hl1q1MQ1AU%nn^0hDCWFzl at MgdZnc^+vd!Q za%eTH*a2LI#_I1?6%Fyr^PG at r2=q9N2iD88tKxhU)gQm;CiljOwIDyR!4gzxbJY;J z?O1Q2FbP%3$RUVMKHy~c>q_!Nxqog*OttSCk4foQn1m#Z4IAPZz6sR{8)VOSbw>uSz|Y)=9%NhNLGj at xV<6tAC&ndzP1_xp0#6rBJZ2)!`&3GHEj{TznI}voF+u zIzKhr5QjH%v zlA|61L!yyujYnm24qold=GyO9D4Z7|3rAXO$BZXQ4dxlHHZO0El$=SYl`$j{y)thbwJ%vK#S9%*nFxxjkmM5u+mL zm^7H!x{$vrb&B`!8#>QrBKeJ|<$mE~A z1mD!Pm)VEFb88N{bzaMBrHM!D$qsWv0L&G1LI*r@)s3&aDE7_|GlaMU0LK|Z0s;3X zDQ=XPI&uvAo>4Js&R$=wl;t+#B*L1|#RtA-!s7f0v_U2gq8A1xV`hunYK-YU#`P^N zzr_3Jq<#~aRo at K1O>JnL)jU1Dgqt1r+3kUJ{hctkjG|(|!rpjC97A{XbFBt?Txd%*)oOxb()5MxnzdSgs7!TU8G4kYGgkEGr6jWf*s` zIqXadH%{Ml#RNIE0Chq&>d>$GTPs67R;5ijv~6cNPzulSLPc{oH zvOX>uFy|?Yk*7*5v;zwA*J0PBM>psIS%;QtZbZZ9b(nrUY-eg;A5`Z!8NcV(jBpjH zE8TSCtf==>ah^W6xkj1-#ptbv&LVISGR~err;BXCUGjUab!|8tQ3^m4OJ|W^XB;VBNT?O`DZLoT^lcu{YFpC at 0MSD?*s`+JsbrgL1XrAs=@h#$ z at Vsj*E1XU?F^a9?i70e_7U{HF(9M+)W*9meuWv>W%4f-xr>fRyC6|BT;jjhtQ?+3c zTsvcb-(b9`pgTbCY0L0prq(AjJ2Xqp-8k?89CzB4FM0LEoO(0ZtonSOZrnY_OuPNw zl|lZqIQ2*Pu6#EQb2iB3)d(@Z^PqiP#+jNA$hM%@Y^o?6q{6S*!mH>KoxzXAMx8Q1 z$>b~cfXe)kIPMQ;=yG7_LZmgHaOfnL(7(O+E8?I*99TY-dEuNZm81=ez*&KF8)%ArJf*n*Yow62{+t)<3+mL%_4ItB?ajHx6fcO{c&rAW$lRh~>(U z2gc$Cr(o2NllO>UCZdTb?V}_;W)uxQVa(A#wedtSFoMQs2HH#f?zRd1|yu~6IMh%7`Cdb|a?0G{e+ zy`sbqJZN4}X?Mo1*{&aNT at X5`(0sgPt9^1ke1fzdrIt(6a9>yoKh at Sjc8y=&;t%e+ zXAcqFUS)yxxq`bT(Ros?()60;?VmAwrUBI2fic1<(mMlD9xTzK at EBJFCmt`YeFK*D z&Y7!fWdTjjt#`DB;Y?O2nhERy45OpS#eOi1|u4=kPKJ{poc?U1*Ja?P_KrvahIJ-x|(c;-Y`?H z|XnAiB9Jr}N_Dc-4*x`#gy4t=i}AG;4JI%}Bj$3m3xH5k13 zfGi-+=1}FVsZCYPR#M(URvuO`9=ioMhP#|-HWdPtgc+zd3Ze~<&3B#uRL*8W8#%&k zla0KkMpYv(O;6{_n;y8HxJ^yTwT;V_7=`cnnTb!DKV&)g-j{=#(0;JL6MwuP+XMo- zNWq~W12V`-rjBbe2*HKczV+lmE;893CJK214Dw5XI~cCa5K zEjFf+(BsJtK!hsO$xYd4950xSPmr9{J#YMtavEDoE5?lQ{4G=XC>T2l-CteZ1cW_e z5<{E(P05^FLiZ}wv{2m;S-}j7mI~hP5kNu`>q?5hFW)akwQewt( z;1N7bsO^vxD`g#@mCA(GkVt-$?=h(Y^DSQ3qbU$ri~T-{_u#=^zGiuDlseX-l<$B- at IuhhhO zQICjuH;>{&X^&B$74n|`R`Q-f#oR47LMgwv3G#rxxFQ#EweTi5qaiFqGJ zDb`gPh_Q|FBhN{2HWfusT>+dnBg6;e>O6QoXtm&Fw5x-M*G-;KZ{B z%xLqq4ivQ7k at u}|UPvUkIQgCgaY1imDFPyF)2pj>r- at b8=)gc;u3`M~Av2 at t`#rwB zj#4oq{Vd{dvt3cHZ%yb6q?=a!2d1&3>a#Mq9!D%e{vUuz&4FTNMxyKKPj59!eD7!38qi4xY-wimvLj8RaeJ%Ms#>ck)g*ANOgq)l4 zOsR7%ez0?Xe=1*~@}{l0akI1DICPq;>0)M18(>pu%rrXh5juOT0wJ_b?g%FDLZId2 z3!kS-cGeZ=3s>Dj=XOpHi^I<1dx>N+y2C7uvcW{F3xG3lP~;W3*%4{p9{*&Y6}Di& zXV5umjx$W8`H^`4vr4&R!D6fWxIly$4p|3XdCVcQsd^myt?GxhGSQ!?QY_$G)pZiq z=!$Rds?kqW(cYz=zQ{Kf8y25aX8bZ7K1m^K(hxUjs=Q>%pH_ zTGR_#)Vr-LGnscI6;M}qb~(E`JflZa3S)ac^qAdsc|6hCa`+K1Bi*e#g$@SAq&x7xb&y|qXW%u0#L+wY^>bLmduNBi;u8W)B z at v$^-T%3zDXX?KyU>{XT*|LEW4d;vfGz-BxsTPL$+6VMUF0qvv44n7u68I~uXPh+_ z%XWq!L_5QoTTXy6xAo?z{bF0>T9GpcM}aefYw<|+q!xZFTOoccM;6zm at d)Ro`3Tpg zDK+P%WzBM1c*bH|TE=`^T*h)+-dX_|qEYKW>6peZ#b*r(?wP);=Mbx!=4bTqtdOcwI*MvYBxE8f9i<2r;4YhT_;Y#Tg*-OIB3bZ z-+8#{xZmGh;+~ukom^g2tZy%{)s@!<8l}<4Zl5Io}ck5;vlqB9MP0BLnXkPm! z at ETMx4f44sNQaW@INtnxQZ%C7>?2y_kt#4 at hWE{Pa?>iAv8>HN5x=|p9EE}}&NSy% z;@<&eP9o?u!w2 at v=MAQ)rpiY&&6(UY z&(t>D1h;bI(M+A^yuJa%O-dq;HWForl3c<%6;Sw-&W14r;rZect#LI|uR`&A)KWlk zL;C8R^QdUHc(zDV1?)O3M8MjFv;4tSTq7u!AVTgAP8I&DIFM;R|IcXz*YK*E7!p+@ zgdGs65Gk`0526xlj#w@`2)4NkY6yikPq7U8q;( zXpI^%i`^`s%l+NKAxtc|<+X07Tx7we#va20C5sI=Dh+R1#Gsi_GF{TbL2dbTxIWGCLq zN3+!3-fCuS6__Ue+`Ha$G#kKSYm;qEcQJsyy|#cX at Z(FS5s{EUrw6TOvJRn3p{W0k zbVup{ZOVuTU}JVE?{alk!s^?+fnU-<;;)lspb?Rl5K(tlr8?y6R(DpKHlgkN at LbO{ zFn1aF2Dn_lBRaWQT^_c8xmD0nTiDtVQmtg&CmocgKe1w9tt-x|ng24KNVR|&J-#L~`Gtik=vP#5?01;o>>$5V@^C+ at sNXAGIYIy*hv1HTA5Vb5kMQUB#f?^7 z>!MA~o$0sfnlM0*PWwCn8zr??`d9dJnctnAdyDvKK4N<9Ncql>$}wB{9{h^1PfL7H zKU;rp`f1e!fYkc2rYAJ}zJOc(42PY$K%aqjyfueyzylv30WaW3TjYTy(0~_k*cN-> z0Tkf9{LvPD0091x|A%dH2LV7BUg95K5eFtf8D8Q;ub2a8APsNs53i^L8=w_$?x7d( zz#E9e`}v1g^a)me%sdwvoRy#jX}bi*EMAnJYvgxT|xftcSdskQCBS%q9$bE%WR7& z=M~OZuatu&pf6FabJsGMA9P0K=+rd_rUqpZIXZVOfw at 5&L|0B-3t(nYC()I2*9uq| z^h`wJ#!HwUHyr4fB`_FDpT zfmVoioctEROrTbx9cRB4un_2hNW|%77EA$(BNB0bSp;){W{7&7Ugp7-h~5VXDTOn0 zSGZ1-E|VUJ{I(!MkReDA_8Y?koq&cYaE?VdEdvzkg|5U`9ShLuV=@P%BKsKe^20-n)sn}GUdoTK> z>x+mC;!hc?-}(2q at Pb~?*{>{STVfkJ0b4y$@@|A2ZcZ%+)Pl)l6d1 zrskePL}S3IWc_5CV!EJ|zlvC&F%mI_Udb+H+BjUHRKH4C-)>p9Dp>zynZEk5KGd>p zmArn~GGrCKzSy!zH+GesL%vGez8#OLMV!%Ge(2}W&nevcx^%0ND6R;uOlMOiQ#6jx ze{QhpIm8(0m+h&ehKKeo6LrPyn==?wF%>fCOl|71HRzY=TSgSI>@e(jEKKc&kvSHI zkZ}YClB26J3>@i)fS6~jDW(KN{8MiAv8G0rVXM^jQ4X#a^xv@@IylcOl4hzrh}A&*G^jY%8<{c{1!pj9^09WI1nAl7rP9;HY2 z>cf<2{lRd6acV>k>Aggw=DB1&Nd|s>(oleXYGe-MJ%$E at N7SmyluNzFaDb(DL=N at 6 zD+aoN(K$|u@;PGtmrS2}j^O}{0aL5U*L5#btLWDe&WId}dxHg9kDAph#iUhl(_S95 z`kUc5W9=v-(tAhCl+{qvcR+z at Am%g50;5O5YG7viYTnS>#LzG^_OoLWYNzCR;G}K+ zmT6jMQ94%VWYN$Y<9#nRQ;W>G%L2JasLd-u`%VGr5^)`C`8{LwzNT->aGj>_tf^#0 zPC%ke at j6ltJ=tt~JrqA*ZoC;=g6LJ{7}W1qMyekM$!KA^$r$jA^l+ir9Izv%*!iQT z-1)1f$R=gOf&;A4pF;MqqhTo+Q&FY$7g4447SW{*sz{S{7tuy^L*UGq at L>-aGhq*y zw9%<`CE+lbOhe?b;Rej3DNUlJGF5Hod_c*T-Y>dse0LpWzD>yb({N|1Mtxcuw>B-aPHVvs6UyeDMOg1 z$-S_xFz^|t$vE}16|5V0<525)^XlgJKMv4GBfzOei=byRF_RB5zDY(H7%Ix at 8j9;W z)Mv#v)rBMv=fT-T3x!}uGpMJD&GE>o*_*1ddwqJlVuxbcdY~%g{vP{f2v_`S86Ao( zw&&Xs84TGE at -RU{<*T)7O&?BpCv^jcp8N25oJZE*^u)?vDkx6QoGJb1 zVhd`k=4{FREv5!=wSwzysYc4VV|21u#gL2(_&+2qo~Bn#4`RBr$uFg(R{*3ld{7q_ zZ)kO{3I<>_f5WqG at nCcKrKF!4gy{7^Yd+1VUu=A}-SLW-#IP=ADdka-1lPUedc7sh z?TR48z9Gy>3b5|)M5nw7)Q`XO7QE at qoxkJOi*oM=naDy>o4FfvCkE*keN-!gw3|a; z{kGi4Tm_dM(b9)!jglSL9Hf8>d$iB`+hfeHcuHMsU at h=}$)aE+>DB2!vgijc1O)rP zmqq{h1KItA11KT zwd)Uffd{-p&V-;bOF2D9?yRYXHT&`Pm62T_!sXUT_ePs1!9$|!wBawbkgXY*SMYPs z)x}l!^S0pD)6&ukq-f4>8#J%Qb5pHq+b;O-iWc0riX*4V!%S}}r}E4%1uwQiI!iWf zUFq;RE>q-4o$1kBhGSJLby at 9_gTzPbNIGn3Hf@>hhJ##_Sok#-+}3TtwX!{*BY7kq zRvnww3B&3=Y0IRrtn?2^JbyIO<^ZDYDhSc0E#=g at Eq1M7&%?4ZOyG|mx-<{t+8j14 z+yflxBR#NE;9puub8UiRY})ehR<0p9^7q7!_>oZ9lJJQwOE}N1O1K0ECat}a*J}3I zj(m{fI0QHa`zLL^61}s-O4A8A1*Zf*4{}Uma0*VmgoPca)7X0DdMAeAr03v&HU}(T zqcr8EXJ)VIZnE%&&2r24T>q%A zKT1krFm2M&?lH={C9F1MXAVC7*t$4h-Gsl>kQ at I4H@wVG$tl591WfptH}IP>r$X?O>5)E&eDni>*|`o>Q>f` z2pKE~E|;dz3h#8sW&M7eNu6ws10p!V$#$-y^3*x*h8RlCB?F+j at 59JC~3sn>gPikf(U#wiPm`9$F3il!nqEg2J020Ea|cGbA#?h zdCBeE=kp(Z_(=FChfXNH5HRcK%K6xhS&5 at RW!mu43_&)m^Y at 5N;q?GNcZeC9u!z3Z zjmkA!oI?qRE3 at K9SR^60vbfCe(Hi}n+_C!ZqHi8?B^ko}2?z91?Gh^zq~9)MAb9uC z|LFDTa$rM~DLVluP)l^Nk~m`rH*MayedUQ*k>gjhP2WLD_`X$EUR6c2eMxCR4!-*Z z5t69Z8LiRaKahaABhKRJO-Jui(3CUi(52b~|D>du-s{adbebb1aT{O3$`u=CMl+u~ zH9KUBv=#c at pK+sI>BEnAOddqH9|Xkog1OLnbW}}}?_p*EO%_1VAh#I-T_J5}G?`Ca6XPjlXKr?;8jUM9-(k93dABW~T@@0&dDJ#Vf( zkX0OymkC#12Or(EW4F4uf-5m&_{MMdoRGSC1%qik7i at 5fJ6dl&kdg0hB9_z(VV-|6 zVZ~I`@U358{>1OF>8P&+DNB4>1Q(e&9B at m9~HKXAmpEx%bp!I~6Gjr6ZjH`>)WSc>zj5XJhv82S_R**!t!Rnn*mB2F+6 zz}F9xHi#v>I_yjZ0sw^wb({^SoRL7yge%U5GtQ8I#1H`=V81Qn02}B}*y^%5;w%6n zBJ_0G9Cqdb2 at yWHY=WFcK#+teE`mc~R#3oypn at Pk6NI%+UE^SU&>7($;V=fq25k`j z(F+q`V$d_;ADJ-f9DhIojN=pDdrUsy0M79B>^>$QFaT at mFr8?Tal*3(A$4eRogbk! zS)bl_)ZkNzCX_S0S68IObX2}LUXF%S_JETOaU7R^@5SZ%1#=Q!XgNJbmG7Js3N^fV zJ#imGcl_>bMef2yXK3WM(SeVLnfSZutl`{+a8`r`!AO6&dLC$M3+g#Wtli&+1= zc!>?6qa(yV^8^Evr@>`?*Z42n2|LEx=C0{qJ`)6t5Bl5I-bsg3sja$~ja^H>xF

    F!Fk*Z=KZ1z-j z=$blX&|~~maHx<9!}z7eZ}^wi#0uk=R=>etN)xS&J1u^oUq%xTj61C_eZM3of>TNK z0_>k64@*Dc9WAr(SgIMUCKUx_5gtd&s5b6l!i%pXIsMTWVp_l2c=#R4#~V zR}pd*EWVi#E#k_5>B+#a9FY at xB~|@}s14g~`>0f$3OGSwL&)By*kjcN-z}49NQKK# zN7eU}*SnwOvCtqt&g!(jk`BkOoI5Jg9fR$qm9I1gYWw%+&^w2!^xOj)q}tSBpF&L! zO|e2h*C&`3cIj8C+c%B)EwB}s)uZ0Tf+FK&SdOw(Q1c at 2qlaiBRYu4evGd4#c-y&nugh7}aqEj#o{PmUtkNS8fx{v0si?uS=^7iRJ(kT=$5d{Y_(dB}&GL zUKt}U3gm>Zj1w14G-h-XRFa|LHeEm27q=>q513=9 zH&VeV at -bt7XP~%E^Mw)Yc))H*9nkXV>BPs3BO>$C+4fNStQ~&;WWYur5c$|^N-#1MNb%-~JJR&%IQ&ku zVyyn+x&Izy$42$$3w|GhZHd0Zd}oO<)qX+Qe~)DoRDOxue-C!vBz>a+i*DeLd$FD#RWBJw)Ba5(;HYDo710hsb-AZLYk at T6%{x`(PxQ%ACLdiA&#f(C61YXN2G-u^)(e?XMTq$o%#L=E~UTncn5x-@~VGOpS8 zAlBtR`2k+YO1J|gC|C?cC^!rx-VixxeYhl~5I7CQDk?=TR4PRd(f8j6ZjfiN9Ee4* z97yJ{TF}cFmUyG+mISM!W!z35^GEt3L-ZkYLinINU|o at Zz}_I*lTGr>DqR!srquQI zX^ZCs2 at i-vmZD+f;gT|Pvr3lnI6<34264bCAZ1JGTJG8pxIiAGYUA>z%^L3tiWdf5 zgrq=E(^RoLeK2VbLV#0(W+sP1G*q z9e at r{&^6oj3~7cAP>H}@m5acCge0 at vjSFcD5@sm`u9o{&# z65X=1;`_Q53Kuhstr1 at O!Fa#n3hJb*L-7+d^62NE5tjA2ml$`2 zV9yPnRZ|tsGYA*Xw4B#6p8h!a#s8Mgm2T-XwAnlKKdU2FTW$O+Xb6ZABnSxp|6Co3 znVY*G|NRY%R6QMo6}+&WU{ITL7r_#o$#*3Ls#{is=UK5 zJp&(aVBpn`P_UFa0*jo&p3FiUC-Z2t&E7Qk1aGY1qbH9snOOsCP|e=NO(LHZLV0gW z2H0;>#lP7wRIxfTRI%sj=$iF>k2mirtDEjBbV_(i6pwmh2t_)YfVVkffX6$k#p2GW zr8hL~DT%julO_XoRmNMrX`4hp34}Tv358Bf?l2gdyov46-^9VMqzAej%m7}7#UnjU zotbfwW1krjKkaA421Q4 at G4i3#6uCa>^5-eiKyz!$}lGXT5_Y^MN!tHrG}dd%~tM_yHZ at Gy9u|- zj?SptITgIjy64XUb)j7)ig zPv+*E#rTp(6`zBnZ?^jgnb!E_G_EsR1!o+hjNjVw zJ^O9EdYxFNDrDrX$>Va at F4EK)8^`p#s#+aaf-!%yPc#*bLo_1;92lt at 5?0ltLNy?kn>6begpa^WJHaJ29q`dsdOcRyFDP61BF3xO~5asbI5oL0vs zY*imUUcaAszH59xO$*~NSo1O^A3LiG`2H at I8v;Xec=JGq@)`7n3GvdBoLDfn*ZZ39 zWh?mM0MhTy8|8 at gs-F({2}ldF0df#p at l88tAM5^T>q9%x-H&i(bfx6g=GEp~=1n9# zBgElTCnO-W0V0B^K~z9S86d?>{c!!1bH)KYNDFB9y;TFeJ5fLT_MXRnG2um at RB~*v zvC(=kHO*K}v;Tq&ynJ!-E7xV_d8uRh-M^vU`#ap<+5e_6{B#y&VH)_|u_-c-LsZbB z%@~(U(7|iux at wPa@Fpxe3B2&omZ6^Vu5Gh3IfS8Sy18+)YEBdM_D%%xlhb6 at zFNW)<5ndLT$n^6e5A0kO< zrb at g!+EeXf*d00i<$$}!^s>% z1db`%e;pNy{+$>8-0q3U(`F_wWyu at La=@T$wIV{+OUnGtKpUgYkamVF4=B{Es;X0+ zq|pBSLpM~{!Z{%wyV3NxUkc`)JyiozeDB{1xLlL57$Jt0cXL at 4@XR36yic46ar81 z44cC31Gg?Ml0QE3LA*IOI0T;{9JZO8m~3$kmvV6fmz;BzSK7J>%$q+p0-L`!;w&B= zt0rC4#*fDwXBkQAa!Km+G%4+U$){VfDQKqej+yLRoM+xq4jAsFr7a7u5@ z&@vDku zNuach#%Unjq-)Zo at 7$!v*JQ9VXCf4=dMB~~4*>}QLH4JVvi;{}R8?J074b;;=}NfZ`}g)ik4VD0T|gjkCP1NA zZ0i}7sA36kdhoN=MdQ`l^~E!Y1;Vl(^V>H!+?%!%6Zt`LT#2 at 6(}XYV{L%vKq5Y}4rrXl7l-6w_V?gG5N)AN(!2db^xOdMTYsRBN=RN`Y3LmhDGenJp`BLLfiw z`YeNHpQX(TfoaQwgfV8D4-y?URm at hdsZ^*xXE!PtdN1v?0e7BZlO11wZ`L#seh`b4 zNOmnur>i=Q*umnBztg~8lYX7!>$FeTyTYwF$u{|L5wfVdo)IpTN|Y?c2{lcf*!`P+ zZJnYbuufE3q55ZuMxe2ywrt_p_X&fK8IpUEubbQqEv*jvQypgxrAb01k=V8to$5_z z%rXxew7Ev^j~BJqiwj+6?NgtE>irvzZ^p>mc}O}J-9}wng*w+NT!%vZ;3yNjU~dki zNJ21+wojsxZ}gX*ax-;h-v?h-tV${dwX3yQ1X>LNDm9acrJPQQE574>Mw=Mvmt at sJ zHkgRn!~T%rPU((~(9*27#xcXZ(YVpP(x0I3J!qYNymKu;r!jEFRS+ptc8)Z5Jq^*h z%D8SF%xIrWQ*`fepDQT at 6h8a6m^(YC22 at CVcY|dbX+!zyGzoGhF%uraLpz*?GfVG7 z`z0j*AWTRhyfz#svoC1bQ3<<;iGG_%$t^cZvl-?U-ct+PMNS=0j+g8Rzov4~RV>hnd4 at N;P~KgAT4RM;k-7O)!xw{B5-##9i$tXERtQZ%Y8FO}8pN zL~r9DS-pZP&`U#9%HQ4~HUMYM=}4qwed%ef>L1XVCO7DHNAu6=gyS+_G5-+)V)_#V z1owZQPC6zwZqoK9R<8ee=hs04T at 5p!=Dgu61O4}sLW|;0x-~3w1m>vXbEuOc;>skM zpL7fjQp0cpwMZ}-vNG{S9ttz3jkIB=GUsyEd at uQq`HlsTH#?ut9$NDtuoFBaM2CW( zy+}>;2P9CS!4WKR?KD3J>cY)q7*q_eUEBA?zfP2*@1vt5s?((fCX5PM>5gmvfaY3h&%~mR28nGo9sU*B5nvmL*vbe-VTn_TGf=dttx#5SLMj9}2Q+Gax z6)c#}n at 2!Nq{)*~o at FhL8K=g#dsJ6(EiX2RVULYx at 0iNMGz$Ezslct!(}J%K185iK zPb~hjIKx_^tw732t2=`&(O+o0s>NS4QslW?h96wz!(`7;O&BoP;BUTSKGD)}XeJOe zoBhT6jf|gIr^<9yZdCMWDp!%N(J0!eD=Fnf#1t5pTjmRY=TTTt?7m(2KDz#SgAehD)V&%<1ku`&3&erbEsivR`#3 z=GP%n^?*RsZLZk7YSz?=_rt!MUKD}Q)w%faBe{Qhurcm8Op at dC4~YQ=&}~I&zbW{D zY=&g#ycf@`VlE9bdH9*T7{%SNJT(W<-hjjrsz5=aI+hcGZ)S0UQR(?hHcwCkGyAEr zajMLKiw6nVz)&wJlNtJ10;eqPb_5AjvI&)&(v;GOK`~tMkYj3;Jwz4%u%@Iq{eWaQ1*YJ{ZeD$ZjL z7Co%}NUO6S^9_Xf=PZFsw(TtblOfdz5D=XId6vkjs=7G3{r%ZiPV$E&|L(eg4UBk%q39tL9L|55f%ftB=Y_h1K|q~mmK z+qP}nw(U;Gw$-t1W5?OC)k$`2TmSdWd}n69b2X( zr?HEC#~tc?cn6CL#6&XzVxoh9>1aQJ>F9{8hRRYbGqkHfO>`9?9BeXh1#KRQ z#kn_$UgLIH at 48i_)umD`4=#`9$YtSa{zOqU;Be%FS)|XZt=IlL=2f|5o)5=#1f at - z+18R|GRjl6-IG=UGaSNY%dOR9sL74i5c_j|u8tq?O-?Zae=>F#V4xg at 3D@VV2( z2NO0Ahyg9Dafd&fo^GE`OBt>Ob#67%&B`x{!U(@uc<@lQv?CVta1=pQH5#EumKv at X zA*rCkf!E_;qd?-2+0j_iar^7|@<+PDJPpohg}$A!1COSHc^O>Fjr7(tH5{O4&$7|7 zX+Wfv3%8l}z|YyE{%S(fhJbO(4DQ5^dj=vynQ!=9FE0PX6jEnRsW+qUyk*uo^M_cG zzxAmBcWzn9%KFQiNo%9hVN}m;ac5h+KnzY6bp}bwpZn%2mEv|LPPdY?Ro-Vt{xkt@ z`Ax at kj0x6`M7}yEBOk=;elXx|k0;MBr0asvAX;3$U)+9ZLfC}RPN)utfp=gbPDH<$ z!i^D85J~YQxMQ3nT)4(|k;9!4QSnUhKzKj#5M8BQ>bZ-#|Y;w$BH9h{dbwBe3lCyW)+7~{S0HNpa?>h&NyA#G0hHnQR zvW7li9GxLgbIu#_EpJ`VHDE*ayYSFZI<^E>2*1JYHjV z7Wsb1Ti+|P6kq5zxRhQ}})8w1=Pp zs$m4DE(62%_GKt*SSO_x#U9;$fn6uEE!xv6A2Gr+%G0_ed#Gzz^F(Kh;V)^g&f9~{ z4LiuzJ@*pTkTM_@@puY!He9#-;1m4}brahuj1=McvrmHa^p97aSN^h3msj7j#a6Lr zgd<9y2Im<+2m&O$RR}%Y7Uj55<0IwQ^^CYx8Xs*)*{j-iW__a%S~)}Hr|s2!huT^T zaZOq!jTGKm3K1k{CX2*%_e}mSeZExHTc*|``s6UOM`UE#jfitD7Yku;>4%tg5#usz zW64&s{v+j#OsO$j>FiIqP*(s#!Sn!+NdJJ3NKY_A2o!WSOf2F*wnbR5V0-{Wq$wCo zBs#bzL<4%`hdp8~X*2Jt__0%c_UwrfQo-Z^a>2%c!Q0R3=t;}!7=pEAgl1LW9Z|uH z$t^dK#7>!S0V4N$3tahV(ISWs=Z2ZBw>b6-HTTVM_P60&)b^Z(_nbpZ0bo5s!IrYK z8m6;Gy1LQjxB;Vn#0TEC22RV;Uq-TS0`E_kbNuz+zW*5e+m9(ox&L?#F6eLHSpSQ$ zukf#>-M`(2z9z0Z+7{=y8HF*^kv)oD^u_Kth2ljj88sikd53cF?*j70uOs9TN at +eu83Q&L8)M=c*U&miLTkN*EJ?q at y zc4);J-_vOESrw2`nV(apB}Z02$qx1Np-uLP0vDY~ojhv&9){j at _tG=vc39hAetUkD z({lkFxDW{lRNMir3E25kUZLf(eys|AiZoo$^Ve>6oxG9dN^e-gt&_I>t$~fG7P8{Z z=A|mR at LvyaCv_q&@}Y5#fqHNv8Xpt72=#%y|9;{OSu2S3toPdm*FMP8#y|uNwdvgX&M11;zR4U^#vy_-=G8 at g$YiYCcE zQQJmY^MyOEEktWW-fMhFlk-9^K%r@)Qq6IxeV|}r$X0K8sLSugA;as}3}h{$+WL^Z zpMwd$VMYY$fFogcd&nfk;VQ66+o);GB65l)8;b!>%)nmP=<#dgPkfh(qt9Z$7TsS@ zix)un5-exOx?r;0mVKM*kv~~oT1ofKodq_def4a-Nm}iwE)yq32mLQ6h28GK at 1fDK z>1YhJG0cM?2$Gy3^lteq&6BNg+o8Iro77{pnc%X}s~Hq8I=Fkv;<2nUV=aKBOD>dD8ac;K8CH~( zUS>d;k;x(Sv7*63gjB5aZNq$+UCMU5y5KyE4=U*ptBt9&$n at gRZPBkwcJ3-i*{mei z`cV7ScS?mX?H)s9D&4T{FZhBo7+DUqYiSD^4`E(&l<}}&4Yhd`Y5FakR5!W#=rDGM zlaOLZvEb$6ebuBs?4=s(am&Jyy8WA{V~$h^{tN}}Gh$FmFnIMiILIN-pCUiyLv%2BhCv5ok$5gj#-8|j at LRU~kP^3>t^GU$fsh~wa+IzL{ zW4mcappF0TZCmgQ)(FNhd}nlu$)??Wkj0r-Zh$8nJzx(e2No5V?h*!`bsLQfUw0S_0lVp^%B(2btf7Ge at 7Zb z=PF7x`mRMZ^Dbue`=ugsMsAZGd2D8XUK=7fRK}Ftx$AVbMXY4Ey49{s-L*23*S)J{ z(W;g#EopWQir-)iu at HlMMc@Y*SrerECjXds*01)fNh at b=(7DDU9*$xam%r%X&n82%1ug_Hzp^ zNNun$U?EJ=+&-!#?g?XxtD!ff>jVH##SewUai}F;!2?5a?IR>r`ncAoe!**0 at c7-n zGKy869rZ>OMue5?EFZ-w at if`uog%ymEUx7*K2Iv|-U*5wgAK~G zyg|r_r<}q_6_}MJ=?iD7sL-t0dzgxzl+W`Is#R)M;IkZ$3y^!tER^jtkbBDR%6CbQ zW15X+w;7K2u;8h=J7on4}UAz7+>nP~PmYN_ab{zs0Jf2S*g{vX+6@!zdjRUJ)j z|DP4B3aU1mez;p1Z$T)sGCU++T`DB`Df}sxm`_r_7`PQq5j9~s1;=WZTeaRhSfC{V zn-?uTef|fP`&IHXY?Nwhz^ZMX|Ko$+>s`7hA();RHRShbExkAlN7o_X4Y zKL1Hz?IGuPi4xD8JTHvlv(0Jrj*;YUFq{yIS)f;1>7r(3$bC!7@?8`c=9aqK*$BS`! z!7U1(#{z81Y+Kv1Ti4}RHm1m+=}_r8Dm`lKIQ6G5)0OzTF0a=aPpnJ7uefeRgQG&L zF`^}z!#WDOSsy1HT>5x)E$qkq==do`cEWcbYBQxM0>$F^U_RlS`#LBjN at o$U_xX`= zP-5ejrEa-)a3g}pF-nd=_WVeRP;Dw|dD zWZDF0^!V>3p{mj07jBuYUJW~+jW=K7`9 at Lfg``62Xx5cru-%kH3k$S<fser;O*MaHgsI`QcH!h6nGXy2osPufeQ`B>&KmZ5JxUWKI z6tYT2Nvi9R!p~dGOOfu8SxU&fyX+zFB;k(IgfG1L-Y>oble24Ms){xxL1AwOxO-?l zBJ2Cj<9tu)+6CsseKc8^1SIcbi#bQu=buZL_1wiol(rQ zdLOex0_oDCtku^?3d8(L(rMYk4QK7kfba2#S6)xJO5`cn0fLC{KPsiVJPA7qUnMvx zR*C~>kt|w at qx2+6oSe5hez$6WFL4LD5wi0hk46SFOkKI_p0x(DD?$ssCc0dGt_!Q} zk;veE^%L8waSH{9M8PLYr&lJtA%^b~*mP18O zT3%Z1-{?E at z)?s0q<{wsm5!&3utgTwUkcfexM4Grj}VckrpZnq>*%l}y8WzRYH#01 z at Pi-(5Ynq}l*noZz9IHTP4*yBhAlVS4#a;ToZ*R3+-kgXe$xq~go zGd8c;T0(DywiS!v@`&d`=Jlvvbz3PEmxK*$6&c^2!{rE5JIcRGPK^#eR|#9EEw+~q zxzH(udpvFI*I?U?@(_l5LIW*{I=JmYj_`g^Ns)Urf)`lrF|<$^t8|UpCQU$#&?%a1 zb`E6 at X1xNq>r*hQ_WQ at 6W7ax$9fDXE^jL&kgM!!9nw$1)z=kw?jsm6g^3ko0Ze_NB zZB at hVG}MQ**m0rW;LtQ35)3kflwL|ZnX@)1YDhiO_Gi&g(- at e$Ih1J-zg`i+**zar z^z#UEpTqP`>G4`Tk-(57+DpbNNkMzPKUJT}Ik}(WQ0ixhozRflL|;${aGQ+&G0yN8 zP9WHqY`LOX at a}K=#t|Zfd=uRv>lQO at 6KH{nf|%!}mm`=V(mo;I*Q}A4*$fIoTJqsP z??Xke*BxUDyL>mlEdWc_{PSj at XXHgJs!-H`j z!Tk0IZp{4Q`*3VHYsM6akmkvQVdGKFeHY#&3C!#cXL6P!Tt;dRBDB^ty&ZDgg$v3I z{14~RbaXZ_2>-kf=t!T#oEDA&Dg}w{Qt&(jiz at 7o;Z3Sd$O6WCoVWT z(I#66DcGQkA#U7S=HICVZVuL_Y&y>?xhn at s)~)2rye&G;kT=*T^h??hUPu^EAvH8K zH8nA{|GCio>U>H)Fs_l_-yh!&pU!;h40@^zo_gPJRA<2Y1wyuTFh)ZzIkpE&^DkiMO3*+D~Ruk`B`ya3T>UBoMt&p5!< zkFWk+|3N{QXVl$%Za<-COvFI)cieEKA79hEgdt!1*C at MvT<_V}ril4OEITnM5?s+g z6?W}tcG;$NV7M)7LhN%|P;Ks;P%Lp#6^`ss2j#g at Ls+>sVw_y3TZwYU*V00Com<&= zIdbe}+wmJn0ASC at MTuV*Z2kjT)a8gFw=2lG0w~4SVwfiR!+&oJj_%<8ebuT@=dIXV95Ey#S~i5`vMHMD!PV;s$=ZLU7F75K+_r?lzFk3w`V zO541C*z9YhDwh65(eb6PICh3M?JUxEvWvaW%6-F4CwsFQ^I~p?*b7TPk89J(CY6o5 z>j?Aa+eLi|4s8=`aON6K2}HKI=cdqTcoaUQMnxz$j;pr1>7RZP`e3n)S$MB${i zEZuH~2C9~`mN_1+loPEoPq*36(6pB=-wk~7&PJWB;%zU$NZk!+qiqTnDL!AZ{2Q?i zgXp;Y*axR7(d;gS-3F8X1Wkg?49OIb#>OEtNN at 7jsm6pm$e{H at 2uV+qv1_`1WJId7 zqG6Nf6s@(wj)8I at hM@@!YPOw}3 at 1JA&)YCcm!8eDqcJ4q_?T-N<77}aP-TstVQETv zg&~oZQq~ewDr#V&w#pP#qFEgUoTQ%5G?*yAQvEHPX1dU-Dm|+(ol%lRne3hw(;=J1 z7 at Fw2+?YjgDxiP5g36+GH}{C`63HXhmS&1LJCu3b-hTA at x!L){j;i`jn{3tDCHF(8 z<=)S^;9%=A*n0AL! z?L_rho=~0A6Ukb{V!nEEk_p21&T0v(QLE{bH2|I=!KUEDs|8WK+Y5dXn3@=NA6Ftiy2gO_n}`YNWpg zE%a2JA at NhyCjii3!4*GSkQL0@&#)jgznTi)(<#GY>zX=BwU;rpTR&Wz7MiKVG)XYR zDWH9Vllj5dT7a&kecCyn$GVb!hSQbS+$ygnfSB3YP at kBc^~i&*hJ!g}Ty+vgMsPp%q(41{>?Lv7srKEKmqJq`ER;#f$k2s`cmX8wA2g>Z0&S3k=gR;#F zQyz$$M6kb7=IM(UQL4f}ym{Q3DwAWa&X=A1mfF};{~Vg?wT*A?@U0;LhBKMZ$3jf< zYD%@8eZAysjDQbmr>*h+Y+?Ft;cQ#YdakoR&SY|Hxn#LZ32E0h>T?td8qkbxJwsM` zE`jNGUEREBF`0RxdpQ2t#Wsj0zi_&;?^|OOt0zBL>?Q{XIy-MbSk(v!+6Eu5?5Q^d zDyyXiRK6tm4 at Fc{wq_L+YNvIwB3E;ZI>s^!64j?6rA0(mMd zbJm^XIKDLRcKw>xMo4Q~wzuXfa{Tg1HFJ?N{)e+6Eq+-N4?QzuM!3lVPI#i%CqCS2 zFP2NP9leI8GviJ3T&Wi*ZI#(z@jm+VcknzRr$lJpe;xrXEf|mh%TJnzDN-4>(;Y{XG=fePZ>p1`G_(H_!wVDE-$# zqf7yr1v67+A(EZ}9_G`Q>DOOiq{-|o-(9Hlqh~1PEMU2t?Z}$$Q?&6wz53$>Q1r#U zs}Tz_nsjsWP at ucy3dqQx5_E|=$m?>r)+7yHn`5XaaStW1yPqPM)VrU(@82S0hR3_z zjGPCLkvwHd+)>Bz=*jO8l1}1Fid8&W%#o!zVQes=taOc?3!>!|**i-X$R?gfBKLih zd!VFU)*MbWc~XH=jv at nSq=~6m-O1 z^~v^x*V6}x%D?NJ{19a=9`NEwj&v{JCKZM{X<#S@^^Cd+?2JR@!a6ZIi4w#0geo^aMTgMEf@=Y!E4dR4Nti^5vMXI&j2o1h z6RJOS%MT7zsuD*$6s9R9so{)K<>8{CeE~S_nBT5HWLUr7fcZuB2P2CQef at Mcr*A|Q z3*&Nsdgx!4NtL|z%+linTi&h1py at BFCvc|CQY{bdRE-xkrHbx-VH1P05OU*})2 at Fb zWm1>({i#z}55tXF6V(>!G0fhO2*Qm%iE}MB}5a497)Xky%jpHm!=^=np$Y&0x5qZR?*GJm;Czf_x(pho3OssCw&G6>mO< z!J-JM5LModoFhQtQ3}IHkpMJ7J-mYFM3Pdk^a$EKs{FNFV*_ at r13&4K#%jRoP`H{Smu@%gXljj5yEe>5j_ zbyv{C`hp?XVZgGzN3fjWxtN`Q^41nGH2xwYB?~3}zp4{jTEX-o8~4`v6!HrkCm9WQ z$J6qKuztyH>%%K_jm$u$ zF{V1&YGy~OYF7NvXka$1_Mt5-E^q~%fq7eLjMD5Nd(lHA?{AkQ}=cGC_2zyefiyMnhOpKdyXi}O&fyW1W zmE9V22a+o?nZSv|Q>$(@I?RRPO*fkSDSl=P;W?^AEh?;ron$b8tOGS(u8h{Tt2G0` z4 at paUwZtJzkVDz59Fs*?M?JnP95e5^M;`3d_pRyV0Wl|z943E}U9mxX8_D2H42m+5 zP`NdE1&Kii;-7NuEv(X>r{7Y8Z at kQCP-1|c!Be9cKUFW?zO?_UkX)9EG&pU_hZb(A zI#>=mH;ujwdC(AWd<;ICEy_9oXq`ajdCu|@$OJH0f74#JIaMCpYB*%yslN(D9_;TuK1}zZ$=5U zvc2UBT*a+Mq$FMv&de-R4?TO{bfz$s at X2{xVkxZd%ZyeE=VLOM$S(etSv%dftjxKKcsj?A~2ojNeS at V@W$p;daXGT-7&1- at mA{sw at D zizAkC(K$=Ga82#Phd1F(J9Et#X9B(>QX|sh&Esisn{ib;YaKZyilzae!e#MX at NV&7 z at uKh;T-yf=hK!R%vF|WWF9T>Xe7?RGN?0?e(c$j(vctnXyXRLYBq*k4KCh=0DNd0CGU_t~G!)%o1S+ zJC9S3quVHhMUPnyw-(0&eg%F7ff2_7ffJq)`w;#v>^q=v*Bn3_Mh=h%u%O1if1vPQ zOZ!FTEupH__Lq$dHUR{ycwd^zT*xbL&;%6O6_X!OUuLfQeIU@=b~_lJjxnh;q;u2P z1%ny09>cBarkB|UcyB3a909)i6sv2yvS<(vtbW)tGW at wnQG7#?e2ZZ^F?h$lp_Pew zE4y7ciOd8E%sSMgr2gt06Xbs at p$(Il4J9F7IDvx_k(*5}`|QsKA7f789&{D+ at MYKX zd{-Wi-Ow*B*KR!sj*ZIRd~Hhpr~wT)b((ZU8oDPsxmy0}B^emD*Xoh%QS8+DT1{Hf zwJL=*h4$-ZTc;j3h&3^uQJyC at 7p+$qS91aS^nYo4C0DHayz-w7 at MqaUA0UWM4d@~0 z;inTGecFKh=K%e>v!U>z at RsEV5Ge@SEqEF96fO7%*FE at I_(plF7kR)DwaO z?H}?hI6$N(SXd-C_zmU(F$`vX0H$DI;3Gr=8v2JkA^{m2uUEt at Xa_~4Dws5c16uOO z1!5cu4_*u^4?Z5H8+Qhg8!wmeu``qOu{)Fe>Yh>9?9mRHaa}M>!M5;X?~k*QzPeCM zCaTf$I7CfOKdgcxw-km*>*o`h+Jdu&wAykW9<2v26r7dgocV%&e70SGwmpdE9noeT zf at W=bt2U at vWBwQg+7O0GiMCXU_?Ae6GwbsP1F?K}gpXx;cr8yRs~*L#Y5!jz%i&nH z*G9#KKcH!#jyWorJO|;}NbgGib0wI|fOre_59z(Z{a5Dzs at 9ec#{W(uq-}WW4x^9s zMUvanO+G#cc*?;Ha1hI=h(LG*r&Y#qk`*S*kJnagnE8LenJ{_bv_B~84+FRECZf4wgp&yEv7RwOX5H8o&v#E!=Fx( z`{My#I5Qzi2)k=c7T0)_cklb(W3 at 7#NwU+~;+O*qQ7k{zOw(RiV`Q9L$VBgk2k$ z6*QaNRp6YR3^5L4HJv0OjmD-*bG?doRcESAg-VQoo<~(QZPn!5 at REshfIabPN*axW z_u>_ftQndJ8s5wZ3kQ1qTZNnt$$=zl_yR6cG6z?V`@0bj`vE79N0aHY^wk}yr45BA zYuk3bN<%CG>dk#MzKsoO79WnFNzwkuW{%vv0@^Uy7Wmyz$rU^|CKCg(ij-g1oa$ znwDW6W39#J3yZmk3P(pd6E|Alv4KmGd0Qizdu3J0#QgDf8njJh9onYLv_8GFKd;mu z5Ci7RS~}Dp_t;dLl2hW)Y26sYXoQ8oKhzjgmY?BniIyJJYq`i2ZNkD%s*W2()-Vbn zOSa at wOKHv~O?CA~3g*7%jQ3m at x&hM at uQml-`k?R2Z}?Bw^(fUh^6Ihu0Qb<$0KZaxr_>`xGfB)i?JgQJKsF>xo#l`u1pP6)r z8T~z=4w}O;c)YQzmBXjX|K-KF!f>>vb;ilTk8mr6Rf#KVW3=l<9(>3&&3RILGQ at nI z#oT+7#r{Ogg03lzdlEIxHO+f6IjxLNQ8%xF&(?eTw!6fZ+fln-ubxhaL5D%xz^E|v z>1P8jQi0r+NhZj?JR#64IdJIydbxxvf~R`#C;tmi2fo;6D1Z4={RPCL-hnLQHc?Hg zC78_ at Rj>61;UArx8b@)XeMgvpU;XOXMy}zGi4yM?&m6s^GuCyvhPJXE8py^L at N5$QU?qs0${K2GGB=^&p6Bk=-C4cD4 zZpiX(c~{JcIbT`>zaWDAqHBM2$9JB=L{}j}4vP=5L)s3rN7+^)M6!aiM0NC{+coUp zOYKcI%~A;X at LR~+llTfRe2Sv;zgy^4N)KeEAYAV6)|KB|lXO7Hd*Cauxi z#Gf7uMmR%PXo2C at Y_TBE$i4-(Oo|&(PUj%v#X(=H{Z4SBykMg< zbcNnG)12vX^EMnf+?_2=PG*4v7fI4}n7B{Siyxfs(}s zj}jA(BGMGT6 at r1}3sXbz_;a1_oU+-sJ$!a|*FdB!JUD~_=?S%yKL*8z50B*D2aEFF zn at jHa$ti?s$9TO1(f#6Z*B>vqaSitb=AJkNW&IlZgi4WA4pWC;p9ZB93g;Mx4aAb= z^c{-xSj=Avb7ItLn9>SRcC04sR^j1R#XDPs_(xN|K+$}zE(%NOY_&G8P*5=4IlJ>W z{wb74B~pW|e+*#H02ih{AdxwM1D zznctd8!ih{$o#0XY3EeJ%*4b`$PDJ;(J(7p?i at p0h%kP{%AlxdXc=Z1$1FhT|Lrs)VDr zXjozrHV*ZU+!v*U=VhvrRH;bSfyovgQMI0CD>fqtQ+AYxE5mR{~o+_%9BnJPL^)F1kwgl;z9DYbeI4!|z6>z{?Kou(xoVnStd^L~#jhH3d3 at _0%c zYh1xBA)xUp%`rji!2Ubm{GJhuI1drY0>!1Y^BKB%yDv%h9$y;az>RKih3N&t=S!jQ z1Fj@#mXtKgD|pp*h at 4Oj=q-&P9j+$cXgnS#u0Ad|F2N?>7-BZ+uA1(qHjiqt$VN`c z+VVAqdNN;CL8XtSAbw%8S|QfOlpD1yK3H+AAH##5tYNN=8BU#`;vfUT!~$H0$g+Fu{fjVJ_sD9RgVNOKCs+9et4Y;Rd)X&=ax{==uFHbLBfm#?_CZj4L=g7D40)RzbA- zOu`>z8JvF4tKo|95h?y0CZTB-2r;9#sV)7(BHWtr`?LqKHnn>6X>dWZC3@~9jlCFJ z+KgyvoYUV`Qs0L~mU`9bH6~D at bg0Cc@LGSK)Z at qFUMDN)$Wqf{MUv at v7->fu(PcI0 zVK?lZ6!)Yov!pZ!Cps~ua?HvkNsQR>qQHh>!m}lzM2}d~=Z?3E&T(ODO!58T&Gazm z>9i`D9~ce^YW1zkiX55e%TX->CC<*ryyd`KF1j|Ijh-hDG*^|ENGRhTwOqAW4 at +8- zCv%iM-fXUg7^rP3h+Cp6r)^SVz-u$NksE7E)AyvimQ4KyBbBMrjv1M;_}xH`V+>q~ z412h-Y>&shoY{#RP<4>Bmyu4sQd5}d-(Ar43q`PD#)Znm!``w%RBU&NdtAUMn!cH8 zIT-ZeY11PaElb*soojaR?zP@!lu*w?;S%X4w4 z>9_yN3VY4KKOWc6Ll-ORC9!j8XMaGG{WLkeMa) z=p>KRIM&KLShK34eleftv;0}&ETPFhdl{5VY_ncQ+ at 6%Z-eWUVwtRm^%g5$w4>f;I z1RMoa at 4yM>i6rG~d~ijX2FN*O>^tQE(85viO1UAqL%2e?#kjQaEVzI!8GFbFOf$wo zqA>uHa4zU?!Rj z?y2&_?!(^}a<0m(wbr&28CFN0a_6G3*6Wi$`B#WVU)5r#CjuDgd>#u?6!)-gxMgiJ z#`-9rN1n>NqF=N9gm<;05GtocKU}qzKSrrByQc83V?MrJ>3ca;{;+}Gr+(dX;0ph3 zQ-)JKMqR3`=wCj%dO5&rg|+dB at 7G2!)}VNBOcBqTtBHF+`PYU&s`BZ3Mls`Q==TV| zdEQ5QziqyROQor#Zk}ABAGVh}ow!PEPFwwo*Jc~yJx7Q*jz!WH7V(oXc01ORu00g< z7#V9B&jr(oReE_<4l2`lmb`?EQa2=%Iu`Ioz at lV>BKDhk8TDo;zS4;Bn)!r;IiAW$ z`#HyhGkzL>UxND8>_Nr@*F7}HnftL|gk3O1=EN&rb6Mk{uq6%c_$fugiY!r6{_L?) zf{-|$n3YF;?v5vuoRxEZ^6aS*X2H||j4%%tX$ImW@;d%Gxf|E2d2uI3O;^rk;!YOi!qYO(#x}q at j$_NY#5DY~@mTn+Vw_T*l z6TvxA_f^}BW7e=aN4%k5C<6%%A;zZPd1Gkr-4{=A7>f$MPX6N$vy2?DQR0x_zD2?O zSM_Q|Cv%7YZ at pT5O9NLO?KA8hC=Fu_E(JzSVv-$_e~l?Lz%ZY%+Dsgb4Kq~96(S^> z{Npg(w$2aIZ~(5yYQd(2h*G)FYxn)+4|B;r9~z=}eW02EFK* zM!iUwW}bzNf*Q!`$Gm9jhn|&)CbTfLEUICunRLLbV${(sX?j(N?t{-u^Q4c^>5Ac& zWcH2cSY#7LmMS^rs+1d}5}O*=xN4Va68Cf(ytD+PjxEJ$wK)_|ZCL^sH{v{9D|@QJ z;{%YRN89eFLcr?+66RRj7JT0G+~VvVDOs}T*TyVCDy)}!c9f4BvZ;I1ES?B4E#CM&02WMw at +F#G z18y3%>+1A9$_)6^Kv0a?zEo|@iuoDY_pgw1eaygIh!9l{g$*v#z3NyL+#|c3Hs^s6 zaolvfnDutMy{Oo#nBzT5MXnh3YE^o|xlXvY2uHW;435Et(iS)ZvV`K?_(*x=+nJ5u zx2T;4{Wnqp{Ga>1U)Ue_I at Ol2<@wumOF zId+H$Z($T;1%i3~J|xTI4JVn&T;Y>OGF#1yxu at Kwj9RU#=$FT zwDZkAL{O6urC!qx5qE5<;bnHSN^P?CMU#+hMR3#o#BSTz<6DVe%J)~;uO=Z)RlFq6 z5UCOd+tL0m`32RsG7*P9HRt_mqL=$ep-vGZ+wX=gztKv^Vfd5WPGk5<{9XFJJ=Uc= z8`HfmlAnl450B*?TPzGd9|j|ZM||DPBqM}r8S|$r)EV3m4i%E0Uhe0!Zo4sG(Csrw zW-E+Ba;Iz{Mx;b|mXKY)o~)ZK#sP03VR|muacocb9>jYasNnjUTlp#ye{%0(u|M1dNe+lnn)m4};{>Y-(dg8E8 zVz6E)edEaNkS@&x${kIcop8v{7t3dt6iaK1sWq3kGrD7s27wonFsO@(iA6<3 zL};L(pj4diJo&rM%b|SD00b5Dwt25Qj`9xvy0�^jvs+)4HUdhR%OA3VKa=b;|2x zQuHtWHeDX?;uq8Arw4HTK4eOlKYI;+myBaz79azV1uEKlWxik|)G-NG?W!Lhv2~BU zcWd-_i_i|g|JEQlOx5wuG+dk*?Utbxypz at Wo}p=*I?7j at YGF{ME^s%ggU(d9WCMRk ztAozcSE-J2XR8xyZcw(wb-2&_?GxJ`m!E$ldlGWcWT=lbbt}?~DNCP#K)0#cf zTcm0nnB9^!*ezaF0n}~D8hKCCSjcR%W)FU`ud!h1D_WvE^lZtR>ejE~23}dSr+bHM z++}R9*a+M~>!dOVmM?)H#y9JX at l~jE-;L_1GX)l^liw-SU@!+(E}0za>(Cp2%2kyB zyILwuKJ}{1fxgW;)9;}gOF-Wioq_if4cg2nYjwbTszz1DlWj|uw at ei~5V~1s^1Vgl zECb1=CGQ2dhJ%T4-iGw9O~>9upnA#T at Tz%z&`+$2=`RWuM&^udOYqBY4c<&fo0jO8 zB#o|2M%z^5-ohnOtL;A5~Fo=lml9=Ui8eYrY~ExCM+w~TuquEJdzy92$~*jPXv#7 z)-XoalbnjFb$_+?BYZDvoqkR%RAc$sN+4!Ah|8!0m!y>mcW at yj@s at k}0ZTeR=aR#tB$1K^tjz<+!v9wX$1up4i zbV9#TeS?xH3qf?*mK>Qw zwjAUcK4;@rLy?0^R{4U2uU55r(tsBK5><=&jhQY*VoX_%l1!-}vF>H(A_n_$ryCF* zP4;eFiVs^_8QS>7RYk!V_rt+y at T6Rgahzb^hz-5KxGV8hi|I5 at ZrU1_0tX~L+QM45 z*Flv*f_u`ha^|6TvtGkSw}NP6Hevb3m>??3Po~d1Xhfz^wqBCCUwyO_A&5EB zMU$~b^p*s at QQVRLue(N$J8ZVOyadSq?rx8JpM{br z@!`(`2+^&Z at oSchNeW^pte05C`^Huh3LH438p2y^vt?JL4Yk(N<2faD1~ia2cc)tF z5GYbpxT#TF+|cx18qn~!jI?;?O6Jknznuyl*xyM-& zBD;3)$gp7Wl`Z%LQfB#XXD&&uD#qcY60M&3W=WC#rCwhqs8nANx6dEcH0(J at Qx@7b zyCm}_D6sK3 at +M!yAkaOAzu36WH0+D at VaH3lm6u)Y8*6ydfP6}auTp?+WqLCHGJF9VCw=anyiD-oCD(VWG7yKjX3Ek8{hTi{L+_X=GIBI-&sE4 zZ#e}$Cz`pkoXw^Dn2oji-yBsGolG6ecf6D<7Dj3^4La?PZDwr3Y6|MByExNqj4W5( z*w at lrZIAi34m&Tur#pRsBxfNbneSI*=})QgV|h-uqMpUlCYgC`i#46XN-XrrEooAj zT+NVkC+ at h|{0Unkzf}q2*$GtbOq2~49=IdQ%*ijDNq3Y?5<~vElO^dmG!Bu*{elWL%6!z43R$s9zEFX{6CyjrCwhOqIcI zB)4h*ZGXC{b&H1ae|@TN^tl(pmVxEp^v~af_3wn-jBgz1YmD#s&_?BKMHc!HlE^=M z1i?VYNYbBqj`Oq)L{}ExJYN2BCIJv1;Y?Y^cl3rSC+y6x+Y^*P&|gp3PM(uoZ{Av+ zHrsxDt(hNXEDa)Vh3*f{HgppgnwD(4(|H^GVBTXnMMM-b7dpgZ40QjFTcaST^JC{6 z-}uMtGT4XO4SmGv-ix?T=%G|nHm}i%PvoIy(kku0fNs?2?BVhKQ#h9+SDU1OB#0z7 z!bn0XLUX<`SJH8xB(o%VLMp-vLQFntSH+VYAX}z6VB8}KpOAyk%60lAXP7P9oOnDS zi9HFL5RvZ}A3ZNUAC4>Ii4L$iqb$xGf7~s}E(x2EfzOUt%eC%AXSg}boM_xH37L?9 zkK5JZWDSUZ^y3)LHG+>Yi9g9N2_^|{Tq{XBiB<+vCV^r$b#HAf^~i-!jnFp9DhVe^ zD~UVlico;p%kA=DZ6}DJSd4c36c<&&yVkQ&$pYV&_8e< z^YzQ<+JoZqlIW}|(n!rH)!lVe0L8=eZd5hh9~9-ciArMhCEbzk-c#{G-M=7ZywGdO z_q>Nh`^;m|W{JQO1a^R!#iG}5 at zQe4kkzQypG9SiC2o1%{Gj*B_>l!ZC8*$->#S?S zH`X%WGT~Nt%&X8w=&b9&H}sDe`R!JEOgS}~rOsHTr`%fL#5e3#dCWMq{%>7NZ??6- zS=Xv-(5=L>%QDik;+TADG)sXoTTe at uxz)f)*Rc!eR$-ZVOh2`pWzV>(*U)O<+%@D@ zc1%4rlcmoXp7k?}Y^tfkT-RFHdEErRdCP9y2LGo+OM>ng6K2*XV|rGDMv|^10N}k%xcahOt|SY6}5$52uMHjhumR(8nZiUI at Dk+ z@{=!&OLwgPtcJ+Qk1K*1AJ^{q(#>i%d}S^T`hfF zdfp*g>^25J(X;RAXh7|#SU&rske?p&*jP}rv0Kq at fM6_rU>v0`?(tCQBa=sL$FtG? z`mTWN#nD}_Pus9?yX#ghMSDCfIfx*@adhKP5A>aL1Vl5N at PJN7!uJX;aL%+%L{`z zY8^i}B+iIY#2}0s?^5?10AeSMKODi0VHt6aIXFJRj^Q=xRSQ5*8aD%t9w;>7(ZsM| zHv-{x$omxo__9o at eSSV8FpkC^FpS!}kSk*tQ}qLA_AUM;ytuL}qZ`xo6IbnNfRGOe zTg56B8aIYx&MP-aJT4?GY4@*-Nt^Tf!waL=Oe((lB$ zyEOP{^unJW2!e8a2v7F|KoQT}1<95Na;~^jE}=g1f{BPOB|fb_h|D8yAT1C#<2VB7 z>Oi0gf??DMAyJZAOJ zJtN5n)JU<$)SpgU38tW at m;v05Vv3-y=Qq|E&x0G>FR&G}zGv7`kq9yew6CUT8P)`J z(52Fm`PrTpC^?>FnBM{GE8>}^nYiqr2;+;B+a&$jdPF21Js~z&`Tf2V`|vSCaK{_de0nOH z#Xs|m48$_G#~HH(K~^>?ZN==y*lsZgr9Zft*blt}zCb-Z$5x zdPWB*J`J~$@IjlS1JMF5$|F&Y#ID zxp&S-^MU80(XTK_UeeFbXJZf=F-EZXyR#2*AT%o@Oo!Lt z%}jAN;SV+XW`!|^m!m|>$(pTdVIpi=7YZHW3iAuzrZ|mtXV6T%IkX}I9wrN29!UdJ z9=VQEk+Ug|b#f2 at w1E5rr;g-6s>sz8%Q`cN1N4CW8G#Q2jL3z#fNMqKM6)7Tlg}|H zmCvy!mCmsy70YoZm80cIA!lTrSJbg7&Qx_W5hwu;DvMWyZbwMLJfh(coRKoJHDx#b z7Ue1VH5deBhlGWjLVm!gL4Ls0!sC_Hu{B9iH8+WA`Zb6Sw1dP&Tfys$X<8W^jqrqF zCadGQ^#Z~`W at B&zd~i+EL#N>Kk$a-H1D_v4itt&#dsv}iJ3RwGX;V}CZnMM zd@|7J!P4--YWRNOovmCdSrt^d95yLQr)JXU~QLGMox=+%oJPEyt zwK97FzWyW%H*HH~sPtmPfQe{++7Ql!P-edYq9}4+d9I`(US1S98WX{S2s2)2%stMG zd7dD;Ku?u&mR-4rzkIp53{npGx+ z{K)sq__X)WrlD0>IDWs1x6~oAiDBu5Y;}&#!$u2Dbq at Ft6okf$f4LK8`6>^(&B^_E zEC|CcTxwc$hq3Do(m7^|T;5^VIjj%;X#~6CyVSI^2~E&D+_d12#qFCsWOd`Zb|3^U zb|d%WZ(&%<6K6!9^&se_WL6vDZ$G=u?Xu{|>7bS|01#-1_7_4yGyjKXB5)l_9 z7>MzG)jg;JTweI_P<0nx7eEw*wF&PWs?44I{(CQbCut)L^R)Y3X)k9Wn(w9c%-ip` zNRnsN|GX4RFT`0vf&v2rz=46W{?9LkG$d62i+{7JMj(S0^(7Te6f4CDj0#C4+8oIm zG3ARWP&Kt6OGscu$FZ=Wp^iuMX>N0a->(rA-ywBQ$v0SYbEry_|E1kEfq7&r-W^Rg zfg%TO_#k4e;yw2;T^ICqUu6ugSV|m5VsBbk_T#WJ$=?*oJX|T(`Wn#yHC@=`S)6q2 zwL-MuZ;5D_r at F}qEFm#_02S-63%G=4C-{WcENI3R$58l{xIxN4NrPB_8U{K4P!KgF z2_cW^`B~mO*_kgXS7dV~oc#Km_qX$auR*iH|4nJ!zT0TjPt7w=;IH(|hOGv@{@W%_ z#f;s&WxJz2+|)O27BWAGNHZ%gZCNHlnR4!H%X`4|p=Io4#pS`qq_R_e<3_}HglxCm zcX(`NT4SAwBejZjpw~%zSb(YJw$UOQe;5#98Bx%)1{NDxFYCRnW5$fWqmZn>tc0On zkI79D>|#8$O$z@5pnznU( z`kHrVEmo#7|0F6Mr-Gh!HHTMvUak9nJ*}YDdW at OnDdnGMoCeGdTDShn^+5NpAId~j zhI5Xywr3)iAO~)v@`n?OY(13q>xNTKRDb~+wRJ!T1{dY$S1AmRDo0AB^`6A^?O9Uj zpH5TKG3r_BA*+ZP+I%+dLkC7~Ob6<9#pc{GWaQM2WU=9juj_;zpDw+pA64$nKAZSB z?T_ at 9*Z!3sNsF4+!NHGhxc84O8LQqK+hg(f=?^mOipG<$XSpPMLEwuyi=B%Ri|7?) z^5Ypv3_mlJX}@dmS9s)Me-k!c1P_Qvw!KoZ*$P#Owcg~lMY(fa7?Cn8yDhM3mwndyVk0hdPNqxh+;i zsjikxoG5>p>7$&39(zjlm^)Oq_<^y@;mJYgD|%Nr#qfjq{-A=X>mZ4bIKVxDM8|$4M3Z?OqU#fLsPKpE zpiLsF7eb+#yD^9GrmI+5SWY9RD9o*D at o3>dDPnt8)%0^Y%xHLyH}vFP<+Ydew{m(< zRckKS=b36;{ybVy^cVQvD_U){u)tMYx2&iYp3w`|fsAg}6-zr?-G z2M%e?N{f|dDevt)%`X6O-(1;}P9&r59M6_rT!&)sJ`PO at o%VxO+i}w1ICZjM{z%Sv zY{tA-owWV!VZLC&6t!8MUe^{@dr6&4?-Nx3_P5{|JHcE`48a#V at XWdg9=b1vKBk!} z=|{-KBr&wXi->vmT=((X2v?!37m`g^i~U($(fTapgsxs+q3|E&0!9Vj4{IWWmV)o4 zPwPr7rLb;ZDb295V}khBX`jDICdH8U*hf)Xp2En|hKXKf=g{;%6uAZ=O24Bxs2|#bSvh-nzGqzBbi+wmYc`C^@>^pne;NX at GxZEL}rS# zU{WKK&1lKF*aDz}?T#>y!qxG_k``3Bqdf9?etFetl3d at O$pK_ZG?MYs8P(+jBi{G1 z3_8Qpj)tIJvil3_kBHj(IT3eB8)P7bchSS5;auw#u(~Q;m>A^@;-3f7FYFhwjd1f- z<^QN*rY at 32gp1tA-*Hn(#*DIB077N!^p2`rlc#cb|I;eYqs7gV|FH_&f2 at M{f7|7w zXz69?@Lz_Zuf8OT^_fLoj@5Y6FKVOk+d~rZU|8=VG*p%s4DHG9Ap~h at 5&* zCaQr3ArVpG$G4SMGFIpX{QT%`_m5fc+3SMf0ue_>xa8QY4PwfH-ec+MQ!v_3IR1vBktJSfe?4u2B0IntdWqWSjaZgxyk^GE0NyjX#NJSE*8oxB? zwu7w~;LP%V?w=y(&lSf5=zl6L?e!h;pBlIQwc-fgspmD!x{I0>=uq@@%_}T}@S{V+RWINWN};?7 zd&H81JR+d%g3XpCx&Dnw5#UA{A7cuoJ;5QrfxPiTa}ydUJx4|^P|lXHutD$)6-P3@ z%qlFSv$eqkM)n4MKo;@6_#gRm>1CF&8dPCysi;?GN-&a(vtgxvClnHO_PWF at -{!z` z3t^MwPV!)|$x!HBhI4{l at Rn63CBjg*JLuxU-6HNN#Hs2-f zm6N8JTmwG}e1PATOTH{o*@WE`!cQQ)#ekP4J&&28yoPz}`)?wLVB at Q9_($aa(Elr% z*uO-h|Kb__UvB?;rNN)h0VzThkG`})f>s^mh{*#_&1Ehb9Y2CvP5>QmXy2V=d<<)( zksv*69h~9kq&*|bsVlPOKG!wpJL^8%xA{a;Gypzv=!yj4H0FxfL1jV7IK~zt5YRQH zaxImbklr`<9rhcNtA2`V#%+pNkkNt`Pi>pcAFik_`6b(GXC!@|ZR za2sRz_m|XSx}#o_(w%gR{G8wlphr5rqiIdx#!|t#1M$@G>%1j{$8Sf7?yp*5P#`2} zNleCAmrKYcTE}m+pORjL6rG|u-!`IIr9XX=MN;$j?#udO at G4zWm6=m{l(K?B5>3f) z-${E_h=(opC_ZyVpKT4`Z{tTs%VJI8x>V3qNH5=@{V=U;GJ9AJM!CKUq?H+}Xvq}u z#E-0KlF=tEg+=*!htZ$-r0K?Tu?D{NAJ#{u-Y>LrhHyGT0X13#)u;QSAFh$MO_C|u zisQ{t?#1pnJic`Aj7c5J%l0)6 at R}(`0(r^It~Y?r7UyDR;d+HCDb zXj}_8t9vTtp172rt_li2p at lvws-BDz{hJOS37_}he0K%Bucv!?I1ZMBMZPdXh~Mjx zm;?F=RrU~_1P{j2kMV|ab^Aw{R5JI41G*rLhqSjl%Uy!`pjq7G%bJpXrA$TcZ6kT_ z at grSNS`pw+G$Y|p+!5qXxFR8^PqC?US!f9 at f|STc1HSE}-BU#lPd74@=dNN`=Ip9Y zunttGSOzJW=Dj#ZQcT~_9_8$6=9u=^rC0~4m}b4i0l%HpBDhcAFc6x5ith8?Mwj5nSUE^}_M*gJTQ@=AYvGg7?`7xH$uAof82wiN-ykZi0bkRrHxt zwcN?nXCHpsAvG at bzHo*Cgz+8WnWYp4p0V9>df at fVQv6@`h#-S z;S1#YR)#loX70r7jL($;bNba!Rl8_d2(f$yr1fDkM5mtJ$G@=NZsl{UB7<}#1a$k& zq7jgvSD_{%B1mt*@WsUr0l;C1^E at uxy@UrXDtl4OOQ21Efti$o->x(Hz` z$_rxOCEKR6INP~ZGIS|LLgxIt2#}e6#85sgC+NEMBo25dUqKPHcbfKyp`y3?$u at Z?(mY zp7+E1CTyT;I?PK_#d*{x0av(1xPCQjJ*h$#`HByzf^%(WqR-;s{NIx(te&`s53e|n)-*X46-geny zW5?!m at Q0DiAQgQo>@QlhQfVnVS`7C zww_yIgNKZn&h%I3a!EjYL4tcj!dV}Tu34^GP*YF}X~$qwlv83^SW{$K!;H3BbXiCW zS(bUna0*G5QB-s6Q*IfSNym6ou34CjG`h;o1y+2+Zdu2KQ@&Yn2}&{Qb3;E82?Pz2p;%-%I4^^$x5NgXV-d|)F*WUxI~a>Q?tZ4vT9BrJPDSH8~{ zAiHrMk?t1jNLxwx>&$4$4ZC8yer_=EB at 5tRAq_d&xhP{<@;;)#G&WB8cKBoH at HrxP z4Thsx9=7HU at GH)R=(t1qYTsAAmebPy#~FghBI0oY_ at B!W_0nT)o at 5bn~*AXRLxjV&{h1HgmhOL!W+jtRZE)*g17` zqFKI2H8b`uV^Fi#A2*P~NQX^@c8oLjZsk-P&Va@{yI}*v2n+6jxb~SAh+(wDKG}#o zDDxS`u$o|`5ofo$)}#KJ8MNK4ryXZZ5mdh-e at SGvdJgC_=+%DD_o%Y9FiDv|Ar;lRFrhKc4M#KWf_z2QZFFghZ(0<~n7{_iQyo at yp^?Vu7{(Y#! zRMnivT+Pj&Z-1`yREi)#iyTak8XhiM+&2(MqEe68bqu8*E~7J}LIg8=_SAGR_Dr`t&8 at Ii$BrwEVU z&Aj{vc$pN at nz{$-Se(O1oYxYQ_hG{;k}$(N;SMmHY35VdZacp6>%UEDjF+WQViSUa zy$FGUiT}@|yP~PP$3GF?+3o*_-N$cjLO8n2;hrYgzUm0YZ89k14H?R|+}3(cNg})* z+moJXJAUCr#l(L_tW608jv*_Kfk7%Nj^TIHm*e!$@}!KB_Rlu$wvVS(po1otGGO;f z!q2&?*Z2N)dW+(#`>(S2gxBSgoQFd9CRFzuRQEU~@T?G1F6MgF)`HzoeiKCT%NEHL zw(2`vwktrUlc#D5otpPbJm-irvMGNl5UrALhIHC(BiseLiUIw4>YP5}&9z$u2+1pi zwl7w2f<`=D9ov+>BnX74!T|~^zoDbJ*ii^ZEQv)(DMzF67j(lZ6cEQXP1{17W-bAM zrphvC#AD~Qz+pZih<$HfA&mWR1;mNBJq1Ci`)mco at waaUpJ4l_d_pMu$-EzIz#3J_B9KP5^n*@jZ!{DRjU-ep-Tkl zJ0s_I5j^gGh(LY5KIHwYf}PM?W#v`U-uR^+^qt}JKDe91hoA^lmse6?G;bi at K1G3W z+%4Pt6K|CYX+YXi6`JtOIR{+P at dIDPock*T5SK3yet)WkM z`#=P;@O>}<2V7shBaB^NQ6s*N9*p4zP7=T at GB~1GM|3fPRxvPry!xp7uLX`FF5K1xq&6l2M*Q| zJudAGK&pbPC>QV9N6}6iYk#r?mv$^u0qbuOY_t4mUT*D3rUk8i=**{#p-u6vlt3)& zZMdg>#zZsXa8S~pI!qBo=+s`ipJHZZIz01VmNcNkK|HvAusxpwPbui2O2_HCC|0$!e| z^5X8N^~L4Y+e|tWh-eBcQGWGqE0;{- at v@!1t(`!|&F3pFZcSK+y?~a|Q!aq(c=N9- zsaCb-V)ta{ne!8Hx5534AjGp=&EN%m_tV654VwwZZ|tq9;|pmbmd9&!U(N at IJ;(8d zU^JFndVJ2FYn=xgLaqb_*7MLFWKBlaL>_2bgF?VK1eJ&zgMvJC0K>5V5V_lFw8n__i})*VT*7rWig(;C>Z;`rlCH95;_Yv< zCibLtii3z5df6Wu$jLdGw<)?Qby$Y2Xxyn~pDlb?#LZ&;mFh*r(wMBF^3c@|Aq=_l z3BI>WFh(`JrPwl9(>3e!n!^n*U($_{Ekau+ at WXn|&;&0oQ)Qp!Mhph+QCp^j++o9B z_$qike{f*lI75|?WDqqqM)q6!Bs2ZgOd>5r|gVIP0IB8CA5aJ@&R<4 znuyR^(CsPF!>-d|!5w_|YqLC;*Kom_1E^;Q87-DL(#VfQj=o0TLqFfaeLHrWQML1z zD%~lS*97CtI_4#Y-S5lLaPC<9RoxLP(_zn%bzX*iVFVDyuOmkSD>gIbXT%w9&m#Tp zmq|Zd7TjKkm;o~vHs!7QS`2fWTsicT@}wt at JjrHU!-MKS9m24CezAOmg?VFMTvLvl z#Z6j7L6Wfv9fkSbz=#U{Eaa$)9B-ehT|PPZh*}>Se2`%7GUo8pakE;_aw`du!1Il? zCZn!pC~1_;@esS36Gd9X(L&>5%w%`mb~C9c>KD>e=5~p5&J$!o2kpThyxt`!BJ2n8 zxEyQzAeYD{=O&Va=?@`ndTR{@zlLh$fz at C6KN04mlv!Pc0>H?@#;~gYrs+%nqK)wz z5k$$B4T`67!1wZFGGRs9HIXbc&*u7(ar>ad|6Tr6t5SV()_}86*Qtrb^o?2HMBWsRd5T`SaF%vJ~Jvz5tP*Y&2_-u~3`AB{Z8tpCBkCq at w&TK_X_p9oLYe_}| zjy0BM5nPZPiDD*7NzQGH at CmHUGLo7>acT`yAVi{yr`QM0cS(dg1k7PecS+>rjtV3% z0Q1scWZiZ)qD%wq5Wjk1MXt3S`@fqg{N81_pYoO0mus<}6ty7+Lepg z9C$4>S6OT6^Q|3Ar6Gp$V8MWzK+gIQt!6`gL5F(9c3$7*_q1!-M)uUsCdA{}lUGHl zkV#@~w>eCo1a;}y=URWW0rgI9f`$JgtA$bsl$WQ};*|Nf;5M?Wom6>m zsTP<%ZM#W|qQnXc-5mTx3kud6A)I(CHvwj1&a;n2>M<956={rE4S(u>lIIydUNh_8 zW!4`i1?CtAGvC<888eI5R8bDFv0>7Kx*Y27g$^0S_z*JrOm6k7*)*w*S# zRwZo*bK0!MOI<>z#Cgo5=`%nU4xuQ%HP|A%Q)6_4A9xAR}iMayu at bWu|AkAm7KE z6g_iB1f<%X>>3BQ at fVDKy^SnSGn><^orL^#ilG$$-R*)-KQB0dha!;+op(cv-e)^x zNGEX+vR4q`moHH&Rd>+47mF^M?f&_&10Zf%$V~NRv3Q2|T7W6U`DMNrLQFpgk9S+& z8(Gyk2o&Ac)Z&1u#5U*3)$KLkX&Ll_b=UEQCkY%dJ~$d*|2*;G{8mj>0ZuzuZ)(qE zkZ1ZM%@rSyu0rQa?V5 at q-pIpzMl^5DYFkt|GpsKATN)E>wc`Vxhm!hg7h2Q@ z=Im9cnmi1W3Uy%N$ps-Sbg2|AJZ-9Z$fHBc9AV1>ndNzFN3TT9rr$gbq~5J^P-mq9 z#P7XF;xHaHONE`oqi^rtZl<<`hwcc=3}mJGq*x4cHoP zO4O at 8N4Y}BVD=5>Vies-l at h!UZ!Hg#bAL}eUak-Swv||%(8*;kut{qcH_Gex>hD(m z=7To?To{DE4rzq0#;a!HT at n{`dRhczK+{Q>L5XDJLPIOA63f7(N1im;=l;f<`n_Ir zlHpp$u4|9*L>4KbIdsCS)!*!K#?%w;Ls~lt#cQKmQ6K7?fWhjr){x|zsnjT`j0M!o7<6fA4>W~W#s1-;2a`*wqBFnlZ2xGTZ$dRLohNDTolvHPc+&mgn} zNtn<&3YIu3>F9PUd0qlz4PY`<>Uc;`y3cHiCLT9eb%Km7Tqs5|DIq|j*GbWr6~fsH zvO;sPGQLu9Uz_yThA%-`H?B*cxnEZh8`N?JG)5NV3hRU*rLzWw at K-WvjDpnfl+FiLwi5ej?`?X3~xCt$LmIm zW__sx1nkfSp5SRoI;^@yAD%DNi_rd8xN+`Zp)Og>2BhDteF?nukX<&9YD~@Qk?_WYg_< zhA^x{-^fO_YmY!PP~n!FJWiUSUd?!E{&hyxWseUCzfaJu?@#+jYR=9PitldN;X=$p z7)iw7;=gu=Rw~w^yPlXc1aH*Ahtd?ECewg0zJg at -iZ=$DO!>+cF*4MGiTIatms^Z< zEFYvP5~5xfzcQ`4G(0{6sFNf88>pu1rD~pWEChDYC;k?|WZE at V9q&H`qcdsRq>Rr( zUww|Y^s2B!W^)aZFZ3+=;#Bdb-pc-aXgc|`V!WQd;wRG+SXUA zBxhJm^hzTf-bdS*dl333;?)&xmo#o-MuGPXkN3Of?QEOY;tf;~HeN56qbe04>;h_7 zHV&Rn##d-I(q`oAmFp<|VWNHoNave7#ASa%!DURBQ=M>By&ILwUVRawCz(Z)wu_g{ z^dmD#eN=jj@%dh%saIgfq5@>THjaIhcIpP1ZLJ=I06q3laa$(I;~2#T*)CHtYZxyB zi3h~Gd}IQ6uI5z@)6GS(50ivbD4|-i1@=~IxC&9DFH6})H)=1jgS7EeCIP-&=e0?F z#y4`MU#~}=1v at 10#2p0Eqok_m??>8TKM)C7$^w_i;?X^&!1%YNjXtNG44sdT!HJLW zqY_YFugXF^BlYz3v~O3Al|Iz8wTrBg`!h2LsCy$Z$-hj+B`U{p^%N>8sIE!_dD&mu zd-s!nHy*toDq4!pL`g{N)(E1xBR`@jZ^HiL&rG+^>yZe5EybtB at A97rNfwnqpo>N+ z=&Ivg8vcz~nlBnJGD!$5 at I}43*clHd at nJ(>vTuY>f`tgx;ihidpif9bzJqyFjlv3M zVBdLtV_lP3^R>gN9~{HzrH;4cNC;hF%5O^WqlG>$O+Iw!B4|?T&{1y&Zx^)44VoXW zpBf}THqZ2&tt&Fprlg{}C at v zS77SN&T(ee9WK^U>b`ID5d0E~Tps_5s;}0PS7PzKE7Z7W!uXDHhy*sV%j4!uuHE{u znvyEM|6|UUHh1who={%A0>Iek?qWMSmj+_GALBXSJWui=rzR=kR}-52;dGs3kqw={ zsy(x=LBEPE*YK;N+gy&1M?$XlBEGF-oITfoGb>@d^w4P_TPkfqvQC(nNI}|d-Gj0f z33g7czSD#;_u||j>rb3##bWJ)Pto+EWKAHSkJ_FPSr>VsGF6Y+WL;3hsMp^y)+E$X zDyq_Ed=jEDCLE=4?GaA*DZ1|&#o5ROY;7^rST=398 z8|BKgkl4qUno2XncQ0C$LykNqTDRbDuMo?XiguGvnd^yl78wLAn9X!KQ*Ebm&QFzQ zT=>EMZ9ip?)o6FJTg)rR3(J?S$_j7lKHO%j_x+6;5ie=BwWQCTb`A9zXnd#9$&N91 zkas7Buc$GQNvH5Pl5Gq!y;(Vh$EDoC;(Pbdk=kT)7E(rryO*c6HZQ-AQ?r{I1Vh*z4zA70shLyyXtl0MHJl(}ywn6(D?Oj4@ z;vUne_?NQOD5S6kCXB$N(z5qEBOP^b4D~=rd;*~$@<1tRn=B^+n- at vr0K-yjV-G3r zJ1`^{sBN3#y=pOtOzmcoYEz>0tQ%%L&Ij;k^8}4^N9YSzsW4aMl=8}RoU|S z#G^~gYQ+ at 6prmy?3wCT=YJWc)m60An$WYD2esrk?3?agd#3+iVtSEz`zYlr3nc#kf zxy1fq1Qq-GEhr`*b;KjF9EU)(Zh4wc+Z$`W zPx`izOL9A_rHSTo#fQHsZAL4n0kh`Zq2Gz?un z^5Ov6CsJgrK<++z-1CGHp?pX`v=nvHW=(knBTBN(MW(Z?2(%bg9Vkrs(;?ildpS4& z?tJ8Y3s+m)5FA32 at 28!3W2QuV=oeE9$YTTM3z;j#NudL_Qy6E36 at gks5HCi|cuKzm zy}c$gLMy%U_`Z>1rt}zxolH^-Vs=zAQ3WHN%PEEqP()v88_=Co;!38+)t{uJeaJD& znAk|Ovib~T);`9AMPM6X&L(qc+8jH^gPm_1;NBcL)`6vO8_Q=ju?%ld_G`4+3(}hbZqU91 zjHwR*yZVf)KH?s>f^=$t8=N;AK_+&Bq4|4GQyGoct_NN(s(rvEx#@JX#VCDW|Za(%E4QH-amj# z43;6R29=F00KOWY3&)bt$L-$V4qyRaCA`XqA{Zho&nhDzz*qHi?wAT1joo|sU`|nd zI#*B}ujb(Z+Q9E;+XHRD*U#s~F%?{En|DRmtg$(qQ=4}K*TS(mTwI%Xao5x_7MyIG zcQx1CF&12Hn|FEF%&|tCRhxG`*Y9JExI8xR(yr-a+VS~ZLGhiMhaIt-TtU&D>WB6t zhJXS6tum1RXdqy~Sg;rbJ1PMP))6cP$&8uazqC92ac+{zpsx9aUbRZi%EsYolBw zPrrH=+(Vq<_|@Eu;d{9Vb%&Znu%c~+`rq+3Eq=q`X`2f1;I{Tf&xi5udXLJ_9Bc#Y zzCHdw9gD~hek&tWw=4 ztd0z1OHNa%jsh0tm`U;7$R<gZl$oQm7$*K6$+tuqND)(M zr{hj?9T~bYy(ENmPX6_P=n8F5BRD5?!!#7tTKYaQ)AoH!T>VI^Tcj)TF at 4iEa!V|k z+I#VE65t2uiZ4{TuGCKVKXW`XdL`{j7FM{fa!!Lit2z>UrSgr5oEUZh_(sf7C%4p3 zm^=92 at ouII4rQg&tjphFO{G`mDioT^q*$-J9`Si0_!fRwGBU|d$6dF(!|2KGoi3zo zY|@^ry_C2EycP7$_ES4YP^a at qv`*-k%uH;SaNjB0!29z2mfJzJoOmlCd?DqO6-G)- zNfsYZOO~KXQxUI9SCPO?-;HXZ89=Nj8$cD37e?%p{Y3N2erJ2Ye^EbUxbt0tx|338 zcyV7MyvweHKANihK4F}{F}a(kc66ikmfo26Iw_Jze^jI-lOD`Pq|)!ipO{v8Pv_X3 z*HXD@^W$7>t(wyes>A!EklWjM> zAa;L4tRU!6tZ>(}T5_2(=$4y8 at mR{L at Mz7#+U`9D>z0aF>TtlX)c;ASaN1rVdHS;k5>fxUOus`=sl)c4NO!(r=QefkAw#=XK}#5f|&kCNTL5v z(eeLo8O`wx&^TTmpUY*uhk_8y4#ZA97FT@?B(b8NOqo>7$)${Ngd-Crr9{Jc3`9pq z|K_ at j{gfz!t}R*rb3 at O*{-?kFw%wCmedEt5|Jg1TocX7ZfQ@(1+w9BssqmZob)WB* zu}Tq4$U^^=8!6_lb2Q0bbWp%{GRewe(WUF|mu3t1M$3y{v1>SeG)zZ>X2bSx)JWv$LcKB;}L z6OBlLoF%Ml3uW!jcs_}JrxV3U|D0B=YfBicYx7yH&LVsbA2yEiTQH8gTMVmyVE8md zWHvh at HnEvB)*b%s%r~DL-SS&ED~)}0t7afW4qK#5u4|+=y8 at QcXhH3*ot5}Lo0Zx= z*K`KZKDPp)(L9T;w@|m?7Uo1Sl82oEYiFdO at z&}DBC>-Om%cZ%OLpIJdKAIgx)OV5 z$e{FA*{TBAlcRu5Y^_Dto8P6lFEniz`NW>h(3{*PzW*_ui9lkqLK~3MCBH8*y^KI& zwL%{d(IvfKHq9SNlk*n=*}Wb(p7RGwc-BGHC#}n9A9GqdvMNUjp~%8X^%={(3|N($ zk0m_3Rd=gcXxMpLePV|YjAfsxa+~)?cgrK3Ax{2HFN9!Q at 3hn9{Q!9x~liu(!KXu z=o_>|M0V#|B at 7uWT9k)U=jT;Kzgp8SR<-M;Pf3-i4uBq1TDVbCVrL%hslD14Bb?U5=)zUZ+5FOG9%-!^iQ~*0ebA1<^|EmX3ORO%UWQX at 2rCZa*U8Eus?M zuxI0*a^8g>SGn{7Qrf5zV~8n()7I+m>%~B-j0b0ibLJzMEQu at c8*;9{4>42|4LNXow++gV9N1}MUu z@&yFYf8SdsNeF5Y$CsjeR2PsbW5cN#pGB_9hs{`T7Kt+4rj3dLWpqKM?gITQ?^}T{B0Ga1q*2*`-o&l*4AT%I_tpaFjBr4(O|3i_GmaxQu(#7*P`PSo`TPd*SjKk_YoY+ikCE zXpo?RGBt%)INMuVxdHXfe`lBlyEsKea%Cb}A;rc7Fk(u$a1gq?s$8qYIGAe=e`Jk0r zQASb)+TuHni|Z5=8jeLTbf6E$w6San)m9UM5AJEdbTQMAof89&47SR at oP-R+<$F=8 z5l2`g%6arFy|8>Qe1~znMI{EH8X1NkPy4`or*HlYUwxy?*IHE1l}%Mc{dR4BQUUK> zb;TW3W at cH<76Nf_$9yeOlkctLN@&KcKAJ%7NQm#5hABnrVGl0AfkV5g(uZKfB3D!+ zUJ(qH at BI`;Z9A&g4g7Vd!b`yXB4<^=U)l$SasnUT}15v)&kl_kn>c|_UOmvV*x(Q2z+3{Jf$gB at Oyro8>vc8nBNM)!B2MSIACgs6+qaSk2FbKX4tr>*HPxIs$j}-Lb05MiMl4FW zKARQL(jOMl{$1V0-tD}1nCDt2=}?V6O)Vv1WrNvUqE&J9nj`Wc+a`xa>Q_g(D6Daj zXVPmuDy{62V^4R5)^C%isXPg^xrifR^Xb1x<#Oi9_@{9bgq%40$22}{`na{?&F1ng z4^lE{sU;{Bvb|gU?nYENv`F%fLuzc(2z^M at g8}u}GLq3lo9BFj)+T=@_ez(ZyhwhzC0m55FanPiu at CZWf)~vmMw1$;PfHmr zSGjbPO5QHH_o)F$w3l}49d6 at Pv|`TG7?UXMh?O){?n~^xAMuNV%^^Ch#Eb4=I^{rYyiv=~c)^r7YWogZPz;`W=^fD!LNLT(#eY|MR|t9dX-LYVckmpE)L{b;ExoqEmqPJ+6k?9_nzy2Nn71s9?D?oun zqQ2KNj3ckG6eoE^t4-)EW|uCbJT(uqaE)b99-_t7Rc)#8HMKQ4jmX?ATAnxjE32KE zf2*3 at Xqt>5bQ)|+(beuK%dQVBMIqd7$?nV^B}gskD?>^eZ(#52akWH25uw#>{$1D9 zSQ%nZ%%H7d-lLuTv at mCCtQ|NyXWH`9PEWJeF#@^MRX3+;zq5>M@$;c^Ci5+LYq6WJ z;?Zm3tt_JI{DUw*Jf7(}es9$MPT<41cGW%5Kkyx0>Tfy8_{h!s)5(EAZ;bn$WB~oD zcfU7q*PC_KyYdFza?AbXm)t>un=5Dh#7H9mqBGj8V3IY?4zy$kW2aXF7In&+r%bXY z*kh>s*>kAJG0hN~51X+Yu$v at wjvKHWC3K^8%>b_HnCTq=gmfzT=+e~E*wS1}Qh69~ zKspQnNf);fU?tlOFs-!Eom3lXiY?8y4pAV-J0*}-&uvMJ6|0F0WR2k6rAYQ8jG2R9{HihxG|a5~JUeB*BPVDfaZ z4r;T(j9b_dVtO$^yUAe0jSI|{Zm&~k*%5!_mrkVPWYGaUvP#$2akA`)JMu~w(7Cqg zh&kc~Zv&niw!m&=;J*O02Ep-rbnp-$p+Ruc?bk?y;OIRsST>zjN2yV8;y-oEB4D;b z5PVMzwoO0LooVR)X at 07b7Z`u$`1nsG6 at Kw^F_inXCiuugb9rS|vmnR$Kweu@`wmF9 z%N;Wz5>OUoXeHFO>S6p`4-U$$bj#4JueYnv-P94!JECG9$tJY7lg8DqD-{sPwN&|~ zuc}x~%>Jjk=RF&BmJlV&hg_(W`B$~|E$sWI1%Z`!T% z2pOD}-VA_FZ)OVpFWwc)Uds^6BFka7c*`WqrKUA at D}r`FW3GKxgMwZeK%NN<05hHF zYU#|h8<=#=xg{N$fm at C+!E)fzbj@@ypqeQ|zplZ+R at b~^(yi69_J|P75B3AMre6Sv z0IT}kdfd8B4O=!H6K>5%xZv9KO+dT;b;Fiz2iUFsh!otD{tkH7H*)apzsCfJrf2Ap zHg!+kHyjy&PN#0zhK*iO0ddHVR~Zyd%4ZVre% zj{LC=ztGihT_Nvb?Fm2=BuvV`=BOptTdKX at K=j)_d~Si8y+{_vLI}Fn-yc+M3#UF1JYiq19RDy(~nd+P>X=XBgJgLIH z&Gt zPmM5@(|oe8EB)mK4G#!9Gp;G`6oA%eJDv5zUxC&a!kq=fKY-$$^}@;r4a2XU1=lRD zA;aNsfiqJ^)39M2%-PjCCAn_VgK)nJ<_w>t;h0BOLvmNW18RQdRXGFt zJ2fGL`XrFtf#sW6kJf=5FykV|BXpRN%BWJBw?RIZkWK3>3H1`!ycNIIFBRHVT8Q>ANGtZjqZfJ?6XM6_GzWv)%`h5gwpD^e z;-eUwGXj#7CVr{IZ;y7($%pg{m~AnSl5~!TppAgkW4k<-LK22~nMb!f*FtuqTodr0 z&oiOPVq6RGpD#cuclr2eQFn#Rt{*!XK{BzCj|M&B2hvnQ8nnc#U<}$}R{k^44tcOb z?3m}IYmd6WS}d(cCB$#+DHUJ&oPCUhVpQEsuog_>U4cIvbyt&r0x}=*QHovc9CRH6 z-gV#o4#z5d2#gb5+?D}pFtLoC^PEAjZQso0D#Ao_ld5G7oQCY#Zs z?N}bgX#2=ZywL$jeZ>Zd`dWm0=$!F3o6y- zbJB_R9(idsx&pnLb<>W%cdoc14Zn!SqCFChF=0a}*@B8Mhk$k(U_!g44%%A}okH+h-LK2 at mtAwb_Rv4_{q| zln5Rq_z&z at 9^)vU*@vO?f6mevL_aF>hi2 at N{X%5qC1d9jM9=m)Ers{3XT(*0{l_2T zf}L}a<$;BdQrXTiC^?Z0?B4X~HD<^Zzw4g5vkyv6WgBzfILnJ?v?bW|S7Np_9CO61 z4z>0y>AnCF4WA$CX0z8roUp-nH8ZLHB;F}HhJw|Mmd0b-04<)`^XvYgv26-1wAu5s z{*m}D%^IWp<;@W2_%6j7;r!**5P4$nE}g%E7lLr8{B^lDmp8g60xp%1Yi#?U)`oli z0$Y%Ey(C at f}H)(qA;(PY+f zQF_yc5Vt{eXq<1W{ZNA{&@u2s$R!BAunY)8C>j{doGOZ- at qWZXcxbM$Bv>shDFPjF ze8<9k*3o|cK^^D|1PC%G#wgL6Os0tmhw1N-+AvwzHY^&VHQ7uv6CTs5ke)DG*e9$q zB3{u<)4lJeWg+5Wy0EBNP_XgnRz$pV at Pwdfbat0mbZ!?W^4{roAC}@JPtr5;`_}mV*?~_2{@nK52>Ew~m9D(DhghDBVAF z?DiDJ(n8wd!N}c;72LO|rX3++s;4hFrfO95$EMbqZ!ql9EFR^nLd+vj<(8lQ8gfGbr6a69xIVc}F z4I|$%+X$z=J8)!5t~t#qubHw&HY}RFTfkT{gpy=-p?H~Hvz at X&6J8E(SvL^5_YIIv z#h^Tyk+QBu`T_ at nrb1!gIas)OfBKH^i5^?R!f~Jxd1Pe}5swO*x%k|(^dMdlxHopZrFJwoCi+MI(C{#kcR z;4uU^jo&VWLygGi%@?j2nj?}gLemmAcK8(pBAXd9pCd~cdiBACowI(1dErJLMl(SV zf(;GSWgT8cG1xW1KPN&P3NRgiNE>u9<}x_7{}mJPZW?xjANz+SQnfdQb>o>m_O1uT zJdkXVclU%BH8Z&pzRYTApd~hsRS1HZndB-kRZ_yk2%(0z z`1oRF9q?r!w(kesBHI2`eqsS1G9r7qsHqi(1Uuef?i80wY6tZ1Ea^ht2kt1#{GUF@ zF|0ffOfnX|XcJSj-_z1iN_B+_0rqsM){4J;bulW&v(X-!wT6DxI5x0eumUDKVQ{U5 zpw4PI8mKN5E2iGK0Ml>SRZSeGx?VgLGo(=9X4=8%OEH}+!>?TH)h3!xS~_`w1WQ)C z$o5TS5uKMOMZ)j?4czaBIvIZvIA1tSdioeS-{8bkf}tF4@%p9y39cR1hfIGmHH-wq zx4k+4a{P=m>H5ccdE56@;BVhA!%tcemL={_?Mu9`3sfs{oj|Lf50vtk1cCft`V^eA7x2>)LW-TwcKRT6HDWKjyBb{ zamJ^3VQz}v{)8S^I#3);LMI4q5lDu+A-7*`lHg_EAgLYA&Rd_FlG9?Qbyb226AibVFdZ^s09-%weZ5e-IsTKl{wekUS`7i-45=9D-enTdmP{gzmgM z<`8ezUiCf0SZ}26oI4??8_R%#{&xbA?=EPN9w;)4kHr2+f*Y(Cc!)HN at aT(ch%)OA z%dPAv+&5ASLBK6K1S3S5El6*VBUT!Q)G9z?Pj%EBs^Cf-ra)g at B;oPk&M08#r|v_t z-6fB at 2qG5r#r^xXFVCXf-|y-!IiavCsek=W%WBs+8mwPW;{&+tERMV99yv6#^E*w? zBaO-kKxYcrJnTq8Ix)D(u_R-roNM{SAX6cAC3BG)wCj?WYVVh#f@{t>jt0-c{z(Uo z2VOKp4F|5W9?*djoJG=W#W^gN)8&Kv7>GUZk^bV-t2=()V{k5}IV6XQ6vfC(PB*`c z3fr>1?OGMUbH(g4+P{*5eQpaFKsJ(!EG<@amBaVqjJgVH^`-~*mn}t07OIs;HLP+>el{<*=gSHKd67JE z{=ki7&4(>Lbj=fhxA49FrAsc!3R)Kz&c?ZyGj`5P1mPRYMb1kZqJC^miDq7@?1L~& zf*H7W*^Gre(z!8|D)PLBY^lbISX0P}3~To|X_3BIYi_-TXjKSn*Yv%UI?GJ~YuB>5 zbh_ol3R_+MTZ|TCiP+0m?{MHvBbn!UH_;0h<6So&)~@xYt-)9+l29e)sb6yK^6lW# zFxp!0imgf=)ps1~5_IKCinzu?*}=D!?m6r2pbGBOuxYJqpdNk5(Fhy(i84)=*$$*p z7JoG+HXkYjtwK60v^Jg=m~3{Z8~y3%_~-v!v1}H3dwvq|p#hAQfu`uE=FGSN~%?>gk at L z399vruf4Q{*-@~gx7`@(Q_Wt7>#iD^zOl0m0z(r?cjlO2d`NNJ>IAR+ at fO^vKR+TV zS=9CY5kRZnbedY~itVD_MzlLjw$vmj;6aoxtW5J+F^D>bL84N9 z#zQ|M;+blHQ at xl+^I4PX{;R*bD}<{@CWd+^jfv&Z at oyZ;oXdl#ly<&SHvevu!qu5|@s1CtHe|FTskPEM zPkJSOYHkZ}zE|RuyP|^%LV_Lre6yjs(?oR(HB$G{rSYhZGrLWCCFG-Z)~sgQRC{jw z3|l1bF$3EZxt2G=E}g2i at WyCFEx=JT14g+H!O4;h>q%_0WjCjqmMVC%zZa%!jwbJA zM9mklnQy7Qu^w+Lr`SxJ=T_=id8=1uNX)R7rbchf5YNEIzn(GH+_l92+SC&{F+R5w zU|nXYQIhB#-Q`Li=yq9p!+S35L^UYurx!y1#{9LfZ2Vr%j6f{ZWx1`G6_qhVd;UKc z7l2}<*k`pFl3#|vGHJe!)s)qdE_8Qiw@ z`?ceqFIz-gSoz^=hvtLhz2Nk02A)l?p%rJJic!hy$o*?}pJ=bj1Kxx at XP-u|&I9u zZ1OXxd|tV9S9D|-D&frvHnhSVyP0mN{CF*a?@eFyr?}0YQW%H`<60a``jjkU3}f*` zOzfsN)#(oRGsO1;3rUIv75}2q#$i-*)EBe?`nHO%Yha)1lIO~YO6Y0eOa&U?jUtK@ za2W?7 at en*8SV6vSnGp}wj$(nPeK6ZEq^@}4)xF+NZLP8_qw_at3sHaYdA|oY+c_0J zo5qs;cx~Wkr&a35;T+Ijd>W#@q_hvW=zt>nhw|T}EvlajwIKADFUhd~M at qH-Gur+) zrCJSrcT8RMPo+##So{8=OzujYsE!}g9!^s|0y5IKG3XjJNNkAV;t8&Fb zNBO)LqSsosd(9g(_IRjpz*e`@t9{A!fJcb zju=>~!+=0%xd3HEgZ7vO at w|ZgO^3eDkba}RBIivf>VQZ*2^Y?IS^WDSk?B}#SKyfQ zD3zuVGgDjty1zINS-N8j%uFfAkTm1#F?6yM!CjKh-w|lDZs&=hAE}vg8 zqv2n`@!dl%qIIeV+e4Y0cwC_ohfrU zlRxi37&VcCpS>5^tA8q=fgVJD?WM+TKntBOWK~~hA3Ihv0lfwDt z1QI0=P!gb=px45nAiE#W&-P7l at p@uv(H1$>N#(<|fGB7m7S`NVkbf}r)SKn{FxyN~ z9LjLL!)}m?ln4mSB@>n`HpbfjxV8TCFUjZwrj&41{CLe@!ibW=R)NhtnJ}4DZ91%^ zI5|FC(NIl&!BsH at z`Sm{tsuuweulwOBbUwE+BboIJ|9!bAcXIwd1bm(7vax(Rkb3% zRd+6=u%?-!fbh;WTpj$}B--;pY~GTE{kvt_HT#H;+xA4$;x4Mrn+jBd^FibK$oSvE zNJ)SdlKCGnGQ#~|HHZAKdQ%#P?wcCuLOkhA>zbIG2(l?Ow!P+E*sUlbzr>^L1@=}N zL(_OMU<9KfusHhHFU3cV^&fbodU$lu(2LeD%E(=-zai=U3dNB^&zIXm-rCjGBA;(Z z-d|Q#5yS?{$q!xhM>?Yg$fv%~T4i`65*~|%Nz(We9utTxHuUQ(G>qHW>6mS;Hca^x znvTE;!lpDuXpV}b*vCpU0B{PBY)0hloLTh8;kU-Mb5I~T+4cfbt!HflZJVxJ*>{Cb z-q&3ED3BybJ||gg+(Bq|mwLPMrfkUfqw>YB5d|$#Car~12Rq{`()8%?ZfbNottRQS z?mublfn-e1M~Ibb!Ck3*fQiGu3qQ!2_JVCzySTn4QNC^)6saj4p~)C+;o>X#ho|w4 zqTTHGFR6;mxeL>jcLIdU`ro!6IPntGT41=%?%WaR&W;g0*|W>X#oApB?5{S*Jnt*i zI((E(Xw&Edf$@LDE%n2~!p+j%UCPwa*1`9Ga!dK at Xsi-M2IIk=e1SH?RYk|Z zz)>OKvU4mMb^Xc8j;wA)h3 at DQrYaptKn%MD>Ag|hY_ZL*JG0a8X|q!_zsfH=+bMJG zY`4w1cI^CEFW-IMPWhHZgZ3ua_uTuO|2N-1qWqsfgyv`Xi#InhC^Zz^kn6JsWaK*? zD(4lRR<1kVBdl`|po#ngYb;dMkaW~+uqPWnJ(YvVc6@@}#_CM(U>RgYKJ)QQOynU3 z5#cxkJ9&zQ5t+5`cSGE(W;pf(efW>#RqTbSa-4`vV{LpZ;o^q8SCnv)DQAXDiy(PZ zyoXK1uB=_vwV{u?L8IemY*LFLV^gvRIK=m?Sq5U0PnG at e57LN{nIc-eQvpi*@DH?z z(pe&!yrUmkgRaN3I7+O+MJ~y&^5N=J#`L*XpL+Yq4?Kw0S+oDeIHk2O_~89tj8i8# zK?6V$-aBdN_59;}t`L=m3H!pG-JDBr=QtV)Hg9Kkw#;~{g+_ at bA@qb29vbz(PRho{ z4E(%n#AgX3-po9O6-|BH7k5N1ass`~?~`~oh(zQ2)oq2lcs5+DAygn58}0ixpAB)? zrc-wGrh-?ot0zhSaciE1L&t};I8ML8d at W<0)yKC%(=Hpjy+-S~wL?XT#iwbhzS-Ve z|G}rlbSHm!=FX>Yp`T?9W4m at dEAzcHTNd8d852bKv8a#K{-;vfyfz|tZSTLlQg*&@ zW&M*&iocat4j5n-qUq)MomQyaj%jmwx>Sv2hkQ!UY|#1Awot3M{nYORlW`uM?~)^w zq~cAtwPaO~AY^=GzZ!#wd~PZ;Kd8N7Z+m&WKvbxDvf+7sb^A^K(o4uNCVj1SLy+_3 zfYdLfHst9YigRC-?h+x)-_M5i&uGfszRhI+;OYjMQDC#Ub`euDNwlM!#DaKbMaa0% z1y8KAcwOOV?s6XKzib*kyyuNOrxS#sq!$&BL>fJHf$K?B=ca^X-v4CRP~v}yepk9! zi05AOmM%ZV!D=nPv`a)#Ui(lrPLRlzn*kNU_G6pMMI!4&KyN8EHYcO!eHn?j;*ZPt zCtEF)MhQUApy&kt_Pd>}GXFx3Ip at U`VLE`I4nI)3BXE9TN5kPei9C%>%+gZ)a;O~b zmAw()F38$KMWm{Tr!KN1NCHn0SoG=Y{Oh0kXX&)0&~aF at c;$|bd+ci6ZQI-9RtJ(Z z#JDQb at CEDB!DPn=c5krwB?jqc|qd%szU&_JFltVh! z9BE7|o>y8#`WNK{TYqC5RMu=7cXqS5{4UsStFq)hX> zxLx->f@$6;$X;IR+Spl;ofi~Pb946ORGIIeTaJ1)szb4D8w at MSRZMg^`}=LC%RCTY z@`G!OEq_aK9wU%zmydDRK3Lp4w}laJLD`=SS%NLtlHM8c6Qs*g)*eMn?w)b%G%b|v&qcPhRo-Fz at bmb`w0L$TSAq at cvS697 z!9&=w?6i7zIoGUB{<2`Xuh9b(mgR@!B4J;69mlO!bL=car`GuB<{hfvJ-jYX(!V1e z);bCZE;~ySfe-D`H{avJ`-B6-&JRqxn44qV0ab4j-S#~Y6-jK(Eq*DOIl>zvbe|iK zJ}G at zf2r_>#(Qy`ZafqQu25 zZ?m|){$9>6g6yZ>$b36`bH-GC$H~ie%=$C7C73DkWhiO~_e9 z%T(HCFk%CfvB5F5{|+H^|SkU6Al|yvgr%b0Oa}$8B|GjMvfUQsEm7z=3rsDwA1+-~gdLC0XTAJ1K$PZuR>N_dn z+N1l2@<}>`uL)UIuF0__=+d;wP1!5q*kjwXgGaJQuDQyAtx>O2h>go;wZ|T8eL6Y1 z^tkBuJl0V#BRe))K+mY~sVpZQ at 5UESGxO{_VI)V<$OiaHP%?(nBC54ZKnIXv| zqyPYvsXCw>)^#yx)97%VFf}Ab1WQ~kj50kNs#JX&8inRLv5JO!1Vt-a8}e1GO~p?Uk@=C4pweK(uP;t} zpiYi566UHiS!hK`1D7m4a;J-web`7UNDse at 7CiFblBxOrSxiwDfx|j04 ztqAc{9k==c5c(#`z>eM&=L{ zg9?$6pyY=0u4_yRF)lwn|5=RYJTLy%7d^ z1w*@ylGa+oD?2<#$16Mg|E!PMz#&%F6svtm*CyYy2v`W5gSX>*PVgm$i|J8rhFHzm zn-Z_Ul at i52ckSZfn48wgdk84h)FB=rUrE3FHHzF1;c2#EJVc zw$i_Y-9E!ag_+KUA*0Pc%vi>Q4^XZu{k?$AdXOu8WS-8+ur^17n#OxJ5zF4i;1ddM z at 7ZvSQ*NXX!AttoZhDB#@=JWgrRRzkW5cu^yiQSrX*k#Ebh;%h(T5bBMFi*6^|{`v zpR4_5#7bR6+sadX=SqAXGYX$QGZ$=}T%YNqW?N*aaJ6$*L=8gfV}yvAoy!xP-^#ac z{qm-EPh&g3A&XhoTAARn_^)m=(Z!7OR9zc^f$13W-(+VCl zc-%ZSiEx7f7NR3{XkeMzz%F;843vT$qp?#E4);|ZhJTtf#WD$K-j%liCWcuZYDKV=&!?%p6gyWtKck!s&feMa^{`R7M at niBYD4rAw__;f at XLuij@ zuqVVMSRu02if)fgqZeEdJ(d||rjNp|8-H-B~uXlkjOFgiZeF|n1N%~3sIM4=7Tv_Q-q zT0=XjD_lLcHPeJo$oh*$9xeg)O6)vJD`{CU`S%0>90!fzB2YxKlSu#k`|cukcoIWZ zNw%9kiK((GJ6Ct`j5pvv2AKA;B|+A7Tgv#IncaUXk>`{M{vAr=H!pA~r6q~4jZl_O z=_sMiC~4Cm`*g=cvfNv3IBDe0bLWQV9XZ&rfn{Nqa0j$)&ro`ZS(N(fXW$VwOf=>e ze)Z6_F*;m<+s>@K@@MNRL}t#O`?aL=NHJkY(oK9!>d*MC;pm(PJP8U&WoWP at uadmY zz%s0 at VfoBv)Q-e{zOESh!oxu{CtixvmQLt;ho&k(d5o~-)F$oyX273IBj3afagv5) zcT8UCLv#%7j*_J7PL at PuRGtv`BUt(31tI8s7|b6OQE>4B6I5wBs!?#^15?j`$4CPG z(i(w7TVZt9f<~_T%tg{S;OuEY!{1j2 at qX!v7uidoI0)tcq`LpCfmn6#4;y=Y;5Z{5 zIlJAb$M-?Vl)7sn1uq#9iwPvr{LDYfvHq>xk#$!=`d$hmI#O0wq-=il5tv)&E6gUo zMa}L~dODeke?PdPZ-UyV2<|_n&u-|XdkR+>c1()*b_t7U68zpO!4+@}MQi7F zH+zriu!dF%xcq8oMWn*%g*WrKU}E-h(Xm_ja$Z{F>h+LH@)Kfp-C3a+eF~um&%3Fq zjU~Q;KE%e}f7g60&-fzj%xd;dPs)>hS(?;Z&J??dpVt~$x at 9O5QY~T`D$1QZBnTaH z|6-e$E1ft~ngWi+010luZ?RkWsYw_5Pf8_9-p9`PnvatXD9nCfOx+*eY0Z at M#?ayD z$o(<1Feg9$ja>daw+k`#z+jO@ zv8)95FhOdXiOLFRs9H(N<}H1FKQQa(@q-{jAd4Gc2Usepy`=dFePJ at PL;1!baHs58 zv4|hch>9p=PyEV-`sS;on9WKo)mGlm7OkEy^%XLynRi_^lNj2;bq)0#gl)GL1GeN+ z9&*n#PSH)&O5}@%Dduf0{b1EXr?O^=zUSC-%WXH;_8k3+?ODc9#+JLn9wzA~+M5+7 zBy=sf+nbYDVAM-yZ3FVs_Ut?@`8l~68GqSC&}q1Q{SoVm?Of;8<+L5s`g-k}t6O?f zK07*C?aSN+kTzO*sv>X`QN|1LoqtUJOE)hHym~$J<&c2&oL=-E-)5}hh=@n_&1Cc& z86XGQH!-5(T8I!mY_XC#eXVMdf5Bhg;LmE6Z<)4p7CDo4>5Og>ygp`C#brI5HC5B* zkkn#d%E3=yicL at ww#1`!r=`5`8(mV2&E1ASU=F**r{Ils^ugGC#qcFC8anbJ(LO-A z9LxbBO1reC$J at 88gS2vDE?O82>Y2t+Hby|I_9KdV0!}NPE-{GJLJBv;G){>idfuF` z=Jj6e6@#fMvS(6%YBJVBQ!i-zC at tH6l*ig#?lHt9+o9SMN$t3#XN&)!O$7;ZfO(3sBHEvDPS*M<5Qj_CpM2P|9Vb znMwOTgM)RFO>s>V-9u&5L{qK!czPp9>4h#gEAZ8uWZv#%ZivJ`8kn;KcI zx)i?;Mb9ix3!yje`ABJT596}He$c68?pJqZ`Ymi%z;;xkPrjzNGwGB1y4a#EtjPJu z)Jp8W3-jO8>lvX&_EP9CUlQQIe4+o}r`IZKvdaJCxlYsGozN0Hh#PPz#*LSZPZZlR z*AhPLrO36MjW3?00WhSFNKyDe!==+3bL6{*r+rwFZioUGV8l;1#cp6 zdYt>b{w#RXdwX+%$MUsi5K&x;;g`M)qYT{(_b+^QK-=rF*SB4A at WDI$fIz at xWu~P| z1`0Bcd(8vGvF=TUj>+H9Xvq~A9M=^Z4sV=G`n8P0YwV`ih3y*heYHA+>hr$Mx}(#h z?9E%is=I-Hut8&YWUHU1^`a+2cHt%V{aLK79DMu!)!2 at g=#xd>tv&0M#Ed(n(aT+fpQg6(?vcvrh46W>Meic&r#74CpCOa zTamO)uu5sh4cc1KT%)G#1_}aD!c8SUw@#=~Y}C!ema{t2D{z&+W)4e|7c7$M!ja@} zL89+B;+EjCSS at fp@8>4^jMbsHUUjMO8QJqzXSrIn5wHqLw_9^D7~4!`-KMqUmaV4r z at 8i=j|32`Yt_hot(ex!`n{G94EMMK-_5*0q2VbRaU(lhv{sSp#yr)yO?q!|C!)FFG zeO~DPm#mq`UMz&ds#cd}a}(8D4)DZ;qJ|N% z10 at u21^^3mw=6=9144BJYE0ut1Y=-uV*m#LxfjjB)7NC`sh%GEY^4r0_p58!Lo~8= zOJ>hn_u;eXWt*Dk&6WpKV0qt(ymX4YfpcFEeG1SivYSu7NBR9~hKfZ&S$Ig=OSg13s5zf3yH at jUKK93;v`V{`kMNf>KI7SUzk$`5-uPx3Qj}a!#;IT!7{azg%3lpn z3AF6gCC8?nE|5W5ppP&jzYR+aQlb0M}`Mu$Fd+w_8T at hRouF%FWSq9G>s``g#*yqNE zK~nr56}<&?^#Q>_psv{Y-jDj37k=AbBuu^qMbeA!aDn&8t*$*?aoB=h(fh)VvHA88 z6o)9mUK+d25&3iM;Li^tH&-zv!J%;kDH!||7<|0%gxDrxKPM8us6z!5!m~2kg=p455_P;3V9X6GFFZ~DW*Z;vf^Zy>}+NQQ1 z|DS)jG)+f!LT&6IEhDcVzoS;9>}pvue{y3ku5mBxA=rtD<6Yci5~_C|L^wgo!{Yvv z5_uN+BmRqnW>HDtHP`u7JTKpUT at NPvTPEL$@N<6q$yRe${lCw at EMKZw16<5E6G$#6 zb<$nO5^T3DlMYgx|AHbpV{SgaX&PB#PqD6=LEsSFeoSvER(MkZO2LnMA3)PHt8Rn#>^7(MGRxrtEzft=9 at Q8;kHwwZ z^R(m6Z^q>1R?k=yd5#EjKfqQ`Pd at Z`Uf1PK-S>FO1Y9|4?s<+}>M|uwm^5;wxqb{p5iDS>L`X1 at 1r!Q8-F z#>sw4IUG7_)0c6ZbfRPR%^H19%z2$Yd2nhx{IkTsc9 at pU@wJWRBi at ZCne))3~8 zV26Js6qCoR=e1JnYg`@Hl-9kBxtu?#gGw@>eSShC%s(p<_j?K=o1hfHxxi>!e&CBD zh`=jE008gwjFM=_SY8c{H&sP~~aL(~k zbQXSPIr3uZ at J2PAt+usKGXgCp-m(Sgs|TomIn$M%<@4K_M~aW<^-JO!6okU2l)E4w z{$)zapvQQ-uWnGBf+O}&@_OPd&Ob882+GI!ZI$vTnuBNExExJsEGW+G?)sK at OP*!l z7v`BGX|H<-B{?LXKzK;eRf$8|O){X%;1Aqk>CqY9t#EKmS1il74Ae*#wg~-~$;!hB zb>KpoOu0(XMKp&SbNssK*~dRu2BDYe?$Yt6#cw_Va_v=_^I0d<;T}iL8!2A_|J%} zUs9j~D&Spoe^#1|F%zf$qq?*+mtgGNgtwDaCL*srbu<@aoOD#MleF8jti>;> zZSaBu!a}Hp`9nTF91`p1;9bd>F`K(&V}eM0|t z|FFwG at hAiPBZQE_wj_U{c?~4+Re?V^3SF0~ zxRMA*Fw3zbM_YUpmZ+A;`rZ$*4zd1V z{pou;(~DseG9ZM>KlwZDKVxKn)nk2y^6zE#r2XsVXe}Y=wi}LRPm;%K>!lG+`VK2S z<7FC5+Wkvg*XSWJFi)hX$R&0EFwx}Gz%=X?DV*vd1F?9 at m_C**xHi%3Q)-{;K|EZ2YL_9`>QiYS`QaJSIxAQO z-}+N^pZGx;(e}6ihbA*vb(~d1Ez`nCb(~#9E7R;#(=_{)$LOw`NPD{h#b>ZlM=(1o zKGGcaLpd}Z%PQ-WMVd at o=q70}_+`7p$5#&#Xmxe{j^e#Xi z4h93uqAju-*$oMjk_%j1xIs=<*f9UH?8I&nSkDuH=EDq at a!ZYk%A~V-_uAxs#Ko zX4tm(Rm@{V99mmR6!Aa8>^vMvOwmI?1q!BW_jD1GP4%1+tE`k$vXz*+QJrvo at s;o*Hn at jWV7>fjDH=fEPfvh zE+M9 at uPe}dH|8?pR^WVWS8J*q9SmCU)ZP-Vn5n=l=S*B64xmp at 0hH?~HRqc0f!Sx= z;;E!|*VbN;t76>`87D#=@Nm zu{@Qy6=(a~rK^wgVn#EVtH-X3_1;?AaO?7ODmtOpx-p$#Q>A;5hL|H{Z}U;fev3aB z)FlT%dd at w><5%>)upc=1X|6UkgkKk7D1u&nD1HCRrOId3iRx>omro^0{^pDGIvX&?f4h!O$xW*|Nqj(C&>>+x8 at Et+p!;oZt|MvNR{ku*N1A zAL+9$=Q2A%0;b0%|cnWQkSyTfhM+n*0V$QK1 z8Jgv{Nt_e1E(oTywLcU4;?9EUl_(!K}2(zD0|s zJx+s8Tz<`>RLG%^}6$b%0DU&}#6QPaL4Yt`%=Iqy)Mu;1*Q*)TAQArcV>d5(w7 za}t*{JKE7Nk8BX~`UiA;gUKQ5xTf6oa#koHHq((&7yX^jEopV}_ at vZSSF*g9Xs#I2 zabP&Y?dQot=$6%JhSh+kRz%=0tj|H8p)ihOgi8r3zflD{W}gLPf*}c0FO*{=y4ep0 at Vb`xlEHiHYe5| zB;9>xr>ezE5Q4JqE?jqAz30M?uLA>K0sT-i{x|!+#BGTxjfJ3mGytiRbtwVQ}y-qtD2O?pzV;}O7mX!?%?M}cOc`h`u0mz^dieRnl5RL!CU zDQ&}&C!$WhTGI{&ZEr2GW6GgUiPYUjQ}NO+6OlBblSt&cQN3nM9i~yL#g|F(SGVFZ za>?0xMaIL0%<3jxvIN$_A{=5mX(ieDdNek}BeTOQZM-iK^O9%4s7kLPx=Ul^0Qdtq z)+)nMppPi$PS0DXs$2BiV>~DJD%tZgO4R*9EYoX*A4Ya@^KxrNWW-y;b&|1Gn0%8a zM1zjAphI)wN>-UVs7;T0^7UB9#1VL}@(B1K9%@c2QWI#_tH->MkLWsfXNs7{8PSx!Q6#m^!(%=8%*rp($+)}ktszB$(!tgw at cgHDx z=(fG-;2IQ8dI{-WRK{q_Tf2;Yy- at o4gm#&(my=N~)9d at n*b||Feb&kk2~*JD$1`~d z1z%3CAe)=SMaM$QLd!zw9FJkVixkbRIH!q at 7VbTBrY%bBurJG_P0k at bPHYH0NmJJ? zJm+e{#+2LxnihR%ze#K9lWx>HCl021K-}fL;loDIA?&5ZwaPxg_oJJ&#*k)=4jd>kk{@%)u;fkFp=z at c$0?=YTYg%a(Cc)8ZbHIUAg9SZ;%N?3mOKKu|N zd0lrgVN6p?=exE9eV| zpyI?i^Ny;fI>R>WCzDc2Ow>#i77q7;!TolWO*o!BZ^58I4wy#)#B!MMSii*j9Z zpzPSI;TjFZkMcK%TM=5A_0-;Ie)^t++3sW+R$`if{joC(DVbJIsFMXsB|e8r$tp}_ zRIGw1Ff2i_u$RlQ+nYA?)gw&@ql_Z6bP(Gb#r?@>e#6ve3M21BguyE=z(&_q_-end z|ETZZ8K!F4W1AHP0-^)=KbkUcXYJtb_3slAz5P;GI>riEWlzYn5~+e3uF<6izqU0{ z2vM>+CI at K`(vv{bhBF&|C(j)Dhl6Bm|IhaD;Nt7Mwfm>Bq86VKcpd#(_pfd7)ca&! zv2gpf@^0+Ni9w>?!Gb%#;H_ixG~c<{b*># z#=59V-CdwnZipR54VY`IVFirWu0Qax5E??6hDGts6h`6vA&Tcqo6UX z;t`pZvGWbvt=urX#)bP&bD$(Jv*Hn%*R9;(xaNhAWl36l1$(!IQ)P`=c|~^^3 at uHY zvhxkut=-VOhJ>GH65{1sIxOEnu~r|5pHQMOv2fb1&+#b?O-(DH)HAnRd8Kuz57|yL zqSUjtTYH6U)E>xNB!stTZn1aI at EHv8P8*{;dZ4-C zVNf8gGO{Qsw$!~}we$3~beB~0Gz|3h47BuY^YPX6{VdDhwO`TC+kvK1=k4j);crE} z&DGkDDg_4qz_7CjH?0hXY6rwOk8HZ+uAw`q>>r-kDtu85QD5p1fCNcOv^!pkM)eP0zbIID>&Co2k<;-lvLW`!7Psz(stN)D1oppq`OqC%IR at 3DMJ)<{Yn4R{eq zt`wq9mEx-Ipv<W(*PR5bhc?Ldo1niVTbX->%YJ3&$_Po!=jmCP3R z_B7J5BMGJyjEg2*I{+oO0Z?)zl25mGlLt_=y2dMP*9x<4vEpjWZ*$L{T#@ln5`Nun zbHQgi5{Sl!-E=`g`<5@#tdRD#Ge-No_n?c(ws0^0PxPeY`U>D;L#mo7UMXk2zYS%> z;I;ZFh2<~@b6HcYt)*bzU}t5wr-SElN?rGP#)2m9uUm^}Yuls8?Y;-BqUUQH{o4D~ znVY10-cH{86jm(P;L(8-#e0?4OTu}H?yRDR!1irh3#Zp>l2TL-`_3nQUln- z(RfYY|A^cp!KimO+ at Ei=7WiKV@)jQr6QaE~&4*U_(nKu(JJ z#vl5`<8wVYZI3$x#%2iGoi2`nX@?x~TijRsz?4JA_%80N17OCXK>RB=(Y{yWAxV4$ z_k%OvAeeg0lpw*CZvad_rb?jb$~Oe2A9E#`bM5X2la9#}ymA|yc!eFR$FFf2oO*>E z%Ez~J?Vfl=9O}nEa_ycz{X7(nhbAC)_L~MHjFl4s1?#7vZZ6JbeZx&}cnfU*}au5QugY>htex z3>juUg)?lR?sl?=7>aS%EED~%={u1033 at iabDVx~|Lfs!eO+RH%aq85e|CLQ z72oDqo-ZDOInUe4E&Iq>3o_L7424;ngF(|nK&%Uvd#B#Lff)YZ-E&+Lj^olfwRi2j zV~!1`bQv6*yLWC;r+68zo4U7diKcuRuA95}ZXu`O7>Jwv)?EsY$=d9z?bVIEG>*uuNHSXIfI<<60+4j=0McXXP-_6VE&*?Df zVd()=q*Em6BkALzDjx_`@hYM#%sf=73$3y!RK(olk_T2FU4`d-u{+z_s+3_tHy4}{q(Kt1=nESxpi(yrd9 z;#uR~gL7fL)AvL1`cWF at FsHuX2NgXW?$vEFVsbVEpu?b>xr;) zxHy-XU#Axg>VOGY224vYfmuKz0KkwPwv3t^{YsBj|E(aTluOO8?um~edT97GhN<6J zi_(Cs7k$bJ_(TdG;UbWXWWq3vCUYwBs`Vm_A65oU4QG&D`hu}Q_gr{mk#NKKPRQ|C zXweZ)^zi`CVSHzTcx=b7j-y~MVLtlauT=YDV092iZe+ at EF^DBMG-c!v#2~c?e6j(5 zQE1G^R6J0-04T<^n{Yow*JC&iS+7&(V;IIPv5 at sDyiwQmw}K>Nh(pqV3VuCLjap%n zQSC8~{kUE&UJ*|cxlv=0mLr at 8^mo<6iM_4ijH-h&qCa6ZLCD~}=uf!1L0a%$)F+h$GexiL zTOV^Y-AEwQ#~#j*1z0fh6K&Kv>xp>eGn4 at b^RxNs6J(=D at _`MWVh(Z#WyIjinWQ{n zfdWS`8L{``exFwi+ZR%2fpMr6EV^N3lC$`rMN at DKf||@E at Ntr+zhlLbDsA9EVa1aj z;b#gJezr=7ia at Kv2S6Wxc}d7rz%eOIR5hC>HE2$ud4y20F77QPDvEb7)}@5IkclQP8VR*|sR{bJQ6Ay(0mJSS=`gBoQr63BsB>l>U7IO$g(n at EdOtjtAtR z19efeA5C6)#A22QP9ELVnH}dprzSf~WK~(2&zcHaphYoN`!-qyiBs;;@6`&Rtk7px zz6_VPVUp8$HHzLuQ(b|i_VhN+u0}5Fnk*VrhfZUJtJ1U1JeVAmTZ5Q(x%|0Nm#1{O z3FE5QWn5>=H0^pB@?7`c(C-dmvu&Vt#uy at g<)U>_7ewIzm)^OgbUrJR=L?bE;o0x< zsGxPQ3v++9gYI-42Ky)g-}xvy?hiqbfQ`p*K7T|LVWEf;%8y#}x5PM&3JGHlLX4mH z`^g4^^BkiU_#%8IzbEnLBBaDpu!Ilp`{lhzbvyE^*HqDrE;MevsAN|NTno2NofFYp zo?@n(Q)jl#CoI_~<*Dgv;;UnRgzKGxL=KCU$I&$t6A`_%=jq4 z>K+zdM{(ECcX!!5=lLLDS at 3)~XBYt25V`~(ydDoCyQq+=Z1 at EX(&zByQ^f at 0QoLnO z^!BrvN*jfP0YTcMV^GeciZEYe3lPY01+grw8`DwM4`I4`nQ z-ziIl62$`OOi!>XR2bT?<6Ocn>Vlc$YJz{;yEElD(=ou{#m!t^`gyEP3*M4 at v^{t< z8+bYR?%g#G+AB_P8yehOaLQ++ at V8dmPZ~}n-B{E)DY4!8w&;0R6fzxB86IV#za>D= z_%q$Kx+V{omyD at 2yga$Up{IASVQoiIG16d6FDF!F(|JcTwAe{R~>Rw2XzCSu=sI1zrtum at k`TQ}|=y8CQ z5wKa=igPg^I-oT at U1f4X#M?cz%v^Me1;9*w3ZkG`^DQKX6(4*{_i8CRpe$pPYtAxe zouZtj9H5-Ah at auhf#Ha;LzbgC6Aa`)r2OcT^Fcqh*(rsBJB+Fe+2P@B*W43ANB;GeC1N~JJv*aCe_^|xDOKkE(G zPl$v5G#IlW{P$RW@;6^!ICQy>*m=4y1rsQp*nUzPcY}!o{M?Ee3h5M!@Jh(yWXq?HR@=#VqDQ8suT4rs&XtgSi3{9%6d&`7)8CKMijI&f1iMMv7t>V6GXP$p z-R)W%L2t)23x*iA+iodo}TEJBYcwYr#QkTAa`6l)7+T?lC1%lq~JbiU#UVGLCmeX*C@*Zp&ST_M?5{=rv_bOo-r2Eat=2L3np zXs_wshx&&-uwWq|nEq4t_%9(QwMzwnGCF_8l}EdIkPf;P7JEROxVAF5I?{+irB+DG z+A5YswiXE7$zJ?gFk*QFhuQaQ;bzMcjJuq*6{aRm_BfX7dor7w)#1BUzb6;~$sE0b zj#)BW5DI&bD?Fo%`&=+LDx4+OIR3vTeEzwy3tRFqm_7sm~W^&e at jR;M|wc{(hoX*ABCw z#q&7=JT5bCx_o`dWi1vGMW`rp!Jpvd^O(et?S#$LCWGQ1y$KkUi-8Ec&)v(e>s1^! zrME3ZLlfmc24PTgL6ZKP{rcMgsSi(O=%I0Zu7p=u)C1;g2^0dcz92}B5IYk)&>8mG zhdWOY+2>W}uKh%<&$6u{>4pcp>s0me*E!bJfP36E16|qcd(;31S?_mW|0XkIm(+m# zoGWDUY{-^Dqo=P;v*N3{h5Vq4a?HjpUpA^&isqG%WL9}s94V})a6-sbiq zYo}+5{WPH_W%qmH53Vd~pXUf%I!ncS{|B{5E=s%L3P`=wg$$>kPnmm}(&Je+e^6T1 z`X=sMT1#GBco+|(3*HcG197easU~V at V!b_*R!GLuylFqp!p-!nNVVI|_=VM*BF*4h zqzX!u-&w&zDMWtC)`JbvHh>)smUXdVS{r$>T87A(ot${pf^BWI19Y}dN5ZwUUCXmy zJa5kR$r0ce#eauW0d!B%|(9 z({ylKyqTDi4kZPOC)+xd&J5$;^oA`IwoIJI)JqR8Fn`4gZYLlAZ+D^f`$1RF*rmeM zZBOB6xw>o5Zq>Dedo$EwD at vCOQwCEF{26<>ih-e}dNtM+HeC&FtKUW)=4D*b2IHE` zNc7K_>HAlCNaYd&&*+CCo4OX|?*Xz#jsi9M=EPV-k`1O;AM?t1VScTuiy-)E!FB&n zNmjtpK*J6G=E;idvo9_z69e==~fCAG~U`rI6 zVQ_5Jk5!lx56#`sur5l*!~CdXuF=ilD6-5SEHftI;=v>IG2~?xK}=NNq&~bLURv-2 zcneq2$`;AC)OY3cN{pomf&v9wWD*kf8#8z9D8?8rMRJ?4r%3sj3EYp zqg#r|g>vDWBx5-5!Vc09j3G=qC;w&1B at OTiEr^o8YfGtHEI6c}U6}MXp*lkO5(_!p zhx7V#9LbyPR7&DFTjb*#W9SD`YD}#!s?bDt_zUDDlC}|>QGN-x+mN_k at _B|ib-9*A zsNXo5D+d^HVfsRF-XI`tD3zOXV)TW{MQPP*89pFwSF at quX{CWBCXsAqdT%~IFpZI8 zF&VFH35?%le8UkQSkbpDQaN at Xd5d_s#Z10cT#=lWe5oE`C(`7vEZ>xA_S%}sXsx#h z?ekVx5 at E97X%>lmrn8&|DOX;H%6za~3_YCN$sx2|c at 9nB(newsu=_#IwsG|ZCFwiA zD1%|qkXA?#?d84}5G at 8s>HM4Q-%%I_>2a9{0|8Nl^dJ4D|KBM5_cTuGhNr4JW<+4S zeD)HXz2a#QRCJ{MK)5ivHH=JlTM!3AhxPZLB08c7W&bP?U(g-j9P0}R+F-0y7MrQ} z>8fBqWv(~c_d4HWhqhDWA4%- at n%_L1tnhr(KpLL at mkL?oN0!W^8Y!ji~Rq={uI(7>@2C`LCHsBS2D&K-n2xkCg@ zV`EZgG0}=;G0_ZXGSLlZ)l(Cg^;RVs^_Cg28fr at Y*i*_h>8(sO=`D4Nd~O>wKH){Q zKIuY~%)F){Fz>B*ihT}3BYwF_f(axiQXEchJWK+H1x00n^loPDNK%kyF_G?$<%)9Y z%t9=0vu-C$tQj-suxL+%mrK>?vEdll7$1ldMohsa_9P8zOl-KG=j$$UcV6x>*~lFX zd?#&Bsas_d+uw|JbwpgA;VTL25GYMlC#2k_gAJx*DZ|GohZahz6$ceMsuL&%ue3L= z8pFpJ*nn%3#SB={qrZ&T_Q^b4j6Kt%$PrbGmvN4z1&L6 zizF;q9F1ii_o8`yMMik7VB!GFv^rTiv+2oMzxmAlRM|&j099OQ8xb- zsNr32Uv$oKrY7oSS0Hhp^A8rt?Pi#NGGQv9HJDdjIK_Z(PLXe=65eyPYaK}31 zoT48z6bwP40thI%#khyLhPerj68DWKrq>7y8!&4Sfkfi?Un`GVQm8zKkKKCqGitDxXNP8#T^^=B=hHDxhlvn#B(+xP6` za%8hdzuOjq#f-}Yhl7BffR%tV7UznS&xp&I%NmD07Izc{4UZDpeyHRi)p+tI at xXYf zcmy}V$eCau+`!$5UXtB+R0nP^NyzE(_oo2V(IUZLX*4L$1|bU-mgDD zs+cC)X%!nK^1UnG2 at uQPJ*q}FI=^|n^hG at W;L9+B at QffG=@((m9nincon;VbY{Xt! z4%hkXc=3$N{$AY|bUhWgtVPAXNi&u<*`)L_CR-~Zu2Ucmc;2xv5hi{7`w)n-hy6+2 zKEO^$lg5t7SOLsf>z3lx{zR)^y*1)HtZCb4z|bqf ztcLa}e&PY2yY=jn_ZqzU>=eQcb4KnJ;=3z#Yj!Kz_NaFo`V~7YZVhur?N#L5GlC(( zg$@fLpq!ERGYx+7UUk15ho!M$$FF;JTlXzbsNfv;h?nR%zH+~#=S0P<-sgu<=l`p|Hp`~Xl6h@ z)B}zeo)FdJD-YoXsT(&AsT=RQeIU&FR4JW?NCLqGEKddhO;JJou|lU)@y(KD5vn#% z3)b=>RI3+C91uRv at of83WbK2qW#6*}q}ZZu(4uR9)=(!|-b$#ifwQxUsiCd?R|~7A zjnOFXo at Z63U}>iM$K$ENHdXhhrDWK)aX7M?~yp0X}cZSPG~prukLgHhlALG$S% zp&{S3W4WcYF3p?E_o3tT!grS6^>i*U;2pZ3me%-7V$}XO2U}nn3H|``!}^gIMg5^l zs8hj2IgbS{63+>aJ>lKQHRM1^h3UX2w)GG0`Nnavx>PrM7BEXkG1=%5cS;xDB%S~u z(#&P`!K29JcoIspX~lx<*?q=!+pP6>UJGIUrBCY-r+c}7--ZqOdEMGGqcn}AWNoUD z8iga)?W)ISQw$XJWZKlJ$Cq%-sgt``U5%Hv{>WQ`ql@=Ew_^*Ezy>BKa80zG2d5+U zCF|!|;D<=#%^-i-w(qKbvV!hLbJ)IU`EDgbWUP=EQ%ZGe%?0ENi35V3RCT-z0U*?e zE78o%=%&NxON;mKMi`B&dv972?cu2Y6|L^QZJ|zYv3oRg8tOG`f>j;y(*^}1`RJ2t zB(25^=+mN<8s1&!MTd61Yc8y7SA5p38lL;)B^PaddyJc0iMTa`l=A#l{W*I__}GGG zUrGRzvd=4BMmFl!RpV(3FM~$x1Xduu!rlB at wL66fs*9#iszRhl(S-AU>-) zVPj67Mytor at dK;^K+{VV`Wl?pWwB2rfUR|9Y6`su4hur at v;H3crO)4F|0^SYra9}F zMg9y_jyQ*`oe7Yh`N?GpiuH5vi~r(^&r?n-wL13pQJ|WlfL=F zNuW!;1 at E(dA(}w(0jQY8Eiu;|nsz8alTUrkxlu(HCr>ZWCr!=#K-fIgWP>do#d+4U zR^^y<+^!-{kKG+)2Di}C|6`U0h7;xkyu at cOXlN>q-0VyxDL&(t1l1oozf6{0Jqn6H zA&@4ceDO=hP1c9cZxWse7qL)VG?td1AxLslTa4-Cru+>oaTFIl2|Y?l?ju~8rkN-& zez`sZd;VrjgVx9K;9ego)JJt^vCC*>l(=l#9RcdcC;zKa($WJUa*V00Rmv4~1zUMa zW96pAGs6(8FXj{h>n!&kC<}M3I_3$@Npbbx!))h&`^-bWKtRAC{12ig5~dDr|FZb=l9CNHsHsFGMr!1wdly2ci+YVfg-- z4UYIWoAZbmO)TWLN%JUKJ4~{%N!CbbKl)vKKaGXBQKmK)*NhvCL?(L>>vR{CWfn1f zuIVa_L>4}j>2$bI^adu5r2}HFWdJqvKsOch#GBOjnK!NPLvO>w{(u5J=H{&D=d8Du zAV7ynZFaY+OP))UmMbS-{1$ar>CsN~5>UNbGbOEQt2<-*+l~Z<`S;A3^{_Wg-i>s? zl)^UJc|IZ zuIWVatSbuNMMkf~!q#2ihE?+0;Yf{wx^n*%RPB`Pcpgzx?bXz!|Iy4_K@^u$cfCpv za-(m*vg4VEKCGj-l<2vrD+P7wma=Nn at uX3d8=QcAVEWG0WceNv{L`nIbvrFL10*cx{Vx5?jJ-oOTpH at E_viBF$XI$HhENK;RPgD`T9o--m}L%zKe zjOUuLPM@&lU~pKj=bF35&rs*EaL{lZ+Rgr>5LqWEXDCC2p_8!p5`#oP{jF?1O-fG| zox4oIg!P^d?mcQpnm?NEUdm`^M+T{OnCjIg`FV#fC(W zU{kb4was58Sl}!6*0{?(sW{2Bka5+!>plrRDY4LD9TKB5#BdfYV-fY8PVR%lmY%zs z&p3i~fV+i;CrRMO%c64699LWq0h2xOgNPozL|SHY7SOo=}?`y{l373Y`Ztedr`LD58Mxt@*DAYui$yp z&@_iT$yeP?l}>*2GzLQDPBI)U28OiwY~4=P-;4*URl1cuKh89pBqt24VNQiQU8vp`B2OhQMx+Mlw at DYd^({I|$?C`uYrM#BFm9y@{Q9f=gOp5$Sp6mQ z!pfeZ%uH``)!?fPQO3fmg5vnBA@%;(5upJ+~0I*MQx3i1Q&fjUI{L zvmEa0##+1YFMj&pqzh|I$ujgm(go*#QhZf)G`0PIjaF5cgfKtSDdlybM3Q9bDh^?` zg2mJ at 8Aw|(#Sy6oY{r~(mFQp>muVOd6~U5EKktK!i-(#8C&9V)ZdJd?yt(!QEa%)G z?Ro=VpJ4jA(nXXK5ls=-*pO{AQH$Z$w5M+rbR-=!Z(vhm;{!&u387=P36)2=30X#S z at Eoi&v8~$ES&g=1cC~FGx#O zn4GFm#=m)eUBmRFRqdVHz!w8!fZE4JEnnGoP733YM}eR35~ugs(N zzMYLf(cIY;|9VE?kQ21R`%tQa+N7y${31b2RB=&AZ!Bv>pU;(9o?OXSw25{+ZdPev zK&P&G$)3UXj|qKK+xOvXH+I}Av-LeMQ?KUP^`UhxBu~;Swd(Tj`r~9L7zEll{(Ak6 zk^7S6!dK40FyE(m_53WBzim55V8dm`eV(sht;uboclEEQ6$JmPvln40;XjfLNlgYl zeC|KLm8k}@d^q>GxY6F*G_svKxsrI`ABMsz+?k=_1LI(Vh6AbCnS*nKT(#JozJzq+ zan8pGK)=(&YKdtN&r6y<+j>Gte(JN#*e}$2shuBq{W`WvU*nJwzq0&wf5uwZ)0(#F zh#DX-8{q${uT3h*s^HiHmx@}HMg0hg{_x7RZ at N5&Lq at vIZHy_(CDS`*wG)0gtk`ms zqR%2=79a|LfDCF$`R);%*yjWd;@^BgUq2X&AfG7QRvi!cQr!FgWyHkZ7cKP&uEJNz z!z@@MqM1Cd40qIM(!UconZN`VvWX<-XndbBc%sO2-r)1wP$J8V)Y$o5ld^$xHKbnR zD)xfB-yqX8xtSvS^S90Fy+QZZ)RLD2H@!jgy=RK-K%7TFs)!gGbr*b(uvU|Yc-nMg zjVOxDD$PbwA*FVP*-kd2w%Df}+kBxj6EzBshOqrSQzN=v;S{YEidYRNdVOHNYi!j~ zCl3N#QIf(KdEN^Fp=!?F1$muR_Y2{_sFK%MK}9*xd#xgB--lM$QJk-a?CNU07tSA{u;OD=R1>7)*zK zsivDi#IN7sbUoTbJWxC4OH4#wyW%ZnH3tx}n6f+QL$1 zJ|fHg5ae*m(&lsu>#+SkVTY4x!hs^k`iMNuEV$roI984q99Gk6R$EhUhl1T)x~Twi z*l?$fQkmJY=W-|pr2`(T6ik~n_N3M59PR>41j#B%YFw6{MI=Pegc$0HP-jXtRPf|V zPwdYvPLwR}e%rFyi%pbHfAwV(LnC+?ykD8NIcdY z|1DB0hC^alXQ&KII}T1;n=fjyXP~!qan*1*VBRy32H(E8qwzUOu%DflMx?WNokv;{C&sL=Fk{9Lv#({;?Udb1He;sR zUfHFd)6Ghx at paN??=2 at ro44ojQz^S|*M{y?Xl~bFLWKxaQ^k zNO-U2yR at zXY2dNqDfF0lOhwl#`y48SaS*o9>DDb-t#+8m#kY)r+=xfjDyyOsL$=Qu z(tbF&TKUY1suK06)n-aNrR(NjsR-e#M2HcDj-eD7I>m#HXKsw*>t${X zW|G$%p%<*p21W`45I98b!Z-9xSO+aqXK-?yIRJK)8+sP5Ve-i{m^s!QtT-hZzenyC z<{v+K%RZRYZ5c1`#prikfX{K4E>Ux)HTSoR>Xx3I&s7FK&N`FlJ}aeTYZei|UD<^k z=Xtrfw`MFM&;ik+(L>Q0n39;1SYw!DSX7u)SWI*V%5t;{GzxUH%nK9kA{P>f*NdBr zfBleMOHOtF2A>^#E3_0028Pqe(I at dp9vO~@JYbIH7hfj5NgR#C9%Uwg?zA+(rfM-g z2ZuNJfoPwuPec<4I)J(q_QxTmpA2J_w&N~Q+AYe+;(yWp3WyedPJ7N1_o*GW)GUY# z)U{A at PAY1eKluK5f#s3HUK#uEQz7IOlbQsmxbKEsh_Nv znAjgAl|F`Fr1b7`e}GCWFXCg0M^<-dwkm(UnJ<6s{i70K`QW=Me9u~9!Xp44%8Au6 zLcL30TprMaiF^>2mHk5-BAUM}4RQaY67K#{2}q$85jetLXYB<-zHf at B3@Vy;^5VZg zW`)W<<3CiDh#9|&wPTM`?i>?sg0V=wq?8Rs_i0*(m{K3{;}6kthYQXY{g$o9)VjJ8 z(8vYf at c*6A5Pq#rYN0?tjNw8+ at coa%_5YvAC)(C-1S1%AyRFKyc&1j+Cl5cl?Lsg( zzi=m}d5}AHM|5{3Gh8iPN#WUgTJW>dX>S`{O>M)*b_{GA;WKNBe1#(4wv-b2nw*$J zPENv!Agw;o+Fbaed8 at 4x4!sj2?YdKBopnE)8V{)ArNVrYQuUHGzR7mTg*9g2xV z6w?57<3iUBRlhi9OJG3d7c!I+>gep1bE8YJOY+7Mag833G1L{hcX;DJNbKa5a1%ig zAogU6dJXsp9a2OH96dMBL2BN%gq&Hu}Te`IIAE4%5N&x|uynw60jk?fgt|bJ|Lp#sGjoeFN zAeE&r#?{OQ!C*)34B2)>vp>SAYa6jKzU3=`sDC3U6wcX$`G6#sP{s?#G6E0~-%JL- z#jPv!F3_3?JRnnSM(CHbR za57w^$qobb_gVS!d#wXB0}XKk?cpyrAv%N3^!3eVFTG(Y5uexsR||#k{y7|GMU<=+ zIa at xn+cUoa3^`b^Tk;PM-71DnPfM~NXe5V7h^0F7IxY??bXxix8#YNX55??wcEMxw z2M9~ysto1hE8d?S{>y_3tLrouYOt)VScov+qOO2J at xz*2%Bagk z5BEMDoK?65ik`I`tL{CJ-#8x)g!6#wHrP6j%vuImlunWyA&)>6o%#w$Q+b%OorC2ncNza at n_j|B7R_L_l3NdX26vEY2 zXXsfl+FYQ zj+r)@V2C|Csj$Va{WZ#%JnNQ?8iwW>4g=8g*`S?T*Q3w-T~zTR0MlW`&B4$WN~tq} z+gdAYZMB73+1qA2r(-Z8RQyJZI|D=v*L<`p{8OAaRl-w+y`vKZ7IM#!ode8PXg9_9 z47mCS2FNq44n~gFeGg)w8q+q_Ty2WVv6j14SK&HPB%tlv_oMP_T$IXPqvW%FQ=zsz=;MlAakT#hDc(-l at IMx$P5K;=KFOBc*s zY)oC3QTzk5iF%$cRiEroGN(2Z6VjG>-ke87opZh=ojR?Cq`BlZJq)Z(cb7C0JLj3V z=w(%W^%hrj*?EVl{P(qtxjH`vPPu*^YuS$#<@fp>{oLrJrto6pnY*VFQ>Xco2b)I> z@Y2rI4HMEAcNwYPEZL+znjhk(PvJ%8N<^3`gc)rvZChX7Q>ze-C z^FG;m>W*~lyx|16GO-OS^Q;`9oZgj?x5O({f;^c>=o5z;v|?1SGW+CrRE0rV%HS08OZJIQ6h?tOJ1tcW1kM=sX^GT z%H1Wns*sR$P2MmR1i#oX53{CuubA{ZF40(PqoyW`!(|rf!SBHBLCYA`VLY*d?+eeZ zQZLjMIU!zDzXwiY-VbchVQ-{$TDo|4^TQN$Q4J6!jgUp;(~>U;6qAlPP+*aXddR1f6 z%NlsiO}1qs$+^+&q#={eYgDNAEa3;K$j2y1Pe8ci`+}0q-TIEvdUB z{yEw>mYMiPBz at 8=edqg-Rca$DSg#Kq at -#^EM;!28tXkWMJtzrd&=kaPrJLU(C}U$# zl0~=>obl&RsN3OM%DQOt;z6<$&3sszX=Wu&#m zR9)R&rfXU+C8*M3vtD~|geu4~BOf#N|e<~$1+_KAD`18bE_ at jtIESj~F77<-*w9b>r932 at kSpKTs^LwST5=-YNtto8j3cl)kf6^R z>3IZ*Gr6c}4S5~iHhS^puzy>Uqg~6BCHTj8;_2ng9liRNgtrXWAfG}E{IQBHOI}(pA&{?4`WVu} z8JAP|)vAnXJDUW{!(#Eb7F-o8s3cLq)-|;--XPi(Kp9DC0|{^4oTR(1%UXyF98ja* zDPWiC-594*!TDog4mq|k!DUVwRaAK3MlW8SoaM$@tCcxHV?K<(GjkNDrf8r6u$h>g z9>spNxczbZjDsbWlEkh;jk7A+)T~j_5%62FY;N3xf>rhiGSX7Dm3DUGR+`*3b&!(Q zn|s-=q#+l8G@%?V!k3;9R%4)0!KKTZm?3tOW?^;OAXpQD0`apR%7!~KVPEqLQ5ZGp z$K*)TSW+v=kKxKY4oF=l@%;Wi-SGjyzVusl7}O0WUmOs+l_hm>M0M at gkKCNaH*&ET zOCdLaoHm;yv>cW$AF8~vR&Z{N#fYw0H7Gl?>?z%(6Qmnei-m0x4%&*e$J$evR`c_1 z3<2>*=V9(?U;KKiGf4+^uFHdWM(jo&(S2!qGuCy%+$MFPyJ3OoYq}G<-U2ICzd+}o zAh_rdOhGMzUr$9K<`FdP0 at XM8g}Nswu=hv;rX$+xV$7oxB9lSp2h>;5(V(fYav&4bNVSO?n59t!?ChKjqKZ+)6jaYGd- at GR z9+|_mr0G at 3t$pGK>5a?*PU!-IfJ)$);gM)VQbu*ZG at u-KY6L6Vkfu)M&Bi$nR6Wuf zZAew8=@$nS2DgGFMjXF#(gnl-)xlfCm(hD9S89HFKv{6t2!He*-IeNF09YtaFcgJU z1|^gbO*Rothz`?;64RJNYuy&Mh%memKb!=Pqbby99T4cMk;D06`}1?(XjH?l5t8m;}53Rr{QC?_Re~)m|^(%lA53jW&A! z_1-Fa137p5`AUsubYd at ugK_)9J-_~X&O;>ar}aZNtwhkM#b=qe=##M{49OY^#&PfteODFKYE~J%kkr zhoEzc=l=9j>Q=Hl-#y@%XA;p9aMt2#e|v623e^ zZ<4>C6M>YSIFSwaS1ALBNI&k|JBHoAccXo~h$a6;5}4y0f$xA5U7V=zP)j2XsJCoKT~+t-ih?Mv}7+Pim7+NN8I!0-87+S^xI4pP-bR?yv z-y*O)V^I(-STlaq0&BPkhq*ad>VMlT2- at m8YFVWao&(>VVWsX#Rx&Ut zTrp}_ at 5(g3teb|9Jk0qs^V+Xk`6Ky0Ndaf=-$unRzs~T-Rh{w{c&eLZm+Qnx)T6F* zXh(;)F%L#y`mEAOnN1^|;bsiy2R z7J&+x3PB19|0mZ6FIAnzt6LDU__IgZ2S>f+R3)!T%2kmx3_ z>8^k0JVxV|C(HNkbi+rSG{H~yuEIwxPF9HVh2N(~h~kA)|20b>kV)`JwiaosGNc`k zgMN?6ts&oo)lNekx4=SzMlf1YzIqxven`N^HAL?*F4x}(r{W-KROn9R`kZ}&B^UP8MdoX}gg_tCUR z3O=#H=gLIQm(|b!V1MxO_zl2sA-v=#SOY&F%r)W(9{0qKO+t69^;04ne(UaMJwnBb zWe+HI3VNXkO`Ig9&omLLVHtUg?6*Er!Uj#|e4AuV=3vOaOHhJ-lFyE1u~8$Z5m!_gxk+(McB-h6JB&g9_2fWyeH+F(!| zqLO$px+*qeoBAIoqhUsvr_dE9#f<*$(n}m_i{UNFa1yte^*w!uF%n^x*Ib7d-E at TN zNBEHb at F}%@J-S1ZKVq0<>?2xMJ-*&{cOuq4_I(~^>y=CV`b{BQ5`OZ)<0HjV8 zv9VL)3fBEXN7Gz{FEa!d{R@~lSjn-_CBxJTha5Xenpc~|jz`j~jH|30#FTv4O(V}8 z`U8IkI-ymOiJErP^4S1&1WLFGIF(=B^SN9b0+o}pgWYFEhf=+D8#afLo at YQ|fdvi& zP2&)Z6;d`2W-s9vvHNEE#;mmJPA=a+FkmE5T+N)S{gr zF%D_&2cLRbIL}TWtE3I>eE<|yF~_Mvr)yqJLj at V%1k%7R2{rF4H*QK4W%6`AE28^i z7O1eVr?2-1GsPNU{aeZx(O9XAMEaqh?+-$Y(&YBAd5GoNy4>?##kB(Uc^RwxZ^G#{ zT^2g-X<3X17-NxGI|gkV&TvX+BT_FRe(P~PAV-{Ldm|I!?7p3MFww`}$m=a-iqQ24 zI?*G=@c$CxHlwD4NKUSA|H9=$L1oXo3homSMy at 7Kw;A7CTlz zD$q1}pL~QWc7jNgr`kntzZGR&FxfEx9f$AZv!LiVP}-9HLHYde-<7VR)0ZN%Akw$l zzcpqI#D?1V{;N{2Pu69I0|VXFA8T{^Zdg*r#yC&~Q*X6jOeSwq_nZeX!)O3X_|y2= zTrq^xgw)70c+>z~WL&@uK{0X)@(g}4AO*l4raf>UhKuYPMjz%q5VTjmCov!wmIA23 zGvMsB at XCrL_>hmB0z(K%&)kTqG4+R!<>(xf&M|h$9$=o416Sy zy2=An=cI!v%_H^hm0vAyzAgAi41?D1bi7~tSJu~*$!IgR?_Tpn= zG5M+M%F%)L_MSi3X8qy1b+7SEJ7VU(y9>-WxD at DtbQy1R8>Aa5m-REz zsa!7^v>CKX_Q+U{Tt3Ix2Y`OBmuyWdfTnb;TYRIvDwvjvK=z=^cKMV@&j`;m7k#E} zs&1LrCc{o$zlQ2rY>*(Rt6fDi$`O61yuvNnE61y+SorqKt$n+WX0#)2fcOgD4w+D? zt^04V;;nwW;!4ytPC!caiaRJS3iT9LpZOyd+~Ho}fVM;NL9$gyI7Es|x;)h`<0t;s z)h at vueT^NE^waY^@wi2}g=${_7kVjso}%0agTf!E zx4w~J2v>IeR*FMA?1yWkc#l* zeO2RMRV;O`4OTukqRE@?a}ezcmO=oakWg^&t%_N>-0u!3 z0r!ePj6w~cg+h&>kAi~1#S4$#PArek#h*&{zypuzLo9x=QR^Vcqn|yXvGzN;QEFp% z0OE2~&}~`%*JshUl7+N at L%I{Jib7)DP{P?(G2IWLEHB4g9LIbV$Gq*k{JwIjf~9C` zTllGE9-T^Bohr)pO33x9l38QHXvK5b_DcR$vn{EXM_4Xh$NUi=q%H{qyKm(q%lQTm z*nqqqD<+R%NGD|1s80|FdA)|GF6!jqS~494s9FUtR)J z8|?!nZA`xZmzbHz6 at vkti1Xm91KL8>&sxoqHr&LN>r zceSWuf6TogpvYgkK|+;?DqaRXtU|8%U$!;X3JmARp+fnI%{`TQXET|Q&Xx6m1 zppb|3m2 z<7Vlz_+KqmI}29Dotv?2nBtxtsGn=tHCGF#;ro%*Nc2~NRT`}Wx?4~(zSDcgca6*k zX4>O~y!P>t^W)@#4?o~D#XiUJJfYDPp?UCk)qX8}nTF<>h``%H*u$INhqTr&bSGs( zkMq0@;hm<)ZHj`&aZ2`JFmVlei*6?S5ZRFmF}QOb;;c7rD^Y$UuZFvAk&fIE z$Ji^jtA>i${1^2^JLP(IV+l6Zda|iSs^2m`8k$suzzaBbyYz&()OFvxko5Z-2VyBWbUTqHS zhK+w*jf_~rx*`FUJ%+4Z(Babhw$`?~ho(zXhO!!`I=NgQP%Kc?`Vcgf at C7sQeliD9&*(#bm;C-1G9|SKt#$IP==-0S3Os+}fpgf9Yn+8;7l)- at s5BQ- zdhae3X7$8F$)6?K<=hpIvUieIi+-(jUCEW|=N)m>?~*S*MW@?V8ibE9P=ZNc&C at lw zSoB9&!cQi{E;`<5~}UXfSTgxu at 8N zBf3rWZr8qjZTe&1^pN%7;!yN>k>>rlxkWeAno*W(uC`#IHln?Wdfs@;rImd=-^)r; z7GK0l#moq=a-`!tGz~3KA(UOKAhX$++ at i2WYrnM|p~~+tr`Is~2sBsicJ$HE$uReB z$w*wUZS-zFUlZx;g;rW&bF~{%W72BK?B!Aoyqss6Y1Gt-J;koq`{7n;wD4%P*hRYV z^+qK&$6ate?qo{EzQv at s)*6-Dt|V2-+=T2J} zrj%SwNtN^arB-O37ad)3S!Swp5;wR$gbkXs6(=fx!PZ=7(|+8l8tTv*KMjpLeds$c zX&ZSTzVc|RS2>h;YVj2A$CTbB2oSHKxgqQ{-d+6^jD&XBZ9%vIc_R3sQ2Do~{fcyh z#0kensUTYBStXiw(mIactL^LC+jSXr;hE^$-*tuOIp8_qwR7Pa$?M${2uC7fa%mmh zV+$ug0X}Va&$+#RJQvR`(X9};uUF at -wKcaK7_@18y9Z`l3By=aH8wOjl at xft)-F08 zD3(|<^|-}!pM1m98s08)-sbydWnFDmZBuQ%o^Hvp!pWXam>yePk+vjIacccHJoBOLO6kO6+*&2>?W8l{1N6I_}=Lzaxwf6>SAaOn&0eJ)?Q60%o_3GfeWA zkom33efS2kc!x0fN&!u&!W`~MS@#RqU!RtxT!_?pB}-%2e~K_B<#?45d#N>jkpCU) zDWm~Xy3Cxsk)pp2NX-*FW~iu at V1n65Y~8OSzW?le7I at MWM}*3!a6!^{q^PdsC$~(Z zPI?kA823qjbRTCbQn3z at rzKS8qBSd-Co3ALSAC)-{UJnW%2w?s|I&)(qVp1RC$mOn zI$n~bG|_5Tl=I^QVT}gc(=x1?IKr| z84rU~vNdL!BvK9k9HRLB at iW(X7cJStk>s3sih9ErnZulf z0vFkr;BjHb5i`-3Z-+=Oda<;IY9IK#WFtvA8Xwxc-=vb6$I5zs$Vf>W9*I&G21tfl zMHuwV;?L*&5oH+sWr#)=_7+r_j}Dpq8~vY``7E|c)OSszuvy~yfY2cMkX5M at gu0wr zLeSSd=0OILuvD6da2|O)c;^rnJP at rh?cjUJ9 at +>31(_m-q?mv-9+Gnu3yH}e7IYAY zG239mCs$01P^Tw1Yt^(hbJn)?pi{*3*|+vk+lU2j3X$jb at M$N~>>)IR0haCDXcwdc zFH%!5+}3M=3FK#gA^MQNDIQ!56pvMAZ&z5THbppZL6Em8Zg@c znBZTNpD>2%esBL4cG!#IS9kP}OPqrH59Y7`e|hQls)XuT{y at 8WZsS0}R~Y#}&7G8c z=F!-fc!PyxTI=yc4A3SOt%ZS1VG1;q#3M at n&op4%zj+E3?rv^>*GLb&rl){1^nAgu zdjih_&z;+@*B>t{H31M>{myuF&E#Mr3BWgi2efAGlu5X!EaVD#NJr%bf;>AA#saSg zE!Dh}2FXpCCjU?(_kLj*%=?U8%L$RI_P?tE^ zAyx14TpiX`hgjm3??LLV$u0GsMa~ws^qN|U!yaw%>bdBi%{s!m=Fx4F&3g8 at o~ab! zn+9ApU%{(oO{EUz!EE*pSWj|kZz$#}SF|S+f7Me~so_6O2PO?hW@%_57mF!P>9yKD zZ>PoTV^v|eL6M(()fVTdrO|-`YuGw8a7)9 at uF4dWiOyAGFt)dEb@!{Rwy~aO>r-Lp z#6=jmGaRWknwdId)~%VnGxLfPE^i~Hw5o8 zEh_rZ|FM;5O0!0TvPDO5WI-pv)zZ8*?)5HnLK>={pj)251!9PJm(M2nNhQ)|^TluO at BQ?+Ys*PnwIHK`!8W=zf7z_yvM_Q8&T1IuF z{exJ^&qv<0so?9U6Og8jdmI5_EKNJg0v}JcM(fMrm9e?)^r`h(=lQ*b&K)7I<7lLc zPozJF=1H<%=pT}OjW7Myq?Ue}kE~aw{Ue2O|5bn8&yS;~fPGO$7`YL0P at YD$+6p$G z7e1SJB-j at a*MUPHMik1+QlGEJxWly;d%+j1LGz*`eJ`ODb5WvtW^glW^ z<+2JXI)*H?P5xzo5K$HOLY$?1NEOngzwr^}#9f%r#1vSZe1j2`O!zu(^x7l-qL(d7R91lB at h>fR=DN9^#9Yl5oJ51s0EEo05 z!@2r6_Q)IN!KLVsAW4J>A{zJ>bc);x7LnPF;lg*K at rH)i8?wI#FOLgl!?|;U*sU at x z`&{I!1wT3(?}=e=pa4fw?I}tu(B%=-bNH*&h!|Bp|K?olCBJe0!hnEKr}_^j##Oyt z|M_e2zYDJjUYY8T!!ucr)Kf0hx`|i5iEc6(#jn7zNy;<}HufyXdiRWC>-A!VL at qh& zH8lp>X!_h=gf=4I)moE=$|IsmTj at bz{GhN_vg+N>Om^-mtlLk4htvCyyY8L$tEVi- zv=KwTXBLP`x2XxJxOOVTF1fCan(Bv&=YxUhvo40~eTo(vu#(X2yPZ&OvWdSkJ??#s zhQpD)j(2K{?V-89G(G7(O4ZvWf7ASAN8`AuzgC6c(Uy*avA=i)QjDt6$D2qP37kP5*1XFH8xF2FPv3C)}HDmmm}`Ra#MfR3hYTo>!ySk z`>L}vC99^W7vd^{R3)3H^cVfAWtN_jC7q+^CY_PDK#lV>;YAy$`)^fTYypK!)JJhm z>yvMh8oH^%OE&cPmO7kl0oCg9FGyACsY|LhE1~U zhO_0tFWgmpX#p$c(J!b~?P;Hj<>4>PRURy#RZEIT(K?qV-GxgIM*)rNVs3#N_{H-! z%nL>8%nMaZLd8-QLdBXD at A5es@A5qwaH%>K!IJ`2D6IEQ1V)N;XDkihD<~#Kt6E&HS$d}EZKx;7cbE^=vA;5pQ|g|oU4x0HJk+qO;$U?Fp z1+y)G0=h3(6$gghOq!#Ql)$P3t}M8_*l_>Y9WsnVP0 z8j1MJBB^png$081T5G8YVoBCemzb=eUf(M9op&^ zEZHpLvc8ic=;0;UhmpQ5oNw&Uge=6i08vg))K42#QY0*3XEk+Eu%TmT8!9M9j-1Yi zoS0CmpzN4U)u7RU>cB4qvRu5)k#AWDVWN?-UOspEW~S|GdCg|z1WFraW~NMYZiCZ2 zgln=qhC`V}s(ttB*vOue#N8TmUiaeoTrjF-rFu#87xy6((~*PJvJ9_DG9EW3m*CDU z0l$p{d0p~Tpc-}ZUeNR!dQ_r5?jT#-GW6DUB6piUA2}oSEgmw{b at v%OG&INy1KlfN^R*A+qJO{-*q841@ zy8L>^T~O~l%+?E>eN{JjqBlLUuNCtt1aGP90T+)TzF7H(-T+JTtUq4q(X3Mxu+*rT zJIVcHG2;^&j_J$7+7`(ekCcXcywoezt_suya at FNCl<66oOB+augj^E37rRNr3AO}0 zdJ8OTY`{Y5V_h4?g0X4NW}s?cb&Oat?jCw{gOZ}p15E-iGgkXlN5N at kxEaS>+C3f! zSB6^GVP2#~09vdp+iabQJVP8*m3A`j?%aX8#)4yw5az>V#eGXxn*#24x+}+0ByrQB z*{;&wL61}1JX_m+du{h)J4bPsKT=`dQkXtN^6Yr)Fgj#$2c9un+SZM+n=|0HEo�KL^i)Q?2xnJ_1dNIQ( zK-AD!={!pm%-ef!3Z>#o)~4ZbFs0w zIhjsX5SLJLZLaXIuJN<=Zf&p%h;>Q5zN`j3Dpjm=uyC+6hmuIwu=sK4h>LJC)_RCwi zq;k~I5Xj=T)=S%u!5?QTVI*OOEwt!YQG8KEQ7Vi!Bm)&g5ra9yAp4$C;_&|0>OYQ0AOjF(!m+V8o2^b&}Bd#`6b7ga7U1gJ=N!y}J z+M&w?-vl<0p7ESfQ=3bxx>?V(ZP_L3&}RYwBxK~)c4*!-X>oym1M|Z z)Me0REC6mWY%rJtFM-YzA?EWg9p>Znb at I9%S{^zc+8(-3T35B3)@>6mEr%o%F^2{d z1`|JlKY_1|uZ*Z#B#i=Qyhh%ucM*rVhd(CBCX6Rcfg_Ak3{s3E3?qz6S_Wp`^LJR7 zvS4+oN|luIiSK0-r;aH;fR~j+FufB&kJhOp^Fdj~BH_s>;n)<^DfAtn6t4FXzV(`{ zWO1obi1#S(X{FTG{&i_L!A{Ey8SL?YW~yBdxu%PV5P-T)pZ?zso at j+fdu zJMZ;Z)njQ1D;_0Fzt4!*5|QLYgxE at w{2>Jdsn#$3(eAE-{hU<=NSt9nh+PKG5}>G` zLe8{IyU)?|=$hrMwiAQE0 at Nlj;;rgj9Q%-FRE_9wq(LQ2Vd8tIJTN}U(nN>}Ls;(3 zE;A^4Xa-#v7pYd~P2l#v4$XFm8LbB`+9?t&0m3z9Wx_UO?1n{8iLSx!friqe at h=0L zYX#8{GUFPC7p0>2h`z}(3?zfjhidv=Dsgwd`g3X+1%o+3DSqOW@;w8*+u{cxFv z$#1tnzO at 7;5j$l5G|Rhcw;hAm!#b5%JyL$KDMrcQE|9PDH$}`IB|lQ8fm6_P^!3PL z1PC=kIKrJr_l at ipsul7$LYUzLzIw0?1UE!F?~>~g{^Frj%XI zR#pg4xf>k>gYXPUC!HXAN-seNl-^{FOyI8UCdRJ{s#e(`?%ibwJ&Ha;s#XF*D5oyy z6=^3%SXS~6zFWtBYCD`yi(AJ&Wr%6n8x4f*Fk?IPPmkLbQ%VSKS*KuVZWH!tv`>`V z>p>vICPSYB#%4^_7q1lP7U>(N7}#Awj85I4=iO$APNkq{*&87{q+UjhO}f5UR-9kD zRN!CGq=O!IxB-%H_IM+$;EkaGc+4-Y8bSP&t(b{;*a0bE)P0Xl>JNuo(mpKep#ZhF zk=edW&^3Ahb1^H~c0>;cL0Kmy!dXvGu*k)nU%Z({#?r2~5TNeEWx at Ov zP6^J3Htg?OrTcKcH5}fC*re{$qy*DlA at vGk_$dU{m>NP{CGQeq_+dW7^-A9`B6RWE{xhRw??E3I%4 at 9YcVkuf~Z7LR0$27QsJw1oFlQ!JoeG z`iAEU{j(Chvk!lT^_dA4-lctt_$&Ym at 8MmceOlfI^f`CRzukjAqiAkiZkZ!K2 at OJO z&_6wIKYJ6ucvV4vChZz}A$AOX5;A{aQ8_ at pD8`L^4_w&iR6ckBBj+ycb1Q=$tf0&l zQB~ALaw`+Q?{SD`2jWBjMM;-PH8DcT>+KZ~%?pGHA%}{FAA&7Mu*wCZvD79hn;7xt zE%qXcrUm+lwgtk9h6Zwml))~e(*f+hs^PDSr&<^x8Mg;Y_9H_ngrvdthiJp5BQyXS zF^=$7B~xv`N~T(VRZMmKDx+oeRYJ?^tAdtUZes1~ckaCPUKG*af%+jjP`>bT$QM)$ zoV9ValfC}^E>Ljr?yxB68hAYNTGmGK%8o`6wd1|4qQQaa{WeghA)K&^Xv+jVGFq0q zCjCB8DHvRMt(moRy|xG$$a*5HcDo$L(Sa54x`56#vP?t&y`fyEvkYy&VV}$ek&(7P}gvlf7{8m$1`lAXo<)O5{xuX at b`1 z+O6KLkfgvk3?is!w0T(Myn$YA(UL$oczswBayLRAsT0;4nSK-~R7?*7uaMe_UQ2`y zfPn0(=`O42a4#-`FF-)?g!2ZwUkJ*O;sGBFYupp)i2fHKAi`s`E7LCmwL?L~b_3P_ zE3gDU9PpOvG}x-5(!l2|obqufSum+Y+)5n at tsi=M~Fhvl|z}3Kc*d zL+F+5)ZdE~5{>+pXKTHBU+ at RAgoHxqTt@^ zwuH*Q$TL|;`mN!l!oQgh%5_mYwSpwn`wStqCOZt~%v&Vq~QkFsKz?_D{WgqyTToG6CHEq(IgtN4gcNjd7>_L?WLeadP?-dFomb?i%)dfH>-R1|4~x$f7P?p#FYOxC}FRP at dL}h`l24GI?9UH>RJ&}VzIBJ*6sY?+dDx^1Ry#(SFgdHe9Z z1vTeO=Aa5ZV!g3me at vJRAY}k=m?49AyDgsrhdRfUrN)#4!p?zh^gN=$aQ2T;fcgmD zt1ST{K{b-qL|X=ZG>|HuNrTY+-g&BlxMBTfS+{w`r8E6yut^t{V5X4XuF1%7S73`vbD94VP?gfiSA1U)ZYboCl?J+ewMo|qVCO8TUF^+o4-_v_w( zz887IE_-oP6k3AxoMQSc+1(qG=hyB0V*}sB| z%*qDikXr~NV+6V!sXS!Qrxv62gA9;^WRgBMZ^S{TU5>e3>&57a1gueY^VYnyHC~Gl z)6!2Iun0MigzRIk#p(Wl%OS2daZR~$=8}D)>DRHDy2qWn1BxVBHB{uMU1Cu}c)86A zaR977Da9 z)1atavZ))Q=qud6=qOx|*Xzz#P7<(-)JpsFi2uI}%kxbcrVkPVq7~*pz>rj}+}+F^ zJstkLy0|>FdxvnpD at aYqBC+T#jS-Sf$^(2FvKcS*@Flzy2d zB##J%XivYO8NY~2$PRTvb3WVsw0CtE3Cd<^7ZMdHtbB9ZsUF(Ije33 z>a}Tn!%C5NU|B`ZIv6CVzI!L0yTP(Xz_h1YVF`l)I5XIsNRVC+b3S}6B%73jCPT=w zd`)yZ{Cu2eWYRLvp!+Ru$~d6Cw$6;xnz6RLSHf7JqoC(TI9*)S+8vF;2vky7$hgS& zoCR=l_AWtD4phg~779N~xj?+P%CCO$r^2J;UCc-IM7`s&uIY`lZB@)BEUY^)%tbk6 zXUgh#r8U^5tuok4L=X*vkfIG?29avm z$fqYWZ=(4MFj;CtXlew3^6H#XIeo-r*B`L|T at i<}lUY&!C_?ieMR5IR(2u;ihq>MV zX}T&cC}a6E*{)P2;RfDN=aQfCCEbCrwnV=oQ7()NA>;lg9WBCQaI0G51I67zG1EyF z>@^6FdpT&zi*N+`w?1e7OBeT>DIaf-k8r>6vF77%z7Js`!vrH1t2dfTA~%q;rHF>h z-iz%WU5A}O+CuCf&ILH8!tD$rPtZ|Zn84$*g|h25zTOIw+XD?opTPjcOLl` zfOI=NjMjadGc4nuTQ?fVidkdX0UnpV3wmIT`DR>c^Xa)fX50)ucneJ4b4t1N4Qdr-)S&)R| z9Fi4N5(7U=kxIRG6FvmT%9}l`@q*Jfbb?-c^t0gTVelU0 at G{kIUc)15>RIU{+qlB= z)!{TZ%v-=XwVMG3P~cT=OymvFKfzhH2N0i_oe0p!8DD(ronq)#U!zZS$B=Af+zrRt zBT%)0w{i8itqz#mQ7t!A^gksmi#2gAPY{}eMS?qdD0vntPSEMBNcuVJ at qNY|#7JM> zoqK$>E(q7y=CKHiN8Rs+t#NXE;GgjAX{0ZrQ^L>*5{>2a-+shMyzus8R9tq&*BgG# z`M!=yIEdshTiP`5gxS*1bIJA_(gYo0JTKU7{%S9sY2Dw{;qiiZ at 7(3`&qLTk4#Y{SGjHo~>gIANO3B|D5h~nEzl!*S}T@{U7912~z~? zBkW)K2ziGZOhE+S?UCy9K~>nLFm5v65Rd at BS5>`V1lBm!yZKy`U6-R>K-O>toRsQhkmSUm3V~MnN4zXZPU1<3Nue7e39W>~hJF+6O=w&R6^=dOS)$4d$Qog%X zsr<=#7g2ntv|p)KWPiy1v%zA*i&)cLTekPh+Ob2UNn~0&wM&ns<}*=^FS6Y}3c at juh*9b<=FJeb(zd zJTWZ=0~4*kF}W<;54kiXKDc}Qx*|BU6L$Rab!-1LqQtk2n$!m9CJgHoXaZ}!6GYaZ zl74e|1Cc|2X%5X2MepX4Jj-I;9pqk%YQ-Don1eRJnc(kC{U-p6btWLHwY8}UN#%{= zz*PE`T*UQzX5q5aKi+wWS07eJkrj#bC0@$U?gst?JnKsfSHcq%L?OyGT^KF-65Db% z0N4|hp*R~*sA0+Ch)deP&g~SGSlL!fxR@(z4c#!fA>{brc$ta6%PMCk;uGCP6ZxWB zgcHaSxPAa at gG+nhm|J at nnp>k7$H%;sm*(9T>%o3qLt#e}MEpi#BVL$*os2e~UuUjlUR8L56_P!22I5$HLgw{QsH at i+qD7z1pw%6(PPhl#$Gg z?Ou_Mh46kl1i6|F7CCG%EJVk)s>!6P$)o7f-q+W6WB%#M$M;cdP+!k!2m4vy`JYeG z%>86u&g#0q%?J4B%=5){rzQ3AkrGoE1_Vx-Yjj`9QF7^vjmY<8I5m3&z0xxt9G3}l zfUj&sv^LOcbwaOv&%~lDOfGeTLvLKKdXMc05s<>JY110iCOeQk2 at B9*k?oa7{^Hs`W!jm4j@%~{Le^Rdtx08B=N5vIk4Wu*Q9aI@=jZuZ+PIMK5g?{OXJ z09x2rtXqTeSDa|r^Y)l5R0g&tlfryctpU$$E4DnnlUA*9r#7uQX-hW{>?M0579C;X zse~K?lNYl$@a#2vKaL~;ajbE(H$3;!040{V`5Vf6D}WMf+}sVvy%u1Gg`bni%whh9 zp+RoIb#k9WVCG`^2GX at 53^z at eqjONeU|?dBbyt-0QO)4Np-|LrW!n&48V!zUl71?Cz^}OkaLD?q^iHij7Tg zQO_)Pmf4k^+}u%_;!HDOct at HOAvKFD+A6eqHN8=-?jYW24ElAQpiY;!`K6IY?jt+bo~HV_V}Da=HsI+ki7P0e=L*&63E1cdMNB!Fv; zTkVE2f4pZQ_D7m}zw#IuvT-)dHD5 at D@_VYd{-v=pUOuvT{(&rpiDS;+_0)}yf>S`> zLrWntQTCqhpi`EQuafa3BtPeL{Cp&VH${Wsn<$0YWuBJa)0r7X8Q at MpZIbGg3=EIe zFjv6KX3Uc;AEsl)N7Ij4zs}_^!pQqU1oaTq+UE}uYErk~e0TvV5>CQ`E_=j|^33c} zUkCkjv8|`-`(xu6d`~3LPb|GGWGXK;fn>Wwbo+15j)~6RU=LMonm^Oy*7 at 3OcNP@q zu4R>-_jVDe(!FCm2xnS6sJFF(r49y9i8h{Wb6z&VeqYGbLIj7ZiE^|y4>j?2DVWuV z6oX=2D}Qs3=ZI1!0kCDm<1iI6>yXTfzFsHmg2y8H`Fz9Mu}kr$fDu%2d8SzfK21Oa zwN-!njkY*a#DFONFg`?LRLvu+r8N~XCDzXf=BK3;MmtSqUG?`N$-n*YBXiqQBV}?f zRvX1vfp*8m2IUB&No7-r%W6X{9#y`L?ib^%ub!7w-_T6L^V#G z+4%XaFzaGPqNL8wx7NO z$3IzxI~ab`e|BCgyZhdg-}Hs%?lQ+aW{(~t{%T#hGntTMU~cN1ymOhLXQ*lH9Cyh% zTmr6W8Q6Mf9r{n4Gdk9G&fQT at WH36`buQg;O>8h;*LE)4F->$ZUe|T5-2FQI34GQS zGJ4596a%8_3Yol=9-0E5)&y5hRuFMcj^-> z42CU!19u7&Eet!&0%k9p zsEje1Q7%<^yeDKZ(x#9=;!{dWb*&)2(=9b_Nan3T&RiI);?@STNuDx8rX=fA7P&OK zw*j^Dcp_k5CP`xcsNf?}J at nELm86WA6~~VgH#mS4Je>j)22fU|4Gwj%DNm=qe2`NZ zQ{@Owp)Mlfyr+8-{V|m!h}OD$eZ(VrL|Zacnv?zwb)3pyttOqS%W?qkPPU_tk6?u2 zoiiY?*E at iFYi^+Vpk=|DQ)-G4nF-~W9xr51E3)5<%H`u_C83&8-lo^AN zimRRWYnX{Cq)w%pUFERoigUiXR!HddA!wiVSLhYyAWiN#CY{8k{I&F>)9UA`6 at v!9=%hJOn>FWjhJbMr0cMA7?$xKYgg&RW#nT7C#X<2JC$tq;S-5KbmA`sf()a<3>CpbMUdmGaloy;R8K%YIp%cI$;?*}zKM0bmF zE1+TA1eUy|s3ou+jKdN}{C_Ar%b>d2ZA&MR;Os< z<6;ys)n;syHdU7n0Df^t6udj&=S;$gwnZBN!Pqwd>IAJhvoNAwpkEA8w5Y#`gPC?z zE3t`Dw&HGENFd at ijaKAN5niJ#e{ja7N~lbfITC$3A3$w)!}h=>t+9n(J`IKvvO#&|=G^0dWsr zb)Wk|hf#sZ{Wz%aT at T32-{KyS2LeNoBnJZNyWk6#Y2VPnd8Tx~BH!g-glZAZKtkB> zp9h_*9+(E+(U(BHV57))?CSoOhnj(R{M~ev_t*y~mLM7MR^-JXc?mF(=?z-mME4~g z^d4-Z&-6wGejm6^M- at _fd1nr;e#jemCpH+5%3})nXvsq5$n5ob!5eYo{aO%GgzJKf zd2|9BSD1^KS^4CkDagfQ~XCx#AN|B_J)tR=Sx5p+#60#Is6Q4VH+I(BS4-e7`H4`yg0S1>l zeA;wdUv#`V6e5uuGyGK!4l1r7Y8c at 5(P%I(~ za~>l>GPKZ18eHmSBduvNnW5--u(`tykOMc-9Vh!6hOK99gcPJ5ylT$6zB&-kVpKZ zi`Dv8Lo};~$W#z|@yWGzatYC83xyoOM{>OOnP$sT`uVQMcPn7{0qN^0AB at fx$?)Ur z^lzqM#5dWa%O$bRi|MLyvkOg)pSs%DTK}4HbT^q3Vxd2LSVH=bF1-DdasF at U)s%a$ zq$S*;?izZXrC;_&9S$ALzY;(9(yQT7iwv`34cFU_ROhIWuGOOsvwGLwms~fNx)=Es zu_^3Ogs|IC6aIOb?)26=1hxpmj)qP^Pi at i3a}W96U_-1cA^ zJQ$OIcff+FOE-e*l748Z=4cL5i|Mr_^prp z`V_7`or%^wor&hmGC<4(`Pw3s{<@?O<2nnD=YS#9=Aaqlj$VBKG8V)*LNS%8aAhCmTEd>{zA*9LO_Y&Esa-f76#}ZiLoc-t)iau^c zoo)W6x`T181y`EUt;yZrQRtldh#%@UzD1jD^`^K3aeWVmoe`+q0(>dN4!iOkmr*LR_sM^{p&$!Xbm6e&5o||!!EqyNI1vNBeHQUf2 zP+l&7H!TStMJxU+)?4Jk+q<}Xqz?Zu3{jw+McS|H7OjGzGgHfiA=F4lUJJ-194%MCqaJbQdj z=#si!xNFQ$gh&-UL#S96^ww*>%#*`b;(cN78vyX7;y|F9Yo^hg|@-s7Fn at W({6PWcNx*Z+!cH}0W_|kYE1x2lj8n% z`we^R6nm4Eg&m(|F+5$rbb9NF9C8FZ{WCh7XASBb*s#>m*;^rvt%6B9`uAWA&A=TV2BnfnZ(V+|)CR5dGVr+2>$*{StdpR5Ca z`bvnb*-My7RBA^PJ3GDnGH>lmnSnQ<8m%RJucWyt#xD)xGqo0)mpb3 zq^OCNLnLPruF8fh7|xT(mzF8(wiTEiQthNhnU=9;U+^So7a`7jB;Yc2K01v^Ep1Ne zR^IxETYZ$4%O40WK+<-_)~&1k8d%d8UV6zzEEw7Se2LVN6fd~nugHHa7G;)f7Gsu8 zHo?-%GEx^!)?b%phAfq87DYD1GEtXiMm&TtL_b6@#6J`e2T1_UgXBVRz}@GPyo)pB z5{FJe#iQtweZbxClDbRq&+-Ut9>yJ+RmtD}hFEy-_noCo?(}>)h3$qr7uuJ#&r)8c zLk}bF41f&LmHD%?!ROAM``pw6jg1S6Go01>%s2Ynuc6Im`>DDCA3m^HaNBZQayzDT zW;18AuUn+EtUI&}G23xlq_bsnuG_UtIS)E7I!`)pI(P4U><7a^Pary*!kQa9hR0(y{na_9qqNV;U2#wHpJMG_Tmr!^4b>HP04$g z|A817UUt}T&LIAVxmueWeu{Nfed!q!uY4evmo+F98lMR^P>gH2!@O=hXvR=Ef43V1RjtyWl<4h3gacZRf5pA8!f_BOu^7E21 zwdUSk#3L|D;L()AwD{4Gh2ht51#lENn&KIz8KHRsI7g^Pt64NWN2o!qS&+q!Sc+s? z{M at G8Vb~#peL at PB1XCIm`Tuc#a*ayZ(ajM|3j=N99U2`9X-BGHPq0Osx}8h6cle at j zqPH-h)v#y`s1+epH0Iv=APZJBsHOvIMb<20wy6SQA9M}MD}YOpUdOZs3|)pV3T?Ve z5l$$94b?MEAmnJL`KC5SK+=PrdyXM}m(B}nr}k2`6DsnF at 5Yxd4gMm0_d@SxZ*8s< zN-z=Fp-qM>`aVj^y}^*Q%K#8=_(Km^2=Z@}V8V=#ygw~&)8J=()7<#E280Hpw<$D7 zQw>0Sv>Q?ilD~0w%0CZ;4 at fl{c|{1(zNP=3{sa`M>ZWI2KXi?B~&s(4ELJR;(!>>>E*{92(JN?Hkc$9Ufp; zCBN1V55kFN#HNI};#a_6axS9KI#iOWuV^ck{i+L6Hrq83t%_9$;l}ZzzL at Wnr)18mPf35tJs$kJ85s9 z|5f21AwOzAL45dt_ at 50@{G;&y6OU}C^xt at 725k)M0jbM{@cJJ=tWkS)Yqf*io9bqO z^iA7+o_4ZhPGG5rk0)$+v3aj5gZ~?j{K|Zo+sbBT`MY!NLP*g6GjrSk3Wj-KdLIMg zA-jAy%hxq~OK&U9p&8~KLP{M%u^2B81hxZrAkLvX5ciN{eJ%leIxYIK*b4b78lqgZ z*pQ9uXYP4=N?Y?vV`s^(#zb26hJF>7?ZMAZ6%HOjGUMTneUK`rl at 3G!QVtX2MK!Tb zD=7En%kg at +M&CzlJ9)D|(|~ zThXP-AFoPjtC>WRT!qe6M}4YR=iil>a~|c+elMtwnN)1rs{eFDnxf1b!C7K+PTjiZ zfrM{iN_g1Hgqo$sX$gUbiZcn(+J%ZUo$f)>~(5bU}a<56Ds226p3 at Q0cjx5;ggf zC!X=97pL6Xh7M&M2|iTXIXPP1`F-k6E$--jWu({1#4Sa3`=E|gkbyJx5e4ay`^;>7 zh at 0#OKaUB*kjpn$rP(&<(ujCZ at Z775pxGM$rO$`lno7n#IU#U|6X-GEXUKc> z=~{;!x-*<%TxwnJ at EV=uWw$ZlcL{CFdOOky?=>LnZf+#zU{oZ+E+KkF%oa`=UJIQu z`^Ku_Oee#(`dVl8bs4(smd$-%uX31}&>6Q7l&kmrsaFo!W7#fyvCul=9ytF?f;Cag z?el=@W9rwHo0Fzjf6Z9SN0H*m%mw;|b>9Jj^z;qg2JLeAqj(GE6PO6Ng%&-RZaa($ zXbX_nC&jcMi->VEEIyy0v54g%jPRGr55h-5u=?+w2jE at Xn4q2sd&fKbs`=+!Pwg_* zbiNZJ&nFKboP+^o3p*)@V*A?y0DX>d*ianT+4GJI371=;dec&>h}fNfH8IDG=*oHR zg%P544TI24_!@*9)lH4ME21p%+x8p?c1j3o-+BHpN at qXP!p)uTK$9;bDj{gx^`|Ni zfk(5YzFGSvF>Fmu*1 at li&9bfEXHOm5FInq|zwOD!Y62$1qBDD%GTPRbd%9xdou>xz zHqFk>@a0;J$tFxQ2H>I*qBZpM-<&S!YVY2!=kzv^d`T3#(kB!MHP0_iN+;GF6pbWl z5`sl`ikf%Neo01MJKJ>YVjGIpjRg~QkmS0wU at uRE0DJWkxVhfP#@_supZYxyiqY3B7)-N?|oy zg(uJLRXs~Cp|hm()aAm+(y}MXWye&Y^&OO^#8ja1U6ik;YfF!LmkC==7mQBj3_EYS zVL9m31jH0Au?|Z6Fu27?T;KxdxDLCa#3uNZ^vtEFDl*WQgF`6^cl6y+KHJm0T>aZP zpcyCGUF+vRITijtS}XWZ{rxKsIdx4-PXZ%65E_j&#*1D1Td?K&BVSJmtc+T3pku(w{(U(f*_t at q5eNKI{6KFeE= z2WKm6Zj<9dTkmhjS|9u_9aspw$76 at UA@J9X{KsL)N-o?(Ub$G8?U7Tp{B$VBf>g}I z07K)5$8SB%*AhWrt|@|055^$EGiqRBSdB1o%(^I1OuHCSEW1chOuA^CLwpRsi~{6( z%)1y+%(}>!CjnYtCIL#u-yXYq$gd%TK3$6i6^_S$DoH1XCol^j{S!jVdteW&Am+xW z3?BMI;i1-hrOEN)LQ8{DA=@Rb+~7AK)j2cnCJ*Z69?d!PCQCZ3*hXH;*FoRz)m;Vm zi;1FJ0o6;wkGh9D&g2A<8BqME`!8mw?MM#uFvwc4Nh9!HU1x0pcA zIFv1?EMsg()EnE8)H~T0{UqRo_o^yNkr>^zEhFaD-o`fx$9F(V*yW_8# z{yaXJYbN62qUozXd0Up$>=ET?IZVVn*6mXqfh2tyU$&96?4 at z0k_NZVoGgM8S9Y$f zabQxkO?7p+vw0FcP1k+RRbxq)J73QnU2}$>VYUKdiH{G_Mnjg=?KVQ- z`+>j%ni1}DU1XvFcXW+__8=G0dMvq7mG}10SLlyO!31I42yQU0I6Kbi{nX(sNF+!m zNT^6s+~Pdx1f~RoJU||K=k&dVZRg~EjBqo8I5+NI6Ff+FUM at i`$g21EqNDY3OIICV z$pylkUukH$JV}}Rhs$Px$8YkkHs$w{e$KnK^EG#pS;cId-Qj}$f;cVk4zGwWM;}au z-IU#=-L%=tcz*b3yQ#a$vlZbk##j^0#MowLvP`&4wERQz6TL1wNIqbh*v+J3FU=_1 zQxLW9L9n!$pgL~*Ky$^Dm6saZL3X?vX=+|8>{V}mF8oHy>3|xN;P~3vPbx8Gi z+HP|A)DwjAsSYSym8_QTo&CKGS{;7T at Obb9L4&7l z4 at IHp(^|I+@^+-vqeO=^FpR?VbRzr9#|taxb&4wGb$k-#GSoG9&_-!fG+27Wq#UK+qJzFYACG#pRE$vT;I#HJ9CXLN0Ov0cn z&CU(hJa)hm+o{8Q(dm=HlvDZ^$Hs4!_Bq!0bt=RpQY2(PosVP at 8}wZ at zx`^0eapJkh at FB}fp!VXu_ah^LPdW?bEgX(t2iKF{r$&ib}?B{Z1U~0|4F98k`U*) z__u5sDW*s*^A}VA>WkB=7c4we at Y1|_J)@e1oKJV_OD2YMgE<%Hr5!A? z%^;{Y#PC)oPsjnFNqBreJZTA*;uQ=k+{N46St#YLHq{&=$nxQYx5rwcuhX$?_@)!| zkc9|8{_cf*!?~2 at koPlBu~^En!u_&EEwL5|V+Z4ty_C3whKrms z|M1QW at P{Bq(WBg>S`2 at HHLF44-B-dS{vJCl5c+aq%yDT{tX~Cdi8bY zYy9vDBo`p2-8BzNI#td7i at 4xkVk^rtMB?~*ymDS=3K^ptxy-J-&I)x+%L2+`(Y;kV zc^46eC7P=__ci4F#g;4=kE$xSbm@*8tp&;pG}L?HoKXQcEJIO;@C}dY_gFfU5%&?s z5VG$B6j>2v-*LYy{LD0m9VuZq+va6BmLM}l$WHoh#Hwz#9k4QO_#N$JE_{#L|L7O` zZ!$-|L_vf#m1pVYxW%Eya~yICSm}0qp>XdzU(F>O*>$~a-rUeAgj=t)Mna%+F$;Uy zGm*iwwzCh9z3lk=zx5|RF?lU`{Yh0}2>P3ob3aTXmQ%u*x~(5kC~-x*3jc ze2WGnqg$(`4o8yBL{x7bvrW^`ohDu+Wvm>X-poI|^dNf1+uo$W$sO>-FZxg|j5Z$|RqP zV~`?eAw&vmU}@hJv1CLmDsEKC!n6855|bkXt%l{!-klt0LHaDp{zXJW%D#3ogr%3n^j at SG#U#?31?c+RTd+PbGV__BXd=Y$12Zbm7e9 zM~`{;!#Y6<>-V((wb_XxKNU_^E=@`x6XIHrd+f}wzLh!vG_<2(V8E+whA%KDMbAp< zT!BYrXsN-bZKr_Oj5*MaptxEw1|%Ld<(8}`_>}8Rx)i=OaI<(<=eA%I6xs|?h at SHM zz7+_ at Nb2;(g_ at zih2tN?IT#c)H4o5G)U~&&u1;cT(qe$6NA`Y(mQsRFLr+76i{cbY0J ze77mvJ2V;QJ)2uWAvf&u5622+$EE`q1s_70epg_W|8`Uq0+MCtJ~55>)ub(+H8p!S zM;BXX5Kq$W#(`r5^$+2}xWtCN0`PC|ewxI&0~LY*yuiDHZwik7gW*0ve{Ex#T5=s# zdMlk-dQQ18i$sdCdZ23@#ZdjYYwkY8m_(`^y-(^G{pVE7RMIibRJ1YLF}yL2RMs)x zF{mT<#xA!shM1R&oWg6hN_!2PsW!@&XG0ZNi%#`De}UF_bQlddK0Y<%C!#GLhS*b| z>C)Y)NrKWWZYX#qGeAjRGx`@s97=?wFq-~`FdMNoX0sOSbPj!1eyemgeNKKS at 7~KF zI~4sLI~M)lcA`vXE~89FoEMxYE`OS=IBz%yMH6d?{?RnijW)f{X zrLQ`&@AN;w+yau{X`L1T!-WDd!K*!x1!@mViP>d}Q0InD}QaQCOq z8{c8?kRLvk*W`vNfz)P|hy`iV(nTQml?V3{3;e9J3A*5?&b=16={bC<2U7&;kVhE; z=Ai(J^?71^kB1X|5aL9~xd7bUv`vl4ZYLQ>HN~CJ9ood}&WNtT#1BJ8+oK+3P)h>r z8$nw74Py+GRMi6;)YTgLdWBNiSWCZEK)gT?S_7qXw6!XH4}n%GK+WBeuW#N%K$Uya z!$)v%n~dK8awPGh;Rbzx_)D4Nq9E7|glwDVh#DyULe?hH97T-%Ugo&q078xqjCY*V zeF^dIUTiaXDS9AlGx(>G-q|MR6(vL|n9t{t_Amq_UNUIYdw~UC%x$zuz3hUNPKY+> z-u}EVb+#$J(13}j{o9OQl0c>I-9#ut3~#}{!pKp7o-_hw;lQZ~nKn604rb&lrI{DY z*Cr171{p#LE%u35lq|#&+U!$auviEd^lpeIbU3U75+%%PFL}X6uZn1Ruvv&AbUbPs zLG~ASKJV=5-ECOWnqajML1-nkCqj92D1vNC1m1KK1RicN98VO=818%_L*Mz{Y=7v* z^Jl9kAA)4IX;~^W7$W&u9&QOLemJI$zzKKg$J%HtUj3?;AkOuWK?7cEr)hy}N?tHl z+a+fk1D9{5SIMO*eYVJd)nfHwHvb5ee!yfnKBhPLf7P&ic!)CUKdw~m|D(tLKPlM%^Rl8jZq(i8htwNOophP6 zk|4QC75NEvx&nv3*)I=}PXhkbmG-u_FYEEPyodE1+KWd4+*AIO0*9 at K>uIlVyVqPF z(h~1QdK-zom4GW4l*3qQfJ^=2zz)rl2*ZN+}iQLq+fMV)4a)~?;6B#+~wEI#bV zZh3{NeIB(m@;tzeUpl3elb*n}F;7P3R3*%f%#i4n3v15gA!{_mNveiT>SuAyp5_Dt zfTr{Tk!8dd_K{302L`vK#4|cUI$#~?W&Z}w+NyX61IN!bU9hA6n?g`@;!y!wiuyT^ z#%5Y!#DJwolfF@%Cfz at +_skx5^84A9+1{UP^yepZ zaT*NQ>qe{d6Upbxu{J at y{;89eg`Z`eI%>-e@@#7OGz)dC1|qV-;y>IGp47`he}TD5 ze95ee4ZI$gNG0g+5w9MNSELJ>x2isi2b+Lw&dF2Uh)a)nJZ<22;k|r2Je;BWpbBqe zV+<;9_lce_ariKGxTb95l;f74hK_&yc2G9HdDochWYDlhTHr&8^gNrKJsES2^vgV2 ze^nn?U6()eLce2_^BKD1YqB;uU=>&`%=dY)5?x0S#&LBS9x%b~XN+Se9bOa0>66JO zjh$ov-G>W00k;Mn)8~B_Jb? zr!p_(2WbklFcv!H=RFkZ;b0GE*q#YAas>|GdL$RMx$-)KQnS`YpOvnk;FC?2 at 2UAN z9r~Gcnt#YzN-q}rQk|Hh<(O{%tAvBczIy%(3 z`Gvw9tqU*GP}a?qdp-1%HMZQj&5FP1*Y^3(hKq$ySae-YxDYcoj at O=NQ*#J|>D z6{(&|{-+NgjA8%tB=|3+>|{MJbPbH5cd?{#@(jvS8=B^C+H{mVXmA*CG!!gF2Enb# z^186p+=w=?MX)8Xo0tY;@%dXlT*SsGF2}P2(M(;>s4p;2N3Iu1YWTHn_C$A1Z_j6) zQx1nOSBLjPAJc(W0p7I)!kAnhdmi%;+)S*G73WLtHa8K*v02f>fuBNU}y z;7hX!O at j;K;@KbMc<7u`oQfO}rCb*lbwP?%$Mfh5nr at xD?0mPD3@*((?wY#iO~5F( z($pgga*j_Lwk6u5wlMZ(p#u{I(Z{a3!R7PW4h9pBqxvk at coTT4ta%d+QexiyCR0X+ zC!SKSDJP+>iNJCsjmJy zz^)IC)-(xd$Td*BcI~{+mTWE&X*goP*4!CXWQyJVWlxH|q%7 at lGO&KlKUD+XCBlSGzD?`WMa1C2*t zH%@+4G_~?xC~};$?a#CEZl+=q7?9kj;C(VP;Iy`x7thIYB+TjRxhO4 z7rnX$_Sc$d^G4L)UoG$^pL|^_9DO}?NAWjKHqGS9Wqdp1MEhA{O71R2J^*C~(4(j@ zm1q=cay9u2xvRW2!P%y&E|TC5P$lT|K(c9OB#aTN3o;|AoLzR|1z|ds!|k!0DN{3~ zzu%73M+rQgFC2<{Mm?c-44(W0J&*zP&KZ?TaX!>tpY#TlR2c4{!gnGAp)b_DiH2dH z&_~TD3~{jP$cM^9hg~Bvps2%0LE%HWJ=k0CI8XhDwr8mvk|RSYw629O1A2r#8o2(5 zVntiZ at Ny_TbNKI2PfJrNYfH`KHMCaS3i=lmc7eiO5vyrJJ!+9SkhxTsLZZSy^M~kC zXcqF9s5GR1)+(jRN^=z9t4b8%af&m!i;w2?QTg^3s$QVA9fe+``o=Sd7 at c&gUZ4k{ zCiu#qypn$Trb?Xf^cfYSWFERWKqcK&`NXB%2rZbD{5E8sDLMg0&R_aOOI#bKyij#0 z1Vv1Bs92CbOkDhgjP#1k2TI at 9mX-*+!~om|vx1oiZ=&UnjoNP7f>THLO~3Hd)j4H? z8&mIvX^b#~=T{VWmjvTB94dsi^e-X$1f(Gb;;?-Z+01*Oh*y}^{%*eduO>dhByCG9 zM-g)jifVzAB*L*+;<3M5qD26Ts77C6YQ9{iukKkrrM<|ucAI?aHY+_CDEpO^=^Sob zjPETs`}l7Tqt at +=8z1_^2Uw&JAGrV1Q~duMlr81hOYJXRX(_d`j$tj>3;)8K$~ZrL zIvovOC+>57rEYz2pQ$+seh_^S1OE6Xg}}K at TaiOsjm>f9FK1X1h0J6|cbWUpH|R(7 ztESS6=S>$o)m68szjP(bgGtx48T at zeeUA@o;Cs`S%O*7b_!_^<80anP-lUd6u!7 at b zs%S^ZgG1^CHGye>)(-QvADmP=6E%TFfRRbqBV?%AI591G`VyvP1{cP6dA%L(>k`qZ z#~*zJ*QtH{*A$`X<7;p>2V-zl8A7Vu1Ak#k01cC%N3&4+YmQKYYmd;m at jU8mlT8(E z^EY*q$UpI#|N0PaY}|;tlKFx*+u}`ihu~TZu43GXF5Bu&atGoX at lWR7qSZHjQ`}*_ zzK7FF4^(a$eJO+vyxN|^iXtmyQ`@m7-)^pDOCD!H$dQ+~EQTVDZUr!AjKxr5&1Ni+z(<9_C_MO+z!Tvzcu&)O?hi^2MPrPW679YG z2rogNSRUb)7&y*_+O%C_%6-!Kxe#5^gcQ#m3ie^hfAR}iSNer8vt{)yv>8jO9s8Nv z9Sho}m6}hfD>;Tc9Es7m4Pi8&+@jBHLWQeHGqJmgQH$z*_&XGTERa!Uiynja57hOfQ& z&c7GdO^+0nt;L}|PxcAWz4^|}W>+{t-~JR~>4thpnUlAV31<_I z+_+`gAeoucxDL)KVvc+zITUN;*^4lHclzWc@~yzSeM*5oYhs2XeTfemTM}KCwzSJy z;J7H?deUUcwI9R0fH7*XF|mNJ)|+^yqlgQ;K%T;08nzG6(1zyhyfD1zj-1UB$o$)uC(*GD>+Y`TM_pG_W_Tha}kfC zYc^=uncmr)$CaRzXVRJ8mEL8KCzVH&d(t&~S9_m($|dOkfSEuv at cZ{dWbh2{&z^JP z8RL8P?u8Y8&x-=vkt<2%@UB^4;?p;E#@X&QW zEkPID!u;mm%a;*5D*d?qW?``XI{igEF8#?n**hIOu>FlYGW}{{xc#5|D@`UZ8+UN~ zCHnv7?fRXl9i4u+u!^ulL?#?V_6~FJmCL9d4NBU_916~De{Z3UvC?w=ugD33&N+e7 zTvuMA7FpyZ;+o>3&?DFw#5$c~4g1K4Gh)W%Ka-3kml7nm>zTAihBc`^!n zM$%uh_;!m8_&$5;-d}o|-8jc3F(QUgnDC?=|2Cn}tTMj^fX~Hu!Z(YKQIYfDpS7|m z)CW~zf!t=Fua|}2J~z~UBsDtz9f+EXy~(-$%R|mJYX_q%f{6#a{g?2YDx8*4D4k(B zoI$e+0G-0Ln6Wust8(0cT$52#We;`E6rW$VQnganrqr&i za_70l44suk&kNj$C5rVGe=@HD8h1A0Yti!B}Lf^$H at ZJJAw z7ifX%OUJ(84ba8>ZJWpo3z%dhAAjIJqFavZBo^d1K)i(Sk at Qg8qQrG<3HApCY*gw2 zrGSus^L~7kP=TID)lY(C$(C8!Znb z{)BOZfe1Zs_D|Rc=-zioa)ffeHV+tZcFeS_N&2uGnu|&865*%JwA8B*#@hY-Nug{Y z5JZa)JHVL=yDTPeeO8BB1ELO4`BUS7BsU zTCnRW6%P0!RV{Kf>NHO~Zb*cCAZJx_&DeB?Rzq;L!P`!&O^0rN6S=|sG;PEjI`Nr? zw;gUA_QnDr at v!jk at xtoeQe^5+oDW9)&*R1a3uAackk74o7B-JK|M|ZuhVVMZK?(LK z-WR^JbM7*;6b`c#1{)j>=cn9?Nt7PgUNZN&NkSxnqFr}4{#$%4A z1GyX*h|wQ>D0k at r=ntm?JXpe-K41+sKaP4~Af=+z)C06gCSP*&)Q$r*NXA}TMdKbb`*06V;jA*cm9O(L&!m|a z4>!j}uCSd9AG=h+#B1CW9-VF1vGCQ4Z}4o`v)MfUBBxWYxu0Pogwr=Bj0}4GFU0VG zXyz5&gl$OMJN_ at k(9y=%tk=_hwUW_Ric5B8dS23o_W%hk`plyODRu%VZ__7uHpz+q zdXHyG`VYhqDXipQAcn?3hGmyELUK;bhN1fw1F{*&j!$X?0_MGJ5*B!-0*N|uI<=zn zk*nG1gor~&JlfCn$*~z}9Age0&hPY&+`hvOEh;NgV<(AtnJ>L$_m6!Rh!t4hULo&S z7T8kxBr0lP)UwK(_FLy=*;&#G at bY4K1e{EYggVl-l|HdWo{3IR))Y0si$UIV$!Tz> z$(viE)7cQMk8h7qrm6wXg(OS)@D#1)9u2TgE?9i1*@cPor~-LAN139iMrx`qBVJvL zYXiR;hT$n%j(<@XSs3DqWzRLxBkIcYTjsbi(sk-E)pd`|(bJPDp_~PH6*~?&@Rt(j zZTEv=h5inz!@Rs-KY_{L4u%fFUP6Kq$S%k50R%u2ArL`0PnCM_lI4wceuyu`szj#54Cr-54ne2a(5wyB;w=< z(s-)Baw>~Dd)m${!z)8 zoqCf+W-IT(%gR4$`O{?6dBS<)GJD6TA3h8lkqOt3v!hQOGq40G3BVyPuzFCT#ojjC zi+8$;Kc(D6Q@{IxlLst48Z8}Zi+Irj_4vYmZdUP*MV1GI)k|0Vl)WZ-k2Vq))wTR; z#LMj&yW9*r%#^Qf?Vn2yXvP(co*MC3l}zRb!oZayHo@>uyTVHZEoNOB1TNv|S;X-E z+)d0)#NS8TvL)%FuIdhvy|S9<`zHST7_kFp3;qI+vBgHlkS)8JlyA1xSBq8Wxrm0Qw#RM#3P1c|k&a77|VcN_hcM*|S?^hBEkKpddne5CnDQ_b2mnjg44L7KW z7W`{e6bi(Iv|QpLy9w`kshf8tkQxc^dCKZ{M at 3=@m((?+^4p*wG&oVC2pdtXqko~w z61t$q6Wo*#x*Tx^uP>(-m6aT9x{KNTh&Oa=}44UG!5S3f3yN^~wnL)oFkE^=p9;$&7~=vHzx>c$sN_(Gj8YPf6vk;M&>v|Gxy zs^)34&e%-|rYAVty5fB7*U!N?)HqW4UnHT`gLo{vzSY2W-!c8GIMVc|a=Ji%_;3#O zAHgR65yyWg85+2)iDL-hkENbbSA)VDZLV`v?VHh2|Cz(!RV)O>Q_8O65Jj0L=P#z> z4*jkHk$42LGP^&GGwo!rV=lbOD_u za=`YogK!~DIa!>vl=w2T`|9elMEj{&Y9*0M%Ejt>-94cq(d_!ov5R0_p#JXHx#+FQ z%#ZCOw$c^1&mj_a$yKAfx?PP%E4(7d&rcifSM-G?5NvyKhTu!#Qmh>Jujlyn3=zsRry#)b(}>2 zdr2G~5$rmVr30atbN(*;yvKS^IRBICkca$fx(VBuW!waR)@ROW`&4EH?E4P;pq2L} z5w7+b`{yEK(i~jwhLaui=3ZJYXg^hJUMi~A=-V0v}PZMfDL}B2j4szx2_p1Etj26n0U~Bew9in`7upU zNl5}D1%XaDKC#0zLV5sMPRc`!sP5ne=71F2Iv`dNeN#x(sDg;Is^hc>3#)+8r=iIrqS zxA5y at mFq5~UR2mVJ3v7X_WQfYr4#Qfx~xF4L~>e0x3Flv3I%Njal|hq{Fn{1&Mb1}=%>4KM8@)qnY#Fp at U$U; z$k6u>|60JJE^Zn(&>ud8BmYM$&;I+s>fbSk$6n}5e>^T3Q`;|#XWyYg&cWqD&QA?M z8pPx;a%S`i6dKrsDE)LPut))*-H$)>p*&2lK1z>p~5$zrz^J&WGIX1~Bb zuFl>2d+ekq-(=?_cU$H1d1djjdEJ}@8nz)BBfc4g0031uMnesb`tG~<1Kto*E`X#d zeN`L=N<&K*4771NIJ5CX%)tyTOixxL5J&&IJ3KA{67=B6MTiiB6uy zNG09UP%GUeK#F9dqaeW~K+6RA+7HezV at oUD;!W5j&PVN!xh?49zm|e~P8ZT#o_dMw z`*=_R2c03L!3})L_~WLh{<`UcON{F at IH`t$Ya{lv+vkqDmQYqzTU>;2GJnG at PIw7*6oimp z%O$1GElemsApCl{6P?*}=e&)l;|4l|QQ`N!EEkAj2A#ML6L)6{5~f69k3F5J1##k5 zTZ2~0-rw at Q9i^l^PTP7rrOsc>zHqbP;VWSjG+@*Fi#)RYbzhR_Fg9W2W#mi(;TBQc zY#D=-DhbhTm}zUfQ7sdTKwhKqXX{uf$buOYC+CO~6Nh5xc`KrQlWMiE>r(Vx)-<|1#*mFW4hWR)C`+VbjXgEPRu8)s9_0kL$KtGUPw^1SCfmZKBSlG*Yz zN_da^bkQ%<9P$$l?W%4sMJ1GTk!LUT_scX^SG?^rw9(7#Y4|>x6*c8}I#Qo9!VD z`eM-U;i!Qq1|)-wMqoy;OTfqTodBI6iJ+ZZm7txcgu8^tl6#f_H%@@SkH?bdfV-aH zn&6rH&W&K3d)Osnmw5;^u9Q2 at m0*{9(&gJO`4COq9D&t8O)u^#myb%biaz%fKbG#_ zYxp~}cIPtKt9(4HmcH>360PMB96rysU&>r5P#qj_uAd%v`Dxo~`PER>+Ie5&J+%mY zgum$fIdKbs{9xMWJnp>iTxv4w+~+*&oMtlW+`N;#)3_63vdV1MGUQydQ at N9Evgo|& zoVOFu4;coHh>ZK!=|3dzsPvnK4IwJw1Miu-PKbsMs*o5||b=Kqiu^NB49f;2&sHj7Icvb#3_YhLP zCFk#ABZGO>ZY17|xM%eJBNpcac`=n1VqRbAK7Xfg^7??~o(kd5na&?zJh=9(>OTKR zME}ZELEG{ezo+c~x>b6u`V3$8<^4y7HgcjKmb(!0eS_1Hd8OfjemH0EB;i2m2w zTeRtShyhv|mvlSSI^^sONH!U|M754&!6_i*BUuBAF4+z#tz%p80?5w2sT$RYu1oQ+ znTHUI-C+}4Hx@{cdGc0Go%8%=rp`OHKCFLWb>H2+y6>y; znHDVlV75cwr at LKEQeWP`p;eI z;tnX`;##|sdah{hNTyHXgHjri__w!^+Ub1%5Jr3Gv(PDtJn51GfW2gkwTTL)F5lBCes;5Y&;cbiE}n zS{;x83cy_;#1Q{e^?NrY&F`CFnKp*b0Hxr*0%_p_#hXI|2QlHGfVgn_2=XM*2(_r< zKuc6gATOM%cy}m&(a-?9X=fR_`o2kkB_3jK;4VEo*=}St5u4!#4IW0N6;y6YUJVw%Sn&0%QVLi13admqu+a0)d zBy=2T7HnopCImvQE-2G=<_br;qRUnlTlCr+ru|SHS1)Y5aSDetLyzjbJi7cAj+z#( z2nP|hF_{eSeSUbtRvX~ia(QI2TunVk-&X(6a~x_#cRjpxzW zD?55vguBz#u+2)Rsz=NeD|8?gfjqKFGq7XL9i~+1?@vIt>ou6&<*%M z(#YcvBvBQwb+!3PsoQiM=yNTMH1W;*O4(<7%3Y#gng*foal&N(QG3^8dqjle3qVzT3YO~XdmWt+D$ynC2rEapatf_9{ zK4EA6JKrTM2nrP{3iNC%Xv!9?c6SLU_s?XUolCuIP z>9b#wAF$=zHxy>GoETH&8)`dRRGHP5yjQ9mHMngECiAC$rXOQ%G`Ceb zxZ>B!Q)K!_;&{%Y_ at 2ARvr&%7nN36cLd(8n0wQ6Ws at XtR+c(tk*C;6{OG0PAe#i`-><|kDuASQ-{se3bKlRKE z1pMsKL_OeF0=gs*;YYZlR`CBlra?bR+-Dyd*iZbK2ueJ5$sXd4K#m|lZ69%`7(Y-geC66e_bSZcuKR?*+KxJaij9s+nTO z!U*&kCSi9CUwuVx-Abf0+%BCvhYHZHyee^aL6}pU1E~2wZz=W{qFm{>?1Y`r2I<@q zOZGqbGJFW-d*4fc$L%Khd>bDCw`b_%JPDlx$E=DBu=V+r{;+gZJWc~j?1uqLJ)!Le z2U(o(!EgH&j(%G{J^a9|@(|;lWZA8P!ufwO=ki}hJJpXvosNoTyo_38#j+2(5 zMP1 at _D*n1~UHDquei6)G7qh at NifS0f6Ujk7O6BL@F~b2nvi==z$Y^YxX4I*ds)pEH zCRX}UMaMh#vzbu2cX$M`c|Cr at h2cSm`6bpNLa!hvvjC&tmo=(Cl4R&#RnVkSqvE54 zYosZqzmVa)mF{Bs$~{!>{=ou}<_PQ2)W at k5{cK*)qxV>>S0fDR z`v%Pk2Yi2A&ZApOWlwse!+mJ_S3D+FO{s`vD~Xebi@$S3aDE at 0e;9lUbnH;|R-5$#Pz-uragh`b33jJ-> zANLiwWjLtw)=!T`20U_~e}KuIIrQRYX at rOG8nj-f<@MrBg^O2oj!X0??m21^Gs#w~ z5??yBB&QQ>G^bxHwP>ajYwK+0(D7TI!hvt9Fd{ zO>|}G3dbic*&_jZ)f>}u_B;_UFtu`7#>;lB_wsr(=7GA^oX6TN zjMjmg)riMyE!lIgU0O()d-HY__t9E0nS0As$uBImxLp0UE11XLEmdZL+SO&#H at 2;@ zFJEh`vP9;q!e1n6)4765R}haATJ;B614O)0eX&>eyy9M54Np&XKRcz$TqE^-&@a3;ur1cxU{R4j%{ka zIPP1{&5rF`a{yA+pQju3t}KhScBUa~pE!_OH|Llat0Hu3Rz6upY4uLK>OFFd*?T4e z#HuBxqx2rR=xlj@3 zkgisrR;yLwI*C&OFyZHUNt~G!Q|u5ss5h`LZg>~E1!+4=ds|u?-~2F< zzA^E3);=1 at k003i`Uc17?R|Mu<&l6gKe|(m^YebUXw;>YwYmQRH=4UFrHB^Be4`j8 zN{8{V!v)gbCWbL`}-ooMW4$*cG8CNdcD`ST&V$I-!n0 at VA7l?nq=VG{+ZBDVYs+4H3xOfAp>j@ zdKk_p=(Rkf#6{9Fk&kPC_Jw^@lts>gCEZ4O46CseOK$QZhSPJctgljHt<1fyP^C*5 zXddN~jH*I6MqHrjP_Y-MWXMQ46T?LZz?TiTU3coBAdKx8N^#E)1&`_sx?W9R__89> zPD%+hE_ah?*LYE(Otpp*=HERYo=ko(qM|ks95msV%GfN+vZy`TZ-^t}CFRQdEyJ0) zLH;KhZmX=lW at M*_!M<~9vvgqW?D_EkURe}ZnNpT(TJIb8kVooZ at Ap;A*wWmZI-7b$ z2J4R0ps&2T@`Cxbk_?kV%03&N zN)|p*mie4uY~@wb0%ba~K3j`Y6s0DLB&AYcG3z`G#xZ?o`YC=wbC3RnZE813s>W~^ z?ypOEOA5afl5vwr*2X>4B`K~(w^sC}Gm6tzd4qGhyhdnpVf}{J)vtL4lE!aud>VKJ zdL|D&Y`V3r9!JfiObj!%#Y6IWyn5+~Uii;UIAyuy7Hv^hSKj6vv-G>!?YACN_^GOO zq!aqSFs8=REDAl57d#xOuG1!)#{$MXtspWv;V6<{Kk at 3b8Gwtoy05su5X zdOyW&ZJYF_)G13!ctxf(weJMz~JrTn(Agbf at wl2n~6(zM{{(01~ps|Pb;k0MKtk7pD?!)i%}!+xN1h|flgjG+t1 zL7Ivw*LZ>8k>vW6;9RY6u%+*8cf7}WoNqA;Wutxo*Xb~HIw+b5c8e1wBE}jA`dB7x z_NkbK?Jj1KEfim+p`+$?8_%;!r_gMo$rlN5NF~le0>8UEz5U^xoyUS%cb|H$ZI$f1{JY`S7O225 z at ua93OLV#3F3x<4eyLl%747COl?DFHDJ%fXBahDy*|Vfu2so9wv*#0MBmxb`l8RID*Y7$Ef2ch}HSa-4qTp zXE{R6X~&r3H;CQ&<^HK-rw{25=}#*6Gv^w=nNy5W#>>Tz5X1nxhAmaWHv6M z>}|An9;&#*Cd{3P_U;N&bh at 3`9I%SX at _(~H<(bEHFO*Mx=QW2rhp~4^dpBUKzdoaJIje~x^B9 at mdA}kN_t$n=~P_0Vmii@)l{YB zG^bPN1gGhl9xaP{I!k(Ox?}oPdJapwj#KNlRp$<;W9LxQkXwai#S!Zi>(oxVKl3j= zFa7K0ZRZVh-ycnDO>=jJM-)?mQ=g{9rYNR{(xsUb^hle9oO}oGN{<+(meQ at 6=k#{X ze5;Qf(@&V^^mm)jTebKNGUq)neD~-yHl;(ii^Ueu=G%wZ7uRQ!wdy5ZS za3#wZ%NMp&MB`S$$@MJ;Q0Ex8LI?n~@rZ3AhPS2}`Kuds=ccRb0jiY+$^BX%dT&S~I<;f0DO_r5< zC1 at x6eX0QGd5ga(u at n2JP-~K(4nKdzL6g{j&*|!BvX>Fw%G0{hx|z7l4PqN#J3n0_ z`{e9jGz%6+EFldsXk0KV(8<^7n`7gZa;Om at 4>yDP#G*y7Rm!o{qSFHXmT4=b6d(l4 zz7!Dh{AHP6E+F~Yf;g-bq&{3>#u|@XKr2ilZJz&(49?1ocmXvJTbm2VV-!#sMVq_S zJR5+0`EgZy6ncm;kcOFtPs~5zMzf(CM~3N8_sR5N#x&>zG(KZ8k79xu!DTujhr=0B z+K2qaY(`Xl#AAohU>p#WE2I*(F-;#K9f%st1G0C;RKhi;>m#K*#0H~)#QwSj+mA at _ z<5WbgMG5kwRK%>s at a=o#QtZ-`juP;z2bB0=%?|5=Fu+#1Va_cI4>3jA9bN at 977919I z`NWF7$FLiPKcsJqv^1I-skE{fE&^a9D9}aBham zIuu?DpD7H&S3qwdD4jSSP$)=3Cv<8AErx91uT^m6GlxMi(?~*0!H={Kx!2NX27|Eb z5iY(n0)sgF;koF&5PO%}=UPzvft~?fpwg>Q-OwYbJ!UWX!Zq|c59ECSiyXbj5{L%d zsP#$%VjIyzj_Ox!2(lf-3;ySg z*nZ#zR*o?qy~@N5l6&RK93=r2;Cv8Y|3C#-jEE$Vbf~`~fsBXq)*0Suz-;Dp*O(vC z&)TkdUQt1cuNUiK-6Q=JfiT{Oq+sXhAf#XWMquZdAh=&0pm3f^51r1OLF~4hr?S1eQB0m&gZ+xH=qCX^F z3w*E>qC}Y9*@VK!Mm|{H$%NwR{(?~1 at _(dUBCf}z4yO3XA?7Pkz$qWtGWc-8kmZkZ zsoh#5eiBlLur4b;8yl<4G$&tk{6#qKzV#J$wBsre>a-0G8N2IhQ?zj_UV~7&a1$C5 zhYmxEAXB^$?Yk{-0oDrr4tbjLCsC#ZzPSmjX-zOEBw-~vHolH1J$FN-iiHVB(Yh#3 z(eMw>L4GJ6AQ)B)ofcn5GSkKc#WXqC6F33Oi(ZajNu$7{BAsbfn9sf=N at W@z90$yT zr3C8276Uh6K|la3CQuDZcF+Kd1?UUA32zC at i#3VjK%;@bu9WF)0%sZ=oCgep^}@g< zSXZp%Zpdg@{~oT`C$&^g-XEMLU1hZiXpag_9O#N7cH-zmITX)>g0e*(ogQP;UtV?3u4wq}?4e>9*%QI4YKmRnFnHsfaawh)aQQH_ zGaobagdvPmnJ3ksxbn8tq^|-A*C*Vh=tPM5&fuHeoTScWC$zj!M$x1 at OuAp)AmhL=`X_40AU+&nrL-B_GZA!{I$DDGaHP4fMLT5AM{qhiD~x at Wa(Et(}){Pk7w2) zr9GU}2g5MKKKuEjUjt4-2$$fDL8BlZk3S^qC&~kXL3j_(5&PdhgdTpgi57fN5)c6f*42ppt<1{2Cn1UaNAFTokZ(m`b zG8e at lL?2Rlpf=cfz%kf*-(X+&H`Rjq$FhIDU%~C$2i(7>Xav-e2sY3V5I^7{AXxs( zDcb)choL at 2q9ZyRbl730n zg+G}rOR3VW!j*fuJuKGUVbYEt@;_D;RsdkYR4MQv!;k`^>B`^@A~k5+l4K+^W~qwx z(Lk~=pa4a+QM&-Z*T%SCe0<2sM*4NMW)nzhT`CjHYRnijM%cV&Ol>mdt9)^qFxOo& zwd%dNr1c|a7Ykp6umtN(OH0l&P3N437l~9iXC+`})thyum{dR-VM%p%2K|6pM!){xvB zGugVg%aCf~DqJyi5GfF6S6Fq}q(2QwwW`ryN!Kkth!*E^#Sk>B?N567N>2#Q-f#EI zE$JR3mWg{B4Lr(g#g9o4$kmf#pEfv^G#GPMw<2mIPi7sPMEVuZ97TI!xFz~`7pc`~ z2pP3%p at rALpZexG zBD#e(=NA$_k%T&guLC!bn+Z(0Caq#;_;V0=Qyj|I6`He5xu$4CKEd>56hwqve~8fR zfDIZAitk%tBv8<}TKzNUz+9O&4y$GhLVzd(FJ~j8^t(+qdpG)KcJaMj^iv+uEpa$9 zGIG>S;wFMNfP?$+apeq0&LJ15n{sE)fu!Emc1OFle$_kOFsId-p9HvYcAYTuHQz(jCYC&u^L0_C>Wqh zTRTXV%cvSTOP-`l+bff!DeWq^Q-dkBTlw<2MRAf3D8C%KRo2I6x&66N!6}(xrXw9j5$T*2nTla)2j( zUWhJ|Qn692EV*hb#@D2TBusVDL>^mXM`2>YgXAcsl~|o8+D8QK=7qV9+Xe3t)`eh% z)DGVjMk*c?W)w0v=oqpmKJNp2bSC2Mkd;0D8LV2-Rk%nb8T9CJn0`z`Cnw=y46 zPY<$x2BSddtIyVZ+yqH8y^9jPmtHJe7)LXc$~k?Y{5xgUQ&3m_fP{c(g8A+IJYQ$KA%P!v`cZizB7_Bnz~M02we*)uUkObB2Q4ei at dKT^p|D)HmO=iccL zJH7J=B5Cax{jUKhfH~jJ_P3Xd3p5CI9c1xA4|ud&m4V0*X$p at 64&!_mWyWv$=o8%9 z`LO6mZnWR-FhvuM zeSMv+8Ay2?U)$Y^XdR1`z?NS~g-|M=E-enr+3#qo*I<9-;cqxy`X1~|%9BRI$loeA zp~LMPls7Xko3A~h8R#jkF-D%Y1TXnnBb at m$d4&q)XUW)*1q!oekJY>tQDRb&C{ z^9V6fNoQ`bDF2p3EGoi^<@N0;gI&h0Qj+YN^ygA(Z!CG;fq<`5;wVj!xM#y$hX>*w z#m70jT($8t^$YnJF9PL?(1JJr9f*L^+pNOKI$7C z(LlG&tKMA(7(7C)L~>X;Vy(Is5cesFZbiG|PdDpI5$@`dz+jkpLy5?J zOeC)*@Ov}`JvU at jl^u2v-Y;O!2hqRdf!-_E5cE$xy#EsqJpaG;6aPhI)mL9qL4QY8 z%x(b+rp6Sa7Pd)7NvgEq45+o}3}lH$#G@%heuA<+PffQDN<>r9ASNNne^ZV3R|-`} z&kGj5{Mx_sx%+I+*fI!ko{hxQ%F)XeC|U!ab0 z at cKR4Xm$zl7{>yCaMaCdM at OlDyoR0HP3wE*&3gXXsn*0+ZKlx(*x at bDUW-@$sJPGe zdc8}v$?H;XcDH$lS|Sn3!kB~JKu5Mfruv?G!oOU8EdO?C%8dkIq)V{U}w+X;o7Wd|D&pa`}aE)*%aSudDzDLq7 at kmLqzX?|Rz}Q%uL< z^0<-^Y|fk(#hs4sbIXQHTZ?gW8{oF&M)}n9=``l0nHruMUd8Z(uy-(#)oZ}YAU6F^C at +!N#d*a^d&_j1JCb#{E zP9U$Cu>+jVn~L?H7kCITX at PXW?i65TzG3(e$2X=_E*UqhaGCzqLStvL{d)PPSad1Z zP$529BHG!Y1HyG{ZW5}7IT5*SNMhrV}2$cnstKK~H1-y_EnSo!7woTnHRw@qb%5;k ze~?};r~Rc*{|TC(F#o*^&HoO1{oh<@o>A at e;`Bb1=cHMRK^LtGL~<3!D$MXR71grJ zhwh&Qs*qtbCz?X5w{=9!FezXtsJM?ku#{t1^psLat~G)${EAK)0`DE9E{ zsZ?$Z-79TT at tX2)2EJs*-{{-~3kr>DtKRbQ zwr3;J&Dvaf*+;1l?QObSRT@*j(>wJSeHCJhB!&q$V5sbCaPc7rXUp#H-HGJCKQ6^T zY$AsCIBz~;LUG{-$V+)q6-?Hs;y5I&FFN%Jjg8y99yZiZ(IWHIo5y2_E---zsmeJ+afA+K88A zO(~&MXUO*2toAekr3aXc at M;1dy{O`dH4Ef4K^g&bR zgt)i46afplgo8dsrkLU3pOEjCQp1fNY)?-p$0gyvKHw|2kGMR3v at Y7SY~n;zT_Q>A zSvB=^sx#gxS?O8lx6SnSuKWHG$x8=?oLn&`D=RH|Z=h^)FaIR}i+H^`FRYd at zzWZ% z`5Z}MP?TvZ&~6I6v}bvGtfLUt5}3L*CFVOlrqwMeeVN;X_ycSsyCuF=MroJv8_E0f z%udM~7~av*-ixR9!1a?X5%o*R>Nk4XT7)5Jrx<@dSXrecU<5lbQVE%Ch=}9`{^%At z!q^3RVl2yJfnEfx^|^y;eu=yI)3ztllI*<<;P6G6)VX}fABOh+9W$sM?kmr*5D+V<5D<+2=a~7I@!%ih zEp37^kv+_833!)|RLHW_wi+0%DZMR#evP7ga4Pdaz!1$tayYt;jf at Ta%2}=e+r2== zY`0RLckO0iwd0k+RnIKodky>Y_;fO-)A5a9M at x8Wv*d2O-D-7eBFap1;oXkbfbU_~~V#9izR zR%mR{P{Nz+6!$XWC}5q#l}CaqQYgw5VWp55fR0d^>e~bLjlT)oF`UIHekrrfv9h$X zu&|_UPqkIlxdp1dA7BJgpO$ob7A at NdoyL4I3pA#*DUv$gIQU+u5DOO&3~n$aAm<`} zSSaCE$sw#TYXs&+{*huiRk5QaRf5*`R25CdeMHmNiXIL}O+ck{Bq$ssdZYP2R5Yz+h=9rFWo~11K$E z3m(MKsxinpGIVQ98&9M&6Z(YFp|%^zo at 6x34$u13kdTs_(9kGzHXZZqOz5%0vUR;C%)B at 0 zzd+ z=1{RtPe4bV#{17GTEa_8fbKhGgSgE1l?Wn4er<{~`h zgE^xBY_j{}SWCWl(1~-fcy4 z!}wKmvr`$H)9JPLS^3JqYsIMO(HST3KHAv(CQsA|)a#WNYN+ at aAy$a6AaG0UugW?0r zq2vQhERukHdOGdOUYMH|k^q74wJM>%4xza3s5?J at dB5jxa59_vtYJuHeGpozZ#gY_ zUoaRk{aVt3`)ieVXeEef<=1`}El~~XGyC^;P870%B~B%{%m>*QSslrbZ`~gUv-<0P zZzzL1&mBGTMnJh{4ao(Ma9Z$`_(hU)_Bef?z^}q*MOPLwbL#3cdlQD zaFIezK)ru~HW#DG}C7B%W?JrlbwnDd}gard9KLPn=%;T7vwv*TqJ$IM} z6SU4NEXzBhy_v8X_$=j(dI~9-$F*j9!w&8-wm8j(QMOo1bxijH!&mcZQF$P*^T}ye z*KUuv4ky>{R_Se0SAWmi4pLV%+xm{Lpr;D~*Iv+XkKT?zSF{UQSGeI`MSEAc5tLIY z*MvyH(wt!u++SWh%-4|}C0&x+C7|7+_9%aaZ9&iK4s%fa#T5v4q*uN at N|54ur^|3# z)>U|i;yRVTf0u%loV8MLBy1SvEDsbu66TrFu>_KOV0FcCO}KD!Rqg#_d8dhbepNaZ z+?KL}ntl0G3y#HW at v3k|Nv*MMLsrp{1p54fTE!Z#XjF_ZSm}-wQd0|U;KGEgXjY7^ zXje?6Xkg$|h?h&^{OLZ1cuMFH&3{pC39^yBN>d)Phm)1>eB z5~_Kzh#(Q1SB$Q}fLn68h<)Z~q|SKOCO-jK6dzJTw#A~JaN2E2E+c8A_bA6_JUy_p zL%V at ZbN0NGXUUL2B*`kdK<(1Htzz+1_6TcrtkZ?^PXYhCeJS7=0y_Q9qb z$)8hxE!O8MVqjUA|EQX}sfK}xtD4>7F%q`}?Zwse%=a7XH{5TE0fH3SimZTHveW*vhuo=E zu|kC4Eca{o8^B!WiKX}6>-`h~C zChn4DHR0EqoNNpheXHK0ER><;5 at klc!y?UUDb4CvAN3GzADZi*>#`W+c!E6!v^L(Q zin%@Be7Jk^$276gac}FY%t_;ADFg^uWs71~Y$>0oQ$ZWC*$I|+Wtd6J4_%soC40=( zUC)A!-mGTBQzz0Dex6pT=5l#{KjV+uV8jMR)1N97>B2HqnCaJOIy}F!v~15k5e{4| zRLHEi1&Y2%EqP?xY9&1C841?S$1{&Nq0u-1ml9gISo9XAmnt_a369UKEJS}dwrH+0 z!qi%^S1Vp|w^q$se{M+~N;f5pb3{n_T3k*EbLaGGrxG8}4wcbSCdxqAhSh6SN1#j? zZmITXC at BylHGIX$Jx?u^mJ*}4NwaRfUGUOGDSPI;@ar2{^T+6y*uIsTv`52GrX$mK zP1K_yPLUoa;q5Uf1SBZn{Q+&@ohga&a|4iwGw`VhXdJK(95stUiFXVo2mlQ+#{h8e znQ?W1I?PS6)G08nv7J*8KLFS;AhG3W@`BAFuKb zS%@=T{kaXl-BqME)D6ERo{;UYAowLec#NP#>8Mpip=a!Zg$c$Y-^JJaHgZFgQyyYv z1l2s*u92*iOXo$nGRJ-;gC0R4)RQ};4x^zL4d_#k4#~we-l3BYmRZ|vnYw7_l+gEY zJw2Rn#Mjo&t{LF6 at v^)jZFmzX<1M~U%e^nQ7)vmzB3(XG0zTL|bU*I*_V$+YMs18g zoLS%gDY>U5XLp^fgCd%zyz+}VoxC%WLg3igw<}`JwI at 4*oku=Zf&CiSMEo0?#V1;rXBCY7E(rDaHp6+g56Sg~;v1)h zjSyp&EKwZQoT}0Bkh>LO~k5`L>qRq~Pmx)Lh=PcrX(IS9$ER!MH{PQ#u1H467xQ7Hc8{?j%mN$^=eR at RV=0Tak_) z;_ at miPK$iK3nhW-zLDw at SG77;k%mk#t>!ZK>=!LdW(;9j1i`Z0Xa#U&NL|_|_q$~U z3)&_^Rwp1;HLB~U==ny@#7M%%E@<$X1!WK8(dDF6idCLHCr=(X=A(e6!h%`CaybWp zBuW_{Jh9?q#W=imm6ekdRS-+3H1-|Sl`yvA_!zsg%%L;Wcs3myS){Ji6p)$9s$r0k zrBAPuX2(#yKb`VBf!jBtBy}9XP82=!r4skOS<(3GR#RHN)f8g*Yv_zWU~uH#BexD; zajaVYenV|Cdu}OG9Vl<0g8nduTWiUb*p7(wsab6j2R9^Ck?wXhnt(~fKFy6-8`c}U zri^*67D?d*e*(uXO%-vu;cDS42w{?fkiPuCnbTxjLOf-di-@ z$wIB@);R;Fl9v+tR8f+NpGWVDo{dyt=W6$SuOdj=df{rFGiI%+6H at L5EHBGXZUQK- z?{)Gv9pP*^mo|)L;n;nPiK7H4Y at kvsWBX^=J-f^yZwI3zn7t{Oh})3xA&2+|z$ERs z6>x at wx5Qy|J+>L45im?( zufRozSfRhApeT zbP^uiiE0Khw{rC$qs<=Rbf&zy(N!rXIZ3=(DiRwT5^IivZ?_ySZ}j|QYf;{6;od({ z&b1~t``5Y~=ebvV?223F8tY5RU3bSl!CGDhRmPqqV*KG()Cq#d_5%DT=%<48^Z7&H;vacJ(Ts zcBqzxi^4tYRsK9)@5#2WpK>pu5_M%cwI1*+Ir92Vw=7B3XO+k7I+S}7-eK6(B#4H- zL1)A{Li at pNA$TxBLC=gTiASJ_6fKRS7fp?lhB%qC4Vasg4cMFa`ywHJMpO>SsUYl# zIdLBFy&q7|9+6r=Ao1uFw!1L&NP{~y4cjlb-cZV at GEK6oFT~Pb2)mdEbG2 at v__(6& zJY#)+jxl?UGkOhGjD|uzBIH#cTF#fk#e>Fshx&H{E|v>H&Vhq~FhKvWuJiui{36rR z?R`?EamGHJnK1TXe{-acbIb;8aBdaXt$@{ zK(%eF-L1RMI5>#t z?r*T)G at q>r44xGL!ZCB5;7B6nv_r9g{3FQrfFfe!;S3$t^pxIV8vO$b-i*$n3>?@j zV^tZ>diqNXBTX5OdIn^U{wntAp1OvZmlpBt7oM=4X>05!c4vBvOk-_)(_M{m&iqZqh+9nZdWV zd18?7Mg?3l8EnTF2%`!$BKR=?!xGbiW?obEiUjBq&R7{ffrQK;MvYV}Ll67n1AY^yAXn%a$h_umO zx4lFd&P(m#yHF4 at u35`6<0g%R at ylCL`%`XGu#qk^jLd4tlzZ&|=WEi8l4pHFxoUUl zQy<;7w{d1Uar|h&!FoJNDoX+3jOD1hFH*J9#nx{{%YKBSdVO3)G;6G|#(>GeeUC%I z3g1j#6>;y2Z)`0*qD;mwKU(I@&U`4j(g|A|x at y1vUSJJ!qGNHlitGv-lY&)$(J^C} z;Bg{oa~==rXK4}S$iKD1+%R=+NmRCuSZh}nRQ06KP_Tf-eBn-TPVQ)mO2Tg6N&2?B zk~Le7M8v$Tm?W~UbTX~Eo>uOO*WSpG^b%cSuhPiHlRaJW3wN=TnIxs{={sko_$5#jv-{aY=*chG<_I2leEI;3DC4<+mkw?>@noKMH00P zkY4$Ax9N zB%@u(sz5jRg((MXH at j;pTD zSgtkA+ at 2}G(VUhEFgtHusu$Zfxbkqo=2I5 at oHIPLW(mq3VVOSy=?$|idmTTq7)4?FRO)OvApOX&q at Gtus5<>XDr?`{7!QcCEE&eY$H; zzx0mokzS*h#IDe7Wn1~drz{Q&8T;p)7|0{T57`6%u>i?>&$KY|k3t;~kmu4rJu zhU?wm0r!CEy5+gW^)tp%L+X%~NPv*7QI#YvW3w`Dbcgr6*tHAQz1USz69u};o?68c zt7uw^D|j~=7cy^0D`afcY!I2q5hzDQ0?gt~$7qSe0WuOXA*}FfVc9v+Tzxi^ zs7K7rnxLXy_*43-;l*MpW~TFR)g4GvXOAws6UrdDBN+S8hCP9xBE?lj$H2gz7qH_|gyNwLiH(QK5)3tSaKVQoCbsgxciH1H zTrBr;?ke@~+R&=6)mzf(uCVQDx6QeB{4Mmhjds;8{B`daDKn)aywKc-ci>6>QNI7& z=iBWdr(MVf*dVrVa0QIR72s671YdBL_~ocIKzK}B*f^4HA9D;3Nw$BujEzZX&@GF| zKy`h{1KVu68WC!`o_;vXSaW@wg4EA~j$ANUyU=2s;|^u^R3dNs6a=11tD($) z+~`TF*a5SxZPXe__{N;y025a=$zK$J#xBZ){~;t zsL`|OJ*9WViVs+vR%V~_D;YdDySF#|s6M(Q@?E?uU?j^(f>r!8zF!_o9!*W|fd4Pb z-YTfBcH7z|xD(taF2UX1-QC at N;!bdf1ev%)2oT&|ChqR;1f58LVCP%A_CEFRbdxs3o8O7 at w z at nM1JLe7wGen%CpF?LSLLFjvP-Eq2!QD+5e4hyr8aPQ=%9*?>CO4a3#064E9l=gP{ zu?4P#q-lRR+P0^E*s`L2 at Mq-l@Qg`IaoUkHR4G9;XJ#_wS~%%0i1aK1`-?bf>glaNd%NGX(rmzBdReszAP+)Z at uNRk~eZa2KrEKMV9_BzsJLz7c%gmH;RG zxZk6E-~CtnAR`^h>3S-`2pK2{diwl605NyD(OuZZynm^SrW$7N!#r7?_`XYUNU*;; z^8JwDcy;FcKEa-xhZP^X8{lx%J;D8uZIxh&b<;L6z>Wlh`wv=0xlrS#@5%{Po zzP;AomKG|5lurD&oQ;?Hyu`MTA0C%gTIVKweRe!Vr6ptKJ-oI%EBhEjupe`ih*xIG z#3P8h-3XhVEdO=N%0!O`|X+}{+*@F}IK7qrd^ug-j z+`Y`bw*R+blX42V_zv8Z?$Lu6qHIxTi1ImwTzx}h8QulX2z#=|8*lK8hsXreaglF$ zy7Fp-RCHty3nUPhxhFdkyC$sgw#E4k|Aobr?pkOvRkZ{%yOp(Y*IyO4Et*=}1k%+WbZS9nYH5k*CAO5xG=d zW63$LWZ*~Pr9>*%CD`X+HxS$K6Aga7}F~f(%qo!ETszz2SKJ73*EiP>e zj~+kk1h?XIR;?6XjFv;Iar&ynCC at KB!_qAfw?({Hs9yCdmNA{qmliGj*rj-GyMk4Y z`Xm1&y%N1t7Cc8h!=jV8YMg+?Ws9o8*A6MC=2aqNh8CTR<_;yNyj6c=7Vm=9^LwHC zmm!l{#zE50j&pZI21DD0_%Y6(1JrcmoN*i%v at LQ5*B>P6rz}W141Q at k#hXws)8Nf= zTNno7dG9zO9C;V4h(~V8lJ!A%s%mQEhW at TZ($bftb5m0+TqsHs>uk>7 z^{7i=8xf}}S{3IsuL)0wy)?ru8tiwFs0eS4;6OM>JVL*sn)GlJEgI;DiFiggKtcgH zk!uO8%Kdb&i>;gOw~=TLR~ev0FpeNXFhq(cfkkRYmx!Q2_eb z$Wr+|6Yv-21Tv<%6IExwyAhVPMREuwyLZL-Js~jMuuirL>6xV$&sR#PHzT7|>u4Do z){m~o5;=a3uLd|&H|kj!OXWRKgA6j%T(_jcADBS;tY+;GSVYw!#rAl!LRAEeHrn9S zlMw|0>dk|j11`b4)PD!%P(r;3BEv#Kxg-5YJL&%h%lz+I2~SujIgy$pRr9ieDU at bK zg}f=3OdNr|TP%yi&lb<2rC*_2sH`d>TB6i^mh;~0V=ITUUjEZtiQ!_YP at E_2Gs3Qq zxdGmfQ at tVYFlL{u$%LNfk`YEn^}f}gjlgQ*=`Rc2TcT_*af!|WYQ1rkIM%Ggh2b<4 zl5vzck8vm2-b>9uKvVGuh?sa9#1 at Wy*c4}y9glCnmcx at U8tc`eqb|$0>HCs9R&iFb zagr!I(^dk$bCtnDb+$brq at 1SP+evpEsLe`jf4*wc;kl@>(TNo(wRrJ&Ih(=!>xy7b z#ii$b?D_~X(z={;wXwQj53=*GtsNC7fsSrZ7fD4MvLEwSLPm5KKQR_B@(tu{w3##1 zJR+gnwGt|g1vnY7 at V0#pOFP>yJ7(vCvi&U1n*E2qxy at F8+#)>MMQV&`cE(PsD5QSg zxGrw*w)L-Y(W2Q*km`ioQD0Iq{PvGRUG#sR{dsr~#=0D(H2b4BuqAh_CAx4xvn3Gg z*c at k{$K>U49ZuN!GsF8KZtVNk4QV{8-U?o}gFX*)V+*BuspPR|8f~9ufRjeGFea at D zP@{jIOHfv(S&zM7S!tsf7$YTUt>)0ucpO~TNiS23Gwxo0nD5q0?>}Cd(b<0f!5$SVYuR_LfEJK%Aki>7(<2BNS4X-Rgeu at Z@?Xj7gCmR0Ht!n_Z3zN zPqePT!jUbO6*|*`eaa$gh$$X1o-Y0$$B(C~Ry+c6;H6IJ?Ud>0vKVVgSdJej%_ow+ z>bpEfk^|j4cvUR0nJ6m;Ls$ybJG2%mF9pK6aO}}W!?~AwHtd_CeDl|*7kn(ZjtpFD z8Q$LModQ^^S!O5vps_?`cYf2E;*0Se?Kj19vP^dn0NHBGUk#V$+oNO#C z0r9q;auiKmCOpYluTC{AX)n{P0G?z5Qh4pUFN}t2=cfuI&V21`rZ(}&!}jaw2wtX1 zi2E at LgfXv^`Ss5*qMe74V6+q!j>Z>>hbP5AZ}jKqqunXZ{>|242kFcxGZ3h3XFRU{{~X8^vhff at E4NG$i+FLY{h z1KKdt^s^jWFWv0SYl>LPvvnxW9V4`1mMQM)@N2eM_H#lX)ZIBW;c+8$_ at pZ$DtiI; z>h$Z6KJ?>OSZ|JA=DPT2lF+TmYvc>_U{y2LyBFw}OwrG)Gp|K`pN{XK5wb+F_y%9= z`^=A3VUyTQKl6>hR`jtS&%h>ehOoGWJ)?xCPMRX;TD&Xla^0;!+h+D+@=d%}_wgUc zL!V^zVz>3ZcK1millexNHXI~-zsiRr{-ty&DGA7mTHEf?3fTbZaS*wlE7Blv%vsUq zCp0 at NOK}owoV~Z0Rk|uN9c*OBmZ!vX<7jG^Pgp-mvJ}`mxP3!NxGLQ9?1a%bHYW%! zUs^3@}1|IIb{?rC&zPW35o!dDHJ3)INm znwrtPPkR)_bDq(GE+r!e8q6Ju0m!&x?^HD`;id>VJA|km&{2kjUclO{>GY_EuOqUp zM9XSmD$BNxHOlELwG8tpAr{-wgAyc7-q&LD4rp^x)0j+|pDXxb8R&H1Eti;9tx{qJ7&o^%~7 z;O1gg)3n#er)o{in943rC^qwu!{MPR%ZneIIltp+{fp1|T5CG$XiDDLd%R8W z?v*YfRzi(Zl1p^m0oegRy=^pe^Z8q2X;inXxiF at BAL>JUJdM0n7D_7onn}U;liOK*ZtPcKTStjcv zsru(;z8}f~osL$AzaJCqj=G_`qXL~yR{QHyE%8TO{tE^A2Y7M9*9ZJ|@Oi{Mi3%Xg zp9BP)@bv>z4sb^7lQ;pk{Qt#R=mUN~Fn!_;Lf?ErxA*XWXq8x~Vg0T!ETh7{(=k;q z5^ReSHDjzxDZp0e+f?T1+NxFSoY0A;Jmkx7-|x_b8fv(!4SgBzQ63elKk$%r(dsV9%|}^tDZ%y{1hc7;hm_Z^~Ygsj*qvrp#W= zSD2{|&;n>|*0f0i%lBD^w&DVC9vQAQH*0;xAcgxBL*O`BoMZ-4O`#fJ2}tQa{m??3 zEzS%>zNS#EuQ-Gfo4c#nK4C{;gx@#E1iS%Df`YS4;`_zeFX30{Xh;j6X;R8zG3sA zZrMo*n%`xwmtCoDn}sTk_!@3s&C~C+jvR=FlM?|lzq^i!;$#SiBOg%@QlHwok`=j- z8;~{}i0J=L1Rc_^4jd(Ip40WjVbPcI(08OY2+<#DFx-}DDG=IbXwX=9ed7>UXwGNW zrE)ILXVznMPRVE1|Ki+WLSAjMj?=AX5Z+Yb|Gi1Ze!(-k>1^KSbZ9=il>3}!-k@}9 zQL$_)g~xEEtXaWvVWM>EJC81F29N4GjDKX)^E}>Z`aGUOK%R)oI;DN>N>!;aopZg2 zi9u%*?n2GLv at BI?iU1=Q7w*|N2%Ek^6eK at D8B zP3ivKT$YW?9GEZnxadqmu=+?sV=Ad zQ=6j8r0;F)9m}L2 at a)g;vs6=04DMm*of=OOB=}||{Md3`i#P~c41Xd=+3zVKMtKQn zOBQ-G!wTrj($$@A1n89;mxYQoc75NiW6M)>DvDLJD2h~bFvk;bomHS~WQ$gFF()k= z7zmUoi;Ro_;^ARdG6~5MxEAHH^$%c4G)I<25TTGn#Nus67@*`u$m4Y&df|bvX$^0% zelurA(Br*Ez at vN`&_bb*D2XH;;6kZFTwoTG$}~4eD;gUBN7$e^A~EAF!_`WZOw~>P zVkLI!4DG3^Gi~pTGyyxc!{96w*A!hk!87kYHx&t}Bc_5Lh;HyJEdHL-7bS;lte<+W zf0=M2JZg(X7K&Er`U><#(tctccH~i-9apbjDv at y zG{;gX9ssS`tZ29BVv+p^^@rn(Wz-+a?52#lT$rZAG&36&W}BlXGw*52ren`y<}a{@ zSLTyNiFBPu!O#V1uZtg_{w=Nq|8o$xwzghY zlg6)i?1jD5v|Y#jbFc>G+oHe0j&~Pe+>Knn1kb!r2W)3~oalaZkwQ5vxw`k49G_Ic zRZf?W2RfLO8ddz}#{*978?_lQkLjX0RH!m9xG9t3vYce&64hApIJD&x&bq-g%7a~O z8l#A_#L;-!NziyX4Y at W4oR;dM*M98j*vNsMC)0^sY-{G-5IBGBsn|$?jVFIbb!M at n zJ+f_ZZ%!Ch?}^wLf!`)0q7X9W(J(kPiAXKH?R+!aWxysj+(KX_M_*98IM`#-1#O0t*TFY5Ywm{9BQ+``Gl%=a zlC*r!+9o+lH*>_%H{CBRY9+Iq$i&uV?gqY56`V5}jONPT>foE>R~+S&2}87P?Xqw~ z>Y)aHnWR7?V^f{Kp}4a`d&%0Fy}`W0K_lbrt=Pjpt{@Vz4ps!)PA+f-PQSK9v1XP# zKBYX9pqaAI%-(R{bsBuSQ>w^?5$0Y_549FJ`C%e6nXPwc*qFt45zSRd)jO4R4Ngy&{Ic0GqHBYRKSLPihO|{| z=_pW6Q3XiWw%sY5!;ARvBe4)zib+E2xEzooNqS-cZH3EYELWflB_7DENx3xMly>YN zn;yBQ=yj5s*bxIOC3{_(~zPV;fc%&FohGTbm-1S;~t2jyA6NzvJFhz9u(Z!b# zJ;zP?S-N$khy%}S<3RZ;IXO$wAhK91a)N}Byd@)S`6gNkNBdc!=)bgRAc6hzpG z%?lZ7Y1PFKKh`%af%JQODPV=$Ts^@ViRs3sR at ACH!B9|m_U&tt9fLS0Zj9QDm at GLC zs99jl%qejb!}v$BCw3Q{``YO;fUu4qFA+Z5j_=DTOvAcBu$VIaJ897U*S3M+PiqrK zU*CGlyT7%V=x2lochUAe_EjQ?Y#t at s)?5~)GJbto-WxO=sOP?g zhCRUSjK^*WlGuY4l^}EVqaXL8Y|4{#?oxZl3k$U(5AZS*oa+M$ifgbOw!5S4 at Iy*H zuRnJWGf0(4OUykqRcmV1=*)*Zw6MA$v_d5Ql(d-_a&Fv+?a^j?b)?N2PwM-Wvi35C z1q&bRXp!2Rs(O6L7=);25=lq5IE|vNlF=5R5|yOGF$|29t17JA|9Ih9u?p!TVn}w& zPH_wI>1d at Ao&}d|&+cHYmNq`rTatJF(>S{nMT zE8-Pv`etBU35C%e;KILvvC`KZ+?I6UpG3^(?Xfuu#2%Rfw7OmFwWS~MByI3t?Y5;J zuq1WzU+uMJ9Ec>n at RRQPemkH@ist|0E;In48?gi=dkFPIs7EvbsvbgM2-AoMV8)}X z4?;Pj2zcQ$Irfb_&`w(6Gdb}MKTu9;<=Z~?jXp3=dgR+adHQ-Fne+xA0|rh)kVeV@ z1;D^*2;4{pz!Vs$T=Z2E*v7XBAVp`DMUPIF^f+`s1Ri=k at gwsg^T+XhuF+QWy#Z;l zK|Xe at kbfte-6@Hla_wJUU0zQB{w@#l01D2Irwn;tjng<4!F$0(=q79r#9nPanLE56 z!;>vnq50L}!c8jgxG6T0;lkbA-|uyP>$|Ca>i&_#=^4(+ at b2Lit?y>Z?7OR==7#IZ zopeNkA=Wj0>pwxvWWKKNTDcXOcwr{1 z3!J^Bn22V6G!U_P{&{2xN;VWRe=a at J1gRQ|SU&$c@&L^k_Lw~vA1Q)fm`qy&hi9VbJn zE-meDq2*6lg_)Bqaw&wgWM$Wkm*u}p()q>6xGfYe7FTv$FpO4Y*P#SvkZ}wP5L)6W z%Uo(jZqk`TsynpHnrgxvs`AID>BxB at fHdjFUh&J zz+T&xz2Voa(VjitdbYKfzm@>nsh7FuF#LJXEIsf-#x&0^Gupeo(8z<5tA-d?&CPs&jm5A?Qpa?hx+%JU$rP7 at yeMp)5Ylz`Q4Q zy-?hJ*?6+>bUpeWlUKc80}PO+C-`5(4iFbeA|HxvtnDE0p3^3EkNzuPZn(!_z+mzS z(JxF<@h<$6eIp3-evn>#^ZwhuA&_($TU0#|>f|60;=CW;28ADk5nB-9rS~Pc;fdFc zf(1uZ`ZY%{`C-32E(8UCj}o#l*qay+tbaP&-|44mlX^vkTwB2K#1zoK3me5L4z*bsR5P(xAxME4HcxB;>$|4YaN!f& zz9^VnU|(=BBniDG#+2?I#i?Hh5eX!OH zqwR-a_o5!GG6%P}^~1X0^h&&5XAUMju_zhK(zw9D#j+%a7E5KUhyjZkNBUxBXYy5kWX^gMXEU#7O>6q#YQ~Cw_xHC5Kt}>@@3V{_R&Z9 z!<1v;5%MM0t at fQo(7;cVa}n^R)-CpV4{*TPVuFbIa_R>9_#VFI`3h#8 zcA+I^`_RKIcO at j^L*o&v;aO;#2-_k)bGXr)mxbt>CSAFkZ>4r{`P zTo6EQnzOspeHxFSnLJ#hkFH4S2D-6{wmQjow_%j8x at Rx85yT&Z-Gof+AZZd+<$!e| zug|x9b at QoV+WDvv!jhjMPSHPY5e9_>i?$k3bOQc}Z8qX#cGIk+ at C6#wP%3h7y}2L zvp|<`;I(J~a3_l_n@*Fn6ejJY+Kbe7(#OcaVn)zP= zr^Rkz&v6pj&y at olcjd^0$BxMQ$LGk5lLhp-R@)k*>>)MZY~Lk{`nsy?#$U?@=#Ojv zwH{LK7WGUV**LlLuk{d>J)t|aNR-JPMkA|t at ja}&WaNyj5RJBh*GBvh$bK!}_$#)@ z3)tIA$jn at p?z=Im!1u{PP03g%TGJR?3c!U^A&s&t1?>|FK*&L?PU`y0}evKbInbj!C5?DhZ}s6g zR_T`=d6%Q+B7KPd(>`SL<56~GYogtfLHBlSDe?lq4TzE1%9)8)zaJ}-q6RT*Y>^#k}1e;(w}!M72-MGjVWj&J5s*M zUGy&8Z{O(q9nrY-&m~8yCFdst-$o_P;B3RO3SWP2`~Ko3`W)n_6Pvf9H_!8BlWeg* zp?iH&P3XIW(07=tzRtuTu5uImBE at T=r?0Fk6-u-~(>*&%|NE at Qt5zT#$qWgJ2jqzQ z at omNWlvGwDOUt}9a`v864i|QuHF&f5HR}ybwoeO18~C6;%0Q%HVDi*Kqf6m+ux41DmwUJ z_2iL6G2RiaJ4RBSVWq)-W%K?O6b^mnDoisl1Xe`K@!4E}Wk7aRv}3qnk@>Y~7Kk){!ycIH zFCxCId}!JZb54V^B>~}Ha}$-aPFD+nv*q*ic9a$mE<&?h!}sN5^rgq0LCr1xrRYoBw!)JTF{MqDOe}R?^gj30==dTwIl)^O%(>#Apdu z+bfLU^_W%u={c+T)4eWK?Xs|-kOURW0U#vx)2l8^?ZgbFXuBUA;f3CUO$4~0<`P(y zwsXHhEL!VFEE?)}k*Eq+m&gehj_^jXj6g at gj!;2JjbK3tKsqOhK- at wfh#*D4l&B3S zlqd+NGY=2fe}VsX{;}qsFWDPdtbM=N(jPDWSIK7%o-5Q{%AQyL>jyETeN|PlY6p>S z5itBu=tdLTwm8YQl<@X|KotR+4hc~;DVP4ntP|X<#hP6+mR;kmU2DEr^aGPXb=7Hu zi&?i9 at zyfQy`F3Fia$z_^w6rBR&=7Y at G0whRA@025ANEkQCeYM)#!z&>Cj4q=?Cxs z?!nNlyU$QCP*BA1|53{LfA?TD4SCi7A83n$9Yg8TJ+hs%&Yvhk87qQ{13c^nrRg|3 z$2u;=Kc;`tg48aY9UNXaT_L<$Cq^ys6WN;>C+#!sCvT)re=iU4p)51e#KbvbkTw_H zWWZLRyW55+hj=vw&=HVaIpxm@%(_Y}zpVMa)IJaK4(cDR|)zoS^;(DyrbbA`53a3Cv-RGKSD%vtBlFt?|pxlYh zB>$QmsD;%`hFe7I+ at wQ7949VJi+`@zEJ1}3hSoG?u+Q-Peq3&yh|)|pjAAe_E%@rK z;6QiT{sp0Goz+nfpUn~i)4_1|n?rjil`3aV#=1f)z>YOtzGN)ZgAuwy&t+=6ZmQw3 zCR?ZbxUFjJslOq at W2xA9dV@PUJb(~qr6%p^D*1GAF5*DoK|VAzD8;rBBGkT8z`y9; z=dNSix&0G3nArsx+V6tJ9%{gkz$p!0$D=>sVZcT>Gv|25KQB;Kl18X at DA8fs@@f-o zXF1_730>$~vqhcU?GfAmXe1&KpYDSbVsnF)3?$-oBY1;{*F$ZHsf#H#EevoCftLL+ z=3sWMH}a}j?a}LU=JQZ=ETiP*+7@~BTr)9My=p}cSV%Gb2u{YEDIY$ST}M%f7GoF) zf{K74MfWFwu#LyC`KS=|vn8cmvkUm_@n;P;3`j zBJ?O*+#^!I-KtQ$U?%wgIlzf;&g)jgA}hQSTT4S)Cz<}vWnjaHp}D;<@$K+4{nKa^ z6Bd=^^`0tfZ)D4ZVS)-_Nr5Netk@|{b+Zy9qx8WVKq+#CYlGELp6v^B`QW(_ZaEDLsgepSeh57$|2dnqW%4sVFPI|gT7pYq`^ACixetUSF;Dyowe)$AP3}0iRDXAmb-zRTmsctpnMbZdw9yG;5y!?R{aoUUafi?XpVdyVr-Y at uxPFw{7Rr>mtD9 znpd=mIA3%Xx$7<1gnVw*%fSbEXx{5n_ug`)px`fu#Q81vMD7yxUjoeyje3E3sA>6j70}8yD z3Gu(s860ciL&l*i;q?Q(Na#Fs+uE%vzkpBrT>5SPriE!0LN}!T-n)@6ErO at dd%+?B zF*;)ktw(TPwI?3YKNGS1^LSp~m%_XaA0{!@`txRj0D^C00BGxDWO at B)&{sP6*mNk_rtTtL*Y}#4s2`e+y8JCyY^u` zjpBMyq7?+1Ep;PY;$64$_)!e?oj=|obW at SFlyzw$7+baUv at 4k2%YP#qwu#I5gs6!* zEzL(}E-(NmL;XyEsHrzVSP2B((+8@&zQXpJO+ngIYbZkjps_o+`o at S?0;-skO#k>* zs&_pI%~;z#Jx(vQV4P`*fs?R1w8E9 at PuC)$6f|1w9!mQp at adzE`ror`IrmuQLAoeP z_lYz7m=nBw at qkx#G|go`X`bbk!{T3%O7=jilHMWU{*H7wC z#gu71$cj}=;wjjUfhyBQlf-=8d04h?^9PT_yz_6W$u?DT(q7Szf4cCt{W_)c--cZN zP-gOUu}77Hrf!u$MiKkKM~x8~j1%;U<(-eomwukz&Sq~Fif1ot^ zXrQ)P%5!#~`tdn5#W69o`Ed?3=CL8P`tb%d`>`PONai*2VAeGfb!G-!%H$)Q#v~)O z{V at Wx<|GE(k1R4It4uP%n^>3vA~$%;dS5O=VZsE$n+O|4l>Eka3!dvNW?X#6H47Tk zNxx~_hV+H9+prU at mOu*Ad$j`h3JoHj*|zy0N}~AT6eO6MrLZ2i$;!}XqJvN8I$URs z*`j96dgBfi>{W1UIxF9d1SR}?t-~O841@`=sH5qVzMI5|FI4i11-_Kd)ub^m)r|^z zBeyC9c6BxBvWCn!u`;iq{t>LPqt-?Prb&-#Q)Uu~-wG2yL5tp|p!MZh9*>!50W;GP zDuFmm^PbtE)jF}lT+A at F_QRQK#xalgX*{uic?R*it_D27P&?|l<>jeEG$b*5xHzwQ-Fs z#y^!`mb!!PwFgI?#PN$@%Njun at B8xuqXHQ~yC+eBUx6;!t(@ux3^T{WcU at u`SNwek z9d2 zOdVYUkN^w-C;`O)3qTSu#zW3c&Rq^D=aIS3HboJxE)e3l^D|WW<0I;Ha}rNM+Ml<& zI|wv`nU^&)b^Aix5bR<~(b>iqSpL at Pt@rz+XMyKTG5M;<^zzMf6y1Em?n^J**V84T z;3zt_bd{;~;&R$oGe<#`ERbS|ZzynrX zs^&@@+UQ5pNp(<;1Wg>c$15Kwvqu^IEl3~m%Z?sGP)2xL(>GkQQj9aO^#-1grnP&; z-(ssQLH#Dw)?O{v9`seM8)@8hj=$;|Q^&Ib=+;x?1`)s1*DITpm*t8! ztGkQ^N)`R0Z&m26Qg2y~h^?wU8LxGE)CG=Yj&jmmL0%22&v-{Z@)?^&U9!(x4JKDw zJ=)JaYvc%NuDZd=PHCh^-QzE%Y2o89>DS+s-D_|2#(l6!V$Ijqti)(!tX5RhDtXRE zvg@2n$GSi}-zrB4U>hQ`U<*h1 zV;dr&(f;Fgl<%=hV}m79WAh?xuwf$buse~eY2lHaY5!nu(*D6-R|b%KX7b6MacfB(g zCOR7 at I%l)G$Fn}`;v^Z(9-#tGW}%8ilR at 7a#^NE)s2ggN7^zYqOF{9Kg3N{do3KLv zak!N8kFerE_>b_!|MN{(`Pa|F|1m1Y|H7(o at tSfXEqsPY4*SYnAa4-M6mJkNhuBm~ zf;Ab at WM9P>fm2S4tt+=K`|%CKxpKKoQMcfQ@$W@)UA{;AVpFlBHR*JIkjS6zll=C( z{aVuxsJetVHt11lHyB=Sqd7BawnP#hza$(_qnOWE9M2LXsFvy at OeNKp(;vd*nQ5Mr zFQzH9slp^EN>-)6EWgJlk1>+~X=^h#m;aGlvg9cfwmiJ?FIj=oW at D8+#1*cN`3FBL zm9N__eVtdT%6h5_NZU=~9MCZg?L#vwx9RXWa at G=zu?W;^0x5cF*nVbe z(_Oe&HSoekrQ5Q)Ub|R7*5acCbV8q~wwmj2z;#*`{FQx&;42QTT&W*zk8RSPISmV- z!IB9)s3?ma!VUhZ1ZlnSg9S0<37v2*ON%OJ6 zE9})aOBES;pov?D#IGk at 4uF>o5wGUo{w at K^W)}%Z9_>BO>OW6_Ob^C;mHd&Wt%{gL|KLwp5%>y*TiRoEu>bw8& z5#RA at -oCf{pn^!v#NwipE>>9ye(5`Y%&sA3a$Al~!7q^2Heb z%hw9`d73U)o3Gr>WG`$$Iua<887LNU&=xUK`Yh7 at QYZBqPTB*=*#*u9e0#TKe2SqY z!_J{N{4yW;MA&n3BMS2QgWW(uh@$qc9awp*D;M7l14g6{5x?PwPCkO}hO=)NmM7AI zWF;&>jWrAkyrxMKjwz{JlPe_?&TQLmLx#)2vD_)jYebj&ZVG)s}sd%7R5 at T)_iv!d at l23Po zem~Xhbqrqi{+oO=>IveK{-?|V=>Io+S^tZR`D~cBf;-a7iaH4=)5g?*gcvhkoJ7D~ zp*FyVLVkd1uE*hWz($FV9zL+!^Nq!CzWmJMv0Hh*+rFw+UMZD!=}K9*^DSSL;zO(; z-(x$TrsDE$6k})RIX~d)Z_hQ!_TLppSLoAW(fHi~k0D=D);7p5;vJ at 8oSvauXP4(B ziLT5iW1byNzQNa?0rO)FoFq0=Exz&BB8jkPsz}R8GDhkwUYs9Uyto=lhI at Q>paIl7 znn>))3|yP6TDn}TZ5=sIQ|(O4cd0#`JMKu-JFiH;V^!RSNnRYhOjm|nn|Gx>)Vrhs z%Db8Yth*Cr{$o}gP*$%N-^6SB0RM3bb{pid|p;EG7U>xwKVj!R``s|@!sCziZCNd7dn#}_=j zlkSn!_>*~kSGx2mYkwx3s2{^oBjI?P6g#JOY*@Q#ta!;!{D}PG>U3C%s1YUam^JaR zVdkc}B~oS@ z?*2&_&p)Vt5F&u*KAAp=HmWtUevU!I5ST&;w4 at 3p7Y#ETyartBkzWA(EGQd at loREp zNOV;D$r2MVFviz@{fN0&$W^uh*)r*YxmH5=Mc4A> zZrtq>3oY_d%k2lV;2zV47#bA84MEbD+KFDb++|a|AH}1$ulJMtzU~5&gsrGV!sh)e zr1^^Z%Kn^V7r%HxhDx@!0Rp7%*>N`#3|U!9EI<4_IU^Z!atroaK8W)FEapuA at Cd?l zAZ2^GaT}rbn#ogI_z`b$w&ujq+BHhmqNo at gfFO*qlrx?wPA7ggnEgF$?dW+sdR at wN z=7Y{OXtL?|{_4Q3g#&Hc at g=TeFNsh&0@;z_vp&XqT(ADAe~h1STT*Yp4gV`Ry!_@< zlE}3<06~~<&^_}AaY7vgJHZa3p5Ri9JK~!_oj?NVgHoC7LHr<1CPI)Oh-m_P!XCuQ z6wjo{#1FCtH8P#(O*a~uwU4^T9&t?If~uHS^mN>2CC)m at q9T8Mgmm54mvNxz3#?ZD zN#a)J5D?}~-3RY9{!xb5rYI^3WB3Digqa_zf at g`B+1GZIeLir4YE+A>dXrQE^ zhP at 0uqONq?$ivz2Mb_?Cso3fgAKFrW+ at HG*F>3Xk^TfFn=^4dViRH>}c0gATg5sDN z7vC(JSKWR1bp~}~YPDQ|+WX7r5+geC)pJ*Y_01ONP3}Lc at jJ!w`R{mQoEL{8Epi53 z7HOu{rYsDbM)b9-R+atpyel^bU6;$&>31lDt5`TY?eKSsnpv=R=zA11&e0+Nyj;QU z(0oOQm>5 at d4qoHzR9D^eKspCSi&xGs_kH4bN~#{vApt|8m5xoiua^5e<&F<3ke9*7 zQ-Lk!9^Ka$ukLM{9 at W9kqaipCSJ(NTL#u+`^S6Sr~020 zr;WCrePOz4*oz%PaY`HBkL2-Wx at u9!jAta)u5bIH#U1M246Cq=9p}XL`Bc%FGHun4 z*4L>CYkAF%Ds6pLg068+WtK+(>4>KVlfmhNTx)$*{%1pdeBJi2i$rr`cLWh}GNyy` z1=Zr(Db3=>DV0;*oT^=QCOOwyVF=}e46$T{4e<*SGtWST4l(8cEpbT%53yy$ z6wfe{p_9_EOMi#oM~xrp<*hSl9)AOhx8w9>Qd{##_j%NAr!;g at p|rB!b?9B&%=iz&TFWSTl9tWbX%7E+P(7u*Vlhb zLr{h at M5g;kew+PYO$q)F)~1%DCYCu)u*sS={wB^C2hQa-RMy6nOQ!f&>0&%b>IJ2# zI6K2SF2o0zzk)$@7d+hDL07WcCtXfx>D=vP(;oSE`R4&^tfo65&~C^>P&kwDKsb6d zAle!EpIwG{)LJXA1Xv^wrDIPig4#0z>#iEh1om30abL+1zJso)uqe3DU`Kk+kR1b- zrMpbqg}wE!8?p|FZKZ at RPEbASE-XFSb)KXOJ~u6^G3dLK4N0HB96ssz+Wh$! zZq%adXf~;|MJK{S7TgzyH2)d zUradSWzYyswShBpazKOZD(q%=`1Q!C&AV#rFoC^&KYr+p?LJFkN>KuyW9NJ<&12&s zD{qo5=QaK at nF@qoIp?BN>4C0_zgtINV at E!WFY023sR$kWQR`ra%!`)W&kTdTI{fBGr`Kg04bmagVH8^OyhgHe_;YOI z-uZIls2{h{xivPVSfP3U_3`U6rjoQT!B at 8Zy`RyRq%y()TdB;}P_{4_J~@8$@7vMf z!Q?+TmPP8@?(^EP-}-cwDfaQZhTFuGw6JRng+G{$f0olMDV85lviS8Ip1ynJ2YuB*KNmS-hBic0 zSg!qgUQ61XQCS3ro;))BlXV}21t z)VHn3uH&3dYy|D3;Rn at k^Tg(kJp1zEF(9uF=V z!jX=gzeUpuE>T-REODZxBZ7E9enx)7_qVKAC*t at 1ySB6I0OoROXKoUo2|~WRVD&i4 z%+2h41FtalLaz21;qcgtIpTXkX2X0#1s0E$4pI6*q?3i_vrr?@G4Vh|$6yALkN5?d zja2r1+qZzIit&J2#<78L8tH_9AMt?^;JgV7cjV5eJ)nWLk{I;v*|uLZ;PhSjb8h$9 zcK%my#$k1bZR={#z06F|k$1%1sSqQO^QdiVOX zaEo*;=B#LfS*V;Cw)FZtghGyRNCO?e>Oc?Y*-znH`Z#vmA#^gz^UO!cGeZ^yrD6T^ z`nifWfZQ#Pa`V07V65jy;_GU2c5Q$u?^fI~aS2-Sa^%s5TdS5EFVSQbUdMF{p6?^0 z-c(g^z%psbZ^tJz?(uUC}@9ma--C&fH7g_|RCAo3cwkqktkEeH%lIk5B zyV&Jn_cK9|g1THCq0 at S|e0RgSQ@|N%t&1A^^$l!`6-b7_vW-L941L9EXGr2l>d)HS zg}BJcHe=(UDbj3mj!9ef)#^qq6LgE at KFp5Sx|X`V`Oha2&aQ3S*Tr#FK4!Mg`MqNC z+|Dh6ZMo7 at BI2^?4%)i3lCIM~?pftmwzE5fe12r@+msCCubiX7GU zvIg1)pva2&cm}j|2X$0Ua`Q$F(RXk_4mvJfRNhFWF&9hG`5QFeKrc**V0z)l)WlKqBk%UlG;iO3# zCNrqg)1OfLr#5)3$|hO9)hTJQx9F{SeTcZZ{azr>rRcTL99-ECxP8FNfw4#(hN?4! z)&){hGY-tBR=~%%ZY<2NV1hl12uY4w{G`mJTm+b(*$K8R7%9M{i>^W$tkjF(df_B_ zslVZvjWCT1Nd`^dZGP~Py;PIKjJhQCScSo^G1K1Sb3^$3g|hJ`E>%HzWZqj8_S2M~ zIw3n-6eU)XpCVmh`}$%IH^wc2az%E;7xH+Y-(9<)?TLiWmW%Tpuc&}J)CzBZb at V4* z{cN$%10nsckM>dq-t*|QsPUD~T|Ib26KUG|vt?VsSjf`#0 z{!9HeTJRaVYN-NcG=&Zxy(n#82jq&e#<1=KnL_ehs?OZm%Xa|z20e8j zpIa_h?G~NK-5<9TyfXnvU*h_%ANn|+t+9P;5cE%j;JVfkm7Y5S9qtD>_t^cP(*hk> z{U!R&V|Fla_(!f0JVU^+5Fg=S2k5s1umprZ at Yw^xf8hBE!hhnK^{WHRM at V3R>05iC z0n>+aUmZ>W{Vr$B=g-}I+)uGSotRIW-5s1yy*>xrPm#U=mXGwn9p;bLz)zz$gRc&( zANhfw7QPaF*YK!Nq$Z+n;}jOef+pjXlxMuLA at 3+BOqsHlgy(j3!I3s2$PMp*CTN zJK|$AskM^n-P$`m8_hXAEOyBBoUXc^b^6T%PBV26YIFhXPOq{%9^D^D+m(m%_n0C( zPLzM+Derh|9Ca!Ah)6nI*Wd=aLNyxJ5F3;27DsG*O=H!p#7esx)d(AW0r@)7cLP#@ zoGZI^8+ttImF9QRrEd_~p`$&-l*niGqSN#l_2Vg+Ei)T#r;Sesl-hsJ;Cz5?4yD`M z%AQYYz2fsjQO?b&EqO&NH zG#$T^@|mFCn4tb&d8qXN&8^hQ87X`8H=em$fb;<~9?rM{OQFzYtw8?Q^d zGlfz61-Y2mCE9vJmY#}NyD)e1aSY5?$~NOpB!|u<=U;#! z&1_5Eeg~~IOH0kUsy}<{Z*yY;^}2&JJfzxH)RzhswaJ-p#PxUTM8zt!u4I8#8?_VO zC@!1o$T*(KG-Jd{EH~y at m-)^$JWECL>G95Io`>}l>`S%VMZPp^_ygur*;?&tHI>!n zwLj`4J^omWUCnk3OEruRW>iWnEZWg=C@)p=8>yKD*{Mv}Yd}*gj;H(ByOny0Z at lnk zS+wRJ|4iQT;Fvt~aYZz7E0a&V29 at AU@ojjNU%Dk3FM^pJ_|(DHY5RDdt%Wx`k7TR?k zroUD-QtGE28^)%m=C?t~SACVXtjuZ4u`97nyM$=BTTFvqgOhUTLCyDQ!3ag))a|KT zBAd@@zr^))-S`Ma`!K8n|7^nJJ9_34i}P&ilG5DbhEa^F7^DIf-*B`8$_0teMIteMCF(-Ncgl0K`Vg&sczaXTEX2DVgoj5wx0*pO;_u zTZ3NK%czp4wM%#9$biLSM3!CBY=x5x8`b7arN>B)<0v;PjK6*DLnXhN24v4!zpNdQ zZ1BTr4t$lw>wbA08?WYynWo(%!v(|6yav-N|A9jA1Du|h`;J`~X z%O+CoINz7PQK#ac4xLN>QF)fwAFi|PFc%y55`QGuZh5v5UoGLW1 zE`2ifGu&UO^%4JBPJew0_`OV~BDLMumKxD)qiiq at _c^PhlCbQw;DrKH2AVaG`9^0# zhc#QKtg-6o;KbM=BOMq2is^zDnQ;OJ8mZ}nW zJ%v>qn+I)?YjOnyV at Z@<5 at BRn>bxP19m{wVyj8lmmyVU3RiNAqCv55h9nBHCY}AYD zwy6{eXZhQNV_AhaRX-nVrb-+(XpO}Cie2M4d|^Dum7x$K8hKbnOJCmXE^Je=pDqd0 zXk=kgd0eUVKun1mKPBFnI!_ks+fgLlI0hi9B3bssChRfIxn!=3ha_7izMYTU$Vf%> z1L^p#Jy_ewr6ewuh&BCK-q=Rr|#{EvbEp zhNx&z>szo+L3TbBn+mS%LF3xYAH8W|gO at O>xQ>j4Np5Gmj z)flQ~$&^UP(v?RgT%3~WT1>3JS1$mrMN8$wN{0&eLv-IuU8+Vnip#Tx~vG}p48i>m+qv4Vas31#Z>jQ1`-GN>M>ise(ApPIzbVTQ$Y2EDGI&E zrmNwTsE$X0KPGO3bgWYL%JcV7jxHNOxVK@$+-1EX-P7kAlZ at t=>CKHvwAFt?K*806 znj>U#SR&al?Abi!K8YHz1_`^{Y?Jx0a~?oUd88q*?}%Mhwx>k1?Z{o#z7RP#9QjOi zv+d|y6~FX23r;64ksg-)c_9C%^pfky@@cGn at jkU78dJOr&zbktwx9JC&#QgGy_KDsNwTo< zkK at z0yE}Nva!A3p^e^m^yo)|0&oZE4TzGT#3Omx6sAAjsS-1R#=T&pGGJek9E3{qy zB6n*(<&fBF-J`W#`f_=TG|gU_$q7Ms zWPoub%7Z-KKdeV}2u8TkZ$rrsjJ|~h7?HIFe6HpGvCneg%;fA!2(*4dUQ5&K|>M>B0C}HSg3cHEr z1#chU1>+&=59cB7|J6gxAHhSyANfhtXK(w&xQ(#`>MH)RA9Bur6^$?$wph%Q%A1Cd zKo2%vv}|wgMBJ0E1D+_}KAf^hXLtO>eHG6SwMEPz>~fBCx8fxG#`T`wlj1MOMaGKQ zLMMNQPw{mhwp9;g7n{W)uD7-P8)Hx)hGoJsxPx}7{XrG&ErK2;78=fEXlMU{x zN#8~GSKdH$^ii3dUwWorn`2Na;(&uXZW9hIa<>!-go(RJzotuKlHyc_F(m`fDr}r z9{01qu0CUpwzePgep~no^3bxUA^3+xoA%-t_VW(*+i0esDp&to;(*jqJf{3VF{G>) zl`vKyHpVndKxu;UhptiF3qly%UD^QmkzLsL1tqQ-U6l-rp7Q!WUn!DFUoE3VFNr;f zJIpYGyYz1|Kn=`W;0ne!paHe6X-}%HOn=%uK9=j z-nYA_ZyK2aiftor#l!)(`!iTHpnZ!{6L()aTcZFrJx#o>gz>V*kW*p*_LPbA#uwo3 zux_PmkD at LfUpkHc^bzd-uy92J!@-D(%-ZG>2|^T1q-Ns?`P zmzrZ+<0qP2`PA*H#d8rl5#ea|=X<|9Lw}@-fIVI5P^0AALI`uSSB#)vG+D3>{R62U09ykpM6{}(I57$uO%+9!|*-{%|U8-)p!=5XpV0r42{^qGLT47f*#2;ta>jJQ~c>4-AnwBc3Z>4`CwKx+4zQQg~QgtHC&~xkN zm(ZniFg^qz<+Hs%&1vfDXu)3h(cWx at J*COkgM$^6V7Ba^*#yWg?++DkQOIr-iO-np z|6C$Xz^)qve?E4Oc#4i#7Vr?A-Zd&Q{L^_#(%lLBFJMn^@N&EU zXFjg{p3HNjPs1^BLNAKK0lQ~%^Td98NEAEN5KXs!LxE=MOtW=EmUDgv)&__X`=8K} ze}i{JO^5FP4juKn^Zr-p=<1))(ZD~UBP7eGzer$ty$af)&Y{-R0;C9!=%*7JJ?d at R z9zBiof at dT!z%{lO?Hc`hMOz~pIpTUz$2InO5EOr+T{G+viG0S>E%v4a-s;d_i4vsf zk#JaY1NjU;oxe zC0kF`!6G1|t=f$tiQ!RKfIT)bc0m5sA|VJcOx7Xe5k-ueKfB?Y?y2gl>~U at fVg^%h z6?YErgRWP)y*rr(k4*1TF*zc!?LL$rA-2o^V_{)-$>s%VB# zI3R={Brt{~ToS?{JS)UmI3dJXxZaN>92+7K?9TLS6|`$4Toa-f$^#pZc1Fl2zItZJ zSlHk1FI*e~8A<`GfR;u09bKD%;AayL4oMR?m#C!&lk|xrll+ORW5(>^E}T(z2vy;R zP|WQ95BU=}$3^`Rx7QuO*xf1#u^zi$l--R+cw{U!%U{ggtMcYGLP#`!Lpy z=y*2wW;?|pm-LH!c8mLjw#|H&^=Gq|4+Z1vA?CC(Sd-#asp8qqG4AI)Jk|IoP4-2T z+JhYDL>)D)vnJiK`sakUjCY0-T7*P2=RyW+L>F`j3%IK0@=0~ORRhQW37n0TG0KDf z*Tj54_ at A6!{5uwY!$W5nbEG$t+=g!Q@!8))7Oui>o(d_nbXCqT at -kv9sfdhP{c5!F zf at +MV`B1TdJ|%6NQ8!EYItanKJ4z+V+m9ITw}eB9w}Vl<1}3l;$Bb2up+Fs~ zMNa|q%v+>*u$LOy_*;c|)JxHb)R7FH)zJ(a!O;vm3(&yQG_!Ycj5(mhDeA>07W&A6 z?H0IWonzip?G*kJHKKKN%{I+!u*5afRq7Ptw`Rg1e7-Vme(LEP9oYrZcAsP0&dHn_)V$e&&Hj)?VZuoueuBl zSzC`{DI=*HSOG)zjGx=#%;wi zHH~Sd&EG3b7hL?Ujd)U<=c-+_3*(A(kBaw{PY~5IZ$kRC&D3M~S7) z8w#0t*t+(ogHD^twS`o2w8=R%u%pj$JsM;)6IA6GXk`(H89OyLE!S$QMRU)*D;ili zx)z+YK{n8>IW8+Qy4!K6E*;Rr(kmhI zO*yLV4Y^uu-=JLBJ1;JG at aT;=l)+#PoOBy-E*W*`MiGiq6GV4M2cPy+ChG8~OxCc` zc)h8XGhLY`mgX&8nb!YplRbo(6vIk4ODySY98xybGS at O{hgyG&B at USR2Ko6pJf}pH zvO;q|u^t}Y>i7EqbZ8u8aK3k$ZP;;PZyU2^rQ+|adA8zIHpQBgjZ?zwjPz~P=}DBc zS1QnRfW at BMA+ugqyOd5ryOf@AGRAC~#lmaCxu3TyHVxv+Fx}j at sGIOPB`84uPq*)!E7MTL5&+VFL|Hb z6dBoq at O8!LM4#7f;Y-O+`cQk{q7na!IU(-a`xLqqGJR{r9)_BHan=`y)kv|(O;)a3 z7~#5rqRoCgm2d0LcsoO^{>NE#2WUGFbpfOa4s+~5t%@G#Motew1#J;+;f6JB;!bkS zBu?VGE|SqUs4JDRJ56%7ofXYJBEDttnf1>M;4N|dUZ419eHDwdp{K}eP9xSI{=eSr zRUFQSk)wJiMS=EUpP?N)JlT-vZqPMzY^l&TyDiq4?>P2X16QVdm{lqWx6kreE5R_asXx!G0G?Rf>p;5G3uw+f?3C~ zAeBGRHJb>$59&4amaTg(2K8Ec%jG}AgOf{VT%+>Q1nvIHiM}y|SL zO0 at b4?2>>ELWuBkeQRL%4 at 8KxbGja9j}8z^c;HgbNfjFbipPcVza-296|apFP{8$o z*W=(`&cny|>*U at sboOvhNVpZ? zBpeSY4%J6S4;4UG3H3)Fg at YtA&&^ikv?ty!W2VaPPK^6SER0i#7!VqFOE=(JxU^7$ zR%lZY6!(j)wg`U3&@ozm(Z{v0D_-3q8W{czYg6_E!7{(8CU_SqRvVQ|YQmL`(G2bML&GH3k*CohYbo$4 ze=ZXr!Xnzaxn4ZC2b6sFgLAT%;H7y*o(8?HT&}#@XZSl`pE at -HzG@CJqEd~CCJtx8 z$P9X86t5bZ+)dLHVi$)BvW}nPSOCv64CziXOzF-tjJs+~vYb>#zwf8TX^Be=wuBP~ zS@!p2D_q)RA^clWcLRt41>@D7JY&ChY7h2z|2>wt1ti$GIyyTTt9B^4-RkCjd<;)! z*q&a;s1|UyxvUJVuaMYg*rYFU=G6kVLcz at U3&{`^7rnwE$zHlcLY4{3+sS(q1PvP~ zFmlk%I8iyW=RFgjN_RNLtLBU==@#nkRB^O!b>n%lX|=X7CPW?+wZ-dI9sPw(Td?;2 z5MpuqE8n173|f}9U)YBc!X7UBvi({ONv-qfTh~nLcohn{>K+X9yXng3CqKv&wr9hd zv)x$tDij2d7t^C#0WCHrbk&_Ft<|e%AW##RdeCd?i^JU;AYZ&yt-8Xe&UHiL7Q~CM zxjQq;qBuYp6t>{T>4?|~Q(J6nh-7ek79JFh!^$*m9z69ko0?<6)_fIc9HYOtKMzgu zp#$H&pQ=4bi8u%ro$1DWB2uNTcB$}SIL-3$%-}nf=(+zCk znP~hn0RBP=k at MY=rtkEN1w at XSXbfY7BS!iS=2FZ;2QoY;-RF7b2$~44MorW)%-@N_H5tSkzmmlHV8;v}t$)jWHjnB10O%AzGn1 z71N(cm#376#{3e>AEV1g77V$^MUgK-t8oshL#XVUhC3umKwmz zl-sy01f)JE{LX8ZtV;%UzX`-!{~*Knn0kLEn)+*j*zRc2sE=gO ztd2CuS%B%}jlepo1K&Qx`sa=zygPg}i;SI=G1gvkr?eNlNEhI>WR8Wu1_5D{bn!E#y6xO%rn9#jlA zw&V3}R;5oF9M*O#Q!3|}SWPwhxf1&>rxcm)mKE1W^ zV!33qhRVgk?G{h{Hn&c3S;{N#hu*n?U*cU_uS7yw?!v1BF_{de4YLVzEK%$xkmo!* zJUd*g at X4;B)ThOwX&3GWCTC>6Ee*IwZhV+vt?xxTH*a!LGdZS<4H>I&<86CZcMUQ& z`L=6YUMzF(|F#Fq$fn%0Plt`9HxJa5v+#nu+mEe|O+L>!~j}L%Az~HQT>=-E$GzbGA1;`Cj1CRJO8$PMvR*nAEQrX}(x+j<;5G(SEYwF9^o6w=_}27m?P6SjSl&(O)ue_8f`e z5LfFwe2QVVyHFuqZnKE7G3ouL<&wu-7zVq{04W#o0SpoF4{xhfXjdQACW&xqiVuQZbJ%Jxykcd at Q3L9!+* ziuGbQ&h$WA8VSa0PANguiG7cw%a>>W}@eFHVLybQnD#TDUHsFpfKz%BU_H&S*$1h3RZSekZ)m?f6k3$nS5H z#~dM!5XyopD1JdtU!2#kf#>8b^hDhQXH{mF>*09L$^y8_WTEO^`n#{R^3X zJenvH^e03ZYns+;q%e`z8maODn89d|ks3 at 4+kO6EO4*3s-N0vjy&EhSx%?5<5X2#UR6o`uo;;N`p9UVWg#r(Y zv~s93GBwD#`33W7&B at m)F<3!b7R2ty(;itoX6}D0*f*@CDzyG6GNlhqr#PQNThXUr zag&VgvqEeAs_mN9Qd`xXK9Xq%25VJH#;ax09z?TA7%te`F0xsA-5%c#A3Ar`OUf)y zTb+!1zB0PVf7y;lUpVHCBy@?8dk^GF3pc^e+rx!1BRR(#3E!V#+0M7p|Lu2=N!8HS z(4uTZze`HB`Kc9flpxeNCDLUw`j;`LR=AoVpw#cASw^Y9rU$bBGf^op>HK|)_ zyEagn-KIE~@8&Nt8bw!6m>Hd9>+)-t&%SOstBTv&wsaacIt3$+p4u*&Ht%7Qgj}4Z zNpoA6*xgoevZTJnlOV_CsuMM4;n!H(wM^?=_;EeL%@78SU%&f8MwaCW28;P( z^`AfU1rwOJyO9K&a1r(60GyC0xpEGe`u8vZ3j|376x=y`Ov6V1dngQk2Yd(6#Vwo> z`|0C7zJFewZk2OnAzgL`aP=G-Wz%X{tNC;6>mai()UT{0D|8sd%ggM;{d1Ch`cJGMv zzH7$jDw_oI)!v8Ors(|Z#lD?#(TYOeeL+trbdVU7cwG?is at dL8FZ0dw5Mw)h3%B|m z`bFE?;1eoCVYod`kw?_F8I_6Tz5Sd|j6E5-x8l7%*?mEu0COJefD)qd_egLTYNWec%)4=y z;l1cP;eH?vBVM=C5;Ia1IB5AXX&Ins1G$Q&vln5IZuA2b~ z?XT_-e0cO=XnAy~8|?Ze;Hfdf&N;5zwIgJfS=fSGsMQsVq@%*UQdm)dlg%X#Q$#7<0j8Vb$uPUOA>}81{bxH_V@%&;Fu)`Eo$$!D$@;2 at fNIxj*9her(2K7wOK=Y;ql3Ofmh3F)&v28)+J~%lmh4e48S2HE z at it*V$|f2^|6f(YN6Ffl%!1`=%y%N%sZ4^^OE^a=+OcN-qE$}7vSz%Qw{ms#4B`cA z(z|_aIb(m}s&QbIww#f_a#aOT!HPZh#j2*1Rj_#J`w^@5l&QaZl@@TuN^Rn;OZ`u# z!K^jXU9@&8bMJ38?z>5CHKyL8CEX*9=B&}TEcLt0l_u at Jw+{7Gpo3*|!i!uD7ISZj z8s^=GHodvOL=`#k+FEVuEl*u0b7#dG_YPK at -r_^C3KK|dMc#Tis$FCJAzHNr%(re1 z_tL9s2IgBe$Gy1JEVBj_swKS0)L3Wq&eIINHLEuRcPtN?0;<#q?>w}ZSOeca{i}+jblw_$p?JyMJWgFFL%*hl#ZTML}t( zCRx*ZKX9osgj=~P7syw`llh{3X&g6i&FRvl?vqijhW+PPRX0$$=8-wN>C7Cllyh`9mv*wX?)XFW8TffTx2&x8&h0>b6FX#8t50^%DK!!>a4=|^43H6ArCXS`d z#w~_hq-r0Sshw*$J%9G|k7|_)a7{bce0uKe`ybh=KS1Z2X=d6co|&AgCFmo*8U~hQ z8#h>&AaxHG+UAbvcEzgB%;=^LfL6&;H*omtOj2N(cK=utzBDZQ!)d8uRq%wQgn`0g z&-C_V?L=J9b_nEUH>6&7Zt8322CVzT!;|Wj?X}?MlFlg+za+q;Mmb^T7=SmBxGsx4 zZ$LGlAs>#18Dk#3Ole%vmd%|vnyR at OX|9TA8?p3Tq`{H}HF_0k%kYm%HquH*%b+>s zUbu)eiPkv95FR&i4{OplATCS}Ui6!x8iQp@^rh62f}_6;mV z_MgUcniFyWla@)(`faDdYy#eMin2%;yQcJEZ64H^WtC_&ooMp)d9WzmX=qa8TaoOR zTLt6UtlMc8Emg`D`kp3f&hM|*X21rmVUE9>yNjiy^Icpni6M!m8Ksxu=f(XIyiHtX z)Hn_iGn&6zg`HA` z`RLSe<4AF9>CI{3t4u3We;!#kws at x4%SG6W)9u}gs6X)?YOee_^@Ir-c;GlR?GPY*6EZB`L_1x_B2^2hpS3MJD1f%AI!LAM7zN( zLsHbVY~>WM{F at e++_71#$u2VxwSF~WJ|iXa4j12oH>Fm-B;|Zp;h$Q#)P4Ha6f+`3 zX76nPFUH&~NY6aOeTp}-?{>v|l9h>}p2!b(i4qq={6{nLx? z&Jx?4u+s~*%nZ}!bSYgjEU7^>>zL>uT7V5<{fWZreQ?7zCuJQpb4Qfy zv(m*z7&nBiQDWle7F~4_JI=5idVaa98atHEum_qaAEYO9vUdJca%9c5-L-giC|XZ` zIX~^Tz3-l7pd6;*_}qwXnp72*0jfAjB_>>acw7LYI6iO^Am&f zdy6?966Opo95Csd-ep*}!Ht7-uk3z7aAo5ywtoxfVr%j;6OZszQ3yXT&uj7}Z$|}M zg1t#6M(6~o&jxa{hI{MNRjn)R-%f9jI+}ofNKEm+JnNm=8?T*h0lX2dt=(nG@%$EF zv{%k*w`+r%?~Q%)z=M0ve at TuBR~N((i1*wtuk46%E{=&N4@+>MWGJ{_j zEid>U0xi7qy#H8;<#{K1Gy5q!jH{5T>E}%x;|w!rLH?h%g(z-mt`WzWL!43OJQIjf z(KsoBWbRT&*~5$x=3En)QQ0^xf)av1+((WnPAM*`j=;l=QRaM;uM*^=!f|2*Y6Q{T zX^yHcbcdQF4LK&zqtbC|1XbM2j at 5^nqYZgvV at iXlpz=dUt~0JPZal650(>q!Zc+j{ z0;M<{i5wF$iQvIQN$1~OS=`!O+T81098R`Js{;+GCioIrCcF~7qeyW`ak&J!1f5*& zE*EpRTE{!_cg2-oEJ^b|^immR3c-qFLLlYtg>V zVyR_<+gRP~N_S3oPLEGFn1)Y>PfwO6m!>qCVYca9Y&J08{Ljf{HoXp=4*dolrH%h=OP2LP{DFd7-ryo-bJ%;V zP`*NJcvC7qq}TWs6OPYUhuA}s*u;{_x@?;U;ZUJ#k>G*D$`AM3*p5A=y3{c^vnNV| z7d&I0HNP8{zHouTEh1)ydN&#Yo z21(x_PjW1yhG${0m}U$)NDUO-05uxHh*~$o%%$#I at ytRHy+4#5UDxNtrSDtvOhXWl zKBN&{*ALI71HjXF|Hqs2!%3~6c7O}h<&qg z{RdRg_FW^I7*#N8(kb?t8NA;Hu at aS!A{a^Ql>1B#UTFKa5}l7K7+u9oN?B{%~x;MXC8 at MavW zfc9tF*?vUOQ?$VVk1a+($#Ydb5gDisD*%zhF!|YL*Z^P at 6D9cL!+SH38O#~ci;B<8 z at Ie9QG=bub>J at vdSq+5;w?-O_P<4PDumfO6n5aMG!5&5gDxhnu0A%|ib1>}iPBgqN zYC!(;>)fz97%)UU^0OrpA1uKXmOVs_*&967ruD`Q9&LbbjSwXH_-Z>`15$_zK-qB2 zeg+H)#$+?mf22H1II`Mf2WY<)w?S_V3sQVIZAS4936l6 at wi*GRDTf8atTw4XtiUt7 z?iUyV;%|Re<2r`~DL=e6gF1(Me|(5t^znlX&^}qNh8Vzg5doOIPIb>KLv?!$d_O-KGF|6 at UQnaZcopCW>P7h^zZ!i9^`d>U6ZJuYdQm^=A5D6nuZIHSVZjB@#6zDE zkX%1LD8YjJKZr0tqn{D^LPv)_X+AjlVn&BQ89tEtf+>eSsXrL`q9}(y=|711!pny8 zF+UlJMi(x=twyH|phG)~)8xsL!zy6)X;pZ#ViM=k1iC1LEoi>->3umaDLTDJR$(6f zRl9M-o^agq@;%0R;|*rk4grVCb)zZBxD~O2E&Nxr6BLd7j~FJV$X~rBr6}Tf8RBEC zOd$ylhFC@^L2IFNFcWZ=1;L7jhD3$4eGtNlL1CfBkZPf5kTP&4-|5I>*z0qcru(D^ zJRz&#(Z5%d%d*wyF^&I1G-?de9>9Qf3$1{`gIoA+`$Lu!g#^fiLJnj at p#-ud{7Au* zL^H>?qyRF{N>j1cM=IJIA`}kvaSZ4}ZouDtzxV;thfu3E~e8gLy>5!abo- z#XTXX)p%Hj35s*5X`pRs^zYb at Ic=yTx}2lP6{$Sf#rs(aIMcI z6bn)TMH`V%%98blWPk!v0hI&aGpl~MZxl`k(Kon$s*e)h3NoLct`|G z!$+NQej4hPCzNsB4u`;(UNG;1i{)M0M>?ZceybZYoOfP7Q~Bh%l7mS}ekwQ3&XR3)-fwpYy>)+qT*Dt`nK}fm9YCW_y(` z7}oe!(_?LU$6Y_39z4|}zY4++t?7xbpYnj8 at 0qOM@_=6V(=Y;DlgZT!@1cB z><>gnf|lNOEWn6^s@${e3o;49AV78# z_@@|vFj91snC;`v5nuI5WL zgt%$u5^r&ZAR7GJfXNnaNV6B?#DpFCuNEgX3}4?KiHMS6f}6~bX>Bwd<1H*4^DR^y zBflR^6V~uC4Oib{{#?P!{x8bjDLS*ROaD&Awr#Uw+qP||Vy9v|xntY5omB4Fww+Y0 z?|r`h_vq2 at Nq6sku*X=(>so8iIe+82>H+F%YOAo#ONaNPSHo{%iBgO-r<3SasV at c- z95tQ|Ha9EsT at Gs{FGG#mJGINScMMHWE#_m^OU0n-j2!R~!rU^J6d{VlX^J&w&XFAl z5yNjet{Q><-E at f!>A8md+~b$)QNpX2`zDmB`~{mZ<}NN3a)nMwt5OW at 2~!MpIMJ}6 zk_oz{z6^W at G9>`C3|E1Y{^xOeq7-y$>!_k8heNas_ItWEYK}9F+!Jh~IDc5E`9$;l z3qHPL*>*~PHIMHt)~#GaLSw at LBXaN7)NM1j=;`guf`m(9^CmT2cFxH|W%ECqtwC9d zz}naGm^67GDu+c|Ko2Vp{{rQnT#FUp!D4EE^BU4%qdLX&nrNaTmu9l{d;yk6ag8 at 8 z?%3MvGf*4?3f^{%;{u9(8at6SS1QFoL=I!p0o6I--Cwjc#ZM`NM-*lu`5V>uqucd3 zUzxugL-qj^i^^(=_@<0x!0 at 6vjFyl#;_HT=oqm at N0cVlTHzMBCRaX>T8G(hv&+csv zz8=R6&60K4B7F)vOPRyeZgfqKxRUtqlRWk5=goQfSoBe)yjxDR7+x()TZb;K^VLD@ zObUJ0`+IWPBXDD5zB6timoqaDr}R4&PwDo at AgjI}n-H!`%gmC$CX^n5EBp0%Le)@h zTszPCd3x1BtwKF1a7BJSH2w}I$2e(JKAkkzVK>X0vyVR351KfVJ5w4(pXA7JHt?P` z(_rW!UCSN?wW^bb^z0&Rq|rFG~*$ zH=!n7_PFEzXvodW7x1Ez3U8 zki73W1J^LZXVB;k{?Jqv at PlzAq38QLf#wreQfX?dfk|SYVCd!OPQ*{zJa>HfAkj|S zEDak%-Jr-t^OoB8iX`YXOkJh9<$izp&7a3jPCTN&(LM2w%!3Cq*L zBR#$%E;0>A{sW4ie32qeDw9Buat>dQ!uprfmM84d#7-=0tcKSdN#~bA`QmAi?~n7} z#MjD-mvgGV!I-|XC_Ac`NV9iA1`nJz$DE6J^4D;6Ch|64O#l7-36W8o90Uac>4o^e z at O7$IZmwpI9uEJ-*ZmU-;c(gbJDTZtW*i_D)2JhJ4bKewR7{kIOorRf2~$j8*Bwvm zui~R{Lt{n7or_ at Q+2-VYzBcPH{PX6+Q}#)=&&}7%>k;p79Qs!hW5(a_p7};{14AI* zw-HS79aMXwhQG~{=oEdSUAS*VLng~$RbVl(Q$8LZTc(!ahg at sTG@IMZWjULZ?3eJj zoZ+jgdsy8pH)=JS8G5{pv~>L2uI<*KGzwEcY*Ghq25)=1>#`nyf=woUn!9^7)hFm0 zl7B*oGGCEmdB(s$kAYzsaDwTM%7zFs(tCwvaON~Uz!I{Dtyx_P&X+Xzi0l77q;}{q zpaE3bde4zZlR9a(;{2T3% z0(Aqh(GO)TI%IeCfdE1zayy;j_^4)DCwG at qxM zmH7dwzLMs6oJk4CHy&*&y3KA8gKHLP475ko{UgWJ_(U^}E1S+~DHD`Y#tNhS;cvH! zqXa_KLS9jYBMRQ_!r?W)C!xTU9Jukv%G5n?WZEy46OAUy!prhpBa|dz?yrKM=}0?_;@z%<@(}xrj!;aLDH|i3 zOEV at Y>S)30g*6o~cT86tn=o_09r%s?qrgo%X;!TO!d%;GYumBd z8`m|Mvlw#mBWzR1;|u%p^!Y=iP#$M%*aRFlR)|zX{@#Oy?y$%3ziUF7mnkp)Uz#xe zmnJy>kFc7Yxx2aDf678vbwLRI3qVgxF}j=L?lERD?|~S3dhoQ&>h= zAvDa#Bm+ISf_fh%e@#s~0~3G)@r=P|q%_soU;>Dq!A!%UM3}5Q*KHjm*t+lW?(gZp zv-_->40h|&SX%MC$~ibIb+lg#Go5h(K(?gGY#j%O04H$e-vMhDfPXzlr%TA=tH%FnGt>6a;G=-v>zZ2t0PT z8~GPmti=<|nH4hlh%Bx+DQ~W%glY4cjel}NAry_`&%bRYNFYE5K)-6mudpg6?H>f+A=|rWPRN3y=E(25mPfkf}@+CpN1Sq%` zHl(5$trQa%C42pox|{<44!HBPkV8r~#$bmzMe+?5>lf+!o)fN8xe|~zisBAI*K8Fi z7QQI!IgBWx0qURr3jgsB^M$siqMyxm3e~uxhS#hJxm`%H#z20EP=XgX8w*F8%^`S& zHh)GB!!?0VkSE at P#=}UmVh_qP{>zYrCe;>k)*LOz{r=<6yQNZzAEpl-q&S`tHMQGcHSs9a&7qanMe1?cx7#Bi#9JS=8%) z?eRN^|BJ!jKUQP^X*8y*h$f8w6?X03W=?ao3>t(hWIt&xKB7z4iaASBLXM7$i#DMG z%h;;B04MMs;QPDKgbg?EQ~5mO%m%iw;lXLz*K+!G+T7xK<2l|C1Zc7b2IJAw9{vtH ziXql>DjX9H^ufCpIM5+*uP1M9Lp~70)ecNm-~au zGA0krBpnT-#6;;M-hqKQ at VOXdJ*o1=9Oa0ua(2>GrhxZxD at G&_IXe!5Bcf>&CCZS{ zs9gVbgCz%L(Ntli&<*(1q$7gLUS4s5GjHoIC2h{OXftK-lXFH8y_Ja{r4}4B>=HAs79_w45p=ZOl z!A>>jv%qOmPowP_&TD&8?_x7qyh$fE_Ze29tfal)>ltHu)bb4P>cHQcy9WquiY=+yAt3Iy2p%)3r zL+nWozbF#}ppC}@;@aC=nvhfu!4B&Z5XFO*e?v>xoP|ltMY?ptCuNf&V!b9vnmHeW zUyq;iQcGHLbqA3NaZDFSOT5Oloe#S0 at yn9o4kMH?=di`6kU17~bBmtX(n!0Xs%;K4 zP`$8c_GN8SNp%=39X)6FyTI4|&QS>$$`sOfMtcQ6cjrtre3hGB%Gb%3|^?ngYuasqjJYo?Xi>YDX-waX~zr#smt|Wx`BrW0b%@~ zwexQfSSmnQ6HOC+>>Df)o}?ccIfS$XVAC%e_!hl1rZKO87_J9<9Le;Xacs+8 zI|0TE8QPnI~nVu_kx=^SqFEK#$YsWlx$WX1SKxfxw&5*X&TPSOZskD`#tuFbA zb5E^PBH}+sD}&v>@>=d-Ige0aTFL6%)T(Vjt%Isi!|8we#blO#eE*~nik7S_I at pSK z(eY4t;r3EkYI3c{z%OjF1tt5UO&gG)> z_WSO$Ey9W;Pg#rFqDCujrur9+JC)+OWK_T=<>w1}8U^@`hlya^0juCo&-wTw&%x-K z&lga`H{(4z4$HMY+m$^K$WLq&mxL+iEKxg&)sVHAM&&iJRk5|oAR~YV_V-(Uz8gjVEbHijnX at t5S*N$i$zr;=b#%d)d>zIBfeBQ=I`O+ zhFaZ27eLSHk%{V!Uw?z2M7h#sj z7Db~J%cn&6s~6#x=oZPM49gir?A38YU}2Za*kG5K7CB0!%dbSPl+X*@VKG!PL)R%5 zf1 at JXv?;~YGKgHE*woF_E((|rF%?%4u;E(AgN;b7a6x0A=|I&;tY73$NvWdPvCYG} zxuKTVMGNI at h44V}gL{)?!MK|CfcFJ6gg`izEkMfsYI*h%^Q3hx`uS3c-Z( zfv!P(!dW4nd+3N9s~zxhJL|}i=qd+5(*9PU{j71_@;SW=-76~7S3KG+yKw9mXWK{3 zbi#q{ElcVS0&ysS=qthqFarA$!}}8HIvkLo`HffsMR+FpN9#zS2yPs1`t#p;8N zGJXMR?N)dVdT6BbH%8^GeKhZubECY4)`xPu$KUl)p(C z$hy(V%0QB&kp!y)R9-0Jp#t-RYNCqHpIQ<&TXNh{*y|nn2y^NB90HP{NRNm0C=~T-DiqCGEPr`x6!R%n@`?#ixTJ9pLz-veGSAKTbm6!FF7( zR%$~;E7m;c9K+=1B-_4M@#y}3tLA^hfN5U^GfHXb7Vt|eGSTx~6`iKgqBdJb%@~bT zP+^ahP>~Z-o97D-vMH6ig at e1(XbOk@?7$5B0slj}c%z zO7qlA*^CFT(Gb>6NF0}f&u+i at UDa@Vdb691z1pwU9GC2tfYLdVK1xg}_-`RI4<1_c z52zp at cGMss^#Ail_&0zN##c|AVC?&Q>e?c+^y=_5b=$+cRC?jBO#GBZvR%{K*7b&7 zPpfritMx+h)ZBX^gOW at K%6~k at vq2FNQ4ta45&!i${r=vOZsg|!5$L<|Kbgw%Vs+f^ z#>(~mE|3JtpH*iC*|hq3>;ECb<4;b|mmY{a{)ZmJK?H*hM=22%4`3f8VcqoHC`Dv)8HU5z?NP0YjF>U%KV$AYD5&DqPr=~UN ztGx$$T!+qR)?4U=@~{Gn#cHVD9`cG8S^``_XEguP*!y{W0h`7eQ04^j at C@q*6r`p% z?Jby{`6wE6KF)##0}9eq8}*jdC%syRssr0FATt7#+y4RCZH^5w!qRVOQ%Y_*LyeDj zFeK8ym9Wiw%bYMC@?cGY&lo(w0Gb#y{rq}BB| zbFf9O#EHP=_uwNCJ{0CyC=@R}12!u?7~R1PQDYT|U+9FUN at r(mL9+=2YP5%D6gknc zY8unIln>eijbYnZ!|Ciy2JwjZPi>cK=5v4c5-^SUQ;_gxhcOMQ$Pp5hy|!KtL5^kVfP zw)*3Ip16QcU_x#r-5bd_3T=Rn-N3E!X!nTUX))W4rPE>I!i1te1{#^GZ%S9-T1AYa z?)^qn>^N3p&R#dAPoS=grGz_7ihg7I$$GYE&aCGk*{?%b-b6-Rbw7f7CsaM!s+m$A zF}y!PTLICq?zF>Q0F6|^r!=<`s+z}VDx_jt^uvcEmTk96x?}t0yuNM}kyz59bpiWH zbA)tHswNp)!Y*0a(7Yd}7IC$z7G_bYY{^}xn!=>liDC)cW|FjFRE!NX66)g at j=w_V z=C5)Fo7rDh( zfw+dvw5V`g?uQtBm?4SI36ubxwiOH-UFo!=)#!5qXTxutpX`gGzy{4zIEhmYUbdu^ z$IFWrkt~a1c`KL zRj!kirB{)bz?9O{YW0 at D?LuL{B5Cb?<4$(}PMpN_Atdb)h$yl>rFKUI at kxALaepdb z|A1l+{F^?S36oCsuX8JM?6?hCY0L-ISg1=3s_09ZQ{53g%=p(gjnuks#?#v#*f2Wp zG~)~=Ot?St6VlgI-Iv)yHZ)sum$pMUR#k zlWuC_r(QP!QipM2q^Sc=``J`wVYwMx45U8#pU>Kup^JD9nvUFCQQkTm;I-$g7+7#> z^O&Y(n-#DjB0YUYy>Cu8wDBq{Pt}L#u at WY|_r!G}*jMcCJ!4hvc_B=MWhf)oI(|n- z-*;N~bJGgk%bbx1s<4yR7tu>^2Z>ribz5V}+dderGH&^E(l}KNsW{MKRiJFgaQF>f z;Df6!aoNu=@qAT5)oSl%d49kl+`{e5VGokCpG(Ja&a7LP=yS*gOG=FQ!g=dlYf?`dn$G&V5? zMnuUznwm+_VTBJ-sEJWgUgA%q#h3sHI{Onf+$aFLi?Q^tfGMSv%D+o$dblymsjDsc z4@*?|I$l4ne at Qu?6xRr%%6k>enrNa_FK7-mWmbMBA^LuiC~GmV{VClG5S zN3N9thr4V202yQ}u@`G;hjVZ7|43w}f5QD=8Yte&K6cqT}quR?&ro331Z zMkHD{T;8p_VoGCQR5}IGewKFl8T56_i?wgJB#78w<}6=wPtF>DPR+9uCew|71mXK2Y{A!HMRIn zCY^l;AgvX|9hbItmQHIpthQb|IIhnPj!oNUNT{r at Z?E^na1_J2;%6%mMO|Ol)UeGr z`(noHm1`vs?#naiPvz9`cIoo2ThkmW_9-D%c9FeiS<=1y7!6tsrnPry!fNL!xfAl4 zi9>SA`WBtq4i)t?=OWFP1S1{50q6!}gd1^syuSGVa>l_M`*axGL`2y>`F>53FWObT2hj-e<&|=1M?- zvz4fo!-bV2_w!!7-RANfhKc*Acgzv~b;9Ph_J~;tUr7zP_XacrnJ8%y?ovmLcfI{KXpjz}j*0J8M53~4%yO?nO;gY%Z!7H4hrZSYzeS{gbU z+K>#IIvToR^tSXv0F=q{BihOI5>uSE>Xz!J>NdN2yJkK6j#1~DBc91e0L&x;Kpud{ zkj22M-KzB;)MVq5bJmgjB*!EH;0izh;AQa8cGq#&cGrE?rkP*>FZj$<6yi# zdW3ui5&mw35-odud}rJAZpjCoD>>j-=bGRQx-FBDQ5}}ozj4Urm#^fE7MdXO4O%>t&i(e|cKg{- zL2*p+PU{l;`ZxUt+qQLG at wh?c&&7EhC6By?>4_9~wMGJ-yxw$1->=^;;lI`(X1?uq zULjmV;=N7}V_XykQk@&ea`}=<@2*|S5_x8L!N8c9W6NeTM->lF4tcH%v=bmEm*+mjEYS6Z-#Utxdw(7;B z>yjKVc$t`+`18wD>(S>+Myp4tpR<^#n+Wr3*p+Ct5K>{HR?QuZ44RT`*#2evCkD#3ch$QgB$u&OxLSG!d4qbn+A_)> z)po9Fm?PSLu4$w-s^y&9WMjDX0~t4k}K5q*QERTeAKEz0f8%Vf)hzf;Su zZIzJU(5`M(K%cbL at bb3-vAfb`f&sO=)@6hNxx3mWX^+-r`s%M9vCELvkxsQs)CSo{ zm4;-Kv@>&)vSG%R$q|KU{Q}JheH!=Fr$~JU_gF@>E{#i`E37VqOVLifOUMSKi{GoU zCPZ@>CY+IeYMN17^iM4M6z5q<`Bs9ltYbmp+}+m+vNmvv?!9DDMRhm_8bplHSRyE+&G at 3??(tpJI-fKEjt} z-qEYkCV~sPBmRs}a9gxbNvlkc91UqB{v~bEJ)}>zTa-_gtB!vW8&-z>t2Raqu-7h(iT)}ya1MX{>$j?h=80;H<_WNx=a#m*VG=O6WpWeoss0?%L-)klqkDN{@;&P_ zyp8r=woUicyW00xfCIc0U#!P)F?Es6PiQemEna~7T;8TrfV?t^M~Db>O6pw5PmGPV zBDit4{AHKE{gh5E#lon5;glmkMHkf)y1EdD(C=N8rC>}H#C3XZV zC2j-?B~AnyC0;q19Luawx{VRLab{pkh%eX$%mRWPF_5`Fk$It?a*!S at 3#JLdjsnP1 zAFE`PAIrQV#9J`iuON~bs4&O}wiRLm)&=u`a7mGZy{f2Xv`cJU5I7Vf4jG4v`46LL zvI}0Y*iR8s0;zxsz~K_ta at b`v4h^J(5dhOf`vb2hdyChetK_f?Dbn8`8v+Z)i9(C8 zDOdi}368{SS7T5HtPQ0SVN(Gbr#)E7bXP%SwO>CZBCrca8SEKZ1E)O=nbin7E|3X% zA95Pm27yniob?vDV7q at P1QIMB85e<1M$3NpB7_~1kgS^hmdiLNkP7+&flpcr+cT@AitQp%gw|=c3E`$NnfZUG#)@_g0jKP~7-M9=%VS|4xgtT?C}WTpVz5DG11UROCB~OH~0bXYOEoRWBGdLf<&ox#k31ga=(NtzgJR^FCuwSbP2Y1+V z{Z+=K+n~v(yuLpLz*TQy(xYYu*nA=G?-Cg0&uE^G}K0?y}>VYb;#;Iqs2d9_K zf}LE5G8Wgtd6_R%0<;o-SlcV*wi1C_Qx%Y2L6*yP5mZ|B!ItvF(kqT@@4bndAMRcSE9v}*D_TbuV=@v});GJ(#dhX`)z7hFX7V=~C0nvIdsZ4Xl_9ozatvrFQZ;+W4RXw+ z)^EA6HhWzM5#&M at Y&~$fdgg}aH6{Hv$6O4nHc|XZjk6U-d_DPBG>*WDgL7XB$ihI^jJ63(65`kT``{iku%&)9HJ85 z%f^6xKf>ey$gSspORfRY at woT_0Rln?2LeLtXeg>T|mzISK zyHsPpA{}j9qm!4g@(A)nW|Z-<8^%~V1;$v0IR+UpDhdr)8I=rF$0!0mtHrQ5mUE5x z8jf&1fMJwn5LKod`4^M^`Oq36e?Y at vIhGfgEA#g~9y at _;cD3X1VDuKSlrUw5eM^4b zmpQDw(orBcbe+VQtl_F9=+LOAO^Yr`g=Qd9-^DU0tsth(MGZqHxFAi9oS{&iW3{C# zJi$T at 1NF1#RXKJwq3!Vxnt0_-Hfu^*m}qaPRk`>hl at m!-wD#C<@llN~VdK7?t$|z~ zxkx`^yLXb|>C2HRXSQ$40(4~~;5 at q2OM!Dz_}8*_J9>l8bfHqc zeBB)4eF$vB^=>38?G)2qI+L}MF4~>Oo&nQpn8~Dskq#S%Dy>GHPNjacBtn~p`+EMg z|EbV}Jld-&p+N=_DmBrsw#DRO6Hx9N%rfRidjQ*cVV8+Lp5Sp5CCX_B-DHIxj!r9F z<21o|B0Jp at rRrMocQ4SJw>;J4Dx)c7^_U+$sy6Nj?%pW_A at IP#%{+_ZGf&+XLF65L z%A_TwtqgxUS;ipTlMG?u!&t`Z1=NuC)aS_p7v8sIKul){XZW+dWY5;Oh$Px^O>Y-s zX97azJgmDQ zKbYFAZ^7w$R&<(FGG%yr8v*i8o zzQC^^- at Ad^?^c};=pKT{BlDaPY#&eYC>+5&QTpE5Ve6LtctcSPGVN=&YQHt`^YLbEN)<_~Oz z{0`>_KmRKLYTlcd at 3ksvb%#vZ?2S#{?8PND%a8x_Mx;Q)k at KlplMD&D1MWL#j42{e zL3sz0Ry!ioO%TH>!XS-0h;2n~X}MmmiE}ne*J?;{_KuZ(&fayGITDr{A8rWJ{dsIwJ<1YFlwRFn!5_CV{&OuNxqYIH7k0Yw zmJDxGJ;AKE#3<}l5!NDO$8<6~CeQp3!tC=}p`o#dBw<>8EAwg56<)TgQ(=n}f5%zw zD#QLIUazk7EFSNx_q{8bTlmTW4nE9NKv9F1_toch(4jYp;qY0FM)V-(ChN(%VR#ud{NM-mu<-=Ooibxn;MGQXLKYv3pI3Qg5+snKbAt!PfF+si;t^1Z!e at 82GEK$4X272Zogb zH>naIaV6h2w_|_%N7a~oYsQ2jD`Yh&oMSj_vvaxUs>k9W{p;k2 at k6v$FV<_cb2XN!j< z&V_%K8 at J3@V3-2f36?#8Fvd`LX`fabAsd?HvSCSQl1(di!~BW~Y>VKdlHR2&Y!ISK z`~+1g`26|0zfk}q6=IFk2nrc=v%RA>U=jVE zY{y-kuM{5QszvEeop at wME0NBPEBIL3vn-#AM}5ONxw?)ex}+DqitM{1tV6NXPwBr? zxOKwg!VM~`h at H%_FW#Lng at 3d1FEQayl2l0*loUKtLvN{#Wpvi<^U^%YS6{{U-wC z;j1^&GB#s37gwC>rqQ_RlX^(X*)btrwMA!r#c+?QZ3`7cAA$m)C=$6bf+h*E!58^` zc=URApTuVr5g1|-bw(g}W8 at 9BAUn;?J3Z$9u}yUvzw_)rlfvuaacy(`y?4_F+AsIm z<$GJc24NFd`BZ at -z}^N at tNFln>@peT+pf$&uf}eZsK~JFr1}FR&1q5vp^e#=ee(~z zO?#|%nK3VG at t(Vd))0Z58b(f{6x?_N*hhyr(!ore%5%EkURkmm5SXokmgavu70<9BoBDiih#hA8R zA|!;s_4a;9y9yTk$^&@8s1zGe-k1tIj&WuR$Hl}K1wJ$z-Ea|#bYfc8NUw%7=Nq%E0L8vddl(sFI=v6B37io#(mX8Z=^IFM30vhA)zwsUm*f{k zk*W8fA;~OV(W;Gpq;u#2p#t0YDt|monsdlvyOqAs2M1i4Jz6Yz=Z2+yf}8cmpZ_p? z91a)h at V=ihXrN>=U`Eyz*yj{<>PQ%>jrX=qZH~cp2#yd0GjzoHMCqQ^q7{oMve-W= z`aYW@{M}GiH at HI!_ZHa-pFfW-TBO?UGq(4M|5U%9$c`LBUj#_TTk%)6R5rEP>Z at O; zRh90SZIzI(Z!NE{ZLTj2ByaF~cIt38yKM9U6%?Dxi>itoBZCH at +P%nCg!^c7dxv;W z6CYFwE;@DI-+Vkrovr8mwmNcQApx5BR^A?75PtgJ%DQDe2pCqo13r&#oo}4 z#mC>LJ(g&*esC&VpZxY$j|3kd5I-GwcINBC9*iwR4DFTsG?ZR%c9!c#D`h`zlHOts zA=Dxb^-KLPRMXy*WXC%%b>H*%{d*!%Vum)ABs->K5o{DnQSZ4QsyOojLwHi&TkTQ zH}k=I`ac?9k?e2mFV0q1SA-`I4T;Z|cUI=KF>JS_$fBQUW_denb8;P3Ui)gVLEvh0 zUO4>Se*N|_}g9;%eN z7Fh&RqQ*3&5#x`WpxOsw!&tSVa&xvduJx-AO(P+Fq}r?9UI_&}(_*SNukvp#_UWfO z$TT%L*#T8AGS9Z)6Wopg1F%I;nSk1?%zR22-cPuKLmHa_`DB&&KQv?xzq|h=ZuEOx z`MXpDxFP4J%JXQ`ppNML)!Hf(wo{RnR2S8{>b=~J#UWjfc8GVx>nsPpWV@{EN-)-} z!Pw5&c%?B~oU+>P>vrEC{DU30ZR=MMmu)&L{~$~g!8n#sa$<>K`R5THjQ z+!J at 8jX1yubR(n{fcHzk5YY1lw*g`i(Fnjk zGzj at NzhKk%Tko5Wj2V->jf_Pr3JGFHDx&9wh;s?~HhOX+_M6mG}SgZh)1HmK;vo zv%)9q)#HmYb*lE1mF+3g4ReNuWk`}ce7CH+Z=H?&TedhMQG`_izTbkTIz|7t&c zkBv{kH|J%Kiy$8B23Zia>K6R&aX*I(Oc8yDcsrE!j{MHyE|v>U5mQj58_E)D7oFy> zOaamf_^ukwU)eqCYQ%nP6)qjvvE5COY{pR25-0p=xPBZJE(2Jq-477Eq`^oPE*LEE zT{)U;`cPFTW02|O!3q^F1Y1z2UUY at DL7aAK5G*O}g`d_m8M>DZ-wZ5)hL62fl=24+f7gq4r at 9ajE(?y-=Kj z8%3kHO6{#^#k=jNMSVl!Id#66 at Ar*J0HX{U{UIcnN&HJ*Zk%uwkiUCg0(PD8nZBUz zzK5w>BOEclnPQCPK4|a0N4Xf$zKdSIjX<%YPyE5ZW8|?>zoTEi_hI#D{aaqx(}%_P zSEBIbjDug?_5()P7*Te at GIY!LIh0cVc*CQYH5z~gs&UK+S<_yyDgpl3fCZ~+7tbq! zE`_0$b0sA>8nFd_&BRim<6fWfOFM-fh>WirGRZp zEP-uHER1bw1Yz7Ah;AGd2ya{%m>MDt*%&ebse$$f0bi_~xjszEIzN?pLUL)zk!)V_y|O1uTMp0b;2NV*o_Yf2^2)hg#QSwAM9TW zDGs!Sp#fV#nTKpGsReVp%593%ftdPmB!HY1d`H<0mYHQHx-TGvB?b$fRrr2+FM#Gy zj-OJ3*ZpCP2Yza2C~|V4!gGLF>|%kF^9VT?Y0FID9ae6`6U at ylXKvJP6OK|zBvC2P zEMp%wXG0gGykS(m{^MX#0lUt90K5f{va_3cLLD+$AFW_h9RZ`(yWF)Vgr?SwdC84U z&Lsz8L0>ojj~fQiX$yo^|GA%jWr2C)5fk{!4`#`M2mT9GAq;H7+0U&>xU~zWoI%vuTZ56FVU+T67hS&yjcJ3=>_IawX~Wg&Ml|ce z;W at wJuAfq34Q<-J@!c;DUW{FQ>J8?4dw?2iC&2oT}^_YcB;p5^tlrs;{90N-b_-(W9% zAV`0N)tn~cvx#OPSfXgNaAy`F5TPQo=o#Vg%>|g8VqSy#u^*!PxgNv=4}fXll<7=x z*+#vj%oD!q{bs$CPDx(s#M8d|Mp3U}LP4*k{cI1J{WQnApsc_)h$Nr~xJAYdERbaf zO^Rg)E8Wt6cP!lB*NoUmAx~FMH$!Z*Uy9anEkd6@<;sNKkY?rFy~BVW%Op+4-LFPv zD`JUbGF1ntr(c6<(_-yYq}BP;qQ6dtJZ($)XU;e-^u3ipvP|g-{EL(sCMzU3!anP9 zka at rCQ1j6=gO)TWCrTdY)+Pbi{5@|N3T&f_3tm{^l#;B8zk4q{l9e0}c{ihlDv#E>HKT zYIKSN5Z5a1f>&oBo9S;n*pxZvZEaH?CcY9O&;4n})mD?@Rf)y!?d~jxtml5JI*+_< zl*vLC9$l!-vH?xvSe*@1HBLH?oPIsiMnjUmLA>^(O+&W;M|028V1>*!Bg5JfDN~{5 zeaclV=**`n2G5>ngI={F_NjM2Wzs|eg-l%@(>w-v^}hF7t)oWAetxDkK7L_1`RD_M zehB`d!G;Qr^7bb7&a^h==oiI>1KjL!u!eb4CX*c2Ys#L_eYh7K3H`$g8P?#~%W(g| zcV8^>^!@_!{R at 2v8>VM7?w~O~%pP@?som&mOcVD%=@u{?$#!xaRBOX)at+e;85S;4 zQ}9{jS=t;fb}DwqzlMb-d)ln?zx$ZN3<`WJR7&Y0;Sue<(BbH?V7+=<=W6143>s}) z8lc#BdnQ#3PJ(sJtgP=r{I(>{DELCQCkT7-e|xGuq#vgrw;%tSf|)|gOwKGlmY!-q zPO%Vi(RoNYjwOTdG~ zqqE6fkE2gZ7b6={5_5Ijv41J#?G5`L^<#gk!p%86kb!VhBD_<^YbY&TnUi?y-qwm4 z&)7a?c7uDo3Ncsd);t$N}GW~9o|u6s8p_9s8@}bCH=rr>Qp=<_(>fs z^Gx?yZOdwV~1k2&Vce6RX2>#L&tEVWLal7gq`(rO+>D|)8*Otns`l7gq=B{?l|RzB^j zmvyD?l0O|WQGcS~t#p=Yo}epwruGpKGp?D3Nb(hO9rY~|H$H|xuy8&xO1bBN)ZnZM zM58`-BB;vT5nLUIf(}_(LcnkT*yb zA`tYHK+4>yHU`0!LB`yzHV47MK6Z9bf3O{De^_tI7fq*}Q*&1wpH)0@{R=YS!I6zn zx~f5n*`*PHMbe!+{T{E|sbxMQAG(X~ysLJ$yfbIwK5HW~YXmd<{S4`ft%Si=zjzJX zZbhG8*m_I;pM3j!McjK37zn5U?7y-x`4`{*Qk0bc_cf`F{K793UplK5n?%^=A3_2O zf-C;Y%HA7;dl;ssO!ebLjKPVVxvMUw^dD6Gy}uZ-U~@hdhMlg%F++!0PkEm+?=z1( zH#h#}AizoUPH4dQyQ8&4U#RaBNXWf6C1f+<#(+S8X)H;cPo!1*hH(7Q2#gXe0_Mz; zFk?rZ_Fw^XKtFXlsT}pwW{r`yOWEZNcELhjPQ%YEBdW@>Dt{$IuBrMy7c{U3_oK1a zvtEyx2 at Kq0rZK|=Jelj1&fZ2i9FD#Tte& zjr#Y)ES! zom#X3I+Jd2JT at 7Ro`B8;{;Xs`@H96?Rcd;{486#67rvBbkQ#h!WGmA+Y1bnD7$VF* zuz~o?%5Q~uBiuLlZwh?UzdZyn)kd9?Sm<7n&Ha6ZW*B+i0nizROVr*-dnNW$Lo>+e zEl*+uL;S*g!Hx7t&fwZ5DmDWMfn*;newv)3Kk at nzi1>J2LG8Rhh!X>uak>JGLaj3` z#8}4NI#u9pAs=X9jS99C|L z?g!oSr}O?Fc>&IsTndaJKtMMCU2fIC0HJ1J;r#!P3sBZ^LNY_~-L9>jXeR?Lh$9h+ z!Uq`yFDPD*FD4*_3YT_<3OW at v6K1TYlMaEe>AKx<&wE+2D2ZPARKT6_(7;_hk=cy+ z3mM)y&s$sHU*GSvzfCq_h5OQ at _2N|Gl;aj0aM;xk)*7k}G|6cg)@BimHWwKNT8j*l z>q-rxZ;OLD_GwW`QCq+k(>1oo(=vclq at rB^qQKKNx%RoIcHWJ1PF?2D607H{ChjWd zmg}aD)AY*+Hf^t-3`EEk*U9lM?e1E-+@(q>53dZBCe>A1RrLj{*Ln at gbZ+4Wjq1a2 zRR3M#jZ1bgkvPjuy7V43r=l$2+YDgwd*5rS5l}{NP>3Vf5P$s0n6e{Ii#pI`KkknY zLQZkDT`8hh+*7IUPY4 at Eg?x^Nopmc$s;6veG?iuA9b|R+M7-6Qi$*K2cZ-S at ht5x# zyPK^1BG&=e3fGZ6a9{MH1})hqpE-XvEf=1W7BU8(UZ5evda2W{cepCN=1iZNt4D5a zMnYbHk$5^WEt^(fM5b5|yF$gj^A=V3juFixYE1my(QStlYU-5Je#m> zHwxxTkjCQnsjhj=+1$I5=FUeuTw5|YPrzOqX%DkFPOuV|E|`2KMg)CN)-dQn5Qe=o zZylCLIPv!*L+=<7hV8M;N{4|@jX0z~J|KG#()NtVc|#c#)k$VV4WWZRPC!CeFuX!~ znZM+2LB?VqC{cQX8u5FCnpQmzFcKH_AiD$aWY{odTSewEg6Cqc>mL?a;|`ECKq-QW z6eFDM5Tu6m1bx0VV1<`C1lg9=4)QB+%YS at O6x0~Rzqt4@;KecrmZkj4 at l~Z`Vp5!? zFWDpixFGN8zcG6_z^8aDMGH0FA@~4pFBC^nVG^z{=p)2Vu_h{%K#Q|hj53cGBjqiY z1=JlV#m)8 at L&2O3lv0CWsPc03wyMCxBGjFo0Vz~e!!nq3{dWJl1wP6f_a`@x;y8_P zJYi_gHAGl!~0JNa^TpN(EnAB%6|S=d8Ge>pyaRr8{z$LcP%Y7CGr2; z{c{F^$h3m~>P##rl?W?!hbAK23}{P2&evE!BNU4a9t;+^uCl4>+R@?{%6ZEjQSDe? zqRV-kg`bW2>ltbGf(JR*w^<>Ae^1%TPUAJ3PD|VQdb>pj5^miBLeGBA3pb&k_ENat zqfq6jbew?Zihd8JukS1*p7hojfxJh>B~Pn4!!YSC-bcB2!8Mv>cNR%ycaCJNy9%0W#(Uu)AubT9{W%i4}T4d zX1Q0Q=eq|u!FH>2 at urLy(hbgIf$zVLE1qcPS)&TSN_n)ICRq(R5;}JoFVU%$OXnRX zIht^a2$v^ml2+!K_&mr^Wl5RIzz&ObnG;l+TYjkS>QLrSO?ku&D2> zXQ^*ei46WO_9K3pC#MX=Y}jO!6gl{h zT!!nrT8Gk26gcNb8@#Kt_YnTZP{mQ;DdQ-2mvWF{%;%`aP|5t2shp{pshX(}NjXiG ztr|&9hLR9YImCio^$``e#SoX*G`aB2Wjr>+#Y5hF8=e1c%d)G%BTkDx>KXQNzczbS za7B1_Jt}=fBpPGwq~He)UH;9m1h6*3*8b%0{Y0qdb_72D%_C}5g-w at 7uwenOcz|S7 zTEe$j;O933;{N954S&5QZuu~d^<&(jh}tplBPK;NCjY_*)%VWotWW69wD9oJ58}Ed zCUN7~ouq}Tq#&rMsn3O-z;1{OUbDbzYI!|-1l|_% zm#AHSSxPj9iJn3f!iTx?+l~(krg4yPeY|Lq!A%U-LcXw$4kFIIG8diMwEu9T!wyb! z+AwEx!o%*L^ss46=iCzONJCEii9oR;ntQ+|6c~jEe7T+#B!=Aq6&$52ln})mWQzR` zNz3*I*)PW5XJ_<#*3u|;)^r~zZ);dkC?ski=yw$H5wE!$`*a_0`$4xw at zx>;{hP%# zPGHQm1928}w{AwQR8{ zKiwsatCiXb$6}eRj+p4(8~=aO at 0fIWW%^$o5Df$n5aWMMzjA*sVg5Z7=%`_8Pr&3xs0GFBTH88y(s=23vW~2ES*x#_fGw` ziEqGr>{w6IXi|Q(2^k)lo3lt-r=g>ou;c(b zaGnfXQ$qrMNj<4QwQA9tgtwMUmS+CE^9Jt7<>IC#prd`EZO57w>9Tsmnw;YBr8Nm9 zwDjQ8o31HAZVk+z at NoR7z5{q5T%&EX&y~tYOJCUouHmWAw%waKhnokX)m`rfi zfX@;B`$!J`fnLW*k{7>AO5p3OQ;qw`h0l-(a1|4 z9vlfK=80bs-VYl=Piy}rFOY000kk=^R;(!4^mA$Un6fW}h=BU7VTC3Y`{=WSxkB at + zZUHJwUVA*Qu=f3Ik_)+tqihl*5L+Y7sc^#h0?qAo`bTIsC2D!>z^{2 z4PIo()QX8mnd;xB8d zWoNNl7tK^l*sQj8CoB$0?5sCG^xCYzulA(%^ZPz@%!2N2G7Nt-ChZ>z4M*4g_1 zSxNnk^RHm-BN7+`$ixg3EpurkI^kc7O9a8-iVMYgOe8F-5yDvJ=1dNU^M1SXH~23n z!q|;2r{xtB;(mz}UGi|1jrr1dwLPDg4K+?rV>y1GZ`{8*Hi0^816M_LN7|!>5E at pE zZhy;%1Fr-I=`ndwFpRt;2?X6*`BUr@`(x~P_wwws14Bnf_Y&><_aYfd_8NNA)K03S zg)-y)tYpADbBuPwVus#Wo at doweNkU zys;6Nex0Udlfr6_3G45bw&`m?oUudXD?T6~)ugMBkG~j$%Z}%aD<9R6c%R<5iiL)+ zYwg{0kyq9iE<%rSCcA{M^c<*hH`ZhYaX4J<^oult&dC9m)RfMU)rDA at 9_uvCpsz}Wg`k5btJX6fkI0v*(1$6!d}@MsM&Ua`ubIUB7XUPJi*8UXix- zC4Mmb6STM8t`8mb1Gse at OS`Saelt%AEWsFM{7o#p$KX+kZXbTf2lE5^^?`aKr`XtV z+SRC_#=Zh?D|J@`29d8kt0|&mA^j8b1OARA`nAPa$vo6S?H25EdF;2 at deY7=ZSbFw z`=9>Eprq%|o}|nq*f*~v(2{H?&(fw+Y=!6Xe at L;>j#3MW<8_%nk6I53;$zaiz1rX~0&U%gCwGn2ff?j}rYH%1x at uQNWk=C_h-(#2Y8Fr9W;F?n!3mqhI#f^{BT z5b7ho;AA>V-4L21@&ge&%;PN*e_QW^8fTI~Ix~n0yfeto?)0Go7X)IygRVz3Y_*2P zek2pZ=!YA_1U5R6={zIcH71zA6ht9-NGoev&u7`pqsqmqB;N(34z!!2Tyu zV5tRR?f~J7cq{TU9fVZ&LsF(ZD!Y3Yg_N5&-gjrz!(FHkU!@Q zWB|dz%viXOO29nYvVIYc;J<8P63S+%fxS zgndAJ4X{x+ci3u1rSDglB)m%@O?i=aDAroRS-nG{tW+m^T*5n?naw+74JY>Q;`#EfL>Uy|z znpP=yU)nnn!eJi=b at fqpkK?9F{%USA!dVrwUn(s0Md$5`AB7nod+%XIaM}}~K zpJ;wn<+gdPdYIoTyAcGxyfuYla6L28UA zaSe#=v4;lmws#ZOj>W)J`r0_k5`H6Q-hYlrMpSKm{!+xx^9`)0M0N(xESWR!FhD8R zE=kCXBP~WGz`v7-g7Fhza5=zjtkS^>Uc?~4o}nKX^BArIx0m$P6T`oC=wV2RC0<(8 zGPiRb6XlXp^x?!+vtNSuje5c_e#4YvEQeTxhqNK4(P+t+FqLo>SRy%(t7I>gMvJSI zj{qf&I at 1e<&~)C3kb(|YQPz5prvcXrRTr)LQ`!Vu_h?nHuS|x%EX)BDWz9uqzF}sO z)Ba&gZZ8XX%=u3|wbRzm3jc+tBJlsA!~WaCQBwK;RbC}z4TLYav at w}}NJb(^lHcxS zpoxgr9R?bPpt!Iim=c&ixxp9?ENSX(FIpdn at 3{_Li?)}^Gg|K%G#&DASg2J}cyHW# zJ95vbrytL^HGV&6 at -h5_tx;BDneB&rA1Q`w#|@)s*<~Wdq3oC(WMr7Ond0<2ZHUHF z*%^mgZ4J{M1_oh_`g(Ce+`x!3Jj}M%*2mg`&F&99r+hV`cy{Pk0!=5NHGO~8<*0Nm z7kCz!vTq1>S-2510S8jCsjX_GhF&#rZ|KRaG-zr3kgj80X_L0)M7k~(FVkkKld$El(g=i^+8&ux0`g8Q6g at MFJl@s|}e{M!XB zO@#T+OzEQcs3ph85an`b=xrY$L>iH)lG;aExN7|{B%59I4MGqo=L8CNY>{?&=X z_fE3xnv^cfIjfgU9i2Qd-KzfP>v<)4Y2V$JWUyhl)-8v5(Vup_Pi3c}=htAm6tF>`!41H0oKZlDNq zR5BDYRGEq#RrbM%4!+3!4w=1@<1XRTARMwhO9KmaP;CQ$ z{_v1piP)aeZi?$HcY1>!hkjv>b*?v%jcw1f`~qH-^e3>b0`q6>dqjU~vrNU}l`08D z_zoD^bKFC2wC`Xe)piaz$ebeMqnUM*qVB at 9VE52ZKdIr6XG;66g`yXazk+T@*iVso zNl&S=!bm at g1HQ$d{Z58Ws)<9eX#S^3xT|aCAh!f8zXl}tG$8$6Olgek&UjfKtP?CKtMeI zlQ5h_$=T7u)=b&J(Awl*;H=VcbH^D%^>Z>Sh-(~X0GD|Vplt37jRz8hJ8*7^r|%}( z$ufq9tZmnlwA#ANc6%m?fGcKS$T*#Hu7yoSB7l-Kmy{4fn#VqkdJqHluyeKZ4)};W zm>3E1?eV!k>SDLs?o50C80VJfhX4wxt#R!ob1#F{wGC9`A^@*x7RKQl*}KoW0dtSy z>mJ>c4$?ci;o4K<@J_n1!r3PH;0m!r at J$$Kf$W*u;||(6yy5M?c6#}-2hZ6l`9ciG zPxb*7l7sXWIWPm|*SD7v)C0J&>ff<g}cC^~hPd+LZp_qot1TfWs%`d{s1P3uj1LM*3tS-soe6*3rSo!HY8XVrM-e9YI1YxAja_OJs$=p-hcQELklq~nD zO6FAyPiLjaqr}7OtUEsmOg+VFG0Ag^cGw#0$Mu5>VL7hQBlB9Y?7`nH?QEH1w9{^^o;T|c-?6l$0c{rKwLCQn at Ri|L@~{3X3ydKuQCY;FMICos(H+^t(^*F) zhO(1MJQg=RimQBkQD-U}@DIH%kLBl)mKWZf`jvI#T(r|L>16b=agV7<4A$bw z>BDp+bprB-j2)U5V%B*P5$49e<4n{lEj-oluColMqxu{_=vK;|(~zrm>Zq_fQk7c@ zyfvaXFmM+>+clb5T*F|BckV2kuS1k at Gsv{1K(bIGHRnu7*6YOI!qF}?DzH;E7xl;= zmGazM_l%0^Q;5nzwlo7d1(4Mw+$3inKZoL=Xfhn4bRi at Wz3}9&Xb9q zV&Zh=g}sV#8=|3V_A!6bY`IPdCb7waxd%oT8dpK}^FpKh79@ ztyC;SqSX}0Y>5nLwre(tO_g71p_v|=r{JX541j&Hl*27!{s zR#vlu90fG{^yMKeq*>9;ru-5=S3bV~tLXU>j5a^5V3hXoi*haTyNk=DTJ+IE zaf^DqG$y>A6G?rFYw@#A41w$#Q*l!Z*JY+(fEJ?0zrcQL at 4{2XH7+LM2#&S__5ur4 z355B!vQwhi#4sqnxbE1z5To0MV(3fRW>qxMK&g*3aSMDa(!6Xwms_tUqc8O;l{F$9 z<-IJ1cS2LCxiY-Q44FDYcuj_ at rLwf{xJYRYTG+(}jh_&ETX6-xS#^xOz)I?w!BBB| z#9rGdCq9a6$@+;YZZ#H|W*xn_MNm67MCIkwJV0+*jeWB>GN53{SB!1RP~T9ZZQF2F zc|@i}DC1KDQ^409l`FrNr{V~l!mmz)6vO{q#kn2ybD7FRGI{M`Akqzjj1k8#ZTK0N zr6MX>ny_73?4~X-jg?X63>nKyl#DjY%|SnAwUr!Y7!>TAD(WKKVKIMOENk|E4| zpFCxyQ#`nYA&M_cF=TxIeojkBxAcIXsi2O2G>%3W_$gIuW$HIpcjf%bK~@yqVNf!u zpMqz<+AT-%%m{Hfd$gUbdOe7rxshyYWy^n0jpPQip$#39`cPOEZcw)4BYn)-eT*DR!+lS_5Q8K?A>sZ-IMJbCd0xB z`%evUh%fdUlSq$sC2aiTNANd}`X%v`*7wi&KiBAcHORy%?2e>AOVuUlNM(+tz#6R! z?;n!1FadeIr+nZxh28TK at rC4ZXQUuwMW-_1!HQx;Ng8PDlUN!=VaD?mNT;$e#!`D9 zitvMAEXo5f6Yctj(aTs6=165-a9xRmx0{Xy^*H>|LQkgGLT&YY z`nc&hj;wR~gZH0eh*kE)ag at 93A)$sSqGgo^eBnhRR4No06BZ;|7u3ZutS4qL)3k at u z!k_cPboBi9pQ%A>dkDkavpYHT5>RQ>O%hy at -uxbYc6akT8%)KRVcQnv2mD#s6!|3@ zcOYhD;K-+ukxLXschm=-v2X|Wh|0j14}YYY3;T at uQluYpIf+HVPnod_V9zjfd7AgY z=L8ae$2MaR6 at kQoO!b19BDduQ2);;TC8FODSgTY4v-q4fk&F09HC>uOrHV*3knGvo-+#)4_^wgr4X2WK{ zM%X1Px?wbcI}{gnM{-id+pI1E&=J0cvZHg6_mXXx4QOALzU>E1x0TG7^-feN at Z^eoQf9* zfcp?XncS}r5r=p{F@|a<4OO_7p~$TQV{t33DkUFXdH70DK`ZrHcnw-Mpc at j!E);5r zd3 at Z$}gQ+^`hwz4LAycNheSkX at 0M3VG!*^(G6+ToQG5{?R+$cRtn?)~M0K6gg zP%qRT`OTUa5P;wiJ`%k6hk`YNgC)TQsJg#523H=8Qy%brU%xIh at D{^Q9|myI+PbdF z0EZ7dr1Dxc%UU=bb$B}K-&{|XORKg#?x^1GAi(a(ST|@gy&DW;>-w-6AWGJFnUiq8 zl~xh$sigZYXy8j4_IF{}ews1iPaB%`u3Z?aPgDmwt!CNNd4WzF&Gf!rh_?Rjf4OShI z1-~*<9e{1v(jQd^q3>f2y@}%W!#27Lyk)Q(tYz5uXUotRP|L{nA8tUFy_q-NCTb46 z+epW5wmZ9Z=yPA!Ezu at AKjKwP%mB!(q&q`58eVu!V95UYUfc_~J4-hv+i*^Z?5&!C z(+8|O%@-LDo*#5}Xb-HGX`{ijE!)xb3-=A>#WfJUOahO;p25gBi~URF+4H?IGlaPp z65bk2jBTRY;BvGdlH5yW<`dCu&!Tg#GqLSyL+yRfKMaCl<~g!h!GM6Q{`$oEU&|W* z7LXX(S^q;v?xrM)GV)zAWfGrVyzu@<5s|9-5b0;5wx*PD`usw%$@sop$$|F*E)E{64c3uNllng11?oi=B_>i!~=sFS4Gm*MS+J z;9C_)J|1*2R4c(usC=|x!perWe%={q94KTxeFqi&$k+T{j(bvnqe&}ZmvWg=a=MV at 2j z`8%vJ_2u)dF%Ra9#b^_zF%h=p%=`E(DSBh%ZRhXG>2Vs5s5X&l=zW_=&+b@ zqQ`(AfyFJESp8BJkXh950x9V7AIM*QnY>2JClVoa~p at Ydf?PGz&*1!zsD zdiVVMrjBlgsE^J0WhH;gRn^d;mur}{iDc(WW%JqfVoB&aS98q8E9r)bt-8(my2eL${$j5SAbo;udplaBjINz54-S`D}$qxhn$Xai#*>lG|RZ&L;V|byX_MDDimpjl~{d0?Zc9r*4?3tHMiv7!nFWjxRa$lSR-3wcD5Bm-8 z%j;%K8QB^qmfXtIfFmT}tOSc>f|5)@o)LwyvErEySXiq^^k!L@^QjaE_h4TJeNn7! zNUKU*K~ztK`Bd7|K!GUc0e(yHCL?4X)=oWMuLPOGU4fYJT8kxU8#R~E9(G9UZ zs#Xz}FGsOhG0L|`5wR#8_(xHp;#6O*BCS-@&phP}#Y-lFu2r}qZj)clR9i*PEhzI5 z*9x8yFk`XvT~c;Q2AHbt@~0!lf!4n~Gv;HYmC~i`)I3A16Qll?ng>OWhR$;*`6{xF zkrhEC;w3&Pc}kq>)N8m>c4?jR){DAQcd4D0S|?>mT`PI2H;>UuU8}wQwoc)d!dLbb zaUJC=5;r-PKPYoMrJa1$PIaBWCNew*rYp>XZa1%U>KDz(N;o(ph^>hbn8p(t6{Yv5 zYL1!RHN at _7uFIM|$s7shVF#JuR1A~~Zb3xYFx+-n%QWrCOWXPYlH6$n$5~1+U z7OCa8<8R_zmL5hBs#~5$*bWo%S}Uj_e&{65KtDn}@FM%bF4T8}7hxB{j2Ik^V_irEvTI|((9q(e zNH!gsDlFEWCAivUx#X`>o1a{8N+c871Gx`)?R=(kVppoKx~}_3%Ql*32d+1E+RR$_ z=diy$4_$zW-3xH=c+~ulZ)x$fANDp-IsRPRd#A*B%lB0i_~sl!{A4_WM at 38JS5!Ct zQa1>DMgGHaAKY(oB#%1H;8$#){Oa__X;P0O)9g#pAnld<5A-BD3euz=btQveL9FqY z>K at U3u~4{&v_aA-MJ1yhwYFh*X{_nCg1T9Ep?#W%8sUJqhC$#f_aB;j)IT`)Du1Xa zcc`^Zx{GVaymbg?J_3dOJ>>I7KMMNM?&W{3r20MW(erJ#{4#}znHla!!-FDq!uFpi zvnIloII4dYBGQsDQ}U-y6ER?IX+s=EZ)o%Gm8&s9PGfY_x2Lo06CWy5XRu5cB5a|= zN`vWGI+z=M>hn;-iCVK|M9y~Q=DpR|pNx)dP2%HAJ{dD6*QP>Q=%o!{4XX~}mahZKS1mXTcC&!{xDT0)zs)P(Rk)4n(Q z5eX)`WN2?|xy&+s|Hu8%a_hA}0DMG38vpi0aq z8J$d+v0e8(=ubK2y)s&B4Eog!AUZ+XcH~m5+s|iS2pW&4VS}8SJg$X-hoN<&F1u_~ zlBV^dRRuZ$B=2!hl_*xycm>$ifH_MC8+-GR$t6#lDNaMe zy4b_DA&5Lvlj7 at c(|^&ZnSO?@t9-EA$Xr=gfsdcX95SE z0||#3M>0ABhca3vnl)M)$0FJ#dIASC8aA3nJbM4^D{!D!u(1MGvWTF?EH z*2&v9dm>+rF;BqQO=U^EcZaxJH?~rm2p|7bt=ePO#C&UUNS9I|G%|7H zTz0 at 8NN_UES2U2p)V+Yc{JnUC&6~zO%z=jBW0)CiI&57A8H{QSGFW=7Vi+~p6&QNV zV%QZ}dTdh|c9 at 1>&H?IRHCT4o`(Utv{JrEoRKum(4VThk% z%WZ~y6Z+u`OLjhS4&gcJT}{9LBa+lr-UHcn)C-MC8qWQ%?~+^21;4~2!1B1Kd$4Zs zGae7SiGLOdpZuv?#~$=cK2Ax at pZJng0m{cbJmGilt9?}hb;<(s;9T%uS4aXCWcFftR{Snw5sPyhAxJWQXM+jBG at izw`8}bmkX!>T0oVi zg`0bZdk5XhApjSU)h=XpOLuFlQ${`HHTZ1aQ;m9!x>Hf%oaCP4-c!B21b83ZDX?;m zdiiTsT5gx~mhkSWX7v^LK-4MG8iEgpaPG22!$-rPgKZc6h<)*LDX>L$vpXxboxcRc zg!Ra?pNriN0IpYP+oeAoZW*`AJBCJv_;WX$LtYSX;m=&RDESEa%D9~aUleXBx5_dG zW5VRm>GqicBQ7n~=sBqHXLy(B{DfaY+XWCq!T at rY8a%Wd?#N)1dc#X!NDPG;_%3syD-R^ zJJ|=#Ug-zS?(I_KE%Y%8r37LMwFGJi#RMV;@xloO=|VUKb;0#N*{HYRU7+s>^mywn zJuJEOh7i6D!!2Af2L4>{ptkrv at XM!K_bPY5Wo`Wt#r=S|Q^I>8ySPuwvTMVlq06Eb zWnT9-XBm}0l`htSDjbp|RH7o1@`%!2b$(K3s~_V6(Y5Sz(X=g+^N99V)lye87~vl; z29x|?RBD{qoQ~9Bpk2aj?0f$Y{gg%;{eU9~5YW?K#f|yDEo^cIHYSp`rvDbID{nY1 zsG{hQC)2Dc1Q-et#ClOQ4T%1d(6Yw at aKRxy{t*can*b at mAP-$f+J|0<0sO$xKymreUx>S2uQMxiDWv4Mo2k`7^m~I<|&b zd$*Kp at Tq*SGgA)kTXFejGgG56b8h=iV9r*lIs&h$I%l(J{Y at a@C*|h2Vd9SwXJ}z$ z)kVQDe!eASyD|M_3Ex009KE^xR(GjeEf at XhwUH)dcb(VOaB3_K at 5lyLLBHu)LPlVH zrcfIZGm-XT8~x(rA7|}8%`{Sa@(BuI`sC at Kr$kuds^E#^e;xzAjFmKE4&|LB1DjoC z97tZcr<~m%o;B=S)wX}NGFC8FUj*WB&GbF#v#05@!rz$bx^NG_Q09+KdMCJ4m9kYl z@;E>iF8`zRxdyz at YUsY}sl0a$`EA2Byttq-$CHHT$UUTcYunpl@ zSR2wI4iT!GpkGqEKSh~Y@|>_RRPSnEZStN6Ub7-}kLz=24x6Z1V6?{_9iRr|BXEG) zqq9kZo#gd%Xs6#1qerG`mD?L at eBSOCzkmlR_5-=M?DENpeW58&$)GvlOh(S^Z> z&YMLA5AokZ*YIa2 at Dxcwc$i9qT7%IDDc3E(nMW*+7!U+A`3G*6dg9v)@pkfYDGz+YK}^`-0hZJz#V2&8!h4BV^UJ zx%(b}^B?mZyU6>#-oNMknA}bH0cuYh>9%{KzEX!e?4Zo4eVm@|k8A*dMcV*Jn#=$% zPICcap40-DW3WYz(Jo-FoXnB)eZX4qk^9ks^fn6So{VB!W(PSpW9 zPIZH&VcuDAkRN%+g4t+K9;>#kwn&{)%is>%U|lIAFPClEa at dsHsv^B&$()WdwIZLp zYM*lLw^g-U;abj;>pCT4g;5Al=E~ZlD5???6b^D`?65FXN|TvOL2p=#Qsz^eeq%C1 zl at hgTC_J#7lQNm7>?kxyC3&3GS{}Bf@=+K7!hF>>psiriShlPd5L>RPhfZ6Xg7$4o zrJK0Ry*{p*D2uNtEf!bMp>(6P;w at 7OXD8C4(PW928&Wh01c%yo!P-g(rxg#>9!ITC zQhJrWYjV+a*Su6n+W_7BX0c6e2e2y_Gf*5WoUURWRbN@=2s={Qz(UWhUNM2rPn|a= z$MLYzI=eMnR>e0g5s0UhRbgW-=f7%A>yXdcZ(as%SuAZ`8e6LcMjd6Slqk4ry5I at J zqS$9;VXb@`A!zO>ZdJJ at vtD>j<2bgdr?tD;E^m0RKiaIEI%{PzQdzwfFme$Zm977h z93|*jPM|z at bxU@wOFTU2aejM$vA8nmShG>FLO<)2XlQwt%oYIU^o3t0egVR_Onu!+ z2<`0`M at +nN06nhjFPegs+cgG-f?L2b<;VmuOc+ED at PvTDm2hV6)sF7b{Ov>vcg#Vv zPvR3Gf1MgU at ZIJ4CRQF*EPaj_G3?pAvEHsyakoABjAz!q*SIluyj52cQslco(*a(0 zHxARKJCe7ja-qZ7>ji{>9KI0F9A1KAhI)*0jEasTPo1rxt;|!As;sTZQ_?y)NRjjN z7D!ROsI91MGX&-on%7fS=0-Hv5dow%lxIns$R%jBrxxN;>w#D7+s9YpS1v}p%MVLC z1L3Be6737PD?x%U+<+LwR(gn&%Nwqt&>a}j)%t8(SW&sU0AEXCTEGZ7J|PPK1MCCD z%t2~0=kVCRj7i%sx~!Bg`iW&V{rKwAFw)RXW{hvFH?^6BsAJKG3MxHF8%bf&hlf&r zoZ`m~OB;@&eEp1;+Bade4v%GtmfS~WH2mqOqF^x?#IV#3=>G_-^o_|*lj<$_?vt7= z=oyz94XmYZ4^ikabjN6*4ybeh_IQUfmO}vNkwH4~#3h6AOeGTG!6Ah4;E=+2vX5i{ z5K1B70iJ}-;j^^|T-pKN)&tI|3A2bL1zLsDuUP%g$l!Id5MJ=YFEBJVdhiP*PiFN-qk#6dhpXe+h>}W{yEd>+UNDSX6A==F5>S1Zv?U at l}*K42Lv?* zeS_O^|KL}GJ;H?iV6fr%V9{Y>Sm{U;*onv-^H8Sk1q7oHW#LU|_}&9%Sn9|eD|M4f zb9JK+p+8mmRJmzM{n2Uck4nSD7U3J|$bS zsqp91wiC9_3G*Gw7 at qH(zsd*@7^qKWOlLO7eu7R(ZBOp7O-|}qWNz=w9Jv+NsZ5(` z2kI;^OveAVRAu^O{U-2*ivqXyo2Ee=Q at Hne)b{Zlm`I%R$?;W+(FRBHr-S&e_VAW% zoQ=0VKbs6bENqArJoOS-Ssf_bRaTdA&!)KAt|`kC|7McRJD&=pL99-E`U;nWMkkJlPSSS at n{bA4jY65c&!L3C-E__;GFI zF|$K{nqu{Ht>nhvsz4T8hGdO1N50-+jO at dA%z3Qe5 at SaKFV0(W zfmO1E#7Fx1y!~JyK4)cV6l~0lq^H!%;73_232K8U!38GOQ6Zon4~ANJ2-WApP0<6w zS#4q*h_K=UTYr=49b&eso=aem$_hkA!z4?20kklKkl>Ispclvql;xRvSt*pfrr0;| zZBPfRWP3`eXrW|o4C+ at wAjO;j_UtWd)0Y;P$BqHg&H at APmBdwlZ0j@ne=>!V(-nm( zG7!)L+5d2v`_J at 6cWsr|;T|XE1Wwt6r%mgvXIjY=7K?-{8#3kulN3~t-9yX~@SDp+= zkzTT at lCM8;2Eb(U98un7I7N{nNoFWltPF!#LCgaHh)OYm%4-D8ReA|11;u7 zq8aDaftn)4yLeOu*jSz;*1Ha8F0v=d4DL#p!3rygWq=v-rj~+1mQa}Tn2%!#-jwCY zeoVk|kLXD?W4$tE*vBMGEX;W<$GM5 at NiGb2%)m(nZz?qWcx=N#j#QCVmGW0Z3Pe$n zYlwJk!ikOyN-#sbB4kLz`k)`+gfyx#)4j_@;ero}b>#ewqBOzy#pM+5x=12dQVe#H zL5Y;2{&G>|SC$OoVC~{^s&~yOUr3c2H^v98RK{Z#PE}-`LIdy-h=U2)EU}^PW{^sG zOvB-Ttg3+{KN8GXu1FcMz(Mlc7 at Mh-a{ek&I9CA-SrH#eg_(~(aah1X3NuknqEX)^ zDF%ECX$IiT(r}0)zcBD(cBvIdE~`1vJ{Q|i$uqQIgv-q+k0+Wjxwheuf(;m2FmHj0O^A-D@}tp{jnZvy?|CW8n|#olG%*W z<5j7^M1aIYF-)l-6gy5z=}GT(^CEPONIHX>z{vx~5}Ix+K7;e#BtlCan&lj=cPRIeYiSwt}5fVMSqa5=2M80 zX?U(CK##8t#r`c)GJ{P1r(f>$Z+G#;KAQbp&MO?$MUN`slxme?Y+Jo9LeLOk!(Vzl zmKW^ej(&y^=%1()0LT)y&*p}}$w8txei8VVcS5(V(Kl*@04^rl5->I9ImVbUD~E2t z<8^ZwQIc>$LvIr^eKe#)r4xqdYOzCD?W?NHigF6sm}e!6Y--z8r&v-0K7LV%Qu=CK8dAN>jZIGqz-2InQXLKzjPS+ zA6GbF$8QRyh>5Cy29`-E71$*4x+Uo~g|p`5rgj#fq^B=4%8`6ba}rOe+P_Mmu>^W5 zEgZQ}cjt4GR#oYLv;CrIr9)iH7i&%wsm)eg at 4NkNM3y8vhn0Z=btt=XLQnZIdk(F( z6Qdb0D at 1#h6F?4pCP%-LfTqnH zm*wLEk}cmLvk at v<+iG|Ia+SF~tv*8h=a8E_i=RDrGbn@&g-<~W#A1yj at Yc^tG^z(( zQINCrO`%5p`#v`P^F at Yr%a%v(6HXN8?D)Z!a&yQ|lnke~_~59($qzR+)G$KiNy4>! z!tcc{Oc_x?EkIYi;mP{aBF{91XsBzz&W4LI>!J3}INW%vF?Q-z at Jn8P@H<{>K4Q(o z=f_g_;6}sl_o6@%D|fc%&l)KyfxFp4KXYpU!HJm6xTJr(N{aZFTS}0z$(D##Y4cmC ze>XZB>-%WyKis>O^|Utnz5JeyUr`P$F6*kPs;FsAuHCh{|)weJA||I5ky1xIb at s|7ld&5L#!EngXFp99!*Bq#-crQcf9THE}@oVQ6<+jCZ{`>5s+r+P%@@0c7!e{(Y1@{_x`=3Af$x4n4T*I2# zwf#pbM{&up at weHo_6#@_cXy+0|6eko%6lYlAjMyY`P at BsQ zCdSZZigG4eV2xNLF;J_^l_o0EWr}eoTj0qd$}z|hjyNRoQ at hLUC#EEi(^ZgHQ0t2R zPAHBl&a%K9F-xMMR**|eWTw*<`<-NgD~B4HSDZ#Iibai>IG;G5%$*P_rcWt|iGM!GUU7 z`FBWhvIX4;YZ7bHI`ulW5VfD|ebQ~xZQ^Y*O2R4CvWnY}UGfo%BoMWXY+Mov6 at U0H zV5FV;ATdY9EqIrDgdqu8mKBHpQ5oP)wT(ae(Zh9F?Qn5?G$^F1qn6cxY_9L=*)-Q( zF}k+*v$mzX+mg)lIA at u8L;KaVOu|-O3D!FlJzgL2U at 4~H7xWJjrwscHYe2tCaRFx& z>J2I~3NmUmN;IkrVH_`sIbhKxXWJWu2*gIEBUI+iF#{~PWNmwZ2!ULv)`V#UX+&v+ zle{_RfF+k))AntD5E4ip1Peq)twO0n#V2ItH85+Ncgfs#1K|RhP_+pc37%2yQDJ~$ zpaj!jrd_5Xrhi?Uw~0UzrbVXn>{bMP2KE{39w^B`1`sXC3WNvJ0(}Rbpz;woaj#iq z at UA)hwQ3uvUw5f84d3PkodLh1d`0ylI_Es)Tyy;E_}9E`$feG-&NR=oXZy#tFz5{k zkAhD0g;UVM8+=*5%>i;pi6_pr_s-pZ0 at 9(V5an`q_Fjrp?#^{!@k{#~_(M+xtIQ6i zwGq705WcJ1F?VHNwc-OK$H05udyR*s!CO;}B&ZO)`t#uGlP8#S_wr@`iIBZIj6A-* zs$PhP_b2aBCzuPvt at d2v;WjbVXz0x1w=NjBPZy(XT1^7X!5)?oDNl(+F`z2ozj()G-td?-Y3tyG>5)f+^cKU z>Wv06zSuIVu$YVddPCt6XR#JZeq-iQt1&U|@77?@9O#aDbFi#xKRu|=tGZqgyubOI zUInc=7AX9Jq*=b-SZC2Aid%tnkG!m1VWv6Ko%Ke^BhO;elktYdqsL;=lk&#NBh7F> zwp{nkJarr=2_xxJNw&+5IM( z3gmg=v5U$A3-@=cDrqJ!%PbGgbMu4+_dqsamc~c(b~9w2Nc3>InU2) z!r!!xW>(17&Zx8g`Ns2S_&kl~mOFSf*8Qyyjoy~Ebx%b2JT855 zDVzHDmOB|V)`P9a%8i!Xy)AbVg90Ll6BQEw+z__%dPkw5zEl!_)tZ)?1O7)Wcw;Sl zhZ9(|?*2Y)O>oOANt?{-l4g-(`|3S0i9tzW%N;&i?fzCaqm}--m^&)`rkd-jn at XHL z|6_}uy}lS)?atO$MpJzXwC=IKhZJ-DPiVCVTX3mOH3Ded at O+gijtlNC*zkN+w5z_6 zA^LzeO`g>>KhgEUz6Z@{$C}+OPqg!IH7$3X at FH7V;dZ|q7hGKE;6>C<98Yl3&LLYv zb|H>$sUdkTm+H+kE$@SUQ-C&o$KN$efVS|Eys9S08pswt$*Y=UOAQ}?TY89b1 at EeF zbjS9^LJdxOt&vV|$ANEwDOq>!foIYVnq(I|~Uf|5UhPZ8p%sS%W@$e05} zm6%1`%+fK7^*9{TAUCiMDih`o_dNNaeYuq4G=`+&{I~Fo;(|{cx*$6+4k{*C1638w zjp_>aKt%+jpvr+2QI#TeiS#gNh!!d2c^pJjZ2yL4)R=Oa#Q|9&+KE~y_ig_I>6hwZ zIE+Ecl3_qr$r7Lw7#h_N1DWTRvXc9js*>kaf_c^jszC=t0med=!BF5Kkzk&4A!#rG z`9$CnDU)m20m5`jw#6l5fzcR&sClCEc5MWh(=LdV<=b-+2|xwR??kLJ^Y)J-+Iv=EU2w8wBoU7}pHYeP$%zBCLi+V+)H3z077 zUJJFEbwMuF1vy6Gp|(=#@w`GcD1&}Q+!39NJ4|02 at zUetKX7JF}$1_{tkgfglMrKg=YQG)`AD}ohuiqg~G z8*Qd$8&)zNh>z*V-5L6~Y8zLw4ycV8Kx8CwYwr!ik-x137DjcZy0`a+cNGP7M1&A+ z$dJrleuC8F{Qwk(g#jwV;9V7?9S)>1_)y-zo9Vjbd}I;++Yyzg at C2(2A6?= zPQav-;0GdvS`jC`kNQ>L^miL!X+(!q=g*Zv^w>+?y3edp8Ai|>U#@zJsAg4NVDDxYKwmeS=ian-_Q z9zp7xt;S&9Bb!<-;?^^s=#`KBfqB(^5OZ8q#~Aj-4c7et3d9HdPT|;G zYKZ^E{;`ltU47*c7GVuVBveLz{KO0vToPTo3D7xd$H&U0>%HoPmYeD!-y{8`v>`Wr z`U{=KNTkUZyMA&N?WF6izRwSf*Ox6^X~S83#gEwG{vB(jGaiI at F*bc3K-OY)ASQD! z`8UlFZMD(fMCM-aaC`&$YvYTF_C4a^Xg7+dwK3}Ya;vDyy-+>fi|XI(H|Sfd9 at GF~ zvfCGF(2qKt`=_+tz)d^AmOeauz}M}B3k;I`0Ft=J+R&ozi(Zb+UoLSMp8)56aFcgk zXa^(A0Asv9M1Jg#h^FzpVC`sU&bp_6V`!h0SjV43LqV;;LP4?qr(fy*kLFQBUj0O%xO$*w1x%22CA8*KPswKt2nK2z)cR1m`HJ04Vkq?e-1gQw`T_i2e)YE at -&_^ zH?y{soak at 3`+m;Tq!%k!qex)j6PgK8w2^Gv1qen^gT0jeT!IhFKoIh^kQJlwWJ!xyp64jhQ5t2 at m6HMZ>+EC>tf? z*H)~V0b+qIvVT*O>4!Kt^~iR5cYTo$0fwfP-wnLW7b9b%aZWIC=Lu-3W{_d!D at K_r zJDC(B_N0BPbPTy#<#$y-?~L+-9H=|&&og~Tn!G%UjG9k>dEZj<`~FT1)*a2%j8^~p zn&g-k?SH}MbWCfytQC+(;URsjNSjr3`D`D(a!0fn=eS6$IZ1%|^;|Y3PD}|$9u1Ly z`0aNrgCpN)t&h|;^% z6pIkm6yt4PvD)Db54kfj^FFam z-l_&qq(BSOSl%Q>{!JW4t~H8 zHuaKCs^>QSKKi@d{(v-B^vZ zI<4YC3``Gu7%ebeh{7sHSvI!PYPm*Uj-{D3mPIHvgb14Bw28p6b~-_2528WHu+wrv zkN6z%4{$9tsK=$v&t%4It;2l}C$St#v{qQtmSP>FnJe=R*HaVXtk7d5BwA7YRHih? zO1sh{nt#!!d`AMN@{Q8objVq((&H{aXhR<}*{)c9H|p=DdE&~{$?dOtu?j;USZj>6 zs~L|`-M*4E_h9U{=yQ`B7PTr0vmL2TO>%7E$a|C#y=kjB7oDs~MINwBCPv|vC<8PA z?frvfcmyT%`YrTFcw)>|B}f#Ao~Nfe5K+4jY!Pm-#AL;np5Cbq-h#S3qLI_g)k_j> zsx1LktMCKRUR+B8uT7R3jFDqbpr9lm1wHc3tv`MKs(tL*|2yCf!dV3tUYVq$POduW6TN?t!P+0*B{N9b^4 zm)qpn%<~9opP?FGc7|zn?gZgOCsSsAwaB2*=WS at i`V#7ak{i>k?zGsg0Pb$K=uL8G zp#PUChF3ZSgc|jpa(eNT>p;2%^)lp6hNXf%-c*4MnkW(_ zn8O;HMUT2`xYry1<_ey2vAd4_M<5LU5eVM at SwBY6($mu6zm~)L>T{wv?`gEfs15VM zCYYDN6&xCa>ZlqNMR=>qMB&e01%%mc5eQ_l%aoopgv`WrugRveyYXP}@ml?Mjfc8|MEfdEMy`Ri$NBkp5Vi19RnrU|i8 z-F6!CYt7Y6+`fV*e~U_ynqR`P+}7dHAh*BBMZB zj#?bxw5()1nc3>J at Nc!Fi$$#4G>-E%d}1Ol?OT1e`cHO5ZJBXUfSIlM6w{9PXa1qbd(?$#cz!JalxkqMp(A?=ic zSRXwSl2cJRdDxf%k$Qq8o5Zz+A4<{3fqeR3w}5z^d+UW^2gYWlRmiX1qDHoMt43YG ziEs|Hf)9-KuS~sPd4+W4KQ`dOPbde9Q=l!^|@I}6M5mT`in20Fb zL_R>d4ymsnyF&F-hXRrg;oLw>y$*>y(W|1ijmRl%yw>|$vEhK9-Uz02%os{-VpVQ9 zz-*1+7u(S$w+J6FJ&@9E2LyjO8S5Y1lWEc1X^c*{xZT~@fFOy z;!~ROf^Y<4XtM}S`uj6lLaH`dFuEvce3%cxdG<<2z!l1eOsL;$*4*!q?)|0jy)fA=?)u~l&l!zVpTE$R0bp`nRH z9g#T;AvL%aupY7uh+#k=0q1;h$Xvxy7}=$l|Bpg5Zlc^bx|sm9B8CX*ebbA^d&{#i z{?Y zu?^48(TDMQ*Q0n8MMFW;#k{Y zk4Rf>3==T<0Dtr at TR1s+nsc;!t|aIgS|xZXbr at Ngz=b%^3_I*59ckKyuwdwqvSjRV za4HLj!P71&L+_ED59P-oA>Rph2Nsle6^1c_B&mHH6d5!F#kyL{7^v0R9PyZ#_DhxU zq`t8_atOv1dyN~aw<=ldPc1U0HIl{~mCIWHF<>WjLKt0lg?lb88mrI|03 z680a=^Tyc3&DyiE5dBSWZXs>ds&g5Pxb&t}{e#G(T5pKOnegO;J(r`-M#IY9 at A1mk z*HfGBdv85g8Rge&3sq;9Ee%JEy*20dm4 z)#JKCuJ2I{^DAhUOVnM7z1DX508eGQA1Dl)6~4iv6#np+$bT7OdyvZ!|I)(8!=fPk zJ$J;UFZZW7w4H98R6w;^?pzZk&wk*=82|F)?8C at j7AJW|c>-0eV4^%?PFioRz0^hf z&`;#kf6tEQx2RvyFi=o&2>%g3^8XnNshalx!sHw2{zY8|Clpuoh3XJ9ZCMiYbS0KX zW;Ai*R4dfaw~Sk at 7gvqd!XS%O0ndj z9j+djM at MeT6<1eJvy&8a2AJIDO%}{si!_JtQ0$INenwS*g_YClwhR%1RTz&(O3Mr? zBOmB2HVN~|#PqWCXWPjYHDJR(@#XJnRmW`8apM|^ATfpbG)#y)OpUNuCDFECjI8Q8nQCbxmwH%D*)W1~( zRS+p<{|d*XUb4~g=iU9qxKeMpx{0GhfZ3T)fwl6nP#Q&Lt5qoW`==I0hQCeocK7rd*i~2VxFJ)FZhSudDDWs$?tK>DWXO?kkmM~$r^l$AWRtjVox8>``-OKd zynFJeX7%+#SFt$!de!L%dM#yi04|ZRmg^_7;quD1cruOZqQPBk-bW5 at Sx9FT4egks znxa;QV6O`FT$w(3g0G(@H}~9?fxV09UWiQE2v6OEitq(Njh55=ms~UjfaAEId~%av z&x(G2`)$62QTf7lYmt^++=C5$-Uw9{+v2&4W|)`r=5(vAeQbBl0eL-wkA0#H42Ch% zliRR5g|Vr!7Poo70reA#aE{#dMnbg-G}$)iuVT3l*_=FYe8^{OBg*R(?w=?#Ixe({ z0eITtFW;{Roaqk8Ese>av1aGUMMbt4RhzAW_HAEs=F~8i;DaPEpFg?XkIuS-bGu+! zldqo06UIzkUq9K5u`F6&O%CP?2rc<+&zNAId;W zX;jM}|13{QMBn(66CXL{Nz_LLEd_RuZI;qd at r0*BfhX3{}DFg!wCsq1L39`lmT_}_x9eW;nJ zhXMulg8v`Ye4Je at oy^=V{+lQ{-N##F$tOHWhD%C{)V;etE?O!+xN$$@Gjl^{dP zM*0VN91ECW3=a!0iFC*{hnvPWtJF4YmRo6#TS;zi5SgUco6qR7d)0f>vGanrWsXLr z`(lm)R{TcrFn-f-vvD)i{eoourQ^gI?wez`YD7Juy2W6YD=e*n$sqo=wpB1#vLaI> z!Z>?mz$z+J&t#N2P#qjLS8VlXAhq8ux+)YGPaBzu$=U#*u5NDA zY at 3JhZgWPjhK;eDW7O6ImH))9WW8PNrQ0Lj4&7UH!cfVbhR-w|?np_|Pim zFF1oNU$AOhymi_JA(*E95LMGz2#4t?#MN{K5>Y<_LEP4hrVE?EQ$ggyQ$cRTn?lfM z&c&^5^j2=$fcR{~MdOFo;ISd`>2*@CSzP_TRKTl4nELIl`Dhuv6l$$cf}3l8^{0LU zg1T)L%@=lt=Zx5@)5$Wf+esz31Toy!ihc+^(CuV9t$!5t?j8v5M`jkr^3?NZUbDK2 ztRI7 at o3;*cY9P`T34;d$Hg{m#>4ud>CfcxwZ|u7v%Wv? z8@>gO=2un>QPy$B#fwtdE9Dfq2)mR%ufh7(`X&0F5-rNWNpvEQ8MRc~%JgVO^-hL_ ztbLD=TBgj1G7p|N+->r-#V|e at _1M#azGn{wO09I+rIT1G;-ae*oFR3kiKD at Na!}D< z at +_NuKj%~hBPnTOna7)9i=qY{clUZNyQIuPMSm)EJsg)!2Z7aL at YO11YBK^~SR+P$6m~0j=l{WbB0+vcPD1+lbZd+Um#N7T z7%bb%ml0E{mkncUOklAi_g=35&JL4)Lur1kMEzKl0MX!P=)yYED7w{2oqRQAZx?oL zKXOQL7(I4^sAk<|$JRK?S>Jt~lC})N`8*+(M0|e{F4?tNo~dQ1;%hj)mLOZV1W&%0 zbK3zZTBXY!9 at fqXQq{L66Y-;+6iT|9U+%=!_ZDo-5?S;8XsSu(eLDQ$nq~h}(6fEj zAKRH$q1Vr)?I^HAr={ID<^SDhfY1wV$;)~BD?!SZRzefDwf at p#<-3=%<3Q#l7xm2g#$tPIO_>Dn!9BENrDd=9Jbv(?LvLkfVWwlv1Z-Ox zKg9GHfN?HV7vkK(KG)D(RnuB0Bh9=-w7R;!IcuWhGjIe%Pu0Fmw at PpEdbVx*@io_7 zd^Nwyd3BbnV`{JYL*->B`=>SQsK>)y(*cpdE;jvaV58-11mcJ)6$uA^b{)aEU~(i? z>9heB2h4;v)g#M0lNl?IF%x^b)cDfG9-PPVo5GkF<|~}Gq)Q1{6H8m+H1RLfHub&S zX*z)1H5M!uX-`v|+-3xUizKFTN@~-E;6+McwaTy2x^{p`vBGK2Q`!_DPLY1p=c#Qf zkibZI>MtqYvJlfq8R{>o-ii>{NGdE9SwV)Y6!09 at l&m1rRSx(Di%qtZ{wfJPhE*rq z$#|6oR*hVu*+}qKhp+J~IV7sGpUa&}lP-{N?XOGAfyiQUFCoGqYRsEg%X+Jer+sEjveaOA8>}Kttee>qW0Z%TxP~BbUI3)ODZlQmr@{k;TsFUM$W!HkeXfj<@q<6;Mro>5aP!`O=*DpBL2&co zwf9D1Dqc|J{uO+qK4qSp=M#AT6ow(OyEjS__A&Tzx$$D$JqfyCAKm&`BOqd_bL;-{ zLp<3T?y at fM)2f9NMUWKQKG80zxJ`U6LUl{ZANE!@ZmI47)OePX0SV07PQ0gZjEy4f zoasIscj at Qs%m{`V- at tbFQ4A)`U}kDHe)Cf?lyVX;C|ExgLi6M}jvTrjPvEVzrDFR+ z0%3JcxJf;s9q=iP-N(@sSn?B*A?P+EG0&s`&Ao9j{8JkcPA{R1se$&Zw4`FPs=vt`m^-Y{6I> z at r-jprAU?dk3F>hTyMP1l;+&FJNXF^nHR3aP>oc?xa zch}CH0<4%)&r<=FYjjBmd`g{lxeGgvwgJR`Gp_Cqm7bQp)4MC-PLi%*Q#V#FvT1ro zx=ZEG8Z4JtII%&A)vVKwpV1*I`%=y~4Irx9DDRFMocny&_H36WioLK at PG>`@q^43? zW`m`qrBcN=W06(Zt<{xT>OEC%ZOf>n>8xrjW2sTvZ4>~bRAhTxb4+Y2prpN7{7%DI z=62UO-=m1DQ4rYj%&#GrdhB?dZ3{Q?%~^X>oXfVqJTWF at EL4v|v_Qw?tR^{+$1v at LhB{&~Bbh>jQ}; zANDxCJSY`!R{Tz3p+`E}Ch^(w*tl$pG4)VZ*<2Wvau-|9~I9cGmP>TABt~z49X`9LACE} zO<8&iK?U!1O+ent54E>VdNJL*^_0#?1#vW*%*A?8zM_3MXiM<~D!d?b5juQUvFbZP zqAd+8(ZJSk4ir|BA$pID-mT44xfru>hL{Km!jR3GIYJmxMuHF$EB0YiJo9=9T=NJC z9`kaL;2?WAk#q$}e9$F)AO;hyIVKTpjG%}_i(UGwB%wLUF`+pr^dKNydeA!@U>*!2 z8k7vDHcx{2 at KQ=9UF0kUSP-a_>JeC?oe<8E=n>A5@^XxlPMT=|awf_>Y|O`9Y^=vU zhB>VG9W2K^4^1 at q4SF+n>SI;UrYAB^Tqw+QL1=^i;lk3fpn(`zv~+en0fSMUT^B<0 z2GCv%4cex~ynugn!@Mb-c_zqyh8Q8N^0lPZBsH3pkxT4O#YkjWJ0hrx6J!7#2w~SN$Qc z!z at lg^eq$*hiXV9BY?h7*{K0Jq at Eaju-xZgO45Jur@+63Xz(CgEjfPsl}WHa#k9C$ zyHVlCOew6nBAU4p*iOW6Z)ge<0Xldqk$VM(I+!c5sRb|*K(r!OkI#1nMG;|f6bJ`J6b4a) zE`(ZP_892!I;2j0SuSXiE at VmDzhuL_C`dPAOD{iFqmu1YO<#qK%W}!{6MZnyaR{5d zX4!whPzC+ls&my+Eh`BQ3JM7o3QFKVe^dGY34_yDwe^Q^!-IyBrezTbz;9?RJJ8Cp zzf2&Xj|&m#e}_ at Kf0phxrTC11j7a68{U at tMF6%beXjWm?@8mYO<=z$RpO}#eed8Ot zU6o-!?S~EPwXOLx7{OEL?)KA6{)2IwtEr%_C$t~tk1|k3{&W%emxdy_w>y4f<6AEz zfxRqjjMO3Ebe+I*7vK|BnC^Z&uEV|x&g^&|<2Xl9Df`rGd%x~J8xCGZkH#>29aD~Z zceP9Izc3 at lOa>P3(%V=!tw_=1n+yh4??x13uOa)DUB at XZpRV%=kPql zpkG- at nk5G8z871-^rY6pp2C#QxVk*+S&%}u!fe&5J*rPEu{YswTk%^EN7ra$RGU$K zIad5CQWZHW37kA5yB2JGJ%G2S#>|n~g0VZR$oNGer{$YeQkFt{Na0*!v16aiKfDiveU+gfAv5cA;xT9_ z9x1i}DDvk>C7&!2TUBvkj$U-6v7GO+ z=rn~j;uB6Atnu`7a?vzg*nD<&|mrE!Y9%=mC2Kp=BAARrjJj*j!YS5Nf^}}Y54||Oc zkcYs=qNh`*<`8q{$VVshG1S(P2hAd4lkU~x_EZ6V!R0^o zNYxpEAw1 at FkWA4T(xXeTF(xkVP2?s1i1q%ZACJ-C*$qLiSR4Q{O$(WznE2Pvri~?Qy%iF-b%dWZEw*8lY zf865E(BXb=K~YX`!4+>{J=9gqc6EVc25$~m4xgZXn at I+TptbkLW$?BXNC6lPOh;`5 zDggOGmY~k+%IWpg zq38Q_#i;~T9_XNA582`+@)h61q$@7KYpb0ieP11?s(3=-EpL#k^uu*@pm_oH60Q5w zCaJgc at aGPA|3tIlGobZVPSads{xHMfc7gD``K8N&qXw#H7u?50{4RizKdT~+D?o~O zlxCw6-Z*u`SVHJ&X`&w(AvnwT$oN|4PrZIwOY@{C5azt)<5hoPIjj;g^n%x!S%2;A zMCF1k)?ins%}lMe<6fgxT{}uwI&l1^X=d60w})?!V?V1Y-=y0l_0qiBuGy)?bmr-d ze=+ at O=NH6KpnUym9U}Bc4<76{@Zup0KkyJuHqG-#?=}As=8sl57(Fsbap{QYD)8!4 z&G(we{6|y6x)U%N&PN-XJxidZzbxOO?^O|G$fF1?T7>$&-f0#U0)h;EZ*;;T!wiya zJ*2(DhQuFhtuw!8JeE7nu|UirdDCZq6kdxT>Ar_MVUyvM6f6% zBt3krr?k2z*Uw`;M2%%-1i&Hn^rsVAjjx9^p(Lkt^8kQs`FEFyZwL8#`J^aV$E1R? z2wwr>HZCqH(}!CW;>jVV;*BAg;?W`4p<3|qm at 6bPm@A|?)E)o=Iu8NwoasH2;OR4y zsOcS(tm%_2oPsH_wQksx{h-N at 8vyx1Nt&`M-77&cmwT{N2*c;2xSG-zR>`3T;5kt5 znXDLXslYWFZLh}TK|x}sqg{k(g9$-=AAUA*()W$tIbOVF(dJ#KR6^Yfkw-g_-iTC8uV31NIFhho*+d^`KWo<dDW;FaD z#hwCmdHn3GEa3srZA@&^@QmPn2Qp~|{fx?)0?s2ixuqmawu;CoWJyBVu?HhvSN#R0Flmk3E3sCw zRD-+GY=cP#OtLF-;;zQ)x|wm?i$*4|%Emmqas?fT-xU=CCBg$*yaTO*11n+jJrKqv+t7cw`~_j6 zQ+<&p#N3}mq#_uQyB3mq_>w~#SQ?UtD&;fop^e!q1wN!vK1HF(GeL&H_;&ZTDk+kS z&9ZIc{3Zj at Oa&&HHMDp^$wR2-oxinM1}le;QOC9r4w{a7J#$j?gHik~B=8~|usbg4 zq&Fp2`7w&L2MH)iW&SV{?-92igLrHMNM#~be8VzBPb+9Q#QfaJ4T5CkD)E(vP}gpA zjEmlkcLITG2q)ds8?4aIm?=%#S8`Ueo|2l>C&|^Db at F&gr{#D=DcsdT6zBFcqxdO! zC{_6_)7H4JETPrGi{gKMksEIOW>qVbnNH|P!lZ8&U9Cf5;YY1IemFtS0F3FK%+raCtWSj&Cb7E8p z#rOm;&2|wR$C(a2v4t(gb;Q^}5zuTPYouoaX-no|9USt5q>2*R>-HZUBh+6E#Cpnnl^p7um7ihT+^R;#$7DTR#eO6ySgSEH z#e6>~tgxWXHLwhBs>*H-hN4h at XM>EiF3Xyw$|H|KuM~QgFyACjKO&BETvu*;7p at gq z4Ykp-nCwqz{`r2b%m{52 at XkboQB;DORZJz8JEG^>^=C9|2tkp{uoDx1KbCCdB{zWhz#5E|bzv=>o zXfu_!g}F_$@THo;|om+-x>8kQYEckDpjS0Vi=h8v?XGutgKSgF;}9;ZyZ7B zFnB-r7g5V#0Kspsh|w(HTEJ%+PUEq at 81eB#FDO$e98UNa$dU;<$QmIP~(dZU1nN|Y0kb=Lp2C3ifc?M6S(+KuT zLm~J%-md%|O7OSQ>HmZRAsRrz+zd8Na^@c46AE$Y0xP(fqO=aXWfxaWMQ{Yzkh z`P(cF89(0%-Eg`9gzYVlDkCEW at vnEhpEL1x`$<@e2foo2!W_ECp=Jm at cDtp_;)tnQPq z&j;utFa!hIu`XL2d|!sJS;yNii-~u4uAv(A zmyyYNs*U at 6BScD{4A(YwX{wA(7sc zmUirmOmKyW9Y9{YU>OI!IgMVYzJzrw+m4d5Q#>nuV at bOmgv^i at MB1Gr4FKLO`6B0> zTo64`Oo>B4lGUJ*PzuV5wdKmt^^}cGLtUzjJ{wN-P;g6M+4%hNId>g?H0&!e9%0-H z^O1;UWBErD+<|;;lfiU;7!S8JsG*TCh+4_qrcr|@e?tqn3MdF%n-21AE^ucl>1&p- zvf(YV=KUBX-W5#aJ|(+;k3WwS-6N?f2UaTCrer at x*p=y?4d@^82uEO(y;)yEC(PzGF42ltD%BD|?ZZ0DFbHVx3m347yw4YsRM!9*6(oxg$@g{^o6UlA-s8Fv^ckNh z)a%TUm8qRzI}zz-!0P;`q00xC4d6}|N$*C1?2L{h5Y`}N>c~TF7c05EjCbD5+v|gc z8wGtW^yHb82hI`|eXmVTmo??%O6^27v4*W6_EnXKBk$FB_8Qm|c9Q*d^z66NNX6(; zxtVRV`?}IFo6Gt(+4gYD$=zM+v^R{Ctx}vOS2535(pkOYW?n!EqOBuqdXuLu=^vYf z6^3R7ZUnw?+lgyhj1Etr61Oi5qMIqHO~|Zfj;+BWbr&yA7X(`Y}36 z(B*ryxub<w1Q?v&tgaD5$C+GG}z%5korU0IdW_n$qSW~%GSf3 z%|Dx<3+bjQ;MPYZxM#r{o z+fK($$2L2*(XnmY&diK$W5!me-s;{}jb~ z=5pQja0MZ|S}A%qGrHRF%@xHKXu=yur%Lu|^mE!lZnV(3hMz4elz*2v8vnP&h4&$M zQQrUL5*Poo#fAU()czOa`M>N}qzqHaG4_zaAm!S?W%5=ewOdSa(R_-_U&P>6CPZ3d z(kvVqu7~rQ{t^BI;hgH{jdGfKzPC(Ia at F2MNVUy{HfDr>avcnNdmh(Zjvo8`o)P=u zdf~(X?htK`x+9HoIWV=vGaw}IE8O(RU+&l!xalVP%*->LmOn^t7>KbiaHJtV$Q7Xs zakWf|1zw?2vAfN8&$wrus8PnS8g+GFrPf5X``u}$!rm2 at 96=Op~1eJ(W1j|fC1omfS_%2P7lo=YT8Kf zSKIDaCx85I9hG+PeiFqssk$O>y1ceGUYlQ|Nim*h^93n&d$rLL-+}FI`RtV^yCGHN zx05;2lw~qG$)lX at 2^S^=4y>G^&ZZRuF|_=cZ at z|@;@JgejVD2xdWkcXY*Er#f ztEvINZdb(ApT{JEJ4l=+yNwd>o^ z!gGvynDi&luFHCfYoD^OQt46O|5{`bdF`T&#%Wk>hDNc8*3P1Ag;v$>0Afp4&;xS# zO{Av}R7djsZvvM5F9JJQEqpN*32FZ65B5?^_fV?T6HlS)JEG3-r&e?0Q}up6y42&& z=Q8(rYpy+x*Jl}9F+U9Vj!-*0l`iROl1K$6Jwqc<_d94FwgfB1z!))lCgeBywnSpP z%5T9C_Pul8CrO_uP2p>i7oM73%AbP7$;4Ai#n88CVFn~OYTHZ5GGWC^MNjHJ#URbd z=$g6jmZy2BK9H9c^s{+4EHd}>2zk4zr)4<_rcsCx)M2Fa*9v{Y)B^Wpzbzb`hR8>_ z*V3&Nkj5SOt-s_=oVdlHe28+GCml`xc!56I>65T{XhBzVh2lt5AM at Y6;Ck4SvoxE4 zfiNI`!$*xQT>m9rDxMZ(K}|X5I2t9#OSo2ZP#j&78KlgaSZ3>Xt3g&LI{5+KEOozq zm~1#SJbHV01hyS?Zh$RZwplG~wn;0*G}{WKWI7(0%#kiw(PSGWBl8X_wn;CYW5RQ; zaMW|JaOQJhKli;@Ai_OaApL!uaNKi)aPD(tKg7K%T3$xG4e_tMv63bzDEO3NYmmlL zgH5C?K-*?bvFb<-t?k_1rejV|f!$s+2iQ^~-V16zlK~%idz(D4oes!QQc^mO(ncz& zab^K1Zo7y+gVdb5nNvC at e*$f5e=#<-{mRLjwn*Vh$Xd#M7~0p`lZoLkFjl>nIMi8x zV1-ZPVp~I7&(a*oupP+qGOBGqotmL$syA9$se+1;(K$*P1Bue;rx#sfry;nS{)SEF zruy>kX#7%{){fIH#(`WBVMgp^w^3HE(O~|A8gu8*5C75zalR8;Weq1^w}$oX7OZo0 z7WJhHGw}U}K?QGs;-Z}eg;7f;hXn=B&K3WhXp!-XoO{#o;RC+kh(XO=m;X|ke(Z9# zj?HBM^s&4U4-V7Z&2lWR9iQov27Xt|_CXZO!!TC#LQ2G(tUgx3m(V(gie#5%O{uoF z=!OIT0|x^R20mMk<*XFz-r-mHDyLw6D+so?99`7^trYA`525M-(@?wP>PS5ylP-Et z2WYb6exy&~a9XToo4Djo!DNwVedokljcMo@{mT-VXDfs$q$F_BJb8w-8JL&a*VRzut>`H!$?d=7u0Y(XSVw$_iT(cG z6Qf_ToyoeCeIau{6KAU0T#>DgXFxoeDZU*q z%`szHkGKy}Q(DPxZowJ34et4C2y--#mnx~-uTiDd&|9)~LV$t~?m(r9(s$B7I5&k$f_wpyoKwythfA^<+ zELx=`5wLweXr0=-Tb-!3$`)^{80%s1n>Zm3_7mZe$4oNbdSh__BbD+%B3Jt*^P!@+=F8L2q+D=zIZ2(C&kGEyRcclcu%3(w zQh3NNlpQcqc*yN3bV-e2nT}?)8IJX^;;T95CBB+Qr;O! zHF$Ol7igjNrK at Z^BXrF63Rh_5;2uz^Tcd>s1VVmA`++ at d3yO9{gNH;!2ZtbGg~Q}9 z#-ViT4Z+LYG19>Mv!&M_}ZfohGnD+?0;Ke4p&ihI&4ZUaRe?17x zdmR$~BGu&oS%LJwGu7Iv3(Dvpj0%~};{Bv at bd3A!m=uK|4RLFlD0JnZr8s1HYK$T) zkn3&R6PeE}h?AF>|FsBzrUOy&yKCuB?w$8(f%Bf at qmdb=ov-r7JYbL+)TK_U031ZN z?+75wXzlH>Gwi5u+vbT2EQ8!-Cdn*yWYgSrWCNa30DVMwu%2aEd#5cO-6 at MSh-s{G zza^jVx3(knuLeCv-iRYr=}h`vw~KY^3ZG`cjdF*~R71Z6)Ck$@4!)|3YPrTt-{0Om zQtQ3$L2tpYYn#S?3c|i-T~kp3`4EF zSw)#x3g+A5i9tYPL}!1fX{D|q#j%6R`#U77j=csKZ3~AtfFhPMxRxJdloEdCQnU4R zeLMAUm9#BI#w~+V<7T2&x7h|s3R#6ZSHI?F+iIcCw(9 zEVb!y?QfNo@=%dFqwsaMY{DKT1ijecIwJWobLq4;Gkxq0;PaSy2=hFp)4_V}=#A>0 zwVMp3cpsC;;)om#wy$5z!5kM92(QKJh;7oH$<7>N1WraTsXe4k&MXh!*(MfP^jVid z*?#dtsP0XjamJmS5__D&>cPJB^NnYvc7^R#0kGYCz}3CeQWDja^xFVh7m7l_5oxJ1jd9AMqI^ zQHN(7QUzA}NAyObk&b at 9sJ}&06xkQHMFMJvzeUpfzeQ5YALG8AIEnbim?VuP(Z8Qo zsX`W{1ckjHr4Yo1u_+1a{wmeLnlMKh9m8P}kgA9gC5dErD78>)SN5jh7;**;t? z)O6k4$4a|lL9(%z^mE84XJO(4ZKY|LDfD8!sc+&#IL8WZYzt%NVuG3b1Q3kuyS3DVIjY=<5z#C#7KS<>7cSaUR|1S+t&)z>z?=h{o9J6G*~BlkATNu3)!)~&c2 z_cBvLwnB|B+A@#{NpJ7Lsts8cDzbqjYq=&nRF_UNE*W~Qzj}*)$n)NX3h-s|#Liq} z!Jn!g7Vc-)@|2*LLFIKm*ee7Y)4?2HyaAkPy at kJx+a)SYATznhqulNFFZTHDMyhJ& z*T5pDJlzb;PK6IyG-KEfg8&v)r$=OGMx=5^&-VNE%d{QgZg-ZVt&YXS1QUYpd7TY9pn2XP+k_zX&aPkRt@ z5W07p>|DC)R%4^l1!`rN7CLC2tAyYmxI-ti`n5F(nBwt`eM)oVa1lwC{asD$O~^%! zypO?XGy718*J8CRNJ#zkqkJB!cFzWU<7v2`V(94-9{gU5xqj3yR?TXl1UfaCZ2FRwUZ2}aR?)_>e~u=t=#4h at nnx^M<^$9=~vdC_+4L+CRDrG z^qu30Km at bk;7D_$gl*`rJZa={ChVWF{cKLrLL_+KY-oXofHGFU=;l>EFG6dOCWN7w zFC`oTrH|zDN%)=%IgnQ&iC*r4RG0-lp`HKnTfxxV%xrF75eox*>F9_oU*UJZeGTw- z#zGILI8Rx>bcxZ7fgz%Tx_x8L_nSwBS}vc;vkEX__+EWZ2aDzGF at 2Ql^-eg zk1!QssZ1OQlTtY>l8jeCfBlHal9V at Kb$?Mq_rJbjeJJnco7u!b0TJfHG zzVOd9k3dnmiL5(G24qMKjDPIwS~rM>iSno|w5s;WN%p_tA`X=}2 zLYSOABX6qkdnKRTkeJZ?f&pBxeZW18K?j#7q&*LwZrLXRq#dfaui+~&{-b+RAwqx2 zY$fiuWHwK at A<9Q0AnX5cVLPCG1OkX)KZo`R28CRn;P(u9y5*j at ko>9Mpu-9i at Hi3A1KvOU*A2(mfjq)@S8Gm*Y8BF}a1@&MN4`0}g)^r@%#epr!-fcDmDSu!S z8Z2418>%EvG%9Yk8`>Yo)^z6SHJK1OZaEZ69y!!fo(UAjLwdRNeR`$U32j3>TcZh` zTZ^CY=MF|xY_n0RhBp_oKf2;(e&`s7@)*0Tfp;w?u+!xr=(zm(Wdfx>V_ffA=xS8B zo64u56KCat?&$r4H}F!6ASDq8q0^uPP@^>+V0gjIKjXw_lOwn!8ShiUX*k at WYeOB7pK4q78N9b(`(D1Nz-r< z6ld~tF7fmg6E6N$%iwCo6s{+W*R+6v%@Uv6_o^G&j9QPA4#7R+WJjx{f#Pw1;WMrI zHZ)X4z{!rM?F^&ZK133GNL^9*~0uO&K!DTMKvk29X^P0C5H;_h3Y*wfRBemfYpOl|?;WkM(x=i9Wz^A&x zk>NIn*BeFS;*sw$qB at l8v}Ox4t at -6c*H)$JSxB3Rk>}V~x5Dv;+RqRAVTYR*UHcc_*?2St7p1mgT79OrP*T at ICI}g)i3S`hr4R2CRVc8^jFIQGFn7Eht36OxR6WM7V zd~=JiuNlVAk5s>FFF$_y2eppaOEEo zfIfznXlt&pJtQX+V*?lA3mZ^%cIe_MXtJi$6=SJfuFhLkufN2`jywB=Bo1pNSzfoB zXw-kh==MqfzQF)NQCaTnCjXM$rUBg&wA|>Ns+XdjAP{I!aJANmS|LP7Ndd$~aMg~@ ztZni-8xryPzN4`8(`T2;GC0-o=!Ex5AF$cuJttR)`wxfq| zq*uLDM=srgC%t%}-`X|d3RyE)$DVT>wY;|4qChA$*yV#8LCL;0`GC1S7Tv=-il%-7 zo8Leyc8k#v9SuZKyl82=Abw9_GerCB3V3h03y4m|6EkjNCxK2jNzJMQ5;(&#xWE7C zF4R517=-Zh6r?!^P_L|N at Cca1YSSkLHIejxbh?0SMIZV3|J1%f_2t)9b_PaX#{`*; zX|8TL&mV%J>C3tuTPNACx<;wxdw=Na5%z*C8TU_^gNBu_|Up$)4()9Y}8th{6y>h_HEZwa9oihDOB=4Ca>mldE2qxU1RBaJ1= zQ?*o at GT0NvN$1KF$mR)76%K4(@AZpAUcFu3$yrlJT;>B0S&Hgfb-z{MMO#?WD-46mTnYL=G#%)xSP1wH}z_qW5}WW&WJ{lI5ETqCDV9nf2zrfswCrJ9V8=3 z&p8b{Wc^WyS+KjJc)_9s*oghZH8A0BN?Je~EHz`#L$D|Y^ zQ6#WY+k{3Yu_IUS%`~|8%*jD8=Xz!oO~vXtefr0@(k1Z|2M5Ze>2VC!GzT3kws{<0 z$h^~Jd5^qol{sbw&DRx z-jpcU0v<9+sM7|Q7TbsFZ(l}H;-4l85! ze&WD9%mm!Hr#G8^>@#c2|Af;StViI%s)=fgbO&;(EO7cj7l!$5qIIT$+< zlWIPi4OyVBXaV#c)r*p+ZR1o>=c?4LFVGhFi1te77m!}`q{pIk`wS8WB7cKN7t(U2 z_KV?n_DLLgRj zJBTWhB8n>0Q>7SPDLMuuC!ukhJxaGt_kwOnnM$|Kq^R+R?o)iNAxGK6#z3f^LX*mV%)cR%w%|L}Pq zmN2fZQ&i3Z)-UIke3PVmtWzGFa6b0=7xhF1qZ+8@`0DFw`W7 at 1I-;eP at i3V0k9P8{1gUBUFQbih`^QwIPecB z?2+`5+d?=2H3fF{EX at S=@B+wf;Ray}1uH*XP88b7ek0k!_8{v5E*&jADK{~45k12B zc5 at x6Hu0_kUk7>Gg?ym+Q4C-=28(Wfcrxz3Wxa}AR1c{@RHLYa7bqVdPwV=$9V z(LL^}+JXGQxP4TnHng47!J7GDv+ at G?2$RUXd_cL8c!CsdcH!Zu8;)-9sTU-x5C0}J z(H62D89{yd()v%P!uKEaJN`cn=QZyvAja^{Ok#Bc{l>npM|SKwk~oC4v86 zxhSEvhDM%7dOqjo;?``z+0fJy2K3HfSE2T&2J4iD0m{_;{Ky_Xhf2GhnwyWOJjZxg z(DMdbSl15QY-|>(4(7jS{QDjl1H?SJzA*Ko4SC!O2<6`Fmk^ga#U8%u-Ghf_5Z{K| z`W62&{?Hbd7Q^ag>K~H>rt{n&JPQn)$P`e()`8 zkoG=okm5)olyu>{mdUnC`=pOT!H|!B!K9B^!C?30NS5E*mMF163wK)cLPL3IINGx{ zk57m47zW_k+N>zGYB4HB^huURQ at 5fv4X{KPIzB(_%-v&9qkg|MuU4x^FCb_x@;z0Y z7FR~=MsDyaNH>bg1P5M(ajF>Y_Mkb`i}kdld4tA_G_jH4sXV=TtFt}F8J>pkiZW8d zg48~7Oq!CFU?#nH&XaPVvn2`DgC?oLvP9V>I4QDSS6ZCa{xY(fFBBz(?9`PsHIlq^ z%e1MYLw=IrYTt^{bl#piGpcM$nZ1MKK!ZG&(YEEY)p>E~aQQRg{pK+A{eD;iWZRyGBNxRE z73%tIk%h;b!nqkQ9%dY3`~`nBmyUiZ2M1O8Pv at p?HLaP0R9W;}xtGPL(9^vkohxfb zy>WF7fV*9fmNo(2+HF8hq_v=C=1dLNPkgrYwnRFt_A6EJIo^@z6ywYG(Aus^GD4z^ zva1$3iS>v8eZ86k>#Xx^CoOA!0NL-BMbBQ-MCE`%pk0P>%GBKxQksj;g}>`2FB1D_ zzW$cp3|47W_iQU48vcP*$PKqpxKhXs=60*2r<5w}p3ECrh{cT}jJn?5d=tqeF^*^y z#gucDSt`(ctbVd#vMJkK`^Q*gwh_;SbKD{S1Z1j2YBW7hDn%;)1gl)2S*Tgc;WxPi zv)DscxyX`9m9P4JrF?y%p#z_NWv*!VCDx(tO}?I{8{zT{H5hl@`{8Xw$(A&24J__$ zXgruFUV;5CT33? z;1YI>$b`*^YrsBLf1fJ3YC8IKTn;$OCM;4Ie* z$9=Bac*AmKBC at A_Md`=7rKo&n?GO&y3#+di2xL0|lx>aBJU_Jy{ zis5w^ISf7$c5|5qToUw3;yP#T(eN`oxWY^G03rAn!*pT at Px@kC<^ost`ko{4A7$bc zqnt|XCPX`il zY}}aZri{4Y1?s{?+1z*mLx(tC^j64gJGQA5qit?iqHQo%O5Z^1K(`YwidI$Iv_Cd& zPHj(wHO(8{nm&0**gH&q!q6=n{>pERTlwIi at S*Ev5(4x-sW*eIa=f8yv_3{%L z1uLO{=Re8ZvIvxS0hJ>C<*(;`K}r$v=OjJ4Z!$fv1W}&&FI}Tv1R)pIGa^YjH6Hnw z)jJ|pIqFF3m(``pRDs4 at 5O9CKfg!!Xx)wmeA|i#skU)FG#3KDc&BWgnvvg;cpGA^{ zWk9;3Xy)aXwsdh6D%ctT4?%)PM&%{ICvoNBmOXKIjG5j4kv)69%Uv)t08y|rP!#eN zIw?d1S~Wx;Nf9LsKfBpsp!0br`h#Bp+=nIer1Li*{(C3B)akksiFCXM|Bf zeE{P*Zx}sq#q#T_jcu)ZwR>C8{=Ze#ygk+y5H-+N3KC!M(BSc*DL&gR5t$? z at j7+GL-(JE)fY)&LqGB7$-(rPmSpT74?wkC_C>*~nYZFzgW#`%yZR^+5)cRkrEJ z_kHwxCET(MCYx-d-a at C;pX&Sg_v*3tlPm0cN9VZrlU(d at lUy8_>Hf>qtUL2srXLa} zkaw$Ap(PJI0i zwd%<_2JxJE6(B?Wi at r%@jA%sA{+iZsDac7EMMkOk%@XA3wQn>J72Xs_BwtqgCOKm7 zHpzSH>vteObzpz^=k+^n>zoN`Zf=X1f}MDh)V`E$@@9HglFWLfY4)UKawG+3q3Lp- zET_PJ*%76xHl6|>6~-C$xY-Av9&Jvx#w>bH1O;V0Ergks9|n~Y9XvU8;hR}ow}F~6 z3oR?2T=s;*P!qfNL%k at V*mr`*9xdckb<@#!+MzuGzu3q_Hca+fpyh#yVnIuFRfxU& zVLNav1yV;$H9M1HIqf*Q3df^YKI2!i0wb+F5|F7gZOd}4hF&7)%(|kHowxfiPzOW@ z*_Q31DW|uC^sT&oLc;Hl5cq88uxyIT!!OZeyWx0XnAJ5zC6=ts8|2SlXD_sx_=!{; zVu0W3zqJZ%qm_f^uS#WAQyvZ*7#R0wPd-oUZ#%5EjV#Q3Ta>dIZ^6#r7!r4d0GV_%X)m zFuW}6!~j`>s?HzA4gJ>-{YQ4p+U_gMk`8T5LVWZO=j~g6aHeCgi?W=d;G~?6J-Pa1 z0z4;K?Rji6>g9Dx>Em at v83-m~%$8X#ehxZMvpW2oze_%}nqW({V3^U)ZF6NfW`IwH zPnDREn4p+|mv6o?Aa&nIO+MA9SM5f`xJ%=FuFE9c?nHiuz9a&2*}j6SMK?Xvz{I>^3?QSlQ-a%G-6+gQ>>$MNIsH`h&PkSw zDGFOxj!y7?*_OJL{!|F5^{*Yaub30zsr_xIO)b^Ei0dPzBNS5c2JE`%3ThB^1}@@+>V!C;;}i?Zv=#%! zv>*M#Tp_Jh$Lq7oT6I^o at eO}cL}N9&)dzLOa{4_I-u9GEFGgOY?KljY3%>s!Qa+2#nV7fUz-ud3Y?GznS~zWx>=Ko~#=R^@>EkDRRNI7*Sx{b%!@QyFQEQD$(rOAfW z214V*y{@O~$n54}Uxxn)_uA#$xG?o{LJT+%=J4n12{I$PFwqA7t;?q;j0 zG?$l0*Dj_HL~=vpTMAz-5gd$oNuPe=^j7JMCxXfQK>ydc at -SqatqA_*%fLUeh2wu7 zSN;{8&iTJh4q43*2pA&nLuNX9q*prP)-*a7q!7HWK8~Uc*mh`T(S5^tyTQwDuC6|R z#taWUr|n#$3fU6F at 3*cuo3>pXdi_3caQgA1jHsn09noko%GBs3m}A(Z&9*yAjL1bj zvt%Rz*!xjoPQ!e-l-NzUlsGQ9rP%klr8w}kSCv{A5eICKE at M+0kT&{17*sAG0+|zhjDEV&FwM at K z$Le`8B%O(0n at J?1pDvZ?Zx9&9qRX`{C-MaDs&=hc!bBj1PMY04Mvq-cW z`QaH4$C|+%D{dv|TK-&rc+u|Oq<$R1(t#EMwBlU%={SQXfvlL&Pnfr_;{4o+r6>OY z-ML)&9MadRGijz0*f(64o#QCh?2`+nsPZlgi*bFj^(fBR>yJ>_o^S`@80asv1brtk zp&!04MtRdvRX|S%^k_vu~W{M`(!3a8M7~Nbm=~;}>a-SZxKP z4Vmck+sE9YSQ3b1mpO&G%Nw(Wyh*I1ILzHc24dYMF>}5OnCm1)hJ`yLd zJ;L|}-icD4xN|G1T&M4Wb=(L}#gK<_Edy{dM)2HJm!~?w4iBuo-~@}LKO{- z-H8Uxs$`!!T#JzwMN4eC`usX}vn*6aShXe!lmC=inDwzB!kIlBt%7Qi35*FOs_lG& zQ1SldEwa^DE^@|?e;X-Vm&~Z0f%x(z7WT^*p8u=^>EAhN-MAm(KhREGFojx=wUqBGnGHzs5uxV7h6OW%?Axa}QR4|21hKqSV& zKnC!I$qgt)mMkdqbX_R(jJQA^^ND_bmyLd_qb?}SbUX0q$+$qa$=W~&my!N&_i=$u zlaC1WY}dHlBR)IAiO+$7==Wj-M5j+$!QUHe%^K;>vDhaMZE9+sE;~)QKrN{Yr|XJs zdyD%U3SHhsOWRRxt>@E{$6nowm0PtQHJA29hve)CDp6{@Ir?;Ee^KdlSC%e=@lw`| zLMkS+CYuVM+QbLbVcO*AWiRcql){wpV%3tyFp at -eHV17Rx{BWvi0`HcE}`(+DPxTq z&XBB)0_WA*z(%e{wbAP8yvKE*t3)d_zmS8zVv2x-fI!sCc*j!pL$MM~Z-#Ay<=h}I z$HWqc4x8hM{na9eC6A6Nhi1Em%;Cz|3gf&$@luJpr~H at gykT%v&F;W)bf`mq`kchD z=c=ymr~FNMDS#+>=LY_V>p5?Z1-DW#JfAM!gZtXHWn$69!7?IZhxA9P??@b%odui0 zSu5VOIcev_q2ygn=2rFUB~)Eu>K)%7jhxqy7K9w9iaqwu3EV#d7FZp6&7uokTzCY2 z_rs+o9vFKihu&zL77Khysx;mlr%l`JcEX$bA? znq>AYDBWNVj^0C?aKtFxRD@;d+mgkQUWGd0G+w!=+%}F;OZ`Z`? zKHwV8>0Nh~X1SLoc^Y&G^w3Y?c^e3b(~ViZbP|Mzp<&C#-AjBKvI43`u|+jSxkTMZ zm0 at 6^V`0otQ=+G#&(Jc`<*LflmZoFxQIW=x1=C;N^0&M?2D;Wt8KR@d%1Giz#qKq7{ zm%k^xtBIoXNPH8-6(cj2q9P)}_TJ+=LCzg>QaQpVi)T|m6zKp;J?tU!ywJ+eJ5d at PF-XfJFxp5 zf|Uy9oskk&%>fz~oDm6ikg*gdm=OsrOz)q&PFDm%nJ)ydH_(6fm10x{K*U>$)~{GU at Y3g$l=y#04?T7667 at BB&F+oTMP5t#H>8dBq|kh~i# z;Q_|^U#ra|!8kBOmE0l1Vo9(^;Wl+X5QYQrJ(dgBU9P8RHG)BPyL|1NucqU&be$Sw zz>n$2oSw%u?>`x1ME;*|cmY4Ny?4d8qm`Ttfu&J1-R+SxYd!;f&|oA?duj6Wfi%Nn zfmXvo{RsOB{q!c^i3dIDnMXWHnP;Aae*`v=*N=MA)(<@?6OU_QYMEEVR5R;?R@%+|%o~N}ZXVg~Kf-EmmZmQj- zA!pTrN&U|DdVzM$U`$O$AZPip7=MP+n9sQ-Y0C_nYh+{rPVd;fLt8DsxIDc^?T8pl z?plRqTpv=vsjCJ5wf)EEDog8*d$WW{AukPv*Z}Cgil4Bpy114Y7eSvUkj+4#P|<7Q zAj3)nDY}K=zFt0xmhF55E^**@#ZP<5 at lv;MEVwO+ZjG3o+1-y4W7A(bsF6HVsjZn`cbHWvPc$Y-ENMan`aH#^(v_F)!CEw)lvjGj5Xh z&JCEX!zg7fGkX3KPIMQfgIu{K+un2JHkp-HiO4d7)v$JY zcc^1K%lzwM2Stg7E8R?JF*17uHGKKPaQiBrn)i^M>w_Wa+Y4S`)2+-jp^qH?!p)(0 zI at fjNJUYK4NBMMbaDHmS`;lGSi?H2U!~04aG&BD=;7EjmmBu3_b_(fV7^MEHpUo0< zg*goC!yu3HyO~*L*I_U07Giuqn$8U`6F)EyiVZFWO2mKBbs+I(p1IRWUW``?xtAo~ zVJ`Z5^pj`m*`xEwzmUj(ZtAr0I1i9J^zQ#}w>M)HBd*qeQY&4=|7eu?Uv%r7)HO}r z6^w9yEOOT`U&DVAUaZsnT3l6h+!EF|Jq2qF4RH$<_WTu!qNN3sHlQyPUMx0`kfZC7 ztLq`J`^p=)P&_s+XYi6ML^9($Zln3Q{kW>G(q_{^U-y2x;gRP%-O+hG?*Dmg;{e7T z#AUMwSUJBz^kEC20)NsVP~6|Z?*(Yq(o8O)_D$RgghJfE!rf02QD+-{D3gr6B?JN9 z8bqU>(Ly1QlrZKe^JwT<{cG!o-aJ;-39sb>8wR{rs!Z4~>A73y|`7%DfJ1t(EjRX@;O;+XN=C>r at w z*C^>ZN;KmqRe&b=Q&s3oHQIDoBHLQWY+@*&;cfY7^-z>Y6Mw=X#lzj at aLc%Z*}Wur zLw{p^8-Jryg}UydI*v!_V)mg079Mevm>(}zq8oFb8J{mlAyi4%(l~mC91Z?H&O=}{ zW2l?pQ4LO!LeU%$=}DUrkrAdyZ70<@7h!^1dRdI7Fr at G<^Md7UTPIdDCSK at bAet3| zh6I#XxZhHv#fi=8X&nwi3*U-B7GFo@%h{b{;OyiKUTc%aP}|ZM|M~S>p~J*B$I|rEdM9 zX`7*I+CvDEyX)a?YNq;J(zB}jF%YHl*S$1@?G`+`u*aG>MFp9y at 4J&#sPjJVR4)C=pFppuOB3tF-j2&1mK3d zA*FGn^VmAJPZkUrC5hp<_TugMZ!jRdU3Wb9twf{)x)MM9U zoy2Cu%jNj5%~M9pH-$#ijzDIIc55wWJvKeAZc{DxP3CS}E!ItTdbYViC7cGlydlo5 zEP at xkQ2o0qj1QVEfD(uApCZh>VT+S-i?Kgw&vnzG4{(*+q7R6Eupk$7n}f{wv%JBD zQon33r`BGK-Z{-ZfB0TJR*}Pi8C3)?vnQ}#>XlP;1MNY~S{4Bx}i62QtTd zaDm(uLW1Od#hG!*XEcWvT*K6}<5~HSZtYd<1gRG(L&@C|0K2I!Qrxiz{)t#NC5Dt`iWYPUrQk$#|V73uazdy$d2)S-IDOHQ zRI2-;d>H}Jm{di2%{({?6-Z!*oiNE4B#WIVWU~pl#EV_nq!9WSRP62C!j`VLCmr z7$U?yLEr-6W;zn!ww=E9DAeV7%tm?4g+0#NKhGJp6fN*ZFxud6rN$E4eC^Tr>bp$% zQe(mVLm!auM(|p_f!(q_-2Q+Rr+p2IdLXRTcs`v{Hk*Fbyiwm<`GEY_I4EspnXLr= z|)THeI)_q)rrclXEaY at d&p543>&c8q|a36Wwa2|#j~ zJc>8Vh< zcH$e17jIkR&%hgx at 5akZ7n^r8ylI;DI^tsT_i~!79cs50jVT#e%6Y3P8rs69kYLek zZ`LF!x??DYD61)dyl5R`qH3fZiPe(=b6s4LI3acc6#89K zTaO3SlslERDd!V^bVB(v7xg-snDHhAn)6o8f$l2`e`|~nral(xq#ZhAwdfa}0FVJB zu%*h(;8iS#GSgkJjE9W5Ug6f3(;)x%5qP*HlGb#m4VSK)M$8z7A-!UFfl?Z6E)378 zZ<`p+erx3dUxpFobK1$Zl)M6TjZT#T?FqU#SfTQ1cW9WBQ!I%ar2ld?mw`upS! zaKOBN8Kw_*s|Kz`Xo_2;GpOX_Mq!IVn#N%bY>MoJb60ayZDUNqsDg;0y}h;@DoFz| z at 7pZNzQq$NBD$Qk;5)qdGXNw`jyTh;RUHdq1l!UOo#l*Q65g4m%)^1J-cU^18>H at M zUKvq7I$7t;CuU$8j4Y;#R~K;y$ulFzJcCtyv5~)L^dDK=Irgy^@{Jn0#LI+gp$kn4 z0vH>ju|1mwbsAbbY>n at BMI*E?8z(JMI(WVs-yKZi)e(|x`n_OpK_dgD zfDF-J?j#|Qcbk&P%T^v;-2$EBT~p~VQ2+XI?&l)Y0>Hj}8G`(e-T?lUsLN5aQ(90) z_Zwe#!`lk53qVm;o3*3HfY=G+#wVMWm&TTlB$C#IL+?tpCHSBb>Q`pLMa+BuKJ0SM z%Z8%xW9+Kq_>yOa=W+Yv?co7BK!zTQ#F#P!+LPKue7Fdu^Cq1^DV>TySSjLwUNsjA z#l)F0fIDf%)YNnm{#P{9vIdt1CWJhuYgu70o9&dE+emFk=4EDU!IgGq*P$9+Ws}9~ z;d-ggW<^)lv^U?@xL*$`@yT9&Pjj8Nn^?dvs at JNwc}c6@`c$&_k^sl$V8#Y)*zI`8 z={_r{));~ip>YO at uc{7AA~Q3QixBcuiD_e4P1BSQbL#p1C0- at AYML#L5||m_Ob)Q4 z6mVVZy`?&tJvEqHl~xXANomv=4BVaODb1B*w4P?-x>eYdkD9P&cFWBQ9*V-BJP3Es zrjheo1Wm(n!<(%fZ3bo$uvfPfiLRW1+FN(Rqr&Drh%^=}bWK?Hri}0L$;%CB_sVk> znrDXK{gkZ at zkDi)n6Wh4l!bkL`2|tAbUdB4{HTDB{WkMo$SL z_1=X{I%hf$SBE%qrCSj#JGyO7s`E1bfRF0v)T9btEB>{Ke2)qA8j~}MAJ-(93h|uH z0~(;Ehxu_V5@B0}3YxT05`w!s1b26Lg1fuBJHg!#?(Pmjg1c*Q_jAyo2PfFg%sVsR zyzjkpXMJn!-K)F*)v9`S)l<`*?9*$4N{>|u@T1cSf-Bqs^04+5+8BMccI{nh}qxU}-Sy;C{igq)!ey*{~@rTf7K`roxR{`|RP}zoe9;m at 2&!{-VO>FDiKc zZxiqTYoEFh^63oXBmr zw_jerF8|{OFh~aRbGf;7J2NSziEcy)Ua!Dj{yGg1t#C0(X2Nw!9L^1$n00(v*5{`# zZLhYjNhTwKqxdEp(e?u3s*O)4NC!~mu-Vym$wiRe<-m8plC9|x&$vjR!(X0fhU(?s z<-qm>UHsg_#^-0NcEC at GKW-5SBM=p%W)e?E6+ at 6XMg?DFF?y9P#(OUSVhu_~BPv6XfwymBCZLSTQ_MdSadX^{i zyyz7(%DRhge<{>qm7ns`6=r;HOa$hh22=Rpv{Xprf8G5$A=obQ$5~q`?s_7Lfh+<| zpLCYShTHnMpc~}@PVigQdGaWWlwHFW22B8=R_GIhiHqGXMA)=d)HhVmx6k`wb}e*c zChdxp?FHrX^pP}Q#s1oV7NMYoljS*iX%9PYQv$057r=eWDOIj}8P at S--b-5XD-r6V z^>LQz5oGD3)gF*k))WFKJVriIAOX}jv!(^>lsqrZ<_Y@@;XlZ|K>l)4LmYJRMjUs3 ziw-CC^)z#a;_}Z+kI_FHxl4Nm{>5J-e}wwKy5Iiad(}Cpp{rm9)SovY)ITBH>c;DS zDz8cF5rr;V;frD~j*}gs& z$Eszq&XF+_%pfzdFT=A;376FgG-y$fV^%-c-EKKcH&{ZEv-EFJWjsq8D$Z-T_$|ON zI7dDhzf_&X*4l(96ubzYo^*8->~-5oT-z~EO!)WCzKGDXok^1xzzGMsusSroL7A+5 zAvWEqAtDezr` zOwrE9F;o;PlxcD`=B$U_{CX`$Ut#p$EHffasw{GN&9*L{)Zykihh)MpvH9O)bXzry zOkwqtw^_vS;2ZjyDs7ZDHri&smrUY?0*A2>=lv_^#U at BeA+y{ZbVCK*{U~_ at AUi7vEis&`#O=e6#4YwBV1zaN+&}X-^J{9!*dO3< zoSRS(ODTQ6;TjMsJR{H_3&V9xa*t(?ehr1?eUBX;soM at s93&wP40UHfZ-EJuv1R0* z-fQKlnEE%dzDO;c_obyxvQzWPESW_dph4W{C z`Jb`V_$ou2^q13E!a_jM{_oiNZP>Fb<7`x6C at mnr7YA zOf+?*$+R*w9wx^Vo?J^RygazSh!K at w&PK<+)o7 at Hv+PPQ(GYAq)vLd1Z+)n>e2z3M zsc(F)4paHG7|*yp7i$4$CdSoVHuI8pasIv at yTt^RU9IjJA1P%rTX_HLl&~Xx*LDs4K^VJ_OTF<7Q_7IW;9Ja~&YY9*0lyu&OLN=Opg^zMWX6Rk&|vT`sPcQcg!PA3q%C5ZPE-^_c&Qw& zk12Nz(s9<6H&eWD9v-GBxaU{aODT$8l*DD)Pg}-u$A+of^37@#{?!jw-!3Xl8prQ- zQp-E8?P{zM+k47%*iSS1>L$fB`;(~q>I^1Y;StOl`h!+%vUCqW8cd-qsEis1l!8Uk zaWtmcvdofA*=7$|1Io3|?0=%GUNwY5tJV3`Z}W!@4ybiaYSgTn7W(khJa&F z%t%|Z!aUHcrFOR`fQ>aeaTmpa&(iJ?9_(jJQ zGUKT6 at CKRZ8P0+~j7W|A_}QYb7w9Dn$zS!qoIv|2s$XR8BW$65*QG1A0Y9P_lYC`1 zDDaOyiGA$1VC$u6GSA78-oti;$=X6>Q`tB;#hfG&3|L|kmffQs&=bNXIb$?)|N4IB z z_7BXM82x#lARv_J0)1 z_7BB+ByawkVj}{nb0AfIrHU7o&AEQk{{cmTi5W%*g=)j?P$u&Ig254J4JO-+^=5Pw z0fxZr6;=Oo3{j_DTKInMWcB{c`0_jp!U!U&#Yr4-CBC}xHWGoR=k*&mNh`7qOBXnS zb1<)D+89GTrx&lnqBHAg5+s%&3k4e^u8UWd3Ytng*+1asYI at V+(&eiIechLF{^UMF zl6f%S$)u<7Tu{$7ire6x7OrW^o at n;Rqe-N9CoR+qpW18{d}`|x_y5_uX`XpH84ToF zD0SY8e?syir-yuu%Q1;GA_1uMFZW;QGAWB>0uqrkGk*G`Mr_1XG{}y!@2K} zyLI7-G zLn0Dj_aPgaS?7?s7L9ho?H{60w at oBT1JIM<7Dn(N!BT1B%-YbEA$HYou at RvIDMEWr0Sr8Yr? zU5x)p9GohmEkc(EI<&=dYlmJF;w&hYb+KSt!mClaI&UKJR6+C0yUAVkj%nJJj!ShX z!g})xY-6dzkRIrT18mLpm^|$DT;DtvS~s_VY-+ZyFO1tsM at GY^7tvGJpygG`+M%V$ zH~Zb>AZF3o?zM`RLWTcJ0hS1Sgp1(-EET1Iy0VDMz}E=OtzpK9s=n=lO~VpHFZ}|i z`c+B2DJ+3B>=p7CTciBO5=!=gECH<}h#f+3^VEMi#U0?t;-Ca zjSQ5VyFx6M?>lJ8Q52+lWy0aGzpAQH;DuG-A{N5B5~Fl z!Q++YASNRkC4OIox~YMr*#4qI66=c*azZMt?~BsW^tX?a`}VZ|m6=Gcs* z!xwkxn&h7?yqiLZBlquW{O?QnKU(-dtXWcV3O+;`Rj{Po5{|LhX-*+yg)y`cRu}fd ziL7`_YR-;iwHW23q?i at niZ$}q_^5j)fjS5Y2+<7TCZ^rkW4(y;guOrGrvJXR*zvu_4YJXfTwwY`-d={G+-<<5}r!X_t~=RPNZ$ z;9!Lsl at Jm1{RWTtD^Kvp2t*Ojf?{jv$-k8NK7d18DfqiI#({t!`TxW1f7FA~hV#Ze z#0#KapRwnH6#E*68VrlZof8)H)fings&Ifp86$L{)pHHe#DtyTQKYnWL(_J-x^B63 z!?vzYQZE4_d8nmuLG0(xM-vnWJ7(WqFZ$ly>2u2_Jaqs3BcF%9-m8yGP=Ub9B*r%g z28|f_q=c>*XKtZlU`bQQH?BwMjz5_(FCkAnms(&rtO7)`D45Srsnaiz-pWUjAvD7k zP|xhH7yDm{2TIrkutoZ|1Pg(M(~;@|#KX`6Um1{VaAAS&zU(wZ%BVx$Vw&WlslaB} zLpM6WmqyHQvDXy&bc2gLR71zHg+PSCn|4HM^Oq5be7HTGj{CB&y$qcK6+n8r-fEzo zD8tZd_#O8v^|KezeR}LJ=EiRFtrN^Ok+6~r;{aVR!7#o6vwR=UFw|2oqOdYpJc~pb z91>!q;KH7 at Fr)4^DScAqEf&0DpDk5PTTY!Kr8=OlcE!mD#1nu at W8}Zz{%*jB6~8PA zw4}(B#|5OOFoEm zl;3fvKih?!CgQYoj#+owsxSDZ`pTtHR|;`b5^(XMbr$>Yko79f`IJiw{QYjE?ld<#wkur6j2HC;;+HWx`mn<@Zq0vq2t#N=V9`bdC|3wVPN40 z0E}4Z={rGEO at nb2bj3aXtm5cpWJ9fFwhIWG_fbXr8QwZkud>j|FPs4-z&8AV$X&Z9 z$am>Yrj={zd6VC3wJXA#bC<@qHstFP8}niNL}EDaoUBqy)2<_q-(|5 at BRV!EzuM9< z6=x(Vj?>E3W-#B;dbn_(om_EH6XO&IOb&-XQph!fKg#7B(jFANiCxip#b=VNi16C~ zu0Y%W!eK93A>H!8rbh;~uO_8$afzWoQ;qLPPDELVX)BA`#$M{S7|DB>MTy6*^h9i2 zeh>SbtfA%3_E|DZy?3oW+kv0joyL%(gDWeQnzZXILZW-M>zM_FaMvp|WWHaUSK1dZ zgX8n54ET_g_)t5Y&zT1pzmij1)gbQdmAY_?=|9TMHywT0$a8V$rcT`~VPjdK!B!V+ zlDlH%vhwwlshqskDZEME4iEX>B-q1fs at JhFR7#wXdRp at 7>$4+NxKY9gm&2p&AEZmN ztG!rQ&D~V`8{0^=QGo`Vd~kdO+xc9I!)Si$GH&Z6|J+8L zN8pNFIBT+JcCP#P3Q;9&tB&~gJIt at WN?WOXo)kbWnHD`#Y-1BoZDtgOYch|lPFi9N z;6e!_{LOgNwgCCT;qqtDWDBtz5HSGOagW;=Vno%oXwUTWW^T~G#%_015W(5=1Nu^D zuK5MIHl=Cgp07$P_gFe(da$eAiv8d_op9c66gS$9rAQVW$pQIYcBt~;(D)SS(JDah z9&Q+UaCP}li~sp7NXt{t8y3ppCv_nm=hz=BkvbxgJx2yYQIl2J5Q9(}x)o>^%4s98 zIx-}W1L`6G at U^eTGjUf{tmZrJ$n%=2o4s(zeQ&mzMQ_RSTZ<^|@5E9@#*IaF##cV-*kwjCLbV_^9E`AE1of|Ev~R1_Ds-C=C` zIp-#il4ve={2cQ3mQAihEwbrM((&gyDTIBzUv$R^kt}9GR|~&avdL?1wVq`C+^)u& zve9?f?*qQQvGr9N0 at s3mqnNB9rXm}A2Ko=&3t4`_s7dk}tK>p$l?23 at f$1Kknf^TCSqQ5%FmE{NbzfJt`eCC=ODmV$Jp2 zcuh_dZl+AiOhu}diei#)x}YAG_gSBZzSpEg25SKIsG)@<9}&HiHkS zodi>Ow)D76WNw)P85n($R_F{hO$!Z8wG&#fE)RRQz^E2qA{(Ov!A2==i)`UQSS!mf z>3-|eMhKs*5Y3W8z8hsZ;abtQBcwIK(}rkWG2fz;$PT>nUrL!|^~Kws3qSi^xL{gI zuWbBTe$ZP%kH;>F0tuB5cd3LB;Hq4i;BSqy^hS>ySYjvX;R4$hez&PSplIVWRT!LA zedtw%7PMAbcI%tzbn at 5OaqmR5sWqQ=({>)Y`7_qLxo?YIn&u=s-$M-6agG%&YZqTd zHe4swI*U%dJhy6lac zeG+^9$4AOJrpi-0?~*HHY>;yVd^ULP^C??X`zX=nMq*)< z6cbinq<+-aOmj!M0r>PSLH2g}v(m{O3o*n=cAw<4ofI?deV80QkE6&(lf7A|7 at +;VVuI+ zGim6!d|n*f2ad2ex}qKvkHYg3h`jZx7%BW*!Yig3k_Vy5vG7YC^C4n&ZpV6uDs;P0 z{c4Wl9?!x7lT!qw4j0@|{JMgyAg(LT|D3}X!f9YKku91l{QL4V!c%wbIA&y&frR5B z9?2%4bcz>2aqd^|Pk7>AMRy^wsx0)sUR=7wi$>sajXm#OQdxFZ*Bj^Eanwmbg2EX) za`g+`{Aac6^1V}VD0|3Tr^<%5`z$EA_`a}{uuOZlZ=_Gi+NN=%UYy6e8}phsp-+jN zftmBef zVsU(t)z!l(ZH=glhYICu1JYwNL7PE^f$o5b(BQK|ROwUUofOcn&APwAGGJ<~A%1_qg;Ft&qz-?i3`hGZG zA at A%E9Py}s=Cx^ZhF9b0w!qd9&gK2S5Xt4^{wEURgWE{$KP&~p=))!63{hiX2~;H@ zEph(QqSe!$4oN;}=2ob?e}ftN8lCtCXaP+c)9?j#|9Kgr7}spyPN4g8h at e&ot3Stk zN at -~Ge375QR}11x6r4ud{X?xeZWC#L#)$&buLcN_3y@(a{ThrY^hpi`YiJ7 zfLaX^7V5IG(zq>pq7FMZ79Xq{SY2d--_gd??m;=hu~bEzR8qJU;D94?Pb79akeP z9<)>rcU~Jwbx0B;nkc~Ms(<-9V?UM+PyeUI1=WY3QhLAhllB>vaP+;&c#AK!OyG`L z0Ox)KH64N?u74S=_E1YYHRh#fgnSBpSKPQEJ`J_bcDrNkH z#o+R}F&p(+vW#_=%up(=?&qu;)!$J at GRYWJb~b!jch(WMIs0e!`mBd71~`t7of1e%I6Lkm~kU8h&}|k42I63;Tpd0>VHm0G39b&55~a z%jyq{YIdbXiXy^R)^TUMAz0cNIHhjOA`_KC#7Kj~3FgU6QBVr at -9FJzH7xX~4#1YF z2WhcqU!;29{?4q9uOXvAjD8CF)bOna$0+6r-pCgmALYb)F+z*Ro{0q}>cvs%w?T8u ztat&%@YTi>kp0?gL7K+HYRnP+1>b)1xvKC|jW@(&b2iXDEsA{l26e2eb7xIgX%u7) z2Ew2T1F6v*o^*zppZ>bsmPK&`b7M{s*(+dZBeCp=m3EiB^yR$d3*{HM3Hi#Q8wuC2 zYMx~4!W|Izjd(LR7gbYb?tedeB at 2-q-?XaCq at M=c)+ z{L*Q2r at g?}-Vw{2&8v=q{Dbj3zDCVHUH>+b!z)qn=;vxB(@@Hr_VcRp4hW}Dy;u9f z7VB570`806l<{b$^Fg at Ti4+rj1UUYhgdvqt9VwA-7MlKd;ZD9RI$c6dCwq3ekfT=v$CU=bLlUilP zh-EOJU13FZtpQs&zN&rpSeXVxuF&&r!TenMXQrGG>J|&W&hZ1bC+qI4rd=hCq(Q|d z;)*Yx%5%OnQvSn{I)<|H**~x&tBz_a%L!Zv9I5j~WhaPM_+i~{y)yguS+3v>3q^&6dwl<7^D&_CF}%%>@-8Voawzhr zoey9E2GY_)q>>4{c?>y#Ww#s=bub5!_M*48VVXtfGk+XxG-uPO-#CT$1 z>+mhngkovx at U2w1Bg=Kdj(&Kg|1Mu=5@$L##rj3Y73sjfX4tQxcD=gt>VclG``Dp# z&ZBWok`s;V4Ck{R&S at UNu2Ms;szSCD!CK63JEA(UtZ7tPjPd?l$*z6d_s>obdc*PQ zHzEWCF+KzY+5gMw{nsJrzt{Wy57(Cg=cm5B9{FKqnam3(?u!24ABmbSvPSxaDl5m_ zn2mi}UMvKjid4i}+8Vv`=ZdZ!CeX5Z1vZ!wkP4Ownt~pwP$55wTE{|fix{;L0p!)AWusv5VB?HXx_9`d{?F&=cOf= z&DN0pN_$3!B1q_n6#tPOW!XE(Cv!A(`W_#JmD^fiT0kF!W*IwLGOZaumg#_>z|L(e zFkrvxo!lVm^|PW-XA1Wx*)HG!ecNo0o0($ZPuO<}^9Sj!A$X$lxdm|BAJ*1T1t*6OWR) zyZn^s(=z&P`pU*{T0jbfarDS3WI@zO;xt{SPa+dt(JbMF|Ql`mD}m2`dM0oM|B8NeO1y7tv<$k zU)tWobNYKjKEnQQTjrVYY-e$Xl#7BYpwvGrgSp&ADxf_02{{Q8b+Vr!Ch42tC9 z3p{w#Sss5`!i*T__aj!NM|oD4MK+s;fIC2oJoc#Cy(t^v)STngMS)I*{H!`b64aD! zFWDbUVZLAG+ at 0`gJokw zSbUcBD~vozeNu0T^ZsanmdYq3u+wuw%gqxH0SHVJlskoXofan^VlcL zTF~Hk#2fpZi>`Utl|&p96bT^mtV4?dt>KW^Bl_-rpnWT_BRWp2V0zrKSVh&n3Hm*dU~F% zsUEHF4oq^7_wMcvh7U#!6TL36X4?*odGU;bL;|@4>~qUab$MsKEW~x4#U(W*4XP$5 zqUEuQ6|2gHPI54LX?&X+Z^Ka=_Qe%!v!ai z- at r}Tn?12WX#`kn at j8)D{7uT_E<*uT)odw?lv70kzDm^AS^15tRCY;+RHHgzj5U-X zH_ss`5NJfIKkC9eW(c6?sXu6s0oelVcy0v^YM_GpkLK##}qust5+3E=0s zJZO&vIRbonE)UxiKmh<49^wPyv-en*SfEK?Y$h+>Z z2&?=%d)_4=1pqhy4$!;iuPkl+JNw=hAOnCG{|?Bz;jd7S{6c$Ag&=VN3cnEWsq(LM z3H(C)Po*F=fD*qD=&2Uu2AJjV-Fqqq$pM)8dx1~YAUi+lo`Q>q#ZiE#WN at 3{M0h3?DWRHXr^N z*_bJn)XgT5EK*UE5)vo*Gk3_O&$t at -l5{nmBv+Cr_s3M5vhUs|!iOVUnUva*tU=I5 zf{K~J3)J<*{HIVRSMAYErb z{%N>cHM+V|5>AA!Eg|3zd?6_u7{fW-b-`WW29jI`%Pe z(F#~Ome4V2Q3~8pre&t=@!V<7OY>igw^?9&U~D$Xqwo8|gKf9OfHo z&EhpRFx|GSU-N8q%64reZZu?9s#UU&%wld;JJ+)eUPCk8r!C_Gcwyk<-r zOGbLF(xZsTAN-ru&$Sy#GA&HUqTlA!qllOv$eZ=;Gu9Fm%GTgag<0u`6)|6`bZ9-3 z*JkCl&&?YPa_Ab>h67BhM-;JM%A%w4s2=D+(RoY{c539F5o=EJb!%CseViVqR?%<2 zBu0K=zx3!(dIHu+rfnPDM&7MWO#{(iNYt1;^VdGI+t&(4-e)O>f8o5u%ETCaefY49 zUvq3kP>`LDF)&{+4a9oMnTWbT>ssT8GBCyeki2Z8k>-YBkniLjE9TkGwPWSkCTzjY zb}ZMrxpr?Z5+{dqx912(22jpjjd*{4+f$&JdvRkUHD^s at nJW%cHdc|PX~~pf!ET0= z#CC%n!9ENV#lD3LWyD60&}N`Q{HZOAYpEiN>!>1wYtop^vQQkuGD#+e>!2czYo_uI z*RC;!`$AKvN zYq_YIkiTqrQUVY3p7Ni(ZP}mS3L(ZyP%8%a2r*5#V at _woMepE*Glgm*=PE9h|GW}P z6@(3)vO9#~D;3x at v&w21x9EnmR>PSsQ^l$I<2C?BzId=vRX4N9zVoj7!}x!&b;D>MDRN{ zDRM%=ey$%i-ObYm`Vz|dH<)H!nW;bBHf{+MroC5b?-wMbz0-xg$*4cCmTc at sM}0_p zzZ+D73nFwsIx0)3S$^-vYP{<;ZhWwqzT>D|1(JY8n9zds2!2gk-uyhYV9m7PZZ}O+J|% zu9&%xy}9{Br3fr(7-~4G7_3RpIzvvYjuTf-VmQKRxMj>Kk^GhMcbLVge7B?Qg!3nq zvxL7K%E|Y!$7?sIrmJ_y7ZPHrTJE;Lr22N5fpfEFuIA`qNO(yffM1`L0i#v9 at tM{QxQesGOx-!ByixugS6 at -6jRlj@6*-~ zBqAdd4~dzb+lFU+t9Bpjh!)?_!qdh(zC&{8Y+8-8d*FQKn#!#vqAgPpf5-B{);qF8 zVW?|*k)wO;eDPYS*=Pu6`V$ff8w{u4uzuW5eCzTHs*hu at HZ7QOMiHvNcz5wQfh2xUNs8 at O|}d&u=S3 zkKmAy0}&&w*(3F_h|9RoMwJ!Ri#R8jCs(s~^y4l-MY3XJDQ`I?BLyobr4NyBvm${r zt(Smcg&u!BJFa^RHiAFgD?I-Gf<5=}u6fqe(dF${Y-rXd5ye$upW85E8YMTIa(8iU zHTMpW92A4(@ZScgh`-LE!^3pYojir^bFQLWB zOIyU2o&2&9qG;FJMku{$Ofw)^bg&<4T_em8pDkt*i9!~MQt45h*HyNm8vmC_EmEW$ zRhtX+!%TS7TskX|tx(*?go&$UDYOoPzL>Fr!-O~F4fkqe%Z3ISM at oQHxX06+R>1D~zaKxbTW| zP~pceD$q=7&igHby%|U;1 at vvTWqL7UZ*|6>8NlTx9ztWg?hX4zLI8N{esYXpgc z({9O(Hol(=#Bp%J-!?Ij+h*NVi(t2Z-?dp4x at Mav7D!||Lg9RSL%YNRNal2WlVfugNLh^{c_oTq{FX&U%>sx6!EGdYVed`6KA%Q;;i>DWZpGRz4DtPd$7^t z=JOW}w62(xCO@%#3Slv3W*^!~H?o#oaYg}^UW9eY)Es|rj^R_H?a({dYE;hnuwv at P zY=y<>W!vxYpI%g3U2_P>-)S9BoTj)0^u5WD44Ei7MzYQlUeeN=7sm>#n|`+swrE+Sf|{Zm(&JOSsyw|sS=Uc_gI(4lx_YAA-}wc&Tmkel z5w8F)PEXge_d5geGwO?rYAWoE!$aoBcpPZdB}rgs`)Li_vwSA%X9S5LL;VFz%a%@p zckJb$O6Y0;oZVebF~oq&rrBVr)60u>`-H0G{8Y!2^H#UQ&-k1|_FpTkob86d2Cp%H zN;ZfLKXJsrnqL_kS(R7CI(_SHDVU-LSCQ=$7An2z8&np)dMh5NmHoyM;#4#^P~)Xr ztq7=MdZ;#fUZVWH3V(f))6Y2evPajx0mIK*zrQxpm}7?WmlfIZ)`QyfLC^pK-UpYh zVHfr>M#47N^W*=W4k0 at WOoDO8K!i%p0ux}&u|>jJXMrg&;n*!9vvc=27=3Jt5Qg_J ztw;lL0#!5II1cki^Yz5KKE}MOfhGHvpy_(;_r- z^Aj%$5_f6m*&-xv*Byu=$H at +9GHdt>bqlbvNF`~s7(Xp7%jf+w6Xmd$e0o5s!~N=? z5-<72y8A+IDg8DHxX-__18ruWUY(z9aLq|B9w^0e5D=dHu8(%NFUb%8hB>#{$}6tL zRdQ2cNk3$Gj+^R(Ds+nN={`k7_|ymKgS%_q&MjFIzC4n=A=96^g28P4!hE? zbb6hhgAXIqNpy&tUe|6grj!_kn_stX5T=+J`U|Q5K`BeH> z(KTP3^;4EXkq at Z#5V$@BAH(ww{6MzlC}ZA~k5 at 4(%MXB{@rlydD;KSjysw4p`r7s# zsCaGYvxIwQ5y!@d_frkyKNlD;ChIq>NjIt( zGHTLkma}fUx18WkkJy76fuOnA^&`*-b>XN0I2xG3f^s`T9ji3p$ADTuCxnDBM=fN~ zP3W&pV at N6liQp3UBoCG)43-3H0GGAHXoTeaxX7?$XVD5`N3_Wd$%RnloJ+myp8N=- zONMcxn1 at xg=?tlRVdWa-{TiRp8HVP8aw8f0)`aAS%sWA5&b3djU at RW&v1lujNjkzv z(8wDwo`;w^3T8Nz=M!}dKTv at OjXIh;wr!6hmw_1FC_cp{<_RCnqBu|mL<7?(j at STM z!90pXr$Do6yPgk zEY0WwhIfP7QCl!F7>NhLD%vZ?X?UGSPk_7^?s$(7JOixQ)6b>fq3ngS`yutJ4tC6q zyd7?fc{FBRiFu518hYk2dgTBM=?5VUzl^{*lQLnFUG1Yhlw=~D!hKRvpz zGGPnLy~4DA$%raod>7Y`ksFys`#@tFvH%{(eBhon8ommE3ydMTqEMngFf%}|;MZlKm*Fe^Yvyl&~cds~5G%y3SaaJ|#P{^`=$*P=c zKg+6|Yd_1$!nS_Nshn-U3N1ywnG`dMUTH573{Q=IgD6imr}UR}1P7mfDF}xD{MJ29 z5yzq|NyEkx8w7oX8iTZiDvP*;E`_fxf@@I-P_{K at Et>9E9khnL4`YQ+#~8)emcg~^ zSHgArDw1j3Pb$wbC!cBlRU*^g7|A3i7}lgZ7}q2__-EKDbaI$0q>Wg3utyjk^adO| zQZ2PQK2Nl=#h$s?&tT+12FSdyb!fIQUT7|iBm5JxC0w2~mf3zyvASTxK|ja}G;G`x zY6cD#=}LBIXp^L1cDPuiTuE)yJ^Mjb$Ya!WJe~|?r#%6&&|uO*SIA=wP2BdN9}E5A zVH(g(WKT%?^41*AaHPh2s$z5fo*`y?++kFZeUuyo?QwIadtPCQ!NRDT1WyLR{;C=bE@`IHY~SXu6{h&~=lH6F=< zDH0J72UCO^Q90sC6G9Yp=On`FFd}EoFOb|?T4JrIUF}*ZpEhW%@ySe`$YFvIw_<_C z(84$bKP=i7ma6K4Mdu=j)|Ogch zU`D^qcAS=}$880?Rpu;R zu7yyAGvJv$9O`Hm>leEd-Ed|bCU#b>xn4`IoFDjd3=H18?^F~Z;CgWPLpR83E#c}0Ti4-sO)jZxezr|w+rf&_SO5pJfk+)dFlW%p3knF(RJ z*t;#l2kxf`su>nek<${FZBOF2mWuk#bs34fcR-W`=$S!iXcS>oc3y0c@}U>blP^#` zNwik?>RwxcfjOnEHy2CM^LQi?Q-n2DI5XFgQou z!8*E49wFs>>{bF}tWYe0geQ4kpRcqo%XBr-z1&*WM{ zZbaDfU>)ljso0X%Ok- at f7S8UP!a>`?%WImo!dP+*cad&c=HD$Ut=d59&?}(EC4GjJ zgUcD*=hHRakj?jsK;30$w!CSgX63e_>wv&n!m?u~3Y&Gw{R3IP^v!AKgzW|3 at 5>@` z6`AH2%oJUvhDA+!(ZgpGV|X^fITxGVU?@V-Cr0{+D0|0`5y+Q&KBBA;^7HRh0G z3NO8x;aD46`&aX at Hnt9sL5=|~-69<;9f3h6T_Zh~fi|5ponwk`3VMn%9Z at cwa;#~h zX~Z?_5PnJ{-L6oL#`hYPVd=8F#{C)SUfxo$ye+t?==j}*6YW?~xaqAKTxPm{J_jfO zLk_7JUMLpm&2EiD^qiP<_M+Xzaa_ND9!`n4jZhgN at F#r?OUS?$K&J1my%*0|jI zZ1T8F1ogOvEb{pE_=X(vc=dSYNUKQPh|GAFh|LkaLkdHTLsJo2hzU(x#9? zQ7H2}f{KR%ewnY|TA$B4lllVbx>UjvfM!cKF0Mop at AR!EJyG3V&fBRlcNnGN3+YN= zrTrADci8)ppOhNoSN?ENUP*y!&};eEw5kah5lSHT1x4_} zuu-gT++NX}_R(`d#zz^5Ys4}JJ(Y^#dW$|IkSx&3&@pRH=Z87Ny;dD45|FR|p_M>f zrOvoQh_NME*ZT9#&xOdP2r`ZiUCU7Wn__f at Gj>!3hE~xguzYCgM3kag(>}+;uB6S- z?}z3vSCrGd#CoI?*3R!}_rzz-8;5pr>}V(K9w}cy<`?@ zpK#B3cDxbLJ#)S30zRF=RSglNd at 350(G5ODUae at ftGMFxt$kr)(I3=v}m zim#mF-TVOV6rBO8o(q6GRcG!w&r(CkASeT-0PQzlK!M{wxiP-(Nsbsoq}vr)u|ka7 zC3=9QXO$bXb`7p*V(ia!#{~u;)!?gphX>MC$g at nBR7=!9rdx#V3VzCOjhBlTKr!G> zNyok64V%wZh5CLysD(MxX#hPAYn2*a3f|$wdC{SOl|X~Dd_YA(qv>mT1(mV|S^lUb zThMl}rf6iWNAQRwbpE0wcK+nBplDmHV{r4FTxqS#cV(M`cx8+IZ~5!PWFdI?;jm4d zP_XWtacHLw{Ib at yEb`WkE-|y_W+Aio``r0M!_ at gp!`%5(!(a2ahGF}O at V|(L$9~IS zkc^nMFr)OtU#|M>HkvWc(_dq4_nNxDe3&2NldW0fjsjs9hit#A`uI*b6CU0dT5tZc zQ_zBWQV!)(j^$GM(V}eErfj8=zkMqH!yP6z6jE zU|`-*|Ep;KKPXmNRYvLmO(xYZRMAv$0^&nDo_POuFEAKA*PVj1l=lbqxg&3^(W)vFI zEnu^+GfV~%J^*2lF$*JabHQa&Dc!QZ)GWkBW`ugbK91Q;QYyqnV!$6!=Zn8PLz3^G zZ+FVZq#gU}=tEIz6?%$Ysa`70r+O);j;0m5v<}O;6ssIG#?oV_x{N8D3SW$(8LO&@ zDp#iN*Lz0c at xf2!DmJNMBM{n at t4m%&&wc*a++QKxiugh4>~$y(9-l!9v&up?j&0=Cr zG5w+Z!k)^^APm`(PNE{arJPgBU5qZSNe|fY*{_P+&}_DH{8f_Ie9GL^`{zpD#$w at 2 zV+&!$cB$)NDgTYQ8N26}hm^eFVN}CKH7J2mB#$9=3!zaYQ(rH$abY#*qP(H)0JY^u zM-kSWWswR)Dwe~gMt4$lc7N~Jo3 zE!^`FfEWF65}bU12q9yPYsc|m>5us4DUUOZqxka?qsrGg^Erc4kSO9>+oq~7+$~~W zCT0~^^y5t-Lg{2J{Fsm>h+C(IUu`rH?%3cHH)^P(OH3JP^y^a0n+m-Vo-u(#*ReGs zgueuzWP;>qkA(O(LMi7N!O8EOtno?8^nM(NWPM*c&7zj+G(2#8${%(z38 zB`Ng{ikN+9CtlaWVM!^H?9#O$8C*xX%^eu40zHA&G_6L|3-`%>g|@isUA2+aRN zjq(46nwE(T;Qwb-{V&%QO%I)3%tHxzsS+-RUW}@9L{eB48yHJ)k`m;pV7lrC`l-1=?$ii_dMuOMuIIUTMGCoV{G%OP(3G?aRZN9pauZ^kipH at l-_oLu{yA;)4P> z62S~J85E%48L?YPHBAE;<_uSo(E~YD8&o at jLD}xwjBzLDh@(e$GEKWv2DRlW&GR3W zSse-ms2dy at MeFO48sU-Di~S{g0~Zo5U4qI#94*&TX5RtVDL=#bjaE&(*3{+4|P6}6&Bpu z%%7BUE3ZD-h%GlwJ}8%@`aPt*dYFK4{CEh#Q#|G)pvjJ?Q8PlO6}dOVVOOu2ikPCZ z at z%-6g<<&`pH(hX+HOn9BaZ-+GbK6xmFr2JcEv#btlhpDaTuqWKF&F0cvtlzE-8L_ z@$4}-h8?WTxQ&^EouGkPV>&0C;M&n at RC(~d=3i(3rOD?mT3C)khAlT z?SzCr-tcP+2-)<3un=laiWss%k2^HKYdM%&3K*fGc5S5a*2fJwvH>#z2qco< zUbCnTN!JA-ZRc8nN$iEo7(%9RJ-bVKxMblIRLO+0xKV5{OIuFvUG?^DD%LMqUPdr4P4Ov)39F zY(7Gy at 9_cQ&Tt>IaI^5Oautj2VmPQ1ivA at jDwX{rf(NKMd4fS~ymy#D72dL_F5G^cZ(g`h4%a`o(5N5+ z-!{V^pMK?Vu7^T~Dpo_b4|!##F(+^H6?qd)iuabZYS74a-62Px|kEc7B7Xxi&dDQHAI zFr-9MgXzP)t+SMWk-15ofH4?UR6=4?8`Q3+q;+3U=go2%dP6>L3qH0Z1u*-p_Pk!W zJ#Jeq9~%Y!F#?0Wj;Hjxwg(gHkAH6kjwpe1N8;N%x=y&k&4JyN(C2DJuox-hn01$; zSbfNwWWTtD!X7bUP-gU~OEU)+IY+(Ng)aQ<@QTx!=;YaqRHRvrG^AOK)TG&rw73WS z#7G9-VuPpNszg)&Hgvdu8#>oXA?j?44;7QtmtxV}m(+fqqdbghw$DoEpcibRkJFJ2 zEbvGGZ_;=%Bjr36RB^SYZQ_fqMVVpgVjAhnc<7%)TL%``Hck3z27 at T&W8Ef0!sgj# zJgyAcl6jpCQD+7cgNR7`h+gv2bi}fsOY?a6JF;ae0fOf-xj at KrCNkFT*Ih8s?cGzHO&CW-fN@ zhRKw%{WQO_2`tGIW~^##(nC=T64MpCqVfLg-6Oh2C5>bFL;ZYB;2>p3iK;fe>xL)m zg1n?`it2kv=p`Z?71|FTxEdpxIrXgbdC?+eqiUDoFE%y=IE9GH6b;LZCHhtL=}xwV zTgqg27HUBR7)dTEky@$PQk;Bk=mRYe`de0+61~-oD at W1$6uFMG;^+IKBJ|f}o)i(D z*Ie)&Tw3%I5^n+#c-x4;aIfz at slgGzk8h^-!>fa9F%22UY-5ytM;KWP_Qk964KnpI zbutY+1C#^9mPrn2VIiL8{D z993f-doRVcw(x5*(la1Bc|9+u6trGTN?9;-`FuBAO#+li*7-N4X~BORMi at cZ58Dqz z4@(Mz{hyYr1fc{mDU4>IaSwMOCf^~QBb#LsH3m1j68u56Q;ml&B(e|=6Jh&US^BFKt42z_ zqLedFD;W#(_En-O`c!$Hs$R`J?a_vUm%d%^)m<47e_~h#kOt(PFtp2rOFTtymqYke zoH+b$IkOa?_6a}X11MjicB$Rxv`buJcFElvv};_Ucj?`4wJS)8BS#P|>JnoJko&|V zfy914MSTQ0u8c at rp%cy#`e@$=%s~T6h*15N?@6|bm?8w}|3o02 at ytm{>=bl71fQ7w zzFHC>*+dy}aX~oSM(IW!iQv9m at F#%>a_6_ah3m&63EX(c|M->j#B1GjCkVYh{Yu!l z;eGgPVcO0$6!zeZB%vXG_TX2ZFt#Ip{#qZB=xm>&X!H+*5KZU~SO+91nDsssk^^I= z{H;Dg(eNMdA&St at um(s-=>14>XzhdqWcS?MiYM;Oq9<<7{U0dH&~_^wVF5gIRRG3U zkPgmoH}4q6S8nioa*hJ&5)WL4Rv7_9G5mJ}8$Wrf&%pZwzaXSH;+$tVgH&vj3iz#M zgOj?rUn@}sGnsu at 6%he;xEqznwOc+Ae3hP{Wv=v&SBzXN!8?Y3=LOh+X#U>6{YwHg z7#Q7u!3&E23<>|$!8mB)YoG)$daqH~i)pK(gsk6Y7Op3osjx(Z2+OTgWX925oICw)rJ*r+)O_}t$&^z_esz?@AUs;W(fpND6>PENA9SzUI$9t-t+d at +VB zGVwBjtPPI|)5EL(qTeSN{dztIYQ_8Jz&3i8Zsz~XEZ1FRB>0$5nAz)>+1wrWq4~A) z2pR;4=2Y8~d2pAF5EZHhhkyRMEsW_aI7r^rm(MeO5(6@|3cUrFiEC4H!)2rDnajPz zf73d5I6f;yw#*%)WVfKeQuJG)wO*UOD_=_E9XQ!|@|dN^S4qtJ`nC5e^V8hk)_MZ- z^Y@&^y&U~VW24<$Z~uw)sdewyO`?yP+=*kuEUIL0rk4cOlAp_M15c}Ep0wbk49uNr z(*#&Qm%m(yZDO`2s}f>z4?{n=d at D)}>ef0%pT#O1!iwO>^CAk+>83!57KgU-R*NND zzbn;nqsy4KDVv|n{F=JR at n$H8mAQeM4q$?zmq6V643 zok~1nnho`e%TK%JPpr8k`xyYbQ+>k|)V!%kj;~rC9i8|v$Ofv z<^6hhCdpZApvaTu3cKhV-S;2kYpojPT9ST~|M(bzKX*pns9EK`G}fy799|Qud&TdR zPNF8^o+hR7KYsEOw+fMw75AB#~}Zz9RrZXVLZI zS|L{Gg-BK>!9%439Q7BZ-=P7}<%^#!fFrTfgZWmvhpxac|9%hzj)FgIeFX!XgZ-~| ztR&4G0sqgfH8w?0P4AzSwD3)j{x6(C^U?RFMGm5Rs_XOc`RpXvg$fV at L9^PJVtCff z%DT2G1}B(oSd=q*JaDqf;$EJk_FnI!uwKZcEO6`$C)gO) z9jpk}9n`<2BAs*OOKvasoqy28B=T3&Nn}XiBp*2XWCu9xkrcSh(Fi!r5f!-2kwB2l zQHh}6(ZDejKWI&z-)7g^vPm}{!){5kLD_+mw1qD8$hE2)OQ$+bRxUOx5m2{YDURs1 z0N@DQC4Qw`VfMP~K!sk;eF&_j$ko_jqlo*+W(DSM6NY(}mt zWV&b->oZuatfb05wDqfok_u`#_^kC>Q#a_YQj61up2`l|E>A3_SbLQ`{K(L)Qy#-S zwP38U>!=8ALTh=iVXQK()MwxtK|J5KTrDeej%(*~O0mfZsOVH>U|%`YXDQUx&u4b% zqCPVy&X%oe|Lt#E=!Rl86h#ySzGzi!k*@CU?_h5whac}aw!v?tE7n_HwGv$f$iT)| zei7r3h|~#KOpRo^E(!|DK`;mMcC+5Vb#va37O(m)4dP~Vu=F1hWZl^_*0zmWCMzUQ z;bh6#53lK4qMM;xvGq~*QI1g#QBGN+Ss?-hJD8yUG#fE*y^=bxF*I>uIIc~Cik4Ip zTg(a{$k9_o3sAQnB?Z_B9?mu{p+em1O#X}_EKKmk3el3vI)P}A4}KOqG}l`LJy&?rhUL_!F_P` zH{qJnoVcw)C|>7y)@}*x?jIovD6F(|?0l{>a**rRZpHN==>lpl*6~Ze+ggp>H?zFX(8|aB|?)L!8H9)v?jrmF#Ri>vUE{9NCar%Sk=EC`2bKj>pL2C{c0I zWwg>L)|O)tltH2aA1WT&&o^U$$7zYz|BBZiQd2S9DiU{3^%-=t5(LN(N`0d> zz~PdFM?yyYK(xX1lOc?p?hE|z|HjLTQdMD%F4tQ2`)Tg8uFDU)3XjEqUGM87YO=Nd zot(K0V6;Y#on)@iQ5xeXwS7981UavL*o_3REa4-Uy_=}3vwZo7h1R>kA04d+B2kZ} z6B1LcDWc+Y|A>_xuD}>aSY$pCh7oB+)rl1lQ6*^v9D|d5l`(D$xzP*UzXLPM9+hh7 zFEEGyyEf(@V__Nfe?jxi15X3vgA!pqo$1Or%?0+AH zN7;k%9B|m%tRjDlk)nsQuXEpoL&3@*IMFty2WgwXiH at M{oBflCPDmG{1gK;cT&f#> zE{cQM*W#rguHhiCeU=RBNszHx7#awvGG=f)Z8lvh-nis;EFpZY-UGyCRW+=-RA^Q- z#+&- at v_x*OMqzJ~kE~6MBCYROznzhF2#UubMPP_UC9!eyi%R-6}=5;zS*krzkoBoSkg9Y{OfQ&|h?%Ww%@%NS-j!j;Vh4~YGE zayEkMp^^gb?^+2NMt1X{TqMo$3QDyTSB1=dn!UYxmLC4PWPzyJ4UGK$YrmW_on)1x zMyeLJkJ8_;Prk31U8DAw at rwHb)k)(orwlzinA>WfkHmp z2yY^AO7YviIv0Jl6Wc_T=k+zv3ygLGUoYyn2O14HWiUy?|gPD z;k2gkib-ORVZH$JBJLwOtoqNVN&6z8A2%+{oZR-5aNs7Ty at Me`TK;Erl3g;)W)}h& zm_N?{Mw|XOdJ%FpfUAw8mAZ+ky~Y0?3`JV7=>!s(0USx at cAog6w8E`6FjC+lhuxe6 z4QyRmByRL<4O#S_SMpbmRBT&Gm$_T?Tp_P;D3{JgB%36{t;i}W%E~IJD*w8!yG}FK zb$YJ`W}JGQK6=i&d>*QOwq9>Xlmy|yd>gRWcZs~ZAq}mAn3_bs8rp|a`(+Ght?yM_ zqY3!M4y?c$9bLoiadG=4U27oKpaw(_w7~WZ?78<}xjqx^J at IskJVPKkp?xF_=!FOY zug&`NoV~KHO9%oapWTqIP(FeOm|z2k_6+)s+ at 2BloOn8=p81e^sNNvLpI|>n_mn~c zkFLM$8F9a*Tssj6lE3kV2cmo=4M>H20Ottp1^xi!P at RcB9;WKXO)hIF_!L+|lVKa!vC+B5Zc at oa=U8%;lwZRRyV zz#t!-f9wCj!xvJU)bJ7#?&^WFx0g*Qg0o*4%{;9WJiA+&RU6&_86qCVF%XBl$R91@ zS`P at Yjof#~a4|FH4cbv*$m&Zt)8Gx`pTN79BMdv{akOeJv*#TkeCch-*_$4iy=;7G zHiHgliI~pVm@$^!WY7V0Uub9OTFl`HThx+Z?`;cA;2qLM_J85J9R*O5%|+>0)V`Sa3|GW5zzcO9e#)Zf z8PTtxFQt0g8P1(HgOWMhY?Rgu`hHxawDY=@?k&>VxVn}wxw2kb$#G~}VnQ|4Yrqj_ ziFj at bkAz1Ne$^}s<-v2)(J-5kc9 at 8%cx?hk2!>3bRF|aL&(K0ub5*m%V-#~?l;`R- z`WcyZv*!W8C+=)D*vnq`1B^8QlcqXmUm_*u%a((YTCl#Il%DwDRV11>gmBnmGk`FL z+02p6#8TNgW&5YhwwYDO6}4{Gm?tfToy=}SZM7Ndgtjh zC5{d;K=Mo$i%&Ft6ccqe8)f9yR92I!V at YGY3d5TeQ)&I90(Lr6sVsSn4`;Brl`qz> z2yNmy`Fay9(AGeCZ~aX-|3Jg7ubgPhFZ5{V%x%*FRl4p1wBx&8 at 4~TFrPyd at Hq}>a zjh!y at d7VB;RgOOal2i4uL5uLe>)dSoH^5U1O?mg*^_mDW+>Base4wq*`E}xEROVM- z$k!P`=^B;dm`wPViyqM;8MNj4UBZ9VYg3_3LmHH;yi=WPv%gEG) zfg5O&vAeTGHkr5CBW77_wb0A2QPdOg&_DC9(8PyZv1j+N^LOm=Q{cWE;$khirJ2%e zbVQ{x6;Kd{XC1Ds-qXtPK6YFpfhbx`*S)3~)5-<~D^h+~j?^T)YJBePX|rVuohVQB zbvUKjfZ5n%iq%vnPp#`8vW#<6x^UaqRhXMlVocVD-^40uw(D97#XDF-s;9PBHy%&k z9kvfwlTI6CK^N9_S8aXidLS!OgBDq9&ki#3^#eB|6WMg;K& z7~2gp9d)aDth>0;iqDaLPCH7=c{P<=qf=GCu348U!+*fTa*@Nz*|4hy5N33$&O_u`_lH(*K at NR0cVl6=%uuZ~Xp zup%Pn7Z2c&Pj});FU;??1tea^F9tJnJ&mK5R##f(3#I;W`#?cZa;#20WNuYLDvn%+ zIfomLd(tp_ns^#4bPlIx!}B$+f2ilMP4REv{qVAwl^BS{z4^sXa-3wQndvkn<_g2$ z{BHdF*VzGL|C_g$Ak7&W^~&nN{D`<2#zgk6HB4>SvJ#QPNpARvpz6*p_Jain7xPVu zN+bOXl&?BcyPxrIxr|Fc?h{G*67dJ`^PZu at J^Z*~Rz)N>oVnGoVY=jPqX4%^;xvJI z1GlKt;|5rs0=NO3yA|xU;r5jr zFRZe~xuj#7C*nndZr1&}f(iwHwo5E(V`YT6<4B$XT?FNCY^O!~J2iDyhdMUdt;zQGbx z4`aCE at vu#O(hPWSpCdCMx%3l459B-{_VgK#(+o`?$R|MFY{w7t)l=B z*q*ys`Q=fJ(G)+%?(fVQGzYWwiIekcmM#&m01986#)LnnWQueKb>dvO5lqs>Xymdu zb>g-r)@%-ik%K at NGNnSk{GO`LRoun!zQSabW{k&3m#3LWG=qNG*sk4%G!9uFV zh->oZMqBt?w{2-BU&v9ktFE;o&@ZFQSz7aCfTk>bT_uUCoXJwhP0k_2=b}5+mzjxQ zMClVp4`T|Xe@;IgBuU}l&wROLFo%cex($)n6twhZfn5+o{j;&Mku^1j$*N_oYr|IG z1%MM=py}FDV4aF^S5hsyOUmfx&uvWf>&>bA&}OCZ=YWemC&fjc??!+UVVIRw!pS5- z9B#;vuY{k%g=LkFcgMvnt%$!}4TdBY5%@ylz;O%z=M>r+3MxI$0?HK%)Pfgkj;FR& zqS)&WU=>M`HlelVL6=*oR_9z04M93tL&WA`wLndpey>W-v4JAe at bnrt|4O+o{jzS0k~^& zJqqVsW35*$c4eq97}!n;yBNyVNC^x-n2PwD6N=U{$(gWugqr6Dn0=1AH%?&5*but0 zz=v%Y?EmmtOJgXzDrigmQ)(VhV_abgL@}Yr48>!>V=8gnG>%f|Vs=FlQ at BPQONiVE&ec4V z)@k2-acKmOM3`X;DH7B?!ve*J6j(~VRFW}T1`~h-rs6Jo^eTR3)O3cZalq?uPD)8kV)O}2Vr(j!fO>9;8?_;us657LHf+EY&r zU07vt=EV=h>0LYb;0_mnIj%3+<$pxWo-quEU)^vf at kM4dCGH&3zp=xdtnRV9dUtHsW3LnO2BsUs#+KCQkv1UKmDui~56m79+Q{9&tM6?SzY z@%>nz|M7Dt)eyz49|{aC3K0y9?Z4Pk{b%>b%*p;glpuO~BbdWG(IM9$f&g_v{P+8E&rnhaYrkWNosX}s(C at b zr8 at A<%XPb)HBCbfMZR*{W^+5*%<#1u6#9G^-T*_|Bi3-<*Aw)^-?;(WFm<1aVeFW_ z2tK_D at 5vC~gxd!cqF8-slk~ks_7mI{_w)ac3`9sx+xSDDWb7 at pU+0JkbDAZv$T|1L zE);%phg#pfyRdfDPiGJ9t_6y#- at _aszHcUXNs;v!J%$Pr at YSrM%zb$PP~D z$RL#C=nPIPy+>=5Wk*@ts=F+~>O&;I*H3Pb_Rb;HZqgGYYSI^u;)ob?d{W5UWhYul zuQW=5aasac7x^nR at mjZ=`zPap+ at X56K3-dR>V{Gn)jLY91$ zm77wmu5vPA92A5JykQ1)<8Gs9Vq^#;af_wtp0fFRaJalZ;}JPz3HV$qI{Z+9A{ibs z&lq}N#`h$CBI&QiVz5c*2oz}3vtH!8{C}Rsne%A)`fi*@Z9*VmOFU^o$&YG$DAA!* zXhGMFY-{!aMwY$g*Q3v$`YcEhKe8k7jMdnT3c)kWOS+~2YM9!G<3h){pPX_ zJcr0#@sYPY#UwE at 0zEeb*AL&5FHq#79LTvFH@=UfX36vfL6DKDOj(<27-E6GQd^?f~nNP`v(704-M at t)+K>+F*`S zl~wCiAlz)bqWRt0tqgqC#v*cP*bz;aACDY-O_Y_^UD>TGuy_aHY&lP(cjTqX=7>sq_@(U zuFJM+>vc`ENIXQ7i?WEMn5v)rX`*AIW6?JG(?Z9rt^cQ)j at 4KLhIVzmz8Ot@vi5j- zlk)5CrJnU#02gSt2xKuY$cc#L;B7Hi)Fhwz^yg&xiXvSuMYdogpcgs0pfmNNyCMIj zP7FXL1v(k7^{mYC#QZjlh#uw^b{A%afQ^t8W`#I|o6FT{>^0{+cm303+zoF-Slz#A{^ zRiD2coV~&`ec29f*vuXesKiZVTrH+g!pwT`y1TmL8o{#%?&>1^XqCyWQ8~uyPcVJ5 zUZ*;CH+4Zzh|jGNCo-q#!Q}X!)~-J&AN2QK6w0z02z1|mQV?%*zEpVikrT7)0rw8@ znS_%4&E=X$%;`EKYIxSFJ-_uxR!?*7DRNS$oiUbQ_EJ@^Utk?$YpH=+bzR(ZWnFaj zyH?1mMf3}9qwLUDDg|WiqgORAmJ~g+o;|8!u26Q$DjM0k<@{P6L9{mlKu?hE1^NzM zK+EHq?TtV1)jjqxni!==>K|Q3e8f)0Ke`N&8!_E8-kSm76Ue7(NQgF|$8q)nh#WyY z7uzoKCUO%FNOHso)P6(Vs>~V`qWmazoSOp1M}B^HTyg-$M}PiuT&MyPV+)mUxJN&u z1BD9t03FXsK%q)L_wZ+yn=e~Md_#F?#EV<)a&N8Auv-NkLrPJBqF3|N6Pakl^Ih#y zZ#FjzJ}sA+#8^TFulGbZs9T>{68fC)#S~kdZ#U*evFl#*W?~~rhWLm#h4ph7O15xK zDAdc6zl@>t$0f0YrhSm}*Cmw%kzX_YHp$Er|UQ zLWv&^JH<&v*0{0-IjQs zJM{aqKZ5qvd{6Y1NzH>`7_B}|we{c1DxiIocGCUc-B0X!D)2wzRPgl-7ODPHq8h?~ z^~XTX#>&y;UkeYZYkL2PB6nDHp-7BZJ>>~Dz6@~;N1}5nW5;}W(H8$FT0zQFC z3c1I*m9?zX?sS>kg at C!lcH&}#d9^QP!!$?ku{d{DcnyrX+{4O33J0ozub?~i0GWP{L7V-!m5ArArFM6`a79%5YLEChD zQQLBRzI77tqm^(_5AF*UuN!NUx)-%aQ9Y-=c2%X;UCQa7>xDxGOe~)~)f**BsFBLC)uHE(g=jto6DTj0Ugi5mndJG2> zYj3)dXY0Uj*?^)^|2%5>GaNb%*(EbL!i`D%Sfn}J8x5wk6YE3@~%l8aUW at 0bG4Xj=-NGhB_BvA44w2B9&tLr?E`^ zWL=>)K`Ogk7{!EZrbRBrh-=s({RB_y9X+--W4*rVSOa}6hBlT?6ulh%1bv!_ at 8
      n~%`E(H0b4?X^;LBt zH$-TXmvd*dC(5_n`WT&Q-C+jwRGA5$iR2=)jOIygO9myqX}u%*8SUIAekeqj*?UT_xc(U?)5`Jx{nh7Y&mta#cXkwsGot+M00 zgGZDXrUTKgSc9wIN0d9}&)_z~fBe`#aQ)`ughZQKo2ntZNBORM;CB=v`TPo?eV3M)~{>o3#aeiU^!t z%<{SM9lByeEEahSxIxa4T%Zn6eoJ5}*6%Yj1cQhr9aQ4J1&rY z{C#E;Ezkw%zlDG}2>)_g9=ks!{YS_%&4Lrupi=kHX!v;Y-XL2MJMW6!zW18~Ne zB=~k~57%{xiX^thMa5suir^d`=(Yy;XeV|TREupm-$D$|NftX+<*c3S@@7v=6O8r6 zVH6mVP%;e&$QxU^#jV|4(r1r=Dxw|HBQS)FacH~-{30i=ERrW4E-|zFrrEP+K<@mR zAz0C#Xq#is#VX&Y;Rc)prJ^7tKc+1%RNiYT5LSj{#N|A1`%FIoVrhYD@%x$eAR^A6 z7yEu+Kw4Kkmfv^HH)O)`c*UhK#wO&gQy8B`3?B_B|MG}{rl74;ymvQuLgZ5X)q+do z8Xx4>rPqj3v@v0Go!xb5-+Mi(XmYsiSYt9KY-Zmt9lWa)bJuK>6B70NK0D$wBi3xC!ad{L!+c zigEG^U+89Y&V>b`rBoO}TUD&thCr1_T&(X#MzHX8sNU7$*AN97c#j(!o}`^I)WC1d zKQ&fp-Q-ca@^*VC9hsDQI9yNDibhbS1$o3&NW6nmdtLcmuyRrz_zQgVCVT^`R(aMd zIEdSP-EU7=O>B&I75M{Cx}DYBSA?W_E{czd3uor9th-g*&n#L%E|w{VcQoIh1mzT( zDt)?F4AIjGoa-H^N*{Dz+oXoV2(NlQH*zSgVkUBg`9;{6`Ij7{%DCPjnu-D{3KZXLNdTiEpQ1(CV(^a`$4NK(jkuAT ztZ#S|?FyhHkaVqm!?p-oFwSfwk&)B-XXNc4IRCjMl-BQi4>Z+Zzh$d%S2!!~b at oGs zM#n_BGQpHM!=}-!U^f!=V*+mkb8Cy+K#j|&!|t2Eaxm&BL_Z|jQ36d*2*H_N&IT3g zN!m(O-ryX|o;Q-Cy9V}We+H5~BdyDM3-|2G)mt(l7$t^0*=U;c4Do_vh at peoS>@_k4ASUn*IG?*e=17*Y{TiK90>hl13D4Ptmx zl(AFQ<~kyHF$l2wliT1ZAq84EipmFx)@B at XwY$6|3Z`?KO9 zIpR5A*O=C^Mv^ug^QKVkn!ZvgAns at fZ3^41?qMlZpC`qDI$>W;;(`Jq=;K88QPra~ zfq at a3g6`1I#T#IpG|(t17riFRt2gcDE)Y_ZZZPGt5jeh(Iea_hXR#?f0#zVI3SlE# zlRZ;&Lo&*Q-H`IYs&%f#(DV**FDP#4B=A6!95wML0}pfIUE zu?ROJMSSvc)lpK!PA+$LIJ9Y=yJD|daUXp!)VDa>I2)oBf))OJo_yR{1lut7fy~sS!lUG)MoV!wNjFWl za-I_0g+`8j`NrE03J;PI z^m^7CX8!_4SNW9KdxQ4uyHqJwN37m1?i;GR=U!VGRH>qN;fZI*9)W9l&NPt(BTJC( zsh9wi=hJqO=XL(oUdMxQtcgZJ4u3VkkRdtGtE_3XVw;Xx#%LBDpVZZIYuEGI|4z6~ zOhc`F;ZPpq!{~N2Y^;L%^uVNx!tifNcmc5%UQyr0tM at A;+R#nv06V%xU!#$x|tVqUXS_o zF`hnt9r=RYNgXe5>O6UfqcGON{At3wd5qIL4U}ldB2d>TkB2fXq1rX(Zq85sx11w& zu_BhJX)={_YP~X6(!810Hmy+>FJTf}wTu2%b1X2m+!aUQXY9 at rN0}y`PimuPTlUgU zq~8>7vaVb&*6`Fi^OoF!!gU}U@>Fekjpi7cdF+I{s^gmR28dp}71=L>ojBq%(DIV- z4+_c_gAWMziK11V8i ziK|e>Vql8vM*2mez6eI0YC`=&a6K6aVe=lQ?NG5xA)qK^&bY$3c>4TDyA!H_1nyR> z*At%Xy0Kn)jCM)=8aoYr-QRy34ak94&{;u(fgQsBM~mi)Ky!!xwP>!ZsVk28iQJhh z4GRR9`c_14k`pT15faR>By6{t7((dKNJlJMI0y{xEbMzL78>l|4{@vIQr{|*)iivj ze#QAfVS34z)24j at J2MV=^lN^}-)Od+GyMAe0}}}6dlEuG@&;lRTx={holn?$O^usn ze+M at fGESci8elP1FbV}J8Kr`xjAB7W!l|sxEOVX=EQ7CE1C*vBM$sTKqwGbrOk)Q4 z8Mb`*8CHKLmU*ouEfvwGUA``j-}7Jn3`V)ruU8lRt6pQ2sc z*e*I&YP!#stGl0z6!M?F at To2-vgnM_DOs)yP(#vz^?P3_ume~O6|3sPdq4&R4d5yoiV7S@Y|N)|-TVco?V7P7w$Xwwi@#y#(`m>n`KeBOl2;OT at Ak_|5v$qV zc#G+Tr*-Pi{W^tk{x37PdUK}7LmCwlH50wcqh6rmLrJz3lbW_A%{I{g^wWuHdUc+Ii`k%I`Xo%2 zd5L~nS#Ql;9>tMaapCKTt2YUiH{GYhBoL@|5ILkAW(r>dKaQn9ldA?O1L_>a4rzzE zz at OnQ&RHs~hd?nb8SIugVWdYgbKhq!PVba8B9mw&6=uCeA)!B<)r-7C$usYJGXy|+ zOnRT>=6s}dRD4*{;8f2N0VVT?AHi?OorA^#-_0Q0xJw(ppIs;GP#13U8vUoibAvv(XO z!IN7(`IB2^ew{wcSV&>7xJ_tFB88_d+FG@<6^AR(no*a&v=(?!L%2DcOA2Dv45Eu=Qv;H;6e%kBtSC;aOwV1kxz)ZE at aTRiqa$HIOxZ;DbpUXQ465M_8NBUwS^$$D=!Ou7Mml}4NL9zABe?voJ zW)Z475I-H~=o$Iw2+znWSb)zgSdn2BDocxav##x#nYTJI&0m?C|ESUUc6!z_W$JH0 zKl>4^@ixP3qdxGFtbviqZKXc((WD_hQ*XtY^rl|>oz-y#K8xF0eTG9Pjm7a-RjOBv zhWU)D&g4OddiCVYR!jC!kA8LKOuaQ{oL7X#a+cwm4fG>{&a9cgYPI$ZUu*X4N4kbf zriV3W#+!ZZDQkbps_&^stIohjz6L^8MQfGOZtW`h=}W85Opj!>%qdDsmC0_kI_G1A z4x{mI#j46_LW|B=k74!642iA!@JEyeeWuW=4b`Ki&MI3#-74KFgiftR{$f at 9TcL(+ zX8(c><0Dz^FV=v{RqxYb9eblsnd-P1$(Ab1Pn~M{8OheonU6RP-OL2**0eX>+TfY- zRvV*Fg=*ACxZ0taW*wdx>Q)=GPlM|3r>Z)f>|cfIp>LA4ZLD9V>IjeXI^tOYi&bfF znzbe~{nl8PpZe91k0d(wmV&kF$#06adZ+9I9E_I<4$qCF(Gb+O at n{ z^VY2)Z#^1(Sl2h-C4}mtr2fc8hFJpEt}J7I&Q22I&SQ}I?pVAIya_&S})C^ zTP{scty>E!TX_d&)~X7$3s*%>A#0IY5nAz$u&v!Pd06M!Y3D=Wzng6g$IXb at F_u;=x8Ej>sFzzP8jha at P@!Jr%hS)0rFyOk|2Dzv& zBo0}1`-471>Qd~Diy7f0b(*295Vn_$j at _U_PTvx8>ePbhWmeOj}| zJlWD}lXVm2#^>%Z;vQ3n6pr4Qwtrs}ziG=;6LxdYuE4dO#&Wk(VB57~(4?i at xQ~g> zPI at xryR#>C*t4P8Id4xOkH>edT9+y4UK=;2OGBH=tCei0kEY~hiLvE7i_&KKTeoey zRWjNvxLst@(F4qaBRG)Nbi7__1j9d at UXZ!}sV%E?{E zm*W^uiMO at fop4cRk>^?pD*JWQafq~KrBz3?vYtBsVn`Yh?k&~j9y%zMtI#UTKB+xF z$eP1%!EeF)w5Z0?E%KWR#a+ghC#KuYXU;jJRXRjb=_ at XYMo}1BkxiU^MmvyWST1&` z_h$_wt~?)){G!3u@|>3P;@ieC0|+-S8#OQ1bLk|e282Ee(&BLUN20>l(-rr(3@%dQ zCz6dTNVQ|lt5T9BCypw+R%#mU5mSvPa%!8X3w^B4oK~6Ke^bXoY!}xP)J)PkT4%F^ z{horxLtD1-4#&*578TFfc&-0E>2z}Q^9|_y!gxes at 2ny}DaSU9zB|~NEiuie{u-gZb5MeMIWs=&8nxogq5IV{?Zn}DILSJ0hmSkn3ZvTCEy`$<^e&+U2xKzqbu1rZ3XLToV_7ar62&v9vsOn-(x!5*VcVgBc zaI`e#(lIW*!AHIG=O`){244S^C`oNjo({J*%H%h|4536pm1V_Cq_E=QY`@e>m&*A8*wtd%rq$;fi5o~ zJR>2)Ep+MVipc at r=?d5xrF_z;>ZvhFdP7XpdEh($UpN8Iuei102q`j4HNSn=N#;0ff$6t#(RlcHal#lLI-V*(6;C>l;Y4e!F}Eb#6lz>1UMF6iu$t!*@C#UT zqBY)_ZwfIk5$_!@Png5g2DCeYb>;wu0)_~YB`G8^B-tfHO$j6sBvVV$D8|svq=0s3 zQqCQOwDBC01d at D`Fp|{c$nklE-2iu&>w^j4^~w3+`RVz=`uO7X;&@}h5tyXVxJdjD zLI}c$10h$4o_pTHv$e7e?wuR&^QPi3eGTn27tlyI%J1LzhxOCF&OadZhldH6y-+#} z`8FLN%IaRL+G^0}ei)|M-^^7_fnueT{PE4j{rs<|_rm50p88ft*+G`s1j60W_emSR|*i7?IbEexe zu4&h`ZyR+kHtjm6oLEdVrt30>q$8!1O*fR8Zdh%YZP?*8Zd+`a;I-Pd#%llT4sDAu zCB4pkip_q*V#8s>c*DAL*tz1r0rc$YK8)QA-HbjAFWSF#erw;h^BZkAdM!L8o&=s4 ze^0$XiU!CNsb?(8&ZGYQ{nPkikx(dn`K?i^|B=*Czsx{f*Fc`Dpw9b~o~6(MYF>Z8 zSJ@!X;0Io!y`P|QZUM7qaLw@!8E)AQ0xai3}I~a{0 at 1Xq8 zOI^~t at R;mwCQB**ExktXY5J|V+KlZt-e-;OM|dA8 at SaByvti52Gmj6<^{$S7{cieB z_dR~1=5nw{0FiGV)#g<<(t~3-cq5!(zgCe}k`O7EvYiU4BI0QDV~bXlR^^!8D%+wn zqEXv}8HhGBV&hVEw4!Lt7j$vR&O(APVi`R at 1fEMOsOyWYFdz!*JbY|GjTt$MVICmQ zrRh`Z0jEBs1c at KUIH4DNmU&{4W5;O5Fb|qApc&HjA<8zW`F46DrJH2E!h_PZ!cPuc z533spsblJ~>xU-+;=XaOI=R8Bqia$1q!DtQ;c at E1FJ7Hfhm%2~B2kPv=7xdGUer_Dv_4)G5g(AuHIHr*#LXw6grdbA!b0K#Di8pIt;f8r=&bv%?Okc3kD?Y z&;klx-y7jd4oOhINV!a_Un53 at V$ov%#aJ!rKsq`k!T18S8Hs*i92ShwIN*GxzE(71 zr5qNZ2}QBGjtbF#^2D0Td^{c+4nUTV_S1Y)ZO7Xmaz_T>rK~f3Vu9+5V~7s9qxV8- zuQ9m~xlQpsBKOGs;kSSlueFEm#(cNv{rVra>p|V4cc@>y?uW!6$H)K-4e) z(2&D6vw#0Z(Vm5_9~3KQHcDZ-AD&2Siq zGgO%PnTj-Q4T&s^1LQ-L5NVJcO7b*Z4XH{dMm$9;1Ms3*K{}$HL93yY(7#a2akV5f zZHyp{vxB^cTp at Dc*b(ihW;hmvGtEimGVKeKSjL6fjq8H!L%pDjL*JlHLZP71L&Knx zL*XH4hsYu9Lr0-`Vbh at 9QL7NI$<+wfe`uK)F&kF~ISjEuyu(f-J)zkk5|Y-i023RQ z2EdAb4UihA1(k%ZLWje;K}*2eA`(*6Z~~!>^Ma~juaJ7O8wLkfL*t+gB!6-Pk&IJ< zxY4-?I?@|P2Xf$ak at O^C at jLPtjP`Fr6N5a^hoE=mfrvdB3s(Dnq2D1$NI3{zQOQj9 zDMIa`1tqLl at 8LvO1}b1{p#^_L;=MAEIqW}%h6XXCw-Iy%C34(j1>5dRh)xBPl_G76 zTCoG^i*^QXLXjanPR1QNdp zF2_CPL1a(`tR&J$5-=-B2qPTvBaOvw|1J~_LJ>m(iT`L9 at v^)T<=Zoj-rQXuOVX~j z|J|_66AR07+fYK^|u2|%wcPqAa*5q%Ob=%5gxyL#qxw( z+NT4)G(o{P2q3Rt=xiZMQI-v+#o`vo&JFzZX9|mEUa;3C$Bd?>Q4lWz!Ya?t`&Z+n z3PNljy22$@7cTM>bPZ31L792$pU=5L>iNwLn=Z(g zJ^orpj1jH7 at LFfJA&S6F%5O zyDs~$9}DO75#J4=INmQw4_%CMn2{L!3?lzX6s>v?n)G3yzT}05-eKCkz*eXbMO4BlG at 6zP_(8uIR^cf0HzB{{mct3Ib!lD6gLjg8z~6=f4Yr zh`+Sg&xBxlzX?4-O&JFif+Is-77FbT3<~2TLwOsMvcN|`j2p86!Q&wnh872CI~aiY z;oz1=03fym_?Z#MJj(dP)WJg!d zc at mQ~Mt{I^;3}}d<$=ES+#~ryIJ%b0x4OBydY^G;(5 zzDyPbd_C|5(ysUdkCI4oXwEyTj~YpaJ%>&)^54|<+X|l8!x at 8EuFk;GG;~R)x)@n5 z!Q&I~qQOmT_`r{9sDj{r=?CFnKj13!r`UkMdrZ0np~}oh?- at j zPtsdt$=&d1QN8PGTli7OC!ws9aUNBELx4xfN=A|cdh3 at pV zVN8)_$d{nxA}MRepIJVMtT}mF`m=$2YhR-sdIO)qUU`joGDnl6D`$=#);y$f*%xf* z;5MxDYo9M at n{M at yznNZ=3P~sXqouvpm%KTN+`q7hq7r}BB^Ks#Jg7w+?`Q7#_{vkm zlTtx at zTRzSkMm7ecoOh9nfBJqEy8^(iLUW at Tz_SMS()^+%S?V%_nLPF76Sl*70n4QM-{N(Bbgr0OtZd){fZ=*pX1 at iex~ z)_UGN){)NNZ5cvbb+ShttVCLaGC}<0p z71aX67{i=>$|80akORlX%9Zk81jekv$nb%!8=LdK4h-)JabAJT0~x at Qvqb03UzMcy zT>IWav(dV>GbZ2fj*OCCJ2?7wl>IE?U+BY6wA-Sg=3FPOKN>BTkZkMv)-IIClcneGz+XM4h3p2gUjVpaKZa?qF0Up%lW$DX zMUm&{1Gb(eAwnVnPIVIPHH-3sbuHusCur at Lq7o89Vu^riE^LYuImIW*^SuK4wY4Uy z1UekCTj$BYIN$3JP1E=*<42|^4Zna)K7~|U)lE>pjPlHEBND&TH}C6#IHE&k{o!|1 zAIY0LgIrQvlpdbJud>d<&J}A^lc|_1Kggo=(d%K^NkLU34$D3&U6O}<Nph;TTq(q$fBl93rQ!|}XJ`^qCGFSzt5EbWdUp_fGE{F1d|{`AWxAtQC9 z5VrJ=%YTB*v(6>Hg#YlAtFM!z{>0+FM-umqQSgPqs6YSpS(vd_zB|v$ReJjGdnnhH zKkSde!N3Ti|05HWs+F6onWM-5m?zY1RsTgy{};g-3KMmC at uD2gsyJ;&cv&eW+;vQS z>LR3hKl+M6wmI-`@TdGNjRqGdr~j=aXYW}9$A1x=d(L|K=Y4q2?%(HM48bgto<&DY zN%HqAV+q()1R;|wruiQkJQwaL-ePHEh(ojV9!Q6dUGVVmroqkJ?0sxKQrtn?Mds8o zSk*eqH9DMcb1OFQSlzkX?QXqFJF-vQkBtLm+_MAejS;Wo9pYGto<3ns+dY9*ft6YxbO2V>jgqbq zp5djntCL^{M{B4Q1~%&LbsQFwX(Ag*ou!o;6_whJaCI4dbCV*yvY%OAvs}2%KbUoN zv at QF-epY6*7~{1=q!9%vH?`>OSj4j4I*lH>LK6?;agSzVRUcnZ zO2ZsVq at zWw#{X4-dCn|>91%a{i^SW%Ce}$)U#as9UhET z1E1Mp#tU`iSwtGd2?Y_^v{M at FABq{efi5B?yl=t`Uc5tJDyv(%sAQj{)ngAv5cZ>Y z;su1|n+z_>Rn0 zZbViP(h|>zX?`IQi%9hn;txcp+ltQRDH`m9V%%scx%k|{JlwzFZ>1r_(>%pyrgEx1 z%5A2#UBC=U#bsgWL|1szWU{gm%Lx*`^ACF}X=HsN3nmz3SE%{Je29D}i9?Hhlmgy` zL9Ui95g#B43gOeY>@TxvA=2AWex^0No{D>?T20K(a^Nhpv>rl7K=P%{g6#$xfzk?5 zWl*3u{K4_wV%TdaRn?CCnsE6=jGDTOgNx_HNy)zv&ut!5$y@#@mq92nFqZ$+ZzN~# zZf^HK6{D}Ztb{6%Q7%tlLJKuWzK>(0D+o?U*JhH1Jf}wQ2kY+YYqW%J!y=!@aYFLy z=o*fKB`FzU8IbDch at Y$UF8mI>yWJ5uyT0wcxD(n7_@*Vw1pZAH{dT`DGBnZ$-HhS! zL@^LU;=@dQgaQo at TAC57eMRN-?a%jNJ*Ty%G at D@?-s}^Ow3qVJYmV!# zCethLvd-F{ahH5Mw3j|z((C*A7HzK38b*;lG?M>qes+jK0 z{PN6fbyc--t{R>1s|7MW>pyKQw40F>ZfRlDHP*bYh1 at S`Y_-Chr&xA>^e9QC!QJ+7 z{yd4aSz(y9-pFOWkN}^=+!0y7ACu>?7_Rc-g1QhL+NipqUHE1^C79(_tv>&IdEcg- z{{5+IhkDg&L;Y{%pl_U$L3R1z0=nEu1WlNSF&g2<|}{_ at j%mFCPwu+#>MvUA%ZZF zE^r3)eo#&Z0yl6?5;R;gzrmQ2g>GL=F??0bVj_*eGiceQcilGM6nP=vqk}LYe@~ib z7IPktK~5EnVKE0}b-Z5e!-hU_Ln at M9cZ2&6sOy|4;MXNVCM>&JpJ4Jp(nPQ=HK&Zj zmR0l#^Pe9k>czA29?5aNeBalszABnx8@&cMGNl*>Ohl4ziahK4b!wQaJkXe5c z2N8XAV at wiBCt5)^@rGy>{(0+r#rfYApxy1eviMI0EJOWAz_ovIo&JaFwB>-VjHwR; z9X{Qnr(?Z|$=nO47V}e`UaNBbyD3eaN>m)mtZ)TjmL>DsADGX$@4Y`c@#PEt(zq22 zThTlW at aOvd-mtCp<6(b%Tw5anW7B&1G2{&P0yLD+8w&xGXc)?f;7@)g!z9f)nxh~g z->#eTWT2QY?4ha3>88?IxnUdj1r0PUx0bKk*lKjA`P-{Jfgs_*n-j{U4Zr2{s8 z>gsfxx{QWKc3?o*1voe6uTFTHG|p)~cugO0xq*J+SA at 3| z54d%UmsqS(_w1Q&_tT}LiXoRl`|rXnNOD=p4Z{M(^qVm3~H z5O>u+FpiG|;{q2V7x6S at q9xwq+b<<#3URE#l(&KKvMK*ay-SMY7eD6`0V*%TPFM$I zNn|8SW;k@}J!gr-lVcB(KkEm?ZEMEwktt5=^NW97%=<((qyB6k?Bjh at z`}CVbcR-V z_N8127C9PA@&>60Lh*fiD3)-b8|Xx$k65=bSqis1Nv?MX{9EkI7kvky5e5tl59R-t z*6LyH at Q;3S`QM4yZ at Ox0c;o#z(5GM!gxK1tqflrpaM>eP!CL at 5pewc+YSy|K46YL} zbI=&|rPX?qI!1q~+_sBbKBvW7-b5~YrOtZEPkz~Ne!0I;G2mkP#qTT=22N-IWpDm( z-_^`a<)eDo at C*r!S!O-09IK(`1Y5vQmf4S_ zA+*y3EQ?GbWx&)&Ll?8tB+9v at nbFcUP%C)^3X^%6VYx>N(<-eCg~iC5hPj=fdv@ z=-zM0h;CaU$(N5CXb5jyYpxqR#$7&1MDQrV!`z{{s5V5e|BNy};fe%UkqF#6R2kniC|$DCvrh0p zP5jl)Jtvx?+J$vj8fQc=lF+=-zvrFWv4&}BZ)NsOp3WdHi=T#wQsd_kU?rT-)IUkL zIe@^vwMK{?k00SpXotq?UzNd=sH5 z&zy7c3FS0x`Z9y1)?8DrDbKv~w-;TSZZC0$m6 at +9#v1Jjdb`dGVMg2{0knedu%Y22 z5Sl@^TQhe#VYmLHKPk7H)T7Pm)L)0odSj^BVyyJQrAu0S=xM zEY<+yOg1?J1$<(z8C(TC3#1C91l&1XVorVw&+Yrr1L^-)z?|pqJvc_%hdA05h?rmM z?!MPGFXAOBz$!gJi}~~}y$&n--rqM+LQu+qC+RDiNNb+rj`x8Xl$C&zgguoR^FT5j zA^*u+HM*Eg*THKbJm}WJG>K%P_zGJ|oe at 3`QpT%b&Q6uJ6Bj&Dk{G`Xuco=S@P z9lz{qsKF-29Mlw0`lQPVGYn z)P6Cvt?!*whuv at R0j*z>GqT6{NvvOu6Lp8)ue at fR@G5`EedVoB z)q&pdWY37&&+!BXT;+QdguEt_Ff5rTiB}sXv;074(AT1{|EP#28eGI=1HYj z%~#1+ig}t*L(8tfppI|k4t=j)^PCNY27>4+6TWt64Dl{=!0wl9?~_aNg(*w=IW6Kv zsk2{5j?U<+gca3A#1Ji(7P2X&rus8qxRDAHo(nyikOSj9Qd@$?sUdjZsUcao;EGN( zE5u#2Gh`L=W?w at zEJQ)HETlD*4#oquil~Ny!MPz{>1f|Uv^IoEG%rLx)Eh<@HipO( zPL}W$775u-v?RnpGzCJaXk$=eNCie at hz;h6*|B$fkZA}W22C^u;*Vm8!G)3HF?`Lm zV?n&4QJU}ciK`&jV!IbY9*sWDFmkk*vV1?6o9p4)vh=oagds+Lar19{jYH0sL;0ys zZX(>TQ61R>g=%Di8ZK9Df`-Y!Q6yZX3O&1kb*@-WwNrVp~7DzD}}G4o!Rp9c6lFXiI+yUGhqwBM*mImdQwhjV>_b4`#AT@;{BM%{^7o-pgm zlmJnTSrZylSLnlL0JDWVxGQAQzVqBjWFB(FHAF1?p;`cD$!DB4V}N)S(`dKT7x1C) zPF+Gn5C8$x1CiWQG~$`csD^}P at FDUF>>+;z7*u3u8w&o=TcyjY&?)eqwB|X1Y;E?x3F2|r53|*ALG9NuThiU at 7sfMZnz4!;5xdt)! zybAS_o)8t>adQdPuQXD&fWw=TRgoG2YI=55}r5}9uz$h%RXqk;}?HnN%o&a zLQ$Olunb88{4ftpU+6h_j-Kvd`wyQ;V813W`ceI7 at xD#aSRxunHe-j@=C+dM z4&X at wlA5Jqsa-5c^$~-`t{GXYZb|MZ3D5%ks5*h%vSHw;?nL;kM?6S zg|ZSb4BK+mYWGxGi`u?VEV9!x(Q$hQrn2 at 6(DBst-UcN} zK*DNt#;nyUs60M at TV!s8#BX!I at EZc-wI6YE1TAj?lcC`=Y*g&oUIdKqs!OI79|fbM z9`vdFLGn{w&oYCTEly>$-iN;c^M#KW;6|N|p4*iuZWPTfeT*=|Ay|kSW;B08Re|(a z)k+92YkA;0Q;@$L8 at _Q_u@Fek%p&O=Tw1kSAcY~6A9b*x(}deDY@;xQSDRNGy=-YL z8by3mz?nC5;pR4=Q_m0!4KnJ+8w?sz5pprA&}gmNtk;Fdq*GL&7{BuZ{1#lJ2N0e% z<{Gq{ik7WeR9)y#1F at hFR_GjPw>6y+=&KLVs!hIC(zV2qbK+26rv{%ej at P0fUU~^* zjo4=>y&Pl{Flp*d!r{}R65$7rB590WAoMx)HfS?w at PBe9L>%TK0pm{)x3JdmnsT%8 z4=P8Eun3zaN8oZe6O}r#iCL=;$eL-iX*(@g?Z_n|uv}>PO+tL-D_8|$zZ-$4(Wz*Y zXtJf at BJ3x~_pAWL_~L1 at Ih!l1BPB>qbKX>^z%bq)jU zAR}(r@>$%u84!P4gXewvE8#{~SZQijVIjHWqG!TE3a5Sl;9;7n{pqD15 at +*-b6pwW&P;hrzf-4ig{>1L z$-J#u4|NeCo6ZjAzG$Z*Ns+hXtmCy?H>gI&2F~i(4TV{a2c2(&g;BGv?jOa=vhI;I z)~4dx2TXN00*E3oa22|nd(jNsS%=u@=*9HV$wRjVSP^|-SQ3V?TU6R_Da=;wyX&q0 z+(J<PFHzx!eiu~OviRUov*_qQMD`o*A=&S_A at 7SHOK{Lqwa4GyV-U7FOc5BzBfO8B z1^}c+StEkOPZ!^4<8!hf+ii#}G;L8a{ljN~m#ivt_6`ePCB!T~y^sZBDYpOg?7Gq0SEOU9Y>guM( zn;%8`EqgsL*|QC!TK0qHdrwWm+n_RM2qunIsfBET at R6#%(w#JQ5_t9C2ym28c^HGp zIwUWA+BM)uy1jy=xh7PhU^R&0x6 zD_3iH at 1IKu1+s$=Xi2+ue$g&5mZ*Z=pRG0D`sY|=*(}4Z;@Rj!@`|iE0m%yZrEcXl zZYl;%wMgV>cqZWaA>X%PL!tR(p`#4O>x4A%?a}dQ?9_d5(LP^fza?^FG{ociHknC^g zBf5gJ)my~iJ||*B<9r!^i92hKs#Bv}%LyW at hM;Vy=1bPbPk1Xq^5*_sU;76~a^-2x zwVW at R{k&I2miSGNA7gTGMvD?BNO{qdKYjMD16U?& zgapY>M^<1L>q;8`njhLm$S{46N4p)9Kw=Y^{>>Ub|0UQ%*a>VA7JJ+2KqW*FYr*e3 zvPqy7x^(HoyG+rb%%oVmNI?=*(Y&}NTi)$A++3pugbxn9y!$U&;BMQ)lz%zdL-m+*O21cO#m z(U at Z^WR)D$AM{S1nqov9W*onChk#5aj%5aQUKgrW at HmF~abn7wWuvGd7-|Ljp?cAX8?9AB=&!`VUBt`| zi0(+qf&e9HOhz|PWl4d_Kn12hnUy>uBIiAo5$e#FbZ~%tQbhOKnrd>SY;V-t(Y^M; zI at NK9{_T_~O?$-5USd8RNnwsT4IPx-HiAp5CE}mmdQE0ixXEWN+3Mgv{UXFOzkbTM zBzcz=7bm!7s{dRw^Yfxm;9)t8RqmmN)fyPxsf*&wQv2{_v%=1qhTcMmZJO$m&d>e) zORkP1GbBRmMR}bST^|rqtHM#5vyRK{*Gfj^F;PcG zU{oWq|IL6Hsdtua5naQ{;C=+QaGEE;+mHxl{d{Vo2Z!wgyxR;y5#g8>sDzSs28sBp zF*u~EXJlM>OIM8tz6 at Wtg{xAnQ|2Es>8h77LD8uTl(orr_vnvS;sebq=U)}uJs;pB zVGgBv1VS#?Y=l*j-1~ASq}T2 at K4|Fmz;@N}(Gz)$Xzy?JZQJgEtcq2pWgwISb%%f9 zcW?|VQ5~_dsK_*e%C==Su>H=*vV+FTVR|VN5xawY>7X`fN+ at -eRJP7p&$G+xT*wgL zsdKlS%32U{^X2{s%yI&d;l*N<(3Qx?!EQFp`gzPseoQS{I(kK{G&~n7LbvSaeE{V< zA%70u at IgA3(xvx|(-ywoiABSBjjK_?wyw9QjklwZ+w2(=G@|`LjvYOwxSO%D{RL0g z$&_-X|1gv99>}@YScs+%y-Y^<$4~pu@!9JmpYIFEn^%d=C9Rb19JhpSVXc&Lx7JY= zKNpe-$*oT0uTj;&mH1B?M0XU0Z8|o=so+#H*5HEam|*g9+XRY`Nl}+IPC1)+^GiE* z54sNJtQyX+_r#&1DkB%d>IFUCC-v<#PtxjX$d09^Dcx_6xKu{_4f+JnO}JxHKW~dL z!TyQ{F*ASQt5+!O1c5Qc?DdKikWv^;)*ZIW2Eueg^gH7{Z}<0e1(#u>;=5g?-4`N+ z3qtxd5z&Ma3rBZTh;!g+t8u14#Lxw{#(IyYD`GRV6(#;Kf%ZX-BE)+O_uR>SFoN8j zftINbl+Td!8mbpfZAIXcaAV&09)FTKGJ&n4MWAHRt}#vYlG^<#;rr>QYNJLmkzB%_ z$1OJw5h4%^$rN=SRoGL-KuFI!H~nr*2|I4dV&Y+T&DBFLxnXAt*AtUVkpPrZws_(+ zul82ofJ6>nW%ZmBr$#BCkYIg)eefCjg6U_w@^Mc3u18d3>W$~5CN`o+k+8Nzb1cu7 z9~5riZjferqJ(utqOLjMA606a&yPFt(S_c`T#AN;iS!#+p at SB^g|9zRY!7$X=|{Qe z+P6A0oL&mNO#?Wbnsoid;0@*&ffnv9_0 at g>vq^>rq&aqr)-jnS(}mt%G&az*I^yq+ zCnE8L-7iX>t+{dnpfQ?mC#<@x2QPDTv*EDU7E>2Zj zoiWskiT%3%7^UUWJMfW)USg z0~=Q>^(!a?acgw!#%Z-`KTfyxO-tDW{JJkT_d2rEp++#gR)!O}Z=Z|cMrPKa33RvI z{>?;ETb|Nnc(I>v>~7k=Bny$FiEZ1UnY2lUSFKSGpu-w0j8(_|Jw~xfyT at 3_5)7ax zaRuLy35ylUQoqS&yt^#)tQB?$B3z0zQ{PSsQ6#GOVlKJtLg^v4lQ4Wy&&HGPx}Eao zsTRvlexAGn_>rRXJ8;KE|0rB~o2&;@!T}gayl2PZP+UfXxpuYod}Qo&?b1v@@K2o~ z;SoJ;NupiBx3;v@?blA{{3)v|5}e2PrLW|W_e7u;`y37}mrG!7Ntct9*`#_0nmyQi z4U<^wO}>q1T^42|MZ`v{d6AytUlZlFp;#5`jCU>T;sH`CaHw$l-DZ3u1*I=20ueKs z%30RCFX1XG`vZkqao+)t#Jj7#315QuCgkO7f*6D-kl>AWaz?G{xI_fUNWY5^X+Jg0 zdY)g58xk5GR|s{2;;20Jv8OF?A!>D5jq#q9;HSh%#y6a~jdC0+>r5c*ye8QG7Dni1 z1c^_LSDoi>0D7xjq50oo9GeXYT(bh$iKRFyFEet#nMiKc~B2QYsk62=HNqzyK8xImnhfh zWUswXOZL>7)u$K&8POA7hE5lt^yqjoh|y)7`(o>SPK=F-B#(Eww=&b=HtIMXGG|S7 zw$qh&k4U<9qQd8pmWNwby8ALltOR7oMG{ki4qETnx}{1|W59DnoEuS1@@2x9WEvb~ zSEpyfRV?%APCxEG+PRp47ucn424uxELCwSUkd&rVv0bQn at TV=$H?P<2Vvd1|I!eVj zxQ{4?J4Q{iMw&V-m^O31mAkxYkz*vBQo3Amtj|ew9W}g|M_HMs(4uPaVvtZ&oMeeH z<=;(~x(J6S(;}t&sKQxgZjxq4Nt!gwJdGtOwKKrQ5GDVr)2hlAw8 at tRO?#|75j`@5OHHC|$z?v^AyX2;QHOQZ1 zAhL}qww4ft>RK`@g&28}H*?Y6!Hz3cBHc+UbE+l%Ka724P#i$hW&*+8-5nNpO>lRD zdvJGmSloiUyGwAFT>^^*cUv^*LLd^IV=43F?tEj!Vq z*T?rkPJdQoO2tDr)u%9Y#=2c_M&-XzVrY1+AJI=TAuWM6pE2{>vn73HM5QU=zCaH) zxI_o_oE0wa(3p><<;fZI;_Ke>4>KoOR+a`oicZtQzEtFvG{AGyr)4CUbQ}&~gLNy? z;_wq^EBZQO=dDP&1-H}xL?~IcR-CTuRtRRxWzT{8BGeO-1o=wZD13bW+IT*J+;5=P z3X%zgjflSVwqteQb at YtoCw0Wws7&0ggEEYh*^plP6*nJ03KSvGG*!;X1IxYP>6WhH zv{)PHo;C8&I2{gX>984-43SLbwqN(j zF5a>oc1MhFIkmZGET{Tk#&4!!MP-N)WM0-*{e=J)#(`MIp|FGoaxsD-OX?pA07Pyd zs^%flO<;2mHPOpxST0!4F2#?P-Dp94IBOnW>&(ej9V>R!aU8)TTuza7J5pIXy~|78 z);!87&MUbvvVlQsz(7AF?;S&j7BZ~!`a15}`sX%d&P;4IKW#-dZl6Dl`QQz=My2sb z#|xqBIDLmSa7&!Hq$rJQVXU3p=h+W&>To%^R1D~HO%A8b{|UUB&FuRMb|pm|(z@{FWty1!ZB z#>IDk@=U%X1Qg|#pk{-3i#o*&RAc1q6u-2ogh3!C3Ow8_bnId(1A|s{wRU2)Qt_R8 zGU&oHEL|?HE~Z(r7GlNwm+~QXB^jy00lf!&s5{#~J=X~5%(u`*h%sf`F*<3qpSsPc zm`6r^!)7LxIEvCz5vTt1gpe(UH2jqBrA3)L4x{{Z$fw{0Op72={3+n&*^5B)i58!5 zAZnrK26QTh8v%au`uM{Mft`XY0?w(hD}LVbD7A4vG~Y?A&}TSQ8lz-${_d`TJ3rC$}avecURE%#uAx9Y>pALRDq8 z8~c*f%&4IpMq*h7UL`oU4+`d1hLXi%@DF~^X at s?`=|l5lRrv>V*NmY?vF!X3^3%(Y zV%%m>v~gY1T|+OsAhOm*a2MXDV^HauBvdrMkZ-VkO%~c0FH5?sdeH#B)#bjps<>#6d~AX3ugEW9j8D!nIHO8yn15gkz9&BGU}cjyodV)oYl446zJN zqN2uJdX%JXhD8EvVG^42ewzBE*F^B7RQR1>EF3m|Q(S3M->7<6n~)BaKy%qob%|dB zAjcPyL%jUBe}J46DoKq7rF6;gwK#{InVs6GxOeXo7Y z1*>B-IlNR1=M*QT^M}L>eT5ET4=p{~ALx<3cRVJ6)roBF{wHuec#iPI?#0->2s}qb zWcMQF{vFIom~Ho><(>=XB+|2cQF6}&HxsVfy%@R|f}4p1?Ox>E)4_Ui`TQXX-Cv|@Mg&qO4K?U5gXw`BNkdKgOJRZ_BhpZ#{&JWvD3CPNET{yA1(GLy*AFU# zse at ek-$Y at 7Nui8yC9u!&pY2~fVLMS}5{wnM2jCZg||hn75295fSY%9C-2JRTxF%yN#apV)jDP1he-8YS^q>mP+EU-8$C_84jQpc~i;ea@ zW?knNIbW92+9+*e?cvb9lgU4Vok6|r=#WL1TAeprY%H02t_}Lr^8)`?OfJG9hqieKHT9;IQT9-7%Vc|UOtxHWpKhad$ zUupkaNjruoEjvsk15`UPV0Dowoq)$z5C+2Mr z)k~Xyp0MNnBx1ijoMUgFG&4L-=QQ%64Rwx78|tW-+%<5Py3-Ba4_3U=X|NT!-Yp)6CEi(=Bs z<(Xk)-~vmd^4ZeLk(Z%kxSFeXt(|y8XBVaXs*5c at K=Cv;d*a;(`EptN%Os8 zZ^(JQm+pCtSL6!kX|!{O%aQ?}I3x@2Wd=A7fQ z?gJ=X^uaCM^kFPq^&u(T?TqKJ>q~K2e&E~gy~Nlkb*!Iso?E0Sm7yzvnM1_vG-Wqu zqZUoPCIyUEzD22Y=eh)lZ=)v&kTP$~hN1LL*(aR(d|;BiJ~kiRO!I#Kzj#i6K^}>3 z2tRz7W&dvxkp7=v#{XS*n&WG(^Yvk3E;pkm{KMa0^|2X9l3xNi$EN8?cydvA)1&6W zA3nm-gyRR`oWWU+?GOY)SuJIkyiK;fO;)|P2hTTFF6+<#d2Zi|p7iI#-Nxj99xN8# z^}P=6D*9_``aZ{7{lWalwF0Kq!Nlc_?_(U*?hW*Mb07GKl=b;G^YhW3!i#6%3)Xr>ICn5sTrDde99cHoepIw z0KasNo=v|q7mU0#kLJoyF&BVjfFG;W_nmB_N2z(WEn;&kxu&OebLRfA0nAx}z-e+I zj*TeLGv|_kklT|$E|&tIkXMv7kz14{k+)+Mx2oKYqrH9fQ+vWFeS7^VetZ6?mW?ma zdYTdyk}FOy`|UwXf8?UkO`<(z6k&Q0m5Aq=#dusyec#e16lj0^gvx1ysi8mF|79Qd z_zO at uHxi%Y8>X&4h`h{Ac=2m at gs{%O(lHlsd0GrupEE|#WMf*>5-lvXPkO8X?3mU> zJ0y0js_g-12LxEQORywTOf3ntr>K-t+8pn?reh+H>!4x z{SX_O{g21wz-;aWd`c at h0!m9lHnHhMmi__~y`Q#YdSy4L$HqWC9z4`$OGX0I85NfP zXoI>N=603+j%g3zD)$LXf004y4dQVSP>_d+xj(K)V}E8^7S+{)L)VXuxA8{c7=-F- ztIOIS*(0-GI9-W)ZONhSC)lpE&wcCx{L7`s+ at IZ}wI4j~0Q}3V#}X9QW4IqVO$x-~ zUS$r-F{r=6u_+vt&vhh_02^1|2(_D*S_m))6|C3XpxC63;!WS97F)S!_@(t|?rTr0 zq88h@=su!*CXCwV8WBiLY*pR(ANv5Sb42k6hx=vr?T^)foIITO&puDVeXoP!$d~C! z_sbn at TA9iYb=V$s9UWiqNAjkkqw5f(uJ&bUixlK7t;6l;GiEuH5VXJhq0?~o)^&y~ zE%a_ggQqsY(VC8qtYq1%%grPmrM*4|+tJaQzow$WZo$DOuR2jprfg5&?Sv>2su!MM z3;H!64wMSi&5Z#uQG%4}1o+l?uYP*+^j^g%j-8G#T*PXOi=}P=To>n>o@`*aJ~OEc zdjawU+?ft-D&TNbTrAs_I2ojjhPnvaKkzFns|@nwZ7+wJ<46h46;dE;KD8;(QnF!A zXd(A5&!sTM!`C+7kDW6}o$y|2P!l|E%t*y47<5;9jx2og7Rkhv#oaeo5?O8R*qr?0 zo&z=|MCrujkxM5~kDAM?zLlXTP|K!2U~xb!{pOgh{0)akq(dMN8A-~Ethz&i%T(n~ zoj2>7XeM$I_isBP-BeZ?yAy*+x9%G2hAm5GH8y-j!j6lwip0uGt<444f{sX$I$0 at w zf!$fe>fe_y_CLJadeUdI*mZ~V>9FIn7)ROBhS9P)62{9vy0&i^s1hRLe%F`WWb1u0 zb-x{$eGqNGxmb94aigUuB0`Um?hoCV)&LY7%p}ZDB#RWV{^zu_J4J8=c at p(RWjx0Az# z9b}~iSsEgdaK>%$k>yZ`%NJFJ$0(JtGjV9-#e16llxP?A(d~h82eo$dOnBngxM at WT;p?y{azx--s=j=}VubE8n`wD=}md~}JPZ{8+YI5P{O~wWCX1>O_SCeTx$w=t#5p2Qk zrv!><00K)7KK6lD1nFB^3VBe(ttP+qyu%Z7Mji zq*Riq=6~lmTC347wz4(kR>#K}7rv9xAgPVxGKj!w11a;i^Kpvv*+D)FPx~QBKbdW0 zJDX6kZ)H(C(8{OcIeIM>$F-UXSF7MIB!e|8;9FJCmvwx9Qs}~YTUA9^<}OjF)yGxj zv?&&2i;-wb(x0)h(TtO?yagzUn}0H>W2au zMd>s2X(H#DjGH%7jPi&~l*&VyB=1n69D?%AIZ+d$%MbJ~v_;aUTa`x1UwnasnMQ6J%+*NW;&Xvm|u@^31SF~E8PS at rYLDIdm<43|XD z8eYj~8&j}#+wikAhXR%mi``6rD9s~MoV2n?(8&9(X)(Ka$y^kUbj+(d0dJ%?q~@fs zY`NoWYZbq8-S5kj7&F5}PWc>ezTP^I;G>$nsSSeie)WvnvA66%ujCc>#s-%9hUVic z=jYsxOvk#%jn$2+Un=!YjV=X}{*UBc$uiNIn)l$$WxlNftNZwkDR5PQi+hc+W|Ft5 z;s&pDOkw>~V(FM&sZNIpo)USw z>wMo&-jyb8O|>ERUqkrS6(_Pp=$>qP9>w2?R>*n=2L^+YrH9TiJYg||uRV`V*IzgW zqc~6gaokb-dB!~YhxyD={U_idN<;BQks}$*-6ND`O%CzPLIL0zFt)1L>)KS>IniULqHo$B# z279C)VM8pkAO^`T#v>jKkgou}cH=RRj3dLWbNwdUp70~NtbBbJn;zhiZq}y0i)~Nj zky=)t{*{d|*aHhP0QlRwHFx^~5(&U+6`Q_AhLi(RTFGs>0V(ZbBOVb)idpFZ^;WT& zTXaY}V6Ihc&LjQ^A!`x9c|a_pVq2sauu<@gO`G^!h2%I-@?Jb?sAN$7`+^?NtgX(0 zrT7BoteyQrWcyoq at swnsB4B$i^HvD{h@;*?-_UHJvo)`Gio__MpI>)1k+sQKnP0TP zLgTr3&I2O zfcR$-WZkh7>2v%rw(42qarSSut~|npRAxZ{^?+=nrWRv+1LvM8j}GgkBT|SVL^(3vyZm3CIHv1{j0YUkY{$PmZ14t8b}N~Rcp}FEjI+31-^BMFagx{CG7ndZdoAJ z?8U7?E4RXs6LxijL396&TUkc0P*9wO$PKAHBEpcT-QhBFJAP z1{L)}zWhQ6yOr3U{UCudxR?sd>31KJ&0}BXseQqMIU9wDJ&rr?BJkW5MKmm?KILqc zs3N at J*f;5+?~YJGyaQZmj~Hzv5&4xEZlnK-qpbVCs)fBj8aNv>IeS&-YYM;AqGyD{ zG##?Qz~@cYecjo)96{@K={k#!{2+Ywwjy>0N2^ZkZ8TI&F5MD?ddwgG>d& zy@mjGGNaPeVt)V5w$(q-3#ozmF;|9H};p>NRiR(Q*omP`BBf at 4xD_=Id9un89u(aGv|C>?Mw{oCNoc^M= zz2iS&`uISHSs>_HVM~v#kk0*c+}xsYZ{heWgM?Yv;w1wmH4LG5U^dgQWIWQV>53X= z9v5?p*_%GzG%oEe-^f78=w5VHK at k_D98|i}+dfW5PgzT`EqkDeYgQq8-h`Wy<(GI> z)~6_ at d*I$%f5idwi(@)<>5Uo3V<@WVJ1 at dj&+?1EDh*T=`+8vCTYbe2^NO=QHSJ9q z=Vd6W3_KsiMWQcid_E1qMPk4_8~i60H->w19 at 0BBj(|(_`|i(&I6B<9U$6I1xI~KN z%O~e(^c-12RY<3jxDyNb*m>P8(*to5^{?n&L3ZEU=nfbA~qUdt78&&YbM?t zUu$9#b<;|uurw~K7P=`Q76oo^?j}MgDTT-0 zrX at K6)R4kw?<;o`9yFlvdf0coTQZT%I~=|_&OM!2 at LUSXln6@5?Xrx6G{^~dw%lqu z5xQw2_KkI~=J42~l!<$fad+-SHIXLYpHxIpltK^V>!l)WsG`a5?wwX~ z7O-~jw0le}><97OsmBBbE4bZKtolUwN}s!k2%6F4w&iZwPYt#g-*q2o|5rxLd4`ZI zDw&uKddxCC?ZyN7$tJp<%O;B|ChCD6lT9zW(?Nc!iL2fl?$xm{6YjxkPM at t>%YGX0 zU++q&8Xi=YJESCA=*o+G2NxO>Pz#;KhB|YHRAdWZsc`S$Kqq>q+->7vO~jvnK`2%s zyq^i6wgEusEFtv7@JJf94zs zuLtBqn+PYag_T@=jTNVIpu(4bFefs9BwmU$Ww$j!1>%-R+C{W>ytnQxy>9`kxvTDi zu}6Nowo?PieVPp%Ma!9O%}^KI`g~h&U-J~G3t at eX?Y)=ze`GlI*|zsS=EYDKg8CHO zdvEh0s0&_wv2EeW at W+Wvyrft0^B^P+&n*f|jGG2Da-q}iTl$gkBL1J@(rP=|mKYBW zG??T*w{I+2=LXUg-CL8-N(~l8nJ2?IOxI?X7`}V)CzCT=^E3wE?Mt-VXdz+g4L=3u z84UIX=h+QP(f=su+O-AX{5+SYZl|J|_!0^?5RXOuLy#*q)zO?Q+|^7!!F~^4z|M^GE$c{Ehq#y at 4)~fBp-xZAl#0 z&M at NWC-{71JPaoq6`qzPuJvKeQG9q&6m5(PS{2 at w7_RMMiBWWTBxGI;a{6f=w;XIP zwvEiG at p6FYW%sg&HG!A>jrE9|j zQ90qyDDLoBxJu|^DmjjOno^^~?otcG(5Q at XyeKVrCKPMLBE}3dzbvk~;kzhQcuwqN zGQaOF!^4m$AfhP^faiwQqBVRK*&cqE!PsdJL#i at d5JefiUsm5?&v}#w{u;XuyO-+nJU$^m|ev4Q7?(xM~$FA6`R1bqYd4R`6vFjJHWd?7rcDt0xO~Yjz+2y1kUX15Os9hppSk{$T}+6Xw|u_i ziGHjb*-6B2k>7HE}-Dqzv{kNn##K zi!uWrG-S;@Rp&oGXvCGzqa=q%<9*>YnqmTy zCSBBwAN^dnCuN40cyk&4eXyKs$`_sEwlM71pq_c+H3jkcGcx#TFbqb5%4qc`B96qL zi{%@u%53atMxrbie>q{5^+nhjiQaHxqNq6|!+-$^r!+NGo=X%ejcoG*FO?gDZ2J)P zGHs!eDvW^2n?Rk`gMDn(6kaxci9I6*2g>b|2HXja^O{BU;zvz0ql4=xAL_;3zL;QT*COqgh#HUVw zGgLKYJj>~d>gQ7(2Tlg2XDc4hh}j%7U>JqB#fOQqHkBMiYt#|eM2H&t;`|NXorPiD zkf-ck2VZY9u24CKmQ{RLxZKbT#N-VMW`+HwxU`PiD08F z1-c1ahA4j00!I(SLCc0ef*Hcuh at 0`d<6#crj>K4~#t^^4;rqmxPcG*DntP1kd;}MZ z{;zu&iCrlD-(f!CqQuwuet6J)gq_hx-S95%L6bd-L|>HtbeIX;wN1a#o_OLlfgct0 z89`$BQ8GM`_?qAm8ybTkG3r-5EKl;8 at x~pjjvSN*3kg@}mY}|&hFXNj5T_sq<-vI2 zimk<1Z at 8dza49^Lc#p<{VAvB!fY?ghgeVLF-Ug&R)oP~x%B+IkFgMeK=2G?jpCse; z$}_rG=8MB=Rni*oUW4&=VLlpEB^O;=P$gYO+-)(JxyhRFwFQ@*kwi3ktftu>zuSUe zTj|^9hKEa5LXnv z>UIh1&BZ^fxOr;C0qz2B>Eq=flj at A^PHPV4dhf3(LEZME^CSbC>U9e8GmT_If!3zV z_nnhJL-SwEta1AwlJy$fl{Glo12o0uUTo!PYvA#Ecb3Wk+8PQ02Y)q>%~~0oXU at Dw z+(8w!f6zLDM at 5H9O)CUV{mXGZl^_B$Uf3tL0$#P-JTeXg&26+s5+%mgmwBbEw59so zM-et>z)DXnpO!9hCE>u*3*S8};M4&4)i%N#L74PBP zQOz5#8l=tsn)1jvSh+<=%VwWpJ83teJ z&Fb=mCY937YV%r{I1@>i4cKb?j9<;zE;EA#U}XHB0Bd%(8yhX<%&MLjqp!TrVS1f@ zk0vI$yRgx!(g((Fy4;iNN-GJoBI?9D$%iWo2?ouV* zs;+xLG8~CeyYIS5)fH4?@L+YV53#@k{-kIlSYd4FfV46pyJ}+?1Q`&NekcU2hqT3p zcwUUArnd`cY6b#aOBN}AJR^D10Z2}%$SpI2j4HX#@C{P8&kqrE6Yq(lm#2mY7x2;k z#XJ|nr7zU**6BtsVXkhdS(JUAh?tZNl&ZC9_lfH?Z=YL!F#lfWyAC|)E~KK+n?(f~ z>oOeRgC~Ue4avR0`aHVitSrq84CdSYg|2B??^3ONdCrFG={}tdd0I9P722e(N?_qE zd!m1L4}PsVY=qHYxeeE|!EJ$G3ydcRqb4=p2aO>M9L#BR!a$sh3ia6FKPGaE;7Dm9 zMb~;R*Y-_H(o3{`|q&2=Sh-A z5_O8Px>}4=q4;GwQOZ%$o(CK+AM?-dG<|&6S>k#59)-u%llOVW9CP!=Qy6*0EOQGl zPCc4;svhmfbE$JnF9x^dGsWy(b}o}Ac5lW#U+&jfS?Lp-_0TaqPyJKL4}Pk& zvApZdR$uENYNYRa(Ax<6RM(Acv(>eAib43|s9w>X3sv;;XOOk%PYE2j|x zuz&YLH?kgyfw42bdy+c~Ch1pWNBZtrq1f}JO}C%jXoAFl59FX9x2(v=X25veAV1u$ z-;$Ty$=W{8XU;Z2tN5KfrV><1;jWX=1X7ohJBvgL$+H#_9wxP6YpXrBcH!=*ZF-98 zHsfg3{~JOqZF)r52L8i`--!P$Z}0zcum6R&S7+0MO!j}WDEjCvfKA!t;;+HnN4P;tE*7 z|EB+(6f&nl9)4POmjawsM! z{TYM ztxt0-^<6m}cxR}RSb3elc0sm^S!&d|^$(V$IT3dHlAYjvZG+0sDy8R{HN8PM4;o# zk{)0SetD2bizPuK>zPmj43BngnLD5kQ27QP1>_40+&K}h0on{k6Neu+3sJ11i*qPl zBN1h73#X2d!0v8A8%}PY1(B{TMQ=n37v|+*y21 z?jbQ}nAO1K${v3xnvC_0@#tWAN!AXyiyew_nG4`zeoSp30PfSJ-AHT`7^t$*+n{L%k$4u1(&lnk^tpDVfqU?bi(sY7bzKE z?~JikBG1pc<`K<_8CFLcH+yg$DpEbjU9yt7G0vVRRq;ml>+=p)=oimLo9QCIxN$Uk z2330>B`xIzGhMUG)B!KI`m442TkdkEXC7eZXxxN+~W#gdkRx zPoe#{9k_|x^^Wjg)pb77t-a?z>Kcjk|5Zuy|8i;hl77X1V?^hLXFy5K;j_Qeqn0yt z{GpUs`XwXlixo18E(oPk$iV9KVBy~y5!DN4udZ^v_u0a-?W;P+UkUO)yF;4XnAbwr z>(@)qho0&GsOtk$7?}|43&@0%XKmG8TYe>hP=iEd-oqu~D1)$i1 at YAoo4d@f`sg62xIHg9Qi z6{JE~J(9_8q2rJ4oSGuVsoG{Zl-eWU0SI4Z9KjEKr|8ja+`2e$u;G&(*r#rNc3rW< zphfNX;V)Ux7CeGz>2&S=&-fMgYC`@^)y-PaXm&1Lj=fGpz%PdlW5X3ait~o4*7xNq zmrmyimuu!6axQNX3XZh?*GARL0F}OD{Y$lUwrH7g0 at Our;?6DisanB;JaX;S+3~fe zr6cr1YSmKLyo^QR%|X9F(N at o%_d>z at eSWe+o625W&oR1Y{_7hniGIlSQ5BY1c>}fA zFO=YJpli at 0u?|fXSBg(i&R9PdniJtVpw+;pebgp%hBV)MdQoY|Nq1y?5A)Pg&+gjp z5?boEi+QA`R!?x{TL12c>s`MbkI~QSsv_STCpkgNakW$OS6sT;oN%m9dkgPNH?_Ow zLE5-=92>44LzAMhtxT$KoEs{Rlg4G2y;zj$!7quB?awnOlHUs7M6N9oXs_{%Xb-hMYZDs%c43 at kulX$^$oLHJ7jsJYSE8?b7ea93t`MLsioscOf7lze z$HOyN*#qM7k)DIGh>BT_mI1VSlw}8ad#m>R4V36$Tt&;ONc$o!*t$wQgs$OL+}IW%J6Xf*;aLLD_^xw#La z5Z7zN^;2}fZ^w{1szVR&GwQ4Yfn!(3uk*L|Nrf>v;6&Z^hm(F`6 at h27Pu~ia8Vy8MHii|4_}uk{@(!PQEfs0!={rjFYk4*zSs&P`lD zU$I1`{K)CnWz-`Y%Kmw>P3ai1>Yx|W{4_NI!=3Vbj zt~QX!SA8G}=`C%En>pzoQ3cLS&#}qmnrWO`hiF=$-6^ATA7>N%%Q4f8rK%yKK~n z+#xNYk(Z89#bZ}|HEuI4p_!M)QIg|p{8^sRX1C<0wo(6MDtr#E_n&MpOiXVV<7Vhq zJ!FCn_ek&5buX!Lfj8M&HuNniYoO>&{;R1%S_G28_E5diO_lv1p9yyLP!7|;kNJDvY_kY-^3 zXIcm{+g)kWW75A~)i!SNf>AW)lZjl0!%#Vv!>=?F#J`){axKkUHlr*zKXm>Ep?&(p zRbl^j8KipeOu6xq^j=8xcu>H%WODZWO22zN*};8r4^40$QQ+B#>Si(ObtH9 at YNI6_ zQChSp7DF}-vCiz;*w0Hd-$hBDj*a*-E=D_YGB*5qf>ckiGqNk~Rur4AU=FPvYwYFx}h8VA6Lh=6-HD2DQnR-pS!xRx?*WW at 9q6 zi9mram^#nKBO2lqy|PX3|O{SN=k7 zc?Zu7n_N?noGi4~hq4xbzWzIb at _3+2c0+0TFA9=VCAnwqUor)=l3(xbw(E38LynJ( zc#qGl(bvUEmQw1@4%Q(chV&8FD>-9RZTYKx2;vC^yHoYH6*eyP5j71efJ0aiqTxbbZReSKrAQ$kwkoGTTmj|i?ZNa6eW>ByNp4A zL1)Xj{y+T#07_O!RwF<$>thx^gc^bk5y-j(i0b>aU0ANqw8dC+LL{{t*yXPc*Z082mlezx&sjDza{CN&Gvcro!%r3V*S`R at fxJ1OVK$^*UJE_xCM?do?}LiTQ5EX_(PSVv at hx^7ps>QkE89zx>O2!BVT{+-t}+ at gT@m ze=T-n+TrwUJ-PXKxF7kLN;yd at o(4$ZF$ot5ahE9rj^SFL$@qKu2Foz%*WfW1?oHyr z5~4x%MldgE5 at j*J2L)jY={w8_)*;gbDcQUDKB63rV0&u56O+*OKvTG}2&a9r*kr!N z{OmSI at q9xsK?8lHXD_dCYbdX*QvXM%KK3j3T4^Z00P>T7cZUXypPo&_Xr>}rl_SNC zS6~@GuA*bf7?8t1bTEXox-MD?wOU}4m*rY(+IKhB*ma}QOfQEzmDx_V-IKR6 at Sld`(%dp+pxUU;&+TcKB+&hop zfD*rJwgJD(bSrQm(bL z9~$@<6-2gLEsGUpmT;Mw*fnmX;XA*z;7pXQKZzV2eaZ%+N+knXrJ8`Gqkd?f$W=i9 zC^57DaYJ`r1a;g$EXaNca$QbE-s^yzASTROCA?UO1yMjiq4`A z$T-S}=7_w={)k*j_!33(AK%G?<{XtvC>7;_b{Sj=LqaQ%~K=`gu$^UWouaXM>zBbI4pQ at i#C4pTyWqL zbS62jpK3-NyoGA{kUMOxOLu1-GI z9{(rrj^d}YOz>vLlRnw+uc$yB{*hj at oKafp6aNTyq~a&ls0#j%DCW>_x44Lmt_ucm z`sW;mjVlO^_}MFlwT;RRHgp_1tor8*hJEwfD|Op~Mtw@}fx8eZ9^Td)eyaY!>zE#i1`yGZkZW2 zq`BS?XV=Xl360abT$A`;TfE*)o%wSW+OEewKS4(~6WJ~y^!&i{3n=$7IijEcSeN(5 zj1y|^_Zk;D0=t6bg0D4Oq{ORAn4HpAK95;cDCaTVjmlPO{6ecF9sJhO-kp9$_ zxIE}~$d7$&_sxwcKw)vbH=own`;F$^jQZ52X6?H919T%lS>&A4I+#rHdN{4VmR;9# z>4NnqFMyBmI7IU{#AG7g`raxJM*uO=ZCsxK)j8?DdFA;m4MdiJ81a=pwbqNZl0$N> z4x7Ep+F#{c;8Jo-L|c^fTk2T~a4ednaiP3)Fl?w!@;|Z5>lS|O!x_%M+6KM7Kj&{V zKi2y!mI-+Qvr{=Tb&O?Wc)!D9HPS&jLo_2L1c at jl*KlN5|?8^BH~%&QElU8Dz1GH3q%}xHVE@#&)QB z$p|9Vw23KNhiareM2!Z!Zxa!J*GMHXVDu1>#k_NZ7<&DXVobYGg$-}uxJ;|vH}&`r zto;gr+y7}LA-S zDa}`GaWTTpLY~;^q1Yn0SABK~L}xq!BCdxdU1`;-FZ5Qp@uoy9YgwHFN%bDSf#O3Nsy8P6lFhnV^_Ck-LpL){bUIL{5=z5Wxiy{@} zRxeKR7E3d`et#OTs#9gD;F+GH@<*y_90;8f3JRNB4;Mn7Q%NFlr&mVB4#TC7R-N16 z8JUW!-i&=53xBhtmJwB6Jfgl=%W*c!>xHJ#IG*DK7)@#OrZW5`8AiuBU-%S#Y(9Uw z9Eq{Nqff={5AqqJNy3d`R+3XtX3mL4Ui13Zw$R$*BI{t05W8C4*R%AX0k{yn=5hNPKW-lBL&%jKS8TH8N at Mnp5@oM at +me_itwOU8~X{urv7 at Kg~#lAyz*1ZLk2JjUno6uux*U;9UHOuV%Pd7Ux! z8*QSHs(p+X<1x;gs)()H*5w=J{-e>&|JZSP$r;T&?YuvRILEI_W6dx!48emgju*AD zYtRAKV>vd(FE?>a$49)K1vj?0i%~Pa{)D0UfgzNsK+?D5(C!;`jQ7zYf`Xf&1Qltf zmA)G)jBB)7`L)&@QU8mG91 at H_BnteJAoD|C%P3X0{AN1ifj at a1e{Y;Wrt8&&MHYb)vg!KPs#-msA=bFTWuOg%K8(OlJ8l-xpz zthE(DM;@;)m6Ld3_j4gF!u6q^+jgov!!QtNqG*? zjnC4alrDLpA<6-ZOk5JTo^;eAI3~!{)iDe4U(%2JwE|spQ(Q9mi7y>U|NceF)dPyQ zKGkGbYI>trT71sBe+wD2LeQ!DoHrQh- at --lZkTZ+pYyn1HJTvDheJEN&kApws&;zP z|K)?w*-YBbD8Hn{py>?%FT-1$7KWt9xmHc%kM4sV#&-g#UZc43SheF$A)E(w3A$Fu zb*>iSTB+ZKBc>-noR&c{q)eTJp2kvgB|j}ep!p+pwG`)rDwe>vM^ojkM3>s7mdru5 z%F!peU1ah>cOg+>Oqv93qUv>Nx91F+ngb}z8dLI)om>jD%Tx5kOf;gOX8MNUR_3ju zQNj?V024_~ic)RF7;xBphMG}^dxU;YtMiS-VLq&KA$yS>?O>2^V=&eL3qFg+cA&s| zDi^tpZe$VMU7e&Yww>tosRi`lg`kd>d*zPrwXm5R=^ojB2h$;_ zgH(AcVf05%3A at T(>rej^t at q?Yw(=PRVKKYOv`TN~PXmQsky_3CveshK&!oOp>sfhp z{5FKl$$YH&xa3oc?#xV+rReTRMhCn*C2b^OxHsY`&Vn``8bp}iR?=pdk at g#i4 at K(R z?}Z(^+ at _l9%WlKg=162M8YA5~>by~-rGMV}Q;g-j@*TGnZSfmiPVr+f+yv^^R`M|8UrC;9bdnp(AT_k?N zp^@2d(j=~{>-%@9Vh3sfU=?p_CeAg7et-+Sp9Zf&D zx;4N-pTxGEN0%qKK6h9Ro$GSbjinPRa0L5Qq9g<*<2xhUZOdn6_nUc?qE2oeV(dJ#xXi!UmxGz z6Dr(fp5LtF;TIsz?>rvZ9p7iL^v*HRohUnnTNs8h+f-_b1}9r=z|&NTo&cdb*&vCD zJ=Z^8h2r_>Iq%ug-5^haHJbMJD~ftuN&gh;6vhw6p}LlglEEhJ@!JHb6ty0Q-)nCe zS^IN)I`DlqP`9=Axq>EhU>Xr3zQ%>3vW22ev*NPb>^i<|XlixZS2j283cGq2I~_<2 zp!OEG)$N?Iw!h>ugT(R8W((^|Dz*4I`y7H1TrgP46tfwqKs;4^dO!*YA zP8v0NXwd4ajgTyHF^dO&O1aHyJD_h0HOHQSx);PUDTJm~ibWZsiX(kHq_pM!4AKqG zWB7+&eg{Bv`kWMiiFNRS?YF;@r~(S-PyOPFmH)xmJ4R>Pf62n>*miQqwvCRBj&0jU z$41AtZQHhOba=QICN>bvL7j9?K8=7O{v*vTq=a&yvQR%A9`EICbs*J6K_K@^M
      #%C`FxPlZ`b at 96U|)DoIx{;M1{k33Zt2)SK3>&|3YPqt~bLO&A@ zag?S~C9!!4ESElilch~F8DY9V zU1O`6mV70mly at n%R#$_*jqTQ#tLLJaWFeHOYN)SZhhvh<2%RYl*(Ii{D?1y=sT>LR zDluN;7Fts$N?x{yb4Q)5E=l(trrI;1!RN&DPUEQg*}3!;Z}kJN0e4M%wmF&5>e$%cwLxgQPGw*&?+EJU!};Xss$;aS%9yWiR-G z6)&h5nAVrKi5E;!)-(llCmKT#nn%< z?8=;4)y?_Vt~B`jn2fKGQfadA1)d0)GdYOb!BWhh{d!?oclizGMHFL8Y z at D_fG9JNmOKNfze&$jcN{Pk2H)kKReky=AK^8_ahHS-`p|Sn5eO@=#Nw?*~-rl z8HYu3MV&xF$lF6-kK(XWEF&%frnRt${Fg at p0kMo5A8ffY~GPJCW@{BXc*E*B0kKCzqu1uR z8s;rIu8~rII7oKgD0x2)MyO(O;wsdSe-Q?I zqKSn;SND~ILon_^cgPFlBs9GxQ|3-SRf1G4-lfx;(PFng{jykLCs at vD1q`&?*i`La z&`I2*KU%ufBWZV)2vnMDNZ;1gn+T~6E2pdV2{93$E?Ls?)}BU3Ew2g&Dp8m2P!^?} z=}b~A*_4Z-BNS at Z65t`g)Vqf$@MwF-Qtt}0(x%uEvctn5K|X5x`}^Sy(a)Zuoo}U3 z7+%j4Vc-a?R7!{|4+yhy#0T+e3g&somB>vh##z0KlUClSTS{QcrcTVR+-pY6Bu2R4E8Z?m(TeUrB51O5ET)0}5n{47FlYM|mk31gV{F*Pi z)cFM&X}Rv%Q at kemi?YJC^3Kg%Vqh#_o{n>>v_-SE>}Fo0w=PoGzP8 zq55qQVP)I-s43k9Q7HT6JCJ>Xj$>`Fk2!6C(oeQA&5(K0D0Y}H3IY?-f(_Jsv3TTh zHUw6!WCy#Oe(aJE*L23ExpRNKV#lWD5zxW9KW6XPH!3I0wQ(_h&+PBlx*HrktnmPe zqzeDuV!8ToqF{eml{;&4n>v1?>P0RuJTQ7|r+2^sQdA1yKRnZvnC14`nTM-F+5bY7 zNLmpIhalynZhBgHR`wC6qzyKcx*uH)bcxJgb>Jr at BbIm4$Z8+|g8d|Gx>Apba+erz zVC)V)W#9UTCG5hi$v$mabw&{!<-x?9#6CLO&fvymCKDN%K0f at nOnn%fEKhGCMsCS_ zoa~&o+ap at VWJ?wOzN*8h=ERO%!$&OERsn(5hye%4A3KMF8^^USALl6NH#b++B6YRj z)v^9rY`LCe>#G-hE610PS?x%f*#d22Ik2+*rSi-RrAYg%zLI+_Z4wC+Yb7t4($l&6 z-@%>Ocb$5B12CYV(H#)buuLZ?L}WibG=4k&5Qv9JL*5e+`yBXzJ)Ay8%BLi2Lfoe}`L?2ig{EHAf|7hz}8wF{6Px4kClbAVeSpTxV`S`|dt> zFW0Mfu77Qp=H~s|_uZ^8%dNBc!xD~f_C51?hX2&goZ;hc)%_I2W<&wQVIKvFVA$AB zwiDO}<$Vi2nfP%+jg&LON;m5 at CNQcnOABA;8Nl0B#x&+5Wf=b2ARPZ1DIESNHGe?pL;^M} zjgS`K%&&lHLe8wZK at VsX$lQCaVim3SvFJMXCkI{`(@-e zB{HIf at cf(xkxicOtp&$!_LQkPY=n(r$-4%{ue7P-(#~>a0rjyfCPn9-?;J%g^jIy( zu3`AE{JO;_#wJ68{JXB0x9pnQ-SdG#dCsoMbI{Ak#8?J=;+AdZen|^1T<9k}rrFlZ z*q67kx4>T#vO|&Fjn5KqS&a=@#;;GK2sOMGZM}S?b)|9r?f2dApO=w^8m95TECJs`zieo7DtT$EHfm z;B}VPo1?E8{OtnGbXe17N&*`f56gYnm~-+mTaRGmaMw1tJ=mC2&t}LPl(*H0b7$nQ zURJYTDV?_s7}CdvP+!?7mo#3eb>sh-?Ig~Wz;#37reZVAVHBPXAXsW?T2kUA z&tMwyNmxS9!I(I$m-}l$o^??wv5xz^X%J^mE_k}T(X&_49G&EPPC};C*EO`iGQ;Bv zJ(96{t$@WI`L3^@n`T`V5S&&9jofOqulukx^G;`;ETd$4fH1Q72q}0w;+n%ZeLfTE z9XYNp#MsU3}@b)M(<0-D40bq%h*OeCG0jh2>;7 z=N#smudEU2=>Qqbr@(zGyFnH~GqA_(sKRzwUIrW83dD=z7fd8Q?qnzUIq!W`(17Dz zC0@?O+y;IoV6Kc?E+ei=2K7gWhBu>GqSi{@8UCj;H%MV^3gr~Vn@Co^`WIVwcRlTd%rh<=kVQ*~V at b(&px9Ef?43dceR! zJM0?Xx%LpL&1e^-NnWF at ld4H?SJ);qh3l9a**V2FY>T>TyAs){vt`yOzlG_jp7waq z61i!{5x&WAE$tlARym|=%MsZrzJ=&q+(zKInjv at KHLPpS5w%G at W8MTD{EcJ- z=0U2KR58Q_xr<{3t-{6ywZhhhY-z16$zWqmw5-{YJAY;bQ at A^(Iv5gf6Nc7CN6ezh z5y7xHhCnzmMo+jgCOa4tZxu~#eND`wxqg!eBIr6|!@&E>=2`P0H}KsA=++KrUDQ%p zrlWl(v- at +nJ=tmt3Tb;N*@f5ZytB5zx)2ws0CIM4sPo}R_D{e}K0$B6k6uFvKMB&W zKIy>_ibBL`abB%xIStc?yk+b at D`Rxq5waC*h$g(z`V|k{ngkJ-o8&X?VW8w%fgN+$w4$J>u3j27F9K@#Oc6*T@sRiBPFdRBeOC}z=b}H29nowuFhv6`ooIJ<0qa$i!Vz7)Eb62z zl-p!;akApY;?HPoV^59EHJvHH%Q;o$X?5doJ!`@$cb~^5D9K0i*MwyIVHOQoV#l|1 zFD1g+2*aN_OFK8=R;_a*Id!e;%au-;3$LTVw)bm49phw z^4?ZqdV3k5a0h4)XXyT7!i>?qypl_KI_u!K9BqEwn6J^D(drayC<`1}Q)eQSBh(sI z>#}Hva%|Lc+X@<;Dxgj5Qt(au1MtoJO2SnBg zxRx;}Bw-M$6iX6|9%hTe!Ia2z zbIYwx9a(87_^S~>Vcd$;x5nQDr*n0+;z${#R@|`WxI0r+*j6snWAFe#wT(Nu!WOi@ zY9jPCqTWb^Lb^-=pFEY3EN1wgu4j?ZuPRi$MG2%`^~40(ZySP%NJK3q6DJ=blb6Xd z970CQ<}yEjg+16O-T`<$EuLbYoSOtRF$;geE#-F&C3D{LQO1M{H^^lDG?Kwv$pR=~{H&wmnue^WJ-qCBM&CEz z=Qf%Bx^W08k5~yIpf-ZuwE}%v(oP*(xuK9=m4m2X$7H~HrwsR|@UQoK+9V=3sHo7t z*iU=?zk)ee@$R|?meE|`ibrXa>J&)?@*iM}Yh|cDg>e)^Sg4Ya*z$GICLSFI?IkS; zL-AqjS#YYAR#>SW8!!El$eXSEqE+WJSPD at F<85 z!#zPm+?WdD#I1m;or zR@%mc9Cg%8pMw9Lb^v_%=^6+iATYQfAXNV|?buk_xqAHf(~a&PI>XChvo`awMaix@ zM?3WE2|7m|D?mznIT*U-DmbyUM_33ZR z=LMSUKx$N at xUAYrI0$Rhqu`cNo0m#cEZg#b!-DB3ml{&CmKkEP7VT4%6dH0i>J3g$ zK_av=;jwQ`z+1P)wCfBKoWLTqvXbIn8;G-SjYnIyMd7SEa5hQ}@=qn>UYk;|ZH>xW zwdJNS+=8%H?+ckVhK8k8vhhvX%-=$@7ViH#u|n`pw`SuT;gcRboGN7J>*o_6Oq^=Q z%`qaV+_yBV3^h-?VB?##S-iz}?hZXo*F<1s;C_^-&&Wql=xn;V#Y^BT7=k{_?9wg9eHd*fQpS2+viJFG1Q9a6bNw_EQ at -K~ z(1iGMFgI`EU7O!nOuYKF=bDivsv=}*qHON2s;zFWU~g at 1udtjFyRw6zyPa9dv%&i= zU*pu#$=hj#e#Bkhh9=|KYeKR%20y9<17SyrZywcr#MQ~LmDe{qt(`@bx&$Ho$oI33 z86U<`bqpq$gx1MeJe!ITJWz;o9O^N^g)I3Zx8hKINiciLA$bv1ega%eSl+p&6<=~w zk*i;9|0p0x!UY9#GBjN%3a?_625 zi6XtqUf0+?ab352e*}(e01;p at lO#BrbJnz$=QrBxX`VwW%DEcmp~N~iw0JYLJ2yQQ zc^gU_U7b at dzKm5m0ymy!o_5G#Ljfm6`wkGk{CwS`&5PtGl$)GxEl*Fb_uj at E5ZHb#5V%u8b!lbaN-*VvW>Fh&pPpq0{KSa z at EM)DhJY-iwD|8_ddD6yhpw at lTsub|QHQp%?p!;^9&v}hu}EA3M=#-r#<8FHxeh)P zK%CK2e0>L>aUjO%D*mp6k4*k=5yv*JEqnq*MhSwjI1%R~XLJX2rx)%>E=UJ-XQHh# zgT8(^h5ot0T51T^uXinKehd43+rp4s{s;bu+RY@}LvpR{@2fzpt ziVgsil$bpT#GhN1?UQ#DliMkr+B-&`mB+Rz-gNe at U4wV>lbv)oEnTB`dXw*TH?2N> zcS4h4bc8KFLwCO>yHnyc1?*mfj}ucAGzDy5qmLU?W;F%uUjvV$QW!ORY+fUe1t!($ z^&5S*?+_+A>317^HtztF?)1BjKD&2dlSuS}4IgVxy~mU(xmtc^ukFWJDf(J|rmxM% zoGH5}V~mxGnjLi8DFiaLra8s4O4=vdm>QT`Z}d_B*l0{`5;RC4WhR#}f|`g0nxgP1 z1ACH>hah19>8p7_Ec;Oo*(W&rd`m54 zY7!AbsA|Auc< zyHeB2t;W3v$)xwR^9b_R1QMfze>LD6mkJec4;YCNmCvbQled<~m%CP?K0-PqQGnz;EfEnX9`kx&JTz(~fEgZ#Mi>XdCFK+NB1$LP`$7g(dNBUu zk^W*rH}K;?d1%rR1T#uKT-}Jd;6(*!8P28X)A0h2A09MRIb?o7gij|Rp&yHtMoGkwOxo5P%j7%h>6j5`6Wj at d6} zK>4f?+XLMLZ3m7TEJ2|zyi)_UE{QIz(*sDL01&MnmoqY#%#USe at Nh^0MG)iExbwyG zV0RFrP3pr1cylPsr}qI5B-|spL>5&32-6749G*q}Mp-c`eNh7v9vWSu3Tl5)wt-I$ z&!T)&GYl&MornEHCmo_*JP!m%L2`)vdR`do5KF`LiN0ju4`_gJ!~P+}e5yW~FSYai zdcde5|DZ<=O27IS`}!Y~L(YWRyN0Cln7t|=&)6dv2dNR?KT;1>fRn at D;k0#1AF#mh ze&~{+)~Iio!Zw|c*#rN6Y>vop)enE>*r?%eiZ6GYfxMUGgYPg}$MP4!q1plPl}LSh zJEjPPgVpeFH03r?AE**{rHIX+zgP~L6|<&15a4Ca?%?6&&3quG6L4$|G+2UE*aCl= z7DB6Vg~r<(;0O3AQ6j at 4$dbGuB%z$0TEZIs4uBP|4=4v`W6EZl`-x!~AD|iB4|#$d zid{yLgq@~iiU>XvrC at uN}4+n~joamw*3sJ-S>@#<-S&mCsUJ+&Xyot at 5ww{9#u6xSWo zYTLJNts5hyt+ik2*-hhQ=f{s{f->iukUVd~;H~$5phy0WGAKe0i^YSA$l76_lLD at q zM*}kOL1?KF!zjlV`Pn9nVir;3d>ssCR!`FFNob;xa6yle&0EGGxfNckYdIds(^Sb< z$C*`l0$aJi+tpqiv-qg;&WQc>FZ(;X*QaQqz(GKGp+P{H{x^5_|MO%iSw&kNPZj+u zRL2Yzk_Q|fi at GIA29+T|t8S8rq9nfr;RjCmPz6`;Pbf+>bq3wHn(sdUy~>(p$mSZi z^S_OP6URH|^144fsqX7~@2 at V_-?Lc#zwZwiK_<&W_QG&R7 at ky$RFVeTA`~<)8;h&< z)zWTRDdN~>DLmHduNaQ&tFwim`;%M~{7`fh(MrroYqIs*4) zB2Vvus3ENcn at dh(O$s`d%XSVUX>~6~jy&+wDbAFHrPn!Q>^SEpP0f*{wDEyP(z>Qj zcAYJ5$&jncSY7(LysoGm7gyrN9fr=6f1Dkobd*NlKTec*Y_e!1yF4`kmOj;_P!gl4 zDW1*whnOWU|32X)86lY=>Hm*8XB1sRn$n!VA0%u+YO7dlk1%O*Xs8jerr#Ejqei>+ zApKl!3aDI{)%6OSNiJ+VGc5%$7N?#gIVSE*lSMyJwL&Ay%VhoGqGhIFW?&|Elt1Vi zf{2JhO^gn|WrC4##Jf?N=54y}hXp=&yyzN7BgL-J2x|;NnP{H6%Z}-{fgQU)bOqj& zdjJU&;9)a!KNiO%zcD6;H+FSN%sUuyk1<;R4vr4+#{D=zIvPm`#>bKTfPFlLJHK|Zr6yWL z*xS#9sMW#M=_`TPOCW`Dx<%^M3D>)dM4Yfd5VP@|pFkX9RE6mc?!}+?={beY?low>w at cj|@2=Ztf*9}&K>$_<%$QVUAN zY at J9o>9-3hco9A+v at 4VRPj~ykyw)JR6PzUTZ{0rChlup&#iNn)0}2Z#_w#|>Q6gz< zaST!mW6<5j#kW5>qY4jfGiP>>V|WcQ3gFitaQ_mQN||~m1p@)Gg#-bi{NG6Bzl5e# zHs#TNq3edtxRjU%E7i@>>8kZxYF ztR>&0p!#vRImRjCBG)R{d!*i~*=2O{n-*|Rl6_74D=oWdcZY}y0NVJghL8yV$zf=) zER0z^xZQYwO58ELDa>*^h;%5f8F-kFjg-8C3(6J3l}#27AU$GS3w{aDv3=P=Mw3i< zoMa987S at fRk{g zj4}R3cJW-95JHAGCoGZ>`e;AoEB9uLkxT*KSjI7Lj`=AUJXNqFy5<7~e3~U6Eu*=v z%ymd27;UR!_`T^O!M{_qn3m#k#rfZH#!RJMsPzxd#{R(>-T#KOf5|5$tJpfDs-yea zX{=3mhzCYe5L-6KLM(KYu&-cdgpx#P=q%9vNcTIlL3YfZKDa%2 at Gku>$^NylBF}sE z(k?i0&Yh|aMM at ZtbIm>5e#*`Gyw&;L^L9 at Nf>$;xGPp_+*;Y+jS!hBM0nl^vJdF*A zq8Mih>V!xut#sm6JU z)a5YOnhUbJ$mYg%w%62`WBVt@`|=v5Z&zevE5v zR;b}>WqN90<5m$P+)jb)`xj!c$q%Z5}udD@?n+z5#EK+-5mAta=l} z^i&KzrLL;GhEQ_p4>NPn at pFj9PuqE+U*)F@=@Exz1Oj%gZQ0Y~n&@D)yR&lL81_Y^ zdQKbgtdCa+US(1pmskdNjE-m^v%P=2? zKIw7kF4+Qb7cb#%0u(Nq0<3-bLLag1so{Kyv)8!Q%Nc7buP>t^tdb12DDb|>W zIc~{Y(BH8S8TaD+g{&!}!=FI!N14cZip9tq$anyNLWqc&A(w~)RQkV;A_Kv}<}pLu zFtek^{)xma1z2lK;&oeQF2NA3IC#X at 9FHidc8l2iUEc7(kH at 3cvlNF$I2EVJ2fAdR zsOx?P*(FO4XDe|1c_vNFFR=fP(P7jI?s*6hkXN|>>o$OY$LN2L1SPM#E3aaN`LC`x z&`mx8$&k{BgZo*~f4~GAU@s!Dw(!TntfpT+vgwzSVe~6)2=={ch~o(@EZUSh21R-; z^-y{(ZI(e#zC*%m$pHF2eTd~rEe7h;E)`iiC%V#9CTwY1uc{=gf2jehe{H2nXJR#{Oa+Ui*r?r)U0Am=S<7 at yc++Xcge6(l)CR6UnP>hyNt;s5 zI&#!fZ$);=wjQRn*lde~^`wPsb7G0LQeuq2MUE*uYkUX|4fDZi(!Z+qHxm-bN>GHO91g|22FMW_*!;@6e*(z}ND(-pjR?1XjQ>R2VlVW>4 znNxSW)k{v=G(_DW`&8>4M+P~SIx@*>*G8J9mMfGi<#4XLB<2L+rqiaQlm$2`)fgHb zzYUDNrMQ{AtRRKQV9~b4c5d zKX%9%#6jdnH0RDbbRZZ#Ki2N{#1yu^f$he3exS1u?0_7s0VvGq(M$nz01krJ7Sz3M zTwN#i+U)qpAuBu-`~}*fZE>2nu*P%u_fy?0n`PIT45gNJ9cTea1~Ie7c+lDIbohST2IO zJRMJkFk(6dyb1}nJwFd^Ux|{b-i~s at -Wc<2-U#!wwl=n4X6FR=KS6Ug zS$^~83p2MZA*2G6wo31%|H$BrkUr)Uh;%|;4{$aC5kGQwl#MHwpnu`1SBwk4My76r zcRch2y4{sd50Qw at JRp7ozT$4ETL;<6YpGXbD=%br+Rg4*JyytW*tHK1k1lez68X<2 zp3-eXPHzi~FGIgYdR`Fjze6ck^KtQR3eH)^eflTQLf>x zG*@U>s8=fj)k7i&{2R4F2i*t0TIX&+KOjPfRM-&I5a-|DJ5)VVK8zwH9|D0{Ts8tq2{AmD)4H8VCGDKe~i<$XA8$o<^y^Y at D#knjxASHmaHL)87R zA+Y=4-6fR(WtZ{m_w~x at Fd@2No`{#)N8XD_hs10YA*#Q|^WTIQL!jaIYOM7F6A6Og z(&yES8gA?v!gqd&cv#O3cU(|j_C1e9v$Fuy#>^|gWsUndZ*s=c3KpfTI`wDFXD|g6 z7`WFi2TBIOh8P at RL*B%-CT`(c7c_Tb5T6HtN7(>eQn+xfiJZCArOq822b%%fBpQ-VrfIX;U7Z`hn?>st!pG7T2g90{q zv>dX%wtnJ$s#|X52Yr+KI`#-teuXjk#Mn(n#V^MYSo3;SgPk=Rowb_P_0t&iRTvk# z0y3*I*KD>6QhWNlIs``)f at l5zO6>j@`VDaVQp6QP3ATc(0H65Ccq%19nM4U8nF{^b;WwSUOsXkIBC&GEag zy=@d6;BjtWLVu0_WOB|;_cXhn>UP)vx_@^Dk>SD)L^4C>9kXuB&qp32zifDk<`)B` z1{Kjmk^>s6o?WKu87|VEzd)cN-CgNCz6-M8ug}Ao<8vZo#UKeFb1%YKJ%;ysLK)e7 zsFA0RSu-<-KV^GJ>I?|lt5urMTXcm|Xw*Ycs;<`a-x7V<-3X2t3ry>GjiTWUJ6Od=nI_p(2-M^d(;av51Xj z?pxXybfc?D1GN4fOrDe|sukh at IFyI4-{L9x4qyhfrrZz^E at _d!=LuoTQPA=sYeZy9 zJc;lw*KK=E{B6Q-&5?&s+hNL7?fliEjcBe~?px!lW4!ylpoCNzd*QMIPBBxSF-bll zdgF7bm?)B>?0zNRI*fC;a2P{raotfUF3TKKqOET2v_O1Txg1*Y6Y>E4ZNjE~`*1mc zM_VQrhL>O4ir9j^v)byaWUw1C7rDmq5Ax3Gvny$EZ5<;M=g)j(wOdzcYa%C5DLr4@ z0aG0q!<1qCC{Ii{IwLwv%^^oIq7O4`7yH>=w(U(CxyTm07|OSkUtC-js_n(cUxQ;D zmu|ei*V!J0_`s1_-XT#>-w3 at g@{ZRVq9%dyE07}dp0SV`)YjfH^`Cl!zCq zI*{SmCvJs6ht#JViBYV?tNkIUI26!t-v7B2u-)YOkqX_B!5CUVi at 2AD-*pF~{}_%o80Hh!Z7_V0ckb)F}A# z8|9CKim(Xl2wAkW$1lzi@~rsVYRSH|BoFC>R?-Y+dZ4W6cOu;m0sm%XZCJc2 at EN&< zCV)V^I&wv1sp5=ZRwEfYy+rbl?T8mB at a0h~Vjg3EJ-B?(vco{?uS1B?Y`#npKgtApMLXw0{V~%g7+kdqcb%)9fyainIIKS8vE^c z&?JK+$T2fPMP$_t(ljx#4RRn`0jK1(C^U#(C?Mea?{)F`(#ToG0hrTA-!1f?8yHxc517RR@;%= zrDpw|b~0uCMbpvT8R4>1oss|=sdtQEpL zvV^BkC!fg>>E%yds^YfVtiX5?rNQh=B>GA;v}*1)V=^a;MT4- zjl1wD0U=n0NXeR$mv+NME%_3x~xty~7R%1F!V}MZ`K~7CcSO zQD`II$USHlJ*~-cXp>+=v6f}bI)1{JNzFkGj~m|Ag$BvvrcbsF% zD_G~u<1g}6a at V9UWzF%Ga+iDRIZLw+i_#Jz0Ex_)WSnIady%lDX4%hV?vM!uUnzvg zjBwn?B~$AZpq%Ll7P-ihl!ZD50MSzhF)Z0sN3Eafp$QrCC~3-d!q$J1Xm|DCD0h zIU0du$pK%4hJL+;+lqrppdGsC_BYiY9;*lLbrn%ik162oFa1co6%x1=K^qK@#Q9|31Oxhp-BP-50wp4u*IFpesWq1N*xmC ztEP=MY8~q5g)Ahb(uB$#3N1^en93{+roIfH(gdmVZ?XzwE4x&C_h+ps_uh4vI(;HT zGZ6feyyjm22&e&(&g?|=zeI|cAOV44(8Nf(;2paX&~gMFFezaK!i`~i!b5}1!ck$^ zLSAQ-qWoEPgo7Rr2hL*!a@!zMr>k;=!$bovshMZ!^c at J(Yog%KbAh$ghuR&)yYr>5 zNme<90Dl9)FHyoT at hRkRyzB>v%f)981kYi-e_f2{ty8E<{g2{t_rS*R-_W}LIGF-sxHxUgP-Xz26so2;gg!Dv-$-SVP; zovQyEN4tDgWZW5pCDo|pm4ON^J^gWjE8`-yvheIydf&9M>Xg~-%$uz_Q3F>tOJDj6 z6PY`p&&lrCkT|99JK&Jj9<#9`zC#5r;?Lu{PTXwk9iC{uq zIz_pzg5&)GpSGr1_oUlDOX-WX#d_5oB9v!n>i7U6VKsM6#h|Z=Q at 3)btYI{53pjkR zmiFNIw2OQW!=kF6zhJsWW4edA_j1qmoWEnTt1tk#?*9-)HQE?`p;DT~RU|$VI#Gu?^*$Ddx&mz6- z+`)+iiuZ0QkNKgN^1WN$4OeytDWc})fBn8wgS5cPDw(%P--l0d%9RfmcVmVkT#pws zax#JX8ak7(xOsYEDvD#O27YAGC7J6~Ae|OJLck;EKB3B>HYmyY{C at I^>-=g-QkmTb zVQ`})IHT$bp3HfvT16F%((hR>L~Jhq%+VUf(0N>{oqG%7*3U;5=}=e~+T#yQc%-Q? z2{n0F={509xO%ouc$DGDJ5LCCuov}}^U at S6h8d)*kb67E{FHmh6swMieh~{=r=Zi~oZ^3^g)hwigTGLcm6DTE`A=;z z`)?!N(O%_*DKeY{DEcOqvgYEn-{f<`+PKmYmV59BFw-C$)mmX}a|UTk at dlr&7sB7* z-{9(A^1RC{g%S$t3|pO!H at SN&huv{uMPq at QTeI&w?l-=@r_cU=Zy0 at 4JA72+>THkmBihkTcA>V5jNqV8&DLkpJij?6$rt zytc6|Hiw9HCZ>KH+_tGLmUt6C3xkB$zCMf-3CNN(!iyKt(Nf&NkScb2`W>lt+!>SA zZLb0qXHLA>%{AGrTAr9?Enm`K)os&I5m#eHp>-2dr*Jq3`GDrSrcGD+=ClO^8g^st zR+dhdOa=YYeG=&z^ON;L;*P^Qb9*||6qe3oCpDhN%=pAS*el-HkLYAu9HLgmu~PTq zzuV~+{dQ9HbPVWKU7?7 at w$^UMiJfN0X72Y_!{`dLy~iq@;_rLLdltt(;1ubG3bvtG5W6WsnxL3C{ zs8_MFlW9C%H0gRP3`tUS-CMFmmmOD8-3s*_R}+9>DK}Fq(({$vd09S_OgOFW%$|A4a^%m!S6TG*#3rj5k4l~;1JZv;~@krI3OQ}8J>)k8kQQSjZ~I( zxwAy}jvvTmYh`Oj+Q&Ul$KEa zE0sVT1csn|^BSH2{O(@dznPeN{5gKWYj;^jlppHrP&yu&}VI z5K04#q-At3GgsY;s?nn3O(vH>O9?gS52o8P0}+u%r~pi_Z!e2>1ZWs?SH+Y%d_n#b zh$q6Th`#5vi&ml%h<^ME>>|0;t$zRLDuhuni^kgul#GXmntaSOhus at 5cs z&tT at Q!- at pyg`PhS>z1|bN(%K$!kTET@?ipGUk>@EUtuEd2)b|ix_Kz}?xZfu_lNwF z=l_R4hXDc#l`$F=R0a_g6!(9{82rCv(C8s$lCHVcXD4lT^svCH{p?($WXINJj&Nd6 z9%>Qlt7!u1T3hSrHwNuz?eDG6dn9!GdA03Q{#M$}=wx#X`7BP_-W2EL*!Yj{c+ at L5 z^t0;G=g)4~^i)GtzFZGp_;){=!~*~HLp}l;jJ5izeV_INe2+si22i0UjuLuIh5Tz^ z`u9G$cu1h`Uxo7f%ME(>9Qxhj2l|@~Vh{#00G-AukiZo~VBctt#gG6AcLi{7 zD8~cHV6@`_B(V4R2j;E8_y_K-N$dv;@W=QE*6lzn1tOS?Dp=ey7Acl%9*4icjW38S zR??K-B4f~5Rtg9`z6Zx at xhn)G(?LSySi)b>72T#Js@}^BG9;~>$n%(;=!kJoqT0|Z-Y}`XAe$E|E+toP at f+GTV}uN&n$nfeWPdC zF2N&CvKz3}3BMjZy#WDxZHH-1dPx3chsaJpv zpSAUU>)xmst6`fb^ase7N5g?d;Rj%f0*kt-TGI}`ss^|blDu-$9LL&rZfk5Ys0v6T z&Ev82d9n{T5`O&XP^!5jg;^MTz{EeZ at AYJaUU{HN5v_K{6*xr~J{Ux~m4sn4Z~EKZ zPqeOt10w7){}ZI=1yg|w8Hx=eXc-(%7iYOuQY9qrRH#z(Ny34BBCg^d$zpe}rjuzj z2hs|&Xc*U#KY^bj2R}=QvEMEWz|YL58mQAj`wM)F at O4XoY|gQr^M^@M(^v9v|V!?}$( zmS?XSCW!~HUO_# zPe9SNuec2Q607v;Q<<_3jgR^R%%$v!(O!u$P`i_i2uzu81C*+U+Fp3!jwqlO+-K;F zNSo68)PucfZ399UDOUehSnNSP|4l>t;z2vqes{2r+0%3xiDtur(IM5-075LbMpKT}7-8x~wf>ODi565t?sSWEBN!7gHQ3%{v at qq=gsVIX72yl^QqS0sJsr9UW99^u4pO?rT%U|?3TM!!ih5#nP^cmXt5GB z<5^bl4wpOY&N5VA_!el4XE;O=Q+_>Iw5~Eght(!$=K$Y7=>GaV7hm&aKN2s6=4De; zk+427o?GaHyn_vBBPk at -Jt?HgfYnY3=Q#2><56FdVYSU{fOt9G*(h5~Tv!q5=g>UGnlH4!2*h{a z_7`oNQ#DVOIR+Lj;nO=d%-X$`yHoOY=c6_meA)}aiW}JPHidYh?BIN`XbJrFY$#RB zH>lGh{hj3adq+4B+-OwQ@$>-VVV7+fZ`Ny{5))m6?_UCFF4B^8S=8e&ylT{fRPwh9 zNGo|?F*=OtPv%z*U&+$>+dVUq0ydZ+S4bvjtI>N)S at K4GD;{?%QbXvDjO^9dHU&J_j?S~t(yhii%oz7UEC at IBKH=NwS{m4vxA at pA|iv%tg(XiF^D%T+}c%_EN ztcWy%=xblaJ~0 at HIhNMA_0+^KrE=anrJ3yYWV;km+?@wgr`d~F)m6cxnFKWuH^Ssg z@&Cc_lhT;BF=>uFS;^8}f9};f(2_50{C6 zD4+T;XxS!Rxl-4K{?V|DQ7D&@@8%z#iT)McSL at rq){qOT8aAa!88)?FJj(K~H-V%n zR5VZLjE at R4Wog8p;cR{S^SgZ=6uvyQ?@_Pj#LST>Z{@?EMmBo}f3F?XipZ2Szp^iv znM?pj>-bd|c}$u!Yr&x6Ub&q8t9+jIoe67ednQvnDkI8P?w?sSbxeHT^2vjup&>)# zxW;bt9r=tj5=*AXIc at mY9S|zhl9*iTbw#rjTyv}VkHzUxSL!tFe*G~^=eli-r6Ojh zV5P#80b7T3_05bKYn;B)dBtYQcgK0RVBZM-c(PQ=d|UWJ38A{-%cAm6BgJUe*jq`x zWA}O59BD;gG3-#dRaNN(aO{xbFl=y$jML_=5CCJBh7wE``@fy*ZLQ#Asja^u{LA&m;Iu at mJc2YfhiDtZ z1?y1LzT5K%O at EW8i;jYKNW=Lu&xeMK_s!>&XkUO7X2(wA*Wr;aa485iDsJOH|0$pKj at sD8u-?B5ekF{QS5Z#@b`b92A^;mm1b zDEo0hbpq}}vl%^ouw-t!N`{lFb3K+Fpm4)N$Zz)|kl&;TPlkIE$Zx8T=Rl5i-QT3E z0Q5Qo!!7oeyc9Cz9tA2FmVS^rRiDF1iEw!5 at CgOYoVd>=q{`X7yLCxElvpKzCMGR- z#8k-}AoM5nJRhmT5)U}16+B`J^{f7AZ?Pcy84d1_T4mdPrdMt?MWu%TfkKFV*7DnT z_c+i6Z+?>A+;{h{4;ohgj at kMg!DGU-VJAwhw({ly at tGT-Tv&Wl_DKh|ldkoCp2-$+ zSAK94DC%O`a1i~%l&w=%(Z%MF?UEP-DvIT9nE5hSaVk4!bF!6PK(ny+ChXG>BA7(s z8IU)wh0ys#fik9NxCac4iy&$DjB^d?8 at 2&;y{Zp$_r7y3iG20}DZP3R1}Amd2XrnQ zZ|FW1AcGU5>;smYr8i at r0?^A00(an7(Nf6BJ=R>uv>Z>MvS>X7=U!p1AX$wM(y~f< zv at 3p#s;lIW+g$`3Q-rECRAkHr&tyglZwieJRQJ=vNO^Q2W^6>NZX^=kgcfxSBYvty zTXlv8;79 at xr~w3*x8%x0uk3MTjaURjsH{OPcMSXpYCpd>Va$(^<|b5(!11FKm?IJ# z!ntx7qvhQ4cEVDGD%}xvqM8KF+zvF#H1LAQ^34I4FW0Do^9 zxT;;*xVl{FxSCw?xdvW&--`E=kjJuxM;s{~9s)3gu}zQ+j$v+Xd!Z7>7D6YEQ*NdG ziSuJ!f-8=44lls?0J?s>{J5K+PIo$Hes3z9Sb+%nF#{+I69*v#M>iw$K4hzX260_N z at 1OkR{s;{^e3vyYY>=J!5JUur|9(-@(W6hN(i!x+Ngip74``mB{Y(ix7xj1DL(KJ?AJ)u6-RndJ&7Hw(J^jusPZ zVjIaxZXd}JP(?LwYo}{2yxcgeyVf`imLFlXP>~A0(;bV7o-=`zvnUt_FKzx&d2 at 8q~eT#A?tPc${B}Bo7B)W9V{3iI*HV zhhL)+KhB7Ey}((x_%Ft(V at JBnMuPoZvgb*n44wkY1hV?lZq?JMB7eGHGP{Awj)=lI ztDg1ejY at shE&J_Uqx9Pz?Y?n`4+S+5r|tT^ZFTnj5?@{tCJn%^CKZ(k<=4?R{cAd# z*l0WxZrQV)#4y_yjQQz*Y(=JWNDa^k#N z^mm%N&Xyj6Y78|eUf*t$|H&Qbc1xR)?SK{K;N#Pi+%x*J!>ausci9eqnbT6qW(5A9+<}utv|79e9+l$}jQ-Zq#=p4(g2%q_n<~HyMKWqMj~K*-hW0NX1A)P- z++o5;^q>Q{AR2n_6GhUh2w$n2Tbm;-Vs2Bl6Y~V at b%t zlC7Z{Epq%DJiwBe_$PQ!fa$-ys3}qLFYrJrSPdm$43Wfa$OblW;+)SKZovLLFmY_7 z=tFkwAjnx8nhZ5N%@iSA at 0$=I2a`U6h4mPvM(9sR99YX-YD7Iz;;~hTi{?mY88 at U@$=xUI2qlEI!zH6SIXn$}^5ug;R+#ZfZFb zc`m2`>*t)-jYPq{#y2h z-kQcif0;wnhcjdaPz`d-?8ZM6k%|({`|BG={iUep-pYnKAM%FKX>I39FeMU@)|JUyB%k+RqbQu5`ux^>U{oQ$y>53#y8Qqu|Mp zho>%QBJ}8?K3uZv;OVCC^48Mj!*|61I)NIM0wD at I5rTRP1D<*J{PW zk08vcAMY}rL{A1q73x_qcW#IX^FkW&^o7iXusLlAnrIyAqjhB zzO7_8CUn-!NxyreuN*Fh!pYQ01ywaEtPmZ=+)tRy%GTfk(SzC6+m!WN!BFkCf8Y1%JuveSA!KIPkgKhKQ z1nX2UipF{poSzkDj+pR$eSP^1j)@FJRn83XmCJE7y2`es>97k_z9p#9q0AWon&~?U zP2yfEjxNFigmM(h3BrB(1b)c4`mp9_N7*C`*JN#{#Iw05eOR-GH| zDHoM)vgrNjx`r1*38p}t!WIdnQ#Ti7ul30w{FTgAci*Ab3rZ1K9^nj5rmqNVq3bMM z`SUDjE|=3 at 7$TgG*IUc9xLY$_vxer>QycnM_>N~XZ(u@~hz0N+#@mYI1RehUvEJKE z!ou-EKraOaaGl_dKXfEult12;^pt(9xk4XR3Tm_ zzJ>HlJZ(Jp1m}c6`~xXbJYGDrT)aivG4zB?yb@`KK)tKsX(#+2O~nJB5tda)f2IqE z?2!CVIaWFlSQeu`P-a~HE-kGH?O at fLS z;!YIEcW(Z{@&3uRd6R)M=(QP1-WU)*ABWKj29%S`h;gwPwVb;UZh{wlo#B-ixa_0Ix(5N=k2!B(&(kF7j%7UY<#ASi3d$+I ziM?n)L&-p>`#oC@&M$iRvW^>Cura{0o9vhBltVewgbuHcaHH9s&K-|N at 5pX4G;9C+ z5zU&=h897leOSXWiE~>8^!-YT*ekJc6LQ*3SIqDZ12)q$VC>DDb|1P)y{Q?xAQPYI z(=Zw at ULNAu{sht>dSr~eI2D(Iqf#|&jI&%gxy^q{q0uQ ziM+w2Sk&rP_pbo=c(&DJ2O9c+-8i?uqaQseaqx at -v)<8r=GEf`D*DTB{1Ut~yL-8W zH)88Ic>B@)jW04GGU1YLkD*`AUzzV0-Cf_&akmU#j9TQ)O5Hg97)-ZHN8}BGSYgMx z_FW-ZV$a!MQMgpdqX*myUg_3Ih>RF>+AEVAqv?M2yqxkruiyZ=0Xr;=5z4%32ZP!z zL=o`3lm#lAEwa1q5m$BO3g_V^i$dt2uhCgT%@Len2SU6gqe4_At3sS5vqH#&y%yyd zyc^@b9-0ajEf1kfriJ8%+9M?3*pmuNRC+eXd_4nxk?adGlMD&j3zbEn38h2uL!3i@ z#?~iQ#?&WM#@;5qqIYz|{M;&(N$tU(N#`Mmh|^6feYMl*EV8?qKcNjtSGtICEJkZe z=$|xdom2Vwp~YBE0sn5sQiRr;+P}%U`*WP^59nsa`V}e-fT9H;SxYD2(dMzQV_nq? zsq7eEGL>1frCqc z2;kCk0N1r2cNkPvDa&;Q%f)Z=BR>Vk( zBYi{9&)#x?qNy5}`v>l#3GPS?eNSCJ-396Manzxfe)}Cx9>j3y=~vnOltdq7QQ&s6 zWX9uED#)YP^-B1=dj2s**_GGIQ^Imo5sEZQT=ub6ZuyLlmit@<)c&i9`K86&)82FU z;N#D3h<|W+eOp22s_mv%f`7%Ho%?v_F48Ct_m2^+kaEI?Ly9UMr)4cd2Oc#oN(4Kv zKhq~~^HbZ2eRUNJumQam0VZB0E46DKhQGb8N=^g`{&7DV2(O`g7GGmS*P1Q8xk!p? zXmUA1slB}=TO3U_Hco28nP)rGbs7CWLI$%)gP3K5&w(l z_qq0mlch+-nj(fje#LYWEAKfzPFkGSpXdszTLD=<>rR}XuBwNjMUhxaxvQ0c zwfw7&T)weB$E!*zy~hC!Y!|G80)})f=Zp!RlS5xF>L=Z!(O?3COb-YpemFks}f60m4AMnMb=9{;ZO>c$`{WNU8r6Uv(pJNirrcJN|0`} z))Tp{RTA^1$3BV4dLR^VccDS5>N{C{1g(;dE(=nzeOko>!6|5__oBi8D6G&`&Cb zz2FK)-tgBNjKvxlzpwo{=C5iR2JsBi0`bAFXCB}-W*uPjFZdgq=0SqRvms7FXdrJ` z&RGIDQjj-X^K1qzEBgRFkaK_y$Pq{h4TV8LV z&70N!psk^yI_{m9+u*t7nf!(80s_CSu;OLCwj34T;%HMT-tl;iHuI1|vSqErmZCpj z$6a8=)sQcgeQIaJb-@>BuOEBaNpQ9&=+x^!<4H!$KTU(z%w2v`1_ at X;WUAk^E3jFc z!)dR=p|?79(%@6nd*ME+=TcoVY?*y3w at S&k>DE at vvFdu!r|UAa`|dQ+_BS}_TYkM2 zXft{$cfi`pe at FRGyHtyyZ|RETz>-PAkd=IC_d8D2&AuCIZu< z5rr^=n)Nhc_j~U`u`YM(pv!pwNok`-6I;tjP>m4a$oQkgqla6EWv%_Jcig$Gy)O|^ zDB-*ERHx2kvR&tT;QRAyU8 at GD`{N>ay+yZ5i}(x`m5jaJiT*xyAJE)95z*dk#KiOL z-8Jz=YlSzhkdKPdccn_D&3I>hK~teYhS^!`2~ksApex<1cKdz)2&VRCclbx#fzMfM zVy4c)!5(9SCSXjY&aOq+l#~xV-b*y$awh~6^&)Ib+Hw2J|9odpN+A<&~^9?PhI1r zupSk>_Iiro;W73<{|RV6|GW77s79;5AN>8VtWQjbYyT5s=GyZ9{&3LQUH&11%WYvv z$|PG}@h?Fnm>K?F?qLIXOqMykIjuP!6@!OfP`9=IcPXxt3tMX*Hrwv({PKpZm01U8 zd*fARTjS;4S|6E*Y7oyHHBO&Dezq7Rjqv%46>Wx>jq2`l5j at Os*oVmt` z at al>YrKBERNs_iA{1vWaZ>+3*0Ll{I?_bBImllcBofQc+VfQ#}ZD?v$>jmN%5c;Q4 zP-HGq{yR)@!~VwJMf#U8Pj3KXvhL@ z%Z}vN4^niIzXYMkeZ?#u1lKOq<+U`Q>C?v3yuwGOyHh>oEPK?eTIm^6pBR7Pa2B_k zT>OlkR6PxujU?=fb~h;#z9A;F|cA=3nDfzt8Q zW~XPVVssNHiTAVu?>dZjDCY&@RJe<54U+ug89I@$j}{e}Xp6t_q<;o9P*&L{id&7q zGLq7^A`sFqZty9bBc6B2ON_&iQhC7hE1n~}<}Q+%MpMEl$)$~j)%_d`&o4)a(su1-rzCI6;MYr45*};2FJw{mXufo z-N{c-TPRFmAH$H%#9EQLja#7Mp<&>iubTyoOk2euQ*Yrkkh87z%C6jH$AL?#SA^@= z)Q+__9DWdVkf-&{RcqLN4&4aoKgI(>z52jO{9;d2bul0zf}{GyZgc8vRrhFQmb<+* zb;29kWHeibXFHl#$Gf0?;ZN7bq}>A%0ZmeUPn>7G74xdDYlgOp;dF92MMtT+BDYfi z&2X+X!$q(;jsa;hyDYR|n6jg8BO2O7E`DJ(aT7mrVbG0yqu}E)@)NHhpX at dk*bo$9 z-0;pTVdTh;v>{{CE$J6Z$OEk1F}n5WdG{$&`$AAdw)Cf}@N>Iof~-8&zN^mkz7$Mq zPG$e@{Upa;@~7d`Y&V+S5d5AB{V z6UiSLzz}Jo?G7S0 at S+(`#0Kf%e`f~iN$X1Mjp{Nt>RL99nrF$7a(UEt{L*H3cN6gF zQCgK{wB*OWwomu;P-k^(s at Y3X)X9^jaXZZOVIqUX8FC-mQgulN{;YY#tshd3cZ-5L ztQ{4IdcdZ^F2T0ICiu*%Xqeo|%rPG+;Y at c(xIclA`XHtMVw(1t(DRrB;>UC>($P`N6YVK`qfS!jddI zfokU%`Gc5O0X-=+!Eutho&63vX!FEnF+VScgV8(|b0SHUAnZO`>FKb&abGg?QRv>( zP4fA1A|UMf#IQ4}o(5vo$^P4T-sfKOjJdt+0c|T8O6UVTBXCp2dh_#fJt<`EPW!ji zn_${u#@CpT?u8fVp)*9JIvuSrYs9*R8v^}-MR at 2>MOl(44rXMM6u5s9$+d-i>3<7Z zQ#yJ at Vo4ZswB33{5aNwyRt+=}5{&j(FDfJdkUUSZX4qZf$iyD?vvwgALp0y!HpV)2 zSaB(-Y&YAK2_*UJ#jzM}N6^L#e_gyk-e|-fMNCEMoceRpE!dO<2i60n0?~ITv%Nsd z$IA;(OtRoSK3hG!aJ$z zfgibCd~>bOAHpY75AUEKHvt2$KMrO!8uEXjLZ$bB&VuCn*i8CNehfC$KiBL$9O6Am zq+_^EMew}w6#%m5$n?K}^7OkhDVC<^dX<35ImD{d3Va&0vwaG*eP$Ev z(iYx2wNo-*9JB`g#cL$Xm+UzoByX`_3C6urnW{_!IC}kgIirWmsrgjD(I{=d+M!MyCqZ2mL~@SR|jG* zShZ(;h|!<32vDeD1ZA`(U;8W8z|A(;wk1Ne>Z-F$R;t4xo^|$F2aEPt4>|fQ)&WX2 zw6iV_ZK)8ly30&8hqhRVQC&J$!BTZTM5IoeeV}1Y5romIKlWCnU6UoYY>)P!SGUd? zSi2?&Qft*;c&pMT$rM|$r+GNjcQSvMteKlNv2P25h>McRrXjZ57(z?HT%?lLRwk_ci zq%D-CSYxD|q1}_^T*s-LpzW7wT<4o9TKCNPSO1B#P5U*|NB at cAp>2C1w{-23b&xhf zR+#=17rldLq+aQo8J#`PAgZlrs9xl}l`pN1ZCWjjd<0z{*YbsrQ^V`|+Kv$!iMc}0E z0`OdZZz(8$>95p?+$H=UgbCGE0eZPg#}9b8uwCX=?6|NNw6dJ9wLB^4ZHx@&1TLzy z+bOE;y+2c=Ik6Y?s~UNhGLdMHE;OmFg*<}El3eMCy&NORl2UP0MxFl3{=pDTa>Ph+ z!j5mZf at uxHK^}L^8w8}P${c%zm2oafGpAp~O6M3XtE#Ta>u{z;$>n;?=UOZQen(cx z)9vQZ!gHSfiBiC~6hR}3i?~MK45uOUf;-U?IU{#}YcZwuc?Zzn%?bG>z0zLCYI|Kj at 2G{;Ch%Fw<-h}>R*_9)7W9!F)9HDw4C ziL*!E)Z!e|x>Q)_Wl%d)8hmG6{mr^Xx>_hjnRYqptA4sk@*G*jpJH^fh-X8ICXa$> zI`t)PG|Y64ij&a2$1YlI=LChPxNUVOMT zb$Jq{z8xQ0;*RB3QlY9l+5!?WllE{~c>%BRA=_ZqHYuhlfrTMA9ns%_`PQc<4|W4e zrzwP^zf&Y7*!DSErNa@$w}$_VXBihC#=PFQf__aTKn at P zKoj81BOoWNnn5Q`K$GMSrgP|)&yAcoI-CF6yws$1@|}(lnRfg5A}S_1?m|6GKPAdm z*r_5p4iZ^T<2AlDnIHPSBD2MV5%60RZiMVxM1vOhK6d~rNl2BZCaa>tv(NCveAMW8 zg6{K|6vwl%?K>YKAMkoq7O&j$T$M882!f!E9D}M?KEaHzKDNhz+U{p}8H*^8t?>7u zycO9OZVQbnPnrFXuxy| zcdJvHNZ*t+BVqi#g8Wj;c>aqAN3iTzbBC9k>QVn8*j;JV#K^f2T^-1koc{9usKq++HKMDIa^(*^BaPmjjU#5i`O8T|^t+Nb) zp>p~1DiQK#jofSlufu>e5dOWF<#w@~pT-V<%&s at yjcT!o$U9v#-qq95cT%F8ATb+i zvLrw at hDEjf+~Ld1|I*KzGubV9jnkEzQ7>z=2I(<+9%#BUpXw6! zo|ti8-WBO+Fqp{axw*>^Y7&KGRFsQ}w|f4j7Qn>9XgLt!=}N}7DOOK-HLXpGVe%E& zkQ~ZuaTvexhh?6=B!Qu_s@`WVPPnM(2lsKY?uV&~|JCGv|Dngi{wKw^Wdrkp;HR}F zDUk`kOL$*+j8%b>k-s4bysN$I?=coqeIhVqA|roy>#ldWHouo9%)D2a=#P!R54|tV zJp#KX8<%X+etf%+CBLe$0tx&@fcKM~2=AJ(|Kg^zvAF&#pl3$Y#?Xy3- at Ll^Sm)Z$Q at n252NBa6Eh+jQY{|8xar zIOZ_s6uoHOMA||1S at mJ{Y4vgSdCsu1;Id>Z#u at JP3uZ1|>*iVWtU1mIE7lp|bjEZD zGm0*Lvu4X`<7zXrx!!DZsMQxGvKh|wQ|2dTCSC33T64X*=5Q;P8Nu`?W)fZAW=Hd_ z+2*jaAlk|0No;eZ7HM7ZPS+8MVOyiLUVC$E^Qi8&E;u6ih)tMrsyU8!?5MF+Z(C1L zS5Oa}R@$xC-g0HSHPswr#itZ*g`tEoW1McB{)5 at SbTuFyh8aQcj~;pxsWp+Qz%b_| z=cs$?Dd7zJ4B`yK4B?Dhx{|JHV{WMpzOv{?e<9z=7>2OOi|++*iBFpL#>uX7RA0m& zUx=4(njd`xysxY*ui;~q`@ZXH{hPVk&+Pc{Q(%yeZE(Xd9$K0|4HUQLeIKQVUN?(K zy0KD0*@3zNNDpM7+RWU at +?wmCXBn0LX~uj8dq#bRbH;tc%_Ge#%`?qA?megIGkNJf%-#mp%rCmny1(15+IDTWY`PBaf1XOr1k6aK zN3b9;C+MQc@(NLscLJE?M5&8a+ at I{^iIKtteHM}WShyDupkm-^}jsXmqOo|nD`fq0#t^E9FJ zx8;Uj`2oK(KDiTDlE|YpudN!a8kFT450&o9z;sq=RDbKS{X+w+$-Bb at Q*;(4IFu&1 z6USawd0U<#-t!`K_*Sg;V?m#|G~?93(6aQk*$f8W!0j1jaM3ngvlcoBIK?##*dBXV zdGCzRT&06M at 77+77XO6ju8Z#I*BGqUZLNpVQkt04r}<+G?~QF=2f*Hwhx)sv2$Q?P z9U=D_yQPfbLHv)t8V=qN=rGqyTdb!?vq(|c-<=*+6jInkHei}W5!Z~W;fbL=xb}lD zj%-XtS^w$X%$ysFGPZy(hJezj|7Lji(1__UrV~|=km8mEhC3oK$701dVd;m*%7|{j z8$g8lmnSo=ZtTn`8=gr7Z6?-$@|!#J*y+))v4%m;T7m)fH%8`(v?HAulMoHpFmT(^ zh8f&*qzPL9jJ9=$L&>HJKVFMppWYjOZaCZ#$tZ%G;5_aDgJ>uhJEbVIXfRiku73*H zIya2=$Y4~?jW<2|fUzI%%(Muc3Fgg>fgBwl;qYTTjM9&}j4(3e6ky)~{h6@~@DJiq z8V&s;z^aCkDP!JIH{<4 zuoY1U^!*qa)X at iQ?@;T9%y$T5FUOp at EbocnkxtUHND9nA*k5k-V2L}aPUy2JF~)bo zdTF`0MlhCPnB85;(S)lf)bC_qCu{~V8)}zj2nk8`XdBAkFj$EeKvs`3D1vQBH+0%5 z3Pq6yL`JF~Mf=pL6TG2x3%^VFQv=(Oc8J7H1FAk9m?ohf#N401Hdq)po(R}LE3(oo6 zNtEN-4fc)-|NTSz0A={u-|APZpWea-AnWU zhDIjt2geshvw;EK^eI6r9D2w0OephG7g)Qi%sCsKb<-zR{0u#4g?%Ps*F z%}@s|82uRzD1nrp4(#a^gBr*H5+U_RAVA*+!yaS+5diE^FABF(NCBaLH^02=-HDA$ zb$)wO8~wn=*r7jK82uncaIFBFM1Ihc4;dX5;CwKVq7IUL1{epM9DjwXPX_W~zu_mq z1LLsYRD%zWId)mz;qC$l&338YW$pq;v99nx=I+}_)8=!cx~)yv|2i4j>hz_W~L%V%Y(ARnlL#?E2!L<$V{fnyFYDs9W615 zWR+YV6bW^L|4mzp>K_Xv>?}y+HATFJpT`tL6;?jyzGWzy8Pt>P2vWmpCjrDZjtm}$ z=D~}~ZCU}5hMi&5usPxTr8g~rUnCQP8nB;VEy^$!%mNlXny?xn=Pk+bH<$q$Qm$KQv(3SnP%M~0 z>R4hhirMU-Qs^(3zCBcI=DOI3KYc=#9;?(D$r^dXo?Pjihl%W06i&R-Z2tQ3 z$+xdzQ1rm^{9!KiZ@(Zv(BWrDztiH)4oZYSjq9d2GQ2*I|mVly~RO)dP%%hl0?Vw~gV`cY{OZ4-wbt!1Msp z?klz4omIckoBtW1^{s3`niU2L$`k(om_YsSahIml*Z-}~aL~a1Mi>y!d=*^zGd$R9 z;FHnhv~!|eXc(2Y1MUif4Q;dMdfDOfBf=kozoFS*x>Z%;3SPf$y^^cRj4S_+coA6; zSa{f<{~hpg2O;^XuzM#pk_KhXUUOU-U-K!JasotLaDpZcb8<##$j1))#LGvt%Z_Pb z!j5Sp=3<)rSA|T532*SER4hBSi-P3 at rMp&$@tr z143FrK|Rsj=KS8f=?jbVrT267+?+}^ByqPW8$)zcVM#Qr>x(OY(r%LY%o>GynUu^< zUE209rnd3qwxh*(RvH#jZ2k;}dOfweR*SA0yOy=ay)|Wb`X-t&-!=DX?GaESV?9X! z7mw&GJ)KrTn^6xB3;Q;WRZ${yO7GKV`SV+O-=%(?R|pN=NfdojsT)aqHnUr9cTe at Y zhkOfPvzDAyA=)x-&+^IMv+whVlZs8dTfiRu0H<}|UgbK-(Rr2fSpl756e}Pp0sh-? z at nHW)8R8NDr1Fs$CeG$u&5DFH2k|Ij4q*;|j$14;>ib@>c&qo1M}2KOYRxTq>aDex zqiOxR=`}S^43RV4IqUMXv5&NPk0s-bH0A~6jb~u at f>SI*47f|(6!TZ&5>GL?ZZRVWt1NIR4wbG0F#gW9 z6MiG2QS>9dh;>ZW*{%M^&*q10HhiXOW_MrvSiUb2*u`SlTl2XAnP41}7d7D*%?2#S zE>NerYXU=RoGznS+tjMi3?*f&OiX_rJe{DlDvsWUzTRTJcOc5|Hpm2Hqs#N3qoFDC ze>R(}P{2)RDE6Zz=IzIR^f=$Cwk1Q&#B)KAvL4%z*sMJ#L(Ora+JEZ@@vn{Lg`F3_ zP>VmIQ^!!vuCP2+>DjpH{kbUk&x+$p5mGsXhJwO`|1U&Q8n&JumM-4T|F=EgKgtd_ zK-)`iPzLwg%F=}jPNOuFUkIv{3h}Z+s{0>cZDjX+Gk2qIU}2yJS9F at nzsgSK%rG53 z3gZg(W%uD;`0R9l=0 at xw@KdJDHVP4jKOj<$vA#0$6;nJoW8y07rEo#+9*Ic-FI(u3{iaQSRpWf+?kuJwarhFtS{Z&`?G zf3R0S1L(Qfs}t|hqMt}vHuX;3*PUlD>ByS&ZWt_fx(MQz4SH|`4*&8s9odw5J04C> z!wgt)`{ta~PfbM}?-8G at QD#&vkjPOxY~R+Y!QgT(M5m`I(a}y%MLth at Dd#)8TK89X zot0!gKzP|L*t9%#V=mX2H*5^KfmkZT;!U#vWI`%|?b3v&_*<}T!*EPZr)>VO(x#IIosdU7 zqcc~sm@^*L8UwIpbip7ReL#HY=JpSB!&8&|oBesK}I!&~HdiDr%!l_iFoPAvlGsB=5wNhotwGiIVHX)&q4o04ZPj0$e& zf7n-uIxAQJ_#I at ov0T`EA!7da5(wFg&Is2-WV at b=2$lbfv3H8@^xL*YW81cE+qP{x zso1t{+qP}nc7Ca(l2npPZvEG3_uRAAJ#Fv(FuwLZ%-7y#A9IY}`*#5SS70ytbElpq zAb*&$)j=C0n}Thi7^-gKPl}pm-2QaBUP$_$ip}Lzz6j564>w_E<1ibK6?P at -cNTT^ zf*rhjXs_ at 8aIhP0nw_ruiR0k>%qx%bm#{P0n=ogjd_a( zJ-_~r(WHjEo#q;T&zW`mhRT6u;@kvTdy0MeDrktvOw?o<_0ixw!CLMoOO{u3KQUXlbZW}&PMSC+ zrHMRqqk$BJ0M&vF(_+z)^SdQObMnXUd_C8A#N-wCA16&yunOTyuzb0}%mT?LFfNm< zr3*MJLu>>znZm-tAkqx_>VHuZKD1)aRO)>pky5RyNmaAtMxo~O!**iP>wM;DJcF)o zZTc5pu<8+1#`O>5EN|zieN90uw8$~&eA>7#riJ_$Xt<F9|}E{vn=l#tVo at 5PHSx zSDi;J^>6Oi40XB1kx;)ACEXpap_Xo+F{M8A at tPNsidpB`ZZN0G4Q#+Rd>?MqoIp5( zN7c5uRc8IepPOPFm{OCm7U7BgIGlL z?XDq1Ge(*sokHJ;&5kIml0dWnh&KKS&?Nc5M~)IFs#=NgqI>Ik|BtnX%n=C`_`jq~ z^nc=J_K&~Pzh4g+?pxrRgPck$RjY7+uZNakIFVZVL2PA-a>RKVshe8ak(iYYfoDe> ziKgbNsw-E)YM$3-cB|P at f36FG*W8OP^+btEI6I-<$v>{v+_0$3$Z79Dp=Ns*md*v$D`-8QQ#n>F0-wMt3D zY;V&B9p1?7 at HJm_^Lb|AKe?r6>#e!%+GvMoTm^KcnjXzlcP*Gzb at 0H;MGhP at AYk%= zyftU;FjKP{*#Ok&^yU at x%!JUF3)A?iyY`ajnJ=(O*3WR8Jg;@tCWicO1|tr%`#9qA z>V+x|!|}%HuJa*>uJ)>jY&X&;r5hiRbkQuoKS~MN-Re>2xa=d5rB3~CbWNvd;3i4Dy^L^X2Y11~~)~j;57Fxh) z$~SNFG>U?zJ3kM|Xhb}#k9k;VB$&q)o at m0EYE43;fKY|uR-Slw0t1C!k1zGptq9cC zov3z~e!buOca6#zUgLR9uipI9+UP5gmh2VkP!EHR5`Vvf55#~cXC9YJ+Xy%MK=&p-xF#)xRAA@!l*Nker76pFaCq;@g2H(?2Wj&rs@<2Smk2$}ioNN|>J2dAGBijP-?_e<9P z^lb9NhIHUFt*}LWprCj&IGa(1-t$RZ6ZY#9I`m}V0}h~u!hTx(O1xr&wp*sobsMx# zJo?;s at b8EstVLa(YZ6c9LLsD~r`WFY7V z$Du(ApJcnu+weVkqCz7mU=ZRVBqe17F>x_)FmdrSd2w+utlAeF+bW%%?e&-Hw!Up! zpS5j+ooxf#wv88?3orL_PVYay^3K)i;&sCN{M$L{A7+`=jJ74sG z>?lRcW81Axv;c{-3%BzFFoR_KpFeDRiJiQVmcM^P`4ax*(d|lO&$Hhc=K~U=L7wCxwth4dCrOlf<5yhdPk_ z(Eg-Oc_9X11L&LQg`7hHFnSL{D7}=8d%}dl2hg`piLwBnAY8m>^0$z|89b`sS8#Wp zOG$ua5H9{H@~5;>M#vY~H at QJxrFB*Uifp^3PoxDThHQcPf$tv~Aq1g#R)nYo`-42V zFl7)a9vVYpB0pn#c7(751A{y`GbI=m4*KBFQeu$-B14ddjDjTbQ&HiNJ!gf%hm?XQ z at I#@0g6BIOBEzA27KF$IAAvl0D2X$P9D*WLLrcK$T at i^e$sC3t*g#3Z`c4jk1T%vW zx+9Te(E?IKbb_5h2%V8gsgOLkg>ws)4oeWOp`yX^of{L4dIu-)$e<{o_-=@#nUoK? zA*q8+g0_YEg{8|KRmvS%L>6nFP}-nMifwmzWwUv=Io;XYJnZSV7S~tXs!Lq`rmD+- z(32ZjTKY&*i-cpw_%xxx%Tmx(Q?B z{(}ssT-BHnEuKMYLHlNHS-7%zSaw<1yiy=rCP6Vxm6EkzU`wi^cPxqQVDPwcBavVZ za+ecN8c96)o at gB@+NEMzYPBRp$HU0G0>@g*#<@DT9Kk!ycg2lHTT>Wvs#_{g(h}uS zroUm^ifr5?MF1Hv?A-q-Mx|lC&EG5j_- at t7htqHf39BAP!h9 at M%YfV<<0;J=0}xpX z^?H%uVe?2jo##G(k}4NDaw0jRFJ*0;sx~u=%3|ALHC267GsQO~#<;NPo%e<6TdA1+ zv%ax5hDyh#U!7y-^T^X3ZM~v?P1BP%^C*&5a3iykFnXPGF2mntED??)l0aaG+Z z#{jEkZdsEsnVGZISBz0J9%zJj+xHtu;t9j(QOGL!J-GXJS!Q^rJFmGD$<$s5sELD8 zbE{?R*x=pX-bdMK^%s}5thN@4!145O%X)IWJFcFMnAhpQ at i zYbEKbsw=8$NjqmviO|Yf=UC+WZK>k=?W((@+cS;y9x%mD${uFX0p(U_&5oFvW~aZm zzuH!nVnKJvTD<0;ZJ|m_6`LtwkAGM5tvL%5*)?bX0s}Fdx$ThgxXoEt at PVFRQ~L~? zx2uv3IjP`ocWviTWmiTycm6fz7KY~=?QbWTcan3Q6U}t|-6w-!0Fa*Q8Va}U|uU22woHE^}R$t=6pQf+oP}rO^ z9jEr9)D<;7r{+-9oG~px^HH at ca|Vd<`N%0ZVuHa at U269 z>i3)0lq1sODLp$w939Qw2lIq>y`60Zmc8!-v#7Yv`eb~W at ehapy^Dq3euiHV4DPui zhhSGmw%@slRjy#-KIPMnJyD-ZZpOCVKdy=`b7>s9cJ<9&+vhkrbsQVpdX_D7=iWJY z9K3c8jb2%E3OTs;?pwQNt}Syj_6EjJGC8_-2IfyTIlA@^EnR!(2ss;@yVg%SIU8HO z`{xWfoSVD$PZBvkcKc>e7C9Z8ySAyQ#diTzWb38VCSI+f05O;ca z&iOeW+Pp^3m2)QS2s*rm&;2+aI(`SvrEn0o{!W~Wu+MM)9XYqcLD=Rses0RKu+3+w zsw%>87f1nlydg&-U>xuFR%-n%+wo$;9m%2XnhUJ`2LD;kE&4rUN=Ec;Keuk={mu~h zP4`{)2jjKW6?o+v#DC|d06}1#z>iqz`3ICi;GlNDPzUf^Z58*G!yBH!!o?hdJ&imw z;ipi*vTO7>q8AEFw1h7_%YvVAd>Nl)eplvI#K9S48L79Lpnrl-0O9*#%p0hWY07P! zIT}AgR*zzUaliTAJ at v@^24p~_U~`G=?Ils1|1)ezh6gTQYY2FMsGtJk{I=OUvN=C| z(74{wfrmz9iPMNf*MocPDm%e78Ta;ov#C8 zip8K)coJMmDK>MqG2IB4bvPOm8gp!hHVg$58f)sL9e4^>Ig?x(Kbo9r<`9$WIaTHu zQ$&&4iyBi#QLJ(PZJCjPD7R?XZ5`39(v%W;S+GqwPB?gTLNJwREHQ&C`YJOSR&sMg zFq$an2uT$horTtLquPtA6Y~g5_!*1hP#GL8RRHHJ2#^P9G){zUh*bq9LE>?ZAD7xNUW1Ml%tY%|~G37{`OJ?v5mOJw< zQ3UPgTw}x$1-Ho19GnmK%TyA~3oD)x7nLM+XWS9e2);{eFfTR&>n{BSRcFKz)QB>- z#t?HjD%|UoGt9ju*A$?TP6>cCLLDw?RusGfXNg6SA`UapVio at 6(i=R1op0o+qM!u$ z5nh3npN@*|8*+pl?l@%vj)|3T?x~PY<(Yp39{w;b4bwjXAQ?eCH3Jtk^Nc#0aET5s zVCtO(MCVo?s)ui2`BPL-zj2S;z&TD{!T1jWC`K61;J^n=JY$aRxmAaF;T~8%CFWHC zy5X-_{*;!qZ~P-4Z~>{VXrEC>py7fuD&T}HzN3Jq+?vA%xB{k6d4tl!2e<+jUy2zt z5a4&H_hQ3&RVeD+=pR%$JI?YL3sPpo&hFYabU8wW2vH>{S zQ+Y7RGV{h~w4WTozpb$;XwiQP1e30?$Y at ZX#(_Vlnvug+pX`C2mzJ%nRiE5}PA at ahkEK5S12(gwLVN<_B|0?S zsy4+F)>~pEuY)le2ID0=q@{DrQk3|LCRa*ModV;fIuzbYmrNbjTXTq_{Vi|mZ~tY# zjJ3E(yM?uym}57)n3!QVyUIkhMa6bXiCb2bL=hXuZrnI2mL6_`dcJUhhRV-2%al}N z93PdBGcEVLtmIJK5iWzOA{rMZfMY`8!cHdlytZg0Vy$ITTo7(f at sq8VX~}Se1{IX8 zmYrEiv?od!hesZ6y>V+430_wYZmn at ntUo-DBHVh@+ at v#{pF+ZF)7GRk9F#)Bn#;_j zHGG6(+=|P at q&6ItV%(a`x>#t08Z``OK9g#>P(F485E=!Ilh4AeJi3f5^!!IRZs3 z!x3O%)*PXvU|0rJMX|&Qpgyr#WM(!j(dEHev)NM4uxF2 at pySM4Pc=%k_%5$V-Dp-N ztvAS!))}@*=nO>uEu6Ske^|EVcX9UR_cfc+UoqBy%eM4a&ELZvN`DWE{4JHgC3BK| z>NV(kPl?751o6HE)Hkab>N^=~f}{kYjTB<11;Jl9@>#nH%zvb at asu`o{zP=-bqOjM zrss+IK0IOM4t5y^{@kp>N{an{D6n{kspR~K+81s ziXiv$2fX}^)u?(vQ0 at tH(CynU^Qa*x>#K}u<^ZDQkFIfi0AuQV!m!>`$Ro*jN73vz z%k0wt{L>#o5h|q6pF#v`VB^AEOt`&+AeC@>AnHK~l?ZyENrS?b(0o9!voDzNzJxZQ zjzV+*$VfZE?UFgCWEn)Dh(qlP zp*s+mQq57Pljkfbd&HJCoS=ik!{Jjv+jv at 4^R}xLbZb=eu2-WKe(00}Tn=9S4l*{Z zYSz68f7O5a54?Jj69q_pz4_-~Jmo$#EjTFnH at Y$gMvbS+c|I=CeZmsH0ooD2=ZAG6 zxZrG<`CxEcBCYivY3yVoo-T}&>KnJvmq|s9V`zKnd|`C;ljcRJ?OeqnV&uZ^>H$rY zDw{_zVL*Q= z3!MhhDPlyzLh2_ijj8cm#DQasVIuUECyS+yB5CO`#$Y7%nPbJHhM6_dnyA#d?xRgG z%wZ_?l!r|^hov=Bo2fLp&Z1c`NYNB}Ot at lT!dUC6ESXh~YH1}JE7iCzqG2#f(B^wg z$YN;1VCyT*n01bdX(gH}H9AkDX)sLD7nkmoHIAxj#~UlvJI|wWFo45u z>ak{u6^_DbZM0)mJFlXFVjf{S^pq!#feVx$SaIOYATAgTkm4q?MIgq-HA>%cczjg< zfKIIn1&mbZpAI(f_ou-CREuE>ee; z$V0ymI#rQlKuhMpn<RkD1*mdk#fWF43`w=HYU|zvi>0*W zu25R42W%WJ?~jpTP?#vlRx2ALMzO zsu>=STC3h)?(MD~*~LB_vhg!zS~)Y2?ISC)wQ;?MZeN7z{+f#!d*&#$9lHB{&fXq& z3B6d~lE;kL25$P4>lFe^DgQ&F4b1xKswRa$L?0sdcdM2xS9d2rmbTC<1!d_$xVwXg zA#n&VIA(XA at 0v>CU2MQy=|2K4GEeATL0RQ{Ty=*T;*7n`v``bzLUrdfj77NXI_V;AA#`fA!~1 zcz$g5)>erok+3NSoOU at id#B5}pWZ<&w#N^5LUw&Ajb4w&h89}~PDAG*{F7 at haY6rS z!#Kx}IOuUP(4cQ0b-{ghir2*&ao$46VUM~cokd7Cp;7I at i}-MMk~zD7p}}oZVx{41-%O1vu+u6+k=S_Tis^jnv{Z3RiX!_ zN{Y<`0pt9JH at xX3&f>4$prCgxl*OBXai^aF&Yf9gJmpUcVa$fP>d%nk at Xj1U7AEN+GrEPq!FU){(u|GX-4fna$=@Ry($ zyf}aq`2M#~4Z}Iy|X-dpyeS1<=fmar7YVci%}JAU;578(jvzQvFfj z{Dc`ucYmK${)yI-1R=2U=f}x(2XTqRD#jbfKKle%R!Jn@!ZUA|62oIz`O)k02jb)e z;Ui^V6STJ}_K%z+ANM`|CwYSA3OIg4fv?!tUzZU4Jb97<5A{Q;;cyBYA?RPh13V#p zjw*uhvObQOz4+iX^tQMxoW!y=TL!THRTnb+jC;Yx+b7of!s0P7#yiXrY%w zW|kj~kQ)d?jLBp$3C}V$E|1hEAz*W*pT%I76q}rFS)?+lkBpF88RkQN5@*Z#jX^?E zOrkRf0?UkSPjYNg6c!rkj!ei*4+|^KM|X_uni(c3PKVO8N!JWuMwS(G%O1l>kJh3v z>C!eiVn(JF<8w&YxkOGvS+Y&n)*>%f6dT~)9S)3KBN1>&*L at 3(q!ja=#xp)zAz6>~ zT&`^dq()YV`;OyTAGMI=BR_JtED!(vL4EXcO$}p=^fVZSwMYxY6z?TFmOZzEHN<#q zj%>(W!|10uMn^VeozQygj?@(Q9jR>sWJk7<^qa at G0ql_*V&3AlZI60L_K_aTu^Sr| zM!j1c5Ubd7`eS%|Ib2TguQ*_i at v%9gkMRX?%^wlWOGx&OldDM*YlstTNzJw^DHp9- zq7v;*afTdCd59;*=|t+|xI_7HU7^e4euw(vDvJcgaflSfxd)q{7!Nby#z2X4q$5S! z(~+ibY6(-dC6T0VU6R6eG-WF}oInpl;o3r>bL3ORwm!lYEswi~Ds$vhs%?2jF>Q~} zgxcUXAdPQ&rYV`4(i_*tZ9uni>=S|6)h0LwH$4tSoO;Kmm=b3o1i`#1DN2se at vxLU zFMN>je0yIVdcttOk^It%;d at _Zy@I7IK==UR35C7FYJv+hmY|M~+=pR4 at E7aeFx ze$8jgH2(xL?qe_lnjcsBidWjQRid~saP%-7 at cAEpX2CQ0b^j!(Oa9lJKmQ^r|7Vc; zl?tjb(pUJc1*h>DR8=LBCYpRO3f~}Uq){vm99T;-%Ne3g6fow<`1BC#8ig-1dM0udMEM{GMB3~stxs4heryf*v{4gu`tOqZMc59U5Hq_JUZ&sxwj z%|CM|e^}a8w61RI(5e?`*_t<7p-}fQFyT+x>Fj9q+HvDLw-~hL#fd$0Z3fAeS*1N` ztXW85YC6}}p?rLekiD?Bn{HTwD-fu#^dZfudjAQNzxyrcGtzV&M?)%6D%r7Df(8&P zwvMLO%#91c;PLk>*K(ƒ(yH&;|a@^4wL#E^ZpcTh8kfF9>W zI^pGaAcD+3om6IrlRJ(IqOQf_igE4D;b4j+1|8{*1+YxZVu^z2fA}Cl;VUH8nu zl#z6+O68yI&*k%|8alQ$m*SrdRR_lmiTL)2)AY#N z0~nVO6yD(uT%u+cF*7Z_X;$8Mt|8b>T;g1c(Us~PrO-Fo-;}g!I3O6ju{k;Y@#xJQ zvg6>sJEy_ at u@`iD-)^=hzs?-P>+lmd`lR6tUWT~P=d%ak7iegcCxaBe+Ecn;2eCx@ zD{%FrR~W2}Ao*RIK2lZXVPha=Xr+`>MJfA|1=a=?xaH8E#0;aA;(ZPgi8r8PjZwRD zwK at aKW;B-jy-^JG$|=DP;Ynrx&wpg)476dgYyX8=<$t~I^DmhFM~-^j|Cgg~zDE(t zq_rZ)_8^ptq^r7!n%yH2BS3kcQOEeBP;p3MYa}S8n+jZ( z=+Ws^LA2RKk|<3oo}lbhM^HHjReZuWvu~wDqQ{P~E3}eD|4NG}g(`nj at wV00XRdY4 zp4Wgi1+Pn}b+dZMVa$OycSEt>^Tj&E{##bg)s82BWe=s(S9ovOp;_c;PZ9whr#-ja z(!Cwg?i*=4yj|Pl4-A;n?4KeQuLh59?qfUMEZ6vuwPmF4 zwd=NFpbDhB^0h?KND z+-I5wkwcv4J6b+4A>W~k7y-kdznd2{GfAgUPzQq1oP*TA)DL;CY(?MY%(5M`PLYP6 zQQuSP3X(V!a})L>-r!9ikUZxX5IM^zchG(w3|{nqL!6mBFQcWdK0x({{M5t1Lg*A< z<#HXtd{f!B<`?50;{ZAIa46NV+$T!S_JRL3)`b^7i%c1NCeKYJ%Vz^*DEmM!cZ at sj zzP{Ogphfiy=9*D);VcL1n)>u2M-1cOeaTvoXL4y_9$Yd!IK;m(9M9on$Z;xRp~10e zwOB_eAOs+LsnSzAY9!^Sca1uPMWT`*<41!gDtGN%WvF5Lrggod at +}r)EOFhEv{(=d z_Wqo1BSUziLBA=vS{?QtsmtD$U|m!Gi`lj>)br6lszu3s=VX;^#&-1`qi!`cp3q9u z^vnLdiS&0~z<+e>UAiUl<)p8j=&l~gUTB~2FManO_=chr~~wR_#>V3 zZ7K)n6 at 2pG_|QJ?#~9aZ&e$P-+%E4`J+(1UC0hqRB(kxI6|bOF+~(1Ew0&o0 at 3{ zEDiRjfoTFP9Ynz5=1njSM1l3Kt1x at W0{cr(VfYXx4y2wD>zm3+A*==Ko6JcftO(p! zrSm3u8(jZ7*Ksfp#DNvw4`KcgL2Eo$VbBmkTRab8(vShGTqj}Fkb(C{PQkBwq|2zW z_mZf~?EK7O^FGrp-yJ0eUIQs}*b{pXOO>!BJ%9Thsq6Y94x6k6beB7rG>7G%R&+SB zqv*k^=EHu>j+^}avCf?44w+CsCG`%DXu4N%8VtWA`0?c9_?Y`5PDvJkK1yg&`I8*L zXUJ#Xd3!#(NuU)K0{E`#_V*6X at YQ#BG%sAjU>@|kI;upHtV(BAelL3-?_SHH-<&k1 zE2hPV@>a-qRV=8|;pMfvJvt5Vv=2O4IPT4>!;Ga=&5kw(>l7(%Z=hCSCs1y52_Sqq(YW zdKnL+qUA~?LgWtI`%Zf)x%7EB&pO-8nvXwQ9-ZQ+UXynIWvjMoSn+u}flbPkx#R%l zGr{w5QS4O^(3u$jo|`%4Iz#@_EYJ3W?RmdSwg^#v&Lko{qwJGj2!$!}E6V7?ZB!C49NPM!k69k^QsaA~=ASG6>9Tku_a|SleoA(UBBug5 at Euy8$(b)K z{gs??B>2N1&P#<Cw&~lAfH8NQXKS+VPQaT6dFXNld;BF zq&ak{Ssh0Q!GN)90pX}eb7~8;t!2R#L~E29OsFl4y8+uJD%_*#Xwnjj2qe at +=SYX@ zR2JH-Zf#NrGPc?Tb@!@-3HmImh3ZI4q2aX at ye zVc!{71gphp9EaKJ)E_JiB(7N>#|M!Bi`DtTagWACamY}!FCihMAvAB(=-d(58|YlK zBq2Oly7r7wL=tiT0$dOh{U+2Da{VS06{6%j_)thJP>4Spg{T#Jo`kF`B+-~wyE-Jo z!egkJlE$qihT-M}s@)ZW&C9H8qB%*OwSWr7IoILC91iNJiSu-Vq z05N5QADg(wjYV4Hkw|Xqlt^jo#)K^h|HI~5N%5FuYaG4R`eHC4tTm1IGEx$0(1xdh z8=zU5%TNGgV;Hs42msDYbG$76&1nN5+>|kGua=Z*E7oW$QTSDCuon)ICSI}~O7Q~= zvuc7_lDku at FQMz&wj0$VOVtO5F>2uRKeQQuL0_Hbztqtb^1n=Q{$CfBV5n^O~N>=b=iLiv#zIwf>WM$zC ze}FgNwQHw56?+Tu;?`^4Ykr2`=k+1r`wdnI0#OuDf)*av9FB|gGMp(IHkNVQRY8hQ zp>KXdi~j_iD?kdjyU}zAECA8J-gF7<57EEWbP5a%L2${$Pc%8$A8(Ghi1nr+IS%Ru zfd>zXV*_&JOWf0?y}f`@4Z^zKw8Ly`-?8JmYq0UzfA$=|orn4~`Mcgh<@CtdQkv>Sz+LCBFJuQB>i#qAkIedZiNOAJl`_rkD}s;{QkjzQ zcC2p`xIk|})9;XGJxwEqtZt&Q0$W0r5L1nnI?Q)U$X^Ou+*ZiNQ+i{hK{wJjn_j1x z^b_`(?hPw$xU^L<<_X$&*(=ptc@&iDS%2zXRV)v1wXK8K%6D$-p!Ikvto(V^iM=0; zQzYQF=E85D-|^=&QwjR25Yz at Uq4K)GTK13Th3^8r#xX zmG^n9gB$nmJ#2pI$`kx}PHh}zhw~lxxDO8!O|*UgzQO8 at A_dK{!g_-ueA-D5LR*G7 z*ZyB-M#E-Jvm_y{LZ`omE@}A(EZ=2p-4s?;__A<#;*N)$`^HiAaSg=l&)j-wFZ_`j z(nt-Cd(q2jZm_%0U6G`QwFYKSfJ!gY43xZ;ugJ^f%QDjD8zo{9!=KH4MY6rm2G9k_ zKi(7hQS(kmE(VZ9w1#NB1SoB@*#wV(M;)=efDcUj!?jY9Zl6>?(vRE1 z!pUzXJiAyQBvegJD|J_%i&asXa?m at YyWBSF5ZCdtg49Pc#su$je(Fn) zH=brGKl$Bjv6!bJ$O=j)4*7U2m_^BZ0oZQ{H_)0dU=nwBCZXAS2uP_-b^Ac+o at zuU zbIlSk`4kenb$^)0)3aqu>peb;(D3YF3Bm#e&&Y826X3fRdB{i5J5MqDqDcL!fj7i| z$9>M7h9JdX%+JIB_sfd^XK;JEm(#!KsO8Lh8{N*rOU&!0Hs26O9 at a7ley($gRTDmK zvZRU~+IDAiQ(P)z|WpZ9OUg+8c5i_aP;hThwuj7M}%JI?;=A<{RToQ9`KPBen2 zME{f!M`}ANq5F)9!yOo0{KSPr^e}k at CuUD|;}%dDEMH0E7*H5&Urpm0&|SFxipDwM z=%H8icHY9sAw)EHuECMR2pC>`rP)JCm>#@CbAV~s9s-py05yysfyx}98rFwEWeQ*o z^Fv_5{?s!b0G-DE6gdh6rNR1CIVuGG%UETO5<%%88mRHy2k{^pXz`qd&_fJq at qP%g zha6DhxeCFD9MIr-2+ at ZeQ0F=c;fEa1=DG>}C8<=oE<%4vDow8YpdLhk3fD=X1Vn%a z*G(V=M1V5aMW7el*Y)_p?pqJAhZR#}H6t2RBNJbKo*iNSq=I}!^NQ--tA)x+32KV% zj-={qY->b#%Ssl))B_9!S3&O^dV=;F45=b?41(BboGoVt_Wci*E!AyYrbB4>_a2`= zM}-M4vLYdVO@)kj@$Y_7g+U}!F|V}Q>9g*PA5||Hi7X{v7=%>PW3zkUi@>zq^SxM~8RV^m`?B zeSj at bUeN=mvVT06pH}Ci%J==AP2WhFk3U^renHM<0s~vwx-SRfr>>3<6(wsDzE8{| zzLIPNt2YFQT8qm%+tBUocG-rrejdIiId?}g!ysxwW)>a+blGni{^Ws7OTaNm0Hht` zS5N>>=68VQ<1xxU;5fx|B_`q6^tSJC%+zx?2HuXNd27^yHHY4=y?JZgf;R`>&b at hS z%z`tA-|nS(Yr;Y>2h-eQw^?8wYd+QHR^+u-vVEgHfm3=CIPOe}hoR+jhU)t$RaI=hJq-(rtJHTnE`k zuuVCErdDvkYme$S(=3cU(v)b^cmL2`t|I8D*U~TQLyF0L^ptriyUc)(v zLE{Zipn!J%K-f#~=flO3j7FvJ0y&y~sARE826)408A=Aa787}WVrTPWFu8Nu=$Zp8 zJIaQ%UIQJQ)Gn2CiZu8W7#&jMVrjGma17Y4k&1LoAO|pKwm8NWO;~t%f+Gx7AgNfcKFAy;k9z%fYPym>avV93dz8VM4 ziFC>$2#QIJ6jXZ>+Lo4_$ipQ{vI%ZSvZwv7f{IB=O6lsjOEL at Yv*a|JeJv4n2QqP0 zBQj}K>yo0$mXh@&v>Q*LMRYy~N>Cm_znXCP-;Zy2^J1KuKc)cre$yN z?{Ql#qu!t}F9)`ZwMFdI3dJbK!{N|MqgQBj7FLgNQ5=kM-=zR6bCTX`-WcRyp zC+SKxK)*~Mbupn&k~w3!sttVYQg=uN8!ZkD at FM=8Dwy1rhsBfb-g at fYr_pItHK{u* zjh~L9W@`4&O!i~ZmN%lq<5mkyuH`E~?q+RQo#t at okXci=Es=|*Nz>o}X9#88S$Cz? zXwR+7)Na_G*Wh!(x)Ul_X`S|}v1uu-so`2zh}!sCD!sO}pQvAeekMqCF=kG#0KB8- zY(M3^q?@kcs%yZ_pwGE?s0^aU(GTE9F0vj{iUM|fWpTGUy$&Pt= zvc at mzWlEE1)9N;ME%A3RF!2Lr?*CYUSXV;g`Za(DVc~Qzh+c~eMLOKl8AJ?+i*;n2 z8o^93?v**nq(3@x!xUzsd z%Shn=evw<2<{BD4^|OMLSfKcXm(TGn=&1Mkls)Xz(rM^d0WrM=Z-Q`?fA}kJDkqDu z&!9L?96zVtuz8olgea-(>ECygulOG z)HC}z7)B=Ls~X(#pIM15i5bQ!#rs_F`e@;AgyXvhQM^!^nfqcAF9Gqgg{35mq7&jg z^@yGv>)phc^Z!6);YK|H5I7JJ9?XB=`2Hh*lUDnGA7r&%amA4)zHRkuMwWH7Q(HhX z6E|VZ$%8`GZdu&TwkDIvC248X^G3C4n at J_pQM3_W{lapb4kQoZD`hx at sHiIW0HeHy zK at Eer;;)_<)Z^+}h<`M{%X=)#E!|&V2Lj&F2Mv7B!cZ690eJbZg~vm%0%lH0b1{5B zlcP%nmNT}z#KVq;ryJsiYG_Q&AV2shJk(7#+2H< z-h|`a=GWL}u2(ynF7&PXVFvZ197oZhrOyfKTv5@`ZeeiXb9mgTTJcpm%Ofe9u2Q#Y z6f*^k2nUlyyaE{o%ACuU8Q+qe6l at X99mgabr7AsY=|oGG=So`1i%5%vtPKZezPyFb zA3c}YVBS(kGRbk&t0FV+QtgFF_ at 6HNn6uL^(m^aT`gpSCmOn$N4cvV6IG7er+&9n> zaB^Ei_;^PNb*A!GZf?4DTIe0nxC`E#q$=VbP4GrB5kZ)>w-$O%3a)whKWyL23$X*WB^ zOQ)9Z`N}xwQ>|kRO85-fac6$iZ<0%_HrrK#NNRc{o6xjf`=%@sSNe at b=LP|tmFkvD zt7Tw*thY3M?W-%lI4>jkO4xT9(7|VT)%uUz8!!94`FWm&l9&OvifZp}7wkBytL&Xh;e@$+$Z zhzOhA=`Z&&s90JDcx!sdezUZ|mXW*~1>78s(Vj1>JY;KLmS0gZHm?_XTtL1o?@)n) zpG3mhokIYXhOg$XLRWcJO_VCg&`aed^U(k5Tt!t;l*vo-mZ_%xp<$DRZY+SaJeNtT z&a_Z~noAr|G^S{+`}X#m6_^o2xhx6CE3fo;%u)C^us!Et=P)BkE@~3rdFk6z<;>e3 zwV0{^(A*`$qi)~}bY@}OVUz$$jp4kIvzl-txr3XOo(?Y$kj^5T~#v9)gE at 9?2bJpGY zrK2Xfqm8V`tT~zza4O at HQ*hjAZTJmmNnFe0yK&S9Q2_W8S_~z`_=4y_ z(0 at Zda(uqrB>SWvKB&Ilr1-oW9#Ag{-2uBqJ4A?MaffPD4b;aebAv`gH|jWFbIt(b z2N`86i022nMLl$wYd9eQMu2i^z*uxv3KRu-wz=bZ2fM^P6ris(6$%^y8Es39Ck74& z$68{;e}!eD8APrVm6Qo=#rO(K94YQlAF?L4Les+-mKd at pHbLXVXvYFy8+I=#M7|~? zZchm{N*%Q=iU at VM6F?aV10 at 57jgZ==e at +3T$D at GO#-doFi%oXZlEU36)cf@{dM~NwIL;mG9h(JJ0|J{Pe|1AhJ!_rA at 13UbnMaMcpgZ4_M zyRsx4DY+4ui+Ku2R7+!+PN&YjH73>$vUw5&R+ct_OzPOIabk*#fYOv#VSI`Udm?D_ z+5M_7OJRFd!P(o{o6)^G<>BMLtBL3n>f^+3-b$jHehKp75??Y^s#%~LeZ?rQ`9tu@{{hXx at iq{i|(tu zX%3Z}?yJ6O4;2{WdvWs!dhWOYhnGKT=GYLYhY#88v3%S?@wDl!W1K)SREo-qD}U0m zi0#F at I514nw15&u+syj*HFRva!Fdo>oUWN2!Miw9Jbs*5F|`rO3hyO!PQ(`Pag+?B z3rCV)d77lsc^1{2?k8KkPjRle)JZ5Mjn=7c?z0$q3`m at 6ex-?WrSmrG8Xa96YkuZz zvD8T|rHvMvZSQH64hA{S1)uW7 at H*E+ls85S8-r(X0j+wq^Af76R;sn$PchOMm$;ey z%;{p0lW59pEj1gxU!!ao>cHywN-5|rs4*IJag?a|$YHuBwk##~e at L^M9^EW_Ywv=J zp5LmImX6xhuRb8RQA$WpNdJ(E#w?G7h&~j^DuTkt{g51H4hx(`(LYZwevD5QNtD%( z(qh}MN)$~ST at K}?YUbL_Q=2R|;k#-VPuX)Q;>G?!c@^mvwkN$kQsrdHW4ITu!=n8PQ{hKfMCPq*IZyX) zOW8}=U^-|?&HD@~ zD{ywJPsUi-)lS}9zuTTFPkS#Nj}U*hHh;&(wFYfM;(bN5?`lanf4BB-r^De-m zf;F2n6C1CfLCHO2tVCAlvi^PI0k>3jULK)-zI0+E{%7pmaxvswn8u`yLs0~ihZR}N zJH05U8*=^ITQ^m2&4nbSzXsy~1i?rPjh727BGkHunL%PlFN9{2amCV~m=b6{9Es at Dw@sgKv7FbCE>Uo2?JUW}(B6 z2DksqcNAubBFuYl+JXHrPoyoHDYuBN-|ijoKxSAeG83(V(8RhVt5Eyz^3k+(M1%T9 zRD|_ix9N zk<)|XzN={XmDb&D1{^&)1l at Y#I`Z}~a8dOZn at +6>N`IeCcv-0LH>HQc3&Ixv*1AYi?-{&~$SJ;MZm|S~w)=F;*=tSoMm;P*=1g7yB-SEOgTN|%j zqWsxXUn73M)o}2JP2)O0#=n z^a-_&UO8Zw#-cnrq;_Vkk6I^2&pCaoQ*DG8>&Xxg5GidX9jBKLAjjllwwS4D=3=+V zkA5;(0qimyN?=hm(r-bEqJL47H#<1}b0rmvqS?VYNN=Q+TFhc)!%unSh+52HWebuO z%^)pe&$sTUII=`7X0Fn7uYffd4M|(EJ6fVHz`G}MtcjnC^-~==tD`5G1Ff5>2&*zr z7rWXN?ny{Ab8JbtH*<_j*f(?R7jbV?k}cD|uxg^gdZ at sr)Q1}(@F2GGZOcx0a^_-s za7HEFnu!$;f+Z!3!(?Em!Pt_?VFJbL5*WoJ5*%P3Hv;pNu#<321QsM~bRDcIvO20y z0uz|bWO3Lvq;)i(g#D5 at H^2ds at nLd^ZRq55%YuG+>bLtyl3`($NLr*KQg&W*w3k_7Af^gb3!R4a1;p=2=7w+q(sTda5t0h<$e$G!zt-u*CixMTg7WPicf#=ZI1Pd?xptmtuS>;Rmi}N5VE_I7Z?75M zWIUHa?{NYG#(&PX{*~9(Up;+|DC+Z>#{oGzfxsX`PZc6EEsaAiFHHg-7H;2%slKAD z<)4c4AMa8=wC1;3a@#Y^(&qE3{PUaDeYAw{n$GlWN zPTceS_K^RS=PK&!_k9+}7HUTQBpdNC)BF{A0R7+uGX!T01YsM$g-qP?0m5TG?|-A< z1C-PJA~3sWh at Vw0Yl5_l;WGeP|CThZ#CYL6>XboRYvpWYG#8wBGvk9H#<6WIWEa6r6{a;r*wHNFZ zM}YuhuQYD-tNd1ZxfTb1}c zSyEXJL53wh at fGK<%Lf$^YX;Xh;goeAy zmmPNQJH8c{w)92p>N&94J3AWKSqqzf>NfIs=ue=_ua>Q2$auG at XIT{y*WM%=NL2#^ zNHUpWxBel}RYCpwT}vHQ6+O1Sv_p7Z@{+V;MWMw{;ftYjUo=+kqF$v)+-ma6nE%Up7fcf`!sqO*{pjRzq$W+gc2>dmH{C2ObfiXy*M-78GSkYHso5RbI4 z;d6N52M+FTn=IS9WSZ{1UG<38oJ}2K9)UEYUm3+wMYd1qn|Si-DqC6BIjN31bN$&U zxl3+4j86jJk%yX!`G)&~+5QAo>sJHqdu3rw4@^@sX=?P+89((u2x0ZsDAGU at m_hpw z5a_nM9YlbcCG3AF8$mBTq8z767$%hyNbn#%68Pp0JfaiiwyuG}BDt-3ZmKqorW&KX;5zIr#U+tyuM9*HL= z)4>@pY#4gKGZ5G?^vT;rEc};$WSzMG)Bc)GO~0UB#L|EDN8XA5G)e{m8;8D0d#{Cm zdQ4D==(8;W2Nqtx{54d+^dFAI?*nFv&p1Us at Z9&>LGcMe`JZuOUI`wH6DZx#?O*(P zMp(F065;G$Yax+jpGjs%0ku%zZcBObsQnOqGbb=V6HT=_1iznc{QE=kG1DnETJNRo zg$t8-Y+ScO6qbMUIKPeT4z_-!fDfql+BrA=!`W?0=BIt8sqf)Q~QZo{VI! zkyggyT2WVsj~2q}$Wq4Wh|Que*$o#}Cg9Q<=~2#z@&$Doj|3`@43kmY#Mp6eklTQ= zXb$`6$A^uu9;A7*jW8Z$TBG&M;-Vs`@niIyeuzlRw8q%+Ka&edd&Nd)Lu0sO?NDbB z&JAl~O-pZEkNI~Rj(A`_Wl3UCU^YogH!%HhYlu##*2%WOc#0v!bRS^4=VYX2vY1E< z at cTH@7>%WMYW``&0E>e6gj|gF9~Tce5)G0b5yHaAM#jJZ`ALt+&B9_(;M`Y5C+5bG zljGcXMl;ONViaQDmqn}PC}OC^_!*4w*fdAk%7`!=E>%no+e(XY9JW+!4x>=7<}y_( zlt2GuS;zUAjB}~*luU6sd8a{miS*1E|I3a7uZdi$Cgr0Ga;Oy<)zUaG^ffFGlD?P= zgLKdgwbe_O)WkhkV$x-4gjo&eN{8RH|Y^iHMCR9QjEH4=DnL=kWVau-O(`@c*>d$ z#hQHylcAV3(4$r8%NB}e_!aQ at rSxw64luPE1bT9T)`K at T4GRu4rmz2&_-A<4rWV6M zLCGNee<_Uq%c1`}>+X&(u{P$Lv)+1y6H_s%gQePXRw~rqi8|C9+fRTki9pPFZ^^P-thKH@)0}n zkGebNmk22|N8$u%y^qkxzS5`tk at U?_r6hSA{gAiq$C at ki@@Loycj zee3;V^d-0;)Vy;&?+@{zw_dcyA8iL$-D-+!DAi~3aTmvh=`Pj5L4RkyXRWj^U2mv1 zIR2e)4*cbFwq3Wiw>DD}Y%(qQ%jbe^dWt*^4>HM^(f-sCiwx`)W46NZ$Tpu+fM0~Q zdg@^Bj55mqQXh!$eQ4fS+_%%xS}|~g6fUrEy*@-Gv{{J{x$96tFkgI%xice~gtcYQ zS?QqYXA?=;Y)nMC*#WrI_*okK73jw*22hx7rC6YEILlS7Ul$jz_eQ^7!l%la(5Ye3 z1D(uWF|=ly5j!n!J&vVti*4en>6|A4B7s4Ive>*8>U(Ho*=_uYm#k2P8 zaToG#d+Jnh{#|b~+!Xi+-8K#>aW`$eW)KH-##pi9L;Oa?iyYjynSzH%`E6G|yKYI` zl%k<6ez{!0w=QU)&SyZY-kHB^!;#%O;*t=Ox3`=VDo1&?EzpL#EweL-PYf?MG~PQ! z98F_xmOP3Lvc_j&RmQJnO_84;?OiVbp0B)AkQkOPm8i&A+$Zxepj;Fi_7Fs{h35iLRGwigTeJ2#k!yE^#*r{7ZcjDlM9nh>LVCvw6NgN8LJmVS6^p*6Nw zY!s)u`y~egv#YCK7zi#X|>JtfR#yL zG|#g)l3ADGlQJk);xqNKj6YIJqL z>ZQ4|Hy@~#b2D7$84BT$4u68>CU#d5t$QMPnyfDQV;~0){ z71wbB-q8Maqla+vmx2+Ypm?zUzYQ|~=k4Xcv-1YJeOe(KAFzE`Pqj+jrp at d{qzcDO z`GQ2biO!iedkT#*?PBAL6KAkU2ag&ap9;I#MCR=zN4BNmDBNx-yt3jm^V at Bn=UiW)PvXEpp!k<;2Osk0`?;W3 zl-rm442rjJhoyqM3& zk2+JPU`$mFqJQjo^&{Lyqo`>M$Db9NI8Y>cu0-9k;XNG3wZD3h{vy*f7NUmR+{laW zR}w7~GbW*i+rqdaaEt_!$sRLTOKWW8OYkd68x at EzEnu|N`074`0{|h%6Nqpn$dr$P z3K(rQ%I{McnDst6_Fly(;vexP1eV0g#E&7VeQL=na$m$b(qDGyJ&Ym7$Kg};w}1u- z#p{Y{Ok1RkITmD1l$acOt1UNW)wyrJhw;32dH2$yASPm4QLb#6(lJ3b-o~t&`^fhQ z-fmIgHbxeIme at 7Gf*FJ#k5XV~!KHFk!jPk{yw-UfgO9)VtX*r`#&j-S*D-8=Yfv_i zt)EKna!I0?7+0}aO5^N{S|O{8hSuO{m~ODOmqB=8xFt^9W9enaD5_hWbO9_*TFOQp zEzyX8I&rULIe--wI?VQ}KJtR6IdEY}^%*Id^s8gBUwrgqUB^PEPeGPR)3m0=zjVTg z%wRrFjt(yck at 9G=u97FDxQ)#$5rG(Z?74eq6llYyh45lI8XU|8QhrYPpIY^@5Nk3P zdHHkZ7~zA2vttBH?+IjqAZ{Fn60&P!6rQzv^$sHft03BTk*pc3Wp4UXfQihNNA9Gb zZ@!<1EXw_ZVxUldT-=y_DXzz}M|D at d9V?c}GSN+M-VYs3ZyTnClY7qF{1fMo7Vb%e zHxsCYNbSPO%I1|vBPvt*VUt#zt(|LIn7h=Qvk6vp!{5=PW}?Zy;pHP+{oS3nh at wES z%?C?U#HP znZsh}FM_1|Zb`#b=uv{C2X1M at T<9Ebe#yg1q$a0sdBaHP41&Ew2e?tXg1uu0-sqKr zc?WJ8!-D9pZUS=$D(D0PM#pYQ?D^rkVz?1M9B+Ap&wig1Es<}j%vu&$Ii2ME6$?S< zj|+~M469B~?pg~fZ^%lxm}>a-o6nacOX2faLD;~4UWZ`-zW at 9xWi z#IRIk6j~x7IiH9P1b6_7gB21NpgHITL zV4 at _!iOs^WEjjp5c33Y0ApE9$W2i)>d8COyg}XHR4-IFBZp)u2)PdrMYBuIPGeaJR z?L%*a6}4kMAu~B1vwn0Co?V_5=L(^y+5unf`zx+d!3w=24v1rgzzflZTw$H>6J<~3 zC)<>JyI&X{}7T4 at l3zxBUZ8U&oZwwWyMcT*}Z#|3cP!@}#2^t{AY>^P% zrBfX5Pkjo4WNBMjhDQ5fQPr-?Mn%8pDf$`lqtqGEdJgI9(b3Vd(fZ{8A(;^w+B$9$ zg at 3XY!}j=G>220Se8;?aLzz0v1;_L)Ncek}^1BY1q$5U;&Z14*{>TT*QM#_J#tAi6 z9z at t&wr9jYchIzp at TVix!p%+RQOK;-S95cJI)3JR-+>iiOniEsUK> zZ!;W*)P5U-p(e+ at _jgQ*=ZN-`9~su^iK*z}#9Aoa^blObt>C#(x25&5j+Ln_HWkQ`E~v52gl+r5B!EQkRyo*jT) z(d`#Ie|%^!*#fe~F)RX at iqRI1@(SX|o?});P}Fpi$M z$RzTGKnfSm%e7CO8)tH14cJ;ivvxmc!Jqatd7oWmT3pEtf_%+$Zq1dSL}M<4au+Uy zm2F$*@(Ml=??t@*`>p90V}c7!I4CF=83e%}+(P1o7!)8~-ic!L0=sxTN1zdLFZ56gvk9`d*&YkQMq z(FSB%(Xs}GGw)C-)lVUO*u7M4oyervy-aRp$lzPW3eATqhMDzg5WFuH8V3yo%Ry@)pQC<5w!%BNxN910h5myo zhBd+D77MO~=27KCgD*sy5nACT3}R36t+D5XNEYpXS~9yUCo%21Z-Y0lD3P+E&0B61 z6wzXZTl5@#Zq{aSKCME~akZ&D6Z8R-dd0Qi{(yXcYV= zfJ;Um?a4yE!vSN&EslGNgvxN3uD_C7UA%Da#^@rOx{afBgO(`EJdBng3r~yR?8Qi4 zS>d at b#bL#3XNlYA%bTKz8ve8-Ni6BWkKH^FK+H?T>sCa3ygLz}1;1CU?OF_y%Uj!j z@@^2D#>&Ypvj;?Yjw)Lfb0#y5*2joo at n`Z>^1=om5IHU&AJlx}SwcJ5czj^SYv|Pr|!V{(3 z%Z8Rgcgv5jQZC_m6xf at H-zO0DKr|lgG=mIHQ=FS at 9)|_r=jyPHJnawt}ayVz%NJ zasLgSp at Zs-)uM-*4{LBiaW9`Zh0(p4F%RiUTfG;0H_o4}^Hrisl1r%7Umer+MKATn zH}IF{<#K7{+Bup5%GKpwlJ*AQ%NFAnnacIcmlQn}ZPUIn&$6(|%YcIH%B}@eYYxc! z4U~>EGa>GMQUz!ZJ?E- at 1Wy`sNIw7*f!QJCB%2sjUBFG0Al<#WPuAJ`^ zJO3b&NGCsun94A6U?V>|A76-LxGT$9*Wu&Jd=u_eD>T%({Y~fTQ5`Vrhg_-c^U+$^ z`tjL%GG8erpILw3UPMdbE0RXucB}a3NSY052hmIoUnKI!3o`iLEB at xaW8R{cy`hlW z=`Y|Ak{8Dv_|>L8 at L%tt!GK5MjRA?uaCUeS!tFAxFN(RR%mNoPD*6~5!r1jd(heU!3_pYYszetciGZ{eeOm;^jk-{c@>7#6(m z_wLXg)G at -Vg;F({cOl$8(0RoDmSas at oaRf zEO{yA(mSWzu&`y!q97y3zJE;AGs1vCYG6qTL2uDM90xNaGjo6h80Be5^!6oxN!juC zVQ~22 at 57(dt-aeohVQAjqCXL#SbwsSK!=3biVc813r;j({Af6Spd28X7KKdq0Wl`| z{VCY(z)`26PZV;UrgzW?V&M(QVl$x>2aZ4t-=wI!FZ(p4u$bhyMnZ_xLB at B<=&(cl zupC~Tum at CN5a}_E2y3SYC+`&l5;2*?M4Ks66e$FG)@*0y01kR zCjlwmUm}f@@zcEfjy^{9Dt||WK1TDZcbAP$Px+d=-$JS^?WcIRflf~)!sZtfHi;;X z)w>MF4gXBgI|Kd{ZVOv at WJWyH0-W>aBs-`C&Utde9M}Tqd^vFr1i{l}Gm?HLcW~%7 zG_OW?5$KATf2Hn_5y}xc5c?-2h=xEw4j)d00|Fq2J14<`I9!7lC&mFCI8!Jq at lFYx zDaa at XN#CC)WBmwe+h-wVmG;xWV at AM3Y(VT^1XG9aA@)y!EyDMZ`!~VZ;kt09M at 85N zzQ6|WM%;rZU=->6)+++ImW)--Pvx#L3=i=$Zts``-cTWIqJUn^oh{grtWMI;_)Z9+ z7V9syUtbs>;%7XO3p2K%&q%xbl;L-g`|;>CSi86)r<8Gb{NP;DWy)9MyUsAgAwwVo z=`wXMo8O`Y*^oG_=~)r^!2q0^U^I0vjo+pO%uo-|mXw$JHF19y-2(BA#SaulAN~aE z>WwMqXL<)fK!Op&?A?*T4n^wU1q;ElL*NmZU<>z2$jY!@fvz4&5)(K-FrBc(Ft>z6Q>@E9P4S0jOW%6=5- zPfBI{*TyiDa3&yydn1N<&AuGjm0T7*gbN`UaS2ZRrij8ka-V?|m2w96wJZzTV~ks(A3s`b|Oqk8isLe?t=r zLjV2<-XVh#4tROYxIJHQ=@SVq+Y4$fjRkXVGaFIFulQ{(m<%v?hO^|R at +k}85{x%w0sd>bf?C90KMM+d(@Q5V>$+Lj{q zOj}j4rzCt$TyJrS<;@NQY;IX(Hdm|neyih}GN4{5P^rMqmKTu9G(Gkga(=Y-$x_V? z{8p6Y^It6Gae^Pw$UME!+j9#qY4~Qj42=Ex1#zdPXYDIXz3&lQLkH5H zB0TH3i7K^2 at srZL1x=NQTw*2J(V~`#SE+7)nPjKSB+m+K)K!#tJ at MSG zu+KbSy{hD;gz?$@EYBIvmSzT>kq_nGd>i_ at NNBHiW>l-)4YS}EJYw`fC)T6|1ebxt zo-5ZrU%|1=r#kFip@=I*InZoup8Bm99CmKcvG>32IBdANOS~C#OcE(?JMpadflHXKT1s3sy?y!5Lb`t4^CD z{#YW1h^`(v3x)EhLB&~Xy=*y?L at 5i>O5X^FI8y4KIv3D4?GPiit|#OA5Y?#fe>-^{ zGiUerH(-j`CY2O>8%ATztO0(+FF| zcOmx*h}^7MQewXvtom%z-6C@)+JRE)!P|kcTd$gXsW|3Q7 at o&)S at Pi|m^WGw!)UXw zNbtoD&;Z<7*vCmQUD&nQ1t;9VY!NlWKLq9a4!`ts`SLk^#&819?KC8!>LRywr2~1+ z5j?|eogrTaMBvZ;{-7!B{@@qo0Xf*y`?5!;gCnQ9=^54=Gsa} zv$kxXOaX`1;^kMLQ;PK!YjzL$Zbw_S at xf5BZA+wJ>h3F1>wOlc_#E%==hF)w_+!#0fv>xkGW866RhiPfn)JEkoZn)`BtV at l`UQ%B(GoGh>>-a$F^% z3_-n9i|i883t%?N9{3~fCfOZ_lwwhYV+ z2Uc at dK0RtZho)uo>T&GR#V_SpN~lUW83Gxw8MGPRdYXERdfa+BO|543ql=N{WYYnx zB#llZ%}CQWtop2mjb3IOvE?|^0M at OhtHEZRX?9j)Js-=BuyT at V6IM~ZfTpYAW(p;W zj1X2BJ#;g{=o8G0VZ8)1!PpbRj3Yf&Gr^b>+>9kX_F)hBX?@mA%V*3CPra{$9&{PC ze*M|c1pPdxEH8_$VcDVir+B=#q0CIP{tMWKzOJ_;zSasihU7Ol=eG^r$BkY4ZZ3)Ai+k&EKQ z-l}iznLIlR$Xu^$?OHzN&YgDt+Nf{sSw5=`(A_e!^sJvvnsvxE&*cNq034lHH|jcw z+BVEu7Hnp0QfE77!)ME8y#ZQ)B>)c~*SUS&scpliW#=>?m&D1XwQKU!CRab#(8*_g z+o5IY6p*{+eAC#qbjqG<4Dj9BwrtrtHOUnP1UlcebnV#`&W7Z|05H}?>>iS4hXIM} zA`TB(vqu26brJiAwAm#9M~na1seW$e)@#zNC!nFxzkIfqvlw%LQzhYq0x$^~$SM>Z zSY`c8YrDZQe$dhUEC?k9L3_14O-;-#w;w!TYYsxY`mmn}yft~Hi{F!XJhTmI`K$7Z z4_0?TMl#VG$?NG5ZXaJko`GUjNkOU;*fn6h;i2e1~v=gkcWTV zSZjyo$Cp>C6q1&t;b<9T`s`*umg|O8B(I=b~A9rnGXdf)lE4r%1?ENuKaD7{o z=ZU=jC;qtb%(T%kbF2Qr?XtnB^?pT=~?-wUz3nhZ%O at h!v z{CH_meEs&DGlP>zC#^7} z13LiuJUW4Guq&|Uf|3$w5^NIrX~-8y#E8Tv@^D;00SQTbW_j!~#KmTLiO8aeB5h_k zXV^<5z=Q at e0NaUvV#)%}5V0NGYia?x9qWp6ooSqLU8XVDERnRfD7Pr8NH;;NF|jDI z$TUHh^P^kReo|i1J||cMXz5V`Jc4CFQk_&lR>jGq5 at 2Cq>CD?F1>?_042UlDkhHw&{Uz8A%xz{{CI~Co8MZL9 z1urOc-v=mc6$9kJ+E#GOWYxa22KFG`BwHij(9Od>O$#FTE8anY!#utM8*oIV?;7(e z_j6$rF at p@h>E1DdEnyRd4}{DAu}9-%-AOc8}Unl5#4B2odhpMee|1PROoJ2xeR z9HMwf3V!ft0v6)*e!MF&D%mH1<-mH?)M19;fu~^`Cd!dRr0$r(x5wOY0}Oug`-vW1 z!1we?^^TxR5^RdJOX;Vj!vrA#8^XFyrz8KBxI+i`c%%d0sQeQ5gS!m4KAMphM?W7E zkG|4=Py>3 at TL5YIQj59E2;(sT+o at R123*9Hb at QpzL^^S at h%Ap*t#ul4k%%N`lYT at R zabt+N$CFn2wS==+fZ5dV&8l3)v`!feE!KS&yb5~R44zh>xQOYT`Wa4|CAf0v>V{Hf znl-qH>FX9#%egBERdCveQkgg2=fY{l-+$_VD!{SuS zkl(D$Ma=3H#UN~*Yr(6(?xOZM;WKL2+DNVza1te-sNv1A+t{jf5I0jp59WG+dt2_qX3AWgUaC6;2kN7L~I9b%5)zr&l zol(27#!JyI2_I%zsmPu4NfnRx>8#gh3xX6~bmPWQdqz_YPtZs0zBO)%Joj!_6QU9O z^f35N7{@M at nfnHKWL{~;$)fdar3N0mjM}YoUQhnkzoDD|ca4P=^*Qgz&u|ve)kX$#e0wZud)%OHx)b6$M zNyOi@;8Wfy#?$+EQY&`p^&m9a?YAL(F!7J2>kzczrE7m;`xKjN zb{iAt*bJ?+;=oTUqb_jng+H at 34~?j!rPCwx)^Tzv4?Ext^L@%CEG}LRU!FI!D2wcj zkwjy{ks&rvW<<`m$E?Zmj)onEP(%^KNv>H~iOm9`&U| zgXe0G{vF7D2dw`A7v8mti5^{R-!)a=2ex?M!L at fysdvqPfSz~2`~CS__3v7V?^-VJ zVBovyulLC=-&fk9_O2Q74hFxk=J)#m+WUZT5z*sq(Yvk4 z3|g*pCyD#=A~ED^PWy_Ae4xz;>;S*we<)qoW3;j6%+UrD;)gXk;lx>rau(zRk*;Vs zlY`OexzJKKjyNO!;8ry64e>tWE1yYZfyW1xO^{n4$XT-_#o?~un*9V*5QVJahOn+v z*9QMrv8*|YFps~itos9 at 5wExE2PlKodv9;kDzs1wLd?5*c^;f^RL$Z`epX&{yc=C;UK{;QC>VLv77{_d6OH?f_m0QG>hte&ScMEC9j zEH_`KNBL(8ceelL2O_*-pA7t^_}7zHcs``BU|1+9J0vJ5y8m$U`hVHo(+sr?wQ#K!qli2~s8L)JO5o&nGQoUX+_$lpEZxzO>8< zEs-w^2?+(?P3n#}?Cajmy4TN&NhW8fMEw%K>{v4hZ0PfSynTE9$?~NX!VD{Jf_j8( zvdGnNbiz4ykDROPe_ZpCTlqJ!a07}mT;pFy^Sj88Q!rxiuE@%PgLC^iA2(q>z`G(@ ziC|jYwSQcN5emD6t`wyt?4?P1_!tfDfo?|_Lfyrg2&5d^4-O^5AVd|zWb`Xa2S-7- zkVkVv$|Xf zK6&S${2KFc0(a>pXk2}PH?CN3k8FHZtSDdVKd?fMF=ED{_(gr_*)rJ*zmy9S38WUx z*vtC6to)6hzhpb+6LsH#HK5nahBrBufFF4)#{Hy>XM-qEQp#>;(yH2o<+B6}vCkyp&Z6yb0YPYI~e`tO^w6?Z?D%VkMV4uq*@we?)l+KLcMj=jkD$B^5 zR;{~O#<%oo(Wqua|9Mm763{W^&i* zHYds$1sE+SO{a>DvJINm(}^MU|la?rPlc6 z#FeEU`xfp8r4#I at ptT*sY9SUDm at Sixo{G}mZ`Z1w9h^aFyGibLSzq{iqqgAXE7K~{ zR9RG5W*KLhMeBJhmvwSx4Y{gVrlGdlls96Ue>{=5Id*RwvAx%6tA6 zjy$k(X|6XUBdAIc&YDRWiSZgs7##JqE8BQG_%!e8T)n{L=!Jcx$hX1x*}Yb5+4?8l z)liFFRRoy^3d&E_j>8T!d2!}H?O))ueqS%%A{sQ7?J at n?>5h0Q+oSvQ5)sk2 zxX1A44?Ud-r9=lTMoyZ$I#3E*#7a{!5jGf`6d;99o>629%pz)clLlI1i&)6AiZFwb zkjQz^P!g5gG=U#lR)&gT-%ZSA*-(|-6oFVRvqM#|mKDz^RE0{eDhs#N4g at glo7Wce zGL^>5#$FpT2Ns3Kyhz at un8MPMjfu3!C57QP$6P7VARO9AP%3Rbd!&2`yJ~W47h%g< z(a!JN#e{{fA6zou)gL9~#K~4LjSqN-epW`$?{K-{)ptr at nU{J`RKF at +XSY`Tg{eBq0R%54v8#0bLU zu>V}3f5DT-w++*Qfj_XEVcG<=A|96LSVT13B`!Y?xi}uK{12rEa;@Uh;TT?hmiv{Q z{4Pd5?oc*Sv0G}4rF_XV*x20O(8DEEBPSkpt1wHOs?lJN*t>A>A5fo(dRpP%aJwkd z+-2$Iq4u7bM*ENnciQ(yeuYK798 z*`arjwZKd`U8ou5IzT>_;IV4rYnhGJ8uRmxle^Z=$|QBJ)8z}aXXtTpKv|^s%0z_L zNr}xdHQ495Z&FfrWywLq(g0-0y&RMg{C2NNpfNi?^#J`B-yWwH%nP1IFo=n&KS6CX zV&b+O{3*caSO?wykyC;z06g)hWnM#|lxSz_Bm7XWoqUVcrymQC2Dyp6qbrH&0dAGZ z=@#@ob?z zOM|z+7Z(pNE^{3RrjuQ8 at Dpe5!J#e58Ts0ZCez}NSB^58yoMEjxTPkd0OP(QuO!Pb zBfgJ|u9F`!?mSFs5!|!O1~~_`jHvz?gzfH#jx3e-!LY|2!uyZOlh92T_8{NGWqvak zJ|&3AwV{2Xjine5#}ijFa=Jc`!2ON zsaO~d?+>CM3OG^I$9Ku`*)F;9KN1Yv%%|eeOA(fS^3>u1obgT(gMqJqrEm%t)l-KL zFTrHnZS&?R&bB|t>D_E$)?GsLJLOucLcL>;Tu+3{oEw%-#lkLeU9>KfeivnRk1zLJ z1)l at F8;%f&oV2^|w>0qzmfQP~T`zDCk8hFu?6dNgq=>#sR*ccr)UEyv7U4V@{U)?2Ew)V09?^3{YEqyf{4cx!%`92liA6Zqf7}=$Z+2p~-hK+ja zpokPyUTmC6bp%q zU?)W1ByFx53-<7k?Gu*q41Y8jsuC2|?Iq6R@!O@**cW08wunSL3|`a at Tx6CX%=p?O zxQIlfLy;OYqDFdn^0+?R4mC#Zj^0c4YnmLSE&bZnHx=zOXF5|=X@!QrfNi#d_MuQP z4=m8kJhff;9RRhw&vRbH8DI2p5!p{N`4v4Q+TcQO@(6lH9(81Z`KRP)mN(f<<6a$FvV9Ic zTi=gnn2oB^R4T1>oD;4hbd5aMEVjgpt25)SH-G7e{-xnQBfy~pt`%-9JIyzC7`N^R!z;!g`KHuKhERlV!$E$pH*Ct+R z_MSTp3EWao%~Khd3E3zWLe|43e3^?A8f&VvM3y15b<60oCxane<{HtBYcNMe{z-bH zKpEgw{?lZdm%4 at vTdftXq_fL1y(`i2+HgY9ranXLhXkpjT<5vQmQq^t(odKdDmP*S zpD#)X(dhoXrwis4h at Pp^2yO{ggZ_Vy38|hXb4kCG9ou75e8jYjPNkDrMAQ%~rXOMO zA{%_l5GPGpOm#+nPP80)7?5q!3oOA<{K4~zpuRf=d;LYp>vCX+GbXKd3H$sMQy(%Y zZm5GSQLF~`|SglXryc-&s8X7!9{4m4qkD&HoErldZp`W=tkPahoXT^>Vjxw9v|u7|;k#kVWf`_htGMOs*Rfjs~5 z6LC|dK5<|se-Y&8Ry zD-dyIaGgP#>R_cNO{Im=c0v$Ze2i5!9KrPJ&mkH at 3R#@0H9Owd$Ktp%R6{m->Ichj zd0W2yo;Igv4GrQ@$_L2=$k<}rqj|9)<`l7?N93+dk28*hcge~v%|+%D at qboEBVULm zox?zA|Lh|)WD-<75HmUQc_NRj51(9aQyu}~tkY(jUbVv-NySdpxQX`6SU_7lo*}XGm>eq48m%yz$-f3tHjlo<#kJ<>UQ-z!) zP1SPfmn~E{1UlVKi3>P?N}sbr@~8qi{92T_2%2$4b972j8z)Adj`c={fHh_- z4Z6j}?m=aN7JHZ6rdWH|kst9n)~+Ko(ZxC at cA!J?vTdTxW?unB?+j_&@^wg#g?RkWT|?K z?(nwHyyccqVM399DEELki2x^r?AcRXXS0P9x>T!zUU&_T$jHf z$(bQVq$hBR-Bt4DF0p_0#bH&Ya!JfCpeCv0B1r{jutQu at j-h1bk@Jok;xraHyv{>Y z!$f3-0{2Jh!Y6U4oYQDIOi>PTx*zv94_w2m;;afK?~gjKM$~Zd4SUoiVnRX#F{Tn& z=d;}+e1gSMaiSH(jiIkmxey2-0~ZVT^R|8^XJV2&qTvUrgc8kMi`pBEg`L_2UnkEm z&uN5s(3=#ZvKW4UxXA5 at x>NOX`yt>L+!>my>N7LxB68t%(m^5VyZ>j zV7pg@`zL4miD>ufPNCiq>0 at R<;&R~5hrG0I(~C-x53ptAp9WIFDD>f;Mc(D9q}jZv?EU(4h%Huax6#r`Ts-MTQJqxty|gzcXtg0*M++TcXxMp2reP8 za0%}2?yzuOxVyW%1&4g^{_1p9 at 7;Y)*Yo^^ImZ}v-}4$P9a(*YtPF?Q+y8!=J`V7` zu;3sdK&TK96#xBc`ZpBro6))z&am({=7<>l&7mq{5~PC;k~;%~-LXDK<`HBNW1k-s z$3sFWy0x{mHRjCehWpl$gJQO4HsAG{&0BR#vs?2$-|@os2huyz`)ulQmHg`2fn)led`?#$)^KXX>RxkN`B_XOG7+AY!rzmhbxNMNt%e~^4DAj$~-+D{J#nL7n zkgB(>7T)kI#NSzkZuTi+lJFu1q&tekE=d>GofV=J-+);LGLAOYtm zq7bdpYH2CcdenKw-;+fXyk$&MymiRIO*ltsTG(?FMhp||frWLwofXcp-U{Rcoi%kM z at 74X@M<_tXdkrAf(KWW~#4`5XL?+_+#5RMz at s=trz(|Xh?Qbv6OCeUE>)teMR#1qO zE5#1`41w+h4y@{netptJawOFFs=1Ajkv1WGk!$gViVMl@@Jh1ol26o|=(+!b>KtA= zs@(kCWP_Ep-(;emY-o_)OGvg!Ry zMBT$Ln1umoOvO2C3p}I|gH_rK>?Xa)lqH3IX at O#RFd=m1o=sVF*aQSw_%V8HBIB7i zgOVr<(3nA^%CyGd0mISpO|1QIO`<)XodTqP-mKmuM0nY_&eBu3CV4O;iJwBYa)6izUwsD)T-VV#S#pQ3UOg^ip2EBX zejYw00{Jq+i+Sez+zhVcfz}cGYMWuBSI+bN21%a#NP&!*n_n z_pq?OVo{@u2O?bQdiZs+KzYaA6aFQ0CMPr6Tv^M~1R!$hJTFPxfojI^)reFj>DU2V zu?ZBDo;=<~X2Ho^8?wKK1PfB~XmW`ca1Ntr%<8 at k*y=lUk~Uc!RW54TmNa^7o$LG7 zlA)P=cgU4$caf8;(WaZzm-lWcze|^mSk%VRYluz za7Df$-IRUu2s)D|lYon6HOtg3W0HUify-)@a&@9Xras*)(UN`IGH8;Qi-0T2eyVY_ zLB}-FEYYfQ;s`PmGLs at Ra3>e`%#nqSB)Pg$dOfLN{`XerY5XeKJ<`t4d>`Z9G7-Et z%M|zQFt4)l`PMlDo8iMPbsurj*63NuzWR at GzdztaIz_=k-hM&o+xh5GA4Z)uYCypE zB6}pY+h>PBH_J%OP|KLlpyAlhV9%i8RIn`qrzdXr^1`pt)Gk;|eT at y`ZWA;O27vSKNM z at Z|70S`ko&MVq~otZ?g3w72LZ(8aActmRZA_BZ7=*C>wc>zy_gOa~Vn*$TRTd9XKG zj?s1);$11^{6V&sN+VcEz8Hm9>d2{4RS+t1bwY=vubN`XQe*Y>)RtKWTY` zZj5Hk$s-&woRHNsf)EFXgI^*hf{?pI94Ibm;t_?I*0H)Jfg< zzqXkj_R*Mp4$&Cx_95__T>VQp_z#a9Ass{oQ|ICOLHBpBQGWy;$NbBS8De!&qsV-jtW>H?WPB+wp>*&bt6zwY(LH#)U$85B;s4@(Nz`f0XqaZz}#9njVt z!h&S|GlLCZ^&Cs2Q at -1>;O$e5ATRy+L`EfDy+X+FcVj} ztK%VA=|%e~LaCVyT*Q|55_ZAcGfp1}A5fR_zu2kg75QH_gl7WhPkB?BBq- at 8vfOgr zroFEOSvqc(g?l~_j1h3~E>@iP$+;{TM^;?TAlDh^Ive*TVRdlhHlWGw=}V0hg2qt2 zVaS&{5KFZ2u;m-K)Bppo5x)TE1;2EbjMxX%2&T>bzV#JaVy#ng=E{LRDgAy6ah%t? zPTF&DHm-(umDx at nH@~XLS0 at K*$M4{7jm8l3Ge92f`EFVyR1J{yFYHU*4tmhDn26(h z>?!SynlopQN#ipld$6ykUl^7ojaV-D2_&*4hZogw+b)`QF_XX6_);>eO}Q5Hx2YGJ z+D>X3q~6?AxK!d%w at Ws;g3y(&OVkk(l~~Fn at 3kvi9zsKuDSgsw1y%U-qGF3s)TWza zAOH9muGc0=;8Lz0W2R7?id||)X>c}Ts%8EdsH*C0{EB;N-LAP*0aNV=$ds_*ZvK}2 zG&MV$t%WjgT_b}}=DcRvBr-dBjWRZhYm$d=+1QJR9jZ{_(`>2v*=j#aNpce7y6H8` zVN3mo2b09TYOd3pN7xg z9oM!M|M>E*v|}2Vz9^^f!QS_fJ}i#={46QA5qPZtn&4krb=Tlj+D2`&FsN}8Ofnw~ zQ&zBP1{gUC5T%35XAK!TeI%tonDs at YOx}OyZ9IEZcwszi+ttYpOQU*Ln}A2pDz*^R z#vmk#2^s%soddk_KF_m(563tW-cXzMMb+ld?LRtN+(tW>dl<`v=vv#+?dcy at eGN}| z4y)FE|MV1}`1-6i*va_)!_hCARtWs~gU8o@)mZzJrFBbohy5=_YejnXc`OjvKa z(BN${Nb1+vO8#@E>|}0kU|1K=S##G=GZr!uz!a~S=I1tfZyCgwQV281P8uWtbMIRu z#4-$M_xu^g|Bfug!QnN6X>I+cTtbSd&~|opC`~tM9bYR-z4zR9R;nb=2Qq?sJQv|b zubvy^4f&$sN$R8m10r0e?fW`8L|p6^XYX>;1BI5OA}XxXFSgW48ISqe*YoeUMQ^s2 z)W4oq)geJZeEaWji+ at A$rZ}i!X<-llwS!y at f#Le1f|0CR at um8DT4>7TvWJBkv+$grhKe(TOilSXVzFUy9A8? zXHaujcK*BfnxikJokhW6 at ryipe8%)_xLi?$fpXn8nT|YDDP&txGde&HSk(-87-^`Y zew4U7Rd?jl7;zO!U$7}oVH0>#7F~OCUK&f0#CGS at p2klrKA8hEcBKwXi%#km>ueR^ z1Ik|8I-8YA(u)c`h1BHn8d7CfJ0-dv(KvK9nGPAI_3K8Pw<~Sh8bU;o$_7reHkwot z`R$WammKY~2gcg+s01v#^`)(b8ui({13lb)P*gsh!5n at Owb=IF7np>Y&$?omR-E#C zNl4q)X#=fXCmuEqW#^mkHOt zJ at rbKxmn!{sqoBZV4di~$q-H+VQG14`fCdK2#?*SX1Z?;3UjPD5}Y4O^AL1M>o|;M zC<8IqOa~MPwSZ_EV=p z7mQ+c)0tN4rpU$oiQ_zj=8ST6(H4A^8HeDxo8^@{#@`9SVmK)0O7nK8xbcq*Mfr2a z@*|?%4ztaIf at QNW)#8^wTM#|gyDnZ&8?~W9Oljsi&z6BvSWf8e>Ebg){BZ{DiW*sG zF*QgA){Shc_Ob8#r at FDO-?>8*$H_no-0SZ?nEE&v`as9bbRoV(?uhkURN|@VMC#;Ri1jkH&p(iwb!vGY;hQCDy&Q3DGp}$f zw8~1|4*$5rOD+!#ccKmiLn2>zA)>blJ>?Tk at 4~Jv*B$1^?O*3d zX9ihd9~VsB^0rNP77t|xw3!I_ezB)^U`B;Wyd_H^iq=f*`OGalNh{IKE-Bv)9^WnZ z;WM1UGaeB(P1YEveG!yen;u>~j{f_94ED2U=WScyARvU%|Hs#^|2M90Op1+r;xJC= zHrn{o3cPQpaWB4EbRQBl)Rzp{R0?y95DS_5kYG$g3Z&JM5zLW>)u(2?435oI_ifd= zekr6Rj-)G_j4Ow=65q at go3~ow*T&MPEvK(TJc2FL-nrgZM^o8OTyHOb4LeYcVLmkw z at p9+~j$O85q&B_Uk%7>y26kSsv(nTM(bt1K?3n(xUKD_g_j-uDN3A#>>^+5b zVJ`+ifqPyc#?cct;>0nIWcs!izFBu(UFr)I(0_uA{=({0dKcn;7!fXAScPZsy}aM# zXc{{f5Ln}!^nwI5o4~_~We+TO{`JBDOq?)c$TICNa?W at m0*`JNw~ehRC3wozsP-2BqwnwZgZP zBPQdr>2Wjv28ukxm6q^6)O5X7t;NrlGL=B?kg2I_Dd$yQqxMv`Lzhqi%@PYZ>o+EP zt-jA!>Sev80_o|N%MAi68Lhm|Bu(p%YE!Uh5Z2FZt#SRKO=W2f7AmAjn<^149QY{r zW1P*+Cu~K=Bdx1z;p9oemvcAATB=J zMJ0tbrHk=R`>~POn0LfA{17mXky6MwtR35!Wz0M38hOYuPLR^bc&z;y6sSwv;~#Z0 zsL=h;G%CZVULIjZvmu-$dpA@?8mQ`@J~%S6CR01%a7tTa5$ObX>2W at 2EwnP}xuodP zRCy?%BroI-;AHM==NBeNPkSu{1;BiO{qS*H3jIHbg{UFww*fYw0e}UMF^@H99^k-Z z4jKoT at z|$vP7qviZJ4ET6SFen#}dX8{9geZ|Hai%`(HSXVR4deG2QW2Rd2$rlJjR> zwYH>y?V#bZLl;*C at lU!&6N8~9BHDJ5seXPLxuQvlkKEo4`M--CxXX&Qp_L!>kxsoo zzGFtCd2yEypN2l|bj>N^;_HM|^yeV(aAbApk|vL%go?Np1#vBraM zDJruxI|pU&=v>t$W)Js-%|&4k_v~~p1I#o>>JkNRJ|WoC1vj6%x?Jw1oFKZ$fj5hr zK^A*_?!}w0(vcjGZSmKYU%T%n>?Bw3-pkN+e#5z554PKP5@`hNu#0J;qE8`0V(cvs;JT!JF z%0XRXpNh-2z@;^2%{r at Q;KEv8O at k!p>$XJB*{JhRxDe2zt)Klwb7?ksNz~IB$H0PR486d&4dtC>3i-8A zMG?&#MzASkD_mAz1gEBukR=b6#e~}MJJV;dP6|?EHT^_Ap^6pLfPN*`pC!wQ#+HIU z!d}11pOWX$xY}{~qdu5O)%VsdH745L3n(Zk z5X)eeIZzhD;rVz_&9?}!&4Qtjd3Yvv06X1w8C(vwPlB8ClTEK{6`V26z8U`#{L`(H z@#6sNo4&P!tK<5v*rX0io|R5eFum=qS^-HKkd53IYA^HT_ at yk^H%dYldjH zT(uEEU>;z|&(I|6MGP1`frpLC8d&6<_F at M7Hjzt9Z1JhSi+^v0IGir5#nbl=?3X!W z!BJ!lEdEF73;GF;YH_C60t=mEU-W?Y6RBP>fydzMuIFIjYD?gGi*zXv9F%X~p3jm@ zJSm=-J{uY@&cXg$7L9x5w$Gen_Jr#X+yHK;x)<#pT4sevZ#80A2LGn&{n5k?#^_#izAZoRXoX7c6&1ieGWBI%=#w;=XCBUHBl`iaC|N1&)NnA=V?vvYi z%c$z`;Ll6vFam=WRHdZ;&mHmdZ+p}cAua719lCtqN){}yJ$%m*d)Pv!l%+CZB#N^? zjmNpvR{IjiQqntK_&h^5er-B*$WZi!Z?=O`P=KB{=<@a6sW3{v$8cqRd?@-Z`(m^E zNHc;-98p7keacMuxH4p;hv#t53>^k^4`WO=vNri@&+`4uf!SJi?{tjp*k-##Tb=`E!2s3eZQ;Hxf<2;d}H#y7#6qZ#Hi#NoT?BkHM2ip zm_jSZB1a}CEEjF@)8e-UnOv4dxP`FXFN-v)(F9Wh6W-ngO9G40y6F1oMq+c`LD#fH z_;HmKGsa;Z#kwqWUa)J%A at aCRiW}px&Sz|(HZ8~>?*uT}Io1^C?`~*1A15Joty~rN zWIV7SwvrGY8_PB2h2(f1yJvfKyQW85lTA8l)$%&EmagbfPrP`VeT*_x;$C+&8gwIY4Am-Sx!sjMt+i*$)5Oc{BmLN+Z zqv4mJNTINYnuYF%!l9rMka7u_dM(_f?YazLh0>rX5#(?Qn0YPTWbJxWk3FBw5(-Hk z>Uc#l?-R)%62JNrZ7CY%eASXT$km5i(wJxmR>>VOb_Tn*_}weNA$gVB^aQ!OI2f`D zFw}f|!xcy^3NHV0P4TB~^2V`Ks(apm#$WXF+eCp;Z-=SH3+F`lJK?Tjr_s^g)Gie5 zAlxlEd%_P(N?z1|%|=$hHW6o~lw+(Bh^Hj4;WBkgl*-h7^YeQ|C4-ftUOruxvD4|@ zsFhaHe^<=?pyGQh)SRy#b~x33H7WqE2Zm{$$fMTgA=Qp?wBor3gsM6m$b^EF#(0Dz z#%bvqKIP;Tgmut_pp-o0SA~3KN(car=Q+{tB zVm~olCH&fV!Tgy%ThaL7<`7f3a|9~Xt8WuOoQ3lj`k+F*Q8VE0N$e>Zo$Df$kBr$( z@`IT|T;Uu-Bv4y0=!u)KaQWfU=}Djw8KljVE3os+A?KXDH#-MQ_y*wmY7mE^&Rs``-S`xA$+$!Tfd*q)+DY z%s|kE|^g4-=i(w=adl{a9Uz8|s@(?U}aS66|yb*+A64Txw55mk*$ zU(K#An^xq6CH$RAxF%@Mjd~y2nP6+8E2(KGWeB#9ebAUgWflT zNsQiRNHcx^{yn1?;S^DrNx^}|o{HFZw zV|UnJZ&vx+`0&%ib)I*9{9w6B{pvfP*jO-lFSb4Z=yAc6zSQ=mD1!xew8&Kb@~&JZ z9z9U2f=;XHvO;w%U{avrLAOivk7Y-*o}Uv-%1ATurh=vCTt>*PlmSQWu{z6gOht$_ z<5o;Jw*{HH(mWF ztIGt#twjcEU-wNPCe at urIcB;iiFr0VIm}Q#@rgm3f~_^IMBDqpG!^;EmT?)x at 1Z5i zE!Bm8DbJg}!bvu(v*s?zuNR~b?`8MXbFO;8s-0$?@x|;rBoaXS2{_veiArQvY{PeBz1nMvVvoi@%1 at lu@#+30?v>UWmhNF(#?-&khu-vcKs{Jz<`*lLSHKh<4Wx~@+SZhuueRt|V+ zo>T#W1>T at FDp z4GAr$9oMa81&2M9_hI`z5ci?Ffjmr5pX#aaMwE$wND+aJFZZuXUPvG0(?}0F`APt- zu3rd9)O%R+J;ty;(CoBnb`8d%(Dy+UY3IM%FgzYYVV+D at RERM)q)epTI4=H1c_~5p z>-MdSXfr$$o-88 at q9EJCv;~n at i%fRa;Pg`xQh!~A|AHXZ%r4y&jPZj}RjG4ul6_=4 zGm~Eq#%hJvrd*KWYUj!E_Q!nPtA?n$)Urpz>VMgJOtE;<6nm`X_rxA&kiH%Zs=oo=a$(~ zw&&KS|EKUj=^!mG at R$Ng>+VLzZ!Bn-7?cr)0vdA3p7!HI?V+p7eqjnCnQ%h7Fb|M2#=Gx;>`33nS{Zon?lnA$f_zI8MqinJ z&+q+m6bFsUW`xNz_+H;@a-;+u3kallPI_SvGMmUnBDVSz-GRPOg``RE!Q=tIH}~2c zjYC?c^EDRoc5Pkk$XH!5?y!$ze!J$v8 z^tHMYdEolan?I(>hmjq-j!#rp4=QDR-vdUB5K*SQc)H=en)!(yrA>Y3K7#>yG0~#g zM}Zz78NJ^Mnco!JSs7zI(!5riZ~a`c*4aICc_iRUJ7dz$d64MQHZfz%U|a-eS@^l` zSA%mJ6kJl;T*%~4?Cd$V|L)#4edY?BleCh=&)%=B3!SFhkKly-62&~&r?qy;JqNV> zNi8deN>-!VYN7l68nI_txJn>-fzO}LQmc2|t#mu*r*TKr$)6(rhc;alqxSr50HkbN z0|T~e+q$o#61)<|WC at MAceG-y-k%fJtFk1P;cJ&xqIaH^_Zs6F5`e&%bvXZ|do@=Q zOed~^ZEGlE4#B`?-_rgWd^3^d$hilw6PGEiBAy0ip5)~5K7w=}{)f&N!sb^}9MLbS z1oFZk4LLceZpk)3(gm9kZBWwkb4WAd%+0 at I5JggQa%|c0c4(-GXc&w&5?@AzsRfUQ z!~XSJZ;n3q*OA=hx8*nJM*UWn?|8{$)R2|$Y!6_|%g at hu>2zq=h(K|NlIXS;FhzZ= zjiVIX{liM{GBQ;aLr7|UA)uvJUCVr>kP5Z^CX>{iyt){9CXj^Xbf`2sob`7i4ezk<4GeF zqLuv&|Jiq|QgfrEVe;)YYh at 7Q@L%0x--c$VF^;93?GIOm;t%k5q+O6*kzMSMSNiG` z&G3dDV+DzQc^_Raj(K`re($3Xo5X%2mg0?dAwK5mb4l389=3^PC${39a>+Ud^}59G z8+pZW{o&8WVd|{Ug%rFr)YXfhl^fCR;hh_ww!R&KIgbUx!KTE%Y;CX-H&>D!FXiVq znYh~-ZZ~_T#y0oM9X5~(dIcDn4?>Jzb;HzpzWeUoy*y}`KyioztX|9wIU!sUP1Ri* z_i({!rah+mtoa}fmrPSt7ZKKCo-&>ykbz6so+8*FvIFOd_DW-;6l8S!bMHG?EHVry zj+RtIpu|i6He^o*tQJ{{GfkVLAyDdNc>8Nlf|~yMM=@^zJBif}lMhVKn|qerU#Eff z(}{g^PVvw2#(V>bAtrM}>iHYgF=B7#s59Xp&x+Tmau()E775MyALiSlOBTGnBd|)U zeDjMp%$<5Ur5{0eE-%%BiJxDj=Bvi+M!aADa(M3e-x*HDy)|VWSS(5$|UfMeQJekEX1>h$gQO$P8W}Dg~ukdX_vxW8{O$6 z#|`B!TPH(NQXEs7F)zIOgaN4O>bcZuu(j=x at 2oikAD#kXr8h3#B)NGuNe1TC#pNYE z6H>X~H9aHP?+FoW@|0y&Qm_qVU0RYb>56$($BN{grRh at HRHV}>EgEuaw8$MIb858d z94c~Zbf_FMau}+0*W3k_bYq$be7c)-ZPUU$6CZy!HT!fm{g~S-5^IV at n32@Nay;%J)3GcZ58osiAgZ_jE!k9ZXJ;HuFEvclIe5Ij--cI*ObZY zr-$rXT!darv4w9MvqMlM`Vj(2gc2f3q!2G|8Ol~5ZVjKTQ}Xp=Z_A(?%-HAW#VQof`ccQXMJH} zOT(UaD$~As{)F@?XRsEoD%JABxP)dt=qp>?lc;!7e&7CJ^o2gi-u- zF)n?5{TTS=-_1@7+&+SG>nL9TSs>i-CUk>kt5TWi4p(cOBMG znr^JV<8RN7tfW!G$9G1Z$6XW~KYM8VjP?ShZv25v;1IH#95kGk(EJ;g-WvvBrT{d7 zkm|}2`QVKmFjFvuAfV7WDohCZZ{ZCz8b)XwPK&QHa*qaRQ4C|?8awACKW+C3kzXJQ z;8)Brn|TW z{N61bM{Q&2aIrX&P-?rwy|@L@}qaJ5tW_*(Ys`b z(>H*uT{&QfK=fDmpZ%Mpl5BbX?1Isz at U#Ns1JDDOw^y0V2z-@|1GLjVc-rvOkXD zQGP;xZvVKTyvYn=?F}F~zo(x;(B2Y1?}i?2o&c79V?RH#kG6Ad06FwKV(l#;(WI{5 zPH at 5$zu<-st&t#@?UgnTkl&3VJz_=H@=6SQLH>rlbz$;lKpNQUr9A?W z-K{3YWsTPK$_%p&Wkqy)s!KDe>hB^=0Ys~Lg at qL(@8fKpnh*>?13kU9rvNIuo1~`5 ziP&5F`JpBa{l0>O1Y6TtywV4OEkib+ZTu%NwhTCsC(*gkpN_L7dxcyHW at r2((E|VW#K7J89jCw#9u=CXBZIb3-K`N$N+Qh8QdT{hbJ@}a z0v!btDO!x_v3?@6bRXMP$|cK8)!Pj97EMJ)O)@#lw8Zq#A$xx_3aQ32amGdIM+lUDbWD6S#$ni;FG?eHIn9oAh6C at 8Cv z7&**=;n*|{D1O+s_bP;EsH=DigJ<1K$#J<89ET^;#dCS_^_=zQvP&5w!;N-_e%6h2 zVl;hmA{ebF3z%#s4qS;5i!<&KJW3-9t#MAu3Rp(N at S9(^c9}&?8foM8W)D!&6=o1h z%+imBpr2S|4-#$K7Zi+0g0gT4j``yYg{cAEpae at f z8usCNv&}*7@}&>+<(q)Ns3KR`ddK_{)FZG=esiydAKBx#Con38hAvHJqRj at G))617 zm)Q>KTMk6)?VJ2G6p0qx-xwK{92{0xRTpRH+KMY~3 at d7Q#!lgi+I98#mYUpK at 2eco zl&!{FxVD~H=I3}B9k1=Lbs_-=@KOpjRe7G0Wyc{Ne4_>WZz)qLIa`i7_4yOPOOxB~ zx)Lrmm8~7k)iv3*lJyU{Q^VnVtuOl at FV@B~KT(B0X=Aa#sZiqu&mX;av_e27DX4l8 z1xjTiltHKm^wR;BFMkHL3Riv+6|Rg~V5M>~XSUhzx($sY7Ju4$#GsD|KokC~NYNnEBY1H*WkzpLxfX zJT(fWKXHi3oa)*ZJ$|TPv*SvYS_!(?b>&R81L=<+ at -Z*FwFQmG=sWJYvZv~SHpULQ zm|NXe#}84NJzd+P#y9n^c3oLg-#{DFhhLb{T)o4`2lPpI?`TtpK>|}2WT_wejHyui zsIK0>#uGsp`Pa*2f+2lU0cGeFv3n-zH_f$?&J2QY4q<=Q8;Dw4n(xH;o at U7M{Cw5P zZUt|eVdg-6Qm?yr*R<{B4pMfWZ;v at 1x>P-`MS4z3zET?P7W^@cAA~d0PI5%qD at AvK z2AdeToqp6GxhL8_QKWE_s#Ztm&|x!kt($k(IFbI=$sKhncSk4q zu$tM)&AVf~i}~8wyL7xmf9vv&H1(;ybNcXunauemZ#+z2=;96|HLl%n;&7k&scqwW zu3cc~E^nMhUuYBo>N#6MCv;kwA|SB^>Y1 at Q_sxnZXMW%r4az|(58kL3&t}@Qj1yJ4 zn>dnbClTH2%dfWs{ynM+e{-Yo*PiI at A0Nka`c+g=DRzB#}06 zaNct+N_z;@y(16Np+AiyG!+SMu^-Bb-=M`G$+(7n(#-%Q(XYF9t_7XoQo=zp>1#64 zz;{o-O(y$pJ?(NBjTdBWm>n2eAwQdG(uO8gZim2kjL#JXwgH8?(z~zX%svNov)g>; z?zy#+f1$UX3oAEH0C52ib$!z$Y&;jR41QSK^vKL>G9PJ?xj^Onp9#jdYUqLx#dBvw zY%@x0AH{-S?Tz!A;ADKA$)LoF45%+nFrWsC1y$DylY(aFNEt3&GGL?e(r5uP^WmeA zIFQL1q4F4M)BpoKf-=lBI)EG=Q5q9K%Q%Ob6<}nX-%CNlsmxR-Zd}gHSttLMTDkCz zunb2Ue&I9#_6#NglA)QaPWCI)@7WI&a~Mq|jom|foeO%of)oub^W=6YgB%4XdQpQ6gR*@< zL5VPmI6Mk*0O$5z=AccVq9AsdDO?_ at I5y{+-WN!`lUZ11Y>@U2rr=O-F=Q%|e*Q2a zNYyy5chM&+$PT&&3uGAgmO9(n))h&^z8f*6Rsli1D10W3uxGS&Q&4GR<)#7PJf#P-I2$T;EFs>2$UVyM^hc zw^Qm98zU>U?qu+1wJ3A3nGHGUKL6!)c5G$OG{)w1zunFoBw zJxS^VQY^ygRL#SthBGpZxMs8BW0f;W>sz5vi=QDih;rl0M^@2G%hqzG;f~@Kedi|B zXG&m at Hate=il|~5;mhV;VQetu7L>wmQqHhL)j7$vL)F7ivb!?NXIv((2e2(yF-A{v z+7(1#o8w at I%+p3PP88({_q)-_GBOs0>uQUB51cW at _GhA`ebtdxwMMdu{KVB%L#~?< zXPpsc2i7|igTEp%VFxocsUX+SD6%f}b49Wt(WoFd&d9ND^p|6QW4tK9x7oFiRKcAp z#dp{>jbz1TF2%PqK?Cz3EvrPgIzxe>ky at 4Io9a?c6M!9b)Ow)Yf{p$GY#dzD(y}J! zpQe$(QrZ$-uN2b^;4xi^o>xS{SU&?cJ7cFL>wNz?b|Yiwch>d(b!<1rPBGTyeqZc+ z#!e;H?S3h2Bt}2^`k8(j>?lS*Srvy}q)0ICr)>RTe=4>d6D(bdPP8&(tF|ac<4Rn? z(4I)7Zj>199&VT#C1Y$!StCzQ!PcI6Bo1z=G9{CyN>vk2rfD+x1)DBv5!)teoR$sO zj;;asoQ{yOra;?)Rc_XrRVuy_ltSU;;(rCP6Y!TjbhwxB)AncgLku8NXs0CjSFtiQ z0c|LXGNi$SfeUU at Kk1nZ-a{}{-mb+7no}RdGY)bHOK;w<@7l1z^_Zc?oXB8o|F5KQ z19e!T`{@A4+F$WrG|{3+g{Ns|HwySsWc at tvSkY+W#-hfw^2qAFMZFYh#M&^2L1y_B zbtv>u9VW6nvT1}Ms1lgRfrnntJo+2h33xvUcBtHeDr2%V5 at JZVUxxs05c&~}R{#5s zk2dFb3)rXNNMY#`+Luj_%k9V>JsU_LbmzOC3HIvUe2aax!k z`6$X{Yp4vO$0BU*OjXF6aFwD;V)PI6MPk>Y)DONRbHf&5UJzBNN$1kroX~eFg=&5C;+Ulyba`-&svGr!sB{9G5b_b6G_fZ>VwpMjhM^8CSmlD&%%I zn%nZ-?lh(SnXcaso`TE=PVDEJA^ z#r6R85ARJQ@}~!?tQ?}!;s$E0Tp|ib_0V0oNc;qE<2<$({00kSKekbf?Byc98K?~I z86m>yt4!=|Bf=S|^zWen#cBXL?^3&U46-u#%5?@9rY5w+E)oPtas4V<+KhMDv26ue zK&@R61HJYELzc4yRTLyJv8K#)SB>W|(iT^Cw~1k>{)QpTMS>~nXTOeRem}3Lu|QN_ zzqi&xJ*_HeClY}%5{J3nlp+cfC|8p<*sl({i1fiNM%2=0O_z|~tzaP3PI^Hew at Mp`7W zZ(T5M<4#qe7~di-wL&*Xs2GYTmB`19sX(1w9x+wd7_`(PT at yGMUtM1|9}Y~Mvi2Qo z3;EhSaO+jYL=em55y^C_n_=&k;&y~xO>jkaNu)1XKttduNntPxQe&Hwp^BfjHL{YC{wq(8qPB at V@0AomNagj<|At@%Xzt-1_hA5_1ra; zzNG709xy{CbL$AUmqlDPdYWs5a$PE!YaY#gD-_eOSCLeg%xwh zu7FLr!vu*RT~~%pgu|eSQC)ckcL8vj0~n}Myu|ze)ti^K=bSM>fNI5?weOrW0E3Fh ztH0-*K7fO&RUae-vAm58g~Kgu=yU3Gx;59Q8>3)$WxRa1_|fI}>^3AM6mRe2<+Y`d zdvu;s*cq8A=%KKQWH}pnfb?({fH{w+elG(x7?Y97!ENU_yHU}m;MQ at 3I+>l(!Qp9l zHM>#SrsURh^kp(QBa8#hZY at KKBhHp|UZBQX^uFkbZgM`uieuU~XI`Mz`}=*t5!K{) zh89OH8^)eh^55lKf`XuF)%Dx56mhDm`K0j zKJDQ$OPBvY#@_im({0-pj%_;?+sPZ-72CFL+qP}nwry8jsU&YuQ3ZFc at 0`=_-K%|V zpZ&u#TYLV1F~{h$kKTK}knlsP36QYAXk4~RNjRR)PX{o~uy0M&Pu4OJqwI@(uz?Lw zG0+r#P+e{Y~ZxWtrcC>;!@`AB at 6@x`LQ)Q}ob)~ZbQk9(ZRN>!vQ zmLG*kVWo_&#AewlO{F2l6O(28sJFyeGKHdNkLi>fy*4ij!zDG3&NPE!=#?I|MRl1a zg?AC(CHcW%-W0|wK8t;)-ZDC at M~W2*lT#knBixAV at x*qA-pk-quH5wVIhS zjZREO%j15bwD^9Z*7!9r9DwFfC%`(2wOuUA_)cemqJ;^eQE*%YEV><^NT%sAi%4G_ z6-pd&$-T1G+1EQ2V?% z^NA7-G|FxQrFe`mT%PDmbr$u+H1i}(KN9a!iiax!O&iZqGHWf_mMR+8jB^?fspQBX z_B7%D84I3is5>ZjOd-pvFWh&BN9l9VJZ554Z9$92=fX1g0ATm_UObsH?6x2 at _slPK zsFVyi)gMa;6MX##(VtBpT1*TM0wM?n0z&=24hxFP(hC3MXLqTLE{yUS{>z-x=#*8W zYbb`i at NSq6bqI$Y2gaPjY?^o-jf at c!uui$80i^K-t6TO=PsbYY!zvKI&Zoyoq}?K3 zS($itdw!h#eEEIK8`v at lU3ln?(vrEtTy!LX@*#ESoWgHK81nOW{h3WF+^cXf{g=PEGOb*u?v#$O*o;Ur0Z?o0x(_qFyBGhXm z!@BMi436JUPib4f_uh!Y<^qX?qI<-9PEErJthP1Ff&N at n{5G^;{N zuQz|=295ZT&(Vv)Lo^6BRgDE&HE^r<9kH5-dAs`jA at EDG3^%4#v$$>uo7Y!Jr`3mI zMKP~pklVJhC4XMolr`2^UB{>jDb%v-EW7WWtDD|&%x1&kn)2`(9z=5nll&?e8^lOQ z^hWkTj6J5loyWx)O$;*9m+-_rHA4^u)8qYv0&}ZJx;KVK2#<*!Ew+=rP*Kehl1h at FdmPPgmu1SIfK2)} z*?_>&;bW8yyW4k+1 zDB2$cH}q-ztU^M^Z1ob%aISeNLAg-%^2{*gcMlfh6w!jigt&mfCwFYgiW8WWxUBgZ z39pH|H%DO!g%WIRrzyH$u^O3zPej`>8a*%FJJ$C;zI~msbVNKiMQRcQ`;a$Q;59^= z6KdpqK$+;{g%7y0&5A!FFuo$^yg15&g{`fORc z=ZBlEfG?kC zgxxh}P7n+zdc+6tZ^J at bBf}t_gM;bO(b3g`+8i<+EoTftrcN6+6;})mD{X!DR3AMy z9>i_iK9>>hf2xklYT8%yJg&{D$WZF-vrc=qbU(`j)!U}a=H#%}to?fw&7~X8zMFR$ z+7k|%S7kG#LIx|?c5I-a;HMtT5BVxiVRhVt9h|&3W40snVE#(oBjT!RQEr4#evV(V zky`%+qx+pa0lnfx8 at XyNMSQ|0v#&2tqQ~~OGqjS`=rU=rP0VS--?&0=$ELi_e&;Sb z>sZ&Mb+dZMe$1XXcT1tc^GQF%&Y-khOPyfhvK}s1pxD`nOsfcZV-gXLs3X79($fd9 zkd=x#dwHfqks^mbId1PgqY8B|u3Oa`00YG^K}?(S>FY~t$hYTknRIJ3#uM$(?sM;J zx&ii<5Sw6ir3bMOL{fn7RKn8xn(>3rysQl>bXt51BA3AhSIGo0kC>)U5u|ug!e^FG z7c5Ys2zHyi*H#q?ZV|pR^p>sI}2z$@C%ex(r?ZV-Ag8TlHA(*(ZHxV)%yr0UNpz{d& zo%*_!s5sXc5fm81sf*Rj6UfO?vBGU9e)2mGWan^Hz{5RA{Iw ze`K*<3-%MM)2>YDR8#qb(_yVmoU%?AnL(Vv1*_K1|6Q)RSE{aI`Mcajr$P_joda8f z+myq{KQdoIPEW00AwfWN5dN(S_P=XXTJisr!~S2Qgk%WCanQ@&Mu&G(i+3S at qe;6iPlq=ktp5 at GvG006 z!sRmTUWn*P at Q=s*{-4?Bn*&aJ at XUyV=A*#~M&HncJg%crDn{EOT!2N_X|7O0%p)H! zHbinQHl(+fTu at yW&YPT}qx3g3Q0R~uFh8tGV at L6CcA!It)j|W1y9o8L2%3d~LvBHK zSU~0%Rl^?08zVvr39)?3RVAmiK{H%qe zq+tUj7W0dUVF4r-+l#W{0Aw|;FNNbE7zaW>7MEp^8$v%SmuZkY)BzkpyAXEBEkwNL zAu-eeJb{`JcnEQB=hbKeo^HQkBL at nSEfA7p*7ioew3l#7%z!6b>ebCx*2JwTY*R`}B&>ae-xJS!ZWk^&DZxQdbno?_*-q=ch{IQ at 4$YcmK=f z)OsZ99WTeD;32MGRZVB``q_J+aCD(vxHuXs?R28}!l9J+O zNxvUcVjBUW?xL%%qiT>~7!Q?ovVO$_73R4vI?DXjC2ei&uo~1`1wSurBkyeYXpNCJ zoQ`q*qZK;u(EZmPzdEhEoX`e3?`Zwqj&X?20~)%PLPGJS0e!aZ&C*SmCMo7C3+91y z0Km at HFT<9UxoUM#Ed^Qn)N4l}O!N z>{3Y`;~w=J!x(xgUj7Ladwj}Q>)b(Y#+~%B1Dl^z{+P?^J)hT#)ayBGk=|G+?_}q< zg92<*1$!68uM|(E-v&}$nP(V7N^XQ%9*3RZ;5Whbe;~gra`wh*nDP=THRl at Bunsci z^;oOFa+s>^`9RLclsL<#aPy6Ftz0=5zb8~=2dOkaTVWg`_EtdwG!W@)ezN9H%*Rf1 zjsVK((;7e=j_fe6)t0gd{M=Q6vO13Ca9Ezuw at 8o*FDY+MQX6ty+i>C%PaLKO!7|?5 z at gxfjeY>(5kN2e+1!h7S{zZ>5xljm~KBWfq2&qy7vTrG_aMT%w%@8WC(V4VE?65a0 zG^X7UY~-0$7WkEkh2Mj0(+v9|;9Wa{pvg7KheEvTgCfW^>4n?! zEea)qDbV<8&+#>Bhge~My6z1+!{U)!uEHbKCKgHuOFoK#&!N3gz+8w!1*5foM_EP$ zH-aTat6iqT(_|RJgI)hg1b#)X$utDjw>fBn)+)1Dl!3EJJwyrH{iqC{LvgV_V~;w` zeCcNIlIa++%_?^iw%sg?5x$*E$yWq0DyCm8N6(fOvBiTO!X at 9Ltd_bsnY&oo;Y+9T)%8W{qWoe8UH8JX)Y>a+QPC*Gs zO3l7N(hGKXdI_dvmL{6w;|V-ti^4=EGJ{N?4hk at Ve*}J^%FZ zX8#mI{R}SRW>(69NdSP4ZHG`VsTZo+h-R(FNpF9fZadB_&Kp*}CfK`z{dv|G at m%H) z{0EeRW7}Bi`fJKFhyJ(b;Q!M>Lec^B7x zL7->hW~=2KcrG~b0cwaDLGq%6aEzYHzPo4`;e=_1<@2lRLK7zCGd1oH&n!q2kjW20 z)s0*$pxi`>rymjm9NCp#`jF|31=tmT3i^$#f3b-bWE{t{as&^A^|e2oiGvI5$X1}Q zO>JA at yaw!{%cQ|>O%5yLNx7*4kQTsNP`kqz5u{YM(`qg!+kZKb^ChSq2(k=sX z95a>aqyv&NHH{77x#nLUP0GoQc-gX1#iOH97H z!@Wnp?|IVaQ1OFg6GLN`Vh1x-Hq56PvcrTB>M*$Fvy)*gO;6^Z zun=ZL at qt;)l9aD(bv$;?r03pozPBfZON_kGaw6>50p0opcKRVq#)P0GkdJ!>`_ zcpZB7?(Y;vVKq1}iNt$|;Lw$@vvJB(gAA*Pw#7z=cn5HBzmUUi$-ILS z3f6_+65e1qr&36-;H*A}{UQyRpTPPj?)mGdq at G@BKC#x--rc6hE?zL+rwmX%LBCA2 z3^Rc&(#K{vfW&lvJOXL?CQ#y+Q~as1EejY*rZ0r+sVV~0ER$^J`Bn=2Q_PN^Bki&M zanid(dTmWM)+R$I3XA<;N2>jsi}}H{2jtD0O13gh;Ip517+%(q1d67F&xtB012pji z=L<&-Fb?>NTS=QRtgYM?yB1?v9HqfBN=7?LgSsj|d4>B0`i80p5+d~wA5q(Ch6H}Nt6d%U>aG3BY^zZUW=tZr zo%e^kJ6T&ix7yt`56$j|iDS%>A3-KbU?y7T({V*PSc;uk#c-b*=?4D8NTo?latGs^`A&I5^ zlq?i}SUSb~;MuPur=3bJgS_q|chqXRRKB}HXWR8)rQApGcW%D_)n%W?1Hq3s at HfW* zwt+0(hyB^!AkNP}%QYZahXvw}M{3CZ!8-PQr{gw6eDNFHzG*uB<&A5i?>rj)MU8o{ za$$s!lOOk*zA{D?WcOOWIz|~}y7c>so7a(GSO-d*$B`mf2Wp#FFq|>BG{0Ozjqm)z zKH{m3 at 4&;r<1J0^%7=v|*_&R9hDju6jqb?8M&dJPelUcQ#dju*C1A$$7!$=5P!qU_ zvBeb75_pXIVhO5n9YsRY``0 at zqrz*wiyWnr?N9v3fU6*EiX3aenCCKPi7}wdbsPPl z_b+jrN4>SU(+PWsw=}xr4TF!jG`sT&i<#}fWMug&bj*5{45OR%z^G^aIvFq6dx-({ zs1#gW!Gy!<e|^Pj82 zr!v=edt(hhY6_HhFQY;4o{&?e;3_&&gmF})!MNGp+LnX@&ZEcKc2CIA+R&#WBisJX zRSN6eCRRM-bJ#&%Shin~P;CjrM(^^*9xjYKBw3K*XhGuG1yblom)T_$S6RP3jZ$z6 z+@~e^{t~6lF?DfJFvHa2W+A8vZAD6tKHQ^a z3vu=#4Rz|P1R^^-yFB~EDY3p}f+m){85Eg`s13B_kEu2*R(o9f?)|~!aA5gKx~U6K z*484yOnfOTzBV2em#?^|=eMjIx%g5~RsL4G6au`z=34yp{UVMuX|oKx%I=w3LOMJj z8vY&@aV9Mc8M{gH785c)3nQgI!liPD|M%T>d6-b8^s-dhGUR(&vLG5|hB3#~&5_cgz4b#|4P9yB}8XdoeaI z5!l2N=(^oEW9qgK#{Z5di6A40cjg*D;)*~gkay-9J7SMuBbayQnmFQ%fG1#d?i at X0 zji4i_H_i!Key*j~mE_&Q)7g at i@&NWEa<@t^atVk&-VesIOzRili zr at eJ|$MeZxDAaj!dYcyre>3CgjRkS~H at pbZ5?{5K>_g`n>|9EA1-pVx{t{n}m;6KT z8RT3{b_P3>js8;av=}5YwK1ZAFgsA1_WVdiHNaVy-(>y1>NEgZF?8XuW%ZuBdXDsd z!DPe})T<*gK+e8#LFTW)SLv(bF7{?1bKF>m54OG>Tgef=-iCGPCDek(+hq?3>8rGT zIjC|%l1 at VGtKpqsE z2qu6Z`Z>tr2B*Plmksmh-Lw-r)6ZY#d3u9e3;RiY7P`(s^6D>W`qLEW#1;Oz_XQb8 z-&HH$i*u;EK@(P^^@ysx%G8w&i&TG>ug<_Ts7mc6znOM~eXr7x>66f^O!LlLt;kMg zmK#MtWs{rEq$t)O?V~K4#ajASyhPu;NN!vo`A0S(%!~9aM$-^WN0Zt(DRQiQWB7xV z2&HM1z6l75T1P5inXau#Yn%mBpk;2<6&V;=Xr&DkWr at 9Hl&+&mLP~F3re#DzS}Zdf zaz+lnNBV=*TXsgIAySPL?aUOuM!XjFj-+LII6|C{p43WROOwtxFH*Q=d)ONlU%Ye{ z4?ah%R2(6z4U3f&5c3krP0?XNrcB6jl`A(Bjl)*K)6*_KN_NIxF;PM)U at hVPPM}Ro=+PS`XAA!qt3ln&k|A_(?kmz1Cl1jN z2Mt33(1tAoq at zyTLco;Axr=ngF&7O>U>haJaSb&$MKf=WVIY$;`%SVSsYk|<=`n!=dp#!Esk0You-fleP!VNJ+vr|2|g$i+zZvtn;JVmp=fJGA+$GB)E z$8x5zt$3ajf=V0}^IT{6<+x3zQEyb%_)ezTJN)y>X^Fr>@gFLM0~Ds?nPH88+LH)4 zK#HpUHC31VM+C+H<1(xIe-jYQPL*@2r4$Q=bP&hj_oJokYQV}YvFX%Gw5-R*nmPI| z=rUhuvn~51itjp*%ktT5+eo8+C2&9ZoeNl)4}876V-CXZ{uUkLAbikNWGORNnm{%6 z(lVBlA8C|#&Khz zvUlNb^E}X|?Th at 5^ zRU)0Ju>aO4hrZK7$mw$I&Dxf!g?f=Ts_e{>C4b(Ml^gh6rDl~5IT{=oU?t!&kT|

      lMD%A%kI)x@#MtJmPEu7rVEmvm}sJ&&Z4#b+aTctwyXE)TgyWbDo`JbGjYf zrcNS})|5^Rmm6csSzDprYs`J+)S}dq_gl=>VF`T8da4?uHhWHZZ!+4%E?w(cLG`EM zxcjg1+QA^b+B4Q zpcoJ1gJ6n#WpHrDBZHLmhkIl1Sm$RTBrd*x?!^jOKJ#3fr(f7s4jYnhJAuvE;Gd#- zug0MGxm-UZu_LXpZd1KG*IjbpQxW5ixfZAgPF;1k~%l=#R^72qn`f+!+a-5 zehI`I6^?=?7pR3~p}tcrxP at oQ$LcF8UM~K!S=td9q<_ay%^L+4$ z6je0a;#VcVrK)<=!m~o+xml|1-d&kJj84_~r>;hnz2ScCuhJa)j{xt#Sh}j}x!{>$ z_yc@@i2!J%akE{Q<+r0~Q1C?r+Du8MqLS}XwSvp)#t}&_B{X?_S9u%y9++OhUCYa? zd3kvHo(f*52o}7&G%RPupMLQ9bMVSG|)GR~|DFOb3RJ zVcWhckLV#oB}^!clC&6DMRM2Xz^aVE9Vdl%n&6lemm8(sX^v!@09lnb8gEeW(5dhM z1R`cXR7WU}RSl6R^+ at 7lUp!=(0E6%)|msx5VfPBkWFSTHc^Sz+I#`Mv0* zj6Di(*7xwzEaxLW6dx?b<$U?gquWh3qBptamv_+yUv~# z=18l8iA0CpRz=jL*@MElHb;vR%MMmWTGw9tR&C35fLB$F-AsEoFI>HzBA^GmO40MV zO5E-Z;c6A|HwS_MA7egcqjm@<*?h8Mxm6(=E>UE+f!7R%iqRsdOlk6*y^~>MN98oX zfJ^uLkW;(Qy{_NJsm1vyy(>CC;pLCaPs_q8!z0!-S5w2QO;MQ%=$FI;qKnQLGeQRPo;nifq%#wlZ1=~f*Fb}GUbKOR=j)-TpCPKF#!Pwb;5Eq>#9bg=Mbx{myE zMZ;#C6EPeHuObro6^r#e1M>PJ_K}t7bpd?Xf2oSQJzd3MBLMj?+^bL at vV9equSX$DHy7M zJSfzijW-D6eS^yHa2!B^lmHhXsY2cb(ligtlTl33Bs&Iu!Fsz|-Ej0S=?n<@c`;7J zPNI^=vz>~SypPv)Ct~kI$`(cXc{O5sF*`h3R33bIG9K(sX7#cjU3?o8$OSLe}!`fDJKoKsA z2=$ly4R0r5*`kfI5hg(Oh!5&KKojXDybD(;yo)s&{B0lJQvOw3co+617zUmc5BMdV zT7$e-+5HCwM@@lvMPhA7a-YO>sa0bzGs z5D2roJ*0{i#00X93!(#E z#s#r~*s%dLhlJw;Xuyrw0J6ise(4TxalZ5inQ*^^2L)L_QvyA3zqAGim_KU*4Ol*N z0s}1GkwFK{-xWZ=#$FD<_D$Z2LBD2R`U4M8NMXdrBL}IE!Ghp%Jy18ts3F|ho?w2N zu|qH#@2VXdkMBX;%u_=$8tsMzJYjTVA1ep>u-%Y38jOEH+$?wo4uaz%qv4qFX&z4C zWWe%;-YEtVTky#qI*((5AzSc?98%$E!0{zFDI6-rO2YGn-)ROFn7*eDDzFhz0X at eT zVEBTX3=V0>7vT7k?#P1*Ok&{)3}sajJ=YGGY*`GefX5yAY%g$yS*QMmTNcO1)e`~mJqw%GY$hN`~`fARiayxRpaa`MjO zu=~v+Qn8)U^z#E|Puya;Z8+S43}GRo{(FPVM?b3_0s|+)+fOyRT;RL5!Pvb8LC3xMSFa=p!;sA^0I0Bpi1^*rISQBbZnyHyG-oozwOpLPpC-c*PiV`=Z9S|GA?dN`FJE}-bS%R*77*pX^eaegAaFL;7q1%e$D#ymZ=rS z=qEC>4vsI{YI&4#k%bsF zevjqB8O`pVt|i6^E^C>c-dso-sM_yrf$m=|7jUOAT?YBi)oJZt0CC5%=w3tUYPi;^ zYSq5`w at i*}ZcO(x+EdwK=PjA&=xwrA6ONwpd*?Q1$^~3RFnPx at cfx&lM0oEl+#2OO zwdQ&?7G&y&H1m`GzM`YbOwJa^q$iVJ)WqLcsi^jGnSDvkLK5{F(3HMRFzW5Gid1!+ zKqxE%zJX=o68&di#+et}D=BaX+qC53%UYmZZ?6q)=72X_!%ez#MP0RMQR{c(Lxx^| zp{Qu(mffvPjSjuE-`~zU>xh_v>S~DxMW%;#^gPU`+HTe2d5rj{t9R2zX*Sh*eR{8| z&79$L$$%E;2yHbjB|TyNq#LZY=-nc>m=t4$P!_d>@+w{}+tO+^pXKUtu$}VMy)roE z!sLd>-JiA(vF#5YoD2563(}MWw^r$E&+97mZWZ$Bx2I(|bATO>%4 at e|-1wh&w}q1YMn}myo3V=*BfaSBUR??0h2}HG8qR|_aLl5P`-^pXtf at 9b+2$XdFfnR zz?Nt=vkRR1TE&a`IURp(vq7mut0<$4jK-FW29)*QU|nrnz%r7^gdMI;yR+nuKymQ& zVlju6hwifE8m!j=d|$Ih+}ukm9=ug{^;^4wr|cd>U77u+?qEWIW;OoyAeAbmHVgF( zv7+ZavObKqrO#dJ_bdU6;cBNFLBne+^`9{vXuuxVm-w}Fd=_BV8MTew6}1FeAxuXV z{gN$rELg=W%VqVd^7wUpS5u#t(Y53F!^T8zAdhwUn^gqsUem7Ql($!PR+%xPohI|#PKD_N88L2gMp^)t|(%CTA?t){% zRT7)Cb2HUXZ})G2SCbz02Zci5>Y2A%To_X|D#r$Sk;?IzrDCUn@@=fwk-Vch!u!4N zm733XJ(TZS$kukJWcbd?4@@%=IogeCxBY~MN+1KF1w)W#a^-jBYj-O~;ud!v4%+`>x%ZZ$p zec08*+yQomf&(wnBD-j<UmbkNK*#8UV7Gz}F7F0gJU7 zKH*4?C}G8v%#zamWoopz{6ii9`1_0sqEB7aVz@}Vg=xk1Ct~_98TnQ1l?aPELZGho z^+!BhJO9Ik1x;vRL&i+nSG~V*#}obwzy9{fY;37a)se11dv191^@f>rJJX!s%Pl&#*K2F1rf`HBJ5$Z38Yr zWu$g`c7u%F#@%`#=1Vmw at 1a(<^4G+ziFJ2Z!s_k|k2M>Qnb$-{&D+z>`NC_M`98fV z3etxZ at xY@v+igmgK=UO&%F&Db at f`Xe!QSQ{BQlTYkQ5uU>6noI6lmGNZD-4h>e$F zXNAt$;$yzS(kunjIrKCqP-zCZH}q=I6q<&VF4K1+e7s@{eP`LbQas#=^AxIvcSWAG zGc#4T{fYRrnc~f)v!2=7)ZF8#z0|a3A@@r3V<}T2LwsQrSw9q6+^VMn(iZoX>)F#a zs7zgcvSd_{)7wW+9whk+XeiRz)~_}#o1ESI!tp=Qybd8{8I41qSKYr>{gO(O*DfWp zwD4um|4wHxr_9_kPFBK z(QqKQcl6)`3PtIFs at 18uv0tcEClHtyxRW|9^Vk!k%?GYuZctJMVi2kU^L#WUuHEW& zq-Ppy3g2xIKDmh&c at qj*gM5Glf6B-tqJgoFg59k1K(tlUMS^YBU!z<5YVYhZSEgJ1 zO606C_na)laiDWk^4jk#IQN_ZZRuagC-soYr}>aDWtL4$ioEuIe9t_WF at u>+%$TtF zj_zD`COIuImyj%J;~&eX{-7|eVD)L`m3uZZvta2T{Av3g;2U~2 zRaw<*A;Ge*W;wf{R{c8P-VhsWjhFlxhoCqXJJWRX8JV-{1BY|nnaRECoI*;$#ykAI z>)b-3g|+>Z)7(sRaTfy>dqJv7Hm`Hu*_D~vL$)i&v#H(#;_?PxV$m5Qcin63Zslt& zpUgwcDR*`O-NMSduUF6+_H+#U0Xft9JDOM3S;o{1$AE}_)vMaQ^;|>JhIPM|e#PtW zd#E{wR8A}ZmR|7(om0E)1IF7$-;tmfwRZupfivVuXpR6Wf!bH~*T}Pk z=?V4#U4f$4l=~{IfN&_WRA`udB%8VS zcCafmWaJ|P!^Q%rp%E{VfYr4)fvlCP7(8L*4jglM527#00Zm=m_%Qdt6eK%_*_H?!8Q$P*6Z%1UiycN+ax zjO~9ENaOccwf8~22hj7kcE^2xquBh@@vm6yNm}449vTGX6$u1{^?zUT{{IPj_@^Z7 zX=EH8fa7QzVVH|SKm_d$2pu_mT+1GEJ0VZZhdFycFlbH@%a`2WDwC?Evideyw(rS~rej+eNqbl3L`BofyqdwRC^e=z zY!yTPmMdaF`U7DZ{RWXc#5E$hXe_C89#Jw`y26GO%UOMK4}Bi-lyHkMjw{TP`m&W# zmOBBZ)R~$n;fY*yX>8t5<}IDlC-+j{XEw-mSLvu<>aQb{x6Fprsc)S^T4RiihiSd9 z)WAWknD>mG at kW|k<$iy5=|f~n{~Q&)O02nJLyMtpA>r}TE^6ZUVIN6$gQFe~FTiwA zQ_QL_Y4hWw=t9~1Gr7^<>SOn&-^#IKF>q&!Qx1;Z at sEzfZ#nF#Q5!_p*4BOJW=_85 zT%vCJ>?y>t@$d}9ILeioW>a5Q>jOCO2c6=Ym8<3JEmwOpA5y{Wsk+=9 at 0tfyF-fSE ztRpGKcvB!l^pnxkWnVyb!IwIZIp|PB{g8+s=pebS{S*#E-oVc^g=AiE#<& z2rN_2rL+yI`4g>>7mTkyK4SJ at iKrml4ptYGjo9UH{kEx)cL at 1qX!@ z0z|A3%sX<;91%o35HLD+P9C8}%n;NcT7j2s3_yabaUQ7iIEFkbTZz`CuRAr=J8bD51KE;jm9NxG^C9v~Y0e~jfN>cm+l23-uo4{dw#Iv=mPQBE!L-;lwY5_Kg!|qmwTSxdX8mvr5<7!=|Oh?yj_`Of$XPN+f`f5$7ejUARs(0P$mF)LQ z?7ykY(%31|Y%y658nf(3bJUJ3e~s2iOAc_XZLwJtrwA=uqw+{CQl8nuFkbOp3gdPy zW25-U9`W8K`ZmXeNO at ET)*1R)^d$;X(`>A>mM zvSPZUIZ$`YFUs_8OKF>WdFvJ5I+%*%}SxKMZYVIjF^Rjzr||OAN84&fWJk* zYm9u(Nn!968YLqYu#|5ClAz*?`EJ at a15r`&#rdq|+ki at _2~jVZ+;e}+zL+ZnMXLwP z1Nu at oB$$(ETa~hZ})U2*Cr zC(fc(396!53GAWPB{}MjrbI;}vhS6xs8pJO$GGmv>{+*u?pPAya$ zUrQt}jw93?-)op09~lkLww8*0+cT4SYn&{U1^__GwzVafZM(xU%8sK#t1!xa`x0-% zopWZFx%{?15&_`Je_m{Bg8|)@@mS=&0M<*w5|t6{C`n+qN^cl*6Q08LhJNn_n*kaJ zvw*5euvN!#8WuO9a7e(lja#qc-U|0Mp{B&zSu)3$EO{cO#9=d!d7{dV&t(3j8Dvig zyUf3|e3~7y%jYZ^V+-8j$L)sae`|kZ?5BGF`~vyc?j8hZHT5?;N{jfP&@lg!xomS8lUisGCk&&*9|heLFbU2V0B}z#Il{}DaS{AW9A^W+Lk*~L*$2)YdcaX3RGI^Q!cw4CnLTBWQbF4gJ_{YU19_kv=yF*K z^M`ohED$S=fs$b^P!Krp(nr0ZaR{HkMhtvkY9JlRJ6i>@+L<|98S||0aTOFy(Jz0A z?Yyay_IUHLt+&%Ab#Z3d$B=K7qF2T1N;rPA9+DiYYcfzd03Thv6AaG(fdyx3(?y%a zbv?@_gnEYF7Z%QNwhzl;Dy1XAZu}Q}G#&ZE}MgRPE0o;fg;M z>rrS}`dPXam6!Lp#uBNF=+xuI;K}Cnk}P`@tN19 at 8kB}kXBT%XV-v|z`uEa}R`KR6 zQ*SxR8P}_fh;d1 at sv|MVDKj at a1s)c_wBMIThWk>MELBSky{ewY_F*#?4|@Ku?GuOr z+2X;p9IpExG;+Hp404oms3simv(ka6CB60 zHf8)TWXCC4NlX3Y4(-$#%mo&(hcdqCf_Q at mKo5Ail`NV-_!mhKh2sKHU#No9i!2bL zaWYU_9U3ucmwRFXOGb<_I&U8G-ZKT^wV|pr0 z`Q}_>?m6f1Q~DY1^asyTktv^oim>S`LFzX#iHqNhWX{<-<-MUpX;%`GFD#6?-eBI! zQBhIxSNWsQvXWkD8@${MBYM}a=ln46$VYy99PbdI_j22uHV4IiHBWZi9X1C=eicu8 z+a5LtC4LQ0e%sGBf`uQ2Pomq%HiE?;l}{$y2{wX7AEi$!+X^;ao^Ju>5rkB}d47c-Em+h>U|XJ-Tb2(?b1i#N~W5A4E$G=AH6bZm?{K-h=YgF0gFK z*3B>^ZOB=4Aj!_HVSgYb*!DFkG$%}_(x3?M;o%6FJsJ?TXLD!{j0e(pmC>nDN+=`H zzGrpF7*q!0al1W40Q3Va*gY%63`_(pediPj3L+G8*II)M2Mq-irG*fB1WX+!a)*sz zm+?>@)MG0R=?2R&Auv?$)UYg24NT(N8oCCu7BjKchM*Qb5sle=gGUNplj-o-Juf6S zur^S-XMYF^^cnUglz(N23UZg}P{lnY1RBD&)uK;|`k>4pu5&_Mnq2>|m=Eo_yE1mv zkI|aU>9m*xtpk=L8P$fAY*SYK!k7rxFByI^T6b3p%h3s4t0_jl84X*{w2U!5af|V7 zYFamRa#}BRidI)_iU6B#(!8 at XrFMCY-&BoJJxQ%cQ%3!mR9yYam|rU|hF+^L=Fg;g zcV|KE(AfASg(h}`J`!?~l0XC+&pRT}NWc#*=As%Wkl16zLr|W0Rsv(iOiKh?jb;xV z at Nu9V&UrcP4UPGNOdwMvFRv`1N^>3^K!oATrX2(yqAXq!U3n%wfy6Wh6H@ zh$whc5rqQ!jJwB?s7P&&TZu2l`ZX+MU5R6I7!(vnQpf@<3mPLaWCo at Mm64#B9~Obe zyynL at xN(6MIU6;k?(J1>?ttC>AZsw;*w*hj_w1|xZ8vjC*v>n#9<=g0|GT!?WtZMF z;`-4>kk_CN7DAd at W4&X28Z5O{GkYr>D1MUhz9k}_5lA%V3dcCUtj+%8KOx=Xh7k>B_HEju6bC0#epJ?Nqt z6!WG($oy41~;pu&^KXvW7bZMBVay`N3b;yd^{>jS!)25JS zP`7XP8e|kbnhH~aroZr|_=ili&MfND5XwO8b0mE4f*^sf(0v4%Gc(@^e4z`7uy3q_ zR0^e4JXb&w=x76u599&5f9|A|%(|6n05sk7C)Sv;t1q7RJ>+{sA%7CA1fc+hb$+H1 zrdCzO80slX4KU~n%$(KjlpAcy!$0WrQ8rc at mrMdjQadH?K1$~|2~*t$OIXjQV%VN) z7-X`b=-1H%+Z`zx2c&8*4Mt;CFT?4z#cjbnmqG&9pR|^s1trz_fF!~ICIgWgNdyCo zp>v!7D3xh+ZHyFUBpI)1;$&s9?<+yn#me#0ugOGXIm-D-_c{_78l}E!(+&|+M(SWL zXr7$4$j1v2aR;#Xh=$v4c7ct0&&ViES3#i0?s~+APgy$4v9*s-u<lnsGtvjpl@?8vm4p`H at 1f-?QeZhuFt|(bJDa#3(2{;@3 at w1%1h$=I^y zAb|j3lkd}zCqS=p6A+An>+59x8H|B5hc7UAoy)g~Pf-YH8(0Ms`$BT9+0{WzX@#d79NANi(}zob z4JrrZs&+zqtMk!g*LP7tLb)eg>I&Jf5+4Xv;LhYnJ}2$!yEBmA-rtV{cCO7iPBEfW z!BQ)3a at d@K48_9(S?8A+4|~Y4I=Gs)D;=f5uY;azNN_{N6Xxpo*6YE=NMYvl0vf^~ zhRE3OapodBW>~>?c^{n_usPHvcN9ZunuikMQHI?=_M=6-lRqUK_QEJ2?o1UauTDCdF%IZ@(POD4(iM1*CEL)(Y)+X zo|bVHZ9As^+PtxIr+#~JrM{$M96{@ITda2hauNAXN!S at Zu~vL~zuJB~xVYnO%fi(k zV$G5%pP-C=rC4|;1l#Yj6Z>;a`^cJ!dy8o9=tuTd!<`XHIbR-`iVB at pH;-R~9MoF# z*Lc at O=%-2|pGxkNpro*4|Su|n^`VDX>_ngYlVJPPtrD>0F8Eg3c>)4m`w7GVS5<}=&X z;g(Dris=v#EDNFmdNZl5;E-qf0pYX<2#1BC07CJPM}O at lSeAI1 zUH+o_ouQxEkg>MD|2ScV8po=%FGuN1r?fd2FYlty!t7(i4nyOs?Ru5yY9RgQXzs~y zCwzT>LZAOFywm<~ob8(6+`IENKl|E6HGA>um-M at ZwK;q7+Lye$n>F^PQcx#a0JWHmD`eq%^bK{ikTtG%mTs#=o2``n z@#qS^CLpdv*Yh<)n4 at 4g-ie``CX})O1d4iXb;mOMd7i0hrp$Z_Iq at eiUxswkz~a&e z#s1W at k5cMl`Q28pP?-9LPYdZ?SoR3K(Mk7V at yFkq=D%(J_@|0~OjMK_=Kx!+9d1tX z*O7Wet-q=G3igY+4cXja at 68FxpWfc%>?!Y1-Ulwz at 2mMjz3Hv&TgiQG4BguF%zZJ9 zxT#9I8p5gpFEaj7PC5#YIx~IYp0P|K_(9lu3dSam;Pfut-5xF!(8zCWet*^(P?y54 z;FMJB2rKp+H>1VCXI&T+l_`B12p`NPFJrliMD*wN*=+m^%qD$_N&{Dm*w4LxIdxr= zd*|msxS+vXgNLHef$-kh8TdW$w at 44k1~$cd5`~{X8 at Lpk4SxPCxzOfb_}S(?D3=$1 z=sneY=hh`DZ3$(Gjk?xk%w*iAA8jmuxh at P$?Ti7w7>jxPXI|TWU=n~3i^GvmU!U1L z|Fefz2M`fn8OeXbxs8MI1N8?dK7*AHALz}e@~kM?%}YN=&)T9;;6P(OC*^vv21yOl zwI0w)(V_=aM~R}p2otmUsFP5zd8t!S+zHvoVK5`IURk86GZQthPaydw&w4jy#j8S0 ztntt(bh-&*GV6&P(*21;fff0sGYD2oH#*;F<6u|N3-(H6K+AcpeOl+>m(jN0fyat5 zMWnSSL3StR&XTkyAv)eLItz at A;976S{#c1 zDUz+tL|zFI_M8QSBE#UIJvFs=+1|P!rl~+5@`CPSzP`PmvG~8lY!Y{%5CuUoh zVl44LEmN)rp%2w`nbQDPD1zTxd2!GI!R=Ij`7;>8N`~lIlm=cGs`#g63JamP4Akx= zpMD>Nh>}I)RpCGf664>S!cZIwlze7`NRuVLuY?aOv#J1~B0cEKbpV8FAvk2MV!Sb* z)nElE2JMKwnbQbccAMLx8dk0>1yfn^2$)oxTQCJR+?nK*4jw1!w8S#lW$SRdcjdv^ zM#mX#lOK6!=kVxoc*vN!2@?{Hq=$*ab?ID3{l at E#O_9krI^6`sXu!Tg@lgyhPK%-LCxcj8BKR at X4Y)z-gjiR)&*+gl3cv|&4( zG%xHm&-?pyb>XSdAwQ`K0Y~!?T;iq1cM8IH}$w{e3{_v=v0^P17NJoJDRHL>pY%0>beXqcVG*Cv>f=+XfX?*PD=DCXXy82 zQA?}uyz!E$Y|%fAvpAW*aSZ15A2KP$)ndRqdZlio|76xtB>O=^@GjLN>dTj#;APR? z*DagkcGe09xbq*Dg1IDPSy1NMPGEYi=;zsBP*jZZ1zQtaHUGskK+ktOXwtpWKRov+auY>P$GB`9k}b(qfkb z#s%=)55ooPS at -2syms5fqn5r8!XQ_>HV6yLZG(SH15x7jnywInNp+aZ?XJFe at SVl1 zgmB~g{AMgoW8Kpiq9DQ?6zw zO9T{fO`*Sg$+>hDR at 70rHBY7Z(<{6$q3oH!yZGgE4>Qy_8F5cC_UBJ4)3NZlZOQg5 zzPj+vC%K1)!9Ym_{Ty{llA0(BEc)`oZ&(IwobNCm8~{GsOCCh87iinm?j8mSKANQo zX2CVLP0Hy;B03o4DaUg2;p5P*KTY+g!_S-BlK4>ivK>7)ZR7T2p3d$37wUT|U%5`%DH%*7_!&&)`(z7a>8{YOjGpNX zNBKw1$T;TdUJb9-eQh9{@XXpjx2Up6iFpVgEL?i>|Vq!rc=j)Zhk zaPdf8+xDEza)Vi)`((R}=uTZ)-W?~>QDUk?Pj zJ8oGy6t(TV_6tM$wVTqNC93)BmC&|h?zi{z+nA7F#pDXU3?Av7U;&!`ci;MUT`z_6nKBXasN%3;^p|_ z>799pTZlOH#_j0p?SLQd!3HM8ihOQo8+>hI?3D%y6G`LW8)6N=pN6>`BFm|582?UOl z+&dva^lPk;4_%%d?{>(+(E@}q?u`%`bOg!``UiDH?49Uv3@;ACoe*%eFoT4 at 1QZJ$ zfJKfQR0a!#QiJ6L3B#eukWw;S%4dBjCwdf>2+M;$;xJ|i)q?=yFcvvhP+tTVk~m&a zcti?P5{uK;Iz5SAvKLmwrM%G^g zDuX_S_4?t#6449O6uWN-Y#b>L7#IOlMP|aAotkqFF^98zsfR&pAk$OXz ze-&s^gbh+Ce%}wUXXG+GhM;~JlmJ{y3Wv3YDRNeXz0(-3CyYed$LOCB!4&xw+4R?k zcqj;hg}8_mO3?RB5^ZQbd|9|k<{=uQfru692j}Ll9t~9kTcMv~ZQ+Sre29YST82n2kXof=J+&q(|9^|36hz^l&fUVu4 z`Og?|Za&{52jR>PiipBc2G%4|!quR>=!RI&;f+2`07^Ni54tY(KA^y(34!v%!zV;1 ztVoCp`V!?WPEbSys#F2w9DRxUmLRA!f-f=%%rCg|nL`3Pi at t`102mkr%SK9uyZJOB zO9Hlb%(;im!JUFD;p!hAd=ZVX0PvUI-@}UFws*`)hA_dsq-Qb=*nR6 at vB=`^OYbHM zi!4Ylsk0m*n}1RS5Q!RYJ3&wrYT8+XW04LCBt4TLWPLD2G(ob0+de8Hv8aPQk)3 at c zqZ z2elI2&Xq}Jo43#{U^-iH at b=W#R at U|RI{CR7>0Ms57Fq8*|YxK^V%bi%$*t%)V z1IJ3|mAwQswQ^N$T!>v2Xtj3<#!W>HNU~4)uRlb$I47-}W$+k`fJ{l4$ySv!2D^ShQqMd4r!;W1&Y~L*{~IwhuPc=MZ@&eSJpHxs_HUFq&dL)!^<^y z9jkOcy)9{U*##`G)oOVa7DAQoToisdoc1eg0h`M{;!7ad-Oz!&POzuH!QUpoyDq(- z!Ef5`TcKRiSRQ3|iymS8h)S*2p=!&R*LPODZrVQEo8!`xqR#L;-f6I|kl_-|| z!@)V{i(1x=o?MAPERTPxgIBZx?Dq`|I$On4QYU~c$*@5*S75y}sxYzpp=(Q&|4bX5 zbqL;>_ at Q5)k+(ac43U1r9&Vi`5vZ9^f_Lj zwcJp)Mm$IrVJ^PLTt|xr*dI4iv&m71N|%P^s94Nj2x(FRmb%6Sv?`Zixh)k?P|z0) z3|uNY4V~mz(`AEU at _&CsrO%nO>`7ef3fO)!#Xhy?F~y0s`4-?sJR_XO7cpU~XIAK- z{@qvl{J5U0-k#5D9nLkUg_ at 11fm16!c)xnho#*sb6)xAxHJyH@`rLHuSY;#)T!WMt zS(fc|=C8KA8^8tjUfa-E6In9XS$ymL7TAu`vXmbXv)9rzr5rptrY=-418GORD(qf5efA5_5W3o_?8%;Tj9e2Fe>he^dELt0A$X42-32 zSYsS68>+-{Q|?ux>J2+5NZe}@e*c<}%n!73AdPnr*@Fz= z*%eHE7ULeCPTXqiejBjhi?8DKCsjI+ at K1??^Mxvz>Tg-6WXCMa>>>N4h_oXM37N-y)_yb&pe@?503I*BK*>p*FK*;2c-;N!gf6KB9>;&s1C66GoKjGE^yurQpB0iV4Zu4K`y(q5 at -gs>VBosYy|d-u>C6M) zWz>CuRe|F~2#)j6?+X-~;e>Ej*U~|nKf at xB-NnL(Usi1S9{dqMc2m^`GR1%P&l?{W z*~=|gtQ3%u at ck}Z=kq2;{=T!DOQek}*V%sV!u-qm*P15i^!(&_O;h7KR!trA+|})u zv*WLm!M(MJr`|PR=OG^o;im2+S~3%|{^^-Kzk(atQ^grSp3uuBbg$AEO){gNwNLlA z5Uei_3CB%pps>a+8q1E8vx~JK^c5tQ3W1fP5iqTDQ*{fGy?1B&*T|PH2BU%`Jxe*c z6G}dpCl1@%n_+&rZueQSN0UdHyI=K8L6^+;vlbkWIQh(lp)mLmvx6F>R5dsnE+gdUXbD>N-vmEFjnrDBp zAqPF`1 at W&E^)xDYck(JVd$V zu3fogXTDTK3$6QJHV9m%do7*JgvcD_QYz-?&LD`-!HjwBgyRig at xpMd&e;~szVh9; zpf?GAKm3sU=hsVN}jz} z>g*(6xymctY+?lvudZ{@S$?94WHd=o=fY-A!)9c%ePj+?ZfxEC at yR*-7B`h zSz5l#HDg<^?pZv(2tH<)C}-VO)b+X!1FP00+Y#IR*-yC|xoCV=e0zL2e0pojYs#z2 z>&|Vf)~&0yUuJc4Yn>Z9y2lO;bALJ8IyZE#+ImII`sR|jxVCh!9^&U3x%jSZ*n0KO zs^$ti`>vjKbT1sT<%;t8t)I1bj~|-mJ~>}>1`Hlb=0-b{cLaemsok_d%bxQErqf6MAqwmBvFc-gg#w#V>frQ+aWo8D4>%r+a4Q z^^H;BXX01hK#SHh-~nh0Jxne1C~was-AASS&OhRD`LW&ilB?Gb{o-ZQ%XdJ)>4>zq z6|xQ4zV#(vvF{j01HHa`u7 at AW^rOG+MZ31I{%R&E#)?sPASno-VI}zPY0>arW?H6A zgr~@ykTt33AVmtyU`Q at KZB@Q%K?;TokNt7R8EXyzYdiQd(lO9x(LFI{sdA(hDIYRs z$*8Mx$ld92WSWbC-)A?PQ-UqS0fG`>>~I^n=>rLPW+WzLDbM6^rf|n_Vn)25*gvs; zPJ;m at aGc>?Eb7T0if60onJu_V1Dfn+CXu{pgY2G~_lQ<5EQ8XoMK9{vJ{h>Sit4?xEur4^tX zXAn?zPlcqD)u&z+_Au;o_*nSn8s4>)p;FblmRazHPAjp<<&rP;g+$C*}vcghZ(2|hFbdq)%p1Hu zc_=oR;@~|zJ5HY>l)hUX>;%_{^DM)r2}JVLB7v>Qub(l7dcaygN2|Jk?7l$UG;5Jio)c%h-tSAu;GhQij zB%Z$}gLK?H?ogZv5mPO0sX}A|)Vd6nS#|-5WN%X6pq_A++Buva$0os&C#8w8Kslp5 zZeDpvQ8b&5I&NNj$o7*a-7nnI?#PTlF1aOU*)-(b%gOgdI`OtR9V=;o)gnR_dgpBV zX&YtE95wxNdP*X_csg9&bA<$D23c-E?M<0!gLZrcF8&P-TUy+F-cV{mnYAKkj<$Xp z{VdntyE8dw(AV0OTJqF4`4m`Nr&;neHlY=?P1}yzTUz9bu2LD{mSzK8ZmfHqb>b`V zmkty}OT<8IC!3KjcZfSMY=KkcY zXRamBGROI(i)U}X)9QIakeV-(FXE(0L6F&n`k8BLph&l#FQYHTgfjPuC>fa?MBb z1^4 at Yo{g65$$iI at 6#HVMrc?o|X?pu1qo%Y0vuWbfuyOsW*HQGL8Hjj+Y5S~duWT5M zcYKq=1clhg&0-RY7TzbQON>^$@%1QTCt)`y_M zYSjx812pTqiQ_cuVbG{G>!pUXv}<{Iz>&?2bf}=5<4TJP;UW2w+clu;L(R!2C{)|FA0 zzuQ!C^Pcf?Dh^BHl=71Da>@=X;8^kI at o}mS%g~KEb&ZU`p=IV~RqZI^r12Qr zShhsfswmI9*T+^9H*jmz?I7UL61#F~)JW!LRqUYSEbwl)SVl!XDbM_b7R7R*VdQ3& z?`Yt(@`|{Y7!Rk>9oqYkjTocNWoK3Hz~kKT_E}qoMd_)q{Dk(z$`EhyH0uwq(=qY% zIa$U=VJNdKLQ`UGay)RRd8c`srMMS_hvNx(wcD{*EU3XXM{otXKU7)Bb}0 zq<7f=1!{=y8l}0 z{chEv`EJ(X>rag&L6YJzlH_#}uisrl;z*-mpa!j@ z?How1u*eu-^9MZK!CG~s%dkg$80i&v2Fr4ebe%yCeBh2VYrMG$M=Du_#u*pk>;Sq| zR#fwu97m!k+TJQNM_4}!PQW|5D+`Y7%t71%!iwup42Modk(Zw}LvSmulq`B47kMML z0o;!f>SKlB2G2HGvv0@;1IAfyq{m9Bj8Lq|m*48=W+=R`u2sJaKgYZQs%}D2 zPG|Khs@^KUL*7_No7j*J1Uf at aZ6 zq&Fl~N8?RGN6SrgM{`YlN83$oe($V3$A|uGtbPZPgrjvQd at tyQ=Q||-tkO*|e7Mm# z1lq{8aJqo~p7Mn2JRJ<*aWsIK9~RO?&4JzXp1Vl6iPRTCcc?)^_!jPN at L~}7o#X-g z40!`75cYm(V36HB6oTRY0g55O;0Z}41VqaqlVahyYx4|priATT669f4LdqUQ^01eO z;dh at 7?f5&tdVL*jEbaS0#LusOtUvwW-o0BzdiRe0|GMg`Ev^190~#YOBOTmV^zM8b z#7{9;C?&9X!pOQmmP&Lq6_LUsBjE&-u{EwR-=jsP at e!Pw7`ZL#Q3T%@*sW>TmzFLd z76$o^nL!?y>zrKfI2pO9k1T?pp6(2tF5BbVkmCa at +*|0 zEPeHsOZa&#eWjM)@Jm?wYN;GhDDk(nQY?eaM*BqPM~4uZe#9^9Sf3$h07;neoh9vd zq%p*AHg~8PmSZu8=n`Dpl9L-!x6gN>QF=>*VL?Z?VSwt&}rE)8Ybh zYISy{ONqr>i%l5Gqgmb9jZ4vnY|?kjOfApuc~dnLPM2LH!#9Yw{$OELKb%au>nTXG z(UreUoX)usal2QvpkHh7zK)N9$q;JsEtBmYb at YL!m)US+b$?IkH+ zYw6aY9HrJg=)e^rm^#Y}v at NqVT*oTaU^ZIE*`cPzu&$A5P33p8`NoJN%<9!S;`OGW z_>=^y_q5UkQ%Bcj=U^N$_IY$G!+%P+?y%v@;r&L4&FyI5s})9#tD2%#?qCj`T5 zST}(uUz7z*w87T(;{O!cLr0G;uqvkj{}Auks>?D9>ekHY8yEN*h4*@LLo5ca1Vp|0 zp`kf-RqyZyRZxB*O=6goQFe%F&bGy|;~u61+k$3Eb7^vMa|8Gs_=xyWvNXTnn2!Sf zpf^TcxTX-x`@l)>B=Q~b`6|jZ`1IYx at 8Y$Z77E;!h%}Lo{wDM7*m?d*^ogEL0!;H> z>&2Kwf-p^hm6Odw)>3M>ZbUFvA(k=r273XU8=HU-3&MwUXO*H3{<1r3LN%}fM!ba) zQy}g=5gmxs$zjA4mYgVTgg*%M-i+A8f1B}F at W0MWdtQdN+)`8;*ZrXg_qs*wx&Q|# zv3w_j0t{TX(HbpHW)^rqOfyzM-hCxrJJyQu+aV`=MK4%K^t_EF4KDMjK+|AI>e5Dx z8w$kfXRuImJ!{*@3cNM)cMS>tuq`oOu)$@<-r->&D`(yIrSz*H=Ci$AlM+HLgO#1Q z{$uKMm%~XRgauAp4s)v)x*bO6-^m?A4)y^Dnn=RIVE|s6gk!|ONhn*F$d(dNNic<0 zgugMA5*+OV5TK02q7+w)+rl41Iv&fXg?73pN;vI^Ncy2@?4hTxznKmxkm9&3S5HbqzYErSzccMQ z6YJ3mF)okj4s#6(BM*`p_-XsBX!j)iLKynPF~RxgHjzai!amb90HA5*%n ze65`9ACi3qyv`akVbF7eO)yf&&Qx?I&QzX&{%7fUFgWvXVX-II=y;zPONoFPjt;%% z4Ylh+1~j>DK6(d^--NuaesmUq% zNG=c~s4EKVIzE+8F;zSiZOG0$5A0(tUjNIN=ILV`#V{IuNKV(v+A1vPEBpm_jGS+{ z?4UsXbpW9&mE)7cMH`n4fDK9w+QX5qgpSCGNea2{LRU$#S~wRXHyJLwbO>Bm=Q|yE z($w>YE(Cx9yA+iDf!iYl_EnR6P#+xIDM at DZwb^3~6^J?P%K7L1t}lV;{)M{_Mh^%c z-1|O{syo7A+e<<+U+X73 at ZF=a+J3Xm`EhkQdhhX%67Qc?^hPzDAxG|s-(bu$2wEjS zM1Rm&r&{#cdJYys24RH!TaC1s-fWlttr6e9HNyTMNeFmPZ_fGBVkhX(bvdu5r(Ez-*@$)VmOsjf!xxQt z7;|f}E($ydBC=#wswFu94*j8$*4v_IDEwo^jKcmcXt#?#osiC~J%eSJww7DDJpC?N zYM?_#X9T6frH-#AH>$P5#n2i{bZVDxctP7jZhcW(sg>Dr(nq;BRbx#tmEouNER$2> zWcLePc)bqV#Zz?NpUIq#lW*LpZ4>=%b?L|#1ANsx`jd4lIqU8MR#P`0XK!|*G^emf z^?7@*m!$}>XHP+eVW^P?7-a at +B#X`@FSB+z;d8D6!xZZEJI7<(X?`0x5-L|gT&d40 z=o4A6 at XT-dT4Nk7T(VamW!bTfiPNy;Fr at ECWeHR3zmyWxEEreSy{2Oy4|H`~9rxX? zLXK}hx{Y>*0}&`ENSV$)Hj0A$(iFM`RT7b25q-LU4zc?_2_eqQ(Pv0`B3hQ20Zv7w zgVbr{Cj7GdP^HTf<|i|~-`&BJjU%0>jJc0~*%u4jjrLefDx_s|JwJ;`evN~2MvAga zVsc3J1`$U&bzM9<^t5@!kxD_{Py|IegCgZW-Exn-(4kN6$)_f8Z$gO=u-$kgJ=p)y zIdr#oBAeAA;5%W*neIR~B z-?5=0K9xH|%8yP4QdlFANwATHpBK*QT(1Fek|cgOaHnIV$RGg^j((h4;U-f~3so~H$Ne-8mV#My{s--ntU^50Zl at WJv7889a-83e>`~xw zaJ3k69>3z}^mAph>Jv>!WNAz1$h7wGFDqKzq*PS38kM2v88#bE9fDAoY9fGYEvQUU zt2bmCSE$;n6K}0mgySu7x&957n0hNGpg7apYG`YHp$qJB>9TJ#Jj}p!ZK+*Wd91q0 zmPAwWT;4COJpaldSQJNBqi6>bl?xFz_1POD0%^E0Y3{jlucXMUIM zO9S=6bYI_YZdBd{Li173MRsJ#;pr>#7V_nV0~LQHC28yzwlz zYC@}lda9Wqxlw@|6Fi)md+m=|m$g~eAw^PlAyq@>AtTJME3rzdK_wEr*z;J at Nh5gP za)=~_q(J~#D2mIE_-BsfdupLW9{k*eh1ILGFyAs+rL-hPuCU>G(2 at U~=_(3^fiYoL0ps{LRL&sR{Qdt_ynV1W69^9B% zT^6BH^mbB;_!#)e3afIRMWWagcOKk$qWLaD&b_phCes{OfjY!4ql2Gd{rDW#*pYOx zViN98RQAWVEJfqk$k!81xbb#!h)}uZZIE z-T9&mVH4UD+D!*P4I65F1+z^Q32>dy&yBP`Q)dZF|8kADu4@};Jg_r zW&n>ENPRPTP{y9yb{J&KS=fAta1kI@>lH}dt<5EzKVv6QKJ%+76~%$PmzlnPtFW1C zR1&@(uLAX6Ma%ojILcRVb6RRvf7HRW{1|CL#oB9WSE<|{GUZ?1# z#tTYFR5Q)WIE4#UuL8*QP58jhE$W0-`aOQiavtl;5B7LG_aHg1jNcoZM%CYPWIQs| zF7lNKqPa(b);rJV0ndJy*5`#~#iF;9;&AX7r7rfcW^@v_O5`b|=^{*mG(^dyAXLRf z`6wDW+9ZWUg(%u_T6!Al)U?!|GVn)XJ=%If#dD at CL*Zrqc9UE21R`QV$(r1WP*;*E zUhPe(-!__nU2CV&tcYi|-Sk^=iSDk>2BO4QlB#a_aT`wX>1VmgPl~SosFkAvqOdLW zBaIP`e-QItgoPSP at 21`&g;Q_?8P6^7RpfW#jVHyru`^Y&8zlQ5qzy_Ebz+UVG;l=c zTe-ld*%BGZAuM0EyO>N(Vk at If1h;fT(DU*3xS6lSsFD`dn|ek37iu8HL^JmsUp+Av z_tg-U)BH at OO@M(bLF1x%a=LX^VTl at LRoC+xHzsd)D5M^Zm4Adz8%rc(WTP>2FjaV^ z{DJljcqKA1KB|<4Kzl8qKKlql{r)oBPgujrX6dQ~!^u{yDwQ0iDz;)iC)eU0;9AKd z@*?$5-C63Ne8nA3zomWy7Atv?7TJHI*K1VeONmxFNS$L(Rq`UY8&!$s=vDPgoiF47 z*Vuo;)XP*wto4{F=&jpx?4gt75H&XM at b0zq8P0Sq$kq~7Qt7*m at t!);tD7N)2?--> z7n{I+vfPC0X(kUJALEniPcW5=NC=TCO~{9v9b=P9OW1^KOz4laC3!+-9F!cCeiBO>~=vLK|J5AvSa1DSZBGPMtt z-L-@$v}&g;fP#sp6p20KiyW2$ zjk};uOiiYI26l-ql?&$X5FHB`yeiXyV;U9>gG^JSNb3KNyvB0LV}Wm$au at R3-!^1> z=B(kZ;O!L_LPUOGZo&Hnm;Bgfb}TAEg~SMTDftN&Ja~%AIQe9aPb at 07-!Nyh>>?XR z-^)(;Be3AMBsj{lI)vNQ70X2DGWHw42qQY;O9xV7zCnFUw6JxBq2j02qj^NU+f9_+45SQkT<~2a_HSp< z6mL{Ked&_ at L|vmbe>0;zH9Kf(p>G-c`?v4I7%I at SFdb;Y#svr$jU|Ec_<>W at 5N&_Ljq^Lx{R} zK^;E_Bf*5;w?U>~l^jfJsur&_nPEnp6~nxSzi6PTL1_Dvt&$%s^asg4ba)ft8}%eB zbR>+H&7fDG==WTsj4iua{q{Z+jl;{=kS*~iQR4nFTkVbIhqI<)ue7jD4_VeTcS5!E za6 at h7bbihHysZk%w2RnQ2}7$J`4zn8`eRz%m~1F_fG9Ep{Dtt z|1}5xzP)}%x4`2rb{=#o?6vc}`! z^;^syCEb&P>VF at ohL~6ySbuo~*8lere0ff at 3MzS5xb64#rtod%+3qkjl71@?YVl70 z7=Qu8A0kLL2YGRLXyys}K*k#a+>;c$Ui1z^`Z{*yE_AZ|xJ(Ub)gJ)k4ODYPKe7U; zvy+%eN1r=}=4Zxn6D>mIcJvST0AAVKIs%E0kwaHAmyCIXL7F=s5AX3*EycDRVpjNgTbKcl<^U%qR9qu>t*N;2Ohpm8{Y;hfdFOPXct22d+dBZ`bJI04| zc;BoBirmF+2mmNqU$whFKQaSRve}tftX~axs1B6?U$VYxbY(rZ3|St!;jvi^l(;kA z_yICG&2+l*9s_~QS&fV=7O#>!iiZ?BQ6Jd~4ts43e|py`ca&WxZ(=TE8k;u-=#eDG$HmO)dGWSwuck z0G(pk)Cp}$q at qtW39Tv^>a2S3mbgU$Bw5t}l57V+ZkFPX;UOmQSJnw&nLCaBqDiki{{HFjJNX at G%Q0f64DG(2DKN`^BFRh^aTyo#nIL6aTR zLsZ~X7B}97-66BcU|u=&gIC9p^o$??gZqd{WGJr^%HTCHWHs|1NWekBAo9()3JTY% zzN2tR1tj45f@?ZrTnDwZZ64B^p#`v8u<7{cbSv+a&l~{Qts2z*1zSJv;LT(J8m&Q0 zeR182JBu at mfJTc?c&5`VrS##`nTJejUXNH&V`OFE)j{HTV~`K>B1f0PoY1NBc(e+h+d9-o at 4Q&)>E$~TuLO? z-;W=mtqEnn$TZu3ux at 0PLm);+*h71ju+f=Os5y0u|F}o_6-SBKivv^fg7Y*fb6Ex( zo@;*yENM%V*Mk~4b&l5rdir&am#h;|dX*(^=(NrpuNPU`{4rxc+}^|38 at cX$ z8 at c_}@U(4A^-H_|Pm-E4Vrmxyfi>KukHef_+37M1^BMd|9lsEJlje9uvN(tlBgw&X zo)#JZAR7RR)%;dW(}tW|!bo`?-a@>)K*HGM1miJRYE at on3T z#~I?7+TkAq8k75il_(UHrju7GKnjRLxKl5iY1Y~I+xT?@{3X>4mQlc6(0p{H+L2(e zjZS4aWF@{?$D)rrQzcv(HOBw)3DGyBvrh~HHH4SKds%OqAxS{6)@Z?*!`bpp6kqu| zimjF{Pi9tkURasd+ek#}P%f at Zlpwd)SDa=W8Apv~hc_)yGvxghV~eJx1nh3}0ayI! zTXlILoowzzqLX{Rjh1}>yzf0|L6hhE7M;7!_(fOM*Hm&&->H12P>z*1;awM`-q!I)tDcxV;A at Oc=tH>W0u}BoH at E~0gs5}N*iki3gZZLob1(2dE~+K zLS`(a2{$YKA}24UO*)RxDyl!)*EF-kB&w#=mV*kY?-;{4uJWiadtb&2bR>Oi`djD3 z4*i**ui|===g>L%A6L3>GSY&QE2&LMkXCco at adDE8+KQbmq-6>f9wc1Vc!~meZ_z9 z+c3Mt81?5K>l&W{!@{<5IXA_3WN!9z_Pl~!_+;a9sEz^>C)XAU#$mw|B}4vQC6*e+ zCRzJKEfVGDd5RG!yHso}Y{Yd$@#-02IdMv`DSs?`GfTIkx}=5Y=0p?aMFdagDH3V= z)sOkyP)Ab9Q^VYYe^|ws(OixArXdg?P#%Bbld-&`!lr#y*AZ!QcbNDlUBYqPc>5>k zTg~ztQ)-P9J(~weN8c6?i{CxvlkEfCMc%8a|ziK;;{PieqV_EByL* z2>Owp_uF2IZ5bV|E7DbMxGPo-LFM`U;@alw*76#V<5$E0Qg8=@W9^U19n4A>BRMZM zH$7&l*=W(m{kLFGkmj_*!oG~WlVHH++uKK#b0^nJmvh;y9PwY$+I~+$o!?{R;MRo< zrTcsNI(DYy}vu!%4Gq+Rn3Jmtr zBjL9<^6}%jbUd)SbV`vm{joH^q@{?Fb>mH#B|{N%QE=|!ZNvD;Qd3`ASuoB34`Ud1 z_bt&Sf_Bln($(SI^~7;~b75&!@>jn2ub|DEf^Q>k1udr-9u@@yA1UNTt5QL}!l$QY zV=rX=y<#J41zM${e(Dq_s&;OAN=`B)YKBpwR$_k1Vf at gyhX?(r+94VK`H{Cx1%$1$ znyEpxJr^Q>vJjeCyotfN?iz0BO#?BY?+Y`W3y@{z+aPIT3Tdf;tXKRF;dIJ0XQGwJ zI9y^ZX_~;b0G*fePSzA>f|bxXYGO9&BWbIEt=G&>)--35m6#mN`1?d4DUkGwK%4-+ z7p at n}j{a10yp`ZMAQ3w;gS4EqRzTOwUvNqwi1dIoBoUCPn8=j)PL5X&O)j|=3UWMu;DXk}!6ra8M5XoVujJg%GQLb@)v zCgAISwr_v5GCB{QpKQ*x!jL17C*2nq at yOak8rMj)A|-Gq zJrV$Wr0z*2ei2|h6d3hD9(PDo5 at g%!%G(1ZG7C2BcIE65Cps}2x3j&{h&<_*$PGPS z;`R_39XGg%-XEg7ZOyL at -Oumt%f&YKclQR422j}A`N$p3J||yrS4CE6JsObNC z8#Gto9018%fBf!JuRxYQ at P_?94CBq#upe`y3WgI$wT^uHUf><)xM$e`!}L7Jie=pJ z&@i!;)J+iVS#m%#Eiyd`(qgGJRBg?3{a=i|Q*@<&w*>XR2_E}J)uR!vrIR*hDzR?XU$9rF%+$01T- z=#e!EoB4nq3%BV9P^rW8@*25~oin$j<5BeTntDKwwOgg}aXQA9&c0iz at k+Yd=FXv8 zEy};Q!(jY?nzC(%_wuQOIQUn7$k3gbX9pffz$&`Xj^7;84vsxPIQ3IJiEki_YHVA@ z=j5}bwjXnAv9mcxtC=8Ju6VCcoO8T0_?AdULV0LjpY{QlkB@>Q0D&ar6G|eB-|YP( z-t+2pC(py+`0m9(67eifws)>=C%e6Zv!#L zaUJ3`)kA*b&2BH?BcJp2PI5HWe{z at m6%ufVa12XyH#2&2l<&iiO2*DQl5|iJ%C9r?JMY at 3eWNt zHqZ%=sCDRy48IJWzI7 at g1BbSCEFlSpx^?an at NN*^xpV~_6v882rC^;fg-MI1UF9?o zIhcB!0F)j~Jy8UX52_u{0x5vB57;0jkg8|ZiY0UH6b3Ee?!*Cj0QBY8s}iYFl1HgT zLpY8AE&|y-6Ezg7)Q%!T2KqefHGW#hhc7w2!KA?HO~E4gu8y8$FCT6sho$e zD0a!5r>{VHwyijT0G=T$k{|?^h?QSJtg{qg*#N_A39xLCVX<<60nnjSi`gM^E_H#? zA$4x4OX(W3(zHh9nzJJA+_v%nBwF+Z;SC6s(hk_7zqQt&cSxQC+NI7-LGq{mEA+s; zxkX at 0q>t8e_$K8e4gq?H?s-GI+WB|T^hx|m4lr-o5Y#cyolgdIi}F#dMePtj*CW7S z1wL7bpGyPvmzY8Se4p`vU%IDgi zIV(lL?WKQS0p4P_h#y;5+#bY0R0G{*`#||fAALJCFR62wcFprJpx|8AU at qnx$QIR0 z?3~IoYNY`vxL6IGj`)zV!|>8OKl034K>+s5tPlE9Khpm5M6X7T#AOe1P8UJS+~hDM~2L2o)kHQx;QSuTCHb zQ(nA;T6;cLR=D(X22oditrDn895Du{Ghs-UR#lZ0ERwN2>xJF2%q3V=ttB@ zBz$5zX8Z8Egg>8pADvk6c&3b z66+lXk%8XLV0P$BlAlP}fkr#h!RZ04!8{PiD5pq#66Q?TCNbiX=raQm-zC$pgy5hQL%-HT=^f5rxqVXVhiXF3Ei}%?=)B+x{-GgRKc4S3b z0$O1Cp|>dSaoxja%y#mEyP&ry&RMSs4SR%%@tKZE@!5_k at mbQPxU3aWW3gqZ@Y&OM z*=BRh?OUCQX3T1NS(DRNwXeZqTao83FTU0X*zx7A)0h#9;x=_8f->^+!#|sEM0kP? zepHnqZxc8>6Cs9089?g5;M#`Bw8GTy7>d89n z=b{U^(Le&!p;GRtr3drJhYcID=s_u8o2E+<-OOJLr^m+iBYI<+?v2OC+4a%AlIO`9 zW$oi4JLxtU=2}rtxTy*S&_W~VWEmD%aiX`!_L44}DEw_l#q7BB2QK4i?0KT6w&#YL z)Lj?HvU6xOJ;8`xy zhV=W`14F_C^0#tsU}iEFar!OpLTM)ii5pGuCO3+Md;t3;6pBk);Qn`!i7w33jrD at 9 zO&Fxhq?zMx=**3lUahCix~UJ8DmTGzcpKAy#GYtT+INI| zwfI%*7L}3L`Lqo>$`IE0h7H1w;8#xC;MVxv`WU7mW_CRgdHAP$ZKtK{hVP)AJ+^`_ z7Z8snCquRtypN^nL%S*t>KNJK-;_E31T1{#O812QUXmNyU%}a%u&};sewwzcaav?A zd>XgwekyHG`oL(;) z6L8;ocEFI<``OicIBaOVN_RJ=?fbW`Z|DIqd3W3%StMgyCn`LMVx&08WF$H0FjOB2 zh_0lOW9hEmL*JLhD8t!SWbS*eiBueVQpq;-)*r;)hoKq55maIR^PB)5bYp~(6rEQN z%j!Eu^*RwX-SsRIkP16pGL45dpNg8RI)kO{iclc4MW1TjqJpS9y;@TF(kB(ZA%^ZA z(qck=9i_N{UTl>#kd*MEvBA}GX{ghQ!j5r#wvN(ZTBsZ`nL~wjNMBf;I5j|eNEv0v z!s^R`#;TOnr)I2$#wyTaF!|$JRnj~5e$AZ^FJb}*WX at 7wV@MJGb0D$uE at 7Zkc(|=N zpDIU>$!zi&ij^R?AuU6q45J*XEPc9~2MP*8eoRI~Zc+ zUP*9h^hzEV1SRk>H7?JnJpMa}miHG_M-arc{X_7b`f)M=sOl{JAmvwCd>xh(+dc;F zO(pzy7^CsW-vnc;mr5fv81_14E~y~z3Vk2OXt1Wsx0~# z>SLQaO=n`s*%B*F&%#n-0Q*^LqPGAuYDx6b?d9Cz1o!VJjIwlU_FPt7T*& z(sx^ARQl7NrG$4z_i$x4<_t&*cIimX~98eEw-9%$U0=2Jqd{yG)bPtly!9z6!<7UFHB+cK9D?vs5)7}DCh04I%+Qv zYNbt*-4HdH5E}D5;)>q##m$%j?A25sj6JtXy*GlkIM{oG};`_j{K4pF8yUVx3{`v z>kfTY^g_aC1q at pA=dRaUM5+bqRVi~O#YD(E0Y1K6?F4jtnYVo;+cRPgG^pf}M9As% z{_;pPx+U+1r``t!rUsIL>loXec(N8{UWVIEiq$xpf$j_L+=3rwpp~6 z=Mk=1xz_U%&AR0hU>#?`cF%UYoh!ZXYO z2FmN#G8AvI+oy16MW8F~L4{C@(jL!feOuF-gDh-H)wV{LqAK{_lcxbpJ^40A}+95(NrOMjM8t~iWW(eHv>^7JH zn}yvrD)nG4Z at x4$D2uE9c}rRqs%&)gr?QRnW+f1U!o$-GKdp}YAR<2y_ at 804Zy5O^ zWAteJ9!lv*$*#w~{%!Neu4?EH4TL=F476Ahq)9i_HJC1p&NF_eBep_rmRg+j0#Cd3YR;jxuzIqWy??@VbEzxU3idC|pow7SJ6f5by56W=wIz51GE6x~eXTZq5j9hq4ALIs zLAI{ctISqoj7TNOsFlKJxR79#ibeoUL+0 at 5-iP1j#Ff9=qsC&Hm8dhD;naPr;zUi; zP1Y3AoI=|U+uJoV(Q!Jn`Gg)$<{_drl?JfpWvygWK#mt_;bkH>x2;jcpb at L<*VDkj z)M>?LRr4~yN|5E5EAxO*=`LqBnbs^IVY2%nhayapY&{7-w{;BEZ_LJzzFzP%-VbOm11ZNDRB{Nq1wF)lz3A!edO+vmxVz*MO=I z)z-K7O3HwAHR{kXowsY<4xjQJ=NO5w7H>;;-s*UAdwX~^x5oIoXXuvw6(lRXqx>^< z`lbt_7!Z*A{T|V3tz;X#PsZUYEX9;~|P-Zz$;r%h&w&cYXH6E2F_C3;Mu39cU> z{cMKzGEIi_%!r0{^<7>_%RT6tSAy{aY||fIvS~jQO6O+ULPmNrylG#kJ?NwQ$>6AF?W>Mw{whs-^^Z+{;Ah2UWI?spa$ zIvu0SR^xrv$pV=$~5CB|D2!t2lVGvADyX*S`!6SK*#XDHvnK#Oiji_Gj z5w>4EHXip`23gxJeSO~mN)$DrdPaZ2in<-dZey6Yv60`zHaICsyP2uKeyNqmC{~j; zF_)_L*$gyE6~{eWD|{{;u$zdam;vZd{a6F zyKtsOp;Q@~Nb=0;mMeogCA$`fwQPL-d=mW)6G7~J!#dTw9)~2jdIlU8?g?#T{n8Vr zNQ|t=i`VcCzxpdD`q?^%bSigU4tH_444N(7liK9^Z4Xg#w}8zS?pbYm{k#*dNLMVp zY at Nd!`MW-c3Ah3Vu9na7t0lW+rY)gy8T_~chJ+=%%7?SK0!D;IyH1B7+-?KHvR&!J z8{BSSZvL*-VFYfsVQ%rR_TeaQw^454uGe7&uCGCE>8|+U39c_Nw_w-oP^{YDqf{-@ zBUO#zu(rvOb$V&6|2;-c?~q&TfZ4AyCC;NpE%Sx9`ZnXpLbaDqzf$B7O6w&9%Tjfq zQ=(E}BC3hT)OHR&Bkg&?H1D-bUiWuC)8gjpS~tgLV`=rT0KvJftvMV^tJ71<6Qv!O z(;Q- zIKPd=_D+hyTL6-EgLqEaiUbv^JNuV0a^bX#f9#RuQGQ4L?B76l4ctAh-^gaB8iM(w zFd}&)EXxFtJsK*jYy-qh7uRq6WfN1X_aCa8kH at 2jnd8KlbfivPb3(C$6)RDeB|p6u zwx0g>AZO;G(ax+psqB at 5tI5V$aw_T_|2uAhcOy||VWb^6E1{#7WOdE88%)QC6TO^> z#Y2mhVcyD<2|F4BWfhdbl}2{+YFx;1Qf!WS0a+y3{zykON24^iD*r^5@;$VFw74N# z8(6WXVoV{cwKKEgOqx at j#yS8fjPPuS8*HQ0vMcQtNJxg4PrFp5wnuyL#&i^r_K~gS z=mAu%R?_APqD>bc%lsl`V_89o{%KMz$CIr=vMd^w!KDk?1O8&|Y!NGiEj6(J$1-yY z?k>2hIfh8VCG at H&ju3@&1uvd=!cEBq#|yki6bl<+s6jI9?TGh8BHGsFFpX6q2NUOz z3bjQ0&w)GBP*GuoJAGWabg^$nbetC>XM!v6!NMcUJhhl__4-zZlzy6z;4jv|5qS=_ z%S0FQY`l-6vZkhd;UCGRp8(pw5U^B6kMwe*XMl*(XVll{lr*JoK+!U{(lEk72g>)- zptd6ZT7YbJBbCH>0H3<;E-e+|;=+=ser at E8HAupny=w{QcV)?azQ|*x&5nTH$cOR< z^Gf4_NLnEkq;5o6oQp=pCW=uSsNtToNB&`oYncQ#_o{yPb0PVK&a}A z>dh#0#I|@hoI_?S13Dl&GE0RjS=6)BYAVx1M+Ye{*%MT^bOc>5I(X4-^2~z|gXc;kP6d_tc$3E*D+V-J0M7P)7moeXgQD at _oBOM>YTpy9fzSKYV;ntH5?bGBWm)VxOEt(qRVUa9&=1P zm`|P75U_g5KDbL|)aW*UNjw-&t<~tZe91gGOSRMJwrE?wr5|sh-v)Uv-|~+?(F at kS z&)kxY$I%Od-WP6J$EWFg>fYyWX~%2ndqD3?x4h$5^nP{kv$s^^c}{=hRLkjfQ*EW= zN|srs=gcbT at 8}We5a>Trf2I1+MbRg~`MgkNas7Ny{;&Wr`N!&762I)|2|$M3=0Wi+ z#n+0JCoHf;TGMr1yw~>nx5Mf1_WE>LQ-~=aN at j(<#wi-vd`a0$Hq{ZikJ){@`hKm$ zNOjCE6jOA6)LwzcuD5m~4^1Htg4|%Ee)y5c_HH^tO9aC3<~(N|rpYiO&WV1lP-;^U z*pqgtWI56O{*7HywizMI2usaaDD4a3R`=cm^Sq-`+l#(>L=G=svTQ|?raWZ5^WY0| zTksLbTf6qpmOivRf8C$;N8VNu*@mF9)q|s(otWiIR!^_mSr6AnwfV*9jpKJ=;y3>7 zZ96FWX1juQC)Q`XU{a6(VXX!T+w*P!9O!fB4g45*eQR6+0|nqZ>B2;OAL5&EAtV(* z_enn!kn!fSoWLR?5kR{G33(?!o744D?->mY14&*7ha=MRiJ}IEqvU%@&&dQ7JJH_^ zK<*jt+?ZsM@@RR{;ookk_mr9aeFkX<$_(|-sRVSrp&$D{_gDwb4E^wl^{55#V0MIV zxc8hKh`*!dQ3(*i>>AwA+(2<*hlMku>j&SDMlfRP2Z}nRyDN0!hV9zl#JgjM?ZY~V zcS4KrNZe at M@Zd)j4Up|gJD|s6>QfR9&T@(IQ4$U_bE)x>=*2k?52i&?Ib=U1yW>iO z+ee_YD4F-(d|M$8!B8?EfNRy_qwPkc+9TPk9PkS%St0k0fBvHpYBiu9MHG0jLbpZU z4NbMnyf?WQwr9+z*7 at t5DLZgDq839CzijVjuX^vS4qP5ZP^1&7Y&T->Y;fIyCzpJS zr2CuM&ghWE|M?R8D)iWX?r&V8 z at Wax(klA?tF-lyD at Kn2s at N?fY&WrnI?Q)zuCN?Z_FkUQYi*2#St ztxRB8QoD52 at 3>gIQa25QenC;p48F0?b`FwY42gYhO3wt)5cVMSsieLajTo2+ePUmd z&})O6r~$?yCONEaa$h)}Z!2^mlSGU58v zpHw=L6np9sUpQ&ITsM`2Uob^0Ke~UtGh+9rKeO-o4RSGHd}Td<0l~2%k9;A&0v at o@ zdeq*(?70~*d*t3dW%j^t at CJ}d>(t)GZv23_SP^!E6CA%=k!#*Qb&SVd1m>KX8d;-k_%Zi9EnQoCE#WXI2Trk%= z8 at vh~OEJN0&u3T at 0D!wg%$7;F+fflo37CgNK(r>OW3$IJObBRzi$cm4)d243h|KhQ z1Y1I2p@={;kOm`JlX5|G04x!8q{`XtaSEn-4}!x3XyK%hbbe`=?pTT}^kRxk^s)!H z2K1n!L4V4XbK27zwgsHQNII>| zz=GiaTi=QQz;43E#*QXVPXEOvHC0<(`xpA~7mQ;@Fqmj78L+xhWDQNLfb+)zTQC|d z$s;5tXwB0<8Cp~+Nul~l`s~B at 16trz>%yXmLAU*NCu!Ojvd7=*<=pX#Te)OJbhQ6- z(rlwj6=$Qr#ITyJwI+93J at V79cQP8BxrHAm2MEo;p6fO90IwKsu zSvMV1pZ70=$*z~K&Iz~?8Bp-j_>;K(zG5GGgzZ}yc11z1s-sHUgOs+{>u4g4IdHDVdk zB2#|rR;d-H!Mi?)RCE$nTcb;-l(*F at O{vl(J$iQAn+*8tmr!DEs*z$$W5YUHapcGp zn<73-6d%n)L$U*v53@~rr6-dQ9w#;7I5`Qk*f%%eSdFI0S$HT?M~pWVXieIka>9or z+kT&AOHgiz%}um+DQmVkhOe3OP-SYvM0o3En*PsgY+GCf5+c$G(u$EK=vuc|l;;n5eXXy{p;VnX*$k zcKGAN71JVswtD6qFX;uy&;;sErZqb+0rz;foM=OU9(qf(dNkqHs*9>rtkjyqQWt-9 zQ=`bHqhAk!>c~F&;{qi=t2gbi{Uuh05px*za+)6SXcI|=_JNSB*OgvI0aNvEIa_0! z>@gs)sJy-`PbB*Hp<7v|Kt*TK=CqiROe_td9i01znW1uqyMvLBGZg|p-YS~URmZ$k zpqfQdXLi=aU1I;!0h0YF3g%12Na!_pHxr7-bv;RTe;Nthz9%g8go71DFc}waA2Y}B zYIGfriBsStc2<)0&}zE194G>mVE`~=9X({rqUM0(n71}vAzz)?D-Q^LbDI=ef5a1h zGR_bHw-J`s|0=D{)z%uPzvDo%`Q+Qsd!1g=ihJ0s=fr)6+yvb_BhAb5M%UcP zZK3NqLgH6A9Lia2RGiLq92kN->;qyhmf z_#~~kL@#hPijO!?pjHRP!`6HuuhFNJrss=Y0WVn22HtU*9pzmGTiIqKuPS+Ad(*p} zu|%by742n2`M)skSA9;R7%SP=bgS`r(0J0n^J4Kd34!=c=%T0zKAUbkQGD+N at 0=~s z%;iJoWJGbv$_NLTj7^wWD)%&*68Z~(C^YVQyf&mSPVG>@OcuAt{!aA{Ce=S|#%BARDO`=^ksfcF_|#>SDa at l6z4WVhAZW+K)QK zvHUrHDM8XRRrWJL6N)+3k4wH_L|2St40=aq zR4Zq(O2ZTPO8)(NPg!3-?f at JN><#L_Rd)H0WUQbhDgU30xYhqYgpEC~_op5CB_mEX zDeX_8m4RW5TR5A~WzE9vW3MKn1CtsW^_B1U{|F;oaaSRsv4U8$pE}cyJQ$DgeLp at Q z0llP3auV);`;7P$nF@#x17RGx`3`b1U^*ERr(5e!{qx4zVZe0+)Z-QErt&Y1l`}qa ztSJ)~*g`ArL7Fj#w5HWHSr1zGx{|d-YQGQ6s}0pG6$$Z;?3;zMR&y#pYEmayMyNb1 z6b%fh>+MRKpPZ~tHpx#IaiGyKEnI4W|AKNk9P0o!JN<%_uGJWTjC0!HRhnVo- zpF-o&Qd(3hsch0iF2r8)6?{sFl1B<*e@~F~JO1#g$~&G-w8bpa>at89)M%x0)NfB* zmgerVw3mz0V0my1c>5$NdEF1SSWw3f?f5HG(#IXR9EWH*Q-SkKxt8;HHZwV2vqC!M zB~#U|l1v2A+t`E{!mxR5j(k##drMTG78ILb$yx%fqgA3fiN%4qRndxm z#}^Qp^=>OyE&&WOyzP-xnJ`fP1<9y_NHXH)MALa)aeYStMilhsd4c%n(q%SfV*W>Y zq0oxi7WSP-UR$#M*U_Me-OityonIRb zy$DMZ=lJiRMlfsZq0QRnFqiuQAp#<2ewH7+#r%2wrXBuw_zVRP(up%F1xO?HGaHXY z#cP at OVvog?DmL=AebqTZIUoEydFgeCoCHtU2T}1`W|KB>$RRrat|Q`Z+C-`h0R}b* z{om?{{70my8(KL3zfK=2n@(uz=wCJ(D<-;t-gF7HDx$@2z at X;R>X1 at mw4gx>Q at G%p zf(GFM7mld at u<7pS?MBwfCfBu!eW$N-x#>0?f at r=Sfovz=qqhyGtIxM>eYD$sR8ppm{(25Z3xDpZwR1G2pkUGoU53=G>2*KB4gPP-CW4iwQ+yrx?-3k zRkkbF+0sg=5x#ZFRGvM-#0nmp<+ at Mp7`C`2pCEtO3eMYa{AoUNe$|B99qLwHr$v`; zK|e<7P}|%zQM5|_KE|FJEe5h&99#O-uu;Veag-IluGmLfhfiiXXw`1^t-zvrqv&%( z&!!t2b9saVzEhuTaAEUys|yrm>%+%X6TA35c8eDJ>i_Y)b?RFHK7DiPQgHZaX6NIv zezKe at 5XY7MTPdItUo`KO%Y!q0!;9lJY4VtKVol?xQ$ulmM zbga4h-i%HsPp!jHc8V_G{&%k2aQ)(W%3x(bTG9}XT)7c!GsR3+KyUd|2%r=Cc&fDg-zOU&KF9WnNrHwBG2d6 z%{>PWDmTUZY+pg%2Q_b%*uB)!3ntZR{h}~WT;s5WxH}ZEo7TUyiM3MQlpcZHKt6#R zuBlzVgI1widP(P)1(x6$;5mq~vz;0N13qu0gto=nmo?QUK~< z7C6bFHn>>^Csf~rHh9s*`acMx1!^ec3RZ?`8zbGgn+nCSn~`boU1$gYPBh at h9a#YO zolyYS9UuVmPC0=5j+IKlZ4UvWMuLSqM}mq$JQ3QnC~DBrphl%i#c9xz!oDlMQjb0* z4Ls!lSb>&5<5-~uk87?qo+(2P7SU03 at Te*6wPIy|6VgWQ)J5IHrIJcKTb zw$ww`&+K{}1|f>22617<05L^)P!PB7=g=WIUtn5`ef{>nE>|BSt$rMpRrs>!?d at UV z+MPW$i8->bvWTXRg!oz*)s~`@A5Y5wskG?W-HLK=*W&Bc$d*QH?0CSJw%BAdxG~2U z_fgB>!ko-_SlJJ~){@SFc4PLV%adN-W~t;BVNl1VZ34r`vUusJtOU!WYwTZsJ6QL; zNOOKDqE1l!5ZphgEHX^1T07YqyOu(Ovi6of86S3}Qc}mA?)E)wm#SG`J#aZ0ZZVuk zV;CKVg{ECg9m&FKH(DcWH{H?Z-?sTvyBMd+MU>1jE$y%`2jY zpG|9grAnZ-EeL5|G1skg?nz476K(GQ#7-TJ&b+YJk~svZQ3%F zU7UTGZJ3>kjf$NtQ#td9ttgXuvei_Cb at V6emo|_}NkW;C^e&f at KV+87g65_9Wf@4ou@$DL--OiQ at v6kPv6h!LnrML&2woRBG7+tW) zCuR>}Pzw(*D{sF3cO9|^p7eRf%LjZvtQkGNQb(nKoc2jEg=$+nO=#U(wy zqH6x96Ai6QV`+V&jvn|65A5F!;d0j5U-=LXSqgSQ#y>WNSu+NOVKe51X*0%s;_;NP zu!H~@xJk-aIC{$Os9Li4B#jwdV%M2mx$VgNTd%0uzrxmBVjA7rkB=W`x47Z3bV(kZ z2VTVNdf{WXLI()eQnu$@uEFS^32dH|rl$4HhqsTJ at Q>L#S1is&)0q7?hqxZGk3h?< zVpJfpys{$&wW at y~)vKyeere?W+5kCKkF>KWFR8f3ww_M>YV5Q*$ z6}0t45-pWue+?3&fzw;0(V2>_X<($q583w(C8fR2%75bVm&q=A-XEWs`Gw?tpe|*M zmz1U>uOhQPWn`EgPHlKSP5b$NK=i`LitPm93=rPp+FH~Fwg&oO=GB$u?_0(z z4cL~Yr9`?J#>OL3*2ob(5RfEjvDc?mSp+rOhs-~i2t!?$pq5jqVO*ye5O z)nT7Lng*3R0cc72&9><}?7(}mu#8l8SH8+4+tgv(kW)Cbzpti6TqvOpMca at wx$-MO z(PT{fg&=@AL}q+#d(8L>PUgqB at YdG$DB%{h2Fx3H+H_^sVT}pag_GC4pjUy0yGgFf zVb=tNRL*4j(f2Q-ve|0*@a*0ZJqACGv2>V5WC!&fCAA0TJ#4{+;ecc@=vV#U@Pzmi6)#KEl`?gl*0i*aMM zrB`#*HmgejqNSV at rh^vA*=jirzZV3SxvT51{46TM9@@39tYKx4$}`6)q<&s`tCmrU zpLct_fcy0v|#V( zFg57vHGrr_pb64gEAZWA?IJH;_jzYKS~lu6TejTetS}d6rD}WW%8#%F8?Fmi&z&6i zYWy2Y7y at 8nW19%$7yRaX3(8vdp)1(jofPAbuJZfDIp&hIl-P#QKS3n?F=y^sj at _bG z$hIimt6}P-tb9INR`*_7gI<3<@@DufJ_Gr~^L9PHT>)Mw1&MLu1&9V~cSSLJq}o<^ zc)sc1Vm<5kKK;ZzrYe>Uo$9NLjVsRk9!p-f5}XG7LF(c2$PGT)mY2`p6;DRzB$F7! zYBMJ0F<9-HkT9!_O_i;RC!JtgD)>Uyc*R)E`r7(@2$wHk>PjP1`{F1}8i_5iHT^1c-c=Li?KM+FRchx*2 zu}pg)EIoG&mSHU(;V}D`)9`8Gz;WcYb>G4+oo*euORHG3E~G==rBKZ4SLoD6ksL!< zhtl at jzu6=z72KACL4tvC!2S=`b;OKpovr^*3iy|sxNmCbxvWMXnz?(zQfgXaa2g8D z8g;mVeaH+~<#BCtC)Y$cYhOu4#`c ze#WN_uglMmX*)k~iTw_g_aDKaFmWC=XY_vTVJteryRkIzB*VVibZ>g5!B$2Tvv)D# zKjsMJILMHtIMU#((ejX{IOE_>(P7}!Ly^6F`^o`qMydt at Hxk1wJorejho7&P{gW<8 zfHtz0T$;rVv3b|5m<85hTf(K&;R>Z_lz~bnvGq}Y3g0|evqTj zuz>wY;kb@=7_RNGllY?(@4<>Kg$etaYD;}`tInf&jaq$9pl+?BQp)Pp+OUb>dzH*QT&8vy at 6uF3u3#r?P*8 zN{Fk3sfMY5slr}sH at Z(V#0g#*{s^NKgMo>3j7pj-`j at vvlOSmqLQBN<$&U0P>^9*E zkH|A*Wn;aVb##1B9n1xmb63b!iT6}qBH|dk;EP#Z%{vw~mUhS6uKZ_YulBS477B2v_v%NE6Jz+y^$w+8^@>ZaszjI4SNN~t zf(m%jsE)?OFSxI9M{^~-&FBgzukk%P*L@*>wB5 at Cj}{Xkxt|B+j|%Nve!{3W_8zU+ zid%jE`=!+J$@@N7e*LmV>>OBUyy at Fx9BRxT;BSmN>KP>?|}# zYdV9U$Vd5-Uy;R0PL$}qf_|9(mn^ZzEOf$QRGgy6GIaf|mGb1x)UCtWYn)T2sH>K_ z;Ru=KneR0K{euv(68jnj6e)~cs=C1cv%2t_$pAx^We|3RPs0v_SJ2iCso%EKH^!U$@QF2d<4cW{_f%7 at 1A4Np;h&xa#Rw zvbt%R1PHunZeLLUHH%EL&@uk_r;~7i{vU9a{}QSEH?ETIJg|}k6W#)g7NTlotdS`R zC1&6ZcksSIGr}6_e>0Utvwr0neYVQV`$xVi^KXRBq0t#D$Vc4M+*fy7Q`~R+M`>4J zl%U;^KyD&iBfY`a$YSK6)_&1QH%vDCJJiw)I!kPz&K%Q(ySivNa}mjeyZm5%WR*}Y zC{@eX+S;Zxi5A?fzQdJWuY9Gc-D27528*KMvr&nD*b1pbDGD#8?=IM1-V!sFL$gq_ zKEwOktX-(`gTCb?=E2yKyNhCHi&Z+N(0>HhU7e*e&S~`ggYCu(+=rUVAl7EX+$Rtz z30XU|2a6y4RI?2To9(lp+D?emPRT?V;aaAkltPt!mQZDarH*%S0dyJPV3>`h(XHmk zNRKsko8)KJW4Xv_Rjk!|lp|eBxf5zuVv^==ums5ugMe8Fq*ovN$+vk;)|CQOObaBY zlz_>E&d-TL at UGA%qpSz96n?S4v9xFVos21BO$s`VtxAkp`g>qJQ#b5{%b-BjfcY<^LL+c19tI=bVTb5z zYo%dkNEgH#rU}vTFs49fn6DZU;uUVu_G~Ci_yboqG#gqU8?P3Po%gb}w_KWxCauE# z-7kz-=Ra~s7?YFoa}fBDAwg~e11}K4qTj#sVmmTTgoCNeVE6ryi+?1a^s!utKzsK)=NY%#%z8C+^6?p`-?ySfsFzQ_p1f#tnK7C7W zVG-)sA&v1IM@&OWdvhjbtB>+%9SNla0?6`qB4T{~UoYd4bzfoUaHnfWL_CH{+U- at f z^!veXsHs3)B($5LCk1^X$0IxG(Ti5R-iONp2!g at +bccbooK$y>_uEMlmwed^hXq{Q zozf!TkR_t3cMK_k{I-p}oy{=$dc9u>GHF%Q)ly50tEh358T$3#7OxW6 at _ooIE$8OP zXl0MZwl<6XY`5lvw?`^vA)|f5-TbDwWF#FlKZ41eIf2O=h&j(_1d4I<$B?EJTd)5X zY^JWY3fBJw+XwXjpl$z`LZ+n3|JBF at Xrl0^$(T|a2BWMJ$Aj&OQ{;;|Z|WjO4ZvQS z6ORQ~X%bbDh`E+Ct&W9#8GHo^id3?lT3TGBPN(*a*1sLri%p2$+D~U+3T(E#ZDqyf zZGXTRz#X8lZNM54;6YE}wBigw`tA>!PSXSaso3i>x0IzgoU#KrEi&ZT2$ZJSSLx{{ zomRkDhjo9W{2wT5Q|no-H^NJ(TuIwccqdYucFj6Hi!xuTPTFy&F+t7^7t2{Ew#H%x z8WxTr7cK$UBpnTRi!Nl^6Yv_5He8QH=pHh&)qSBk`d_E6k*gav0Xs%5OEvJYS?JY^!_U~8G zG#z%ps6P6nrFv at Ic-J=3FwK_zwkeY$xBECzOd=UxzuQ#n_=A%)2aqT=zbq{ilVNUZ z?Yoiu_0YjSj!1gQaqSFQZ<@c_r-A+#4m#jg-0RJy{omJ#q-(vjE-&zazL2fBu<) zfy^B at b59`3y|+N`36`e$gg*eDT|1Z~*rC3IU9{27(6-7{E+X~EksAu;U{q%Vk-kM1 zgog}1;~gVJEHmlhk2;7Ph9|_ZevslFFxs;Fo8b6h7!9ym8d->_L1XFtarY$G?KG1X zPO(L#4T=Ex4E6w3BN%@t9MgTit)f22#A&Hp0+!9;bswmlzm9S{!_;Ck1HwO{3({bv zd8%*{H4_OCpvmzPtW}VuFcYjNX2_$YTsPP#@Y2r1!nb5`qp-gcNoESnG?#elvK{M! zP|K>^P#ng at U=+)&U70SE$&4ep8A%w)p}SPsxOr%@dwkbYruOR|^_ECCYe; zrzoS&(46%DZI;K>Va0EY1O^t30|v(SKU#_>S9W%^ur*UL1X`Q?NA#9x!norvqUO4p z6;WBl?BXzOB7_=2nLLTYSQ7dKtHPIq`E{(_m$I+?sTvvcl+ zb_XGKuRt at p2qEg(hH-gE^r!Le(q6;!d#Cg-!|ESg$ z+->3Z4!iEa?-qad`7TKOP7>Av=QprB94xqdt=yOA at XWo-$n~Cht&Z<2`;7Pf3gt7k z{|eS`dKWp^@9#BLpP0KcrWIA zImdYBtg88|deBM7H@<#{^LXGGlmG~(ULWR?NUzUqm=CJBdIJtHas!ju2lUX)l3TEg z2K3m>$ZQngmvRH6T^Vc$2AOU62Ze0jzRS34lQX+(QxfkxCb|;XOd&)91f#EQXGN4C z1herJLg_7s at Jh2lgsEIDc$Qgdco}{os#bo3uYg&-w8qgai4%8iI>U)9nG+9ObY4Kt zNyxopGfA*^TT>OUw-9ul`IFULJzV=a1lig~I}^)VhpMs0NUvpgrm)vGLBM+cni)25 zNe9nH8(^$Mzz1871u?p>CW!4cuA6cJ)bCmO<{x at T8dR5aZE7J4Z4vwtA+B?7TKB%# zcZI!yL4qTgmhHlc>Dh`;b65tlG+3hQs8Mn{Z`7h@=PS)6xk|HJTh!(i^~zS3k&OLK z)>?XGG2FiD2RS9+LgO#hsv)steqEYbMZyiDC%VbjvuWJ9t1Lg8VL3%}eiBt5#>=Qt zOBRTB9%3 at +<$XFy%y}piCUgvw;h3LcMX6AmQU`T^*z|YiYwoYj at 7l`{m#2)_l7r|q$70ae(6mCGpW_WR zbxU~vv-;#cl}wk1#6x>!onXcwT>)h^Q+AfH3^}A7e{<;{rE%Mv z7 at DC@L)UEO=xjRDC}U0S(!q40-Ctq?y#zgkA#Y0sy9+~1q&rR0mYOu{Vcaf2g7#4b zbBnsy)M1wk97>8Y0y5ptL;W;XkHI!3Z7GZ6lr!yAwkbEF5{oVqzNz$4*2IB31LK*8 zH`f}AB_NVrQA(H^T^C4l>p|9JAynAG3R)xP*`YLu5gUy!VES%EUGjddPAe0d+bzm7 zy^>U-UaCycc?fc zxxf6Ju_1)UK6K13rDw|a7mPnN2N#zWZRCB<)2TcXl8luUy30vg;t?7S1+jFy{-lR9 z;wZuR#>JLe)*%jNN5J)K%S$9^ddI?etxckqP^q8YSM!9;oYQNpEi|XsYuBl at RKKK0 z=>0IZ?g at c0{w1(dH7~QCLD)@kw}YJj7v#2wzdGYFcEjw|9iQ$(x!@f|PtmpY^F!t? z+JMVR#)5CE6^FTB4Ml&bH{zGT| ztSDj^lDe7PA?%i+)z-@?uWItQQZ8PSB_mVqOu)u%qpe%PLWG+04DcJyXjk`fIy-u? zqD-5^XpzQw3i%BuTg8M?_IvNNm6Te2em&f*L~=`Ce)+m-{@l*Xc+qnl-B{OmXfoD< zqBfnOi6X$J&UEp9)N5- at I%k-7i{7aNM1-2nmJp$IhhBHNWLURPq$88#iv at sqYd8bz znxoWI4~vNy7l)chkVuJgvI@~==i372Ym~Q89gsQA}4c>jny^2 z^KR#cl$18=oJzD6N^pB%|0vrQrH%aCuTwGIRw<%f-7Q6MucpQ)168vT*(JIPKln at d zYjk&w&Q1%v>ePV4KD&@lXSZ>h#;=yrA4*ep(B0BA%RdzZl#QvEI61`Smex~R)sg$n z=ttf)oz|to4^#)JQg>i?Vr{Dy3%iXQat1OlGkIdNv5%_~xTf^A+H0d5Y_O(cBsLTU zI$A56DoQo at ktDqCSw&djb}`q`czq_0OC01M+0E5g$6SppOcKKdR)`-slK_cOj+-{+ z315X0BaI-AtpjZ5OhnG6(gO=-1t}73_?h_X^&R-AD;!Hzs!atMpMOQ_6jC8hwb(m{ z{Kd;Q3d86$ma0&gclncyXO*KAoON^glNxw#QhF~8H)CJ&TOD+njPV*WJe`eCJA)9{ zOP!KF+6`!wajZp%;P^VwugD~5PTXeOzChg(knOjy%QkVybCq|GA*0mK%qj%o z2hMV(&WuLnYF+EpKL#YF8Sl%vV3QnE3cc+>?P=*5e&ctFB|5N53M22-N#?;_dxdG@ zeLABwbWzOVhM8uie>tzkDc2(B@KSmZP7=T!Y*hy=nMD! zatp&i;ZcSw7nyWL#|BX}e)cz5<)&H?R7!iT at PL-O<5m#apB*-(%u8w_EYl3i5<*)H zB_<8iFU-rowgqx$P9M8Rk#gIVj*|;ZJ7^Z>f1b1;!Uf?LfBD|JL(fV8BDRGkWzQK$ z!9iYh;gdgQF834rCdLn&RV;7Gjzc|5)7;9GGIzfaPxDmFDc!@f9WXKekYUMJlonR& zcs3pyAh+6+S_o^$g(!`SGZZvVT_VkbI^p{_T)K!a#e~)*M3aKZ%T29aML?qzvt4aU zL9IJ!#9NuINQ?ogN|FJi*;=sZK>SxBbyO`=-TZ`^s4g1Or%z)darncLHw>@|V#F99 z-=!uj#=Fo7z|*~apAFcwNXPbAO0RW&p at Q2~KZ_u#P+W>xAho&PPM zkoO^2Gw=9APh%Sh!8*C=0&`=$M+7A+z}cB)kaY8Qut8KE4xV{Dcnjo&v!^_*72w|# z4i=2g!`{=oD2CLV=YzY}m2P%M0!ALu{Tbgenlivh!{Q^4xG(hYYE7~?fl?XZm#8-! zQ8D65$XBrGh$t+`nJO;s zq>;uZ!?B3oGLHZs7FYW!0iwH$>ml+743{xtH^5BQ0QFk+0D0mD2m)AgLs>a0>c{mHzFGOQgi1=e4v_*(DMX(M(L)-QT1u74x z^`j0)!!rgV`6xm2;V`pX@=Wpe)y6*V;thK?%>M$LYg}kgmB!_{}ZMOV2GcCf;ZwF z#?#ch4_*&-mAioNEw9O=wx_+>*RkB*~Yy3ZgA*v&<+Xc6yAmL8SXYS>Os4V#XG2nG`ac& z5MM^A4EElvxS9l at Y?GNFp$)GMgx|z9io9bxg8Gq(4qXN%ZaNMQAcEJjuSV z9_&7&d*N*R0dT(7*}pIX5b54qejf1iTpdrCq0T?h3pHYp8nQKjX0Sd0+t)qY4^Z>{ zJ)VW0!s&M&jc@(`nZE at Vi0Q+8`ZV;i_z3HK>&3jfpPWWEuM(x4gNGOgN>OP!0xd%{81=Hdv-hR)_$SOri3}Q=$kRo^ ze!+gr*q+N}VcEmL(ZOTZ)wD}imLL~h|J(f`+b8MkG&EMtH{BsCwpqWMTC&I+;v6QS zzdb+IL~melbzr2k*brkmOfUhn0eYsnPtiXSj%uK=rq{kOADu(dWvzV?pFW35ndbX4 zIL!xBp6P;+Yu?AgJ`*5AJ{X{53Vh1{$$T3aN`DI-%6}9I#c?D9<#sd%g>Xb?9B?** z0^K*f{NqWN69biCoydqGJ$ysGNqq*pCT+h=yxgxy(-=j2HM&fmU5!;sVME=Fu_c?$ zkbq}jt0_sU0w*d$1NL=0TS1blNe`M7GwSL4=dW?|tvD)#t{PnFo}=Ii5Ec>YjGppE zXNc_4aLgVbVFEKv4p1?r`< zDEPvbMIioB(7)2X;jE|)EpG#??7vLS2n&39?jSrzOq*SLB`SV0XKioqN at c3xRDe0V zsV==ig01a4kw0>$)g8yq2%oU$H!&prvuB=FZp)Cvz-&4BZMI&aGdgR9IN^;>xXzB* zWLjqorPW1U81vMm at cL{-h-EWlnhlR at rH#|(LW8O;@a;}m(%41#30r=|YN!0`Gr*kL zU>>J3+?>=zht|;0fMjbCaZHA%_JU`TI+hq z-=-e5T1$FJduVf2^H&fo#X8Vt+JapaE+jD-^rwW{92&*^-13yCSVd%)9|j}ouBqd4 zsoGM;Mf*_>{g<~T{wUoe3rnq*j2iwb7)X8)mHjVUg!)jj{XV!gB`woHvGm&0&I2KL z``lSlJ!Oti{l63mp#zuQ*T{|^sJjM4?iX78o0SP%Mw(MqZG%4OCXYtP> zQ%>5YYL^D$Da41NSLwM_<L=UD899A9J11AQ z!5gqC$q~yai&V9-fE#FSN>Ozw$v|&x%9%GUNg#JZMkjQ-py1xXr{vzkr)^zdm$7Yg z3z at e*RQ<~vYw%&%PvcpMg;&V5rDS6r!V1QKoDx)(#5gU^AQnc$8io&}2qc*-X}H48 zKyX+fBz2JR%eewuKEo4s{dv2)MbRkebt}cE5?y7Q zVLyGcL-}9S#x?A0oX!6GJv(i~#9$0(EEtcPJ0!$x53i*&tP^%SQ6RL-6j?exmR$$x zmyu~`M1-ZofRX4-Mb(z4OA4)1%4JM$(M5O6+#F*&B2&@CUL z+Yw5H)sa#JPI-xI=r;w5fdDyIo|0^?CbDZm=RMqrd&n)Ge$^qjoo5<@*WWOGLQ at D&x zu?Oz6`1$F at zC3N-)Y#I~_Wo~8q5kX%XXGQqQ$^=_<@&P2Dzy%B08!I^$uCK6d=90e z#4YTsf=rK=sG(Z}ydheC;xboqh!-cgZAaElEe?!qQRnh( zaBO4_GKpIbt<9y)L0wKOm6?YOhG27=R9K6F9^ecWGf(u4mqlq-N{QF0pjB0VL;P3p z?d(is1q=NoZg@)yS2 at Qt8aS=OYb?hg*9S|`x_jrCYV4bSiZZj_^|ZRORnCnjh1me& zqT}-M_Mjxa{G0^ED3EFuKVJ at y9+Vz$D41Z0XMOAg`QA~}i;aSvDSkZe_J zntXkbO^Q%8!DdRl3pHf(14UtuJzbIRHjR+7m^++2f0o( z^jqsCqg{IDb1CO3Ps);%AA-Fjjg at sFY&C*Qjy0pvI{wy53JGCg;nr$*nGAgkSHy+9 zxxmDn{w40kvD_lWp>*)sj{a`HPMnzO4EW!N&N7PaB738kF-#Bg- zB at sI$hgt#1J#qyO>7gD2a*xrE8>h`8hG0+;P-}=+0fxU4e>Kh?U`Ap`qM+KL5};=A z8y+P7PCQIJR^4x$IAFAe*6H)fV&T5%32BYgKB-$+T!DG+=*_wQ>t`O3;bZv{$&nR( z>|P=mRB)9Qe at 5v2T={2A#MK9=ux5o);dAnc&{AlYpCy7YiyXbEV8JV%(% zCFFw7XUJ>F(PNs)ZpdTE)nl8@cd<%pbQW~mJT)vi( zbsQbLcGGWBQ8oUqk{oQGBU)qtQK;CCR1bh%JDIeZ=!$w}@-XcUEAFQ68-ODhk!g~w z|5o{-0qHpv6}ND6_{Jgx-7x5nmrukw at DRqPde^;kEfpYFzeHO!E)iRj`K+1{8o7B{ zXj%Bi8^A|~Z&47tAm${rsPp?P|Dg=a=vwLHnwrvk>yM_dlsbNJ#=xr)I3Urcw}LU3 zAy58>(am-I$llMEa^G=gIRrct|I^Sj=&fo6#kN5YNV$R0tIIf<;>}RQ5LS)aNWLI_ zZvTC_UHGZJC}F6q+qiB57k zet at E_kL&mO1JmsJQ&Zsl?|po;gmCnttpVnuv4Pw`q}7=hnH7(dlpQ at e|Ju0t&d-|` zaHsp((gbf#sY?qp!9h5l7g~#bb%S2E+vP?93Gs6sYB4^lkv^H6pDUi~iWgpW at -%pyx9E*CJ}0@;yE1o4!V4|-yTiLTE42Nt z{Daa%I}m9PSLDOw-!HzGmwW0g=ue-N;XZw0`kyX7Wiux$IcMwt=Ik}M)QM!!g~PQs z({!&XL5_}>5Xy-tD>_;}j9AL=dNO!JVX@#&!x-jkb at Q~vku)E(L{V4g&M%D%LUL^aK_zL7U35HKqK>6|-TXiDn#D3 at n_7SLs$t_F-y2hO zSlIY;$mk_eNICl-PJ7R-k&leNez51%X^BXX*{-_<7V_=G>`^Y8_}a_?1k-8XOD0qPO!pDcg+ ze;_G()%x|V8Dn(<$QzvKPHZoG3?mjRfnd_Jo!AY#cF8JSK zekueNLcUwdUfNj(<1tMJMVL2vdt&PU_4%?V?$3aACm0~Vc#(C$6~Ov<3YK*Td3_lN zGAHxd7*nO at zTrIAcyNqb#p0g=)b(*EnOJ#3wCvt+Xh98C;brg}T$!&h&nm}*QZMn? zng_J5E`Z~S(Ao2G`s1x?8Vc|Cn`4h%jlf-s-%k4umT8ZoCvTrr_QYx=<9>dpHKq!P z2K_3 at ZX>T^IMr26aWrg3Dk`*0x5VmV)zfU28{(wSOTL32e}r}65^Ean;?C9oHo0Dr`3RlrrK4h67MT~iaOrcgz7qC-n4Y-$c)cSEAqZH7 z!{ZI0KLp}A7;6S(4lD8I2ze;%mnJk$S}KrF`x=;LH_@^Wb+WidFW>@Zbn!B+dZ^gP zAoV|mEF|`kEj0F-Efh>cn^;`qZ|cRq-w20Fjrv0!6YSyXn!o;xLFSKb=>I8usH(W2P41b}sWEU at BPhq_L1XY_jFGF-@fZR?h4YNJH3d zS(xx$le0H_K8e|ZCX1G0A#1Yykm)HV&y7}F_3%ADzqwx0gG8FkDE7#GVhZ8>G}k)d zQ~54&Gmi)xIz z>hz)f1flQ!X8!D2N&7rEI}ZHi%o0w`USTgj*1{%(LB2N(( z>DO+TmXo_qO^$cfinHr*NcJhpmny8{YP7u7<+F!!(k1FPDduzs0ceC at DOd6-jayqW z{*^8a%@#Mo!WH5H8-Cqt^@g?XBi0>T*mQSP6A8gH2?;k*q5B?m_d|mfLBCx05|DI{ z)OHh6GXGLdTW8N8=V&-8w`5syjalc<5b)Y;FgNm#(GFTC&3xlk$Si(*xR}7l-|5x& zgSQf}t at fZszYtJ%u&7Z#YRNpmw5rv%=cVd4uC-ZA+Bxhz(J?GBSOjhq?c`h7F5GLISaz+<%n#e%2(R9tc=M*sezf}e z1Xt0}^HBNuKi2|!!8Qb(fn{)MS*mlzx;j4E`{34ql4csPEiBluJ{B8XS|&z>V~p>51(?6y}kN?d~LU_BA94`!S8=i zubx<45*~1Ukz9Ow;`$5wMn^M5hqQ=sd+Wze{J#{Kzp-|h2aUjP8;`)^5dD=cs?=P* zldn2yEPnYeRDJ>~ekqe-WfG}|d_LuIGeLk$bCpG03c(yrb=7^yT2vkE#Eh3MVDL|M z)kI($57KyGJjlc}P7TuVZWk^3p7AS$K at f*nXK>1WK9!UvS9OrdeLOX<8cH5s-tMeR zeDO7{)Ht%wRw_f{qeZGiB6vh90XmDtj|AB!W^h2ZonDTRhWrot=O~LWfvBShC)Q*% zCqAyRKd(%~On(lzg?)vig9j3SfiDeLeZYu~R5AHU*vsntOy1_4Ype{??-08>;DMZA zK3Jp>`lCTZpr{~-FE>0!8z!!wg7?YaOYtClqm@^YC at HJ~34QHrH}Qju|1p}o6)Zga z@=pkK4fnrj1O5-w+cZrB7a}e6cV6SGdJ;Z8K?}4=ISO8V2`v%s< zd<>hNXw8j;|9mpz?<5jtaA<#snEj482K=&35GEQZ>rmo1P$)An)1{x^gP+T0_UZP@ z%yJg&DC&otqtxTF6wLlYI_S6$&#N35!c0%GEdw`4LKg zhzDyPYX$8_CjE)lgiw~f3pSkq4W*V{+f!&!P0Mus_iK4xi#%fSYSWs$cD8Z%p}Q6ziDE3gGRfdw=-*;wYBB5guFi^JCe`)2?Kaw`_f5 zHVw(np+KGf5hr(QdU9(Z^0aqq%FKssK)N&0TlAfE0&wXI zT64lxe>a0EHE0~X8g}(`T;F4dx3-#~e)y2CRV{~TG<V?h zty34)Acj36ZlnUR6aR-HBU~prY({&~FhINPasCAiJbO(4g z7q)1aG6lLZ2`>=6674f%M`52W$w+mW43E$DDXa*cyYmD*40q*af;4PMoNF81Qk>tk zx?rx%11z#@py7{cSY-`UJE=JsIcPapIVjxpz=%|o+oFSZ+l4a911xU$yHtGwKlk|9 z{_-#ME4wVi$u3M1Ht~zUhY8b*TKwV(m>afwPb{Tf)oeBylUWQ(`&Y~aW&er?F_8$Q z#Y7fxOhmq)NgOq5Qa)BlmT>$j!)uA5GTjq~TkwYPe5=913c}ZT1*(?T(x-lOYLc~o zzaN9g>ZjvNr?ylHexGn{N3;^Z)hkTTyTX0#fFaUsHp{mgy21Uh3BZ)=%$1?B*W;992 zk4WB>7-x9$$M=xeM=RG@^alZGN+RVdER*e{Lp+zhl=euXpO~eGNMAqCq1MxAzX#WpU3TlS^?9F*TvzEoQM(IQmSVCU9oNziF1;?LC2pss za=Dx`e}&L?^1@&|?GYn%3~bbzLJ(3VCCZm%;X|;QZP3O>YA7Z8Rir>D(cLXedI8r`JxI< z-yy}=3Q=rwO|g(>?5U{WBy*S>90qO74 at N1R8!ZN?;kD9A+CEmPL)J;+5CgYw-d zS|6OFzKpS#T$~SS$2J3tmg-6c$V9IU`;>vu_fm>OAu0^T!;fVkj1L;ATu3Ok1BgsM zi9CopLgKXpTMj&?UJCk1D#ox2#a5D}km6cME{@2g8PPA6iT09gz&?)>VcZzHe_f=kCa1QlT1Yn+clj-3T~)PlF=5!>I}0qv#DSqFf+p} z-E2A-;1-Wf2eMMnrJhX#LxF`DSgF%r>YjoeLPLt|=rU2M&lXWatv at eO33mBSZgzG1 zz36v8`%QWKv_Clgx!llN-P&8(F*qVV8F4VkKpZc#A9!{x9jzOm`9f8*G_i00d1ylF z9J5Jt+pXbP6*DHXxc)a(jrq!{DRZ{sFlG5yx_SI+xkv}%B~uIfgYOn<8hwNxXaI_i z2s7F$1isEt&QL65NksyGa(UW8HLgLZz6D+CWM{;P^RpCX=>=5}p`>_VuH~q(%;3T_ zDOQoE65}Ooz|`+>zN|yP3r^xX4k~g3EPHM$F-(v%{}aJvQ}BO(Rr9m=e)lsLj# zbeJU+E8p!^ybid3 at Blk`anQ0h0gI}I6o)}64ke+mTp7GIu3cxTq(xAQ^LDcpL6am!PA0a}{ zA{g;BgK`&zz!%~qjQ0JjXH_M}!4afwIaJAHvmPfpLp&78+|YptLa3W(UCLjXNo$L` zUt+;AfTs1X9}T+qj6E!4+si)_RqhLBG{S|ci9I4iU6IM!!l@>7=R!a0aPObwyPZ)@ zg!qS^7o)YhIuOKkn<Q at e=$0UG|pm9sVrF#;0^R{i5 z5hl<;@tFBtAPDJBgOyh`L{G&yqp0M;#IW}E?|TlHBC}JS-u9!k*57%2XKB<2ESZza z{n6%;(Y7NPngy1 at ma!|PLeK}cf$(Di=}bqm=O6|oJ1393a`wOxT4*olb!&~0+amsmDO1`J~UdcTGX|y zS&q12COlQ$AEu3#)bUcvX{o8e!?-kS7CI;;J2)LrNZialD8oN#<@|Yz$`U^t z8WSWvC(C at 9{OtLA!O(2Td_iO#_^>`aCURoYG1OF>~+sC7pnLLC|mq{2O{Mc878?#=nm?Wz|_K3YM< zjYg%>A8GgIT2 at BKzcqO6=po|Z%z-j}Rp7^cA{IL&O4HG5g_bi`*od`zCv=9Nv#{!`#4)>+)>tvfxixu{Op zPx?pbag4>dch`&m=B9(7Z6kmADDfGsOhD-SkNrjBn!&*(^E0|rMj1mZmT3%=Cfwg3 zm8h8O42XR^K4r7Vuxc`KvSG3r^^hEPlv1)xvWmKxx~#e+XP71R1by-XwT0|xax4{r z3TLP#@3FhPtY7f~-*`wrXDh9eNmFAGru+n5p ziV4c(5o!h5^kil#J>}*wOBy*GxscLqYFTv&Ov);nDyk|vgp^uJJta&EJMyUHVOcP> zgDfUBs$4R))S~R7d}bDX819NYwI zavpUab+>GnY?qvO$_2$K#VO4x)hXSELUV$p=)~vbaOy}|)D&V0etCD)365kBxmhay zf?t3Mgya-zyhKC#<{KE-XW+o&y_{u!F)_@&Xpjneylv&k*;*cJ&1?3n& zonV$H*GAVFu;&_T7GYL)AU-4oj6uo3XXP=p?%Z~bIFKJ=911aOGn;Q5Ww+FI(6!NZ z!RIx!>fB^EUpK|)i6t0CS;MDACK)O zI&y8BuRC|HxaJ&q51|f`00mJ5QG5uz3A~9edABXrE!G{@ZPr~n*IWw at f`*`ha42X5 zq`X4rzRTCdLl(ee!h9Rwz5}-*EFc{U8+%V8{I|P!$#_h>7=>$Q2zQ`b)Lh|*Bk&`a zP|3yo^-m-PnA45l_y^RECHgB$dfnG;)YaZZFRb7)qo}h(2U6zXG)OUn$!FXOiQ54U zKRVwlm^r2GuhK9#G|R*tnVtFpSq+DR#A(@;Va$%$3aPWi{%{cau^rg=oH^S=>JGK< zd1m}KJf!q*#YNUp4IZa1A#v|HN28OCq$_vnyNK^Zv$mJTu?By$j~s96RJ5PKE!ut3 zh7OE#JR0DVNjhhtk_Q at sw!rds>^M at Ct?(O{#nhlOV3NgfIOzLdrVfbgLrJP;+J#IDSqZQ* z;$p0stfF~^^5JkpMO9+O`~ho2MV;Rs;br2YqSCM}^-c3(X_>t(_RaHwYuU9eH<056 zvrH4_Mg4&*tulOoD^L##>ug#jspkE$Z|*$$8y7l_CRL-A;tyIE(Dt>2lYQBNs&N`6 z>uZf at RX6tBFZvH&_F;rWeffd9N}3iM4d(s&O6pkaGV6Sm6ZVuZ^e>s&#k5TcEhZ)9 z)eIL{7bHANai#^91?o#Ho)2*sIm^gelYLo%F^t+=8x2$s%4A?Z_*ET zJQ_HSd&7NNGwMpPmmn=Wg9Nw6jPOAFA}8V5fgn`W zN~!kyFK}@DfKuG8)f8glqkWLRxk2#$K0VxVWm)?@HryBhpu^HqSHTZR2)|u%-|_>7 z9}?%PGC7{>p(?w(hU(iH%(=Nzz!j)#wf}amive`%!Z=Rt7-YC!+i5u&1pnISB7QAE z+)VG at 5}6t}){Ju!o*OvkhlCBnjK8ZtWK`*IJ!8RTc(_JXx76VQI+Md|G<%)ivclQi zuW4}F>+twHv%}eHwA$}6;Y<$pYwX*cdZ!200FbWeb?p%7N86Wj`$iU at t)Q522hHX7 z_sM}a;sApY$0=dk`on!eMrVV|2{&Q5JuL^v8eljPpi_;;k!g6~5di6PcVrqLP$J&0 zO>Wnk3O(A#O>3?bKz07T&%0u4(BSSW2JMt*r^_AH$L2t zBz~2xYpY{Ky*$_-v(IztogL^UewD22sOxvT)<6v^=Urdj#SE<(cap)KNRa;W{Dmo7cWvWlwx9!*)u8LTC>x=M49PqmSO?-n*~0MPxe%LPnvbGin~%tBFyk{11(Hfe07WFrfW4py z!Url`I{-+x_JG|y3RnUvBaEj=w*#Ox84kG(Bcjk at F!30IDi>WbC<_lTCEI{=FO4hEpqM7Fb{V~pY zUa_0L4$WZ@@oXo^IzVX5Q-E;jb%dmnj;q(`#Y#g|AQnPWsa6MHBG~}s!w4kY zmA-TEg=^9o@(2C1khxg9{tONQCZNOd1jGVLVaQP(%qZe*555ww3?6SofsaB(W0{fS z7xtjok^67Pz+{?b<*WIf~LqI4EYxsdH3VkPvV<+0*eYf$*jKWX5 z5#k3Clxpx)!`%1`jMr%G=&`sA_*9!_wI`8o;4iUw83SM3P!zE{2B_W06mb)Vux~IG zajpirr;wKF#52v5!p&=-QuWq;8lLlJ+U&snUOi;r z^FzSZy%Lv7$75_kG&5V})=ky=9MdA+NX-PJ(9%BGTpQRZbS|!&4JAJX{oe31$D9}XzI{Nzg{<~5KLllW%B#cM{k6V06?cHsH{E z%>n2`8gSMRH+v(BJoY*_^y9r_UnmRacuE|=T5-77kp9GUCkXaC^7%me_ZpsYusJju z^rugpu%ABB{!cZ$|L4 at H>7cS?iXCLUTEA1-=tgi at jCtLxWK{@u!r~iSw)>oNHaG~U zar85JA;3iqw_pfN?UzDw97)0s zo at sksM9Nsf0L%516%JzRZy9O1 at oMQ)0+h_R0;9USORgqE(4YUvUEZ|dOkrkn_-y+% z8+s5aZ8`BKv(~F-cT;&uo2s{neuPd?>MgT zn=ASSGy&oae0nA@%k at 1vdIkCI9{jot?>Q4g0oFR%JzJYfAN_S@%NWxIf$DExYgVf> zm>!9pHRJoY=iJfOcu=Z>|h~_#9XY$ z>8A-b6=@;<(PZ{z>IpYR(`10g>)9doX+`(l>HL?3q)S35KzPe9ewj^Vxu7s7P{PT} z=RMM3Wq?YB$usug82aON40cT2+mI?|LD73iGaZ&E7N#d52|nw7@!b;U$uD#Q2)qPn zIHF4Bnoc<=q&=8gT5=SW7)M28RT6Nh9hjMM0z;^VozXj(Or2FlyDQ=EPrWUvBUg>b z8p||BrSd>+Ql{oPe!DCCsu*;83GZJW^XGA0p#Gq1EGTaF%KnfkbusZ0=}}6Q!ZoCD z`2|PH9=NPrS-lKf%6o!#s*Yl}C;QlT`oh5Ags&~nX$xKt4*eyVk1%OM^E-Qp z27c)ZGKJLC$*r^>G+$ZIJ<)%_2S=1t2T-3rp~LiCD9Pj>jx3=>xG0zE{=8oc>YQ!fYK(acdsmvF*XHHn3A&Ww$@AAEq!wx9+V+^6 zy3Nh-XY2n6_<%7bT{gV)OgngXF6Oq>!Z^FnA2u7vDw(h>d(n$ zGSZo)WcO0;Uxqrxo2V`rOjCd9=7 at -}Pmap?6Bru~dHvlckCS_NB1G>izJjX9dhemN z^YSQ=z0v4A9cDwvYk7#IpzZtG72-RH)e2p1rZjx3wAGf)$WW`S(ZLiQ^;DeZQMB^5a{TXiXd{g!F>GOlrE-*})G$+wYos;?@vl-NtNP^{Hq}WY zUjzk2*o%OKidYp&PjK%1y}u_n2Yhl zL!=No++-x>hm8<8(;@B&GM6$KXrFiLC1;_7nwh~xAmZ>+trf32eLrnui}6YWZzcnu zi}so=XTg`<#T})JmFafD_N7^S<+r?p>d|&H46dF!1CsDiEqwDirke9MoO`LP*9zog z`9A45i^1!l9agyd9wFFhuKXg7={^w!FesyQhCM at jRuWr&mWa_;mdDAWZE2fb-{Bc3 zMOR#*yJJaTy227 at FsI+OGj8uZ)k?(wo0&hkT4Sv)dzbS^YXjT5-_m~5M{8A1k6n&) zs9BH7nY>gL#!jGvdN;?6<9gSYo!dw&9zq#TcF^)2oD%+26H%Yi*RE*WKIbQblMsMI zD7RJj(sV&zuXsJ2f56PHgu6gp*Uj)R6gsHdZ~4ljFz>7yoPT|X6Gfcl36|)`JAq at I znD|Glv9SOkKA3LH6#v|WsCQXFDWaNCi79lqhR8rVPp1!?IACIN>yP1{j4LI{&FHgH zraBYr;v-GC2-No&24kk)H|mD`2W&kmY$6)}|HIfjg=w}e>$;V;?aE5qwr$(CZQHhO z+nJTN{iiBz>x{AXS!b^~_I~D>{pnZzu3bcnFM33L?~jvl0))2+C| zF^kS-$B18o!Gyx5u6I8Yrj{_myLhk@%NRt>v`;%%$=lqk2)AzL*v4glUSgz{C;>946oKl?=Rtuf}_}XO at -f$;1(ZXkt z{;J&5oK|Oj<|VR`&{6g114Pw39N=3H5!I;yS!#tgL>>I0!$BaO?BvN%qy~Gu=t!OE zNijR~ZE~ z^EeOaJHhqH6w9GsVsr{oq7IXi)Z&>8CH)Y;uQ#?jG!+x6-9Xy6 at jCj5Ug28`C3KrL z4b2YQt~b}N&|9|+soJB^qCUZ=`POID!q){xj#K6K*#nZYdJ5mk*i>wvB(9unJKNXo zuJ=>5zC=rF1n9`ASo2Gp6hUg8S9bile1P{~u7!EH(}hXa9WrbOxl51>4Ib2Kdcxkd z`Ck69)pYh4Xj%TZz23h!>HI&kNsP+>GU>E!8n+$1L*}=p2#)+2U}>Z`XNg!qvCQ9D zu^rD^lc}*lLQC6~Gfmnzpa&q!u^58A{PX9biLdg2Ba0?9e#6*oX0qpmgYG%o>wfl} z?+e@>ZJC|en$#YK11pNrmdqYsOZw_&h7HO)iaY5Nw1SHo4OP0yF%6CxjA<$g+B9QV zDc3f-}5t0XW?2*}vvl6KiXPVDY)?iM(|-A8z)PObO# z2N=`I<|bf<(Zg$~-_*&DcE#J9#4 at T?T^q5g-uWs{A~JL~mL--d{I^q~R&CO9`mZ($ zj{6IrbIF1uE>%~UzKcv?kwJhJa0;WG?n#)V>A|a1+WHsw{spbjZDt%`sna7MLd6*$ z!Sy(F>anHFFt1WI#wTmd1Q5LupMb2>!GL*2#@78Mrp{{(S)TV5CC*Eq?!6V*E^Bvm zE;t^kSO at dF9jrR#fy^WIug-quy!_WA#)8j0>Pq at VQ;`PTz9|oI7>~2?OU}n{)mE_3 z-1L}CGoDA9)q=0GwD%Ad?>3_Qc^d?E?dIhOBJ#*a)uy4Tmf9a$viJ7=zR&7C8JX02 zz-_0?Q(Wi-JL(u`&=86Z{m=FaB3KBZ$GdpaBhdJjzxR~T(ryBxBO_I~6>mB4nL5V7 zcf-IJ+sh3@$ElN0lQ>BE_QV1b7E2U2-_!)cRElQOd*H~g at X}do9a_4!IX2Ci8-2pA zl-UPq;M`9^Nf&y|b7MoAsy>g6eql!L>t+Hf_ln=oyZaee^bOF*K42DpubbQ-p?hPF!Hyl+fuNWBKq&a++>grb5?#RSBc6LE zgl;8(ucxqshtap7a9{UGRy@&;?Gdm~6b(92j!JG6kQfa<;hrx&3~a(Ezmo)FBKaEC zERI9uDPpE at lrWV1%seiY zd;~}7nsm1*7HE0a?1!fZ;eGIrRSrB!NH%BKA3vlp|Lq8poxO>zp_B1H8QQ30Xk)uu zInG3ug^)mn68^GoRHu89?ZCLh4#Dh31`dOiuDD|kxM2^u at jEDrI{N&3 zw%YdBtXJEkJ)3K?pNBneLcbvW^7(vsKV>)9x7Ro4 at xFV{IDeF at VPN=+$xtdMEu+ at m zxi2pXz652CGUQlM!tBXaR*Fx{Gxbzz4(Y*E)Q4JGvS?3am+UhhTf?O>otUppXIB{@ zG|2`T%q-TYY1A1IIQ51S9s|R at XTY%F>a&`+2X=@LrA&=r*Ba8!+p{=Tgj%IfGHXv- zFWKWYNen$s9bv;Ws+qS3bSMtROqs&5F??d%nzov=55tmTOv`2MF4sA~@V_zABvTRL8o43bdE!*=kmF@$XhJ`|8STS=CM_aK^Nt?T; zXDr=7GL`Hr9BabGF|1m+XLslhp-eT0l4am9bB}D5?^_&`{f+9D8ETr6vviO3=nOr{ z$XmDpZc-YGnv%herSD?y9^R_nH!&3*qMBl2?w;5x+-Et?z}7W$wQ>*YP#MaaYGUpl zxtPCUb;=5LOV at zAX7pm|9^0zj_c>n2=GA|)V4t{Hy&-hs9}=4qfFod zc81TM-)yU?b at L+as_=8lSzJxKv{8<~7B-S)9_K;1<>z8Tl^I2A&ykO&>Es=Ir72(q z)3xp0fwGr~;#->l0o at SV|EUIs=SSbo$!0nnaTCCYXpihYcP1B-)bTZrZY%t$6v3>< zaV`Xv(f^j;#JZ{lUu;8s>jRxNuYy{Ln at 0Z1gdIXSf zCc?Lh;)22!;rg=AuH~5yV~z at DewzOjC;lAJ=f0}m&lE4DLE7LCLg!p!!;&iHI)t51 zH?Iz|6_lurJkC1%6FyQB93}-%Md56S_g{o;vGaP)yaPL)T8cbAR2h;#(j&i?7W-BR zpeMC+jOkltYs27`6gnYwfx-SJWW!>HixhpKW6wa{`B%5b639zMUKgd|BdYyP$fmYO zzNGL1&J)7GycJt?2;0P9AD0idbvf%Z%XiE)j?WWLw*|ux`$W1zixt^y7xSXN-5q#w ze{nXFAX`XCUKTDIJ{kvKEjE>d!IwMOSO;=ApoqoP*H!oA!`V z2#z^zilU%dZpUr%t}+K#&jHIaOWD>q%Aaj%CR!*rGp6|gn=D43C$}N0qLCT-`fASZ zmiz3P&fJ-c)XptCDWmC%SUvQs%d-oO&Gpskp^XNf^%)zi+V?((Q_9TFrfm=^)M$=z z3!wsR&ubnKGuK5EbmGo7V=f5rclTk-ig}Qpj#Ow-mDOx(cQ+R}9^7r4Jdl`$#jI_^ zxQfKwWZSc|2B&;r>=vUnepy$0t;GtRkH}G!4LmI%=9od at YkfVn(v~bcv4ZBjNwQlC zwreVG-bXB#-oObZjs!Wh^4Yf~NS6SFFL1x-irEU7p0j&imxQ-KVD4K|`$=Si4>a1_ zffC#_2kn`LEF*-l{k6%4IHPbQzA>O!D)!pL_Q(UvSS$A0qxRSX&)6VbHv6sL4k%;O zxMA$J`|T+Qtg)LMS9|SA2eh$W99R48X$QQq?;QAh?(qkNu|v2BPTYgH+=C8eV%ykvj@`o!bYh>` zcTQgX56H*Da0wi|VbjPl9X<*b>E8~kL-#R%{9zqy=)Mlj>x{<*4%a<(nY9T`KL%W5GJ zQe!Q8`!;h+gkoC_g82FY{RL^2N#%YDj7ZngJ$2_ext;1o9do2R>60py`c8wOu4~{? za-@=~rlo7-QFG*yx~hfW+&yq7I+;an*UD||5p`6P+NQB%>k)R8lj^3iW8)Eb)RX$G zv19k at e-xC8pn>1&y>^E*DMmxkoh(yi at _^i;6k_Dd_xXyW8Z6uF|noPS^%Ux!`7R z!07QpVZvTT5AYp)pjlhCzB+`8 at aZIr60ZvNQFBhL7A10w38TA`PL+yg+8{+1#h6AEEo(AWYyMSTC@@;hoe(lvo9p at tv`qu4 zeY?sncttT5?KHJ6gzmKLIgj1?8ILi}s`;`Nk3YpZW91F4_uO2c-dEiR3n-q~1S?#- zPb-yzF_VugEUvm8D?UAQu9ZVuq{T1r*YFJ`u@~YdAU|7_xS*>l| zJgU9OP-w(J;1okOJXV0=G(8q2#~%X*Kp7!3078$HL(dBgQ77hA at y13kkn`?zCwZ$^ z at 0RoiM?ZkP%>XR314|8C4O=yUDtM>9SPN65NHs`z%X;Id?u*}g-oCOUi$%~O z>V+58Yj+EHBc&dg-;MyJ?3rVc^eB5_$M)23MQ=%QqtF18BWn6!u_$^JJJARB-R*ka zU}FcMxBl*kWP8F6V%=zD0ODKLTi5L1q!A%Nl|7>@k{%8ICdB3U(Q8(w%@s z`_32aTXxyDTtqoT64l7E;Z;L4)rdM2y*MWOPU?K9p+4fpxStdaXRykImyWevN9`$450INs7l`GKkJ zLEqLz`oXCIBya1Y{6MlAG(NHbyMlagBYiYqc-8~xx7U$=2q2iK- at Pvg^x?5DvbO|< zK{WtAkv%VZTTlOr-COm)QoqB0wMFH%X{{&P&~}UrZG}%@@w?F2Hi@=NH%Q zt`TMupo`v-CZ!z?m23eYge1Z_H()`SbGQGu at P<`BcftzzDDi^02pT9Qj$Hm=L at +Q& z64Zl4mLxeNea;?}yh#4+kn|uV2um`VwrDwnJ!ioRKbb*l0PUbP2-YAjh!&(1oHNQ9 zY_>?cnLbXz4nLhiZ$J|i4D166IyNRTGbVdl{qKH{;1Tc{GHM2UAcKkk7^q2DZDDg} zdxnDXe)vI05Ixdr`Wux&Nf13UW}Fw&0lU4;V04gO5>Qz0JVfUDq&>_Rq=MysIY=9D zUr}?m8yLag{dJI4upgoI8~xXi1|VI?UILdKtvm{oKPL#3Fa-$4q4q*FH#VpPfXzb$ z#RZUz{{(SBj?@QfUIZhrfr)FKDsIfA&ZjyO+nkHeuT*Lu0r?G$l~ZC?VViFr_Oqu1 z-co{~Ed7*L=F(5xfJ$1XO)m`9ujB+>TrxkKt6%6D+L~R|_ujznEZNb$q zUG_7&L1S-YnL8p3IzGdz at 9#iSZFl9b^MLw36Ph~^g!;cjf^Lfq+#U*4mEmr1tIS<8BN1j~|9`KYlR&|JN at 6H->b|sg~9l+UTwolm#L%c*C_m7p*>qw4oB4 zJcb5;0u6Bn75!ak2%@^WIA*|mvD_kwMJJoif{$I!m4uZZnL{RXg;ty18;hUdSFrc> zqSFi>+uD)PeAqMF^%RHM)l?7D+iKsgJ5E3Smj)DFFG|1LEe~Jr)4 at B?)E)#i-(dm) z1u^h2LDOr*pvJKrnrQ}~Qhf%WnmB`B0sYuV$sqTA=^)2(6g13~9z}6RpDO$8N6aAD z-_|OOer5I%uU;XOQ+(vqjCzXggWej1Lmx$h$oF#48pkvtCdW1*xQhzv20IGsCcTCB zDX*1+xv!an*!Q)AEXU{2V8?lAD;aj=s2O&Y$?1LyYx=z<_BpSu1b&YPxgirbO91UH zSy at qP*wK~9ETMJ9hVB#!+mtX?=!}|_h2uAQ3nDdbN;-s)v@|xSqdR3&9zA!oylIbKNa-h_>_x){sHXzR2p`RP!<*F

      $GTAR_RHxEf+ntuU! zv$KlD+2xc{5FPhSJ4u60#eodL*zN_*=w{yLKg{hQ=&YSrL6^G|zQUKFphcbC=lZOfNQ4U4B?HG_~}MqrDpsFRsef z2_H>g{TI=i#Rj|hxoETzj0wa=er7P%f;4LL+{jA{Fg`B^An5kflY1VeGTAtlXry7FVbU>?Xr^J*F{-GqVMfuItj?-l z8x(6eJ=A4eVDW5IyqH>&CXTZaKF=FzTUXqz&$4d(a&;N)!HEI=?{3z^ZvnM-o`#( z!RE_QX)8g>3o5S+Q66Di-tRttkaL!cE{Iv04lF*Yvm^$(5xyWZnGc7`ksg)D8~E@KWPI`U*v7 at CQ(xF$ zJJJZo at z)bBnbx6q``NawXQSf#@Z+9k+!qOtZns2^@IZ%EJbD0ufJ!QDHKN)THA2~_ zs{8lhkl|&jzIJejn2oYw)(D#w-%IeeaJyy6u6-N8rc22!9)Qb*zw1>8(B+a+i at HnH zs|Ml1|KWQJ;oMS->?i+W)F}!vLV)}Yq*GNj@*Hu!s<|3Yfas^bda8LVHtZ)K){M?a z?km1}&Uq^~f^ZIwhy30CLgrjli{U5z;jmqdGaMKG9dEl51CR^i{%CK z{dK*3&kg_EqN;#tQ9y0wM@|NcGm;D;|Ed?7PK!V%ROP8=ZDGfs#jF?U0*% zoZGzr^PIWIobhteI;TJSIaISIQnLo at Mh!J*H6v$@*}O at QzwJ4xC-s|u%{#k(PtaJk zo5OEUgs^81`t~?mPR{wOoO_zgnAgjH?hukR>TVH({P^MV?*SeEodo|UyZch{|7CZ> z*hZR at Codag>xZa5g=C19V}^E&{C*hHh_J at f#^vn{vMsbK&nTR&sJL}o1+XYzd#zzJ z`_}XAoN%9X&%V3Be|$VXLik&7KL`wD6S&dW83+yq5(KqRl8%r)JL5j1lx9$$VVY_$ zFbuX=6HTShBN=GV+v^Fb^6P2M9!b1*16DldG5gEBukgfGc)Uoh#=&FCgYj2Z1*Ca;)Ks%+!4;wpiN z*{)H1OlVOl#ghS_9hlIs9icUf^3 zOU;=@nXrM_#FMV3l3p^qnsuF7(|QbFUT-VH_%9 z;GX}A36O}-7|aYnVIQxu02xDKq at OYkmPwZZB@E~t%7F~#Tos>f77r>o3oUGDeR9&` zD*5F`zsUQpyk5DSh?m!2;9Lyj(%Gc$>znBt7L at ONGac69>uK2OU{id6Q6p`#a#SHpY4iI?G zC)D8H=7uQw0kh;oZf6qcIv~<0ItiB+AAjOZWXv(l&3!0 at e>+_s-GmERah5+T{~ zt at 3DkbUg}>`)DlKaRm7vr$q0W=<+}yQVcZr^k|A3#tvd5jnT*-9BI-u!ikf>z!5f0 z$kfTxmNHCM%X_s2%dHbBIr<)L=Eqf81KFjksjxN5a8UM#D at hq@3Fg)c{)tj%idI(A zF2{ux#-zF0W}(exSdWE22xVWE-S2c*6V>AqJ_Y&JmL`%+FrlXN`u!7DW%f>wc+og! z>=uAYcXUf6x$5#M^%qY1kQJg+*(&a?f^E^09&@}K66f#0w|{dRT1xS+rLC-5JQM z)9!32gLaiF1dup`?V96Is?La3bRiK}5gsJ@*QpAi33Mydg#|}`hNiQY6e4_5g0Jlx zgkgLp-+0Rbb6>)gJZt46DMWno`c3{+e7!UbXkpmw3 at I;AsVZot188#sJT`1*^K{Y+ zW*Z at zy~tsNs-680{YiLI9~dPtEfWtBLmgt+iHhC!IM>-UFS4!-SY;PX*y&@n4m)I4 z$R(bfSbus8jX_yMTpSGHab9kb{a5!nuSET#wF$v+kE<9Z9D-Ybijco-BiI1gts^g$ zpA4qq2aW+GQaUC_D3ARo)!`5fgEIb*kef8ZooL3WW{W{)k(s%0P`eo#I`MeA;vUSQ z9L8XWmSkeJJx{wIhohX<9SF8a61Ppv at XT)lK0W>C*7{3ytpOqK#x;Vu4=1mC6o6=* zAxhjndtj1QPT??3ik42IS6&vat?TACG~4zaU84=$TRQ77_|ik at l0Q|Cfn9$NZ=k(< zt31Li$$&^o^qf$7{_ at N`EoXHE?uO43xMO`7jj)9M^&ukVsg#ZCfKU|yl2F9J_~9*L$;%2d{o%RzHN-!?s~bLT?{9N$ zPq;lR8;iM5FAHhC&vJkA=2lz#cIoYDlOZz0cFFQO?%$_#I+*U?clkb{^$B`w13}`v zZa{OLjYeb2xG at J8adY>{W}$KK5%Y{ZboW5-!2*zuqkw^q(E^gD(m(^Js(_28(!d0# z)Idkm>!5=(>Y$>T^f1EdcM;R|dnxQAUsL;u?`;Aoj=6vpj=O*vj=g{#j^BaHGFCy6 zrw~A;kHdf^j>Ui}j>mv4j>&Aj&qmF_xf9&Ek)%dv!~o!)q$e;W-_{NF>NBVlQD2j< z(yxXM&3kmZGw7!1bT1W773#F`Smj#NIB_FJx5XCyU8)r9Xl+*RJ)<7QXDTw_m*~)& zG`WphmP at ustu1MCwFHDdzn=ml)G4tdLg9Wdr#1-xB at 1AfOWTrd84rhw?Ut2V$ni$*GnF+wNA0?wPgYr1iZ(%koti at Rj?WbPS13 zH>b5Ka}2%yXJJsfHF;|4uwtaPV=#M{I?XYpqhO~dZjN3fd-`xO zLopWS{47?`lyGwPODV&YF`MdeVhpa?n$ezkA*=M^t^`-6WnyX?jq#`iS?xkWj?&BX z6eK)b*Xk^Z4*mGS&r at 7a2zK`P5ps#218S4LU~pmZMwQIX+gxaN`C7W^CVix2!P=F2 zZ1M3d8VLV)6zr}Rldg9x9jvpR4L#lQO$mmF_t6Me_K_cqF7A*6ovc0PKH{EzqEP%0 zc^G0C1H1wJ0q!qcQub^B{kTD-P_j_8Q1*}oJQO@>7;zYC7_<4Ke zFiIv-CeUqRqIXF)r$A8Kl5zu+LEu at c#)LRs>Lm=B)ZvU zc8530?o_1>kBqDJZpLpLO}d_12ar(L8LMptcJ5Qfe!z}72bEWM$5dwBkXN}@r>kki zEEZI&YUE5-NK;n1b)~S7TcIwLG)q`CIZG65m351BmZ*7D-LX;__uRQ2Z5pRMP+ZIJ zQ1CP=z3NP~OKRKlpYze^wtqY+Qj0wpJ)`Zy(=7iw^wJ3;_w=+N}7#RFfFh8g(m=y9E zYzhMb#S0S#NrMiLqDh0xVmH{{;HrBvU)yRnP!vp!({vj?<2_2J;J$qe3o` zHn8RwuKX|bcW`4oYYm<$l!Z2_HRtP}8nrLz at 4%VnijCOV9Np*9zCF5z-1|E~aeCCn z2*nDpp2{(2yf|kIcz1CP^ESG?G;D})sj|a%2zycUJ7r3eVE(`sn z=W2iU6VFe~HE_d?-Q=W!+yD>og(f at wfB`OW5xi&TEey!xyNsBa?I7u1V*6#zC+rHx zZL3z?x at Bpe3XYnw$5DyOuVMfmYn&pgxAT%Xj4-N=Ph0%@Z_^8&fOy6um{*wq!jNh~ z12dka9wPce>UR$>GbS&4tG4<+BKzCwUK1O%3!e8W-qMTBjQ3=stcDrfuQJ&h9VA4K zfPqWxul)3er;7Y`8hgSjO*+SDg0lmDNg|NX>m{;$I`JqPM8CD?Js^!@?z5Ai- at nq*kJTM`+FB^-cZzIj)5wu~9&@CE;5TfSois1O|K@$8%gtTk)NYtZ zRxI~aY9=Mc4yseE{>}S7u~o~Esq<-EII*rebqX*ulNJKK{M+7b%h_XNj$)rPjUfS` z)@)uF3<0e6MrmS*g&^Y{Vke_L5Y{c3l|E{M!bEMVG1U;>kZ#uCKMB15Ojb0x*=5w( zZL&dr=E9u&XCroS-=Spcp4u%>r1h9N>ohkF(Bn9abM6uv0oXw9d607cEJM`H+LQRP zz$7_K$y4SmedVb3!_jgfr(L=Kk~=f;}l^<`G)K=2x{2!x4kEe|g+n_&w%tQT0qeTCc at 13Hhq@{v7_8qq6D(Ekh z|M06v-6Cr)HM#XckX+_Bn8jkh{ZD4qk@!+(Oj%3hn_A@>x7`o$-ZN>h%9Z&FB|V>e zq8FqO;8?56rqklzARg*{k9uC0E!SjzU+?GFKSFO~2yDCY`O&I)(|Of_pjXzm_EXtF zXF$VU(BT4*OqKRiLVL#k*^K>nXeK2p&oMjiLVt1d9ODeKys$6IpSFCnK}(;^NQ1! z%u%XMNIgn4tai(1Rr4D;jV(*Kt`xQ)Wn^FK9}S%@`?;WJ*t(&3GT#Q+=?BvMp0$%HOh0ZamO{ z6zyL~I`m-Hpw}FguUD&8AE_IcJqoRBR;W*7oTJfJS#{L_EHgI0)Y4QLR2wL#9YDI; zuv{%E6U(lqH_TCO67NIUyKSE6I{J@)Wht;Suo_v at Hei`KWyoa91Wtoy5oe)hF=xSM zNo2Fky+u`f1ZDoazHAlZpcSV at vrjfxSq-o$yFvR|sR>%u`C z9}7DrVv?piVSXBZzEk}%j5O_(dBQ?xuDgW09BmP6p}T;)+FgycDs3)nPRgQ`X)zsr zOpHRv%M8%f9#F}2O8sEfCgRyHG&|(xB8^b-WAdx$xPw)f68J#uv0$%lboL2vN zu3}?5(H9#yLr|cJYjYjob%Wua+wY?XH at C4*(kMU%$9B_bStcctDmA=ch&zGFz4HyZ zGw{hb at T@NtlT;~6Fw(wIs7dbCt&E|ov at YVDq`QC;h1^kQb|d!EyQ^s1ZX$`VQ;SoQ zfUkRL(uxbyST7fEd22->5WBTNh15k#h0mVkC4LzrZtCrd+4kRlJ(uBYBm|o0jO6yhRnlbiqrK zm*i`<8~~pB8i`TDO({V$x9bBQw>k`8h8;e`{chMW?bgH5J%}F?Ru&boDwTe z at hOQw>7(t+rNmKiD1qfz%2;fy{KP&YH at -85YQO$KLfviyIvqGBTBdQc5pOzRMr4d0 z9HZOxlVV9Me+?fP>>25U^$p7T5&?0;2KN`J4KAtk8s<;u4R*;tjYy>8I6=X-IAoB7 zI6}erIAv2|^!VI9Odc1CtHnw1U3ohj4xASXo&su!`D#nDWB9|Ioc3{yy&@RBLBTSs zrwE>7egzPIMHt`uX##$ep~7qI;o%Izvn4WmZ=2=hwIBcJSxQa!LQ(vshP?l?-?je} zU%sihD37WWMk=ETEI2PnRek`rS%|LOjh3JpsS2$UxEzZhTaFe)XySQ`@BzUmXjbfw zgNK*JemeaJ_n=R%0_4WqR4~q|)ug at EAPN z!Z97`{~HQa)v-!0>hxoX`qm2=1dGlj!AH57Zy@$`%w~))snXw7b0!@)NzRjcjV@^w z%&@_|4x2>DNAwYYV$;^7rK3loqDBh`e%hQ-eZQmsQQdda(}V8M{htArPQGX+=cG-M|-B7yr z#n55HZTqP;-8;Lo>omq90bU at Fic1$f^QTM!k<5yX?d;>yy7!s?W?oaubLmEP3Y8S= zGq(OSO!iK=6>AqG;*StvZW0hY zh)YNLhVs&1AZ?!cVTDE^7jfh0CPY1kYu at Z7JoQHDZ#C-bi3zEehat at E5Q1^e$R!>J z;SMD20QjC(jqisJX=S;z}Qa*e)1 zNmFsw{5KMuf>Jt<~DBFDu}+U z)E9!Rr zGY=Av89A!rd+YS2IqyQYt5Z1QX0Op;PMwYlZSv~YOHj++@;Dx4Wdaga5T{J;A&!z; z{mFL~5#vTfXB8J?$eK@}CLb+d zXHE at jG#ug259fom_r(PmEpymsvxT>BV^LhYPCduQ*XF)XDnh? zzsRJ0tUGcycU0{?__wWDRZAb9o at rUIo41W-E!;AzG0~`c&7)=Y+>Qj4qPQZCys2&iH>06nGcz}YV zkkg21rL+^;DIH`0ox^aV!LP}XW{5)B&2{t7kUM0)J#l1H8ojV at D~Q8kFX5`J5jBW+ zbW0(3IHI~k&)VF}apT~_nUc3{_FAKMiRfNpbOJHo at ZVPDvmyas!E(Q`d+5C*i`C1t zh$oS`ZWLfehU=z#1b^~=Q#E5?Fqeji276aG(_kOb*)E68iafxRMwA_nA_r%m#(e`{ zmcckW`Dooqbx3$KXy1MGA2MJ4K14W70A+t2%cC=daRP>@@?Q%C!}~nJit= z%0+h`UGf at lGQFX5eCd2Brn1Bc)wy+JuvG)rNp}@F|7ETAKwEkdDNzdv^jZq_o5QLv z_zuvwA3;PsW0ehV8_OBHh`C+r(H;erYyb!cZxdqs0GS>P at 1E~^QPh9>M;)?~V1p$N z`{PFn#*ZJY|KUo*|Am0A2IG#ag2wCCW at DR3QPMVdcO?kp!!O~%rwE<3Ez#+$x4m5q zSI4-XL%eu3V{K-d6bcLmjY=+`-wl)8I(O$=c~p>JSoqibzaIdHo0}agY99h$pZD(9 z_mw8(=1TG!o@!N8n_(Gz at p5JGz{q8x+&yf8HaZ%T5izE>3$O~uh@$R zJRPEMzz_yh-|)W3Af3|-^u83XF6jqlSRImY&Jb1b?%s{epq+zz%FQNjuh5GQ{9oVW zhMuAP`uAN12^?RL_TxCZ1zu3#`A9yn!q}kvX7(|H`wnl=_v_d{GH=*$cSt{I!gi6q za)-Er{q}Ce2KgM^({5&QzXV^@;IEOsVup61z6bVw2K^jgF!uX6y#0UsGl^pEQH!(3 z`i?rW2GmC|$*xUlz!*@OVebpiJpIfbUe66q;y?*jV&9Cix0 at +NmOZd081&)TjI;Nf zf&a-J-xLH{=7j!>JH1H=(#)PU=|+AAo+x`{-FlECdzyqhyNL+$#KD!=0LSbeDh_aA zK4`?wm3qTI6HCS&(1Zdd2e>dEbe%y*%pF`898}`qilLvCc z3OjQxN&ZP@=9``5z{jOzWY*AxB`uXg;cXonfB8b_O|H>vhn~5{fvq(&vz#tq`A(V> zuQrYl`Zk{te-H|tYIW>0hBvQHKp|a8m8?T%=b1Ztx8ObXB(qwRJa7CP=hnLkb&wjJ zMfGPx`1(=g?y<6WFd`*q?WlC(1s+RSbvH%Mp!-`5koE7t(KiWpmJ4`g$g^wUk z>WPU4alz%c#xp(fCaawMMnjFb1O>$n%fy`IrZ^_m!dP at Trb~`@z6q3-+IR`PM^nqb zE&0pU*<@-as>X8pYUN#`tiK-3*7J+gKYhhji!9H)k*yjG=W*#H31^uZOfY^s8rSdL z<94wt@)TWtge*6m&nP9%U$-n5cFssfmsqFF--$G%4(^+FqOV96p3W%Z}Gu z$LLTiMfj*vyv4-o{d%tY8X9UaW%rvah>UUDrCj*2u*T`yI!c=|y`g?&Fu_jhkiTJ= zHa-|li7A3{fP+=#+%e^gzB%_$LCvCLF`Iib?h;c&Rs&L4dZOhzt=^J=llcUVr3{P_ z1Jtx1sY at Xz-W7X&m}6+ZHnJQax2U|*<~yizXG%fi(I*PBQ{Sb`(mYz5no&OTlg3Yc zKQj)~8xCM)QkeYcTO^G29ls!|XbH1A_(hJ_sd3aG%IvD+;=SC;lAI4P&|aO~+T+d$ z*#}Hv)|&`2%$g2Ww-=RW!(U3b+e+a+MtMj2yyV-;QgGxUSSmFe^n1xqLG-DIsaBIq&oEvl$) zVb`v+<$P6sR7=9(TeF~g-gzmuka?F>iltJ~3vX$pO-ii_>RuWrY3Vxakrvt`2(2$O zYuXXClIlG3Pn^X;HXqhdQr4sh2kh0)ksfTryBcKhI1E)Iw+W1qboX}(7VIvo>eoUJ zV|1R*{T=a&S%Jw%!UmDdc#sKJ$(U7uEk_7CM=qb{e9axS0k95tUb0XS`RW=g2T#$X z26a+k)4`hMog+nu9auSN^E$%5K2}@IAJbcb;|POk|Fl+B9WK6zQ}8=eKX->?uQJN@#{m z!P9>K$RGMwcgX?%vQtW{i-0pXkX|XDs@*}uBswAEGl9g5Fxg~Fp)k?v(|PvFOCND? zErLfMBFsRsXBaMlps_s%xYi*a*yHcI-30ZLdAknfUFd2U*ZGT31n$>_4cXnEgU9Av z33~R610P}l##y?Z)Ccy690 at oXt7aYkdhh#0_IBEhkhWaugK at 0(xaqIIF86V5aGLW5 zR34HvmD at kD>KH+!ih8AD<|Rb9m&70mA`R}z!U{aNF?6*X(tn_S?TZV~BA>##jX5oU zcEBqRer~VpBA-qgYMk~rmhUKS(?l%Aj50Q(POeBalHsOF<}|d+5-X6E=bV?=beMF& zGxF$OC(9<0XT>6pml|2*5N9ZtJy0RVk(98h46yTLCdQf#j?;SEE~k}t9?ZwOQ~m;h zaSJh$(2ONn%urSnoh?MG4LiV!?nxu}Oh}o)J|@b75i81w?hPi6uvTMr4VBfqZf8rI zcq~1F8c+6?E at 6O5s{HlP#+4&$atNI<$x_|?r-C^raMoF}vq_-zbbp4S(%F}KJ!d3| zbOK at v>k4WNu%O0+Aw!dL`}0!P5OE23`XRXBbU~juMLLvgE*qaD=s`V6A%L@!B2GsA zC-M at qe95$@tAg9*51FwaDEr2CqGX?@JQz~?m0inF?Xj|=703?KU^HYyP#b7+BwglX zh03Z}L_2?MDa*(fIM!v%Nrc5VO86 at 9c^0wc zXi_kKW=bq|vQur6q0gR4>GN8L*!=LnX26CEe+DT1aOFot`i2=wc~58|WE{SAas%?x zuH^RbLpcOEx+D6vR04B@#{IgIIsk96zkdOl$D9a!=7R~?p+MXMJ3ycH0UnKlk`q!w zO#O9IsBw!vU)fGdO4%EhUi^}4*a#4mR`8~4XagvXFpoSVy;Jt)t?Au at 3+M!J;lMi2=B>F#dn?(XiC4v|z^x*J5g8|e^f z6cEIJd*+;PbTh)9f7W7+%=ljS6L&qWh{Z1*h;@jD-jge++N|hE(<;{efM1(lg=e`P zlk|`tdDQmciu*|XbSnh>FrPQ&GUGSPoc+~@b&5Ya&d%Lo=;2lLCCWP?x*Sg2x zEJgJcD%7nC53rcvHSI(bv2-c4dU#jqbkK#uQ6r|pV?s|K=#mYqUPIXBtXcF3hwIWa z%6n$kD;*DXZ-$rSs8W09*Gn8D|L+-a`Tsrx&KX94)h51Ja>1~s(qn^JN7t&pm~)Z2 zR)+6`#AF-G$fXHKv*9(0;FbadodQld?C)(F0>0xf at ZLXY#s|8jyG at _ElbgCjq(YyK zi;MTe5qXLKc1KWhN5D*b2xkt&VLMtgYF7!oN)-)rXF-?SXIr%{8Q)WNC`LV+`q)f( zi#af at Zl3y-(jduM7_~lYKgl`g`bb`chSic!1K3s0m5ZUaLoEi7FG|;m@|RtVi$}uC{Af4`&f)u=9Jz z=Fu}-3Lad-;1K`4mDLpySMqv1V&sEvbTyL5(vGGT_>6L2JTt91KiR3UEBKWoaSofp z0eytgvj>)L7zf^3(K};d9*ou(iHo&}!~&KbQ>AL}LiDqNcWb)OEgpr#fPtYPgMqPu zuv_z=UiVJ^-{Y}?>=+QiUVW~T;C)HSvrdps@`0g7f#eR*BFhzM5QvEVSe at U=wZ|Vz zFVJg`S4%fC9W3Y7lqYaWr%is}C at sIlJXtJkKL2@YLF4m at oa=?xwu|v_>Qjg9Xuj)p zU7I%86}X#&5ZI6KD-{2IJ{C;zf^T48 at ie^C(f0!KF~5=+t5066!HwD~{V5d!+h8{B z>|i!cUMjz8iqVare)Oeeki%d)!s(zc&5M*j9$#SoQDhr*`BpILGOd&JR2JdMRyI~r zO5KB#!3Bf?DN+3(H_=tvQ>P$^Q{*7!t#pK$6c?=U!MX?2DL(SlEFZtF5|P}PcVwq& zrAW`dG3^$lZq;}jXumn`&Y}6XETjylYHHKoh(W0}i;1C(DM;a^eN6@(4po&!&>Chg z_5-87ggDzpe_4c{ttAzDbZJdETMKTi7>WXV*Zw?XMQeo(M=mqXqFm!n=PLu}aVzru z6isscRFo!R%Ff**C3-7+vP#E!B6F(F0}RU7aSE-UV5rtu>d;XOmzF2+&e8oRQ3 at 4~ zO}PoP?IVWBO(x`B8h`L at d2(+CllH59Ko-VGSF{!}psAWpJu{}pVsm5hAYBbEc#Y>m zx*UgTZ9|%o4->RF- zim@#x)<-Jz`Oz*M=WE866Wl%QXcXi_o&`)ArZN1qwIBt)%F5c5^1P}D;qZ$*OZz#& z7u2n3EpfYpNw8bCO^<;D-lV!KY2o>LL8nFYA|AGT5jxZ)hDbJgd* z32;U5L0qG&$9ax7)9^(KZ9)tx?uB?|hEb}1rTRF16}#s)>{5BCJlZ at gh z`rdWNo2VPB>oR=v8>3Zb;+TTGM-Vz9`uD)k7>>Gg{}-zRtqvQ4-EeEv=z# z*N_++UWzyaXD=_u1w)UIj)^msOS|}41pI<^`wzS->^_qmZnZ##igzWhs(0ZDEihYg zS#X)S4%;p>8 at etZ`L7ChNd_k);~!7E_}Por at +f4| z%tUVAv~A=rQ1Zv%NS)|cQRv8cZ`HuQi?Qnenr0bfvyyJ at yk8ajF(b{V6;if9cxrk% z=m!eK+9zIOI{`anr!tENGaIFtg*_Zs&1)LnHMH6FkL~v7i at Tje_b2)GQ4TOZmcDcj zIS)OY@?O8{KHu|oK85W*9RD)UNZS=LrcZs-Lq+z`H^zS at _Xln3YQq%3mzERTk==uV~>wdSFl zw3fu_wZ4vf(fXF9&r_PL$5XpY|3->z=(<59_%c`|>9U~LY>SC~E46L%J&RAiUGSwv zRMlWQ{&q^+7$DY__CjwRvIAmWxn0;LY!uIF3_jvu9XrBc9S3%*&p0*fkCMvn=KRXR z=2E-VT^Kv6P?rY~GLBm>DBm23eU>n?s;|&cFW;h@`m$QQ>FH$VWM$;~#k}%eMJw0m z#3Z`QlcHpds6s6N2ZKhh%@!U+xJmC$J|B;uj4piq6!S4xmR++R_mfRzZYO at 0^*oX0 z_o-?9%QjCx3-|9B_dciRuqaHMkEE3Cm6 at fkytI_z)+Zs~&*RK>WN*czU|r6Ap}?jy zas7hTFxPB5QjkG-?(9c_WC6wmLfY$zv5O6H=r;PH;V~)G76nSh7mI>mh5i8JD4MjrP=NaH^ zXcQY+#HCXXKaP4Cw5Gw`CRdR3Dp8W2CK9E$Y@>WLWZ?3{Nrj>|opO?Bh%=9XgJn%D zlgX(CMVUp!7479q((~`S`Wk&|Zxr4VEAGr1FPl1s4u_VzH&hSXgj2n-F0tzo*nNXX z_4gSIcfw=$YE6RTFQK!3zXJm(HWIdJ*q%a|4FdS5|q^Vj|1VL4~d zz_JcJ>WuELb?xQ=u;WCdLHlV|>(mMBb-m#pWR6~>Mkg|aKs_Uw{wqWS0$aV(ckuzIx!pxF9-bay0Gqt(!^|) z!v7k)N_X-0YyyvJ6Jxz7hlQQ=#PpCCiqy*mz4`mIC`g6e%=!9p&KEg^#|jol(s&Q?4S%ectE6+g zv4tnji0d2&-g~B=GM^jdR;{YC<0YYeqQLH{%j>nywNKx{?U2{-AqDJ2v=rqcEU;%@ zM{!mwTc*RSePnFyf|3^VEWBXMjY?i-XziO!(>QKfyOMf;7IBEvwlJB>eGIuq!m3}T zc};wbn(nU1wqGXh08}*ayh>C>M zCR1B`aGc(LXl?eVPxfC=_2ZeFQ^{#k`QbOg*D$)npVfTD{G^41*2(x44bXoS?Dey< zrj9IP%#5UglsK?(LyRaG8d`*;)s0+IrVhurIZHk3fhahl at R^KR4;>qD$sC)wM0V_0 zWOkhFGDf%8pmIL;R6D?a`ug2t-3;k{;rKJy*5re9IHHSO#|SC1=PqVMOD6h_exG(R z&D)XL*C>&`dp=%;Y#iWwj>soScN2xODOzYQlsq3|?F7YZj?h9Iz^DAYZNA;wDf6bG z(Jy3D`m?-CrK*?j_fJC4Cq*4wKEF%uuDZxNy7~eAd&C(94A|Tt!NBlf!N3^qk2t?S zME>%>50OXwe282R{dvmMN90K_DjuRVz%z%Vi9E;Y!iQESE)vGBNK}(=yg)s{xq&MD z5K5jGFY#f-`vXq?I4{1I{|@-qoRN&IgRI?w&sRP_E(qE&!o7=T;T{G_BcI}DK{NX^ zV4E$^O|#%Xyv`CA>Ekj~>4P$q=_5DP>3gv5Kr|8gl-n5Bg+mQrhZ=5U9CohzMrD~4 zqd%juM(xd~X at c5?qP}4|=k+3urxD5{0|)xwjp$9XUrrpzbKG={N$g`kxCq-gNq4%tzO1ZxQzAF`hN0;G^$V-wYsQQ zPfgec at w>{{jK3LH4Yt3Eyp8 at WZCW0Jda@iNUt~A^Qf9H90^bMo at 2IKP4H;sw zZ;6-lwPQD~4YP z>HU0LynhyrtEZlZdFZ0H9m!BpFR7BkHm#DuHrP&5FZwvTUA at -@>UE?G^cLPnEUvzb ztaga?D~N48ezZ^)Z)!A?>-QlsUiBu=HcI#UC)Yj*L-w)lIkPF4&6YaPS=W)Kf3d$Z z&TT+9vsBrinvN1{m2c3t(oEmi=!(YQDI9erjniNxFR`3{=IhE>6EEA7(61GuBa@%B zp6bXll_O54`Cgq4S{lbeg(o$18xaO3RN+PMyCj_TumKo%@%MREIEvf}Mhpd2@cV88nCO1G3A#OI;0(k=h;7rK)5nhqh?T) z9?7)#DmHHyQ;f at Z{OZn#&f0HSr(r_maT{`SNw63gvj7EM~V z<=;Y+{QC7w>nabPufur#&?_)jtgMli;-JlkKC%q3<7C z3RSKzdsV6wTIANVh7Kw)wODJVcmYW%=52Yc9jEs(p(m9XFkea`!P`({mURXX~^B;UJZa zc_NhH#_1^y?Q#`YapOi#4tb_JjWME;S+-4T>lcMxXtccrJGQRLpSz}y<$0fZ*y>3z4?2M*7T0^@SeX7avk=J$8QgupVakbiRw^8KYvK`*X$gvlCS%IPp`>% zWLLajAvnT5cn`yEttKEpG%@yQfX2W!4%IC%CYnE()APvVg4lY1<&Ax0Y;UT>TX|x; zV#elz=JF2mo5q_8xJRPyogX{ShiV-sw6izHcBPt+fB2g?BY9)aI34BbU@*ac{Nb#5 zW~o}ODvH<~WKY%D2mM8iK=(V6iH zP#Ak8d=BR(Hl{CpE>Rvy!}t1vZ7J zG^=iNCLf3?2o*XJS at k56F(?y{UVr8^D$MSZa1}>Mc{eeRPSH#cE4`~MCZfs*wB{`BL| zEazhb2(2q=i3MME*!nlTYQ22T-_f=b;8glpc_Cj?Rrd?k1t7-aEgWFAo)m!Fm& zdpOt?1l{=DhrD%#s)H=q@`LFRZnx=e zv&5p97jFYoB~qU%MB9|~KHfBSFpMB-CM1zHJIa^~GM5QR${Q-7nDAJroW!;gX)4U2 zC_`8_R1%*B8X`xdK2kKBb?=0LC05b!Q|OzuL%@4)rg*LgYV!_x-GFE992 z=c~^V^LAKs-HP;S61i(fKAUzpN559dPjrdK?wnE253*`X+ at 7RuTd0(^=Q(d% zR2ni^?pIA>U#x$z`+~Judi7<98|{qAW(;AI0)t&|Y=&J>=Oj#=DwPah&})ahUUqR_ z^oTis4L_*xIZHL;sW(~lIxWrlL5QtPSJF-wr3N*LLlh at kwtH@axJ=m3GDx;1z?3u0 z;Iy4Oz~V1Rec4-)R*0Gh$k=?DNx_k- at buX}7)MGc4soT!KTfbLn3bwZ)n^+pjvnG6 ztsYU05fqx){4!QEGTyIXl$m4Ob(wnA*FdkzKQY_v+QFEN!`LELPA_Vwoy@`8+`=R9 zBWB at DL~uv#U^N`PQ$L6dK@=;RCX$v=l`F?qVKuSSEQk%k1Z$Wk!{qtX>?iuD*cD

      *uF3G*zo@&DW#>-TX#olMP!R+I(xA^W=USlm%?7eibK9OC^I{E45 z9=o&?xuJ|8){_iC<3k=KAWtsEcBW+%J{3q(r0){u+d#)V at PM(&`(d&p%eb+V^rTU2 zU25;09I at RSM$d;WoM`0MZ=!_ZpNwN(!hg#}-2H}MyCJ{pKijNf`y;Xyv&ih&72B+NLM(&}8GkNu)40l(L~)qV{PCzw z%2pA<26spRSphe;GhO82tP&1P{!!8xhT}}oBbsKbY8YYddZX&^GV#SCKDm)i!M-n# zCr8bVnmKS)M9OoPK7`_PmqrRG;DDPgL6LvOxG>)#d-c>K;Z;L0xc at Wc04N3yB=qWO z+W~ik{r*d0g8a1FJ#?>5TVp51+qGnp4%B!Rl>8#NhVz?czao zw!*PBx8$t1eueVR5qwUtvr+IN&wB_cZ0t at WTh;MLRvLxU8IEF~h8^~z#VvIEe%{%2 z6`S0;E&JXf`(%Eqr7l{#XVdRpbL+?NU*|lsJq~!!-~YHi*F1#a^7m2d3`j0MLTKIV zn&4Y3>NN9=*}UR8fed;>yM{V6 z{8Sa8YEYMMki{oA)?isF#pFh1mHyNPVLPQwm22cWpc8tF1Z#YdpGNCN>)TlU)`E)m z>#9!DQzit-K}`hpEvq1-g5rwK=3Lvb%SORyH&y+Ym%*JzTf9L$r_w>-sWqF^K>#zjG9Lo$rRJp-!HWPjSreccb9xsFJ;5e z2eq?mx-b*q3(2Rl(xVG=YZIs&w#B$KxD6L&LW~O{z#BGmf3%4Ej7=o2n!YdbwR$g; zh83HR)I9?pIl*l20_u^Aj{_ zUewld)*H4(CZ3~?BFa5EEuo=m(@|rYVHdLzielUvLVEBj&9$H1S>MCTu`c2%%Zb=l zz`0a$k^OWXCwA5P6P>b;N`z}+*RJ8RyM^CfVGlL9Dw_JQU15CA*DdM~`?$-Fra1Tu z(7urMvJTk?Qw*MClC zl^bd*>Wozz>eFfnuVNa$=Elqj4h+ji at x2yy*F0-Z`vxnqEN-dK(e!@AvEES#>NIs| zD2}LZOSB-jF)8!$_%r*@aNi$h1P8%=jj1`Uf(m8nGV5XswiD`O*5@)zVb9>mV3Wcd zCdlI8G5NWqrayo5TEEw}!*Sm`qq|v#&cZ4jrXIQmhFHhnRq*lw5 zkT*D@#RRK(o|wy5M~m_B5{RvWpO^|()jgGa&CV0-BUlm at QH+p?KR1SicN{bwEqUkl zIgIB987%HTQK!~DRv0*T>c4^c)X#5YZ5jIh<#NZ*#k4qQro_egnd;)gowD%qLp4t# zrnI%LtvDsy(!XDOxdbUr%lr; zhv;Wu1%=>@Myu_JzGHFlNU3Ru>_Yo9#bo`gXpxhhuiW{r at I7@xFxL`-e%LPvMj zm~;AjVE63=&6I*PwDHdT?_Fdc+0mBG7XBpudkupEstE zpEYo8F8VoLtFssK`RH$ z|GdL7w?rliZsP-1A6zapDu-l<>4H>(Ur*30oTz4b zJj{#9rax{3vp^YNLPxm;(cTXqK!kZ(a+t2B_x)v<@HDCvePu23XZ%^r3TMP~)Y{W4 zSm#z-S-pJEjk>Cuq>sCe-gOCHRQtS)zTk5_+{ookNvWnWNm~Cl)vnfaXI5d35cA1h0RxKOov$THt-pA zMd5EhV|MRS&BnbG7d7H}lJiL=FX(O4*^ue?9ab076?Tn-4nCg>tKxu%1qw| z6^pk>FCNMmJ(M0hBr1;@pLIWooJn`cN9lAfo++E+4&QDN*MngU-TTo>>>*3DO5VmZ;5=fEdf&_L0ud`i%UgKXJdP;A zMBCDhZ^;i_T$^cw6|S<0b@<+DDkXFtAvr!$pVMA~6OclWD!j?VBH zCX69$1bTfPLq-gDDz}iCQh$+|JS}mj`Hi at v!0YEqs1jUQ9NttyuVl-|$G%lqQqA at S z?(cYYTlVc3jyn(XG0w^)N-2It4Bh^*9BM?H8Nw`6IyljyCY)l7+kvhAmBkN+=yM8p zmL|2B*A>a{=Ih)0zH|cu42%#4q{WHfpD}!?WTE);ZoXfiF&uqP*W?$RLy5c_S)4cl zYa-C?l%yR3^o(K4b_Khb=V<0?^L7i*h{u!dqpOi~U9hcKJE3k&)U37CNESSJ)N8SK zMt*MC+B at g5p2LZWhys+!T5v3vf+8Bd at 4(cx7nbLj^0e7KOjXvP2TG>dt5l*$@HDJG zzD-;QjJyX`&(}T)wA7lkaAGn{rb~lc6O4QvuQZ;FfCxmI(>0lPagdzb#~Rm#KPs?V zBaDdC^P#uhwPLF<`uym|&RQP2ds#b|o{H%etsXZ<3yO at CriW4;e{p)x7xyQ+C6;Dx z0rad?i?cWtX#K?IeHx3Sg9=)u%8pfu^~2o|>cy|{o|L|3GfvlGud$E2yvZ%liEn%} zgAI-3+ at I0^+ySbbXh+!@%DsQm{0o9%q-_itMn0SE?$>&n-ipEa7Ah*DP&#$y&j9<2 zoKG_DDM?OHJ+NjOL!aliFz?FM_#%;0|F+7zh2cGtWc~_eQ>`I_N(HUnN%-yqsg-5 z*{BmJxeJGL;A}poWgbnOon7WdvN4HPjQuab`!4EK6b)}ipFeBR0{-0)E8sEjT=g6|NQ)d5{YPdZ;1N=-D&*BX{`+s25F zj6Q=wt3x!5f0RFK@}A`BPO}w-_+xE;<8qj*mh639mI&rPjCqD6?Oh+x|&~D?RRt83{6t52AE3+G#D5&sOtd0ZyCy=@g^5Y z6By7ycaW~&m}~Mu(9+flrlJfhk$F)&J9_GkW0*5br##*yxv+5zM#T~p4KeXabh3ey zDe`*dRqt|skmcZfzWm?E3?Jh7`9i~=+v+|S?1qGA#lAd=6(tTrM+V!keLigH{f>Ms zEEFj~iS})JzQIk;JWN+)qajD)TPqHtA^WrsWpAD=IOmqlHZ>}nS<_H7ebaGK@{;9* zCs>>qOd4)SK#EHa`Z9F#_M3Us^)^!S39)4AHq`3Pyj52Hw{P_F8TL^aU7r`0^MuMA z69mKy+yfEZJR-u0<&Y(HZKmkl4TXwR97!89daQ!A6qd%mviD4uq$$|r2P+TcxhsYh zJ1esdXmqV?WcllvIc4_U7#2pq3pU~!K+4tbMhsF)T^W8Fpb?!InU?>g6vjlVG42_w zunXGbW;?}bGfj?>f`{5-T$&ub(A*ED=BTQSYd+2C;A;&#zR1?DyUP2llKYmQ&2 at l< z#5@}DLw%>Nsh|k9EZ#T{&P$dsBfPo_QnFwHYw7+_1K&sPtysZv2UBC|rQQyk!nL7ry|yn&*Eg2(GJoU=Rg~{M70}D(35M4YvX**v4bZ|9oUn-O zuc!iIK0-%Oovm~$uv&%6e9~RW at hf&|jHMZ*Az+(wBJS?jxH)ItIH9magz*C`f+iWe zwF^I=GX!6>t2&G)5*nwI%E=@P*d0ORcODh?qJZXY6v$(QA>KidF`S1S at gRe@I|`8{ z+DSnrIvLd;)SDJ!0%*JC8f+lvvF$_RC&7+^-m6rXenMx-(d{TVOJN()V*L* zx!*4Ne&GCW0o(YTlqi6FPZqSB0e*eZP+Jj0|A9C5e=e3}lACyQOxKQ4T7tw1S6K^Y z@*FRfF#|eo+OKD|>x%Jz_ewf0#k?K9ddDHARe`hJJmN9zz^8k0xi{bfRxI}95$R_^ zs2HQc{#jdnT-lURR!OOjqKGp^m^Fmn)Mcd=Bkr8`zO$rA6V at z5IhS~iPYty~I5j5l>-LN2%I~$gXA9q;-k)9v zzt#4fGHF1`YG!OdL_HfoU!M|s>q2do(&Jba&ou4)#WU6V1+nFoSbHPCTS at k(oOjkq zf~g`y%#y3mvR6gpr~Gw>KXC*I*9b-w=+Lk({Jak!R3ASI8N8KPor58k!hO9)K$@FP zq<@lN2tQ(H8 at q}BnS&~lMfZkcSsKNjl!%5u22ElqlA}Pzel$CLm3r9O)SO8D!2Y52 z8)(&n`4X&fO_;r@{>5Z<1gxshL?drTp9Kwmi4zGTVNzZcQRso9oHJAJq3%_RWLq`r z3}JB(RZT}*+1Dm+8HE at ML?AeY<>vl4OoD at 0a#1r}**D)q}xBGxV)k7AA4|1rjQvrVLOcE6pvd&NYI|6$fKRA%5q at tXZ$ip4c& z4G3{;QiP|Mv7)wS-!P(A21Va*YqMza1ScP;<)PUmW~voCm)IUEw36-kqX*PXDm$o9 z*IePEdWX zaNwK8*1dc>j=F>NGF{m=M=783Euy?RD|Nv(+nFAMvPoi(cM);=&=9;Y^u)61HCB1T0Y1v|DknOw)R=Gy)TaNY0k&xo%5t#Q;b5LSnn-V>kq+p`=7}|bK~upO>YQ8 zk`Hod=yp;Gt$QMx66J0y4vvY3mssRo;@AjqcjlkNwU9>esgvif(M#PR)}voAq2nBW zje6L8gdKMd*MIfiO5d+(L;_1N?f_AAGK;wD>=f%4f%f%96R1(V5n%lhapiQCp za^@Oyb-V)KJ>W(N3C at t2KJt-1IcX;@cCVNcZf at s=7i1k=2aYwJSq%VWyb<9i2%zbY=TS7+tYAIeqYeXv2bd;5m> zMtKp-eIMxDKf9>D>`QPkFn2&2Nqo!J<^F5yNj;%)&FYpb at l$6l%ZNr0nsw zQG4))qSZ2GG(m)X-*^QYwE88kg%@NdQO+~_4qpmhx_3Yx$%R%zVkor7^EPFVWTYN{ z+xq&0!~t}(H6#WO`|GKOQg?)<-j;H`(CpZ1ZVSmGpq2a_FkU%5 z&Q7LZ`r_R*z8PlVIfvB|8ODK$WiP=~9qu6e1K|W=$tnz zbnfpu54tRMgeN(QtN5lh64>*G5q>~+;8IeDBKpYfRDPzgB at Rj3FwIh$%<|N2Yht2< z?!k&f#`+Rcc(WikWS^VPK3Q_y#V~)J z at A@|+TfqNxwX)0vnDYWNlGlhToY%asx;;}@csrZM10t1&EnvHhHbJy((X5)R}23AH=6nZAY4)emR;go7Bs$C}`dY<7Xx`hf$$K;pW~{snE!#hGHMdAP&Auu~K#My|KUCQ0Fif5sEO`vWddB&DTWlJK zX;(75u92&s3eKp8{?#`WiG@#Yst?J?vLQK?{Fo1B at blxX98@=IDW?_Wsx0XJrtx;k zh(%wnB7TSrFweZe#|v8|u0wgA&H65yOI(&aj4QRou7BvAR}Wo|NF+;k6or(t1N*nw zapx}YvG at p9UHMH{cL$6&;>Q$xvRkM#vZv)SBZg-F)3)!&F10Gah91}~nr+UA1qj&t zrG=*jDRJPljy`Rt5P6jtYbsrgeRdVu-Cw3w{FW!f#B at Q%SIyl1*`e=J9_{cm(^38U zjx!ae?{4rrjZL_wj5x-Iuu;au7vMn-q9zBFXWC8;akwrXxy4fn at pDT<`(4+MEBj|H zrAM(&5X++0%B^NH{YB=z4U<)+Nc#hFyd2V|z>PF>Gxh)d0MB8{wN0sfWv)WGut|Beh; zBgtBBRrS*#)vM3N<8v~4BA(QQy`k)^PE7B><$d)Czp at 5caK?Tqcbr0)*)x?U*r#JZ+aW=Yo6|2a%U-q~!k`R?hnoa4YUUWfFtZtG#WJPNCv)9+- z5F-y3Hmt2l(zu<<`4LJ at Czc(kLuUYqy=QeMT8ZV7^Ovi70e7I z80t5{-GF}s8j|U*FA#qFV(Y(OSQuIBo89>x_HW;zfdBg4|9Z;I+UQOO$!`q7KQjI= z!@dhf^&8CReweYnko_HEIvZ$Z-j-%V-h&k#_w{&yHY)E{A>XgkqwFx5Z9?$>g{-%#;? zM%}C3#J`aS|4afwtADQ`9P}Sq_iOX-4KMU()NL*PE1FR8_9Mgsyi^3luNM3>n)pKh z(L?`lOvC!umQ8VLkU1bXd(d@ z^AzX42L5N_OhUtx5diHe{$Cef|4sBEzSo=m=i0e{<^~{(%nk#%8 at PYHYxy@fi4Nr0 zcn6=^Tm}CS&=S4Ke4Z$O3-3tR0xoyV4ZO0H}cR ztzOnq2ATi&J;%U!mYaRCJOJMMR{PAWfsFt4T328JRoi z{tFWv zFWUlur9iMec~b_E;sFiptV(kJl{fikytvkxaWueD^`ij$+BbP14?ypT+%D-!~`|E?^ZcD)f at LKUOz-}>e8)R8`xkWNOOurO>06JLU2E*F}S-?Hcq)!JA z8y;Zhr0Bp(27P$13=q<`Q$LkbBtYEI#sxNZo%4J7|4YLaj2vt%osIs`=fk{}toeXu zih=uUufyLWS|Gshol5#+M!4~=&}9;UJ^1fYxL?c<=3eYQnczp({x4!bLpRD_YXpC@ z`w{MC-r5R|d5q?Lo(V8G|=lx7TtjR$HwpDpX5GCBHJ2UgPlIegN(8B`9Gd^}u`FCj0-dUSb06;aN z;ej=XnhQky9U}*}h`dQiK;dz3_3b4Oi1a^?8z at Da?@SWVq(v at h?0cfI;bXF|4S;@~K?L at 328EyrxHA}k ze~%dw2q- at yEO4|mF9i{QM=XY7a+z`gv`jD(uoCy=V*A_?9BI0e9 at _z0e;)?e=^qV)M!!2Y3feg+p8?t^1QpnCR*r+-yLX31N~L<{ z8$d62zylla>lg?b{fXFyS32eM#D6&@t`trItZMSsB*Qnjd%1shXPH~k z`CNcz7(xUdu45zLi at nQ}y_WDtN(We}78*|0+VOz# zY)tp!|GUHBj+87fHOQ9XXEuNWJa(($0TmBIQU+1Ca`|(il>i1fIz4#~s+d2gWg5s4 z=d1v_{jH^*5K&O+_atUkW@(%O0Gl$owOoZH395)YQ!|u;jj5mWB&@K&E_g)_WC3?1 zXIiaZ?7{#xAqub_4Jd)izr&SDLu(@ZOwaUgb+E1$sQ5p7G`Sbm%((!%$*snj(gl@% zmt*5ba{SB(FtP%Gk at 5bh)4U^Q*f(FR> za%)~M!4>2Vxx=H1P9G*Y{rB>R-zOS&yg}vP?O2mI+#gr~=srlmd2_k{zfq}s{A-=^ z>qbCi5Qhi$9kyYhO1UR5G`_I^^bL>~ZcqaI4zFmCD{@z6DAgS{&IYK13LNmj>wONW z0{)mA21+OmbOI8qR%qak7ApX`^mk^5@=uwve=e*VLIY0=XubJ&9eqcBINmIYaR3l< z3=Qm{o|XI?7xK^a7tp9pjsP+e5^(nES$;459`$LC8__BN2Lm$$Sex)~Y at V8X*}$t^ z+a8K?ow4S4VOJ|Kts_X{&i=}-(>#}_mcmp zqX?xfnLnF{=ho1uf8_r1-l?1ukbZee0AJmIYl+Hh;$HM$yE5-czsTd8b`FCVq;g|dt3jqA`tx30tuOQ;@NW2J?1Eqg1 zQQ_TMqN at G|BK^;KS0lr_Q6T_4|JKeqs2dRBccookSCQ4u0NZN5wM3N!4*4%^>;9|@ zX`CyQ1E4|{w{~h7qkXwnc%2|!T)hbJ91O4)g&Km4zbEeZ`)t^~_^Cm+wzdx&gDm6D$bTAm67B(Lq|dh;YM>?P z67Goo!rL>0|Gc$b&K6_=cSQf9R-3q=(VzTQFRMF&%>Q%zhe(Ea6#U;wso&eD*cD{_ zooizOdkqo*YwN)Q-dgGJ`R}al{v3ezHQSaxpq*-wfVZ|&hkpyR8SE~G%y?xilmHI;bpBq=sZ*6UVQvI*I$v@*Ouf=KNes0dV zwVLKscQ5|WSf&SzfQzWOeH1mLmb0k0L8tp1S)!jVXR?LjoM3 at 8y%K-_|c#U2?Qkc?Xp2M0Bx zNjMyJsz%OfsOqZw!vFkUb=AH1``)XqdCc=4k=|(}WOP`FK`_S$)|y(}4o3}cphj=H z8OUY(zw9_m*NX^yiRy+C&+Pg%Kyf#t`PI?Oj^L?Guz^kD`lrv7$0>f$E zf&zu_=R(GmPFXwRswXYp<{c0Z_&9 at hi?|+3kto%PO!xKxxamCq7W`ei`&7I-#F(6v zc)189Gkx2Cj|Rn$JYQQ&-5de8m+RMJpGG*0Jd0S1{@W6PqsZ}TQKwToG>Cr9kSr#L zqXcEWZtN at f+IOl@L at Uh6+Sjmxi50Nr@IX_9T82!(<(cFcm6IQV+z{bg4K+XfCV%pV zNYv&@#oxvD(?K7&`Tu4W`1 zKZU>5{1Dy8F|u3{COsm z>zG2PMXP3 at 5}JsNjpHby!4)=<V*rCCLP`CU0wF0>LeT^_?y5$Y_cDsc*-M zZh$HvsFL$rh8%~dLPwtplW-fLv&VnxbPDCgY1|3n(i&jd=h$#FSz;c}PwiRln+wcy{(PNhR z3qWQ2=8WEwZ%R;8(LW1{y8k32g>Hxq2(X30>6qQ)20wtybjdz>{_o#GX48UlC0;Y3wsJl4xvG{ci-m=w12`-;`s$ z3#Q_sb|oLqmb=E9 at zbLa^9U6W_8;(>fZClplesz^L4P$PYfsZhd at xt+o}5ixR*jE_ z6qBm7Y(0SGXx*3nO9EXGu}w?Z&`~q{*rWI`m0!x4jCC%H|@mE9_o0DyB`V{B~jtJ#%I+k}3 zFVPf}MK?ExPvvXSpS^t5O(=tXEXg{yEe{?wz61 at e9N!m?MlZpHOt!4A_-sId#;-n7 z?lTU(>wA#N=6DEbG*5txrb{ZCkYuivj6Cr5|BGWz^07?)kzaMY|8FD{*A2;GJ9q|Y zDOY}Ek2VbAV?jKruRq^63K=$z`lQwEx^05c)>IykJrC!cZsv=hQZK+d)8qabAn3$f5{*!U}Qu+J+Xs^uaAix9lEJj5SnXcOnh!!!{6~@ zC%tM5I*2hO%2>wCkV@~G(poUpW;2aO;jgT zxJH9guhZ*iCZL?yO-(g) zwhPG#*sXY_9hkigg~WLi($*LK2t}{}vm)J_6kLt^WF2KX=iGxjo8wi6hMqeWq3&Kp zO*Q!U0a(6Oad6nz)qz5;NJ1)|-6H|P!FMVr?#^r*Laly6IjmU&031-JGNT<4sYou| zUCG4G_!Vk4Pc)*puhBQhI}fOD9KohyK9?yS4)+}#bx$>XAp at 9v0m(j7*H(qVHPlqY z1xpAFnUrU7sykNrvm#YAn#KZbwnyoEo*s)Y1KL2%T%WK$G7mQoNJ`yd(FAYAXk8vI#)+`>t6c${o5d)t){!x`=jK;N1}|53U40} z3+U-jKJ((TP_%t&N+xvv43N!LRIh)O)D)vu&!r07+5ni$(bVVvsTS*A`nq^F2lWBLaKrByLukVXjEI?VZe>}O=t20DcmcZJY z(%Jn4??aYROJ6rf!4WM$UDJGf6>d70zJ{%aJDs7KF)ZaPnATV3PtZ5=+w zXS5O&Zv)9prTyembGh!NudBAh?d6}ao0YHBz4UcYy1-H7ZCsw<>mozl5lR)4y_tft zo}pmGCGT2nPZkr)#*z0(YjK+0Bra?iM{h;aeTDJsKYT^pp*>>yLSyznkG}SB S5{2l6=!sS6X?dtBiv9;Y$A)tN diff --git a/extlibs/jnr-ffi-0.7.4-SNAPSHOT.jar b/extlibs/jnr-ffi-0.7.4-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..e253572c4cc731fffece04b9b6b38c730842f82f GIT binary patch literal 436983 zc$};BLVV?u6h3ch_LS-QAtw76=LcCwJz)cQbF^ z%v8Ofs;`OzyBGcSUcGwv-rcAwK*JzH{QLsgMT)iCT!I8cZSP0esdI!EgyaUXS#~S3s`rj7(f3Sf6 z-NMom_!m~F|6yh3=>)L+3tNo;uyt^{w)np}&kpF|46yyb4btxze>X_fe~;wM$3`t1e`A>f|Eg0| z|IGh?fxz$&5&mv?{y|TEPK*CrPyU7Q|Dh*9PClOh+Z6v7!r!a&KSlcc>F^Im=U+&F zH#+}-djG=tTMqxzSNnTa{wF&4Q#Sr@^ZYl6zaMDIzlSpY%Lsw~p8@=xqy95!a`AKk z{8gW^|HIZ41hRKAbphIg{;CDqf3&bOb#VC0APeO`j9p!Tf3-Sd{L%EUqdmeuGY5iP z08Sv&|Nb-Z|7s`L30 at 0@gn(#<`qfDqE>5oIE>vR9=0M<&?|~pIb$}&{xviD1^DXei%8~u-+iDZ~Bo;T?zGlL3sX&(vm{op&!(?vAxh$ zSvdu-EZ5VQ)+VaHp+ST$B6WsVKqM at pcE=`tGZn~;kc}K<`+iE&g!ls4sm?w{zG>uL zvRw?vWuP_f>b at l7vbkCPP8rI~~6AnG)*+28Y>VP<32Xi&HIs%^P{MqvL$LD4am zLVZ+7 at _s33ELBMrE`KWrkdQCE5$%I}LiDR2JI}Yh;(z#&0s2?}|L#W%fSZZSZ|;j$ zUy<(-MHgD3Q8F-}S+<_ at YSOmr8%bBi$tS}O6t2J4GFy9-Pm_=zm|Z{?i01c}lzO}{ z-nxw}U}=fdYCHq^{_f at h>h%j7`oR==Q^Eo+%oGe$?XI>!Sa7gE&~wiYT$mzzcn7q?cZ|VNC}@l)9!>e?|RBSxkzQkzj9<|*fd!&?ZZbR30TCOGL4IgOV& zD=gc=5UJLu80Grjq9+KK_iu~T717a#@TKW>q+*bL`Ez6$LR1SN!(AZkifb=n=ozrk zENB7)^yw&TFCijx at GofN3!Kwn0HbQ$q3i-zDHQMcndDE1e|4mx?{kvv4=0|&|Jj68 zH1)K1b)nJ#T7du->^#4D^j(sT#*8R7cmt&%$5FumrVWYVHE?SCG0+2&NtJ=D#N!i; ztW8E58*q5g|BJAB>Sd5fC+VIC4 at yB}&fxp8Gk*IlA*+d{$H)DBRtUTgA?RJY at J(!$ zWDzT7&3SRBm4V(V=so#?^s9J{^%u&KrqalDW`kj-%Kgv;SIA=f6>5a|fP=9P&Qncc z`+Us-mMQ@~yBP*S^ZaH&3fMV)OLo&e}MTQL5GjP at z@P zT)qU>_3nSWn3N;Ijab;>w#5LQ&8 at VS#bjNOpqwSVkqOuM)trMw{Wa39kDNQcv^zq1 zmw at VA>m?lX`G!Pm82&P1_eOhmtvDchRcbV8BaMTl+A6ZGh@#t at V zG1VXA=9zzbgA|=}Wx}b&EMA4*nX9Jel;+6B;K~~QI$?v{F6Wd; zkLnsx at RpoQnw$8hME z4rcSAezkp)Bc7X%tfQ(NYGU57U9sF2s*;q^3pwK4n($U^qEGm6?7KO&#!(TG0>%Mt zSXmTL at 2BDAW>~5|m6l&($I at C_VbF57W8&WoB9ZW)B*-uvTm)Ek7JL-&Xof>u*fb5K zUB!}}SKg$lkaFshtPNB(zx&v79mH)`o%{qp{)o4)#i)Fp)%-k`!AxgD#3#|}AT5L{ zMDCXXoqaQuqca%WLv*zqDS?(sO8elM{n88RkuTHaric6(MaLgY=FmIoj!N9lJNVT= zO&Atei$@B`TkpW4HTf%(4S%|LCc>T%97Vc z74t^YCt=0mVM<=~E$E)=%GgG)aUWRWNKQ(Ke7IAZ%5W{vXWZ`0NVV^{wH$XaUeC^g zJfR>Jhj1p(k3*#l^915*GL`C@!7sn>9zJ91EhX+*1vT}#jq%(wd&fH6ccb5sOK_Yk zfw=IKoX#^iCCj=uX&=jIc#pm66l8OkZ4TGKAVh-J4-`c4g={C&sbe3skb~0qDnWV~ z7X&JyCvTgI%t9iRSL`A+)J!eV?U&vjj^dqs)S_Hw2`4u^{yK&$g6q_MDdtv|w{bwI z8C9Y?hc2Zp0dF(Ct69#e_{c{uu^gm>oNnT9Rm|uz;(5L>$;jbj>JzqLU-fZBNn1uV zP3YS_i!jg$?Zq?sQ_aBOH|)n^h)1%weP&JyySJTh1Wjvqu-|Rc!h~T*puG;+7V?R` z*x-K^Z5!vIYQiqoLE|fV&|5%JqS(R!pv#Ar6w%@#&G7)Nzf1)dna;k8Ur!3UW!t&1 z!pIYp3WT(vBa#U`qxvjM9RvvRh4|H#v*Jkj5kG<;7ua7nJHP0zmZtP?!O(9$4biYu znNh{|JDUfAjCmI!-YH2EH{*Rsr|3XdOC?|8h(=)D7&&Q7m`|Dr z at 8ZSxyr_M*Jf`x_(5$SitBn00&&sD~zh_9*?qm2$3L;n;7I|ai6me`MUF`LQL56N@ zsdB2(AhzTlk6v`AWiMI{i=&g#YqvgCLE>ojx(*|YHmIrEoK)tbvCdND05}|_>`RNS5QzE;K z+E{#!qP&hemzk*(ClFOP`YQ)pu;V9WHIC8S=`d;JIa_+;PhByh6S286UE*rDs at yG= zZ-ot~l*(*)>rsq~`GuLL5=5O1C88)}241RMB<;Xug{Xbj?Q at Rd0)-DM#c=2I8E;Y# zFqVg^nWlWybpt1{Zc-5mIBJi#O3x{m8ICp7uYD&NlFf|C;eB&6WLxpM zss7?^I!kJkJJ_tzZR*lbUIw+r*puFXD8!IsA~+klS>l<#=u=vBbhuVLZ9so7{*vR} zvUC`Q=qr=&2+6GZ1=riGFfsJlqJg%^Vxmv*dQZVA4+L@%V-fiAikkwPUiB8;NcM#E z!}4a|f+*+7TR-ZOZ%D+E97>>l;XMyV-y-vOOf9;TjpYXuth#wx0+WO{`rop~vtFY| z?D~@_PP`+bu;TxO>PYiyJb1tp?;F?xos;@L1F0x~N`pQ(P*zx4{7INfVwzGJH7w+P z*UKE}6!)@o4Xo`=2)i9}8ibz1c8Z$kU%C9|@R>~Vhb%op{;4b}0qo2GPQOvuPIcr* zG>9!U6BDguPGn%?8#yUu&_&m*v5E~-ApBwakxTg~I7Ku8(JvVZ!|*%gQ;heeGDVmc z%j*8eeUh{L{bQoH(6;Z at dLs~Gw4jgSc<|*9Gv$}>k#9QD%m=QLI2CtF(n+RHbVC?~ zOy9UzhOS{ipUX5Qa at AzhDx264J%d*v54lq%6M_Csc6;f|S*0jp?| z39?5`mMrzo8QSp{D7mLD&(=&T7V?vHezP3 at 5DW2$Gd?0;+9ap_YG#D2*g~hc-1bVQ za~b$2vRFxiL->=J at E5tN`z9ZB&>rQ?Gev{3_N`A8cxemWHT_vHi0`LOX;ZoYytg6?M5LGmBUMH|(z9awx z~B2=H);K#rV{}2Tei*T_=YZ?)`P}7F<19r;|hHMYl_Cw82{(^DKk9ysJc48vAr z*vR{{y=%7vu&?(4hI&2Jzzv++VB*6I>;yUFTjgB`WxHnoo)0M<=U}jvOuT}H9Z=a< zOc4nI<5Q9HsKwydK;S{MQC9u<#N27PuNC8vLaYX;#uWslhe?WhZv>TFd@|(j+%koZ#tRuW#X%`c`RM2 z#n~iarc1fxsXjs9p#18Xuyuk2=pPHU7u>Jair*dcTTHEJ|8KuUYp$sO5O<>@J1+!U zJ48)v)wU1UP}t}fffNy|@^pM;RmyMc`{@y8kT at R#Nb at +4qWUho&@S>`ev=b7fZ`K& z$+kFcpV#xwPJDX0y25)a*A^aN&IESc1<<9So2t{;$_IyX6tYuxmq*EXFjdoXWSOx9 z?qiH{1|Oe~EnmO{mHJkf-l`9c+AowvKi<9E%SuhwE6UBP7fD?Lz%wtufRhmCWX at aU zTjeYjyfY4o1C6aOFt&QlVV{%WV-m3su2?Q{pmMD+a9(haaFj;kv}<$H at ougFnvE3v z at CGL>OEfu;ke86a51LKWmjsPM+8a1h$X&IAFJ at Aqq>6ZwSl}yN%5?~Lv(zZ0(vJqb zI&uy6+E%LbHheKG!_u^U7xofP2qntJ?L1`bL5a{BQ6G3S4?naXWZ);R6`v7}6yh7b zw{bU|b?l7~`zhW`PQ at O~-IxO$+I(>A*j)?*gorPXCn**;WzEBOk_WN*IToW{M{f1M z%d@YB}Csz>-Nfwu{VqZ#tVT;C z{A}{>xfzpP;2dRVvN9`dBon9wT5_=+zoqs;4-$W=vzD3AOzy&%l-JL%E033vo_EIz zE76AXv4K9J`Q&oP`N8o&X>t}pf z52tM)Ixm7kMEX9$1g47ZaGjFuH4-nz?W#ITWCquUX^gkE+-f04GoeDtSEW*PM;s!*XJtpseXqg0E^@I~spdyEa#LGU;2|>4)>hUq}qT$3JpG=NL z@`cFJCG;S_Berk-%}f-3mRjDmikOXvRLDFY`3>H$^C$4Or0i#kA at 5Ix?e_>t8VInp z_+8l46 at KQ4o|19V%iAP1dtV^D=jd%(tT+DaBtR8GNTj?mP04Et?0Z5-DeM=C5>r-rq?l zac7Orl6q&j!j4jA(=7hkRP9|Q@>JobcD9(!5|2Ak@|I`DaKT66cMys%~pyW^@7w6Fj#9s<>?LVI(6AVo=_mCXn zwPWx;c80N#iNqEpAKsW>Q(^4p3&#z~%9PTn4rxR8U;?ayRp|{~X z__Zwbi#z2&E&wZllb9{g)cN;hL$Z-B!4DftrFXY6t; z=1?xm$5qk3kEg{b(Rg1SIwkhJ1PQyZi!BxNJs6EXC)%ym<_?*0K!uJxzZfG=un7jPRI(%24Lg+X!D(tqNG>4ExFFxXTZ1M%M at _&B)W^rpa=X!PTP1o+5ydFnLJbvTuk(X85+%XH6a0BVh z-D(3`;3ZmIjvmF*!sm}V%rhXh+!|gKZ%ybDYFVqe{#?!vwar+39j+=|ik{>G#gnod zAPUo5s5b`6HVQY3hWr(`v5WAIPkg>KjQ)qZ!{lQr3U}j4QX%_^rFk_ at ehA`2~aU^6d~=!56JCItP04 zovbg-xa6MG4$#dQ~1&*~tZCSlJ>8#O- zg7l#*6I|oHRkXX4kLmqG&u*BgdK(FM)URYFW;ESl at 0@SS#TR%Q*%iDaub%>PAJBdk zg8NY~&ba?Qb!-K+`0pHskph$$woqPKddo*Y0AK?EAk?!DzzIf&QAdlYs#$tN+1P(Z zcwL7`agakg85?nCOEh1If#iOc;eGbeiuLN|=?mg(v=DgllxVWhk96HB?@h(}5+VTL zYG>w?2NsFkdF~3QR_0;X0mAwW#5vSp`V302OP9&2H3!|?6OPrSP4})fB%oYRFhTo%NtM%`K>zAT zOH?*^Mi>Z)4?liH at xKYWs{OwTLI0)Y-h@)v1J4S$Jhq__^!bhRX$%!@`P5p+3PAIj z$v1Q~+`ZqQYCFYw64u}qY>)6RmXVJ0jBjeco&v+YwnE+u8{a$nyn;>yAQ9c|TBh({ zWp89Se;#G>fBrU*4Z*TGLT1*C+Y9xDVY_)eUFw}}Rhb900s~@mPHq^l7L$3%3aHcr zsjN+BdyEk8Q-vAv`9;I|m(N1$Z4>Ee*gnOZln9XCJ#VNjsTFZ}$1EGQIcup~mns*f z>=vw7_|*-06nnA~9bO$W%T*}E;gy%NkQ;I-`hINJnoqaU|0tF`l&dvGc&tCOX>OWy zTZoyIo@~18r2%EYq166ya#Ei;lSbJSl!X2zBT!|i;+=j)!3w4&nuASe+QDJ#Ivi8Y z%_1ZPg1M`3_Ceh at UKJEQ*)}^3bhTK5kAT&}w*v_!)Yh%uSp=4-_TtKS?)B2?^I2b~ zZ3Oijb5g(BvM#N`CiYk&?9`jJzliXJkuZiOO4cJKr$_H?q!R(_eY+OkTW+Gw^PQUq z&%JDLmJ2+`oinO#vpJ at 8SqRgz(OssS&kd&3DpP9U7Ehv89kS+Syvyy1WIL)%zIp`% zrhlm+`U#+kpC$T^S3m-a8`c$!f{(~UAS at x#g&TyR(8VJ`NC2Lg(wsE&faHcFvI7(Q zbUENo&^PxvV6-B$?%;qG2H6e!alrg-G+VpH`tR9J`PT$Dq$KP$>D?A&yX+7gCrS$u zmzr2 at 8f)^ZPC*(ZNw+?JU%kS|DYai_73ID9){OL7{YqezR9s{`VLCHs8VN0fl9*ym z(F$Dww~fVObR=MXdae;jWPtr`%EG^Z?X%%Mf6HZ>skV2ClhBK^6yiKteCJr;!l~QF zmPhTT=L%(zds7prL*MR**$eY=NIc-!13pHr at Bk^c+=$-(2q%5N?@C+wRT^GKp}k~A z2d_F+w at tPexvb{ZK#7o8UKxH+tRL-kYG~Yas>#+$&mybE<(3?%$a8R`lXXK(_6e7E zsQ(RfwkP6DhGM-H>?xc at rA)I*`clxVu=^N?4Ri6QoXGSe0d!oxb%jmjrQ8QggbSQ4 zOSZ(b&JD3ms}}^D>x1q_#UFwYDZ;VGWNu+`i(dkppQo;&Wr^u_&0p*g!1>`KN!;&J z5?70Tw}1WRoW)}>AoQh2*k;|Drg7&LlrXJ&NrWc2gAnS<#hNDwD9W~cDx+tp;Ru|NQ2Sk7TW*Q>iYw{tXE at vB_0MujbO9VjSe+SA&BiHQ+L>oEYZy; zC&e^RY%N@*(NU!xC}4>sUGm#4N%JPOFMfQu&)9J0pBQ?2y1zu~G_viV4DzO+T8-Tl z!$vcQHw%f3{eF>xR_3F-Bf%pLR-qV_y5I_Qh1}B6tKxtRZ>PM~96zX48#>Y1U>McM zBEzkZAYajnL=Nnupf}PRn>@*Q8=!d{@G;@-WTB_%ysvj!m*Gb`#+IE6AN3sw#50lfT>adf?5ih(QH zslWlo(ojX;I+Hn9NX}CyYn}JuwvG*26a0!ric^Sn3Lw*a4LgjjBpZ4L?sU(>uGv-a z+r^<-Xz- z301>H4avj(h?aBeOELZSfRhLt-R;*13-RwKL;1Aoml7*KanYMw+I`Yks;NkYBhbaO zN>m=8(OP0t6fCLE7kj~HBhhWAD3>B7-~DnL^K%WEDTV at OLJBt9npz}$*!>JHn-5 at J z8KBVdLamy4tXMTDgyyjQtEedJW2bY$Enx+eEEyO*WKHE5QXM-DnrmQsAAS021LM1V zD;XT{q<{dQ`kp-ue*k3}rDYz!n{Bh)@NTfcKJTl2c*{O}1n?zR)&@n5r|so6>Ggx; zg)4k~-Ouknq;5OJ*NAuFjm?iJ-^znhXVJdcx&&G(JkrX_W3m7r*EzG3edz7K27MBni| z%88P(y`Cg!c@*NBRYQYqV`-6i&hjyS`a}53l8Tl2v+%N)l9!hf6}QH2pcC^Az at s%PVu^`<*{Xi4*hVH+ z;vxF#DhItTeKwd1{-tN^(({w0yJZHc$R|JO>KIx=Ox>vurdmM}=?vUU*iPLU3#y&W zQ>)6R%pnvKP9tuouhYebKHm^*Pqagi$CWIzY at n>5oPFXTLe(oQHJ)*~QQE-0%3>#Z zxl9b+JBmNXV;*7QQT74hlx3}8p4TN3HZ at PI(Xg^BT9wIsuF-Q*Y@(*7-ePmK6(G-v z>XOQ}VifOUKrU%KbVpSRHRU1V_dZ+#bv`C&Qm?d~-qIo`N*vc8=xK+(K(;=RrW)gh zzE4>={kH4(nYR(QC1CAy!7A$Q*VaV8lUsqQBezJh9F^mAXm&bYfdG4+AP{;UpDl{9 zb2^{?8qy<;ziDL3cx>2u+G73=>bz^zPGyXDbCo$E8a~a_?x9CmG&afMVy`(dwJkf- zBc~uTvf;OH(JL1Mgi2_9c}V;=yboun{su`fZxdL}v%t zO*{>|qH38M+N(bN;lWASb41hE30{z?M`FYIQF5|d$iwi1sA3G591A!%WM*8^1l{nf zw!s<)v<^sl6PlEUk5$e5;jM3PNh+oN;T?~nyUm`kwm0JWq`qL6h#lEbbi~g}9j=EJ z!?A29w6zC}Ow;zf3;QJF(xtMG6j_9yN9ix^gYGA~wc~r?0;3{x;esX{Ue=7e7drG9 z!G1$7PE*jfh6hRAO|MIaXEu{CYcf!KV*dd3E1h at OWJrR4(3uYQ*YhL4(OKNn1 at J$q zocOOY=D>3kBVz?|lng0)*Nf_vq+9syxIsllU0k;Gt>})!erD{ZaTjI;KbnmcI!qIM zllz>g{q;G4R-kR-y~Fs&Pu_PTMH~J;w}_i8JSb7Gm)-`X!@1}Rpzx!3nzG4kA7tEd{Euq at jQ?rp9)cjT|79##e19H<^IokM& z+OXFExC*=bHHp?fHuFBb_Jd~Q&PR1A$pWGr33qly60C&;S;Wl) zZD$>M*oFRiHaU3BcEb+oXE)yIe%GubQ%7fzV&d5k#|S8mglnBm>0&Cqx{=YlMIg+9 zVt4URL)oq3Gl#)mjN5PJLfWmiU!J9VybYx(tR7~&p&jWZBmwI3UgA?@5qWg8Jx>g? zF+J+cQw1~4RZ`09jib!l6n^S#pQ-Kj`bp)JU}j7oPu+U29! zv*>sLw>-#_;0~$vsi&~g=rw8GT&6G}O9)=x zS4D(dNB(_d@~fVPVGi8I*HBA8XiPb4kIyf4hpnG*7ZFxP?TSHWOx)J?7)yMP_J1^-AZL!>U;h};1%~brX at U2vM;Q&V6u+1{A$g7AuVVXjKOREY5 zbs>H4Cx!{b#Ma|x^8JGBUrDU_eleio2Z=-fP>lbL#L~9*rY?WNVx!+qK`|EqB at kgD zMWz at 6A0ZeRitBMB2^(f0;o|P=L1g&qv`Q&m8 at nieWIG`{4I;yrCxw!>Wjhu${H@;O zb*<;#Uv~Bv>>)naB)p9%kAU3OjQGM}mV)72hxobo!-s92&wa-+fvt#V>~t#GhwpS6 zn891iS&pxO?b66ACEW?C>9iNdUxJS0ip8PUf4W!o!Q{(mP zOcz(cHsOxm97m`6%wQM02}h(tAkI-J3orD|@D?2J$B|69B0FhLBk#!5J2d1Kybn<< zV8x=HGa``9LN!4 at 2f2GYke|doQY#*(?4Blm&sSg`SOZLBKEo&*j=RW=D--}*5nm`B z6QjkLW*2&o;zcu_KAZt?M^L4vOwTN8h!a>ozR_AzRo-Ah`G}b zR>h{ShBW~ueeT~6HMum#j;?9L{o!9XQ_U90=6Ik>Tq{q#!N7=k z>v0CXh$k6C7xOx0oxwLiZunC;MnpXs+CCeDXAr&(Cqojw6V}HEggY-$%VJw?@&2G* z9!bd^7djfp{Z at xW+OV5WW^~YHRWlN%d;A&ECJ%bS3)#Jyk17YxF^lX;=DmU?fN2Xo z^_c^#TXOD at k!A|}>~5G!`M%1KhXx*z)RCgt_zyp1+Mo7;f9Tsb at +*SwMDkZlU^I>K zuahJ+$CShOarlW#$5t?5!S(QFs}np2KQubdZ?YSb2NPI($E-#YNpo7S8gA*=mghic76mQBbm6Y9883B5?6yv zE=onrwQXZ-xqP6b!IL|fVaZ(t`y?q0M$TfP8Df`FmYzV2teaeWjS7SEuu{pHrUOav zQur(C`(*A-k{SkNxeWwhnz`2vM%BuBapdjBLE5>8TP$APwk at x2RIdMCxOUSD%%#!r z`~KiXJJeSTww?hAITQt9O=~ns+UNJ6NRg(H##9llRdfTFFW)L-IGc-hgh>ttUnjPt zeK=g~mcWU1c_pnTgP?++{Je+Jv+VDxY$iK!!)$8JPXt`)E?$8YP0O@(^*A2O+Mr%r z$g`%A*j|@{DH>Xkc5psePLSd>Pfpyi_l?!hWwg}XWtOk^L=Pi+XPX+VI8968hrp(; zS;Q_?#!Pn&L*-nfQ9Yq5JSpC#N64KPK&)tv$9bLqB1G0a*%C69NZhSNJwEP%-V7s- z<3|`$i;s;;zD*zG`6CSJh5^yH{3hMZ@~iwAq}$eEGo-TnI?kjR&)^a)D&-F`8YUQ* z4f&N6G)EHFgm?~W9lnGLy2%Mfh`09=ehlwTgu1vI9uO`aze5fU$ZVFNXCZEtpmzk0 zNPMRmGy9a=ffkOSw?>2^iU35stQr*3**hYv9PvD*{lkHBycgssKRC<-^XnaiU-zDW zpmB)$3g|~LEi^u+QSv-Wy^&P^l!6BL3b z0+om4b{=}2TUs2_QID790O$T_YUYN2$0NiAJP4BJ}UAaTSlp`pVZm#QN!5^5_P$3(7s zQv3RLATgTAcSW~XB2fsrok*=&yLZBf~Kr{@#KLI)@)ZCsMR~+5{Sjy8N=r!8I#X0 z0db7h)?rf|Q>C)LmtY2eP7)$!e#20omxH{BR7tC56!)Ymp|2ZaP96(YlH&B{v5Jxf zJ8?n;?nLuaRyDA#ykTdo8d at bxc1gGn7Uxa51azxT)T*eXaa6$Ab7{`0({;}%la_%T z%iZ89PInH|;D`l|g(UmHw==nv{m9&?d)>_*XaqEBCJxyKyyH3EXku`De~wo< zu0d&oNqNJXr2;Fvwax4u3 at 046Lfuy2-8T3c76kE3nkZfGc5rZKrs zH{I_%VN>KmWo~_gZ&~AMb__-{5nP%^S(|5$&gM)$70M*V=hrr1kpbBF3|YJEP|lsb zEM{gMqWuI)PtIE at 5QvT7F$$VQ?h*2HYDCG)6YMSJ>@{NiFqC|hGH};;n>9|p`)p%;Dv8g%gX~!z;T|+Xfj?c;}ZI+G3o08+lIm>|>t+7iOWKFtn465YCZEJ3J zN+!G?a}P;QKYJ!X!6LxQG12SxM+C}vl#@l%BA0-Q12Km&wQ)2rG`l!8322_w$iRos zUgA2$LRH1)hJup~O+=u`;H*QunN}(5$ZdPVmj)wWZ6 at OVfI;5f?Z>XD+$`K$269+N=B2#*zI}bono+TDeXVi1f$+Myi&y+y(z9)L;q#Kfw$OEx>xly!R4dM>!MsgynM$mDoA(8mVFtIe>ktC z{Kagn><9BJV1K>-^c(Y)OCk$Re6><0mnob`BJ22@)9;(#PePquwbBEbO~DqH?h{$hPs%qLi6Z{~Pf!;S1`KA+ zdEyfKeRLe%qy4~l8V)-6-!z#hSi$!UholT1`J3z#wte-AR?*}c<0qVwJO-qEJ-S2n z-(yzFoxD}5c;3)zSLQoUhHC&HH_Dv%|AGHZd9mnR2 z<%qB)zQ`V})d<`2s%cnjvWhx0LAjY9ZuaCrve5{8dRyF5VRNGuvYE<*WLb)9U^CCH zPH1h7v7KO}v2&Zt-K{P{%MoGCto%rWjn4=+K^E%h-gb^(zKus<5h14T^ab)rw@;-h zX0U9gw2f|8X&^TW>xFuc01vjUwMWPTvhzM2sn)IGLaySF{uyEJ`bz3%V8rqi&KH!m z(tV-8lOT`Nw+q5&%_ybA;&Gp^li at X9Q7SUXlGw*NZyfVldmWY3;T4U-s zDy<8LANS(Xw{BgzhqHVSw*@r@@%esnmkiy?n6^Uh#1ekB)q^GUozGHsuj at S!cR%kV z>MW};7Y&*&G=JD#Cmm=z`4tcC*Cuw>{Sg0O882fJyvY57 at s2RR-YWn7-y8f^y8It> z4 at oqLo&HJpo(c{F$+)$z9nI^_2lFEx_&mLHy)fNp3>)g?zTOu* zb)>@{`qolpOFXIkocsQMockF!3+Lw|5U;v8W00CN!GT7w?tI(L$7tX9&UOL<69PFT zjymfVo5s;u->DE_R-JUb9&A)pc;y_^x|$eX(#4 at z!Y>7aZ4p6iz6SgIyx-KPJM)KP5wwSrox&j77hx4L>hp18$D9Z^ZYlU3G9w3h>(j~(cRbljJ z$q at Crw!)gF0tQaogU1f+7|wGn-$)dB^_=qs|AY at LZ)cjt%6xkVq1171P)<1Y*o(QG z(gN`Eg(bmEu9e+V7Qh>X_u}H2Ni}a(jU?Wn=MbPbelCsMG~nM2kM99si_arqUPGl? z*L;Dk$qt){)0HNP_kBqgc at 3SwCvI6yK;~Ioe5HCBN8Vv3*w{3TK4#%gV0JtvG|r}7L)>x5YrVS0 zZtXg)sF_x%w!v*^kO2)C6|6Quu6rjjz^t2WR80JFl_BZo#&F%bg4oV6vUQc+Gv1T~ z%M11#nV3HXRUo+xv_fMXl?Wvs3U4iS^Lnsc9w(ZYeu`=*sg-UL49xLf76h>PgsaY z^NAyFnSs3iwD3Ibp at A8ZUr4w1RwB>tK)08YSnkz)O)#xMVYTAg;m)B)L~aBQ at kDj$ z4!?0&b3z0+ at v+BHoN$>4GN%=l7*2dLhQFf3Oc0TFf!{^>u`6 at RImQ?51x2`UeNE}_gJ_bnkBV2^oB3!T z_6VL9YlCjcZjo3&r{az-zCbIXH|z%7u3}eimX2QP4_09sT_k?=X$guqr|O`bNAp*? z^*aclmGIyQrj_{aItp_ENT4tta{u6qkmE at 3`s=JHLI9$XqXc+N{yDvwdhhfPa*BXf zcDeWClP=`12cG|(3jPC~?Z(G`UJQM4 at jSm+e^~}A^c`-fudfUPjRY|{umGXmzK04V z+f;pqdz9yS0qH~Mn06P^QvDFR$6I&x^GfI at W)C_oIUH2HnsOEWj0%+lp^CLRK+l^0 zs{fF>U?@|xS at Y&nj2p^o<8{k)f4tJbkl}~(vG<2syPr!hPunci%Ni1*Io`FI%xX3# zxfU`$%^T3%J0|Qu;F|2~_ at 9pXpQ<%}Y5WimYW8<%O;wXiRuscCU~+i+xNT-$k|Y9g zwQ3vWasq5;{>8?Y(T|Bnq{_6;(PA#^C{FwKgf0}31 zcw_JMXDOH83qQxJ{W*v6PT2B%`c9%fOX3=cun1Fh*5uN at Z)s_bcv&ig{$2Me{=M#F zvw$ckx;Rb3S@((H+3N9Xq3Ij~WNst{70IA!s1q;7E+Ii5Qp={Jx!S43&QzePw1q3- zH0H!)pGmIGbjsG7?ds0oBiZBhJ=uS9`^+W}kO(N9vLm{Q+0r*7CEPI{IAX^pypJ*9 zRw`Q-aQdh>Cup?b?KQhgFBBhSjI8z^E*?s at 4B*G$pU^{;C@ z{vZUSs~$v_a7segZ!utv=CUo4Gno2F)DaKwnf^ZzhqsrZ>f$vV;A>^pSX=h{1TA z-??`!Rf}0)OPkE0ke^uu-Z6D%@93loMHUr)N$FHd!5SjAK4hxX3H}LVl1jarLz?tE z%T4xak3a-{pct7`O1_?Gq4*%&&ulrrv at P;3tQZfq1rIzjxf%D*%8#KR3@>j-p-!;P z6AmwUJ-k=uZ-bC25Xl|?pX^H6(5k<$lStv6K;oQ#-sQY^h`)r{|>a~#= z{(`$!Bk#mXfeg1u+dUUNLrsDZ6Vey9FcaVlxzQbUc#}fC3>{2TN;7ro6=*0r3?=d> zfam9kRii#`e%1%LKcvf7&;l at j#7rFU5D?`5^90|2-CFyvEBqnaa?V6j*iZVAE0nyA zZ6SQh8L$!-Lya%p9N_ufGGqs7bR(AD*Kj5DN6A=naRejLDywRW;ecAN(EhelvwXhA7)!bEo!tmVBnkz?aFx?d60`f*z4{R49`Wh zG*k-Ge1ok6nXutzu+TY-Q?nN2(b?TA~&(;!=c; zN6*}dqb`bv-w9AOkrz~&%xvc}R-k&qOIW at lV=2E5HdnMdbfZ3v-PvqZ7(uV(wBVWw z-;`9dA8J-Nf;YR>@1Z9gp?P01fhRn|7c#>~SyOodx1Qvouw~aqd0E-*?P0PF9fBtI z0fh&Pu9m+{wL2;>ptf7;023#KK`{jAW+EwWiX|5k`zK17F8MRmWjU zb+L;UYG;56ZR|#N7Hz8Z^wTvd+ at xknoDIqfcT-eP18Rn5bdK*r=~{B77rqPIYz#>=p z$MK*<&%vpwH|zHXo-svGJb#}u+r=Rgk<_MH5>ed?bk*B|}-os`qSj1{f+kNXZ znAUbNsB#!bvO}snopn=ec{3f##s%8;fMMAA2r_a_|UOPxPhw2VovfaIaFSCxrZZy)9;g;g3!O-22}iyshYzStO&ZSdci z!o_YObb99{%6a&uiznnVk>SAWez=ZWNGQo!KYTHXI%xh%)-TBTwnE0In{rCOH%$hQ z0!rW+a;=S50*DRjWE2k={l^%%OOqmiN2T}eoy?p50R~U{hjuZzI1yB7B z@(NEekY3wL$Y&H3XT)k=p~Dxx>C=~QdE_7YkEXswbyTXrA)F}3`TacT;tq|aOZG@}+Z(94^xpuZ3bMps3)(TVK#yQXa+p7a_X+E^bwtDxc6tw#wgAfRLwDT$GCcumqIO4 at +F2D(xstZr>@RUl9X6u8=)F at w3Fw6n5 zg9N*=iZgh_%cYTk$efX^UtBvJW^W%OsdhliwRu7V`7xmQgOvWc52NN10;21cqI?`+ z)Uf4in_CskRvXZ&SV<9x%hdN+fd=h#7){kj9-BrKtTEaOwKgU8M4lie10s3zcisj~ zA3%3W1ka$r7(xMm);#5a^Ajb+oUCI8vEq?4%OHQRwR4Tn)}hXRyB={BrWAL?Ba`5 zsUAB47&VJM13L8R(;_pCdx+UT at W1xbp*AZ)q%u#073ybtC=Jb7f&+ut-2 zTwUw^1pnBi=^vXE{@-j;*u>Pp#oGCQ?;R!i+w?!}vnWyPud?UJ7f1(5?)N7N1-w^`ULQ( zaEGz!$sCTJuXLyBn~#wbdLUML8RGCr&Z^tQ98}m!Om!Kd5mFEl5K{2KXHUsiI*<)R z at y)pAhjZA-q2*as(;oV%uDYwS_)-=r8}O>V2T-AAQX2<1?sG_&TsN9}Tq_P8+oraJ zPdDSmPJfc4OIb6D_U)Wg7}85R8{>>-TIGTLYUIlu zcfl&@bgQIL=-9DZ1}Deystf{~#=*!Uh(2*jt7>mSWyjtvfi&E;F&;wv=(eMf zqFsp1#?~&o5PvJ+Yv&N(ZKh1vGp}iNmm!-o41?F2vdUL?a3>10IKhmF$M=Vhm`0vF z?|VuRw2-$iv~U9#(VrGO=dNY%3F}R?qA{MEn+Bs(tUJFx)_aCVIJa6zws@!#a8}tDS*Ohr)iuykle@ zeu#idwezz_xcd(6ZAAWJ zh#GU<%KX-1ip$@W_mIqlb{97}BmPlvw?|qAlqLStqBRPP=HqWgrrmOW)5t&Z4gusp z2&c)qSX(Q5*#EK0zf`^c>om+i&o?%s3JgN<$`6`70O4D6mqLVv6K168^US8XYmb*p zNlK*%?)N0Pf1mryIRa#1ED`lWv(vM;e!ZKzJ{>*YV)f!LBZm>83^;zn1{@gIGgc1P zjwA9hQ7_kNa2kxJTvP+9Yl`M}r;6o6Tvkv|4Ak{8sU_9k#9-sKKNAG#Jy`k}bW*Ar zHloYr(Q7!9(rLX|-RRm9`h4RSKeW~iSAWZ!Q`Hb#6&f_-nTeD85dT&>Vv)X{h at tSX z6{FCj2pQ0Bo95cIZ}l=t!rit+yVIlo1XqV#l<*^D2{20|XPLm6TmK4OhKxGh7umq# zR?6RRN~V=Hnf=sQkJmkr+fYOM9(6$=Aeao{4*P&|WP>5)%+ANQQzu z#W_VyBwB-7$2!D%J(WeMl=2TDS*v4c3y`QE`vj9V$ly-)TLkjv*M(uY{Dg5N7A}4- z0Wn6LGNePz8tKo)-RN-~JUi?PueyO}xCOl`4;=-0uvI at NU!z(ZLhOF{8yyOwN at A_} z^Yr=W&Gf&mri87lozXwk+>}h5oc?@}$lEzN|21p%U#Yzq0qA}PM3EnsHa3;J;~-%$ zI_5X90kg at 1eLj_Cg(-z3O`%SEz}!h`tyHb{==Wxy-uU;Pd^tePX at i(Um?*QN8>~v% z-B1C2jxLU>)xU}ny)?M2j_ttgid5Tbm&c0t at nYkVE2&M?H6)iYx5gqFF3CIDpKcm^ z3ey$)FD-4WYC)CcOjy*^T-nv~&7qFJZjpcmfb>Y5zlfcc{PtSJe#%mMlZhge68!sr zKQrv|5&7e7Q~qxVK>GiQ08np$_X9&`(JiDRGawl$3&|E1+kqrtD=fUkLSg?K0R)nf zwYv&P|I^U_fdVkmP0)E_Id;UYN|TQdtmeHVxeNWnBLoUlI* z(JC2AO`XhI);Fsu)lKBf1=VY&%wR*#JhZJlQhqt*<}I?{2+uWV at 5i4$Wy50(Sxz7X zEx`+pD*3LWfoexVvSKP`#+-o0V(qVO;tLseZ0x}r!HpbDZ5u>J>Qo#ln&!{hXkF)! z;$n%73Ezz8HJ^!ADdL-J5~vLF{XqdehXPFtNSoxt%C0{qCYQ!69<4KBLRLS~MRYcv zJbHVjzu`WH0Ev7%cMLGzar7#TM$+7}?wE6blWiei{~b>3GLuDJYOnuD3t~ip<(ysb z550`GX-1*v{au2|mVd+~M694c`@6lz)CGGA+v at RQ+gkt7b>%KF2&QU7!M3T5(6wSw zW}2=%F^x8MbP6Gt<&UJ(gO%?pauX~Gsr=Hm$pEYfNz^%c at uM}$ zRYng+=}~plH81G|yDSxbXtgm at d$<+iKR{r=o~Q at l6|lNNIk at Bf8hcTps?xBnLq z5Yz=>V~`4iwcS at 8e8-g- z4N}-c{J4)gu2wp-mlHD1CqL%B>JFUx7Z6}hF(CO12%!A|0$r)I3g06g9{-kPzqtl> z3;**}0`wo`M5XNvj7^NCEestE96kPNhFp(!E4<*~;6mWCuHde&;P9g0)enmaKj%9W zCO4Hu!42SKaw|KDJ{lXPeM*0_$V=G!S|~V{Ynj5!hsVkJ8cJG5$eAiC7%CL$sv2q# z5eMQ*D+wt0YM4q|#`8u{iGl;iaeibCb~^if6;>`DBD0Eui-MDZBkCI)80(wr1J_}y z`;(x6;QUQ2NXG?And&dGp#SSGV`cu^F0--vOF+mr^U2i0`J!0K%;i_ZRU>`FWgw0q z8L3_vifq zh98wK_O3ePPXm>%Wp-9&Z&r~SZZUrWyJiHg$0y%FqeTCeqDEep9mX`785GBzrT~6W z*yQDK@`>iFq?tlK=QqKWi>>cTs`OD5c0*_<8(c2 zdFJ{&SvLd}g7GTxtGKycA8* zB%>bMgc*2V#1+g{fWjXuxq|9FipJpn4b;>j))4)fk)Q!bd>-Ux-}D+e{Qm1ykN9o= zF+Qz&7KA&Bgd<(^yC`~Wd?YEC_#DV7Nt<{0;c9{a(j{(|Po#4sGjul2**UQe&$7xX zRF2{gyvTxhwE}wnWAeslHE|!YH=^~~)fWuTdQ=u&(U5)Uri^}0*eR067>qP=Q2)Uyci=!kJpTutXJIB{Yiwa)`)@{=ts?W6tLJH1n2rK_%tNaP z2)H$(5bVRAHJ9!+R}5&MjZW7x77U*=;{0 zGt*&roN_%+w>@XQA9ww;mKtS95)KNUz`z*i_x8Jv!F&(1kNY6?_qs;F9_%FI{>k_~ zzQKE=-W}ais%h75IakMMI^Mz&hnvGNocA9`?S7S_M;a#ab^JQt`74DipjT%?kIea4 zij? zlIX~4rIQbU&ptTL{>Vu1@{Po7V#si*0*Rt#t?dBLm5I$YKR$DR)3IxADWR=1Ydfn7 zBT~2bLv3 at Yy+os43)CdBR$mf*HYwQP8>EnI2XRbJN^;#2l3?)%w&0y)8~&sRhIiY& z*Vh=1uD#l(ta>f2G1S3V+gZ>aE47P%QT)QSco6ZG!hw&s_teemdf3>Rdrymf(or%S zLHH!wU^gI)aBQbodLF=u=|=UfW`j^KkzY-jJCGe#cOj5xI9eOya}(w1TwhLm?=f1A z_9LKHFSk7WO`;KmODLLIadikS$o4XZnJQkix-8z-60)wHcQtW#A2*GPL3KszNR4&u zq|sY;;?IEXMf6IqP5qiI|7id{?Bn1_yQtPTx*j;|7lDhF9$hLYs!A+5F={I;C at QFQ z#b9k8-2{=VHMz58+?_wA*7z!E+zsPZM-Ske at xnM^A)R`Let){CnD?mZ`}tbkGM4iI zDd8EF{XnufR?1nGC at 5E$7~xEEZem=!?_1T1Psu6CxFwHDBn)-cZ|yQSMGpIrq{A%~ zkz>Ty)vMsyHWpp5#lHTJVG4Mg^yrxUIjLtE?5tQXtMguX?F at q$nhcW at Is^6{wGp!z ztq}_vEZBGz$uxq{VBrg?OuS}Rpk_|SZdMNG_s$La!2^8a1Agi$NcG%^%suJ at HyDqc zz>Lza$D0Au7R^I5o)3 z4r2z?U%&sxY*$4E>=6D$fqjtwAaMK_Yxu9t_b=_-1f9Q1#vwav*Ucuhf>yxEvDM$_ z0}PDz at j?du$kHN&8^gEZHuB)tu2~zD^0!|?ndfjMm~SCo3Kkm(%B-wbBVRdBe5O6j zPX2+XHiZ_3QL~V3lj|%8dNUsP+}_qG4qTxwNH+~A9t!YCUWL89d&qMpj6=%#~M)_m&G*{q#2( zy8Hglj!PxSol=)**}ZqAuGYs~jeL9;f~l!(HAi4R=hAwjKoA3uca7U^-IDG5&AA at j zXkQfUUR__k`(YS!nS39jZvd43?D*?=iiP~kvqDI&M4BE#zZD8c&AfVcnjct1Gm#P7 z?9 at 1Q8a5*`Qwu|1FCj|<`|8jc2|Y!=XvsSx7`qyHtUQLpaM6ej>wUSDQjUozPhn5Zc$iQCTBDr{Y8~3I({W> zv1|}+)#9khv^0I4cyJ_rVfvw&si%O=))9xIRnSi at p?ZMu?^#zMnXVnxKP*(}+kf!t z62>OB&KAxdqAs>Zf3cT;veExN8=I~0PpyW7k?VF_iQBLX$s)vR`h`gWwkZZ6tMCB1?vY*-HI?3_c?e601`Nl3V7ZlPNZuxBl*b>A+*1xW at H?yu*A0DAxnT-iZl==2Kxs`svTUQzs!BO}!M43koG^hP`Gv)@XvRtvhrq!Dn zS(sgG74vOd7~Pg%2ad5I#HNkNLyTCU7ERSwAeBj%8HG#?WvaD!uu)jd zH-wTxt&;neQYUEsy~TW+(A9mOK5T0S at rR%x_S9R#D$%$lNk<5c!D>b!P2fJnzdL|? zyiv-JKM*hl`9Da&OV|n+8T~~u4XsW7-4PU}b~xdvpoY#YZPW|J)%k-$0tkg21(Skq zAmPzdaD&ktlZ5-o7;Bc!B{jv?A1|w;;K2U%5{W=XWdMO?au1n|%i)XI+w at YauOq!m zmpIt+!r%Fo^{)Av`{U~k2Z*lM6nTF(CNSMEnj~mf7uj$&T!;-GJQbWw{wo zuFdLHG}83dNaje*x}pd+4RD5&qyQv|r}c~?2}?FxZ~eT;oNs}JmC4f+VqUC`Sb?;q zSTS7t6V&qqdsYXgV{2oFlbH_eOY2>KQ)lJ2N#xNj9CFCqC405m3XWZ1Ae z7niLHe5ZQ9e8 at i2!ti;x7P&0|1+yxq;-Oq8t#XZLWS3OwGSX;3_K72p8!VAwX!lUp zAOrQ>W68AdS_96_KInFQmM7MYjb~f at 0y*{RveDuU#JQb%?VF`sAM7N6U8LOva}qB? ztK8_meeY^$(iC1!-<1Urx?+iIr>zYm-V4f`$PO)l2|z^p$UB16M4v$FrCsJ z_(aJ>ci0RwckY#s at a>fUuD=^97M at I-Mi~2pGHt+uME?#rE%62brUcuY6`)3uW(AzK zz&!a5oCa%5nPv%Oia#yS&;&H8vFQ!1lq6;XYARzmFL{C}+L;}Q>#1aq|3d)D?*epJ z1j-u at ffo3M68NPZwANb_j##0_iFkr(K00I06N8wJ`r=x#pf z at tzJrYskzh#ZPMg)TDj+U1U`6HX^!MYqXSG+K4(e3!+ at U6mfh>)OdO*qLpE1LFCu- zI^nw;e33(|fH2l#l!Q?>f1)EsB9BgCD54!?&a$YpAd)-0yu>*o5B0n-Z at JUMw=`LC zB0fY;EZT$-dSrn^F+p;+zkaDr?$o$(RHjv=4VC~@H-zP at y&I~9GIu}s8}AT7FV)fV zSGv7K%~)<5K|h|PPESmgl>YTwTC&6aW9Z=Idm>L|waY6ox*b8^2;f_{+rQGVgd7I+uQ4+M}4H9m*IOhOUGS)gtNp88KQ|I>ASfnageDw#3!kH2|Q znl6e;@;@QZ_WxS6`a79cl=-VM$0w6rV}+5KQvN6Cn@$4iokG5&d2o`lfFoLeo&xD& zVq#@v#bVjAEQv2_D0Er!3o>%ni$a*jiX@`FxXIYPY3Hx0OpUMKkGIr*&^cKDlS^|8 z)!>Td2()NITxnX>^wo{^S}Csos$79BKJpN}eze)a;1z1~*dI$cXf0ymz-;3olxm70 z5bwYVN>bZ*{{DwcLtQeExarKm=`svDy$XTb*v+EAHpr}?RP9-ajW%zcDVbDroUVTe zX|+?uMrhtF7d4l88g+0!DQ7Pa63_q)aU*{&Ur6jF8UoyuTkhULIfX`$5(r(DORRU< zyCE^tM1mUjf_l*m^km{N*FFe6j0Tt8IzG&~5A+$5bZ+NWx-mYjO5F`(tx?$InHBmw z!vXcUXdzV>2!+PB8M6ie?%b4Xe74RUE3X5U;xAgX8n*#lEm(c`jLauhDlW at N&aIFm zunm=f#uG?e>5{&<%x0`B^@3bIjn0~85pf}D+E}WFq-4qhs5qKhsahvN#zK|q@=GQ_ z&{PFV+JH?2)@GmgpzU{AgkG4;HJHKeFOe_w`PAwdVdvoMeO-#NvBhtU0CzuYk~Pr) ze17t=BbY(*6xay;oxZhL`4;|y*|xfB-sL4?onZWZq{o#yc6<+(-`@&(1-zWX2O&si z2H<3(e&i8L8621tQdG-VU{wyxN()}Jiri%x3NYOS5zW8Z{X6DjHvZxC2n7V>js^q- z_}`50A9sw18vKB)9{1r zlSLLsWQYchj}s9S43h=|LGw=U3<^#3xSh)MTVAGdYzok!DOHxzf^!uwGJGDo ze(zrIYO2~&yZW)yIT>V3Hv0T{Fwy09&9lLC!gsPcqBO(f3*I|~{H+zY=E;Z$K4LE} zYGt&Q#m}%)weMo^wxTIO$eCR>b(mKO(zZR}lpGa$D;TgJ|*STB3_ z-o7=i{gEzrFTa6o!^aq)wQb4}x3N~az77-IWQWPvcLy&Zm|MRnh>umj1K&;v1h5;1 zZJb`HPPyUtp<4)JZlW}TMMG;e9`ivwWqZ at J1hlvuebw^&%Y$v{w+B=NIV&8;cY=MqqkVs011)iJJ6 z^RiI)Y%RJCB at Ha=IA_;e3k&T{E>2>0Bg+&B#LgD;n3CqM&X?W}HlbY78ELz98enfXwjS2K;Ha!A zeikc9t;YxPs36c@%E7^(K|xVZPw+$Chd4{(vee|VqpGFY+vG*sE+v+=Zh0MqZP!-- zNyM5egiJ+3muEM<{>G`TcO;?VXrY605+#c)ily^3c*Bws-DrG(pO8#TJZelY3z7jk zI!_6BnCYfFOr_ z*%6*bqz^=|TtH2YW;I*fvPau7p%i%bvrY<2(JGlfX~3t{UV^o+RA{Kem9*yUDjVBV zgv%^_5Ac?yCZQm9n8IhSGJrZ#I`i5jPEeW8&1?c0wzpiJ3aeBA4I$T_AW6ksua}U$ z-m*%67fA?D!;(m)cUnrZ7cc?K;xA-h!HBtEkBJ*P`A#}i`0|t{8gTrSb#?EtclNU& z1i6kQ*xB|89*bLC{l|7oS`bMdSrS_M5^3IJXHgCuBB8nlMq~$CQlEiB5 at cAuaZlLY zV$ymVU>{Y)O#=Kvcu`t|v1Iv{GW6rByc9HPt}3`8}1D*imJ6yK^sg*$jAeD9vB+m9Z4 zn7*v_o7(tGeMF6ZO9X4<#7lWZO`rU&i?`4)n~FEgj_NI*x7_fv%5NY(MHF%o zr7tYL#0M=@zM*EuzjcQQ7-$Y+sd9#LgUHyf>B3ZgV^ONMh1;|P&>B>tcEPcJDBP-X z7wp>^x}*O{y+uI#8g!wu?sEoC#~xi|*xLtRmqGzo{tfe`iUeULU~ie`h at qFRrJJQy zJx;53l49jJAtgNeNqo>ll{0V;T0ns{F;j9TX+ABty`I}hOKS?l%IduZFkDc_nHE!m zqd#5{6 at 38h=#RL0AY<;LKT0U2!c9L at ubYC3orXENvNL%_wRN*f$kYSvi{me7X{jj@ z5`1i<;?c9Z!ppAOX!rDB`Upuvmy=a!Ec%g)-;lju_mltCpvM?z^rO7+BUnq6(W2$% zLyaUvBv`_#Sy-#sY`Rcsy_4ebh83O1Oq)AU6*;V%b%3!8M`LS} zThASyu-ocS^kJ?-dQEdNOQj^z7W7(wRM&2J at P{2Hu^vU))?w=Qrtx8zUS&2Vk>Bgj zIQ1Qfx!S6XUPN4BX)G(=@IW=;RGFhYUhc=rB!=-ZL>}q1HX9qu%b$JF5glj*j|xI3 zzr3p$~885y3MX``!NE(rSq($o2%6pwXO37WzMnYK;a31~V!w)72w)|v%juc)X?2KZ5U z>S(wrc`=?GADLxznrt(o;t7?d at tDOB_Lfa{oX0QRJY|bI>`=Z4I$}$vv%&qq_E$=K zG*F0s%?*Y9#?+}uT?VqrMdHmJ!XYMq$x&wr>$CugKTI=n z at f_LZkW@)aM=wjv95T;*jEA1N at 3w|{TvE3SDY>PG!QSKE?p;;0=~gW9#7t=-neL6M za?}klSS7I6F4gcSrN`z?i*aGc6L=Y)Is zQqTk`==c(>dXj$xlX!viJaDz1EJU~zLIRWQG$#12nfk!2$GOo>%3UQ2;H;c+FqsH9 z&gChO1`^&xz#h`efc?9B5ln!I^B1qS91!Jx at IlD_&x at yNMdgt4fN>P{)f390d~*W4 zHuiP3Nkox%?`aCIg8itzN!8gksRB>2SvSMPlOSR%Vw9Wy20!lJT6jk{dLCnAkWJYP zQ0Y&_!H%h>Q&l!XwrB&14?B)8Ew|yKHgvT{j|g>vz)Dn1fYOb(?yze)w zH|{*Cuu6Fpe>6`<2Q*8vO2JfQmAs~J%6a9d67FgJ+ZW=#$mJzP{bfozwkqf42q6pR zgn}b=F<=qjr)XT==_<PuA?L+K6}Bh??ix4Hq;_A?na1WE~t zCbz-N4bra$1&^1Aj^_*w>ob5m;$Agm%;<;kxI02Um=$hl?z*FJMG9>RmuQ{)k|)R1 z*lkL}(#eO_7zsc at xhH`Q*-PbzbzZJR95*LkM{vf!{>ETx^651||1cOy5Fj9m{|F)l zoNWH9f0FUPj=ldwy at 97eUiI`Gx$zN%wkcn6v3iMI$Vd?<8nH2&MFv)siAD&keKKJ! zc+l;Gxcg#J!#sv5b(5_X}vf-*7} zA=iinHqY95aDA7{!+PUhJT!D965E2AcTQ0*-ck1N@{q`q?Ln8!J{r{NOx z at -eaz4P+xmoA9ToS;2H1V2HS|#KlL{C^v-GPe4b at +<+5X$Dl8qb13n!^5H!`^r-&* zJ*sg12kE}m{y|nCjU)VVU2mH}H%?r|iYtdOK$S-~hx-XG#RB!erFV=I{;OePn zm*PUr3I(?4ET0!?3jFzp$+=%9`bYQ0PC$e#v1F6^EC`{tGYe->Ym|a5p1&|FJ-;wj zAGs7mC3eBqnNT4+1Eo3=vvdv}kWAU>3=9PC<3ZsZD4P^2@%^*Chlui$F^8JyxpJ}I zpH5bin)#vlBdI)Mse`0m;>2m at yMix*Qc>#Wg=s_-$eyXHk%|=x(**mCNTq+Wnbrn4 zlD+>;V_lso7}ydP2uKe5|8+O2IywR9&w~dJku8fVDC9XI+_eMC^BRM3(pQ87lAe}v_c at S4GQ1}3Nxp at M+tAjHG)5Siv z%a%Df2=`wlohxGt0=%dDU1IK>gA)U=JmU*S+<1Fu4#hr#eTlBWaeHcwICCWX=x?dP z#L#}P$E2^C4lVqChn1VTd%)o`-Q~c^8NtW#omlwg?&)8G;qk`vq<)(akc!rszpDZa zS(@zIgHLmBnHPtTEY3S}@El|YBmRn_3OQ;5+(H+pdvtpNqvh at 5X`iloQj}d;&fj&c zlLyAr$;x(QpBUEi%=|Uolbz5xIP4c?7$XVWCtpK0P`-OQ3=M9i%$lHRZ-5nORZV*&LVf%D1GnA^Eq7a z*Q4?r$^-mkEC?GI2_2J-!nZIB9rhS1ieU32=-1Lm5Iq$b4gR-F0iI3dhx at YLH2+6b zajO_JEJH1kAv1K4a`9_x3Yf+hi3#IaD2m6eVP9sxcp;IdJWV z$O{QynR8YLD~L~<$JS}kYE=DofSMd5(Ths6j`;T9XxracLAZ&{Gk3J;NKvp zfDYr9CE1t3mF$4cddLW^`52E!f0^J8v~7hTiigv{+JFMQD8&Ord2nPpE4M=sYwP at u z`hN29Q^|Ldv4p}_B?QFlSy5Cj)hujUovEXYGHTcQhDgD at Mo5O&)X*gumre0hCG6Ij+5S9U3z)03kgcfX5F at ldyyaemglFiR@Cgdk8vhPIy(ohiR%UQHhlw zDxjP7xlG}t6?Wr%GZu7Bm+OBmz!mrJenFOX`AMo?qlQ_=*yvW4F{oKl+W!r$W-l#Z zMMXQ>3iY?Z5RSW2pBB|;m?oHAMJsA**=iIuDz4fs{I<$1{&rF3`&~=`U)c-OXMg36 z+O3+k!Yweb at -3V9U>0lHOWJewpb8alUkMfO!I_hH-ae=h`HdTzUOkCk*$YGf)#q4} z-T^l6duqUsiWhKl6+p0ju!wkhT(~+3l3ILJRk^(T%(xe8&ZYMjIZ?1}zC>v!ci#lc zpjzQwlBg=;8Ih2_rrjX7ZrsF+7*cxqD6){aLwpq^L>)SZ^0MKa z%Gu+2bVdvF>gs;MB)y(q4V&1!v$-Mkw8gFanWH3dY>&#l=Vsen?G#*MpbDch?7>)B z#NIx0w^I<2D3xInktj8h8d3?hA#7V|CbwcG+`9I7Y9A}JfB)C`_eC0r2~N9+-qFtU zNS?j7VlYi7{JA3})9wD&)n;vRjbtwQYlXVA>~D)$-vnAlYCNL1XS~772ZRAFo%zll zO9216z*6$XIYVEqpTU`@WVy{b;~Ksuq&sQC#dZ%&n%?;@rG{dY0>MnY6BFq4C4+bg zxve8x0`qN`QuqW4T=yr>r8vpFxz|tT2C`n1gTNeRzmON%6oR at 4Tj*!8H3?`-N{CK0 zhk~T*Zhp&n);fE`_}2w?r|o&73r at c$=ms`%qkSa?{AC9|cvI~G>6DB%DHZbJ93rX3 zD5MOloz&_9Z8_0z9Xv)2qOa}zbka5w;GWDq%A2Y^e&a|z9G~;c zQ>g$n9wKjek1Ss8{n?Cf0`s=wSqhoVbYt4VOb6{TeA3%cPd}?}z?t)>!mcLa8soqi z)4S)VnY!W8upiie(w7H=$`t6mbqXr>35110)#@WnxxRr73l`Tj4S|*+kA` zh+u}{1zD72AK=wyc>pPrA4+(cPo*--U`OA5nKTkhtZS|M7wW)@(`h)8%FxKVk`Xvi zCQO{yawg&3a3ta_mkqJDZ(4Bq9bRu3m>V$uqQ^NbWfs%WN-!6b%%p)OT(8XkIHbMX zE_FHn9(c?&3ZSbWl%^S>@y2Pm#Y++_P+~jY2h8tl)UVtd*J0Ftqu=}183E%EHGTSO zqTb|BBAszNAgdmjvRYaU`nGH7 z*`=Qoo2XlyhWd*RS)g^6=_z|X9vb7MLI)#V2*>7OWPqvY^TplF at t}>>(=s3EH+3miV4VxiG}s zJl8tH9ZT>&HK%p`+jVn6=ns-*v~=6f)E6Ef9^{FL3&HmS1K*w>Z z!BImwnJ?uTs$nx&%z#cHkA!8QgPD(x7LSv=Rsb(%Uy_xkW%siPW%OARHcLoMxTPUS zgIytJ-w1%orxlxIlr$txt|bEmgpOOGK%bpkpn at MMW2f#SQ#qs-U}e_E^J;FC&Td6j z+)y+tI&@`3T(EjaT-<`$=F1Ih3B%i>5!+|7!?Z*~TVq(+mzWQ2?Q3pQU-$d$^IoEQ z*|)8Rz7L_e^K%Dx?Ni`48Xpi&U|u#v4fswl@vM7KtZT1PSR<$|m9rLV9FllG>paz`^*27#Q<)%qc6Dt;VutL}Y8eoQWz)2ylvG z$%qVzGGcKGV40&Fl;JIXM`4THI}FA)&Xc7fAy`Dj(8-d+FU#w-Kt3^`6*$|c;K5kN zDp{0n*Fq7{ePNG>x>I_u$CPJkq8{^W)foeKMhd{a0SzwQBE>;$VHon$oRyT3OV}8F zXIaE88Jnoh`OYd8eH*5MqK}IwwicdoX z3i_d6&~GLlZ0UElY)3i^{!TEi4sR**2qx=U0bBBiuA`{PCJOHNc(rc&bXAE-T}kIb zQWuVz9 at Y7KZ4OL)MdMC&S at wApzv(VQuLNG(^X~N|PyJ8U-dMNQS>U z!7yKR*k*9=rxa|{Sc#2l7KL6Se1iz4Kn@%qEw*|M(*JoUo9yKh7gK^7nug0^rr_L~Xz{coMUggo8>7=O5L z3m6a(?|UW0(nW0X8nlvlXuLM7eiKg<^dD=H4# zFRiiQNYc-6o=2tE+s%E60$I8h*!iFsae;S-FmvYIdN;n>Sbx7fyiY|S0M-_q6NWZR zJRRg9t(Sz&7&Q>bn#O7U`A`dmgCX;#C%X?_?W#W*v|-jNmFU42_&Uu}a;fJIhbadoMg>w11xW}MEHkNdX9Q)dN+S^%t=-QNMVbu} zIr at BE(-|Gt>)klYmtqwPFWL at y4IJL5(ryk{`g6dz*{khtx&hKpDgdLE z!it^(q$sU*Ep$xhp63VYOfE3 at X?60wJRmW>t6%U^-yZ`HKjt%NoD at T!yKSq(@(U4V zD`>US)DEsnN7Z+5y{6$mna$uFhqHSGzJUv&Z&HS1m-Tbn7N;@K$k za{Be%QAo>t%%piXLyEjPZguuLlw!fWAWPtz2T5BV1jB@}6T39CSQ3;y=m?OHVsJ2T z**xuAVFdZhK_tI$^0xl8>Ur5FS%q!=DH(E2ra5u)6Wb_f8yRPYcz5V4`g?n29@!I{ zgZ_pkdNS{qg%E~Z9f8mV(l{@y6;FUdRf`t8)P66|8%@GEh$ly(Lg6nWx_gfxPhlsNL?VW zagm^C9yQ3w&e8?%1xiFRpWi5!L|Mo8KM)dSYjris90wIONEL*o=3~1|th^V6jlDTU zBP%|O&$zCcg%YUE%ARc$%@sLTP87cQA!=V2QFlHF5a?JC>GO>*)m-XLmJ0v5j9-G!!vbpqiNr=W;0yUI;!B9TWH_R z+sDdT&WVvF7EH?x^wp3P3q@*Z-)nmcz|L0LSSa}AWA zH5ZLy;nArQtt4HEbmQ9`pEq=w at a+Qj){N+6^gUGoTSqD>qJeq2k7#bQ(6?4%xT& zATu5J9ouHhvXL}J%!>#rXVD^X>g0S1%vPt;j_1SXnKs z_DsQM7Z$CVp$gc5&c+yq;x$e`yKYXYF-p z1D#VhYqAk?#jIM&b60aQDqVt%#OAVEZ68o;B%jCLvS_UN1M_m^iI6Ne`jM+g%i*q@ z?N8^Wpp*cxUkqpKFe-=b;6h7^ldT!GricAjtzdMctLu!f99t!8>Dwmf66Tm*9JNMW zfG6=j7Ax3o8CL9EMz$%gf*l^zpTA{^>xSpePwpnMw0Evs)FusMf5$(t+ojr|FEERF z8QKg>DrtMIiJx at wrz|;y*&b1|H}8sesIF?e&4~{_64@<(LYJRUTy~S zzR;-I5UH%g7b at uD+!AfMc))5GDw&zj#`cjd at oCg60dW>D;LYZh)0;hG at KGq~IJJ%L zu3X at 8u95w4t`XInJL4sB>5MpW;U*uVerXVWzDOF}s)QNnojVPa1$pq3)hpt1=?v+) zc%l9*o>KrfXa#ewtdm8UXI#F#t3qnfE;)E$IeTrFMVK4F_7N%(JI%!ADPL$g-N5z{ zD;YWM;N+3rS-8b)ef074V{n^17M1_)FUq%gCiY;I?Mw76?KxK+OJlc$lgHnP^CQZ) zdLi)vrhk%=CU1`3%>B!_h z)b;cs3HPTxqSglX>4TT2r+5#Z-}wWCr)Y`U8ArEqVBkdlTrJZ6QckLW0IHfybKb%k zSo(vQXZ*8VbRDdhac=6V9A_6z<`n+c1 at p$SbE<63>;mUUy6(~`J?BUA=ddep=vm$K zO#PtMgIo3|;n2lHi0oGq+83#~dES#Nyx0L}mjpTUTZ^pSSiC80P7@(6E2q$2ySkYi z#!dqo*G7~rjuz|aZPHO1nW#gC`ThoteK1p2J#LDQnz(}VkO;y>#P}qI?N9+VHctt) zF4hgDug;j#17VAa2|G42#w?+Wl(UYxm=H)EnQyeA{v??P^cz}A zgHka93Z;H_~uO9jhCZX3StZa&VelP=qGJ`OA3S*%!1-H^1_4hVg}f#5EnM9Z%a^z4=r ze1+v;wllCmXoLPHUBVs}Wf9OQ%q0ZdWs{&cD3t+FQ=?j2oP%+fP%BUJXb0%2Yy4Dp z5{@fVZa%1Wu5iWXI;$)8y!@z7jQLrCdy#Miqj86(nxR=YE=dHCUqh3_%%V7|i?xmr zSp$%|BBdxtVGnZhI5iYOtv|`Pj;L=Kc&*J9v#0!jjJ;!YE&;Z+8|>J2vSZt}Z98vl zJ3F>*+qP}nwz3fSa_Jti;m!$)dGM#aF71m2ESIMZk-#nXaMG9St^Hcp~ynSPtZ z=Zmad84}}SO!J3>!$Zkcxw9{zGY_dQiN3v)(5UJRKb%-GPq5e#S-MHm9m|t& zeC*Mn+NG-HIR6VcILdk_#qJBCFuF3|FYCi(N><-9yvx-{gkg04q>!aB zIZ}e=Z6)NIW&`WQZo!MIEJc8*ABQYnk*n$}E2kC$7&i7n8IO0Rff6G!udI3>Xk5G4VTpx+?|6}%T6+g zh}SZj#S&tF;@8}1UE=aO)XFl}n5Z at X8xMaGcoq-&>)u7l*mOyVvcUgCX$))RO$vtHVb5y3~XDGi at 3rj2iXed~{~mDTifc=H{63 zKY$(%zm#Z20w{58&5im8N=F*T#s8ym(H4GW?k)7 zu^C2corT+xB!;niSz!&T`@@-?oF=^Vbn;tSVT|T{+_R9^CVATpOp*Oo&((3>^x~LT zzjBFlT(0D*YkGXQBTVHk$y3>H8BlDr)j~Ta(;KoVCz&aer>6qYqnk647~gW*Jj#)- z4M?ZIFN45k25mS%gEset>bp)rb#4cJEBXEe>U{h?MSM at Yc-&&zH`OvQI!01BR;0l3 z5#Q?|ummiB*{jcV66AP!X!K*W(EyALkX5n*gk;2klo^1P9n!o?*C+QP+hFRn8fZ0X z*EMoDdxJW!ZO%dTgb(Wnhqdb6fO>%662~@SS}$vW&zdb2WQ}zA9}+3flI8x=U5P6q z4|^#dcqeP<^KkVN9410)*r-QusvbhQpWy9=Vm*T7h=NiygI~F7((`m~H*E_0*!__0 z^?-^###nvq!?f{21XWl9l|C7HAN$y=PiN+e)L~?7KrFkcV+Xrn&K|>x8IT2X;Q-3| zXr_j7rv at FTMxnc4tm+X@jTp7=@O6T)t^3Q at BD6^AP`TS~9kaqK?a^QI;MpHw1 at Cah zOh9X20b8K428kmN3^$^^!N-Q)V6Th>3mpWKBVDkqdywFmv*=Z$pggP7N&3Tz5a*@) z!uX51kR7oEgF#x;s)sJiZy75(I)Eh4G}tR11+Jzu~a!4p_BunID%VzVF#bMD7dp7y)u1MsY# zxR~TrVmc`er`1+Er=LQgdi~HJG57imMa at a`gb-rk4)n1Twb^)HhtRgLsBOLN)svOURzi1X+7r3p2dqCv+;(Tx8CiB)oh}>DVgXqiz%xgh!&H>GmW7XVEh6uS8vfY30|Hpg>+`o-LTO%AK65cQ*Yn5ha zf?@sin2_(5&7X2Bbn#>USV0bbLc)P18WsTxKp=ugVKHIdlu<-T*> z-AtW)N(&>=3kV`jz?Wuk*&MAkNo+0r#jQMm&D9XODi;}_y;2MxK*yQwBE4D<1R9Ai z+D$s~hj{5zMLGpVDw204V-oz%e?!SE(7*yYHFXc#D|8#UXWtE~bIKHjp6?HWBNhd2 zU$UgPMBO8zHcxJ%Yy>0#-^d5n0lXcHA zVuy``KFSkX3&i at YA4zyD^m4OBr_9HiFbHFdt^-3SuI$h{%8dXo9bnQMOS^-54a6_5 zdN-Npf$*jsTK%#2at-9RpY?25oMYpSV)H1r{_^obm|*l$me?Q}GW30HmM-UWbvz*EQ*ZkB9zpY=eM<7VOB zulff=7v(O&ic!yjbx&2DImf|f$f|}x&u#cFgUT*s&d- zX!%*!u`}m)?4|mVOSghW+%zf4LH$f)AffYQez2jU8Nv)_tELb9w35DU~nVdvg^rAd9Hi^4H@~miaox5li`v at r$nw>c06ic#_;T;}U(vRauox{MFWT at taH9 zK5*N?kpIPg^c~rI>&EYBeo}J-8lRWj2+vfT>?6)p7O6^B;ly%?(&$UPmaTnfAVJtm# zn(m2si1}sl^>#F7W9@#yyq9ikfyL42!3y^QT~iG^qSqEy+0cFG^jxkJRy(2LNCaUM z(5C(^H?H}hUDdGFMkkh}eA!u8gT?2qvN`UFfiMqA)CFM?5+tTitP-m-u$Vy-=sUz6P1)o}7TNTok& zR&6aYY{v0dBp;)6-piu=nO|Im%Uvz*q3wG?v;XHmP*Td$Dj(q>KtPMXfPlFFM}1ht z!VzHXEaYNp3UE{~bTqU9I0GD&ogEFG0cIZm?NZE6viN5{M9A)@&4yOd0eDyhLqi*b z^)Q%@7KIQlSCAU=AVz4qb{bc5OtuFTTzff*~~2&Ug3{t0*6c}hkH;`E+V9yiX{ zDPFVp=gm at jpb~rfXy7dQd>9O+Bi$s9vb}^LLdroU70T4&C<&}&rV<04e%26==Fcgp zs%_TBd at WyHp9$VYMXTkCLhMaeTd>O#hD)Bkf`;9_ivoSSH~d!+N!a*m)sUlrW3C*O zEkIaIv>nqBx=$uqr_1PJv6 at fjOU5Q$^wU`npd+)yp5zBJ>h2U4)N^`^nRWHawJAa0 zRou_w(;BK0e!?yZ5C9hR0e0GYa}LX~ddX~LfYw5O4u5OjWDbk^~!dLoqgTKdH(>kMhjK z^=lxUchP3N%hC8y`~7F6uwxiHmRdCAyzolZ+mJiwyrnZ at gGNt}k&UXMQ|$qVrA>=S z0XiffE&ZzZ}bYbAOCRLW=EU1je4D!-Q?8?T7|jKfEfW|P`W*i+)*m*-dx$rzy& z{@pwATI%fiYgkvJ{1d1V;~|_8!e-jAmng(?CN1 at lG!cnTcsZD at B8Y8E!5DEgw{#+4!Bz5#zy3{~0CEQ!QTUR_;v zy`Eg(%2axPT z4N8$meN4CNfETRu@}Wg;obXvC7YdR`{U5jfd at kETv+Q#8g8ixZ{nnhSWA|{kyF|s#udpW z?R}~93vKFg*1+9uM&WOk;VI=xgVS^?IK*YpRvz}=F^A3oNE{%wUZRR?F+!|dGyeij zhZfaG%O%y&mxi^fsv-NnSXAlSamjyH zF==~V0A*p?F;(#Koh>(;7-e0Dm*xBitDC&rZI<_R=cDGR_vh=89*AK7gW}zRGJ?{Z zjBZg8xBnEcEh?SD)Iqdg2Nk*|qM3dOpl7Xd)<?69)MW}is0LXW=s?C2>kh3RNcagACIh<93q3Hg|tF#~-p=&2Vp2JYOG zZ44)yn`}X#Ye`5rc#|W6Z5Nn2zhXrtbv{c0bUGVo!yfE?VXs|C zc~Ye<94XASu)&R@?FG8*p*bvadj7g{x at YZCyr+FT0^w7wD{CO~5Vz%r?N z22uK7%Yza>T-_>a2XwVH&CVq`HmY#Xvm~=BYT z3U6|3SY(#CBp`=KI{zxv!4YQPMK>(i8< z0o}FvZN?VIJh@%kjXUKzuo2F94wV?rA_z-p_QxE`D46pd8LeiRCmiWJcW at LfoF7Fn z$VF#J$3*JLobegj(o#L(=x7Fdm93JnE`00OOn-?4Sd!JXwVNIhHFTdUlPDckuLVfKfeh&YL=kvG`Q(SM*!2$-2=kpD5HSD^lfNY8&cjI6Eynd=EK`PX~x zzbCFFt8FTyxS at Wh1X(xKl=YhrmnjN539hQySSe}?lu3d%30U;ExF%W~I5gt0 zh{{ErJ*fbIe%Vr;9#g=jCQ45gc*A0%8B&q~3KGEj6+CW1!E}YrY}X zUPYbgvN%t at A>c~KDm*Z#79Qkw?4pcQs}7yPTa6CO6 at CJ>ou+7${rYVdU%Iy(y4j&Qy5r6dDfr1 z04?o1iUnY=qV1|maECC`?mWy2&RQ8%bSS&uqVN6 at YWee2Gz|!wB4b6yvYaipGcaqJ zGR+e1r7|r=s}*X~gCtb at 4Ym~_I4TxLu8Ngh9e@>)t-P-!)z-+3vYGjC{*j->D8fMj z(ICn}A=MGdE!4R8SqlJ|_K3sN#MvMe7Apscr`A>_Hwpm3eyD{O`sBMh2X5IVP-(cN zjHp9gl}J~LL(Qmq0h#GS<6s{hj7w3&wJ9SCSjQxJlPCqS)z94}Il&S72qO1Y%Vn@) z2H=S{Gx^8R5$U2o1l1v-gKAc3Xx6$`+P(gzep}2}@xHB{NPZxUMX+xS->-?3JNAa^ z2JjA<1$g_ at 19)a*o?A|v(xDA)HFEXpsRfpx76 zpJLh)oSbw9>#w_0owVuC(L2sQpkHZE8sSc?E zU2V3GX>HXVBv~&uMAD;=wW{x*`$_^dFYgrA8>p$8CxY3&^{pNQn!FH*L at efLWG!M+ zSv&zn4b|1;ToTr%ae1eom_Djph{t at zs!7_(Ck(%Cu&|YzKHv#GZ~U#f9#MkcwuRxG zS&$@Zi8yeq3m%b#&fkc`&O;%^d%nR()sfP5gIP9*V#>DqX52w_=XIOR4ct(?d_U&F zWEa=9SwV6avT8e at g{_aR~q=@@+Km=+Ccg8R&| zOl*bxVTb%{SMGr`s631Pp9P%jd&jN6Fz_?rX%o-~%8h~v97C08xZj46v#DC%e7A!) z`HPc$YpU$^_INO0*c^@s+~tt#uAt%3MXv4fSVQoz_XI`gl^@=fg1*+08Pyvk(=jhC z%~I{0o&-ucr?6<$(j$najB4H2?(ynu7e_M(n>pGXEc~;J=gtwR0sDLBwyeUu>Ef3W&dka2Nyu_k04u zBB%@?AO-FS<0Ld>ogC}t_rH3g)F}0m_`QJ$CK}98R>H!8sa2hxyuV!JXW1M7-al at - z0hRU-nhW(>%AJ{yNaB?;qBO0pGa}pq%ZmvhG0Gwv#Jk4pEt$9+JvKhM`X4f zr!nrzpUxoaZ2D#40kU+5^SVwLWM93lg7b?A5g}-Q4kqGOP&Q9Q;JL|Qn8p$I5roM{moI=EwGnH1Y ziY&7{cajq%8x%10Rw%#pX(#$G3973%wUF98JXosk!^#9 at 4v5Cg#O3Z<{Aq+ zz(QuNCGMVP_7n_n{x3Gww(||8S$+q9%xCJM>rD_>Cj1XRiKLEmU(Q%ppsiFm3%!Z% z?i^k?Sw%nPqMD!VI-8x=UGq^T$@j%8rDDH4RE%1;wkwko5>mBeur_rX)dOB_!~(D}4xU at jdE`cXmXcdjEHN z^EcS*K=Fpy4YGg$3TMaL-vRI$%^2C|t6=VhUuR^NA)p)@&<_3#&}fjokL at bR&|jIv zdrrUXAwzj%h&i+lFiZ6Eg}!q0d<4(F&`SaVGK9I5N6dJ_ at _>@NOdQ+mL;r00H6B{%;o0e-}U;?cD#XSF1H)yp at m9esVK2caC0O;)}rO zh)~NECJGNgS>FnNYpK^Q1fZ8N7qucvB+^O3wEayRoIb^!Y4?BpIy-SDYG~3X=WyZ3 zmOFLk+TOI8k!3&4x+%WO@=9dMhjNY8_kHc${pxwlzV(~=XZrW+arkR*J4By%vEV4I zQrFx#X>dhi<^;6R(IszDx4fu3Gu~;RKbBdT*YGF1Ps}^n5iuse_zE_Oc>BI-IQWiOK zNYK6(`%f-rF3QILg%w_i*v1rlS?_8W>bTpe6NJ*K9Hq`Ec$3i7(iFnk6 zx+)E+LO%NEMKV0f4H^|~7B2l!)Auw~g4HvSe)oJijQL?DZ=q7 at vqWs0Wd}xGDz1;D zB|ch}R14?!uG%>VO5O5#RczhrL&x_hjBJoE>}bBqdA8`9! z(c~Yv{9x#Pe`ew!Gp#_Se!m@)^JhEB!u7PNBjPc}Ig?AX2wGo<`)*7XAgNLH~wwc$iJ(jS3OTM_~al#>#9Rya|>nCmBW!1nxvQp zN<&M!?()LoW)~@`mx|`%lqiQ3re7YH)?q#!j(;R)GP<8)LuuSr_k4Uu)~f!zl zZy8D>{77*~_bekDvZa%Fmn!)o_V8lIQaZKEG!#Q43uWVppyaE_k}TFrg2?mZ+B6o1 zmvmzmad6z3Mow*{^x}!8O<6NiqL&1D%4QLG;6|7ugh?9QkJ)CQc=J^IG&N7O3_NU8 zCOT7MYib5zq{-fru;~xn3$&IECiKduClu4vv`Qai67i@=@wC|} zB~KcA4-n3b-8u at Y+?KP)k%8ah^an);g)JLRpsiY?{wxQ)jhTVG++OZpo20BA!Ctth zZ7N!jvc)FYnt|_Kz*FmW9-KA@@GGc~orlncK-%hL$XV`t8F>1Zh7rHO!riMOc0GS6 zJ2xa8gNO6k$S^lQJiQL9`sl*h3!|)7ETK$Z~gT{#|QeH(1ZSEzaM7aP?YZtPj2aJ-sOu#L4300AdP>ltf9wneYZceVs>`|&e z*xQD4+0Lngpih95svf?DMV#tdc6<6B(>e7s+w;E_g0FMkLBa?Z*1wilVZG5_&7E at v zxzBy!2?85K+z=&oBaLuc|m{r_*sp>X0RL8_jNJDpGVoX zz~ScEVc*H%VE)))J^ikQyUwpg6L4rr5cE1HjP9|S8+-~Aj9s_}_X&MLI{74z5jpXg z%DZKP`NX?zfWb;HCB<%D2`-34zI^xO5S-F}KliCOS*f{Xx+$VN#ke#fU&4B7+r!Qy zhkeKAwU|?W@&WZavxv at NJcD?u667yBh2 at F3#dHtLVLS8aSj{7thXFYNWd;w_L;ZMT z>^7O3EGW)3;LrS&08eP07;Y=#AZ9x&eToz0PaOB7`{Ub>c%BM!s2=cz_TC)VMN;8A z-p5^#+hJ5dZp|MbkJCF!0Q(O2<;oJEc#~$seK`UcO)hGgKhS at Y@F(P0Zx*bDX4sYR za^k^n7Geza6|W61HeEAqsT1riU4?xQM6F%K0so5sHkr#@tDVn<^Mvv8 at EMJRz4Kl8Dq>(h z(y=dMZ3JrnqBtaTavx^~lJkVoQTgy>TLZzdFjUqc2Tx;{f%gF$Oc6WGSMeXG4S(en zuNXiiA%+7)D3www!vV0hlbLkOPaCbjZ5 at o#x}^hLa7WUHc}yAUac|F$FGJRXE>$JF at 4nH_qeOySRC2(%!bt( zOtOF!==bZ0&PD1E<b5V%IC-}eG{=0%CMeR?pG&|poz!fA&pqLbF75Q zAK5zPc0{GC>{&=Y8(#6?h81B_h=qYT4jS z^iOeCz9LI at Cz5d1lyO~==y at oA);cC5v-}8*I(n>(u-8J1ez=dc{M<$jbZgOxG`ca_ zG>Y+UJV;BGRcaJLum2}6l%V4Ln-4~-s1c_8Mzsc!shJd#%a6$b4d?xJ!~66 z#&BMyvc2D7kaQxZUyr)1?LyK{k)E{a#pW{4)?ar#MsgXH_)Xr4=)(oeY{BQJWqlL_ zJ!8O%L!;_NZ)E{cvL$x6Yp!c_6cR9Jwi=wSpJ`F;yha^oeMlHoy at zBk!^^fQJ<76g zScMiJf`UkM)7xmGh=;TxoU)@hUzFM*Z2!pCEf}%(Q3ud+W2Bd|MiJ7_*&s1dZjJn~ z)uA~h6_&P`VWn$bUQ5^5#j{k>BtdBo+eV4ZcKfXB7QHsQW-F6uJ5$j?d5eWpQP;QM zQ5i`y0qVcnsziv~60>*(7 at et?205lebVjj!D08S5iJ7IPRtQ_qgDZGT^5fJ`T3lh@ zUD>NF&_ at 9Ib+}Sezg`0bTgp{UQ&%}tFII&H7VVG4*UGh;v zm`l$B)-5CDhOJF1*R<%&b2u#VnAb#5p&#o3GUe?idb(8|Gpz^P-oI#kWhZf+xtRc;Zu5zG zI@pwT&6$@io~haI^3E!+JbM;t7uzr$~P44e2R3Of2$dF3{MMTRrmkH5*ld27ISv~IU}TMYxw z_ob>|!?rn0AQLxQJuM7=DxF*p6~3W8LmAr>vHpH4%haA at 3E?SXD?>2SmSuWkFUn at K zD%)M~g#Iv~XPc#`jmRkHW{U;V4$@$)VA2qbT*)mmhj9uHHs=+z1dx{!pRTCkB2}?y z_O$m?HCjSGy5{*}%4TDUz9E?X4W@|xYhizmGZgP7n=Po0YnbB17*r^;GCj}ju7uzF zTO<3rnvL2fJ!U_Is?ig26h4n^Q#1J*^`z4Q7ol<|6vswwQ;}3S1TpDgttzY}Wkg7s z*#j#EVK0a?QjnnW z37|5>+Q}Pec at Fehk`up4xUMA#ddp9#C40DZotCl4&?|RX8l1c6;j{2I2Sk>7W0RdY z(m+VF>tFuYlP~ajir0o%$`plzS;J86O8C|v+n`VfNx&-yJS(3 at uWzY%=7F=;*r~(f z)h%jaT1uO}L-QW4&dKo?n)iz*9n2oh>EYFNS at T~y=I$6kL%<2xT>52=0oe{=6 at K3v z(8^JUOX=UinM+*d+LK(1B8M9f3vZFU>{HCP3xw-|4Vtz(xSC4d-7Op9Y+JRBj53w$ zg>{V=1y=T at l?Kv^3-rX3Yc^tyYpuP?=k(>S-5a*bb~V*Y<4Wz-oboD!cYr|AhTS`} zERIGe)8CQC2B(hehLuz?mAWSrD4XtCY^;{wm<-g at 0@#cm(M_WeecDDQNzR)v8T

      A(?6IKq4t8<7+eHbh;+yok=(LBzxn#zK})!Tq-9dB6Z^3nPx^u-jIHWi zF;iXHGMY`{K8WP8bD1h3?$5IYcNyqf&AN@~CAz11cYS`*8AHtQrQ?gye{89}^h`2f zOgbRX?A0>YqvM4ckS1sZOTYPGan-|FaZF`Resc`@8_ at Pl8t!pwxMN-3Yg_kau7$ZF z4ts^g<2Ypa|H6w#&Hlru72vBCF6&IkrVOb~;SY0W+!jYSBI=AqS8{0&b=^mP?rVKa z+MN_~Pw9!2I#1n}wbO_8L|3E2(KnB3E zRjV1To=CONd;qdl53vt at V7O7q8UFJC(o at wH-Kk5rbz0FUw<@xAn-K`1Giums#kf$z z2HP<+(5iEKAgGS;(uV9l<^qcEupJ<->$cBb<5f5N%+Yh{2_D<2H-u87e#g6->Avuc zz*D at k_i-V@Q at yf}}8+vO_$z at i?Ew-L~Z!;o8vR;#gWJV)?xFJ z1490Q($)(D=H7=V8pt?{+V3PUBtB*k;f}@7- at a^`mN1qu%Vu?Hx8OAk(q-b29{b70#Jk&#Xggl^Jyq$9h<` z2BRFuZ$!H)wU^_sq*zX?)59lP^VDCwu1v`=I)g15&REN4(qVW}y6x zzQ~<-f3rL7dHMC%);WUcEn5dCpMjIE2VSyg8Uu52-ZVRz`7`{&3q1}cC}yFS#wvcv z3gXBLLwMCSmLn0AkiD3TH?VVubZa1U(LQ4(Wyf)bh)&`SphDd$*fG_z=yt$KW z at Qw5DGGclUrm!(E5KuM<5D at 48MMnHz`Op7v;)spKOSvL%kpW**`cu&_LeT*0IOM0c z3v=R2>#E8hX-`Dxci^wGvl}u|UfO8}r_&uyrOQtYY5oYq at UxUiAEQeF%B6mnpWmfEjyKL5e>&I12fUDnEu% zgeVjlF|?s4Hf}>+JrSVb3`x at Qwp!(2cDhl&hAF at 50{-w~xRK~-osY1;OGNY8De7lR}M}`qK{UWVK)UdV??w=fYO_1A~3R;(Cif!C$I5&W%GpQ8DFd0^o4(7~|rT9~?L*+>u{ zSZhlsLp4sr-9kgVQl^H#7(|ohXW}_BR3#O{^B)-wsB&*%M_459C9kwmsDQ1CoM;?)Pb2TFbPKmU(M5KUt&( z3sx+>g~?ZU@&SAK(3u(ieH$3)?Ag4PKKunGkb{1G8-kr9H-hlWzCira(u4eST%V5f8?^(QDP%c zN^8dj?=?w4#$}_%7FEWVaQ^bQ73Xw|m5yU}X6wu2=F at Oj^m!hfNr!Db0We;FqzO%fp;4j{L4%=LqKTSIYaJAUM|)A?92m^)+n zq#LFDesUrgjpaBlBYR>By6WS at c-+CNq*`;^xWoxT)$7<$HJfTyjY1_=Sb;WWtwI;3 zT&msK|I&*N;Ml(2RRJy1DeqZ1Uy&;eR-CmD=X88glu(*|GBK>%w z96>Qm7V+#MvdRN=jR1LVzCW1YjLry6_R46T(O&>k{wS4osrm0K)}Fdc0?)9ceWB<*ucN1zmdHr-g!4Jki4Gs>?`T#9O$(EY`*;5ymr^uwR=RJ092(6Qz;k`8$z(4SKAh(#`_|@yLB-m>DpA z at RXlKwJ##tV14dMF?%MIogTV05_xgz#8qt234>jPC>Cj|(e|B)oN at n9PcWM^3=RWk z%=iAJ!H=yYUWug2;>e)lAK>g#QFdhmX?dZRrsCWf!D=>2t)y+mU at 5;y#)B>(v|Gd28gFnn}6g!7gPddPDrBBcME at L4vZ6l8bcAu=v9xe4xKBu~n< zyFp$zfQDu-LJZ9`nTf?^cEv#2&aE~y>e at ImJ@f#;c7ph#!zAoWk$>j zv-jWJQTecf<@cjyXBdX*?r_wvwYkfV>4iZ4@=-xQ?Qdg?NFS=zNzOGF1W$`CCp-9?Z!Qe+ixPO`#l zMlJ4jIf8!W;*26M*DvVQ9veO&-i8-HevtoBT`Tf`kq zt=UkSC at RL-e?=WQFpJCb)p35YlUF%__FO$(8VlLJ2(q5s?Umr zshVmA_;b`jdqsiZ37V)zv;2x*=HRbMixzPkzA*KzKJlIKVxBfx*~8*opmViSM$}5A zUOPjNd^vk#(}=W+kI8(j)g?A8sh3MjQ=)SUmU1X}@jx*}E?MzxW-3{GzZy3|SL<$D z_(i9{WI16S2bGD9GKd}BT|=$dGkO`{C%q234C8B%3U`-bUGI zac9lEqm at 9EIQUmoP}!)_c?ormCrXY!)$;&aJE$?Tuw*DDy{^1o71Ne7MK^t9Wj~A5 zy23g!I+JNL;lEM8#I2b at iW%Fp!;9y#5NVPwg0$fgpkIp zBNXi$5RS>!iSz-OOA^^-VPw_B&8z%yP-X2aLzje-i~VpDODkTYdhm0b=P^%BY{4{M^-EumQHr}z!N*xE!ERe1>#<;|1uaQsE>6Upa>lDqM6 zYtKp^QU?UnmT~3F64~oThJU at RA*t&K|?>l=cjCUI!4_ZKIRL-H+>mw&j}Wk)2jSy6|n&8}$e_^lrYo zKYWRHtDfnHw`;)I%^cpb-ZjE z3ly$-yvx<5C|x_xW-E-5e0?#*z9#c{Qzf2r+mG|stS|A?qK(U&gL}q!(|Sp9t6|pl zFtWUsR$^P`*NocC*HTGwPA}1VE=+6WuV|Rt at K0PmiK%!vN>v+W``**BdB at U+ySVC& z7iR7ygTT#Per&b+jUOlb at 6C0658hkw5R2{5^s6xC>IN+<$`omVhf&XjQJ!(k^lLJU zF4-QOo3ur~2aD9t<2aWra$S~HqP!y+E7r|zog7ac-L%DZ9510hkXCL_rCTqS&QGb+ zi>K#T_Tts^OWdx0)2>goHEKmwFV at Xky4`j!E19}JeOtu&QcDjTZ9g+FQ^>w!P*ap| zYeV9jzf6;*LoCOHEF|-vJvH;|pEgpnr?GIbAn1Z{?TP+6*eyQt at 2U90q z2pJhi=rb;_xzWrBE_YZ-mZaf65Ffe at V*Sp8*OmkZ{^y~BkF+-&?Z3R`6FPCvyI~!L@ zjqj7^2+uKN&;iWm`m1)nk6%bLMBFHC$lU#ye1 at RD+;QeKZg*KWmybf at R@kQ(kDt%G zFE)Cv4^B2=7w91HLBy5a;J(E&*?g^s^5 at rdGUqRo4=}p9{1&zX3+q}}HFH=rKCM|V zEhp$!wLH5g7MJ;bZI|(~$M<9yL9KlsJ_A46X}0k at +>t$$_r?#WgW1XL z2)jrZu?%@Zx6Wx%vGrFSeK|LbviQ6UHGB$~LQo5?_sXa1pZ4b`| zn8$1en8zD~-N5 at J|5QshoP#sm>{dx3X4emkqLJoz45lHdLygA+=_lU>E zq3~t-#9lS-9R@~|+E!KGpAc zf`8<`!*2P~a{p9};enWgA-0`3O|405mcH}_zo0aC3&&A&jV=Y^Tkdv64 at ATFP zOnCdKS6o>Yo_|V=!|H(dn{@ zWM~NN4ruSNL}1=Fwf2lo1b;Fq0s_A;jA at 3>{o!wmWEt~=UsA^N#mB*Kf!`l=j^%Cj ziVpP$25ANMB~6ian2t|_z(HH^qltz^MNOA8rNS2PMi>gkn^59J7?4HCewa-M$1FOFG-*7Up^gzLQNj zmyG^<)wvONEs03gX}>^cA(`5`?M=n*#Ylsez87=ejp(Gtigxoy?7#EYFuIDN5rTaW zUxf8zjY5-TrkQZe=86RUY>73|Y%Fu}mI>pMO4P-^PjQ#EGwA at D5{~oM_R;96#{^w>O z!GM5R{x5|V|3|nfMM?W#>gnI5tu_}#sEYAXg(~?-+7*H5;ZXf(SkhLjspxt*t`Hs5 z9UIoIs{aoYy)hHR7?!^e--M at 3K$?gz{n9rr!)|seH$%VI4+mIdKnqzpUCsb<<#(}d zea^gn(ll+TW+=;`O(|D{LL6Z&Dl$k1 at qm{!RVPayF+2onpN1JEzAi^gxgUZch z-3+H25#f`kOqxI$ziL;VE$B) zbDm4q9(n0*DEZcoUw?j;q=6CSr|Dp=+W+aSSqG`;N2~mhHTeY+^`o4U>50Yf#n4de z%%$UJP1vaZ%`M0qgN3bq!3|P$B5##zw^r-y875VRQ-eQh9NM6|RgqAh7ap!y$*|;w z!aA`uL3Wa%%LK9=0fHZ at RiXv^Ud*-(URInF at iYEVah1Z6UU<)La`O> z!b42A3l6)Fr8hv*GAES9(Z}6I4nO}QQ2nAzSBrS9u;j2`rGl<P&TP(D+LpQuip|?P}nqgOWG#NvUfT(o;7>} z`vu{D9j1B4?sGPs&o9h=L;OT?xw%CU7Khk#Ol^0&9cP%CUQZp@`T2hQ?nCK;CXT!? z-0ZUs7GVnX-Be*f7evIDWTYPsL}@KPHv*&LQ>#bmx1o`4C^S&zyK&y9Q&OrHm2lAQ z|0V3Fcso&}#YbP=WaFTX!lG!>_D-P6R4u|+M at p6YrZNddt(a&>?eZjRd-u2g!gbaZ zlPfW^V9g0uH_Ei#2y3AJhPMjxm&+1EaC7;CrRu=!kdkI&wmT7QZF?JbM&j7Ii;M-U zBaks$&orV2i&HR~tVO6sT?%vY7&F(^W9bylN^5(`xSJib0XnOr>yb!-vk8J2!xo?M zuaFbR)NVvp(=#M6(j%2#t%$l{k`J{o*A`4;>moc8eI>C6<=R#qtP&(J6q zO5Vy<5v_h+)VzHsRPMIAeOSCXUR$c5$go$T;WYQ+{RR}B$OR0Agnr`C$*V-wc-4d; zg at m+cWgGUuNRUWq7F1Fm#R6$hGln6CHNA=oO!ZVWHdG82m}mB_kxb4)u#a`(7*mxX zw>Y_9!uEz%R)*rhE}BEC_AkFjD?WaH{pJ6gO7H@^gIC3jWi1bo5YIv^2 at _|u$muxn zpHzc&oZMGw|JImvSUAJ6b7v0gNF$ReH&SEOX0DhpluqVsZc)rjNjK=|KQZkpl62GVQ)D{Ec^AsC(?RVY7_JjI?0rM at T z#h*!t<`~_2L?8Chf@?c(^KS(gn1DNaLIba}9Q!EG zkw8UlVv-wFaz0Tf(9UmB$uCp<#kA87X at V_3g7+v;H!9X|YEO)wK?Yh+Og%weV)^9g znH{994EKPZM}(hmTIn0NZ1 at Cig=}ciEn$aI%JYjMcFE|M2b59Du<$q{9MZrA5z&6w zVaF5}Q=X3N8CLRa1e`a*U$_XqT)hE}4?!xWOfAQ=hFRPES@@s-TPytyJq-)1f0l_D z{}l`CU%yEiJ6p5=V{`9rbtq?)Bix_qYg02f%z?jzt2hP%4FU0>L+QvOY!Dc5l9|E8 z`TM5KP`}w4$1iQcY^quwdu*&i)-4tDA#7MzNtPnJ5xjQXtgLP})<5RHd+gX63D;zI zdGqXcKKy>(Vt;(DjOF>AfAw*R!WsP5yAbEqBk#LV?GhZu1|1vB@^)|3utVRa1?gf1 zLf9s&-P#-7a474GeRV*&f!w9*QucRyb6~$lTJ8Me2=xL5djWU9X#*lx$$s49rP{9A z_W?#Z_ at a^nzXkT5i$mD+<;Uww2Py-1SMW!OGCS~h(D%eDGhHyzJc9^!5(>eh~(3WD~XVv&4nCB(40aAmK4Ys;kg zhO=@j(RiC`uV)#Eym6PjdVTp4!&A$mLY=LPxToJX=&iZL!v@|A~5foQS1nU3@&sIs!p2pf*fx`BxxrC+{KfZ zlg?SVMsY%M>Hc!=(i$vIJq{PN+RSWJEl#dns#wS2=IcU+v)d*hi*_0IY99Ih<4%7Hd+)p;=MYP<`BkM#g1`df+qJVnunR at QX2fIs!>PVfTTldaL|Fe z;)N2!b6IB&D+WOoe{MS5Fpo{lh!J`RgI(N(*6jkSKmD#$Rn@?01=eKPHl z`2+qC2rD}Z2|aKk`)u6{J<$W)si4q2>I81g!MGUDWb`>>Q4Shvf%i8`x{aPGd&=jj zIuRpw_?5D9QAW0?B>dO!%X(?EHu9}Eb5&uZn&?GQ=8n9;eVVI)Zo&$D8OvAD?=hjYlGLi#q)`3? z|44GyPjLB)*Q(IoJxVw~^j&bW1N$HW(Au4F`RG-X33Ocwi3V962R zfcw<;SfBCN
      4vz%h+M#ewaM`o at ef2~`$cyXtpCyucxUhVQLJgnTst=J#P#MuuQ zhYg7yRE5?Y5%Bc3Z7x^)D+vmgjR3Yx{=*`khS#m=4}3dmQw}ocofnobOH62~)52tN zMokYp(bE1$PWCo8m3cXu3vw0(y0kX3SDoQ0GqS@~am7RpL$K`4FYxE{#o1_R%H?Fd zSWz0DdAO?3Eq@%&wmDBMrElUAjGAQwyjPCleP%Wr2iyvH;W!Uo|8j~mEn9hcxALcQ z)D%pwl|UA(bv_EJTX}7;)pB1h(f2OA#=`2c>Hjw2xv{p}!&hV7TwGk+6jgUe9+7P~ zF|*rDU@=PGl3+P2R1Al*F{xGK@=@qM#aU;4Dj~<-ze~qsT;;<($B~#dDWh}Q=%A1cNAUYQcua7rtKXIth z_9|UgKE({W&_fAd@;TN6YeVr|-uYqR;YA>>GXvR<=YrQSFvIzF03)m4RSfeAPxfaG zwo(k2N-h+WYUnS$kx&eCb(Ww!zZG(p!n~Lht=aVM1m0@$&u;?dUSNv7--PQn`2a_aYt`F&^WOV5H#+00$htM8rsfu^*!z#TegV z2#pTMzEWTeCOV+tA?;YPdq#DcS*p6#)Xk}v;|W_Nw9d8q7WGopjqyj6BwiclIo at ZG zN8VGBIrLMC&rPe~!V)0#f}p4yQzSEBq%tC^0dP~CMOoqO!KZymm$qexy()z8?*uQC zpr0R(YA`MW=#(#}jmj>jWazYBHLa=5GF$lt8EeqIy;PplND|k`s8!4j%Qf6g!2Lm0r}U;3q*lfFg%u3 at v@TmVT%~^rq*F zWKz;&4V8{Hu886N0SiPupg?%P9`C1NjL{4ktR}j`%fs+qnBrQPN-fJkwb%3!0q7 at X zeakMK(z~6~mocpfLxm3OWS06-w?_~_)mCU|YaSYYdcrJ0sqioa?Gs5hEc9G}sUS)g zA9}<$?}?4mhX-+xFmp+8+NRpV?Taqb$Q#k87EslvF<`1tPSaXgB*N;dszgv)KzIMv z$kI)%y3C5DdHZK1AE{AF^O>}3P9(}}auxrxQKI~>Dcc}5X&WtVe=`q~8L)OBl#1zz z?FztukayP}fnyUC{spMLH+j>?9rO2it*B*3Djt-o2brP|)>~3JC!D&157>q0X2H`` z^<0Te_1v#x)l;TY)$&wL)D9gI)$;NSmd$F7Tx|C*78W<3hU)Q}Gw4k%BpQ5iTxMrv zdILt&_q8#)7u1sBQ4GQUDvzFv`Y6?NNwnMj$T=~*Mgup+p`_XD84A707IK{9QKQP< zV3W>pDimfNX^nho%-YG*&m-qkrb_kD4G&lHi!l|4*7PlUGt*A at PQ1E4YKy?C(^&O! zw2Of%Qg1lCG?%`RP6u?~za@~PZQqX4^Z#ql!GDE#q^_mOlYoJMG(i8WDvAFWJF9ru z|3}uoMwwS0L=e%ZsEi;#d>?{Jf`M#*Wq1hQ*hr!}oH1ceqo!jw(KwCkC&e>aDA9H3XDdy0c-`7h6c1DXE3VJfRlW18Q0&_ z^H`Q#mSCNV+8Es$s!qa8S&K_YKe+$~-~6U~c&Hh%3OcR<*WlVUQSm0N5IvvPYVVEY zkOwjXEmmt$tw#5?c-cUB=%2HEQK8kF`B9#9{aQ$*tp{NVct^=_-;9GGr$L*>%Zv at S zw0jM3Hs8ml3-z%0Si%4qSi|ZOhFC{g`PE_fNuF)_JPw-&AeG_TbrBWYIT{?YI4Lq_~m6{F*fC8P_Y|MV=zU% zGKLAOZ2UeJ0M8hP_=hgI3{w=)a7GCbDZ^k2U#2Ki`81f1#?&l$cNSFhFK!~!C5#d5bgUkhn zC7Gat{-rMjWw13|W7K at zrXos$S|hq1s)2H8v}CERUE`{(y<&N>Eh>8T!vE6k(fB9P z;N$LN+ULafB-iWNX>hjpa}Ss(vo^*hDN0&b=eQIH at 8GcEp4RQ2<1N`ciWkM=X} z*&(MKA643fdrQ*EF+k&O#_8UhoPMkX3ZR`X{rkwvnNBwKhB44AA;}8-$B3PN&$vXB zYT5ySlQ-!ifMA}%Lf+P%n>J}dU95R_sA|iXAn)i96r~R1{+C9ZIH`=|O$D93!@UN! z#_7SryCXVp at 9?SJ89ndJl%Ku5ZEcvA3De%8Dry64b9X;KiXGZLHAsOWI>m93~f=He0%}WA)RI;*Qfn_4^66bxN8RST^L at 8XsUI)hokG6 z7kwEU$SQ8v%+%KD(p}y*&IA6i59 zHeUJq8?`e(N<0KIZzLY_S$0xP<5&D&XAQOBswL?^C>n zuXPajtHcg|{Qx_#kFmwqm_ut}9jp2*T&yFIHo$yZ?2I0Qp}16%N!0^dwO4j11-*#4O at Z(o=aJ+W*afaI?>BW&g#Yp%MBwr zTE=W4H5RPO)C9n~!%oo=BGBe;(1GxKG92t at X&&uEetP74k at O*YAt)g;CFd at 7#$A{P z>$cS_MRJ|Zz8VvU8s9sI7J!M~V!|7CmONNyugZcEn}-ZH0=kw$cCb58jh$hNmzocV zhYGX$f#G}-bo_JV=Y@@QyAKy|+_?B!h~@{u7Fa2`=7!N0<`$Yolm$vl4!)l=Uw_J? zENX(!T{U6k@!Y1xJ1|r~f&bJBA&?R9C!Evz(NWoecMdNa`=sX5fUDy#KEi^%8UxO@ z(P^j0nTHQlkp6=YIGD_}`Gl&p!Q6BXp&w7Y=>{Aw1Gx?@4DosT$cwZ?z3g12=-1oy z5Eg~SQAhPDXE=Tj{2qN*ZrKeJ13wxM1d1FYP7uK8MZ5^Lezkwu$b-AkKpU z1-gM~9EbUwy(hu3i3!b!YQ}i#>8C6(P*00!YnaJcUL_T87hkTE#Eqei3<-t=|U149*T_h}P{d%c0%iNQA}mK0+9=L$7_6X#zNv zE`DNm;=!+-Ar=1vSVOuJ-a5F-{+bKi#L#hBn|6i8wlk0*Aop;JnIUZrTXE2s5D>M{hQI* zTv}Rw6}s%v&5?Lkld04qnpaGx2R#i`3h5_g4l0fTQ#g;iz;1UWA>l`}XZz at K*vheq za1~7lln9O&yEIm(Q)Rhygt;=Q?nPHDV=6n0EXrvDT94=6kbF at J+~TV>Pe30z4paK= zauDu~W!}d3QlP_<{E8pq-pK7yG at -+X%ssUr0B>bnSH$tkoQPj%oFC}{53KIHB;e#O zp$GlX{-|t+W1}DZw9+6MX^0J&)-K2dkfPZIu;hgr_ at hlNMn zoLrf|EU9Nt<0S{IdcB8hX=r0jkDg| zo9K6rTyL?y!XI5Qq%dj_9Ka+j^MtOngNsY_H9G+?tWiSX^z)qiUtyWL204kX)2rehe_1H zdxidiJ4n8wcZWbOKN75m29}@r5;=F=DplO~}^BqO^jW z%a1bG;*ubOIN0vcW4XD%;^+2bjB}Fx)%a*n!b6Hn3vXvPE^YM74BY7G+woR`c=7kz z(rP_!5|%xrhYT*_+u$^?uJO0R3X6_#V?^i7Rdhdft9YTd^K>m|y3}tDWv0eVk)E?f zN9Sot{PRa(pVLL1j#TNq(@bsbLaPoI;rY2Ir1eReybZV(crgx1B4V&qZyDoK5UlZd*IdV{=v!`-( zv2~v~Gt!a31L{ISO-;fnbg#Xak)@Dry2SD&;3|$a-O&sS3W*jf|2JF{ja-dj>{x0! z+`F$D+b)Q?2uD3-0a7ATS+1eTe3S4L;ZWmYk;MAJoR;K#q!N9ucSBOer-8L14VpE~ z9V3d z5ha#EG>VF;a at O72-I%t6HUZ5!q|1IREbnC%N2w_hkO1BINp12HD0ObLJ_3h+#&oEC%|s8jCgb$e!^RF6ydkfD0Y_a65NPr6 zvu{YgaXOf066HI+n79vP~k6F15% zo;6&MOUc?ccZ{X5%}w~2D|UUpsCe|6fC*17$2!r)0TQJ{j1naTAIw;EB;Rxvr)mU! z&kA?_eF-a-e zKNcl_Vf=ej at p7&B+I2|G?mB5f91vy>Ete at pN-z%LSY^?{wI%Hu9ajQz%Dt*C^!7;L zgRY`>&>DuP)K&`6d&le9QEy{$`a-CF;>DmA6Wy=^=te!Tc!znsEX0fD`QV>*vpCC- zT$xoph+|Qo8NL at 7?J%s%#~J9|@>=e519`i8pSXuo@*M^sOjhBN;ooCnU4gTRv^5w- z4jzgXZJF7V*v&d75i?t;{SrSuAcHZ-p&go<&p*KsotK$9i;uAv8N7rXM#4UZi-qiV zqVYWO-v;f=JB+#HF~9PLJTW2f)lcC;I>`x6!eVH| za?bfgRRJLO^*R3}oWo#rM7SK|Ba$SxGMrKhiv~B zgc`hh-9+hPI)B+{Um+>tOSj73dt3KwCg##@ChKq*lLgv_o0C#TxIBo*nT-Umh$(V# zsG~fQO^~@o0PSQh!I>`ljfW#2#sCH#;MjrT=>i3QrWCCwwla^}lv5k*s{{Vh9OEmu zQhfW2iSqW#F7NN*OZ at moik>}cHgMPr5RLk-25=NAhg{!0G!DH%2nabOhh)HS at M@La z!^I2QVxA`UT~GFXPxd`e_5;t>UC#}NZf%F|4g2nYCfxSjc7|U$ZQHtS+gokhyp)G^ zEUHD2E1v5lKfc*S-{)ZZ2&y|$wqur3?6`1BKAkFdmh7?+&8BswS!DhOjqEj9&@TYz zM)snt>{pxwSR-b8210YrJ=D;>av==^N{Mu!Z%@O91;ZMrzWyR4zSIGwG(rUu-ESxi zAF=ki->2vkfT+XyDH893 at fRe5B`^ARLDb~ovs1FpuYhO)M}`n6Vi~fw!>j2b*1_n0 zx_JJ^G*gpnKPr=6m=C|08`{+$Y$rd&Wr}AFqbxgZg>&BeARf|f0A`=_ at n;Q|+s{dN zB8k*s18>;2ona5X0&vgpqnC>a=iF+4>B*_ba3JzjcfKpyLKKE^`3e1*+i}B+ArHik zWXs$3(GmpOy6FbYl?k`Gic5jdh>o~qLs6P(5C}JgdnW>TUBSz*UG}~5ZT}5-ZN+*- z4DrmgkLSFhd=bw z0mYSW36oAL?3_GKRWa$iR;MK%ye#|`thO#sZUOf`QIv_Sq)mo}i3HTAsHlNar?aU- z^aGY_c~QbJ-rY?EzwgBJ&ks;oCz}yZsGJK;{Tk+KMlCg2IXxis at 8Q*Sv{z?ozroRb z5*=6nT-1**8`f#TYD1Jx=)!apc*mZY&oc5hNpuOh&@YiGV$b{_qTD-`KcG{}P&Lh= zQ>hO_OEH`+Rm)^XH=>!%#rV)217{otf^^%Cq>&4-F9wXF%^~MGKHprH7?(ZH0V+C8 zX7eNpiVH|8^6s>)z6&*dJEwQzZoQUwhaGYc;Pj#^askpVTh0}XJyTABjC!`Qtq00C zT~SieZ|%89Bi;?1y_*>P6O98H_%^Y#=giyE)SVX5j9n8>M4_FOv!}U-77AMy1AH!f zgnHHbF;5?7ha+E2r4INx`<%^TSd85*Var!V3-Dwao6uflGlcA&=Bx+>%$j8c2qlOJ zWz&}hQEmP$_vY&(q|PvD069EiFLxT=se at CbTnYJm63k{oSD0?P!*rNyg9u;B at C&A z#mMx*46y}!UEvcRjIzh1ELmv)5Wd*+_E;=;OjZZp;3gapElKoSs`p>)b3R?6J)>oF zzIxL1w-%J8uZ1Rz^jiP=MA~UtUo+(#lJ{7OFh&e)jDN?wq(IxTUgB3$q at Htv#_TyV zK!#S|l;THaDNBn-Mcrpd^fVN&YuK|Z(d=|5hO1&;hY z#-y%}8stOC(NFdmClnfvaI|CQG_8$ST-pJDRQ3DH=ks&YlkqE{vKCtmFqjd=OO5>I3342toMFHJ3zHmAH^dc2Nm3CBBdQX4-dJMGh06K3 zwrH_zp!mmX=!6I at 8)CA}Kk`+G>L|*95M3EuUr4nprS$HIC8;jI=v7K%l1*z!eZj#S zuKJj(t>xlOr6*yaD`)07i(-U*VauEP>R{v4q9 at 09&~5JKP0lmoCg9K&fbLzFxP3>J zM*dFiC<4LsRv{s`ttdH}mMYR)+?#>?1!$r|FTC1GU|-D_zX5o?uBkqedt?P%`Rv+{ z<3~*~xTCs4EmPH>6ngFifVYI0lyH|1sk0f^c4KU|w}sKI!MF3)FNNZq%W8|k5AT#B zdE+NLv&Vq)WZ*Y#Lx>Tq`ULX~!n^Z0miv{*bE+LFUt?ol=&u(6${sV;y&=bg8{TvpNz#q8^qD%+=r-i!xc^#i zgj9OHxe|}Fb*kr^GN5x#&&!Zqk;mW%eDgqea{|@9Ye?xaLYz%LSbkZL-Fc)S;Qp;m z_#;fOyC$ta+chq~uxhY5B>JQHlcW3W2mCy_`86iirN$;CQ5fU>Cmq0gpl6fr+wZvweCC}mu z-td#r?^=A)Q*YQ4pZUxzUSp1lUP>7(UGCzTfa|$ZQ6s+Vkol~nKQ8^5Q at 5Q@6WXLn zYU6()ykQ=D=#Le54A`qZ!yXo^6GEB4(6Ikr=~X z!&M|9<~c9C;=JHpgmLS>=iZ8`c(ZPs`A22aa-O}@B3Y5H>e^*X!Nj{x{ueJjB+;~> z9BtS=3wq3=qeUTGa3yPwspX(~ZmM_`D*|pEYAIL?*CgCBp%crd0WQLkVdO1O)NRh` zFW6|-g>RjM$K3RGGVxR&HKn z5LpI{t73(ai#T+p5-~VdjzcJoJU2<*9HDXHLL+Xa5rA#vi_IiC??o|bT7GaqA_SzUVn at z zrd#xrKj{0H!HD8!NJhVnuq~_zhLryqghOIfE6a)U+7LyYF{u`13sP6GS~WS67p(j? zbD0D~rjQLGwR2i$o;5MHD{KI_W>-(8i~O`EitftcQ`(v+zF$4^%}&*q6*z0R6zLh^ zk2k3jJ1ruXjUtxH at LD3CW5{P^r4qV2f4XIHSa#avSfrBIo6rYBEa-z50D6$4W!;Fe z@#q7#Sd|mecH>sYfX1m*2#_mp_f!~*bXO!)%QS_GmJ~Acv;_6e>{2Ur0M6BgbCWA8 z?NX2A)4EHOR43u^WVX3S#_wrzVF8_LfH2$>%Un_6w&49#zcc!lWb(~B|G(F7(KNVn z(t!X01^$<+L>e4yA{I`DPEIB^M%E^dB(ipY{v#EZqO5I)tcdsx?`2 at P)}mt>qE(|> zDWJW)E|e(%S=s^xwGNTI`f7mIv72bZICx;m2FI4*PS?eu2q zI#ai^;|sDX$_Exp4xLLxOH4;xB`}E=HRJ(g(aJvYj0>|+5=!(UTmf7Q*D)M z>(=x>$9N^j$gH2DQL_W63B67yYF7`~@SH_lZN6Mo9B-O7%rHC(-CvRkDh$JyJ?Bti z=WgM{;Y^m4f+5hb)YP;0pn4v|dy;ynr~3_8vW?G4d$5Y)o%Z7}8F5HuWMs8ZRReIs z^nzX6SW!sm>xuku-;DqlQ4v8h)W|lO*|pR3(XN*;EA8O2aE)1xPq*E!q!RY^%)OpK zv-|91UW!W5)$&Q%j#80?P6RqDpG#0>1QOy9(ip*=qbI&VvT#U-T19`YCGa7O+M^ry zk0Kr84=6s#3!CkR8|`n at -|GcI2ky!6S4}+EXWtymj9OTgsBM$iEJTQJ)V4~4%>E(Q z8R^)K4Xd5~6*%NJXzVDH6Q1+|?~9dGA`M25=m;0mDYp6(L}MY;={7+QxkBGJQ|ChN zv4&54bS_I1;ej}j&~HTg2J!D%I;dt5xr2X}6u3Y@^#7^t2^l(>{GaOvHK5#eR8ha} zn3C9;J!BVT7F;QcZPo`^q=k)XZ6ZU8i_?+USDO-=mfo2j5_??l$+|qCX!FZez}TyI z2MTGFE&^dR%796zsHm^2MPLSw+G_{DiICfQ9H{BUOqZU-gU-weHt zHDK698+>7J1G#c=Mc4&;16u%nlQ<0rZJRvE4sPEV=q7#7>-dSbwn>$?O_sHR+NB=5 zNysf8=#C#tOA?&`L?-j>4^MKx8A_LOnZVvbg#q)GHg=K}X-E?cic-G(5uTva1b2 ze?sQ<9~tRKi&Vmo48gqa6$vO7*Bj=V)PBJtlOd^COouJYHF7UpEva6G))%salZ#SY z3s-;^JtBr9w~n8~qOpmWWt;J$M160MR~}nwGYN}RdC5u(tdqHq8x7~?UwwAgL6dD3 z%Moj0i`o~&Wh>Z>OkT^gi;|FmUHvqFrd?YC1^#YikaGjmG}`rgQ1Jw2WS|F#va at OV}=^*PZq8QDN{Qx`ZINf$l6FvZ2 zzUNL)Cd5;^If$53G;LO*sjoWl at LrFdwb}CT1rq`4a;~AxpJ3@$@>cT}#!@qnKO`fY z at ON9KjTGs%abUGPl&i<0B8sM*1n?vXrw-`RoTQF+v1b~Gkq*B+`r24&5h6^K6ITC_ zhD9}$1H#}s$us_TPBk3*UcdJJpa*3PccH5rR!>Ds3t>!*j6_5}ElR+e?hC~!3)wj? zMxJHCdeG5RINaAJ$12W;OhfmS>~Flr2HsSz#weoh48EX#3Jedv7DT26?WfKFfur&d z#HoIQ at v9aX3Wy@;3C_wv0ip5_5`$2iUV?!0tKY$VD)kpZ`$&1@}=Zt6481Ly48v;Mc42P@;dr$WypW4firq%{}T=HnCjtBMS%* z``tA~nz(s_eKl~JQc-c}U~QB*>P=MxE4mZMZsnMP2lPNk-UUrr$h zoM&gXz+WyHSChGH-{TUCHm4UwV(}D4)~8oRYT+mh^DySATE8!<4uez(nlo^#S}XK3 zxlLjrDGpN_6;R2cmQ at tW5&e}=fohV082LL+BWv3=jMZSX*aYV>U5x{%keFDW!tgQ^QFm7f4K%5SjVf(d z{Y%ja-nPY()Di>%Bk%J)Ejc;UbeK-zDQPjE at wsM*4TYDW;-$S^@}yRWrCaVczsA_j z$IQvnB|zQAG&`-f3nGzvoe4#@)YMvbt7g9;$=v=rvTJg?h&^sy>642mZN7YXhntF| z=Il?Od+qNc%6aJ{HenCam0Os&tRM}jpi4UirPZ=*Bh4GtcJ#emOfyZmQQ;#o>6({4 z@>YV%M&%{U&cK$gNYmbmU^O9%m7JJ13fMDOj}V`O6>~*JND&&}B8OP`d)g#(kG5x4 zP_HpI40)lzh(=0FA9cq73-F at E)ME^Ang5w)5eJs#0|oP*r(3JZg at t}Iy`I19mT5GX zq&=3N+4SfbpZo3bQm}>d^!fnH_yyqB-!dIL$1%B^(&tcs^QFN(26Fb~f_^fgZh5#-OjY>{XY%gd_lp;b(iXW~NY$3X?B}J at ql*!$~E!G>Pd4c(A%a7wI zHXi=1c8mujHHRaYTw2xNE`g7haiYdEx6FrBk1GYsZj;h0jx#g=AJ2L+#Y}dS2BJGG zmCNA5W0mZU+*U`{3i->}>uL2nJ=Mr{B~?P9oq$Kf`}uB}Dk57gT^s)%-nE8K4FZG`j9)=NT7b{z&#Q|u9|P$feB-D>Pn zT&OnAkYt&%1JtX7e92oJUNpN%ffiLo$uII95uVplVI%dHDPZHDv%yGTC{f8ampM|sEewqHuKX7h8!sL|UJ~cLI z2-3oMDo)*XrXjCY43!{G(1^eYIz$egrJj!*)QHJy_~m9qJJJCEQZ(J~1D5hh>ujHf z#F#MbLlpHPg7y+YbNw5Boi8lW`~x>K&SxJ_Ak%B~Y*Y>>I94!rQwBGz9$k=b&p34x z_;T=DhKFxFH`(6efl*|`8)+vD at C*g7!zeR3vHN?&wEKrI=y-cnP1Nufoc21t40$s*2AKoBHWnh0$#Tehe%kH z$etZ!vKC at iZb*r6XCuA>`EE({;-BY|@FGd9(uKiU+*JTL?kPaQa=+?A|CZcW2hJMP zm-z&#kDnMaC-*`<di z?lvhY1y at Y(VBB?%B*h19K8qf#&Yd!4JE6E>0`?>iHj5N;kf;`NL9LlBS8dDAxgj<1 zlRk*ZT=-}HSk{_4*19OUBMgcdL&DD8V(1Ouwng6R3?^J)qOl_tazn;~If9bH86pv4 zxe)LshCE830f^;ZQ#cnf-bjjD8CDTE;_*o4Yz=r*0-US8V|r6dV$S$*?v~!Q at rQDG zII=hf#;C*pGH?M_S68PhSZ1u8)g%Xo+lxvcY^^IP`Z8+xf9r&ORuhFeVbqW?YQ(g#?TL$z`{o{tN(GJFw-wB9Wtbe8q`1wV
      i5s at QhLwr$(CzSvHx zqA#{tv6BkF*tV^TZC7+__c^D#&%Sr>zWw8Uo_GCTYtFgGnsba1@(}R_3~cM)Dj)vu zUUL76_ouop+b at hFus&3hW?ijY?Ws&$5u`Fe6-8nwT&`hF^W37KxtT~=uMirLj9j3s zjPmoH+Bp#msv54|+|uJQn}@C4+uzp at x;F5I+-=`Yo)V=uIrfB{eIL!-(rtouAWrsR z%mHxq!=zK&GsWBa+obKmrnDY)1JU^u|H&WG9Ops&prHC+EliB->j-s0ZpGdGD3eTD zxQznSSO_NtZW85-Ww07M9AT_v64SeiDRj8!zA}^Di3-4KV)LhBwAAmUc)2!D^GmJv zbhAZptA2G;jx8rnPjmd$ixHqszloj>;g at w(M1$IF!@be^Wz|&fWDzO&ZkrmY6a?}F zQ|&+PM}=w-xDzaPA7+9O&g3|7 at 8#`Hlsoj at db_1h`S9FByq%4T-@(Ngsby4>1v3L# zp(QB2B?F9$Av~l+AcM`#Ojv>6>Lsy%umeY}tYhv+phTrchP8}PyoK){;e{}7huhPM zgu*3RB#)fUh1RqYSO&a;Jhpm!1WY|mmVXYq)$ir^4DkK;{oT)6v;FmV1^(sVajE{l z3E}_6IF1&8>k~!^-G0W7`J$$$vl79WD}q5^5Nc?wAi0U+X~6~Eks12+T6q^*5C4dT z&F}iz at M;*nhd|{AiLf+`=b@#VVR;a2e`m at X&C-EnYQ=5{)6kYxYZbXk?E=6gd#*HO zykQjl9(G<|&zYarxv4}IS1)1tex5BCT{wJ6x4{5oj>jXU1r#NEnzTaXqA1t5j|||y z9fR(gzYi?MTKj08xoJM)x+kolxeWLxgP>svXYKjFXS)U(42<*tM%_=+#OyCB{4b** zjsGBBTee?_>d*w~AM8REZGw*zCXdOH!OBRO!NT4ER*`Cp&l4{|J=@pB&&bSmiPjzb zuZ7W8B@)7LsRLm-JZwi3PyR;}7T-Vqydm~rsH%t?vx`ZovYQp)Vo!!Zvqj3t1Jak6 z3r#p9sSnvF*sKFa5wrcLm=j0ayIMOh(!X|TdAMwF-I+F8LMdi+mjfAC8dq}l5Z)3A zy#)J}DIHT78jM@{N~W9PH;^Xoy}<^#ta1pK;baA!%^hMDDI6E#8NDQeyf1vEhULZ~ zt9|vngS4H!zG;~sd-;C(NO6lG8D{YHeWO73=p+y`B81f-9+Xs#J%b!a5b4Obc_Vu{ zD?g=HuwyO*FiBZNS`eiDN_lK<>2|Qkv at Q|YTh%n_za?a;QK;yx5d+xLr5f{ zA3DVngkDVf__aITQvX0bKa|pBKFD at WY7wY(T~_*`n^wm<&>y!1YZ9_Fo*av(#UgE( zS-S`-$LEoGZso~esKXkl^P4N)zBR>Nr}K**5t&3i6b?y+^ckV9 zA|w=>b7`FRtt!m~)U;}?aSM2|er z3eEkDH=y7w$L?ajDWg)&_z^WS+89z^fxL`G7e3A at GL!ccu~WgCbgg9jzlX^-o%qb@ z-xN^-0R~3#uZ`~jRt_d^e?#QI+`|nV(L^u=AjV1EiiPzsyRFNMYXj{3meO$wZcGZ1 zIrtluAaZtpvx)&ji at x`5?^Gh=qZ7Y<`Jmp*=~Zr`bmQWAnwsc5%6 at tNA7*z-vkZkH zmaxmUwkFe}<9%JBU$KxPt+Aa)lsQc~mFAv~)OwYphW&aALn>7kawN$DY_~qXVaoxx)F?#WzN15pITQRqZ*mEV!7n1F+REsA at xZ` zc*qarf2c9iW}naHB|E>{mN|>XCUfqlu&goHnn8cIstrjrI<>)p!pP?0-&tf#LAeM7)1{KnvfesE+gG6vE+cZRWNI{uUxc( z)EyLx%(mYrg?qcRhhVsJ&5F?{`7N0E@)GoZ)@_iX1u*D|E{sc1xPO~k zPMinUer)41pG?#>Dt%3mP#UJI_&%Z#&q}R_v(q zA=ajE=W(oCtBg>xflEy7Y at U}qM^hWEo=?-;#NA-gCYy-3ahun at S3@X30d}9=Kx{HJ zNdYI)-`~RW!t{p+%|!WgWz#VZX}$zd?(hWDffD5m0uQ9S0w>;U{!$ycx6^Q zzdi6x4nZEfO)C`#k8L9w2k6o=;o9ar!mJ#dkCW2rU#GXJYlcIQ+(LV>(A<2t(Lp(a z!(-l>%Hm0lJbzNjg>xkBX+~NVx$+rWmlGH4gJR5oj*8)o+l%lRb=Wjlo#l^`cly%i9GNBPzCAJ?~et-k&bM zVG2_hAva5?3c9AmM*;UrR0S({1B~8o6_5wVFzcEJ#9y?;*^I3pQmS`+Y`qs5&28N3 z*z`6k3}COyBi at G@aV0Cp&>nKe)KQ8aFN>!k`wdjm*%Ot?PLt`Y*|S1}C57i_SXNkU zVpV+MhG9=*N3?@EeSD4)+0izlJn%-Lz<9$|Q9O5Z6*whw`O<29il9MTlwvW}0hL?eP5y9&hwzTx*n5^y(}G5Yc6eUIvg0l!9k4t26W3)CbYN{|rQhy!F6f9Gt9h1jm_J*WgM3gZ z02~o)Zt?9w(Ufza>#Ws-7ONj)C|o*YM>wk9Vy0 z$!LZ>rU7`rTCOv*TUG&Q{sMvISU8-))!qBCvu;xUiFHXofMKEybbVyNx9IEE%?4db zTXHn_INYUAUx^Vk;S1&=6O58dE!nY;=b$RDk4X}0 at u!9)Mz8BR<1576>PqRfHUX*I zAHtn;usLk$^D_=zkH}QYsS2g>=SB$WEnQkR6AS2ccvH+0ZJL6rm#THaGaT00AK6Fr zY~uTFV+Qm>KL|n?d{!Dg%d#C+qL%;|1xCUi8_lGBTWfD9DuIL~kBDQ%%O|joDW+5F zWS{@kT{^Fe5L^6v{wSfqz^MOq<#V?;wQ%{z`TMVW7n=ANKd4}YE+=o%D1U)M#mINL z5ru+cBGL5;lm#Hp-}Xg`@%6Cp$+LBqIZ`G*TgvZ$O_$!Sgku at PF(p+J%osstR`~=v zU#VJUmazbqb+>Z`tP~%4eg<@{Lor7dVf!CH??%U_ at X=s6%MTw&dw|Nj)GK zhmngv;2)u0MlU{T9C*-E&%jCM`=*Oj>${ZTo8diX=TrM%6c{!5vCHKdrxM78~ zh{oJfkc-PuI)Yp}MIV|)MBPOFMBRXnL;XYpxi*$C z#Bm`F6hO8&C|@f%+Ya(hekm5B5S*k3dzpO|rc$+z8XM}lTA^6;)&)eK_w=1^miv42 z0&zqGX}N`AgPFA#&yCerh56hFs(J9W&yR&-d>)CUg;T)X4KHhix=ZS5zO*?DZKOJC zziYn4pJeK(Vk`hfySBkhLir+FQyW>Tbm&MH!z>(ye-DDw`&VsdyLlJCnh& zN89h9?j)r+^o?U-suz_WNxnkJH!paTr%q3N(DIwD7eu?j1Nh?$EiWt~RvSzXRvWAV zmJiG(mJjT^`)169`-R|P+Xtm(+~DMdVU%7vKEos1E4|>rhPgA{UmR|fk4uCn^_77A z$6pA5Y>KeAkM3qdwy&}gB%M2CZ$9cuohNPB2fR4U>4Q=! z=N?loFAys%prjlunl3fkpG>c?k$drhOC-s^+j#tS{!F z2sAmulf%?hup90H()i32hy2SYsl$iSf9TU^yQX)!sn96=e8x#T+evYFi99hqDxwGI zjcF6O_Zv)%0+!Q1&m2}j4mB~x^mGS0{n8Q4GrlET5KVc0fot^0msw0GmTXFF{5V9rGFccac>gCAcQvz@ zxoRXZFn2OAFsgsKO)?H1j<)}i!v3=_t_$y_FXjFb*H~F;V6g6^op>NcKU!Z{nxb8Y zCf5ftjKwsUnU#&S=NYg)k=6BWsyweD;DdBppHY?FMm|-JEJWE5l?^4SSHPp9DTl~c zrcRdnA(~%Q)Ir0Z+!*-%va`)sOILz6d1!kghlkH~>N}C^VRRS&>+RQH;4LasFQ`NF zJkNak^ViYD#6wap at ex+<&(t4Vaca-$r-GOLLch^%?qxXsNC^psD%n0$A^yDCX?WI0 z5{x at y_Y>*I{+ndd-bRLnUgN`#8LGuH^jD^>cT$6;nug^LyE4SjB6?>4%y-Q^ncPxuk+Ah^@JaH)OuOrycn+Fb^Fn0*CG#Z8EPoj7B!*1= zqka^PwCc>{KTZP$X#myBeiqw$g(SF#&6-gpg_`9e)g)Sl3Xbyp)}kdQ_j)$HQ_OID z_Ewc7gG_c9l9_f=RI()^q at g`Y{rE++$PhGNsEia1F>obcw*{1{GbD-V+>=psNjnlR zQhC_`Pd9QLBDf(@8wYfOhzJyKyE8%Dh{d>=(9=@W+4+1GGR^O*lWnA>g{9Fe#-tby zSXIPaXw^H)%ns3ykm&jILp`fBx8drH4ePoKLWD9Qlre{wNxk#Ef1H?E4IND#i9A$- z5~SIC4`!wPE7|O7TyUrkP{UGxdoJLht8>FABJ4ic=!CJ9Ocb=hkW*9Zso+(kMi0_L z9?+5Pt<|FL=$@dNhj7oBrsf7+RI-NEcLKUPD1fN at Eeohs5xAa8VWyHDY*yO>#H?uOv$Ka4h0)!@ZuoR=UFcK)LTzuD(74##hG&v;6%(0 z#u6F^*2m1w5^WU1u&)6;RVf%qeBMgm4({Q(QHMrdcGNUsfxq{JbIZE!CEgbbgETtYF7NaeuV&$djA!2AfOOM7OKs`dE2= zQqHly^Ou`_%@6 at ApcvBgCJDU}j?@;E(XC66gX7Mm$U8Q5OEKkhhSHAx3Nd at K67Eb= zbD}z?OPf+BnY&z%QR3jv~|cno_fJtE!(Fg;=OGtpyWdqY_;X#x8o0MnI=m!7~E7wTdB~xj;G=nI+jR z4wf|J;w|l`GkT8My0yyrj0oj~VmXKsIu8Ckbo0oJV5eQ~HyNcuDTjf_ttxP(_J4M7TkJsOq at Q;{@Z z%za-B$h4iXf_xQSWVQ~J#08KwyB#Dh>)z?tTnhtF~LzjZMh^~Pf9A|a}Tas!K6$v zj$D;nceb5`4=r-3Ss^ZlCS0PX(u))a{`$gLToPe9kk>hNH4gfit3~9!WZeIjSHbYt zIKFwhY at 69|Bn~i&)pIp+dH^F{lcL)$uLY#BQC2 at er-i^So#=2d5;Ru9{;SkIN?LQt zgRKn!c+hQ%pDR}$e1pwk>*EbS8_1n zt at D%fhK{{=za0qOt-fjTIb;Oa{L8^$uvW4(u z!M zn-G{*{{555FhHzk+`IKDn&fS~FZmF_xnJ=z*Ts at PoyN4Y9!!P~#B>{_-UhKBV>tpi zQ{=JbPJU8!Kg*HDq3}f~I4S4IzjDs%^6~!RgZL8bb!%GpTZe6xz+j2I`bOr=VZZ#6 zS=~O9*$G1N8^VJT5q_mNj41)fHQk#}C6mb3un6?-`THAq%C#{HY^<9tYKe2^ww(sj zDni$A%IX_Y+VQB}J(dr=0NaXz*74?IvPPmi6mAD^0uSZ9P$ERZzR=T&7R#aM}%PmAROzPeje~gZR_zfEZ)r^FB)!Utsc|d+hz2|u8B_9 zP&!6D(Nyuoolm4jX%|x3PWPVyTDQewey-n#7wWVE20ODa3Pawh#pq^1D%~Euj>PV~ z#x{*Y7;lkT5&f)p1V#J%V zNRUqP3CmG at +`Q2+K!wdH`o?F2w_Myp^k at IKFDh^O==rD3Lc33K3hLiQxBO05)&%Wd zPyg67XL0H}RM6Z^nN_+>l9kxzPWuf6YMTQG3=j(UR)R=CE**rxz1WA5y3K?@dk|j- zb<<|TqyYS7%ND}7^ujw!ZHj!lF$e;kne8EeKdN;Tk8F%$p9=!nO5&kR at MM;av1zkA z3%e{S35OG?{Y4DpSBrBmu*@S;{*2L?G1iwbeab41V7x==Z at UbYM7wmduHscq2bbNo z(T&G&bI&jhMGO8qe^F(y2jWVzVnQ=x(blI%ED=C0jocFPZVraqCXwQLY<=n3T;((SFTYHxGP z4?HB}pvYZole3m_0jYkhE046OZ8+9*b4S!}$b=ktkg6AU_ZYDb!DqNVgG#6xZX7zS zcrbpsD4%OkKQiR4bmI&{x%gdw58Oq4TO`G}8Z=s`Ci+`@&z~0b{RyfSmJl^|TX};K zDRM;}5r35<=UuR_K^!vNzgf7c>p=#sv&K!4bJL;nPgMD$zNmLbZ=aQ4ijrR6l})d4 zjSzJpyHf58cnJv_i*EJ%J(R(EBVWZgqtp-i+7hMNjilL+T-AQ#q7T$>0bA{T4eD#> zU(tz7CtG>i;|-vrrib+?ga8E^TglfV>U$4DuK)gF at 6@xjX6*k=Le$W^HN|1`zH|ys zkUm^JO_KJ_cP87brX0V+dTHtztG3A;%7JNU+Za99DfCuTb;}NTy9fUuF(eXccA7kE zgUMwefI#86Y4^opFI4pd?9J87eX>0{*#QliXMiYbMb7l6SjQ&mV-k*2I0Tk+{J^&` zFDVz_3^96&x*0}!KYDpaQn?gbC~keT5~;~dLT65brWS-GuZeG408}HfU4yBvy=*8o zODa`MGMa|j2b9Z8-4(=_g2Ty;^&cyU+mFdRP-s+>@TCk*k4Wu zS~pOBF%7@=p!nk)_wcdcT}Mr_3E7LO6rA)GTv6|ZrPI2js at M_ zeIi7qwN|Ny468~Zi<;PCkZdaMv!3fwm{(|p8+E$*N$ke?&oBQS at tz3sP5om6z~w6# z827){ZE|rj@&5M%E*k&QvQd+5Ho)>85knys9>fY^P$E_bl#?vNLE at pIb<u6k>|N7P9i=p!bupM9Zbe)97Nx$A`#3JNmh^;Tps+u!NxL^sD~;-E5u^6PWyq z6g1CD957m&YIJmSlj?LD8%ehrCfU6D+VZiDnAxF%^bju7GY%2#VK;wQetjWyplHe= z at a9FglpVJRq%tm9l(x5&V&hmcCdBBbYWj at dm1tB@FaS;(2jRtM2&K)N#1tk0Lp5!n zq=WKZziSQ%w$STP2Hqxs9s*fYd=qMhd>}T{Y^0iSEPnf-z?cFC+yIdY{% zHuHZ&ui;SQ(FtKXSvJ%LU0&#(arBE7jB41&d}O+6`LoNrEaGC#XI=9+Gs^1IN_&04M17i75-e{rN?jQT;24<>8Y;Fup~?Qbm)mGoMTj zyGGojkn&ATF}-55)ia9q^>Iuk)Y*@jge?Ql#I=;lFnxaP$;@X~+%|BIteU|sLpo2Q zPUagmqdo^tSVx?a&%GZAdx#Y2M3H~gQG&d at z5w+KN=I&cD0HLwa~gGjWYOoD-Q%3& z)R?jR2fsp2O6|MtP{y!Mk|cVN9+S#BgB?r8DQw6sAgvNeL~5s9sX<-T74q4e$2I6l z!c`)_H%>d at Ls-NzPm+%DJ;LYyiWk&kdB`=p)lBceEa7X>%Nl*Hiv;|}EAdTZd8x>N z{$+l<8$hwy?}0FL3vv4htJ@{aQ=jA|NjWEA4Ub at wdKkcNf=8Dgf$*E=UFN66pX1Wg z;XCPVqyHW#S=(m}MPI!|A?6XSFDh8|JSSDv=W{O#s_pf zRAk-Sn(RAnzX-cC0DoSyqWoKCdX;R at jj~cdYtPIkE^Bnrn^NcfLebZG*Uz#N#~QwvG$+oVd1pB8XQBGGrNios_nims4bPDN2_4a_neQSU8#Qojrmb0|AoA0WS z9nfJQ1mXe&PEl;ohWIcc9vc(!28J%fukmdNM@)Wygbe-V3+3rHv*2`3Dx`uu=&bA4 zqy6h4K{0HcVml4fDs#US5u>>1>xjfJz6;LJyJ?_rq%6O1QBl6#1lYQkpGRiX!NPo85dtQ at rxFEd zOmWCC+;wIJZNf(s(pir^zNqt)=G|Ob8MGy6vCC9K;|Ef4(K<(uO>&qp70>9w at M%Qc7X at 9$Bal`8N$>y>73Ly8G}?G>CIFh znfEYFtp;M*7dek&Iu3zWZ!U+X+Lcz zG@%(fFOENzmopdJFhF#Hy>0HJG;Nj|4A}S zNjCTgzY)0IZ>57x-B?VkKC62mw{#jK6C*QU1dI9*1d`c{fzRGeJRlnvJQ0zY19p|GDwDqy0KIn!-raBET!Yw-%|Q5Jlo~g z1f!1{PQ2}QquMR&R$o{hQdFs`=0Fg0Wva6R)E?{XVTtQs%2l5^$Feq7sZ(9p?BALu zgbG7&pQ%b>*wl7ASgV#cm7vp%E2HU)I4{UTDEE?N+~aSC2ssAdlP3FUpH;K&`Uq+2 zKhMH9N0AdFGx8yq)dQS!jFs=_Y-iZ(;rt4rSp}Fc z){ki+ at Y^!&xF*t5<3lWP?$b`r_~FT{yQ-_i*?xg``hE2erY+pR>q-Cb8T&tHS~cy}(6ulEQt9b+G$BPGMQS;1YOBkG7C6;= zf8d1&K at WQBCx+5fwmUa`IXU}zjBWL2QE3r(5Z6MsR47lVV*Y3=gq$RgI5Q*L_p?e%CIZ0ffbVJ8mkE{tSo3%NLbxM1`N&alO|n&XzpmKn;RbaBys4nhT- zSto;GK^Dc6l{i$w`Ih{hl2~%fkQRyod&CBjja~yn!WOE=S6=@Ol-)oSWDfp0=F*)y zaBAk=STpasDjjNVD5z?)L45~~6YL{12S!IL1|^a91MgVh*5e|-b$7{mz%=cQdWP~$ zHVgdxVS)Rk8#SPEgNz(o3N|e(Z5SVDKm5o<4HNR}NT+P(u%=ooWWu-fVCt}SYblRM z%N_5eX88y at Sv55@RDX|FFv=fD+>^k2C+DX=zG>ohW1c`q(lT?n>!wl5f(-BYa<+iLq&p%D7 z10T>nz(miRnRGu|%8H6w?d&ZnD}zFdp5c&|2(m`KE+eS}%Nj|PY;rM6@|?L-7?zWA z-J%S~+UQ4Zt2^iC!AFE~-k}AhMtYpHnVnQ&(C_e6q33E5=t&BDIcr0xpzEF3TcB^f zDo8rmJUyq7ClRwZ*NA-6kq{j?2;aPTfP&V-h`E7|PKF}uNN?8EIM*udwb7Um)3vfC zp;=Z(VH2W^ssM3BA)IGaAz0l2&g-a|STb7cZ^OfaL>WP;6`$oV6m)}p at cyEbRx6SD z`;ix=tjiOA;folFix_An`6pE;Of80t7+GD#d6xnDz4`V~&44~=D?|;eO}lFY`3zME zdkRb8v98USP+OwoEwe2DQy;)OOG7;ouDQTYX=1c?_?AFVY2tuj$17vL)!y=OiDmi2 zdCXj^J=bMz46d5V*RM at V79x5ZG|weT^&Utd8wIY{mEV3?uc_LU9{$`!*a~?1*Hx!$ z;`(mxt_syMxp=YyeKs<7o1{*9Uay&cPRY6w0%Of;OxuZH+#+j=muT>`VyO;r_J1l& zE-%s8KoGnjiM^LUDQ_v4_hTpXO67f}?HW#7h)zW9>I1|Yg#SKc?YU}1?LNml4eAyc z-oOK&cJ at R(btPX`?v4d|&TQr1+!N0+Qu+(;x~Dyav%}Shd=KnGWZ(2h-gBSSorivO zu6}udess0-W|)rR_RUuT&Pkrb`#k8crG_-fHHQHmsfiDn9yWezg!ued~kLvE{M6yVj%(S=6ePg^s=_0N1+J7zhPtgV zXab4_D}EOdOQ(c37}0|*)V$(^ZD%R&tNnvGGv}hHZQs3-7`OL-8sus1da>e#2LrRi z`FBZE%+cJ!%EI9vZE)BBgf&{QUh0dOAC8u+SCji+Oh|-Dq?5tE!AAcGA`efDUy+7k zPashaHMvD2nnJUpgjtJ8)wQX%ueL94GHuGVsocflRIxLtb7<1lYl^BisH!$-@|gWN z>P#DzXEp6Q9B+T>@SXOUewl7{jO}zi76iLfw*a$W!53z$fj9ovMbrPlxSx6ZnKKFq-SeK_uF%&(HTdDO3+_|?3tKaS6$Ydo&qqDxAw8~FZ3zR!^GtGOU` ze?A!HZf&eD#4}0kaf{NhBH_~+cLiC=-WS5{`5S*BA`A-T6EE#&qS>1=?uYaaf}|a1 zLLn6Qh5L{WA)0=*`rAgJ75MYF+{GI*!s!z)!{Iphj=Vjp`gb)#CafKb4*igyJ4X`F zPysakba(+8AqUS*kOvxwX`|zg>~EYuws)RbJ1F~!2cnikkK#K%SbhlYAR>NWy2ggu zMx%2mPNVgrweqC)!bi&~=}X6=a{xUKab}IW_GK07!-B|3cdVtj0i*5h#|n;hs&JSL zdV8bFT4|W4GL#^l981;p5cUhfqS~Skfjo`piWX1^xW^<-ssrMUW3Y2v%k(#Z9F6M42%< zXA=F;shONX{t57Q;hcNEXBIvogae8ZEHC>d%#(_ymwy{^24&qvdXcKsW0zE?haZey zz&v=BTjgGeRE$Ql4qI$m`sncIN{7u`T6JPx?c>@XE;&Vi;}=j$2mY#ZbTI4|bgUYZ zM61&#b+EO&vUs=C!eQ{Eo4ijIFEtZax;kbtn3HXq$Bfb_Ub^D|7_Qh-Oe!Wu+ z!!yF0bL}qw4G*mOV~Mj~hoiqSZ?<{+2Bd^o(~L3P+gn)H8CxAF+ma zi|CHIaZ5a=b+anuA>v9xgovjZb+7L`OvEzQppKqivs26(tu<3$KU_(RZ$-sr+pmH{ zcggyuw#zxt=7*I=fQ@|_k*a!8-a1E?de at AMb?g19^heTKCXv8e>7J5|k}hay$kOw< zmDD7U at CfIb?!)r;)pJ-N*G+2R_g#C4&pti85BuLjD+3sIWy{w_8Oyd_QimRhS7RG_ zsMFb59L44ibLxQ;;~WPGFLt4$!Cg%cL&Y=r%~JCCcW~(2g$XqBdgw}-3F4j`Z7b*W zX`-~vy9ZTmL`0N2dJfdTXxWpMHXO8ehoB)$vXu&QmH2)_3o7`f-tp+E at lp+mH{m?T zPik3FcZWL;La|;WsipW?;!BT>S!Odyf)6aj2Naf*is9N|M3olUE4;UrfGp_n)3};F zs&r>pBpYMvwZ3k{)2g!8)=Sw(ufCfU>Ye=QY1hV6*u&@G7*ZazsVWHq;*}2BRtzYk zr(<)dC=~Sa$8)HcXPTFdPGn`0$`6VaR+O`fDQHmP*kqdSE1EAY$`rV^Rm?0Ph)t?D zU?}>0A_o&}A}wf#$}~{n#iE#^)8gaZg5+X0R{$Ys5mi+nM;Y>Y zh+g*v$DIRg8F;h?^Q=7pkTipA9YY~xp2t}y_qgd*E|rZT!mF8mF_(yKs!PyHoLDnB ztu0rPTh1=&MV!wi+MT>gkt=A&i`1d+m8XuWav~{5gl;f+rQWsI&bR%1ys at 5jnu5ho z;*Gk}PB1q{h3ENTR9?iXeH12^aO79#c(J}mmQ?e`A(M7i&ZjC2k`YB0C`7IL(4*pd z=z<12EF(+SYJoR9OI{k^LY`n0ld_k`AM!6ITyCu< zP!T?CP>s3S!f_< z(Sva*2Mg7B&A%j3`GFKG=<5u(ogL+#{jME{SaS{TbuRE-!@11MK?v>gV1#1w>b}l^+kw-na~| zQHhmb`N%UX+1~g>G*d%J1%}NdOlO5lN5vsVm9xQk$R8|qXMRjPR~uv0p&fSlAyat? z23qA|dPWmc#bJK>gDG5n9`pxopkyqAbr0=_ at YU~iUUrs#t8YP;=lfHO8>>-^EfLS1 z88BN?=UWo at M5d>)%DW%2b0TZ~9#o~$*+^` zmCG32T#eKnoi%>SW&3g~5h)wEg5~d>cC9QKTuNKGDFFvpsI$=Mpc?yru`Z7(F3U<+ zK`L#bHHA#NT!}?*K>%LbC{CW>3YUm8tNsTT9z8zY?`<=)C4&8lBKdM zoUQ;Wqd!wCx2gVy18a>-Qk|PNYYE>d3cPLW?~4wiz*AGAKk8ImOh=P3=s;Vq zcw6s<&WTC)vTp*!T(#UL`yA$s>&Sq$y`<%vR~#vNJ138 z2BVxcW2 at 0LQnm3i0zV`;f_Wv^eVglt910KC8-Cc;nrDaOwuB4b?jDxUamGu0dT4!5 zi^?|6 at I+^5oH8-Qn!HhOvRZVTIc$l#^;BCI2$B2_4OidZ--KaKV_&a?)@YBVTrdJU z$)A+FHW at CVZSV*4NUJqE>z)6jjH9n#nTB!MtB*}+QLjRW?>;A$=0v at ilS-#uzWAq> zTj=bBpybgEaE*XQVW`>~1aXZXv!=YSV4VD;Kl-fGZc-|J@%7{r;t|k}v%{OaPZrYt z+l;Gn`OAlc--JD8yUrk=J^%R-)du)#j8fw5+5+Px*4jd;^h=pqfEAJ-gDd*`}8t at 1SsQm|yTs2|Gb`p{x1YE9FIT)e6mmg7Rcp4^- zlGizZ&-%Fh-1NO{J=(f+o)(zD>UfG#1JhKC`kM1h$0Zo5)LsYi{bFdcWiYtA*J|UL z-hsur62E!Jl_2bRNXpNi%NnbR+X25_Uq z9sjv at BOjyGEeOhwsnB0uPFP*EeEyUDPWmNbkVMHlV&LDI`b`4SSqYqX&WQXVs4T8) zpuy$DZ8C|!ro~aVP>-s3c_(=hkWUt!mZ)tD^8Tzka`N{gP z;Q8tLiDBMm2I4|)vwPy8K6HM22mXY4i|SE=GDPuG`Avb$xodIqF8|vIDuD4ivWE%M z5c9dXr#r)Ia-ciw8S at KdB}YPdQKo6H8*d^dMyXoz`dwI)W_6b zPB^)8kR5t0U?~oz!jNAP6WtJ+oV!SH`%XXaZD3Rs at Wf8P9#n43-{(VJ15#!+baf|3 zjXt!@3aZm)pIuLuM-WHLux3>;^5+R;4H;xh93F#GE2r&C%($3-tCJ3TDNo6hXx)>M zV0|wSnLxwJ(NXeHH0l~@T(LQSCf$vut>^R2Onir3n!|14v$S4VL4Jj&XuPKqwJ}-$ z_$^#Zi6wu(vq at 6 z^OAOAx3acLXlps+9HGRA?3`YzjR|KLLgUrSa?=Kha~Y^S(bbybarcRGi*zFAbcXU{yl>r0%KWW4G=KmU z-)n;YX|`iPz<%=;{VKz2d!JrPJTsJT*1`lE;>28g-?-;Mbe(~{6yaBVE={Mv at h&%U zvyCl1)(PSeo?7R-Gg9bbuW}L7(c_pkDf&rF5f=1CYv?!Fr%*(A2tQ62oqftU2?_Jj zp}~3YesJd+EQ;Ujrh1)OPeQlk5aaB zW9oj;G?!lr0yoKlnQF0w)$G^(>^lWrH9! z#5f>Sg3h8PM01p0ECyj3om&sGYRIrJn`R3+Y6)guH_#pY2p$rW5v2 at Mn@O2UnW;9A zv9V0V2Oo+N%^G8ce1^PMCoh8^@>6~rtZz(c)Z?vdLfviArmv690$nj8D at za0v(X*x zP|IB(e=_8;>FaBSR}!tEvO9nooiKbKEf|!=w9>~`EZXH2(IMeFTyxn%-F0D+RPL8- zPD`KwX?FU4&^eXUTYVH}+P4|)3YuOGx>FCR0jz<7pK|t?iexx*ay-Xfv?BT&8f^6% zq=~a^fI2wsVnlDPVCrxCQz|&Tbn55gOKvE{ zVEe7m?y4>I{~_(2gFNf9h0V0hU%Jw^U6ro1ZQHhOo0Yb0+qP|c-uHIj`KEj3>$x!# z2NCaWSvM|Y at F zYzi0wF*(E60(|>bPfs1H^1zeEYFG4dfu~E6!4B&A9O$?-krjQ7s2EdGVsea>JYxRD zM0I4@#6H`lAW8{|1*2TNq(LDV$#!CQvSm#gwqDJ$kU?cF=G97yy`iy>q502Gc9JSD z8s){U_U_`0#er%Pi!c=`MEU-wC3~`|(R(~!gG;0Qx>+T$>3$yQ at -!va*6;1ZU)p*; z)rvag>~t0{%Sy2x7O&&{jXSE&AdZ>b*lk$6AK)0hKS2dH>g^?=h(TV at f7wU_MKKhI zP})@E`a2`yzJUtPr0|0o0HT$isf{&3N*+l!nm%;Yl at HE<1ra%v7dXA96o3^FTRP~f z-Qb{e=Fim?j*qOou0nPu)?G5@$eXW^u$n5J*F8smsiEO9iCKA%2(LcdJaLI>jNzxb(kX5f2dvTOeHY12k&qJyJW4KME0QG zj1*JI9yo34m0vuDqT7FhZspr);6kZh1SPpmeP>?2>RabD4!>5;S{LkRIk%^;|DuN)Ign{cZ(>xxCYFso;)Y|Ad#t%KcE}TF$m}qjjUKjp zhU(6=i{>c$Ug^j*B%G6B8Z*Tcd63*rS!EScTKB8KSi0ZfFVoG)J)*y`%F6?kRKXMm zcY5B5vKhjfyJfItv*$AUmKW1i!Wy at CwO=)Lki7UuPJ(b-Y=@ZLb(;Ug#$?ceLx^0` zV42(=b;OH38Axdxogen!pje4^|>vX3l;0sw1(O|VMq~?P}*|GA5({l>B z;-OVWcX3&+V7G3c4{~^#mm>bU!ef`Jaz{ev39^nk~&wMy>xPi8``179J%~TRQF`T z0nbaktobm-MMrU9opEFxUqpf%+LNIc#`EE*TE6loo7!=|+wIvgMvc?f+z!&J2ibgBZY{W-BGdqFh<72z!wl(pR&PUweV5u1Os9~Walq!i(h-FG1Wn|G z1;5DT7OFE;VNKIh;eKCZ&7P;oYG8kjEOW_u54sX|dvVWI{JfuejnGr)9nAZW7yh)F z=xqmEU`Qi!M+I+qj+x93`lZ>2z&o_|qIZmrxy`PV7sl4i at xF^Y>(+wGF0B{h)@*fO zyE}-_O!Y3v(T_N9P^>rFgSi;lxGxK;+3nobHxET)q}y}x!y()|tca31RmuA(r-q&u z-zi3Q)3{l2iAb%6g%zps$j^q2(0Qu;enkV%#3evZe&f)jq6LqL)6jFtmTNM0B&KP> zEt3_Kx3JWZP065Z2p!v2VP!N^+d^$B7oLS#NI^24gX0X{;~Ssvsw=!qz33i=G3;mT zCyFREZ`iT}iyNuvw&s;q41WU7NGD?bGs_}(58slK%$A)34 zO<%!}bd6}*i`$s{a{l4j5^Xa?DmG$GkYp<-3t8}pDf5ML|3O*GGwh^n z7CJW}#xF{WZ*F7i+xSYMx}Ra42}!c2xt!Gl>n#0Cmd#QHV_TfRS3fH(Ba@NN9J*AfGr zNq6P5t7x3o?gGu>b0yoh*=71%dzp zErSCAas7|7$|OQgR#tBR56+sR)_>Ja&L?A}z%+pP=b+1}FVK;lNi3!+im||B_mbt) z_cQhEU0oQrtwT+J;p%u2$rW7x4T&++5 at Y`})G|7?k=FX0>2STVnbY0n32BQtj&WCl zUc(Zufx*tT(k$-_NFIs at hFzMa;w^~ zf~cc5Jbjkg at C#r$crxT9Mhp65JHA#1hTXTML0%rO7!plg-#F z at qstoPBr$23vV^pb|1JV%P|JsZe4FPoXL`EIKNtKc!8m>$>#1_Gi30|KJ{ z-^#YUk%N<^qo9qovyr{ye+zR|{JQo0Po&`Q#wbDDl!jA3W+}mWGP8)F0ld%*F?6v! zFqR=)#dXP1xZ=jp2BX92m!pzb94ZQf at 7Ro1=_YBH||L0%j53{PQ;Ax;TD|@FHj5Ws9bXliRi~ zALc0@^Oz0f7!B0$8^!eN61 at u%l+8mTlWKc at x-aRTjok#l9id*iZhRkfT*C+9(9a)Q zA`6bnuxeeAnpHcH81IqCoiJZa)@H#rGM${JFfuOVEVEk0h{nZx!o|;^56gEB4Mn~4 zDY)ZMuhh#08Wn)84?(b5@$?7=zsXk*)wtKQW5*8iXBwBzUd)xGvy?`XDF_NT{@T}& z%bGEl^#*sLNIrEGfyr93KS!x>vIVYmas~dxDP*ZAGJ+Vi3ReQTl+}Z`NGvrrdho&% za~TURnEmNlydGB3R~>-m9Y`9xV+At+j~c}Ss%8APU4$@H*{EQVE~@3V zvTZlw1Y6slVeb-=FAHRcQ^a?#Qvy+*Q)=G3jA42}#XN at Kl^tMIl}rY})c6J+u&Kz~ z%dnkX%aIw~CcuBZ8Ok--1mot|*U0jsGLK?|rMxc4xBqKkzkWy7sc2VMC%mM&xN$B9 z0E5T6n75J=Tr=~#XtM}A3i|XtShW6Wk3k+4D+e#sFxMSn3D2@^MPN}F9~^VNq_t$9 zt^aPYKy%|)R4>60SMEB5L8WmWxufnC{s-^!wjNNxdbmMe26B$%Kw$4XvDX4#ID_6w zi{^N*Rxmmfmsr%7+m22Fv)ROyD+{XwRpXo4J3m<6gf;Jq6+?xV{e)Z_xdDEmjc81o zSL?d#qU(rkoA0sG$@RerJ!7?HCM)_bwJoI%DH@?5y6iig^H<{y@)Be{Q;zPs=(R4t zgkJKFCd_s}Q5Ft`9)gi&zW8b%tNch2mqu!Fi&!U<5h5&FvyTcE8l`%RG>mUl2Aa(* zo%}T8$T+eK=+}JVzYT{*%Z2tC{7YS;f&VAWqJWdJv6211f#?5E%;JADLLS(xu>KIi z5K)L95($8VYWGN-f>RZ;N{++QBV3{tVVR_xMZ6gk@%IRM`-YKpl>rPQ3CZpb62jgt z_!+OXY>UEPbmyuXyEr|jIP0fh at 6P+_eC=q!>@bc&OhtWsnK%b)|JgCJT<7vJ{S$or6S_DErfu$&lwpB zhMk1hVvMHRch+PtD0ZgS(9EY}ASF(=Daj^achB%@&?hNc$W>Nm400~Y(iR%48}IeFAIpVg)GAe8Ec1=6Z at e&9qg?=t z{22bTaK^tlIefS-`@ki$&B at Xc|JCl#b(v&vKT8UX7lIg3q_hAhY=g_1)ydwibCq!T zdLbVz at b$y>Krxtho1r>$%J`_odm9vMWjRsicA zN!NjNw&!pF#xI?l&=IjizLDrla7}pO4R_V^80>T9a^qS at zpG}N8#8mBD|X^ABSXOj z`0>CEAc135YGz?+U|R_rR$6?E+St1C)nh0rHL=0&nAr20kV zs_(aXLG|neRNHTMGbeLK>AVof8EFM)@fAvw;`}Ug=e36U} z98t^%_z!W?bNpi5Rwgj7KA``)D;BS#8{_{vK2<>f6RznWidNCh_Mce6N_k!xkY7k% z1;sydp}h0`2UJ6KFj2W9!w74MFw9LWl(ig3Yeka-PU!2J7(`$tV0{wpo)~lk!C*5w z+24(~rZO^OrkB})JVu6VeFp(Uv1z^mg;2 at Fs)Q4YQ9As{e&*xx)$4O$b4W|$tX3Q5 zO07<_regc}&nD>5`;g-0JF&U!W300nRpbv*8h1kVY8O5~i1slCNvL zXMKA*TeON$(xctUfre^kZgXWi;tq6lyj{OjKB;$=0_E7gx*YvA7D+0c7IB7b$}N_v zS5Fk#G_;YN#X{FGXvzM(Nh0gFS%fffkB|^<-5cxRU8NgMeC*(j-L|F~wblC?91iX9pVv_WrX^MBCkbuh;d8z{nFcaN+5vEmJ-7wbx(Q z@>gqjD|k%+I~Gapncif-1mZbdDQM}R&y!tN!K(cICS`$Dg3c!05#=P5B9vQcQAfZQ zroZg)SD~!tTjgI)5W%uKQ3LtLjjF0%rpgzxXshc`Y{dyz?IeVJ*tLpX6r39^(WGat zAbyq|aTbpvnU#V(1H%O*t&t~Yv6Z9BQV^C9FC$a3vh$#cfvXML=K{91a6!s8H8Y8K zGQgR9It3dAda*_-cu-(wPwPrllQlT|P(R7fEalY)N$^NfCruXjw~C0jWb!pGFzaDC z4Dn`M*{#${QI*LpoSFFd2WUi;Q-qHDf2tl*CWX2A>Yk!oYlVJzyUm at myUX4#4 z{S1qLTUmcXye|%$WJ+?>MA3MqKwymMHBHC%IZPl+8}#(W9>-dnByF_``afMh at +*Gn zD4rrKVbj-$y`T|Jd1FyKlE0Tq&!>@V!Bp>fsgvR~7ZLm$P`5DdXzJ~+Rn%V+K={8$ zVA-g0u>I2#k{uTZWkln}T8~~*aUv(ez|_Lt2;C9473$>!h{|ae?puw;t7HQnHSg23Q(3 zm(ix&uC$SQ#yA39qOfYJ0f0eh7|*NW-xk9s&X7mMReWyP=oRO2Mk_aWEA!tBF^HKc zN1)=FGf_MuZ}DQRb&>{VAvG>lF14weOe47^5k_sc* z0IMdZ>Blo-0N|(&Iaw~5L&D!E(kRo&pLEndz$l({kO|yeh}?-4g3d^BsL2}8TDYkIvNyb#`pwn>1+JY2OpI`Y~PfdK8jmP!aBQ+{j<@l3%xLB zb)xuLfNYGC at An2nb?`~qhdajkRu6lRLv6L}5lIuu18>OYOv(Dgv7sA)r z7#VUywH}@9Rh-A;%nK|DqhPmQS2Ff^@fmUEG((;R0nE;9x-KZz8#8-a^!1$h7B0 z6~=eGDq{o=&3?^O+fdGv8^R;15R0_(@ei2A8wKvZ8(C2GS&^-1{D=7GS at 7rta$8g; zHw>3pa(Z1X;X4%kJ>*yH>>bKiuIydTR|swW1W#Ckn>bI%oZBEzOr6`PjUW;8>XZx` z>s`R%a6<&d9T`hP(|YN&G&Hx-rDBc3sI-N%dh>j6R?|g;L9rIMSF^%jUum-ip*^t9 zBNO!TV1rv48Mo<(;e@&8+?#NURF2t7&5QC9=G( z)%g- at xq41aQHNW-)U+fm>2EZwYEoh7Bt%U~G1aKeJ4#*cJZOHnLUAk at LMY#B#5n$wsSsNKx3_;LDn=~8+yCLYi+#=rTf|E`-Ay at nxFZ*L(S`Q zlD-2>x0+}F7p%53arE}>&iG5XbobdWv~G(X3;c!Mb8C6;>7MKJmvBhy55IgHihTm? z7h=RO!1ls&4&X&W>yiJ? zt`p|hco4he(>B#7Kix-l^tZ{*H?J$IjU7?RFkgpJ=*d_Nk38w3b!nV>%7UCMTwx2G z9nK!(pRE9CMqc}%in(QTuSz=uktKK6d=+>zTZw{-`<>7Vm4$(TF$iHCbT at P>`3ALF z3}Fp)t#@N{&o!V=+GHsQ+fCh9izSp;D|VXN?uaA&HuLeu7aXJO#RFi4v?-r$Qz zU2J+B`zXR?m>&%9`*zf;c(Bvc8uyve+1d5(6{)Ov(rUpMs1*pp`}2&{NudP42goY_ z-o2Rkqm;Vrv1y at oDes~ki61YhpdB0zfA`8ZejM}Iz zRi0?+Z at d_J+jp4C4kBw*u9WF+KA$g|@_lgT#txqm at m1$Tw(BVRiFmQ1qP+syKF;Xs z%un5*1iZPZXj&nI1Zja8{708Kno+}q#7jT%BJ5J5U3u#I{Ks2dc0^Av&goup_lS7` zT3XhM6It;1v2z6B;#S%O>6-4jIOP_Tgv%@*2|8;WPbIche_8{_Bbp#6Ej zKdk8WM5Vr+Ldq$V=Iz!_eqn0ON}_u#U4=h4=)eNP6m|3o`Bpus^d}4R!&;7XJ-x#_ zCc!%b!e#^xS~}$jO`KRX^Bee!9!Zw4!c_0?gDR?8RXJFb#HP-Y)c8(o1QnDV$cr2Z zo0Z^0h{;`ht=5k*ENeH^DUu9J=h_o=u$vteY9>_({no`J zM5V at zwfnK<73;y;=@rDpB{tN{PUuSQFH>gal#e^?&a?9jm?K|9S&c|(lN&PYl0l4; z+*r~~g&BBq&ZNjtf4BQTCUEEoRop&WXq7kCDG-Kuknymhk8 at Qms!+;|^DN7sS{6#* zzAMWgsXyb(29!x(>V0bG0U3BPpg6!Zk|(N)iBxozEY$@QEjde}pg!+*7IomoVB2R= zE{}6d@HB&%F)3j;980WO z(3Ddogy*ytS2UL7BxJ7eN})~&9*|5!kA_w_I at t8DRL~<^F?67s#gz!;oC`NDc6DJX zZ~U!r^w{rmSa at zedzExfX(5^x<55w1BS53{dSy|80mo^!m&hQKpN?K!V>o8ks#0S@ zno`!H;fYu;ex=aZ!TF3j`YFle_H!0A9AEJvH$Mc8_s at x*Fe0_P&@6E{zS2WU{xBME z(TSb#wZcPSJ~=vX;R&U%47I!Z>^r*G&xCh&TjfpVjbtwTQI}$Hn$`qo{0te={s+~k zRLf3fMLn?Ps=(@sJm*KmU=eP}c8^DKv&8*bq1LX*b7`0TiS%TTC?dLI`{a4* z2MKjfFKViKHjC#mRr*`dpN$o?=M@*p9BeG4Eo&-IdQ~%Fr_C;W?)3e;;arn;e(d5I zN5S?~)$g}AAGuCcMm|T@^HoFH6&lL=II*3yYffbG3A3&oB3-w6U-(9d7Hnws$7|7# zUG`KS}maT4)A`!kL8af?jQ&fdaph<=EZ;I zAuX~i|DZos&6|YFzeI!A$RacFlz(r4 at uMQ<%)zk2kqrdNc587$BBkfF4){F*A+36A%c8LW z)3!w`*&R_?hIfx0SXr6pkzYDum)xd&W<#oC(M6z7L||0Ep_)(D-q5AkK2Lsqr=(f3 zVql?yf5tb**=I+?y%Z!M8Z06LJ%lTZdPcCIH-T?1*qhgjlf=)xbb99W{(xDDg1fiE zWJe=YaS4myRJNC$S6lU?-y9AxPU`#1!13uJ@*!AYB?3bTctJPesYVEX?Q at NoTg}5z zXUq=0gCl4jX=8j9Bl=B83R}q}&nMj-aodTF)tAa at xIVKEr}2Z}CC~?YQKCdmsPdcV zjO-(VAv+{ug?Cq`zdrQsSdVTuT$fmxR`1c*M+L${dtmK&_U8ge%R6`l>Icmb^b#zc zu9E2FR7wXc77H)rwlt1r!cee`e*O2oY0a^BNM`TQ43?|I!~Kmk#Y#iyWFE6k7N;m^ z`6aO?Xu|dRt{;KaO4y|<cH)H`KuObD(pJ$_Gs zWRd^}ZAXwIqRN}hv`2BJk?sXyg#0m!4+9;c!@;25&TAz at o z%5D at E26BF`!j-hew4J9xdr7o}KQ$ZH(4I`^vIbmYY4ZMTAqFMb)n&WGV_l at zw-CK_ zYmlPpn=ZK9t_t4typ*4rN|D9}@ieM2f%f1&>u`dPylcc0A%1d$x6y*InciuGU0L3p z`&nJfN at adw>#-TVk3eN_Ke}J}=$?wLow9rnQdKSQ5{$dXs?$pa$<&+5fH}33Xgyee zp(7xQ4T)=jgD^){9oGxbLK7fp!q6eWw;le{(P)B|1Jo6*lA6lZ7433Hp~7 at pSDU>j z1#X?UEPC>cWWX9;&M*XqOMVQdaL=a7F{V-Z+Z{4{FiUKot|PSlRtdLYilR~U23~S6 zWS~0X9bR(OSg3Wpfn~qN at gBu=i>JTshKBhVRMG>nzF>U{hn=+OhWVkUS4-rU(G!>M zY<=kb4tj3uhdTy8VnAEdF6K?dpG7fDZ|H8xtVesG>D`2hY_in=nO!*MGpf~S9l|n^ z49mf4`(kV`Lr{zP{SMdWeO6EG?jc;AE?Kpz;t|r1)sJ)OMJ^#JC0t&0C}(rs>9yDN zYAuJS()2pbsX?U&wd@$Yh%a$FM{tfZAzG(a at x?!utj5W`a>O0er!alSr8lMFeL4Nd zc)J#-;93qjqQ%LxRr281w6Z%>l&<(#qP^NCE(Xw>SPz~>LLa*zcEsdep`@Z8HT%Mt zgX|_V9(3f_wWl(&XQLqeZT8-dyWpOF>TIVuxS7}e`_7R+Ce0pd(Kc4T%rcZDJybrg zfJ9#+ at 6!$v4(@Za+;rK1$GQfN$3447kJmlBrjIA at Ihf)^_~|c*thq9>HZw&S_;JJx z{(6ZUaPYU2M#X*5Bo3K+vn3C?dOKTSUyn_{TsM7Om|`~{o4EY3Gx2s-!FD+|*=317 zG>Ky&t7pCj%hJDPPC~TDT)O$Bgu55n7`-1(-F;>f%+a;>PNaOoWhR}})ydV-&g<4G ztk&t5=y1aPgP;@dfx3r0oZO7xjKf=L_)gI--XU+`qb7RW9Q9e at Ai}LH;8gN#DWIUeCZ$ zm4oeHa$SEf{+Yax)A~D%#|w%USmob9WF_~$16oC(Ar+u%g(^5V5O at L_{NRKEfm_FI zVT?K7eF$nc7xLx%RWjtU%;tqeFk*Z?oYs1rnfCg5d`u4%;;JKne=gkdGpip5!3Ne8 zt%fj`nMo03 at k(gxH+`(}#Uo1j(j7&~H`X#G67N|vcu{$Ul{nLYN~n6`wvVb1JN2ro0%XP;h8`vL>; zPQx=;4$L8nb?6m_JOYKJSuu}hwzhdeqfTg-WA98=PO+{=4W8w&J`Jh6^^F-h at lI27 z$g^@|zai!f#1}CHTuUwr-O*ohg3$D^D<~Z5nyR^X-^o=UVb~-ft7JN(UjmjdKVveB zkEiqdmP*QM+F25QjrsFIj-#oRz{dWHzO#6S3~c8X9NNqvJinTbZ71gmU>d}(1)*JY zleDx-=jo;PB$Dp&${eQp6r)~3Hya#FYtX->S+t-ui7NV)`eVzbB>(H*0(M|M)Jl{f z|HyW8|Bt6}E0|fESQW_8GM?)E^?5df|-ID~6D?Q?>=}!k4hO zKUV%)LMC|HRD+6ukp!oU7*I!h8unzX3+*&Q2`*T5xW2)=Cob~NmoS^qj{8e?b+0f|{E%Lb+KX=w0>f4?z)Tlb33QoZTK3c9 zunj#hd|i(h(D0|Qh081+t!&&%Z-+5^20CPlG04?#T+j{|ws5!9&uRhgz&1(2nws#>G?0p$=ijZ?)=UX%On$MxzP?~lNOeeTa%%D@ zOQt_&kVCkb^l={?_8P=Sglnh8ww>IqWz#`#)q&=KkG2}R$= zy>7&Pf)Kq=s~-q|e5!Z>NIsW6M^e712w?tnuZ85z>FoD5YHJ=3GiYA-!h3t-Z6nzi zV6wl?`euB-kXa+w36CffSPxqDZPIPvt at h*z@?}PGe|~I`QD525D at NmU9TcCn8(ldQ zK8Idr^<5&(ksfFhK981V30ytvVdCHH{6g$H9Hv~k7_>fphFYaQAmlIFcPGFfBKD5A z-hF~TMZPPE9S*#}yt5*VfprrYNf5|Jxoe2M4jsA{r^&h9QRC0Obug`D=d at rR^$ zzwrX605g}G51o#HK!qmGi)H547l~JbStUhHp>8=+(-YLQ)f!+)ZfdS%+8g&T&&Q=K zsTb%yxzpt#+Mdd#Ud7IfL_J?hy&YRDCr+wuSwx1$xgBG at D+FgDC7xA-aibNf8&bCk zv|5B2Bz3az$Lk$4ov|!!7&ex=V9(DLfDwcM5D3`8-->CFV4X7H#sv_CEyz};DFV2B zqwmo+&P at wSXJqZc`f-*;Bpv!uh*!;n%KLj&=R&8?$V^I1 at kU^kj8&hMQd1T zrZu4Ted|QX_a#G+l8v(sz^#jSr at a}+LZl1pruMpSs29f))J-4|XGgPrlM>;;Td*?w z2ze0Gs%uo{4lFT00TdvmF_#hPv1SmzZbeX>l2 at 6m%K9R|ET*Rc(CI}<2m0d`71FhA z0Q>oFu(4t7Ke9UVn00GZ%h<*Y`Cg`>5DDd#t{UHHo@~S&jH14MBgA9UuiOS)s}yM> zMSdEAaW_IJLLFdz+op}ffd-LpmL$dd0&13(eEAtY4?g>r8oGESBkYv z|C|gaDMT~oSj3Km6ci#bDi+1jsN`r~k9~lOVpKO&4rXBNoURL!qaHDOJ&k)+ZuhD& z6f3K(C_z53=4BLgXEAR8D_Fcueq!sFq*Ene(npcdFWl6$P(Po at SEW~v5QvAg`%uc( z_wpmbaJx|l;va|sX#qf at i!@|}J*h^10d|SzqqVC8e<-`%xC8MI-2r(M9TcNXhx65*iswW{!;jLZV?rW z!oVNMJ}7s3Kt4mF_#dRc-Fy2$Ut~qygd5vI9h3*Cgx^SaGKAkKcQ%CI$akf&f+RGI z2l1)|vM}XnBF_*!1}UpQYXqz7K&UiY4S#tMl+frNpod2*DZl9!doN-WC!%HI8YtZ+ z@=-X3i&~4^)|3-A7h0 at _2ZO`(GfiXQX}<&TyaThu_2jeUbqd7E at QoA{(AjSWraiA5 zgbmFV5kT=L!VbjU_rt*^ZTTI~_cu3LZ0sIac?k6{!<5^p+QiKV-!hAa1|Lo66#xnw zEp+j4jdajM;gor)DB;YchFSEGk?4q`6F(l^x%_9H3$lxS^hUALNHyfCzJ&Vo`t^$x z42CDr8>J>0=`0aNP(@Q+vc=M{Yk9Sd<^!cDT_)rrpuiyw7zJ4r;Sw9X1*h23oK`-x z1*4g^Ga4RZ7b?F{ISX!TGPz$(7hVC*93+`UC*mt1?$QMbcq#^$@~7z+Q=6(P-HvgF zO3&W!9)X at OgG}|mUWn#m<+xz at gj&Aqh?=q2HOUWMb&k+&0?QC;8g8af5}waiq*Tb% zd)Kw5!^cj}U;L;GV9k(m4mE}y!7z6|x%vb&Xn1$&7C9>q;AU+C6> zr{f7YgRSoJ0#>8;dDnOL%jgb9K*ByT!aDI%<-9-~fP)k0bagR^Fe6^A%LnZo-Qdmu zWrc7uyklVzX3kK_dEp}^c at B-5oq^CgLy0*OAu96np;gs-u5^ShSbZ%Z<;)1#u1>NdN(KUqyoWKd0XwR(;=Dv=Sqn{0y4d z(mS at 1$0Qpi`cyJAncw%6x)Siy=Kjgnc--6*LA&v;!HC{$pR?WThxF+=`W44G(?55^FNy&^e`c(rN z5H7pgSa+v{IrweAgY6$>tMJ=cSQAAY-fTD?*}=~rriDS&rky2Evi>0Rt08S;4rl=i z`$uS8YDwS#D;8mfxgjs!iFzK9e%_go>j^wf+4=1<%#qU!71MK<$4JBXE1{U7ZrCZ=_ zRDxU1TgL0#oEz+KNv83{CP(`T~JxpNoU>JN*hkV=QDHm&vtyYpq%mCLOpE|Pix!qmJWBF z?N0`8;h!8vgM1Sd9E~`|jCjQ^21k4o;+V;|f#fe3SOdjkd<2B#vQBYheI!XyqYu^M zhq>x*%$C+glhk+_s0bD0oNNR?VkMZR+od7L0xqzDEOpzXtZKE+d%Ykr=xP|CA$&7d z_AE12s&v=8FzeeHL#mWcuN>Mk%G=F17f-CSua3^G{jM<1tmCdQ&a0H$E~e3PutmVB z5aG=krsTj|e!>UjiTo%NA5>KEjAgr z@{Pg_!`rr$?m9-|xBs$lkESt7;@oHGDWTHnv2%|{_1xvEiT)N|a2HkF;H)a1PuRbY zXv)*Xoa51!7;CdT!myqbSa{SO#lXVJ8-}1+EhF1^%$ORmYG{;hex%Mo{Zw1P#y at rd*S-k_sxgKi&#sG+GO;q)1$kZHn+|daNI?v8hvcUBJRxQY_S$Jsjxi z=bj#hVQ}Z at HJHe`>xXy!Ed0ueSbulDF;EU#m9Y z|5RK3ZzT@@H27t>rTc#(d7%p6#s~XT3lYIno2wvEvWVmYj1wbb`pOlP!lq)Qsl)z}!W$_4R*YKlwxWGn!8c6oEuCXE`9}zF z)Jjyh3wcIMZgS1?koryKs~uJR)mUuRC#M^J%FFT)>B3og z)Wh&z&B~+aOWDcv^WrQf7!7w_#&(R)7y(Z>+D2j at g7=y4VcLw91rzfu0fw#k0Bh|r zDl58cTZV_`hRGk at OP3~O?3Tc13iWn5D;nq|#-)mjRuIXgM6By5Xcc$QhLU_0S at +0K zAo3*WWfq6neje&KV(PV~r%K^uxkJBYy!DnU{JZ}8wE#?mG}L!_TkvPJjbTt|Gw^W$ zN`Gh|I(R}$o-R5fI^14aAS?L!N^DK3E^G{%<$kR{o*`gi+}U664aAXGr;)Z&mz{Y3 zIOMDwQtUzh^ZF`a0e0<6)k2}FM5P46~4;$C~{PnW)b7Q#EB7{ciK26kg4hb0&Ko zagwUJ)r^CU2~aH4g1UzZQXuUzyCPK&2jU1UuTS<0e*v3hb&@An#LW=SpdTvFdek=) z!51PTzz-2Br07TiHE9bkh<_O_it~Fwde%9($0Ud2qJw2O7J-8ZIfunxPqX;g-+Z88 z?N=;M0%3^x2VAdlRVhS3-889(Wty<(E$~)VpIO11FXYc$%97KgMG#}gR6%90I~rY zBJwWh1v_>bd<=>cVf)$x at +Fz&KgF338#CK!_g4!9|GHrc?6{Sg|JpFoVE>82`hSaR zxmi2 at Wn}#$WT|jzGpCF6&D$VLu{kt8z<4~KNLlk+crf)R#*rcP?|Lr^6ij|}<(fZe z3flSKNd{re*pqzkqFC3bZ@?S+2WIvu=bP78F3%hH=g-YKK;aa^Klbt>MMuQN#7D+u zYbFP!0TN7{1oxo=0J|zBXc>V2W50-$0n}+uX54MuuTt*l)2sC%TT=uq81-qpMd at LA z{+56+C;c|_7!4bpE>|mfH`#8Z4C^BlZDXV-Ys<1OUz`!<~Y(Si=tJBj^nMu=Ohik)@w3? zEp8vY;b$4&$ey)EWwexNhOsZ1{!~%wOtV7sy4%PtBX6E at 4VhlZlM#;N?TW8I^)6yr zPGUV%N8E0a64mhm+O6(;_99ijVQ6k1U{E}L;$dhP6`-d9&KRZny71HJ8$)Q|X&}{+~nh8mhbZKdM77KUdv{l0gd-+tq5KZFX$I#06f3| z{MQb+l(`aPQVbz_DjLhry}{p|OM?zn!)ajO=6iZjB;G*$Fm?&>W$?EQp=dhW<@*jX zG1t!oI$gjmF&T8YEO?ssazEz>LFiQEhR`7;5UQ9G*_Lzo5CG<%jN6Ca=7o1T_rEjp zut)Na*jW2|Ss`2!5C=snAo>_wryDSeie2MF19vxP`?CTR?RXy?B-{CyhPJnozXk@{ z<0(Guk}E^PSb6Gfmhi#Y;5}}qgsAkAi!0Z(l at VHhxG;kz|il zoc8H(Tp16!mgq(6d7rIX^lsbS7z%B1wp{69vGXX(I at R>eeDWtbKAu{1zzq}C!C8F2 z;foqR>lcPf52eFZkrFtvFx4g#4Eoab)ik(U7ODG8tYo2{_VA`_h76_W#jOg?7FPJG zy}_oHD{=~==MWXBwlyL)r3juiB;V`9nwUKz0C9xeqfxiqyx+j&)!RH#!`M7C-eV2Q zP+T5b71K0BFOH4)CP&|6A>JQ6siA at n72%p#Kg)i#sNsKskB^4(%8Chf; zv$wD;bkqSFo+AZ=AA(-co&#GrZaIE<1MOBiXR3l%ke|cYESB at tIGGUNq%WVEbZRhgd2mHfm{) z!nwJHZui-&Ik!h at tHZ|hMyI9sTQku at 6!Dt=7TZax z^N<3+cd=83swP-#`sL&0hT5rKCY3Lp!D`ivTT0!Gp)|jm$HVTzY at zWk-TttUw!8us zUv|koB`x;IVz}r&j%63L?m2>l)t)pT{$`N=U=xrb<(pLAe~ibpm+SsRT2}w!~399K;uKKrOWiLulR`Ej+jO9O+5p z&aFe!1A-NlgY9ojO#2Pgs at 2}dWTetTsmuTgy%v87729*gfY`Y*Y}dG5 at 0|aGv3Cs4 z#arG)W82;_-q^NwY}>Z&H_nco?AW$Y->~MbnnKM%}XYM`sepw$@b=9g`wYpb# z_47RaVZrxzM9;pfU#-v{57N?ihH=+2Wm_3O_Ye8*dz}B_zoiLNsq%ij1pmZnv;X98 zDmGU3_Fn&^C=oU_a{OO(&+2SwLsjvwk$}d|G0H4N5?I*KUIUE5c#wP#rA!P_B_3hN zMhdOfOW+g~Oqt<|3aSF152Mlyln4l at 52J_ov-^2 at X|DIPiUR-lPR7f#S>sh&fgKh^^P{nNG`@Ctmp@`bFhr{eKhQ-YK9_)M6ZBJ4D4t- z7Pm-*FLDQ6K*)rtV>?1kd|wJnn>3Wh#4aAL?giRP&GLi)CtBr&*n({&h;9AImCL z$fvwhuXxDNXG1SIizkx|A30HKxuj{3q}gqHm#;3A!srB5&VISWume7UV at p{ZCguI0YDBNPT4RTS^ffzhMILNOHss zBXub$&hv~_S at pdnwr7RN=vZZhCx5WVm-O^851 zlW$5_<{us$Bu=~(*?X^ZV}F{&ZZY-6=Jg*oYTbD~6yQ90N-J+1$m`ZC{bIR_gW#21 z(&hkhzPWP}rd3&C3JScx+T}%yf?c8%N?KCI6+>~_s(N$&D1~S#+#+9fve56iEWLc- z(g0pMq3<}%FbHAMt)_Tf=*d-!!LwZNRVce;q8KWXJ2B$i+YDHr(GyHn5MHlk?{U#w zN4LMaOEA(UT`g;#Edb3GMS~Er?hMCqOLHzL++}YO#9s5U?6HKOqc^Y-tEynP1`|d*^qAW09Osv&+Vr92bJ;QaS>Y1zqD$shyBwO(XiT zJ^C?J`hV^PNGFmy@)L+JLc)E>r{+J{-A2uVn at 5V5c`4Q+b47rvDyu;rdvTauGg+E_&36=r*95nt=z<=@izcA;YqJ z^fuO?gh$f7l13TW_gw1|2d;6$PSJ}2!J}>U1egf3d zW2;0x;EfSH`}M!ae}eQwfPb+!SU}FgpML_#s@`;ou~HfX%$e%uLnx7`ijL4(2$S`C zcM at yjD2mYUMPdK$h58QNEx&eGnpuQeZOC6L*RnZ`HX4Ow7w$vZmZhkqW)kGP_lqh8 z5JMcvd4OAQd|WVtQzmN?R~xouRNLpcvEtDDrt*p|6dvdsi&&~rV=)YUADE|rg)F}9 zmN9SHfKy~3fW>z~sInwCRI`G>#pS5ss3}Tmh-vTrQ4_Z`I{B7ahB`KfY0JbQs$Nu5 z<5{DD*B=y#b-xyZ`n2nf85YwO?__ic$uCeGjtUtwY9ZG51_Y=DMS)2ivKHhqwy8 at f z1yslMe_3m7FsYr?#lwLEsx(5K?BI7jYYH zHMzCrBb7H29|NUEr2uwV%2~hxUTPzwi&$hzSC9bzhYX=~@oEoDx6qcrQJ4J>&|&IB3_g&UYAmUtJk1;mYY z9JnhCZhA(Z8NgXg0SDu?jP%%;3wt11gUqx>Twnq}6ne at wp``~dfC- at 5BTm}TNz&>% zLp60*n?=4tbReHgBHH8>b#E$ydUNh+UfD-R?Ha$)HO=d~OwtQOhKI}PJ258FRXh1y zmG%ykl1sVLQ_&gB8S(7+#bz}cbQ(684lI|m}2K6m_}tb zX>m_71>rEt*X}g+i%qQi%OrR{kUyO at rSIO0vl`_`rxkZjAV#(O0!xK!l)~n|!M+M7 zWZ62sdgPh>U51XYe6u}j at xm4EYcELawIIZFXs`NK?`Uu=ed#~qFs^Q}IKe%}A! zlWU!awC at lXxMK6Dk-zKK`4HNewU?^VtHeWyZXf!!|Hr-q3_}UrXviAXc|k|{85%W0 z8`VA9&9zmhD*w~IK6hI at VA++>N|5gbsr#bDuW5(I-#PlX+4P^oLbv`SESob{PQOT* zH|=9JnRXpo3$74*r>s};mdWqUeGU9}yMFVK$Kv8*zY^o7LW>vS^`n-xGs at Dby_Vv& z`7I6$_?qT}Gc58HZpdm%j;)RxbTXj|~>v40-(PzYx+xVj((g zQHb_VC0y{}E-6$fFo at 3*#6qKjnjM4kI;k7SEoKAtXSY(hd7{b$%SLVvI>z=n*b7bC zTkWtFSCOU;`UO%?&G7ZFh8_K10m6$1PgG0%&EU|vgk1KQ8=!&;-qiw=NbU4?K=u&> z`q)EN3nLeBYcE{Ixe|y9u9#X828*Syx<#~OkrA6Kl#EV->)8qYAE6<<9d=g7OixDzy{dvO{z`uwTD;W#*&1(~9AY`}`I>#O$ZCWlHSRb^r5b5n8 at vT%~>sYihq%U?D{(?-K%Wq0g zjn6AKEzEWPOCkaXkGAiT at F!TEln+&dbu^Aw>{{7p%^t1TtaG$QFXfr|GPqNWB3T}s zI$F9MP9sdh>pt<<&th^7>WZDBI3Zlw_+)+S9l2+$Tp51eh>QL&5xtdw81Q-YAC}RXJLU8ot_A<>IYcj^P=vN<#P1WK3{FizjO3!;?MTPTJ9wIr#)lt-o8E0o_4~%+1qOvj2+?^ zL$6Smk_nIvfpC|jLtW0rfzANyr-S}kLBDT#ac at my8xFY47=^kh#F6>57Dx}+=$%ou z4}Z~UA7aGD7jls>3V)Phh~yTaIwwnvPLLd8(u8gnp*pis9WF)GN|78={$s^1qK{1C z at RQ`wJT~5hi^M^~R|bxR()qeL}3YrI~Dz2e$b;B{<%KX7sB-?6i$+&dfZB z3->PQ;7ch;E+KRjQAxi}bfkI59C^1| za3f49e6T6|oUhn5Wra}kme>M{n^i$%gmb1PTS1K+8-$WQIwE!0te2dtrPFnZfkRQ( z{^r!_l@<%wBMzasLNA6w0X!d~!C&0Anwh?( z4|w{#lfAcYkRKP~wi)`tnEFBZ_kd^K+QN-4(9fNIMPK~4Kcd+4KCtTR)>>Ay$7Tc4 zC&uP+HxyxjrDhx-22sh?%eq4<@d=3K)%x)H$<3twQkm$~p-w9WUZP*O+CeM^tSW(fh|qH|m)5XNb-P92FBx zke>|C-(%oTUDS494rnTSL^{%2%HQCaS at EARjs3Svp6A0{Y4o6AAoft_B6e?ox< zgrUH+3%1Rz9^j71z>R+rP~()%_L%(x6z|Iu1y4VJp|0HzF#rhs^FfJNyJ*#xwuI7a zOM)aaKf7vQq^;txo8YQawEtaNL_y at zxm)_RM6VH#mayyUhbDeN{|aHfPcc^ zW>a^S;}XELApD_cBE^&%vrtJVy5N&p9?+2a_YiFhjY$jZSex(|32K2borvz3hwzvI zN(Did5zD0;$%QI}8zNnR?ih;j*dA&DJKdk|SfXQWP_{Xa5Yzleb_7`>x1?e!^&9~= zP*nr%o+3?(zy$7C+2%`GqK0K0104O(S<88=Aiv6#`X~>}j1MGJS` z8}CV$C&K%ys?q}6U`BP3^@{ksU6d2Ah4s at 6N@76Poo%xm9}&83PBCbXiFe4dE&7 at x z5|eoS;IpktgEfWX;W+=tk5W&+m_)1 at vwPEXA}%lGp{rDf9P$hQ;dU%|;tP at LD&R)j z0L#ARLWDJE!f?7Hti-sod(q~E=sfPIvyi+Y39nZ~QcyNbM0nWcJ_#`94h+zw5NXhJUX0^b?F-7A%wz}kZ&wmQOQE!~q1omrz zb%l>-H$#>~av}L;TZ0#)3+nfq&n{VaiIS<_obmC;z+t{<+;Lo{nT#qgqD942reqf( z?zCdQqI?7s>XQ&>P#G^x(To|zmSAU8880zW+)2fjAZJ(^FI7?8X+;L`Bj?onbYMeZ zzAohW65Y|Ayygp!VvPljf@^;VXOJ_ij8_BtayMr3hUT~m-ncH%8JgOoA-R-2*%|1J zOueBs&WbnA2W&u3)}uRGlYdO(&$~3EnQ<%la|wL}BJ(#I$dZ`P2Qw~8cT|fvP71uI zrv6o*e8QfLif|;Qm}^YKXh{u^JKmVbH=_Jil8<0SJri;dCgY_f${m;A1u;HBcSM0` zMlI at vn7pDjK7luWhj2u%xNS~Td+IwcgEQHAE45?dH?QHAF36mY9QZeWsHKGmCp##YUH{>ru`i#~jJ|4UVOERO;UacnlpYnV<6Y8DddqNp68Bwi1MSqYZ$<+H6 zpfi~0U)*E^&G8-fb#dT at ZvkTHxwG)?7^@{h12UizRP0)5kPE|6`Ws;D$i30-EZQf!G-Sz zf{mhXEp%7H1lw=p at rI}Q>nVhtXO*`}at4XdxYst7&eMdkUeQsri=?_}`%j+pKyIwo zveqV+<`e;q&eMPks26bAmy2lWSJq-i*Ur=MbiJl47|Y-1vS%_m{ER1;T2TAF7|$Q$ zr1EU7L}$f at vC`%#Dw%da!DzRPi*>4M-RAZBq&NxYV}Futadx>DCTSItY^7t&`&A}g zW65{i#oLR(o%JlBIvhtx26?)|?FYCHW^wIfpp=#n``40fkD``_aFIdYK@;9V#d*?2 zVA4bgo=2>>47L+b%Lsqe#(5G-W+U$hV+{Uw9kk)zH%3V-BL1q%A|yIA50^$sD@`Z# zFENnacTGx1r at GF+MsTHYtItUXnX1p@eiVE{l9;Vs*5!(dDLg=cwJTvBV`JpD>j{ly z8Ynt~ZNM?ex{1KLEUcIDm~Go)>*?>6OXp|08GXf1s$XT7&sItGP-P|L|Cv)tkk=z~ zWj31Igmav+DYkWtQ}2^4N*P6fY&$~mTj9WpC6yF+MueY*{y`<-Gx*W9$bux-p|W)|*nd$EhVI5aUTQT=v>gOqRQY`^<{Pfdav)x&daX+6Y_3WP6=xc5{9) zyQ16{L|96OxLS771s+H}qug3|)~)EZV(?;Yr5H!=c}dxpB$@$tII|6oplglv1o{WC8W%h-tiHsOd at 4+*a&lrfRg?=8ns>x`RMpw~GSo?^a*k#_* zPZG*ap8W%YJ3f>d1>wnM)Y`)c?BF(b$ol9wPejQsoIyL92yUMJC4xI;6h;~0%L+36 zA=Fxky9$g!-JEbY!2=_`=ehy2d%STe zgrk|f%|2x~w&YlZBYVYbBbqQgX)@7v?BpD};!dD5i|88SI8o}n=*r>-&ZGd_lYdKj zG+Tdmzami}6LLfU<05QhMjs!T5s_IK&9afa36lcI19|jW at thU9s23Cu|HS#C4%K8i z!f`Fiv6p)K_kxkU1rsCK16nk!janPBVMJ-55%DX#chZq`c&sKpz at I7Ht3OF zs&hJU-;DYu`5F$%kV>aX}!MYRSLkwA-)WpGRK*_e`h@*YiS2Hb#u!9%#gfHX#ktRmsu z;eE-VtnouJi$>FCOh>&4M$Cn5C9tf?drVU>%WQ at 0$<(5_h~qe^EE1wx6NuW&#keplfaU^0dHy16a(mvS z2 at N`XvKxY#05!bkxDwBRtr=6aQ94DHQQWdo3sbtZVQOQ#6whQBf;j~fRYUq1-ohdi z2BYkOi5#oAC at f2|wW77=xGJI(tMZ z#SkryS<5jps66f z*k^hCTbIHYDn=4ljCPLYwCo%6pHIGHHkHvozl{Y1$^NPgYmJ4%H|HFRR3 at obxbx{x za+W`!8`xqZUv9~cP at 1$_8CWl6A~p{mZ^y zRy9$St`&jiCP&Df|jE+vtdxkJgJ()5 zS>xSJ)sRy_I at 6NRZcLrJLN*!$Kw}4J*3=R!DN05fFS4aD(+*A!la>yrDaKZQ6Y~uv z4=CbfY{%Y)DBQ}Ph1dBUmW5DdthzpJ at Ay=AUUx9 at F^*;D(2i7{L|Ee`p3mV)m<&Q) zoCzG;nOnaJx at z_CgwidhYQ^p672aMly0=C(9s}R#xvskb^>Tn7#RfQ6M|{iIFO7f? z4Ud428Q5;Tm at EtAeR}3CXEw*mr&srE*+1O{e(-8tsiuFpV7-Tw-RAG88s)gf?F_ry zm7Gf&b&l{D@*YqJ$b}19HVa0^{Y`E$!Lt!+8W6l`5`^D$(awJJD*aH=B-B6q9lp)z z+QvC72EGy6t%^>Rh7f=&_bLsYS+{K6pNcFmpdr`Rg8o}{)nKIIQ{qH0JU#$5wh{Z~ zs^`;g_2Pz5^AW+P`eqTD=Q*HP|K>Xt+4XRTla+S!r~HRZvW=Q%vU=dz%j==EU_YD* z!SEClQ5|5anQgpzSgVG8+F9ug)a*pJUdfM)Ood9=rE2fqq2X+J`@Lcas7i96qAF=OOyo(Rck1V0e8hiD3yLo!!5%P=MA9Th$jnS*e z)3F)f1;`(RFQ87=zLOCP`z8|EL^t632riS^G}A1!F?lpa1Mw#6n!EA-!@-AuZ|Lun z6^L)rJ9e*4O73N*sr>4FTQxHz at 4&keBIiMg!(t^M*GR)^{yF!gj2HaNY=O at hNhKz| zJke8F)rqvy;E%6=>q8pbpwz;GgMe&7|0m6~pJqmm|2w|#|58o+7Y$GCzoP*7!HZ=! z=wV=B_MSyR3pyv at q$uE<7WW2jj=2R5wUDYyJ^6uoPf z#WN+&W)je9RRtj>XcrJdYi;KUTyHbFAIjO}!Itvlm&tu=OPO!1>|i?Fbn3X2Bb#CJ zkGv#UX(i)5W5b5$vxw|gev9gj69jgv9)$Y^p1F%pma5~M#iv7Ez zv^R}#+SaV{{b!~^(cw~Y7ELUi9kRv?hGmnYE!AgExSO5XavPl2CGF285*jr3;bU?v zw8{jpGzOxy)%K2#ZZm at +noH6ZA8l45#;c}PK*kVLK_j%=?IsRO$o2&}J;aw27pM1} zo4!NF7t+zP-DhrT90!Vbbm=vrLQ^02I#QCab-54k-R>;f2-h0D?m}7EptEhP at lxIK z^1|4X9aS#eNL;;;!24cMp$v>V4mYj5drzT!AZE^7U8Z7!JrKxRSCK@&W7maiMZ5qw zMUtJsZ9kyTJyhZmWflW at EFxPLFq$r}<^|*u1QWXK18D`d;(1IfsFTh64E_~XH$|*yX%_wrVe*pnib^gnpzJRF=dg|qns%6fN);cthgS6D7Kg(!>m-FVJ8=Dr~4Lfx_ zTIGCSex#T2c|}IfPzD2`iTrLEUyqTMW}4)r>3(jSp6EVLa_?|IO!9` zX){P#$2VwI8K;kKdEulm`Zl}LjDxs8yRVvr3F#ovRS3k8Fg&B<4F7{ zU6$odn1~b`YXOi>Tn%P6nIjC0pEAr$!)94*it9IBT8tG-L5Z6?MpFO{O&*--$^7io zeiN=>ndjcWC`Rbdp#$xY(HkMR)0j)O|l~7*6G|~=Lr!DdBTW4Ph4iE`AhGIEsW91eLtlWhX z?Xs%04UH4hG|%KkioCtAd0yNa?iF^6qH2tp`PQz=C(rh?plwzeQ_ zo55A(QEC2o)ShAuAKor_2*^2y7VXfFesO2tkN+OLtgysCV)-O|{{Pm#l_p_jZ)9ub{l5g!m8bqo5dDk8X at 8JeN?X}qB&Y>Y5UEIrlr2P1hM`0Q2riH& z;JoItHCpAISopp~g5yn*;p53Vw+sWAw6T39^4XC$1Q&kRunrmZ>~7CIaxguuPY zE!JP>1&wgzu6kOVh~~MJJ<=7C&)*c at rpE+!*0N`GD-JUcfn5n%;a1$33X~)#_C}BC z;xob|r%?hP5g at lcVG|bO1(bw_38JLzK= z33SaIu^xn9MM_%w7}bZB`$V}0I=ShV`E7Czxn|HTO7M8!Ht}29tkTbJ**~v^4C`2_ zr*w^uUzf`|IbVx`Zb*fTuT@#>JDp|?ylL=f`$+3x1NRLK+Kzg*#&Ww_(o!HPZ$H;;?}LMv#b{3yL$OI z8RLmYs5CRzjHIB{FBBQ$4n{FaX1EY@cgel_KEP#SjZsH_L6B+gh%*cP{Sr-` z3c-iR1fa>6Vhq8xV>r{Q7Q{>DD~Cx?v$6c at Vv8EepM#54vaAw0z~GU{X9*joWfRVi zWZ596p_E}3$I1dsq|&P9&$2k=`dtz+ z+~({1gOGUEgrAy}qoBgnVOOkadKh$VG@}n^N}FA!1*!{Gin-+SC3xA#UZ0TOpmOX> z5#4!2^BvY{c7-_OR?9Qggz1%=07Yx%Q=rJrE`4wLNO0pP5;Pn%7|LZT`E?8f^1~wo3(S_(wKU1=VuVHH-U%3Cl;? zn$b}E38!Ge>zJ^>18vuWUqlQzTW2{XWGMgJ at RKT)|Z$q(OA0Sf>1d8<7K6 z4477prBJZ?)nIWxVhneZq8woHiE< z+p0DCUaBV(+BC-$9(^jznU7|j0KANL2#-dRp*~&Slg&vU_Mrh`AKuL+sq7esj$k|P zPaURBED~8f>eq_nSZx`;ZV5sc=GJ*zkh0Dx>>yccM8rrmqv15sl&1}IFsWPfp>#Q_ z%wg8f2;6jZxK0+M7(&SQFK^;Q7lcT$X0y4n%ZN&sU3%6yHCHrD++zsM3dP%SqgQ-hE1S_!*V4cndS%MsFOHZ#x z6x#)>HrSpcIT6a0I=y_7_hvp;9Dkpbcj!;(+YV12nBx~jGfPU}yP{C$D{bGvE&KwG zTj)L&eT at WWcn2OF`x^_966IlwEUJT58v0s%Zw_Ph*1=5iEO4K9g33^hGI$S3j;FNS zN87ewN1YXb6YcMuPtIiBt+F6$AR?CBTUi30PIHkNHGy@;w~P%GvmT7fG1*Z zeR+WtLH{8$u_I!0-FihcBu=1PkfI1ubQnF!17B-uG(Go6f>@JyCE_?N-&6F=DsBTX z%I3BviuRTev-SW{VDDYM22mW$DW$_HNjl3aT0}>UCwkgE%{nQ!Ie|TB%GaG9c9?sE zyL3m95Hf69?TnAdARk_}LlKJSohwxW&AVdPehJpE;SDA$Twp^SpeMWWhRD=_l){kj z5Q(!f2|jqrmY{yN(J&d>6W5{m(*`*dOL7A@#L;&x6{~t8qL-`zhjPP~lt9MSO`Kdk zB at FR$e81{~C554QqNq)`m^Ol>6Ii2q3P`Cbxv6kP)RRf)iit0ucYEXy>#3bbKJ^Z> zCsr+%aD(btMXFeqh!M*lj>(vlsw89Hy3_^(zJ`J0FLp4|szd8Xmp2jKJcrCUnx(kU z#sWTPXPeqfaADLsBJI`Bu-+0N)Ej^0OEnF?PnqTo4QJhS;NdSBkV&G at -Yax#Dl-a_88Wlqcl6HX0e0 zyHC7PD8Ck$B^ifdG%M4oSz%wPmrKUChrsiNSg7$umU00I`15}f;%38}MoMZ;(D4#o9K~xnZrtX-a|~ePMd)itC!AePHBW#eh6{x zk?wYFiORyo-weF6UDuLVOnFvG#N;$oF=tb8!l^Cu#H<~wqU#q;Ry{M~$(vPJB at G6a z*2bQCHj0PJI_Tju=c%8e@|4XNKBi0miZ1eisZf|r0`Q9~(7OIC{@pM$%lb&yd5Ude z4agmM0O$|SsCvhV_ocK+=bxx~2kEOu;2WSB>X-aRA8#mevcXx-3tddm(^Ac!H}Y1_ z*HHCN(I<h~T>Zbp3Q})PUCne6x at 3%|4PFej_BvcjR z5Ny25uFOXBm at 9p=0FBlppn6J{;xGOK{rIy{gH1#{RmPOK1aZH)+D^Ayc7AI0+%i6i zG0yI-eaK>GwQ8IwVJ9Nq5?u+v_!eHfwU=OFL*=Fs9V~~`<3sHQS9P+ at o zrsl(PB6H-g(!-FzTmw!EC=gU(+T0#FtG$j{KbSHrJA=*wWc#fal5xXs9XEzPZiu{f zzfKW9*44R<2q7x><+Ouc!9k=Z+ux{%SoR005?*%fQ*q+wYpkZTs=p6kBG0h&c)08X zpQu!?&x2nE?+-={CQGP*Z4?xQhv1_T8Fne%A$v+ww{^qLAffeyN!Jj^ehp_=)Cu<0R_^833k`O< z6TjhL3#$Z{8dIeDQN*@j0FisbNNcY3*9jKlnNgPCijGS#c663|%rqXQm^I6M!Er%oN1;)n{EXS5c zrF)%_^WD|D4emk4?+yLhb0R#_o$xI@^JzWvnaFT;mHD~VEi;w$3p|6F=Sko7?hi$T zS(ggJnfCH-Rs0=-(QAyoR&&0PkF2d94zlE>emlLA+%Ke~H}uK6ZT?1!v9ror`z_M4 zF3~EaL0&Ej!Ve_!2V7)K-x5TVGm>uhQhsL%zJCAto8RzvC7u8)Iyu5A at ZUqaAv$Z4 zykPZE{7NlhPZi%|_U4ebni=8cu>q?EGr{JMYLt!#1~mre|>zXz<5Y#huC=|%pn%jxnTX3 zsWR?utwu=Oa|Xd`I}D31PjHTe*t70_>KwIr!_%EOa@$m%u*0e$TzC#CQ4 at ff@Z;He zX`>5GnW(QbBDi-%=$SDnhT`-Oya3HfRC^^(v}t3ea_fyFxaQ at n#$LA0!spmw;Cdz* zX~l2!>mJ<-`jGw+K$WlRTszT&?A0QyE)$S*@*w;ruZb3MZx70Voz zLz?}YoYcFR-~ko3iL426H1x+eP+4Dsq!tr$aOSlW`dbV+4->eV?%ev^ipIx+uJtpC zu$A%5~4c>6An2B~&_&LqkBkx@?M+F#o;Y?#$za{!^l8}Lh)=^yf(2yeMiq5SI z1fIrd(cKjSj*-lYa)@jZ=)U%gYdTAZ|R^G=i(3JEF4Xq(^-sG at jQ0x3bEQIAgX@cU$nB-)c0YOzYs5UJUOdy zFczJ7;^~5vs(Lwo+{a%U()VeO4hd>aZ|*hf)#<{g3)Pb}ZdT|YJlo8^f8e`w`Kob$ zGGu at Tb zTUv#$VCLA4=$!lB2AuaI8%-f{dZ8Bp$Z&(9dUF-g$h1bYjim1%{@uacOqs9dj6^lT z^|<0}sS}6G6*;gvrWxVQpizK|$VFI*GK^>2r!8Q->~zW#n`(s4PAul{s!Y~VhN*Ne z64OE|pJvFa7u$GBnJwzEue%=pa0IjS8JvYd2V)(rYfXJt?70*cRU zE26Y|i_4V%_nFLX%#$^r#a7Tsb?Y9a4f4XvuGz&Wmo0yUMpgK2#S=xBxgUD1&Q4#} zvfwU#7G}7em*)%z(U0|#J+h7ZS4}W}?!RTLA`S-}NW1crEwX)At6`*-K$e_)%~~_0 zkoDfzYYAj&&tbI9Al~-sv|m_f^a+Z;c^J|=;5{as`jQCWQH zyH_{WU2+Bw-63NttWQ<+Gsz>$21ErFX08gCF7A{!W+v-Qe7zc0 z?gCu->m^p0je=aVnb<9)4L{#ioEWOt#0W~%jX37Fcu#MbMjWdF-EK1GwveRYYggsE zjHKXkRpmMgGMcjEWZ2ixKLSUKyT7ubK47W#XD*cjj1=Aw++Jy^kOC|m{u1CjhIR*` zvy2aInXV)Sig&%h+CnR^GH}P-_!9Ihh&xnC%>i7c>B3#larr7s9X#r>h)m at +j&8tN z>vaaN`qdH>y=i5p&L*|!p0=9?+xtcTzMWU}&5R8()Lh*&hH|f1Owud6X1P>9a!>d; zwcwwe?wL0c*@kf~by!}O}dfe%eR|9J6m)pDi~^NuEK~$&Vn#ki<(-wAeBa)v_qT^5`a(4bEcz)HRqr zA&KLTkhbt(K!#_ilf{EBd6mh)m#dqjhiHsxP at 7jDsePCz!nU;L|V?7#Rqo2~>Jn;hY^_Sq9^L??o}+?%Vzn5A3~ z?aJJ+`xSxcKWgB(Z}uuiV`V<1d~F1Kat4cE$jDpd{CImEG at oA{^|}?1_&=#+NyF}) zAO5}hm$qaf#sCHaG7kR#voY~MC+8^3IV=dF_+5myNg=}K7ZnHjqY_IAB4Cp*!odPi z%9YDt9uwiSOc!jeYsogGhH?!0!&uQUBSZs0z6;SJzCk8CP^(Q9>967}+>g6kc^|G; zR>(kJ3`?CrUA(hqh{M7VuO?ZS??mzNamr-%+guQHK}$S-hQ_Y3o0r zlZ+J5IDg8?(d;?!@WDWcO9$*h_i!c>?rr#8 at xyJViDF7?Bwr`>O!mU}XX1IiL!?sM zfXdES%qb1vzuDcXTIXI`ZE64h#U-9w)^Y%;d}SA1cj6|SOs}fg%oNlVhCoTLNu93Q zQWvZSEPjAwK4fdVa%{HvWBDY`%T_;Jhex}VxWSj4YaKyMtg_DSk}#=dvB#%>o;dND zH$n*HJo4Ufx$?_z;~Vp#eBDjHx~tnLRv-GoNomQyy{j$v=O*CM7JlVnrw56me3aUW ziNQD>;Gp)!taW!1Bh{;yxrH$Wge6N`@B9HC~G=>&rEN-zLScreqLA^E*ElyC+d$;ozy1|{m>U at uSk&6}3ul$!n!uX&EF zhVP7&_Id$8-{Yj7!5dAnS7#!MgifH2nPM{{?44xOdYjAKvBVpsbVm?%BOMVss=p{t zds-c-Qog|d&o_5%TxD(u4+1iR^`8b3{=bM5{Hx8Z>E(;@g!$bwWpD1m!VMdQ7$MBf zL7*iZnhugE)Ei3 at 38c;IH)X}gdU5s$4%KEX3ihDau3uVT7O~;CUZlXOU0+tWX>Kl+ zRM7F!^l5!g?%`~d;eht-{XFpKdGX(Q at xOVU>UsS_R{&3!)KRM%nS!%d+UuPnsv4+< ze5JNeIyQk^4c{nk7wsG2zulF`e0NHVQrJzJ-=v at 7hZ88?)yJf0TZ>hY`Np*ppq=sq zMBQ;iLaWO53Pb+JZZ}Ze8~P;jMMeJkkQWtxTL=F=@{!IHtls}8bnZ`hPRG{5?ACVNv7h};W9?zs*ipO#(@#FmBI*it z at VaHuPdMIacqc^GAM!AJT`8|4CO8RC2c6eg{ zAu^=%T3q!Z-M0al9;g*R*onyZuiW?W90`$o^#k1=`k^byBFOnwwy*Ho82pF&l~&kp z#V5w)Ai$*Kg&CHxw)X+=?Va5cjy!a zn~`5+mer&8@{+k1 at rNRt@(_atvG#3pVuP%Y>1PIb_RNWHihF8$D28*Pa}IQmH?}l{V6;@*&mEt zfZ2zdJDli3hrtwEWIudlTFslC$Q#)JX8V>g!WBeOJ4#|Y%*T&Op{n`FYmI$Bxf9>H zwS-R^(~2A$cJMVUuwZ$K7*?gH!BlXwDMd|KOy5Unn&c7c(ZFAx(MR=~K1Sc?xfl?M zx-h^&%YI+;b5 zLqZ5EE30yi`g*AE=di+3oTmeeWfj7NQ_`<|?by6o6fsU-5r%?Q3W?U;`8r%3j1Rp5 z!P{J5z`g<8SM{DC%U{MX$@GBx+|oV2A`F7Lx{xWUqJ)rpHs?f{LSJQ=6w$PuWt)~T zb^JNchFY48m_{mjoOM&ya1;L6ZX;g)>=H>*Tl z`+|{KIH%h}Rwhx1cmI$lUC26GJI4oDv=qoGp9PDZE(pV;FKEQ9SSZWIqHPj;b79k_ zlmll6H0c&nYM0Lecr@|@hx6TYf&9+4 at YTy@m^bxVazBSr{ipjQY+x9(U+eP^tznq zo%Tg0JB177*URQ8I~4Py**elWY?{Jc!#ddD5|38uO%WTHA+F%7&aPuAF<98(P{Xe` zlRA8#8|u%((dqfu%5b#KqkyH*aY>F9G?`5ARbYcpGlbKJ*77Vp=k+e0Yo}^hO==3w zc)XfLtmbYl9>}DxaFr z&NR8_yt&rdxz)~g<;RbZrm5&Wgnl#&yWXi5`LfFuQDWiFY;kg^KLNV~ZS1t|owjY;&NsQ!wr$(CZ9DtBqi$7=d%Ek~ z?$JNj^Y at 8}HD|1dIdvW%g1kQ*E0zq?QN1HljG;G3+Q&@dyGj=Oe_=bDSMiD)yQ*%> z$+UO=O>)g%lEVwK#JO2Cs~;G3S!T93z3RV|wufuhq$nI|Tza0Ex<1ZIyT?d6?Y+pv zq}P|e|FePe*`0(;^dfLFc*^r`SUioG at p;*cZvJOsQMi<=57dT#0vwKo#&|oTf65+q zx4e$)GF)R~$)7Nc>7f3ZlP5K0t13CIi_|N{0Ii7BMOwo+al(CvlA1;k#*rVrK4rr3 z9MF2GXwpG&#|V5wL1;_sD)5u3e}}Ns at U|4$gV(TJGfc1n zV(*kUxN~IBdoUltL3{E_epNBs{)XGdw(`#Ek=$ZMh5hY%Z97i)!x&(5muc!6mZ>-Yke9~AlwoS`rU3nhB> z?=+1Q?BJFK2qj6*U`ZFtkowYG!lVnB4+kk6W%to5q-A2egqReyG0LE(RqaWI3n^-t zaffrDVtVRZ0OKui)^gm!LYkVoC9=CT4a|JnHJz-{@H_BiC1re`e1 at fkX%SNgq0{q0 z8}Q^-97R_MHl1mS;(%xJTN|>Z*{HFuDRYk3GJOmSWNmKsq&B;M!@S07oG9e(nfR5^ z;mg4#>v^ZiSE;;FT}x$P9vyPH^aAI|1i4mojsZG=tuWW{5`K?VZQ%4N~sdlt8#DdjpNhoV&>>OGR_JF7nZ`cxYS$(y5t%`w~ z^Y#1SS at qJPWR82I0wK4G@T#FJdw^2_ at nY!Uo;Hrh-_n+6ZGt^NzNlN;K&uKLb zcg;<`uEa)P0IvSW#t3n9YP$uI={V}Zm-LpAe(0ByJ1Y5hziVgI#I3;h^HXkIWL=W! zu46_VO)0Fp5 at L0Jg#-N65Pdu9%6!+V?93jwC%D&{&8FbZF1a|rtwZv at nmCuOQ&yx; z>{;s;6QY|&!Yz;#wl))SxTCRZ{|M*4ef_2t_E-_+fVN5yX#v$<&5NVh;sl=Eye5V? zQ}ziW?;d4h+So8^Tr-QQ9Bb at C9jFgpLH(~ zw#OE8?LxQ_s$Pdw=l&!DZ9FUU&7&eYZr%x4G$eqbJS#NR3$Yt6_L?mL-)ag4^UO?A~>8CULw_N0BMxP+Yn at j=Be+2M-^R zk^y))>F=qn(J%6AhC?e)XawaLl4mPG|05gkiBv-<|%7^kZ!dX%Lj2dMcfSr+b6u` z at Ym$XPk}2h+Pa&Z?tF1I>;8QA2HU02;+-~-vsx{r9FDJKUTK#>k`VpW~ z2SpMZab+qWB3DB4cj{mlCaBCw*tb{Tx&y9Fwaoa_-=G{Yz3qCT4Y$^$ug-{;p%f7l z&_mLX={-^~D#Bv!WET~t^iiPCel4{RQRa|>vX?PZAfZtBj at eBJ@w<&ixTK^jEaAsH z*YGUroNwOjDTvZ_iE)*pRz?<9KM}*CNvrRdbrglt1Df19z{`7->RzL%>sO+s-JiiN z{S}cZF?@JjqtT68M%w|gvBAI?QCg3zqIu##OJ|bIATZ=S|t}7izP3kX)EnitlD}Zi;iz zR$<@ITm${*FYhmAKw-bqzP`#Jqo&ivPg>=pQ!(i-!jx^S=|Hd|?RhtlaTy!y4g?+U z$=M^w*A|7q at 8($zPB1H4f_`&vkz=1kjod#2{yw5iRR54fOeSbP&s0U6K6_)-T`5zS z<~!iaQ at Y}&rC6qpPw2H}+~Mu7Zx0Y&Au|0P#_4XOQ0w$B2?;4 at TYUuOG`Ul1l6JUi z(k7NPvdke>oq-~-k=%`QyXb2#)E1|=e^IbIsK%ol{wLmiVE&yo$baMH{GZBX06*;o zHMEhQmd4;=6_Fvul(J|hB=gsp1{vtlILqbwKp;k6O<}-XdUNa|Io1_#kPnmwYz-fbuXgNlFk!S>w?qI5eNZlCm zv585@$bArcw=w>->g=K-J|@z=M%C6);cw$DAl(P!vEc-I9>lv;>e&&ePboLxpS>xB zqJut16u>y at uA+}0QgVXXH0|Nq-AYKc6uVrYScSkBg=R`H5n*5RprZA5ZZdCG#+Muv^O z0Mfv;QxN+vfS17A;>bzy#r(a8b`4Usn+Ba_SccC0WY;fNuKV}^&Cci_nK?0y?QnzB z%FzZAn2^Y8?_cVXc~(T~_pYh7BaAy(4h!71PVeP?HD0xSe6se%!NlVrGSDBdn*MZo zAmaUK2&bABXNuTa$&7)dW|Q}GR{$Yp6frLIM)={zV5Vs-s~{#4gDjTe4gFa)QcjXN z2qU?`No+^lXb))AET%b#gIJL(#<8DprVW%JqPqaj2}X-8Y+zKvkM{Y at p6+~WsMnB; zJs!DPcbv|TCuu%xF}p)|RJPZQ9C6+=kz{MNHG}v}3*H|HrS*Ve;6*yeX1ONj&t(;L zzJ%Nm@=Xz_rLRgwGP4^emfHjy;2vg~mfjMCO&yh2av!Cz(}SH5{_Roo#gWVevk?#; zf>jayqh2{M*ZBtIcSV81nR~pLWhAk1>z6B|TBBgGAF;5gTj at mMv=YC$%eq?8BFKY+4%UIw*ING?kW;*>y$azufr~7;4AAQw{owOxr0Y32Gg{#?mb4zr#~S5m zNO&x14gRUq*8?nB$AWPsB3Ea z#o6D}qL``WtvbIMxYTvLl|=R69UQCMTh)f1aNft>7KdV}ZI|t%vVbvjRGCIwvOS6r z6o_&gw4>SIsQ(Uk_p(jSzDeaNW?Vlj%P5ak=wAH2pss4@ z7X-wBxn{&VutYg at _7X`&tyokL^l3%+fdAL>5JUh(mJ104go*gy`|!$G7&;m_{%0|W zQHR#XT|wsy0tgLYO|1Hh?t|lQ7}kjzju=3f734 at 66``vbVJOI3A_+C0c#D3m(cwT^b zLsh|{WvEU=k^5MyMPDt)(~#w*17a$pDU3TSe}Raza$#44poa$XnqJ&W>ZqHS{PN6E zy0!2YW6e>$!vW11UozFt!UBTB>$4#usA&CTDlBX&?HA1oz6Ef&J zStvLxaRHEo)LkFTXT|8c^PnI~3GRug6|Iw2j^d`=34;%!IC_7!Zi?csT~EGe-vm{z zSzVF)Copk=je?J at vP~H*`H4XG!idIL`mV`l-!;jn&(c}REexNhg2z?}i+sJgYEG4$ zIr%AdC9$;nh~zOy`ZgmpbZ~2G-YkKF at Q6aeY}lGHzcfDHi(e&;BRr23A-i&mCuoKan7v^o1JIGJPA)s&4gXTzqgU-mF-O5OhPEq3V=XX4Dn%Cp&(pQ>o4Bwk_ z4W#C5)G1QrAWKD$zGG}JFQ{_H(w1jz$Z}}G~;@Y(bkDUnw-iWKpC;Ux$D+OE+ zrOws}Xh6EgPwWfnCEbI|*m%OpW-yUqOEr4S59m$VE5$e2-tO<@L>FjxPj4;x4iq`w z!Qtj9Hf|(L(c-#EqaK?KR`XTB?4+QjyYpqy;qEAxgLWTz&v}DKMAsqj6bas;v%_L2gRuc$%(f6soxyB zzqYImwV7q0pxu>r!bn#JSB<$iNp*a9ctN}AR4qGRczWq9zdB#4J}YXRBj1dz#y@^j zXPFi2JHaxf{9G1$EB7mFm;NNl-F(YNNk%cHy at AYWQA8wXtQ~wuw at R_nc|YH>Mi&^D zJ+8i6&Z3RztDS~k;3f|S*qmzx^;?XtYKR=S4R~)$Uabd^JeCi?WoJbu?<3|Mwtl2CNBK29Q~Jxyi~$#`Sj zmGJ!4V>vpAb0C4-Pk=u#4n(&mj-RYknBhy5LA_0^(z5Jvz76ON*z!$pXeKW|XCQn} zA|waECP2qI@>&X~xE|@dE#mJdxC29M^jJijdrdBk|3ITKf>B4ehJC6b{Kec1Xy*;fDJMVO3{ zc0jEca@`wQ<77?U;$UaM8eGB=R6|=(=rfWG^fW>{E^#LggPFWnudqAXfUd1Kop%=9 z4S?8L%x>91i5&`a1baz(uYDT8UoGca( zpFW!k$IYpsqmmBYFW&h(_P_~F(mf1IQNQjW8T at W3s?-Ign{Az7R;@; z#U4RS27r!)S6c<(pjzUEIF{6cKkK~RjohAj6>IYWVz?bADDEZHFwfi=`fl5v_R|h8 zHbiX>2bM0+r&3*4RGAhn33Ju~)>5WgL)?+u$Fcp|ZMc7eQ);LOC;50g=Kz{hP3 at hD zfP?W?D}N(Q{ue at wr#y=nHVVgBcrhn8e9!~CY3FM8-nnk1VyVt?EPv-<>ABsih7E<#OR9Kz{$#MpeO{KW1pf#?vv}h?niOTX%BK)6>%YD-zwF{q} z7oQ!orm7;e3!lZA5yG#aPtKdG`Zf&E*C2tzE{+G&ZWcRN)9r~IKfe!9|CrYS`2hoD zw>SG1LV``@5LkyA#Fx4^UqS-?hai65!Q(KW)!}1t5#I9=YCO|HBWrh^K~&#G?JSD5 zTQuBkjJs&UDU1(IcHWWD6VcAz=&n<78r|~Y3HKtLnte9*&TEPQj!$<~y9oD8#t>D2BvBl_d z7h%wLCgdfqO`CCdmFdEQI$r4cTZ#s)O%<1_9K1DF#xm?VW2G25?DxhDh3He#f at b4+ z?FP%p(qcSS)aeF4i7sI%T9%VO%H7k2A z2rdi;qxKpVE9_xV`Z~ut{FQ~dph)rxj9rDYd1mXH$cZwQ$@g(%(OwPghPtdz=Ek-B?8M)}byuCc0fVHjVKcUTniDgVt&+vGj)+2=zQ|Ue|&n zbp;x`+6L1)?qZHLQgJg6m44RC=|MpykX^3}h+`!=W9>w;;u(XIP)r at 9`YE3y(voiJF)Gcru8psJ%%O4BB6!;5Ob9d>++{cL79aWtE!7J&Ws|-5XarLaKE7 ze>1r_?vBCVIq?f`w~=Z?b-8}-Ym1%>?sk__pZy5F|336NWS4=6e9vM at DQyM2iACzw zfpPJ+Tj9!LKOuw!JtoDLZFEuN5jb%b!y*#B+qEZri_{eUbg6_kmYb!Fnw^t*UpJo+ zcy-TbdtIfk1A$rRH9=}e#2(G5qju57U6Xiv5p)Hee)D=#%q^ngy=$o~@P-rZUxI)U zQY#8&ootv9HRgnxHFg_fq_Es-4Z_HUW9%J>q=>$9DcT^TP^h8QSvq5|v6N2HU6^ai zPxQj!I8F?2)<*!Q8hNcC`krI48ynrG^`DroZ(LZP^FxP`Ja7c at acUuAP6bg#o6-%D z3!NJE;VKeDXl#epIAu`cc6E3o*m=Vq?DK)r{$V|&#vKiti`AW76zkc!f; zJT~NWk4g_lVWxFPfXSqLfj6UYb&}OFX<9m{m5s=#ioJtdY0P7@#4gNh?@6bxbp)c= z{=m^`vL*{D}6$0a#2OAQpB at cp~f;p~8g1Na*?5o4L z{j5?sPWeFfWPMV2j zrESofw~S&5Ii-4C>V+XPb?bww$*~9_d{yXC#B+WMQo7I at bF&lso82;6ovzd(tJc>^ zgJCwPzy$$UV_h^VZ>e)1c72v$vu}jQfvJWFacMfFHT;>6RWA_W_b=A!=0fMHLdkL)7tN^HIAcBQ&g8g9Z2X8CIAGCQe!O)MHDQO<1YLkUurr at 0+3#cWAGzD5?!X>E-%t~ zSe`%hYPNw+hu$dL=TLhDLM4rT&@G+E{&*3CBb> z<+CAST!(=08PI{493&ZDVmwOt$Wle9HUa+Z at PQEkwa0xfyo7auwNjdDqx=kDwF(f_ z=cK504qfj&#$oGn_tC+Gx}jO{3iT4qE$T3n_?1>qFl;xEg>O2Iy$-^9!*c1Fc+56t&~|vDphiXNk>;G|tT8q_IOgohSWpfUg%dM%TSsrDyG%IK_Tx;RNlV3gpXj$z zHsnlQMp=jc2uYVOz=m{j2ns&hv3i!NHRO! zQ5uVC^=I|~KPXM?Xbs3bY_Z368@<^lAcz+jG~y-ki*0ci=Z`>qmH39vxeNKk?LL5f zlP8Lx^Z=qct;|2nW$Kxi?@XNcIj>CeMt1=}FH3muOukc^lSXG~(``R0>d^H(EjrQ7 zc$}wT at Ohe_5ks-r?!p*+>lnaU=lG>@b8qiM7wAb58R7@}Ul(K at CKmRV{yCCj0s*oA zA2aj6Ta2wzht@$mLI3fasBh>%XuoVnK>$}wIzpPI%u6io6$a4^X#JHhIaLeC*ghG* zrkTI|*m#yeU@?z3&u)>FYh$zlrd%j#m0EO`^1d(Ekb7;lQ>6QRt`(g-&cXCb6>z2QBCkk;F8IfQp8Pe<) z3zG0qKO?9CZ_ at sji2lnVmT#{wjP97Ci!-dG^A(E!oX9%T&o}zPN2iyfb2UO9<~7-0 z9`-fbe+I@~tM>%Vdpn3>H%b>o59QVbSP%JD6<81T)&+P5>NV8g4(1i$Z`W~$54?kZ z%SV6y0phzmjM(-_=x}Sq;k!TFVEefklhbzR#Npf5^-+Y`(_gdo8sonM^NJrdyS}!F zX93Sr>jO98#&*RwyVclXp>8FAaZQQ5f!zshqLC6^NKb(U@<9SwN45y1zehEMo#TUp>zXL5yhkF!&Cpt7YR^@{8th!naG<2=McXQkrJl-`2H!)#YRc! zpy1JVl+2o_N<0Y!_zCKP;V9q2iAu?YnK$sM&bo0dWKHIhOZxV4Lu5u03*y)?C$Oi@ zEvK8~25aW(BTc^>s1Aq5><516{(MklT!EdV%cg3({8=j1o);4_%M5o!vYg>uM at dDA z7#0mVnu9jcu~omCJz?M!yOXS_O#{h`6kWYf4&H*sP&cBqx~zAXM at aL1Aa=$nj-P+1 zO=OZHE`YAWVzKTqKf+$ydsm-A&K!sRy&x)`ovA|K$y(6U!6sVNb=}6-!raK{=ggRc zdeWfe=_(nPGIwZh8MaPDp(2!&qDUKvo$o2;d}YeNM(KD>W8~l!jlv=;CWe0?0e4%T zqend at NhXIdM^&uQBGyz$khFouPbA$i(~CndCL-`0u^LnAzZ3Nes)EdSihe7OJhLZH z{2ko`{n`=kx0^%!J=E88rw2R}S8`<)H*#b^wOxpq z1YJJo$w?lkIi(jr1Z_KOvq%!jO+S>JxQEcI4aQZq`< zJ8B>fXTdIrgi6aQ&tGCEWHP?M$QPDUEFe+IXfXDRluEnn=<2X}9Wn(t{`=ukf7hXNQH-K(~_~aApXkRK_ABT$Uf~r)+RT z^F^zHGJZn6SCQ7Zn|+tl+rIh~gcU3DK-tot6n{IKyD1pst`-s79>q>u)<_p*&YvE$ zdV1h&C5pA&@3+h76D6qDN;x(K^44^$o&m=q}%FZ^^~D(t}u>CXYx%=H5KT{em(QPL)mclYSh~n z9IAci71r^>Jx5$rrgt36px5=ptJDF`)G`6OH zTzP}TNjU=NwAxWv$D~;VxjQ`DU*WZ9lTGjsvwALS-U?;sVO9&p at IeQ|RBjDJOhij* z;Tviz>FG$x=T#=qyjVsJEkk%^ZA!@UmmSL z^7Ud+=PZ$9rR%so`umIwH1sRjCM at V1NZn*fvsN71Y1cDQH%Ti(M`aJ9UrkfToe2Sm z+?9khv5(O|jVy`{DK7OnRyC)>O|FkAU^8n0w$&_xN_Unj7);%|s?Ppm62HwpSP%S_&$| zHn<~aJYmc2h6|nES}>#B<2pij!UvIZFZ at w$`}sC*5Nkr zbjCj8itx at 4F;#FNj%psjUN2W(FQ3}ZJ)72hYi>3R56f}q^dBF$P?6p31}e)QV#@mSR~D^Pm-y<5|5cI;*!Jf!ztPnJWFT{goWQeU;|*?wbL`8a1zMR8cdd2a z;I(cA+x6*9334+E^?giC3vY^F__< zi77lT$ee|bPjyFKPgQ+t;NS}1Uv<(felR#p5>c6;7+VQfNwVX}0FYNxdeE*Wyw;%h zhtU`@8KoHOPV6@;)-pz*!pL`#g3fzW6zmycswHtF#pbPshJlXCb&Qz7T^5n%qKVQ4 zVj+sSxGCt89TuBXStCu6aNm~WEluxFh)G$$wQ zR~-HO-KNxRG0(g=%VU#V^Ftv3 at DsGvc&BTIiePAR#`iucNcg at 1Lj|WFZ;t~S%EO)M z%&q46MgZ-3{oR#x?n9R1n;>-nDF$^zJa{+4C}&px#}e_1=)Q;%)XpoA)Aot?UyKdM z6l_~?K!AYA!T+5Z=D+%}{>%Bdovo{hvl>>7{^k+Yu0OAEH<`HjEo(SkJ~??{5JQ`W|)}+Z)9q z(sK^2W}KOB<-*V%g=}UFb4(>({lqi~+RM1X*W^bm`z))&`eOuxt9if_&<+iL_x>ER zQz`>|!+SmK;+S^?rebW?hXZFRP;5l0rxq{dL?ZrjkYKCi=tgrGHe*`+Q!cOv1XDn8<0Yes#IY^$7Y zhwN;oDgG{t5ZWin3zzkDW9&7ZC)`!D_ff$THbSn8R-p<4P3|u;1-84=F>N$m`c)3=|xI1;{|U>7Q^J=8{ObGJ#Wc;0 at 8e4 zWl>G#ie+EnwXaB>j57WLnM~@1Tco)B*3c&jP4+#80|#Rch3Ndp1rl&+jgNof=g~pc zD at 6aq9yJ&c5Xt}9tKT4hi z0SjIeL;R at K{Z9twxHAIw6t zTPl-r!8oH`kVREL1wx$n)aX|g)J#NF1{mj4Njp+eO4l!r*(szXCrN7^<4#kU6Pm_E zQLie<&IgJu7e-pO?e2TrO3}Y^4=LY%!RZj!zM&VroZMEJ-4?;k*#9 z8Cno>Cmt5DEAfc!TK=c(%2j){TkZGU{`xgeO>rP5-;UQ%5Xq9~FxiS+u5&sO&HGcp z4GsP+#_t+Nk{|dR#LnH_q?w5uv*1qG#)SjmF;+!Y^`}cj9d6?GD$Z;Q?KtMCH_$8 at Rwsx%u|$(ZL0q9%%J(hxe#~(n-4Ud*TXFO+B=`?X z;1>r_NxFvaw+z2$YMsZMcPHeq02Uwv3;GW%+{a(a?y%1X|p8!gRzYM!C2J)=Vqj%oz4Fk%=_OpuS%Iu z9z+Pqr=a9luK#NY42}_8xF=KHKpGYbjbTAvot8@6D?qnNbW at 8rCn_;hAw4 zG6Id=%kFuqGrgtb<@x&)L?5$4angt=kg1SjSDz`k2nhgPR(_W;(yxxMdG9QaqleS) z*;XB+T}9nOrA244S+Jui+W*=;KQ8d=RHu!eyWa-tkCQa~oGqpo%vSxv27or(XADKl zi(fh07167fQ)b6IWH-4}S~5H}1u(KQ5~W7DHp$G6ua>uYE0Cw@%5cHGV-nvjvm z;0prE+ApvNS&U;+i@!s2bzP39CQXJ%{#QSKRzHat`@%G+*bSEvn4)e80h?Qmn3_*H~*~>^S`o;|yXR51t zn^HG&M;n<#&@_qtDj23=EJI>--SkmNM#Y}cJ0HkKQgg$3{+S0JAFt^#uj$ks!e-z{ zqP-!mMz2}_+^~6%VFXNW>~@WIO-~K_S{>uI!TAXk!?wx!k@*?sUdN#jAb_tVCAFi)fIf~oSz;^bj46&IHo*xIlsJfF%anv5*U z8e?M;G7}Y?vbYOP$-k*^As&9SSE2Ws!LX|MXlp zoUkgFe&ZymF5G{($Is}$#LBI5`l at Ak6%1{+o^<7j^acKZT_Q=ei+62ERt)` zotbIq$?Ll8)>lq at jR{*m_JK9Q*prx`C}e~rp{K*bqOl;T6ZH#=lrSF_k0@>* zLF69onnXJLH?ZhE3c&&N8&38f*BiI)F4-G|u2GUVY|d at EH>BQOj5p at aUC?Hzsbx*W z{GnVHv5!=TIkBCPmC5BV_;f1E;^cHkQ|fe!DVYn?b;boiy6a at 4RdJ4KdB24c?sRU< zW^6;D`q|TbHg4MI^}nnwl!G9~PydrC1^;h_o>~4A^r_e={{#AbtLeZDYoP+81Bun> zj>w=QiNiqx#V#ho$4^MQ=7S!Ul4w{yY0V0meQzOO3-DgXrFoQov8=Uhc)8xVzI=av zJ>m9(c3uPr at q`*%JMUG;c(vL|EXOP2az$e^+Zur+vFpfSKLvzXz_MTvFllt~j-EP( zApCe|6$6XmhWx$q)(kdvVag8;oQ|Oj3?fs;b^}ydK+=#I#xl4;Jpi at b3WWv=@1r`y8)SZMkT*R^oG&-wX@%+?ByK% z0c#yZ6OgfIxr}RL*>YfdnTsNgnw;0;!fClGSW5SYIPVuo-dSsq<_%VrY8YbH;GMKH zgK!5;Sk|7S5Sj*Jv4g&{klUw;(L;KxnAJ%Bf>tB$zL@ zLQC at vM#K8h|LA*$F6uAM8eBr2^7{W7D2fqlBq)U96wF9r>P6#=Hc&oXD;SmBth{Lr zG1#Zt9EPf1aibVr at Wyw33`?`Q`GowhIl+tIWt;#1yY<5IzgjQyxJ*dj|in?!|+T(RSAvaBy^`le{ zb?~G|dhN4w_h!7vd8ic%Ic5RiG?EdyohiJM_6m8_{rD#xD&)75snMJ48?#hgtKf&7_HwJ7e9bCyf$srTLCZFzygN?>k6|A!y!S1Vl5JpgFuH$NWfu{ zwZabwl4G0NW1uwJvR!v9lR3yP7Ft#^%>{s=Hd!v(y3WyC+E}?+VRo#3FR%Y(y_kk# zn*x8le7x~rcTBXMWIJ82U3Wb+%^(nh`-|?Ef{53t_OY!3z{TxtFscVw>K*u+o#u!R z(luLwXOwbrX4Gm?IjF&whK9H_-RZL_4&Go6^((L$c5D7d+0x^|Jm)5rJTg1$v5&Tn zMbq0_9~U)`o|-m(F?*t=1?Yl9-U@^JoN^fX69vLV at Bbp%pgv#+Ki-Rv#vF663)JhC zHtt-6t1;d)ac_%OAAJ?Y#=O0x at o??{NpVNVRCjWK$6UF$Tp4rkie5;Y!Zq$x?9040 z#kNz_r`jGb+#)}?f}u4_*bLB1ypzMeNxZWKSKH-dzE;S^);8HJ>!t2gAO1konA-V3 zHy`p!UxRFQSLh3~PmS&{@lH$N at 4piFFqUUuwXebMnbhGMKIET1AOjvLE8BX at v9DOtTS`EUn8)xDzKb%8p&+ at Gjka=sy z+J3YjJ_DS{~iTTB5H)Lo0Srtu4`O5RD5a2aCvHswN{qyU95WSV~r?A)O6?x)p zM&?J)__G50hx}k<^PLCtC;raQ{Sy`Zd0)WfQ)Sq1>@_|52LL__VnSq0G}ccV1*d6@ z0xx{rPa8$6Nokr;1*IyJAc{bhmqs0>qj^YVT&c03J$HDwWOu5VBCv<&UcuF8C2=a7IDn!39Y0RP{wpn`laJNQvSQ-E8urwFv|9mMp>r3(*!KnB}%FS#9}Y}$5;E$aw+p01uh=`}u7YbSxg1Z}n<7#Sn$ZsEEA zg1CEu at cD|DC3k)hm=+d;E)GmoD>1>vJSCvkc;$RzMV+36RP(BuKaLOSajsLDJkcCS zhW5gm!$#8`ERSUg1NR&)v?9kI)d*le|3wm}~B(V#%%wIBc)&QBM*kpG`XrH8u(CXQoAje&%5g(ZKocC>8 z(=ml>{tUs#N8`iKPyzEyG%3$CFuSl2P3CfXUo9DQ%xHG;w@`pUO^})LTEpyR?c=Wq z&r3q(gSVXDEWY`zdnd4$#&=O2yHQ;1Vl;5w8KMZ|(A3`zw)C;cx^f|P3mCw%xItQG zfI~20suYR?-n>i`$Em|@yUnxj)Y1D#| z8+Lf+ at IYOuyAD$+Z5UxNA7w;hMb-u;cw#_s_&{w5y>cW;0QY!Lof)vrD z?bG|aWoNsuor~+r>epB3ysiD)pW$ayXGCxfg#3yG`&J3q0s6_qSq?)rlpgWI576%1 zf!=rvYvE3bd{^t3v&+ at P2U`=!;frU^j-bMZ{<;)QNud)>es#f@;C?2FL$1~teZ^~p z_D#M^VdX2Hp>#3OP<;N823Gc_p`$xE?D3shBSJ=ul#eHbMB(bbf^IXkOz%au8mrC= z+h>mtcs=A05>i0v at X$2RgCKXIe_FIUbO_Lu;3>uO}@CKPtXJqlO zZwIBVUm*MuESqB%-7j8Q=R`&uhG?DSFfi27plVGj7=3T)Agd-IDmJqgO#>I8I=FDQW7t*Dt=fiU4+xFRRYL(g(yTH zxWy;$O6N+d&C at BU0%+!ka%(jJXHIhHb;SzkwqiLnE79DClawCG)moI%rfpQ#KEyGs zTH3!!)f5D1nDwt{@39$R=Htw9ca*sBU@&F{%-J)F0 zoaZ2W$%U~i-%UZTYkxrWLo~lezw5nk;R`Hry zO)0qrvE>oFJ+$qV!*B)Eo1`CWhDdv87{*jpah3PqGE~GUe^~DUlYn0&Ve}~>eFPvY zi7Ua4YS$#KR+-RR)R^G<6-N_$iK1gR&Ff7cKY%+&MN=`T1I+hb)b)t_Dx+!FvfCa` z)%R`G^@dw*0q&`+=aKr`+3ts+Af^uIKI)r94sut&R(P+Bzg<&k95C9ISW*_W&roB3 z6-Da;?D;M{qMg_u`<2i=BN?mq6`V6 at t}$N5O(JMKqJ7n!2^YQkGaI5IM~;w14irtG z7Ds)CUw+WGbLaX54At;uE;uEVcRq}sr5D9FB?6zc0Uh{9#^~=|fSbOh z#>krAL49OPsy9XWKD(4gK at 43J%h1~5M6B>mICAk{#$i at C(VH?wflcjCReQuQIMLh?hJi;jWt`xY7btS&;is0Vd0P+Ps~|2_-9305OaSui at E|Q8>t^R{jbY*FBb!)qN3N7&cffiy-3hTTYjHSD z_=FB1l1h{+7P=_svd?4k3+{+YPVR>nLzz!#0CABamOv51CG<1m_zThzzoFa)CMJI7ab1z}goUU;nC0?>IxVl;1GE7fLH7--v4NDzbBi zLB at Huh>!1 at Ps}Wl3)CZH>_?YtWMT#-K{xk7dZZSL?az6$lSggn+7|GwYb}r&diyJU zczb!;xReW+iedW~Zr>HLYj2BG&C=deMg?{WymQLErj)9(9+EvYQg^vbXVMGRU73n+mu2vHDn~xru0Vp}(ig?=g-^ z0e4}ScXA81B>8%tixd^6G4b5FJEUw1ULp;dui0&EZ|k27zfT at --~D#UhqE*C0jCxU z%i at cR`_8YqUx!PN6#_g=8L15l738wXmv^C;NtYJo5k(`;iMCMoNAzb6lq%0|So*wQ)VzhI1VoV+_^*c2uJbZ&hPU_|cdeWp_|#N3&-W at 7X3oefzR&n4HtvpweBF-7R=yjdVqAnlkUK_7Lfsz31k+W>eqOVk&?w8s6FmW>jMJesG{fIlnkrq$wc6+iS<{B`gAxJ2> z9SJliiPh1(=)}5FAX0=PIbTMK{@1#IKpd~Loy at fRsu{~>?0vn2M6R{x?UQOW8l{7Z zEZHVNFM)X(+86b!Xssnw9~zOFV(kRa>4Nj)?k1R-6Z)y at J*6U&U%>@2X(x0>aUUb{ zh|EU~%atw8+fqVHFJFLL{tsvzwl#2UEakHd(FCs7!hwfGLr!gk-3aayJQY$SZ>2Wg z)XA!%z at w^A7pD`1mbQTNr!1)P2-#4|#XaZi*Jn4UPBy5Zc1RwcL;LV*OfeL~mqail z0qL5RdRNIYmsLQl$D1bC)~vu*+OgBQRgZs5cL(X62+8?j_SUli2LQNxZccETu7HcZ z(u!G)RGK8^k%)ET<*|i0-fS(ok#gd;G%V_RYJb(RPT}33KPL0J83_-{<`oRpp{>-% z=NplrT{=WtcbFmUG}1yUqvCO~zORLuo<)E;12;v6goJleXHv5Q^w$?Ab?;t3x9JgU z#Bb5nxLEdMn)dk%cit-kQsO9%WDEMwbN#+96Vd&dfcsFS;{oJd!gtxiyBx;l^1Bo| z|A)7roIV<&eqYr$npQiaN{QaI;lMOfqI~c(Ya3XvIGM0Mps^6>^nr`LPQ3v5K7`K~ z_*V*HBm%!g4YjJ1r)p3m9x!YW51~HgIW)0|9!wU*z)pK%sGoKeGj1&mqSaF^7CNjR z!}{41+1j=#?A&0JP-Zuw)iUz+1Q1W^RQy1y62uj*Smnnj;Y5lN(82*wbi`DN&(0e* zthUD`?%FDOChE1?-Nv03Z8WWIcJ#hrFrFgjt?B+y(V4%rnNOp!^*!L~uVAjfUSKy^ ztK71l&qU0Km(FAJ;F^u7mxieu5z>VP=^z=|2I77}A&Q{l1*0>`Twy{Vt6R;7xg*bX zBiroi-a?oS6Xhc8gx>^WGlW~bGWa3>+*QebqgX~8@@4M<-+{zF9&`x)0FLTGx&FP! zQi$Vm?vzEhTX}03L5O0pWGfilZcS=2cyNo*BkT6f)uqk%Oc3`awzE{A^2X}5v&!bQ zNJH_SO^d0P)Y1B-oX`5yY0pEL1|jFB&-#fMP?V744ijqdL9T36tBZC0M*K;`^Y;bV zXrI|=cbv#D)3lKV&Xclf3aKm!C;ma+cKU-sw zGg~oPTHtgoyl`tIj5zGg{@~Fd2w6iNhZn|rEKwv3^(e@%ute-}sU%Ksig%XsTLrzb z4ZDF&@{;Fo5ClgnS6(i$$iKlN2&s=ES6-*mH8%DxngwM)BXbcjgT;gwt)!QkhZ!}c zlZWks(NC3TKnVC(Q}d)zgc(VzL!H}2m*eq+P$sj`NS0~tk{PSkAP!6*qcWd&MXipD zNfd5#l<|y)R-?*|r?bMy^3oOnOHW~ktJDX9>ocT(C_$x;Y10; zvYp*eGY*@!qL72v%t)N`QkKj!PM|{wwLv?nxbi3JS}eUN_W-y_{;lN)E>2N z(5dJLwFY{v#=TfYw-&BgEZ3Svw~74GvKRlfZbpBwtdn2-SqGk$okp#;;jV+NMSJ{b z9a+mVr at Sh(K2pq8qWh1wV-CY|nwD&36YjZp%ZiQ&RVAfl4iDVb)w*$AHASXSKZt-TpOMq%=8xY`4nP zl9@@180}JYc#$Qen-xa3z=zcqURC{)j!j-OE>6qZ%7V^@o;?F&=?oW`0_v6j-_nAI zcbzUIIM2A73#^yrGOYHhY~*473cTZ`*TVtrr+NUq%0VFREA;2mdP>h{;iIa1M1{a*+ujt54S&6*`g`aIx;d?Ifv;8FBF~l7zqzmn+IpPQOJYbs0 zGk~SuDpeh!yzI31`ZnuOL9pL=fwom-y3{a(?%8cS8eA}(r!iZvd{EBqUV41c9;!js z5!RG?j<2$tP`KmWt)j?oN>BnRCZpO*Jh%*j3>{#z5&Xa46$4T8!ws;)cJRuE8V2vyq)7FO&Z-Q&?3#`UN?$PkUX&%Hl!S_M at -p6&~?}O#s zm2_eafN6(9-J~cVx-wzdB*v)>z}Y0_7(j4l-lTL0gB;mvl;uP4jk=EjsNP1t0`t)X z!26Cs-e#HwkClOViByOAFQC}`9!^sM#Y at x}6t>3aBXu8aUZ8-I7Qjlc4?#Y|;3C_C zjwt&uQd;+?#+6lufYu~L|__+P~$UO6fX24F|W1+I^zNq%vRRz>% zo{iv`X))X`&wh))$l|rQ1nrmwvHMYeb=!94<2B|++hf~>yG?rbXT*(AoGx1Um6#5N zB^Rc at j7m!cZ)q6vmN!$rg^}d#i{Lm~Z~!Md=SSe$K4YUyLXPXmSfffpPMH@{!}385 zI^qHPtz@)L*ei(v*pK2!z0igtLV;jGQRcoNhgaB7bhb|@&EcJ0(@Y9EFOpCEKfsI9 z#r>h*L5h*Vy4IZE&;>(q$(N+JjQ6vw(tYiNmbZ?XVF|lmXaxO|+yK`WgasP_S??8< zl|#}JLc&=|7+FviRS|Tw6h($HgoTPBC0n5!>t89&YLt$OVgju=c&#vr5A8Lur7Y3Z zf{a9!9xtg1BYs?smBc0K3?oU8sTqo>gkFSD++d? z+7da{J(OGtJxz$6ycHs$Kl&akL;F^-cqr2fpSqonge1O)@B=-6peRcumMTBbV`tu08)k(iw?Wa%1Dr6)jzU7=M2 zn at m!bzM;M)*T(zKO9i{=1)G}SrKwWBMTC%{*nY0ieHNgjCx at FeCnyLXV}jVqdfJ^T zrM_NWjX2m#1|c()5af<_eX&FZ+tKej$i&A4hxik%+Wp$4ddv)I__ti%s3O#XAaMl8 zsz`CZq>Z7d*}Brg8`q!~DUqtvcE1rA0nU_)s}`IUL|83Z#O1-0)wA{d70 at Hj$tYF|vhHIn7JQvBZd5fv zM!5JBCrWu%AAuAp9G%-_8$-f3rN;>vts!ik=t1llFk)S`-RBv4Qb|0z? z{VkijT>Aj>&Y^Nw-y$~jc7>E3;g{y z^SJLK(M=A7_ZZxLKIb^@UpYH!VPa#-?X2~qglxw+$TD`_{n6V4Qm#l*%FtRj^EPjn zIou^KK5 at I9dHuz$rGa~$6Yr{q9Y>9pa?X6oLWgLqGAULfHe02tyYrBxIzDMW!WcWN ziQFg7si&_K2>dNVV)s_K at X)J;)fOwC7pkmwAImkbF%qpdozAh<;YWpOXFUx_LWnmP zA=^AC$KLex`@igf`YnV3y#fLRgbxk`ME;-pXa7&wwSTg%BC0Z4*zeS~#dHvKB_v at b z8caqtrCX5VGR(@<6()Md9Uef`_w{ZhfF(sW&H_UV|2*(=xa4CPgv9VW26ZDeZJux)W`N zM!2R>Ery?P&9RMoCY^L9Y9s2v`od at VIjochC at 6kX&R^#T0pIbxoDDR&v1fxGYW_8)aN>E&X`;q#xI*(lzX<9LAwL zcj?5t43)W5+NO=3dW+vQ8@#Jtpdt&6g+f%#XRx52&Q!X(eWYR0+{k0DMXH*=xdL?q zjyLjeF})X4Jk$U at 0JETj(LzE_2YKPaj^Q2Yw7DuBaypf4EcqfAmCYTh{}ordS&WaZR&L&w=G^Jp0q zhd&i3^cIw0k`a*5WS1cr#+N$8-V~4LOCXUsH0K*3y@%%;RK1ty8+N^??-}8ELlD>{ zeIpP!fPE9_+sEw$#a}Yu7!PQuASx8Uw zsBN(<^QZN1SHV|E=J^#z;6ka8WKc9F>FZz&;}!5P!-n+%jBBf)KtN=$KtRI(9}Iw^ zc8;#@F6I)(rf!Zd-emtRs+e1tyO=we{`U;xvc`rBt~e5ZNsKwIXz}={*x+U`N@*+o zgu;+~JgQ_=lrWcq9bUDU&J=0$^G}yL4TcCBD5cG6uU-C~0nn=GkQhjTK*e2C6}P#1 z^EH*S7IXuzv#YE#0au^*X{jHAUk{8xs;_KOn74nBvRHDm$m)&KXO_tn_HpKBnmT8l z)5silDRR6C0ul%6z%al};@6+RRM5NU?K;ovt7$d4*~y78 at gzIZH|#jnRd;3F7oB6C zy3{v4aCuj{Tw-$gblCW9CBe at gEM{!~=Er06lOUo~E8(U-Y_v}NU at Oy;GTv>!K$(D&6WRIj5uEf(dv)+ at 7~tIu@! z5GYLb>IVuhI7bc|>tVno5{|cb1jZGY>Bm~?7!i47fadWQxtfZ4qOCUqR;3trU^%3P zWg+G9jx!5ah7HJPbmZA{*3M9#%xL9ky8te%IGKl{*7?g)UGvKv02xm*+(9XoH`EjGrG0eat(1X zxs=S|nq&q;*ijkG*#nX&>V9-hksCd2WOpPI6d3Qf`S3XZ+$%O2){KaS%@BnDgfTxboyV`lh~z zqkLT!lnNp^>kU(vp1I?cD}#|9rkqYFJ^+3hE(j*d+~F790g2D|7R72>KO!k-1J7a~ z_(tNOenj#Me~1X$oX_sRWM<^$;P*s+n= z>0N>3^&he00t$F6a<+$r!evo(w+FA(w(HfxhHM0KvgIeGNyeo{s3Z zt$p3r%S^yUMgF4boV7J^^a3S>yOPWBvB!4flXgl&+QlQ0?(|M?a!~9n;#&n z363(#5eH>lLCAs<&I<`!SP!l at sa|)fv5Ntr&JuE#Uy05Na*7$nz;mz4G0xa0=5nvf zL9haRv at 0hgk3E?NwSYbo?3Cr)t7N5xx}2^>(jvP788UiR);!i`Y5Ad|*wb3A1v;2`v-{j#Iqj}WOM{wq3_Dl%I4Llra3?vw%VZEmoEjLNcs_70q zH5F68 at tIkUG*;=N%Y+c6R*&DZJ={pKii6L!Nc at hbT&6D7PR8N0&cw7(nQOESG|*;J zSDMoHw{Ty6Mo at ej)7ne680!ykY`0Tvgvo zpnIc}9*~1G9-xCa>{kc>c9I{wF!2F(r0IyaZSilX5(zH?sF%#eSD+s9u%XT;$2&BI zEN!Ec&~C-PRJez%A%ne>Emh2@@np5wNyc!PiEi%xS|f#r*&c#t?ycL!@1a%OR=tJF zCcE6QIyLKQ*ah{g+$A0S8ldQN0w+8`#V(+Eg)5+a1u=w?phsEf)bRP_<1prLEFj!8 zI(_^#fQ at a~%*fa~&Nj{-O%0n;GitNm9WUhLn~(qFT2%UbZEvq=5heJ7`lvg*Wuv1F z-kEmB`CZ&H;q zJ9gnjpe+lL9K=d2jqf?wp4n9VdASW!i499tmhy`Jb=JOnxOv5|pBD3Jl>L)cX^c0n zbdIuIy(*2gH)^^j188dXR!cokmEp`7Q at p%eyz?kgJ+6gRWrjsB0{pJQOq4V9H3f9) zw4T^a)a>pmInJA*xs>^50(73_s1VqkYri;@(;hATbymk at _Z$pVV3o+ at VgFR4`e)W8 zXo_(N&(`_Dlti)!*$iR_U?>vUp#M<*BPMRLp at Q62WA*^=8pbwwz$=hHkF z<2(HTx6XXQ-;U#DftXzk{Ixmn0eOE)|N2Z zad~V3U)=RZf$R?5;Ii(-a9EkEm-id;pQ|i{_N|R`U?8A at zX_$_|4~$sH at E+rO8&dp zp!$!E4{{iJN2QCDV9=}zh3tho at RUhP+X7Q*!yh`04d~a}R$^0`)X5#^hkwBN zG;i^5I^6VGtlGqZ9>GN{ycG_SawAP*Q+9_aK_n?b>Ny)GF2Rhn at H3Hm+nW^e0a{mE^s1qFU;^ z6=lz>5IP76LO~tUZqhLg7{O0~B&|4zuj+8PVQysF6Z9NWa{nH3 at W8r!kZIe3cK)I* zSt~N>oqw_D#oc1k at V}Fwkk`gc{GvlP-A9oNpMh1$UL631N0jFqq8N_(&d-WsfeRn? z3sk*_vzjlktc(?FVT}`$05saHtwn-j^H at T%Rjz{+M}2c3ken?}Pa0sw`fSEb^c&9r znqC^kJvAy~zrn*2eh4LFibbgD$OqYI-@{Se)flU8tvH6*L0xeugnp4ppUsMuwwq!Yy545zJbTM~Tt{ zh8YD8i*czPC?;$&2zsj&$=U`@d=J85X)&97^XVG!F*fJ81H3uf7RRze)7a=Rq>lT$ z(Ripl?xMrE$f0OZDKbA#D!fdC5vxP73}f<&kdU at r^o$p-4I>F>N_59)&d;67i zx{Zuyn#MeTxCMW+EXFby*;(&yWS54n%+#~huQX#xH~+~c9bv`S2okm9TngBERCcpn zh<-- at v#7|QeulQ#*Ka0Vsczl8^E}WYO+3lQ_wizH^HP#FM4T16zdmS(H1i3h at R<)U z;`|qIs!x{uW>b`XZT=kjkZuIIpy7!XEf9E{*^Fp)^!>`uF^fxp9HhFOfTYR4X*jXV zaf#>V!b4xhvmBtebEY#5JK)oxW8-GnPY%1TcM{oFR7m zuaQb}{1HateT+yuYo98zuqf1 at i50d*J|vx0sa-f at RzI|^<1rk}ty4YBJ*K`dFmV$Y zg+Vh^@{^7;Kz_wJp=!=Ia_a{h;Uyj3&qJP^&;OJ$_poO7G(TZ=F;seGIx~!ZaNN)5 ztCIF*F?HuK%stw%xW{bFzIT|!jGFtA8?+-o2!NK`;neM6o9drKn%i^1YcNXEFpUk% z(Hc1am%Np=qCE`!uZK$fdolidAhEZ-iKCr at qnm`IyMvjyi_8CDJmZv_6o#45_$r8l zl&I7|(!itQRH7I9>4Ni+px3gE*;$ue{sG|0#4 zl;q6AQVrgn`x5Jaa@=x!wOQqgMY5Qt%wDY?CCZ0F!>;x#Xy%VpIAOP{A4jq5E#P{q zXX|zv{KAP=>a=6RT8>Ku4>L5DB4X&n at A^ft6 at Cm|tIgnQTdI^kjz>5ESvsBOT$;2@ z<$6UZ+?d>hJj;y-DYBogBG2R*<@~z)jplI*fxj-^|FC|+_EGT9Uo=Q%$gAZ4 zH!Okue_#o7ia5e(e;}x6(M&HK*LCctgvp(opqXVhRuee}?Uuz3$|{Vpjh#Hh;Yg{! zQ!?_iy@>L^O0xTaO>BIbShCi#Ui$tXwvImx5rOPX>0{9D2 at Jfv&i2qn-$T?E0`70K zjk~H3;x$Cp76T-i4sB$hRpY$cX}jQ#o`{y3eh{N&1blqzy-Pl|L0vI(@?mITov3$= zDX(#vN~ybttXhCnjqI80QHmNQNU`FcCQ4dvN>L`HQEw!p!NGM4>tgQ!&ak#p;Eg4e z6XIga()jPzu(tbS0!-lBi`N)aY2l&>$-`d~<}z?lpqE?d!^55mXM8skI&9+kX>r*h z%Jq-Gh2hpv{jEjr)Vo+<5Y0M|pem^i)v(U$)n*)r+T2JZD94rFcM!2WDCi0(*pn(E z)Wa7{bw_WXjWJUbO9|)d!0 at Y+j&sU>6HF+iY}5S#`QRQY;K_2 at g?D+>$I~{#VHFK$ z%irVPV}qEE^A=dRs$~J-l35|v|0(i$!BjtvrwQ?CL%zpnDU_RRef6LZi?UVj>)eQe$`~Rcwf1!VfOWyh~`iHQ&_4>t925VKTH_As! zGHN6BeS{Htu?7)glIW$WxaP1pJYJU-4R6}SN~O+SU at xkX%TY0O=*%4Lo6D at 5>H3rZ z?V9oSl)=e28HWL&_~*7-08xAo*;QKO{!q|x7bM9nsZ=Q}kM0txySdp?!Q+%DsZRsH zp|okSllEio5d2El at OQydnOs_wE=Du5W!Z4e850NO`ejQeo;xKbwQd#^$}=ybWCFs_ z)GGIbzzF|*souGi_;;cTxGQe&xUnU+xemhn)820j zCX^r=2bZQ$WAX!In`}Lo({g1VbkXopldrK*+^PEGZP994c*(=$ZCk(4YyG`|YrbAVo-JjxSDDNa0Q}J(U_6CG5FFI1 z1!?nd7)E_9 at T`XG<0R<%yzSod=UFqDS`lcMvRoVjGxmC_>+i5WxV+r&$9VpxFvtBpCn2{B9-y{H41vGh}Y! z7WN{3#LWzU;UPXFU!|G(OUTIhm&Xl$qaXep_L( zckt9p4-7qlnEGDOJE=E)r!itJkwUZgMqCS3wihiL^1np_VhT__&3q5<{u~RU6yuZAi7%IkALa}$@Nc!enwxkzjgVg<;@E9#yN4i+*hgm_UZ%Ik%Wt?og}`<0D9cS4E`uLT80cJ#|vua=H851B1&LIv*PPd(tm7Ug)wZcXCVCZmV_ zDo1WE7n*84K7LjSH(`ydPl%K{Mlx(2?M~OHdYG_u5K7NaXWH5fziWluh&6Mq&GxaN zin9`$x5w^U|dVU_Vmo5yf!nYc}V#0Nr zw8Jl;A0rA)Q(Zmpen>t#&QX$WdR3V`$7YQ#QdX0`Y{PG~OcoBmtctNn?fJ?E&htFL z-dxBhkazj|fjli*ze7SCOc_1yHEp1?Vq8`8jYQX5x~c<=7K?RZ&PJWhC@$JutA2k= ztIh=d9IdB*|Mx3A>$@?TUy%}*jP-Dl)DgLklC9~q>a8w%|L~3aC-4uoTT1jFqqsDG zf;lr?N9MMX94;Rn*;!-Jy9g}oaxe<)W6y(>Hh#_uHHu60Rx5Q>mbl6??J~lIiEc-3 zE*dVGTxl&iIPG<$O<2n+6RDN%H at xOV_a6|_{GrZ~_>=|o-%+^6xS^nce=FY^ekuZ_ zEi}a#>{*pVmBhmvtA-fxqMfQmkh5IApQ^`2GD!5Q$1$pDD554nS}Tn2sxwJk)RJiL z)&6GT6_jP>h1FC at VKfZGJmPYy0JlAj5jgc}G|MWJ^vt?w?qDpA=uR330D<~6s%6b9 zkpS5adQAr~XZ1dwb3KiWSQW{n+8**zbfr?5=Cr1GSt)Ph<2Iz0mbg(Shgt?qFDOqrU`wsj!(K!z*%K%ryXjF zN2hfM`7fMbkCDWJTKh at QOyk8akBTxAG->NIlEuA~?lJ+ap(UmdW${ ztv at DmQ(f3z4_~4_7v?Vx;ql>f{DXqkdZ4WtyldrY(C#Jox%6nJTf;dIq!0fD_5QHDRk9v zK!0G`r)bbLmb%&9O{)0IVF@#$s%LeO1w3J+qStWM;@7a?iOLi0zZKPg`cnF1&VkFZO-k55TWWjEsuG~EK zEi;D2t at jL_n}L#{s;*r`Un86ZEosGR^9r5 z4qkpF)@|Nu8c?QyO`NHH6d#5(CVY zLhw4`Q9tBhLHLvJ$luAk$AA1;?NOM2V41_th!+=TBdoL_fjZR*f}u1Ovj{6j zDIAAQx{t!sPK?#)vGj51RN9+0Ha~SWT>i3VWmCfLm=*PA5M57H8XyqQ@^&3*MRhY) ziqpLj;8ir-_Dg%0&gpV2%)vLvRXA>6quj(ru>2B$*S?UDD|~n at -nTr{4Xf=?Rs^Zd z$t6BFVcA2;Jbmcv3=m4Lr at Ye>Em&T0`li5!Zf>buc9nnkBjE7)$1hRY?-PINOWtJ1pRY)+n4oWE-jxWgm(DGpRX*Hhc?W(k?l~gR? zqr(sj{}4qpuLoiZy6OS(t?~N!$0PV#nYMwv-45Dnq0S>WfDZZQl#G#MP zV~^|i;TSsmbAAe-v?6cAcf2gOT96x*JbQ?5y3qWLjk4|SF z9IPw-7ai%iEtCZ+A_1A*R_K|{?2cUIH4&c*`w40-O#O`*CUGT+p61V!M5U3QJ%!6% zUgO8Es%bb-wKGHFluJL>gI+DeFCE*@OeGtKaM zB9M&tQ+qTGa2=RV)8H8tjJ?4FQ$3mh6s|@hC zaTN7!bG78~ZU*9Z{+5H7%ehTL7N$l5-M8>t0x?0=T!pKg^6qJXF(hP&&iW$3 zRR|2K{_WI&Gp5|`9~vMUfXCOZ_`6)fdxz zUA%b}o%abOAH*vY;vVXLUbdZE$TR>g?UWQiT^~81X%Q*W9x%f+MTHmV=OQhQr z>Z%RNMM-vn%l;6T9dFE`&?5WR0hZlWfhYb9htTo^+HYYbDcqJ7uD!|+i9MuJpC2S0 zV*Q*%;u8SJgU|q;|3!62 at 8D2~ouf**bGsnoE2&dc^=62RKyeZi%h=$M{~M*su$;Ls+o)ci*(#gPiUm7F&I+cp0&FB5 zNGb(9lDj>{m4c}K$ZSF1p&iaE%zOX_ktr}1bTql+NrOzQLF9%7TnQ^+y0L6`Q3dGd zrfdPL_KMct*cmlppw!Gf+C28bDVgM1(6C5A_%>}p!BH<1h}nrh2js2*xgWz(od at +* zc|MXKR{wy5<;wTJ3~qS%p9+G400HfS{U^e*f2Cto|0{8E{PzN>s=nhQ6I$=KgoxlO z1g$CPsF7VG2#JV at df9ETkW?N;CYD@}xb;3<#%PpX#rmr?-!15?a-=O~slAbkMpbX$ z*vYnQ!quPmuLDY;p1^weZVo;QBg>*OE>$p|j|ftRTq=`U<)Mz^p{sl(D`H`lBY?CN zG+$n_N|KzGR2b{RT1LPPeM(;{8$o=NTcNF|fQ4RDWAH4B at q?bCoY6&a)i&k0B`o;x zoba2$9>DDw^0a;)7N*#5JoN+Tep~LKJC#G;%Q$XwJ=!BrB-_F8sGNHoE;mMD>TO-T z5l5!>=%2n_1aGDOjNTqLXN7K&M4SkcUQ zELa4DFyVTp1D2Z}oxj_4Q4M{*WW&c}yB7 at sAG1Pkl+~|?_jj4Z-Ac7pXv at W#3n?kK z;W76tH!N!?!_qmS%Mu7P3Y?{s*^9=KuZTSdHtZz~o*SDPG=CIuQY58Kl7UV2VSXDk z-S8>CW~(SQtz&uhZCyxztP#$XlKS};7U$gEdeG=c%feo{#d#?Pl^ZCD9C$P)5>1K4{*9s$18i9X}8-xC$QgqFd$YJ9yoyV9#KxMF+wVw>Md2DnNk_-EnHE#k4BF4qP zDrE!*0;2stY^VHRjAOEjsK#jFJJh|Zg&;5_R5G33MZv+CNc6ozWi924KaCH5Au!D_ zEz0RGqvAjC2i)M6HcKO={@X8SeqYB^S#PfgR|tW| zWW8Kr1c*9Fw at Mf0SFS|`=7G%PTr*t5TvJ?QSSDcDC)mTW$fMw+;+PWp9dw1XMBB=f zooU=vSX5RLM%L2MWMw~pQdnN2n*+CnbpXAHDX6oR at lh8#7&#dP^4Ff6nW&1)ADWrF zD|4_c6wCCpQ9kCD&dP=l1>Ba%_t6%zDkrX#7SdQx4VE%!xX?0-YdriH-l&B`hBjR!TbY*p7UNc;z8!^9#j0Q6MTw*-WWVE z{&!ynBC!Dn0E(3)mWp&V(_)%wKQ<>;TOyblGFzAto<=GJ1_Rz-equ_Zao~BQ2y_^P zXaMs!+Zt4jN)=fK*lV3 at 83wFNJze36AV*2mr;hrEU9N4i&Yt}S1Oz6^kNU!<^%K>* z$iS6;L-#WYgL$&ncdavS-jQ25D*3D}#R{s~(gkdqwGb1`1L=4>c03c3wA|yTkF%H1`EPF0L!P8^5H6kG<#0*$ zMpG`PI}jjHsy{#`P<7aa&R22R2XCWlzat=|^1OpCpnkapH>9>dExhBY5e*189f@#@ z_Lx*~L;jfIuxP7XW3iaZsk3WyZ?@00U$on>*kIqtU+c at NLl}$V$Q9x&!>5eOIK3!i zZEt+r68x7aDzEHhWeg1jl!Fcg#Qbmn4K){I2Ulxz2e*IxB>!ky|98hiE6PyqH~Jrf z=ANuERB(K_-Qc+L;X(u~bZ~ZXlW{q1H7F0JD*tJ|-K0HuZ&s~V`4oKDGmCtP67-)EfVA4*)$93;b{tfR-uIpT{@$RF>_EfsmJnX-G7-y$}`!n#8v^EJ4B2-Qia#PQs^NyKm}OECNlWkuh%o zs<0o3V)}l{D;j8S@||_~pV;8MSGt3M_?$&Pzi30h{0PI{J#1`C^x8pga9k&Y!Nrb& z;R&Go&%aN{23s=Es2Hl<;^kXbF*>^@1%&sN0VS_Y?^)?mq^z(vn|t;F~CM!a0{J9X5wmbeqG^lAp9r8JiEn_9SLXI=bWK<$bU zsSAb6bcgHkSI%V(r<8D9;hOFHwP3x#FS(^}40$mCR)@Q&Ytj_dHHEZkr{%+bhwSGxuPM+r-(2wM;nNAd%E#X)tas$#h#yC zq>5r{5t7MNzyHTNAhDSQ+f zG|_Tvh>Joava!XwQq?TMMv;8Mhm2NO|S8SVDNESqe=ii7+=GBcXu{eHi$0 zGlZjqo8D^Ubv_t-e3-CezZ*^2Wf3MGScfvWum1e0I+miR+`NY4F636)M=?uMZgd?o&H7Jrpw<;eQm&zHojKd#=y^AVTz*biS$HxX)G`&|N&H0V^ zi)4R>>MM{D)o*Brgr=qm`Thz{%&JZJV*8iBg?y~KDh?*oS2Y0th5Ww6`2UIt;-l`j zN(~`)>JB+{3Jhh~!?Qn^yEAX+1FBkcG9Z+BM&I}br#5bCBU|=yk!;gqvW$ltr5qc# zPPZjbV*(=scbb5u)cshO&gvNtuXM&Wlj)iq{N>8b)H8D!4yh!2mQri9!L at DLN+A4iss(p)j;qA0kptHElnlA4TzC9=`&4h-s at z%y?+X zOW%RjnMa=CL^xY{Bi>r=@3;TSZ-u6xe1?(o_ko0Jw0=@C3$2Lu4!-u#=1!fV$NOkE z at kLn;8RJi?8)jL*lSRK1Qe#W+f<8a7(kIuU^C>-=lv;UK?Y7L18BUVSy4A(n3H*t* zLp98(Y!9CA3r0 at pSzRcXM(4Z`iT4IAPVBFk&a0$Ew{8!?hAlh?>8k9zY;p2r489n^>Vtkoeo9DTtb%`R@*+VMz_%%y!ubpKlLg%vW{*G at BwV+omf;y` zks7h<2Ts1-_>wzH%l=Pyi7>B_L!UuKQ{td=!M?kskS at bwBE=rMxa5QwbbB3=gAV`l zhUsl8bGX{9W!8jL*W64)|Hm!K(vK&X*HIwYHnVynlHN{@{padV>X8FO#w2wV|xkLZYJ>*AKRRB=YH z!xD?~Zm1%q7e%{|nX!ws6~?nsRnw%GsJZ2npA!uAd*3G zVgKwWN|nk_6_H)#4u`snN!>lAGZ@$rpukxyN@&Uu+(yVc6|W0D%Y>wJft17zR3ze{ zf|P^-&3B6?PAfeb21u%iC_knT!1o=X2==GA}v^TDCctzx}#*YzsSi81}R^|T2C0J8XBqO~J3L`j$ zKKX^_DjT0vn19u-gIT{4>fLM80vEM)8C1<#FvlBtd`e%yDIV``V5Bx zv#_-$;(orw0C6KrZpFTV_f%7sB`D#Ll4Zv|F}>`&7lhRBfxd0CUx{@7qr4f(?pJyk zQm&v}Hil-F5>g{P|Cve$H9 z9`#D#NqMjF#CnrV9AAKAbXAjUM|=Ngo9yoPZ=F-g4r12Lk`_Jy>gLL##n}BPyD)kAC}WzPEI>3<5Hv%Xl_?t; z6tWVj?;@ip+u}L}@A6_SRxO4hC;k0h*g9;^W#s9AxkfV_7>^rGhb~$AVQM>1Z-$Y> z)slRblHr at qI-roc1BX&|S2g>H#j(B_KVOoTA%h;a>~150aAmlwiIGI*plKo5yc0IU zY-LG)`Q{f8F#nL{K1Y?}Q=A9qHd;WA)#Z5WO|tswbJ0ZqQs|6LYuZ|h(~0XrdeQoK zzk_57YDVn+i#XglmnlQZK8W=B3m&`+OKo0W*rZPfQ|q*zL{{oKEYbx|Gu$!f*D{&?^7EtvUmxas)ION+r({NM z7Mm`iL3pY-)=;W=S1xr#6pmRuz&&T5itN at u_xvR-yGL3L?jp8d5*5=L4Q)%c&W3i at h4D&c_{3|x5QH0 at Vn)o at X zIS#h8Ly))3*=k`nZAwu{#_E#`_7APXjzBPPSrJQDI6e6(P^0_J44m;Iq{Dmwi~=3F znFvj2+vZ`apyZU{T~&GG_4}OJO3-8c=N)2PKfHXZtylDzA`LS->Vl^iO0p3x4{1^G0u31Ywl5@(W#KITd}QIY#n}@N zgCZSBvIV5r_4J1|qMzm*?sPb5XA!-XJS15pO#GdFJIl!`5%U8GNCo7- at t~FM{vSYm z#s3Y&Cob`(BJj-%#IHk8peJ+1Ko&9-F(+VAt)Oc^SS212ctF?C!YBwS3gI8;@S?yX z&8u7UYOp(+>TL7z^7H*+ at BhewR);b`Qm>${{?mvwT19Z(t)gGeN5j=c&$IghG9x+V z>B3ZL&1UXYe5U$)ni8=%Hc9o1v2U%qQCM#^c2>=G4ROoXLY<$YV#n3^^g=9UcKz{> zW0Mb4aM7&}3|yd!D?KTphJvQ5*QL|x(oov~djsmTAP3wYC9Q#1CUA%6-;f z`sWH?!x&o(Rxcm24sP^TU4~p%yaAAIwUKdYt7Dq*kXuf}paAb_f13)gKNSs{RcY!UxkRO)Z>>wiWW z)n2u*S5SG0gGDE5F`^k=)&X!*{mlR_*HXek&h&`V2n zG`a8#Wp>|>&f^cG5PSR}%fu at 5@We-Mg>dhfS zcVNx9J5~5k!rR8Q9<NY at m!Jr?mf?LzP=Hqy=*6B-VP1;ExWSY z&|LRvvfGf at u%2WRB;@I9uDiq>I~;0%z@(>QB=4Lw7B`bNj4T)kw3Ad;hGs(i*j)|; zcfz at am1IxR*(M&Y4cO3N=Bn}3+gbw7#3iZaoczc0mYtMhz> zb{Ltegxl=F%nUZQj6ObsUKR>*)(qAbYo)^7Z&pgI_Gho*m*7>*jN|Vb9tGh|osn3j z+HT^K@)qTi(Q%E=JmMe at BuQg|K1y;`M1QG5CBs9ZnH-j6!osCKm{J!F_K6-NXG>E! z#P$^v{A)ht2d3WCN2{T9M(R<&!1+=exZy^W6GZIP at l=_NP_pt5z#>AdkUD?&Y#Ixc zp3{=REJub|QZYM5-PTZ1~F`C^QqQ)(;q!BSB>16085BKK%Jt9EgDs&{oh zWcqe);lZx=e8BK`g}}ZCdr-WC;a9+dl!8fc%9ux%pP8WM-tG&pu&GpImYdQrnPgl7 z4o6CkMBq%NgKLyi=fzznENF`iM4RSA|CmtdF42$+uRJxUB+mip=46O4D-9{6IIyZ^ z$0f5^@0$z2o7DpsYWmH(La-8tTydo>4z$1<`o*2YUz^56^_B-B4n$rw2|KW zm)JY at bW-i=k|OYNiZ&!|lzmp*?yz)g&W~7GU-ym1Zu9E)kT1SaW9J;YZ$bp8=Nr<) zlhTJfFw~?MZve}sDXgGU4e1Wqe!}dRIHyo*eSlPAR$sTVkW;8ROA&1q+$eOb=(w01 zaeFi^%;p~o6Dm>uWP%#I`j{noE^ZwCM+x}&5Ho*G*yu3?sLb?xS6$V0BI z^7LZK9nCsZBswdH`Hy!ZfLQK)YS~hcVoSfRSpC$F!CcLbzY1w~n{ zf%_N$OY-S`LfD140Uq2wsJC at FJvo5EUF&HBK35(Fev*nisOe zG}3X3i1VDxHJm%PZMH?Lg8+Tf?QA8F^i$A^q_C3aYmYE8N1S zb~?g!RuI((udr`u4QHUAJSURCY~~cU$JGA>;*x at K$M>6P^`UwXtJrU=%&I8QI^ljT z+lDHg-=bbvmFDxy;nO9}xh0=;++g6foRZ&Yq<-OiqN{CP%?j zinR}}!6v^FuIVMFfXA2 zYuej&Rl3 at ByXKs7zIGje$QO8RFNPOvFZ!A3J}_q5?HRM3_B=XwhofF1kojEzdYLbO zu<7?q$iJ3C)NU$~Yuaat?`L$v$39 at dYA9dW*+1OZBlN~U+F|WRZ;G+`KE`7(-6vx7 z_SyT-ZNPe5_HcPBcHL}0 at ca<|TzlGsUbkU->Xm+%?#e-b(d_n6zx+Dtp?HA@!-u~0 zgUL$VmK{##P_K(bH|sv)*5a8 at b&(g8xC8~0o& zL7Zb<1wZP^LSZX6U(dpePm{)LvZ&LqiagUg{3!w+)93)Fq#6yr#SDee8HHuxWr4y@ zZ$ro at FI}8sU8O)Rkre3yZ)*meof1nUec3ou#VjOBG#J?6iUTB1*_|~`TZ>B)s#@n_ zz&@u~DP0+dL6fL&*Qqe{J!J|iBfFwS%u(Mb__FkU{zgqUu9~fqAdjw= zjYQ0M2DqK2Lq43CJt;$#i>+Md&D+*Rn? zP|6&I=N}qG`T32=mYAL~cWb`H?3Y}zrJQ1dhONSF7IpZlrHvZ*7`N^7kk3=0%8Kbw)|7#Ru2ML~u~as% zl9XwTm08S?q}w5t2~5mewyl2NtY%n6kfBaKXjx^kLh&uh-?)lcwFYpr;|I6egfQ|+1aXB720p`g7K$v>_efef?|=C at LgePvlES9xZ&h;lr!zS9Znnhyhh0RiKpOH9khgp z6HUS-?ZmdXu*5R_d9%&Ry2cjviD>fET&i+=MD?ye`^0B{2o+whnABd#hP= zN181OHwW7Dg9^2LEhf(rNw)=owQDy9r023*pKH)Jdz~)@03o at 1%8d}5aeax`q zW!w;Vzrv~g%iX$s?KZ|<3m>Mbpcql7R+NK5hEI}J&>S~Q8bnT=Uj(%-9Td)CgR}0? z$#SzJ3YAv{wt$`SjlyZxSXzK#lyWqgab$fR%WCdUZ2G=IH*)PC=K*_at}cB-wo1U< z%)N6u-mwZ{%{LAR<9c4cdBj@!fq90}HC&y&Sl=$55Ms9)hQ%6sEV&XAG90Sd!c^lb z#qYZJi+N+;vFV6rL6xjs{Jr)`up%j`>e+Q-!Yk02UvyC9XGm{g$<&b#`hdr|$XasL z;-ul^6^7I|bvZkl at v5l4VdO|rBZ<$!cu{gU>NR>+7fg8oO=kS4Zex6{d*h&y6GE0K z{_^k|*7Vivc`< zQtbVt>Ks8$2zImdcSTrM>DC}=Cuh>dQHq58ny96UdX)31TGttBJ0Rwiklg7k=}>zc zV=@!jB8xLNeb@^G{~FHXw|Xw!xe&{_m|uL?dM&-TA}uP+RADh>b|%--||Oi zv&AB*x?!$Bk34DnYa=}dTw5xi-|-2Ik*olPcg4Z1Rh6F32s+2Rr;%%8bG7cu{BW-) za%~eE%UI)f8e656I^hJ?3TqbaMD$uwPsYs~4G$&#O*(O&u^G*D@)B{%M5oLll8(Q! zuQx1amlL%coHx&yoXzR9Hw1C^TTe{m0Sq8%c&a-d-l( zuq81Yq}rE`BKh%iE~BgsO)uR==ttXY8?4u_*33K+9^{#)@`2oIM*Tiiu7r at 0v0B35 zF4!_~#Ogs6uEYw5m@$2N6b_FkRTYS1FzX*)y^Nqzd?gkX{mxlRQ36?e2Sex%RnuEh z=k{H)mqT!^h^n~jVf1xqz+1ue4dB3A(KWq!LM^)$G&%Ovw#<(jlMOeut5-88yR)w| z^M`UQ-KGax_T1gY*n6rE89d83*4T+75nORp`&K{U=VF}2ota54MpiuFW!si8y-(3U zOjEzP;rcbLu!F1K2v@^))BI|t!6AUMq!9V3C(UABSu$q8?tQt4cdWb=~KjdyvnbnE(i)vV8?E8stYKEOvN`_Bj#6^qlO0f{5#gTxMSg}blIk1V>3+CMezvp4 at 9>LiiV%r%8$tM(d zHD_|M6O$IheM1|;?b`3st^&s8ZzuF^N9fcU_1GOuitX&`9o>OxX4Hc>NXYEzJII3c z*r2E$*GHJCHT_hrrh at O|!bL>r{NHx3!DG^Ql+O#vVVCX~!|RS8>7 z6$E2yzl6DI45CH`nSzBg-04ek at hgKBdsI~L$#8TSnp)<=g|^PNdm6uC1uz zkEo)Ztcua&zL|QeOpYr#Oh$L at GFmO1kuU#6^LtJGe6QK{5oCHP{aTQsDWd+Qa;O<2 zHKHf9AGL{!aB0k`*)IO7pZ9NvqE_^0M$tZ$&6#-R08UTUfb&6+m)J5z7%yp*ocm#sR(br5nR)_2aiGD3(egbrU%n-1Q znGn9-(?A at U(BfMo2|h}(i(r^#Fw$l5JAQCw(^k8JQ0VK}Ah8BCx|NegP(mC{%NoTG z`-Qo5c6|u4`<2`}+ulu;$;nDqkWzs^juBG8tAsd&0*y3Wdf9 at RKRKk->SD*NyeBkV zh>PjXD=-o8Q!^8axCL844YNd|5%egS at 8OH~6s%CJu zj)UsgP1q>FFfzOCP~IP|=n_~TzVH!T3owM?-WIiPWU2xSk^Y)sIGrix4M&uC<&);a} zIx&9VJG|4cF8!HOR^P9FjL~M>u%-U_`eS{N)G!HH1^l?E7}H87T{4S?1Kf;XQ?zcF z+_y2kazu9_y(Kg**Q|j^D~`0@=Hc$VVS+lg$@|khW+s8vo1<=rJ&o+~rH)bF8?s1% z*AjSWV3oyx?e#bV)AN-1iV7a?<5Il$3xRC~4J?vGG74|F4XJ1v2!B`0vMY!~t~qt}kEMh%OC$)Yksl>pEZExhI6u^Sd830-<|IT3nWf6;Po?1U=y!34 zr`G}czu-{Ln|FspR at O-Q=*E?u*C%+PT91`m&uR8z8=~K1FgJOp_of{XpK(i^^lGEI zgV6X^+Fuc39NcOXgN*6%3s-L1T$yvsTJAAj!{z>jwLZb$d)(7>$Em$uLjK$rf>lDq z%lqS=Bs;k8%$1$1^Fp{4Tw=kWod@#5h&$}`fRbI3dP~$5kuz&|tMmrR-;lIRIw9O? z{U=n7reyCp#k14YVt}4@sB-A?`OruY!8)1(cgr+G7GNBwGOBgO0{_7Lu4`i{-l z&I8 at Amdk#S3+`IOY~RNU?8{syf?ulz0AhuLula1y>j}eGe>F0)3~^ibh+MxKUde{O zW`lZA3no#QB}k`*-DZ<9YP2CK(#&_a?y6L0L!Z2UMc8wxkgo3)Lbkr0C(-O?QGW at N zZb+VP*|Namg*a8KHgElom2RacN4_>w1pTgB-Y8~~%`0+$=~XuD3ql*8nABW9q}POF zIFaDf{))u%Hw at S)NK z#@w37+$w{)`HH!D1#2q@{!H}p?*U>s+WCXgc+(%{ed#5 at 7lf)#FHr1;LMn2tWS@~|+GkMK3o~1P)TZWuZ+-R` zfey&I?;Fe)lwAJk8$nlW3C3|#2?G at WVwGth|GC09vG#aFTwYY$vuFfzg+uVi&y{cB zf4 at XIsx)PD{ikC4KR*>M;AA88kC at H>{ZYUeg$dbyd6Y~csX6FwR8$t4Xke at ghcZG1 zqymY3 at PW`JFlb#x&H4PDB5WD$n;*VOx0`~Hfn=@@x^AY^nGg5pMnJo;USxn(MT3pt z*ep;cC}XJMq6gz1;n}+oDgpX;nXp=8shKvvv*oN^fkmC{%5`6%Rux3?rMOVfZ-vlc zkdA#Y)e6!o-Ch2PVq|sPC7qD1dg}h!C$JehNN$e~;_Q$^=o%XtzOp4zIndY@^1^Q* zM6`6-s2CBU{=GuYB7E^0AB7G&>4rZgUisKt3_;}bSqK$6$di%ZC at h)SWprBar=P-z zi45`bgvo_oru}+&=PGr-!0Pd6ID2yY{ z^vnR3#O7A;-$Dpzt%4-+SWrnAWwoNWC%APMA+S#M3H?V1tcvnWL at D`)6Y7{2TTGft zn}E4GS04AEC#Gd)B8WC|YIfn6Ch1B;T2J=6SU6LJYo*Bt_J1Eez4U3LP!J#>9S9&G zuK#c1QxX{iGXqZx+kf73W~peYVXL5gk)ekM2cT)9D0TWb%7ByjtJ4cK4&_Hcbp at x8 z37m}&E6JT^^SXGKe%Zlf-*7K$J4R#@K+!;eX6dMN%rKp?x5 at L zA~cf=mQYJ^oy~h>Zu-^H95Ba?IhUxAE=Y;IUAv@*&F`Rx(a|ywsfx75g>(s-J5ob>yGh4gS*n3)1YnNPMGKe&t zP55Whui(TDXM0mv&8MCb;0 at x_Ajz36Duek^0XK(A#@Aqv-hsw9f{u0+-(rusfM#kx)L$Vv2|z^#gVD=3 z-=nHdqtI9#;Dvdo^aqW1935 zpm462=DH7Leu0Rm%^`Da^_xw=1*qi==qYd1(p}CFw0OXH&}gW+KVEbVgjNQ(DG-%f zNOir4I%Y3XD=dRdt{t$@$IZ%3CzmR7oJ*ZsS)B=@KvN0lA4!$fgRU3Tf41$1I%cZc z$eWx(OXg2Wl7E}-QXevlq&C`W&jwER$atHUyo>`oOjC)atVgG7cIo0)X6jTUvW{vO zd>k>rgVZR!{~#M~wOySsV~|CB1yk at k1ZCXNeK`ZYMUGx;NGi7Zj;>pKxgDn*#&rlB zl;b+WPNKx!gCg6F7YceO?gUHq1DEL>(_s_dH%-Dn5yyL+D|)w_dkPcl#Na*0>ZZjh;=G{Zr%7s4-!1WzlCHnCZk)l+BQ8 zJ${bJc79}5GhH*dl+&1{z`~Or-W?@ENteGeBui=5fO*yd_1YTcx2%f zt!9rqYvrr}!lOWaZu?qarA9-0;TSc~FIJawc+}uWSr5>^TX!E>f3nP9>vAqA5D?{m zUYq~H!};GfEg|=>qzfH6WC4`WoxBY?9n}QjeE%ePm<=M754KVXBSY&TbA&d%^)lIo ztKVxja9 at OWkHu`d?x!LAIan~CFnW#WcG**B8obGK ze3Y(n?B5OYRV>J!&C+f>DrrGC{bXnTF1W#9LOj=Qr&ZWv(o?DkOnMr!+O|Iwxt;nE zMAuPF7-$#`zv*`lJ#zfpV4BLLpwvD!AIY}q%pnILd8S&FAUo`F zj~|{Hs;%7YK2gp7Zh8Kr(+=Ya~xy|+c`=Z_J_R^knGT3>I7Ig6q0g%-NM5(BFeat^@A$da;Fw@ z^AoCiIMPtk1rilRh7TZ~wqCE?tL#kV_93D{rn_iJ>U}EpsvWjz!%aX1M&Oiz6jo?X z2UWHAgw4OUsrde!>l<2ty2qSp!1u0n#3FKF?w-KSj|ql*p{f3vEZPWn$@Ph`kH`(3 z#8`yegjI+lJVRyq?LQ7FZ-qMuq0yH8j)gb at sWF~TN-g??lp=Hn#mJhj)b=nyTA6F zfAO3{;- at 4*7*RsxhMNnTEM1NTY3SNnT3tywMEbrMLjBNiegkdv_qDTVBuOGJnIL=k~PrY%1Dw7rK78!3EIWjzNApCI-Enb#{pwzWbpZlqcX>Z>yKcHStoYdaH6cDkW zjhM>d7*?cuqCAJ&xFBpKRrDg2ZL at fBNR6fAhO;LYQ=caM3eX|hbf|Z25^G6VyX%YK zK>*q_s{|}6Ci9xpxhM!6HARdlA+Xc{$OlxA3a2y1+IPoT*z)~fyCfP@@-nY9L`8fl zd~rP0zym$`RjC4#x!gZP9MPkCeN>s?j!HLYXU&;#B9-~}|a(K(dJFZ<%4v%MuRE#cu6(y}Ha&1C{*98MR_{A4dK at 9Jz_Z)7n#iLj{uY-7)xR4}&LJmSG zTd6$edQOO<`hx@$_`RG5y`(>aAov(>P5k8xU5WC6m+@)z&-E?u7Y$xsUf*BON3{M@ zFERrJ-AgyPM~N7{ff(H at wc%EjCocl9E3BKnzvDkCn%PxoDq4#Y05*&$%9{!fYD1Bc zUa;jW&fXQnm~@ra+`8SGO?NIcHX3rRsXJ&L`KMa6-FT%_%nyJ4a7AA)G;9ReMBRr7 zIH^_|&0OOFA7N<#>crlVY1L$xOoMfzvHMU}n(NpDO&xqlNWDza_(y4ZJMbc~L&QVQ@{l^=4^7e? z61@>vHEr8Ji)ItpGPqrS7dIFiHBWZhaB01gZdkL7lC>GwB&aSB$4Hk93x;KgFlkO- zEojl&-ADSN^k0&})|olwySHa+8 at 4Vj$<1U-0bel%)uE{>hfM2)3D9%=M9qRsQY!jd zKz5Zch3Q&61njvZ<2zm;W>K=(^9&E at roW{@7QAA$@7;oIjtclQ>lE0RJ8CWZ05f#bXZSk7pt$^QDGjY(NG?yd9P?1Q3i=<&^Vl8aU%E0 zabX}ytTJADD9ViZQBQk3A~~t7KYi!H+}Oj884Mz(jhlJOTZ2!i;UVo6{HM8qk$fA6`5=FJ5M5Ugzbb!MT4yo?lL>UK-3Os2L~{^`&S&l zz|}}W-sDSJx}{0J|0X)r+;}Ye{|_r<`X5-K6t=)$PM1W3EmmFe5?hr`(SbhJNpS!X zTXSPDbbm7{kuHx6n-SCLm2_HG at R8pgK;q^fxWYkp#^5iG at Sp#n(>`xM`%WD$t#SH4 ztJ4#N)rTG9>AI^MjoL|(UYfzzV4!JnVOo+VZRNm%2|1`y8fY at gDJ3v@uR;=Mf%XIg zm at sf~$9B!k2#7jH;N*f)hdorj0OqRj7>=}Cq|HV0RJTS+&ZF^ehVw~+xVJC<*rx}7 zn9SaP2L>2W<4_>CatIZS)KgE&EbX?~t^6FWN z(W|I4Wnqw^nt-OmqG74Z(=A?rBU^N34UHtX1!Q3|UIKql|K{T)ypQ z at ZPR92=bEjWsqTTpMAJccy)NX$13z$O>5-t)B$rgIzQkD-g zm?eE1CQF8+E|~CD!H%X*g1N9kOoJ?I)Vq&4L(Y|ztk>}?wEKSFuQcU5_wHDkFIzw4 zhK6wZi!yuePeyV3uMXjM9^L+TMKbIbwCcZ|eyHf)y8n>~T?Y2wRKx;KHvh_k{^vl4 zD0?X_{6hHF(SjWOl at OL2NTf=8h=>9H49%5)^PHf&5yVn9mW;`l!mNn-eFO56 zhx05M65Gj?=(DwL_iXES{hX8210-!&fQp7^`I~7jRE!L7KZ49cCRE0lA%Cnif-yRy zmN9Qh0z?VC7>>t?;b&{AViA*&oNFAu{YGj)mviZ$B54l#9*$7MQ at AUpZ4QU~CjF`w zRg$kk8By0}#6ssok*0o{v>v3>>GGaU=%8afGVEC8!;ooFBX$3b_X at F;8Jm4u%al;r zV>@GBB$FXf(BVrrWGXM7NFYtwMK=EWYiHwxfjt4#*7m}>q4JyZZ8A;7B1(~EN{~3` zmq4wY{%xad?;22F;e_0R-7tJ<*K at c4r zwzH8T%mb#TR)3Eb4Ysqcwv<*%o$Y41A6gZzv!NDzq~EKO8CEBUMQCL0(PwoFxtb~7 z1cSRp1%KjD68tMAoXD^&4laxpJGt*1plFxmj)B at XA}?;Xm1}$rlQV(b!`e4tHYZ!* zZ6lcK7Px<+=&Uo#3rkB!@1#~fpgDvSN+y?5Xm}#aJpc#yTw|tHI;<#Wa?(YD_gG2( z5lHnr9ywdyc{iZ(9{#GI?wUL10PWN=xIR^mL&!_^z+*_MB=pN!$nd*u=CtulO+{h8 zg8VB)_^dgwG|xJs26e9^DaC0?S_gE;Jyeu}x3p6m%{SJ7%jeI63cG!`){F`U@&jJe zoO?6z@?4%6D1oe!pq*;;7oGEhCA>sK;Yb8IGqITdpE=?|CVqr()xXX{jhLRZE3;Dd zMJ9pg13D+C*CW4hhlvro*b-l5DIU}kO7ktmqHd|un-HR`6hjn5qMGpw9x+T&*_1`S|`0 z4-}Umr4LRC!ewjmm*X1Q7|IP!x=>!9Z;&iNuTtK`o-CMP(6xD6xMazxD)+`Mt0Z1g zAgk5A4<=~qFxC+mXi4Bfu-<_Ud)v9s*+(5}PNroRj`~roFP?%crwqOo8qd0IPsyzI zWOKFL=Dg^U6b-f^o3pnDWke0KlEtLCKUIw4159H)j at vyzo9bnA?o&W~p-=oC8}Mp* zlYr#Ygf9yF9IJ#^W8U;e#9^Qsfu+6I6l8P9Y}Y|77hTRD- at NL)XtJx(i} z@Q~Qs8>9#mv zLLC>rBQfvptd>i$+#C-^*-W{O&G0}B_7i9>?mhhTBaDS#V19(eM_O}mo>D^Un^1?J zm6A2NaDRC9Fu4{Yjkgyz0kD&M8A68F&tj?Z6Jk at Cj3qlI8lv^v^Yw2 at Tuc#S!XJ1* zK!ut>KxF?1>+nAbpjuGg%1cZ9$Fio|lMKPEPy<+oy~aq89Y_e`zyZSI{-7+m{Um>a z1B}V0`}0+`?Q0B&XqBs)mekLY6cPy{mz&p at ZI_=4G at F|BHfow(?f6^DcQ~)NCObXu zb<^Z~cH%g%yS%PnbG~_>x1CyUy5zF?egZiSv2WfW>7IvH+;E|-G_(c`9cyf!3}@UB zL}j3U1Y&EuM`6S7Rb{$iM{R7)hPc(XD)rg2M-LCsbdLh)z^+{f+&f3$=mDuHooapb z9R|R<=Y#Jruc&OFD!v^#Lm;-J19mhjXsko@>6H;ledR4*L-aTG70 z{5j45CEK)EADW*HCuWSj0E#H?w8I5io}*A;Iu-w!+J9AMzEomExBVi-Gn<<+^dC|{ zQ{LrdpF99&zV$%+qybmQF%bY8O%~D4h1ApkpB5RmHx57WeWOJ9qkf=?X~+lIb=-=0 zkHNJ7++Hp_Y(Mb2D|eq!KLU{bPD1bN%s?~4_#OA-%2YMIBdYkzbZj{(@P!q^9+fb}9=>qaR%bMq$#Jat)o*DUd{J zyr?JDQkXDC4Oyd^&>Xc6XKV77P$q3FF6t6Gjx4;SF at N zk!o$QRwFooPr0(QF;79=%>RV+3)l#@M4X!M=w*oR)T-T?NN58iI zDU9_wg`33WYSTKjQ at 4f>b=M+28F>l$J0Y-%TPT4E{36sSwX+hP%jx0(YnNtT`xlUaZp;Ize851mZlVTB?fpfT{D+E=VThs6gX&0*>o}iCu z_-RZ$%{)T5=qaN)Y7iu`vuK%1z9v*~zqCD5jcHS*sml=+b|vI(SOan*3}&;I7$@R1!D;FqVH%6h zS%w14y;EbFvenRrW6^dGT4$NEHNTzsqQxkBbl0L*@XywtDDvHTFjHP8yA0sI}fI`K}@W?`5X at zsJD4Hg6E^8G|Z^HhGoHSD1K z-KcEm1W*UbfWEP&k zR1F=#{oyALhGX_y*2&B?O>1$l1I*yvY#lo~3dp8b_`|DIEEL#_EhN7X5v~~wq^hxd ztBDE;O37SZK51Di73KVQp=KnS+-KIDt1eo}siHWkk?A7?Oxe<{JWMJ<;vZVOEE~lE zW1Sozp;E~P<-_ZfQs_jpr(q^GwtUjEUnFEC ziWi9I?+seaEtOcGpoOvX}PUr--kKu}Si?M2VmRea^vO){k*E7xh(qWo4%xKHo z0I5Pkbh|yIJoP|jPpEbAR<8bt@(k2G%?|J>n#D+r6gO)#!Gu%bskEU4(bQz4bRpjA zQE!D|E)NmYbE*Qut?}@N2miMsxMLZbdi8YsVhxuu;z&I$#`}35oTh5uO9Yp)CRdp% z6IQFL3Jq>y*8fG?Tfk=0EL(zRW at ct)W^6MvGcz-`?a$11o0*xJnVFfH+3xoCKkw;D z_wLLctyW5vGF7FLN*Qq~PSuGBoA3$>vshZ`OMM;Xj={Z#&?GsS)$|e;EpDb2#F{9o zxRT}EwJl at T6TIM!UP{fe6y`LGznOgBsH-nL zZR%JOOS9FBj;RjdLKD>XXKEa&kRsV{E(?_K6>bMdu(Wo&So2tiynj+tl_~=g=*#&| z;CCxlWTHVG-&ECgqG$I>tLt%QzOku)pAiZuH+$8+%~GA4Oa`2kCM&Y}mf=i}vHMnm zi|f!T$W`wzEmg=1%h^^dyV=N3n_icftL0{FOsJ at AI!pWSmv@;-=9yt$$C*knAyr3! zc_vu6KUqLALo+=u5%HwWUb8F-S&p?`-DysVw!N{26A=7-Z&KFXSRkG~+lJrwEFxFL zKN@^h8b5qq=Y!+F^Lq=D%%aBd5o^~RFs6=b)TC1xa*op^rr|44RwY8qx*FRfQK(0nLL$R{*YCrcu*Uyk%h;>U=VLn5ZT6hjzAma{6Aa=pr zvK|iMglmDf at wegR%R8HaM9|K zWQ&l9TO;Fm+~g*3sA?<(V-}EHF!74;^$BEQ&Gm-a5?+xU5eM%4!st z2fZL+J)S3kbe0vRw}1&9zzCp1i#?vy3HkE0)S&93Os+*&uGEr$=F8QV*X^6Giy3yu z at Sl%XG at nEKDcabSB47SdqhEeRc{xMB5zItM+KhIZg;WjI$hxq|eG>|0Dy at 9Ggjzta zl1PmpNNi~%$VtlYXF_EhE(ta)AGb!%!&jgZiiZ3W!QezZU}dG}Zx-m|6wPyP=uxVl zanF+|+yT02H)#3Ws^M$ct1-W^+ at 2N_AfQ*c+CN at QSur=2? zOc1w5OZ86T;ud;Jmj;ch2c008@&3o#*9(Gi!*i|Tstl=}nexQx09&yQc;OzuDVCv;ox~2y#ks&F<`6xcy3ooMxk$Wz7pPfbL4`QUg^50RILL=A6L7S&K@~n~xy!(0kd%vZB zCEt*A(G06xcCEs+pq8WrR<^B=-TR=Dce;+Eb#;wrmGNC0Wo4NgMi7hX7uT z(@ISsNe<=5xWh(prmjk9KNKKeFo6z`e9LvX1USmM$_(!UAuj#}F z>b{-Ex+0}b31k<-gxWVq+0p~tP*Z?uDM58YX4y96>rg>W4*O^?ol;54JM&PMRNQulm)0l at L@zX5wzD?3NUaydrITD$vk z%|A)Aae9wdiwc at 5>-%MUf|EFL;QOOM_-^EG+7tVkYsZGdH*&qwkINockBD!`sC_o( zFafG0-(;`;nTvY)oA>dwbe$#H6mB`aT^sv(?^8=SKjJh`Ksm`5wCGgW%rnb06jfI3 zv}H2Ct9W|} z;A7C;)GDb4;J%L>a at rw2M?VHE?iIzJDTOFHV8a%gIjs6sJY>xZ*v7p-wtP`Mbo7y? z*;fzfGm2;8Q)#9dvn+XRPJfDAjw3J$X3`cDSC~oF?HvtS!l`qxE3Y=kPvB?E)k9tr0-t- at 8v)la5um0o6gVqccsQ zqc|sRQXUIhr*ZBnffo$<22tFV at 0(S#X}`nilHahs#{8u@$)cSp<4mBXBea5{rR_sH zy^;A#vk|wNoGl9!B-g9rc at z_zl{DN4=2UN3RG{%x6ILNNWB9>5 zX2S!4n(@)k>uyXaOCq+A$C0~%xR at iOZjKyH)}C2*l|OM6;^c at d`%}gc!Z$YTqqq)? zq41;|&w3xm`T%rkPeT~4Mv1m7uwpNS`Hu39RjnIC_YU)|@*>o80NUvd_e;-Bgl|5^ z;Ag-OO51{ktv7BS%ILj~)5Xg9!_}m&pdUL>hx>WbL>emcSd+vi-(;4UzuwZ!K^}iZ zQEykXIz at DGbmL0AkJ&ACP zN|qE!Ro(`Pp_r&Z at lI7fG)GV at +9XLHP2mNbARwmJ9kX%ho(|!mOmtgf_$Cgc;-TcT zB?|f=!*9ab at rmYD=N|ndn%c=rY=aQrCs^i_wi+bvH5l-ftZNaiYec)MY`s zfGetlfOFLLBW2!U#vR3_xklqh?PG^gR&6LNS2yCxYu}HW^EL4DW*Q*Mamh0EIOS^Z za`m`HvIj8mc*=a34OEK?b1k81 zkNmTjUgYd*CUZb|`gc%zugui9*wnYk)VK81xA4 at r*)Se+Ogk6!BYfh!#0UFaZNe{y zgK=q-9!iz^aY5~E~==aZ|FHqw@$jslI%-^Bu0Wg(-afqn~Q+pYc9P(ec2~$yS zQ>E~I?c|_yOOQG%?^I|rB?j2PPk2<+v)YSb%7id@`a`}9d?baCV`byV3IX9EptC^3 z&^*JIlHnby{wc2PD7DCmBD3E305$SstsT0^X`RVy{Z5`y`PU7rM0$_6E`$tot!Oi5 z`@d1eh|l%K*46#}WLfh0IHY|6PexfRamAq_S}bKpJ5vlr?k_Ij2`7 at O0V&0B6}1nW zh#A?8A>*4Bg$*Rjl_XwNCRHbX{wjH4e;`Y9PLA}nJ5gF-BA(^w+Zs)L=eE+iqVR$mT`8 z*?P}yb4hcx2nXHqwLPZ$X6N3L%sEx!UJHnuolLapDak^kF>Zg|y=O%CXW*x;7jzyR*> z4kbM>O?huqA>oZBJtS?Ar7IX at HKh&}vG1qqDV9DcrqUlXPg30|&i-moq?>-xJ1l{+ zkKU-4tVzoaBSc>6IrP3=s?d%zub_ at n)v*)3v*LK`aA-$J`GN5zl+}TAE}YUb;5yEE zif#bM`EWUxoL$n6Smsj&vZzgxFSmv+5hs}nb%gb!Y1XM!ju~~>P047Ez?#k4uf4&e zAW0%z!Vv1WHhT*e_I^{EXTZ6$K23Z}ix@|FmQ at Bc zoZ?I3_!%NCB}^CEC3*pU!r3oQgs7yJ+PKbSlkJhS3BfFn(Jvr=z}Lq0#pF1g zWJB%|6Fr1vqw at z_-HY4j@P)q_THV+G0_O{L=wtRxDj6~u$UXneeY4S~`vZagMSrqq zfNE43xMIjBhPQ<2zF72$(LAd`m2PGADw4IZqn at S)5QXth5(RUyQj}Bj5x&_&>fh=o z4i;w%vf;N9u)O47Wo~O2UqyuUCO)1*{?6xham|l2_azEc&PqXWLVM<%U!s+vcu8Xc1+TN at Nk-Z4FiGj+!fC$ndx!VMBhJ*+Cb4UeH zqpYV;aNG9Ax>}RT|Af-zY(}gh48;A|d-QWOLE+Ebrm@{a(%M5qz at HsQJDpMFZ;rZr--?>vj4cn|S#*z{J<%C2NatfOo|punn@;rL z8nd5rg_Wu?E%MWVV*k=C>_|nL~-amElPByTr!0c#`+B7x8qwtoz&Vv6+Wp-HNEhqfkk10+NwrMt4fa-Ksr+HTAbC2T> z-I4(8XI`+Ng>^2gRp)H3_=W}Yb^iNesUOPnG$LWhCaTdZ0!*jCw$obnEIEym+#k^W z5IQ9hQFDxFv_ at jdsi1LV2DHd`MG}lY-+HKtVQfWe4AB^>aCl?tEZUjiYh&)FD0CzY zH6F^X9|^bo%g~dk@=P4It!jfcQdVnZbJnnVUg|4b^g(_DAW$7tUmp#f`B{L%p|7K8e{8v_6>~J<@z-TbE*muz#ZtUJRr#gx zJ8~dW(AP(xUT3vMgeRw-9g0Cx$`g8@$!6Xti~zYwG6b{vx-ZPvdB_wmrge>-l5_p0v5mJ(L9qkLKPH=>ncA?4^=L+L5Gi<6H#(g2^w8PY z%Z;RzR71a}2_Mq2Z|&b3EJ2rEV-C+5~tiB^+SAL>kzae0IuFt_Cpx0sRpj66F`*{H_to?4F ze7j$v__9LP5VMElpkL5~{Zc%?(MABMJa1iMmrWFVX;PlEM0|%hWj(^_4k#y^Jah^m zw1K>2EB0PgdyCC*)sk7{pm$Kcf)(9 at E0qLTPY)c+d(XRx#k&c`yQrTYR9oN36abI$ z&wzQifLyrCr!e6ysh0KcPO at -B(_1dCHatF%IK;k$o&MuJWKR+QoeDnzYC+iM+0vs^ z+3Q9He+;YK-w%J?452I+5GH>!5{GlrVl`s6FIe9A9Yym_P<^ml%6%=GPAm|tbzq`N zBoI`5^h|?0u+D*N+ho>{kqP?60UpeO>AJDym~U59LyaIEUWdz5gnKgHe~DKWaFN#> zGk?x|OgHk8P4S_Ses+rWB$)U?jQX2W?y0-{Q!AbEoXn=ifQ* zlVHjRX2#iT=GiRMon$#7^E at HbJR`^1W|2P{M61?D-H{!}&!*Dlc=udnGxZ6MsBdp6 zQNXW4JXXnHHbP#a1w+$HIn0t;>5;*m?P1En at 2y zu at 70?(m#QZ at d3^W+!K!{RF!a40m)RDnT5WCc*P at o+cK)jv-`y;X2n_VBg#u&`8xVZ zeo3dzN9{p4Q+Ag^^~?QOnf|Zr7_WzBDEH2QHHMIPE2{|dj!=i<48>C-9nfEvWT=@& z!Pj_Hb?oN_uT~3ay?Vk9WjNi+INdqX4~m+O&V|K)FE4FSJVn{`8anVbu8+~QrNo$4 zw6zI(Zwa)Isw3(*4>BEefIO26M6H$n%06IYhZM>OKSFiH&lK45saQHXih*C=2|A3 zY>~^T5!apbT at S_%2Idb?K(eQ~yH!5~xWSBH&utd#>1nNlAQ0bhNeHcGd0)RB{mq)D zo1u|-RHxb2;ztjL4F|!7=a8a(l-Nx~kZD=-hcVrkP$+)@V~pCG&oC1!Mt?+N)wrT} zwMa^jk)|VK8pjKE)peOn^KvT8 at r>nM>b>MV0-Wm-a(_=m%FAP3ioZJa;Ff(SBX9Z5 zeh8cy-2#>Q-gNxcwGbJgr~tFtAM0~;bb at eXUenF&>b3cm1G@{iJn*ZTnrTV!)=XaD zuxm4&qqq?><{;L$*41Dcc1})jk{LEFvjY&@sKN}%n_HG=L zdG}}tyDOfv&G8L#1IdaV?DSUu$Y2dV@%u{ZEK;pPm!(#leQX*}c_N+k(lO%~IM_B| zESW{72Kxek1p8lOA-8o1Gfaosc}&9P=1F%5@`_CY_$cdO$IvteGt at FC^D?4?tbti2 zfjSZlCV(bU?r`U*vTulgwU+kAAJVOVt%Vr$KS`v;tepRvh>EMTn~CfHN!_EY_mAF@ zKdDx(rE%Nm+^zYXf4p>C#@I-WfAr?wb`1)t z$XHsIfZ*v%pb!72N~wa$@`C{ABj`!5bd&2ezSzKYi=cYV8x^Sd<@eDRbUYnj&@j_? zp4WoSKKly1t>&0f(*AXTttl~RQvS=EWjAYqfQAB*`8Jej3FT7|)<@*QbmC*_gmvQ= zEvoR`?3jGf7gfie|o}1^TG at WA%%V4qsIU* zZfI!&+C0My`$XvZ`ZHt?!s=)RijwbXQx2jm%~%Uzs0(6W|7m%nEm_oMlJD{paPA+S35`^JukVs8D* z3LU at xO#y17B7|@C*BA0ZfPi at aFHbLFWp89_<^2~vRjlkSY|UI9?0-1e{!apJwvwC- zh!PtA?5tDP!c@Y+k7bc+{48jSqEct*ZJBBZ7A^Hf&Qwlxl*CD z=kzzLystSf?YRaHgh29&vc$3UsL-~Q^(G`0e#8Jhh{7G)X2#5B+OWY9#dr5!#%sx4 z+{v7~>-?DvzGM?8dUTKDq`O&c6t!|w&weEO6kfRcj8#;)Uty{R+}>v}z0;ixYR>Sp z`}X0V%BPRUbX{q{`8vw*y2#!aBQAib{t8<1uZ+nMA*4N9ZthQ5mmfLf_>y4#{>92h zRB013w`QvN9zDO-A0&E2d$pbYfxY>TOzerF2Ss2g2K$xa;7Y%>0mPNic4?JCew+9( zlwv;_GV%^t(3%h;3nDC;Ri#wSlPr!7B~`>I(8LTApvQvKX`~d`Uv6DKZKiqkvrNqWi^-ENeE$ zi{SkMDl{Ve>>sMb>;KKz&=?r<0%?&>ZM0db`QIm|~pGUV5i zgtOS at mps>2Oq-$QuXh at u=(iw1rSWj4>Q+6<_eJZZS+GE at S0T+MU99Q|UzB~p_wi|ieBH`fC&i^M7xgPY2^vzrKxns^7IwF(X%_fAL?H-M at Q}^rwaX z$vdlwq<|<=dKjZw1LdhWG;|3|4u_~b$ns$DrQ at gFN_R(V^?3mKN1!0eH_$iLq3$Lc zi~!cH5#{dH6zA^L%_0xY2w0D-?RF0RSEY|vO-*Uxes%CIY`Mo6jv2J=;1~}-Cm6I!Tog`l z6w5kD(O+|jHYoBL{!kmFAh)nlj at rKY3}dSG5>2qE!GO at kcO*68b1u26kNzRG?MxeT zy7iEjZw)iJ*S(;fUU8sAMs=W7T^+M)E!Ar>kW+-zi(jZWaS2e;d5>Zvn>`jLDxfl8 zNRtxH_iVSYpj9ly*z#Uu5Ar0245n<8ams;2)ZjaEOv(3 at KnvwL!y#>Yt~4s`Ek%rJ zG9Ja+iL+svN_s;Xr!Pm=3MU|naYKx|W|W{uf( zsGY|EhSvEFS<;AYKg2qP$#C0mP{PA|p3lEOeG;n-7xmL+ep!)PnM72Nx2ki#NS=5f@^Q#~y?mGD?hFR-a%C zsC?Ei7h-tkl&6iI;W5_p at b(;$Y&VPK89dtgq@>6A19t%$Z)EJ3&@W~lY!$|MxINHk zj0CJG_NO{PoLCQEygx4ISO*&ZcPFgo2k5_+&a6qCBzgY_fxv)(*#6H5^q+;&DtiCK z-Ta*EHyhV2&4g06cFoJ0kHmW7V9X?`d20=pb;SxFOj0FICJne0nIhlu0`GZw;DrCQ z%)6g4#|07B9vs+i_c+ONIo;ac4e+ILhPB05WWs=0|q>!YXBUetSq6&AhUdGSRQSe%1_w6_qq at GOy zo`-EtW-U3Y`IH1zi?c5-xnj>BOch2+(5L)@@wJfK9jcH8JNpv_m>goKic|)tQu7f4 zZ&e<6FYC#&{Wei1`|e_M(lZ*7K7133nO^o$h5**GZbAfA(VnN~(aUdVCmk2AI_A^7 zz~~U#^cAa>ejat`&2LV$ft6!Aa=xrSAAZ{UGo`*aNmL0{;aDVG-v ztD?7T`V;s?$mfqoW&!5;yVAGEhcjwy$DxrtC-_C$kh^ zx7ei#?aJ>v)X`C3scqY45EjNkF~qK9 at iJgfG~qVUWL1Xj3El(k_G5G at 0frZo5$n;& zv?lbKq!OsB^$;vSW|<_mA`a!I9yZO7;5JYB3_fB170nFsVVFay6&4lI{BKs2&PFnmpd-=5O>y^B!G2CtlZYk)Brs48N?Bl1ZSl`}mJ~(;iU2&M z0N+x6*q#G`J>yzS!b?mYA>7fzX-3 z$W#xT&(1YUoUoS4#q$noe+5(rY-g;$vXSI0<`GEv9bip-*WU0ozd4~D+l})2(;>{g z*BA%|j51x+b7A^F>nS-fnP5GncYC)lec|u~Ov?qs5pKBO;5}zwR#0W8WT-8 z0)e)pnbPWulK}8%_j at V@wj_8kA)+QbqUvT`V2A>e5+c)rl<}9`qYcirBJ4xz{zNKz z#rhqm`tce~I>L|pr!CY-8_m*{OA{2XNhTETG)+T3-a at Mt)sGFhyk zS#M4AFEA)ashzhkt{yVZF at v4LGy}LdPm<}^LUq7 znD+|5H<88spp;o)9 at r#R#_y&CX-J!)pxAU;3uSwSkchmzyr2B$>8q`y7C at JpOnHSxCKEy+i#+CVmQ-fcQy1wbV|YtA z)7jc?aYoZOo)gxs#cuguwC6BpZUY+IY5GK}*|h!)R90Y-kOxoRQN(%)IdCo5iBU46 zaN5fr;G+GhIc0h|t)bQr>S;8EEw^_!%o;4dqvG^jN&I2cg0>#TDDq5wx~DajVsT^? z7}p5B2kL1)r7KF6qFvR+q7WzHD}p_i7mVME at L!uyCUW3>f{A^Kl9`qx zUOx+F at 4Wb-+^%wAhl_Xld6WJ)HPVXc9EOb!z#Mi(emkm4!-tuwwMNim{vh|)9g<@? znvP(57YgUIb|lT_Q=+hwRAyqj0 at E||#VoaW5^4!;kJ4skNmWM}3S##4B$lX-|#noXDhex^42t?5^OeuyCw7x##Z@-?S=r=W$9go${2MaZ5R#2!n6f`XWg;4%>pVO$!=N+JMw-f?EzDA z?F&=3?GaP*!NtwpU4q|H{T86;=ghj};@c0U+|NYeI}UaB%ot(?dxX>Si;C#E4!!Mb zB+DVa*F)JQz4t?zP4WyHiXzh|xd%lNB)ew;X#Dt!7>bkn3LUB>^OrubAoG_$U`OdC zx|c!eCAsfF-3c^EdV_}#xD4Ixzdb)klz$`r0)z#)4;bt*FZ at mk3n&Ei^6nGfDR_Ti z0s at lW5b56;0pAIpNkia(pdqXfJ_F2<3Hboap-xHYi3$%-L!oDTWeJh}ke(WIUGmr0 z at RT2+z?X)5nzaziXXJ1+eA$Ejb!iw5G2n$45er*NtAl+l#7nhI=_}Dr1blBzKUlaEOnC`Wm_t%+;q1|-N4*jXV(|F5*G0# zKV&`N;lz^5nC{74v!xxGctRuQ6+PIhARw!;GFr3_ at fKPp@~>jXgCb6PQew8o5uf1~ z{}ellEt-9Jw5I`(YtE*=&uUAHThSo}Bcu@`!?6z{ST5S$nhOqn`3lMcgteGl8&%1apqUn~JN!WRn zFS5_ljH03vQ<0)*e-h)%kc`rRSvV)s4`#1C39}zPBaR!%!rww%w{jOt?ML_$B at BD{ z%T8#W1K*K-Fu{^+oRei~$qQ=+v9<>R^N at 7Z^QI`g`!Vy4MoK|Vbg!)S1+GPCjdiO) zhqqAgBePRUrub*9>{>{{ztBQ<%xwkzx+rY&FbpLjhgphHH<$}>6{}=1&QDzgzx)l{ zy|&LA3uECyh4DgrO+#+9zO>PloOL)i{=nthCjmHiF*k8v>Z3r}#Ga}PTftEQ)x5C$ zz_UQ0kg5u76uEObF%^gNtkw5s)b}*R3>WCzqHo3k1~|<`Y5|5yoYW_DHNEM_MG&s{ zrlu#jsF?cpS?;8&vO-`6 at j#dch at psQXbc&{nZ&rnh)0YFuTCAwb%*!6?*wK_28|GI z!x0_ZAZm_nA at GiEDFD)Kv5i_}=7aEA)5Oe}_D5BbV(eQ(TJQkvwqK22WG93A0Qx;! z;w&Pk#71#PP2(u;$2y*w3$2i$RL7OEROb`3NwSu#WLhp8V_NP`D0dlKbc at P$9E8p_ zZ3K-z`N*^;4Oq?RIL1u6lr+BT*^Mi^L z`%B$alT8vY8|n11_$Ji0U-$Z+PI0Sjw}@kR+WFvt*rseW>a;AOO{rycQ%-8&!n*8O ziIG!5V at CY+Axhya1)9Xi0w- z9;_JraF*CYu|06(TzS(mCa)X5+d%_bF|GsZ=imdCz5suBwVPFBXQ9D;l*|H(!UQ at 6 zuk&~vtxP^f at iyg`6O}N03&U at lgd-UvP3(kvVnvi+`f+kB&lA3IIS0=G0+UCmjNo}i zv6zZ{!-C&?X2u-$79EouOM4ol#cxhYkgVm>hbr7|s9$H*!lgYbb}s3JLdjFlw3+!};JJ^159m6LxDXSRE$UPb zAz(V>zQy6TIUoi!23Fu#dr$@g9dXCTQQ?LGFJyZy?KXl?C#Bq_{jRn!sH^8wqT43m zW26ZR;K62a9=MR~uzTh0HFX4V_044polK)m*tE+QnY*-;hX(~My46g&N4QD7JAz8` z&Pn6-#08X2bM={*BD{7 at T}?$4+HLbtaUCB^+6?H?t9gQ-?(BH$XZI_E&7=`h^LeF-%aRB=>g|=127} z7wEg7DML#1qeiLdH!!HW^}rf%K0`M91-yC?ZR_e>0T^6e_~wC`CO>hfKsaH1So@}% zdzgJ1`u1bkL3Nk2G1?UWUh!!jSSer<6lEGTsMCbd3cg=vo`&V|340Bl|`1M~wD z`~%CoARo~vmHTehE{{`vjpoWp)6}dD;kpJBj`pXZeMr9 at Q`^4iol*a-M4b0fP1`)9 z^((`hru)jU`U>v+ji&laoP{C2=xk%1cU2W<;Wj<@khfo$W at E#OmX<=ncByj&JO3rt zR(wqJ&V)DZh95_`reFf`N>vrS`pV|q4J`LiMvfbt3n}a+3hgDnnWc_28=O!TbH_(R-1j*%`YS%)%GmTk=Vqufvb>-IfN)o{d8Ae6{oN at t-8bm~d0#4_ik>it2~e}QQ61KS+baUfh)&GXr9S26=r2G7ORK=ST at pUi@{E9t*pD>|F& zjWGN1xaWSv*tc6E&1=8?;T8*{Q%s70snADWNj6BU+#NHtDb;jU6Mrzr)81?EgfvS! z2m40H4c_iFE@G6xoPI7a#mDJr)B40^S78^s|Nc1tZ)MU_ zR5tAwg^>7hd7TbA>?}p4WX^voUlbu#9wfk&i&UVE(su at -R)UJWicwX0T`fyuDxZ2J(AyOla2j4TR})*zpae3h+17$BbgQ)3ssX zz)7^yVqf^DKXtPryPQ9d9X1~-Ia4gTK*+!!s=j~^w(LfwlosBqvLxc?kF-njrI0%D z$uCCyfQYPoqabmlI6zSd<7Rvz_g!XbB zNLg~fVOwl!K(TY^O9mD`GGP zcLHq8%dEW_5AMrfY0dylW}2T-BMP39t|bj=fA~e=SeLTg`F?m+m1~soYRGS{&`VsM zKq&l)YL_B4fDi?TNOjXVbECUdpVwdXE8H&fME9`NBf3Na{{ZTIN3UxC1pgUlieC5Q z60bgxiQ-rTN{Q6QDl4YbRm6RvD!SlRah6-BiPdkB5{t0Jws=ZoQZvhm&!Sv8hL(F} zvVQo)0__jjDq~O-cU$zQ=5&7y9mte^AD`qsNU;l+Hsa)utEv~6g!Ln at _=MWu|5oC7 z9FGY9_^(xcKm!2@{vR#N(bmY-+`-w7(UXhAfP;>KT7Q ze8A-t?8y~c?MX&;ZwW*R>M2V!N3gv~a2XA~BoW?(Os_nKYi`<`YKIOr5-lt6R=hXJ~7_dJ{6I$sL(doAzdtAMmuhC~1e!t6nz^PLzUPzy?(& z3O;eNUfn%N=`8uVN9$u4rhhQpzKxZtld?y~Q*9eXe7mF#44f_l**G{B??;V&I()p3 z6WlFQrg{>`y)rrHDn%N2?f;BWrhfG_7|?Iq3Y>2IY(OAu zGHoc^@VL1;j~-u*Wh{@ID<@zIM^)dc7F3^Lpx@*w>D%iy+d1h-mK1+>GHy}*-3|ooq at nS+ zSxo}nGO58LwfmNFKrLF)^L!zY15N$D*4Rs53`gOPqtjEyGZQ<&q@) z=mS z8y4Pru54wcs79+0!e$v}r5t*tQh2Bzf^n at 3B6CTEv$DK3IRy5hU!x<&38Qi=wX7d) zs$aEAjGn_N!#12pj2ZuTnIsIWp$Ub&Vd_`lRI1I%n8&;BJ5NqHArqmX39$d5$QMBT z4K_*~JT*d_4jr~mmd&``as*~RDCGc19U!VnA2vrMF;695AeGgR{W%DR{vznn|0e`>aj-RVw))>9sFVk;INDE#_0)~T6fOYktc$IMB1I_b zuRy1)AS(B|D=<*ursC8^cN-ykZcvp#Bq*13XrvQnxOxz>AQ!H1a9j*J%{rrgqftV` z$$WdM)Cn%!HDABoYK>Zb4-L2Pr`Oh9(6!J?f897g2oi{wPo)rhLhJd%LEx>8Kz%Xn z7v`%{o*!-z7aV`_ahDq2=iM%{4f;3bP4wW=iv?zit zfw*CaUo6%Uz^6nc0Vo_|{s%SN(%RzMays>-~V&ZWnNwOPGoNL1E7WIh{4#X1j76w^k$6 z?8%Xa-HfWvz*R*uIz`Fau6n1bLxr({RFamt_U9J*`}pN@^HBaB_^t3ScG_PzXt`#r973og=HYXW-Bi%J6~mS*k0zy> zJd^_w3|oQ5f!}e>V0n at RQr@cqDIB^2&F;wp%_{Rtx}{!tRbZCs7kL9N%qld>^ozY? zF7TEwRUMEVSojp4F_t$~Z;@_MZjob8r0?^}dE}D at Zp; zcgxV-igf4D-Q5iW64EI$fP^45gwoyJNOwqwbOEo#F;?lhhu?5IEE0XvTUrVRe#fE;nVUcD!*bRv4tP7TnBg z=Qfq$G#4zwdBYgRuc4zb!tVh9CAVhB-=N%wIjc+CbZ?Bd!2}svw;w&+Rx*X-)3YjH=)oTDN0gW!c3osa^=BXxpm zKAPY!RL_#y48_H05g)SWVaqeWEytE;H1VNLQ4v?8P0{Wuk!8~*PgUz$lw~UozfLj= zd|aXYrc&C_t-NIiTUe`zw?V$NMh`<{XG&uaPGh&-M%X at vjO$Z#_0H2`1EY73D- at 56 znjcp@#R&45mlU4OU0Jm7%V3_WiaPC{DT;AMFP;KfwLKi_29}6Y^O(LSNsC3aFuJE8 zZ9=Cv)FCqjYK`P~8PU6L&!lgyKRbcN`)JA3<){_%q?{nYI0D?RIu>qjLJ5k(E5W2J zd6=O^i*8iS7tL)#Fue9ir;DK~vQmq2#5AMs`NbMCPdGW&!&al5EB(W(li_&^e~IM9 zv$pq0idvF+YGuS1vugaXa+B}~(TuY`NHZ~orfR}){{781^UUA>P&6_W at D5ssK=U)w z-^D|Jgr=RfgS*#%MP}?zWRlSH++XK|RoOS13%vIOnZ>lZAWk+Kk>?^Q9rDlF;*7&_ zDR9DEp|}i!aFfL2=6(&y9w=9X*b){c;EtI^C7Mf5zWH7F-urZ-k7*xnHCvob9}YN& zSB~+!zZlvgAU^iN>G`Vv9V!Jx-02~x^i(6wZ3qKMy0a!Ja!cbD$SM;8Wr`?^#DH|{ z^3j-h2~>7e3TEM7!fvBUl~be>S0U^=JsJryG9vJk?K_X2jxpv56sWh5+R zj2(hS{LHk-r#iiRt2%ry{FCKkS)%t|lWW5~+{A{+d at g=*x$(nYjKL&-1 zi(84WP#S57ptVV!)!z71EB#G!=Zr_!yYZ9YF}KIWydEh`0^OCp)g@#dG4V2JNl6U{ z&x-2Skp|hXPcSpv7|@hLj~^=9dI^MB9@`;)SOp?}Sa(CT1RG at eB<#@^B^MfG`y}mg z7tIuos5U>npqtVKZiAQeeZuzii!Q;-1z({`)`#Z9vxAj4bcE*_6fG zO<)|a at _AKVrt~AJPm3+hrGfy%r!67uvIQQaL=g+IMNH-+LKfgcF$+=ed{RaTICCoj zGnVt#>dKF!zMjSqNKHAboo3{O+RdR- at 7ZKD#9wbCj~jfo zPE>@>_4W(4&F89z9~s*M;9lR%_h;2Se@^@W1?(EEd_Qr~$mRZp16$s6c-|BpksM-q zMxzGep+`pf#6tk18sZ at aqxZx^XR$+dE7G<#eaS0|uxhiUo42fhVUj&{rd~p|l3EpoUa!q%Zk^1JgIA#oCVGISG0G9+oCqScVl-Un49eVHRxp1`cf93^pktItNN zI=-I&#HSC-5dn-n4iuj?IEr+`PT$9($E;I*YL=>f&eQMk*(eXiCugmGRzu2DFs;_+i+i=f)4RosK at 1VSPXvvWf%_vB-U}SePsGpBSm`-tb!ICTp}?=*KWkWU3kGtC`EmW z2yv+zAr<`6kaJ4AAxDtoW`po9p)Nx$HE-y3FKV at 0pZuc_Ri>NWlc`lXTVLb_-(e5f zmb0vcI|G*-WLw-Ps)R&MXT(zuU#!< zBaAq78Fb)fCIE2m+QOhowfsB)l9 at TjVA+&OFNa!r`VE(Tk|CXl5eu=d!GbyP1^V?k z-ZNI|+33+i_z5UN=Xv{u z%I0&;9X|V7Z48L_yV?R6Ky z>u#i~@ChyI5tDa(VeV_#(^2GDc&$dkSNa~$>a{<0mCiEwlFf3r at 5ZZ~JlvOL{#<8i zRBq!W(irlICCgopG;M$ZQFi$)=-}HQoSkinZR3C6dOA9pJD9kd{TV at fJ&DyH_Ox2+ z63J<-%_<%ZM;tuNTjeW9BIsohFAp|HfO)|FQgUQACt*}tF&jF7T4m!ViqL&3Ata+*ECDBC=4Dd6duYZGm~KD<2iJ&N6GffDqK at binSkvQ}auKlUeZ7JL@ ze&C+RTW!h!@lc2xxQxOy6YdK-u6%E;xlWM0ajE<+3r)M26 zlQKEcSns(Ji>*$3vrmIs8$M5%y>Qwf0SqaQRHG=h2VIJEN_%^bb zNT?cZb-|eVl!w3jo_TEO&|1T2f&2Yl0AJEzS2QUde#TajGqWbfN6Eh2&;i9}4;F2( z*SLqgztD4f2s;z+3%!^i%0&N2C`8=m%7@!_#z)#l_#eXVUQ`KmRBo1m=sJH6*KMwKraL4GQEuF!KQKLIg6e8YD*K6%;4#)=53Z)GDS0>ID#G-DWS(vb&D z<^>*CrI5ujN_|>x at yp_6G8D_KW0x%8v5D!~FVWGK?S&4YofdkK0hB=@U$KA#V(#+{ z)mcq=d#BMvQd0+Xo4!(LbEiVFMZSzBn=<&Nh2o;Ld|{ih1O2#?RVhi4486JlaaY-a zH10&%D;&i1v&LK*9{YpadAK4puA+o>3Ws6f7-o3{(U>|gI6lJ z4I8$)$K4d(iEcrsfQ_jM44&IIq)Xy&^JOR%@gbkci?oC$5a;}9ba z%M@=|1Y0Ic+}AYs8vAt$6KTfdtOciX2T&r8~|D%zw%}hTZhTuOYaOqL&0O3E&EuuPHr@~>h~eGB;LU&;Z4ie z=C6m1k)^r6_{kED*9GM#t|VN87`Uqi(?LuLZEeSVw)fBYIi++b at FGbRFHzBo9!^nA zQFhRT?x3k at i@z?5Kuw at Mq;?4rs}s*8phU-!3Wu&e{nzfVJze`58buF#(a at ZLLlcR} za7O1%8yD6yoCD`);~&43I(u&|ak)3A5vaUKQsvJ3hVy|=Piake=)N9T5=Tz6RHbC2 z`JQ62rTgxCeiNr`_cSIPJ5KwFB|7D~(K^GdBI-mgFNnbFU!Olu_%wyU1QB?1Y$!id zAp)P|+voP6#;Y3|8l`f%j8WohH>3 at 0jE_~Nx}!4MqMIZ%#OxCp)GC9Ise;4VOS=vbE%~mZ$Y0<(+0 at 3@v0c6+RDmMd_xJl=iC5 zc1?P5Voguiv4jHEh%%!;GNex*yFK{uaSk!Fvk)<}cNcL)xmo0bYDx~ss at 5!e0hqD{ zma1js`2_DN6xD)9upBv`{nU4Q2t0Eyv8H~_pWeUCpD^sQ55uE=&Y!ev9L_K5Wc8?P zayWySX8~o`0q8GoE{g*y^A>`~4g)EvSCQpy!;^;5A at tOUwH>Wm0{Pb)1Y{WMqaSpw z=u==G%}y;-%NaNV9?-?4(Ov7AomKcpeZMhLdxw+J69FQrc=lZ at Ik07I>^0Xk?*vlM zdLuM2S}&=PwJ_{ATkb)tDq3r7Y$|y7y);j>g+SJ*^#K%rh$$~s?7$C2{bM>N^tu??^A)YP=NLi^y6z*g(S&5qUW2A z--<5GvdvFIEJ$}b1NCKAHqy-*W11OY5 zj*+>ps}rBP-=}0n#8+O2OMs#CZr^~hX*QC*?{2_W{oIE&MWfA)HDz^$v+}vN0bAp9 zegn3dR?E!R`5PEKuXfSz*-KRmLeJ2tK*7xl=;4Q=&J)-SF}W z>&jsS`D^#~5<0l}QetsZD4&pXZf0tqDm>P0iQfK*Fx34aC2WO_Jiz4sZHK5zpu}6e zsBR%9tQal8>vDNFqx#t}+%*b~NJ_5oPOFFXV>Ba1Nqk{bYeLiEgIbLK;=r3A_cc%c z6Vpx|YX5F@{f6MMW-CG& z*$UiPP0W~c*-s99zH-98gAS{`7%T3tBm4av;fhA#c|u%p3~DO11z&P?#<2nC5&$!NKKOm=usKs8=p at HJ zfsz+Tk!IiNXsl}La5jHNr>0 at 3MA*bR3xdye$4Y&{Mun`3Z0A-Hbt!;@Gyg($gG>K? z#tB<=zVTEdnQnQ@*3@!B{NbW~$_2GS{HOxXLM%ZC^A0h9%a9#al1ylGjP5ikl3-1m zAV&@DVB%mHyh{yE0sSSj^2{jTY8Dj(gr9pH&2_h0fwYnz5LL;aplfK z`#4)|;SgfV#JwJkJvZ0>j#zr8-i=-{FPH*UA;JzdKKqZmn3?UBltN)@ltOV6lz$(% z=lG=UkrsItF6a2X*@ImZTcchxUBg*ZTjN|4I^jQoJE1+nbq*w;J%xC??Hci#?k{_P zkF_vH*nww%{EnH=Kw4Q>4SR?Pf4}FL?moK0(bQpi+#KY5Ohxb2RdICR6c=bM>i03iu?m~ zIvKl|dhq{U;{Kbxzocb!CMmciTVRmwbT+|Zi&YCZK^R0QK(t_rNiUazi`j at Dg?WG& zf+uiav^2X5IlgC=1mf*wMi7AyBmI6)7yZ)rWghzoJl>b#%O%ehUr(;f;hXczq`S(} z{VIz6PJi+S7_dk!c at p2pUSV#G zsJ{xwqBC_aqAcnJ;<3vMikjmfQOQ8 at iIG4_0>!5a#NAo{bN^|?NOpokcCi|Q5yx;f z-|4$Roq_dY{*AgZJ>l?Aly{A# z#Cq}UHJJtW>l2F1HW~6v)HR0m)74!H2tc0-g(W@}ic@=X?A&=MEBv~hnGe;hC4!Zeutn?4=8Z)Oj=R^l5I?3{dDjPC9i(W$XqrbqhEnaxdJoiQ*0C`zCG1Yzd0P zS5f#lwfk=ioudQm63XoKBUTc+?KlhRE$tZDnvejqXSn2y76jN|ppK8e$ z67u$9?WA83VxRK9lB0{4Qs{qhmZHi5(Rb!lYwyXVp>v@!Z5Nj&j;S}ChIoJ%ZaTxp3MsDc^i>qeYqP<4lp!V*vThc;_$I-+`o|wb=*NfD) zix%$|N?h?9mi3?ZWz at 9m??~3pZM4)6A5PW0niv at jE}e{l at Xbwb(g=CW2%zy6FO5xM zJ{#RwUh2snRxc`FO2m2!tzrBehh=Qj(DuMrFEanOXE)JsS7<0F^mwbROd7aaZ*9tf z%xxS~;hRN-j6ej9B3P|FbmM9w$zXvXNp~29J+5hRrB?BXaYjSP#hz5iB+88S>q+C`P$@8csg=qn%f z3$0uKJU()A^fY&IGW}oWJsasod_JsuA~yXC7}`fQ>3{@t>OmRZd>A-na{wpYfDkC# zIZ*LGm!FnW8q&OFeM&3emi;dEyEVs^0t~Oo+9aRhOQM(%eYV~~&VgB?1eydO*1j!( zcRuIXH}!hH$5XTbb at r!s`Fj}nFn_P$E_md5?+4|=2PY$SBKCIDVS at MiXwb+k=Or~C3mfq at e|b)uv0E-LT8q9D+h1plPcmZ2u_qOvyep!Yyxu^v6K_6nX3MEuA<- at 77w9aKDsAl?Kpge ztNnHj7_yOfdpWRhuO*1f~d!c)`oLK2dv2 zCp?{=;N?7 at xIMo$$nfbyuHq;EO!S%TGs$%7$Mh`}Ei^4uBRHnwfpsE3>z*_}m!BpG z0 at QV63md@OmBRS%0T%%^ZoX{u!fa+VdVz#!Gq7$ESRCsH*b_e*E7f$ypuA9jzYPSS54T>0^SSb(@r|mvi zKUspn^E6OHo3^sl3<^&j^%G%z1C9PYH9XhXwWEmLrc3&bSG<{8r(XyBtKBN!=j=bz zM)(prs3WRGmy}a|G&?pyn9TY{WSk&dP1p#H-cHj#iNlhNb8_0t+16-OzKDC`kepRC zW0=oIsjZ5$sH_R^D>5pv)YL)#rmht8oC`tdR5PwETt%KOU6LwNy^42*%V{?*v#~k$ z08%V(?q-krDEEYHh+6$Gd+*=<#vp93Q?XPO8d{t;oCPQZblMD{deP zJih=G$$I|L-0IYqK6npC)Buwus|SS&4qEqwoAha~g4t^_^0|Luz?Sno)qriV)zag> zYmAC at ncFExFW;`ZB?DMZC0w!E^2CP}w>Ua+&wO?$j)5=L=T1p|N3ub7jM2 zREbhZq3g{?XP57NI!XP4u+Nw-))aK(KLqmK>eIZ|yXN^Pollb|zwdlz$)xuXIpf)O z^OxWxml at oIgYP<@E^EDE(9UOu%T}QNUFY*n&=R&#l;N)U%n1p-s4$oyr+Z3Q?>$;cif$m9BhP}I=JTQ z at T@rFC!N8-TGb^<_wZj6sQk|flny$90wm2)2VRlDOTKLf@#rAjP2#~`N9Pup zaKOTjzG_9j8tIDqbG)rZMJDa2fOD0w(7sQ$*CP4_se(3XtbP81tVV5WxfC;c)j_;@ z(SrTV$UY|6&Q9Qw@>FWHw%&-xyF)vZ(bF$OPo)GVI{U%9BwWI2&g~@wB;^w at n`;cL z{5HKztX$C6XIG*D)hpRpZ36&NWa at It0jRNJydwCc(X at xjx!EU}ix`E(Lv at -577BJE z`S`DYwmxm=a}-xG5XE0=v)cS at efnr%toiiiemRxZci>4l@)~!M_ZJGMcN%Yl44g02 z;4{(J2!)8dT=@vQ&iHV2YI|hO=9NBat)h&HVRkEm%%8%| zey7sKB|&qBY^l%yzNl~cP*tOSPZQ5or)Kn6szZ3G at tTni@8-6`kQ(w=r8X=cS@?S9 z&1E#0Fp8mfXSTkwmXXR(tR;n8w!mVPFrtA_U3;L)Z%9=wY(M4H&NGWIRUqjc`2K at O zVo_Gp*4NV*EogkS;VXq!e<~CU_8pu#%|o6s6MBz5Zt5bjX?8{}IVmHVq^57zC5^A{ z-lO;kE4*M(VUWT>@I at AnJ$l!0$N^aK##(!*T#tLsb-znQ(m%asz!8UnEm=_4V8IL+ z=y5%d_l#Y7nIa<|8o+ZKh7f2n at XBg1PQ;=28$G_yo2_O5E5v*!@S0G8kBk&U12=^i z`3>`5xqw?x#r#jqloNwnA3ksaGsCr$5`(4 zytTnr`*3K`*q=cwE7<_7shbxzS7D4VpGI^JjX(kxgr#k6Ny1Gx94(k&5gY~$t z?X=YNj_dTEXM-Zf^rrx6X$+nnIG(+Bx^LHZ(^56B91okG9VgkCrndvCX>Hhl at G}g; z&ss6zj+9t2D-jaT_#SzZUZ(5&sm$9$2}h^(r|v=+PmCV>_rTnQzPQ4Pf+&0xG82}& z768vE)vCi~EC}~44rBNI66~;Y9n>6^=xmvEkxIT8?lq?ANLMX-7USkCEXorUp752; zSXPH=ofAfneqoIL%#T%rj{=ZCXTkf*SsInke|+wYG@~yvSSP@33+Wd4L{AYXEW2^l&gp%AltY1H-zn0R?P{dd#n zQ=$D{9-*~FugNwU*f=Bt((Go^)%Rs0_Exhb+`;uF2M;dO3VH4u&XUQd%<0WzTV)8% zlMyNA2A8Lh?hAq{1V|Q!s**|^IBnx}NURnp2fY>!LNb;pmFH&Nl(ULB39IYUGs+rV zPo6R^S)vP!r((%U%5P_-))3+k742gQ=73lqD&-~ScudM7gsE?&%xQ6uV&uOx)eyi% zdi{Cq6jTze_n0lEGUJhOy<^~)o_q!bT<5^KM9t*g7o>LIFGIe&eBS#UuEy8=Bz-84 zdYUCo;!~BdgVDu3hv)J|tfiAlecfk*nH407yx^NTclZNkmHlF$23I at bX0AYaF5-yFZwlp7GZ>AM8t*vQunjp z)E&+w-6`T%cJ#nGqE23q@;$cT7;f9eEX(NWcOTK)%c+1lb{w(x%ywhOm$)f&1c0=R z*wp^2a_wdhss#axUgGyBIfI~#FO?`>9T~m?KIZ+l+%MXyWQJ)RB>)h2-}|)9JH<0) z{o1CVY!L0C=kD$YR(okvH55`uzNUhLS|tOEBz3m0D0F8vcKPbK%M1Dg0IhEWCW?a^ zL at iF>0$<+mkr8mMt^1mCyh#eh!y!>W*cnb31Ng~KCPR at -Foc~x5O&g36ji(;{92cn zk3OfeITsPQX0`|9c;_PQK~;!6VCip|iS;Q(z(KFYc~V)_pa;vn<{7h6(Xo7w34oH5 zP7|oe^29_u-AtT+c}+4}Ud6l8Lk}r{No~0b)ucuZ(S~D7WGH$ec0PiYI*MOIR6$YD z;~53x6S;*AO(e{e-Wt#c9zyjj{gyJg737z^vhXL$k-YBwfT0}6&# zKY`F|BXx+n6K$CYXk_E1sn9QElTi+}QF2j)ruG@(DH_$>_zWeuZVljH3th8h#*vrZ zdtyrI-$`{7(S3y?Ck_XS)M3IwDc9pNeqq%vI~Jk7c26U!Q;Rxu>`~7sjpAGF^mZL* z^iN&hCHTo at PjAArAd_eJQN?=HFf=z}nLBGclu>MqKCLyvC at QaYLjZx{5u)Yl4ykl{ zrm7iMU|KhrZRT47{!smVvlak^PM)VofA_ at hzvV`MDemf0zQpPeg+J7Afl9iZ)0chi z3LZ`UZteNt=h~Axn~?tn9%SaM8b!kNL8H}p&h at w@?$@1BZ|svcP at HGx#ux!)=zPP! z-Q;`J_ at TjZ3qnqR3?tzdlpHvAw69!lFH`~#F#+XILUhN}g86(HzCOZ;Uy}3?oO at a! z*mp?N7`2Z%w`BIs>@t4W4Au-u^yN5(TmsrlQo587N}oGc3vzPF-oc1}4Z^+nO?$o{Thr078HbB)~LCPpfQz&f^qVClAq^biDb*D>?6(FvC zAElF@@kHma&uQZ at A+X7scDKIR#@}H6Cip@$BniV}j`)C!s{mWE>QeJ7Nq!ph1%hbMaj_dIq!F&17;C=eH;Jwk;XH#86K+1NdJg0z@#ZWLXmtC~Lr;SK)_PuP}C6vR2rcY<&8L<`lH at EU2<}NeI=Mx~Slm^=bgBdZ?BbKQXVj6u3dML^~H;VGdNG&vG=cu4 at XKs>;v?!LDejed=Kmf!a% zRgb+W^6pL(;ggCtlDcmiGU7wbCKv_(-CQsW#YTkFeeTTghiv^gi74QUu2(R7LhRMg zeUzZZd3uX0R|`D0L7YmIl=X=E+jQ?+n==%xj}b3!74WaSf2Ho-907uZ-{3T^x at B9f zj<>nK_}ZRc)(pI`#F<+Gv;IAChqdExI+{zs9YmV*g zvUqrM<95bGm#g0TUi at 5o`n1IVbz{lfwd6g)Dtu(W`8S6F&;S6Eu*Xr64lD=gI-KnqK}e_B{V`M*_Is{7Nx zy&dhYuoM$=vt1le at vE?ufdB8 at +}8cF>GRFq-<7`%C%`>Wq{&p%H;&1>ITbU7%K@~( znZVrlh57a at N}*cOjfh^yr3?9+sXqLdNGaQKtrdBCg1Do-!`-B~iUB~XA8n#HG4E(m zF4X6~o}&Jd4&X?AGl zZqWHm)eN-wFLLhPk at L0Q1HA{OB8i3qguq5b at 29g8G5F$o@~1)lEH=$Xkx>GyDSL01 zQS$3k4&gX&d at UMMHlfq!Nl^W*@Y&7OR- at KOIFxT;ET;%j-(px!Gv-7Yd~f&IUD{HQ!@X~XEzaW zS12eFaCi|qOn7Hy;#?+$Ry`bJftx1e8sWiO456bG=s7Cs;)#60>T4t#QD<7zET-?S zuvAV^rXyB1yW-I9LidfKpP~C>xJKoerDe`CWi-Al{hlpo=>Bu#Syb~Mea|;@)?Qox zyzgnv$;b0|uY~k_5=&tAwAL`kKofV%mCM+4%76^-vF63|ntLJ?_^D>WT1dgTkx~QS3L8mD5 zdiRKN1$H+4D9Gw*SDQbq{!?I<;B#3L#E*FAlN6B#ul=|%RF`BS+D`fV3- at mjaZd%p z0@z_}e2Pk-Cc`9`D}kxwH+OzlM!HmygRe z$#)$cnyrc&fk^uT&a4I?b0k-Czb*+0gJF=pG6G0PSi at V(6((iRn at MyrAgrCa_=GFI zGK0^r!Z{F{xYOgx1Zv~dCa-qm)qEFRZ6#@GVBUHdM;@K;lA2OIXfbB36Zc75IOG#$ z at ZNx+dqcfh_PWdh`xW$HQwH|#V3Y8-gH1EU59>h0g2F#J*i`;`uxS}lYuzGt!7}9w z{PzR*H(1+058O+&Hif1L66jelp%?Be*!U50UFK`Z&PlToBbYVDjcwE4`5&HcYd)zo zZ3te40F)7gn=*#UASg&Oai+un-hW}Z=6vwti|x%P7c2VjM=&i`y_uiMv`=-^DA~+A zxcYq)M*6=nf4O~;uS4%kMBlg(zxk!N@%#d}h9}q5lvDWD%1y~rskCVXP_(npC_q^2 zoj4E;?I^{C;XYIM^KFcLI;^{c2&ND&+c{$VTAat5G5pB$eTkpn3v+6Vp7jCKs-wlZ z3Bsf!GQ&lpY{=wE7+bHM1jw at _uLSO8k!n6(I3QQL>&s7DHZrIyKSud>75Xk`FJ0!k zLPhRUHuJ%jhwGG`9z6iV6ZF%E4laX?#3 z(aL0MvOSYRHgY{xLVL13(A2#rTF3$vt?e_iFSPY4y54(;k?`yy3C^ebg- at V_&#Xyv zFs)CH+yy#lx5uUV99h^h&!J at eQaeLRtlw%9g=@F at -I(k2UXMWY*o9AZnSoJoW~B-* z&u+8*G>RQVSVnTdvpk|`POUu2xA1Cg2x{fn)w3biE+l)H?QSHZ!q_SIF*uz`DmS)G zYlc#(S2kQX2md2<$HUd4vMC2LwQ-DvZ at wjD6i3jAgw>)&H?1ZR4JMGt;R~d5CbI3) zF2UU{Q`GD5xoa)iVYUuNkdsdnL06us2p&quRWij+D4(;4eC0fi%88uX>Yyh_-tzis zr_6}5%O&HVzx|=LJ{qXk)Q1u`Y2iFfp((uzDlHsAnUk zI3ABY~DG#^BagoxNb(;}WSf$L>6{aUS8EW&4us{LB6?-L9&j?}_hr^aKD zB60b04uA6!7gys{Wdm0)!4$Nz#DZhT$<#SVsXRC8rJPknoi<*dVZ5vVVkj%~XbN6o zS3b@%@wK<|AThKt?>busSK}SEeLAN?owse;3E<$S<8e>DdBprDSk#+BNDWIt+fx z35M&GA4`0JGRe)Q*r1kxmBQ`pn`!_s{t7*KPb+nhd!4rsM^o|Qnd*wU)0lM&(TwZG zqxWI*MT|$2*0>yZ7n>WsIbJaIVqP4P1x|pFf*ddS50WP&ijpTniW1JR|77cl`fKY6 z@=EgxTW$m%sWdBH+&`i0j068!V#MA-`)B-o^n;&s4^NLY11bx(#mW!cjfHm+hpfVr zhtbt44>W3QN6XSd_xTM1VhUK&JWgHl5ozuUOSGj^xG-vTZizzp^+9^A-K_!T;2)Vg zkG8Q<(*R_A{1gv;VhM>3`|gP)=ig`U5zW8P-09aK;(kr6#B}Xv-m25UPhYw(svY)H z2cQl-5cK@)Mz_I8A3rV?C6Szu{+e25P(>}TD#o;dNbzA9teB*14B>R!mC0nioxv~? zfrf at XMQL{f4D}bt^htO1(O!uZ-c>6FgTazXJDwYUa(Vv(t9Xq8`X_SVa5#z+OrX%FESpCK2Z-UU)Jm*f<|F!l+g4X2=pli<=LD(quVAyQAxW>{f?gh=juM|^8c2)_u-)b|55iKQ=PG9pBimSwl4a(>vjN^p7CWeY+(1G|7+`smrb(d-yKK|8}zj}TZzbpm(ZS;)zIeLbpbUj*y5c5aX z^Cvg!B<-XuAMhF#w{3mr#y)*hdfN|jz>sW22#pS*W_w4e!6V2d{Kjz;46m?Yy_@{$ zV&-~yvrX}43J&HZR{ub_V&lR>)M&g;`{f65=o?E{A6R*&1jek>t@^PT&*R()cNodu z$(Z_aW*7;z6gL)VJ{|xRn|)6D at m2_+rEzc&pzSwcqIgC}lD!O??X}ze`+y;w81YC(W!&P5< zBb6;V`K#%T<_Xoc45IwtLSu6FJSI;4azJ+csGSgaR>RDVb0^9chTIr?S3uzTtFFYI zyV(mIWrx<4u79g5efm{bGPtWNjc8jmtR#@{#1ahy;DHn at lAB`o at fadV0Yy2xjgowLZ2l9j6q`X$;V zpvOjeiBGGe;_*ZDC%v9_b?7y8x$*%*S1r at UFH52)}X2WjRW7w at V%b`xkl(;A5_X3Qw!EID3QQanF zpm0eh++i&`fik`QPGo0H#%@faE at Q69L@R8|GTHP_8)q`xF7p!HCsY9cc7c<|^s92? zcUY|^Vd>sR+k6EIlHCPH_(kOlzVLWO_YtZFXP;pW=j at d;Jb^Rr*PW{QkLN;A*~KQ; z{(0Jd2hYE*D)oClgqG!#a~sDqLTN(0Gi5qPZh{PzQ6O9C(s<3M`6pPVLP1$2a ze7pw$MBS^~>SqVdIg;jIa8S z!87eRgZv#L;jCp=ZyfUZ7v+d=j~63bh(hk3TDo7f0Cs>rQHL;<0rXTMecO;`6Te3W zNVEwDh~nl|fK7m%z_3C)lMn)05-P&+y5paS z#o|qr?!>~b6w+$db}U?e3p$W=ckpM>G{|UDK4!t8o|ch083Wbao?cezGqdu_EZ3%_ zgr3pojVW`V?BE0FsnKC`gYeqJ!)01>6LD** zOVJI^Nw@~3>ZVng^1I&!t6;t$$v!DjITc}GYD{*;+-}OQ8!>P3j0fktV3(#Rw7p48=xhkD~aQb*-;DvX?WLZg6o>ZbhK<81?c`v@(0+T7mF$btSXsp#;;@JGG6(56xnuW4`6aqswMzBy)P zhNyBP4}z)1q6d(^rHW}w>;3C=m;EavNqab8%HqJ2ZJR=WuSK0POlC7kmYyP{qeLU*i zCh8)A_RCwj3!~KK9hc@{T%R)4(i+(}l{y&HJ9)$x{0csf!(aMz{6+-6Db9RqhyR9w zwAU`#+(sunTk_-$^OwHq)8UL{j22aUh_%0~5l726X300jwJ9fbcM+VV4k6?Vhwoy; zu^#Gh9s(K0-91!C^@e_>`#&G5Yg1K;x_hXOt^|`=i$S1VcE8ug8PT>2k*J&Rbr%v> z)Pxq}h)D)t*u@(5?;omLvw*S_`cU1EyuBcccxqNn;KxIC(7{uO4mx=L$lI6yICws6 zZ07x6wf%423Hfh_n)hMbt8#xHYKr~$o~LSYOl9DU)|R8`;v&uI;=_M`Y3cuC>>Ge9 z+t#gma?^5}GDLd_v4J+OUBZq$a>X z%-d%n0#?(SXA)!vA}zad8VVV?dLw~uz4d0idq~<(S zqi7eb;MkMJ`i!CNh)E{uw9OrSNsxqD(fOqLN16UWLbJimEO at 57G7yX#|=>Hi17|tdW zi3G9(bj^GXb4_g*_g7L~))A~8Rx_04TaFa|$J@!K)hWo46+YLuWWjwnqL)srfOB*<>6^6g6XO)I2aDLpc>PbnO z{OT93L%A+VQxP7PtiZj&H#4{6PLTJx%HeRb>!Q>X6nqw*C+;hJYKBI at R zlM-m7P3R>Dw|Rxx4Ae?uJ#l~K)G;R};1*Zi zbo^{QjdaFLIwH%b at pV@GYd}V at 3Xzg!@N>G7BYsJhM8vuoJ{=`OqafKLweK+wcl?qn zmD at G_Y&=!un3qFOB1%`5s0|8mXQ{_&=2!Kf11(bozcl0&_VXo=A z14dc@(#c!XRrs!0)0OzPS<}_{K3UiHbleJDW(sfU*160PZ|Ih_OdD;)?QhsCyQ*j$ zOKI%GD0>8u*jP<$Bs9BzS#&+Dyo;{&Mi|2{R6<0oV%Y6JiT$_tYA zowgvW11hxp_h4k+p5$+De+rh~4qkq?o?kiBUyQw~{_ z#m}I&P;VCr!g;=Xe}DT!Chz+f=_&eeM$O1jBoYIN-!Y$m8a2fTgbTx}Y>E-T%#~Nr(fh{}Z``M6aauRfK=4;6XwGaO?YW`p!gS}*Cu!8g} zWlm(Uf2u6|t&?ZS91TW-pj>kyGH_l_-fnEmvnDi&O8?n>l8h;~XpmF3NafYnnRN>& znQ&O!b5a^PA0`ACH&6XCYEs8XW88ZaTFj*QE42wG7t}8NuAl05j955}lPvaOjw~3? z3?eM3&a=&uE~CO}(a7+a;~LJH^ktfPU3F%&Rpo_!<6$on?q$KheeM at s#oWdzzjNvu z=p8}^giGAbHHQ`iTXEtQbvDW{dZ68t at BqQ9L(J{;C@=Bz5Q3M at K$BTm~a{M%G&%w{csk3Rl;AA!=( zVh1ZR?@6U3rCO|BtLda4^gSf$1W&n4kE#5dsr=APrLH`74P3?OfFVDxP{jum4f$Ddw at Nh|EnJR<&%GQGCobB{kcdB`Ww2)1vx0zq0>i zJaIRN{)$&J_!TKX#Q8_O(sqHvWXD4nV at N-QB;AXgsWPaIG3ht~7ol%Bi4 zl%C;#C_M%KQ|Y<*<<1n}Mt#QX57INll3QmO1Be<)WmW&1Gfld9+RR3QTERMlQ^`U@ z`)wz?xow_P$M1wC#%`_L`n+pjKBX at tX1_8%+aZtn370D1)MwLh#)uqGeX|+MB#f2b zV~@d^Jbsa$rN2l|y&@{^oL{7;);rZ4&1Z5}LpJ*#!@9k{44O-S7&L$BJf+q&f>Z7{ zf9pIC7px#E951(Bi(@7J)1WD<0}F&Z_7b|M-$v>y37i5y1kXY0!t)e+47bgu z6S0Lr1J^<7!uOPD6>Sx2m24Gg6<_w71g{=q at uU7QA=vY&c{h+~3CUj%_$ER?OIPrl z^jx=7XD{WSn{0s|zI(RdvS+VO!2Orbb5RsrGL26BM#vEAFP-P_6FD+#`+8je)Or3I z7yYU8^G3mqZ>@Y}qY|qRaq?QPI3J z6%(D|7v~8!7!hm2$e#2sxf0CyK6NZFc}cnK7v;I=e+eAMDo#pK zBcT0B3Jrfyaaam5U=%t}OTQ5PCvL~D(ZfN;AWonhRHP5(t~$geWdPELlkyEj`DwuX-(;SHISq^5^^@K88#>e{aI0H3 zjs-fFH=Aq5zlKG%zlTNtgFExru&D3Prn4Kn!D#aH6J`$OX8(T=_v}HGi})SxDME!d zp^DG(N4O_^#Q@!Jz7xq5v7}BUbKtj3p12b2H{S{Ri|@St&3Be$y6G+fmq?ZGkS|A> zpIuM(=reEmI{z{k{Yd?7F8W8AC$vEEm#I$x06IT^MfX3}O=-Pf=MD>6+Bi7b8%gO| z>zVx55%9`d3Rp_$-qMJw;H&$Bg~{p~NzG6BQ0mY81XWS`6 at iQKWphwNYO^585EZ>2d~S~-pPgzGqqTV^2P at vxDU@>?zk>99y&98-rs)E0z{M+(?=V@ z3@{<8;sp7{Yw{$FjiO&{cLh()q4$1zl3%W9_=oMmQcS5V<08J&_qNCcx+KSzH&f<)d)^chs$>ucq@@y49K}mSqcM&Lk z$=S;!##Lp?(F-$mhVUGh$qLc at dv?#ju$he5xOrjWvF(T*wvTXbW*EwAr0$9dP?`O1 z5cSwW>%F^&&D?$YqH$JyS(C^_Id22km#&b$#O~eN;UG4YGS%v)DzXx-mmyiQpM_Q9 zR^Ml$;f>&)k2*9j6PV;>2RxF^daPwFeaA-}ocbs+AeH>{M=22F`hqUZxA4qMn>=$R zC;s at 3o*e+TqG^XRMJ=8pxEDw?0lN{3$`Py8%V;v&n(nm~euc{*7_)cyl;V0^;5+o* zBPMCvxs=J#gVtUwz2V>v8;`D&o~jSAJ1hJmEyLTw?N&q)25B3n at 7fdEPKGv`Z09^{ zv9TO9+gR_qS!TD>=I2-HC$4CW95lMhL&BXkdQx9NPJ!AU7v`?fWgI;tN`P8+bmrTT zk`~#!dE7yS)`?YGpwIepV4|E zzYsdl(6Pa-3s`S5Y?vUr$cz^nZ|vgb48rLF9DH0O;6+p2LUYf|*@Ymw=4+;yI(%x9 z+2WQQsor-JXQ6pO&XIWZMNM)0p7$mG#qt82-~lu2 at QWx8LDCqmKA8$z|5XjeBuX_S z`i^@P0uRA=CrQF@%W9sY$4PjQ%($OUh~$De#MXeP99l=U^54g`Zc-=Tf)(FU8iC&j zho4`uhz2A^6CkH#>7mvRN4)vB_kg;=P0~H9DL;>pjJ1LWn1ga6-X#{?i zcpf8?(*WMYg%u-oFgEPXR?(6}5!!kv;YStMz$X zGi0V#{G&?%ZU+;g9U)&rQfmbR-`LkNV+z};J;Ftil9)~mOEU6GC$IO+_~UOf9A(F> z1NEQ9fdUKwfa#x#gOHK2o|C1cjJ~;%fup>Uv5~!zwZVTDh$2NR1tb+ at Z)-%=2DM1w z+N5Vh1Tvx^U5PTteDE$ym}WxrkeCcxq?DDliM6%;eGec0k3gOCNN5ViXDO3cjQ7|@ z2Uh%%STZM$H1;-+`^-bGsTGHd5FhPsKwFFo5^24`9wQ`#@&35}nD4KKy7$1|EHe at 8 zNZniEeibB=ni9G=P~SC|jAwdaKCxoNccZYl$#L%y)3lM(2%B)txlnQ&PNw at FR&k**ezEm%6v at MK#hhZ z()<2_Z-gO+0h=}Y at _+jeAG35{90nSfGJ_rA4ln#MLU>D7GPU=>FnITEXR?$)Z+ z+vkj6zs8P)KbX#YOgq8-5>v7^$ zUa9lhH at p@&81tDL979NsAwjfq$hj#U#gBUdzp>^$X!IX>f_^jXCY&-58i9f~y6AtZ?C%M#J zjZR2TdMw76THM}%4$)?KqLi+AFzge?1|5q%fSwl_=WpjJ6OTbcx3bkDVABXGk&t)e zh44BfZykI&7?<0btY4uvkl(%{dkvRrj<;coM}iqjN at zNARD>th43cc>PmHOHfLOfi zFmEp9M}ubW!5hr`w^J{JS0#?Cf36;XUNryotp3-5m-hC0ZhsvlPelL6QyLXX581~D zFZ^N3gbAXcp%$vzwg=9SOx53qRC!85(yx^k1z2Oe4ak+)s&BCk{eu at S_`!1>7XT4j zFc6U$ z8D*!hnLIjuKxTjm-@)?5k6_~U6OtflEHt69eta{3xO z_q5 at X_J;R1uk``+Upr^}x${Z&A5#}US4n^X07U<^^FKEGA63aJrdRwMAAImfSyPyt z1?Bm|4|lukv#QYPS$Te$jYT$ctl9NeqNJ{LFx;LH3Tpv*`1+8yoQeyH&@WwR(46E0nrZF=$H-O6Uw%CPa{UU6~T%QBjx z?^No|Uv(Y`-`$I)ykF=&{tYTupUz4K0|5XW|AfnA|Md3~vv#&I_}THGr<0Fk0yCg*p(fIE)mbD?{^T7 zQu**q^zXC%OIO_Uj1qawv1BWT7g-&QhnXJ62SYV7IslS8dC}65B)WJNgnpV}H)N%G zrFxa0>>@4bm?cYd3d~dI>5BB!`Fu{E`A1glbiM zu;S21sdIad3hXsf<#BrNuZUA9eU7cd0DYUc$p=S+-Ws%ud4b*<;Q at NF>({f~hKxR( ztCRZxJrrHxqXYbjF%?DhBSSd1B<$JHYE1iZrEx6Sf7z4yW;~hYs zR?|MNU=mzY7&@S}f1FJ{a10%sza|r)(;$*wdXE?H1_lJ>9)TJS76HjM29U%GNC&}3 zlPi#+_Pp&!h;o at 4wOJRCh}MDqG at L=GB7%ixpQ30A+;#pxi7 zw_sj-7?P7&{^v4}-UU5U at kJNMeO|)rSAgd)LW)JTG0`Ry)d_l}Zl;P!{pcN^;Z_u2 zSfj6$lJPt0o!Qnn1+YgMyW}_)P-I^JR`rgCS>YeFI$GN at GIBtUaGu$B z-vkOgnA>FvUQh^vZbd1KQY#YbBnO90ZzY1t+ZP?FG>p>gu;cD9x$&USC5pEB(er~S zy@{bgC~@RV+bQWgNl;|^-?mCTFl;TrFB?Rv^%|aNL?Voi`&is>;g3p_}?v=SM`%<6aba*BXV`dqogt#gnxxJm@*o~pzJ~s)KJ|#IdFud! zptVIQtNw~YnB&-%=y+gh^1`B1QH8|5sint-GFQN~GAlcPvJG|u!FPeL1HK9~1_twy z=bER*0}+-36Z`n>&W2GmalKp-fk9kkY;$yTZ^7*8q676JnP at BcHQ;v#42v1`U-t_l^F`p!d2vLlTur?oEI`0f|C#{_IEn zh>wo~#a*pL|gX1k>WA;dg<1J%j at z_wn zFq*20hkTyyxbHPxHf*38rl_vJ2!vFZUHS%^YMtDjPI5+|c)w`WA#)hAiY%%6abDR} z%#wj;1P4Y}&Ryq$VvJNhtxRlO`aD{RdJcn2OQOO2P=Olkrv>@jdRo^+j6D{OF<7}U|MfabXMbDEb>H at 8AjAiWE>9JOjxurL(Vx)_2nTj-}?#8+2& zd~~@!FBsQ!>z>`N81uHHeAbB5>el?*@Kd{;@6pU;y{>CKI0adI_`KCneGw0Fh}xYw zTplA>)*BLCwr|=uApu=q3pXNBa5w<1u**z&0dfeB;LU+olE3Qvel*9tE-_0ZVcC+WaSng^;*+P*$ZKxPxJ5wWLg!9Y!l#*hR2Z+5HYP* z$_t_IToAMNeu{!6DewcW5>&`*yCGInPWLjk(F)w1wgTZRGD$DwwK?UPPrUNE<e_{&l(DIE(9jXMy4G2EtWJ5Ek zK8pGR<~86UpMZAalQWIse?bMl5gnlWh5y(l5eTcOM+7q%y5{I^6$mQ`o%hB(5V1Mc zdi<)~Tx?Za at G{Gxj&Y1fD;8-XzDC{n1ob&Es&#OZwF{v}C at WW;bk7YWmKm{LM1W*} z%9LR^O?o(MjxSo?9CKK0QoqgubNIF~mY;MlXpYZXm_izc{RI?kZ(xouefXpd|8VWd zx6=`Gm?~-nau?~TNTT)G`;goRWAe%dE%T;bXx?b at q!H%n9OT}4uO(<5t}RmQg{SQf ziD_xXmi at I$rAL+$!<<-<8hsKKI!8c6<{RDAh%ND}b4rhGrS2nimO{@Kt-fh$E(hs1 zrK^s1;9wa4?X_bJSO*48sP0p7W40I`PNPIjQq!)4ZP3ScRiJN&z~2t9GqO%_(n(4; zMr@&8t*QOCJ$vbBpf16$lrnk+zJS0!%Q<90BVDbk$m*?Qbm^)rtE=f*7zM2>^^~hu z2JLSo-8nz5(^H>bAy at 9+3TND5erE8LY=&ruU0BTnY0C9s#h!eqw3-BAF9l`Zyq_SO z!g4VmWxnJ-<-&jiIHKX(j6!;$;Zj{EloByExsw-WU2A}VYaE3;}= zgfZ0-kwM8DjZh{)oi+f#uJi3J;P%Y!b{dwaMr9H^(3e3;PHl12>RyX{EYt~Ec5;* z;2EgkTUE-WFjLB3mP!t6?x}1x9C!o8pnU< z!8xD%=#9`X(U^^N3|HPP>NF*dLXbm==td at _Jf~R{9Ia?x2JwbUOeW;4&jWA+C1gti zRY at H0v582)p80nFY0$_uv}NzcgWX_nQw7WUT44fcNFj$sd0`#;= zXqs`s<*0*YA#4YUFZzV#^fYBDs2oQT3X&&eS#hBvRz3yI3nU{qXi^60jz*`K%e7+b z{>An5AjT5Kk?lUMoDzOmczBkB19AzzTB zQ|2 at 0Z~NotkvHepUh~Ced_+L?V5D*?I|<$z8ztX-U&lM+=LsxCK&!W2XY=C at K&iIIS^{7wDnoC)LY{1aDe0{;(N`wNTwoqP$3x00EYMGwAg zXt8c;55o)1#Y;fjBq{v?B7_h^6+JN>MeA8-0hO5OeB4gHDY*xhIt)iAw`;;oKZx$_ z%RBnW^{IUzCAIOvONU!VMkdF>`}MUMOcxQ(Ftc|BI38VG7SouER4)*J!amz5(J0a= z)5w1xXiPX+0+B|dm4Yr+IY+IltFCZiHX}MkTccrCc%miU*sa4DGEn&k&^5+-^XIV~ z6z~|CN^qeAtpLyjkTLp*sH*bgq^5EynRdwP>J`d#6M9 at O=(H&iP{<5*g|X%IhHUb7 zbHPp3TFKR6x9n3XsNwR}D at TXk9W?iYa;MEXN1u^3`>*Go$B^9;n`7+l=Zn-PUL&`x znu2|Wf#e`dwpzV*j^wR=mHrv6#M2*_Q{=4^MlPzwYR0M;_2czx25nOeA(cJgcf^8T zBlBD>W*EgOPhM`vVu0XeZbS56-83qeCffPRzxvBN&CPrHZGT7$Q*%`wuLY|rG+=R= zT|V}kZ%;v<=qhIEWNM%uy}#7%xd-o?I$J=Q$rL2L-K3V&Bqxs{Q-I;;A4FItB?~VI zls$%?K5)LfB>UvAV(avh*eTKIq`zca7yBJol?SLJ`Ex zf(hZY(21a16$qhQ7-Y(t8~D?0h@{ai$aw{}6=>>Rl=6;dn*N|SZX3YGC*+s76h`(! z?dJ0=m|Xk#m})!RU~iClyBsbMVoG>FFSwj`@p5Fr9xvwN=qH&x zz{efe>w4j4`LfJ4et^KTdDszSe+tIKAwJZ3i>~7{Ovr1Wa7P>9!7F{Mx#qz&Gq$sV zWSMRF18FcIvgD{_%`1I^(K6fU2O|rw$qy)&sXDjp2`EeNkpmS=?}-Cp7TP+uv-rpCa1m{Mn|IN?lpcOdCB;9vsuj0`G-Q)+&)c+Slt15O1O%`Ho`fPJsFwD30^ zK==;Z)4DAfYL<>*^zzdP7xexTk)pmY_R}a>;6lvlmH}0ffhu6`6QT+Zu4MBT_t`eE z!Gx#ZInq3e5ayK&QWnSgJOOl+dl0($!Z3Qp(~uEW{!J>&va1YMm(fR$~DRZEL at P&A!)nz{xIlPtGVQsA0BaX71+wy2Kf_)M1~vn z^RsTw53DsPE=S_5v{xY15jtvXR( z>})?-)iij>zzlcLNbs8`vo5Es({W1+Q2iWk(@Lp5TM at XcQH4*Tr9{Hp(<|Ybc?kgo zj!0jk)GgvuC9kvhOe=cTosCmOSYxz$Oj z2wSV5_BG|bcy9ApD{Hdg!7*Kinj=f%hoiZ1Ln2SjoWRNaF;Kf~iSXJ<{s4zpa`KTQ z!q=$-ecCs{5?c5|Da_01`D6KZ$r9_6nX(kgtmjgl57VzCqggtJe2$k^nN{Mj%CB&0Po5xYkJebSvw&)8wml`W zUhl8cXm$Fzu!lNuKG+m-aXtQ&#ZwsL_`MgJ^T;~OdG;&EdH##zGpd(H$%|Qx^owbX z2y=mF)>70soxA=wlk-Hmso_r;Z49r9+4Yl))*6BP(9r3GaF*E11!`84Kf=;$O`hV;f+`%IfSZ%^_TGNaktzxwRWZO52sLFg^((r)L_6yjLww!irM){mhmQ7M3J%&Jgmo^D-ulD zNILfS!a51RxY@=s>?T&Z+qxsdk=z(d^K7>0r1==nKCyxAy|SzFb){HLOl^Z(Y8RKY z4f(}e6nIXGq~Qy0ZNpnCo3yYQdz=C60LM4b4v-y+kWW=tvrBT&f>D;SnC~#@v4z;@ zCHp4BBqDCnT at cYLn;%M-4Wmmn((p&Tee*M=O*W=gF2<}35<`{PC1h}G-!G4LCYECT zoMrzGT8LG0<3DJS*pg*j7d%*yNGg!ion>Ab9ig at 9PKu(c6{n)nq9HL)hI8BQoIt5i z)Ga!Vrh)9tg*wf^5NP{(Q(lzR*mhoAsNd_eovsE#%v`^oZVo^PG@#A_0Bv2bgkdeS zH?`;$6tQa>0Bs=)c#qMqv^d#vve6e);j9FR_aUk!k#?Pu4{QTd(}imQDO zlt(4sn8;5tDTe7MlsJl8O90;IY*(&t#bsUgIY2(_TddKaV$j+HbqKaAfVrIgc%_w8 zC_gW}phQ!W=TzI$b(`& z;1MVTl1LhjG;EZ^NBHn5)nXpW6pE!EM)VzPh}$n88A-F$pJ<6;L at C?R!`G^Q)R}V8 zlyY&G1x%xDLfN_ at DZna9SFkO~ze?07Bfs7XY&A=_gA%6s&fhA)E1ovNLM5B&tyaH@ zVwGEW6{6W=PPaiB2Ed$Q`&mpo@#NwD%K14gBZ#xTALl zl}u at s6LIPQPxa#6lyJz5+&{4SuoIjxlIqBO$=}6rNC*%CWUkzh?%qnB=_~)k2|^1 at Yo7)iac(yb~;e<4`hMY#01s zZ4}R_m^~;@)Li>c{W|xkA~%AWTvvtjzEO^m#@qShu)NnQSF;LXjD3PX+mpR&irPZY zfS~Z9fT?+SNfz}z^!3}`0M64V*}GePl{!*sld^e6GMNmqr0-Ni?ax-`-BRaY?$!xP z-%5KAA;P at f;ir+!DT#=NJho+dsbf6QF!~Ji_;G`np`Fp;g zxmdfs=`NWz%H^pT9g~dBFUgvsfu0W+NufgNg4F(MC(QJJ*%1cb^&qK zyq(pk*0}U)S*2W=A=?T4+pMI}d>i2egr!3#m*%4bf-2%*Q6q(Xr3mUp$$*;kT-F6W zA{5LdBd4 at 5W)Vf!fH>HR`NNYe2nVfF3icr6f4c-sQ zh1XhlKKJyq<))?D#H3!FsECCM>u|=mmPX`ZX8%D0M=aEK_^LFm9Capem z&lfD%vXw)aL`Jy=MK~NK$gZLqoh$KOivu$eXA657-nXT|8AKyJ?@el>I5tC*;Dy)L z#ziD|&ldv at PcERq>BN{$#W_rATfIQ5dq$y-QC-R#XU+~FHEUL%u_eK5uEt_qidu9M zJis&}qu-J9vSREEzqSrmI zDwLp*DymUB>qt;)4=XNZ%DPZA1D#MT%QiyQVVSl}!aSx)I;dTflA at R>a-(3L^GrgW z7DytXia5eaLY at 0cL7i7bHKwR8{ZLmaTNb3QWM1H$1g%~*`w3a0EP+ at WA_<2`p$OTj zqA?gp-i({Oau$i|)a+9Wi>(D=3yZx4QVWZn1!D_~!zsHpe|8C);&<^?WX$c(A#%m_ zl5gXvRG?MN3v(utIXw5yf%`La6$0w1i^a9IoY at Q5@ zNM@+n7FtYD8s7d`Zu*gUQRXMbs5Tm`Pas9raIi6Z|191zF`le z;m|U3O5B_N_Vi07^g~kBN at 4Ld<^D3wgzx4UAD^!@AbVWExnMsR#-?Gab<9&fJ!^Gcx_~erd at M`Ec#6L5LeyeC!KNR!G!gQ`md^2Axz{<-(gV7ANXrU0?~B#y zPi54 z>dHNVB`u2XOQK-&Mf0xV>R9dD;=;Wdn8s_QebZOz<~P{pO|;l^M%b11Rc+eUcYsw~ zs9~0FYHy16 at 1TaOIl3}Td0l&kNctD8{6&Jn-w zZM4d(`(gsPa?mm$;~kQqj3TYhI(+!vttq3v2pFnC3n>`%QO1|1v!U$#)v}zu1;XCi zXO8cAXknDY&sdVZAO-kv|L;*4CrzV{^*>h_fB*o*|MZ{sp9JCm;%Tj&e^IqGBB0fs z^Y(|CuRF8(iXxy6Fgd?S*SF06PDii9%>EsH3nIXe!piwQL<=cNd=b#et?}E=e#Bbx zVitVmRP!^s@#Yy=h`QzmP{edTXh(5dZ!b^v9000h5008R$jl~skGB!4{|68A-65;b%3FVz+Zl-bQ{zZ|yM?KFOJkDixnV=bdi_e(ODPPfn`j**g(*KsV7V at c1eCl0UoTi!DI^(B zPkAX`Y3U=H>QtM93&Tp97z^+7%iS4w&84TqLAD1e>Bqxk0>I*SH&11+RFrCz%*z#q zXY#-VkG#$H!l9~X_5eO=OMPq90Gg_2+(3%z+T;!_s!RPNLqvz_+Qd#RoKCNb*CXb| z_QF at HuE`y6kM7tSLjm2|-rhZIh|q{X7N6td}4$ z7K>(-#7)8#dwMoChA+n=iJUO zN+u%DgLTlBKn{#2iRJYpQ+<|7E`Fj=MLctMy$4ax%Z-8~awsTj9FA7D3 at B5i7rU~~ zBR4J6HEdclHMMnxLop#Rt7;XCxf(4OB0)dBC>T5-4i?D79LAD4gd$$YCS_I2XD at Tm zngzRQlY6hhGEyhXSTa-<;wMz=d#c}1VF)U_*{H8PgB^T+ylZ_hTVXhcoH50#sg%56 z>p-EAF_z1Yl+!bWHOxHV%SQJ==a0uz5CUdIVo*tq<)%8*%hKyq9HtYZ49LJNS at pOx zRET8`oZ%A2*lr0Z#oa$(0X7iylDh`JBNS$shnW#vQn(Z|PGILIsQxk!GvLInK2y++ zQ*lJE6{C0?S{*{k!L7qBN2*3eWLkOzvuvj!F~$A$5YeoPj}w2s=Hvdmi=pJI&PtdQ z1ZIlSBmm^%%AI9%eE&wqNEFcnoV)>7qfCD1F_)quQ(2tuu0H|hVevHbStM~x%+3-#Xh5ln)IN+=5 zfXtNwipEuAcokcjJ`k@$9TKk!eV|UME9g}Da at 3(B(Uk-UJw(no6V5`rK! z#lmZX44AJ=OcWo?yf+Sk>H zkJ=kh1-5}5VpQ4&*QkM0stwuN^1%Q}{uF~fN6Co0t^JD}JqP2N2nwPhCXTv0!Tb!? z4odX%WL~>B(sJA{Nd-isUm!k&ZgIc&O9agDlqke`UaNV^k>;pm;}B4=KnWP4>MW16 z6wVgdlPAC&AB>rbg~-rnh)rK;VmC at T?X4a#QA46e5hU^92W#Y4pRoFyNcATIULQ1}shGaH|RazXsRoHk> zPFj;F<;ju-v3FUU|B7%gphk%QeQs;V=NnC}+q#b6uAnf&oV7-E;ZrA9tdSq09=Ip6 zGTl(_lWxf3Q*AN17x?n0wmc)keNL!rY*;*%{UC)^)8FjyH()~-IIpCEc2Uqu1sQc< z5VOZ>Yw`|(Pe|l^=6mkJJ!Eyu-6Q)IYjG~)pAO}iUNG-Gm;AuW0VbINnZ$jKyW)uW zL=kNndjgb3ETl%P3!X(R>uYlYGs;yOx_gqnaum8sI6eqgU%dm*e|%kdrEQ+*?k|2J z=+0~RUS{F-cNu$yxvhS(dTDjb0wbMKjk?0|n-*sYXSffHIg^v)41VCydn&I3J?O#g zDUw!&Dz9rE_iMrkkXALnLtSM7TSUbq0ILidDz9~(^lL(~Bdru3s;K3m16yR#B&lOT zijUZAj9%ag8{jN1StEsao_jSfhERbKQX;r9=X8!$$vbrICUi~!@d&I4sSPLyYJl= zX89WsCqH-N{yKLUDwK0r?HIEzDTp&kLHo z1E@u@~Dh{o1txSP%n(>5UC_I2Q(-)XaKCfEb{LkNkECefKoz(p2zct1ocMsZxv&r zCz|NhPQ~?#1n`#_*7o&n8SC3hz(DgbKn1)p-{wj%xJCr^R`qW+W1>e+^=*w}y4xlj z+BOIEp7(D>W1 at S`$Mp(P6V}ekKU!n at eX}tKCOKdRvT34g4Z(TaU}XkE`hn at EgbMnA z5b$znXuCi~NJn3T0IrVynGkfyLU)Vn_Y16{0z$%i!!Xg=VtV>JMRJGwbi>iPls|ns zL=fFJi04=JW|?pb;?{e1t=HCzbZrt^6LY;V>vwifEuz8dF9Ft%@%H87+DJrd(SFOiW)h#^e7+exSri14@}_w(HS`~3a?F?P=3m37;iPsO%v z+eyW?t%_~C!X4YTZQB*wwo!3XsZO1H&b|G8eNJ~j&)#c2d+k4e^PTUQbB!^kn$d;~ z0|*e%8~A^S=@bkc4Qx!DO&rCn4b1*o5*@4}E03ax%3G6VAVsAi5*r{P*sC-vcp&^m zQlhN54mK17TZi{YZcJiXS{iax7(tlTldI9*a1 at R@IlaWjYr(=>u{W$KHoMdDhSPT2 zQ+8+C_IF==pw_Tp&UB_C1FeBbz&iGodFmo#iGkjLF5u)x`&chDY*kzMrRT;YyL+3Z z=qamFC at Sm=x`DYC9j2JCBylj2K_$lI`*xb*`L%Qf?JXu;$7gIK_C5P7ZEn&v+8XFPqfpHS4l4{Zqb51eRwI+ux8olZZCYx;~T!kPV3d~8z^Yn z-*|kpaEiLHo?NC&3z1s)VVPjFtE8Gt#*5cNbH&Fck!*6WMw!Ooc7OO|0hrC?+r|+2 z^Dqtjb@~Rodq at IG2{HeV9p9|WA#|nz(4GvD( z-lkhAVaHI`)tg<*sC?*{UN!v43lYU(PSVFaV$}L=zIaF5GyAPWsJ-@;tlp^@0m3 at IGd$rvfQS7$_qRBy&CI^91C7<&bLCKl{)<^)W z^V|#U at Ba9;@^=$;IyHV6t(66ObM z0 at y-p!Cj&fvkf-5PZ5pxKOq;Hkx;DqwPqoqNjDPo6N z140?w&Fd}i{?^uICzZ5|>{D?spNbRs|1Zpuv2b>_HW9TowlJ{$$3Op_wyvW4DMm!z zc^kLo at OFv5@+$PecAMY;wm}3#U@;>kR&XK1*-`Z7S`Dp^P2?Go+rB~d{p}gd92xJM zKJo8~oNjJjg8jlq39eHUQxjY)UUuJqzucnqVv6mD65)h|Tf_F5sSE23papR6F5q3W z3oLGe5}AgL1dZ;YisLL=jz2=G#IFujWL zXH}<%CJn+bNOfp6>0b3%EUq(5&{w7ZQgcoNAOC0*MhC09*K^*G|6v|q at _A}BPC1>z7_Jd|Q{JmKIH{X}Ts`|^HZ!0q`+b_Vt(}>w?xAFb+ z+|R?>BqKP5C&S!`x at 8($+!4Sd{ND(_JeYNwF2H{Nv)3-GW;BGQ>NS!Bh$8CM=$a<>W at 8$5IQ1vdb7 at Fyn9T&$L at 9ll!BD)k^ zxDmq+{&cWe9S4lKmoG4Xm0;m_TmykWed!?oLvqW%B&g(K>uh0T^3R$$6>W7KRn!kT zTVX)m25?1{s32DV#qanAaK&$wtLCAci72f z8nGEkuHKQ8_5IhfEcp7uxRDhgu+E#Jg5V*pV=F})ap4yRLIdM5d<$e zLDyE#Is+K64t91U&RE=6hb^=eEpJzSb}v!rR7 zg-))c-EGHVBx{!1rO22?rC0_zA73)pR5^){b|Em!2R|uO*~?#~`wAg3tt1xb(|QyS z at M=p%cw_{W&uklCaXwZPs)kQyNdY=*o8b&p53&sy at x*>K zHfv2NFJ-CDYqPi5nAxRicT#^XP&ETAM258OO%lp;c$1jMP zEsXk{%D9J|iFRBiPM!nkF4rfl18ZCK3xho zOK!_}BB%Z~jxG9p_lcz)2h&O!3w0=D`bCW<$tJ9muGIZ|O at 8hVBJ1PLhYkj9Efc(e zE$5lQNW`iiA|d^9147LnuCq=-sy1kg0u>ahW?HaU7su3?q{ZT7muUI(+ z{LZ+W^}ObbbPS4<&MlVsH)fXH=?R2It)Y-}KpkQepn2P7IsPUg2#BYG_ZWlFtI{E% zzx at Zluxd5Q4o(gFipK9ERsTquy1|_dbAP02WVsb?j2WGE4}x!UKjcDwJ9)+{xf-<@ zVR1%(iuw2<^^@X+_-#DogijzQrZ8QiM#QsmM51`6B}N3g1i}8%EFM!7Fs#@(?~cS2 zpCf{vg;|UosgIkYkgtqlr^p|(i=#8_=AJ?8XCdW~c>x%smow2MTvxmkupkkCRG`ts zFIF=ejEX(B3;PW})EPrBqaXilfyR(u>5{flD|1O zFvbA=ruEIj??H}j at A)6X2hTeMI|PTfQx~RCR0u>|X5DRWN4`HdzdC{Z{&;%g2fEso z=wrpFdd6MFbR2bR=$(AP3||S|Wg=kZORUY)hyF%MxerA^y|HmHkOJM^k4{j&Q8~5} zcbiC5Z>m-N7HdG8wq_7}=Q^*SN|}+Yc#6LOS5myZevn4J4%gLH at Rhv9r{tiU at hhz3 zlEc0F8hK#3X7cXAx at U>eO#kLx_o1;C9gEY+in!^#J at cyPh|4{IMkpH-qFLDgCtn|R zV7*!E7hOIqL~9qiWgbQ~WsH(UJceYVTW~z#MEC{Tr!DA3;;=5 zYnm6s4B3$rh5Fe6+Z>4_99BK~?Xk3XDhkANvhM0w7X2OPq2?+CT%AJ6u60W+cwuu6 z@#IZQ7uXbk3q5BR`0@=jzoGIc>8Q<23SyVOK6_h+oJMK7i_WF0}LJ~TN{kW z2NK;O6P>u*rf|C(nc?biyW6br>sy^6gc*|sRaPdNf!I2V0Tl<3pUl20v%~(-FwNnt zO4OfIexxuO!*1zGuc`wC!H*MWTAhn>Eb_Km8SR!w=8OlQ0zs2>%ytKW#;+tRYi?P+ zxe7^7d7feBOPT8H5_P7B;uNWbdG_oYb!e^Te*2gA-q73nik4I68q)CrOEu+b%)NHE zP1T=f!p?Y``+K2bM@#C-fyVo0m8EKBOZ7?buc9l-=n$*mm5Nk9%s{j1#7Zz#9EQ_5 z>2lpGVfTvh?$Rce7Qd_;9$A0br&p663)fPN1pLDoR at a2$&{ zW#vYYdY!UH_yM)ogFxox<;iRo&NykwNRY#NbdDEP}U6`LbeUgG>#(Y=O(& zISV>8p;|V|3;$d>FKv)BcLBVovKMQxoY){xzM)@EMKL-0doe_(F=ELdSZW}r2CtrT z$`q*=L`<~2;&VSS;=9F=h1?0<@%QkMu!=ESqp&24z9Tlz_QH}iMxp14JqOf^w8o_U zeQBOifUYM21q9TB3Is&)|C2xdUz0+UMuZpYBHC|Ry at n1fNKj-@5J|$|NyE at aVloB7 zK0-+l!T4g}Ip#6B_~1#~b_7DDDD%9TrDhe$jO1p^CJQD?LR%Fr&?ZZ&=0}6==B66{ zf_t|s8S-)RIPaXCZ{1u^6K%)YPSe-fPFL2|@7F~UK*{?(+*c2R1A+uojA at CsY`4Fz>;`8m=bRuk^@aVGv~}j2RRT2 zMr>jvnr0&F;e9ooKzwO2SVzv4DlipB(J$ zYRwj-tB7!pqJqklhBlIqjoNi;4ZJdv2Fi^Cuq|nIv7KN0Gu==0;I#?>7v^RZ7AxU1 zYv~H4i5e9K&EGT44oPS6^5;dbjO}RK8BiMy7n?3`MJ6sJteZXa>$(A^whPN9WX(}x z%;Vp<1Zh1fksIMz=f79?)K%B}f8DX&Qws?2G3BJvu56%N1P^4Qkvr!47?!eKU(Ucy zaA*R~8{IzfbRb{sHj7TMOcg88o)9t5SwxL;zRd!k-*%b$ifd*~AEP5oO0?UGuKng& zwK#=EI%<{b`wKT^Hc?A0wM~Y2EGk48Pp3K6UlwYG4Eb^)+Alz&GocM}k&yx}vuaj> z)LWzX!6DK0g$HKK?J%OhoznJ%kuYnsmTy6P*tg_vhg4aO}hN;v%e?7d2 zg#RoatMVva9HBk1Y=Y at 4CIy?ATPG9xWga8`xxz>~`b}zHB}fajCjAR{UO)|5dZdd6 zj&S@>(KH~sgiDqTRa66(In~YFIi at u8tH$$+4}p-y3`kKDaQ0m;kepsE5N-P{0TlLg z_bmZv5^$ML{TR`P+7X4&x)) z_l;h(_x at h^8&33M8%o^f_6d8NN}5$8QRFLM_jDsEx-bpOIn at -{;6UJ)PGi#Si_55C zWVKqE*pqrgllU|?6Y%OiI-(xd8=6i!#b0Z^b~oA}Jp*6Cn+sG20vs%6=4^&56&H+W zuh|l#=9OYK`<%P at A=}eD-87Ju1GMp#f029`>t})XxLZn^?@T{O_*VgMf4ilRFr0I7 z)r+Qk$N8wvchJDu_{eDyJ53eB6MAAqRzfE zagq%i20(1OV%sn$o;mKP=s{_5YD!F_7y&$aaoI%7lSBPo*%Yj at 8kfQ`+|UK!>-2_S zL2}#unk}+`F6o3-)2h`z2l~~#fdT$2JQuUxH+<+!Mv*x~hRKV;`bKx)w)9k46uHev z)s=^qGmYhOwj!lL%|p5N>8p75^IMLqN-Kpi=E>DuT}($N6}h=FGg-poGFuiss}6nO z%UI{6mRZ2nY1FW=Yr>DCFGq<#1I^G5zLqFpQ?{*A8r0R46eimVy2p+<2x>Y^5%C=n z?aG|TKFubK_5j(uLDuW>Nk`Ex#L0=XpAw_q?pyQmPq5!q$&8`zz%PJ=uS?KNJGjM< z?{1T`a^iD1iXD0TBN;;^^TlM!oco at s_ec2E>sebBAmykm`B1~_**d~;vR8238Ns*t z{~YDoPajwAr#2a`MZ;ymW{5X6yUj{GvcCtHI>tCEj^)TS(D%?v)N>=yd+hOKyB^YA z8PM52`K^Kys8H}EcD>8zB9aLqn9$=(+oD4980xjFzi zaV1BtW}{Qm at uv%Y#EK|p2QUFF@}OxdWs6mBq=P5$-vlXomY5=m% zE2&4V8!kFm-1KIsZceVnI+Z9nQhibKCO_fiOh$}Llo*qg+ahkQ_sbgZRMv{UslS%s zPe)F;H*XVWd+{mobYM=KVNTl)&+{F+yE;VOmC2TfpNfGTGdfv72UAUGxrSdGBuOZ} zDN#HspYvp79orsTq)_ydyWYD)H-yX-K8q_+V)uIvRY0miW(eIPCa+~O1>M1uqCO?t1Yj6JU^9|2h(Sgdc?c|6F(^SOGSh;#Z^mo4PaS=a zpP#RNmUlzPL9NLn46ofV8m+tv+ySC#UGKM&)j_lOhZKcI75*Iw_lJ0Dg4%~9&l1IT zC3DTG*VyB3EUeo$x>+ZV%#Be`CVa<$3VNekLg;dOgWCv=d;>@>RkrN5?7hsrPSkfN z-V{ZyP|?qug64o at +PN$dp)nPUy_*Am!%Z at gbC}*Dp`}QSteqzGVqmMuy^Zs3l~6Lw z%gNRKq3^YnU0n-jjN8LIwdZ5HzY=n`9W(*Wq_ zR~xa%SV5T2h;JIaP=Sjt#?Z#2h0}Y?d7fu_A>8-ei~zW`SvIPiY4Vpd09zj~#QbJ# zof3LWGx)5!_lV8pn}ylaN4ZTptR8x+YWR-M)GZac{h`1V4KvJQsfiC&!gH2&Rb3(G z>t$+ at Seyj7;$Dbz#ywl1D9V$$a+6u&Oi|3%;h~{uHdnXJwqlyDOC17Gz50~fjP+1h zJ at 1BNW&gePnbSIs1_dw>5CJF<5YfMHlH;skXJPC7ue=u at r7_!i0nCr#x_xU_>2)9* zXn&FK3D3#U=(D8UNAjB7~EJ5Qh3N}9 at LxZl~l^G z8w1miL+vAi-|r6(IDQqSX0iP*tTNU(iM at 8OGCHHZz0qM2wlawsDYzrTaFwB(_ZQMq}Hq<+}KK z=njVNe!qW9?&30594Cr`UHoW|!Zv)26Q!vzD3S5z-2WV#FrM>&gMKoA8Um^yUV?7SpHWjp1of zaRtdhx|0f$ky=gpS=?eaGlr?#rxwJQ`!r`>!}`6~J<9Rt*T`w2@lje{EfrD%^Q8`UME65#&E48%Y|Q*g9J{dx*K%8vSX=Bx_)A z|F01jrL=8_EQt64exjSFUZ(MVPD=qhk6bSjflogYup%LJ3L?9mV$?@Ag0Goe{GndO zK+g9J at hpyY99_YdSJpYf@s(xUyP at Ij{3#{}NYALp57+h1zV>{tEP at vU4MSC^uH>FF zk$o=S%+uwbhysCp-X*G&JrV z at Wod)xA??o=}2OV>HuA)IQnd)4Yk55o|d2jPcz!7AOdLKJFlf1pNy8L%AyTZqqMO% ztd9b;?Kc26N2}8Jx_s2UnTR9u*br(xotL9uo#9P92Z}d0xNNpPdxlWj%SQN5Bg{Li zu6B4)H?BiRO-1~TJ#$4+=a;tE2SzOqVYN>=ZenPf9|J*bA2XU_dcf;&d|d{l!%czL zxzeu8H!J9v{uDCQMhU!jia}o~nUCs%J1hdTNI?#|iJbZ*ptdFR(VEFNyEKUu)Q=Wp*F6CtBzS|z+@#t7D8l7UDp`_OoKp84 at A0RbFAx5nbZ53e#ItKn&A(B~U2ahQ6Z6UMONoU^lIhQAV{(`})_vP>#(9s7=|j%+W7sbql*8)#FP zxnUl4&hDQP1wK$gQ+kwBC7D08j}UY1j2MJRtnu(1gt0!(Se#zpMH-ZOlq3H>5P5Y# zelQ_K{+K^iQT>`wW$oF>t9)N8RO(S at 9W%A=mdIl^icgFN0~tAfuS|CfmUV}afr zy4PHybI1XLSa$^TR+~MOBr*Qm%aXE|>(KGf=Fp}{)Peq<$*V_W32v+(N)M6-3QQa= zst$Ef)1qi>1KEZe at 87IQ53dzXm7JXY!SF|fz+kUOHg7_$N(&6K>3`_JHf)*e2l at uS zzyfszpQgH^UrLfrPLHh#M}zMyfa^EC!a1rNA2P~1rSU=43Sm`H<_Ur7^F<89OaPxw zDPRpv&uR|8$1mkhd_9P{(#M0lu`afU>2Qt0rE8&tS9pC;D2WxTDe~qR$Gt15yAe4% z!ldp((Bli!B9PXVD$v{fn+>5%vi942+7K at o5D@jh8x5kiE;dRgPA=BY!gjW`d1n-n; zcyxw~ol^?e4J)6nU>*s6KP>=iLRD7#!m}#f9zHT%G&|U`!&V~%U?kol|3;~>}MNvh%tDa7PH at 2z5znu!nbgbq`;;(R2#rOvOxANxr&V~ zwrAxL)f9%7hCTiM;syJ&V6H6fd&dof4krnOm2F|Lvt~iZ_2OA~TsC7gN_#es(VYck zdjDo!N43FnnOks}vspLxRzgF=GUn_qzu#?K0R}ArV;}$#-8kn|m0?tE9-ruYCM`B@ z{T87NmjLw>6m5z;;ez-x3vo&6k3)H+UjlWA=xBUG=Pp|6C!OJ>wmZlk^l$EK34YvT z+>v~*9)Z*hR1`8D$#0=$?;JOL^qmN)1&LsVXzS%U7_}A}!)R#B_GrtHeG&sd{8~!S zX0niX3cRs~N?sgt>^`_GwD9y>O5-bsoL+ndCs1vr)|@+_`Rpo;EZC&#ipys}`aQ7y^$& zT=*aekA0lLJ90mk*Ewxd!suOE8q4;}l*v)#uaj-NZm`7q9Bah_<)o;)PB`Y zHm^m64B05xX?Qr}DJv3S4%UXV z1x$_PK6T;_6bSJj_NRXL at YA-H&pGs9W3iClc?*Q}(u{VfI#~ zrfi%07+8zC1RuqW83e32jmUyhn^uI>d_k;@22B_7&BYOS^6tt#lry*#NJ$PEMlg0` z?iu at doizKr(NDMjkza8M_UJ>X2dS)Kn8p=_(v0xkOw4i7RJh_Lpe8+{vG;JfT{-yz zhzh0*`uE(iDLAp8QwPKn1_UE^@8gaq>>VkKA#&q+vt{4{6(5~}>f7&l7(cTmLT9 zAw#3Q(@<5x>#DN3Vuz%zF=jsJU at sjhz6*RaW_tuh8juj>80WQ`#=FJ5{OZQl>L%MY zyTG5MI6UF@>x;ErTD3bgQlWf1)XEYBR*GK)hx%L`T8BRK7$vx4^a&+5FbZ;{G?ee zU!cTr)gX;BN{#e9DsjAdsgObvnQgP*!gJ8}@ykg|~~E0noY zw`z`Qjl-`vKnu4Wq+UT_=5kuee+5V0b3o7WXNN}o3XQNGG<1bZ>EJkhq2EWFn8nOn zb$I>lkj%)!Y74&dw`xFr2ce+c&rk^g>aW#+f1PV=oh;03O^iAJ`5G-z)(J%%5wIOc zR at H>98E=#!fO_HgMU#2-g&Y&|qgS8AI=~v at PEcc=rY^DmT&qgwmTc^sgu^5+24rmc zs4CY1#6gHXkZmtg_|+ou_>z`L%4*t`TlQ7jRn~94Uq2cA5b{J3N8CY69K=L{%{-o! z$kw^gP*M*Jq=s0h8f*Yv81Aj31GETEJUUADnth!DD{Uq!fDuseyB686>a^Hx0Y>WT zS)I)ms#y+7nd~wHTr{=(mkd~%=#X-nR_y{jcB!x44NjXb%?h+?&f at ykF$=DmA?KbP z`?ZIcn=K&{xfO#S-8PSCem zRW{~r^`^;=4_?j*mo{uLrAgY!m$b`)F7vK-XDK(dRJalF=BZ@EsH10 at X78P$(V!7(AAPUBOJ)vdtbq}rM)9 at kO_8T2cZr~f9Vp`U801^-=+;7 zbC&Hu_y=Bk#kDW0D=;iX=A|s3Sj*CYag658m%?xa72nhtiG4KGeS}AHF)H${5cFt8!BfZuZ_k*S1?N7?^H39q5sGm?0YkuZ znk`^+e(NoW{jv%g!?sfg&Legcnc>##AYNiV$$>RxY!zy~EtcvA`kHaYy+H`zHAF7p z{OI8fyyOgn at +HvX(pDh2I0zN at vLEJw=VkKEJn4exx|e!!IN1EW&%8Joes>+sYnh9g zcj`fb*X*%>D6#kJhA5Ta8#UthP-+c$vPjN-5Mq4B{;R at YZ!Nt7J{7+88BGxXCxt8j zRp0AQ^J1vOJ+js?P%r553WRV_vZY28oQYNrLQVs*gR(#&Ky)dJ$g81DN at B?@2iGSw z2#t1K3buhP1F#dlBs at PSzR#U%dQ`MF at 3AvfY&!A%dR*UZc-yU6w)=uRqKk!;nGn~P z8bCSh;iQ+h;s#C5IF>;LHlMm%2g8$bI4QcNvo~28U09xCE^R0-Tc0PZ(pjRKJ^woE7i&gJ8(%dflvnu`w&3fEWhnf@ zef4 at Q*~ey2U}#>~=+CV6i}7Rw?)EIK^!$T%BbLDo$3%xZ-N_!=TaQ2-t%jQxq*(P5NcaAxyYeU-UP#X&EY1cpoXqjPO zDbHjUjE(azi58=D>L(0g?s2hb6KSg!?==BkR%*eP1;OS30gnp9nlsHn48_im#ux`L zYQs?J*2+ET>hcqTYz}E^PY2ol`tbACyghQ?*qegS__gdrxF?)dOw~IOg<5VeF?^nr zWS3o7zJl2JNr}q|r~HqLFQ04dV8Y&UuQ028407ycGH^V z)Q&*b=OCH(uoaCcgT_2X?^!9a5L1A9D8>%Zd$fl0^4+*8tiEx(uLOqhx~J|4U%``h;coGmoJ>siFzr5Q(-ifCAZ#wvyCqgtSP^aer z=8#%H{BSXgcOSwVj=w4x-RX6+;0q9tAISej!A910MpoaP|FyNXDm9>h$lFpJR#j)Q zY1y57PUnOQlEJ^*0^vVED{JaD4thl#vXiS z%h$uh_hm(ZESMCUD$;-l4oeh?994!o)i5>?Wt^dgCGw;sx at E~$+bXK}Jk{S;r!6a2 zDw1xzF2DxRZ^&bE>L*yzse(H6VHWIZt~v%JV0GEan_s%YK^o zGP17|L9n`fl(cYgfF76$8upP&AtOV7K!7M<&+Z7T*eK>)t~aKw#Yh`Ka8;m9tzn26 z%_g<9b$hf37Sj&#U`M!VeptinGG-{=^n3pM>b*iHxbP8+Obn}J46^=er3S4D6r+}T zx*>sT#t9MVs7ms6AN9DK1W)cU`#~A1$(~@h82 at 4UXj~ox1*)V8rBaz7F`mGAc_oj) zE435KkH{d9CJ8a)0it99zJnNI>EBGqGWjAUT(J7!ft0aQQ1i%Me`_DME#|gU_=z|Y z-N&r}ID;#R)vzs?Qa{HMgGs=vj+-}jW461m6>DWJJ&~A(}zDbn0;4-InRMWht4+IL#7;rgg914#E{4MHR z?AHBrKNbltd<1Fi-bb6RhPnbjIoCtz&DTWWm3d?ELo;wZqj4DI&I=5Q;Ioi3r>YuE z_3{iHe8bRBl`6bw&*Mb-XeRMMye!hi*3dtZXO({3x*b?53hnT!`s8eRTBF-EW-0#< z&aU6$!G*6_WDwY85m5Dm1GMN(s2H^@lMOLc&rb+JM^!Pd`^qESBzSZ8+4s^=UG at Zf z#5fL%f5a8kl%h%&F{qUZlHd_;t7&@rJ*pm&$76+p9~ogKJ&0>S2O at ok1banD(8u0) z))GPZaUvR~GR#y|r~X&Yh$b;q*`J&}KRFZrC(dRT#{WZj{m(fIyz762tZrAORi##? z+Sv*9DP+OWSN&U6!;UI#%RfTa{FjWaBNwF0ky9r!KV^JT%TOaf4b-d914uMaH^75I3F_g23RJvJB}|Ajnp;z*NsNi`>ANmV5KH) z9RZ0%w7wf1?K^UtohQigY!`r4UKTu}b0C!i1%QS&>ohO;ubKK*<@5CFaj0x~Jmtr+ zuh{6LbCMN at j%ORV`lmQrzQ=EJs$WmCFa-=HGS_%Z`VfNd(_d&ix0vi?@UQ`_i7th; zr6kd0SjlWEn9zY$EQvx02y`(mZ4KLK#pl=g-z+r at FkzY`hxu+^FWC^I%`!Y)k9)du?RY(mfMIxeTiROgs43`<0Xy> z-Fo54%9r9P1s9`SHi;(n!77uWF7TIvgFXc+>;ADul6cK5-aXOE&xkfUYCSPRoO<(; zATi$~5Ws|b${I*}6epam5>82V0ryw7KZ_h5Qa;(T|83{_zu1zxSlBw-J3IalS#4=x zLDUa1bq*V+F6a3lwra(*hjb^vM4$l+fqPb!>`S3lbsgZpDgz)rPay6i&d9hMY&5mS zXfwH-y05)|POf@*`nZGE277}N6_SkVQ-?Dao1`i-RTxGSU1Y+1Z5czXX_U1pSVYEA z9XVsm!s~YprpojIsB9rrFJUDrJteZ7pc&j1Y>5VHvlYzdN!8EUU}v=(K(#%Ehx3FI z&7l-KooZ0P2dc5l+9q)WY at 7m^yM-Nd7VywujE`Fv>$x7#d{=JWx>(RKF~y5tAuBgsOfTdF~Kulv~91F*{M?^OS%vhzBf^L at Q?T$nGE&(j-OsBG6!Gpst#FSA-#k zpL;(dJ0Q-oBPWJ8w180Pzau+nv5;a4CC`AyHx|c|C($0EJ%axgDNj$nc;bIXYGM1$ z-pWvWfSHOlhYBQkw4G{m$a)>GCSq7P{)nCq^&~ zh1|bbYRqH_5wyYvZ^72xY~~UK+a@}cx6~a1UgbJ-wwCirB5-}r0x3RcHultQLm~y7 z)U7tGy$eX>)O~4psMK-iu`Rohxi=xuYY(Jj4%~`^8EP2bN>%d!B3vjcUb9|aa(#jt+ zFqMckn6(N^ChiC9Cr|jl@?@u6Oo{#EN%zSU=l|sSr*`4r%)B;63`<(q%bpd653)DF zN{B)E2vXlnv^m;~isK6da*7DS2;PDCr7~qn7F9&iP0gkg`taae1sf;kRY)((nPS%=#ycMvb<1Y%p1ct~j3n=@jRx7OxNLU+>@bSGNKTiL(F z(kRSl8FvIjO9BUnN_j~A at b>&#iai4_0UP$yb;KgnsEl0Zv0hu&cUl$`leyNII4VDk zGdW3B^ z>ltA(P0^Js*+#789Y4!XGuGH_uagcZ*9NsrDrkfk(-N>yx^xU-F#~F!yT8xwOvSC9 zATpb;$Tm1xa|ZIw#n1>3F7dZtxEy zh4?hm3%pA~LkYaK?)ifbAdi*e9PGpDL^IE)$n_%X`VuPiG49{oWrSabGP*U9CeQ*=2H^F z3z<>N7xH4^V^7Of2=csB+Te`E0{qhy#7qaipbwb$5(p=Mh$74Ahs!x(4$|IH#{NK+ zg7*3wU0au32U{>8Ao9U&@ssFM`LK>;lIeF>~= z(EtW>yy*uGZVqhid1R0~VBn!L4UQx-p>g`$l1hL}9oIp$HslgUChfK`((A}GbiJ}*55dE at v~=XP z%GoAokiz6kj~85p*+$k-qKh(&vbJQWW}_ZkZNFyG4Izf>t8lcACz0T*Pd7fz!Z`qI zE at BI!B`IS^wQ#fW!XN55RZ%2hsm%49H2Ys}?qA)Ee&SD+Oe~>u+hxzr at qkWQ zp$mAyAA@!h8bQx9>kUe)j5l4)2vf^orTAzL)3~elS}{-UyI|Sv$YR;;+MMOEet2~c5$dBvD{(tYPlHKtshPqPUcAghw7r<{~#!N&#rN*1`lGB zbzLrpBS4GT&8vq_bfE04S(-PwNG`!$qNyvkSxhWk*ZejO$C7)~Xa-fC7;IuI(jXQn zN0F!U2h-%KtkS_dPNkPYKWK_-FuF9g zTIR|?$V9#vo=@xlq63P+c3Edeztyu}uBSDFh+Q>q?R zRHIM?in>cpjjo^>u+PGgBKzVVA~Mk4Sw^&3)h%`2lNez;kvz=%fP78SwMU!&7 at D)rEGF#?+&fW00fU7K~P;hZ1fO z@=pp^EG679Ho@$}i=X#b#Ftdk&*fY3ofBku8JcNUg%d-*$KQ0>F7t?bT5KJCJ%`-1 zcQ$Ggve>Z4a(obz(+SY<$;sI8V4d2sY(aDj|8+^;$1?9eemdMaPv*Wh#2-l4xGfLh zP)yCJ^Ur+pm37W8j5TaDYft)n#RaViee$31nB~)j@&3(<=iBF!hx30dSohC at hqs`j zqWL8)Y1PftB<=xSLlDxR at Im33x+03r(CVUEkiUX32>mBr($vXg6BZRF4wf|UjQcjYjCe79)$43*0fUHK=Z_QQ{OEIs zD?ppJ=Pm8vXhdi<*oLDPkVdM2&TzJPoZTd%b3tmrBtx6W0#f_o`_E;oS9N9BFoR$3 zSAdQUl?U;-jbm}U{RDCjhZ}-Df{aMtkP}_76TC09_$glb6A)r=VG6hf>-g^~U-E+| z#cTVIK)ijPuko_Qm?U^gYcNZ661ej3$qI?fWLl|BC<{Rb`Ba-<6*`&iq9+Pj7>|C8 z(q1ljr#e2*ht6{e2Yi`8Nf(HpLS-&wjv)*7`CIDLuwokdpXhiT_}@my@}{OvCjW$K z6F2^6gAwpMp;?mQ*0!oiuTOM6c(!Rzj7lY(o_aHY~~jBVStZQHCkso1t%v29mu+cqjjg at 3Jm_C5dJ>+E~(%X}F9 zVLbHNT5tW+c$tI~2$h)d=NW+X1rmrn)00xim70S~VyIl&cAnwt^t%3h+u8X7YKy=_ z7UM;_MS?|<_8^_RCf3nOyul=p(iE5JA5qja4Ed;G-o(bqt=pr*;WrY|=`96e=RC~8 z>o&+ZVl2PRbSqq#!?7E2YsD4gtJAfJMY``O=aEBbwq_PxQ+r+t&ClE#4$Oagb6yzC z(y41+rH~yJ?HWan7DL`Pm at z=M5 at JCfiG1Fo-jms@hQ+s~{ZFI8rrkf4OqrHTT-?AO64`= z>XA(o!NTcz63w>s%#iQTyO$1V8Z}PC>rV+b^ybMRD5EX at j5RAgYmsul@10X7M2sjg z(X_^%LJ3>gNR>fL0Pz&np4?2V!P>yhypMV&Zuz*d$2U;cKd*BsYB^fhSx=lkuVanu z?z1#Yb`ta-{k=Y+Zassx5H|r<&4T=W_2;`3esWz zwObSIew!Qp?5Hq|dkn7Vmm@>xiEy&uF383VR#g$(bIk at ov(VAf at sSNH9V~3xIj(1r z#LaoBIINZ*u_?4oQA-;1^cA~$WVKE$j~{Y%8R&!;81&pvM+#$E(tJ}Qi<79y70Ey0 z?&10JezC3`!bL005mv0YRkEyEH#Vn8Y>Ab5P)$2^J&6=^+h9!+)a(j{BR{K+!fklK zt6lm6(Wv|in4FX`HJDXKx3I!BG4h4vtu=|>8M!Xr#?mEXLF>W`fA00#Kk~Hm*S%7>VF5k#!xrRROv5Dj8HV!Ba~_vQ1pa zxRJUfu8lH`Ub70lqYSkt5DPm4md!!wMmIi41sb9!Y;uDH0wzB|*fLL$cm)*Hscs*K zQi+BQq#aF|(OI~f-~Z*FAzv}K_~wm-f;N~~n9xa*E_iV<9{3TPsh)RkV+?4%7Ws}q zVst28H##AT|NAZQ#jU?CwD*b4V;biNZ~rEq(RA44_sv+w6A^Py&cyVi(|~tBbI+K> zbXW?D5(@f=@0YEpEDN0(gS?+_W9d{Y48O^LdF>$HmaHIPd15TzLKw+Bd=RGnom-Gi zl`Z4>(+!Xyfq=08XImGy{buxkj%d{h<-ej)IL1s9_d-c|(Uepb6aB#yZ-EQKMWF)n z2;YFoIn~qig at w^}@;)Q3srwp|Q?!eVi(xtJH`{I)Xy4??5kn2zC3i9weB|ACevOq1 z)Vc%18O|Zb0t-MmstW;~1as9Qv6D`MgJU>KrBA?wG7;C&z=%7l4W~z6z-_Xzz(){o z at 3flmLE9*uG(LDT-Bn{qhXbUv zanPLTC-BQyzpbrzx`^BA6&#;lJTJ$hJ_tdc#`%W`8$Uf1`4=IRZwP){*$s`Fe$||j zsneW+ZFAf8l at EuF0ih5m;)pM5g_7*FB#uVa at W^zOq)b{z*0ICJM~*WTt9FOPFWuxx z^osL53nE)FMnh^k8dTwlML|cmv4BNHRvZy%PdKMihCN{Iuv_w_fo&Fx9RHArW&f$sd`8!bCDb(OrnZXsgL_rLy20cqDt4n? zj3e?s)K5L3n7JLYyIEPlhG zZm(&c4&al*#z_DqA)as!hb*u(}cQ}SEe6qkaS z{rtv~Ri1s#)IrLY1`eT?Qkd^e&Uy#tVztd>%-Yr~kLqe1AzhtfVhF~HAx77~vNzzg z=NQ|xEYDJhpwn-nM>__6&|poEs^;oAU5`AgJl=ZJV+Ra3uB71!nSv*-Vzo{vggtRT zg*mcbt80XY;v>c2l}y=!>qrM0BGE!k{VL(C5EWT%eaEH_QfKK-;{5bS-aL)N{Z?q) zIW~{TrTN5|fAV@@>1FB;?)ioL(K6rR6iA at uNr2U9%GN|M6JSV0SQt@*2&S!#b( z$=$(+&HyJYn`LA2r?Fwg_B1OWM}q8K>?mx2KAf`Y!oxE at awJfO@fnY3eX^YR#+aqs zZ%7aWDqO+POSnM)J7l9FQSEw0nR*-C!b{v^;F-cBl-zEaQDyc)p6e7U5?TCs>Re(; z3Q>yp-+%;$AYx<)N(ub-hd#bLK#g*{BQcr!dnjejD%F0W=r7R%GTm$BC8&|D625}@ zcq?m8_iW^GilSuHxT`=v6Gmrjj(CzDAbU at D`@I4Tc*QMOVc0}pJVfFBzxAERn5dM5 zKYfQ9^gkZ;4*wGn*GVc#TaBu&ZrQF@)2V+Y_Yi>zRD9^0*O0mp*RZDkH)0uE$pj60 zaypmG`Pg)IrS(tC$X=N(W1vHmBD<*k2L%4Es^t}klDzh8>a^Wk#PFx# zAi@$|-%`XEGztb%o0nw{W9DGVCjKX)O2ge{`mY0o_doI*|49k*fB21Sxc& z{Ufc#7^2^ z6bKf$mOpU=D+?gd#}VM+3>Y zlGOTVf_;JsS--H;prKO{VA?FTN at 4~OaT at 7FIi;o`N;7|#?^noGT~Gd_s0GjbGlV!4 z_z*Qrl0Es}MQ4Y}#N}|1)M}PRpr)SG7Yeie%p5(FWjlSL~r^KZwd$7nUvF1$rv-Zo+mS$!~To0!dc=pJv^W^VSUl%X6YD+B>QA82JI;7d=dBkcW**LbZHu1ox at E~`Rr6Rnp&?J_jC^>UH z-^Bh)`r&y3DUU{RnS(26EV-CdvvC}jdh?g`!_jIJ8(S5wlF~}jNJ|8lhPbMNk_7;v zW1$(&%iG}NJG~VYYv$2M|5_XgGvHAq$NUt);mN^!IejJ|*fH~JpmUxy6l(ns#;TqY zKJ-u{J-1YL2HEheNt4EmiBa1ka34yI2a^~~Qhf!#x5DN*oX_}_e%A_swlB1YS*(l7 zmH1#5Ok5rvLd_;w1X}b;eGwPmGm#!JDay!*HXd%v+iRQ-_oDI-=?8P9OQsNd)F_bx zwHU4Bze+#;@}bt8EkDgb00Frp0s*1 at D`EAo4(Akg9e121v`=#vEFERZaFV3iU_(YB zH-}^}MvPJ-$7mtpdLk$KSZGt)m?OtSEEa4oM;N+I{x?wQu-HRt3npRXZ5pvyi1RLO%7FyF8pid*7O z!qBwAn+D9!bU{dc+xQ?`1R0nt~z&a1Wx at kbza5}8ertwt{7dCZ; z;?Wtmz+qRfonYPen7{Q$bA2<%+n7S2e_1y4v5rKj79ONH$_;gq!GOQOy|A6WO$iHS z?_ at XiQXfl0f#jRfokd~+-Aq1%HddD_O~lK|&PN3$KYBV{RGoq`KE&4T zbE5ui3Kbo?i(?&MN;tDpW6Xrgs1hRIVHv%b0+i~_Af^+ukcjN{abvUrbW2f?lCxDs z1tWn5)K*jx2C&!1;MyPakR{>kF^j}ycXC at nN@FHc2z1g>HD=m|b at i;G%2F(m`YrLC~GstA;b2EKX^arKW6CJ`adJZpK z$<(DGG#j#3>m1yWe#t#sd^9`wRe$z)R(u1KOQt?nb>iWcfiY>^6Ou=^G-R!9*LQH+H9CO;Z&!S zaIqA`IAQ^meWYqFu9Q`sGmCOypztk zJm1pj7&^y8N48w-VAW#<81j>4k0rkB?eca`vwy2@!E`5`OR$~}U#Rck=tOPo=VtjO z4c4abbylD{ycl3u z`TsDYsmI%JNOJN8LjD9#?2ejkWgtT7D`q3=FbkJ=VjXbXq-7(W3(;v~2;8a&Jo+vw zi%SvYN=Jlk6WJmm-l>J32~$|C%F1+cOe-8`*G2~@hb)b1<4HqW$m&PX6FWrMq!%-< z$#m at EIv`mY=d8$w>;|fbKahj+7BvD6Ba1au-7k#vgNl>lE!am# zGZ;)CEaW7=ZR;=O%wMKh^wg~$S$Zwf{-JsS-JGjetp0`$ocW^c``No7edE4~JXg`Zq1AVrP&83@~7tfISa at Pd7-KyTN%^U)s}A3%je}c4?{^P_v$G?^+uDxkn=r86 at q4a~K zhFxV`jnsN|SoFMqK4A4?-U&I721*ha69*d+)sz+CAQM*`158kEu#Mf-hS+p5LUCa1 zsoRE-%Iwoq`jjB(zWN&$h6*z1Rj<~qT?1{CO3c(tF}V-)O^h>ya;a*u;1as5u)6a+7b!v94XO_sr{0?|6r+Z|2x)oD&auW(G2mz#QNd4_xPPg^wWg9aPM!UWKUk zk*itUft~o~Ji^T1j6$=_!t}^Vj`Jq6T{G7CS=7Qj;n)JhtC|&?$<;{C$x7!Zrp$|S zXdS|@Aj8muLN+&;iGN1j8jU76KFqF5bRS}tsy>)nU6EiFJhn`Jg8X}NFr!RI;{7R( z<^OH+*AP}vko~Xfa8;hLUl0WFaX9V|w%KKu1f&9igB%KF-E9JhEXgWF)gzP3B)8-O zL2Cl>xDF(@ZV0 at Aao7owNzuK52twKpI_QYchFPAoy=Jnx4tD%}KS6GQ6dGq8`J!+% zIpX`|f+lnz>--CZ^pl!%IsyxeuSi2+w643=_G^kvBXqXE&^T7!SnXU-e>EXi+YJL zb9;;*OMrt~h8vmGjH#ZC#iRZzkH8GQjMf}D zeKDGK*KZ%Mc&rVZB4I)%Z(wv;lwEY(86>k!UlkP at Ngb;fV7-NkbLAzf(({HF{!ah9 zfg?5GbOLXOfV=-d&?5f*%uq+tecvTcf_hfIaqCF&QY*2x$FXl<>O$S9=%bHNnntU< zWp%(W!Vy$JXyE{&dcK0a9Y2J^wPN0yI;6kro)a(UOVr4J6kq-2H1Jibi19&%bns{?pty=5AFBlIE3+ zm#?s!OKcFiYf5&sLEXb}J43D7yx`iE>&y;_^6X);qCOKU+zA7d4A%2(P2O9Ag6je}~oJH^c+?eWZ%DkqOYwueEFt0j=g8%QHX zBtBBXOAZ2~kVv~iozWc656FIpB=?RUCFi3Hwwe(LBK^1ri#E)4Q;{^m!a59Rjw6fc z{#)ZfpG*$<%lQ=w`oFld|F0_aKl>Zis?E at Bz0?x9%prtaLAS-|?5$H4(-) zH4uvb1=u&46Q}SoQ5{;={4Z?JZ8dGB)B-4ras)|?J(NmzB;Qy(R14l2`wp(cooG`y z#HhcmDLY18#unF0zVr<1xO(fhC8C~$cJGSWG- at wdIYy{_{m%wlK}8X`)nIROG2z$= zi^FwVwb+!9nBw_I;*KMss(-Azb#;v75on^jSJ*AMa^W3`NTBiKw6M`8HW#W-94+dd z8C^kYdz`$*s_~poJrFVt#$ClO9KH#A%KM?||788kHUhy0a3QTPA_+CaQfCEVIelEQ zOopK#(8m36wy33(UD=UpT~sv2L~NEm=D$hWu)%kU!~QAQv9NBCb)I;XTJcr-y!NP> z4k5D7BdfqBt$_L$)JJEAJWC^#y^o}(gGmS`nXEz3J6`!5&TG6oeR2j++ZU=fO8-mk zI-8anS;UN9rurAucUe)zC;Xer`Fuk51vDujdUDu at HZXeThiK%d3Mr;oto#CIABcDY zSqkp|G#U71^f3RGRx|_oAIYMB!w_QBw4CP^0iW~2Ah#g-#cCHdWdRj!-eHMBm!yB!2+%0Q%|bHOfp*VjI?}mqd4ZOtJ&`=(Cj&IT>QW`SqS!81a;t zCHxDz`t#M`cID!!xx(E=OXzG9yIw1p`;gG_$LFC|7pXw(W|I>NLIk-F^5=C3R zM9?gxW-ZEAr!D at MJCDH$5 z3AcTCG<`?L-Bu|NQb8KtSxFbr_#?AX$-!EoT$|>n1H1&0aIlgrxPtQic%fpODGqUa z{P>a{qc>1-WV}Y4(IjvRx3VC}IfAi9&}5;^E}eU)Bq z;Sx3Y?#2CR=B#J^BlCLoPP)zuZ_~2f_6**0#)$35i6bxg3}!*sJx*Pt48udB9A0`6 z12!Qg%(bevn2<%`kKwB(93hSl%UBD at pCY3OzG5qgE`CHZ7;X+czlr#THNB(LU%+_A zhM^|-KvxGcBJ6%nxWN+P#|?6C)Du8~pXH)#u?&h;%dPC7$2*+8oC6^w(vAJ_m+{VZ zcvnodBa#)U2R~~Zp?3OV`7+3q_Gc}9f=PC6Gi}^AXjV9Quo=ltNS$~_0HTeSKx6!X z8)oS!Gf%Yrd^Iz-551+jl*+lZ4Tikut{C%PIhrVlR%woYiKjexWJdU|>~k z0 at BWlCR&^t(Xz>4>YyXT8La)D at kL0~PgwJ}tV01b|68}^% zJoNuE-~EfuA|>@rdE+mGJ@}e%q;~*H;%rfIbrLp?@p at 4^7Y5WKwD^#fqt(JOxghyC zCkn}g?Dx=?Z}V at ma;1KUz;}u{xq1x!2_YHpjmx?BXRQ`9zLmEZU!OkUyQrGj%561! z5aZnQZDV0N+(Y&kZ9(7pX;0gt#PD_IZ at H*-o#GIm)l}807)gUp#-yK9mdh zl9xe#c4MV4=dK`(7qy+W$vb52$@1$ncTeZhdg`!?47=!hHGen_JY6h{ClQ;Jv|6#P z(CzFwW2wFrz(q(eG=e~wthw6x)mt at dvxm$K(%7_fG_imt{R at nLz|tU=8N{pMs~N_Cquz#Xqsd)78ukPG zKBUiHYY&K``fOMY`KT&E>kY%3m^^7JCuex zmsu9yPB655)%4kgI(BQb;PZJ>m6t?iP&;P&nXtzie7Z(&XQTdiGouZxt99_&kK&SP z{FC4KY|pdvI;W7ES$n)3LgY at Yrm!8f4J^_<RrzH!9)4>L0}n2DGa> zDp|w(rcl?nV8?ABio8xS^5 at OyXZ9r1W*r^pQGlA_MbEt;OdT^t6TQk|MEV7xMfw?8 z5)Ak$n?fD%%73TSNKmXHD%Ks5lG at FH&fYUE$Vq8JqtuO?B(gInkOsJiIowOqz=CiP z!Hi1c`f-OnQ?idwQT4T&W at y*X3Kaw$ej{QYt5iz$RMZZixBMcAgb@&yFObzLq*rW5 zSRA->`Rs8*%ycriDd`xGFO|XftLg z={oIYg+b9T;o8a8rgY2uc#$#vYR>(rBvOWdHW-wpJw4eW$$MqWTf339msC{tFMzzO z3rm9I8jE*EE?y1vePsjjbdnWveqh+`CDn^37yJ_ZA_-i_G)=q&`TBgkwj-b at nCfvF z+ at _a7@DV=X9M*B9^i(^o-DCZbPt;M?9HttV-G}XxIcJ at c6Z`$QPfiV#-wh at G8M}V{ zxwBFI-|AV&*~H4~ZxLKE$`kVaib#AI+DKJhqF{rN{3ro~*8B1%fuy8^!y%M!%2B#O zcJt_{TQ72%n5Y=O{$Km|po3Iyz*171lbheOS)83t9#4LQ_adm1ATbdLp|?{Ck3wEU z1PNin8UZkc<t3Kxx$tdHBL zku=)!37%`$J6tPTyppA;N=lxzD~7gKWng}(hH5S?b5bzd>t>(gL6jR|cBoyHw^Xb6 z47l&Uaz?5HY<*>_s`}!y>WVr|nyjAa$sMnn~K+k|JQjQnk*P)Icf- zGK>hON!ABuRK_CXk()yX0~;HeNRg;>D!%dWMGbr&5Rb5(q>K87G~_-wh&ZW8FTxh6 zNCypPKsD((XchMoAHG!+ERl`!o*@wN8`kmGYm^o_lM&w;$XO&SAI?(Tf6&wlJBQ-8 zSe?PY at 9c3v*Ysaup-=x=3-^~M_MagruBsbO8>#@kNV{@%#Fl;ieMNdHoXE at Ijw9@I zBuQc6Y;LLY1)w8po`%Y35(`@{mfvunL6C;ME*^#+CZSln2^#4E62AEZ+Y${X6X!uL zu}^l at -80;;kGF9Gz-{0Z5mH?VgT&j534L~-wC9 at rI^0*O-=AAz-RlaBQs`{nJ=3Nx zxY=)VW95=PT8CnJuv^$JDHXfJq_ at aH$s~%6!Q`5b`SFwJ at SGi6qQ?gm1HRV%zb>nUr&C(D! z*s;N8Mo_BK?Rr z7P;U+SG!SyvS984;2^MB#dozn4i&}>kS3kP4N;N|6QNJvgOXRs)|{%LizCX$Pa3O` zf|bz6o_-#oy~=QG40MjYxOz)5F|R4w-G}PiI?tzz;~vw*iQVE=tZQrXJ z&fgCTUakZKLU4c at pm2)?=~uG{3k<6U&lUi>3gXHNrr+xdk61oc)~FuuqYTR0(_=Go zmyJq=%bha5emu at ct%3in+!=-ZY|Kl4S0nof+L^nM3~#S9GUApsEG|sljyL0EGiYce z>olbM8 at hc^GKqP;x^Yq(Sy?tLa*nM^3s3pT)mayPPMXMb<4LK~XB^W)_g9Ogbz;zZ z#Y*wKl%r09Cj(Q$9B+Z|=A*g-Uv5Wx^EeB0e<1k-wOBT^XUcqd+z)h)*421yK9tG% zYkHBNibIT=!A&Yctx#!90aUNngt3^_XYcRNig))r#>RV)gFQqla9W@53PcrP`HSJ+n+j1n%A#lSB<71gucIbR5lzW785*Fsl9 z7kisClD>R-eO39NRC^&m0KGHOnwX1Wo(XxfhahF-D2bY>=NAvzh`YyLNCrJrN~65$bgZW^l9o3**N*&&CF)zZ;_6-3D;w38$^tJLH>KK&(965!Jq&Etug=s z0scp=|FdChL3^t%J at Q*HXK-MJ(jk!&jiM96G9elF0ws_lLBj(}2?n$<%If#`nvze; zYHkWyUPP+f)mP)Rh*cApfdPark9#yWDweD at 9Dlnv|N8uSpE@?##gTNF)^)w@^^5Ph z^JMe!u$+N_UtW|2*BZlH2 z`#j&VOFP^amF{HX1ca({b_%2Yw=tqYe_F@)&Rv9Zw~Q=z>aK~YokZ<4=#_6#>(`PK z6GzS=-ZiQ()Kop%dp5kPQ=Mo%%OZ{7wfBlKyY76f8aJMZOEBBJ`M(1>Jj?WNyzsRN zUwjbRV1C`s68B~CHfi2K;#;G?=Z9&7`5oq)b?HED(f-gmbgsFa+xdG zNqU_Gp_3=e45^6!>oopQh_v&O`k966aS^l(7Y0ID`v@|>n`X1dN+5VWOEt!h;T%kO z at 0@xJSDcGEkvC8YLfEEr06FGC#B+IN8$aQ4plr3=-3fql!xSOVfA|aMf@#r4gG1)7 zEqc`UixT at 0Ot}76dMaOlxKI0tXdC+XoW&WoQ1N4o5?k|PQ@`?whsj#mwP@?HPwlj` zjFGt@@+`V`3PV_y57G)c&{{z#nj at +bB3C6p!ddL7Jj3=#wg=XQT{OFxM%2jMz9K;- z;jzYaaA623z1Jq;s6sTuW`)>EOx7+|(l`XCsSaBHw~ZcV)y at i|+eHVYp`v8-XkRSFd^ zF-q)Hxbmxc63kX|b6G7{G|T4Uq}#iUlv^jM;Ry at XkqNR4lhhdqv~EmWztZZ;^!0M_ z^FUyN<)v$*{?y!>M{7}>fd1Nm6Rt;@GusOZlx3!W6IGNNR> z(2urcDl3+HF6Z{x$P?Hj|1j;4ukwVC6;(_E!AVg9s#>pD5lWS4O z(%f7mjnOkQnWyZL9Bj3-f>dc<8hwR>c@@q?|rLO;AE8(E at HzMFEoX=)7UAe5JVY zbIw(*u1kCr5B8$7Qg$~nxWm&bl53q^v|q z6&Luo=n4hRqSoRwSm4#`o2J+yL3FXC;n71CaI?lK_X{^iHYfJ?@heYWL=lp)I^6mYg z?{S2>Rf8)?dZbO%PX43km<+FLpmw(D#k{oSE=DZ0&wvcx_GN-*@kN;1ap9 at IIyajOzD$yxV!XZUZjG zg;h at UuJih>#~(5A?fiS;jaR{ekM4caSsue{zl_2D0KrWdOwgpj3tq_A*^%Gv&-$(f zgD6wmWtjxHH-Ypjt7#jCuQY+XyRR1$2ETrA{m*29fqJgbz*~Iacgpwnw4b{mFShSp zxB8!nKkuA+4%d1HC_SBEh3<{^ z6HB?%jzL|;q06o}Nr-f)-+{=kNSi)YAM$0?q~y at v`f!sEJO$%~Z;6|*75yfZZ#H@# z%cf>Tubu3e=|Z5$d2mAaDdBABMo1I6o!5DgsIuw8nb`AhB}-Z_#!{DdmE|oVRbdxf z#4u=BFJf3WrC>2(Qpfj%8|M}#!8fxrOf6+++*ei4vSFghLU?#dY3 at OvXh3(ruvTs* z@;Valni$uQ^U-Ryab&E-Cm}blt{obw+Kw6-w-xi;oT#W$ArQ5W^5C87uz!8esE~AujCRV&@`6ZNt)I at z||puQlnp z8E0jCey0!#yx)-0u|hfwYS&T_yqf3AMnT!S_OYL7*J7_y?HX+U{hT<#KW|CdJbJD| zB93D{ZGzoigFa07+;q`6aT%F(kV3^S6%(#$otB8v@=6vKMZ4Q(5W+D<&Q;LqW_I|4 zDqwI?iGi(O7(W}?x{7L%{ublDg-yg>XQ*6*nNQUc!wyHw7H6-2p$GaiSrVJxMvqU= z)hB>@+d+Vc z3a&p3FE(8G<6R^ML(BclsqqF>B6=J$&-uy*veX;}OC38d8hY7h9z#J32X_9C{{2MR z+oC?pdF<13gbF(Th|Lb~t*r`C at A0T=C1RVw%0FApVl(-LnFp))UA=VjSJC%{A6eM_ zdRu!)<`!A_@}hrwkUfNwi~XvxYJXW0d9WNKy85Kj)Kf!T5%heJs|063BR^d?*=7IR zG<32ANjPPc_(U^&`J9spC_+*gyaO-SQI3eLpO`(g6TPw^n-o}*aX`>d=F at YC}ZQi&icT_$lj(wGL)2!XBr?~(*4)ToQqC2yW zr|rcjjl3}g}Tru8kU~uFL*z))rm{ zo*n4Da5b%Bq!?bI at 6|kw-*+_ps0Dms>8NKac!dj_uBjx#D;s6JtXQ?}J;LwsR1d~0 z)bEn-4!q75?|6%ucT&=FN^MtD(z+|tU_7lR<-s$z=>=w$KP at MesCCtR)8&0saR$&_ z$k41k;A4hf%!(d0okZUZ%Xx at 8qsSMwTp(^_JJQf+eYJ%k%W at Eu!+(`d_@}8bG~t$1 zoZaaI zgIKaH6Lp{Sy=EM{nASZ~m1;u6)2gD0lD$Dud0wVio4!@nkO02gF^b`CYd<=N-s4nJ z%f4N`I8B}h$oSq8)ULp47_6!||AjwR>Jbe0fmAN9v at ASVyxL+f^`tB%mx7?%pPiv_ zDQZ!SVGezip+LiuqPwE~@B-5mgZ#q~AC&LDEEM)TtuAwl`dv9Mf_bL6#l6QA7usS! zYP^$GR$>oyyA_YZq0}yWbc-XhHfOKU(HJi{1TGa5h6&S@^m=+CyOG_Gps+1oPAlj6 zPE4x4^x!EeQxUOtxhY#FjJ$friMl-Tlq0jW6P{)=tzw2T_vg7?vi%OLeXdiUZrQG*A_(hfh5~5^ zqIyc()1wGgs7kp#;>_tJEBv|unX-h^c`eLK<~rL0W;?K`-58WV=S at tSxg!>NJ1FXR zYK5S=21}TjBPV|Nj~p{vSglc-gONe$=njyi&TmZNv1g8WEKO!j$~uI{#$~~4&K at O3 zPxueCuH+Hb4aaDac;cyO_{HaHoDCMuzg&7 at u5my)^ppsXj~1AAt>HY-b3kw>EM~!K zA_yAklgE35Z;Ckgq)t0v^k734-U=CYD6I|ki~w71(^p(Ygn7Fiky`KFi|1>D}Pq80lB~-7ISMXc{jY2U5r35QE)JF zA4-oQVFByc=jr at 5pI>;E)-iy(nNs%Q;HgBeU1)K)1XW#j<$@iiwGb zG}xNcdr~dWaP5f)3CpY}OuB{2YM$Tc+wBx<~x;1w&iY_XIl z2O&M((wSxY?pNp@@ANF41BDFi1GN)sOi=prxb*p8iD+2J7-Ms^X9 at +RH{BXQ5-e4YZ9=I=*H^B>16aH~T zJ0R~|byzR3H(GG-WOq^iKS9_*{NQzgym2)Vy+Jq$UP$ZEUjPpDH&%x5H(0y2yN$ip zyUx8Q0Sx}vQN3yY44{5NpZdT(Fz<9X?z at j(yEeVlyBED2{(gDhw1K>yN#b7uf8*qt z6E^bxUy-|ivvK}g7HgDirA%d84-}dZj4;t@(2z!iYXu40Utz5O?WfAYESJ$Hb8x=S zaGv3F&iIF+O6M=t#a~~DaV#61V5~M0AD|67*Mn|t8)G!m)tMG=q+*xnE#10-Ycy%? zhGBXNChPJEos{M*b{Wr8y at H*NXAK^TTjx00EYCWj`%86U)FLk at G0F{u#+59Dn%dgv zbIf$gHnA_?Y}P?v8YFz0XDnE2sY$3aGF38B?%o(yO<;K&bls_TmFM078A0T0+?oR+ z0GR*wT6y!@{N3Vwma#0qj3hz~kBN4yuF5EcXlI6ZK=;&f>h6Wi9YMR_<-^BC2A(YR zRod;azZm*N;*a)d)zoD5G)L3=$y&ZR*5v%{=80VQ#^O%7!Pf zqf*)Fw2T`_a!{;{m^V$ZBz`{_s#gms#z>Hy5~jfK(ZnLu;FDCBc>lh?5F^;PCV%$V z9^`+?+x-`Y=by$-rGG})bk|TBZTdrpN~3z>!{{3?yMsa`lt+q zDtHI}C_Ak|d#OVKb-vE_n&xvi=l{8V3?x4rPh=<}4xWV-zM5D^mp>j4L%#V9pG7sg z{Gj}RN#iX5Lp#8Tzs<-&Jlgr!&2C`6C#J%jjtGR1^Ecbju0Fgs>MoqM?Oxm|C at QQP zv+2;1k-~chO3 at m)wVH2^@>6Zj6M3hxCSL244?bCukoERcWYF*wFYgJjOgTgg?jkb{ zUcAhd^fs|2$KB0HsEp znRT1y>*H2SS60{T8nCt5HIg7JDyS+Btb#D-A*?vIwVmS3HjHK*i;*0uA`|nnDHUs- z)#p4?2&Ta_pm{SUy}uHhtc^O{oIU5eFP$NN@~g?UGHT$Yd;57TXz#H2|tS;P^J_M4UTn;P^=2Ug?^Y8idE_NN`xVueiyev zovtGxnA%FgasV&$z)YNeWi}&xkxH+-F*Mpa1G7j z6a)Pel5mL!Fkn)_yL+pv z*05_1HqXxK4|C|kPhY*A9Q$-^>R$3CZZ7=?&L!jX7he$1qZP$Egs&PvuM$8o!iNME zcfp>40aOSxHelXmAh8Aq_!Szh{?(AbDtl%qA^wTS4d`fj!{e$K!UQ_`>=zG9A%>~% z_Qhg3B1E(@GfQ)^5%lAEV>7+saXVRa?McmK4g6G!n2Kxu2BvpFC^<~|ACmt24f%(p zhUMw4_k%Jsb;)08>jsiLVT7Q-OA*EN4C`yjts>Xh_D#_PCWE~{e9M0kb244iwG^X$ zJ)#p|OvhI<_nHSNKn^wFx}$3enFoWAI$PjSsmWDkn81%WRqzhWTpyu%JFg at 9wT{fkWAdPD6is(c2*wzs;#mk2-kHJ z%6K#uiJC504uIeokzK3f6vUb!x|g?*?1Nk4vSOu`^9sc0Ss$mLvBxs|qEpIG8l+G; z$A0LkCy~8L-|Akvv5&0+SC%q|B&sWnfbn;5G(U3wqmaA)3YHWrgZz$LT| zC}Q(vQW^qk0Z;#`sQ^H8t>BG94-EoB_P+vw*jfLP7^1DbB8E2bE8Ge;l&uLmMjKT^ zTFDTMJh at 0V0~R^~O+1kGV;ZaayE?`GM1ZD=l@3a;>>Kq#o}uz4MT}GZBiR+&4Yl)sXx$$jq7WUxUb>WXIzh4wMqNXXPDP4 z;l%5w;?CKE7AwA*GZwJUFk>7FRN;(=b?B0f_?X!4&#|pB^(}Jr_vXR?&K0G%26Brpt38h)fP%0y z#HK}8s~HFQVoqJ+y{1D(BW}-~^BUpI87YIcyC~ht8G1&8jDuOTi7ULX3UifGxnJUS zYrry1f^^er=L1ChS~_!7tjo8g-F4D0SSn$94xpUPe2XG56fCuyW~@VvgR-(q+!L;K z7WVVnBr6=|=G$s_u^!luxm6`Fr*M6fj$7-2qv?4G%$qY=C{%VvjD&`%hVRR9gKNms zPPxSFv8w&eYash?%bj14NYQ+ at he5c z<;RBY0>{$DoZ~NGBaJGQBSqBk at oqogh_11@MkKCT536dBIKMpBo8T4X3UH3M1Wq%{k5%?X(6Cu|gEP4f-Ff4JSdu*wT5IK(C$6VOwari0L z8H+?dd at uJ-k>X$Y(C*ti0+Na}C9y)3fRcme8N_s9YKLv=nGnP&3SEM4(eUmIdKUGr zbelp!Hs5+lawPVdN;ZXiHi@)_yE@}Zd~yiwm1H#U)CXJeCrrD81teaq&iHq{l4lvs zV4q~}&WIyL9USO4d at i0uwO_skUL=DR;O+=uS^Y33NI3g&{CMXP5)Z{0>cbK!WJf9+ zwPnBl`ig|V7H=kz+(3$!GnMezx0FAA;U~(xgQ)#=tbI&*4C>Jq(wp|F)_|9=#AKT?+nT>Rhwa$f at L47G{s zD3i#V$k-Jm*bjGvkphmmyZ%U{rpLeTDt=8x>lGDf9eIJ8EhK zI277Lrmy#T*552XtWYrZPAucKjYkJ&Fiwrwut#bO`-c&shhsaTvG&%Gj=j-oR- at yY zcfj119PZJZqh)}c>mJ{N1Y=)dXS|-CPJ$j+t&BkmmXbej^ijy3{K>+8dShYd5`fpJ zNZEw8BLS=_G#pK+;LDI^*Fu!dhBRy^U*N~vA#-TZ&U{jE^X zcV at h5=?eCrcJKaCtQ!3_c>wTs4>x_1Y%4M5pqbgfzyJtB3D(RCPgz!Q&j%d$>-u at C z2}1E*fjuZrajXOxTlRHxY-Dh4q}B(2^78P0SL1JitGKgGnUnGXuD))xG)29(6UnhU zKzZFHWx86{qkINgySVDO@#9)cGjFq81RoH_HJeBey0{{ng%ZAe3`?n%@xIn|X6Gh# z>Ij87SDP;1!)8(F1WX||d760n^{MP)l(uT)1V6ADfFW#4C2gbA$Be~&;DjsZzak6= zpYsE;nvA~ z!TwV0!G*L9fm7h-o#a(B^*k22uufdH{L|4(66B2LGo-|~`g3&&uR6Gr^Un_qOncp| zfVd5yd%B`~IEZwyaoMbBC*>IU9Mkf#K>!k=W+k7ms%3P at 730PCOV%=`ttr at k&g-(~F|lg}(V~pUm!>gAjUW6J6ZTpCp=pU; zpUeq0B{i;p6;_(vY%uSCbs-#G4XiBxsi&_02ht%BLw$S at Jwv5VZ%n1 zR4SZ!5dQbTkanbh1cpp7M9YJyDMS*58NiVMB8B@?ptfPi(PWqh*F!hee!_h^o^`M| zZc<#i%#a(IxvE+_pAV_E(FkhpQpi9orp0BHfPV~OA!X~?;>o-ucfGkTl9Uju*KYlk z!xK~j_C}3ByDc-%!gGiF*<@^A4E$L&a*%_ at U4k;XfF=`Px#qI+V^;fD*F0v!MgQ&E zu*;*QxGh$)Rw25Kgc!BV;l(%tp`hazPd%l?O#`V?3u7L`VyW&2eD!Y zilDTKDB*>)pklC*%D6ce=w1OJp+C3yG at Q>7Vj-{A9(WV;WOxS`00ke>xlpbO1Bpv_ zKocR}Y9hYGLP!ZcV;j%Zb^%7L!4Rv#0buF;A|6SlZI-0xxheQHdZNq8{+x5!ErmY|UOeDxg3w181dCU8`s{RKMWC`#GvS<7^ zvgh|+4^2rQvLI6w$}qGD6Ln8Y7&Ll3oZ{_A&P3xNr^D`s$>bP5{=Bj{h!jX at 0?m64lyXA0cdDOmBDcw7TW$ z9b&8Ws*IXRAl~CRyguf{PtWD&XdD{Z&wue-raxapSVlU2@%T%Xhwo zjg3BeZnqHlR=k!iF)1mmZZUQn^My9bO+~b%7iw8Dymuh{3HD7W&WM*2o-Ds)ZY~d> z!8*}{h?W6&oagpZXEqH}E<$F}{jh#1YSCen@(qghW7MkGAB)K11(l5JJ`QTNxg!R8 zO?u$V5 at HyIUN6Vf{7Js8SaJYg~JY3))3xo?%Ji0t3QG*B5Hb-4f z>x|1C9(T*f at QTF;gs2TVSSG{ec3C+4(X+vx;PcB`}9kz`hv zL195EPMWpdiYs$fMAgU-dYslTWFM$Bl59NQJHtdm{!FzXH*!N(BGKoRAo=Eq!@%Wr za-d92(8z`UD|>`vvK?%*?gT33Dg8RnKm!4ucq*<(v&5z4=i)kq(+5eH5B!Qy`!3W4 z3pK+|{_$Mcj8X^YaNV|c z#W{%2#3wXvKEW^$Oa=PT(P%rhv|F`)6qHc=mY8|^Ff%YHZq!?;KH(JdAx+z?eb(DN z&iVIu2EXp2N+MYo{Zt)U%SBwXBMCNsp>}lHq)h~ww0bIn^@~*^-MYEG{-Fx(NHsLi zcuoy>WR+s&>@#IX&W_>?T-F}n+c at pNyTd_V2g^>%mnVBW1JfvFQ9$#I0vSKB!=r|X z-B<8|SJD`u;gB7&Ek&#wT3jIcrDb>p$E0zKXvltrn-*8x>Uw zNxBPy%%&->j%R?kmQDE8eE4S`YfW}m1cYD(6-f}*$6QVdb6GPI$v0zL%8ZYNHZ#vsCJ>mGZ&-g^RjtM`|;3$`H1OxxnH zTi&FM0G|M9Pb`=ix}oGvkid_dBXb~Co7~N7NKC|A82%Glb5hSea1JM5Y{+5X)1@|# zUc|9Ubuh^;RM-dIl&oNB>z@@w8YdDZ%s4qWwKtWdISw1d(pqyFN>b5N7WHT2yFMeVqvVFKeUn0gTh?M>&2trPishJJDr zhX`tHdJ|!fu()v~7^LnnbHlo1QKao<$WfPBQ4ZzhRg+p)TVAdpq+x*;s`fNsSd^H^ zZty8ZnqTZj)_o~3VO>v7N=qY>i=7P131NbEWuzwxX!A^sVGKM2!KpM zVWJ}n4 at QyOjtIdOzEy-T*lqpDR*EG{M;{;LC7&656T0rSz+bMh9K@}zNpZh^e>J;< z8WgoE$iQaseP5BS_nbe9faXHL|7Hfwbe65B;tUq2T%4c1n7j&v;W>k*)R$||hK_%^0=omli}EOFZJu`f58pEZl;AXrnw+JeP5S2~LDcZ#NO&Q^?l%$?RH!%67gSxk}b`Udw_#%A)*zVPI z4WBi5>z)gOh`AoSdkZh>o=IGZHWOaY-j2AJL5!uOcNnNlTBj*`*%W^7n?it-($#vF z(__ at jd&*dhThu-xqp~Rw at BmE&toNl}C}mcBv|bK$=ZSMcU+nE%mws$fyjx`?t at elB zCWeTLf4Yv at As0Dj6I=dJkFhVeCPLBYG~*rTjdI+~cl5Vao?0z~*|+WKO343&LMIh8 zaCCA28al}uTO0gq$JY8SQO5gZj9fa&S{I7p9jah1b{t`Wnq{97ofJ;^9q13kV%CSlPAp~fioY>j) zA$=vZQB(BOxJCUzk<#_wA7=NSj`UCQV&? zyUMOo_(fmKmi2%iPVqmlI+NqOYOTZS>F;LX`j#TYf4TS>BhcWQ(dqHyE~jSR^<_5!x8uQ2KNeGZ^CF>lG(7YTM*43{(%sCq#jREb2}hPmaCqFTwn8I| z-AoJ?#E?DMy|?ls!akhm^Aw$nZ=F7eUZSiE1guU%eWEX|=l^;6^kt7 at rJ=ADMR_W> zE*&BcXA=Y9h#g5cVa)~(Q+P>$?bWu0W at 0{Nkd=Ao>w1*67U6=T!o5YDQnbf$GfSgI z9qDN at 1!;u1Y>^p|sS^FXcn!9V@~l*FuplyxV6Ogwyk~`U0syCVfCgSP)GDnO@%4vP z?is=sgDQ(~u_y{Nys}9Qg-4ooS(fNK1+CZzsX1#wS014Z{?3nIE->moehSw3;sBGc zkiq62@=bJ0_!rvtFfA>YuV$(;!1$-w98rHpzy2|bIa8srUFrqERdM^J!irEJV8x#c z)HzO}n31Fy{iom0bVS8VA`9Jo=J~k(he(@24H|+PYQ6|n4~Y}X$wd5$(M4&LZPGk& z@)nKV&`w$h2L#nmK%ZVI34{09+c0xG``zk_)1*mkp&ag$jX;!U_&z_#aaN6}+k;+l zBr25H at RWp0jd)lvo|4zADGkb!_Z~1sNi7927SyqwHVq%=x8rt?76)~u{|n2HjFS`- z-DgdH21HZkpz0Z;yj3(qTO_<3tna*r)8DeyEwhd*sc{nC6-U z3VXI?%ZIpZ^{^NHJvcB-$#G at 1v>oy#4#^jvr(b_P#6Z+xcSJUS&=xEGtqC7{~}_#OR9p#r`DT}XW-rZxIVz at gs`yhjfu|p zDFrt|6HQTLEZ2_`ycw5mZXai?a;7yMV;pTP+PhlLD$-lwvkeEV6dAkoz}-u67P^lT zvK=Xp$4twF6I{`2t#VCk>j>4QtJwSgOD*L5SifghYsYNXk)ly>#R9*b at fd$ z8E3Z_>ig2-VF!(rI(qpO+M3;Gp7JCf=eQbxgc40Pc*v!nrgmHI)}L93f16gN1Slz} z#dha~aVCjqs3`y`;hM%3VE9&>dA<8H*Q!d}Ug#eR{iu61O5W&+1Uh;bIXuPBAP4-{ z-C)CIEcmK7}&|m2cDdOz5y46>DNCsF;dMUY|L&6XZ`K zSL1tsq~CTyy`|q4Fp!{08nY^xe;~#qoKr6q5PG0 at JRFI51XK2n80`0?^@Gk92xWbS zB?a`rWtznF at j48~55q~J{5|h$kxHrVzhGWCu9Dh at 3^#e#-leL_Z`j&*R8WC= zi0FD`ue#2^>bn20j739{NHtPM9*^D8)OettZg$o?DdSOjch!-zV`9xYnsGs+jf*twvE#Zn6R-+s zTTkuaSwd*-4~_xE(Y5V0+~-m~MYgMRa6e>L2?>7eiVI^Mrbf}g$j#FaB>I)E7*vY1 zTEpu-lISTC9#R`8185_0J)nE10goicC<6O+f0W zMrfcIBQt8r#ce^YH6fFMOPJ4zGgdzM41!E~WEU$Xga)?+DZcSaMD^4t}9s% zLc!?=rlM)ci|polS*x%lQbUOGdLnk~nLaLf(gz`fHTk{|+7ELoy!9cNY)C6Wi?M5`q@!WSL(R?q{R z5Bke`jGQE8CX0k+!3iyIFLkAHhtuNpJR?wFr}#z}vd1l%Vxwfiau}5?$Ss(67QH3Y z6v`aMtKnv6sUM?9;&!?DlJ#y$MLw9nP15VcZUS}KI#V`!@vOj*MiJTes58-Ae&aar ztNIu9Rn#zG>1Es!U)9Byv2cs%REMefLs9lD?5FxjOe*Q-S@#?UGb!C_*vj$e1rO*b z;X9`4-E;tieAPSHs}0heZ;UDYq*F5mbR;4uNa^=5E)kQMal#TPY at z;N1H0CNAx~uM7%2^1)&`i`{{fSzWbMkfFTW3`?`U6@>p^?yl1+&9GA{@ zk}m$qm4`)Yr+!FS7;|&ny%MyZPcqXPkJWko;8=kEw;`vB80Y`t{;_;>|7eo`cK;v>PK6Un zNHe6JZa3|Q9Cv$zUsuBn at 8=RsMu(kf#3D+;jed1J;o4hIy}$GHfV2zX!-JW3MyrkW z3zLP{#+HH$wIlUgCK8^)ZtLK}g{jARh{e--S`Y75HpqZh57>h%eC|t-`#O=+&~6z_ zWC*?RCBgIKRPy#JKF&Va3~8xp5VIlYzI zqw=Jg6e0d#r1N0ep=if(Ltw+im^4EFQxuNGhZzO-8h;%yNfiL~FIN3Uo&GzreaBBg zFBbnFSO~2&GA^3q)yAqPOUla z83sjDo)DI-Bl01#$e&3mgV2{}>MA-us1{3Un zkT_&3Rl-*E|F))m{zG;8?o}ITi2q6xWMTdnO>jmZEoh@!76)4xHOI$COEEz=#^D at + zI804T$~kBRt`){wYday~U`!CRWfDuR>SL=b32bKVXv-TKr}wfjHvuFn+%wtn(|EdL z+;3zWV^jkojF?vlP{uFJzC%XBD1B$d8JfdxMmTnHePg2;;dFmI}t0WDrN>t*BEIxOfyqZ600by%BJG5 z(AfIxhoo^8rhIg@#<;H2CdKc8fCBV-s~uTB9ApF=`aBI>tf5~JZN&vZWda(Qhr#OYie0YQVwz)=yMiY z6*;N*8ry+%-h1{e!s$RYH5|fja)4)GUTQPlv{J3s at V>o2$F7Xd&yo at tV@YO2?Ie9DKP*tmj7z~;H0Ys7}f(`N6>6bE at mC+)?nph zFaK0J{^E>QU&+CUcDiQ`P3RS~Fro9Rq!)nSONq|DJ(A at Y`h7IlqghD!gIH}t-?v3O zmJ7{T6Ck{(eaikyPDX(FL`u=lS_S(_mI8BEZkb~f+)F-6$vw=oFNm@#KR^w&tOeef0*lTJWWP47Ts6Lc)y>zw1T8>(+Pq$8z&txg8=2j6!&2^9w^m zOg7>96nOa}ty(9=ajH?q{ESRu_IF8j`PpdYBf)BWJ=?0RaV=zQ~^1}m6v{YCX`z_vg0#~&sU z_r*nB=Z_mrdb=}uZZlrrQfq%q0Rs~O-ITowB2-aOMMf!VzthLJbYY6yhhi*rQ(eXw zMUHzLJ*-`WYjl1O0P9h})wSWI)_&Rr87ZecmAHD1A1gn%ODCQe&CR#btzkHvV!qj{ zWKvAsiw(2Cz-jfce$hGo8Px+#4S_)QS;AuIuR zj#_Toe4iV`FaEgSpXgm~ser6nTS63C7X(N$Dk;%0Nx?Nq%0=_RE*fEI at tQ<$-Clcm zWPdED3Az%0zIvPM$~fjo+|cy=;lz1-bK;P{IdQtL5cB+sh|+Hy9;*Xw4<^0;xqYW#5E64uAMA_%F|2ufKZ7`e9rj^+259{iXF zXxt1iC at cc*;=so;te6zroT9oA!T|}GNY%c6*Gd$mYGB|LZXkv8Uj9;LU!S+2rGiD* zc<5eUmM*lumPZW9RMK7J>N;)>QE3KPrEPE;*#ehw6Eo7;>Ii#Z=P+-kkeK*V<6F&7erZyEu;|#)a-*1uKT7M)Bs6| z&Him?*Is%*>2g4zdfSVSsrTDqVjIqh18QLwajG7Edj!2K{nnX4uK)(tJ^WNY%p?h@ z1}*u5NGf8)JZcfAOf%nIDX56UVYL32YskB- at 84Ws^&~vc=>P`2>KQVLnf$8fZW&rm z3X3_A_h~&K+m4JtoWV at E<3k zB0a9mZfARP9U_fa!&#sbx2|kzaEtw^$a7Ta9>I6F3TE$# zJ at bp^f=DMmC#l82x_O!74u|rZq`GNe;%mKZpbV&F_uY|qVvAu(I0WK}(14Wvh|WM` zbEW^zu*A-Cm|lp=ps3DFO=hcJrO^4{)uWgy8`j78vZ!Y+*`dQVFoVV|zlDthI~+$) zuXuv={9c4x8nJ`0p(%LMY4a0#_i$kaJ$|We#!3^UE|4+*AHxJlKZbSSj)*RBG$HK5 zUhmiWz at lTqQm>$aL2~GktQi2%#K1$TR!1yhJGOPg#RPGRaSc<%71e(^8Gj90{)5!i zx%NBxSnH5BJ><`#y`J%Mi5`>tn1_PdRKF0WgrDe9_yByk($P-=A{ZA42AXhL6BHfy z$U{&2V~R73r-W%6 at Ix){OT8k)Tvp?FMn_Q5H;i-B`G?7H9hjb-)t~$*<6`Ll3A^2J3v+$oitaelq=TKPR zbdQM)kCW69-fz78?=%GYBGHD;;eecA=p at V$7JwPX at tg;W?s9sTE1cq{HX}^~^9fh~ zB- at l^x$o7;hB}Mg8~T(BTU3saa8f;7TX0;$i=GsmmJY5PR!z`U*m5IQ1SwT9&fwGz zl>WP)w!#P=;2xT+9h;}v`J!h8$y^lJ@~X{Kh_&02e%Sxid3p14JoF>3mC4QWoPmWB z)$f7Zgxf+NG at mKDozJ#2I-BiJE6m0AG(@qQ7^Tc97y|CcczZ;S&YO-e4Nq*E0uKTo z_Y<&p0S^X|agDB?zb-Pw*T}Ztyc~Cy at _2Qte|S08aEiNPp5bOlWT*1MHTW4Yr8Pk# zFw$}tW#_2l0zj4?p7=DpUJybdNo|F*9#cJw>kTD`%K*kpTLV_+*$ejTVOA&!KRw~sO0#^T3;QE1$(YGXI z49NdzsS~kvHn95B2N0RCq=YJn7W9ieRfgGVu!bhDC5QAKbj}uNUfmE1hVd5yeUt$h z78Q&#H|T4@)pGC=Sb|Pdd%E(5E5C~?BNXy at vrn;ER~vi39x}Kn?(ObQ_G9g0;yW6*OEqT`TjlafNGzM zAHdVx{v^DAA0->_Fj@|#x}n?{CV?#9U#(STWex>vOok#XaQUgoB9+K2<^DP^xuza2 zH^R6mI)Mv~N%-U=*{5knyxaxH{ zXB32pk&L~}HhpjyR_&<6C@?D at l?h8S>OHLkEl{(cFN)vEK0_!u;t`idBe7PDZQ%$) zI9Qxvp3izel}@U_U{5r`eNkl^v$4Ily!zyL-+(r0zCT`B#jfrl1?J at 5V_U~QkH+w= zkg0{9lA+ySQFD=p^RB at CVx?$#j4#fsG^Ok=`m&z^D4vwdrInoG at +ea|?NpH{%o at 2l zqATp(k)5~tENpyp#nE|SipZ#n{#U*M2(8&`+iT6~P+c8##Iqx$+dmo8bg at vm;ON!DM^+2%H!} z&hxNWavHmDpX)pDB2 at a5Cjp8V=wpmtLg_nuaxYi10X!`dx$TIa6h9*hOnN5w8)RN7 zS!8nwfzHD0s)p_#4c(mKjsXS%M=mie0ceUA&`WL63h+M}L<%A(#K~eyW(pJDYPFn9?43-uW^>x8QV}xRPMEx}`&z z^#a~9LYp{-Idz&6jO(b7vXS>vI8fdCBsicat{&zLa(s1^^WuPgz`liFYzkQkbeFqZ z`rBA}8bSF24|Cu3e2wWWzI3s;eK$s-DGTggIA&q;sAdTy3#_-4>%6Y4L zoo49(YgpmMHn>nxh8CyMoCIyt3?eOb2mv#_OovMe0c$1WmgTa;v43ro)OZoYc{pzO znoLp$b&WYFH`B@~^gBwt#A_)r3A-TRz=tdA_m2Ov`niHQhk)uZJkEI)Ap z&c;SbP8R$HxPNSu?2AWDat4{p>PM(Jq^K?O{M9}+;t7x0 at E!yN85RTt^KbSkK`V2h z;~!#rC8|52sR9Om3A49xq{}+YNRmXRfF}T`l0-;}sj&sukTkSXtXz6X>+6BAP&exy zr(Zc*N;IPI3Hb1{z0Q^(^{%_bqc?7kMZd=wI*k8v{k%cv=<0HEH1W&x5zGhZsqBk{ zAGQVLMd`|g!jIf?=j}gl>4sPQ>FFoVTZ&}LU&z?ysRhKj#0r$$t%q4jouE3>=dX^@ z at 5rf%zt8KY-<5`GOJ$%r0(RupB;S{Hqg}EEdW|lif851^nHl9kj~i`9GfAoWAtVH|i;0A}6C`b|7(5cNEX5b1lD#Ta`R)pS06+yuES5sLaG zLo~q(^M2PpkoYnjs>2EC#;;pc`90+Iwxgg8W#&x~IRZmLzvskQG^aveX*?M5EI at al z5{4>i`J;|kSE)tm*qpPaoT{|7Xl0;Kl?wk{6zN(jmU-et0m5*n`DcDCG$TT`%k|g< zrwMl!rAxokc;%L_F=IoE4h)0K<)+f=wAu1_CP6GqSenErce;!dl?vvS7w<=`xaq(y zg7?FesFK`?B?ZzGr0#aai0|Vo?Yc%JNYci$msus3FDq4c*Ge1G&pnqUMYAw2m3?K# z?{&rIwfVW&JFJyg1$(MQU!PWj3k*dU2x$-ym;}hn64{f2V=b5kO=v7LrK=v$nm~!be}j~TV6f9zrODy zvvc9VO4&=bE&4>%CgC?&guXL$InEM3%Rqol*8!s1^YR%KzXv%amLRFj{ZpL!U z-F at N4+H7+L9BDfVHED&Gg05Nnq((;Lq+!+g%Zfwv58V-}5wE1G9}ULS4*kr=sZAM; ztF{N4tn*Lxz& z`5;B3StGg%y*D}QOnjUX;rz%y+-SjyC~{jy4YusypK_fT&uW7?NYkvzDDknx(KmG&ra_0A(znsu$PP&5eq;v`UKFKWL z3bmn&Fn3;`EO-1nuh7>nq}(q3lu5Iiv`M3yq)96~B4BA(UjT+bvQT+fVF0`T2-Goz zVE}@EWPmY5I#ecvI&v!@V{)KOXn_-W15^=& zBv3G|cAMSbBs2_X1A2P{LWTf0 at 40IkM`M`pbgN`OzWHX)$M5QqtY%i$9am0SZ=biX z;XlB7(9bI%FJhFSWWeGb>?q}k)wuKL+Tn-}I|*@RmvaGcOL(GWSfHFP`4c3O(hq!~&j;uWTE~ zHbU>coeTN8uD1iR%5XC4!UY;HYdz!MFP5NU|LTEW-yqJd>z2q71lhE5#!Tu{n at _!{ zivrVFy>&v8$Ki_lG+w3A=!QvAdb{U-3u3yQb}2t at Qsui?vzg(zubjC)>|JcK8rc9+R){F8$paFCW>DaQ%$K%uJet+iVs5pH<}A^Qde3uAN_YCbd}tXRt{ z*d9Y_>rGDM2-uZ#18rX*QG|aE9<<8Vno53Kitav4ehNCAWX#De=;_RhB26;Vn6K$( zyiWfV^ks0{YXx(!d+k_b74~L|fvti$LhSeI!1-|_R9oUg&qzKN=xxE|&QW_jeM9 z?YD0)5O$C*Fq##`3f)0rSe}E~>C`9NB#AEC?H)M>IEe3E7VAc;#jU(6@*={*qJcGI z-zWIik70R{??eQrJ#3mW)zQuROSdr&o!d07SLMcNVr_d|tZbFL^6;Ipi+2Mxt@tj+I^{1U=iF4X6eIO at _y=<56_Cle{)@WR?vUCYOUw)-MQ=_9kj}#sdc#Saij? zACm9}9K3kLc`uQt`*cYqr8OIFNzi4YLlhZ#M(?)T2izS|_WL*G%x5Mda;|Yp%hv2< zs<%;w+xhv!+K?C88%cG(6 zbo{9OT%h|nYf-*EU!jvOziENg*sXxFU@!b#Ig}cK%;a2Ui>;mBj`SRhKiTQsdh8wO z1b9cn9gH501fq1z9mIx|XK)*?6%4NQtR1nwWcx at zH#SQ1c~Yn2dq-4=4}vyI at Ut^n zmK#?`u%C1GOUnAYUPvr5n0^+9E%dLZO|{f=lvdYnFUfxE=evAbbtrXY)iEwUPL+#9 zqm3Q~QrXH3l8JU_SNd~L=zbdYG$Gb^lC(5Q7rSoa=f>I&4%|7`G^M+J at A%Q;({$eb zB^#;s^+UlqLw&#|-1~)b9^J|6?+GaGh24D9dCGFRz5D>|1sdMPgH6Lu&}R_S{fRO& z>p4`N$U)rwzaru)(qQk;qUe? zf2jT9UCTuaOufSh@@#(SXdc3()X3Gr7j>`qGtC99EcPjxF-%#AMJ{}2QaMq9{9rMN zt5Oj-I`gy*^$A}A<1wx`_I`6f0`e5miIHo%%ZMQQg^Xx@`z*#t-W79M9(gtxti%Ca z6{2Jr1Mk^`=qElynf$>K>u1T$p9UlL>(M#|1`52D~!l>zhP-$=CpPqi95DnLY7?0^favb7X_I)W6vKhr$YUMl-LQLql+f^W56wbKLIT9^!PO%UKuHni>+Y;UUn@ z(%~{2RTVPyAPARD9WkYFbcO2=ewxO-y)@S=F=KR$vZL>UsDWSc# zdUaEw6+b($S?Yb+*!KvLmNKm2Nc5lfC&3QX%VYHZg|QXNa>{ zP#UuRzF>#&lwz*x#4-##Me+=G*4gb4h8se@&xo-$a1CmQXhS`TUJZWHfD>vR46=7( ztYg7xc(=AtaQQRYFITp+Ml?}cAYWkZ0sJwix0Ah3X11cMXulWaNTJ9>^N4&97I2EQ zQ_tpra3AvVgT3Sl((>fKnwRhFw?;hYiBLymDiy<7B|%fN1d?s3-qM%9yNB(`cp37mE zN`Hh}UG>;qbv(u0{q09Y2xAh7jReAc;Z%_siCJJQ2Sy2Aj|XZmngBTHX-&)LP_$Ji z4%qp6+MC*RLjfM$DC_*fE^HZfYNiUqH&mt)*xg&=YjXZPZ1q#*q=t*K^*S7QM28 at + zcPp2+(_QF5jyi2P&yS{q){HaH{S2XKo#`5h%7MzHky7W!;KGiaK>Upj)kgpIPyz|K z^RhMPv?ql@>luPT4u(-0<=`Me`1g2{vIH+fN1FKP;2 zSI0yk@)#R6}7-;zgs9 at jm5UM684&k8Ui7AiF!8$E_3($lY35iEo=tGLMs20Tm<) zvBFr)Nw&~!KfuM``FCt{u39b^ojP)-hh(arx>Q)E5IcG#{cyCj{TbXtm#4}=TG#ARkVklOC&gQ`u%G`inXB#!y at 0qhfjE); ztzWN`*!O3 at UW$_ub7-&v*8mzW;7M at jKtRNgDq_m~-E)cvvZ at kRPe8Zs-%hb`xy6IR ztHg8=f3=6DfbkZwUb at 7~~fk9uC;bH3w_JMItg2h7jfbIm!|dYVxlT6LsIch z?8Ny=avQhP#&@rKcW`SIdfzeY=YDVpI}O>ZT2RW?nO(k!W%>fnLBhz&$!jXjbc~%z zi9w8(B4JGEq&=7f;$h5|Vjr<2gTYr(f=Tscb$zPxR*T;zq$g*hd^3O%1SQ#RawL(j zO_6M-v?i)Qd?DA|EL9>?tJZufL at V@O(7S#5W`W+WzUZAyAJhdU)Av;W6LK3(9TRV6 zW>|T3g~|-tB<2Z)s4p7N`55mhJ{++~-|Obvmp2%~z*%Ox*3T%_4&T0B4VD*FE4Uj# z-x}m7Pq&(J-0MLxD-^@hRJ7WIAzf|s*sYB(Q9IBYFlWVevSPGJdE-^CRaHV(x>6aw znct{1yisfAUNlJ7>!3!>QcG9gPcEjgcr}%+2`*_gTC27X$#MC$g;4!eAicfOIVZJI zqeOxGI`_cLvbk>3<0-WQ8q at B+P9UIP*iP;z5 zP&VL)bX9xpp3qnB8I4P* zkLK|lyw_4M$Qa!0L3WDh96jFkTIRiz3Igveb1lEa!E-J(srZto{1v7(dS!~j3XTx> zh+$);C{PbS!VUABVMS-W3%aKdaWp0E7D^YH5=sIIhkWf#(G#1u8PeZw1trEXK%t6i zUv3vNu5KHB%6-2AYTW-}u3J5-2udb1EC?BA>e4u zxX>Pi2fKvk3AN8$hu?qjeN~OSwfs(XnhTR*@V)PMLk|98KCl5nXbP8T!r2ak at 3bFN zD)XLQYfV)b%9EN_t-)-)ksvZvlqz|Zq||5w<(0Pshkd9?k5|R%BqxWuDI6!k;%{?F&Z_VLYYJl|~7DSXvV7`5pwrHsHLIR4^CB5SH at 99y(5QC)=%PZNPvk$rwrhWk(pP>mxD!d at Q=zjC=(5Jm>JoC`en z{78b%1!JkF>>a`F?+(ip!UPBXUcQ>Un!hw-{mHy&qL`s;ZWZfuA~i-T#m$+GuG10| zw*Y}an=U#P#hIExWaN&^g3U=7{A(p~vYBtBA{@|2Gw%Exx at Z$^X2}Mr$f*Yj7D^^$ z>tqxWe03bn#<lq|1jA<*ToA z=v}k&V*a|HN>`kwSt2H5S7*T~h$KRds zcUUh5f0hv9XZl>{D{s+<%1P{IP_1SM(-YI5yKUZ(_v}PKvzx4?P#4(%tqW6 at F=UXc z$6Byk5q*{BORryuSyEJ0MdxcVL2N9vdKGs+9HwXbHy_2tg#`V>soa+0j#RowtrZ%~ zw~wSGyNS>hZhRoH#Z$3^Cc~&LwjDWI>zoJ;ImYS)b(>gX%fA=0M5p7)`|Vg_W&2f4 zr1wglj?rLCxoSF{gzyE5!|MtLIbD*^gioZVK=n1|%)2J%hODKw4kk)228( zi!FNV(=8<|76wSz&(BYnrF5)6y;b|v>aimx$iulRP9Dn_fS*s~dZ at d#?lM93aRTyw ztlhsL8P;QJX0@$g1=d4yOG at N*0)hzn_AXlp3Nd$X>uZr%DMUl0Po2-Vw2`KWpGUc% z=^@P&NE6;tj!Q>RW<}kABY|NS_BO!IdtzpvhyN0h<9iv-J*=--?bC8)yykEGL#r{cY^ICEQ&)cr9ta at RmWv-_&F%x2` zacz_z$J76y5Hkx?F5UE9?(<{pR-Kntb1va+h$C||f^Atm$xJUy2Gk|LkNLP5cf5Q> zj?QX3avc}OG}CFMA^*`b!}^tZ2pZrE1sjo|=4Lj$IPB#l-G$l~4OeHA7rwVX=|7-` zW2kN5$!AiQlgXbvu5JV=^)g#)Q@=H>B^ZCRHRCJ4dQKKIvu^=nj?wC zFTcJ9?NH|@kwX}P)z3ZjVRa2CR(?$>w+OjTi3B<*+3+5;-25%|?kYBEBS0y?hCBZz zh@&e~_D(vTq$dUnuQQR~Q*b6>#cxY;E~}LL^*xcrGPA}N!mo_yG at QVu2w*&8n7=!l zMk?h1JX-qGO$PBw;&$^2sCVTgy;a26TovT`yad?}X?0TKI9V>dsfgC16XSj$>(NwI zdqot;dV}fEUFeXVamqT*G%D2~FwDU^D(wk6y$PA^DXd*i28uQY$#ppCZlfGa980$c z(R)01x9iFvy(^@j!mFuV8On4arHhlgC&teuV&+>y?3|TeZ78Jmw!mpbm4-4Max^x@ zt@*ZD()9J_gltyDwZlTUP>da*hN5+$A-aHeFFJQ2&ayg9(QSqZGS~Orvd1p4Rx`0s zMZplmS~fQA49xnOq#nezuSl?C?rl2Ev=};f2PDoK&QVrM&ZL>(e4jc+%WWyDP&u(5 zGCCpm4n5U3dcg@#jXkeRkEh0+Bb<0iq)@KQp=;8z0 z1}^X9;A36NImb17fX?VGP$oW at V?-lg;Y{XAd;=Ei^yHpEw?AejgKawf7?Mjrz;`G# z!lYS9RZFk?$N1tYx_)CnEo~#QVS?G76~OJx;jPTl5;B9VGHneJcA{4wfQE|9z=Fz{o$VJ4KFyNU zP?C+|VSCy%RL6qbAqyXiImJL%Jf$;|Ax0Mva8)#yo2RUYF>F7x)$gti6~d2o6~RebsE>Kie#$cc?>H7ra_^enfbC z-RBd3g!l~PO9{c#U at Yx>B3sk%Nw{ap<}spaj_)91Cqje`WQy&g>vBhmnSF*G-d}?F zRw39>okjPO at 21<)XftnAN0(~p_Zdbx_lqAn!!M~4?SDbN@=LRn$(Al2GonQsctOcx zYvf`v{h+vi*3`re zqzSIT2z~T- at s9?<3>T at 8)-OTMbtj)jGOPEDgO|Pvq}^*eK6A?EXTyQX-}OiB at S=L& zfZ+`O{MIMev*XMhUNeRjX`*O><9_NbodBr|%e z*M<|ugCy*(6l?hVcc=DJCM>8q=R1Yi5HDfdq)wDqS9y_2WSseTVfGjN_a;SIS7^G< z<8B!po^wxdt1R!t7lb_#Ch)&*osPBTQQSzg`zpfS{I)rc%YKtN2nGUj3UIa*f4tuK z$JzIvsY%g7dO`-(^I%%G2tw)Uyt8}Dl$hNmr(N&3Wp(YQ;hsq1~>k zr545s9p at SH%fU?c^zr7s;{zih*)vpd$-FB=(5Prcvpr_SIuHR#O3W`LOY#qO}7ZozUIVe*6yZ*FsJ>pCA31gDKhcH0?P!+6&y zS*aL!bT8k^Mc7GLm~f?p!A1!#B-lK4GO%C8uRj<}>h%eF%7lIt<%WM`5UjJeH^Kx5 z>C at 7cbd7qHl+D9nu_Gk&QlL<&*qOA;^a6E)9X?O(YUw{28SG1n+|fu8xqFzF;T z&qq5s6t{VeIDsh!>fM7O{mJ%hQvz^7i&XR&rK#_yky+f&BmHEr5=2f^b&lAr at Ko^- zi>zR_ at bWd2&lp|F-#6B4f7Y;c*5@@Qejm7nV=Ek$Rr^#{?HuYN!sknFq@!w1Hp2-C zM1vCc6Ti)ALRHxr>`sQ2hUK8=7ilWadB at U~&_ukJnQsXYdxez`LU!fdIl2?&Uvkjd z_M at ogszgZR1+S$9t*34o^TS1P5?(wfJ^CCk)>K3JhRT1Cl)wf;h})ZZ-&y}ggpgq9 z#y{yp4#rXhW3R^sJ7c8FkTUlM#+Tc?dHGE99A at 4Xt`#rDrBS_^xHGhIt%HTHt;U-2 zbE%H`pTcx1meiq0_bP81PSLM`)D;`n^~&0?OE zV(I zXEL>pQM8Hx?{hB)o*>V#3DK*W>xH7^&8ayBSDJHuy at o}C&?a426oXI_V)NrZcjRCu zG?@~apeLkmar;ITx0u7d`ZrHvL4^z_+R!_~4l at Nq?l{1Ns(71CB($+&`;ZMlA^d+g zod<;4$2|bP`wa27vrzema}|s){yKO3aFdkO#0v{{i!MoUR4c+(LI`?iP*A}rafn`q zmZu^_Qld#L1_AeLVTo9w$IHHvJ7H~Cd-v80u?6|y)=5(5q}ThN*ZT+k^&bM?fQ0E% zMxg7j_UVX#_R{JEpdGLKW64si)iF4sE_8FR;KUyB_6P(NHCrTH3u8`pnho}2gc at qu zr4IyfNde?j@&T!U8z+?EG-fCBSwTk>RZ>Eg#%EQwG)0fr*BNy_t=Wmw_PwZwZOk+< zj2~I-2AN(6_hMf77+{S^h|(v*^EW+Vz1odlW%5gk*R3*dfcuQ1>l0inBCR)hR^2oL zr5jZTPM6P&txEqQZThvPzBIj}2nR`4Y{-tAYg?YW`lVVmzSq1co3GrLIy|Sc1U%-l zE0QS{LWOGTkpM=ckm8!jNjO;a2=Evta&~;Z7!rRkWE;~s at pPIZ>orbyf9J~@Ig;^~;*Qcli zgjYxGX|)^ua^MC|W{?xvW$ZmTi5`=Vrg#geB0k_91KK#oq1 z{(-`h&%9pl{PlR~7fl&oGeZ%43}3SoRhui^l{2cDoKZQ~)YSv at Bx)bO^?5@$eBj~uP at s|*s}39{G%Ss`3}o^u_R zXTSAH^BZ`cJLl14sQ8*0np59%{M?taaYm&IUa(Jf4QorQKk zZ&Ap_4^dh+{yJk#HH+&)0(1mdmZb;kH`6AUsUK%!>Q3shj$uE=b(27r?W92m)R0+J zEj4kXS%zo6fZnc7}=b(qNqmDH}2Na^sW~#W!%|&za+cDVov*Y-%3NZ19U${3+t%Q!LKrS=HqU%g zS#NU$Mc$8FZk07z!eBLL5#vM`kl|l84rj%~`=;h6SgNLd3o8^T at 1-tL$;*i~ocO8` zM}YlNeOiz6JH))@R8*a~E|l^-UUf&LUmC;spylG$c at rcW2~`5i$EXR!&i5?TR7zOm zJW>Nur^^Oi8_EkW&7l`&`34Ymf1Y zTabr}mj_Dws9^!w z3>B9NJWbs$jmJR5#A8sYSySGEvu at soxbU8vNhN zl*VC|u->{yoaxEENzakX`0SrTGIM~LSkQ-;`8)$^7)l?USf;XoP~2OIYFzVfwI at m= zfLJ(EDCfLOmr;k5Q*8~Bz^A5}XhE7)j;8f3ns{%;H|~iqk%%5_;N(2K2?R(9nTQ3d zAyUYhN~qtOFu$^h(`ctIsl*tnPhLZvN;l)>wKj=A%Zh!)e^w>cPg?RHR}*xE=-Lwl zzTP6}uO|=weZ`4^p^k(3kKdw$%;TLAP7~=1EW;I(oA_66-x&#jkw7KDy>KURND!LV z#B$2 at RFdWczG9(Z at 5CHbgVjK=xxlf>M38B92r}}?rqVx!S0GEYlHR^(wT(Aa8=jm0 zh#W2+3*5F*L7abgEZx6g_qxdqqi;5H=tg_%G(yO4fiQ)N|MOIKljMe;!NEGacHWK< z3RYO&CzB6gc1OO3+&1~{$>5CH)pRXiU0cLHR)>dAgZG9aGt16!PSM_47cyT`g!bvE zXAOtm7mkdW#U;|9M+Z;E$y_MTytqK2@{&#K_{t-RaI_B3j^41#Y-v*$DXqmvuc2zq z&PgdI-8aGP*kI);ogK6&(Jh39HeFen*jmhQeNZWk?=YKa(X&HgAcA*o-S(T1i&>xj z6a at HPph5gC&Ha2GM|kXmSM9xbYTd`njQ~w$fT0R$Ld(m#h|(5;3pVU`4{s1L8 at s+E`y5Y#_9>@ZEXzGTm;Tfain9)5;Ka62wYz3SC)K z@#6;K;dNw_i1w0pMaWN|?Q&kQAp3kGTve>7>!{|&TXlTip#ZKf8oPyHApgNspg90 z=MiZUF+A6=EeY#y^I+TJ_^gp)s%VxLCYqp&eD_7cg!*L|=NHX40;CAuh4o5H9j5m=b%~@Rg2pBQn0E`!k8*75Oavjqls#*-uz}Xzc+m1BLGmtF6ghb zOnVn=13P+MbF-f|M*L- at f#h%>o?n_^pvoUeLEHjPm(E4oAe%)wKb>%xv+^s3;JCR;sUH0#BrRd7{B z9e1=Hr8V+;PYES=sRTSLL{FZQT6~Jca?37DTY}-2}vEwe*`DFrW?wOUX at seB1xTy=1Tz{tv-ZX?%Lhof6eV?+o?GoMPI&hY}J4k&WqG2HiI*g0Eb=?yUKt1&nYKwK8kT z2xXRMecT|-?>C6WG%7Gplc-UsigbHx=_wE$W$jE5uHmMjpR(Wlwyd#rI15eqM_?Zg ze6jx%u(XRlQm~e&#shT at +l09<4fNB(7gakdrn3>o0z`gsCy*+|n zhLl8rM-ax3fG8Oi&4}32GC?j{e`2t=->xOSt^t$wy0OYssDesfK+>BrI9`d29EJUm zJ-i}6`NCH40!fvrycvaJB!9%ke3!t4=aXrTwl7BO%kIcUnPvNGvV?6v8fy9%-?Iy_ zM#C@;Kjw(>1o>EE21fG+?+R4VT7OPXnIwpuB6zdGC7jwbP_%v^N8P_<{%%bQnLX?9yDU*+5pL_CWj4Ys`P}%F2wLs at TGzKBhPz!Ny4EVv6%-ZbZ z!1!rSYRq-L5^(4QedhHW=hiFmSmFXu{R;Z)#P$(cqklgf;4d>Q_Jk4fPR?Rx`h%(B zH^LARdY at 1uX;@8JV+&PfdVJEdi5Rls0n55E}H5h#-Frl9^Wiar?;O72#o-VVjUrUzoIf#aOR2cv&<9S#i08~@@ zARj3psQ%wI>&dJ?Nl9!V1nxxApQq;v3K&efI~K>US-n8FeGZMgHTyXsDLpo!f8kzm zckpx5tsf*@dO5CB<5PP@^9)SLuM?6AmXQgLmZeaNrtWlEU09XT-6y|Fc&1yZD`B0;^VCXWq zY3&8GYYjA8oullN6DC=xn at zI4hJAV33CN`UJaJ(lnV4I?w{(#%@npUMv9#XHK3Ey+ zisoIXOxK5Aq?81kdMWvZHJQzgJ4T+;8e1||-%_$gG*3(mZMW zFkVdSw09;PS83noxWC@}0vsI1oo!hPG}Wsr2zisd6#u*q%0QuVe?S=(ifh&(JA^yI z)XxL=<~ITTT~A2>Sg=cgKg|C?_vd;AK6HV4*E4CcZ>YwHAp80Px#47C!UqQ;<-JAg z3F4|_T(r%L1=(*Erw=#W7{Sy6Xuxiz8FwUYwBj5AM4A0q=KP^tkE0}?Q!Y|Sg0;DN zR1HU`iF&U(o4&)Ih#gRTBX2BWn6H at J4>2+)g<@MZ#<%*D&EBM4eU2|AZ%+RkuuI=kg6!NjcTwnnVnXQ?q$*Ck-Cd z8>|;{fja9VR-D4F6DTN$12wtvclOo(cdQ6^AYO6oNLMx#n0-UvM!r9bb-#D_1a0W3 z3M>f}KoADYPb5t}+2%7rrZCbp*ju!i(TZGCfJqZd2C#t at l_K}QC>E{3n6qbQ9L}TB z_>m1T`lRzmoGteWYGRG2GOId5wK7)=l_;$1z90|wN72M4?p_1fU^L8#;G;|x%4A8FWc-?{U8Yy8k2!K6r>JQCCW>0>S;63?fTOom~ z&W&WJ`mtiC!NF~T75gmJi!l;xlk=fs1>*n}>$LVzv0>Z^RDV;k8 at opnqyTJ>elrb^ z_!`>%rVD-o_%wH_Wb5w;fwtI0sp&rmVd(nr2q85LrAa;oyu{?o%wceq)tM_rq1-Y{ z3TCO$NsjH*3 at T=Nm24d)hPp+zO3~BzvpNzp1WHB|clA>e>SR z)i(U#+n*Q6{AETTNnu>F`u$Lr04kD}Pr^t#`U1sRoW<@qk>NU}-l};+?#hShY at RG0 zfaq#;M8r-y$6t!zz~BnW z>rEx$D;6OCtBs+sn>@6!E2if+K{Qxwn$W05a?&nl4{fZ3#|Y5I7P{*JZOjB7W_A`=cxc--*GdccrnO$xhEgu(qdEOqJPd;ipf+RT?c4`F^JpS z=iWU&brMFN5i<#wP5nVvaCjAAEjN>ZKIRSVW7 at Zc=(1luM~ZqEAhW|@UMybtfn|r# zD%VwY$%I#iwp#s)E2 at U|%Aflf0M(y!C;zBXpgidL at W=~y9ljLAtx&&|ZHeqw;;Ix7?)YLV2M4oo}3!6ZM| zSvEzMN5neXcSQPyt6f-X`?-t@Bzl7tTp- at S&N?>oJk7M3Eu%k8_ZjIxQzPY6p;Sl6eJH20Me`CTl$0a`dg>a`NJv1AqPk) zM>K2v1Zn911ybZ$os2(su3sKF{+rGPmiSZW>Ur#3)js!Xfp>53inb*4e(zi`!hp{8 z4A{94OkPQD2?5BJoKsTkjky_(k=!!-K)51`t6Va+ at ehxX+^*Vd0#F2fiQ=6=MKDpz zYeViZqMmv$at-hZX#hpwOt9o2;2jH41X9BKsxECA2&|IMMlZcc(BrT9Q0=?e!@$KB ztlTWTLq}#M0Kfj*BZD@(8k3?hHT{QQzXv5SE}+{wUT%yq~DX`o1ZK75n{5#VhNFx=p#psv|3e!Gd<=hDd! z|BrD2K+js++y2iv%rU?wC^`N^4xD{EfSx7c-bfDYSu=~!s2FmaFY8Vt?W2rY)!qZ7Y{u7K zEeh+lMdU$y{)Bkt`AeCJFr%J9j;bOisGKZ}9vxDduUBJ-P#R8!l?J4MbOfHec3*^FV&6@(*itM1Ze4$N^XeQ>=D?^tzuJ<6;;Uox>2($=+V70w0nPm2* zEYOo>DdVNBDSeGVT3vl>^oZ%CSgBkrbeaPY(=d-l(nn08;x+-8*4zRxHI1j4T^5u^ zIP#!J1-P%^b#sXa_a!qCXVeqQrYq}!_?nL%r~^7r%a at QEwxouJ2*M{H5|}`tfucwE z^#bU=aQn>H&n3Xhd}@abJwe%&=1&7r#4rKw>)TGA1*kVN(0%EAf1W72;@S^TS?Jjz z*gNGOe8H9Bc!`cxy)wR)k-k>H)9U5~$v?P*U(cEStvdk67|lR$${Cw`U#|61q-iK2 z?(gD)pWK1XUiS8bJJ{z)U4vevmIOPk5s8-y^QdPd;fMz-{PaoR5TPsLp*U zwgLbGE3RSbYz_<~y(;-iH0L3aor|N$P54i55cB8_lrCL;8R4-wHE~={izPw5!It0~ z&f_#sHXrmLChvy!i+Vf**~md`~wr8(W9q>C&&T;)$N{;{TBeelZ4r!vw$N zFuAx7aja}*=AW3rp9H}H0Up2v at qzjY&$fY$%Wx-L%iN536VSI(uu2O~@|al108UoL zL{XQ?yEY)dbwU82B?a_Z67(f9PyUiv4O{Gw5=-<^ zVxdt;=Vw?0C6*^ZV(9 at S7EcetqRg^+>!ZY?pZQ6({wv}3|L##iYdwXPydW)q+N*pq z@~J=pt2Rl~l?x;X8<`%M5eh8EZ~>(!*Kq5RkHKdqOE zDy;(RG-;k#LADDR4iG0Bez+^w}AeY+?JtFYkvx8uxuU-mg;&*1;Aj{j+acXff-p89 at VmtyrF{z8Z1dR zux^0C`Z9MTJSSc&wgD*B!oZ6*l*dxViT+WlE9pl!;eb+wkR5}5DAfMV!da;*X z*?>~@*fjnmgH_uHEY+dMQq>$=@vU%Fm%CrBSWZAwK_m|hFOAiX7la0Q_ at t$JvXHP92zpd_%ESh>;Ek at G+v$*nChwu zMDZRMkCA+OlEnfYSDnFBXERe>ug4J!wkd1)E at doLO!1ApwuElJVz4Mgxmv^{yf}|- z3*wl$nEAoKlB>aQ{P3 at M5B}AblX!6Lbi=dAq?38|@+qUj9;EEpGa$Uyo_j11mTG#; zr-1^s8{zKzKUC89x<~ewPGEqiLz(c3Q;>>W#ZZ z+YsAz_GT!zy>X}b9|4fr&^=&@P3Zn3bU*R?0X}I}w*#f|2X8Omn z-I+Ccj0WiNbmI!c!m6vdVD8NDfRB{rutl3a&GvRVJi2vuXU=?cNB}}-vz&dPvm_vp zb(|zI0d%lniUxb9Q>Cq#gUP7uVFf)U(A=dGr>qb?q)KY>NfOI>`@l)!+F%;c!!Fp9 z$fSvKua^yb<+Z*p?EqSX6T~Gae(&6=1eF4k_wQb64hN=?w=idXKnfjbC4}L8m?R!J zEhe<9x|z#)u`B$@w5a|$)4FAZ$K=$)a=Co$TdaV-b at kA<(g1x69 at w{{`^gw$(M!_L<|1rjvAnF3Q#h@&)2~PJ+il_=I+xsEolEYo&Sm$Pmb!r%90}vT|96gy zCR#!BztF)?75n#eu=8nxUl~WPAkTIyznVNYo$5FS2@*d{up{0^pr5R7Au^x{HR)m<(zHI zhvX&aL2d155%R=yt~SXwBW*v1S at vwpNOeJ~@u$2PX{ptuTf9u$`qP;nKik-@%j{xl)rz61{; zHLb48f%j7z`x^eU;`*=)R9p`{`{-y3vYAYiA9(guZv!ey**aVvwj>7+wqqR>6e^3WTYLajE75}Yc-`TQG0 at y&!MA6jNySg06 z2EqT*u{hqx4?6aq1TRl59Q}tlz<3k~sZl at aSOBVc;Id<|091>tTX&tn>6(K3Z;n)M zkJj7l?2X at rQ8_-WYuG*HFGEV6qoiY0Dud<+7}k2VnqEm`K>%?8TOl=vj!0o+-rkD* z!pjy5t^5(ylA`Q`IgB`{`B at ti0IIBigX;Ks&di^6>`yPc{SQ&0p}6V)Jt{nz(t=+H zE*0qMO$B8rW&_h#ChD>Q38EkA>$i2EztUF`?u`s!=aMMZANVVM?Kc&t`3|b8lu at xE zAW3q7CA}0ZIQ6e-49sS;rTB6VH%nt?!H=l0n920jWA+03n7*2e4~>Wp>aX1AoUWTM z-bMYtj0y`{R$l+(xBz%(;y)7XFDXG>4bUH`J5KQ5r#$s~%OjQsb<2(lr*G)I=@R%j zj9FNn6j*$aTLWgC!;mLMEYJ$^+mho$XM2kxKgI>&+nPVCS!G(_xFGvq;{t>SHJdSi z at pQl7QEt^IUNk<+Ehe0pALD|JHi<>EZ(D?{cEitWD4I8a>W18mfh~v zhc7%J8Y_JQivnF;*}UsS$@v0JvMJyt6KnDRAK2OO|DWw_RQ0w!aIxS7^w(YIA7V at A zjiHW(iMh+)Rc#r;RLMit`u#jYq%cXQr8H4$`utPXBEmq%U~PDO`IoJ=*~vb57;>$1 z3>OMCDW`y&ChtAB%{ghYN(H(EBUwv;ODG+f^vssB- zQdzUMA*Tp*vVo%RJ>c at zJ9?Wy at bW%W2Mgtv0tj8K{u>@O3sxg1h618Qx)%{`YL*W( zMA!q=%G+yn*{{xBijlQ=05z+ic at +Q#5U~fJdqERT{RD7tf7{;j^4EqU_+#Dvx)t|# zb&Gydvn=FYV6INj{gFZ#3(H8)3H8S8 at mxT%?%(ah0JxSy#zn$#I|{(G-X%pp+nvp0*@-vRcfRRDYl=Y8w!)5^00_4^NBamu0 z1tjG&u;{-839fr0LM%QEzGs at X)R%LZ8H;(ai+O;!z6g(#eb_Mq;JW^>6gPgD435oV zmOOleTV7VT3s26Xzh%GQSsMES0vrYx$GYO}aHhuV;9as at d^>eNCaR*QGYE*z7mgZp z-S`5mov)s?{l0EEc9;5(a_gskn7?yhgiZEp*15d$b!Fm#nCri%2LE9b#BrUA+-A># zHi3M?p0^%g6BM!BJWfsNdu+)ep5+!-neqdW_4qfkk1GY2KUNABq5i#6 at X3_H=&yMf zaHU{7h=y7kIPZc!4BNE&m}C2|c~|f?aNaeIpE^nK>~Y;NG+>}e(D8w2?H-yKpVz%; zR#g`5L~`b8twEcmm&B8R2xTEHPgD87hTig_6gE6Y536xP5UG~#eBLtM3DonmIz>XW z-Cx*#1vab{O8C#h!20L0?7yZmsb{0_eV)m_c81pAbow`{^*~emHNxjjnE*i+0$OYI zEkHUcZ!O~`&dgU!Dl-VXtH<)}=&_1muBW-@}3%r*a1t5*M)T1^C^y7EiHrSivG zEtnAHf2h^uldGMnpVnV~9e0oaJnsG_D)@oxqu`Ql`!VhY;>!4kT1^h-!7O at U0d#=r z3f+6$H2f_pxI?ZeI|i=BVRDXyw_N?h`isv$t-q)lLB#%9aXI`pMf~q;oHY{SVkxxE zpZ`H|t^B39#A6Dd02ee$8krnTClK7Y5|}Bi at z;Awpj(T7&S6USfsXcg{rwL|o5dc> zx!D-*HKvs_r9JZKXgRanyA1&pi=;|k!FDbniIRaeTKG|>5#u%A^T(pCnn!LhiIm(y z2s9lA`mP*+ at 2Yy-ei2_F@&GJ8gWih%p|?uZy^j at keB55# zN1rj5#bDvIY+W*XZUulD0YjLuzW2wr+ytiBcB9T`QZyxJKSCG<_NDVVFy-_~i5uY9 zd;Q1Q`yqrG?s?E#cw9@!)v)7C$=4r at Jy_MPqU1WqF6V5NVF6w?4(Mf(Uu;%|!EBld zac|T?DNX`6W8;8(hB|*(k~a%D$IJY0&!qpvu|M6WHa%OTMqf5#+FBFx*QJ$e?(sE? zJ7SWgqW)LPFvJ(jPcLM at nukq_mmnt%rE%MB>{ZfNNRNWl$x0DMXn?s$kY($t1z^G3 zVQ*k5-19qk(+1dlA9rL^r>#;wU6kr#D=VKkatf|`ZoYEJyrz^(nJ*8S|CNQqR|h7Q zz^Qy^p-lDk1rbTXMCDvz0<}J#PYCV+;s^9$=1e}G_ZA0Aa|xR^K7}N`s85c|0|ejO zkDI!ran at g{Tm_&nU3$w;LAyP_io%RhEL?qYksYPQoaxU-SB4`Fyp~iD4>G}?w34PP zBtS91-D?-lzpsmAesgny+Zc8b*6|ZHYaC_|u|-T3Ld$gPhR%7><&(VYclWjV_^Osg z$6ia+U=0;KzmE zbODqz1`((pSj8e#pJnpF{Ov(<3*X;Ctv3%@5HjOGUib~60*3Az%;2tvW z at hXL!`Q$NzTSk;Y%f1B5!og0uHFP#a)^>->q-m+nU at 2e32 z4Ihgw23O)lv~Ud574_+T+Pa}U4S{RK(l at wjz3VUJjCFowEfxWt{454XNqoigMrlMA zP@#v{iG>RsOw#jyYjDjvb&-<7eVpKE9C1V|nNWl3Z at 7*yPq+uaO0`-v(G}*(trZ=+ zbrl3)y>}clZ%S)Y_N+XEp#5Ew0YYX z&b>+9iCItBxi7qbzv~_cDX_yVAta5; zAn6+*U&QOJa8o#J7bPF+Y^O>&_v!taWSAc~bKl7{G z7JWqpnwa2NrNIprIb5a{f-CK&FP)lJre86T1>SwySC#Z6&1=38cFMI_z`|B|tw3WU zLR>)*M~UW440O|QUXzQ- at I zF=qAC?%fAo^rE9Ish=e9pE!aP?Ai*)L9`pQF^1Tb)FF|Ai=c{2Yj=;6fO&uuXk-X6 zO1ymS$iUx74!l8FR8S7MqIyCJ8gmi7(ssVd*Jm=j!DJ2=Ch5c*6v`SQhjG_JkM= zsyhf3- at PyrF%IY-y_%738$)7O7g%>Elc>pE8H1?Hi$&O0h^Kb|X at Kp^@_tAM+{bnYOR`$z1OG{-K z3bKlby%o`9-vw8eYx@$h&2b74eXBHWx`~;8&Mn~7q6sGskqVd0o2tL}qyoXRVTn8c z7G(R?`iD9e(olHCJL!9a(QQKbfD7fM3?sh`lJ*$UDy0E_?V1tHZkv)bBy#Ye#5(+T zG4*pOZesV%BZUyABSHclpTBOnj5$-JiUNFGIK_d;sJ1~|H>Qa%?SAwm at 52K98CH*s zqVv2Wz)4iHCQ!+%!YK7c4L~7+TYvkyt`_g9zF!Hu-az~PWeqs9bZ{UE|39p~WmMMN_6ADlOLsQ{f^f zBi-HI(jcK1_I97M<<$Rj!zWQ@?kWd`wQM1@`@QHs)}Tb z$u3$!Eh5>?EwcS08}OP$o0HJ%Yw3p1sO7b_z`H5|ZaoRF)zT({W7~-cYf??dht^PL z*|N2#h0D{pcUoCHm^nL;6{5ngLMp*<8D2=)##-GakwOK>zl_q|>W74&kXdZvjnE5r zf!kpgdo;scyV6hI)P;`y(VKSl(!HUe at k;i6$$Eqw?#{w8(5L~%`szJ4Joh7F3Z^Qe zj>%$;c&(%nS5~(v%OE at gp;B{O5N3=c!AOO)Q9W% zB9*RIT2pf3Dky}-GfrmymI%sR3xH%QfqIXwjLD`KsbpiA)GG%%we^k#b%3Irk4v>y zgnJ3m?&Sr2ez+YB8y(nn_p_i;{JgKFjhPD^FA7$9a&Cl53zH~#?$RQM3d`?1Biqg+ z_8I|>EoF;f=pvgL3sv(T>Jp#EI2|sv+ostIaMhU0$$YW`nXnCL3N;M+P*?_-j{WfS zI^`Q`^x>AAtREadK1^YW?6-Ki*mv_;<$ceVxRUnkJ(c{BJ$w7K5dDc;xZ3w=A-YVz zkRmqN14xtxXjkFN0ZM*4sh`9 z%I}vV34KSs-5=fvOU;XyY`CNa_B!#CcD=tMm?I7JD*0ZU~08Bt6d=|LG#?zZe at n?V&eIf6^ zRa&0r0=P{#w9Q{;)=8WgGuSNXe*(a!j{w-L;THfdZT8kBNg9jkDgitNU{a3&m_{7^iazR-t#Lku4Ckz5-K2scZg92K_VP*gfi$rb zPPjGclIdx=tm9WZ>B}eE>-hc=0N*|VV4+6S2qU*etzE`1pQ%yEwbVS2?L<0ndALKAAKv^ zplOn^!o$loEOWpHaKNc}D6fF{&MJS6V7qkUwC?L?ipLO^1#>!!;UFI%wbZZ*Fcq1- zubAN9ISz5Pieb^?LYm-a*CCt9d?IQ))XMVQX5EFY9a?HMbR&M at Nqv^8H_}oH3XzIR zk&RL|JqpTeE$B`c*j07xn7>D%4&3}aVN2lguFtB9q at 94_yk{~Kq#&Xwjz7SSt`P%L z?Zoe#WNcxj7dg?6%V0fi$hEu&m565fU^c4cwhUrf>^Lq)3RJHTiKi&VV8UdDezJJ4Hwb+U)4 zdM4!gg=wpCFeZ!fWr*n4fH-c<^+!0CJ05U`b&jjs;|DoG1~k(5!4}~^ktY at TDGAZT zEZw9Tu8WpUgKCJ4h~WNg2{suqLPpGgcCCNwZ~RAU;zM5P=e=$>)0Q{IYNuz^D$pTt z!ec?$@2I9D at +P0|wF)!m&(O7sSt&w|l8NWh8Yh1My<16t2WFv91&{YZ5>ru%ERq&2 z4{MO_5i;G)B&aXz^-V6+HkqbO8+AH2F|+||bOvhgJp=Ehs_Wf)NcV=Rj7RqqhU6O` z0~||y93o*m$9zMFVZaRfHELWJDa;)6ko_kizFN!UeWK2Du6F$x at GWmO;Gp~Ixaq%Rs(P>bn`g~Ng#0A#n} z8PbTY>M!i5FY at hb1mfHu&6uyLiv#B5n_b at zh*-7$fTTQ#Z!g}R=)%8xTGkq|_l?R; zj)jlp at gnskpDyw>ZD^;%LOUv%U}NJIl$wsaXh~3JkaxaPI0gzl5k*`vxp+!zi2`N( zn1Wc4D7W{ty5={b(0)P~7X5ZXhB!1$vd2IbHAD{7>6yPV-u#I?`ZN} zGjW`aOm{{WL9WBP0DT~m8`$4x7ns@~ko*Iju)#hv_Xscy2>JoeXA5SUo4o>0#l7akcY z?Ukh^NA7pyB%FzcDmEd-McVI^Im4PY*N3o{n<+A>LCIu#*1JcCfKJiN6c82xQj11a z>2RZtYTZzz4te+MrO~5vK#+ZVY at sTQ?Qn at X;IzofBrI)YhRs}4$2`Wc*{rO%RCQ|n z`z&kdBCTJuUiD>O=F~{4kwSl9rlvhZ&C;~Vu|`JuVKx>O{5M4#=?LJPDmL{N90f;mP(ssoYz z8EIHIuL4bx&Xp+y%ol1oMD1djA`%LbJL#Fir-zUY`%uSteawt{wPvs#(xtvGFYtHQ zW#~c#Q8t&aLV6UeN_yn1>epR|_|o&opCtPhldj=UQ%zzG3M$(`jJ)LX!@+6}SI2A) zoxw~MlWc$8{3^5E#^F=AK_3*|;(^v^jar)1ENiTwdJOU)U*pNoqp+e>qBE{tnC$qngf=mS6Z4siidbW+m!6C_TG^V1=Kb)HG{6l{&&s8F|&TZjVQTZqnN zholZc^bqOmPANertQ{SU!SHSCrcqyv(}e;*gj}VHH$lZ5pk14;Um$lp)WiC_2Q#m6 z!g8)bp-Nn3C zz9FhS3EH68 at Mqt&FFymx?hBcJYa{1-)t()%QwJY8~yK zjrita;m?TXuCmIH$Xl} z3pVdp20FUnjd6PYb`ZZ`tL4ICsb=1eEjNA`p{kp;#u$_2wA05&4}QIlGToYytM0X` z;n=bKo1en?t5C{PZGipW%EPeS)8M_vW!UO8e77e}wP{6u2! zyo8>IbC{!JmZaY&u0>^Uee+`q8l}noF`il~yq(FLH)zP6|GC$8$c^(S5utL#!~~QE zHHEsgCg4IUI%igFiiH~vTxqMHNTb0nY?hDP>aVqv4$5T%gtULGowUo8LPFRB+pB$y zpC5zcQo%e%+$3Z}g9MZc+*`;WU at R9TlUlsrC_0^}H|%tzcHg6`Y!eyI_uAtNTj6 zvdUN3OKiWm0~T at L)@n+0L#_;!3{+T&E1GWPxbh?(k`I?CGBCKw5jR>;*{$yZw6{?h zOrfUpvJ`%<05b77(?Qzj%g_1{D=7bWl=XY<^Vxd4r$>y1b0PF628RtRM?X->f5d7b ztN)|SkP|J+96$!h&(s$UP=wTn>A`bweRY3^AksGF(7Xi{p(l}IERY^(b%Jb=3};w_ zYZy{U4a*-SVKz~{j$<`oSUY)GUH5lqzsnJmXtz6XI_SIdFQQOT7Qs{UvDwVMh@|ps z*x_0%uC-X%abP3nDY{>-Fx3q$A!5Vl&p(bQDe)85d<<-X6o|$h53*XF`d+4x zeohjQm~s_w*&&$kQyD^^C!52R-BIH6I&l2k6&|%7ynE!P@#2Ch`~r&e_$#DA){E|^ zH|%nB8!NuVH_aJ+Tz&KOhHG;7pWbjIr<@>{;0@*Rm at UScOepthMtSB(JLRpu(M0vooNyWsy6&D&qc& zAjqni at cvt2dLN%?fndUiAPJ at r^t5foFO+VNU=N*|?dlmHNn|Ykd!)zv9fkf6B!)7k zR*o)|%zte^`;#yknL(B|Q*f&cLTXCs6|^E|I{{p1LYOZN97_Hkct?(;tTN2I2b|ly z$c-?@VGSFH9+K54yTuQf(DU;$Bh(+Q+pI^9)9-H|9$t8ZN~SZ=;2Qt|sO=TL17tVM zgk8ba>b~`KM<#GHHaZ$8l at -V>@1cRvl45X7K8EK%+igaM83>T+mDe!PhciY z4&4*`ahs=fq_eoZdSM5!{7N(-XJNG;BId{QF(ECaQE(kWW;gG6Q4cp*6(T-ww5enD zQ{{NhTX|gOPa`@0ErZH|(X?;yIo0Y*2X?Y17(W<*iHJid?^X;3ny2)Qx4P at 47gKioGCas!oqf8$1ANMHfWvm+N7pgt&P!8JD88;^N~j?1mM&_~-b(#yZzf81pxR zzz`G*%hBo5hn82N2Whq|W4&|%J`}2;2L`^!qt9{jPYp at PUWk7~C9R*m+Tfv{5E9E) z at G??jpZ4QIIWAB?mx_-iN|J9U{5pYv|DBAJz?UjbP+rStT2tAOVhs)i6z+r_J(JLQ zER#|jI$X at 5euE{eAL2EKwn{9EW3`4Wz(}B+rMBs+c`=}xI-x?AV0 zu+b%lYkdAj?{1fO;PlJy1Xb_BT5nKp)KL_O;15MY-iu)+OGGDlPI`zGc+XeDO^IMC zTz9K-i<@hlRXM{|UE}JJ*ra>V6 at H+0vjIPge%F<&$4`Jsb-qX5KmWti|61`UHps0g zJ3o+9;r`R=wdW6Ml4zB~Z0Uug0BqAO9Y9N&3eLI;l;qM5 at JipigoFsU3$HOOx*YP_ zCS at APiT#{Atr2cspz-k`-NOGDZ}`OJ`WN|lu8O(x0uYnW{0)baK?RYN)I^SJbk{6p zAhqm-U>d9s%(@`DVhWq&8}Ld+U<_|%SKP{2+t_urK_1D|=~s`EWuz(>RNze)sz(P`&wWpjd*`z}#f1;}ZM#_a=k3SfVw$ zch<&MECtfFmh})rq<6`p>mj5ml>IPAqHH3rg2)03WW!6x{NDoDRvT&p=JNU?$&Psp zh7M;Ncbfd!-pWR1+BXG99L>&qiJ?2) z<2&xq?VIDg&n9Pd^w+&_H!A4pxHP}0)1_|&gerQJu2a1&bcwJ=xKZn7_fQ85u+**c zX2AONMPUpm-pyvDqTP#R)l|5yyr^`FXH}fktqr~a$XAw1U$bcRDvEya##&-^7G+i3 zFq`k3GB$T`E*0V=s&n1k#SNDueBqkEgsl at -8als<^i$)T6ViVCDO~rpj5IHBb)CW1 zKWxpwG2^ZvT3nA&zI)}8FG8K1UDr`_Lr?0I7_G8^FsJ~jV^-TS`3>+xWW+gJ)d1VL zW?>geiW342_BS#==Gz0(AbL-6vrBM}V}l%O?x{ zI2l^p-XQPUw06x(PlrC|S7&K27NF;iZDRUf*w9jb6Gq>Rce6xkm?w$OyNdn^LJ5HM z3fPcDipw=^_k7hCT>r8@{H1 at tv#JcSl46L8%{vAqMI5?3lP$W76NFG09zV1}|*#2y)#+5eVtk1vvbC^9VG=juWD^lNfSvhRf#HwQ~ZIHdu*7r{@GAI1QqB~$oreq^0h%CsBb z3HOm8XW62h0$ES(mPR|W2#7Yla?v2V=orm-)L~%lF6|uq8Xq`7Z6N5p5V*v~D?N!u z6Osuqov at xWwtT?_z at 1FluqihqXdT(JpmtI#Tu at YG65mFanb?_ZJ at so~G}((FaZ6Y# z;QR?0LO8t?IkWAaV3T%7)9hrXjZcSpK}SNa&89z3jBOn6_Q2)&O-ABkAP4}Hp{F3hxTCT~qZmLQ#SQq1hj-|v}X z5=id*c*lT815f>*?)hI=d?jcq|G`a+1L4EwAf$zb3LcgNUD8wuXZBgEB)GDk7tcg% zW3o$9+4u(RcJ<@NjEyH4A;}Xnaj*S^OaXKC&G at 4IaYI|xGS9>1U9UXY&WTC~n-S%p zo}4gBnd8I=?+k+k+y*y}^-07>?ZmBOu^;x*!pL=Ei)b;%sE0 at D_#*Wu9ThCOvFVx= zt_hhFUS;YZjPcNyhl?zyY7c!IEvGH4nDYr5`9_#>p+36I8%|BXGe_pC5qec+6r&A9 zXv}1od23}hozkdDCTrcksPvMcDA#^Y6 at eEuP+^HB-#nh&FO?H8)UP&arkXu8_5~~! zNu1{G*OLz2T||UPP_rtX6*@VBiuYZvl4=zm_RnlE{sDuuwaMHG2Ul?vCcPv96%SdD zY93^{Z~AIaS+20*g7PUDG4}psw>iRdg|QMv9F9q;2%Mu8{X#Ll)=GxJSpj#IGo@~o zBkFv6z|zMBCstTacx6v3ts$mjfKIiAp3sM79p(r-j1N at 4v()i2oc#cOaBL*@qK~JT z>O(0txmynW#h-ifQrD)*kH2d4c%r>zAzsZ4r@)Ox6Dbc at EwQ!L0YWLZO4%(1h9lO~ zOg!*2uE&H+y9_cdnziEHLdq@xPTvRVb zC)Aan#hu`gtS)v at R zq<(6Sjgw_eM63Xu!nHB0zpWgdQCOx at I^_u(?cfv^2q$nCtXQs|;(d()F|_ at f)%k(qR*n6RgPH zm)z3Wi$ED=x$!2(^pA2ZU>{8jB6l;za-#D*1L0+0e1xq9?gZzsGiX!cp;~_KLSkuo zvv3i>-LArxazZMW?t0pqiABkho(#PpQ7}iFqtbQ~LVQKD>76z1-1p9tDH|O7OqUF2 zI`C!WgX+aZ-6!r9k at uiTLE?#Q&v<$AOFjS*=LI}%>Pjb{@%w{ znhM~ zV;Kjl2egkg)+H_$9V8MJg{u$cEt~EpL_3!k^a%lqmMs at 5S6WH zu2J>ndLbpLby^(xW#ish at 85me;|3(Zo!Mlh43ro;)ROfg&*?QGS+Y2I+Mke3m%!c? zGlL2g3d{<{3LLa422Aj;PTJhC*G2LO*DVSB at RCKj?25iGnISo@@0C at B4K--JxnpTH zu|o^`N%rG&->iHvv1&9i+81>A2I_tY-Rg9>ZknYlCSfd6HLdqBFG~f;Mmzhm2PSA9 zgR(J*9-0}0NL)|JLJ2yIbSY?rJ+M>8_y}UmHkq;bul0}{>EVOpRt(;fiJ!!LhY8_f zn8i)dHyrYq#OUlbRA!&K-W}4Nug8xkfAHU%t3Xy()(#*CQ)?@GMg>zVD?@|78nd6; zhcN?2N~dS1KQ*eLb&Dm!%#;~1`;P9TigT8YpVk^ku(Euhy_nLz0ppKLD%8~h;7T0( zoTou@{xKY1W=m;9YD2?Bc|j7^ICwLyK at C9PAZ&ZP10IWcJ#w>}399 zhpK;=ZKp)>lJ@>P5xT2Gd`FSpS2d*~d%GlTv?X8F$VewAJl!}$;Ej)BR1)p4e3~t; z^#{U6lgpO51Y0PT#wg|V#kjue&>FLz2bFD(RQj*w9fDHqx8Zk6A3l=cqQRxv)QzSh z*Unhu at PN``sC?@Nb~B at dDBcN%^Bul_R;HQ3cfCG)JUz9uQ2z&6$vIl67}{ByT7eu4 z|B_gXTqo0`#27Fq&SoOv$WTSZ$&K;=h5n+_h5*D51WRg>gs at a{xvlt+C|^X#Qjsl# zBs3bYVuqcg${)_}E|FHjMSSdi5PiTie`-w{_Ur2>Go?#nDKeYJYmvvY-;Zj7WE+u at gj;2&CMe0Y z>*{E9Ud_Rtl`YBB?~o~%3cMC<(WKvy%tFWO8PdjMz&461%X)Z$0n^l%=-N~GVzGL; z at -7I?XB6Ji+sM(Tey)iNVMkSg+@&|1_?F9b6E at g3wCb6;K&poOgV_Qc;`auxze`Qj z(8AF8pAu7)mG2Nl_4E_O5^FE-${2GYb^CmJ7&3}3D+s`5OiwT}NuYlN$pHT+Ba>k& zaRyFS(9rOJ`}y+l;q}N4j<sl&p at CY}C8y at 3?*CrhFXm}?f%QoV62 z7ur#P9cKFuRnCce;9Q at oc?XeAr5r6ooMd+vep|3%1&il?y{+P0?~ce5hnJ>G{I!m!NMyOpk=QoFl^~(t3MrS?E`6#+(Am;+sO3o~*K}&vyeAnk&bj2EUoBAdBuIzK zELYzZ=3_ah4Dm2eex%~Y%cq{wP6|?Dz&=LNDLitA4s2 at OT_3V%k%;>a7 z8QRtT>3p>AeT}FV+ae;2;z`JUhU9A#{^8k-4~mkK-O>LrdZMOwhWh`ImHg8*O81J2 zxy8XJw at 0HV5(V=#G9jEfg|5z+K5nR0nWH&3gnc{3djo#2pjYdAS)r at T64kuIo8;lu z@*b?dJLF5um(PNqMm_tB$+z6~lSc_se3jpS*o&u5E$Vlz+Qd;#N#5#fSTwh`Q%5iB zVW%i{LM(ibR5)8zJVlh*GG2?2>Gyur)avp1LJIQoJQIN2W0#x1y0_Hw5Ofh7(D&?INwh--7vU9(^gGA#O5bIPF+*SJ|O82JXd{ecC1o!Rj zpvl89v01pU3DYqKcgWDDN7>KJhI`NW(PdzSF??^Njbd`^Lz_71q{p|+68x+8Mnp($ zJa6H at 5iuc;bt%%m6AH(UYiu}urb^vlstOPWeB`3}K1*dLE9;)TrKGD;6bSP* zW4t+baB;F?aD6Z*Ri(GN`98KQcJRJg4+sNI5{>_m+STmvAX at M5rC=s$MjUK7)b~Xz zAxRm5O*6uK-1|Ota8oJ+<|;#>4ORY~IuPc2Ni+FFb+ruTW%sQFG88usDDS(FHYc7355E&L5ckaO2?)YZH+d6&M9c5(FiWS8CTW)@^95w7GCb_Xlt51bl-b|AMv at h8k z{9}ZOi}~P;iSs~$=m at B*`)nGVChY&H1Vf7+aVB}z4JyWr^#mM`s$5R6M ze?}ED)>g((KYtCr{i$3Smion0`?3o3e>gl$lN at 1l>F~F_mYr-CvsRRIn7(_2A)Zq;+f`)Y*&94FL z3I`o<6o@)#Fc|spaif}~ULmALo%5MI!sZMrmij?IC3XU0_j>T}Z at x3TCIS5ijHJo? z!y{DRa-PSm#}CPHSX+ptx#9**(1hp-FC3p*h}QQx;?XCbMU^6W{gB=LW at j9hsw`4( z=3(X>PUf>Zx9s;4<_>9pdLk@<+3~0U6oIY2K8nDzr|%f&~&b1NurYWqS*BW at +PxO z5~VcA8?ov<;rb(N)h}vH{57r)N&iRasx)cXgEIY at _n7G888xT02-idnic`CFZKZPW z=W8*hcI;MiZ9evJyPlEwIb11w-IW3!VP{iqhUCuoqmpYDwXr at DZIKhbio*3KB$BeP zcStuKn?7;9l`v|&)%9`vpwXL6DO+6l<#&l{19Boh_d3_*Z{r|& z6jPQ>j!g*@B_RDNCR*mEzMyuj|2ou+q9|vW-fW7?~Xi47x5ih88HEnX9H*c z9-n*dORJ)@|8al47P|P)jERmp3kF0wS63;L9_FfKtuI5 zYOELRF2Vzn8QJFMS#_H=U+ZE2@#OK07x*`aXZ1`-)zdYX@&{t5Xnz8OEmShy8jB}j z!1N0kc(J2+feEPCZnV3>aXkS8YvRF~s|}1VL~_t_P=OE>9lB~yy41rWM0w0HV=l|3 zUUP2LU7p8cKM-RdFtdzVMy at Tu5nesdko$u at M{lG|@!Ee`Yk?ao@~2RK0Q(#@A>8Fz z9QB7Jn>nx8eY>yx(VRzK7Oq$<6GJ?(1p*N&Y#|dGXv22u{oNh+nJ<&MI!tgbct>8J z`xj3iE?w(GWMVXi<#Es6CG#Byd7{O^ErVxAfg=-qhtVTkyLmQfIKsam`~(VK{ugMj z408H^2?<(PyDI;G0tD*+77)z+4G`GuFtfms%3R3zOUb?h8ASJ*!FLRqg#*F?GJ=DH zU=T6 at dfnJ~A0&x$i0(O`B#L;S4?c*`>~*>F*YNho2(SzK-_`agC9NC`jScODEKEW6 ze{G~Qm!D9;?fq$d#JxKVgxw$y4kkZ_05lJPiD3o|N<*x9`dCfJMLH0{uY5ttW|VQD zY<)CB5tG6EJ0;VlS!28p7tbe|3Yuj zbdmnY2s^JJA)VrHZvdWH3pMHNC{7I43yY2t6YmPYB at ajL%?TsN74;2$;nZF!(oFA? z7^`V!@3ml~NAIO5%;#qXc4 at kaUUx4x|i=F~YPnnEEEYZ`a1c0$QC8yv+Z8;~5Xtu_;UTxlujm~g! zKb(z7BG&GmsAw_&0 at Q)1ggl+Vu_%;E^v~vXp6mC9sE#NVTxJa=7kYLydON>vFo8BMjMPhcWJW! zIdatnl~6>eOw0@&H}@;0Evz5igJ5;k7?SP$0Now@@A_W_evJRrith*cyBT=CGyS(d zpg)_o7xE|zWF&P!QBRCA=XO;4XhPZp8k^C*T>Ub2YY5AyEkfr%UvMLt&N*9& zTVd#na|s`_V5(=)7Uu)BmReQ;n$leN751LPEf{yrvVGB89EVqhNARja8F_&$lmQgh zInLC0gOI&zZ(A(y`13!^^+|5Y|ETqWW^tOdxJ^yryv02b8X&pQ%>g1c&9ER36T_gTFRZZ84FKJ$UjuUc&LPFmq>qnk0*+t__7Y&! z at PHI)v32tIo5z7cOP$jw(Ph;?X0jR$YI1IW?zNS;QA+udofG9br(`%kwEc5y zn6$9e22#_jpdmw&r*7%hua+uh(RjMxz}r0j+tB57yjT!K0*XD4{V`wuNXya(#uuOXA#uCUNx7_GnZv7n zQGueks&E7tYmvUTi&!AxcD_ZNSx9IU=Dl7Dfjm5qcpNuZU4OC^Pt&+ at cXv0p7Nw$N z6>3_}TmrX%(E0Ua1HCYz6oz9nKun31NyGk+TD5tFIz<0!qc9#bkTk>I`VtJ)XEeV` z)40p#%p5E8trMCnT>hF3`J=#2%9kw)Ygt5GwC8KKIic2>=Vi`1h&me4pU_P;M-`}> zX|icasX!YGxzxv6-HU&NKB<3$=8JZP*1XGd)m^=)#YYh3C_tepj98|^x6mE>(ZmR3j`4L3Wc at +hW! zrA=3Ud7D{l>mcX}#aUI{0DY>kGPjMe?|!oG=QtTsDF0J^OQ1|Fde}p3fiWSn3tE2i zY5Hv3 z3-jo`)2Y?>%IcRPsTT{N$OSXziwQXTh}V624Wos?cSt^g>|(Rga$j-`;*NGhp_$x|t_Lw!^=L?N%7$;2-$21;I17k1kq`ql2kO$AeXi;v8~5=_BZL90MXIZ|ETX)j#jG)mP)(5`@H$8c19Bm zWs!@vuJcMqBf{0JJI>&D!KabgA|4nLc9?^5y37ztK~WhmG*H4Ba=47R{FX^~iA=Yz z5~D5;JE~fPUr+lWI7elAvx^F7e!(^lvfsLb2EGC}u zjcSy8zI#N%7B_TYm)w$V%R%$a57SPMP6DJ4qCcG$3PY+7d@|ANEC&h`we$74$vZL< zbiC>hyfVrg{D#gJ82rdC%XS>bkn0wVK9GGFx*S%LI?nvcq)P!CRGYS{OfZ z8fdx*-U%qw)I06+tYC!GA-_+??9}Nf2+yT?kA3ZXuj;>Pq6gLAp)UF=GuU at D!uPfC z10B-!sbG&OBE0dY0DfL#LPZ6atIzJ-`+n6;e`or>R5245374%+j8aivk~Wb-K=B%) z$xg5&ntG0eM5cJo?uRS^x^8bwzamT#C4jk7H~{!Q8gS=8 at G>;YUoqrnmz7SD1QIBA z$!ws)Mnci^dUkH5G=;ht;;zplP-a9Q{^f<09#T_vjzWdMINK|(pU-NU3ahFKZI33S z2;z6MA@>+&IT=1>f+$5m`X+{dnGIR_1wmBLkKb at 7JgPnLv=AuSzGiZ$T8Gq&(uszy zqWb&0%_mXK^>M`#)z`*zQK-fjWbj>%vmW^rVBLHFi2M=RQG(HtNjhL{v^+fcaq0W{ zw;3#NEKD{^P#5z at Q3!i{VV9!SWM5b4kqwPt{TMPc`z8il>g8#kGUMYTNqfKR&CCMl zCADNSwV1NQQWk&2Zp%Q4nkMPF!bXSgo^~%~mp9FOs2 at t5Esrhi<%?V-fNqw1AApV- znKRnzE~-Iyt)%ny;>{)Dsib1yYE(x zILyTimte~25wR^PC8fz7*>PRTZcSYDh!qWD4Gpq$5i8DDxx{c0`=TT;_Whs?PW&w( zFtXP-K+A4{Yv`Gu;DQEvQ2fhVh43~wg?WH5-<%myO$mKG+kQy1p?QiD_*`d3C7q3b zyA9?%zQB=$y%Ej+w93psA)TJ#uiV^&r*;Z$e#4z&2{=#cQc>U`S_Mpbmr1+l(jacY z{BFa-z;iO5s4+Poub%F2S8oZju`#q`6wsD2=f*fa(dAEq?5c{{>ufjA8aRZ|_re{od zEM``lqr_KBnctlH3fZDR_#eoOZDlOAosqY$$_;)9u_q8EpDb$w9^5CW5&WF0;FVy- z3MFU=cdzDnYj65i2o1Y)kNO*^pmZC=^@B0m)fWOO+ABTptBE43 at J9{K9l_Hx_`?_u zm|D0}?P>+`5)VQ_yoJ|yWrqq3x}3dqX0A)_u)hoYwVFSA^W%y8SxV!Vuz`+N`cE!H z_K)K)DMt+<_zFH1!R^OGeW#BQ%qB+X4N;*U=skQTfr<{{V_C-LV~`gLW0Yc|s5XreYI&oUy@(QIg2ic-TLoYJ9* zw<~9oA189F#nef~ZG&*_vzMiZ-bFgrAb+y4K0BhU_wpL`(e5hrxfV#92uf$V33+j` zJbUyi#>Z9vVn&R^N1>CVk9=0ws3=oY6&7hiC%fQdwZ#td??$G^<|FF#rQxHFJt~`nq02u>5#;e7fl6mb*{T}mfp|P!*6wjiz3ICJHfCyS zN)uT#k5f}`@We0ln&KN#`ywBMsrjE$(X!u4-cYJozS~}IAlXT`HzxL4T7tX*6Jn*rZKf15}xa53_yaZdNHXvYoJl&ctdsFq+R$*V9!Elze4aP>&$&I;_A?1n$y*(D>1l`XJ&EnL_YPfk8p zs{k8vmbKBE=NTv!)w4+uDUI0YiO850IE%s-u(e}+WMV+zs$yXfQ^gFw(2*Cxz{Rnw z8=86cE(b5~lZ02Pb1+4zZOJ7UZ;tA_P!I}QuHmaz$|w*>W$Ad=PmS>UV#QkO=U|R? z4-+^fG(*gfw?f6?4DgiZ3j9%~+{U}pc}+rBY0ik-mMGC at p^&)CS4iXCQIG~+N-SbS zUwBy@%E%+oh04)1 at WM2D>BXd at NL|8SlU`leV7t3{gxh`ot z0ZarQBeZIEh})*Q8~*7--i2mNb%vkM4AF*|${WN-^}vDny+-p(Jyfj!bVkpNP=I3l z)5uS%rTKW5Rx$MHZo5cxy-Q7IqHt!eXy$hxb_;3YMgJj=-E!9_KATf2?83b9fUTou zPF9`)FOSw1$okIFo-aMg5%z&U^wpA*>8d1>xRe1c$x2G{N{X13y1Oa#8IrVkdCTNz zxvPZ==08s2`uf7LL&iO7Lcdq_*%!Lj8_Kg7ZieA4u~7krS>C<`aiqxbF{Y9@!9&J2 z6j=q9zupU6E^{PGq)8kqlb>gf at ObaF0>C)ji?}v)N}L0V+u`RseD9X~qGU#KX-NgD zzx_$J!W-EB&K|}~!tvqm13gS2cG1*6lST!+^Gm3pim(lmMG<#*ZlSiae6Fm0^laHC z{nzh)7pHW1s9w|K$?;j4=a)GDjXnQo^7O3}jGPn9t3OkyK$zjx!Hedu*zqhCV4x(& zTQz>o5W|q$*CDQZw?8B`3%^oLduenXG6i^4o`qgajI&(YV;~|Zg5v&MttUyY9Z%ec77k!B z+0HBg8K4R}(^2?AkkzrU(4aX{5>P-=Kw_Y>uvRd6gJD3vOft~dg`FS-`~B0W%n0w# zA5Y&OKb`&mph=Vp*7gpPR!-LXpnn4P_?Rc}h8p-2+`>|9b8`+7w!Z$<3?2s^sY?X| z|5&<;s=IN)BC*H#d=>IUp$Cl at 9NsNya5ypT{g0(N4^Iz>dXbslfT+l*m%y`K5f=0oD}N~t|cF^JEa~_(u_&cXlz!~&rWl59 at CYBGy1M1T~}Me zz58NRxs%$pu4gX$=~vqPVX at 2Ccaq$b9={Y1Pt+S2xT%k8 zBIWOcJMZ0N3%!$wO_kqhxShkoauTG1opbApb>JhTZxAiY2~p-9BLoJ@{ImN0r=~!{ zF at 0uYVR}>-CNNVq7>*1$3P>J_R3FG^Id%Ybjjr at B5JdBzT$7Tay`zQ0Z+PI ziR&5Qh^Ud`&JO)mWf4*#KG6!ujg0VQ6rh>odOJ#G6vC8wLM?>?+J zKUyT2A at Ig)gkbRDAd{%qJ{YBQC%fqV;AmD7uFtU2+aTifeGJ$q&fFF8IT)Q_M<=KN0HGF)g0i0wzRXvdx3a2UYxBpNKi7pGl#_0q%>+bDV`Vp~OFG3u34%o238)m=3+A?eP8eBbkrjgg1WGeUUID_?` zZ}-~Pn)}PhR>gx at F~`rEOO2Bz+uSEFU5-^j^Qc2E!tg1%8=aZnpZ(9Ys7DXR)^00q zYnVmM at 4{fV#cnjmtJhWQwt4uFX94)C6G^*usU9Z at +-*9aVl%w0l^K(>CfP;P*{HAk z%DUGcXi_M(?7Cs2nRTglPU+yRKZ*{SMx4zgC?B5tU2bL_e(!OFo!p{UlVTm(kiUg>dtT|e!H7UBsL*<@h_Hu!3^L#XK{%GX%ko*nfbm*cdfJu1&wHZ} z64WZQuUd{sln0Y at 3Z=D2B!R`C(hWlKBY65pp0is7ZoZB}PbbI-6I&+9AlU_YF-0gg zVbFry5=rl&Y>fMSfe(paWYhYDvT?hIYM|Un+;y)4dn`KR5Un!=it#wqpcGU$(!xUpphid^Ff#@H~_G3IW)tvL;ji%mk%2duCgB-hvZuT{zCLz zDjhe*|CP1M#CI`RUm$)D?atSJ!AQ?^mdH#y$Hp0H89#jw!c53>lZAeFEbDr3!uxyZ zZ^4w38BW^4A8$Q?|8aj1bF#PnkJ0J>mLxy7KcgzXKP0K;zjs72F!+Dn2!EHFsG7&^16JNQ{DI#p?#!Oc5CqL8PRqNSFgT?Dc) zGEp2n!HAF&2Lp70+WeKHh9MXj8JZZF9soLS4)TDp5#Zwn2G5y;96>-s2WHPW1^k;3 z4!e&r*#2201Mna9;NL#e|6I2j|1F027v&E9+n0iI{ZqM9|4q4v|F6pZr-1pym;k{2 zaU694`}bm%f25w2|CV@~`YZ7yOIBa_1Vj`?!Kd&j02J{CfG8>;1ffy54$ly29EwQ= zU-bs;FSt`FU87VD at na~KyISXyJ+0lG%n)P1iLsseY}ff?dyDt|{p_AQ0Fehi=tvDg zcwz#=P$L8}vq2HjZVF=<7jevVdz3eDC;b5c*^lShIBHPcyHNEr9J8o1-HTM2#wt^& zR%x$7R>4kbsTB*=m27+R7%P~?*rp05F{iBh{bRLDOH*}qD#YbD2DY at POoipaE;wmD zf>2>zs;i5WZ)^bFMYnc3CDlr`bQ*LG?|Vk-kxSMrEqb&{%UB|p;fPEtwM;zUu(@lF z!stFlWH(vDj54cLiHN#m7q?W0{455^aZ_bOk;zn)-n7O{_B$?_;b+A~D{HiL6Ew_V zQ(?Ldi30OPU|Bjw7m_6Sj!+~WdW at H;aPHE``X+6+a8Vp_Oay*BXP!YAaa1|cw9~X< zUNO3_AJ377K$I6T$-4H}vge{m zmWN)YCHLj!Et at MM&2ie((_vwqGdXp|RbX at ciXyog-%tJ2-yJA|To0tKQx(@y)wwpR zbr>!Vr;z`Zcf!dn@~FWUYA^Ebz6I!wtnsujx}_dO;0vnRV;2}@)z6!0GOnGjXT~YrtxJsnauE~sNgJc-DeF{FF0Kz8NMzMqPk0$D4I5UgFr^N$?vPW8 zA^EhOG$)~~Dw3Ua0UlIV=_e$@9#F1ZrE06QP0|79G1pp8w{7*o&|4P#TV-;yYdZ?_R^07DfOfo={kOT at 0 zkx4NnBOtL5iKKx9Eg&R73W|iLPfB|*cp{sV(cD7ce)drx3TdZzAy%lhcw5(QuF|{60}SE6YI#?I_%rzU`dh|t{WT|yM6G?GJ* z8l4qTaZ>4kz(pjeNPZdoT$eE=&F;V)4;j17;>eu;6Sp?P7$durQwiV%r7vzryXE30-u<~)(Ypm+%{UL(HZN%Ra;&UyWC at E`FsI7rM-mSYY7Fox z5w>6;FXpg3GRnm5PnY|jmRp_PV0RS6{g6V#U5R*7QwL at crs7n{?1na2E7Y_tV2v=g ze#r2jGFhDSOf6$(crV#3&I|#lB({L at ZTmD#zPL8l2I+P%6h_qrho+Sob>d5sGBqn7 zsEx7;3thJ_pq$E%AfRPVW?+b*oIz0x`#)<^h>#d&(G*7zXeOTLLWb2ahJ&LdhNNy? z$vpT#@$guQ^On^7{gR2oYW<9xiQ0|=I{O6>xf_7ow_Is=%Oi4o>OtHpNl_c2iKdW; zdmUvF%>_$%^As9in?3Qxr0^M9_?%~)4cu7Fedz3m4-L3ygF_X)UHsruX}br?9?yqx zsJ6TkWlt7HeF)G{SMS0)7pC`-GF>cf1*GYsuc(r4m2&LY?hWeGTH4$(-5UE`e_qOo z>cB0miV)RRh7r{vu=r`(Q{}1{TY5iAbuchfp1ecQ=%CqN2}H?VY**Q-W5e(+AZ!(p zDQk5V&WwmUzIjnNYR8%g`}glQtmbHq45n#;J96YL6<5$2mMm5!-YOmq zXMv-W9dIOJp}1lAV)ZCjU{2hl2ni^J*1`)i;z+w!bt4V;G~vI)BA$oD>d7%dR5{`- z7nm7vafHmTd=w?^+b_WK_G&0-&KSO|5H0lDPWb1 at m)lvK8oE_OKnj-TMrL5$DJFBp z*Gk%ZMaLn)z*$_hX8Ow4RJyKrmY1Qeq6Rif%U*4 at -s%eP*G?SF%m(u&$Ym7Hg{@|t z;i<<4f;pq%fco&AaHibSPL9B_L5t}3Uv&P!@lv{qw{CO^cA?^yktH)9uEc(N*arfa z51f^)a&Hk at N?A4J-7P2GfOk^F8Ryv01UCJUosBF-?tm at lev>CdyOM1%P5_W} zRT!oPmqm8|?(K4?UPq6GD?#Np-c-QSjC#M6XJ|2UQQN<+nWn(Dc98a9d^0~`Up0BO zyS at cOdDJa03r|)+x4Y2Gm`fUErBSwqI()^9M-+6n&Z&>lYR at J~`GGmyt+YkcUfM`e zPniis+t}gS2vQt*U?O9^_KqRt1bX_oEBvhcK_H at ETpxa}z1<_S2e&ZwoQu#qG*i9Z zGd81sULDmzMpB2mMmVASNJmnK&K@!ndsvpxk?Dtr)E=Sj7{olAhiEc at FTVrU&%KQ@ z@$0(ARefVOyztPi*B^rSEEE zvKKZX at AodqvkJMPwdifx`p4N at u7*#jw`A0NCw3!*%8sSPjC)0^*1NXtr=PpFs_%#H zOExP2c1=xG4$&yxaudS_eP27v at EO@|X>HZeIvaK{Y9O4}>8KIbFeWt4dfRnM+h}u( zx+o at 8n6Jt06Q0MN1Czw|Nlz2bh$-T`B;0rO%B-EEI$@VJ+f_9nxCat=y4DA;6N%O; zKS?dhu$AHBpJG#+bGCd_bf<0vZbG-^NQ7PG?CBP^XStL=J1yC&2Yr^`W#21eXY446 ztR>oUw^U23(`UGrY%QA~UA})FX)Ui*bFNfoPZi})B-R at 2$njY%Jz4KR&6EdTyt6jI zKUx}eN$;ChnX#nWR;$OyrQc$T at zhrP!0nDi2lNxB$jUHMlF;lmrpj)-RS4r0S z6 at Tn2=v*mvD!o(-3uCFv{$vebiwH;W-H>XoDx<~sbc!|BoG#UJOly#mwI9UxSJ<)i z(@e%Eyk|OzB?k*f3NtI2X+Es2oA8NffGZ_3|KtRXDR^hahUc!`l&4v!dSWUlVQay~ zeKeMY0h_6Gq&T$7z3iH_)3*Vk{EjTS2=BZdzx%2!_i!m$kjWB{6+tPP{Q45JXX at _> zEY%s65E&E>>I?J(^hN$%;rkX0pU#h at 2q@_ at I;2kPBWncdsmSgNkJT5yK$<`guo at 1Z z0O9?j49K3>ur9B6``+;o-uo$ephtkSAs;ILqf}oUJFHM-ML|<4lqE5$62_J at rf%Sx zBr9|mCriwgCD#vN7Rs6NqtMiZBkl*g3K*QiD0KI?(cXByxD`8GKZ$}t at 8LP}+J at 6R%?PbfMr`i}gx47k2ne?zBHEEKto|aLHMo zSHw6XdnKmass<-blHcg2cY}9(RYYG8eryNpmwX~ddk=gfbl?ko at JU#o8;V@;bp|6R zG_Iq79)4I8Bv!V-Ljy;ccV$Iu|}5CG<(lFM&H~ zccoZ#pGE~h*LMRYk}x&OfygumjnCl9CNlhT66Gi(&dhiTUHEyh*S`_v%P&V at Gv*yq zuPrYJ#~1XX=<&#?V-#-)CLd_ zP6tK at NC!#>+y=B2FcnB0a5IoPfE<83fE-8;$Q at W6pgXWKz&el|XdS3%!0v$C0N#P; z0p$QZ--CO4;6^cc!vO#44QUHx2UazpX8^Mfz8vs90Jx7<0Jjab4Hg3o9tg$&hy#=d zDFdWDz~X?>f!hJxf!qP at fp%}R&*`w)Iq>9AbOuZhpa;CARZVGh!5_k2bNbr9w-l(55@<~{R%AJa0|FE zc>M}JU>-OJ*dOtJ78oAj96%4ShpN7yU-|g^-;ZX9Syg|`KmdUK{|Hhf`DcNLkiET) zsiECJ^X+@`OA08z?7Y|F>ac+^l~F)&7i|R=)(E3W#F8W7iAV0;*l*1wZDqF--}Enn zjePFm at 8g;BwpK8+4P}y at Z{L6Vo?Z3w`}uvs?GwJ78tmtRBEP0uYM|I at c?8fR%OcZ) z5qn;Z#`1<)y%I%iAIv*@OS0gR;8xvu2d3jN*l at ldvhblrx>L&Y^`z&XQUdcs&5;iK ztU(_?yy at zTkr&-5n>Av?h4 at nu$&YF#Q9E7oU5`tWfK4_tJeNXXT&D{X6cg)@G?s+@ z#PKC&pI2090UBPc8I`d~&R82Zq(Ke~{*9Duo+DF^70V!8rN1;%5U--^o at H*bq<5QB zxnYE)RF58Gp<2Gti;zC_Qwp7m;wxs*LO08TD_$Q>53?$%46iFj4uqd|4Uxbn#4X0Z)!i|8yK%(G9G!gS}Fk- z>Od;he5>*^5SMSjj+H-{b!&Tlfp3w9aHfsuN(&s+CZE)%aa5pbl_LLXBSc9#wnkBo zP_20dZxqM-qy2I&^||LdImjnUn_I?EUAc8idBX{eTCUw8n#=4mD!}obfvRLtbw at TL zAJNUITA!d zB6=X0=ru?r)ktddxIct{+#1R7_{;A=^ITA%clvrd+tc36o&QgN;%lQRaCkLe38NW! zdZpX!2M-!zTH at jTR`2Z}cMKwzzQZcrx^-+e&dZIjklg!V?eLg~TTceH^F|3&!_K*c zI%i>iOkFltX3Ey^6v(yk+?xfZnK~nKN=Q;LgUx2H at fsbDj#ciMDOrZ+W~K$2X>ty3 za+Lhaa>9~m{bX!v#u2nJq-BrnVZ_bF>YWI%GJ#I|-HRv_8cB(&4S}+te8(6}zbhF_ z&=2y9=fVm%jIdN27)vgNbXngNZk}0|7HwOZezwSYK3M&xqi;zlZhu~EZjunG5hh2+ zxH%-pE;z?P+CCm0U8L4%Oz{l7g1tSHEEHlRF?dJAdxs-@#}oWP3Q>$UlomKi8I>W7 z;~o(op`jv*b6D}r{RGU&Pej8nn}K>+h8MmOni?sq09JBPWSUeWrXTyowa)(UH?t)l z+3a^3iIb`GKO2Wq_UyM*P{#Y&`*phIveH^ofOa5oqmykf3!Q&pJ3G(vo;dfMXIt~XpT>~^${iJh!z58Hb5t2h4YAHVn2Q(Y-f24b^*`=!fkB(0 zPC=NY)w5&+f1RprRoB;V{oH6}o!i{aLsFQ&)dy^(NXTy6YU3A1OcgZ_P4jf0K{~hI zw6(5u_FZ|T%dUpg1k19Ua#53+JMCpL`;yHTDE$%0GcBbK^JCt){Tp at ZLL;z{uz<_X zTUe{bb)1!W92%(C+Ae&5&K4cy(RQiby=KGrgg5*2#Z29D_M^s_%LJPQ at ib1;efmZ0 zd+{=D<*_`bTEs!UUE^1v at X*_B)7{1mEZty)hfD48!c{lER`;iz)l~1V$_vf(o#U*^ zj+!fbExgI5_H?c|WE26S6kNKqMXqsLEJ$TaRV+!f1&$JirgFFO%8-jRVseShii^vp zUcsG9kLB!22?O^G#VH>J7>i`W#Vxeuf zE7thL7G1R-5#w_F(IUV0ViQ z-DQlGN&H;U%90bprY|le#7zvxU09}`@Yi71!@sd&xPry(DZ at X)Gi%ZCJ#t%)Wo3>UC z595PX#l at VylrWMD^Mr+lN!`0)mJvmA`-_R){g*3E{c^*ELd;*TG{f1{cy91mdjeg` zNAzvrw{Q?8V@#8Ae6N83P0vbI4c zkkJOVkT9|tSWJ{U3ehP5iG`Ao9WP1~3Am*=l8B{cK7#pXv~^C8m^>1~&xc4eOL)-7aCO8CGrTE1MX5q%R(Q=7YpcHWdK0EiGU~d-wBs43 zykRjpLMCi8xXXy4lx2x&9jmS#)?8 at 6GQm`^vE^l}>@LIj63f^~A#A@)m<~3aCw_JG7RS`PaWxc;O$*4z%>}**sEO7yY%)dEYn^QvPSPU0Oy)% z at nkV>291t#3>B>0P+LiV?qWMJ*HR60M!cK{qQ#^wSk+&bYbX5y!`rWXLZSUxw;<{s zu92Em>uyZT_|Sh`iL_#GKf=hH at F;@cgYz?ett=}xqxw*&JXUY6z-0iY<#g^?PZ z at f)8R*C`5*H=uN>NT_0bu!0G!61Ql9R^q(S-=FR`9!p&>bciQq^n zAxWuW&NJlD6KWrtNm1^DWpxB3uTpr+B=E?lBXJ0Ku%G4fFswIViBHaXtWk^&reY!A zTNr*>(i|(IJ<)@DfJ}r%2{d5}QUQujxZ|U_1KgQ!N*ISIWCfm84dgomkLq-~S%E|| zp8fQc7_3Lt9C9!8L{gR>s?6K5D-pEsBC$N%0ybbia5`P+{v<#i%)VsMSr6`n at nSf- zB~4PY^E+7z|1X;$P zus;j75=-o($;+8bfS+5-)A)!=?tI~TwG?subl`Y>6myRE#*gQ>Fh?)^eR1G4{qLXG z9I}3uSE?z!L6%QE!QL8&cv)iYMUV3Rt=ta2wF=t?=)YL#DF3p!Wle4Eojm{9*{!R* zB!CjOXA50vTQUy>C8`jTg+>bH7r@~W7!0g at Up>sRU23YGZi#FrnOWH{W$$o5^e6qC zCp$z#2E at A&-+b at sI@`I8-{1E);67rWdBWfh%qc^@DCFz%kBNeqs7<Mn1aYMd~=t|2#0l9XA`@|a>okS;5YZ!+RG z(T1c at Fu>hu)N&rR?jvi5w-TK$Lkw8u<``V;-%=904wzDmtFK2Lz_D!YBpX}guV*P( zcQ~AjNxWezzngKUW_=vGng-cJt2|cg?+*)IjV>mH*6tO``{*q-RujjK{|EzAhM94X zG!_(95{cAYrwvm3?v08oT%kLSSvh{pYaYd~5MSg( z0MpGtV>$8pb_RVIjP!-LD6fOF)+;-Yoz%i|mA~Hgw#(d^Oh;IwpAh|AW>2o$EkJE4>5>Y(^d~{>9wy=YiF3nM0P%!@9m50 zLHq12n at fm0`oz~9il7fMGdsV+_pEF10^~x4cKPBNC$#e8b=qNkD(Cxeyb7jb9;e1X zww|Z|A7K2S9!sSv*3L^}D7 at I(Oh`^fp)4$=3V4*R*8!d=n at Gk|LNd5A1soybfohT_ z;xP$4O(~YYl=qZ}WcZ)K?~5~bbvdJmsk1JQr}%DQ{5I$s=s@#Edf#UC~0551Q*lnynXGG`79LZuaOod!NxZT;*1hqa7_~nJnGcFpwu7! zh9)n#O#Vrf!AC4{PVFwpNh-q?F3|YNwn<5ppvrG32-V3PqHS|8?{eaO%qHB at SBN>p zkCr~WJ)hf!iI>zfLwH_34-zQZYu>Qz zBHy)h3OsYvKx_7qqgE{YGG~7Mts&4VwR3~w&-D)WA4#=;yEgdCmt*{Qc?%?Lp=_rb z2%xAXrGkJ$Vl=_4Qr)PRHxx^)qtuV*A(;FL^jt-AnmBmAkNt3`?c_2`$k7KvZ>N_> z?rwAT_wTcDd4Ob(tI!}ydORa7Apm9_o+OFajA(Ksvj>$SoYPK?{Vh?*xrUM2DV^7x zXi_>gk(x*ibA+h7=b?F!U?hM01xFEt zQ;u>YWTj2%a_B8Y!xOD4IgY6E%)*4`qON=UBl9T-FE0w~FBN&xY|L%ME;Az=dCsib zMO{F!K-`ofyz0f8D-$Br>c(R&y6Vgb*?AYNAqF;VO=1X$jBykZ?J>Hr*rN-_4J%SQ>#R3WNZm}=HX6uXq*cG` zw3g>ui=&xi=VmT1544B`*%A8f%CRx}JQ*&(JkZg8Pd(uqpOj{9EXX;(M^`5|=NGGG z@&4piStf{Tq at To%dT9H=O%_(o5^haD^^If2np7K}o`*}Am13?#R%LlW!}U|7Ud6i)L|CaP}Zg-Hurv2+j3?5Z+aMkNA^Ogq3Y6wPItC*(_9 zq$74EE;4GGqkDQXoh{O+lGqn*7bYQeDFszqj4i zx^$guFS>i<>ap47=Jtrj+AOnw!3h^)$yT;vkj!u%z+mpQybInn&Fl~t+ae~d<;EGd z!mOdVLP!}=3=3>^ov;6DoGW0n$?ncF^}s7nb~-Nk!R;?S$b-p!?ZzuNbH$JG8Kk!R z7O1}g={@dGz*v$cH+OUItIYAIhb%999V{vo7>bIDNkaiqq$pw@WjV2~(_QWbfaK z;&2;~t8xDb>7_ybqw({f;nKgr`eT)4?Kl6tG#>-IMoL!5nvW-;wS@`kxTvIxkd`Wu zqTmd0VmA>+M^wg4uKHb>A6}vaf78ofby;&$w2wlGem9%V&TNl2b;r-|2edx!2S$}= zR(O!vb7OL0Y^o at zI$RgVB^=h>{1n{CoXd2~O?)=gI3CB{0$d^ZUWd^Y$N$73%$R5Y zvKfn(sPeluBQ2jfBRBDC!`yu6_G8y(e at aKWW5}Mdr{!?c)93i at FzA)9=O`8%iHaQN z$KY|wX}wFxRJ_ at l@9oc=Ul|E2vnKm7@;LGn96+d*VJYpF&BBA@r`pCYjT)O)g}wyCc{-b#X4={KMbsmZj;Rjve`B5ho^npnE6WQe_v&>Iu!vVCD zN(5^Ppurow)ymqQ$puN9`Cbe{YYNdC7MCBPO}ErC9~|lL5s$~@qe|P>T$s5Rm#8V! zC4IB3l}PITpjz|ByAm*6v!L>-srC~uu35KjT)YpHz2zq at 9n2q}5 zH5udI%a&bTEN$rjoL2wZZc(ZMseyBX=?9*M>xO{@lo3ESlcf-<3qb->4Wbw$A`xH_ zQ9 at Gdr~$TavQgR%EO}j6+qS9ITKgigg4dSSW)&?SfKjh!X?^$EclX)UUhCVRX{h0b zjq8;Gk#}9m{cj%koEGheXu{E!j731HJZw82bA(DlB1&4yL ztR514c&qbq#X{LijI`X$j~r!(h_He<=#RxzcuNgv;U~*SOrQj-Rlw9zYWxL}Sr>B-QlkM$|=4>d_9Z zL*Kdx{DfcnDdX)c-`b+?C at 3ytv`-r{ZQ|qOsph$l9GN>g%}SKaq()PAd5_hq20ZzASpYn at 22 z+CO5}J0vH1cypmzG>G_k+M83ONM<0JGnu-PBEOG}cg8Y;O5v6}P-9n|gE?ZK+_e@> ze#XSZWlYL;mV9a#Jyfhz74&dTs*|VMI8Vw@@Q88u^MbQSIHD z4Te>c!cIGrZa8g`nMLnIiw3Oi%Pl^OqA`*(1c-aWrNz=SF$_TdnFtIoc^CfI# z?bMRa^Gxt$(Y{Jb&J19+sR69-adv80sB-(g$w%@$i_==-0%dAV2PLnrYJQa#-0Gpn zUcL)FR#2__F>xL28 zvqW))>XH+bGwPiX-cI|ZvnB9D3JX!Xj9Pw?*yfWq`dH9wYTgU^XfmRcl&aR_LZ_=9 z*$tQbo;U8Slj at Q|iP&Vm5jXv^0|b|