summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorKoki Fushimi <paalon1936@gmail.com>2018-05-26 14:31:45 +0900
committerDmitry Atamanov <data-man@users.noreply.github.com>2018-05-26 08:31:45 +0300
commit09283bb9399f3eba62d2ce682d25b7b34a4ec135 (patch)
tree7794170940b79497bc7eed55da5f9274f907e8be /lib/pure
parent08637bc2724c3b21e966c0d00f7ced84c74f1ce3 (diff)
downloadNim-09283bb9399f3eba62d2ce682d25b7b34a4ec135.tar.gz
Faster binary gcd algorithm (#7849)
* Faster binary gcd algorithm.

* Use built in countTrailingZeroBits to calculate gcd.

* Add definitions of gcd for integers and other types.

* Unified signed case and unsinged case in one proc by using when syntax.

* Change to faster one.
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/math.nim32
1 files changed, 30 insertions, 2 deletions
diff --git a/lib/pure/math.nim b/lib/pure/math.nim
index 9e590debc..49d87f007 100644
--- a/lib/pure/math.nim
+++ b/lib/pure/math.nim
@@ -21,6 +21,8 @@ include "system/inclrtl"
 {.push debugger:off .} # the user does not want to trace a part
                        # of the standard library!
 
+import bitops
+
 proc binom*(n, k: int): int {.noSideEffect.} =
   ## Computes the binomial coefficient
   if k <= 0: return 1
@@ -455,16 +457,42 @@ proc `^`*[T](x: T, y: Natural): T =
     x *= x
 
 proc gcd*[T](x, y: T): T =
-  ## Computes the greatest common divisor of ``x`` and ``y``.
+  ## Computes the greatest common (positive) divisor of ``x`` and ``y``.
   ## Note that for floats, the result cannot always be interpreted as
   ## "greatest decimal `z` such that ``z*N == x and z*M == y``
   ## where N and M are positive integers."
-  var (x,y) = (x,y)
+  var (x, y) = (x, y)
   while y != 0:
     x = x mod y
     swap x, y
   abs x
 
+proc gcd*(x, y: SomeInteger): SomeInteger =
+  ## Computes the greatest common (positive) divisor of ``x`` and ``y``.
+  ## Using binary GCD (aka Stein's) algorithm.
+  when x is SomeSignedInt:
+    var x = abs(x)
+  else:
+    var x = x
+  when y is SomeSignedInt:
+    var y = abs(y)
+  else:
+    var y = y
+
+  if x == 0:
+    return y
+  if y == 0:
+    return x
+
+  let shift = countTrailingZeroBits(x or y)
+  y = y shr countTrailingZeroBits(y)
+  while x != 0:
+    x = x shr countTrailingZeroBits(x)
+    if y > x:
+      swap y, x
+    x -= y
+  y shl shift
+
 proc lcm*[T](x, y: T): T =
   ## Computes the least common multiple of ``x`` and ``y``.
   x div gcd(x, y) * y
*q(SB{}*夅[vi9 CXʱǴ(c1X!Q a?J[|eI m 3s٪EЄAO՟j%3Fp 䤣-LH]dJ#!Ue'M>>OW4=_a5ÝLhEQ7r?h@/;Bk$Լ|k)P LjBLچ0X/e^ii-~̧V\]: $n\Ehiu'h:ek b=D,?P'J{NMmN F9E|L NbUB#F7>f(&,O,9JڳL:YaR:BGN'X7t`wh`y^f!ъXEL"]G z,ӝRojqH1[hi{JQ_OLwwdEQL?]~+ʥ{pƲl~ M"Lk!M& Ĉ[`R`t.+Xp2tfUc1#ݏ v(th[fGV#cb]³ ,fa, J0~\/E|zϿNJnF2U3nb=5\!H*/yBMuS]}m#r.CJE,< !w@9 ›߇,w1SuB |&GVT1Y+iD-Z|L;~r \>E9`1]6 ⵭1)uvy6_qQey9Q*yT&WR~F&ba?`feq}+.Pa}/(_L „\&';NW6ac{G0 ydLSyLTРRF!!fb%f.3.?WR+? A@a磔޷U--VFaQ4%MˢX֥͐ZZW9/ZEА:o[ %(Dy+@'PHx1e.2^h?|!czw0(Tx?0zV&8>t##{-!yǛ̶ZM S+Mv'uhT+ +kAY}Rx6A+@b_0 r-.O$);@J؁DG6aBN()]_׍r:l%[ٯ/7R|Ȅ$ 92l0/VyX$:1{C LXf4.H, 1N>wm3^_ ǐf A[\)ocb`Am #Moba"M.hi~B\>8tz 0Vs=/Ե7Fj8[ d_LﭾEbc4oXQ{"59tڧT,xyD Wx4+P2Z"T4D.0DS}1šAnRa]U6judָN8; E@bjC! ^xZRlX9~ǫ$dQEԬ>~]@%- @TiY68 ]!/#DU +,jA'Y X)2))ʜlPe:oqlMLz{Tț`ՏQ/3<]!`Ƈ|0e $,FtAK&*;h DV9b %*d16֛+a+KjQda^,|5s;73IϛU+L &hكL˝ Crl "j!S|UgI[MG%S"'{;6d.#/<~4_n݌pN@?[bT4d ru+ Y.=ϣn=BTF %+ I=<H*BGF%Dcl:Wis9/ؖw%lă͒E,P"viq*M!"8"vp?iEf?STqq!Y5q\NG$Ytb~Ue3*9^RxuP) ګ-)d_ɃBpjOud~2_IrP~_'njZ>NJ]]h*ݻBXc78QRjn7H R.XÜ+cWPvH=!aq2u M6WITuGV% ε^Г5{ IvRS 1ˈTӑ]@n̟_Rfљ°dy=SmPX %,66 '5B2Я9IP(e5 ]Pd22(Y- 6Z;HCK#~`z"(+3׀FUe㱅XcyVʛ"U؅AФY^Χqm`,P$)DP*,_8 dY P N ٹ]`4}! =DoXw^`v"Hj`E;*lnTK ?$Am#Q g<|f|>+ T\llѳ?゙77nows{}*\Opx M̑n5a0% %!@&ZUS=OoYuՑRj"sU2[%܃lPo@2_I"4 ܜj_,gy C PSN io oe#-Jb8kB4Q40xoA>x,XćH XC.y.ViͤOp4(nn3h+6ww(m'%E̅Z-c;,j\ &5Z j aAci=j_ b[$X.VѰu;7p4cqnζ<+f_jypN4&-J`opYkkD;ӕU5ƮT%usЩ|*K^4֯u"aGȎG+Z0e!lFR( ?t@[De)е_ ȢV/qBebT; qF@;ʙmoL=N4؎ڐgQxS"~; Dc3{bEUAUl9昩<_B` 畡lo(PVP!f-b+Z.oE\x4Өs{bMZUijOtF0Fr$辽)Dv9k#y?C2u=Gs+0% "a{3\l-3N/X h_|XQʒl(@Ѥi @X>CINqSCVY,Y:a`=Kԏ#t-êO- ƧVj6V nA- gVS+B5Y3مo14 -#0Y{b(qC:Mqb-Vx/Kc5sBlVB{xlXhОųzfgw7v/-tAOT5#/Ȳ16~{8"'-/bgNNu'}ss)lV G2lak5)YmU-Zv, {3eb:c?qMڍr^WtNr$}Ǣ)m/SZaI)S'Ya:8|̾E]СZB@sѪr'llzmX bJfAФ`NL% $qX80pC?aLPiKj|`:y"- imnO|{+S:l̹+^C-@mc2g(6jɭ0#.6+6$>v *be#Qx*C-TE:4DgFk此2u7ۈO"G~_ϩ+JG1\Jx}etjt\HШ/1& }Lˀ9,DPIdA:tI7j %i:BV~<ب~5"kp#j-ɓbs;H\IFg-ڿ` ͝>>KNE@C´]F&Z 7IS"' &C*j_:;rT?u;Qs-ÓVDNiNh ,]!?AV bL'Qq $!Eȕ103/#ҟZbHuJͺH2<#gє~pN$n` Y..HG-e9d[V@2A@,Ur2,[ՈEQj! e$T$^V3`Yc]s5Lv q[G~ƅ3~ͺް3p@ qt4+a/ boCM0曔a49/(4)㤒#}*{1sˉXOTXA+((QUOȂpGl㣦/<^~(}}u4X9_؞ BE j$k8)CfF?0ͮ7DsyV:Cqr~A%$Eyk b1a2G$ۡ9Ѷ$˲9+2h9: ֍>.-T(Kad.-OG@)(eS|5Ŏ& C2+iPwmn_MWd0%W`B‚EѠ=N@;/cݨ{VJef 3ۣ%$}>-&=o%qI.F).8,aeX:z% :y3>^k:Ft!6CL-Ē> e]Km{#ro::} ۫Ff.kqE\2!QE0c"gQ3y(QK?!(ǂ(bez!w:oɂ uWƦ  XjTG[ ]guI0UYV1"bRģeJi3o #^ c[73V&=*{A//၍S.3 l] WY3x=a: 1ro/Ђh@@D(:ED^X&W6Z _!FT0XCwBtn٤*r-{RT填~ǭU~h) 63QzUqxV.~v TV A**@O4g "Ytf]Vj5BZR6ec"^ 4gHȂR]*F$@raP޾ib6zl-14څ!"@uK e<~t~qn"^Y)u Ĩ(ЎX ՉťZu} ;vϑdT! nd9 z"a4 7K Qc")B_B= ̃9q881Q=lh.7|'oe.Cpz;t.⻽&[B` f$V(ێw2T7*W?p5> dn7ޥJ^}} `36s$/Sw;OgSc#K(D'ͯx614+"sYx L7Wv6T{(4 62z[1x&)+V,sZ0ݷ:SH p|jZϳ?k,pa뮻9L*\Nsu*\E[es@O͗|pP=фv)˛ۛ;Dq)5ةތq9#um6S|,(sdbB I@c{sPXj{}@@ѢOi+`1<.̼{8?v"(; Kv8E[оT;7 q$hEkQCᕕ4sJbf-^LTjx.M<l[Hb;@\QacS S=˩rU촥.eH)/;jZB t]9ný$qGKln!ӡ=@MA|U;rh?4ě#w株plf_Bv_ U۝*\ԁQvHV`ODQ0r$s)T%q^ĥ2;{k0.rb-߷trP" fe&q΂;;v7?[xAsi,2 bge*YXܘlLFA1(\EṔw䈶"O06Xc&Ƥh((U®Q+SޞmW KTY iDl !<~:DKޙS3Z,ɕB5NiSEf\$=/nٞC< ZӴԗrXVJ0 'lY\̕~1qF9{#V +qXP[ȒXr*\F3)f)^n"~p.xK:%q{@Ѡُ ·`KikN,:6q&<ؙ֠ *+Ϟp~X3l:8K޹+lY|PA qV,;s(Poeũi % GQpJRڶQ2/eX1l~胱mMhܦyMUA}p;،Wڨ}y[}D71p}cV^ພU*ѓnfp8!qy:iUK'RYIyDʍzo>m55!LmA}pe:ruop?DSiW&$W!?`O%_S®ckgÇʶ#uDj$hUX{ڠE #r_}ޚQ8 eð 4Kۀ=Yxő !ٙh qCgx"+N7ks:(SqqTBŊ.V] sOYrk[5pj>ߤ;WB)Y*\1vw.w$9UFeYl 3pLtI!6buvo Kr5([vAgi%:>sgU( TתpM ސiD 8Kx&#qnhUS*%&޸{SKJ+T(+G~):A`c%%Yû^9B*Qj)=V8 ^]ߝg!w+ 9H4rXO]CNDc:y=?]s(<wq$14bP𖂵̜:Ww  W4)%-ŀ,[wQӍCTW9T#.Uq  ѵ5W-Bht赑h<(\]X+O qߘ|SruoEHU2Vrѣs*e(~ Za)AL% N1٭gsP5پڿJ+DcCev9 GhMHi0S6ILkmxKv3 4jdUI qVD݁щ8e`Q%Is嵍o4@S<.!K#!?[#Gtez]5n9U4 b=p8h-{cApS۷bZ Ǹ[ q%(#]J +QzG$E_\ o-wF~) yATgm`a cK,k957ɷ'΁{FY+=echiJO2- q{9%$YyYZIb!k#;un.tc T_"`dZa2O` :lThzñ9K92\5Pi<ƟB<&rC␟ER\O>Y4K2ٳYN%Fhȹ%8Q1Aͤ?Aa΂M"Ah )u˭ i+mL3PN#5!غ݆0lf7EQOC?\?[5J&̵:aB%0R.hvBG)ji odه6]LyNz9w|DX͍PR?Bd+-ɰ}&F]T{+W*%.I_ HI*TGq/VY1"d+@3LL O<,u*CxUкŋY'g#--GlBRo3QCXh;|>Veĝ-%(@XBpS& V&3B VxƜcJq8:sV,(aN&p8=EΣAU us*sDSfaea넎^;:Mbd{ \Bp VFb ]Dݼ‘y M%o ?GPkiBy^ga.Ck)咜ܰQ48&p`if9ק\Q95B8wv'䗥S"%;QZVdw2$8TZ$ZhZ$.(^gԂ*wu : 70# $QMg*7q h+]9$ okҴ=ʣō1#2Y¸n2g$cG*]-/ {%=ܵ-lr"bs TVu8L;JE{^[6NEnU,K_Z5}ニaUwp^V*Zy4 m1zR^{͟Emfq Įa؞L8(Ng/NN <)f:-~xmMqq :0K,dG :R M?񿗔˙\֫ws5˭UP@$uڽ (&2,SE ~'{KU+(q2kFRc0!FR4xL?Ѩ`O;-1"yis!@0;;tYQ7P (F +@zKl7J=' ]CάwQhЁV b6֌)7b˰K]ؐF_g\q(eǂKi$BZ3.f)9v.$L'pXI@SkGԶzi C@yo0 543hV4Ai3m(Wwl}{$]s)ˏm&pfa!XT@CoJ v98Xɭ,%p6|KX+8.Smb"< fa$ m:/p^O.$ 6l0;)qC)BX@`bQ4ВM΄ W yVJܑLT2B,<ԙy6XJ@ltwWV#:Ǎi9)8T.ϖ`EBYWu(R`[Sm]CtGE ,KK&Rh0CiVrR-'/wbN&$k@-#V=#=lzߝ7RR?{0.L rf ϱPPp-.!gʮ]JDЧ^.eo)T.Tc&V Dx"H 'U1N)gρT@a$Jx|E8. 0_ OV“'bRNS0\rb(Y>%+ )sVZ%Y8T^ZFSZ q@G'cmWO'kKp('f0; )B(;IB;M^*-/rӖڨf%ȘtZj׳}f)cFKcEI"Dܤ5¼- <w+ˆOQ_JC -r`KE3ܣ|9Np::~*,.>kgBP^nJ ^D8 >O`RwD.%GlDi`) Ɯ*m vPQ‰W Uë_ [DȞnS/qfBJ}"rd[zC:/K7EQܭLS%dYLKg9@쫹*,V̂uuQ[U1H bH(J>mZKLE#kkե@CDP gr׉CTlI(cs[i9`~zJGC'2.8T9̌Tl`>% s+ 03*cl{9+k,x\Ydc]Rb_%/x)iRy̭ɉ?͉dcdC܄}IҍzOKL阯y{NhUI~ILJ :uh߼?$e@(Pd3cHΖ5Bh08szjvߘuuUǷpZ?J~+ ?.zOaB@K-2gufte5A6t6L{izj`,^ΥDh$ݪ`h87v@.!3Pi{=gmQtƕth =I ckj@K?w03٬gX8%#\Ct()m!v5B$%t{)jm cFxU, 3k'H=_4V~U65&N_0QaU2neG&\ފ Sc9͸ uDn g /l>p#3|&&&-\ag OVY:qjcgdc+<%wWOQ~fH>RlZM;L*rNgxF\t˛g6Xg*ghHŸ 7ze/'ɰ`i8a+*Hx}ِP'ڲ3QaM9,N){TDp R/C!c N#粏{xQK= QgǪq{(JPD + 爉NSM'&ƨGD 6EjSo U8L@#/(%_?#v0fwo{ߖ!.bPI5N3n7bt1oh\΢%2uIWr/GgXԢ@ՎIS&'ZBQ#eܥT c?;reSkuP_KV[t]3]u*83xu>^EaUڻz96|_֖8 k'\B~6ьvθ8GjhbXǥ:W.FcQ7HZ!CtPTmcUure,|8*#I^gz4x_laod8C&Tcy VI,q7 ^Kk3΁AoWS@bC*d wff5uнI%JVvJqkb݄OGu^Y-W: Koc&jT&c5 $,g6EkwqP? R[3/e#k&3$Smms{aBjrRLDt? 0c?HKήWq4^I,LlGBd)6O 5w:$3)0~γ-"ND60V,"Jךf[Ij6;GR9-^` ⭎3jͳ g6ϧ>2 mV$^4i$H$)܈~і1#=iZ 4mɬϞOUe)Mo5n2J 7~9.e|)7r`NFuݕ1񈄸^O|\˷ºBk*!A4|]s-,Z-2bW/,qrr:!mua]θc$V(ް%3UcYuZg8 P|34]@;3\@ϭ?,h{ "\ҕCȭOa'b4Ѫk *T]Pή{x ]ȿu|WҶJ&w{ F#7G>W8>ŃwfNQ;[h;ٶt{+ncq$ p )N ?ECPȰ!4FI6!:уMs 0F׽S6c\vaSŽEy.;^六-%NZ6CyY&zdZaV_+΁ʕP f悮VtjѸ_pƓٚow7ĦFξ!~Qfvg4Brà <E~Yp %" ,&I>:="A_\o.Ҽz&kJZ\*/ ]dlO2"\Q˜_Ta/wB.D;[Tl‘Ы_ܺU4ZAC@O6y!S wl $,}?`Ea6{`.ט/@B؛QMnHG#=/O^z͆Ͱɛv,aX3aKE43QUt&&|҉R =#-@Ԭay|6lKrLR{vK:i ,`>|CJF{ܸ.jOzјI5aukt WMTA31 ]ӄe9Z aD"7}h's.. i 0Dv ;L^0~Kq*Q,3&_I "PoဣcaSAsiE]UþjWH^»vz&7O[PCûLJDCx  aO)C  ,<|;'9:l=uVb%CC<&4-+;=^U곩Ypfl9akqQ"Cci>XiU d% B\8,纘2_U1d[{ 5Sr}amȁg y )'oi'SrR鿱2[N8^l@#]H\>t4+Ф!EHS1#)5rOx9t4u2{ j]NG 'a IJ!VqpƉs7iS%&e7{ݬwzY2"nlPq#vRQu672bς S/+yG}tZ=73mqTo9q_g~(Af :6nSu2.FJq5ؾ< 'D?;ٸ"uufT*0E0Fj:G𬿐DRD~ |r{xB f١ُ}$$cʨ&ڡ^IuZ}H3 W%`_b祍փ>NbGD@naef)kdoM*lx)lUSh/z|4?(!ecE<J8㪦kʾP#o"- g/^<JȱUjWgmkQ}kU];ͺ{WrҚHVNoKEMG 4yI)/+U?gtxW_ylcjb,Za2&Kd.vrZ2U!S5UlUA$͚$9RX᜻z{_̺g??w~?[^I .}wKQ^|x 2I'tkk j@YXQ>%NxfR]=ճq4k_Z df6< VRR .fr KK Ym1'~fq&:B +l C_ɺӬnN}+;wux&(f^Vyӟs@mm.zfb6UO[+F;|BAKt:#{ Ei`ؾnI"9\|3{k&D⣑95^XD< CIr֡ukUEa;rΡq=p 5J _RcZՃcJhcM8i#S)m?;DqB&ٲWdCΘc#c%mǍF sHOc; RTӥK Bޏ6':VrOt g&*U!#-!-hQ]͹\QPXI',U3ÉE-2O`u}3s$p:6r` ;~ꄷ0SCm_Z3Zmh%ͽb+v(S42m`7b0<=s&IHE(T [R$L=^ĭ')txp `{A\'.?3&\QjGHqގ6x3s(|Sެ^\$gxRh[ ?ou4օzk#e'2#/ô/ !(ۢ^fd`e>xE^u]} X˼{*jbB0׏)4xDz#1Y37E}O{ ϧU] O9:?ت{$:)65]"K;3-IΡ@L<b8Џ. TnG9cQFT. {&0Eɘ`n 6w_0D& <x,@ ]X"v%N>mPǯ`̮_Zx J8/v"50)Af l3qpY<Мui`ya-']CrF^d^7cъm6.JHuʅxOV*ڭ$nžq|OE?"5GIciז0\Sɟf*8N=(;p줴8NqèEeyh¡!:@[9:DDP# ʈXpd ykFTy<%z(ypHAS+[WUz-<[XH ^E|<@(Hq+_L&Bճ7#\Y^aОgD 7LC!L"_p#b9Iy.N IN;'Ev r_\:Vg]Kɏ*(bCaMd+hp@ qL+|u tVF ?&*6kcHl7- ?4LFfQ]WLȰ P"環)D|4m~ךM#^IXMm/),G|T\ *4M?2Ζ($ kvtŸY zC,FTm3T}}u*Zբ M<`cԿ;r].e!~x,tFVO jpw.K4ƕm.y]sͦEjǢr {1IieS$%6V)1R'\Ip]ؗ IwNvqLT xQ^3CGg>1).r2ncg|7J| wl~ H?=ǡM& 0Hu'ⴛI Sٍ;, ~hGdZǁv{Nk (zt3~px3'K)=ϛR{? HCo,N̉^( ǦvofkHB+A̍l ߧpCsO0KqKf- euu#2O8yfiY)A%>ߨo@k$PR@HGL.'l׮s l4x}iNyr%=Fnb/C L*Z{h$kouAB\~"of3(%3Π@L7+,QΰŢX|pYh1prb H|-6sMtiVkjIN]@iͮ@zX^^~Q/}L ה+>LD ո̮eyV MdBA.JY,r)Xg4靍Pf)-=3q1"2V:30"; @Pw@#P^H.gnP;А/ܵq=E%k8ąo|(<\g]BqM3d?8@VG5X/2%\$_,GE7h&F܌cj99nS*5lm4=giġ$ҾV@V+i\*(HOKmY=g&F<$44|i`cuRM=~Lqfh>xxQV8EmWOePcbsәM撘Vzi=YOջ6[L~ءf #e?3y*zi/!2)8 \zpxqy|WP4h=d_ s;B:즹ԨMD+8eE~j (A92܆)Q5f&2&aXVˋyqSyil\RJHkmXR(#NU79ebQ͎RIq;(yTD+F W1ڒV[hv{2_1Gƞ<*bK@OMD((կA޿W}A{S)|s0Db}vFwB'w vl#71su<-H @&U*dbll AhAmG#6ۧ@U{*a.bӢZDez=0 *Vqگa7)6u »@;IF}AXSu|bb1;|[GC:ػn7"ϿլK1wLJط̒ Mb^pjagM}}R%ЍJݿz;/4Ґo8ӒHnr+E(7 X[i7hS磑|cG>gRT`q׺}- Fbiy_ߩBDFT|=7Ǖ O5'[Ay# ܀`Ĩ^B,YQ~}bDlotς",󆝊Am*) ϑFV@g0Ok;=hV~4b`m"|C/6Iщw:޿ט0㹞|^@}vsd!_2 X!__O9vuTPiƒw*)΋Am7 JS#(QWAp;2L5B!&)C6=gSnCT`K47I60^'̗QjAvjU!8TTw"Ӥ< گO@n95@E#hUa%*ܟʮ^XZ4$:??| M43a:u::0ZX=+~VĊ,y|)\VbGӌp~!x}r|Xxt@ұcq2M: 'U.7*28 gèQa)":sދVI(z/iṈY~YP(מdG b &q]{U}*PN1Wj%1DJBx2@ !I&+HBQ$K+ P*{D\"vgI{ЩT=GkֆvlSp*?OSMU!Tt{O .elY*Xkw2GK4zcsp /'R .kmt]VRʝJpP//*e,gVZ`=DytvOZpdH.j0:I3"Jo* 5$1ABẄ́a/*Js*S^b@=Uy߄-b-rl֫tt7qN[{׀H~fGpP.Q.Db45L3Gr)ᅺtVjW2m7]W&TI~|glAuIK~o'b_#can&p(0X#/_;~MF@3Кf4vckU(~l]!$ HA2Nm? %hџ'hH 8c3h* ^`YŘ~ԝ>C@"fTR{bfɼ>Q$"ǀ"BZl8HfOjvv-^D[&k8 #7mCR`DYWFg|espÉ¡j*}~d;|FIOS0346vVST#S}u?`;9Ё`]Vʞ%JZLB-КR1;P, ` FQEҁQn$"Kxڑk]*J:sΪ:Mޭ3ҫD:6{ïitQ'WӒH)΢8|t`L廈htVP& G芅F UUfn#;1Ԁ+h(I7a4FJF$mCRN(<5F%W;fnjӹȳ!An% GOl*{ޱf`.MYaՍ<*:­p__ Z>m&ɣuj2jDiQ:rHlS7m2Ƹ09ϭ)ɶèK?g>MA@_Ųҁ!+Yy6@FAo]ۑÞh,G`ؙ=uTMU #O6޿,~/JƌR+$<}a^#pO&0LJw~L`]ɾi) deG#Q93)DՁ dp#$uB Fo x~W 7Psrv*I4>{.Tɐr9vk<6YAVrƷ帮$BP{[- ;iM]N^~e VU=%`\VQңt@lnSE(fŏ>~z(di CW#pe=yӬD|)o^Ĝq)Rv!xnTe ՍXtDE6mIHCn4mvP1u !~6R'ߩ.XLj6A9 ̼QDܘ*_,L LUAo+ģ5S:i֟HN4s M{J%;TE) .Җi):cǍVlx^Hf3PGodbB aNjDb+xo&u+4P=/.y2jCH}E#0ހ*п75RptDJ&^ΰp#HFMG]ћ{{ WNy"ߘK=Mͨw3e"]e itڋfw\xޞ> tJ9Q:XBO&r2iFt ,fo,TbJN?"~D7N~ܣU^n?4obCO!xΡD,4 G ʉL 0(9:*Ġb/z+Q*.@H\bgYeox Sl*UB,5 [H^.ġ})Mx,F#cؿQ~KbtDu*N*|t\q)֧SRilx9TGނL+]t)S`l-wWqE@;OS$"O 6 *%C n"NU?1aю @`ww'UV3X.'J>P1WlZQ+Ǯ=CJ=P].$8Vʽ'vVY̬/qJޡvKzLh xnvee4MUl(J@ȏhbqCoy+= oo=U|;0xtO==0QVTa.cBWQI[yl"~ Us*a((s/(iVJgB*cܷi,tyWS>eoeC]ldpC Mښyؐ꾜ͱDv(ݝy qK\nA|m.>va4}oU!gG%Zߝ~?vK OVIOwU0 -kQ,-UUoU6@FP(Ђ։ Yh8*ێ:%n}M+jӤ[%r.cTLۃN{f*( ,mHm|gy[J/ru V!I!mY(<&JlA`C.SvRiOZԮѳi\(qq[aPfū %GfJv*߆#.*iCM@7lOtV(DĹ=d&S i~Oe%~EU|2NaP?bWI:bwD4;^NN(Kxx>: hi'*p{1I6;G -}888BAߚaO.S>{nww; `c|.6 vjl06`:#h+AB/gtZ逮ޔUP[P~j迯B57-05M4]/wnKO0O/ןzo+zw|7XHbK4%1|{xo銍['y פ FO>_:CK(w]{)GdcOZ"F SP-U1q}2u-1ćq3E>LSo7{{c[a11Fn6Ovݪ՛LJu] Z_ rzx}>&wqRo>N~گ78gSov}{OTW?>}^>S}o1Z87;~?hq|cE %ο_u~}u/xǯG__=p>Z+8 ѯ>Wǜգ_=~:(]PQ.855ͼ^nmRZͽ^s__/O Yuܧ^;[SܳJ> 5i8f'XɓI8:>-IhU fgo-{Vߡipkﭾ!!6-kѩ8\=XcLﭾfa1a??d}!O?]ԯMnēYaB8?G(#v|:AZbDG<iͷ>VSA}! }_D!Ǫ5+*>sjY>7_eCY01ˆ~dSolH7by҂oh āۢ1iyAq4Keͦ ӞV11~Ac65WԓFM=\y@H/IA>O׉FI1b> ;'^\`4J׿hQɏXQ ^?uoG}o`&E{)j>TɌ84:lmԫcqq~kI6 N)Cذz/EisrZDI #'9Im z>/x ~) 2t*3e78Vv#oO^sKvM#ߒ8츝qq,?Hi97iDCx9o>]-6 #A#U+n)y DjQOY"y11Y~le1A$>r Zz~qEҢ^~OiAME_s!o GQ4_ 硚jѳ_(%=p>>MXdoN _ [!ǝnRfv Dt@omj xY4dbi!5t4G=7-eЈw"IhyșYo^ b썠|Z+I6"f5_>M/-tMTY.2P¼> ~b͆˃L[IUΏğ/|[N?@F6c9evo TI=S&ex,ɶ[s '=66b oT4FNo&vV*]HSALPo[,T7&"H떚JZ/QV$8e{EwŇDpwR~OCwAOw*AB/7PC 6~wZ[?~?uG_E oi}iU1\l ϖ;'!H!Y/߆'0(mL7K*O/`GyYmI*Sa;iXUT$OOmy~"v@WX-MT6"Z -R*写!m$MUo ͩoQeGq˞x !MreUqW._J5niHfO&ӵ7`tAeԖk0ӌ((IE& /œ$caDq_z-Zlp't̀@ic$wI0hGR{/c=Ǟäi`d)J}oVJVmkE*Z]sT[B,9wВqӯ٧B7?\0J8lo Nu[IK?PulBqo8Hߕw-羮9}4dɟ` !om#=-edJRY'V%ط5`3xCZJ-}%{{31˓6́&gXjr2{tVa@NtY2-ttn\ dx(#|Bq7^DwM{^ itSm9<]n϶}T{y[^`?{:~RK6 muZn8$jlJ ׭wʨc&}iW;]yw{[ۊzB1ohs hE[#M\ٔ׆GI£z`V>Tin^Kv7\啭}RJ.CØ]Y&P (z^ BjOYZ%n|ihBsn zZw)G5}Õ~j ۀ>c?;ͣ?# KRws8ӃDS@F<ڿ~]n;JtF0H xߦ̓Z4o? K *LƆI{H0D4^<)LsHE(mZ2;B6t^wog7>n/tf˨&G4} Sgmт% 0\U!{} ~HQܼo8wOkW'7-[?XFH m?3-m`?7c!L2\K kc2#\$,YkJ)YudPp6P)0zIy)"t0TRy!DN9ۚRVsmmEn[NBu7T,FTN2Yt+9T}b qw$s>HrbIB? [*S&;^ivϧvv `=O]rx+s;ح'[+jѴ-Uz(%݆ɧDoo43f.iH h!Z @&&MglPVbr9@ψ0~hekQo3 cdP㣴@*k=mJNmM;`>;4Ο$*/xja5w(֌A|#EX[%K@WW ޱTQկ1_8g8ϫ#8m2]3iS+|vn*Ƭ&bu'،[Ei8׶a޶̒$ )&\ul}ךrEa>4}>IK1lOSo7ϧhK<𣅞f+cJ)ZUQtE&)w|S+HTgt1x-27}xJ L`6EYMk~C1-L ٨r3b/H)E8FB -}1`_)IdRd5.PŹo]aN}tuI$& %DiFvEmYd6apŏQ}mÎ͊yVSvro=)wl17C<t_O{Daդ9,ه+*4-יJWt2Jš4}z/ъnOGۊX8d9į$ųio-Ѭ6Nao9]@9=W E(֡\l\e*)(\, >Y?ٻ1% {,f,vYS\I.})v3N3ڵC-|m3Z"sr4pɏ_ ckmc1RƟ͸yvӍJP?&v`i0[IJ75M*y1+vFfi@iRSLݘs1k+/.cėRsG1o[52&?itt [c4r-> NÆx.ze-^IRu,G;cɷ CaMM/~]ħQm|:Zfw~/n'ٝet:jF- waՍMբAEۥmjX ͉0{ v(,Ef)M81,Uk*¨ 3={u gT-R?Q*5"{ވ.$_%6j(/ȄV; ӑJU}9\YsN5tp#&poգ{1-]OI=ܙ#IRɀ<.2*>?nn"s]s^N,l-*ۭz(L=6`V4P_XBW2?sZq[TV1#wJDž0oZ5,Xvl~vrP ԅc7pP[?D[='&6A%:+w%)]6ֲNΡq]tp5h;烰G]1nYam "fCn բVN5~.bYd`6씚TO? lU~Vܡע ,fO$Nf/wg;cu 8z(B=NaQbǎ/gh*A- Y§7x VWyb4]Rr/اcRU:m^m%R-JݤgdzZyl(Y*Uo8Ox)n|\ xĚ:I<0$DrCKO~&, Wϰ$3{zċeWs)**Tz=-W0K+=i02"5i{yIi6],o4سR١(!x~4|8_$L})CRF$I| Hoթoms'ZF qRZ@bj`Wf))>3%Z88^ QB0ϻ^|^ H{9,NK ̍ExTcdUe9,)&BgKe6Nuʗ {kLtJ#6Zl**UJ"[UY*ëek;Mѕtelꕂ*zU)_sIKK =V-(rcy4'~Qo;z ~!ÆWXa{6+yyOAy ~]mX޲3C-gݶچJ|Km{bo v ilzb빥jV݈pM~b>ЙMq\&+Un7[dگѻ|41:b@mj4Y][#3H tP],LX#JOнgV6 lޖEW W<AeSφSHfor1~6iqu)u;rt ̿.2I' 6j.P wtY6o|h5pѪƆ`FxqZsE] [ ?S-Ƌu8.:(n[_QދG/Dl5 |J;2"iBkɌ*7XR^N;ft[y4Zv5ax%u+s^g1 }ɮDē'wrP,*fٙgs7L̦4J:2Wc~?@S1&^L&k״mNg:F ShW-ZWvΑE[GED,-3E]mN'|83q5Ŭ=g6V% 9$2r6O4Pbؔo"KpUjeY˙V 0qs_~q&KVHLULcBc8cd`]r u E v9c+фORc훍C4V\:ϘY5(wFI꠳x4ZsFڊ| H,NHba(2_3-f8rWi=:yʫɃ#i!?>ƾcjQQMyLyGs˸18S}AcrGp4)Fbsi 7l?G7GFN4Έ MkϿqZb-6+aMkux/{ntހ!ik| Up$SY;+ëpkvHHHsNh=Qm2}Xij_. #[e~b+G;#sD$qp@FR]mKpDݧ섚Ab1c|&N&tp}N7)KfH? e^$Sk5؟5`S ew;Dv2x r!@ku H|𽆘r!)TM>dXWؠXIYDl4]Iq) --24头bsQGӌ9Ab Guk ikRC9 VӜ#fF6BOujQ%DA272:;fϧE>;3.>B2JΣёKff7Q[6x{U9-ZFf֛ma{W 0gl*5E|ۻX:1pUz>$t} a߃"g9s%Fo2 iЈ7,ާB`ǴIFi>s6[!4u:[HLHV0Y.$j6PShW+V270^ftQ́I^@7Cwzz ۉL1Oj"&>X;6 7#PA)f#:S2G1*,K-:6Ł4t>0Yǭv+x [teR*Bd=v75戰U5؇3H( 1YN¹Է\ږ-E$G/{/f,#P?wMc;l$٫\ђFU 27T a}MWwT6+5'Dry1:#)Ty,R9\q\$DQ(.Sf۲` 9Vt"XezWY6wLp> ~t1!q8cc޵'QA@.?Ν#)Ϋ_Z6cֳClC:"!]"xiPј :k\^mvzoUڦT0vQYѝv-A 45ёevGH2Z6<Ob'YiXTcJ/f)c T/LAX܊VfVLkChϭ 4O.,et-@@dUb G&HP:pjmh7Uqa-]y=g4l#F~_}1nLO6F aw훎|̕#LZ~& 4|1QF8XCTtj-=bv!#tOel8EdNGiD6#HL*曄*я_^!b%C[wj.*P; ʈ a Ƭe.2NquQ [QrnkTѨo>6ݽޘ.%m&b7buO |b<f=2W*8G{o/p3{0Vv: S'fqi]S I|gϱ^iS\8:xtѷĐ 55iD 1gUz+;Ѐ5-6lK+!ca?xH,Z2M{MUth!FAt90CS/wH~߆n D+pg/8+ۓ[hiYd]06n m;Χ5H/%~T*2{-E'wRhǒ%]$1?o@Q.}ɡ}8\і^6TjDg ^~;S$$ai`3,ɮ6楣ä_LλY#q@0;yuCd aSp;IR1Q4"oeNϠXR/eflď.Y%_ /rwV')JX?wk]H/ѻ5[{ y%/݀peٍN0UBho*#z!70xA<1\hHG9I1I *[`zM&cF528bfY%\S2&N2*gUr {ƕ0ܿ)[.J5r֖DO}[[NUH"`В II}U~I`̙3gu^ &I,e!fa) {=KN4Pc#-\LIbrwD9_t:laJɕ`3$ R!jN$u4<߻skHqE[op 0W{pp8‹0_曑V+2Z.oe C؆U"f#7B 辢|!Q\ے9ELɐ7]M *jAjᥳ/qsΝ>FG٩Ҁ[XHdb VH7q/7]#?!ڮ:WV%fc]b&ؘ<ԅlBwp"]m~%A.n/+ηN{"X4nfnq%MCȴ{+c PmQEȜ)ff SVߚ<,tDF;H.KWvxJM˗Bgu-3aMS<*W;0uNUbA< ~aB{ Lcms7PĀd Æd1KSP֜mì"aPR-Q4K 4jcsCB[YV ]x jE#)N؉T"UNƊV~ө ] nWmjMJ:~˧mv H薙MI^I:INZ.4f( zo6F; v7'=[FDC۶7e27I\QW 8HIe5#IB/(՞Ӆy>$W/8~Lf޹TɍQc)uC 7$0`sMJw21 >%{G:~vj:R>9[ɉq=uxdB{a{Yd m 1o~zbVF5sCwMRпWbqS w]R:|*"#XM6'=1چhMAL_t mfqgf;2OY:: 1*X}I|Z|n6 Y>(NHR kf"hʬukĠpf`kqg.ǣW@/H6M6m|Tb.g(Z {GC5ʖp䓮7܊X+={jI{+Y7X%L6KӣÎ{%bCݙ٤gNqoŌ:!B8ճmٌi):owڳ pۋ< nFvjQD/b,sq4@;@`"A" L<&X_|7D5`/ϟ^e/aB9fIP<#\#nVl\jFyFz͐}ĈtK:.cJ~v"VJޥ`|YޒBҰmA@멑 hXbwbjD{og $2y%ہUTOӑ8bE a]fXJͬzW|;ޡ=<x7x,7 A Ͼ?|=PҷQW"DDcq q>cy-v7))=+X7{7]sW"'#CcRUT KGL|V3X}$ CRe$;ά>yKSo:ISl7EQ" yX 񟗋)4@rx-F87ha*>GCb_2Hf>IQ,.r}t߸4.ė{n=7{^=pCՁy]{ȿ== _ڥ3zTxBzb 9_~W$CPmỵ πD,JxH)ly[P BrOAV9_d>?p]&2(,`XN}2Ջ~^P<ؠR[Y+ #n ˫9 >`ZxI@o0Dc`ĎѰ C9f --&?M<ɼ`K9OK.l-17[\H4J:'CA问\əP'(++vE@"}\7>QJ`]ٓ`e|?"FZSBK11^̾waƛ$3k66CJ<]{3$Č%f&1'"1cTԥb3סb&3133]c.\kYؗ|rʌcJEc ƋK,>i&ɜS]?n+-iŻ!M*gۼ^/o 嘞7~:{Dž 2{VcS_@%y>}v/}ʧQ)FMZwb_*fc/J.}&a|TZ1rM^}Tx[Z.B{@K* 0$WxEM؆5RyX$I_N@z >+ F>& =ߥe*=LH/ ۔ 4~e^ڎ `!TwÌ:<4vQg1Ji=5cn} wz0p3>Q =PEMތ5|Zw"Ml}N DZ枛=L320I{4W5SzL}X-N"aƩMM;gq# ӥQ@ՙq\7RK6q3f?|*%i>jJ IDe2)Ӻgdq2wx~enR5oIPOt]֓}J [-SSJp"OɐSMF5ߪ5?mゐ,њ#tr As2`@*3 v1D5=-gfѣ>1ujQMٞa/@ UA)-޻BGW{C sm)z xbT{ʪE4M8<ԑKu]V*a$$rpEfg`PFL&$0z|/Z$*ȋGh=HAM`{ud-4Me0 fK%Lk+[:N¶8!шذtϪҵ+D5OBiաX^ZVZ:'n%p_xwɳlva[%`pۦgl،Dՠl#QP&Z"6;}a79(*`$+btt fYOR(. 3T^`Z]W2&Txf Z+tGUA/ɼ:{n΍@tؼ!R&,ycV˛u:P(GR-06~nM Lbg#.L-[07:5+ckp%# 4bC 5H)aHUǙq@#ɬ"}4xg? M$lfVUC/JH9Z}KJLdR^*r ߉p2Ȧ?Nma{ 1hu  x}a|pP)zH^y88GOSO6R2^1ߏ~DMs`'c'jcrݝ5lw[W &å0'd< A8/IɼSA1F8]`eFGmZѶHh%lxQ&g#&jf.VIӸR2Xt yqé]F{UY>6p 3k734ɠ^ؤki\ :9ÍvT tXժ:s:(@](M0]\&"JXf[1a$2*35`,{'`vxlzu2UJ[`k;ٙbZN+I0d|h$RՃށĕp D BBkK^͂Ű(Yqr (`eĦghx/E~0\JBFs$آص\&8fYr(xW&IZvbo%ufʣcu&q. r` ؟ qR.9]C~u{[⍝xq,Vo[[dqjR> +FQ[hN(4sY:+29`7i(x`ޓC$#̿CbkXMˮ49wH&\-i!7gbUDD*m YΘNQ>AWy #! IcoA ~cJ}%-)Klj o@Et0 %neu>.`mE/ ꙝ=zD򪽈l0OJit/{[-3"O"s50 %kl*jwe(&|aDxNXnT`Obm p>ۖJI}i֒^967  Hmz|mœ=Î{JчzX͑BZ}klv$IS",֟\̩k>l/IzkV]%ճlT\`UŎczM" eoQezEw{@T,H*GSJupc/0C~0nn2}4 0=xj"rFe $߭[o/l]CMPru*Tu  IDTN\\_3px]5'DٌmSz'/_BkZqңk(MHqFVV;0 W ۮkcz@ Q/`YM:ߎzaJ=v_VzpZ(z0F _߀w6'y~=O[8uy.^6/qDZc"ii[%G\"Lg@N?@)VȺԉO1)QHqՐ,EWB]3 (|4Z*.#ąꃼId12 OD@Sg8=j00Yb$ >iٔ0 7^xfbz3$k W2_Rg4k[IKϙE:V7v>e.o]\pߠx/ %? F1٢LH/!ﱌX:yCzD0) h|,1VS;yq̃8}')lu_CPp} >(7t!$xɈNorN؉4q<<(= "k^i)+~yCѥ[^Va0-㌃0_Rb}]]۪A>x4():<'q@oJ}qp=_1ێs7_Ơ:7N\V -N 'ؑ91 l -)mTf P:&? ł;l~Dd4LخMEf h\H114&ǎFZZǥ+ {S N֭豑9z?t9휥n2 uP5EaO>{FR&+7gIY;S@A1, KtAJ_7ĔYk ;:.QĂHC-b1Ԟ0%A:09d8EmU >& 4S< ՚w61&7.Ty (-Pvn&w4孉)\-@ƜS u =I!#SlW4ɨ}SN0 ͦi>SWkʁ;fQ]ΜޢVa04v1n#N{hض  ^H_W IBv)fGr]x .@k'K}.:!doUգ ɬbz^~Һ碏\<=G@<rCź|hܲP0]BlҺ2aV_Г?\y6tK )@t񉿰QJs6ث/WwfJa_ѭ(P]5.ȝ\>Js!x׺{{w{: NKԲ<]ў =F9@˹=Px/?5W9.R8̴WWQѓh/F Mc%r!d!Hiʌc;ft'"lƊx+ʯmԀ"eip5L_7hNzAyĝ I.om`M& &Ѐ[%ݚu2}AeqClm}t(k|GIlR9F5bo90畓pе:d&?gd'$M[{]pDvhs<Rl`ᚎP`Q`:{'A/!7#LxucaxLaɱZc?X&9/ʟKK<ڛݙ0y9"ɾ7l9m>w<ek @{v{_އ3ڇKYHDϾ\SoIfnVⱐbO-ƚ-l>|S$HU$Dnϻjd₮$ m& C4$ɒ>mYg,8-nbpP 96=oxB")HRej^d1ߨo ]V-cyk7jy}6X^r}^t/kVB^!x3(x尖qr:GT|[|| lHCkXaST"yć.dB:X,$A(wXjGL[@Ff\H2@CRK,jB.xkPw1q,Sg.י $;Hs,W^X_"v}ibKV]~[4$ ӽ:8m򋴀/\vOp"z˅%?{wBi?}c.4îoޮnBW=u L5!|T:P Z |Q ~unU2+Tt*'К.$]U aX]D#$bb-U_ XZe,de^w; '[T5_ ,]뀽nB s@; |4TRC wez$(F݅g@c%ePF67J4q7Ng>t*Hq!{KHO屔5Du Ky%_7Y{ Rr&?Uk0}z#ѯz}㌵8kTF]߻{/: қ~gMHh{:kLЃh88ΖTּŬ+""xAꔨO(4e*S8 z[8'tS b"4uď i-dDl$AO$V" fÊ/FcE>>WXLUn,?u&3}P>ïz³T澒0mRcʺt=aĉBZUgZ5Zgj{JuRv>xRV 6V:^$#Pk/<\WV. kS+N8/:zt!óGRmR23Sq(;])yv,$i/p+5h;E׍h4MsGc;-T F0£n0O3x%FYM:`R;K=6377w]{Ƽ+A.D2E  Lz mA[_h}ўIJ"A,łZ}_&:ۮu;WF\7&rslV@%oJ3>c0\h7r$HgR%"?GfoYKfM "E+jݜF/s`\P-<,P[NFďB+شr0-CQ/Ng4~P:5TQuD3K5W;rgEK>@|18w.Bw b}h\nw]i[|p߲ea{Em]'lpՃ|ɼr-1 бܢg'  <4[w])I+ dւ2a]0DtudU^\i` pjwоlo/Ǥs}֡7O׀ H~˽p7RG0zMj<1I~,&}'Sg}XS5i"<אUڒFR_9 o f~j'/ɔ=Gz!*=^XlAȧ~a$|ǣ*& |$p05$SW85k_~]( G۞[fdK-H{F3004I'5`h#`$-KXW"tVU?#;82p1pk2]¨fͮe€iX2?Yd!~Nǫ .!?VRf,֠fTTi`JXEswBN$%!";C^cFA;deJٰdqဣT,BÚ\yhӎu[9㋄>]o/6MFMZ6hɪ)iՔjPe jypI$񭿀ZOx D4 _pF_XXY;*Lp\F mI p M%-8(8R7xa+[]Dœͤ8Ҥ[N# c86``crv',K#=Q0E D<:Jim `Y7Fޥ#V]zno#6[(Y= (:oUoXFi\1!{1nɶ3 ԯUe)xqe&xp$6"X *óJk})S ?κT(4~Q:[rou)5N&&Ҧ=-,Ш}ǵB::i'iXzXE rfql)0g/bW'2=f5G Z2^A#Mh3tFSG^>JUkI':yT6œ{충Pň1b c1D*~)CȺua;_SY!dٵbtFa51+*ghd~}Hq7#3#ULe).6IF:IFL [y+@!SߧaUp 3L08V1䒼Bl1b.ufG&oj^h(?m}%S[213ސ]s5JU g}~ 4x=pB 6tPm{ -re`" ]T; H^.="ln* (f&N詒Qpa2)=ӴV!k!_Y7ȒΑsY9CX& oz^`IZ&DY2> XRi)~^:(uzvYC0AW9HQWy,njiWc ֽdqs39f&@IH rzf19IG'M8ܳ3Mgƌha_%S`n2/MQAqkض8m ؿyqGhe42K4Q±5i3-kG#lTOk߀/ mA1hmt893bǶȈO{vm퐚nCdޘ[cM|1/ucyo}Q4 tdDj8dP⋍"Gwaa7Ĥs7a(פ$aG{w[\'D6}g1lL(ə01 O$og,ڽpxeObBfe8#Ee4豹xaעݲPSzFG;C g:kwtEȘiPsđ8mT5@w>_|V m55U4DW 'fRCCn}*Y9Va=R^ޜpmA:J/#j}ކ{5VY|hį9w/>X=rž4,朽kI;Vv6_nЎ@?Z` SȿCFwv%& >9QM.taѕ)w[OYҟR6J٩3fW2X^o1hr|Ç 3 3V`uǞcɝlœT^O zfOu1Y"d02.;`8b`#2˷c͝89!J]k:Va0p#F^-6㪮uП0*M:b֓<\l5e4hϵ=}>7aRc,e9\jK1"e {z9w=>&wnpkYUVB#7Y|y^`r\ʯr8]h`_zy2f-bāԗ: ˕|=Nqȝ&c7tDEw+6d4H@A[Ɂ3*H e Yy1xetx65;]GVa+D ,sp~9F/\ukI' qԈ .1QnyS`Qhd9ܢG&n؁*W&%Uk> - ΗCꑼpF}&Wy}lȫM\ҴH Xk^b%'DڭQieCz {n Gwv/'ܻ`rwx<ߞپ=IQmxztFw߿sow;۾sXnG JMy^-+}8&&~3)D$w¾zcٍg.fzpJLmy㠺6tY)JK1NqD| HCVZ@;P1,"fv垛ϡM%lTP4ZKL[E3lD8kIK= KN@!HpĄ̅)J9KRl`AV]"D$ps@uOx~6}_"fj"V\͖B|<f^%/d( Cp%LIib )M."eChޣ8n7mD!A6SML䣑$PyPܰ^AU0P7Af ^ ^tѮ>Qu#AO7PF(- N׆99&)lKc5tyJ7$?ƭG:L&%-5 >͆󍭵e8[s[hz#zv>{>3>QA;W1~ŧ+|_A7/~7~. /WEY0;W*_ Ӓ@YmHw7x"x72+̓O&펗6$c8^r|G,spE$W$P*ѤVr51"aiEEdWc ƥA'?{|? &ucj"˹:PwG(CW [ڣeJԻ@^FtDiW:,IwG4zĬҧ`˝[}uy9~|  \ZTe0Ewz ml. Fc|(9G&VƜ\BOx!00lbÒ%+gћʎIǤoEA#ֱ?P 畍&2I>)ft@,a>:^/xEw4%kEc+ 8/wBXtx#pqȥ uwm׀9vo\z~GW'ct몲}qtc؅ooDݩp! f[.棯{jt1ˤ愲,2fqq4lw2U3@Bkd^khm*Zd_h;N-b`5ml1n8Zn.Ѵ}!qh TRX*&wmnbK6@ WB&#m s&^oӻth][ 3ĩR ?o޼ƍWOHG!bRN vZB q_FDUM|nl1GC"#DX=ԑl T'n.ζ+P{z0'3Ջ-;+ˋҮkvv(@8_=t Η\҄Ɨ>͍"Պ2OI-:ZGl't=(sUs`ecZ;':?uAͲٿU<q7q|_B Q;{s 92o&AR(S;oC}# vi;kQ3Mcmi]u8nlWx9v[& @jbu {9-Er]XMInx+ЏY/(53~vc!*[j Rϸ}ml?RJמ*p-f0^B.}hY:4$]m݁ ZN1Maְ]h$p=kn ?PI+j˯e`ٕ8P)=`K6hEЬL[ƉHKxrWF*q#MYkq$8 CUgߪ?I7弮 =Fu+gҙ.er˹B]MV qua[iv 3z,0GE2yW]M}=ې(v_ݾc^p{yۼdr׼$%ؠ*Sf7E*+̆1EɞWuq. K!;1 |Q@QRڇ( 3̚ 0 QaF/"颞95wdA J?pݖ\gF!.1reئ;OmE ln yLKbCizSY؞A9FDơlti)FkT^gH7 C̓3O%ǫ~vѴ4UaQ>otXpuIZVi޶`&y~GƜ)C)}l Ə"⸣&1giaYOq.(xbdI;HiP|NuQD(\#\+ָ0jڈsulÒN JRIóSec,\נ%~ w fzw"]*V dRٲm.+ZSt7˒͐Fy1!3 YW~t%AWF/ҊѨiVCjrX ޴AX}vx1`rI6o "%|3tRkO] /Ouistq 5ufs)dJے MNxz!f-ZZ [G&_!Xw莗mH1U$ wW h*n=8=kh-4mU[FVRmkn5 jhԳ}E Zȟ#L8 ͛_oE~J{C9^m@1Go6$ óvF7[Ζ:9d'eT])8<*|tvS7/>*3.kg5LOYᦁ58z_d˃$.Uf?n4@ r^!XA)  ,*aeǔ9k䧎Iɍt@܌)y=08\ԇӘ7!ߴBi x^84YLtCkkQTI&+F] moESH+n\Mۻ}kIAd=4JcxϛgmRYP|uvZFnɳl*ȶ\:D[6-4C }κϞXџ҄5gKO#:&pvkz51A#Ft_{BE80V4ۉLLp({qeb!ܙҏo 7p^$id(p*#)*ji aR>h!Z):`uǩ6靦f~ô;K u] !uIuЄ=Wi:som3$vyjoƱPx[IFy.̑Yaϒ)jc#"I0n?p6d1 O<*$I&N[82mwӜ́Bo\=،io) .9cKJ p v3nOsJ7u#|t0 f%ãfs =2 ڈ:pEpӤ1\vCJg8䊥y89E§ GEKn x7A?aX 3r&ژ*DmϨSH5I N(8jUEey9ì5ҔTl)[Dqhu29ªn݊j{&u5,ʦ*i%!f!7MWz$,N߉4C i7ݘ&1iƸK^D8$\g7eoSmR˛>GeЭRV8PC;b/=zW RQkܺ׮+9|!^A܅_n?*ַW,×hlAkc xsNӄP@5$ gOo7lqnP^~.zX؊A5lyxe`ﲸKį8tm70 4KgZ-#S0>.*ѿ0=S[H$DmXaA-/YX0($J:W :]W¥0Ȕ^m7)"FKB! w28s\KHujuYM-DK,MynviMfIݩt0QtQtdcZ~ g޿ !kkoغ%5s@I*6Z&R<ަr`u1#KRP`tأ:֌K}>;3glĆij0/q6gy%//簟J/ZHW&u䬶zt"qG}6a]sh(²SYvykXYwUs-C4?>`w7:IHrJOKd;H_ԅv5kK|o]cRpUb%V3x[fbƖfYڃ]Ɋ޴XxHWins*;o[,=vijkO^7ZxSC7ݺ5bHü5h|L;FWi73#5N濎m72"ݰ6$ͤ5ɱrpKh1ߔS%21Q7.n2wHdaT_7{ѥ7uTVڋv4{M^{g޿>^wĆ.8_2 4Njuf)I@2M-\uޜa'l%+_g}9?\'R2\CCX}^)%N9#5 #NVמcx: &u6Da>F3J>J,.10b8X__QE_ LH+R}a#p,R'}"YUٌh dɘ*<:ʉ {;aS]@O~E{n Gwv/'ܻ`rwx<ߞپ=IQvqRzLֱFw޿m߹}},{{Y hrއ7bD/Sm_vG=x:*Wn87VFoDiL0mДAuYm 1ۈ%ct@;䝯tZ:GHRp fc6E47hZ璑Ȱ]RyF9-])>,lc ".ߜUEz')58f"8DT[(6-E†,ol>R^hg9N&t&YY~Vv&%-v9|:@ῒ"wnigXatt&х ^UkgEt[a iu;qI~Ҳ9j80+4L. Gʓ%u5Ў*,L1ؕ@ƭkV9`^I74C^Κ,cKA[_ʾnm %;_M#Jn^N87C—tU]%GAG2IlGNt'6WZKy]XʇA[zj\rTxBp>d멁-\6uЗ_f57s+T9\U> zqTq>!91zlFرqN`JjM$IU+X$zsr5kz>(4_=s h6'ЉSk94~MDw4hD~[#>R 8.80Gڏܻ耭4?`+di$4D|y>|9qvrAۺyĶ(4\4Gg U[8Ȓ35H^Ii';S?D4VQXf"Ãjug3rR3+`eE(}0-uQSCI@Sps]:/RNKF,Xgf=⨝ISg-p5-"-G(\uբG4{jB/V؋<.rI^g:>-GG#MY׀5Y ]pAo+}볎?|tBPΚ Y#A gE]Bͧiqa\k޶}‘ YЮNGwܷ?JlY`/uh>s0p,$ U iw* HpD=4߂yʟSc|"6۵Q]!Bqt-#YJq4\0&U;YN4kjWAdʑ.7"}AQnXjHUĠGJ4sҘ+c+4m&\' k>@˂cP` urL )U$ILP ʹ.##"kFfRǢH0͋qLN?b[tzY%PZGP')Q3]  vQ!XG=18wbaD$[+\? CcwPt| 7xZp#p"7D<"ffr*2n(8`TnTy6H zɰR{U`!w`<ܻ9s%~Tl4o(,ўZY,.>`'nn2\+1+A ͳ\+k$m+ɩ-+{~Yc40.>F#$ E4]tR>5 xg\uv*`O.pr[pԬ|5H"qخsm@/y];^)ր>~(>'#"4A+nH#لˍB䮉]]"rn#WK=1/Ǘ=}D97`q 5w`U|tVGxo2)q)oY[hܝEHTM\;)l,NV-e"݈>qN$erLs<&أ-~oqX9q7ݜM'v=Au3 <\337Gezb>pa'^fYF|Q#jS69ct"H\8|ZhUG`y8ow_˧WzLhZ0% +YIu$(M. `^DMCDohX|i/Oc?3xǷq?/%~Ox?w=~?c5ď~# ~h ?R?od#SH9OQG7:?.?Z߸w.~Ï?Z'TƱ?-ΘEaprsS6A'/eò{bB2OF%/$"Q#dQ̠N$ꉉ:pJhJMn :ёj<q+Ͽ/62G* F'TŒȸ.UvtHkޗ#"!w`3/bD- +7ݻAU:Vza۟BXܩ`"w$j_B+'fz#1sAa-$ppX4KEmY2b 8apJ}tcFBXЍ\d)zѾJЍSKN=a+sR՜ ЯYlέF3zMT̈́l;{sZZNpdjG!#,>~ۗt%DM1j,97aVW4̀+XU;43I ?eYP9$<^!mQrվtPӈcXq.<2)4.L"ͩaK4Fܗivy pxh cޙNb|ρ'p.1*DM+mYyb@