From 9ba31f9ed24a8516bcc7f9667858d24dee55e86b Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 1 Jun 2019 20:51:23 +0300 Subject: [PATCH] Add waf buildscript, a reference waf build, that can be copied to any FWGS project, make env names for subproject more complex to avoid collision, add subproject test --- .gitignore | 4 + build-waf.sh | 10 ++ scripts/waifulib/subproject.py | 49 +++++----- tests/subdirs/foo/wscript | 22 +++++ tests/subdirs/wscript | 21 ++++ tests/wscript | 15 +++ waf | 169 +++++++++++++++++++++++++++++++++ wscript | 25 +++++ 8 files changed, 293 insertions(+), 22 deletions(-) create mode 100644 .gitignore create mode 100644 build-waf.sh create mode 100644 tests/subdirs/foo/wscript create mode 100644 tests/subdirs/wscript create mode 100644 tests/wscript create mode 100644 waf create mode 100644 wscript diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e234f6f --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build/* +.waf* +.lock* +*.pyc diff --git a/build-waf.sh b/build-waf.sh new file mode 100644 index 0000000..74670bc --- /dev/null +++ b/build-waf.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +TOOLS="msvc,clang_compilation_database" +PRELUDE=$'\tsys.path.insert(0, \'scripts/waifulib\')' + +pushd wafsrc +./waf-light "--tools=$TOOLS" "--prelude=$PRELUDE" +mv waf ../ +popd + diff --git a/scripts/waifulib/subproject.py b/scripts/waifulib/subproject.py index 270ff3e..10fec31 100644 --- a/scripts/waifulib/subproject.py +++ b/scripts/waifulib/subproject.py @@ -7,10 +7,13 @@ Subproject tool Helps you have standalone environment for each subproject(subdirectory) -Usage:: +Usage: + def options(opt): + opt.load('subproject') + def configure(conf): conf.add_subproject('folder1 folder2') - + def build(bld): bld.add_subproject('folder1 folder2') ''' @@ -22,19 +25,20 @@ DEPTH = '' def depth_push(path): global DEPTH - + DEPTH = os.path.join(DEPTH, path) # print DEPTH def depth_pop(): global DEPTH - + DEPTH = os.path.dirname(DEPTH) # print DEPTH -def depth(): +def get_name_by_depth(): global DEPTH - return DEPTH + + return DEPTH.replace(os.sep, '_') def opt(f): """ @@ -49,12 +53,12 @@ def opt(f): @opt def add_subproject(ctx, names): names_lst = Utils.to_list(names) - + for name in names_lst: depth_push(name) - - wscript_path = os.path.join(depth(), 'wscript') - + + wscript_path = os.path.join(DEPTH, 'wscript') + if not os.path.isfile(wscript_path): # HACKHACK: this way we get warning message right in the help # so this just becomes more noticeable @@ -66,8 +70,8 @@ def add_subproject(ctx, names): def options(opt): grp = opt.add_option_group('Subproject options') - - grp.add_option('-S', '--skip-subprojects', action='store', dest = 'SKIP_SUBDIRS', default=None, + + grp.add_option('-S', '--skip-subprojects', action='store', dest = 'SKIP_SUBDIRS', default=None, help = 'don\'t recurse into specified subprojects. Use only directory name.') def get_subproject_env(ctx, path, log=False): @@ -90,28 +94,26 @@ def get_subproject_env(ctx, path, log=False): if log: Logs.pprint('YELLOW', 'env: changed to default env') raise IndexError('top env') - -def configure(conf): - if conf.options.SKIP_SUBDIRS: - conf.env.IGNORED_SUBDIRS = conf.options.SKIP_SUBDIRS.split(',') - @Configure.conf def add_subproject(ctx, names): names_lst = Utils.to_list(names) if isinstance(ctx, Configure.ConfigurationContext): + if not ctx.env.IGNORED_SUBDIRS and ctx.options.SKIP_SUBDIRS: + ctx.env.IGNORED_SUBDIRS = ctx.options.SKIP_SUBDIRS.split(',') + for name in names_lst: depth_push(name) if name in ctx.env.IGNORED_SUBDIRS: - ctx.msg(msg='--X %s' % depth(), result='ignored', color='YELLOW') + ctx.msg(msg='--X %s' % DEPTH, result='ignored', color='YELLOW') depth_pop() continue saveenv = ctx.env - ctx.setenv(name, ctx.env) # derive new env from previous + ctx.setenv(get_name_by_depth(), ctx.env) # derive new env from previous ctx.env.ENVNAME = name - ctx.msg(msg='--> %s' % depth(), result='in progress', color='BLUE') + ctx.msg(msg='--> %s' % DEPTH, result='in progress', color='BLUE') ctx.recurse(name) - ctx.msg(msg='<-- %s' % depth(), result='done', color='BLUE') + ctx.msg(msg='<-- %s' % DEPTH, result='done', color='BLUE') ctx.setenv('') # save env changes ctx.env = saveenv # but use previous depth_pop() @@ -119,9 +121,12 @@ def add_subproject(ctx, names): if not ctx.all_envs: ctx.load_envs() for name in names_lst: + depth_push(name) if name in ctx.env.IGNORED_SUBDIRS: + depth_pop() continue saveenv = ctx.env - ctx.env = ctx.all_envs[name] + ctx.env = ctx.all_envs[get_name_by_depth()] ctx.recurse(name) ctx.env = saveenv + depth_pop() diff --git a/tests/subdirs/foo/wscript b/tests/subdirs/foo/wscript new file mode 100644 index 0000000..563ddde --- /dev/null +++ b/tests/subdirs/foo/wscript @@ -0,0 +1,22 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, 2019 + +def options(opt): + opt.add_option('--foo_test', action='store_true', default=True, dest='foo_test') + +def configure(conf): + conf.env.SUBDIRS_FOO = 'foo' + + # check options() was called + if not conf.options.foo_test: + raise Exception('TEST FAILED') + + # check if we really derived environment + if conf.env.SUBDIRS_ROOT != 'meow': + raise Exception('TEST FAILED') + +def build(bld): + # check if environment was derived correctly + if bld.env.SUBDIRS_ROOT != 'meow': + raise Exception('TEST FAILED') diff --git a/tests/subdirs/wscript b/tests/subdirs/wscript new file mode 100644 index 0000000..9fea910 --- /dev/null +++ b/tests/subdirs/wscript @@ -0,0 +1,21 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, 2019 + +def options(opt): + opt.add_subproject('foo') + +def configure(conf): + conf.env.SUBDIRS_ROOT = 'meow' + conf.add_subproject('foo') + + # check that we're still using our enviroment + if 'SUBDIRS_FOO' in conf.env: + raise Exception('TEST FAILED') + +def build(bld): + bld.add_subproject('foo') + + # check that 'foo' env isn't derived + if 'SUBDIRS_FOO' in bld.env: + raise Exception('TEST FAILED') diff --git a/tests/wscript b/tests/wscript new file mode 100644 index 0000000..e77ca8d --- /dev/null +++ b/tests/wscript @@ -0,0 +1,15 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, 2019 + +def options(opt): + opt.add_subproject('subdirs') + pass + +def configure(conf): + conf.add_subproject('subdirs') + pass + +def build(bld): + bld.add_subproject('subdirs') + pass diff --git a/waf b/waf new file mode 100644 index 0000000..ea295b0 --- /dev/null +++ b/waf @@ -0,0 +1,169 @@ +#!/usr/bin/env python +# encoding: latin-1 +# Thomas Nagy, 2005-2018 +# +""" +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +""" + +import os, sys, inspect + +VERSION="2.0.16" +REVISION="56e47b0cb0abcf8b1722646667adbd2f" +GIT="e902e7a5059a378fd1b966275c1fb4b659429476" +INSTALL='' +C1='#.' +C2='#,' +C3='#+' +cwd = os.getcwd() +join = os.path.join + + +WAF='waf' +def b(x): + return x +if sys.hexversion>0x300000f: + 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 + 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__': + sys.path.insert(0, 'scripts/waifulib') + from waflib import Scripting + Scripting.waf_entry_point(cwd, VERSION, wafdir) + +#==> +#BZh91AY&SY ypGe#, 0X0E(b }#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+w6Ն¨îڪ#,}m;S [m:],Hlwۻ2wgV={obC:֔;ڻB{뽶Sî4gW׻|4Wx#,^=#+#+{#+#+Nhﭠm0t]l 6;:]#+wkZ:Ph7l#+4i+(UJ#+/{TRD#+#+*!C"/ǵ{7:;׻[\l뒕GlRuW;dw{|{N<7s{Y>}\ݾۼv^N\zhtz;!RBž4owy^绣Gv`3kUS@BPH(Gt 4Uo:ǽz5)}]뛷C 2#,]`7=Π:ܸ;^Nv*ZKP3g/=omimmqWv{ʹ]۫r;;\9¾ܬh4\:tt{g/lx"m^置}On=wskݾ/^ݢUJ.K󎓚rn*n#+;ݔOkǮQ@D"F 6;W^ku;u]M#Ezu {wntgL#+r#+#+AywY{^Fkaw:|DWsѥ_{w۸on2hdlf-GÞQl=ԓzt<_g|#]}wV^ؾ8lW>:|Ceyy}b4YCHiku/uνNw{#+0kʜUQܥ;{k1һ{<:w;fٲݛ;#,y|]kǸ.T(minv)O `z0j1>:y#+K06GG&7u{#.PH#.n+i#+ݫwswv[ەn+W7mREv:Nwm۹UYo.6{﯈{'nޞ3XRho.BJ60]O݅|:%x#,z+`D#+#+&C@&ɐdyF#,4=1GA)BL#+#@BiM5ZtLTmeڭjQjȄ}Z/ԟ?YhXzk4/l83P+??g޵jFddh 꾯3ɭ,aM\.c&7oS<ƄRڭ5֓Z)"#.#.*2#+p"'IYBDh"#+b*PE *#+=uֶښجU핵mmkT̙ %cJ3*,dTQM L&Qm h%M"4fTb$MJPHjXѢ)6KFE K-)٠2-$j5Qh4!PP&41SM-hfĖ32L(2ɶm4ԔlZٛ2d6fdlHH)0*$IS*"#.QBDIb$mHA 3C$D3 H4RɬѨ*E,$XM)2($&TiHScDb()&ƲC6"Lf͂ab6 ,!I)6-I(*!$J4H` D!&PI)5fƍa6MILB!-)$Y- "2E%e2,D")FleSLIҔ5hXFdFŕ!2)jDD@BJYFPcQ4)%bK(4FB1dȚ R%Ff҅&*#,12HH"1F4a1A$ʙf(SXD̆f!Hزe4TE"$$cc6ie&Rf`Rͦ")4ɦd2,ifJd2)Y#.,)!H,UbI4Ѥi(ib1eFdMьBi2E3!fD%)PLL՛6-d$4HjEH‘&C&HiM(ZhIIaML)f2̈6ڕS4e214fDEh5)l#.YRiBYeM"F$1MQFD%MR"Eث&RRCKHjlQjLe"`%Iȃ134dJj) FM0bk22ƅH)dɚPllHSe,R#.lfjرdFM2%LY*e)M254JFXĚM!Ta#,F*#.6%djEHkD$mhōj,2ѵ0[`4J) LJXcFH#,jVơLԵD#)iY"6K)S#,,+S"-Y)jh؅$iadVY#.٦"#.Q EhH#,И)3TJ-Edh2hbMdEeH%3%4 AE$&Fm6F5M2&$1(Ff1f$E104 JBj-"Q6e$d#,#.f,L6DcRlE%C1&e6e%,2V), jE54ECF4#,1fQj4 T(ce4!ILV#,*i,6b&Q*lCL 6lƍHأD#,fd!bb&QhQF*eaI&LR#b5f%̢ #,RTȋh+TIRA2aXARZ#,)Y#.($[2KDTXiEQi0DY4E3(ZR*lJ"fڢ6hJSij2V6&)+)SZ6JdJ$%&1R25f@CQ6eLE-+&#HSI5EM6[)%#I@d"4ZYhZ+hFRȂFԔXSBdS#23jDb53dd cQIQL4Fѱmm3J!,V&V,ңj1QJVf6JJI52đjJزmj4V3HdƍmmՊDʅDĔF* cF4jamlZfZJke,jjmMX2"4dm$aԚ3e@$I[&iُ~/U+8s{=>,Xtcջ)P2;'E˪mJ#/,$b/?bۜīv1o\T2?mjŧlNO,3cRR(lqrXٳRocQ;KDَcDNMvNBczJKƹg;_::A$P"W4fS\%!)bIukdŌi`W]enY74h6H0l˔1 9U=7#,(h+#E'E|hjSH"HŊƋrgcNVQL0ФY;x$Y+jP0H7"rWuc܅(aB!ұ]t4mcJۮfCGZfjT?  |(V[_L@: 7lx27DU agRnx^GQzZAwԊbYj{foe8δѓx$SgfJguVDwORukrqkP6),؛:5&i=zPв,YL#.Nm*my^>:+E5K*~21y"P5yu7;n7[Ӧ?(ŠF: ݚ{=] {z)C*Ұx꩝iB(#.#.W&xڹ}ƟԒBF+,:fjRA|?kiME'EM#+blwK=. EsQmͽzJT=E^m}{=ol|cxƠ[R:'*bL%8(0&k[5g֒a+?3n6+BJDHȰ(JalAHPŤ']H.&O=λ%IuVYUݡK\SyE#.lQ MZH"JuJ #.Ë#.im}K1~vz臋-DGG:*qB꧓Q8>#,`B:,&.| T:ʢ=S˨ƼHsuJӪ]ՙaX@cқwLi曮Q1?= ;Hjd*j<84?.Vz@b4t"XܑDae #,n Rk̺l Qd#i199sԡҫËGє)֟+口HdL3gZ||r_4v7Y׶ҟ.TIC? Y V#+oBx=l- 5fa o#5K~$ؼB~JG 9ÏL*7`s}|{z%鑺2ᕷ<ٷqZdcN=k3THtqM:8T@[\|]4 %kn5cmcUA1[/?~Npg3ZFd6CTEM~Y>ɮoӢ RAxil/ER+)#.1U,A@0џ=hZZ03u?_ѯ?a^1>]w#.#gʥ38g^oRﻚUgLZ}=qA}DC[uIv8c]VRv%3=/0mk4O-n#,3?Xy=zQE 6a|fOʎaWxC' %HwfZ|buwⴃ YQw1H4ﵫJU+&ݹ^={h~<*)Ϗ`ө];:;:oao^-14n&Ӊ;L.R|6d2-K!'ffD:wXw!{4Y#.L}r9{5Sϫk}{b$3HaPURɻ R#.:f#ѓ׆b>{2Cf~QやQT n*lȲq~淥yCuv!)Dcؘ:%ɮA`"{r+0*NKAq!Lp>6N‹*C3:YW.p/{.M_bVk,˞YUK0ŏ4%A" 8J|"=8/~4 5>SzUz1c|Km:طı;p}Ӿ2O?Ft e>gw7fEVϻUK;>](g@N#+z9JMcU#.th#.ʇcg\uҲj$uQSG<5iIH3wN19tuEGɶ)օZvy4R=n̎7i}q)߳4 T4qu{=uB#.tĸ~F׬hrXlQ3 };j6~2l7ܑv{~}3*0i07\T3D'+( T7͘-]<@DfjJ% e\P**D*7R듮ՅX kLFo{lǫ Ԩqwt$IrH2UNl}u.@49/nBO#+M@/ρ`{X= *N_Q4 _<|xk6Q7k@2pr|#, *ouDuR6mNVgT$3Yc0k;c#NMZ3mxj8ީۋo2C8ҳ.hl[y(E+dX(#.bS"CYb*{[(;z63T*W;ѷѡhDQ Sm9>bߚ.iQ m&?"Jǝ=RhQiR8 Kq#,N;D#Nj<;X$\Pun1vo\գ:U1A85吏=< $Mv,fڨ,!<1$ -4DI #, NzyLBU ;;mh-:#.Hi '5yοwRVff=u2ӲpSpKAپXs#,vq!_rE ~ンݠfpOޮ~|/+ʙ/(Sexs$D< o5J.rFxD@J2BdęrQK5 M\797'I$Ƶ4K~/٥?Ӿ|rօt@G˜ RdPs Uxdw_:b ༓t[åp-R 0$Q~Q}n(#{7)r>GoN؋/mY\QGCӭ#.E D`}4 ʝQ h 2P&g9aȡ!{\IWG#Dlڃ:T`)63V:=h y'X#,w4t2܂Q7BȖuد"GiAz9ظ G+#K>&WtoNkףVnQ3kvF'j?w=Nto+q*#qq>e< Ů.'QԧjA~xLx90{]2{%hꉼ.!I7h^$0vѾluD<"rV[.حaP crͬ١C8#.w.7Y`D,U GS^#p8't-K#,N˔`9kmݗyO#?)ѻ[woq"/\0zt?(C#DEW>ߍoqld9,f>Ur8wMQ֖HMrHvʎ@Q9'NwJD8o(3Q53ASLuͥn#.mɀrN51sL"~Ž{͖}y+}-˽[zӁAm3E3|-0*Aa*g9DwZfvr5GtmGSG_!]vTpmew_73;??;B@ֽ3ۀ[<ξ~yE(@kX'/MfL%NWj(!BIMx,c;^ۥtS}z3ٌjń+s̄)zvviB/Hŋ( *e{8\/VLfϜxP]gUJHLwv NQW0#'B;j2m#,px`P "fAXM#FD RSYc>RcYQ!ee?-ehm$nS;3{6VSGRgt@X{Ѽ93O~6Fp|83#+rک"#T&$A0&->6Ւ`zklESX[0xHUEdr&q3j>;32 I[GS|'MOO^m#=l6NqCXhh%zolT4UUH#.r[E >7Bw!/om5±'X4C֘)#{0l'>2Xp;%Hf9{D!#,f@%H5;<~<~_#+Ga}eſM8U},/?}끙ɗR_y׎4"Mk*;r{'#.>?Ca;Hx XqU} /Ї#,9{ѿԄ_Leٔon7Єt럎73|ФFQj+ٲ&foch4O8bI8[VGDwVIBU#.RSl q;~Pd*`cPr`fogDŽgZenϮ56CCkuK+¶#,sAB)2ABL ?9ù5*;g[#.4L[<,pHRQB2%Jcvi3Mӭ#,HQYP%^-3|O 8=jΙH1xGf»1X EP޵Ք'6ɿ#+ -:`P:P/~1N_q_޵g";\l({EvUJH&u @Ma!F[oȵ8=/g_h:QJO9iD׶؏(?ZI-KtR*, y`Q"|^2!{c})-3fi_k."-IH|Y90v#.(Py fc%EY̙+a%2#.kޤ^J{b#,g,S:h*NTSb1p=H皊2w}fuCBeP:ݻNhXn=>tz39yb$FOgûn H1QOWǶ5sE) RzR:Px@}4#Y#.gP%ݣz<ۥ0e{r:7UqVY6'{qF}A3 3t5qZ=/?C\>=N:}h磻#+b>8s409;\+B}#.9˝]alw"=u#.͖2],PDwk2wwZx3`2R) ,k:+ÿM4vsTcq\  #.LFQm#,S˜ƙ`FzLM H-4 #.#+Nd (q#z%,l-$ #aSM7tI?$J? v#,l ͤ+c=Elxosvjޥ,ךrMI Eݜ*!WTCt1u:rhێ`R9':=|-eMG]><:UMSh#䥧`p+/Bםmuq2y#.cVeΈ2SdG4iy*b!3 6[1KECsLipF%s0V[u,}#BhCQ#,51b >VO߅!/ $KE#,"X6@#.4`;k?K=l~|i_$6a)BLjyn@m21FZ6IWo6+٪.c+cNꥌNB+S- *B `o9t",W6 53#+Z+1b*WGPE1s l [TR_Tx:@s+2|vacӾ};vʁ>#,x D%(7v}#pnIg5n4[W!wG8Ci`}Z) py 28.9XҮXEdliKݐr\kz5z\U.[Z9 BWjĚSR>k7tKZٝPN79n֠? |ͣ:;@Q6#.…#QJ&=0#+'#,]#,f{̤PMttC5ZJXBp4}g/kTAEHQV#,= Xoq (:q!۵`nP{Z,A#%hpJ?Hn=7̭6C5YPLC)#,|,V蜑s ҀI#,2!1M&Y:S51Ȱi#,ENh:6R(H y(&y5"ZP6K(QHMZFRvhұdt(h$LJ#,Azb11hbl1i%ن/wi!Ve^#,H58j(#,Vj5l#!#.hX3{2%, _V/.5GSY7lF/w"*EλɎ4$;>)͙n$"ȵ7?GeP5tR'΃P'9-t*ۦcGϳ~KnLiceJdݮc}>g~Q#, 85k#,Wrʴf/Nne>ѳdqϊC:NRqKS!G9Q`r'~Sa0mpe.͚[}뿁@wDV0?iC_#,Ǯo}!B^%=y3[l-ߏMJoR.I2"$-FnjMͺVFF$t^#.#}l8kkIׁt2fgto 5xb&_sN~ФH#+rP#+Aox-\:*m|L&ʾ,=pa2f(p=Ѡbh3]ogAf'R8O]E>;/ u+i @'#UQ @&'a:_&K>~2.}R cY\`w'[z_xܿ#GZ"P`<_.#+6CF?])&n5~Zٶx&=!a5?gov^,yz!at"f.HGs$OO^U/#.u7z~T@Ѧ|HŖFiQ_a?wÇXB+*}bF%s5#.F#,K\T~d#+C/YMy/OՋSK.AVdB\zlpԬ~dV#,,GE@z(PPZCN~v')>$] G Xpߥqx>{P?IP0?uaEB&^{ Q?9u_VDeŒ[Q>Cm!ҊB*M&*~ Hn_Ee/_:WQ~/?%go_`¾uSy`-[O?([GMj&x=G;鏐>=&ӛ/|oj?ݪ9ʑnk@r 2F׷t\.g>6,9KfWɞIsQ%j\v|{?\oeu9esѫ;F~9Wpwv=#uxPap'A\\#.V4#.zC+~+j1P (+p`3fR 8dur7 è?F}i#,xR^eHqGQbr#>{f3X PL z>~?|ٰ@Ҥz_aqPdL]A]v#,AIaиQX#\? ߙ#.L*۱6?F֤:H'=#,HOⲡP?#+ם"8p~ *̅yPIBu[#,mL[rbI$Su;]e79Tjm?^ETQԬ2A1BA0s4_ԡw*+xb:԰~w柣m>f^*ygGiMeG믥Okz4yf4rηzY^ޓgng\y"ZjÓ\+~~\y))1_>W}M!<n[)яKٍ̝o͌aezpwGG6>)_;chi4S!uWŀඝC*ݑ ܴ莁($Uq7Yf[gDMoP5zi#,=YYxaF|t !0X̋꫚Wz,$n;ow;o;ut!7ݦ-[j[6w|3о|5||4]7/ڠ2@cL{i8bwc|{!rޱ#>#.((JUN\WFQO'{<γѧYф!y»v滫 %YO|z9o74(>WZ2+8xXvI}khow9y١Dh_ {oo#+|OisCgۖdp3"k{M6=_ƶu|]Oyvg׶bz=[o*<ڡA!_8/#d7Z#ci?~φ'"s-})`bOZc9VчNwr?9@OϰrSÜa{俎s>OOVn/,fm]#|'NGU'ϧNuӫ/ԅ՝^~~?#,OG`c\9|}#.-S=;#,F #._d|V&naONt|nջ5:p;;^Þ?/_7B|C(<%A@!o#+=}GԖhx<VQ{#. #,l`~!T!"xvbb4(Cpa#.u]Xn%W?#)ɒv4Q<БxPTcupH~L@{%E=Y#,B3@`P>5_ZOKaDˍEv`E38KA#m>oѳ='&w}gfpsx-Kf4u.,R+)d>lwJ}Q{#lcwqVSZļL{^n]_z:\҃x_w^l~gSC4NplVAib #+-l$IW44G+x%ӥC6vK#,Fycy*˅{4|wa{0$RvB[_;Jk:Ϡ4(m`+JsQ1nCx{2^wwtyӝ4-]e046#BIғ)SAQQ7Sub:thG.~e}tnr߭H6o<3K-m=/}xX#za^3S!'ػh򿻏cMqGҦ)$?׊=N{#:ُ&Wz1N/wgAkRI^\[߶iQ?&J9s =S>O5ޱ@rG]1:[>iY?Z̹,nVX5 0TcZ#,*mTMAUZPqTEݩk8kMjD +HR#.kd&B)cAEeq8|75H. #,U&v40fОV6bxȏg9J#.)XAZ9+r c F6!A(u#,ퟱh#suv4i[F2DH@bi71lXTQ&FCV6ƛf*?U(Z,'9Vtqߗ噧/3'a.s}yHdh>e%;Uk.;l^9|N>uyVϳfx<ܚ~n:{gˇᔏv#,8;7c;ಭY5U䞸`ʇ #.0}(HAÙߨꏴxu|N^>҉jAW8jmptyE1p~nς$jqsrNk C'=pTԥ#,}i4Q6g?GlŲY0_h[V f\p?)>_s14fב܅QmZ$Vҋ!clQмzso-KDPQR`1(¤""tLSzrauw#+5Z\{?=O3t>W=e{ڣuK>;䚑fʇ yt(*YUZ޵D;@&$l،vt,ͷwW%VbԺs&!/SV_U鑀w^\#YۗwU.…gUE}[hjnDX_ln]7(XTU!A,##[g_>bY׻}4,X#,<ɒ"e_+h&6p KRcxR6f jjHW2a1-wEXf j *FPzL2Р0be#.OC{p"15ɐFcPd;+DpqMD&MV">婏ۜ BFE :G5h|jnC![DubeM´r43M6A,m!lZ<iSn me`w\Ql˶1GSѣAᏬ3]K0קz _[]Gze= VߕN#xJ`٭Ҵc~M#o'##,v.4ԐFA#&^32pMz.ܓA>m4nFF~O՟G|Ϟ#.w8R]]Q#,F,XZUTiUD qxc݋1..08D-,Y%ө Hȑ#u0eVuf#,$;~?rqcztiF0E<2J}XA~YA"h27tnq 26B,`Cm4>L$[#,#*m8V6>d4#C୶Aܺ&B``4ػU&36uwh.>h4#.Ƙ05HF׃9L{[+P)22 Rًq w-Ԟ0ۆ`0:DWk<-ŗ}NY?Wc &>ϝ3̅DԎ9v4;PV4Q]SmM|LS,ǩۋk~#+K $9T m"uNjxWxeuomc/ ysۓrEJ=Xڭa&2 6ǭBw}|665᷍zq)sArtDiA4Ŋ#.{k5W[mF!f)b×wDe69j#,:M-؀zecF6hfqFB#5BԆ]`/J^7ܜ1M5( Np.QNΣhVcToE0|# Ǥl,/3KO]-/6`ٺT֕#,at)JL/_ GEwJi ʰ9h1*,Uf͂,flO$Mt\5&,TRyAhCuH^&rkGߨt~QU=vVmTTyܤpv(;D,Br`hQn䡒Ep&%ƣ>k?E̎+' ;}ƞ!4#.*7s9I]ŻjZ mP1b9cco4R|nQ 9@,o*\`8 J0q+qly˸3wA5&X֢@|5Jƒ|0FB둌01a.X˷{2,#+ȅf-2 1%r)Na?V0K9G{f ߹1BF#+=쐎TPm– b,QIZ-pC#+Wz!Y@4egQŀv@ZЦhkUC#+9.1x"]>di!`v&d)J{R`?>[2\"SRFuqdU>SP76E)*ݒ˂2P V̖`1l< EjX(v+=w+x}eU&"^qoYM1O࡮UuP}$!RBMNXOcaOnt8-AO.RO1a'K8$S]/L@64PE)F&/>|ra$2I0.:"7}ӼJIAfŅ:`&џY]ynVn7I?/Fޤn|L_APSO.5)ϥEr ^IʞM#.p))HA:-D7)%#,& ·QZx%Nىy䐫]_4:[$ߺфrgs5;Guµ9#Z5Kt2,Y(fOJl,U't'sޅ3t_]Y'ϷQ0#+ȃ՚5]彑ǎj߶)yoυ nDt2un6c+j/ c26vviEFa#.͗P{̗oWUEvI88Ba~hލ}s^E=#.PD#+K"_#.X"|ywȚY<;ZC-l|SwnMD$RtK22iQH,h!$ JixS|eq~jۖ GaP~%6}Ã'q+3Hr[f3%'D3U8֠]'Cf"#,mrf_ ֩P2Пns#+yAbOq'ጝzAxIGKSX,ijOH6f~8CCu/0$.#.>#jЖmp`tIz]k﫰]S69BY$'߬Hd ܷ>sC( H 8/qX3تچ--ًokD ʪ5g}|-Np\Is`fqy"so>i1ѓbxؙI~:8#.s=dqkgg|!o@ͪXfAȖ۶`#uq82<Ǖf۴<1gsZfexPQa#,;r2%`\`Y*2{řE#,}ENF܆՚-JqngANIĝTۮ.r/zCNmٕ/Imd'X2^†V̡n׍ĕ.ըn}2y'zoGL硻d4.s̆*Fo{6]#.x{1t:5zj^-N˰es;RTC: dc%tܘ`V9#,kPn&.uR:^ϦgyqRZ N_D@;յ-Qd^E/kéWapuH~K@?r[UbNچYZFu}o~3PizN @pyHưt  +b)+FA:*cyL#.F7>˞a{m=tt֬y&eK ]{XK9ed9qZiXl[XnұOuxomyX%8\]6[\-{hX* /:^şz.X;T ) tTRi%uc{[=#jF0Gj=g8-zP/6b,cM˰d$k݂ '$:ubNwuDlju#,AxP#m#,Kv365 Llj6D]w>^g,9򡜤AXlkAM1C6pBq6BLXu6-)ү?0` k3F6ƍmxqXh>q~iz*uE@t(riodg'64-:48<_Ix:>1Sekߗ#Py9ɼާws{HQ4rv:u8PzT:6m9M"e/o9e5ZԪIa}7zI#.+n/՜EL<"m!iz(dGYpφvi@LfӰ5Qǐ>3=!(J",#.B j8gTcdN#+wc+9ߘBpdd#.|7(Xrsq]6A7!RnsS76lyjHL<`No!D!@ӣ3:xA;3.xGtơ'&#,T2#.93ܨR7Q/.Xs#.Rەћ3wSBFu(+__ Zī$&R]QT]g#35Db-ڿG$99' .˚+9)#IӦꍷ%&OfqJm7!,]y7 U)X<̋Etn*piׁ#~>uHفJ};kZ997xV8Ͼ T;\)xu$E#.V}W:Y7nF(o-#Z8ht2*:mߢ[u|o)#XW>zx U+ o$xcz/+{1s18MB2ž ^V1KLjWF*5챈]["9Ȍ3K% FF#%`~Q^!r@rN!T) }5I:| &w SVƝH6=@|lA߮bgTBdFbE---i~˂;T<M ;cox#+I#.*#.U#,${r7_ōVA9 M̭3\Ð#ax-Z**8u[GNv`GMJwAћ)("uk^\ ]׸.sRO3?:LafΪ{l~1rِ"2 R?N?ybp(P6rU+v ȀuF+T 'F͂d4I,DY &C(=?ZĠ#+POҊ?cPoϪbM/庬2AIOE{-%g(PKw--',JEXEOndDD(iAlW$f n|g'CD:*RFE(1X5NK|إz~#1❪lh̏L6lGJ/A} P<@v}DŨt/}}5"0aHUVdVڟ I$#,JeBf|i럗6V9/{|+yΕ$NIeyU`r,|e,r1#.#.vÑ]VoFz߻|nXLtg#L#,i.tfpqK@/a|[}b-fT#.hq,C眘mfDh:EuF4s/0M''·hQ}AW3q*Ѓsؖude z.4};b#,BkgrZ(d eQ!fnnv(? 0F{*|g^i%G:(*,g03~Z2t_ooz:^F{6R<"`f,QE2^+i;HDD < 8D gZ<ڥo#+"@66bDdS=?9%evXsxTJZ!9@{o_t?^r1hqs/TCrs̭JyO-In:yS+ +*,#.aő0fb^gsJi8!/~vKs^.^.eW:X<4sG"!۬?ޝ3X?u2_$OO>sQTT귘Ngq}_wY%>X&8|2GOUŦY#.~Mtf4EzOPsiHҲ#+`1$ s۽XpfPgpA'Dm1XXLfFP9BE.);ϛ>dy<#.a fNWU#z=g( ʼnP7y(VPwmDA= ƈ[#.o (~/~,z(u3e!դĞ4@O8T;vkm(nAީFэdP1(퐶0`k]^r$倭\²q}#,1>kFCVUSP4Es 8sOAan0chNBKvz)5!l1ˮɉ<٣렃L`<8OguKA#?zK霽b=S 8M#\S!rx?ZL 8r6G;^Lfi! H-tery톹j,a[RtkG.>='P iXZB{jXىt%ڏoɮ<@m}#.W jL퀑`wd@`\#.=D!wߪaT (!eRy2^t{9*=syc+޺7gGT`9`_q,mlKT"fQ Eᅯ~4r!*-NT\ȒZk1EAz'ﲡSᆟ,7"Sɴ?;es#,]!2L]빑Vȸpp#+P gN .CޣX;+iȹ?5UcRF($ }X^dy_psyGK#,*879j$y"(y(E;Z oH:IT'mxD$*=Jk=r RT)%5FH#s-Wu:cAOa+V]FS6)8wL7/>saPFFgz|U.Ub(#,< "%~틭#.]޺/_3Nvnً2Mq.C kk|]`jH[4V8KdJg_ྪY1O}SrvROhAo \i[sF[NͻsGՁ׶5h2e3aځ# ̽M7e7m: -?$#+ƍboNv`A+xR 6Ÿ mn3wjSԇ K&B9f"$#7\Y!nJwaq%!)U]SLJ#+9u*C8W2O񬳄Ƃ#,#+Z=:=;uOf|b/@B0E.471S=Zi塀3~DیRCKeǭ fSQ#+r#.sYcb4#+#.Zd, #,[j#+ce,폪#.!),dAI#+:\tQd )J20-1#,[&F.3+;$K(‘f(#+Bl{D3#.;W٫<+@4`J,#.q`(ͲgfC_$7_B;`#.lj`2!#g!^sw߽=tS.*qқ-ROslѨ}>k=&ޠw{Nm$5džr#+I14^nϡ#zi$2.wB#.M`ƚ҂M wXƾꥶ!!TFٗ9vT^[qBu#.Uk;g2m iV%p*vrihS#,0fw&#ajAR!/[2DbVpTUu}3ud!0^` m@Sx7(*Ghk`(= h_#+6uHC Qv]97-_rlTYS4f̔ŏ__SJ*U':j87qWuP&7DI$4CS#O=ttI"8`CZm b6#,C`IW;(ᰣb#,s;=7ٜ}*M1G'#+TJ8N5ι>NCDEBuh|Xo!Z vbP:iVβ1bwMA6%pS;t'(uDP )"knkdcV:ʲZث\mjUڽYwyֺRIy+(.k7޾y-j1^wZu\pҎj50}2ϫ+m^DǢJ7=x+  ɍXO^N4#,(GlP'T7Ǯgb$1@#.H*L8 TP#͢[(ypPP`Ȣh#9dzZw`ܬ*,WpG;L$ߺŸu! ξ\ UB/Z桧oc0rt3,LD0,16݀g*Hr}I 0rj)T_]7G~}֪@TLu9.$3Lx㤴ɮ u61#.CH0#,.T&HԪkevPćTXI,(@HA$z>Jlf7B"3%0,zZ!z;g.(YDGmy-dL_6iu˖5?tofrlƖKQX AfXX)UF#,UX#,{( @ҚIdȃݏe0N=.R^ ^6Ȃj&XG~}aTdvҞ3i"8wg* sA.țQDKp>'gmB4:vCENܝ :H:TA$ vc)+BVQDHٚzti; M<ڲ$)I#|.qԑz84%q vvfhB1x#.rp!`G(HK[qrI.,hg)AW6CXHEIHc54f󹊰bq 0M:#,uv$%$xgC><>0QvI?Ww-zs":T@'OD&RVKIbY3W탿#.YVs5dznCbDQ#+QL3?TflDܢ$~na8wY#,z}>БgTJP Ǫ|3Ps$q9AEa&n}{)e>5VMYrߖGX#H_F"E /1u?-%?|/n}Mt?˕_`5^72(BTJE=@oITNw_ptmWA:hS.q#,"zIT7cdsGpw<B[ge%='um~9a6Wi#,"T#,bJyJ@SedW5kӅ_i^kR)4HiFP!* Gg}43U)n1}t'š@,$@D^?W?GW|U~j6+<{x2.^Fvy?)SlR}*Pbɪ[D|U]X-),#.Am:V@O|e~BX ْÈDϘpDGP6@js.]^M<]Ͱw凇w\#.5wof*wgf}#+0R?:VLbb{h-ڙ_W('Us 5?"__셊*%t~> /pfV{sz({69s^tQx%yV3.#+i篳L.זb١] ^@^5D+NLQ.n7oլ,XGCV:B @`ZУm!X^UjoFDp!?:w[#,щ1N7 uQ#+aQz#+IZsx{~>W`S'FmOL#+B9Et~s։]A;ᝓl!;I8!K~>k߄l!+ƒC}71#.HTf,mO.mь>p)F2h|V$V 1/өļGoу\9#+a3#,BrՆyR>5x."XTVq=[P\]4У@;w#,OcU#+@q#.gi#+ P1@zt}6D2o_O@=瞚h(B۟?S ӔZQ\<(~wPƻxE $GEt\$H+)%J7ɯ[@iW"8.6#.#.1fHa{QJ3ŷ4[bwq1Qq;5U^f&xJey#,>0m -8}I#/W]R~Ey^՜W} wZ-5K^HzlhuA_%Sw6q&S"*ޙ;c|$Ԗ5Duk^y6؇^EGr#,E|8>n|'RڬğT0r9:Rier>oNc& !U!^WbT%9(q[hX񅌡ИTfP珃fჰT@땽Wه^ǃGUlyLf{4FnNو/Q#.WĆXG#.= x[5WQ{鳖&Ve|x$ML\mdt7N/DSvAkܴiXE%qan_#+Ee.g}H#lk>,|sRβC5b9'rKΊW~d*;e1)ahS#.;:32{>gvYϤQgqEĸ;t:szP~;Mw#.xut/3g?4PP 0 N%v\FUU7}7Z+5o=lh|fA(m~{]NtΜP_`n)Dz/ʊIhFJo].v#,2ƟV)v}lo.l&)p&[P(5(I}S֩;h;i-b)i|Q:}>ʩ_SNͳﹳW5&7|1V]nk~6ϔ:Ӭ8P#.#.)]6Uts:8`}>ge\[n!h=9s?΃9xIE?ˏ18ʮDra#.9Qk3yz唵t|Qh~\sMIرp8ܺ{S-V|&J 8y&=QxޫM#Hq&6KOUj+1("빵#.Pʆd.Up$ r-2_"~72K'o_v<u9l9 YNq+~pg02ed#, ʦCj{ya[hjoF"!̳Ժjo[kMLAN"G&ni[DW ?{ָ}~b/$1?`Tmm-<ǒ#.O zq߶0Ņ+#2њN@8:r{f:p"9c%}C^)/?~"j̻cՒSG~#,j8dt#Dy-}>q#,!W#.pK/8YGʌ#P&z3"ogF)•e=oO4}kLB;T2 a'um#+Ir8'%,3E(#+ۼXB#];b^l8>ьqjj#+bRIUη"W`t ÒsMW<C~.ϔZ3~=:Jv Dc՚\E/z_W퇆)qNeU͞a&"qW:'h2j#.!JX.YwAi߳ HjkL5iEb#+D.hlS QѤ+TYnGZX#:qM$#+$@z ŧX=^I@rw`|&e!uř0V+3#.JYD?EL%%HvK.\W:I<ᔎnpqѠx/8-3K8exicS#,xiI0EG0 aR ,FI'EX"~xHyP>н#+QؐUsr;@iE8,\K#.SY%|Nһ#!9Qrws.5}/@$"?gO6;J`MҰ4hN\A>#$+u7f8J;r.ܡR3g&auk$INb$&whcoFд)`IIIC.[ӧ RɣOHQ;,߄fPB \/㾫ԟ9wtNLT" {`k%T`vCԋ>w;9CTr#+5hRjcҁ҉dz!r|7yEe Fi;#. yݶ7i̽WkݛzY-tZ*TDi+T%`᜛?_ϋ(4g7nmW^JNgɘe;gTLq>G@CJ2s;rjsx?D6Ј3êΚyi9KrYt;jEYL#fb9BY юxuS=EOA(HTu˨:k B-|jMJWOt l"P&_D)04nݸ.CrbR辰( #.GwKcU>YV=ϣi^F sώj72;lvSjjkb,GE2L8JZ$&'cۑ.d۴#.d%mwc@2cS=SwNLsڭw9%sfݓ͈ڂ6'iG W V0g5u=`fF#.X# :#.m2Z#C1R66^R3,jmj7J6# ؉9eXS2Pe! #+UeEDT ȶJ ɼΞaIۦ o~\,c8#, "#,2v)g`Ѱ0"09E^%&#,s= Lrm{Z_'\t8Fic2$ӷJ6?ܠ`;ӿORصٹvߒJ9Nċ.f">#,i$ThSUF#or c+ k(HAADm)Ǔ芞ޗjATP8:gYx%EDb=Ccsݕᕙ/FqϙV#}˯#, ?[t -\:1wml,W2 #,֛@$7Y[yBE#,oe_]: @cT`BLҭEӳ S/.XS-ضshCEj"Fp8#)I9}-6:2M$4m3r !Z-n{Q ;{ZpDnB%l#+-a巤!!Ȏ؍kd,5)f8hC|k(".g9Bظ#,pC I<)z8p*-඀#.sr e`PfEQ;^w[ؼ<&C,w~$#.ˠ뮳-usR8ott+*#+\=Q}r oO!:?Yg}_90VSN.~T,li|U DCw=_8GB–^-}h'jxHŀ=ڼuݧ5F'e:/?m<~?øwgX#,텡uuraP˗)#.$٨mY??߷.ا 6*R#+x*X[́?B #.0}ng6IVSwX+S Ģ#,S)`Ql[=u' ;,6pl[3sNa}~SU#,r\wvړވt JLvcʡ+/J0T6h k?ǘguT/&{GM OxvuFG_[}kF#wDj+Y;]N4K-# ܹ3MF`3OkmsܕS#aCP!:Niz?ɐ >]w}=x*o.[HRǘ&\B7fUzY Gd(#+C:VW_?}~n `5-I#G{O?`nXp&=Wi1n?t *H,]!pպ%>µiI{@W+\i>7W;f!f K&FP#+͆ha(R)H퉃N.-)#,Ɣ'@D1ו5[l'}`;N9/x&3 46ͨڣZg7XK#7RE #yp](b2ۃBrvmMYݮÂm0rN ;<1%#.}ziI?#+I T${BقOՃs8LTf@PvxX#,|[0E{\C2+$~)No@{Z2Ouw?O:E͢pVROk HtA,ނ& j["|xP QDDb>>"LIiIOB!U!n!<-<#.J*]yzT&udeݵS}Hcr[X~-솟0M11n%I$xw%~]$zm8pi)sG˃ҙ#,Pw8u# ï#(m:Fk~ԳlfIbQN^t=P|?q~Q{.3ϴ;'g'd>=+. 02gvd'uhVylP+/P w"<H6oz2Y#,}uCq``lR!6|fԄw^x;ۈM`(4#54 WcFE&148C.k,hsTZZ#,i#+A8փG p~HO2M: !Pg:!}#,4ȯWbr D5:wۓU1Y(;C$ W#+#,Bωp"';05,"ɐK",܅4BljHM=#+`GW55x0>zfaB5oU#,fztAC#.7E S&#,Ġο}݃,jwZ?%#.J~-adZXPRoFJLv$QO%1-.Xf]dmffT! }Ŵ5N*nl+CEVI$5QIu--m5sVZ #u u:p2)OHf68o7N{LӃD6aw鮜fJnQPJe TB_vu}W>>V1~C,l툞?NTamCIp=OnGMO#+W}BIcU4RԅBB0hHnjuˈ[5[ݛʅ`ĥtD?/ߧS\ÃJhp蜌/r'Gy E#,C&)B셱Hybx#,`Xf`#,wy\ Q.D0# ,{xSC #+Bυ_풊7?v@a~'¾Tf/-{#+RϦ%=9>y,z`~v|d#?M` ,!6B )ruB,cN@xv;O!.0??@nN*PD]#+n|e2J6vë9;0#,OӞg tm%Onn(C}}Y" g ;."MzNO᡽ :$Z p5OC/,|(bi>>6 KF?.W{`?\=IW܀.=jfYHzq${P.*>MèXt@HJ4IvCGgtjiʌdBf^!(ۥH\: *^o;C##._3RV t; {ʯu1OwU=0;3N8X#+a-CArnfErv^x<4>J!zQGJ77~PKU4o߱*nTmԐ&tKS!#TJN\Z0ZmWPo}}"!dIY$ZhYpmb%"QC;LDj]6U+{[{أN<_q+J*D>Jy'3/Œ.a8\㺔J;4l_&Zzya/DJK1,#.}΃ ŋ=Bh"3kE(Fro.?G^|c@'a:F?kxXjrxoQoZĸbTej#+#,Xx auER3A,#.&̊k1QH Da#.@󈸂HH"8ERG5A3<䂇#+jԵv6@e^|Υh $+#, e$urv?$Jw5S3`Ql,K%'QvAb O?t-u>,z}mE,5A֊Y%2Q]Fn]!1hR$MTޚrG/rpeoyo=맽2$Z)g0zc#hys6CH&r)Ʋjꮫ-{VƤ2nJ"KmxvHIG#y۝=8B߱;5ѻvoO>tRNU 8wf:z@#+qHp( twnVt= \wͅ@a辶Q=mȏ\.JHp-.=x脞JWgO]> &0{R*V%i7L3Ra Xf#,l彴vۡ Aϓ` a]C{pKHQA8s>\pG$u(ydEꌁ=#,T`eBS\ h>Gg-#7n cgTJXQBړC~dsw{z RJy+~#+Ĭqxu0#,-WJ^:wyrĆ *FfO|O+?=X@,R7QakQDA)UhZ&Bf rs#.Lܜ,1I$@IsHb i 2".Na#.|z?ZE)`\\flj`\z @y=#+w^ll#+Eu==< fFS;8p7sFIxZd*lWnKs}p9 ;Ç9uEXv}(-𢍜ny!S7 $dUBP oh$\&:1`l+$^B< \~ՈO()b^\ݩIJ0ĉÖz҈Pž1Q'UU8eF2cU@*U'&>UE:5,OJZ#,w#.TsC%_>yXn#,%'Qg^zXY @c| /xn^iL(s&HZ#.ArwkAQ~Qze*眢rc^ U2H?hdȌi^{;-MB`06#./@{CaBxP60`-6#.=ʂϦC wU%#{w]lU33J-#+57;ln=3]݃*#+#.1o#.aP ׮$m+V=p0ubcF{ދs˿SWiMf(fT3_:FkK퇹+^ EaTP}t\iDӌaQ'qEIĨX*0Ia*@|goCڮ,EjGzTc!#,wgcm$#w +u#,Yc6i<:#+~>ۯ|+$_rv1<~#.Y(#.`1M3-Sm)s [!DTLN+3mYB:t&UԊ6}f!GL*BَAЋT h /ې\M^<5g<`M}֗u61-5KhajmÍ ˥3H}bm6o"{2Bbߜ#.FQU*$\#.s$]3J6opMFϐBj0|o#%i-8Tuud{֛iN_ĐJ\ +՘."|'m^*#+I -ͽl*=eM"b!9iAB6tv0DHX5QH`0?PE~JLƃK LDaP/"zLCH(d)sIoי?/[݂Eōg7OIY;6-~1fC_vC~x #,?fןu2Hx9'fM ?Q7D$˗tЛdD;;ɯg1N#>{Ȯ[0&r 7,?njg6uuo'l&0Q5TL S`Wg˙Au7d)~F٘q;ڋ3'ps#,/d4P+"TXw{ .ځ;oQ1UiY Ώzx`Fy#'t0#+/Ӗ˜rVӫ CӊC~y4 I~{UB`ᜌ*2 SZ}8=ʎWQM>n $ 6_qFhڀP(lrUe#,nvm$ـB b.O~ {cmLJa_qa=Y2OGE$ߺ#.?>? m,4m6iǞ?K#+rRy  ֨) < dyE3Ks~II(r ܢN#.p}z`l#,`B#+tpu4,I^CNrӒO^?i)hCHh<UFcXy dƷX2jSmfrЩn{^{FܩhS#.QAE`ӽvw iX9;;e#,b&tNu8VE&#,\7l@#,(^,a=&+0Mzn80#.6ؠYP;}>;q)7'w1#,F7*P3%Q(d5%6_SvO:iIRM##,(d@Rpgpמ.ϤfY0w#,"_Gct81BYaktt@o엟-21[Fj$9#,*Ԫx|r|10OE'vT$]ZTJMk&iH*sR%IL,gu6f~ܧg8q~~'];o h[D٥DHl}F-hȼR2cv_;[NۘsovpG L9jW~M#+:י@SQ߿#,q z7G-#!6Տ$a 'C=7|%7l4#+}[1S|x&:0!#.l#fvgˣbjaOz+^JyTR#o-GQ#%R,#cqauY#ǔF y*H`ص1#,Q9y_>3`#.6#+ #+#.~OSzm>O#,pB2!=_'eqn\&4EQ:㮆" O讷Ő$&~|?'Zo~j#..(G/E5UVLWv#+p ?=86n ld?]Qi )1B#vYxSTo4\d`6`l0QtXPIlk͏Vb\:E5"qn#,-*}) r8x|n#+{AՊҍI!ndJj#,fxٟlvzDb uJRPNg&N0||25|% !$nY orb8'QݷFopqf,^A|cd]+avFQ#.jS$u&0f0j`,Mb D”j `8p}>#+fѥw f"%^x;/q{5:ګ%@VivqJpxСR>m^3ą:vr5r[Saߦ#HGwg;-" I<ؔoBl45RY mR2* `P!Зp!([-W]&E7Y#,n򱵟j$hITK#fAWvݛn<i?#+rDA!v'k#+l"qd#=IsDxyQ"9vۧ-l7V/9߳1əw۾}!G~ʔ]6a)J|Ϟvglw+F9RJUZVul!y`nS^i6aEzR &D.3֝HoBd]#b`WPB7A#, o))ѭSc@q l۵m,r,aLP=sV5<qhM#,4r0fUZOD$v"ŶܖqL&Q,CN@y)(92Sl;SQȑ ILlK1An+z#,#,EF;о vK ~5P8aC61x##kk׺#,LmڍpfEǙC}ґBq`lPs;d;dԅ4=9wyy ]8dBP ʆCJ*]Q:ÑE ft9Yǯᎂ[=c@1U#5禾޼97uOEj`^&K$P\#.E0gO8T #,-T``0( C.GpPD_ `#ZW&'aBnoGҬF#,陉bg:U7~H+! U*XvqNGE]֗ $";#+1"TC)_"6bVgDhiUmm&#,(&YV&Ii&+LdeE)U֥fZ_}+}[DO48D"2==@| or`Joax=^6Eom~s!CᡱG5jAfО"UE/C#.͈t3RW BI @;k(x&4_*J2-#+֓,A,/0 &JNt࢞#+"ܩJW0#,pg [&ǎ1R!H΃\*F"M2HMyH(&,$W֭b6K-cZ͹ܦl)S(f#,EI[G;"H@rd@,5#,#.$ *@/r*8}CŹM%20ҠOQЃƽ#+|p$#,y9Z}#.|Izs,YܗTUNi >9Ќ( TB+#.">G{yuusYPF/6EQ龘* IQai'ڇc2˽]B7!Ѕ)׼x;2?M0C )PG>ü`DH=\ݿ1X QC .o!ԝuGsۼ6x`RuPe'΃(3$k_xh(x[|.~+gYC$3Ce$B`Dcf6 g #+< " *0;߀h}*rmO/i/3']_w]AA:R#"UPA`H!^#. V C۬OCӳTuf!~"`}f`")xY6ys} s#,:A3d@Ә8lj+v>|YGc.!|lvm$ k u, X}di\ɇM)c7298V%1t,=`[ͦQ=.:!``twz8mNtXy\9Qڳ /qiuJ@(:G!;jyos4=T`l7^]{sǶ2d胁7 μgj#,6W)ٱwcSnũڌL(+vP"YQ;j3)=H0.fo;۾+fu͂X7^8!pC&4kkL{a{TE_V~R5^{v~=) Y1#! l<*zCU}>̪#+ݳCa۷V3`:_Xؖ$T,vКw5w&];xׯt*5Nc6"lwa3x[Q:M:q"Tb0uuwϏ-"g3R)Y1٦Ig3tgl};uRֆ @H_gf2sˀhi̵5#^|d9Mf7AӁ36LKvuOGtMyI ?u=k1Q_X ^wbQgC4{榤mfDyH;IS#Ҳ#+ٛ'z)i۸B#"u^:Iɮ<<(Ns9D:Z4*mY[].l9&|jgl#.01FBX!J"(sdDp#,f߻ Y0Lޙ9A@V*DHQ$MWxm?H&av+\znUV:ݧM5'A9=:?Rt#,O ֍W5r#."DR@iu!l#+AiPaJ,{MZNJ)q@6weކG#.4 D`2$-QJ " ߛ+!KPiώy$&;÷:uMbUrv9:Q`S'LDP ijL7N5[$Rƶͪ=;#.=RKw ND~KԽCՒ49c M6D@y% ;vd2WGp/ y՛k0RDM:>HI 5˼k؛Ӹ#+46BX9~IW}5OM#,k" `HsF&*kLURC>A$`Zl Jc?u9N5fX(w@p=3{w w!I)Qw;^{>MÙ˹sp:R>:7 2B MÚzSgu3L&e {$p}vͥa˲$A6 np(,+xkq ]~) F'PBX)rA8%=#.:/#. K dN/s{_>4Dg1 $aB`#.vumǕX48!Qް#.a #..,48OH0frHR_a h! 5@F#,& t@HF,QcݐArq}}L=BMHi*x2n'#.0TƽP2"#,D-9>H6&'"3}ѐ |\FD5R G_~ÛMͭ#+Ijh7D$ߢFZ ⽽|9:8%k#8n,~vxDoآI!T(ڐ#,A:ѭ6/2w}YJ}ӣ:#,GnTKqiqJ\Tb"U`]&,8塰tXCQjN^AиRd?UX]5 EK] p%F (PRvҺL@p& #+#+"Gs9cL{ҳ-Psv_8_D*3B6Ƌц<1x.WSF8\e VYZME8Rk 깰e)feeb  H edxA> *Uιۈ,#,TjlmkQ[W+nid#+#. v^}B)L7<_In6V_i3i\##+FA)%3KS4)I)5EIZ1Q4C%4Dic^Mi1dJel2bf3"(bRQE#.#.bRYA2hZTQD)Q1)ll%&Je5R1#,3i``"4wbMge#1 -, 6V!nkSn:) d|L_ITtYS(h`#: NE#.c(/ݸ&\;7.X ag-ECᵢܮ5.k5&XEլi'!gzUn% Mbm d W~#.k1h,Xi`$F|unދyV,ͅA3J~#,5'*s0,.d4.~p_;/cz};CWSiO睵92]@ -2Y1璆nXݑoBvٴ#,E)DT$/rdǮhpAGk_*#.t3< >UUr"b9m`nÏ12'A^6h>ZEImݩKN NtJ\\1Q]l1;cq~9s.F0va}kNo!bIƍWɭaA.鶣nWc.["^7Lb`[iOy^Ithcdg~@5&v7+oSpi,=ΚփΏ_ilvNY:)S 1= ٪"Re&vCd_rtm -32[i"mGaD~٭t٬nݞ\9i !{$*f{pgb q~mrx괝i$R&D^y#+4uC{2&f9y<Q]piĂXD3"*V0/>-4}dd7Q6ȓGFFqH̷ZfMQA0y\(E֜`.30W?,lōFujfZf^lfԺHb84j(F1q"E,.[is&aM&>7LZRqkY.N0k/{Q~ɇ[#+D'dcj#,޳1s5KZF:V9+Ϊ,ÛC4.oS04G:Cܼ2dj5hF0lI9+A'vk<ĉ~d虜[ݘRp 2>#8W xe6(NAvf挵·(GzLTLT?8mf:E;UT̼JxM`,$?o;î9d\r^rVpm5ښ%p3#,e3uUauVۃs2 ]$857V䏇(6CfquKLK 3X:,c9FPYTV%Ȍ&iM(ݞ *ӂ6NvM XI;lE9e1MۃXpfNa}P$;쯈A(PtH9/c@M@SbML`i44GTo^&mlJږ0\1x=֟ zY8n,5^nrm3ف2#,]/s%mW)IIAJ=8ȁg p5NF=='E(;|"IB8$6L<1s0kIAqCi'.fGfr~˜uUn 5";t teFWeBd;g5)C ⢰(&|*##,:b8!\A%[#xbJ]#C8fh-Y#LM(%S6R.SkUr?aBu6(x:AhƐ0iS0!v28=s.S6#,"cluFj&ULM2U$"`H+i#.S%eKgB󍙍>l68'-#+F1D243P@ wѴ5a8ڕqrja%,<Ő]E kYZl<=#.#,2nL$13ҎkD&(z'wcwcFSBGJw0Ji &W! x@MPC)HI44QFLh0qҘ1j;n33Ch`֓xIF1ԑͥ[.U \8PTX$GaX `q|Kd8&:mgFCuDi #,mp@TS,$}i q N 9Yd454ÛxX3F#,THtRV"F8\IDŽj(DFヒ4^hG!T3ff6mb#+c1V X#,'laZEMrЋ ]0"6#,!bL$85#,EvJe`۵as.t6&NF#6Y5DB_owГ@%']*[Zΰ C`w#+G&ĖP@ #F1 BR) <4aB% P׳>=(ܯy@TDFH! Ϙf0I#+"vC"ЇH #,Kad*,U3 3 2IR3bld녉';eU& lp~ǣ;;Ŝ85rh2nź(ӳ i1L^U,wV"vmM<~crb&d9]+!C#+{Hc4$* wD";a ??6UutGkm~4*B6 B#.#+BhCd^PJ* i&) Lv^H1QT4Cm.P{#+ئHx#+R9|p`@UvvT?DT(*#.cwf\tݰj_گ5?KE#ݑ=qfP=lBenB%.Ƿ1 Ff"iEzTtͽғ:E̸(&@!,i*bf!H~V ,^\7%C(Ic"ju}_skShLkƍF֍TfAElhZ5vv'Ҝ=<;8\ xGS#+#,{=k:4D+Z!/|ּS'[o5QnQ4Jr6ld<#,'n!NEvivJ$☫)2}Efmd¾u4^&L#.SNHg ~Gv{)7v#HF-0-Bھ8ZZVda{:ΰ;4*D4)[\+hBnܣsU!.pZ|'tN]XnA28f?.Frc۱$;86{\5) *Y)N[٨^!]k#.j,ڗn5[F0X3˼\Cd"ju,,[ي#.8w  U *M4Cmbĝ2 Ć#+Yh#p$!Rd rCp984 iv#+a#.L16p F #.?#+ B/N>3k$2gSN)XQen~(Ipk[Y}֡bbDWYLL#+z}D;ܷoj5X-dV*MW-5E͆>Zz>(r|V_8#,+Kq5:[: VVuVVaʴ6M列5VeʵS6>^<}s7Mr#,N[ҔbR#, k!^R o#.@ns7a ir](zP/+n+ӑgpԛ&Kt)[ڇh::'$n)clp~fZvX9G,0WȈv{ҥIVxb٠5mezKidEJWiv_D=V8hpzee?Q*1FI YmYUHA65JTBhV#+C%~AoHKt.A569#.T#.>('c>$nG(zhwOّb`{ٌ!"Kw{&#,zE`?9^CGB:s5op(c.{z.E*KCmD}&ZIلMk1|M#.|9տ>#cղ8o`5#.F"`ΡeuqI*@ @#+#+lj%]mȸW-HYe0H! 'gJ]+Ҋgyc3$A,qaGbaH;"6&lM1ӳt#,~&:O˦#+@VȺp|;Sg7=͏Evn0dexl#,G#+e>v.ISbrYE#.e"][yjRC " Ҵ_-VYlQ24^jh֚!"da`VC"ku`hcՂƱl)FIʹqbkX# /,"lƠmEC-Ŗ8D1*EF$ *ZUpH〉g#.C\R6yMF#,p#+48[.#.:\z5y"QhXw 9u@iAs)5IX8>z?-"ku+ۼCcsW"@a#.&ոSទV/#+6 PV7No?UmFA~ u7gQ$c (;j#+sGI90%mŧ֪žwcL u^楾MMqm1#.8 = |2LPИ0@&%!%eL_#,̛CpcORR`UiCcHd@2D II$Q)b~#._JS dBңD8Blɭo*YKuJ#,#,1c@I%'G+!M@(X#.1(3ۃgs<\f pU )<Zcm8(3Pd5$&N^!6r8h:+AT:7ù#.^N/ʸtw+ƒNb%C#,$#+[4Bx_8Yu (4w,y:Ic47#+(5$zer?wbkZO7ώq›&#,D#+#,/Z<#.//grPטQTw[[(S { V&q"a̓X529guoUQJ͂̑lƳ7Vl,ʚŞ.o# Ó#!HcXP:".U{xDNԶhtZL7,apYQ#,e߸C^;^HFu-k˖-3ym}oqS֜26qid$hzӺݸԘ6#.EUEUCV-DhYl"] 0"#.T%gk9r#,+ƹ`GBKyփ?LF@RH6FpְnCd5#c--7 dJy=eKQ";"l3޽=#,y[#Y7 ׎)B -ěCu$/R4,ؘ q'Ī#{Ξ̏Pux=ӻ)rM1HɈ#awDƳ240~0V(-4,e!~GG#+ѳu'Q{T߆X;A=IJ:Ó^VpV?@RA#+P[!aS%E IH^%_xQϷÏy`&ȟy@c=aA[Πsm(#.3hb" M 0EHCT.QOƤN*nD$@aq+~1B:ԋGk @XDqML)U$); +#+0B܁ėWZ#+l lxȒm Uxl-1dwγ##,г(ɑgRfXGf4' i [Uʍ#,161Y+B)6]`iidp#,VŁs i%8]&җ9D ׳x-^4mּUɶmF-&TI0&2U]Rl1,+ET=eXwY mC7#++llm6rAȣ6.mi]ѣQ+oCˮ b jlApjӴK&A]aXH|8#,jƏCH|1rCcMѨ ZڟՐMSt9DhcQ<އ?3 1Q,!KmzjL\6'a py,#>q@ Wy^LY7YUՉԔ1 ו{ޯxxhϘai*{yO#,#.\ p #r($$HܼJMFҢLtlabEUu+X%KMQ0GXUXHHRɼ@Saܡ!c! TyK8w|<‹7}ޓE#,NdC!(V4%4 *Q^pʇztrٷۦ3I?/W"k웘drx"U@ZPH0dםu2\ەZז^EZ6Cm6##,(̂V׍^n(KjT#+e$#+T[(GYqԬ.]FhȵL.X%݊4`OCNB'$>P@01DKd(XK@j0^Z#+GB@]>Q#b0c--Yz79-Hܾ ٙ-E_3Ŭmj7Yӷzu܊UT'BZň9tۇ ,rκ*#.|CP#+W>GϜNd= T6q׽hȇ g:n4)M{5YuA%eyW`#,w/  Ѫ~P(W5٠{*ouoPҏ_о܇xpq2.dr>%zh4hAT׆3T^X1 Jpî5<:I em2ֱ6ꈃCLGrbFwQ0 |hr#.SCxy'I$!&D\nd{OAZޝ^h_fɰr&0l鷒_RŐ6^)##/-4I `fO|qY㘅3trl昏cE#,Lnd#uk!Cb1 g\ɋ}6׃l #1?Ũ-цHd#.6HJK3QR@ᎏˬjLYo]!9GU,@tFuQO߱uk0wGuncQOu=o5ua#,gG<$I -IFK4kS[KRlVe5tA&2չmLSdZ(Y+eLK٪4YB[F"3eVhjle32@(OhߪφtZ"jG%S!R@"SZ]Km\#,#+E#.DTH$N<;8 wQP#. j%x9M#+bcθHvhl4{0) v2^30x#pE,,#, ZB+q #+Q7w2^':)L8Ad09w?Ht?a-3;=892g(dV%UX>W{Х&2Ry6Β,ݍ#+85CeE\Ha* 2!t1vihG95@#,3Bf JCtdN4i9&SA#,~iIhO\%|#.'ʞȈ#,#,\er(z|43X#+yHR&mlD#. mp}C؟uXO2$EDɽD jc#.c$FGa!XAb<IenʼnL1e;;;#`#,S5v'Q Ëϼ#zJX벍3OoҭNڡNTm Uj\7 #,p_a9*qVF}=[.EkcaJ#.m#.#.H#+0c`#+11BHRZ-#+ȩ'C·Ǽ֙=#+#+uvϵQ^ov"je#.{qvo#,؈dp58#+!9h'gRD{wJX#,@\#+r8>K#,6'^#+u3=J]IтM HdKi17^yvhKeMmRmtZv#. A@?1-bAڀp@䢪 $俻ޱ1&+DlXԃC'u;Bw{o]cwE.cBWA1Lm#+F+A`H&U%% (#,ie lEȶ0cZJ#.-%mL1^=(Mj+55-+(s!ˍ!Fm Hْ aX%M@#,G,`:gv@!M#E ;Ɉflp#+F3޾ ۧ%;Jgl#d@sSXl@R*ݮyXMCP)+"*Ur)]nNA#.@ʤBOB6Tk%lLlZM[CցBQ@bj52@}^?aǢ儢0qEajSYϗc\8׶|N% ` >w6mj{ZFq«Od[J #,IZc5`cKL#+^lwOѺo&:&8q";391oaݓ08R;,8`e{ LHv/A!~o_̍p9ܖ.GfGo@T‚YYEA:7#,Sb#{4z.|F&|$&fomj7.+9G@H{VcSWn^T`<=Y/`<{YA{@XQhh0!B}Rh`^헸ihyKp#^Ɵh@7-(I)_ LВD$H̥ ݭQuoD#,[ܹKgȷd#.1n9nd(QbH$7Zl 'bHTH4"'AX[(#,\?\sDcݛY<~\/;ꙋXE_vϞ9ysO.wJ%LKZ0Ջ,!x(ReLιxNz i`F#w#Ik6%MS+ #,r璂佈܇jF#+zbP$s46'#+M#.)k,XFISQZhĂE"hқZvWRlMkfu[+vڷYF*Ul[WʧqD1JV)ALjLk.EaG#,|,#.I<`e&ÿ:#,벜#.E]eѹ |n]f_iJ]wU% Z5*+OGFWj$hg 5 ѫ6j(YuEՖv !@&[^<(ݠ_#,plɕ#.7l #.OAsr>b2.ljٰ-W鹃#+7ځ:_x'|Fo4V#f74%@1K I.(DE5@fE ğ~(W/]|؏XxH\爫,S`Z ARk+xU30ֿ~z.$mlAAOޝNE|dp -6=kwxst]G#,p$C3۴jEGo4>WM^#,>;jpb+51pl\_ 0M"sxYh {m#,X"03y猢cK R0Gc,3(äjav#,'*N("x:;%?XSuf1ι3^I) ~2"O[5hJXh>i ,#rL"*sś$I->pAFH!bϧC3^1>gؽEOWWٵ㗭~ #+#+UP2y(\D5qkc:skl^6V*VFѨ[6ɋRkFXm^*ە%AD)r;MLǧκWPDFYCp\ETb8mݿ#,AK|aE6N`MV>7QvM?z>1#+릮oj0l`15f0&S ~QܟCI~pE jy0&m"%0 Cz;x[)D&mMjTLmx TP~ ~)|AMen*(.o߻C\̌Vn)hMSViVk]0JԮ=#+TXmuff^P*%`jIURQ $|*ws/HBQ5H8Bz M`1%Hi"AQd *Ew's p!?{-}fg#+]!6@"uA#8ČCfUH&.#+ׂ|=kk<1|h)[!'<Ӝ`8Uܔ~'zr;W.-VDL%BU.@g&y 6hgj+nQ.w!#+f/  #.91>O:<9 0썗B{mm.OQY|wmT*M(]k,!L$b#+ԛ6y@zRTQPLoiuvTTPηLw]#jQA#,mō#+KxtTfnH YRi^ӭ'm;JR,<hʘ*0$9$BƊ#.$N)fA 'gK`^HUYMt蛙ljJdgeHRJ'6^Q+1Yn 3PE#.Mj"&4+o;yyצ٩ PjVjhfccқM,3#[)z]W&ܹ$n4״7M*ZF~͆M3P^]jMbh%M#,qLVFnG.[puX329c  o#ⶉ>\x4|*8ɴP n܍hP݀20Ŧ;,.TA!ZҊ$k݋I%#X6fY-V-yl':LͯU2;{XV$2)#.l+H)6p*U^+"+#.6Ǒ2DVV=Eh,k Q舊HU`7w ߻.q#Q7! nˆfA8ͪq+RAXNeZԆH֣,#,2M4t8{DݛzS!9L&ܞ]DIڙ4#,/B>;q>V%<5fуԍ.V4.#+cKlTMX!@>ބU;M.jg%Az!<>G-K.tOK djF}lL]d-B=,э|,4b`ITڬKN7rHhIlVB-6ҡUG-#hd`űxa"<)ܰBa%G 18KLMIŠ,eeUcsp>RƞpHSHAJ"hLhW[y*6@LAlt1$"$ eFm BVS`#,8}l#,܏oլN~D_VP#.@T}}AG!t_i&uٹbFm(ɳZV# OWqMHMZFU'}zCѽbъGo#,LRt2p=<޳VeeΙ_%8tyM+'tq;7f"Hrͼ6o]3ǃnaxA_#.tp͌5xmEPń3s[IN5a^t8/zw"~zE 7c@QG'DI MyM㽨}Yךnx(ypp!bswF0|5F-Je#,Y$4xGhf7+eq*2&pLg=@nHL"REDP "aDl- t%>(!P,&BI4r6E#i#,GAWj.ͭktڤwbםr髵6r^-E<2b-#*m;jJŶ5ZMʷmמocV+EկK#,(Cݡb#PU]+bZ("4u[e#,DTb*U4Tm R5"uwnv 0Dr`ޡX`6񺻾,0肇:!okILs};PE?4U:ѦD[NκvZۘImr泫hkKVWݚEin>ަ㚙΄Ы#+C0C$& P1FH:"6H(CB2#,Q8B q+m#+8 "pv7ű )]ɯLy౲L WupVPL 7#+wٰ6Ws$P HX3ji8$ pMT#,RYzamvV1cF:?׷~%a!5Ltkox#,7QTS*l/Kr ~GxjYvoؠv~zn[.lx̒1Qf۷Ya *0#,V֨4YE#+غE*R`"#.\=V0)rL&B#+8s+gtvVVGw&CѪgTF̱k6#,?aٶ;b#.S*QlWv3Wۮ*!g#.Jr;v|noZv껪l&VvT*1}rNgOkECF;jwxĥy+6YI#a6T6ݦ4XcA+to.ul:+H^-ɶ9K--˹ʩmD;mnZjɶXٖM[tnݙ\J۠]eγQhTZ۔kt6]R{#+#H=\q!bp#+w BP D6 <~O%E8'Vj_qTA>nx@H,'6ϪYm#.⟟w *.RDc_FskVmZ" TSPc _’ƶMXZ3VCAhRT,fsN:YXwm`Vc_#.C>#,ܐH`/g"ƁF(0v |&$SӦL4{ wB4!7RzS6"Bz^y"]M6TMjݙHAʂ?nLg^Q? #+4B #R`o#,^lkceTڥ56TH$8(f)@QLtUIl-2f[#.#+uz61#,@;@B L#,T.\1T 陲ylگ#.Hќb4Sx$CR_åcuzU>K20O#.;>UX M1tj<#.X2 fI8!?=遦O) $N\trk~tl/@'q:-%I݂??{ X#"X$Q#,*'"DaB&HE˜?XPR c06I6-n!QR#+Vk1[T1y[UGx*KrhDI,de#+7;6*"IV^{}#.vvUX81 #%#+#,; A2+hX,4j6E6Ŕ¬Z/SXvkQUEk[նtR#,B4:rL諰߿xm G&H`?9_Y$Ha;iP1QJA,@b-9~am@AH@ܱپ#,#,TD9Q?,2H:f׫N٫r--uK; #4nu큼3OT;fL Qknj>9Rh .4%_k#,> hāFDm6ɒc$cvHEJGtU#,K@EZώF>]5P/*R@.ZikCfG4C"#.iN86뻵#40i L$Q>1h#+|?1ӱGw7en(+*#mҼ.c[%oE0gBQ7Mq8w$6^ovgAh7S,Aj5n KSgGynQ3-I|J5+as7xL09s#Ĥ#.H5#+4dD`o#,#,;!E2Z1AC;>^^ccN_.yϤګVDZ9nah0}$Fwdp6f/e<pJ1L},jۄ {r=RT~M|MuuX4Y l1GS&40ei4bs '4>2ksH|@2]ӵ:[f=O4֓́[_\H 0}͔~,o.3NP4oLMeu y[wnZPA"43!o!8!&glPb[N2Gy׾y"8nbF#,TJ4H9b7+3{aی-SUֺu#,U0ݦ`JY.YW/nm/k<`zRPDDmJ[~W;w_b3 A\0'uO#.doEP*Hf;N (Xs8#+INRkξ|ҺuΈCΏFGɯ;rg3t9YP7r"wD)&aMiy;H#.kG>JĕZ1@q ZO+)"cE#.CKe](q#, #+4U :Hυ ܐ_9p[eSB'r;fg̦8j|f5K3!NFXՇ-ۅC + [A)?{RVФv݆pQaua'Pi-p2RЃrDžʴZ!~չ#,G=V CD~Vd$$2/Lr.RHDuVwi7ƚ9ހ^ׅu PςDw(I hټ*/orϒUzED I#,rŒE#'kR4?]BF1$8xn1*2 \D!7z\rWtNm#.+#]:$ oCrj(UR$P?_620h&&)1 1(F6&&M&„6ݶyj}QtI#/:gԤfݳ(716#,&,a&BQƱsx#+0`eLqn0i.bVTBu"U9vŐE#. %l`znoKM&!j,`Ĭ;`'" #,&zNʥM}hD .r}||x.p" ~50ϣh˜𞶰9Te7Yo#.|f~@4ZbU1sYl-5^wmjSY]EW,)[vֺG{^wc@q¶lMc w#.^*@T/+|JT!vdD>utHT$#+_I5mn\\Q$Fr>m΍/&e-.AZ.BduG`arlj&V\1HM3MW8Y!q6 ]5 p%G"8Ѫ66y f A+o$##i6EX/k[6hq#DY IbBR(%#EZDHtڣ`3 DJ?y)Q EA0cr&A,eښmMf1 4#,HeYP؞*UDV).QلmHͰ&%R(܂#.YmA6V)CeKyj<«5C@)\ĽS0%H%*p]suW$ZD!H$(=+Mi1ODSm]P*"a7Cs`Nh2Ga%cQ1zXI];#,5#,ʌMu…}`pD]qcQR!yY[U#61E-Ylȉ3ɪA l^;n#*"$F;SDD4b#. ĹPHX(ȩ0`#,#bb-%  -4~$"#_HU)LXUM+*Z?jWKYhξݤE TXbav+U,{@?xp=2i+oPPDD>Z{T STa4'']>vpk~쾯gJ8g-4PY G,ŋ"+]]PA=B UAchvbƒSZSf, $䥖P LS i#.#k4(Cf}|#aa6Sc%pzsfo#,o3gy#;T' A+6yGDo5݋^#L_HpۡkWA+p#,~#;72w?#=#.NF%\&paw'BJωuL5?B eY6Zn)ӝOf?w~ݬ O#,.}ea#Li#Zw[/7 = DBoƾ$II$#.D;@F) eNĶʰ6X:lTP@B lXR<9EĪvgm1A'0D:kR+XDUOސ1#,%U)Tz>YS+a%#,H{n UT ZS"?9XksS#,%\رaI_MCtP(E* ,-!ͬ^[-˻6+96ܴ+&r\"6xADPv%vɎ 5d0P#,rӕĬԛ}d-"|EA  McX\UsyFPAJ?G?P"3M&I"U`U5ɵ4mm8; }T#.Z]R#x !(" "J2@REA"Vo"]B!.20$HDa DUdCG#+!`Pu) &!BZC#+H?,"﬏-p=h%/#+@왗w 'I$ANQ+&t:`=n#+#+A2OB$cHFb#,()IRMB[DmQԴ3ljeMVci5[zjֳ")F#,ǍlDne$`W=yytHӣ1*niqH!ZP$J51#+Ebm#,dE6-a"#.@`aj!E#+FP)#.A #./(H#.50bϷ]1JZ.t;J^#,꘩hA`HAlb#hv⡺c~poaO_ϕisE)^>$dz";KT#.-`'Vpuutr^xc&R"6GGD <#oˌJRӧ1pV!TH!PIurZZP aNI܇Ww5\;yv鮷]J߾jkb*J! Kbp:Do#.(Lbͺ)P40T.e7h.D-J?^+(9vl[T^~讘㚍vkvϪ!$)r&%5\U#hUӜ}Ћ%Q~y{o3Py`CN'cGdq[qSwvݓzUרtR#+vAւX/nrTO4*mٞU/@:h;M(ӏ+{YRͽK5Zp]٣=u\ʭJ8#.`f'p&ie3HpJ{i'[lǿo5f״Bzeï *#,nvؠ{RļR 1$i!r#.Bg#,-tEoJGh|c2̭΢/8Hܾ29t7tMG;bzJc׶#+@yPކFPC1Z[yq Z!ۺ#,O9wz;^ҜI'Ʀ8hm>%+5u:ζt]<"2TvgkP:oq`!^1ilә\u{#.hpbĕ۬;ιJZ3#ݞ=q5JJhfhqx(ʖVx˜+jwXIst0W*qҤm*ޞyNgsu,3\^L#˾BGuLQʏW;cg`F#B~4rhi_!"D^y8ܣd%m֜Q#Kȧؙ޳ax`^ӑ#ɰ oaa7:yS^\9BCKmQߓ;LWB\ 2Nq1oG<6gYL8@]\e7.uKYѳ> 8+j 7}̜cl#7T&sRyC;Gʾy!*k ha"KQ\ߞ;_+C/GյlݯMkEmHώe-lZū꣇@<ı(*j$sN+bFJƾk"Dv:e;F#.ǗMXu뉻q e~D0u&$KK֢7%Ů TW>:DyFdynVy}DsTq]3Ͷ #.Gdw7#,A%G}q߀qwBJ#.= = r%9 vj@3RuL-Q#,-1fFsMW^s@l*"䈀CBkv#,2*-7ѓyp4=n>jp8jsAa+^vDMs,!ܽt\w,w(aK2v5pnV`f$Q[*CC]còcv6#<-18]`\r P$~ g64q[zcت7פKép{hg>#,TJ'ogW[G\}qNi[aN]nO[Tb,ҰM؃ldHBaml'Qb%-@z j$i7&@<ƅbxmtT uDmam[j5[Y] XC2dE;X,m5XAPcTEE#.H> ǎo3q" ʎrԺ#,igHdq"7 B2#,MCIPpyd띆ml&A P*+] `sU"05C7c.ۺ H4L!wJ_\aB#i:dj7$y%Q%wHK4Æc2 JƚeĢز@2m$JL&)fsmQ73O2b{yNbyѼ+;]6nsDޟފ=Gy>@eAEJ=ȴa#L\F249@=6alS!vH#,5m.µpev4'pܖl{hTFG P;Ղ-6ŹkD[ut F ֧P[AFi&5c#QL>B2!Bk.@4V5vvyUTِ;ܽ>ME CDI%Ǖn瀿ߧTI5MZ~@'4=kl#+CbC2ST6,e7aIUo1J dŗNq&E_!%P1Tq⤤=~z#,|%X&/pR*^YŬ\A~>CL)L\=P3Cfuއ ~3d!V/#+A;G(7\\cHR Qd# %Go@kA#+}|iEuh?ûmzǯTQlUE*Y5 ;#.zO4#./)նO`Xw0&l?H|dP%9SLQMH)4a Mv(?n}ey#Әe=#,buSm}9_IJ+ Q`Hy~Ƿ^Rpj&n)$Q$7G=2)#+:eܓ̃ۄ| - A=9c}Al"е*QəBb#+02OdBDDAU0i2jvj(hXuGHwq8C6Op~'Hnk5,WM 1쩯#+z+<#X=?\/#+'gcU0,1[^:exޱ=sDncbS2!Evk%m>66"ip*a!53vTllTxF#.QTg|dLP'MX _D#.s&EܻZ7#,6Y@!QH6P";UJ2 |C*BvoЀf,FxR36=lS4,m"Hd,K;(7Y;RDI8GcH<׍.0mRDyA?#!A@DL3v*AA^R>ƃfpCmj/M X= Tn#,l.P(CI#,eufB5X0e~=7l0d#?L;IH " aMNY*&P'$쳶/NVqLɔ|e)1>A$rn tJvkbRc wIkh+mophi zr>u+aA&m1#,#Bיte'HG&*RQQhusGiBLьvuy`p&Qc#}to@Qj#.g ,}"KiQMƯ^t0#+SL\REW:1wieQ2厳 K\#c/i#,&Í@V6'I٬m6lƔ8 Z)&ɼo[>!mi嬹:)Jr" 5;#.;#.-;Emnw4Sggx3)rY:\'InJ0k%L,WHytle:y1L}.B5I|>4#%9EBbo8/:&h{CWth:j&#.1iu]p3Btׯ [|06esg$3@̷gnՠ 9)u жFw#,2  E,ocwi;Cs9i!U2\. dgFf.wkv@ə93r>a LNcyԳ 靉IOwdMa#rhv ]C@Eh쫳ߒx|:b4&!`fR# 9g"Z,PjcUKa8iEڊ#2G71ARٞAOk4M#+Vp(㍁CWcvtD3Hهa`vQ 0ح 4eT(}F(- hh#@m2m!hsE#Ca bIfMJpjGfX˪^]7u5z3iDARfmya!Wm E;އ@pFÑTlH4odADàġddj*m@9pLF.TѳxPh;.`wri0ESԾv$H]hĐ`q Ӭ2#M0n!;DM(`"5E$A<oGapn*bST}+*D 8 Ujei+D~%iD&OjGN5t"D`3P~!q*lطD#;q=z]p6b(.n7Ve="@F\xI)s˄ftcއ* nr}:d() lI,.ȍJj"0xQK*vdޭv^ybQoSwhl. #!LR တ#,čY#Z4Cf^IIe륹pf1j)udff11TH!z{;gs}0ljX\;&"j}ILaeNI;[b!pU+D2S#.6I(9-IJ#,`\7ړm,!#,:*&LYUۅ-0_áX,^8 §& i}W/Qe)["b LGķ(f}Q .5#+:Ba:R(`ԂۻI{phm9Rh@~2ECZ 1˻mZ~e+Hb"zg,(ɝ+ ֕*XCNDZʵ"JgR[&Tm6UzY@ jMT*D؂@hOv^)RL߅#+="hmʷw8ؤD2,Ȓ:^?KOMUX7~`U$#,,4O.TqGvthgĮ'\˧T1|8bBQC.`ȡ48C%&²\Q$QˇfY-7]zXB(4EiY8kprβ R)K BndYikOĠܣ=\fc e[4(aeN1[3tto6:$#+.k~KR|J>=7hc4]dQ֡HJ1$(f*[#,";B6T#,,ɝ#IX Av*|\ܯV!;D1D*hvIA@ZlTj"x#. J:@-ckڲ `9Pugd$a̰(Ĥ5Ǔ۰>0o;V /DRBfjLe1JPVƬXMQRًmIV3hlڡ8D7O$G*fx(êp󚹎y􁡻֢&[y]&$ .L|/;6SÐ{; &dS/}$×uM.vsΫosI@g !miZ'mT:1gq;;#,MIHƬrKΈ(5p0ɋ#,1p{$e}qvێ6c6ZAI%-pj[g"(5=!!4}b4Cʁ6Y#+[,dU rC- uv;QSzFD ,oţJ`edY7bZ#,ŘZÃi~bg[&2EKB͏7DRl pGH@R#.?BELt> 3 ۦt;XL#."u<"uULzt:')D+ϙs$ĐiU'Y֩F/Zj#.~o#,r" ҈cA@Xkm_ջ(˳S:8OO t7J(JA)Lָ}VU@#"7rE;[wC۵M@#.K6k?C]n9-T<Ч#+AvENA'eK##,@PX2c2<]FF&]Hl30^+wmES@(!` 1BЕf$bAh6_TUJHӏɟ4(d#+!i{X!#JK(ƧQ_dNdUZR^Idٖ!GHAn,p&p&5yt:%&#+ʼnLD0PDY5*䨷ݙ]svU["ͫ˻h]]m&ʒDhV@U#,V$Jyv&kL"޼TjLJVSGbuwt/'8ځH4a(LJ64t rpy&„(#C0'kU%msэj'娈]@S_#.j#,R#,/k^Dqy5#.NhT15#+iF ӥ!"1OA{ݖ"CzY-3\BCJ2_1 Pz4#.#,߻Sz c'+y}:CD2,w#, ̳Cr3ߙ=fȟuDIb!h@A3RH9 [eQoHB Ta<܏_}߆3d3fjBi,?w_u-=#_?_n~/7?}?20#>oS%S!fUAS#.pk.x+\q@#.ƽQywQ$c0'[#+Z'! jB MLp qX?uo`pv275 no  r|"It#q]F$:9ݘf9=`tfKxdClQ3|QK8y7tr868YP3t]*ƥUqdե[6ZJN%>.7*jHFݚ qeCǒT0eTh޶K=N{]`8gvmiej*L>O')(AnëNYBM*5`5q֚qw,Y.h2ϫV-9R6wsCZ7HuqV ud4|ԙ69;.Xl\TY HF#yd@9 Ѓ~fgxe:kA#:Ӥlh f4S4 1h{t?f`'w č@u,M8Tv#.DuĎTCc]’ !W7.:tFrF8?ß̣RمqCAT,T&9CRyqj@s2l#,biibE#J/f†$"F#.!xCEY3K3/\ m~P3$bP粅#,SCUNnni5m)q5fɴfi"ES_MW@t"t>)Sn,Rزs=ˉM@">O![k;lIed8*b׻aHMuWoW Y՝:mpClFg#+B39vjkbs#+5噫w#+1aJY2p!x| CC&:fZ:if_-?cp 04X'X"x/(!yVܐȠ#.kٶK/HB{l?t _}K:rW9p!Cc:hG =p<|FDҟ̤ړpjG82?N%?&Egruf~ʠ=FbnԤB6QQY]N*pMp9SCD 2剼#p尖7'ו /#ӆ`gXEʿc%^k vd%b1^#,B,(H܌I%#.OBp"ܑN$^p#+ +#<== diff --git a/wscript b/wscript new file mode 100644 index 0000000..6ed583a --- /dev/null +++ b/wscript @@ -0,0 +1,25 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross, mittorn, 2018 + +from __future__ import print_function + +VERSION = '1.0' +APPNAME = 'waifu-tests' +top = '.' + +def subdirs(): + return map(lambda x: x.name, SUBDIRS) + +def options(opt): + opt.load('subproject') + opt.add_subproject('tests') + pass + +def configure(conf): + conf.add_subproject('tests') + pass + +def build(bld): + bld.add_subproject('tests') + pass