From b5b7697b33b5ce9bbc7b778774d6a67961ef4e93 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 31 Aug 2020 20:01:38 +0300 Subject: [PATCH] waf: add Waf build system --- cl_dll/wscript | 65 +++++ dlls/wscript | 61 ++++ scripts/waifulib/library_naming.py | 133 +++++++++ scripts/waifulib/library_naming.pyc | Bin 0 -> 3335 bytes scripts/waifulib/strip_on_install.py | 49 ++++ scripts/waifulib/xcompile.py | 418 +++++++++++++++++++++++++++ scripts/waifulib/xcompile.pyc | Bin 0 -> 15396 bytes waf | 175 +++++++++++ wscript | 268 +++++++++++++++++ 9 files changed, 1169 insertions(+) create mode 100644 cl_dll/wscript create mode 100644 dlls/wscript create mode 100644 scripts/waifulib/library_naming.py create mode 100644 scripts/waifulib/library_naming.pyc create mode 100644 scripts/waifulib/strip_on_install.py create mode 100644 scripts/waifulib/xcompile.py create mode 100644 scripts/waifulib/xcompile.pyc create mode 100755 waf create mode 100644 wscript diff --git a/cl_dll/wscript b/cl_dll/wscript new file mode 100644 index 0000000..2fbf3ca --- /dev/null +++ b/cl_dll/wscript @@ -0,0 +1,65 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, mittorn, 2018 + +from waflib import Utils +import os + +def options(opt): + # stub + return + +def configure(conf): + if conf.env.DEST_OS != 'win32': + conf.check_cc(lib='dl') + else: + conf.check_cxx(lib='user32') + +def build(bld): + source = bld.path.ant_glob([ + 'render/*.cpp', + '*.cpp' + ]) + source += bld.path.parent.ant_glob([ + 'game_shared/*.cpp', + 'pm_shared/*.cpp' + ]) + + includes = [ + '.', + 'hl/', + '../dlls', + '../common', + '../engine', + '../pm_shared', + '../game_shared', + '../public', + '../utils/vgui/include' + ] + + defines = ['CLIENT_DLL'] + + libs = [] + if bld.env.DEST_OS != 'win32': + libs += ['DL'] + else: + libs += ["USER32"] + + if bld.env.DEST_OS not in ['android', 'dos']: + install_path = os.path.join(bld.env.GAMEDIR, bld.env.CLIENT_DIR) + else: + install_path = bld.env.PREFIX + + bld.shlib( + source = source, + target = 'client' + bld.env.POSTFIX, + name = 'client', + features = 'c cxx', + includes = includes, + defines = defines, + use = libs, + install_path = install_path, + subsystem = bld.env.MSVC_SUBSYSTEM, + idx = bld.get_taskgen_count() + ) + diff --git a/dlls/wscript b/dlls/wscript new file mode 100644 index 0000000..b8f6e26 --- /dev/null +++ b/dlls/wscript @@ -0,0 +1,61 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, mittorn, 2018 + +from waflib import Utils +import os + +def options(opt): + # stub + return + +def configure(conf): + if conf.env.COMPILER_CC == 'msvc': + # hl.def removes MSVC function name decoration from GiveFnptrsToDll on Windows. + # Without this, the lookup for this function fails. + hlDefNode = conf.path.find_resource("./hl.def") + + if hlDefNode is not None: + conf.env.append_unique('LINKFLAGS', '/def:%s' % hlDefNode.abspath()) + else: + conf.fatal("Could not find hl.def") + +def build(bld): + source = bld.path.parent.ant_glob([ + 'pm_shared/*.cpp', + 'game_shared/*.cpp' + ]) + source += bld.path.ant_glob([ + '*.cpp' + ]) + + includes = [ + '.', + '../common', + '../engine', + '../pm_shared', + '../game_shared', + '../public' + ] + + defines = [] + libs = [] + + if bld.env.DEST_OS not in ['android', 'dos']: + install_path = os.path.join(bld.env.GAMEDIR, bld.env.SERVER_DIR) + else: + install_path = bld.env.PREFIX + + bld.shlib( + source = source, + target = bld.env.SERVER_NAME + bld.env.POSTFIX, + name = 'server', + features = 'c cxx', + includes = includes, + defines = defines, + use = libs, + install_path = install_path, + subsystem = bld.env.MSVC_SUBSYSTEM, + idx = bld.get_taskgen_count() + ) + diff --git a/scripts/waifulib/library_naming.py b/scripts/waifulib/library_naming.py new file mode 100644 index 0000000..827ef76 --- /dev/null +++ b/scripts/waifulib/library_naming.py @@ -0,0 +1,133 @@ +#! /usr/bin/env python +# Copyright 2019 (C) a1batross + +from waflib import Configure, Errors, Utils + +# TODO: make generic +CHECK_SYMBOL_EXISTS_FRAGMENT = ''' +#include "build.h" + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef %s + return ((int*)(&%s))[argc]; +#else + (void)argc; + return 0; +#endif +} +''' + +DEFINES = [ +'XASH_64BIT', +'XASH_AMD64', +'XASH_ANDROID', +'XASH_APPLE', +'XASH_ARM', +'XASH_ARM64', +'XASH_ARM_HARDFP', +'XASH_ARM_SOFTFP', +'XASH_ARMv4', +'XASH_ARMv5', +'XASH_ARMv6', +'XASH_ARMv7', +'XASH_BIG_ENDIAN', +'XASH_BSD', +'XASH_E2K', +'XASH_EMSCRIPTEN', +'XASH_FREEBSD', +'XASH_IOS', +'XASH_JS', +'XASH_LINUX', +'XASH_LITTLE_ENDIAN', +'XASH_MINGW', +'XASH_MIPS', +'XASH_MOBILE_PLATFORM', +'XASH_MSVC', +'XASH_NETBSD', +'XASH_OPENBSD', +'XASH_WIN32', +'XASH_WIN64', +'XASH_X86', +'XASH_DOS4GW', +'XASH_POSIX' +] + +def configure(conf): + conf.env.stash() + conf.start_msg('Determining library postfix') + tests = map(lambda x: { + 'fragment': CHECK_SYMBOL_EXISTS_FRAGMENT % (x, x), + 'includes': [conf.path.find_node('public/').abspath()], + 'define_name': x }, DEFINES ) + + conf.multicheck(*tests, msg = '', mandatory = False, quiet = True) + + # engine/common/build.c + if conf.env.XASH_ANDROID: + buildos = "android" + elif conf.env.XASH_WIN32 or conf.env.XASH_LINUX or conf.env.XASH_APPLE: + buildos = "" # no prefix for default OS + elif conf.env.XASH_FREEBSD: + buildos = "freebsd" + elif conf.env.XASH_NETBSD: + buildos = "netbsd" + elif conf.env.XASH_OPENBSD: + buildos = "openbsd" + elif conf.env.XASH_EMSCRIPTEN: + buildos = "emscripten" + elif conf.env.XASH_DOS4GW: + buildos = "dos4gw" # unused, just in case + else: + conf.fatal("Place your operating system name in build.h and library_naming.py!\n" + "If this is a mistake, try to fix conditions above and report a bug") + + if conf.env.XASH_AMD64: + buildarch = "amd64" + elif conf.env.XASH_X86: + buildarch = "" + elif conf.env.XASH_ARM64: + buildarch = "arm64" + elif conf.env.XASH_ARM: + buildarch = "armv" + if conf.env.XASH_ARMv7: + buildarch += "7" + elif conf.env.XASH_ARMv6: + buildarch += "6" + elif conf.env.XASH_ARMv5: + buildarch += "5" + elif conf.env.XASH_ARMv4: + buildarch += "4" + else: + raise conf.fatal('Unknown ARM') + + if conf.env.XASH_ARM_HARDFP: + buildarch += "hf" + else: + buildarch += "l" + elif conf.env.XASH_MIPS and conf.env.XASH_BIG_ENDIAN: + buildarch = "mips" + elif conf.env.XASH_MIPS and conf.env.XASH_LITTLE_ENDIAN: + buildarch = "mipsel" + elif conf.env.XASH_JS: + buildarch = "javascript" + elif conf.env.XASH_E2K: + buildarch = "e2k" + else: + raise conf.fatal("Place your architecture name in build.h and library_naming.py!\n" + "If this is a mistake, try to fix conditions above and report a bug") + + conf.env.revert() + + if buildos == 'android': + # force disable for Android, as Android ports aren't distributed in normal way and doesn't follow library naming + conf.env.POSTFIX = '' + elif buildos != '' and buildarch != '': + conf.env.POSTFIX = '_%s_%s' % (buildos,buildarch) + elif buildarch != '': + conf.env.POSTFIX = '_%s' % buildarch + else: + conf.env.POSTFIX = '' + + conf.end_msg(conf.env.POSTFIX) diff --git a/scripts/waifulib/library_naming.pyc b/scripts/waifulib/library_naming.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78575564bc94f8dc66e10618108a00381887b30a GIT binary patch literal 3335 zcmcf@U2_vhvUisN78V9<3ej4};@H4>A0zU_Q7Wf?S^T6kUUjTj)_$A=40>2D=0r(Z*SAkyx?gC!~ zejPe4?BeD(;B$aoJmMwS1DHEymD~LYUVNa>Q zA(p!l#;snT3-|h7KkV^4-Rrqr7;86TVO$`D$xiEax7B6x_H9}WmUExwT(>YtLcUDv z2e?N&=A!K`DP-VjeHpt2Qog-hxV5B~m;XSUe1d|ar^KXk>%my#4dTZueki}KwM#?s|Vu;F|4M!7on zaMLfBk7#(cK%dBbct02)z3o*W@91+GYujryw#(V+BX25R_0dNrJ4|>hUOmurnNFp) z?x9Y7yV%&QVdyA{QnBE}4SgzGRm%-BX><#`RSz_Qvm$LKL+IX*0 zEm%c^MymB%;O(?5Jn9%eq(kYfrVxG&@C1JryacdlVN)Hxw7}91d_g&%j5r5!%fg03#9JBhJjkCcY(YpIZa5E8S4H?q-Y&Aip(?b19>kF)o7qhhfa7j6%k^1o8*Nm`fQmhJhZOClCIdUJb_nRgga# zxp^b^X>8N^7gD9qvfVC&oU?~UE)b3#@`!;ba4!?MLOAwM5_mh?;VQ`YZS1H-yqOWN zfo$5?V~IF2aN($duF1CNm})0r-v;?t8-tsg(p-f2k3g(ruy=mJp zKUR2+NJE7mZS3o~oM7X0nAo1wMhUTK?jDCvP`HLAQB{`_mV_2E3ga;DxV>;sGI{78 zBucl#XQqg9_MnR2q}j3*BH+`(#cU=1bFqP3tvb0h6y zZOJ;3h_#|NbkN`Hg{>7+-NR9$Om*Wx2xHNVStJTn%6b98##VXbgJ$q?WxclDEbn+h zBWP~=#YdHLwSiTO+cDiWZ3mTkGfucL&5rFU;uOdoP2gFIl1dAwTmj#p-bJv|O(L<9 zL`)`wl{?Rv>aNt8WN{L*yDO?C!vn2Wp0cpr$8fC-Lq=9&1n(Ri8b2QPShUC4I}d47 z8l8@H)>@!0gEL=sFn+@U8?l%(oybEoRX^>ALZ{}&T;g~%cv}jwr??rxvCxE4+>!$k z6Hbj!M5$pIQ#y?&YPIuJeSv7b$6CTYO#0GA1<5qsvpQ5-L@q_v4P$pWw_UU)OM$UJ zi#f0D>Tal9{4qBQm1g_mbys7a=)}b|aWQ^8)L{~%z+N&CW+N#M5{bhfckdYISj4f1 zQxY&4Ax4o$Y+!EVzJY57-ZOAj(X@CR@5jm0*u@d5ZCrQThS@XPQFx$?zl4aMiNq5& zU}-E&u*Kbd^(WMu2m_O?Zm2~IKQhGc7Xp(7%_W6DMOlFF!VP?lJp7!0jSlNT|m zo0KXf9I*p)<)!kbS1qR#JL>mz*y@VbzERy|_+ezC(vW@OQ<(j$1m+1)QutKCKGl$a zg#gWYe-VMvZ!^t$KHZ7$5;#eK(#$_iAWwkCwNJO=(^&T}5ulGD{{n&Y1kNHbS0cqg z$TXL6AU8I>9peFho{?9kp8eNIm@L&oX=V5(6|wu!0S2erGPP;S)u{X?RZ0g?-J7r5 zw{f9NQCfNYpK+$_YtFPaW!=Pw-v9U5dBYu3kE29>^08-Zq}X}uB5Kn!l(lD^yghBt zAng*;W)ZIzD9k2kPgxuLiH}S0sYm&g^8PIXTLc0GX)q8;vEL*ZblDH1g!g;m9ZCUJ QLa=b=xZ_yA=6}lhAFb=t&;S4c literal 0 HcmV?d00001 diff --git a/scripts/waifulib/strip_on_install.py b/scripts/waifulib/strip_on_install.py new file mode 100644 index 0000000..6522065 --- /dev/null +++ b/scripts/waifulib/strip_on_install.py @@ -0,0 +1,49 @@ +#! /usr/bin/env python +# Modified: Alibek Omarov +# Originally taken from Thomas Nagy's blogpost + +""" +Strip executables upon installation +""" + +import shutil, os +from waflib import Build, Utils, Context, Errors, Logs + +def options(opt): + grp = opt.option_groups['install/uninstall options'] + grp.add_option('--no-strip', dest='no_strip', action='store_true', default=False, + help='don\'t strip binaries. You must pass this flag to install command(default: False)') + +def configure(conf): + if conf.env.DEST_BINFMT in ['elf', 'mac-o']: + conf.find_program('strip', var='STRIP') + if not conf.env.STRIPFLAGS: + conf.env.STRIPFLAGS = os.environ['STRIPFLAGS'] if 'STRIPFLAGS' in os.environ else [] + +def copy_fun(self, src, tgt): + inst_copy_fun(self, src, tgt) + + if self.generator.bld.options.no_strip: + return + + if self.env.DEST_BINFMT not in ['elf', 'mac-o']: # don't strip unknown formats or PE + return + + if getattr(self.generator, 'link_task', None) and self.generator.link_task.outputs[0] in self.inputs: + cmd = self.env.STRIP + self.env.STRIPFLAGS + [tgt] + try: + self.generator.bld.cmd_and_log(cmd, output=Context.BOTH, quiet=Context.BOTH) + if not self.generator.bld.progress_bar: + c1 = Logs.colors.NORMAL + c2 = Logs.colors.CYAN + + f1 = os.path.getsize(src) + f2 = os.path.getsize(tgt) + + Logs.info('%s+ strip %s%s%s (%d bytes change)', c1, c2, tgt, c1, f2 - f1) + except Errors.WafError as e: + print(e.stdout, e.stderr) + +inst_copy_fun = Build.inst.copy_fun +Build.inst.copy_fun = copy_fun + diff --git a/scripts/waifulib/xcompile.py b/scripts/waifulib/xcompile.py new file mode 100644 index 0000000..2872306 --- /dev/null +++ b/scripts/waifulib/xcompile.py @@ -0,0 +1,418 @@ +# encoding: utf-8 +# xcompile.py -- crosscompiling utils +# Copyright (C) 2018 a1batross +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +try: from fwgslib import get_flags_by_compiler +except: from waflib.extras.fwgslib import get_flags_by_compiler +from waflib import Logs, TaskGen +from waflib.Tools import c_config +from collections import OrderedDict +import os +import sys + +ANDROID_NDK_ENVVARS = ['ANDROID_NDK_HOME', 'ANDROID_NDK'] +ANDROID_NDK_SUPPORTED = [10, 19, 20] +ANDROID_NDK_HARDFP_MAX = 11 # latest version that supports hardfp +ANDROID_NDK_GCC_MAX = 17 # latest NDK that ships with GCC +ANDROID_NDK_UNIFIED_SYSROOT_MIN = 15 +ANDROID_NDK_SYSROOT_FLAG_MAX = 19 # latest NDK that need --sysroot flag +ANDROID_NDK_API_MIN = { 10: 3, 19: 16, 20: 16 } # minimal API level ndk revision supports +ANDROID_64BIT_API_MIN = 21 # minimal API level that supports 64-bit targets + +# This class does support ONLY r10e and r19c/r20 NDK +class Android: + ctx = None # waf context + arch = None + toolchain = None + api = None + ndk_home = None + ndk_rev = 0 + is_hardfloat = False + clang = False + + def __init__(self, ctx, arch, toolchain, api): + self.ctx = ctx + self.api = api + self.toolchain = toolchain + self.arch = arch + + for i in ANDROID_NDK_ENVVARS: + self.ndk_home = os.getenv(i) + if self.ndk_home != None: + break + else: + ctx.fatal('Set %s environment variable pointing to the root of Android NDK!' % + ' or '.join(ANDROID_NDK_ENVVARS)) + + # TODO: this were added at some point of NDK development + # but I don't know at which version + # r10e don't have it + source_prop = os.path.join(self.ndk_home, 'source.properties') + if os.path.exists(source_prop): + with open(source_prop) as ndk_props_file: + for line in ndk_props_file.readlines(): + tokens = line.split('=') + trimed_tokens = [token.strip() for token in tokens] + + if 'Pkg.Revision' in trimed_tokens: + self.ndk_rev = int(trimed_tokens[1].split('.')[0]) + + if self.ndk_rev not in ANDROID_NDK_SUPPORTED: + ctx.fatal('Unknown NDK revision: %d' % (self.ndk_rev)) + else: + self.ndk_rev = ANDROID_NDK_SUPPORTED[0] + + if 'clang' in self.toolchain or self.ndk_rev > ANDROID_NDK_GCC_MAX: + self.clang = True + + if self.arch == 'armeabi-v7a-hard': + if self.ndk_rev <= ANDROID_NDK_HARDFP_MAX: + self.arch = 'armeabi-v7a' # Only armeabi-v7a have hard float ABI + self.is_hardfloat = True + else: + ctx.fatal('NDK does not support hardfloat ABI') + + if self.api < ANDROID_NDK_API_MIN[self.ndk_rev]: + self.api = ANDROID_NDK_API_MIN[self.ndk_rev] + Logs.warn('API level automatically was set to %d due to NDK support' % self.api) + + if self.is_arm64() or self.is_amd64() and self.api < ANDROID_64BIT_API_MIN: + self.api = ANDROID_64BIT_API_MIN + Logs.warn('API level for 64-bit target automatically was set to %d' % self.api) + + def is_host(self): + ''' + Checks if we using host compiler(implies clang) + ''' + return self.toolchain == 'host' + + def is_arm(self): + ''' + Checks if selected architecture is **32-bit** ARM + ''' + return self.arch.startswith('armeabi') + + def is_x86(self): + ''' + Checks if selected architecture is **32-bit** or **64-bit** x86 + ''' + return self.arch == 'x86' + + def is_amd64(self): + ''' + Checks if selected architecture is **64-bit** x86 + ''' + return self.arch == 'x86_64' + + def is_arm64(self): + ''' + Checks if selected architecture is AArch64 + ''' + return self.arch == 'aarch64' + + def is_clang(self): + ''' + Checks if selected toolchain is Clang (TODO) + ''' + return self.clang + + def is_hardfp(self): + return self.is_hardfloat + + def ndk_triplet(self, llvm_toolchain = False, toolchain_folder = False): + if self.is_x86(): + if toolchain_folder: + return 'x86' + else: + return 'i686-linux-android' + elif self.is_arm(): + if llvm_toolchain: + return 'armv7a-linux-androideabi' + else: + return 'arm-linux-androideabi' + elif self.is_amd64() and toolchain_folder: + return 'x86_64' + else: + return self.arch + '-linux-android' + + def apk_arch(self): + if self.is_arm64(): + return 'arm64-v8a' + return self.arch + + def gen_host_toolchain(self): + # With host toolchain we don't care about OS + # so just download NDK for Linux x86_64 + if self.is_host(): + return 'linux-x86_64' + + if sys.platform.startswith('win32') or sys.platform.startswith('cygwin'): + osname = 'windows' + elif sys.platform.startswith('darwin'): + osname = 'darwin' + elif sys.platform.startswith('linux'): + osname = 'linux' + else: + self.ctx.fatal('Unsupported by NDK host platform') + + if sys.maxsize > 2**32: + arch = 'x86_64' + else: arch = 'x86' + + return '%s-%s' % (osname, arch) + + def gen_gcc_toolchain_path(self): + path = 'toolchains' + toolchain_host = self.gen_host_toolchain() + + if self.is_clang(): + toolchain_folder = 'llvm' + else: + if self.is_host(): + toolchain = '4.9' + else: + toolchain = self.toolchain + + toolchain_folder = '%s-%s' % (self.ndk_triplet(toolchain_folder = True), toolchain) + + return os.path.abspath(os.path.join(self.ndk_home, path, toolchain_folder, 'prebuilt', toolchain_host)) + + def gen_toolchain_path(self): + if self.is_clang(): + triplet = '%s%d-' % (self.ndk_triplet(llvm_toolchain = True), self.api) + else: + triplet = self.ndk_triplet() + '-' + return os.path.join(self.gen_gcc_toolchain_path(), 'bin', triplet) + + def gen_binutils_path(self): + return os.path.join(self.gen_gcc_toolchain_path(), self.ndk_triplet(), 'bin') + + def cc(self): + if self.is_host(): + return 'clang --target=%s%d' % (self.ndk_triplet(), self.api) + return self.gen_toolchain_path() + ('clang' if self.is_clang() else 'gcc') + + def cxx(self): + if self.is_host(): + return 'clang++ --target=%s%d' % (self.ndk_triplet(), self.api) + return self.gen_toolchain_path() + ('clang++' if self.is_clang() else 'g++') + + def strip(self): + if self.is_host(): + return 'llvm-strip' + return os.path.join(self.gen_binutils_path(), 'strip') + + def system_stl(self): + # TODO: proper STL support + return os.path.abspath(os.path.join(self.ndk_home, 'sources', 'cxx-stl', 'system', 'include')) + + def libsysroot(self): + arch = self.arch + if self.is_arm(): + arch = 'arm' + elif self.is_arm64(): + arch = 'arm64' + path = 'platforms/android-%s/arch-%s' % (self.api, arch) + + return os.path.abspath(os.path.join(self.ndk_home, path)) + + def sysroot(self): + if self.ndk_rev >= ANDROID_NDK_UNIFIED_SYSROOT_MIN: + return os.path.abspath(os.path.join(self.ndk_home, 'sysroot')) + else: + return self.libsysroot() + + def cflags(self, cxx = False): + cflags = [] + + if self.ndk_rev <= ANDROID_NDK_SYSROOT_FLAG_MAX: + cflags += ['--sysroot=%s' % (self.sysroot())] + else: + if self.is_host(): + cflags += [ + '--sysroot=%s/sysroot' % (self.gen_gcc_toolchain_path()), + '-isystem', '%s/usr/include/' % (self.sysroot()) + ] + + cflags += ['-I%s' % (self.system_stl()), '-DANDROID', '-D__ANDROID__'] + + if cxx and not self.is_clang() and self.toolchain not in ['4.8','4.9']: + cflags += ['-fno-sized-deallocation'] + + def fixup_host_clang_with_old_ndk(): + cflags = [] + # Clang builtin redefine w/ different calling convention bug + # NOTE: I did not added complex.h functions here, despite + # that NDK devs forgot to put __NDK_FPABI_MATH__ for complex + # math functions + # I personally don't need complex numbers support, but if you want it + # just run sed to patch header + for f in ['strtod', 'strtof', 'strtold']: + cflags += ['-fno-builtin-%s' % f] + return cflags + + + if self.is_arm(): + if self.arch == 'armeabi-v7a': + # ARMv7 support + cflags += ['-mthumb', '-mfpu=neon', '-mcpu=cortex-a9', '-DHAVE_EFFICIENT_UNALIGNED_ACCESS', '-DVECTORIZE_SINCOS'] + + if not self.is_clang() and not self.is_host(): + cflags += [ '-mvectorize-with-neon-quad' ] + + if self.is_host() and self.ndk_rev <= ANDROID_NDK_HARDFP_MAX: + cflags += fixup_host_clang_with_old_ndk() + + if self.is_hardfp(): + cflags += ['-D_NDK_MATH_NO_SOFTFP=1', '-mfloat-abi=hard', '-DLOAD_HARDFP', '-DSOFTFP_LINK'] + else: + cflags += ['-mfloat-abi=softfp'] + else: + if self.is_host() and self.ndk_rev <= ANDROID_NDK_HARDFP_MAX: + cflags += fixup_host_clang_with_old_ndk() + + # ARMv5 support + cflags += ['-march=armv5te', '-mtune=xscale', '-msoft-float'] + elif self.is_x86(): + cflags += ['-mtune=atom', '-march=atom', '-mssse3', '-mfpmath=sse', '-DVECTORIZE_SINCOS', '-DHAVE_EFFICIENT_UNALIGNED_ACCESS'] + return cflags + + # they go before object list + def linkflags(self): + linkflags = [] + if self.is_host(): + linkflags += ['--gcc-toolchain=%s' % self.gen_gcc_toolchain_path()] + + if self.ndk_rev <= ANDROID_NDK_SYSROOT_FLAG_MAX: + linkflags += ['--sysroot=%s' % (self.sysroot())] + elif self.is_host(): + linkflags += ['--sysroot=%s/sysroot' % (self.gen_gcc_toolchain_path())] + + if self.is_clang() or self.is_host(): + linkflags += ['-fuse-ld=lld'] + + linkflags += ['-Wl,--hash-style=both','-Wl,--no-undefined'] + return linkflags + + def ldflags(self): + ldflags = ['-lgcc', '-no-canonical-prefixes'] + if self.is_clang() or self.is_host(): + ldflags += ['-stdlib=libstdc++'] + if self.is_arm(): + if self.arch == 'armeabi-v7a': + ldflags += ['-march=armv7-a', '-mthumb'] + + if not self.is_clang() and not self.is_host(): # lld only + ldflags += ['-Wl,--fix-cortex-a8'] + + if self.is_hardfp(): + ldflags += ['-Wl,--no-warn-mismatch', '-lm_hard'] + else: + ldflags += ['-march=armv5te'] + return ldflags + +def options(opt): + android = opt.add_option_group('Android options') + android.add_option('--android', action='store', dest='ANDROID_OPTS', default=None, + help='enable building for android, format: --android=,,, example: --android=armeabi-v7a-hard,4.9,9') + +def configure(conf): + if conf.options.ANDROID_OPTS: + values = conf.options.ANDROID_OPTS.split(',') + if len(values) != 3: + conf.fatal('Invalid --android paramater value!') + + valid_archs = ['x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', 'aarch64'] + + if values[0] not in valid_archs: + conf.fatal('Unknown arch: %s. Supported: %r' % (values[0], ', '.join(valid_archs))) + + conf.android = android = Android(conf, values[0], values[1], int(values[2])) + conf.environ['CC'] = android.cc() + conf.environ['CXX'] = android.cxx() + conf.environ['STRIP'] = android.strip() + conf.env.CFLAGS += android.cflags() + conf.env.CXXFLAGS += android.cflags(True) + conf.env.LINKFLAGS += android.linkflags() + conf.env.LDFLAGS += android.ldflags() + + conf.env.HAVE_M = True + if android.is_hardfp(): + conf.env.LIB_M = ['m_hard'] + else: conf.env.LIB_M = ['m'] + + conf.env.PREFIX = '/lib/%s' % android.apk_arch() + + conf.msg('Selected Android NDK', '%s, version: %d' % (android.ndk_home, android.ndk_rev)) + # no need to print C/C++ compiler, as it would be printed by compiler_c/cxx + conf.msg('... C/C++ flags', ' '.join(android.cflags()).replace(android.ndk_home, '$NDK/')) + conf.msg('... link flags', ' '.join(android.linkflags()).replace(android.ndk_home, '$NDK/')) + conf.msg('... ld flags', ' '.join(android.ldflags()).replace(android.ndk_home, '$NDK/')) + + # conf.env.ANDROID_OPTS = android + conf.env.DEST_OS2 = 'android' + + MACRO_TO_DESTOS = OrderedDict({ '__ANDROID__' : 'android' }) + for k in c_config.MACRO_TO_DESTOS: + MACRO_TO_DESTOS[k] = c_config.MACRO_TO_DESTOS[k] # ordering is important + c_config.MACRO_TO_DESTOS = MACRO_TO_DESTOS + +def post_compiler_cxx_configure(conf): + conf.msg('Target OS', conf.env.DEST_OS) + conf.msg('Target CPU', conf.env.DEST_CPU) + conf.msg('Target binfmt', conf.env.DEST_BINFMT) + + if conf.options.ANDROID_OPTS: + if conf.android.ndk_rev == 19: + conf.env.CXXFLAGS_cxxshlib += ['-static-libstdc++'] + conf.env.LDFLAGS_cxxshlib += ['-static-libstdc++'] + return + +def post_compiler_c_configure(conf): + conf.msg('Target OS', conf.env.DEST_OS) + conf.msg('Target CPU', conf.env.DEST_CPU) + conf.msg('Target binfmt', conf.env.DEST_BINFMT) + + return + +from waflib.Tools import compiler_cxx, compiler_c + +compiler_cxx_configure = getattr(compiler_cxx, 'configure') +compiler_c_configure = getattr(compiler_c, 'configure') + +def patch_compiler_cxx_configure(conf): + compiler_cxx_configure(conf) + post_compiler_cxx_configure(conf) + +def patch_compiler_c_configure(conf): + compiler_c_configure(conf) + post_compiler_c_configure(conf) + +setattr(compiler_cxx, 'configure', patch_compiler_cxx_configure) +setattr(compiler_c, 'configure', patch_compiler_c_configure) + +@TaskGen.feature('cshlib', 'cxxshlib', 'dshlib', 'fcshlib', 'vnum') +@TaskGen.after_method('apply_link', 'propagate_uselib_vars') +@TaskGen.before_method('apply_vnum') +def apply_android_soname(self): + """ + Enforce SONAME on Android + """ + if self.env.DEST_OS != 'android': + return + + setattr(self, 'vnum', None) # remove vnum, so SONAME would not be overwritten + link = self.link_task + node = link.outputs[0] + libname = node.name + v = self.env.SONAME_ST % libname + self.env.append_value('LINKFLAGS', v.split()) diff --git a/scripts/waifulib/xcompile.pyc b/scripts/waifulib/xcompile.pyc new file mode 100644 index 0000000000000000000000000000000000000000..675e2c5cba30510cefd5221bac672e9605457bc0 GIT binary patch literal 15396 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: + WAF='waf3' + def b(x): + return x.encode() + +def err(m): + print(('\033[91mError: %s\033[0m' % m)) + sys.exit(1) + +def unpack_wafdir(dir, src): + f = open(src,'rb') + c = 'corrupt archive (%d)' + while 1: + line = f.readline() + if not line: err('run waf-light from a folder containing waflib') + if line == b('#==>\n'): + txt = f.readline() + if not txt: err(c % 1) + if f.readline() != b('#<==\n'): err(c % 2) + break + if not txt: err(c % 3) + txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) + + import shutil, tarfile + try: shutil.rmtree(dir) + except OSError: pass + try: + for x in ('Tools', 'extras'): + os.makedirs(join(dir, 'waflib', x)) + except OSError: + err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) + + os.chdir(dir) + tmp = 't.bz2' + t = open(tmp,'wb') + try: t.write(txt) + finally: t.close() + + try: + t = tarfile.open(tmp) + except: + try: + os.system('bunzip2 t.bz2') + t = tarfile.open('t') + tmp = 't' + except: + os.chdir(cwd) + try: shutil.rmtree(dir) + except OSError: pass + err("Waf cannot be unpacked, check that bzip2 support is present") + + try: + for x in t: t.extract(x) + finally: + t.close() + + for x in ('Tools', 'extras'): + os.chmod(join('waflib',x), 493) + + if sys.hexversion<0x300000f: + sys.path = [join(dir, 'waflib')] + sys.path + import fixpy2 + fixpy2.fixdir(dir) + + os.remove(tmp) + os.chdir(cwd) + + try: dir = unicode(dir, 'mbcs') + except: pass + try: + from ctypes import windll + windll.kernel32.SetFileAttributesW(dir, 2) + except: + pass + +def test(dir): + try: + os.stat(join(dir, 'waflib')) + return os.path.abspath(dir) + except OSError: + pass + +def find_lib(): + src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) + base, name = os.path.split(src) + + #devs use $WAFDIR + w=test(os.environ.get('WAFDIR', '')) + if w: return w + + #waf-light + if name.endswith('waf-light'): + w = test(base) + if w: return w + for dir in sys.path: + if test(dir): + return dir + err('waf-light requires waflib -> export WAFDIR=/folder') + + dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) + for i in (INSTALL,'/usr','/usr/local','/opt'): + w = test(i + '/lib/' + dirname) + if w: return w + + #waf-local + dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) + w = test(dir) + if w: return w + + #unpack + unpack_wafdir(dir, src) + return dir + +wafdir = find_lib() +sys.path.insert(0, wafdir) + +if __name__ == '__main__': + from waflib import Context + Context.WAFNAME='waifu' + Context.WAIFUVERSION='1.1.0' + sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'scripts', 'waifulib')) + from waflib import Scripting + Scripting.waf_entry_point(cwd, VERSION, wafdir) + +#==> +#BZh91AY&SY~7=h&_Z$e~Pc^zf#/#/#/#/#/#/#/#/#/#/#/#/P@#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/ 罹#_>}xFϽѳ#h>5nw[=={=*f%'m7]zhX^_{כcaݛw[s:][G6;n{l_{si}͝oOC<qْjڭMmwO ;m,h`QKݻhPP $κݞ_Ao[6.}#/#/_fuṥ`D)J&= 7.(P$SJE6k\۪ϼ@SH+u*cBo3սym1{׻—6BZ׾{^}N@#/vyw@!T)UÕ>Uxֵ^x $|{J館#ht#/MԝwN)RJ9,m{#hїYU>}}Pa|W#/#/#/#/`h4}4ˀs!U#/#hJmjPh7΍#/#hz:ٮ0J7e: #/P#/<@#/ZTuUlm}燝ۼxwq=#hJِ.Ol/[m۷ZRJ=}vﲟOۙ.{y};{{|Wkw7{}zV]uËJ{eFn;Ai6̓dཬ>O}n=@W{}w>}/{tn>ޟ{뭱9,smo=-hzvwYsu>[jﲻ}w>Y\rrb嫽R}Vc%[_wlwۻ{実oc]ί=޸^t#/ > B;3ۼwL7Sk.j엎usw׻uL{Wn.}Le{12ǹfSrrl4(&w^lkdI6j]٥58ryu^Q=n#/0ht5BddH;M445z{qGbj.uJ^=qFפ\,ʫn :G:@ #/(V+Kl)vV#_%wltyz6ۺFH8vw|(L#/#/P#/1R'i Vۻ=[jw_<5كV{sa#h(*#/;]9wk@)ۍ`%wt-.vw^R];*zi J{c#/9B 뺰sMݻov-[[[#// :Gu)Iv{{Ruch8wQBwѵu=s2J*& f0[q#/k>|}{ֹowy=⭝wpc.]R]=^O#{hm C%o]|xi#/#/#@2d#/L'2SO)䌙=MzM4dixS#/ɅOj7=I4xOP4#/#/#/#/#/#/D@!&D&j4)P*Gzdh#/#/#/#/#/#/ Dh))6S(&PzGhh 4#/#/#/#/#/#/Babd#/$*©z&Ѵ@#/#/j"#/@#/04F5OS6h?Si)jh#/#/#/#/#/t.ٗ~DThf#hG*kdT60oz""#_EQER-*#/TCﮄP~ٟ[_# ݼIN:Xىa`zW\itzcKbB:J]`jC1_?w*x w\*낉w6+/ *njw-ы'jbnqWlMuᾈIP߸ZO*t \렂!hQdL1;@d(RW-ң1#/D HB JL#_#h&Z2@/V%1VhB &JjR%P=M(%(I{pʜR#h ISl PJ\eMDUIKDEQLEL!nlSB`@E_b 4C1CDQ,UEQPDPSIDA1RIETDSMQ$LED5UDITUU4RąP M0$²M1DQELEMB"!TU)I(TR,@)JDLQRI$MTIEITĬ 0"*2L DBCM5ATA$+@Q0TADQ+04ATSUTTS1RI!ICAAQDUUC$CTKU-DQQ-4$@%LETCBMBM$AHAACST@SJMI1A%(EMD5D00U3R%TPMK1SUPL3R#hDHJRB$#/TDID%1PĔ3E5QPMJRC#_M5QA $C"ȂL,TLTAAQ#_$QLEPC$#hC)TA P1DL#ẖ3DITTSDMAHQ3PTDRDR!S$I@QTDD0UCE%1RDEHA4U-DQE#_%EUC55RQ+L4UTDC2ELDQUU53A,D0LETDA13 PT1CSQCJI2D1A$LAILMKCUM1CE*SA@UP1TR%4PQ3Q-#/DTDMLD4L@T4%JUD$A0UEDAIIEEQPSDQQ1D-DADMAEEM0@TMTD4 EDAC1Q,0CKEE1TQ!$DTDILAJAM%#_SIT3MQCEE KBPPEQDBEPĕK$PPDҔ0KQQ)S0U4PI5E+30T %H0TC4TTKDQ$DLIRQQQ0PDRKTSDDUQERDEPE$40ATRLA+4D4)MQQD$Q5MA4MTETM$%PT4API@DU%4DMTKDM-4ĄE--D3UCS)54QMQM130DKKDTLDCDLPBD@PQM0SA#_1!@PDDAM$EDSQIU,ULM52LQ)T0U0EDTLA4REDT-EEQA4M!,E@#_DDESD@DPM1U!5LEEM!C4ETD#_)# QSE$D UE$ԕLQT#_S D2M$L5T4PMTTQ!T11Q1#_T"%#_5DQ,RLDPDTDD1CQU!,C-QLDC42R %4EPQA4Q-1IQD@ 2>% EP%E@ bj&) ("(h``&"H bj("b)b(iIHb#hJJXh*j("**#hZh#hJj ""h "*i)Y$h1YV*j&ZV YaJIbd%&j$Fi&#/&hIH("H**"((#hZ&f( ()(`#hhhHi %)"h &( $B"(#/$ jdb( aX*)$ %%RhHH&*R&IB>SM41MT4U#_#_)AJT1M1LQIM TADPVHjJ"Z""Z$b**b)h&fRX $R"hH)#h#hfX**He*ijZ#hX(!$"*`i*&d& (i*`b&!""V%"$(f!X*&if`ib%$JBJ)(#hh#hJAiZiBhJbIhfh"Vf&&#h)JjHH&I`$)#h#/hhbE i`b"D&$f*#h#hZP)(*b B#/B%$HF%* %I"ahF!`$BhZ(#hF)")Z)JVa)#h@Z"#h)T&j)bjIBi)IF")iBXBh&*%d%*)@I BbH`$!(*$iib)"h"ai$*"f"" (h(J)hZ!"b""%*BJ#hhb$*h(J"!(YJjRAJf"`hj&f(i**"R%fj Hi#h b&j X#h**h&`" ) jR jJB"ZdF!(j&J*f! &d`"))dJd)B*)b %!b(h$"*Z&("BH%X%&"h#hf"#hJhhd("dh B"j)#hZajJbH%fha`*B&(be"X(J(iR ))!)"!*(ZJ#h *fJ"#/bH(()) $* *!)(Vj)RB#h`(ZY)"J*)(#hh&djRblą5B#_ BJ$)JаDKKAAHPL-AERQM4A!QDU-1 P3#_JDTE HRU!IM%APIHQMU)ULD UAAK 0%4DH*RA%)Q(P-Q-D3$44HL5!@#_(2H UT@STAH$#h-J!HLSAQT4@4B#_)$"QL,!4ARDQIU-%#_QDP DK1,DBP$DPUSTI$Ҵ4M-#B SUQDDTDAE4UCE-$D%+AS4#h$H4-* 4D01*#_M0PDSIU%-!D4DLLCE%ETDDLD4S(RP^USfJ ^#_HBmkOAi$0wvd7KZ{.rST?Rb>e4ޣ2Qqȱ%AW)A͆2H. ]*_ {V)@󭬤] `0Y~(Xm#_Bo vF b|vk3heއϑ-qgDqr#_Au |B'"<041=_{#houV]#hsp#hI k(th֦>X)2z[n!։@ڨX4c\XsلߟƪVjN}8]qB3}Wv J}uHe,owmwO._14$+#n*Tb?'ekXkPS?~M"Ѫc^�QU72%[G(gݧA8!Ocfޗ<., |Ls'Ӊ#h̴MO&;Ѡ>21f#_Wk }m(#_$c0/BD͈iaP5r߷~e1"CCslRsD:Jz%$Q-^j 5W?Ə[{%ϋ;N9 #_L@²R:jY#Vo~(^ ^~3J>&xŃ3)"j^Ԡ$MY6G729Fl;m𹶴_;{]xZѾ{:os4:G1%(vOa()X}j=PPL,QJbJE_{lǒN~֎,Ӵuͤj?+lqO[gvjXi׹yTS#hu,'Gј6ŤPYjW[bp2 i7fFHDr#h)$\NPss63?|5 "$}jw+ QLJE,QZf堦QiYR}Yg0ϿY3ލѵ iAE/:P8".b.eڔ}xn=5>ܱjE+*E>Q hgu&b$6f!jȌBSO#h%Y9"_")/! bWtVj隥^5&/T+ʊާΆe8- ^}#hUk;;cN#PlZiAujkO6G=orHZPFrJ8NfGj>mAh;5!#?f">|9BCeJMw-7G좼;ij9TX 'x Ŗ4~ I#h^._|lF[5bf΄֠)CcQK"bXvt; l [bsT5ri'}V]6O,`bih0,մcO<&Չ$Si6HC!ߴKxNOxҝV^mCpEg&;k:j=Tn^L:+#htφTahg{#hAəDw֤ 14b&Pڡ#_D[Yx?l/}2@bnzPE|,kDHpB _icNT""{>z%V(N:}Y҅TAJIJqvuAS n$w*(:#4$D#hڤ<Hnܔ\JU'2f1JwSef\}ɗMWoDBx>51:өRiyQomѲrcBga9zܥimrɿ65Z\W%J[B Ez9ѩn;v:LS|ŋHTUgl{2YnxWzv:޽>00طjXB \P7[}5#_CJEƈƷ6)ͭ#hbpۺbp)͛M}+<'‚ 2nrt'}YGq @"2 $ܸ=t T0* qzE#_BE+bX3NՏ)S0>{!6P}(1Qq`ylnq% ń wZG)]#y]bJ{u8DNcyg4t֊Vc h^]tR'CatAcMO|4X1zh>8)q8M(D#hL~ka!f; {z^r#hJtwi(Gqh1ߺE \#) Rt)Go6D.2)BV\$.3#<#hPdy$Yb i'A fVc#u/1zOӺ d.n+@Auh<, 06(1.̶/KH#S3: 0c}|x|6P1M#/4zn#h.qm%4<.MV݌!ce˹W{65cfSX{Lw],dXukmFׂk|B0i˒}Xl8DX~980g}8+Lͼd#YŢBЧȠV~.*ISj1R3tX}z$;vCbzn=BpĘF׉%c:{O"yHBþ2Q4t=ibqTJw-_Kdzw=_0*{Z{4uކ})J)AF8 ITaE h ]CQT)hd~OS?>ROx.Ï8㌐QM:ZV:|9QGCYb)/X#fnlٓyF0%(l;%ƳTZ{1P~/(C8B!NTб_ I~ykSShOģ9Gum7C(K[ޥsljtyzeY+p[K6>uGe)%"t@E>sE˓Q;.a#hxhtӟ2i=OsYkF:`Wl ,=jނ4^c2AP|QؽC]F|XL ;gܣH+#hm#/Ӕ"K}J6 ց 9M{h;' Դc zW9{"w}/Wyy#/PTp<[ۅa_-$*USKg0KLҰ1 ,Xn#_G]#hW6][ӕ̊.,)&Ir7&0sa%_粽?յ7LH/*r'.Eܖ#bsx>|P_NԈ$꣄ɺr;Ka|IJs-?cBMGVEqrƪBĠ1 G.Ri_nmjgA>gcq]g3.fy:Yh#_ɣNz &=trE&m zA(EnSgߦ'R^\x㐋Oמ~7v'#/A<6jfx~yѯM+nu.;x^6@JUY5Zx!HTonvM\)[lhY[љ^Z=HnׂXxkݤjd6qT7&/eXΎ< #/#h#](n>m6;~9Kn+%&L}1դoMFZ#_1z3X|G,T~r/ʤapz(Ҟ[J8jZ[5lY3@3EknOzg*[hr(|7:#hbtOByjr/spfPKA}#/NX;684[Aѓ`^Yn||>{wU4䯋cHHvz\<#Rh&U2T9!/ ?:7UqD@ :v/!*@#_A% [#_B,0њkg6a9n|"T5G=fF/ZS>dl2~?lYϧ|/-#/I-L>% jf{KA]Z_H3է=%is*=jZM3{렵Fv%{9q`/') "B1c VZTg!e^Q/0DOH|Ng;7bۭS:Ʈ ;Tv҉rJۄ)}|:ӾP+I-1T>{(\l#_/e!}G$::m/6qWύ-eJ|[zxɯND7\%,;Ъf'shm4eBK'x$E_q7>6*=ʓf׿R& #/ 'R|ч`;tq.)09Oݶ\i>2ܜ|2`2_|l+>5-Utڥ R%+BR=@y7HI'(fsc*Z~g{QOo꾟5^JÂLh/,JcKA#/adx6ྜ߽C{.Yjgs+(ϵpnUNe]#h^1?Awof\2YR'xb(=!cpNcfy|a17'"]B;o%C=5#h=n!Wm6ݍRs~;}M=ZN 2hK" DQQOkT*#h |`NrhF!h̠.#_>h4A& D)j}rѠb`Meaiһ6ja^:&TFU#h?6}plWHcUBA$'G| wBhJSxps)#_э!l+;0믦U%Q!t2c#/#h%_BTpU4zx3A]fkW|uQsG/$TaM+ҘۙGݜnFGI(O!}h;~-b-Gȋ6/39MP_ij$WMH^ -J;#hV #hb10ks;;P5I#bm;fgQ{I&\1A 0 yy~&b$HR|F3F#_hfLE4yE {3jӇarnk͙s_lEMr&#~]c/-/?'#hX- VV]~zΣ:sOȫc֊Ǯ>c|U9 {fgDz#hcrn#_7̡9wHP#h^XzQ Cn|Wz5aoǤr4h]mj_6&iE[fp?6P5~8{?] K)ѨO3u!q_|8sԆLM)xx*0bEPܡo׻(rmgv5%%#/2 F٠0#hH#_ȧ LU^lqpFJ|(B8 U#/4εq1ر,2P*淕>f1M ƒypSF6r#B!ݒLp[&I|16#ۉ_#h󙹜HO+xkO?s~yaN>*nDcfciUB5 48W!x~tO%K4#hS:+a RWɫR w~;^%۴Qou!YX:ijتz>z=lbmkwxpUYKL𽌇8wwuRvU$ksMΨUf:;>gMsRrhZA>e}+NB˻;zvF*|LT櫆+؆u4л!sqe[kϴl@b\vI&#hs @\I#h}Xw0d`gΡ!w ɨGFGZbvv~f] sԍqPMY It:iDdRFML׆ךʋiimθ,8`@\($rm ޷#_lAE`v6d2E?k;vHq>/hю0sL~b3e͸֌`3yʴ"`Pl);̀t-nRFObU!>?vI? Yч,F(5xi -30,QIU^R{8^nuʓkaY# b{1eQ<gcu(f^J0.xȥ{uqu'6~kt#\u+/ASD''y~GIٻ.c tOS#_X;U.|Mj/XrWkәnvp~fN"tMU'gսviopP(.^:^k;*Iy@U#h`EMJ~Y#hI?0oECZx#/6jE&{#^3PU=l6eI"?LRĉ xo1)Sf+҃U#_V&E:PֈFw99~#_bn7A2֚T"m.d>Ud⶘K\vRQ5 Ɯy/(ZfǠx$2`ޖF]8imTV^}B(GUT;"S0ieОqv2лR1re?,]SyZX4=ΌES>QY?iyA=m#NuCV=$bP3?b]ew<ƻ^4sim}/|'W=6H،U Lە5Eʼ#_}\X~׸8fRy#;x,OMxޥ: ;nR@%C)j(x,G1Ӓf1pXpLHwt)PЛ7p]#hLF#h; tخ62cQ2ɯszU#h7.Z@sA ػـ;T Fz:H6 akYa2)~0#_kz+ȂD9b/k >:ϴpLe*?jKtv{1:YÎG؋o?=G#RӹJЩ Ҁ8g~5Y1*ͼ >?w}9۹#hJs1Ͽ Yh ɂܖhc AAoDh/xzQN6ЙO?v"YL;ciٟ5#h1Swf‑D#_.):\O|枿FqyʌX[`k4\??#/?P>E$PRE ۣ)7xq{ꯝ:t^M-mc"LHcvҾ0[3& B D #IAHL}Su]S1'% SePF#b(Ox!;l65PJEgg|4BY; dOZ-T{]~C|.g8lFk)YI` *mJG C|-qMǮub.ҫ#/Ѻ {۞%ȓa*2a#_#/SZ#_NE[@b4r9or&bG "u9eQawiweTQDJQ}}m0Ɛ2Qr5(\+Dpw(BMLh7QN#/3(~HOWǒ,pN=/jgY?/NCQpÃnb}~?G<#_^(({5%u"D@[Yd+Q.>,$o~l^p8%$kIkN?/+iEn5,(F ߷71~- YPHtbUTo#h;DDF\;[MKmƴkۀ5yaEf.1#^qh\]_IdΕi4/%sk I#hHvWc_p=5L_c{k@!#/2y#hz@Ӏg>z"#_wʏzEێ1 5{u#/3H6h9@:Cu2C6K$DPPQ wS/ WTsTN/v7ͼ+3Dax {&ngCٸJ^gD#K"^Aͬ5텉/?Wv>vJD#_gB )Gh+:sӐs|(`!??`n8Mjl3''|/ك#YfM}^M8OahC~5FJta}aݵTm*#hnMĂA$ :8>N1ᓉ)Ox,YFy.N($;ju{xls#/B.CyhXQӧMy~]< h#_9qXSosj$#_"c0y#hC]-YmquY,"^#hAn|E/">~VJQ!WF0846 oW[$Yi%^d]Y4 E˦іƱ҄X_2,foIJ$JZ$}TUq*EhT|Qq&&|>Fi^;R >_G7$:3<ؠ691xguqO1}ړ(%/(놁) Z#ݙ~08C@P4?TrR-O|F1%}1u( N!VH%2Z!@mzva#iG[v#hz`)78Y|&'"JMD3-וpkJiپmixoL҄Qʤ8RF=8/x5fEd<,6A񇭉#_w,E25$ٓC X( KI˚~$Ry`5\ `3[-HgUښԞ?kKV4iqŊrhf~,K UyBMq=QUe`oYe,Qt<:}|cCK>Ϙ#hp2Xk ɐ)Q&#"ΚFYEY@)27EKEMAuEP&#hV^2^.tcw(>X 'odFVS?u1>=qr-a_#hD_L6wk)q #/~4GH#_2iWeD`{:m 9a#/֠.{uPˋiZaԈ4kXrX^5E#hk$ae}ɅٔlYd#PBF'ͮ4>@)zHiE(*g#/sógTAT*]vzH@8q;F~>?y)I-v^bdbx#/ q!SX9~Re~RcSf6Dwv~rj<=.>py~"őb4bz<,Ƨ]V7h8 kST>|-yZ|) 0(o60"ㄕuxt#hOlVOбOLtn.睉A5@~w#/~yX#tپ^S7u"#_qW!9083x[}ʍlEdh3}#/ć@_Ex jϢaɳ<)aF4PvØZ~qp#/b"#_#_]^6X/eγbT ¾1#_@v;;IAʁ7U:R-Ongum?jNLĚSR6ՊsxPxQ&vқ_-[.#_r=[[t!:ilm2Z#_(0d#h[5'f#_c[lBZL3N g >#P:GzPl,U_B! ~v\$eH@с#hC/dߤQ@6KRډ/wĢG'J4?'|#/~bP.@t37#_{Az3"Xp #yd ɬATMjWgϯ~n|pg|*_TttQ(bij&?18ӍO:m͙1p]+Ĵ)ՋN%֭{}|.;LL#˗Od"JZt]1.-:>{!cM}/sA{{‡#_azT|z|y'>b'߆ T鬵ozB0XɃF` WSG\‚ H_lKgj]|_6-:/'5Xܩ$w&|m̧0gQq1}aګmagM#_<, ]"m "Ru y\@R 5ݷɷaMDh6=ɸE#FS 4 5asu5{y#hTX9W ̩4xH$h^T'#/Sqrv nk_pgQ&֠Vq^=BP2lȍ8CQˢB"(\h1cBmr:LE(T,0w`\Hty΄e+nt(Q pHdQ,!5l#_K#h=`$;P">oT%_}ae.K]GD#_%;G%#/j#h7#_5=boG#h;T[UרiMf+h:.")̑)ķI&ߒ78fC^=``kE mȆ\ ?{x$T-[:@2 #/dGGSF^%aO^cn5D0/gXOAXKLc*߲_穱3ZC x2=y/2!n+̕zr}pgb(- ŵQmXW#h8l糬z}3}Gz=DF6>DN@I1zdAq1 95be#'.Q3ʋj2Z̡~l#k}zk_FvF9X8埕$//öBY'BO|_k&&,:[6r^I%FwO>YšFlߟ=/ixcTv=H1H9bu:\.1- ʌPT0另u#_ɤ^#/wuv#_\da1d~wp#_N{%@ rf᲌cnO6A x,x-UB L";ibnuǏ>+Um ..awM57g9n{5^xOf#QI({"tٳW$F(k/g5Ί#*h?>t.2f(z$/:NrDcs`e#h%U$fb)(kN7..}#/Ɣ7"#PuqcA#/]@Z!8`DT(#_&>wCϟwOLȑI.=烺#hX$u[t»oS-3m2@~=(7s)V 'wwA?mADwa[H_m {w~ô flb'X1`PwOnZ BI3EY2# #Ƴ3#hMY]U$DjurX=|{4tyh:77BF #/rHꯂ#_& l|bX_r?SO}(p͎cn8c$QPQӦ!dҚfK~c(L#/ \$r0Fxg~_8lgrqIL?p_kri;F,ާETDDTxzD4@jPbthȦsvL{4^Uw9@A+hi$#/1l;v.B*I؏mDKl};L-L%zrĕ=~^8 ?S. aq9<*+f'8͌G5HP*b/%a'x+`ː(#to=m|5.2ںlgET#/Nb._{. w&00j?ɇ}*ޥTelջESs>X'G#/${GGm]7M} pr|þ7owDDw,ǫ$׹E^p)vY#8qP4 ][SAM#_5}pI9|9J^2}i#hP$\32):u|KL*^3>j[~;/E1EQS#_+#h_Lk̪=P ڢ苃#h$9:(NsTgG(F{yJ5es*Q:)g4g3P2߇pd9!#;m2HL0p #/> zA r^c8X4QJF1$]qfTtչ#/'tj8oV@#/G*pvbh/6u:2D#_+-_d=6d-%S@*d,>@/aSAm7K /3%lr{pv`8B38)er;yzLQUUПY6t[(ŲLX4iv>t'3uNU²Z2U =nK4O]m]R+̬_K}UǟF+V&fd1GpqȔd҄i<;/m!N`{u>Gh |g4mӟܠw[k0w  ݷP5MB+ˀ>6ܼB#/c.qxQdT @k=-$quoMK=)9:< A&i2b<7jv_ضjլ`6~x.o!?hmzL_TxgENt;#_3 YD5-/Ag5a[QcMd@9VO)bg#huu#/#_A[ꆷϣbqpOY"t!F8Ä~A2#:8Of9\9퍎_яh)E#h-t:+C#_} ̨F*xuYڣ|(*rQpw\R ,#h_"chG)Hj.+7r\K^}ՍD¢~V #/!ܘ"a( uQoSj&ƳGR"Bqmϝql60̒BʂB`,aX [;&VB\Y@.g`03 !xmV?EE{QcQvj 1TWZ#_pF_+/ V2Mp oHU0|1 HO(~|hI]<\;5v$v!GTIToM&Kq۝P,DU\?#V]sjF#fZ1U@\B: Q2|ݵwlyNGvXTvG*dG;ȓ>_9(*p_]pyoQ=!Dgf}Ff3Y=)#_KsλM>8w^;6Ӧy"OD"c#_~_~$#/qP7lG#`v$[Ԗ= °]h"G;80~AZq42L~0X]+}/sD(Tj.hL#_(Zpe#ha!#pYf#_kU`-ik5Q28\VѶ.P!]#h⮕æ3L:kG2&Rd-|3 jrc'~C\0J48ƒ ,?/:@/s(_V68cw,7F]WPs}Oh=#/T#_wL.4<؛Hy#_ iLI wM;j; #)N㡕f$ξ9!؊ ՒD>s a&lB 3itNB߼aZg؆["7 j"%rH-۩J+"#/{~[Mr+Yr0ΏNcME&yTډU1}Z7Cɧ۱EHCW ?նtr0}n\K=3qՃbŀ2z;ۺ{OjXI}zR<}㟪`Ս!?qIc?!L`es)ۿfoHeʵ8^3i#s$MfddMHG'޾skF|)dqAKa~`V}R#hP!"٫rrEOcaX#_iA(#_UyyY!q)8F¸}TJ7cQ!8`r1{ESشrK08otb;Bb1wP= In=7=b0c3J:k91rU1%wZ6:J#hPG#_jߵt;ju R2 }PP*{x](&Y9SuBS?wFyH%“ wBE ue, V}nD::6.Pώ1l#1#/TC˵rIxHJcУKt_ͰqV5(H#-pkMEvwG|Y jX.hGrG#/SC-x.'⽹zܳ#oG`xK'B! LM_*Ceˆ+#aCÅDXqW]ֹS#k̂ά$5;1\#_T/~S#HVH#hs\q7F|p3xlL&R胃q?+)/{;e EToPte!L_p@цNQx¦A-2Lux&I}G1A#hih#hPmb<ы>cs]Է|]TuU?J<`(.ȞӨsL2\f7z [ RF#_?IMZwyb#h*cdQp"$* $좵!`\A51#<LRom71D潽Ƹ޶|eͮO>PStE>+K#=D3u˒!tJբWfjs_lemv$qN#h D銸O#qӗ1C **-V-L w #,`%#/R&[Y_3, ;blG$[%0p3/#d4I>Vchc#_.`botz;3GbA` lo!#hr RiH j<+ yFr̒krnEITQ̪ns>TP~Ֆ!3|P\uyGv~zLF'3/l#_bpXl(;\590PETE1k7jބ^#/g 0wѹhXʪ)Wjǫ ð]0;Q'8%y<Ͽ;l1O/b_?aTgs<:>Gqs&=+\é:L,HNLvn2@OڛH?@dFH НEXg6(g%pI\[?a5b[ 2'sMd[PzAu-~2u&t닯9g޴7 K1ۅbfo;fڭǪBB8-ͷ]_@xtژ#h7ͯUhTalfi9ŕ.A"D <Ц Cv܏#_i#_|;%|nn 0&KH@\H$#h,oF ɴzJ6?g}og.!#/\﷝{]Zr䞤;q@ǡuۅN]Uo|j&|bP^'脠ٽ; T ̄#hyf_NǍ2sYFq@9,jBaVieplХUA=C(I&{AS渜ֶ><|hDIAXʃhB"[73`*}%!Ԫ/eIO!)t!#h˔Q#/[U 'zO$ދ"S8e(G(#/vǒGГp*G8/Hgi!R Q(⭵#h!-#/TA=g/kAv$;aLo_gm!O[ΌcC1qA[e#/NuGB6dd9~#tv5@bl1XPКgA_y!ZV8#_Q_;\5I#[P2#_d\ 5]qT{x8f-⺔4i-.dc7Nwi6뛕 62 4le#F ^=y̖U?_NG|7}B NHS;?%'gvn#h":\c}// QGlzϥ3nY(TqYW=zÌrM,f#h:" ; _q:/tK\{ Yߦ9>=&c B#_6#_m(vXM/=y/Α$XK35:^y8o{ǚ™#{gy'M_"ċRN ~˶Ua37(qHUUT9S wCT”u7H-#hv_6?Wq D641s^-RBqĠ5Pt08&{#_׼xPo-QQ@ݸku{#_|_\g0F!y#hgǥ/jKn(rCBd*2֏ɨ+hŪ d.$!|/P/{55â!9ֈos)9WޗvDrj!2P#elFd{n\b?! NTz@Wc:x2LIo.="LrrGzssq#h9#˲f4={=P*j%A&#_p f\|e\Lz}+QU[h]$QA(ɖG'Mm Q(eӏqiP#:=-yN#/1QךQR-dF=Hɹ:!\hAE+{jመNA>#_.*G0Q:|"U򳼦=tƏ_NMWڵ#/ZIL1s64R3`LHMˆqC;cB ^Bu\7G+wX(C͆L? c#/L13gr̡槠l3Bp7+VRBQ?wW*8\iC=qIk#hQX;bR?P֓K/ٝҤ66Kj`*cIMiJm~^Czo{A6%R&;JyxdNT }G3o! an;a2a .hɡ:K…Ҵ0h F5iO]\zbR/Kco% l'llWLU6+mqPk8XηדZt]?t:c!PL);UɈHkXc(@5>vsx8ݿN:}:7qY&FKY$CK-.d7&xq~MuTsUR Guݓƻ` )--E^%t0=|z1iu(f3GzNE TS m.nޫnaSkE$ma@iZQ}p"3#~l9)PJ샰W#_K&3+dL潢6_.!#hKw(w_aߟ#h\C$>{o =Ec\ŏD=eP][n_-frxߓtŋ‹m]G#/6ޮ#1F.w #⪢L^F* W#_}o_hZm{'PI|f;k@BB;@:߹~QW-g@a0_9( (0hg U8#_,×5Q^(`e QFhpQL"o:3(X }﫤[~\V5º趔R;8jȩ#/`j^BtgU{} S2a#h_%֤L kvcIS)ŴxDxWmt0~0R ?僊{GWt#htnrGz?$"ӡ|{}"9p׶ťeJa.Fgؒ.ϪH#+GϞ읡2XDPF])z%|hinΔt@TYXRM@4ׯa%b4",)7.O:!3{2uLU*ftbT&#/>#_G9g  8\)/Kt{)OxT]\)#cPFCG' p;1NDZkʾ()KdՃ9ؓ#hw|g/FD#h݇TMK^JlVf\Sd1",IC6)1o@ B[}0 4s6Ն#h/*/_˙)=LN1ў1[eJER%-49%#_DihQ9:MDŽ.}Eƣo5hdx5Y²틍m[zEcZeIe5Rv!D*f]vGUONSP^?́K|UQ{`Po*@8(*wzO;qCКR'ʨUss4d|_~ z$n "#Tj'0}zK͙ڷO4YɖK`ʃW,EgZsAb|^wbmֱY#/BXƁ3:j|\ťXVfՏ!f#\ 'T"7EEXyzD*{[LSAB0l]Xmmji_۶=u5-b8Rrr(νjLeH~ܴ%MbO͟/1*_8*KO+BE,= |,/r_\FZq8h~7Js'~#hӟR:zhel~/P]$rV*o8&"+~`G!A5{<#h/6sk]rJ8iw|t#8\ڝ[3>({9s+ߝ:R ffIPm=g1=LT~Cz AKJ.*o.)Қ~/xǛf>6|?kNa?kCA_O D.{բ*{KDd4r.2swmXE7* p#_~#_yEX.ed3+c@Wk@;m ='vC} EVeJI>#h] d+C\rrF 9Pa;z^gɒ2陽by)gK9:6M6@% CWpf9/ʩW(>%8ås?ǧ/eA|o,yD :?ogP+=r6e< 'xm#_L;A)3Bgz%#h8л?09ݶ/ф}'V#h#/= }Q>) ݹɨmd1wqz[BMYᶻ#_GU#_|Ҥcvlp뉅xʨ1<[.hHZ L1l#h\AoeHV`lj0YyzPcV0ΦEm+HC"%'1aG7\=>9yHߩDA%#h63]z0@P͙0J0mmi0):K vIAjk`Z#_ӷA#/t<`rݕU b˦QaJQ#/0tIA^m[,X!FIG/&xZ#h?bHqȄQPm=ʼ]::(T&LLUgz;Q8*()} 8NjXLڌ }L(s5ZA/!oT}ȸ0;FgϧpT{w;d$'vlKiN Ӱ b#6>Y6U"**+r7Ro ]Ԃd^\iD##hJ,Hqu^](ʘ b#<;])|3nMY()0D`UG$[ #hGD7W=_Cq˗Jw*D(@jBN8%(Yr ƫ*7sUT&xJ4|J@̵A7:'iPJo[Uo2U*> "oMA+*ac%uAK ՙBNBGB 85m@_dRӌJ7K?ˣ#hS=9 DŽBGmKYJfa#h˲Gvm6@QYk{#hΪfZQP~;ѣ uQ5D8=gIQ#/xN!? m7Roh0(]D#hW($ף#_dy_5cmDH5}XcWWԛlOX >*wn/!SGcnq<Ř1'> KDqѭAPXCE/z N.tzЦR"'GK!l3,0;Hs4 n'3mU7G6nR_;pWF /rj̠Fp[Ⱦ:Uj* #h͋T>]?T5滼,nxUܨ^C^Vd(EȆT(DyzmׅAi",B#hs_'g]>>W-ޡUh" C1,B-*) Aa0Tz.8I=V`Rqk `>S_xKq4y#/Ͳ5loR $DFx-q4Zwnh62'273elpu55"B,DxnG|&Q+#_H49 ΋ɎAyuwl03scUHq.l^- xh¢ƈ׎78 lQȰxxʲ꘻žL ƻ3h ,+>8y+61NFwJSz#MZ<:ovg:Wb N|23q2}avMpۉhsW`Sx3k=(coq5Aǀ*mvIV&g-S&.)m1`#_3Uf5 JzY8:Ϗ*tX7$"]ۓ/M͚傩FpUyꉼ(#{]:&j^TFf}otC!{@`ϟ@6v߭}I(GOPϦNв`B?7:KZo귨I9w| DcǒcUl8e#/* ڗp1:V2}6 G3rFCTx٬,OU+->zK`>kLWTHX0_`@ԗ#sV.l¼i`__"j#͛ \UT( ":"T~w53rg%s-`٥벤56OAc»Hq#/wct?綛3ƪӷ>肓sq68߫(n$6)؁!z<&5CQwxosin[d-8U,@b{>#h ZvZo3dk]kcs#h˚7rgi1]_;cۊ~nU8x݌=䍷R&>nk:aps(0hӁ #_)D5={!#hh P=AH#h)JZ* $1ZDMѤo]+OJ>+899=5$FJjm5:Yg)Rer0>p_׼xOL!Z԰X)}59زhJ@Y9=#h;U{w=`D{{z~v'g$~Þ> g]VL U V$Z3d⎪#hYv#_| qDɯүs #/P`ԣwqbS18rxS/n'Z3qRc <U{Jϳ>)Lz|B gO˃cg1;@x' Ru)v_,-2w#_C[p GEJ٣xY`z#/Lݏ$3cɠ>BGrnIL=p`-)G ݄隐߭CdwRjTy_i6ZJaw?{\_2wv'} ,x9lPoWQ\%/cYόsQ\)iV2;ℴ8z3zҺq$8^ZXxeW5<~p`ҜzD3E@w|s89׻xO75&ZGʠ>jv_:Vd4~#_zwHLΪM+'2ZOyc/y.6$i?Zw1#h*ȬU%(A$'qYVoak l8}iLoەss+G*sӿ9njⲫX„ݷ9;c6vV >;VzR[&{<7Gc+gW:p,W TŜslBDF1}W cceKŐ]uZu{Y \a|tx>*ʱsE,,3{V!\YК7޵/F0첧)#hvCz1yN:p}Nhz;r=^{9y]>GZDžg#hX*;-qVmF8V;;#h׎_#Nӟ2^#_nq$o3jLigHxJ:HmÚƷÑFy 1#CLjld^/o_Wxy,j;';b=g|sȥ%.kr:Ee*vGラ6#h'>\tm%.69Kf1JXU/krSʌsYzp|7(ȾE^1sY:k_Q52*~\9eƇi1#_{ߦ7ah׾km+cwan3Ug+jz׼yS"K#=H}kzݤ?MO1񗟷7bABE$7I Ai%]b>PbN܎)ik7?Ŋȕ\"Rt"m#$#IΖu:7H?JE(&ϔ1{1߽˱zv!P/PLމBtn2uZiCZ{J0就$YP]k\SVrzg&D>;Jz|5R/G+0Y(%z9JYQM\b%9߸/Lfp23#_0Э?he8NW(j BM|w_wpQƠ^{?uܸN)#h_7b:m\c[О],C Y\LRȽ#h{$% (X1d)o+k%ǖW#/R3C%`=C}sr1#_hdC-FbKJV5$=遅!\]+2rLMA7M뱃:كɁ!HY(QOQC;jPj(nD_.E,G/w{^uzKk^ݘS=8HdSx‚DZdl%#X(Tp o"9Ƃr㒩xxq؊b9^|0FK/moMJ%;g!d0lD7:qlɶ\E@[+S<ƫӉQWs+~4}xOhn'p:/o{+sus&":sWlh}F$h>;"ŤK;X?.m2pr"./$$T\Zв h^35S7FES 2gMخT)((I|9 .]d1*"1EsgԀj f O%8cICscizc&|lUD%K52q蔴" IIE^kX˧b~#_$icPCS"̡x ;~L;]#/_A 䏄ȗ*1-+r>xۏF+ >mL p̧Krh`@+mض(z!'o`wHmcĔv#_z|0 ZbVJ!2^?^ 2}.fZ^aƇe+YY\;(_ '9H\T@kxvX]DWGvU yσ]6xO|U<SWqPwowfq0Ö^u&MWso@NI*-8Yٜ"΀ȄBZ}dZ#_{MsYiK[1M %#/H$*Dە8_,o#/>XGWfjwʿrwB3rXQ#/AR=ϦU\#_s평Z)-6 #/umb*UH^lXٽ˨%4OfGx.M+͞;ŋ˺5k.rxc82sN[HX]AEU|& HUuˀcsCx7뻩C{OPy䬯4w^Rf;Wu#h8?(s}Hg|:&´ڂRzcs.x>/k|F}1]7.(jykm_ +#$89}Od 8w x:LQ-JI|:Kʤ h1M~uW[~^3O Ю 2몈zLSGyoR`ps#hDyPV/ pe$B:*.Fu>ʃJ8ؽ`u~Åt-Xc} :7<@X vJ5*>??Q1|mb-Rk%521)JiqRĻ'nz&ڡ$#/]9%1>^:#_Q"DŒQO4/U}xGd11 xʆc|4, 3;,;m!u÷T2WLvA#/<82h&=2{o,+.]j!AQԱӧ-C\t|Gx~WJ'&a%e#_y.t@$B2 r#_4K>'J)b3|Y>|81qTTu/A/FoP 2A@8  +X<fʺ+]D([W.x C?M~{`~#hJyțBH |$v#/=B~|'gPiꏢ"<%dp,?gۯ-t/H#/_|S%3)ۍC;c(v@8!yK׳?8/r:]aQ!@YDlTGQlb6P}Y.-㧿MeF>|yF#=l/~z!(!("!D?ꈨ|%:zH)2~$Ï;T#hd۵G|wțId([*P4?'% Ba4'&_^,S, )4`t`[zp 00IrƫNR7w ⫵Z5/);a͆&#+1s˦/Q~A_ՃR {f#_P{Je! '{̵0H&Gϫ|6:N_6#h }#hx:2m+)>glDO mxj#/:qjݒC95Iw2pL}#hl>Ϯw N~##/8(Q6 "#h?.#_L\|sk>|6Qh(K%|QSOf(? > R(,V#_BmXD+ܦ$:~CzQpfg IiF#_4ʞn^yY;!b.Iw ; "k$"/w\|'V[@u;NGSB+#hWu޴fIm@ǦQ*511Ҍ/(&#_u!4#iB]H~qÆ92O`S^n QѐA@j#_Ftuy=ADS ~*Bgg5J6A>gg#_ lU[CCFQb{#hϪ#ӏ166/.ڰ)k< ETw%pnBWdU+eŵWyˈEID??8d%?/QըuA묓I#h6ׯ=t%t( X"X͠tSVlrϿM?4m}*SE~*5V@/h{̳^#hO϶#hE%@T >i,TPL%4US) 9e$)%?ToipFO*>Ϫ={Y#_,64vi{T۪0(DO#h#/ġ!4"W#hc.0mE6MOBM%կם./ p/ICF[1D- NzCK_́/ƛ^SD"2*zV[C|ȢJ V0B8|ol"xP=4wŸ/}p|y_Wg,y>owɆ~l|ge.7A=o/>4ʟ0O?)_*}#/|K}= 2=/#_8b8MI^}@d&9.E>if(=m\#hpvTr|moϥ߷!d3(-9'ȧNBp* ^בQJj&^(De`Uu jIYqMl,.e#hy392au7n\<1% Njo^M#/TF?4W>Y.%ns3!LOB#hBnsQ(U](}SKyx`e^o"fS>М|#/v6Vl蠷^Cl3/pNtD'|z7TŀPf+~gM'tHb?Kk.?YM߰ٙK_,qF~w rh58'4g#/z=~[~^́{gy<߷>]@O|?Fv;'9yG(eCZ?vuNӑFyKp)~O*@41ՇR6I16h\b*!?ea+Rv,I!E(($ H$f `ׯxwZ| _&aEH*@#ptۻջ3x&))KX\p/dЄChP0I$}O;#h#/#hWs#/r?ٗnKL=C )Md{כCˋStGНS#_Xn=n"Jr|mmKd=Z7`4C'oG0A\w6£N6>gϳ ʮ[_\o#hqErܪމBvO_=c>lŃbul|ӿ^߫rf_ni!?4#h<|]t_CxsNZ}?Kǫ7h^餶l?ݣ@|vy.ˡMo^FOciSeMat|8RVܸpA"cws_q?'揮v>ObNKQԁA޿š|xՉ6pmkNZnhRO.O7V?l?/}-/(o]O`<˪㎭c3sYӸgWv݅{7ܰV_da:^k߯fzQ5|UYjy˪tpy[ϖmϢg ^m?}iÃճ?RTw7ɗQ膱r.m.}^n].;GK.cv-ZY wwe-է߳ѶFs5ypm/~፭s}^+R7QRG}CWᏴbpPV[9WCs,jiIX?5OÎK8hqܞ=QNݚv8StG[qwxvoPR^q^ͣυw>.˩Du-|M?͏S#_">;4|GUe%ųe®JρO%ix_>FՕ&B5}WopB}'|Ga sM?"g#qHs r7qj!v[W:<u#_#?uu#z=0N{<)\&<<==T7w>efkh`uG #h*It]eĘ.K?_W]$-|.zÖ?nWrm?7@5oψ0]!?znĦgryϳ~;D:ª͞?#__W?CD9A}zuaӀx|/wg~A<_~s|B̚GZ#_JWIQ;,OFϷa-KWk=kx?ȃvOZ|LxǸrkP#l{'W7җ("Y^O##hDK{7F~#/n?`ܟ&9R'0u+UGGvadzD@#h>QwI$3CwZO%:$dqT k#*Kآ%A3 `L*@!+\+QKxI>%MXp֙釔t2ՃdexXHR$:G4ÌuMcIe^čr W$9HGh~|Q.j.P; ;#/[S>gbQ^]Zʕ \I/:嵯X|_cXF#_%kOϼ"_`W9Zfq5pVkĻЙ.c튌|:śp/dߙc`LgIOK2dÃzY5:[gU~N#h?փW^>mcf0FqNLO_#Cm!tC @.X 0C#/ DKv8J*.y#/f͞/rxpR*9H}I&lǛh*6xA25XCU@Jo՜3yDJo`i՝1]79˦gnۏ#_v}|:;#hNyct#_aecE@;99"W@ٞu }y fT )TE:S?_=G=rϡ%ZQy7؂?[ ϻ ê :6rx04'U* 8h:Awr9ktW&G}kzlc?CddMbqX؃AsfZ$KM$Q nH ]H& m`iɱ)INv4Lij<t牒8Y$!Y#_F,~G##__4p'DctTZnջiF*G0&JZnj)Wzڹg[A̸4IǑPeRDP*#׏spH*JH/#;. `ш$$4lmI[ %1C]yW5s4[=LCosƗ'8x FvJW+t۽s:~K7S!ݺ^:un;Vل+~@y#_rl/ӧ +݆E!:g%w'1$aNs︻䘌ge CkoW*O|}"$w2qd7 ߐYX lOoKXA|#_[?huDEJ#/njSe_16ҥK*JtB"55GK7r8p`08o3^0Z)`:#h"Z/b3D'vM#/ksoV^$LTW|c޾ޖ'!Zm10.heuqƭ2FQ%Q`*J693:!A'ih#pC (ÁDEܟΞ8s4BWMЯg', 9ۼncngED|u8i{cCIsSZ43ͧ:ܦ !9ub ;i 8=wr87]JOI@6Q6pYCPSgKXPB/7^9o|_ؽTewycz[ cz}ihٙY/[V#=o?G6pA !SYDzg|jx{2 ((i=ב#_,]LMx]bԸ:``&0rDVc*z8mwy`A#hnnfsx"!inrTzJ̭#_tCԐڊm#z~QFy2K :ҕ#_HȌATs}`NᖔR62B;A#_TQձAӣ "FF|fbngFą!SI,Wܽ N(8#MnxĒMØpW68$gP4-B9TV#_!>jXcs<*{XpF[1EnjcFu2ϞϾ7r_-ۢh`վ"WY 7Pe?U} ހCEN܊#hyCԗÆ)yT4Jf ,+3lc5"lcV">ȼ#h=|ЊjH,OE:zČg/t8Ln21:#h Dɣb:d%8FIƤ9%5sTnKqQ5LS8vX43"%sS}괊P9Q0-(sK`6#FqƠ4BZedNpqޝrm&%τ|0+86! (ٷn5Oe) RTFh-mJ[N#_-:Ce[66x}6Ъ~ 4V #hڃA;4]Ixf#$ qIEݶ1'Ʒ4["`zm!11z8=58U6:I`F5g yq("Jb-DLm1hѱKۚSA:.1Amt}.[DQ'l{IƒM#_MQ|\7vj-->inݝj*b}\;NzFhpGoߟl%O O|~+px#_(䦆H#_zzg$x4z^/t`hX`.IȠS"0UF[kI_q93#h&D\~^a9i,.&ƕ9q\+˨QBv:SCdG#htѪ5XK1hWc qൃUbtyYܥLl,w=2dGJ᷎pi $#_|G$x/F;ZX;Lޠ+4mf"m#_霆LNM|H\C4Yckf9ELSnp&[ƤWו/tc5MKbgN|u&;er֍.ZZ]F/pgҮS5FQ邛F5&5]]qPMA>DB^k7/e7*Aƛ7ʣ}.W8 D9n %nePq蕔%ވg#_=e}swLqj٦WpS35rr0.V3nAGoW͝1w2QCn٫QPR۷Pgkk.l6*A TC:hgۉw#/2k]MiapbE烜CAQ|!I 6' 54nөfS2 YJ| 6{~ɾ۾.dpY)`/i@$(b34O@pW!+2j#=ԃz܀ %?~e[XUxC-a#9FٙNh%ljHqr]-L"xKG`^=Ux$xub!wjҖ0v2b!%6(!cl 0"#h2]0Ёe>oߧS<f[G(d1pz~ڀ#LRPv}|Hqc֊l#_w$I޺'4z8v0/ d0-9c0g,2{CH-z#_ "J(a<>ys0XFa?MCwSRb[ۏ́Q($C5*#/#E߮h{{6-Mr8̟=6*-$vM>,YfCƈJLr/j5UK#_VB_gF;zΦvGiU&FpO 8Lzüw̲#_UA/ԶȱT%2tECRN5ϗ2 ܖ" %z^hvuZ+N9݉кog o'p;";v 04!7C}k3{4qlS3oܮimKX?Q#_;ǔ{%Z52$<<1:d?kȓl$ss4ZߜK|qi>|mq&ϳycUZ#hb#_;rK':6H%:w˗#/?aZ`{#/f/ ;x#)|A*eH",oKI٪P7CtK:hyf+!Ԉ=}hbJS'\MmIm/i#,2!C;>$nLބƄ3eO)Z(|y^gg/kԜX;u/H'S;[Р#_&o]4p`7q_'/kIܜ?0e/M2c$ i2f$:IN5?iMyHZe},L?NDO<6oΛd&5FvXa3MT_#+ņS(dVCrXȥ0fsFG'rhaf#_w;Z6{aڝ~A#41(2-XkqfLUPYֺ?!cUvguW+hݹd,h#_dHsxf//(kP%tGyDwv(iV[19%pU8.SM)9CxZR'c''ZiF#60s/7D>̡ G~SH=4&Ba XofmQE˾yy~}dPxluU HxUO;b9&&}vZRC÷o .:kEc'6A&5E prF*WcÕFL,p#h*NE C#/tgs$}0d9x7b2-#ZMEܼf"m<5ӵ{7.q=kMih0ӰҞ"Խx. L]3՛͆^BwpD_*鎻1 LAgx|xJ_?-؋F%%%;o9|D?׎Uoݷ:zn͹`O#hy4ID>Np4 YEd^=+#_%)z99g;h5Ym1ڣCY/IUA%P@A}+GcʤBBC'Ϩ4(sFq,>m36u+g4Y.4 ZCӉe?fn=.g8M:mi1&exvhHA{nw)5L({fJ%zz'y3'w;XN#H]L]-vxbS{ e P)KEnCIR8YŚAyNߪ7Hw&u=ꭺ`Т#_(MnLԇoaP~1)?!|~LK=s'Ac9ٮj4j%+G%&vb-C.p#h&Ա02؟f>0 |bJIqe3p*2CƖKgc3 >#/G7YNjW"aV$+cGdqówkJryG;~i<%N/۹&g(pnt5j[%*0bU^#_zbojNLa,,#-£s3J{oh9.7Ef#h 225"*2!6WG2\S;s2{],hB#/PLq a+,ۗǐxW&Nut5j˲{xNiEV:ҋ"`Et$"{4{PV 6SF (V囹ϐI5Pp"}}_/fq.rM"#t5B-aN7@][^W#_هS?%0(vdqO#_-maK`!irKGJQ΢b;:3/boa}V|_ǸsMo\ huD;ms#м}_ koP}{=,%UQ0DhtJX|a2%XXk{a*U*f'x|Qԩ|P![靹 =H&up]e!6#h'Z+]P|惰VpLt4Zo~/U`M|pSp=nw8bd"JI\"{9zL]ntsݏ>Wr4:{n0qޣ-z'^"Asw]0ʒ~ o&zeNS{Ş#h˾?-wDQ$gm=:CACٷ'ftK/=݁/e$f#_G#/ŒkiUAQ 0εAzfkџ 84V>o{[9_ԯ9>%@tes8>nƦQ %7+Mѐ#h,pPvq`€G2!!(]aXс{ڸ8CI/@Qv/sʛPή=E]W>m~^\#`YyV,<(K~6b!o\o<園a25m`rXtstq|xb]'Ʀ,6TDD?;ݪT=YH춻~/₊2Y +_+\+F;_3?Zw TL&9]5mnA ^9:.W3C5ڂg_ׅv^UXB$uI.3`-8Gۙh]VD͞=6Kc\#_ߜf,pc<zCceDyee҂&T.u^:c $;9o,ށV{]&ޚo3O}ͬ|/Yi 6rqіm.u3FF축H=MRrz尵jUm/S~8-w6dQkMcX^g.7JQ%Q#V\a|[ #_IC[pw#_nkȨCQUCoKg] r[#_^8[eC@[q1Wg'F{^*+:b#WdܐrMRv-RUJ:[Vۖߘя/$}^I^n/[˺E:*o#_am.(BHEzmN^#_^B!lmzZM>Fڦ/|Eg xcۨ(s{W]wqQIBԟ;/>0AQDi yb8(ô:ŻDe݉rܺ_cs+ȣ)6J&8gNkF FWQ`#h$({mf<Pw8k _3cjQ67XM@[U!wl7yrw :{Z#䔲#5ᝐtW=k*6͜ΛQ-J."S}WK}:\N.LMw:}aBUw#hm2Dp$XҪ{"?{#hڶGH0mμ:P1m[lɟ}==bsLgtJgxڏG;Ӽ P#/1ǾےZ"rgm75" z{8m.W&*m͋kD,|;G,i8r;A~k<>ŵ 4#_}E.Ks3Ӝtӄmsq5y|g"#/ EzQz%{ X.03NqF85R҉x`;rbǣZIvbWJX|>j;U3s2TkUND_o.5+1D@79ֈEPmzy(okޤ\{|f*ۗ|@.]zU\#9B{y&vBF$g&l^vkb͌ySE5V2׵UuQh#4jm`c\K[5Ȉjn&rf#h9k뷖w2sA$4Q܉"oZGZ/4Z= vkګ6qiA8WyMP{B7>|h:f<S-Y%Vy):g¾io{g_Tz1Uݲ>5kA4;K?'S8 Ip'Zɇ%B SC<At861T")L#hU61V#/7Wry@aguLql)s*)w|Lci\0tOCNmbU'`rM${VxU9J0R" YLRqj 7v-r5;xtwV ",9ZLJDDVR@i`@g3C7`_{I2s^Y2P\ ֬GZ^4c!b0O8*õE7^8A&& VmFEEu>|e8^ǝ>A7%C)h6m#h1?i:NmWf.763Z se&kݕ_w>EܤoEGXrR%n$ħ<^}{7xQ'{bs|>El=8IP= \H7gtJxŸjQm&i 2IDRooJ'r~G9Q&#r7d#׀#hzdyιwFkp#hV0syq5/sG5Pٚ y@i`Ʋir}H`w&gӳˀݩ|F<֑{3-s )ܽ^@aT}.-ʷTzGZu8OZQJY'R &,/O?̾Od&>~~ス#/ GOwx]o4,GX~*J*~B=5`,O#/x|z.d&;& 8J^<}DFcms̸ۣU:C AVl/D)R'.M>-;4T5 9wg=*0 y!UT,LJA*C}&&(<疰";ˁ!Ud +*MvمA6k̴t|,ѥy|3vD`G;Zq[.Wcp8 5¹53uS.:H'6B" E"p+ͻsC6ۢ#/Q@~}(석ȇs=A#&T8 ֳznJ4/8|2;Ծ?m>F_D|# /oJ C~)ǪgK,ON&ta .r1Xk0Նgb1wy}N6U>#ӡk( T#hP MaSFZHߞzM7#h|8qM;?Ů$X^.e03aUɽ#C2 )9&:C'; ɰ f.ɋYco]'Ka!SM+)U`IkC%UV뽅E mIq!k불A>Lj#Gd@RUrCI:M+S=j#YYRwt6AwE\ȪB)DyKxF B{m׿/@**d_wy\qnN!^p2E#/#_Jʛ#/{sR)2 #h\͚)rA ƫ8DQ8nx&Mף Tv'';XRԙ `@u#h?TYDcUas~kÿœ0\ qK3W!.Y" VTUz׎\2ce,B#hϠq-,dud*箆v ؇G_J$G# ,r 6=\|rss:2D%Fѱ#u '#/#hYkĀ~6z78%T?,Y 1^RqP*}2ͽԯ?LH] 0wVplK{AK3Ƥ-3[bqu}>#h )X%l8.! #/Dkdެ&Zǒ `W@uhi.jz7I`ϪC4Y!{Xd]c5rvص?oͿNƝWa'kMK#/RAEEL DSbĂ~q34c<2vFv #/mf`ъ#:IGwb96?N*0#/>Sm%:5ɀ؁.pk/+ &P@\ܲ}|֞TE6f͗S/C2nKW,.X34w}>\#_vob cz'!v#_Ƿ5 Ů"2W[yoҐ>9WMY<z>O%FoTS16N$2M$\`.>^0`w@LAS2&#lHw#l.-CIƫD#vp.EfDc+qRP*nҩIˠ-);;xm3цrmtc8qgpc[\| 1K̓:ĴH`Iq)nc-P(-7:dj%m>R)!)}q蠹#_n LJ]W˷k02g7 γʚ ; wl#{#ɨ@{սmK~#/׶mD;af&%153d`?'7nLǻF$VXszb@USXUQZ?noB\/׿/'ǒ, %#~?_k~gL_sG Ҹn w.~l~B#h衔(}rW/}0}Rk>GUUAw=l_I$$lF'J:tpP/]nbJD7aUt}^VL5H/B@35<8#_%2!E $&bu8:;桴p—y[WN'#_{L HI8yqFwāL_u=r/xvjz|=S%XůZPo54%d1;`($su_v!А<7۶I#Vhta3cղa'v_B"\( %|#,%D]) 92R-lkЬco?j? N#hYq'vaCͧ֋E)CIF k#q\P0NWp.ꎡ1c,ƱTj(_^F\\vtIG\U9^\21f8ś]0\'F H̐9q^Q(ơ|;vOCС#_9jߦOc|\briLè5z˗NRՆWa,ն. ))*McsE}A2;n}HZ'탃⪲Rea88E&7,,٣~"#_0XPliæ^JC~נtF?JnZ%ZiQI7gyRsR,A 1QM ~~%Op /V`á|:9Ct%5#:lnz65`V*(AgҢG3Įue:P^F<상&b6Tn~TR`E(=Cw;ViI2c㱇s@8A?>Ƕè|?۶g.h|/=L'PVe?@>p1H,f`H8? : vi)Cfz#Ggz 9wS pF%Bd6`qo2'Z#_0a)^U$a)5P`8Wg}UϘ[",ӧ<3z9qTPjbUKk60!Lp1%_'<8G[nLXh7Jd8=7c!O$+q3Wk*9a0lS&(Ի'w,γG|Îw?E {A{,"[Bj#/]K:98##h*z*opy9(^!+Ak3X6#_;iΎm #hq S#/`ÙM*\ˎLfV6K/OZ&,W$FJ_aZ.1xv/f|MSchH)Ӥ \2NV0RUT'ThQP*ϥShy|v͇Yгli#_#h㺢;/|@F2Կ64">͐%?"z'=geZ{Lt?J@N(>2$xM9|`1Q$'db>Gl/#(INaJMLG#/1D,a(R afdhoaX I"Lm$>Lf6\SQrow zގx0{d2c?CnaL ױ̅s.p^841R^:zNpno v]#/!$P5!t!mDKۥ^3d @K{RBm47HQT#hiEj#/@א;rK&TJ#_Bݲ 4Czg9C#hMuV{ؠ8gˏP>5lݟ/P(zEΉ؞}V,| !?DfP+w?gMv.s0뷒9JkMNAB'.@:^d*Q"qzQ1"LJ:`\KB#/m{h͊j`9l=pptd@{;kmGh=+&Wt5O{/{ty˻7f*c×kx6;,\>AܐIyOPA5VlxG^=O~m'G.R$ZYh7ǵPtTߙS8m@*wrΡyOCBTs +leryyyPtG}(nÊ3nmkwT/,qG~ByݶǼbJ$(#h)#hi 0-$&QIKI'ȌAI((3*t@τF-!INx#_RP!Ik6O5_[rhlQnE$q#hcy5p|Ç̴ 0n8X %5 uC1sr_|$`#`{uE&mÜӺj;(1CCY* -[e,f"#/Y{xҳ9q=矑ؘy<偞i 8hi<4~#_R=Ժ89o~ó~3j{*s2i)I6өRd=T7ÊoO'wK(Q-'L4~kw5?8C"TTb*Sҝ .#hm,We~nlwwbܤ#_Z wjvsTiAƋEgf_s8' |tE`zSrF1㑳=\ax#h`0H#_DCm#hS7YI[I^%0܁MF*#_0@mm j#hBH7nf+`ҸΘ!ps>Y!uyW=QR0_Gܘ=6?X}4hD(Ar#_xIϞCׁc Ί8=pP%H%@J"]efhd63WN\YWqk8Jy𛖦haMq6N-Ͳc8N['mГo}_|z1UiG=f,2bzHwv]::y1|g%n$ϸa]&y"$d~,3w>ad2$X_I;B ,0__}ʐ8I#hk"j}ןNr~z:- )D1i bDTCQ4p U֌&50*DhuNt9"p`}A`!y|.&bsuDo|vNSfweD^;.'AA!UF*w;`l#h-ƆH3{][1-7*aP@t@bkljp7(OhzJXzʉslve5I:C<6C0wNqNJ0Q!ߙILTLBs6EX(i!"JQJWE!Y9|N^k XH ERRClw,77M#_ º]؏ᅲ/%a'_:=Z: 8<;nXoA<|tq$=7tIs̗ y48]N=^wpN)zP_a2_Mv]u66=^JaFm篓\RtedJ&8>Vڡ\dBӆfԞ}]9p #]ȕ4}_/N&;\$#hD"Šy7~O.;Lըu @c83)F!Ux/x 0@wS΢" iÏ kjbuB6tadfZsJ_t`I_+&(Y#h-3#_ =D@$ĊԊzQRT8{8hs7qEKV!#_ȩ=@' BE*yx0ՠoZ#hZ$ ])`^t> CYmˉ#_sz$$9J#/u޻ x梜;ѵTS>Ԓ l˻ӽU5#_#hWk;03Emjߘ#h%#_ne"(ejH=ǭx$,>@Cb 9d-FD{oWg+/ZfOV.&?@#tWKoIc~n"C(#_$jYxB'.?YUE*$ x;|]U.#/l?_,Oj?xz4:\ y"Z=FrVbq{(n]d \R٪?XNoJxIN5h57[;ƴ%'#_hҡ}߇.yW ^}~V";XK݀#_#tEtV1!3 ?^&G9a=N~wۜl !b& jcP1&;>B;Ӷ* }І⬮*`[tyi]E\4AhƋoܖ\T0L2*-b⿤k@'َVrJ2КU\!ՇkleK"Dx(#6\#hJ978['B#h }B4@Џ9h9QCA#haM~W Au*[%#h(?4@`7WAwO)xBӬM{?ܹ&\-\pN@G(D%(P ;2{񳻲?`#hKǴ$y*RYdW 6`gH۰#_Tv=D-Ds7Q"#ݗz<6(|꒟4 u$du.pPFhIs 9Bo~?T<د'|(R=3D݇4{n#_G_֣qCN(꽂s+Ɩlo{MCI]sa2dz%Bn:|]%D# h85Ue "c9nO(\e%V Ҽ\5ڈS& oZ@ 햋]R ҙ{*y;*sOydyá" jhO6I|ߟ#_@hP>y#h]oD1]wcXKsRHDi9)lU@:R aFZ}mK7椵*1w#/7}:@N6 ܕ0iwgc|OD"w3ԟ!xg ݧ~t#hxO! ك#hd#ha#_3:x5LCD#/qOs!ӪZO,\򵷚fa,p!2wŽ?)*Fƥ 'k#Îm>Bفͧ*k3x`q I@P0 f::<#hX\iZַx$ϷiQ#h5[em"OM!#_:|b WW6#/DA;b9rHCǼRz>J\/MZ+[T^Bl5bwd DA"[fdx*$()U/XJ0jfNz-zfjэG^X>; hXB>z31$:cR'`bi z P#/#hU.@ZOw#h'#_><9#hBG̎$p懌|;Zw}z~/pA9v{IRxݵG4.)Q>7#/77hH]K0!V$r&QYÆ,ƺ`mw6h-6@ex@1[?.j6r^G=gD#/ e +rl#h6K1.u@%5LE{uGƭ)"(+ ~aWuv97vOIGIȊRP95&Q嵯}~*F>?j"l>)֣ lVbA*V2 ?Z:ݢH;pOO7{\9r-=qTBG{ԙ&cSc.&",,FPL(RͰQ-pQFLZu_ OQUo,\FSfiyn. dG6#hgPy}{FSܶ"SVe}IØE&殫őoQPT \M\2|duIJkAׄjCt% >BCS$7FrϹ+r: qU U@Qs:eG(e!k!W˘\Pc9*_UtaqǼ|8u~LNQpdz%Ľ۝y荮s1"\PWw~ ;dl\̰p d QެenczSJ0uJ9W#%>pw9EƦsQe ّoQL]qɌ*n毛k]< N@|yxa`y 'W`zbk50Ԯ#hMz)M,Ƹ3XRGrŀrN^GTJ-JrŝU7(˼dN?3Gӿ.W KsysOII2sQ,%H.Q3ư^ᅠ@*e#ht3m/ȃHvOwJXqċxy_<;3Sr5s9Śqf%kuѓ旓9vG|-1o7>l$Uݹ\pUٸŃٜ0md3#_+GI3bV(:+`MX7R\&*0mvYpNxd?*zfn_6 s5=5ޘUCEC2ܺY;k{ ;4墻qr u!IvB5qOUTouYPjo? i:NtPo{a?#/ 5\[Ӿ?u> f#/I@}/> B끰Lݭ[^nQbLZT#QLg*|fd9Vٛ:)G@6 a0wQ{=s+E@e@7Nŷ usEÐeK3cel_x}l4w5}15)/nH kƳ![27nT1D[ϲS o(,AҪ/ODEWgD1\bu|RSle`V-0R.y4e"c$-;1R2羹= ;YI$PcsyxD l5h4?C\R~h~[PEzNe-Z=YnSXgd K/SwIB`rZ0vZg_eeVףG9P:T]#hxY$z:wxoҶd$#W^c5#~5>zhoKNQAho𑟝ԭoG3Q#/-HdQ#hm_[#/5E~Gp^Ber"'~{\;-;q4N\A Rdt2)qiٝ%Yĭ([+Q[ nfQ 0هgc.@ƹyLSnc#{@>#cux8L#%F@#h/Wq'jL$C%:f#h?3U5w!@\s#/'<;wE#h'G$ %+˽p4#hN"#WڇDAH*~ߐzvP#/⭁2`#/TiD{7KiCJ@HEiPZ9"Hv!E]ةCc} #/{ SCPTGޟ0FWz!Rp? 8chqj]l(T};F."``P a",7}_>T~?\gģ޳6#_[L՟#傐}Hl?z _"Wu;Qo4i+2"4->6x;"q.) Zx"S(X-maBG0]#h%I\G0?o=-$cJV;==_}>HOfM0,7r3.Ma3.+^C*7ɽ28_X: `87|rt#_AZ[0#uk jN[UM]o KH13PתW:F?:s4O/#X|@ˆX8ȀlZQ@4pɪأ̈́4:Vd#h<\NgUpsۈe.â;#:>BO#/#/ F/pBQ̺8=#_}~Oga,+Ϭm̰{{4<Gq%]0[oWr8oMG'z#_j\}]IBrv(b[($khx"ca00{zDGB3ZEQ~&z~`B"qJPy+Ij_{ _ ,/V OqK)}&#_pY̛dwˏl4CI@ɡRRrQ!`7xo>גz?JO_Q;?~Bz%Rqow;y5l#hOxmyǑ 24k},ưNn7œ 4bMb~%0_>><(;.2ٚD=5.xZ`{+{;72Et'2/ϓ4=P +Ä|:l;ǃP<{롑IE]Jy@prA# Ӫ]3P/Bm6AxREKm(.Zsw 8Qopc / g#qe0LC}e@2KAtd?#hsTxyS(fi)B7YWP/yv뿳f ~'Nʽ{eW_C)=%Sn;w'#/#hC5P(~-Y~L hSFVO6Ϗ9gg D{?j8T\3kQ8ok #h)#h \r0~79vUvM|S}*a,l4 3gD67L}Vᷙm47B]g]-r@bpQ%RPBF֙Tt34k劓GcDxi*U]\̪ Ӆ#_"n>iZG6X5!(`QD͑y=3UJbc!7]q͎7mCFDAmfBapwNQ>gn^ pRk”;psq|ho/#STI_e!87*J5ZI9HP>(޴gdo6kjVjaӄc1NWۙG 3Ifpm&ͳ5s7;`ZOq."LM$`x&/#T\7q1#hy#_,1NH<}߷ߟi@0bzd efJ#_fV40*f{4u1vzniF:_8EU"DH fuP9K$r@tAp!tUbû`;1#/ y0 3OmH/*DI/JzAyO}C{WInĮhJῢN 8#hoE77ݻGW-=`xjdJN7Q~l`)l"r8\0*KN{IJCF;9n$;8wdӃ!37Y@ds-P?~_?y@bo!>d% p!l#hyaaqO/rn4=|05R!}f`Ŷ7,0aLK4{9me?_^qm(v#/ɠOd~MC x5NUT4 )],=\E??WχckGR3V"Sp?#h(૊G>o0)A0~2)yy=L42OT'⛚=3rV$PfO ?w6CP,|/^'ۤw#/ G|XbAĴ4h4"#hA )>Q+S/_͍"HQ,~*˻Zp8uf̑&\#hjHRe#_jkUtk4ΜOSBy3Bq$Hv'haݕ%T/b+ $\tpR`' 큃#h{ۧr;|El #h6qȇк `=n=(t!@~W|<}ӀdPv#/>_wqpHw ?yy<\2J_ڡZ8묘%.6W=Ju#hE bBQC¡Zz~B6҈/?l 7>O1P&0 :Bm9ݚMwB>oٲBU9o_o=_[kmr񢦼J܆a|z@B#hoP{<.Qd1(L\#/߫/vI>%%H'.9՞T5pb">ynYN;-7@Ky>.\]8!ľԖxF*1B@D\ω&'`C!P#/>SHT$j5m&9o,@!F;_ qZWtxoL8nSED7m?7س#/DO\>)~UO}W#/g?#_DCMg+hL5Ω~~54#hՁcrE(/65ؗmv &j"~ >+]'Xn'D|Y_#/1Ohl]#h%SHO!>/` U`^]hHJԔ(zK9=Ͼ7E)K6)Off%.jL1mLwrP7u~as 곕}yYvC΂,0"D1㜟QUDK4^0=CG<ylwDHXQJj!:s#hrUD峱Il&GCDDDUDr՘m1R2U,5͆Ӽ#/GC6_dNׁbC:U˟hV_ #hBZc9@0 ( Cʯ|T+.&#h{e|#hsGS;5O!x'苨OxqOHTvBӠVK RgCQ8yշ _P#h%^wM">u.#/lnMChL8j84;`(wl_#/uADniꒅpCk{k9SCVA54Z V <2 K wûQ&12{ú}0þuh'ZW9 &ǕG?#/7a'WU?ilN]kWi]HFyQ-IӶܞ;_%^`,*w>oC<xC3vg4#!{#_諼 䈈a0pԖuN/Y%xLych\J!rLd{C?I*ۅӾXn^ahno g&#tCGMO\ ?[n$R,;Տ~3X0}H60i2#_l1$*[8i$j>50/Ɨ 4#_ᤖg4i5#h?,!It0>AP3!|eDdL\!GzJeV$A%cN?3H/0#_!)A^HFȢIުOUBwјED6fÎX}X5+UTw}@@C!n c |bRqHjS?Jf5`t5pwg @#_f|/7pgあ T#h4aI ;0QIk(4)1d}#_BhSR(u(U#h$ATA,Zc@X}2 AO@"uE v`9mz.g^ߟjuCIu!o8&t$#/PK 7)Wc A:܏aϬ#_vގG>)T'9A%7!TK> F5;d5-e*!ofd<|$$=u֠+h:ffNIQ43ilU/;C=Z}qLCi{>az3i4C, #/I4#/36{3zxa7c/ȉ_+1 4s8g=-Uw[4]d%K4[#/~G2#hY$OJ (8<vIh\/OV^[c0d o9>ۃ08 ͞'Ixp8N>?Ծ U:lN["L SvQusǚ==쬏mYj|@Р_VO?!(A@PoƥO`d}`Po9D rHA)um 1 w%ǴY{}? dux915ؙCGP|g=;8?cTq2 7O~;$g/V}P8NNP 'Pu W@Y ~ZHHGV$tOW14 W!wwwE c@#hp ':Sd"s[r@N&Z9~%<0|dߔ&&Ԫ_Pgq$,ujh{}ʼnŜZ'NN5/ss:h#hG?mJzQ!wO5l?~Xm~Ky )BxoozaiS WZCrlWHrMzQz6Da=;AyZҡ0YdaRK6 `$#/A#_f~>>5є/~ A3YIJ<z89bF#/0{ZIcwǸ_KA!$ۃbIe֊oA1 IlM0&)֝;pZ1r0u]käTSk#q'O1ˑQsk3EӼ.夎km)5Gz{~sm#s99ֹ%T2A5PB].Ԉe`.JhiHU8Wlz!I.#/ha?ḇ*.Xv5m) .|= sj`3}?'j_ "_!`p~`>@nIa_5gFNEwYWyBןT ]W!s꧲>VvPT_3#hI>΁28P;x#/G5\B^T 1$; DT}Doo"sDsr^*q`n n3V @y%_R@8|2#KhUW,̃j K7 #_I:~=_8i5/7^D,Ri%49HN|iS\?)vI,԰os(@Hmqz`ɏ}B`t9#/B"Iwv#_n|~$[ ~?cç?I5j+݋59Lv?_$+3[n+xhC)L k Miy2JcԍΒ07eO`F<[xJg1;DkA#/T>.ŊzL:$)̒j,_dXz vPF4b=(b^l: L@P$ ~Ɖd#/ [,$[lR#hB[>`\U3U,>B)_k&`_k($@#*8Ī~ub.Yy"]J0<(5PD) HPy#hi)<8Hmx9&cf*#h+d&f)*EVj:5x1"#/:)Xc}&l@g,\m_#_00GT|5 ᪙9ioZ!f:e)va^f]7b?1*SLt0,Ba#/3-:,JϳWg#/X0%Λ[^{0sϻن Eca4+ֵ[uԂT<ح5{,[2ߨ~A/.gH[+KQQ@U&1PD5ŚW]s!k3S0ݍ+tUp#/RrU?Wx)zkMrrF۔e0g2yp0 qkP6alu#h#!S7f;%2;@)6ۻN>@4Hd# ?#!>I.oL~LwfҢƾPR(m=@[?(o#_h$#_ׯ,\N%pr=?Q9#/er՝֋Zنg}m{?I+#hPloZRpEWq=e izX˔jUۛDQE}-bh䘂RS NQF4@J2.w:Ppk*(ɪN(O]v6;#h47Ʊw|^jAb95 Vks?9ݛ{}toNu )#/#/0:|$|RwCGS /ASV|&i{`[\@Cy[WZ2/Br~2"1P;Q|?;1n0|^q|a[ x&3|#/s@ډNrEo4%]{I)a09n.U#hi1s(@AE⺃ haM`u8@Gh]ଌBۿܽAޢG3n눈@7I(9~Nkhۮ6a@Z EDFsAλop|)u.A|pe Nu?GP9Akpsĸ7;(2NNNW-ߩVbе D2K'\sq.aEC(ka&Y$ D[/m~ĸ(u`SdYnu8=̶T'%$bw#!>c#/8GFd7>&AQ,Ǘc hG#_ e])FJXosDge6tw:;W59/s.Һ<#_P0S=;vI's֝P)v9Ox}']РV/af+]/#/M߫!?~yR{Z6t#_TuQ.ڪCdbAЈ2}H't䒒*lApxtZ<@گY,#cHPvdu<*@nlR2F1ҽW)`iRصaWCG_G<6oHzp˜W>k&☔#/ĄOc fl(r}ܟؾ$GC5 ,;N+=P#/@}%;4bA#KIwD٠:#/LFz0G?RC$ XWp#3L3^y\Z;" jB#_`N`a΄$ Cpoh5#!REzj瘔o<˙)k:T/:yYEj}{#/\?u"8"#_XAP&ñ#//32~cc۞!GcH7F;uq6si")H#X$)Rf=\#˛>xpo{ >kv=+wA6^'Y$,5hXR" ܩ"DpU#hv!SXtO=yv}@fCՊyyTCJZj~]16zBjheM#Maeؠ0%=s-- 9bE|W=Dة}}`BL sLXHcMQT#_{~zy/X(zzP߅c6[3gS"CUzkrM~0]#``Ix~%oUQZC,xח=eBp pL0d&gZӆhĪipr}Τᕮ;n>s&`ѷGEUEo6<:.O$L/%uIȱ΋꬙hɇ+EBȁR`,F\=9@*e s\C)PG?Wݧq*_Hmײ>+S=Sm5>>xA&8C\#/f#/{݊ Μ94CbĔ#/J&z@aRj"(,LL-#_꾌WI)&"0=J=EVjփQ֪ysq**ti$ d8dk#/[7#gko`Yv)Ȫ|Թ{ ʤ1y(#_47)ِOŊ I3MWuJ1Pq7V@)PBBC|-bZH?bO#/їԘL8BV;2cCccs3};i8Յbɑf*"ZMf[ 3Ϧ`L˞yܹG[fg5M]~[k9k!a\ö"8DkmL,gEftԴ ZI& kQa,6,U#_}C6NŽhVJ14 tQ=C. 3ϘȊdfr/k`oYA#&{ C̳Oc]O%~Hg˲w#_G%#Hb#_ߘI#hA'B׏`U#h!VBYUd¨i;LL^\v;1ڗW(6ӻ#_ulL$ `ײd-O bQ^It,2J~#h#hPN9D`@Ky$蝈t_$R<.{jJ2%xZg*|-.,nPV5#ZqgQEӂ!hݯ-E3q0x'4P#/暓$tzN`tmS Fٗ.B=#_#hM6 @oQfKovOS,0tWxe0O|OEy0GY=7oD(`*=<_502A(<61-D2yC8vWdN‚bgh:}9yi;#/Ezâ`4MB`mAQ똇Cv 5TAf(b5]N^P=#̜˻ }Ƕ/Ԑ<@Eȟ5nRu pA^3;qb&tv1%fй** JL1scqA.WPR(!⥪Yw1#h\> k.JIPk$r];'d^AƦ {6~켋ܦ/f4BO"r3#_x5UD%4 bh)H&*}!ܪ#BΥz񓎋r 3gϞqLܖe1hfeLcG}Ky,D`0a#``Vi ,=<xӶg+p^rC{E9k#hҲh4,ɻUW,DWi0 ͫ9֮"N--Q%O7#_l 5Ag@D*#h԰*@~GCKIVC wzgcl~0q%y9oNŖS/7=wu#h#̽ Q tApP? 9~.B;'5cwrjiǪ#_ -:zryh)AD76\$Btw"4ru[sp3u@$oM9>0P``k^ę$8L`/.&L2CSf3D(6S=tQ7c(F"9Cqƾo!|*'f9Bx BeGѫ1# 簇U9b! GHtrݯ2`%-<:lC:C#_^(iWCG!#_5bW ٷYH@!11+0esf>"Q( &iE@5,rdq=[C:m芦$PY[b^Ӟdw$ݻ 0XQesك^JQ.&`H>l{|"S&37F=њv3(;j#_HDa%+0wOf:%bfT*Vh9  0mHQ~z nz?PL3Q2 ;/Z5 Z󈨸v?#7.y?#_wtw|M8(!pH}׆#_2rCJė@M#SŇmZ c#hML30H\tUb)[k=; cg7ė0ƈ1I:-@|TFF~X!췅x'mhDe˙$qK=)j|SgC#Tk^Fs#hf#/2MAP>h7'Oruyc<`?INs`[#/oՂ6QF_3m 0O76^k(Ēh9;qTa׸:=K6"j}QҘ|Fu_kkI8GN8K>{b`{p,h@#/2u9Vب!)mc DE?>mELқ"R B*^SA#_чS.X:lR̛'(E0`XQpȳϧsgrpʼӒ"#/?O)0+1 /^<>$-ymN\3LQĝ}ss c;~;4õ9l]*Tpd|tڟwdῷPC:m7)8W)|]^X_m{l~jwq_Nxr~*ikּHs.ijd^p(%!#OrxDWd_dgWO"QwGcpD[[I9H$#/ro5tIި8p(OY ctY}'n"0ϧQ䇏5p]fށ.ő^/Fxw\t6w d[%rͪ^kDu?%y&J#/1]֌*ѫfs/OH2e@I%%˜@&P)!_6SҦ!#/A *y'yuy='HJIzDq1 ؋IЀi+zKX,PTV#/#hmPVDUz5V`ʇNVMĞuU6E1SҞjpr"( $0#=1D 5I0A1EIIȚXt(d~ŬAU=YfIáտΕ?JlO~t"xn:H#hS#hakXa.*DZ?w)yhnD2f`JQm*"#h#_@0"v$;K@\͏om7T6Q[dҙ<_#_,^G!G&)U)B4#/=G1<':7<2b [\{ fI@ Cm}¥fOjmxY0X ^bY֡5;Lަ\cX5ƌ6gS.^iM^=B93Vi#ff4kߞDz޷´Q8݅v dYv[ Ě"Չ#/ðɟH LBI> IـtvB-zz u!Ȭu@e#B;51:99%*#h(F eEk? t ,yЫ~ ~16xAقnŀ/085˗= 9h5ժ?8/p{NK?jK36X3mT>}8u}_9#_Y jJ8e9$.>#h}۾w!/F$*<"ˬt#/J+B!#hʥ BnGў#`!D)T;#/#/h@QF2!&X~~c7t#UTQ Cى"$5Q!3h$P̀#/At@Wއ ؟!($ %kC0,V[M L#h;b@7cTPxAWc")1`33~v^7Lh)vngÚ~]f5S)`Li &5Lg\` @D$J"t78AFd5J4?t@Hᒔ)ih:#_$@ 3D#hC"hmUT44##hP̥aJQ|dTi*5BP- }DI5%TCRC~ؠz!G~l,!MVEYה5?#_8AN%QUQ1M=ćb`ϭďs9`0)wצڈ~2 QoyJ뾚&aI>):k)$%C0aa/ kde :XOK$=qp[SNnNڦ]usxϳX/SnۀeDy#h"УI=VA"\#h7ÚizS?W t-b7vTb#hv~]8n?i"f,݆dtưoV{tI8!ycXpl?(%j\Z0KF$zSD2NɁSҷ[{<h^_~9c&6bBQ#/oI\O)WZ"=#*ЀIE76\h>=k3RM&~Xo>FP> &=VKCHCԄ2t@S#/\&=IuWxd'_˼<";1 ݙT3#>)nʋՏâ"0ҡC0{r<_Nٓ {xj7g$نtpu+;;EG4@gI?{l霵(W籪#_)QcF-.ɣcP`{~pHng#ǃF `(}.Oށـ=1;`}Cx8HP``)EZ". #hJQ3B loYNs.NjIl]hg1حJ`DoKcLia/6#_o 3=B(Q:[fM4i(Ih˧LKYJ&kv˺A?PfLm.e3z8]*ߦ?:Xb+y7T&ΎmI&X6hrZF1#AeiLtEQ7mˀqOHi(BH(Z (i)#h i(f#h@#hVb)J  & @J$"R"JB(! (%f`YaP(di1/~=;]I3ZV(sSzg!#_Q#h̥#/4*4@EE#/yL[#/nM8kKO~q`iID~.|䟃zdޭN[:.imm}y o8rYw-5#/a%*B 5^|ދ@H4錒2o#/-2\Kbxore ΆV#/whbdS t{Vj9#_:tCxqG]ȝ|K%).#h O]wxrLO ($"RH#/ #_#_ADHit4!P@TABP#/-U-k(h.·#/#/T<#h[LJDi%bhBXx{U@Ǖ=Ծ~F )3^կāJ(8'| .HP{#_BOQئIB*b(iɌkQ(}I1H}}?DDS`4L_g#_yu[hmAl^꓅\xfYL*y;{L#hz 6?+Ql{zMf~pipDu֑:T $~:OsO4<8h0?aG T"%W8 =_-h5r*hZS?S#/'{ }uip{HO1;Σ#_˄1'1R(`r9ipwJ)Hs]Aaz:#/$86u!Aˇp78MP?T3[C]0JFֳΩPgcT)V)LaKlEM튀R;Ai( ܝi ^9GIGl3 }8T|@a!R`{)7ʊQkX#/O#O' I CMtXOpY|Ov4Bm}=a[_/ezXω2aӤ:<//csfcDI3w! S? =Vxw3ac#hmz#hm<8ِ߭C o#\N!O¨uG& 8=8B#_r#_<Ԙh*JR#_ۭ1 QK_K' ~v7Lo,ަUZHUK*rN.:޶qiV:NX]jQ8aLPqҜT"qqu#_>#_ņ T?@kĈT3Z\Z7I 8i#_ 9 3- BұD#h@B']::ir |󧿇"q)e xȿp}^~hv|)7c5QѦ7Hygӹ9>'i(9r0t!!qylC"uG#[ #h1bT@ܦ2oi3#јתA)'/ǔBU=U#Mݶ6>EWqdA (ʐbÛהț#/b3wì;D6Ľ_zbo|}sXL]l$aDh8L ?fu'YG{c`:|Xް aM>^*V$/Ok;0(צ*ë5#/0(d9.JHTiKux4//;V ӧ˰}zd^ HkmTPH@DjT^v׺k4'n:gܻiF7 MؔYܩ)_13FzaƱ$$S5>`W۞Ada'NC>N_OH"݇Rt࠱sv!):ô|gj&B{qFJdȜʉb8XF"#_̥r];X#_9;zХ-@P4D24DP#hr#/2Q. ؿ7;iɥ@RpOk6Szg#F 6CSJ10tQHmaXeV8Vri]%(y8VJ7xk.Iuъ*h3y'#/#،cIlLTCOG@B(o#i}$3wbIzNʳ#/ݲ#_)uu=:F&e`sѨ콘Q}k J*xLWJ,UtxJ*ttєW#ha hr8ܛzEC .P'@UӄזQI}0|=pC}Xp><>P =;Ic} /N م UTcũIbɎ1&h52\TN!D"̼p8!AFk*?Mrmg-WHѴs8.P$(R|УNa$6`tl#_!TL`ě۵rSl2$"5i Fo)Sh+X2p,foT>Rp3)q=[)Pf 0s7R#5l(=&T4}ʉ7#_9&+Ҡv\ae AX432Gmm3j][sBJP%,H*DI:1Pp ƴN#hJoZDNek˓f fD3U΂CtٛK6#/\waxQ/qtJ#wp>XK>ҏ4*c83^al ɲ|̷KM,X dwHCn--U#hҊlr$Xg}32X$#/50jLF)e NKB ; ]Y|T!{#_VD"U m-֮l+0g b_eZXE8oc6 8N`.L_wj@K#_Y8 f mac6#_0͆0FHh͆ɳ]0aq+ah#6nuC%i#h1fzB7[Sk8W#_Q&6xbld;7coŪ2;$-Ub`0A{<{7~{rm'6e ӌjdZ^f=!×#hC(, #/1VMED11L#/d$$5&JHbH*H$)R9'.ZtLU1"LKD4C3DAI2DQAE@4A-G`R!#h&jMLЄ52RA3PS$AM$HUSDѪ "f*e"I"(\0ޔ()KJ n3#_tAף@=6Wr3ӶA9~+b"&Z83KdcݬFYl/V`-^.NYs%O~ir:FCR&ȻDDNF.]'zz;^0§/~Mtp7] =/%=y`0BUDQ,q#/`uH^J#Hl\T!u?sr;hiLuldk^%8׷k6#h4}1$}Hmu{*t˜{SEÛt7:{ͫ!vО#_)Pi=+A-T#hB>)k&%"(bŨ+lAHM$EI̲JL0K)AE) <;^lw13 ? M9j.>:Q|OOB,5LR9WξsԧqMWV+"0;±l_^;~,z3{o=D=IY?7}D}_#_#nzl?x)CLf#%qO4ptw?4Z_4-m8K#h =8CRg?gotT}Gz' ?qʞ 0uyA;bLoδw^O\s떷Z<ie9v; [<5sQDVC)) #h$Z _5bsS#/6ԯٶ#/d\27#/3QJ=OXmt8ÄCp%בz8zrnwD#hd Ub$S7<#_&w$D~9TC!wNr ˲=jr(6@UF=r^B_MyyN~o'{ 3ܒ ! cŠW\ׇ5dYRI1d?V 0?$ d^=okkDC7l~ #/4@!_52՟c-9|yyU=7~ETl|Pn7"^o{XY3jyVŽ p2Y6LwDl-R0ʙͩ>Ty>pcg{Ż-2ax@eu*ЪAY=]#h4뇁8q6=a;NwDg2K8o\_{NКF!'IRsӟoWQN0>k%3 p}/>O|C$7c1gG\"c&͏%#EZGt:_!kV'F3%T<(j6cD>6U w#hّFc&u-*SnVis0V1Bbq4I#_KKS3Aem4Fu {YTpG#_'8Xf<鄳S Λ?z1=y=.ҍN)EͳyxRRf+#_tbx`CuӤen!#_P0|_UkӖpA#hSoD6:.{cy wyɷBuU5zuUHsI!aN:oc򳼌2F)W\<QQtIƈj'KP﫦J#h4iTɃ$!u]CFԿ)ӷp;sX8 ctx3CrMenbA s6vD#hVoP{0ciw$Qu]m&kl^#_bL!bLcf`Hktݘń9VPYK9ÿxkvlyIKNuzN$w}ަF]{'n]xt2 ۧl)ˁ]#h&06&Cx`e瞶NET׍Hd aե&ihaq^4#hCed*fѩR )HiZdL)yv0+&]HTt൮"#<&k#hpجfZLpg4]46E`1g%ై `#{>UJ#/Î@w78k$m%v N(G(mxE :c{9LFmbMΦKIc}lg2ތpuN6N8T첤δJ`/8;; fh20qxera:[6koi%.:nSSψιCu3< AK9q!]K4xiB@#_u#_߃. Śs&{+uݸr=p^+3@#af,,>PWHηhit};aՎG)sO|(w8]v>k;yoƼtAv:I#ht%jfܦȠ뜵 oF %Ǽ3]&1$KJϝ99T05#zk'/{W. .v6VpQX&f3xH΃\®gna;3hMr.C=pfGHn&8wO!h\pY1i,ڴMNߖN4#r֡hb4H \Pzŝ&I❨&HΜ1TjBXU2!)O: cȺ0ÇEá8Dֈ)D#\,o1;`bўQa:4Ev/&.Cل ZF*j[ _`q4DcSFJJ~ wNφV&:g&<\ V4.ˀT9oZ2lw2ѩf}EFߨDM}'c!&MK)̜uQ=6g/#Ǔ-Qd1hkoFC =w'.E(.^0K}\nM\@c`Ѫü-.eH籭##_j15>01" 5'(#hLJn&9YH.x.7s^sJyf=jC!j9 sf4l3, J8aV[T@<0 *Xv02mq,Vq;~,)dC+ЫvkECc 0uScvc$9n8Jew.wt+lMa:=;H#hg,ä+idiܷsvã2h$q%:iWׯ\;#^p g03×U^F:elBl3L,+2&l#J@lyͭ]*.FJDY ܾ)&=ȜQ#_(#_X_w]>3h#(Y)u7X:[pq"st[_& ̺qw=}qm]ʿGU Q /l B`|n}j2rMȢ&7s+Hl_1[39# I8N듈Q.UoQ'Nq"s{M ;uyvDD'8)0Xw|.#uPz Zq$ '7WG}-庍];Ĩ2]F@OqnS`\,pe*bV9#_z%"Иq„>UPIoݒp.%N-L&TFCm$)"ˀ=306[ #_diя(#_ƸaɊ&ĨIe~'L{˓;8L.iC#hܵHSIɷKʧ1YqS31ԕ\[R3|&H`˒!!$B}9Vj99gyJΟwю8r^2.e|]upGk*HncW*1M=%Rv ]AGMMl? qr^Ÿ2Du1)a'=-tvݹ,p%5ȷvPuL28(M۵h215\9q9ݠ d*iJJ۔JD#/3*\[p!IU`ҽdeGi-T临b"dk-bMz0PB=:h˕ZMƔh19Du#/66XUB%!M=:$לԤmDun#/tL+dG}=8p92` q$鑈 ,t?#h9@OF. e',ѥ3Q$㥪v~dTItL=Æf92j(;.^ָ=IH[;hϭ8:VwЌhQFr/wmET'FV]g-X+:2D#/HNd#/ ]XyGdv\DԄ#/|\<)n#_՟"ur/#_AI$XdթBv-p'BtEBp`p|͔ӎ7c(DcypD{Qac'Mĺ"ɼMZMD5Ҥ-,Hlbr0^pZI|$i9\Иg&X &)wt5dtv1FԎh8-q Ո]PjD7,h FrIE)#LMWgiuTPlMKef sM]1PjliQi^{yVN,YFگovFMxck;]:y^!<8HW[M-1#_ ?Ҙ&1%)Ӵj,I̼%l:) T#o !Mo*m5I#/tɮהswId@" 8EMVDX:20$q>c_ D:M p9R)F,Ӯ1A<20Rt2h.v}2v1遇jۊF%:-#/rB"*IeEȡzXfaX9Pԍ4\!^qm4auR#h#_唎\"HgA6Aexc{ c6w#/5 ZJq z]( X#/ ^(D0~.v~6O4xM`xcmv.sd˾\njdCnuү.4/cJwv6#hnñ#/Jg%3:3!J'3Do paF7\yHfo4r4ʙ͒É294j&޶'v8gߝe>x[wye;L'piN뚪iF$5ncВb5=8)9ޠadݞlM-Ȭ[a;9#_%!C2'4m"\B2ݹ ƻyAm :0:}aS-QQ5Ih-.MF{n#/4C#jm`qY&}@>LL (I7@D))fThQĤO#//009BoA#h"; PbyD'x#/k6jz^ItT sirnF uM&ƏpaJ.1"$%|xRp΋/9c3Ė<0HD|c)Iyo\\x!D;IVOGd,Z%348R<bG#/y?WQ!w}0>U4[=޼Nt"Olw3'JMz8BfJSGR{ [f 7p@ ~ Џ$!̗~n61(VMN?U0?IEFP8|H?K` $;:2*M΃0E%C|9zsQ"e|VԚuHKuolmW4D],O9g-C'TPF#hN^#_k at,q$(!8F(ɾ.q]KrYNL?ALGю)I#_ M͆bd8"J#FMTq%t"2hM'#/)qD(2=?G8X{0JUD* yy*!0zǿ /p$"@%*&!i)HT"i#h&J$jih R9ջY _ԮaA}øݾv`h7A@ģH*D{`q5ړrg*CA4dUZ=Jy;O`!# (?/+`ir?:a 7kbU!b Pmpck 5r/e!˰frcIƍ t=p> :Sc7+Y^$MHk}i.Oqt;efǜWz-oshсg:ET1 #5 ڪi`bw`7=sB-V60cRk4(MC*˲EH dI3!ZDQ7!; QĪN-9&XC(u  E33=^)D u/Jr4]بː H_t+5`@3 a6h((gh95H:2[jbBDjCw(=sm݊ZHQKкAjRα5N+yКtކ{PD^wtu8F̛K {-b֦."swfQ@#_h u&'!ayř'Ca'u8:ELHVCPq8(qE<.§d((D$#/}R#hLYT#hxƒT <{ 'T>M߭nwDND_0zĢX8)"ND^ǪcCbrrErUŹ3ב#_hGJN7l` H– ZPz1IRaGYi#hd#_R`Ns-PBY0XXfBI9Ea1N\TTR.\;UPKǤ :Hi'c,l~_{w};I5Keayn8X#9}evCG$^FiT&w< U)C#hBIx5ƊUA-k:z "Ad+tR8&AݎYBw&Ztk0vޙ:tj$@:v3uzcaRut(#_3X8ͨ ߋd 1%CȈ#/>VAh]#hĥ:#hiJfAAywH~&%("U0hЉ׮l%,:#_@c\d?ڜxx0Njynx+Pq&#/ D=`z|rh_>`EI7#/?>@sF'gdR0A<( 'b8Q !:ki~jku9sK3YޤnZg{}ùz33fqS2M.'M5t" !!LBf:>o^:v!OB%_GbuHƠ>CC;^Z;\(Љ0 2#/xI ^H)6HwHA'qt`0 G :UIнPb#_Q"ŽlgMwwi.Zara$pE#/TXp>ۋ#/d8 lBFkA>"<p9dtc|HK>颍/lJBi"sAI>GP GOO3d޸R#hz$Ƞ>D&JZ((($h""(REpxUO"b8F9yƐR }CxȚ^b r.z'?7u|' "?wU'<-a)%{YXcni#/t >"0+LKUr#_` <3i\Vc=t/RuD45&i4i ўTƿ"z*#/Ϥ-չá@0m4%.!(@uI?2X6S #hɔ2Dh@͵+?40?;#/15^џBj3'h0Y81pS-{(b⃨Sl@GV6$B?B/(7.q!I]2:쿥 ;3ڝ>l,*#gǺCOk!9#/;i؃m!x^& :'1C3#@ˎ7G>s@aDG#/ed6E vR,V%42٪(-h(i#/6$4"GWiH-lC:0=9( O!vqVq~k @0DaR@ B{._`啈?*Y!~Lq!COxXЏtޛ9UI$q,ʟ#l9wo5xm ł1H7Ҧo A<;*㉡#h;*D^dhw q:5yDNdE#/Tms!""& 8i@)d#_0BS32*1 AD6.nMĊ9YuЌp#_PGRE'1YFK`&BJ60nhz4pb %4PU1Te0Q$Cc(W8`+##/#/p_{EpjM5>c \:i=l I`Tc9ЀL#/a5AӆyXqhҠzń(#mf6|PII))/w'LR#_IBG ØECAݚRˇnc#hq!-!r1֧!CO`Llbjb&#c510Dcj(j$@Id`%pBMTGa8U=)5s@I#h:¸/zheF7x{ĒZ&.Uk;.ЊM߸)BJЉVauF`徫4"6LoDdG@9b4wb<_[Uh0(b V @Y!"`$_%AMMUTD4 0A#)SDTIDAQTR A5@E1-I3KI0LU$QL4HİBDD1IPDĄQM @440TL3IPT#/EE EAE0% MUCDACQ5LD4DBD҅$4L2#h41 I# C%(@"tU6EHDieH"*j$"UJaDT),R OJAT%Qā#_$Q#h$(*;K?Çy>Mvio@`B~8FFD%5]$ 0#/?qCMO&7(v+8(]OjxY/36&}5|<Ks4%O}ޙ>):dw=^!l#/o@dН2M0yk*D98 ]aQ)  m6Rvp#++E2#_{ü9 ?(lw@hm (AH t36T]$r!wAN?'t`](Ɔ&23!2j)Fr<}x]?@b5q,#_0#/LB} w#_U둂#_"r!1UO~]*_RmʁaHf)$0 ɯ-#_&ɡ:?kّb`xk!"Xύש׀2'#h"J6(oR[QfDmdE^&X Q[`@M#hdH%2># {X2.{;zweRZ~7ZHÐBlaƳ3'PpI@fh:.pKژ悜PN'%)u?G}SLIso'p91}G1;$@n'=:y@|qéQIUJ}9""ԉIּM)q%HlgWpߙ#_E_Dx:i u9#/: Z_YH*#C @A%7#y 6R(xSok6 FbOR{2M/<'y)s45ytTᲜb gK2II!xXiJ#hc͠!#/ll:fR<ƚx(ػטygM84&ECAʎG|O.:(b#hd-%hv٨^AƠ#hZ#tjڨ=y^NݓTസks(Vb'~t䆃Pc(I#/ay"]F7NB(d#h|TBBw]݆SĊAj0)Im#a׽FYL %,}}hꩁxTv,`di:`H:0r5lUIC4,sYbT$4C#/UL$,ܣpm@5I4{3TM/HpyPiOzT -{)vV00~u!zڷYF=շ֖)ơZ}7#_DrcI':NE('?]u#/hZf'Nqgy~D4{{|n:W :u$e&< ,k]t3Tu>3yc*f>Mqw79ck8{oQynPi~M#hO/sl}-CM_ ;1O9FJ0JbWQ_zI6gkfpQf 0H #_rt(2ZM#hdZ",#/Xb|ylN1Y2$Lr*Ggz0?Gfrhopw#4N2ЫJUdAQBHmn8'r O >up6vsMdCTv[[*_#htlM.6&W>j^CllI6 3157xwŕ@m)KfEV*66$Gf;2qcC.M`r1O˫`5Yީ0,_[3ڇLBii#A%(q@$hKC{h;򫲡FHʼn+C-ˁ4DjMGEm&S#htN8g9 d#/a5<99$S "U~yxw& } SJ9B@I%&Y:@h@eJU,KC߃%Rzt$4 L#/.CB4BEAI#/-TW %>`zq#_ 0UmPGQMD] EM<[mS4ؿlx74LU5PQ4B^Ս AA4pdN:´`H:eiH$IE )$EHS_'7r 鮠Ѝ1@Z$2RypóbS~v&‚$fU{zٺQ*$]F&G.e|"fBZ(`a{|nКjfGA\ ʖN'6v71&cMa\4L94wlCF-ITvX.d8#_->tv %)Adl]H}L)#hMVօhU@)BŃ0Ҭ+6Pa6af}bpx 32ZG 'Ξ|2r[&]qHRA5QI-Rypr8A*d=#_͕l|mMW\fXp#G6*im5As(䇜#_mL-.AL_n}[IY%C%:#N]@R#h! )#_!L,$,h4UmCP!H<#h(#h@`äyW!`pds*#/죈+}N't D#_"ġ򙞘惏2@v 3<#h`ςRd}ABx8>C`z8Ӏ.fpL4!9Aɯ!HGit9S?;|YQW@GE9i1SI S9DK̄)@,Q)N(1)^* @#/5z@?xs#_ƸWvS`{Y ,|a0$Mbt#hA9&EQ3YD#_tY`A y, sۑUMU7 [cĉ7p7Z&NSr%y:qwsUn)mZSr#/leA0ܤ¨)0$%4#_QTL5M$T)L$4D%4D2&@#~9V'>Aal@< Q`XMNG55`#_7gSۦLT!q ipDnN@bPGA?P"do(!3ٯjoκ^=H#* dR✿{yc|/B PH;:#E1:m89"<$U*@rEuA€p['"~n@5LECL˼ ya܃S[f#/H~\H+H T%  CArV Hf!GaʀvN+ Gz3u?Y#P(`"jЃKE<-{O9Mqx=([TQ<2O:̡RFv#hbyh\d z`F#h%ɜ˔ijWj(%()+Fŗ*)94'@SmwvOsY%!4pCLDo;x4o|t6t%+)@wl)RTlBړZk4PhGbv8Bd{@c#_5u#h2?*#_MD0/1 )a#/i(m5qn#_mjPj!W5s }ނv>a'j+ "]ϩR!Ti"aP$ed ?iH#hh#h@r)#htGQƚTs !qyd#,$DD& 0VBĸB&'C#h*h((Z%\#/]%a %fH". 5A@S PR%#hФT#B"I$U@@J2TFSG1h|v:@-1f\Xw~Ȼ;z9_/7J } \,#_> _uQ#h {E.C!'3`I -`0#_ѮX`J<添"dxF/^JbhvMgo2gPdz^z!y5|G M@4V0h>~H~:yPTJ HB?k@֕1Dt#/#h- J$Hw'IGR4.DQL U"-Ln#/0X$"cر3q$#_.HG/#/  vN{(F;~#_MzSNaR@SR@μt0ApC D\0IZr_np$N}Ōjp}mU7_>@?Qv/WN a(1pLoXCUcq o5YMq0bD5y5˂&sY-HBb %B=%c|n$?7 hI'Ff]iq*!}ٷԿah};^Twu@n"e 51U?q[do?nȒI*2ܦWPİ')1SQ4A-#/~L$#/OPAr6&B}"d+EE3Q[hBO>~x2vfMF?1e5bm*@,'L~x n#/؀#_93ߙ[+P'I$6.2(;ޚxPiďn-]Gf]䤿ɳXQkCQ5OQFjgMN|e15=Oi[7zPd w'rV6(4.o*{v90N}KL80qbAmg:LRD#h\yq1"!5֛;#hyM'TҼ5u s;j^:v`6MpNam͢E*2ah\;Tg'(#hLw(y!"NRtNbcDžUc4088T|!CrQ(]nX1aGry W$,b{a@e`Fga@:qQ00H4;#/~`eH2"(3!Ө:+g3#_oAU8H }OSǴ5ІĊyyG?aGdSHz[7 =#hwq0eQ)?fc3$P~LZS͹ͫW<$gFқ& Mx^61 #gbi$ks#_BBŠctu8`'6׋j*f9%!k)P(@ue>0mDP*d)A_8G7Os‰+ŨRbB tif"oᴶˉ#hBi!$(^FPIjd*#/bH i c@ͧ@Q0.!4uqRo{D&hfO{<@-XC&%":{#/0]yvy8(*)p|ă{=ɲ?xHR/"{R6#hE_ȼ8ߣЍP'RQ04KQM!RDU JPPdE@pGC N0HY`{/uW_{zYLWzmA9"'<@l3jEpo՘ɳ2kk#_5@2mB8`Rqi#/fa3rILj/Hx<gf3>8#ZJo5!#/9]d#_ 2nhKذ3 l$fH `aG䃣GoTa' B$#/`m#/](  SĔ% bpw.cX{ (A/aop3;5@0f!č#/0=>4{Wic*aP#_N~]u&$ hXhm#նw=#hfޤICXV0:hdh1kL]=H~Qǟ!uj/ \K0uKb DSQ*#h#Ő?h;Y#h֍9JR$ֻ41fL.=Z}Ip-lE#h=+?-qaƚal99%)FJ&VVjvg փ1%;[v"QAE5!TTU#_AMU@U% JU$!CUTQPTE""CߣZ*(dB*`*2漧cΌmKSv:H^~{eRXRy"KcU(}RP)Zc5uOdeY"Oֱ-o\} ݆شlGe:3ss%>*5ړXGOg盙S%զ2e Q<*i&Fd<'4TG\`Q(-pLvi{޴V;uW $1/ؓ$:ԑil3-wf%ѵ-) USBXo_ *n(#h]'֠]j-B0H)?ϧcG*WqG\1X-)788XQ!b(Ir8ҒaFKvq@I#/}pl@|}z$g;E#;ʓH؁NžHxcG* YX;6k&IXj#_Ϣ800- f)=A dR:BQdd ̩$#ieZ! `îmFD$>^ ܽGP{klDJDMEiR!5~O荀y#hTq@Y<}gDFn:x2{7nc)?}NZͰ3-Ply0^| FdӊF&kY>^j#hXahc#h<%5Ŏ#/mҨ#Kj*8A sl/k#hpc%4!*\'\);5)jotBWJJcN9##_XGōqFb&:R l9"Fi#oZԌzۀq-45dEv*Ŵ$̈7#hBHCm1JSs#_1aNǗZ`"a GI&ѷ %B+ ij.)46F;A*:L1%Q98Ɉd__hL Qk D&}T+[4:p?$#/;up`:J2s-|D ;;p2cy,8 C@!hJ`9\ߵN1o(faҏt˸Cd<^ ([G9*'cLL>:8.FԄQp8Navw]HZc,0X0+Li _)#_A9LrB#_9 K#_%b}CyH۷c=$y޷)`4*!o\̴RçTds4R!׭2<%#!\D3<ː%m/3S#/<@}T0TT4w}<4X#h(1Fz$YÁXTo:Z| ~ ?e7n~w;+a?0Zk$E9Lv´ܦſʰWg#/ 4FYYsN? |q}ɺhj=IGf3T_k6ۧY羿z׎:#_v "^#/7pIۆNǒuLդPrM[5-" )i:){ptݎA1w^cdBZEN#/i~o\!qv"B>kobtqΌ )6ׄCAXIpA#/:v6{3w ~_N0рqN'p9(5n;A@:éP1mW>GC=iMzbe \YgR~)Vc h(7ST9:Hr8hgɃay̌C]jǝKTCœiq+Jq,RZŠ}t%s'9kqs*_@w&Buݶ8H44 T`1Hk$XیݑGQ?>d IK?㽜%/;lR+rQ`|z`J#/3w@Q*i@i8HPm5'-0I~")&{rIlL6=kJ#h?"J2󁀏.#/"ՎAG}НQ(n|vzblD_@V̀LFbyb=b=X#hn;{I;h$ƊպIp79$EMݦ7.†14M̧( +;#/!TB#hfd5@޽8L4nIa`5џ֔7#_D B"r.gT! uP0>^}w_OY͌bqEvgt;#h=#_5hWIoy$Yլ~ǬGAyӮ髏o't`V4%Py J9srÏ#hےSUp;VnjS=oNIRґGa 9I))+tJ`㇒4 sHϖw=cbjXV("Ocwcc4nPGmphI#/Y1cI )\bRWnpʜTi LKDG$\!~P 5J!D!@J4ؤs݊D<${ǮI{Kc#_DF5j4f>1! olPZ]Q`з$#_!鷷񟏹wWf+TetvH1v  /&#hrC2EPpkv3w i#/"0h:tyFN{BX@Jݐ{^{ox8z/Vf:"*'?"{88:>h|/'&dZ5Luя(Ft#̚36W6Tbl%K.Dcyֵ-p܇fDaVL3> 9yyM(Gmb))_[}DsO"{ rB33g³˽4p1KF"!G]J~yO`S qLIig%DAmhT'F|X>347ĻV-M&ma plX4:pMq q+xY@u0`sYȬT BaȪȾxnpV i^bMk`-DP: '{<Éߎi}":'#4^VojK;*X1h^A &0#hp3ǹӄ Իqw濁2b@{NÁ{=4+8(l A3CaCZpp hj07#/ߚm4yxD?*``ze .YpEĤ츈"ˍ"faB;(z2z&.ns2jO #/L<Z!&Nx;ofN^wlor~ k쎵:#LsPaV?< P#_NvRy?'i#_"Ho$@~3إ!ū)d8a`Кl"`uAUȕ?2wzOo>@~HU%xi&!C#/)Kv=?>2NWO^"/gaM?R2*B#/GahM #u! ̲N{䝑1w#_J`&kH g#* ad[e"bfK48}è4 ܾI ,LAL*nW:M#_1 PM ^ONÔh9+F9<R_ ) h6#h(*$=rh7 J鹶t$6 9d<6n/Kk@t.Æ~ H6ziQߥG4$B%(D*0)A8Q7O򸣼zmpd4pPpIcי<#hn#/VN,E.%MTI$73!jhaB9?֚~ư8/$.,LUhj:o^턎AYTJR$PCA/4,wGKl)ޕ=Hx7GȝŘa擸C"7RC` <3M™#/p=3SQ}XM<)ROǂ]ۆy;=G$T!>37,"}KP w>=9δy3:}Yl<=fV~!2apυٜwa͌|^.czifAc-.$Km+:/AC&{DS=nPρr2v oDYH:.`:O+c\/4hE4FTmeQD`'!i+Ldbl#_}H}E#h#hh3 pA{Jd\Hg Ơe#!R3Gt7v{No6q]Sq$t?2.4f.H˲ᣆXEI9BbdmԔ#_'wxp4AJ [1L2TafX3cDUU6@KOYGQcy8'4MLBv!bP\{[#_ℊީR 0VC#heTcMO K2alMc%#hqc6m#_M6)3NLwu8F6-B#hH ȗAhy啙5}狩-f#_FtEI䆣NŜ4P{߻)eAJb &Pу|@cHCMG^+˘+4 FV2#ce1ƨYA!4btJ7#38st:=G#hFuAx)3cm$K\` %lsԎcH)h00;{rLIU5KT- MDECL22Q1KQc\LןJwä4CXl3 ۬j$R,Zv9k,6gߎ7(c4I ]G#_"vN$c4:KU[Ӫb;'p1L>aՆ#_+Qiciٚ66??_A׿8x #_s1p#_Llz*].<@XDfc栭6a7UPLՏOyF#_N›[{޴9E(:ng9b#/ !@E#a4L,b`cC(mQ5˜ĚZ/%O&Zq<$bO8󃌅'0L)Ea $CQ@np,Zi gc(sh dUxҹ6**nA#_l ji2Uqjˈ jwk (=McXVl44UdcnGs53H}emU굚]L[my_Տ-L D׍/mv,ƈUPZ-Vt,uIUMk cӌ҈Ȱź7SQT|c@&$#_ 7lUEx3#ۯ;TP]->u?0dtBy9z;eft{d&5 ˆI1ǜD»jpF(DUBJpyFx5L==עl,9!፥sAPX3}QHOeZlȳXf0FM3A@1c,I ].j#_gnuR(h3_;YE\_ NeAL%˸PhB||6{~ޱ\Mo#_Gޓ2a%QIQ d7f[cչt{֓G0z֮.#5o>q9!Im#_ej*aqm#h bt{Q`vޑLam'`Oe5eziԯcڲcoam9CoR㋽ц^9Slo}q*DlJ7aՓBEiDI}-d*'ߘ LH4Fт˿AAHq998S&iB(h7ÿ,S#/@{/#/R% %Ns0ݢ2&n7QYJˏ29q9F#/"q<rsbJ##K"}%?(iU)A8 -R#/1ѫ2p8mȣQ-4\K3k]7KTm$,UI k@Gv`4#/d;#hrBqV-[*9<$s#/Pt:F)#Fh1*Ib&S0O,*Z:y!E壁.S!P&lEE R*P2 '% AҦ9"#/@?>9b0#/#iٲJȌLxj7)CNF U2*H"2#/!Ip$?mHdDe^n#h} #h4/#/w9Fd#\H(Ui[hafPHJ:mA6tY\Hm*EIrN Д3R-R$43BET}vEUCATJAM0P4ULQ@IQRE4A@Q4$#_ @%IHIJRPHҁ01 IAIDQP%2-@!!T#_#hEa#_!Q&6#NE2DA烄#/ۮ':$uHLDE6;ѢxS@I B(TJ#/./,UOܬ?6IYY$s\t#dR!1%Aޚ*&=@#d(Q N%`yu'ТRm=#h [<-Kxzma8'Ȍ`g5eZ&GQb`J -PW#/s #//.x} sɶ~=%"V _gP2&B/޲e#_?;~,śe9 }NK&D7o0挒n%ON0  4N=t2|[wwpanvB0{#_`VX d butl9p.K,rRY ?gr3րJUM9qR HB206-32VcYTd+d2եPCv]0KKCKϵ|H`F-1낵T*WRj ـj󊣜A`i, NZf銱I\+iq#_m'I$#_ J H)@D#/#hD >(dP@$V/R~Re^Ƙ=A&BjZC}i6JŧI!N׎QHH(gŅo6Hubf?\Lv;}?$ ۦ.zBRМ7Gw߱$jP"=N]1Y@9#h7kZ2p|R`R3cn#X@)a [5eHoO]*T)QU"dž5`A6a2#`#/{!R![4STZ#hvPUip_o#_G~)`[Ron-;|U3pp:1 g=uJV mV"(N`D$c_ lPgh~I`8hMtUH bχ~p%x;1Y$vI#~x7}y󃤿rjB0ӊf Vm1$`t(S.NT9d&ӝ,a-u6CGw^(4[ġ Ds*862)B*x.6}mJ$ā2GYC8.sݏd$0uP$@.H`6" 1&:`>&iNRHRHTK+I0F,L?#/Yûb=#/]ȩ!Yo!Py@L1LZbR MC#h QIBHzvSi.}#/l^<{ ӁT{zn4@ܟ'F(eο~2B!9 xô`2u,'>!DZ BBL&AQ n"?Ԧ@|&N\-w7O9;'!HORJBBA h3ʗ-#E$-DX1#hqX&M5 #h `#/"T).٦sFs<%S_ڎ0wBrQ9 1)*Pd%RI)*Jha "$Aֺ=T"Euҿ`50v_|.rfWIP,wP c㻌DAT>1}]x%1<!%B \ Tl`<`:"sƂ=HzT#h@"Ri $%D8#hi4A6>Twhh5ymO8e2cZ_fYL9f˞DYmtR%L5Tss".#_X%jƲihm?+2LaMݖ[|KROQ)NA: IO1ZMS#_{jIb@I?/"t@$#0qa$:`5n#/wEO#h)L#Պ? 0 z$ABWFID:P.j#/v A)0z0t-5DL7GV!jþ#hV;u[ևL "!k`w`ۧ?E`L#/#/xD/&00 $Dh$T5A̕>δI4eJpY@*!wpY[o!!#_h/], q1Eb&5p({DKRz_Em4{yӎV SXt!Y;z.aٌ(QN{b9];CsΡNC@!eFXt]bbn碱\M)&8NH#_nn܌Eg(6MP?ӓ+~X3==f4c#{|Ę"P/y0}<xGifeL}$X~#/DAK@'܏gQCU,n=͙&EH>cӅv`KShj&=i&.I39 nwa.vwgo)3+["l\zjl?M&"#_+g#Pq뙩z) W*)UW[ƮTIMbj\g'65^1qCXCNN#+OlQp̑R#_)C`#&MG0 $NȾ֯}4t4I9ٵ =#9uk +Ple$ [QySC&vBsH:zM9Z%BXy877cLj [8De]4qMԺ#/榇nL?՟ʔǜeћax|ѨŷR#РKSwtHp"e-r'qw7yA6:+}-/M>I`τބ֦9/i TUAkќCB\Yd4s dBQc[FSwۑ#hHY#/1{XfX`f{;=oPcqOq7RD ߀aM o/ߤxP"jXC7v\(-A`h9qO{{8|T:c@* *g~TSx#>Y߇$eJ"H}WI3kQ_#_RNݑrSo20za?#Ϣ( uY\pl.5GX6>u`@̋<4I[$YWP##D6FƓ>֎ ])cM%a 9%y/q>^y+&|\vFU##t{ȹܳkieFR7&XfH性ʙ&:7]^4TfoSCPш +.x{VHT4#h#_:2@"&A3&0G}ax]_Oyk 4dcěiݼR4n.m2S#/ ò#hȘչK˘B_#hX9mA?GX"><{a8u'1Z<ǟפI#/ "s#h#_]#_NTl7G9ݟNh@| %SD0 I!3X1 Eo6AOjЋ%_yh>t_?PE#_T) PP"#퐤D.*RʀMo=<[oS(Wĝ=w16$Lp܏/hv=`sܙ}mn>ZpU?/⧯vF67ѫ^|COd zTZDQ1Nz 3 UF3m"9)pRS~ۓ\%0$EGC*Ч"ՀigS\ `喗2KVaԀbFMY.e=BT=}s9^ъ,Df3kуt?T#_x: `APrZO02} v#`q4@++f&Dٜlr|U2R>#_h4q|q Ќ ;v60'DZ2}sƊ+ܜMH *2˝s&XP)p鰧8!hvJkt935Ià`g^hj6.(b\?OD$npn="1bFubF6(͢ kPOYۈLq~0'H;'aR}UAn433ƹ׻90d:2]I֦1#_Cc|6r "h/#/=r$$$*~?/>,^^c߶U9!,cJN QӶ#2P |<ַe#3a6s _5aO&hտ~a9/zUqZMQ.]%0Si4u$F@Ѡ RJ“*K(JC*#/zvGpGmU-O 5BHp_g/5u߭'B@z%ALQ0QD4ITLA$b$(9֔$!(?{֙Dj)?VMUUHULS@ASQ!EMU0RTI4T51%D@BLԧ^w:Қ*HR%)2*#h;R-mQN~`HC+vm+[cZzZ[ @0EBi2CsĔ>#_i\F>N_!+,Ѷ?V@iwˡ{`n 5BtQun75M aYfw<KA+uzuagP6@PR!$ĎbuLmݛQSS=4Dž&b=&dR#_i<Ԯ1 {eU`6pG#&X, (otRnt礢9ŭsjtޛs ͍;xf#/,(@Ha R[S%XiϒdNB;`-TbkBgfqX]iaJa;'{J@Mߖח}iiG]qگQn68f=:Zh8T5n1 kd0 q2O15SA5Sሜ&urr|i"6Θ>:9٪*X6.B53CGd5$@RLT´4LE/m 66Fɒ:"o>`[=t~#&#h#h_ip{(P,l<7..d+v9b1t-DJu1VՍhE1lcޗc^iim 1 {'7q{y/'#_j]NZq-*^dy͡ ^ڡ#h#9!8E E8q5T<0G6lF.U.n+#h#hb&g(rtUp䮟oet TTh!@缧%4Ī,Lŭ9͔l̲Fd[lDA.|M#_VX9y<8+Ucg gCU ,-FԋIh)eʖP tL1hh$7,d.8OmInٽ#n1ZP2`i]f]75#_;1Wfy̰4Fgx֖18r#_7UVeL@\(ݥb#_MĎxDʂY>DxMr1ldƒ5U$Ŏ',ͬ <\"똰#!Ʈ#_-]+rϤt46*3dB²$!́F\ϐyz ~΅{@B;I:&#Ulle #hh".E3qDOEcfL|:#_2ckp}\##/jqA"bi)޷%Ct\-SOR-O^)TPfNrF- p x[!q=zdtH4!vɱ,IĽ s#OI TBjTZ?MS1qhh&-~7pԉz{#/bQR#hZH #h#/(@`%YA#h "dd"#/{:Ҥ4 !8B?&>I߿bT49!LuaJa(5z".Xɻ`=<")@8#/ 6ͱ()S$0S )ߜ@]]+6BNz2VC*1F"3$H?U"]84ځHQR#_3"*%QE#/  "#/9 NY1|>ǸĶL>L.o:1&ժɪhJCa4RcQӏvc>"O q%9RQ@xfdSrj'%79xʉ0T w9ww:;JLnGd:C8\gd;|g#heXQ1*>x3ɻq͊| i #_HȡUaOkKrR#Fjgcnڅ>bdHxx^DLԭ&2]ZRh m($0"T#_*s~?ۏri'#/HvsGcY0Gw՚nG#sz? #/=C=gX_c>:]6Y,>Th?e)2ï'F SIkLQ-ɑu}!쁷04XEM%#_(P,0=zxyS@DnA&ԞSV#h#/L/.֥7J@=?hQ(<t-6sB(&e; #/m^:}ńXqR1=!:U$!,wKd8FU(nDi/c$8`+\M?ɑʡ-HX}4%ͪru]!B`bR#hiZFtU?WJڢ/2 6]JEGl;|"4&!4KB&NJдҘҡ1HH4CZ#//3 #hЛ:(:*uz!B(gB]X󀏰/bK!w4ϥe7g&#@\Z"HjPMoT8{~d)t ܒ-POG @+BRB0|ӻzeTH#_233>޳vb~݉?8*}0!ЀJ@(#h>KmnqA4@)2U LDAPU#_4$1$%$KK%J(RAU#/DM 4R @-*5P!BLJ JDCs/g,Mw;[bZp/ L8UAc j#h %ddG%MTE)r#_G ݳ''wh#h9vLM cErqIj1" 5=Zp&1R9Ft@3#_Ef-_1M<0NZ+<`ťEՇAx'SQAdT$PQ`h-0qՂ,m͛6w#_+i%gDZQTG&ɧ`)0$OF0BT10AQDEQ^l34LT4()HI:Ѣ@b`%c#*e%f#//jIcNa_ׯ,ѧ%ywLs_9eYRy#18?5iw&*1}Q",tp5IMTԼv2H`HAI'S'(tob2 P1̺ҟG.ոnapRO>qi뀘/v윎.QjsÑ4ꇖ8(jv:*?۷gV|)2 `bJv}Km&:qfVi ICxóՇ:=ʊ@c.}2@kFn1Ok~SΐuR>wMO+Zwmfnۃ3)Tl+Svwzv8TTk4#hLg_HEiSqjFj_k͕}b5"N3=Ȫ!|EGf9k~7`t+yo]sT-&{,Ysͮ;,tno[.]>]c;#nL\`(Ul#_7f'b`*ڧ8L#h*h|gj=;pL"*K /Y-+Yp9_pvj_kglmzË87G A&i)L~ue}0hVzt,{ވ'G M7 cP۝M#@ܹ1L(7iiek_쬚4s6H ^bz\ k%!Ψ&J8kSsc(OMʦKni@*|\m:U+*LGPa]9Nq%%!ū=bQjbW`vwq^aAz L.Q7gncͻVwh}VQJ]cd.]ͪF؇Ay5##YƘo=V.1Mbbb71;V>j쇜D?)^j e,6nqY=.7$#i`^cc4&Bc4o^4 Q9N*!k#ru3OjdyU/>x3QtP0~NwUg'1 Xw LYϜ|Puȷ;_v,qԜTOnxG Zb1Bt ;/E;JP**dofʕ#he*9ABI3u֑H#_ 1!|Cz]92L#U'of鶈z[eG>CP;ɳ@Bd=2#_8s]JYXM͉^oDp,1e3"a*Dq}=)(6Ϭ#hBvof:***Pt'X]f)z0"+8xv:e˸i.p&z't޴]ng,ްs}+e ](u[7ɧf6X{w}ZM߹sR'hHLK~^{gYgx:[#hta0[@[}`fefnxvK~SX,ʉvF T\UAn9I-G["y=S|3G=X%~y9#"$iʧL=nUw&;>S+|]&U+1TiuF$-$G; HelN}=`{ b~||1a#fH"#/B/9kb;`Cqn۞rDg`_.{;NN)i{vR[_w{K;rCP9j*_e򖼹N.˿Km|? a꘺x#0'NH)A6ŏE#_\)T:Y7bFte8,tLsa;nͣ4!*Ķ|PHj,uA$n`8(='Lm“ӌ7Yqtm1#hp8%b1;4 l(wj^R㿢CF!=({qCԃ%vۀiOIA<9N1;c t#_m3O=luIċ/ݜ}DPaDHQ v$s16]9N4sÓnHBZR8^1T2Kf}߁ 'P`Q #/y#_a߯q&:1rJvGuj86fN&H#/D'kלֈ3}wSt]d!v<.̝;j6eGP%\k-p[nV0q#/cvc)LNT :Zgc&f;>(C(#/b#hֵusuc$ȇjtN@Kzijʴ7x^'q'd'w'Ï%z;6UqfD\{}bUnmWP&)q{:9?gb&ad I'?{7ϭǗt$3 &$#h-90,f}7!H)ǰugPxc;rsvaRTIg$&; d܊_|mbkrrQ #_6p4EoX9(Cݒ1"B} =OSݏLvw:CU_Sv68f|i(,2an/M84c)Jj&we\´r4 C|Yش>3/ˎ@]dl! 8lae%he{͌IUˣzlܮnreVvE#Sf#h2]v5(#_`#hQʊ8IZ&ĥ%q4<NJ>JJ:DBh=>p+'xCQ  qK '0!3 `FNtcbqÊt@%-4[(#_uCO^zбc^X΀8DNtC~L HV<\>z1K@v#Ŧb(>y#hi#hZU?Q2TJ@32$1'tkNh`l\^DQEƬ"o`vnpM±;#_뉱A$Lޕ:##hÉ4PU8N9ArHi:n`Ӥmn<f0gq5L6BK:m'" `CnJa}j8v>ss^h#o AQ60Z`b*JsTQ%LZ1VIiµ]'~K#h#_jPQA,∡)#hCqHPq6E6( w8wy8Λđ63c{GNV1le!0j8mj,XR|={hk-8rP퇺9O6(.MK1clQPDb08:s3DQWydw8]) J4O<޸!{'XH.-cRqE5S>7x!l\fek`s}pٙ I] Ho,XsaEfxcwjDN ?A100`Xp6ޠ" teXGalt!?A3WX#_Aur4NdY\s779)z+ <ySMj]С {hJb`1&#_ђ"gq)Wžިهި(]ex"ֹ1zhJġWGϢC^2侔u#/DPJ ŰR߼PWe=ŤQ1g}Yx#/rNP>} kP؊l^OZRhYK#lM*q^vh*A#I'01'=u{X|>Cdɒ}'S"õK՘`/eems8HS&z C>`b"(5|=Xu ;#/蘍<wQ9kwPG{ٺ>AgRGnE( /g(i&f"HGX4S KL 1D$%1#_+lM j!"T*F(#hh(h&h%$bBm%-@S~c9R8a҉` @_P:ف@(#hbh*#h)(R"G{^*jd"#h[b #/RXͲPM*j`$#_9ɍ~^oF>!F9$:$lp8l 豾H*&7HVG9؅erW-z45ԋ2%3#_Ksז$4JiSCM)g>sD@C8 AUJ>KC^Wv3TE<3#h(y#hMDK7@hI&3|tE\JԘ#_#/›Oޏvw 8kcƊ$g6TO`;#_|b3X ʫX{qGr_Kl'h@|sLMad{+=@XDU!]:H܃Cq 4!RjFa\#h#h03#ϱ>Ml>ѵ`cIee"r#_?)l{_@*]D<[ף+sbĝ̳ؑ }72F./tJB#_h*$3;xN(LqHjАP$` 4h! 2AF(U.x@t&e~~ hŠIm#@,J@Ԕ%To7;#_xaw.Y |Ir0=SI8߶5pɬ6YRe% '(@yYOv"`_YPDU4SIF*1ʖ$׏ӧzHxR5> $L#_9MN&6RdɒmRd~y,M~kkswɹ6l"~o{Y1#S n"Qx#/`:TRd_5᯾Ia"1TqMqF"7vA0]A(PX'PF5/-<pQLnCm0.* hrEU֧IN82vy>3]6x@ݭbBt:zNfPJނ#,0BԐd'HݮNk2@@h0&[w&upFx-'h5nXB$(jp6t#h0QaՊ 5c|kN8%f1VfC׼P&秚-PP;C@,2(1X#/xhi,tiً2q\u'ȅv@^Mv|-ELgO0D+?Rj)XLiYָG#`v̜g|sv\:-BZg85|<މN@Qk)ᣘ) I-PNWYH]v3n&.QS\V U+dr\c`ss$zYD #_q-[<1t{{e3"#h#_IH;UXdfӄd&0u6MNKRсx[pCL&)CUI0:cv?)IrW0Z5.5߀miJGAwAlB#_XdzI[V5s-94hQ U`4VCeh.N'wjq2żhehxMo(m7h5%Bdx1EWW+#N5j#eKHωi4dI $#_˥]f5\&:8(dYGu333!;3aꘌ O45Igi,}UΗHӁA73&+GU$֊1̣m1iS[5&Ta8n3#8wH̱SWIUJCX-!Nݒs<4 PC*2d݈IK)G֍0Bιݱ at)i9uTEbt2Xpq+\i2bAC?۾rItX۩SL31jQb.]we국2-’4,` #} 0miMhd P^W*v\IPhȵu%5."XT\1\c4\ P˩#tETG<.x]NUb^QP !jxc\\ɴ$=,ˢ1:gUwb&uXaMq8Gp$peX8LH5qIPp;6z0aC u~|.ܯBpn w:bSRb3Cf#fv`:\/Ii-wF$3hӻhFlfp5-qK&rwΛD^. X &"寵d&oFB;jjdɔ箎lOb@+āҔ ?p’#/Ta>{zH#_DHL9C:$NϷUP`iz܀,4$0GW)hkt(IPYp#_&#/"??4;TBHB3zd4_ڦ&3A*0#hI=e#_$EgZBi88f9H TR6H7S#/qkIPd&p#h)" R'4dIF@vE@1 F)0LmrޝC̐-ŕϘKys0J+ۉ:~luEIi۞$#_|dz@;8H3H~kl$U@+\z\)l8cDu 5)ա#n*b(@l!H#A0݊ayA*rxcuCÈ!d0D~ (J!BwʹLA0a]$#NmT<T0041^#hSxc/SpW;5&T*e005miP植&]DOcҗ,*Ld2+f ʏE}0b!$TF܍kBX|ظHRO_#)Ű04Ŝ ""ag Lnm%{*;)7im]_9N2{y?|P7ZvAQJGqx-آ_LgQ=o I/V{_'E?Ii;t}PHP C7vp8]` ,CCJhGD((#/i%C)B$H*CbG{*ŔE4!聉րqDˀ!) Ԁ%XOzðz!22DSl"4"ҋH.T4 @4R#/2QJGH@#_@#/Hsu;:6L%yXN*x/fCaOB=;\$H]Xa߇`w=?"JoqRLfq<C =`HSiQZQ FF6bTgXʰ FDTpDDMǠ.'`陻'`=H|F`w^iFD4OiE9x.#hʧ9"M# m֝A޳ *^_ؠbNPpa7Ruih۲HVXG6'ѰTiJ1*|(rK͆UEݑLzLTzG#_5ƣC셜)h @ܵ 䥵F0#u̙eƓ(-#&mٌF$`\NƎƈF#K$c$Uc<7j];=G:\8Ľ̙I.0h))eX'56*t8nu[bŷ4`tR,(-#/62P0cL.v=H2Vdb< '{r%ȯD=C#/وG%M+Ll4.+!w0}EH%-%zdET٦mFZ,rT27aH0{~ph4 TH4UIQ@IMMT_PI T(Q?t=J S#_#h@h&h#hTD#_o2#/!(fLq2GA84Z|.s|2#/P]ɠpCD1>Bo՘l۳y!$ rbj?Oysvw+ۇ#/ SЃ_LP~i/xK=5ʘzqd{G%pV^L'g8 @Ѷ S2]/je2]F-e.X.2vr 6^l`SJ -*4aw8$KHmhM"%!BEK `{_t.c à CdBFCĬ$ĄA! CA4Ҕ2IT"JDPP<#Æ \`֩bSw0%7~<zTa踃!>r9aH!xFxy(HROAnC(Ftպfʂ\B(XN654m0t6oXm"*b^$sVpe>.+EҔ-乜#hWxFU|%PM4sƲ͍ffv5诤#_6!T.TY'xlx X.!sMХh"$z!Y;&svGP#0`#h0'T宇gž|,"P#/gC9[ "Ȏ"&~fg3-#hA5fנP3֔n% >ȯ2)$(b'ꮕTU\):4y7ݍ2AKZ70{A)*nB^.>W|#/Û{Ê6fa=]hCTQJ4)sãw|}}/]QPj?>?Cw̮l#_'dp0zɎ$D #h]Y\NO/A9%,k[#/w\Y TQ;(n$#_ ihfSE/>(ӊ1zT/b}#i# PUpQbb!fs]TCEKX0zY!،Fjh.O+Jrs“H#hJ#h(Dh*8K Ri5RHsI(N䔿9@514^I #Jw*r1O3 Zϣ: Q6A&aզd#/q Bx@)#hd)(JE)!B`" DRMn#/G=>#h*Nl{Eh#hJ("#hJ*ZB!`$*iHzJO90QPLS+@QC@DACT$2(L*$Lo֒ *#JBOHjB!@#l_ ZF#T!*萄O̯E~QClMRTI{Q~gB!$KJ# P% 01JPQs+*A3T{=MBw&U߱Q V'|J 3N`cܼl6p5F0-:&!5| --8^Y=2 _Hp,:۪Pw3%9#/v7Z#/ PaK| <#/"#/}];"rUƒ2`!:N.p99pɪ*3$P(H0T0Y3@ALJZ$ps#hqԔ #h(#/#/@1 yQ""iVS^'T0J0%R VuMmZSi 􇶽IoYYHDARti@S֜xHjW pyXy.T{]^u!eDL֓LՐ94A%|znZ ]Ρ?IE7\RXCh]d _hR` CNY7;znx¾S{X*Q*!U)ȉ$/zT~&z:Zz>0f)$2E4R-S& h3445m1Ni1EY"1JV"IH(#hZZJ)*iA)IT~+ Y([JG(BMpAJ%ŋ?E^NJ#/Ӗ=FcCd;We8qEN3 {O=>!V2#h~EB4"'@If!B#hFh)Qm]c66j1'FLkP8ꏲrhRQ}&fQ6 Jg͂P*ȆXQT|2b]u4#_X 8=2>;//k'~Y|Ǭ=~;[# ǧS:P)4[ضXAqF3YUTqL@>N&DM bC(v a NT@ґ-iSaNP6CTD4µ%#_m"R#h$ "c a6z8È|Cy#_I$}r!~74 ,Ou@oN;H| u~riFMpO$A7!UlvO2Dۊ8Uy#_'ec )77}bKԸ[#/}YD(Ab®3~&rs(? Ԇ?V37o='B:Ez)TNC0)CP:ށU,d:n̋)sM`PQM #hsŗT]A;;>(#/O&ی'##/sI$X?$UwZۿV%_Eފo*)/w#/fh1o1&B˨hm0'A,}zڱPmzG#/E䐓cb`oxI9?WXӶ[JLppH䄑 ЭKJێͥI'm܌$RDC 1C!9G1$)^d?GZg#_fa`+qWpkx0bҘ|mD8LRI9Tk0!Ș~ P5>Iӄ̛a<ǡV ܡ`#hbÑV*Zba f3fsg%d?_x3`Ղ2}%IhWl<: I&=gE孍bw<cJ`2'GGaHvJ2!(c+'GƝi8p9O I 9}m#_1@{ @8#_4?RyA#hËOݓ|h! -$'xYE_'SKZAd!Cݽs#h$^Gy&k]>f:O5K'\eB`.yEB,0Ga $IA15$@i?(k181_#/f6Dց SwZΠNNn(>D9 Qht}Qć>#/hz< 5#/:#_mi#_F SI d%Cz#/,ayCTȯM-ou1ѝ_u*#/X~'GgRViHg"6޵q_gjHlNP$2C2xEAz?43?ZSٍ+>-L\cjg#h3Z4<1AE%g=x DQl^L6HZB|ҌoպMaGQfXd#&BR6:ڳn~ZS]TԐQgKĥ̥m[ϛJt&#_Q!TJ|ibc4#hƸ1x)#_JF#_ &&ou^M6/X-JhkOyȇ0Xl #hۜ,' jņ=r:CZNynHtRR7 kf2 \$TsN?fK/9Jd[%5@;~a[#h-0Xg|qoI\8lU Q:zCvc92PJ)aZIݸXI'D4!\j*#hJX <^t[+YٺvBC/7>,J҄q=%'v|g/$V5kvD4=#h=&p[Bvtbί۲n'LlE44J򴑈p66t7~\OtHP3w#jB P.{qyPA"P15Q!H+,0B6j{ޤw18c*/Hz@:H 7|GЇ)񖜁 6`ѯI̯ggPQ Fz/zau;"UӡkOd))(j#hfNN("΢`b#/#/ZV!#hH>(e8p@B#_#/A8~I0 CC/!6G=9Z0#hHf7@j(#_q x[&#/F#/!8N/>_x5La϶e#>吣oϥ̔u59˟o5YCvU3=a#_rS,bŠ8Ai/*hAn݈z1 Y:p#_SiO&ڈԸa,| y#vdHتЖPk0nؑW$'Xɀ0BL}aj&׭k-DYQtKQg_-&<_gv/^׃o'!eDJ`!fDK~m!ӦUP[d; |9g0` 4 D#/_Ei2KgTr#_'xka/|s0H>H#/*g93i?U^#_JWԁ޽ϛ=UQOe0xy+R@_#hTF aB#_=#BhJWd!@XDfA& 3i~$=xB:?#h)EL5DQ#_!Q!CQ!_*4PDMlߗ֧}~i90"L@}|OgFҒel{ab:n@. ^BTPjۇc{x#_#_ÿsL?؂/Gufҏe)swTb+؁? s#R1;z/C~`t;@ݑ‚cǷGn󬽐(6ulN;Q.9B=O'B=,|L/m9xT; G9PtDc齥΋'F<|6Խ%p#h1i)[= FJ7&׳ݓgu*IU֕.$ڏRZJqTE3or9SCnttg;h%c(# 6Zv 䈙7J#X1Þ9:7 6@"1 b>T@(Ix4;>謹lɵ^^#_rØSPKJ?`ޝ-J#_#_ >/G*`: wܪlR3OR\>(@?~/473OdɑB`I``݇ǧ_솠Z#_ "(H? +#<== diff --git a/wscript b/wscript new file mode 100644 index 0000000..13167ce --- /dev/null +++ b/wscript @@ -0,0 +1,268 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, mittorn, 2018 + +from __future__ import print_function +from waflib import Logs, Context, Configure +import sys +import os + +VERSION = '1.51' +APPNAME = 'Paranoia2' +top = '.' + +Context.Context.line_just = 55 # should fit for everything on 80x26 + +@Configure.conf +def get_taskgen_count(self): + try: idx = self.tg_idx_count + except: idx = 0 # don't set tg_idx_count to not increase counter + return idx + +def options(opt): + grp = opt.add_option_group('Common options') + + grp.add_option('-T', '--build-type', action='store', dest='BUILD_TYPE', default = None, + help = 'build type: debug, release or none(custom flags)') + + grp.add_option('-8', '--64bits', action = 'store_true', dest = 'ALLOW64', default = False, + help = 'allow targetting 64-bit engine(Linux/Windows/OSX x86 only) [default: %default]') + + grp.add_option('--enable-lto', action = 'store_true', dest = 'LTO', default = False, + help = 'enable Link Time Optimization [default: %default]') + + grp.add_option('--enable-poly-opt', action = 'store_true', dest = 'POLLY', default = False, + help = 'enable polyhedral optimization if possible [default: %default]') + + grp.add_option('--enable-magx', action = 'store_true', dest = 'MAGX', default = False, + help = 'enable targetting for MotoMAGX phones [default: %default]') + + opt.load('xcompile compiler_cxx compiler_c clang_compilation_database strip_on_install') + + if sys.platform == 'win32': + opt.load('msvc msdev msvs') + + opt.load('reconfigure subproject') + opt.add_subproject(["cl_dll", "dlls"]) + +def configure(conf): + # Configuration + conf.env.GAMEDIR = 'base' # it was base or p2 or paranoia2??? + conf.env.CLIENT_DIR = 'bin' + conf.env.SERVER_DIR = 'bin' + conf.env.SERVER_NAME = 'spirit' + conf.env.PREFIX = '' + + conf.load('fwgslib reconfigure') + + enforce_pic = True # modern defaults + valid_build_types = ['fastnative', 'fast', 'release', 'debug', 'nooptimize', 'sanitize', 'none'] + conf.load('fwgslib reconfigure') + conf.start_msg('Build type') + if conf.options.BUILD_TYPE == None: + conf.end_msg('not set', color='RED') + conf.fatal('Please set a build type, for example "-T release"') + elif not conf.options.BUILD_TYPE in valid_build_types: + conf.end_msg(conf.options.BUILD_TYPE, color='RED') + conf.fatal('Invalid build type. Valid are: %s' % ', '.join(valid_build_types)) + conf.end_msg(conf.options.BUILD_TYPE) + + # -march=native should not be used + if conf.options.BUILD_TYPE == 'fast': + Logs.warn('WARNING: \'fast\' build type should not be used in release builds') + + # Force XP compability, all build targets should add + # subsystem=bld.env.MSVC_SUBSYSTEM + # TODO: wrapper around bld.stlib, bld.shlib and so on? + conf.env.MSVC_SUBSYSTEM = 'WINDOWS,5.01' + conf.env.MSVC_TARGETS = ['x86'] # explicitly request x86 target for MSVC + if sys.platform == 'win32': + conf.load('msvc msdev') + conf.load('xcompile compiler_c compiler_cxx strip_on_install') + + try: + conf.env.CC_VERSION[0] + except IndexError: + conf.env.CC_VERSION = (0, ) + + if conf.env.DEST_OS == 'android': + conf.options.GOLDSRC = False + conf.env.SERVER_NAME = 'server' # can't be any other name, until specified + + conf.env.MAGX = conf.options.MAGX + if conf.options.MAGX: + enforce_pic = False + + if enforce_pic: + # Every static library must have fPIC + if conf.env.DEST_OS != 'win32' and '-fPIC' in conf.env.CFLAGS_cshlib: + conf.env.append_unique('CFLAGS_cstlib', '-fPIC') + conf.env.append_unique('CXXFLAGS_cxxstlib', '-fPIC') + else: + conf.env.CFLAGS_cshlib.remove('-fPIC') + conf.env.CXXFLAGS_cxxshlib.remove('-fPIC') + conf.env.CFLAGS_MACBUNDLE.remove('-fPIC') + conf.env.CXXFLAGS_MACBUNDLE.remove('-fPIC') + + # We restrict 64-bit builds ONLY for Win/Linux/OSX running on Intel architecture + # Because compatibility with original GoldSrc + if conf.env.DEST_OS in ['win32', 'linux', 'darwin'] and conf.env.DEST_CPU in ['x86_64']: + conf.env.BIT32_ALLOW64 = conf.options.ALLOW64 + if not conf.env.BIT32_ALLOW64: + Logs.info('WARNING: will build engine for 32-bit target') + else: + conf.env.BIT32_ALLOW64 = True + conf.env.BIT32_MANDATORY = not conf.env.BIT32_ALLOW64 + conf.load('force_32bit library_naming') + + linker_flags = { + 'common': { + 'msvc': ['/DEBUG'], # always create PDB, doesn't affect result binaries + 'gcc': ['-Wl,--no-undefined'] + }, + 'sanitize': { + 'clang': ['-fsanitize=undefined', '-fsanitize=address'], + 'gcc': ['-fsanitize=undefined', '-fsanitize=address'], + } + } + + compiler_c_cxx_flags = { + 'common': { + # disable thread-safe local static initialization for C++11 code, as it cause crashes on Windows XP + 'msvc': ['/D_USING_V110_SDK71_', '/Zi', '/FS', '/Zc:threadSafeInit-', '/MT'], + 'clang': ['-g', '-gdwarf-2', '-fvisibility=hidden'], + 'gcc': ['-g'] + }, + 'fast': { + 'msvc': ['/O2', '/Oy'], + 'gcc': { + '3': ['-O3', '-Os', '-funsafe-math-optimizations', '-fomit-frame-pointer'], + 'default': ['-Ofast', '-funsafe-math-optimizations', '-funsafe-loop-optimizations', '-fomit-frame-pointer'] + }, + 'clang': ['-Ofast'], + 'default': ['-O3'] + }, + 'fastnative': { + 'msvc': ['/O2', '/Oy'], + 'gcc': ['-Ofast', '-march=native', '-funsafe-math-optimizations', '-funsafe-loop-optimizations', '-fomit-frame-pointer'], + 'clang': ['-Ofast', '-march=native'], + 'default': ['-O3'] + }, + 'release': { + 'msvc': ['/O2'], + 'default': ['-O3'] + }, + 'debug': { + 'msvc': ['/O1'], + 'gcc': ['-Og'], + 'default': ['-O1'] + }, + 'sanitize': { + 'msvc': ['/Od', '/RTC1'], + 'gcc': ['-Og', '-fsanitize=undefined', '-fsanitize=address'], + 'clang': ['-O0', '-fsanitize=undefined', '-fsanitize=address'], + 'default': ['-O0'] + }, + 'nooptimize': { + 'msvc': ['/Od'], + 'default': ['-O0'] + } + } + + compiler_optional_flags = [ + '-fdiagnostics-color=always', + '-Werror=return-type', + '-Werror=parentheses', + '-Werror=vla', + '-Werror=tautological-compare', + '-Werror=duplicated-cond', + '-Werror=bool-compare', + '-Werror=bool-operation', + '-Wstrict-aliasing', + ] + + c_compiler_optional_flags = [ + '-Werror=implicit-function-declaration', + '-Werror=int-conversion', + '-Werror=implicit-int', + '-Werror=declaration-after-statement' + ] + + linkflags = conf.get_flags_by_type(linker_flags, conf.options.BUILD_TYPE, conf.env.COMPILER_CC, conf.env.CC_VERSION[0]) + cflags = conf.get_flags_by_type(compiler_c_cxx_flags, conf.options.BUILD_TYPE, conf.env.COMPILER_CC, conf.env.CC_VERSION[0]) + + # Here we don't differentiate C or C++ flags + if conf.options.LTO: + lto_cflags = { + 'msvc': ['/GL'], + 'gcc': ['-flto'], + 'clang': ['-flto'] + } + + lto_linkflags = { + 'msvc': ['/LTCG'], + 'gcc': ['-flto'], + 'clang': ['-flto'] + } + cflags += conf.get_flags_by_compiler(lto_cflags, conf.env.COMPILER_CC) + linkflags += conf.get_flags_by_compiler(lto_linkflags, conf.env.COMPILER_CC) + + if conf.options.POLLY: + polly_cflags = { + 'gcc': ['-fgraphite-identity'], + 'clang': ['-mllvm', '-polly'] + # msvc sosat :( + } + + cflags += conf.get_flags_by_compiler(polly_cflags, conf.env.COMPILER_CC) + + # And here C++ flags starts to be treated separately + cxxflags = list(cflags) + if conf.env.COMPILER_CC != 'msvc': + conf.check_cc(cflags=cflags, msg= 'Checking for required C flags') + conf.check_cxx(cxxflags=cflags, msg= 'Checking for required C++ flags') + + cflags += conf.filter_cflags(compiler_optional_flags + c_compiler_optional_flags, cflags) + cxxflags += conf.filter_cxxflags(compiler_optional_flags, cflags) + + conf.env.append_unique('CFLAGS', cflags) + conf.env.append_unique('CXXFLAGS', cxxflags) + conf.env.append_unique('LINKFLAGS', linkflags) + + # check if we can use C99 tgmath + if conf.check_cc(header_name='tgmath.h', mandatory=False): + tgmath_usable = conf.check_cc(fragment='''#include + int main(void){ return (int)sin(2.0f); }''', + msg='Checking if tgmath.h is usable', mandatory=False) + conf.define_cond('HAVE_TGMATH_H', tgmath_usable) + else: + conf.undefine('HAVE_TGMATH_H') + cmath_usable = conf.check_cxx(fragment='''#include + int main(void){ return (int)sqrt(2.0f); }''', + msg='Checking if cmath is usable', mandatory = False) + conf.define_cond('HAVE_CMATH', cmath_usable) + + if conf.env.COMPILER_CC == 'msvc': + conf.define('_CRT_SECURE_NO_WARNINGS', 1) + conf.define('_CRT_NONSTDC_NO_DEPRECATE', 1) + elif conf.env.COMPILER_CC == 'owcc': + pass + else: + conf.env.append_unique('DEFINES', ['stricmp=strcasecmp', 'strnicmp=strncasecmp', '_snprintf=snprintf', '_vsnprintf=vsnprintf', '_LINUX', 'LINUX']) + conf.env.append_unique('CXXFLAGS', ['-Wno-invalid-offsetof', '-fno-rtti', '-fno-exceptions']) + + # strip lib from pattern + if conf.env.DEST_OS in ['linux', 'darwin']: + if conf.env.cshlib_PATTERN.startswith('lib'): + conf.env.cshlib_PATTERN = conf.env.cshlib_PATTERN[3:] + if conf.env.cxxshlib_PATTERN.startswith('lib'): + conf.env.cxxshlib_PATTERN = conf.env.cxxshlib_PATTERN[3:] + + conf.define('CLIENT_WEAPONS', '1') + conf.add_subproject(["cl_dll", "dlls"]) + +def build(bld): + bld.add_subproject(["cl_dll", "dlls"]) + + +