*************************************************************************************************************************************************************************************************************************************************************************-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------0201bigfile 0204block.sh 0209bt.sh 0211bttest 0213core.sh 0215create.sh 0217debug.sh 0219decodestr.pl 0228dirs.sh 0242file.sh 0244fscat 0246fscreate 0248fsinsert 0250fsls 0252fsmap 0254fsremove 0256reps.sh 0258smallfile 0260string.sh 0262test.sh 0264testfs 0000>a̯@c"S!&P452v7a&Ȁ=qsCN=]A'X:N"*.zP aEHR{K[Yr !ͼ׹WH\I (ΡKk,_ p;bx|y;W,|+%^QY)Bђ%5 ]5fz'ؙf74,Cava+kU8luY~y&"a5"T By].Ω 5}Y琿?rW>muKoSmREpTÞz͈_SjV5 >vzE|oH?CGz;?uwZ?}rfW߀Q&O# p>FbD}$M0._y#.<@s2Zu%-i[C[-!P#2Jܛ]fH( śZ95s^tc& AN[}6Qpm;h'q yG&wD$|_ Aê@TJ6қ9ױtTMaC!/ۄDӸv?Ш6@pABMFB{9zLqJՑ[%udWTLLG] &fj;&UiwD^ɂoҲiI֮i5UVOvKa\)l|}ғze=Mo |hI9sTc 0{Ɉ/G2VNO.Ϡ4ZMteg{"<vpyKR*oN>nޕ/lKJtG P֪_~5 tk ` YL8 4dp%6n!e4X¸~cADRIм;!xd1}~kL/Bnޭ-Z;B~Q6UP7tjg zsX݀ jgf`6>uD,;K5M۷{=SPAm֭)70$ \pU1)jj2px(4j'-X |fKɞ?k8uLM$Vx9KVn}zCV#JZSxסe5..)kxQzNBS_ qYCMjy-^!p]+imz2>Zu@-ҞVV 6ؓE~Nm!0J,Z̪:X^BӛEN{C[+{r']ElhTJ!8E6ApDoE\zɋeM"Kih4!xn:|#@w6^ӂ̍vbVEL`o̓cRV4v!Z1=Q #j~ ]ٶ'Hj2h. A Ky/s ͵ \v#t')ۊ3 +hS)ǂ1ŨCU~Qcky䲍S'Y;dtpGF4W;IӸ:R~1\_;d *uyt_e K6}sW](2o\_p6x4ɨQROZ^h&ǬoS Kqm.HEYL"Nx@qXt@#\O#bp@gH@t^b7]LɶuȄv)M,¶Qԍ7 NbRr:+WYlbD'i`S5pB7ԽҪ- X1uJ^nG^#Cŗ6' 7!;9KL4/"Mvli^ἑ"?&ۼ߱ZU&Rb¤ILT8>]; Kz!ǞKpdW|a O-7K593p, uh&-3ħa˯6)sWQ>ztbFqY//sŻqq~ll1TcnW=?'xY6H邎hN~ ~ 0^[)Ap)SIն5Ts6[an$ES1$@ח?< R!/;RتÕ1Xmyٚ#[Bdm'okj? × /.-!hz| &m4ueMXYfȯq c@:j"tHGԬR~3džҺB)k=X(2Ӕf\7/=ʂs4?_%.ͲQz2TxCn9DZzǓɵ8c +mF@ànO*\7Ik%,ᑻkDД4iV/w=>m \jt==3I c(ȔbX4'1WfO5ȗVCU?H5#uFbܽ"h41Ӕ /RD^RW*90)]>7m< Upv쫝YSІ׹Y/i]7*-.RyToa{K;}a#|ڋ/ZxT/J*T<J!"(;,=U^cg'ѝ!mSsE-7ֳ0҉0cǀ|!d)L(1^&K}\TR׆GҬ~Q&h-jopa#VA债n+A*2j"`E65Ѹ͆($F"&=09T#j]2u p7 uggV FM4@: %h3z7=p;Z"-01;Ż/ d:^dl+;fnYn3pi{j3+,V/cfl,(7#3,]A߁Viܺu|*C* fnYvuߐ:τ2^l3 Fsb;gI$(#\#ĹRnG;0c`yq`34{yWE'[5} {c\\þm?̽AjG|z` =rͥUk$3'ۥ Q|TAMpv`蚿QMOl/"pYAN'!#ݎ;-`Z0@2J+Ӑ:~-G@ t֪ 84^M שYt9[,~~`l Nc<ĺz?: V/]{%}`+}EhGDw/\W5 -(aMFKWj-W_N0__:ʷc3}{%k|p{K1i'ړPgc[65{A%3D;J4k<ڦ,R̝VbR}kz_^c~l/L'c,)q'ŨM^2]OC7(؂$!g4y0Z{7y&_dL+n[𣢏f*5O˯ZRe?.y ئ#$za!Y-tHtv7zl9fW;xn`.+lϢ8Oim;P!KڣЄuNX?{+e~e+xG9/}7&A>YUlK/”wTdAؙ;g+\="?e6r-bƱUeME;OPC#O_#uF;i1iXD?  ?MSX8@]=HRK v´`Y,4ȹa(y eʞ 2>y7  p:RRWa=Wܲv8S- sF4)xcSf"|iro !+\ @joLgp D?5;Y!<&w#O`$צyА@AQWS4qC2B-Ly_'hwF{}BHT|Rr6P`ϧQJ, c~k(#?''xzGzqoL#4'Np 29mBHVUSU:S#eX,UΞW`ײ[,hLɑ0pNBgByq{bYU ;%Ck;4-zvIٗ9cXJsw¶0E }Y 忧 CH. .ySDTxö <1*<@#|%s٢8QYOvYg7KSryoN_^kj q]<5հ #@ŁI@l4W{FI^w"޴L_pqCw8h2 v}JDآ[幵 < ԖzK4XIj@djD|8A}?N0 Bk ".]d1kkma g<ٝl0A/Ry2b}ni@g;a_H߰s)dC^q߀֢Mj?p 8.q@EPd+5;*QuORyuF^t޷!ueF&f:D2py l m򀸺3}PYi[v6`B+|пjkK0pMmOCWhC_[ݔ3G^(͌=<`73+E$#1ČqNHr]&P|.{Jp d9i/{Ho;2dv'1gRm"ف 6/aMCH˙g@C0֘ ,HT'doI8ڷ(%k"R,T*"E9,>:,Ƈ@ʛ=!qQKU: UT]--r5'p+F q$.<9Y:F< 8a+ɧOoyWW}+Ha l?I/TFӷ$8u_ccvs|'):JЅ7wNogiQ&U>BW%1&,}W9tT`f.*0< HG.[E`'Bvo^5"Az,Uz Viff|9~'J)4n'uH-GSoE7 G/f}Mcޮ\4W6zф3kc>/{N@eGm ٸ6Bg~j\@(kȆ.t \_h.x8ئ"lǑôBoͽHbǼ`cH)P+GXGsBrɉ}='#߄Z+prrC _d4=%Ԑ)0]^hG~z2)J◿cкI~53Mof@F4|-qUh,zN6c b{<^NVCꋂr^t1fodZF^r=jzfJ~"::@.MF6(Ie+~CtH,X>l-KV=a;Z7*x{$=slҰ]3&,q7VSt4ܦR׋FWt:2txYy< M<@("18VXUZS&576\C;rs`43snMh$Z;w6NEYtS贍$o=tscpJz>TF+cwGMpdTW!@vko ۙ mzO$sQubyI`޸waV nA[EBo$mj7A}UTMmݟ ~RDk(Յ fi~O쥰Pbp@T~m])4C{ӑejE/EP~-_͎fTe!J9Q13䦡:n`"+]io|q)BSGtDq}LP{pbDow:z<ׂAړ a B؀&ۉ3)]s[0≣3crw vμ):cBL +|K)1c43F]ncI;?ktE`cWZ+d- $/yE,x{# 0P8I=ye:>KO'iJ',~SW?p3VքPXF|H-{`0lND@1۝*Ҙ-%/4yb=Dv[g z[l1ශ]nUuHr`AlE^Ʌo.=vAEl71.ڪOtbQDA V<;~!<35 )=iuhPȁ#"`:]Td \T] K8(;܌fL,*@iHUn_Rr{LýA4Ҫ/r+W\ߘܺB:)GU[m8uCa+6uOJVN؝b`):<T$* !Ti.nEQwڪ+|+6#:4}$Nos:IXT?:!\(mPA& %6RXMq'91Eo}&#%^$a1ApO⬗kn*]:!ϱ5 k1$;AɣEVQKn>TU?\BՎl)' ɷV ='^ ~$Z,d $@VuDSKwgr'Dؽ*Ε0"CC*kU80mr$4#np{-鹑ni(bԯDvQ1gt^W xkZ5L'*"79 q.jN,Pw|" hEG-uޅ)ֻfD_cS 7d!H#<2(U'@w qO!ܶ{Dw|vcM/#lc69KP{lnQHr( Rkh_$iGwϱu秡&Hwu#͚s^9L 񹓓~CpJt=$ ՝ΐv}[LR}ktA.9KX#xڮ"z !I(yi},2,.@\Ok/ebSycFj=ae%zcLR 4L3R)N+`2RLQ:::Ǚ[҉՚SOΟN9{菪R Hn ;GrDܫ񬞄4S esà@Dž GY%d2%Msi|DL! 4JZ>B60I| 0Įw]틀*(h ZEէ2jـ Y`jޏT#0 xc^d8#\Ѵ₯V#~Bu;\?b-K^S&+P(N12𔏧C3{b Œ {o{nplNfO-ݰ1X ; Bv̾g?x?OY`ߖL  ΁S))!kzo}A{Pʊ sɶ.{r ;%A:L Z.q64䣵qu{PJ~$iS_pkɹ HU=ѧҧbAdHߎ@%8pi`S@'xƉli/ ݕu,4c*<7ڣo0YFLV@-'DQNp]D b|XC ǎJ-v=2$'/=!G^qUd4Zd?&#ul«*!A}k윲io97L3e+Z#2(0\^IhNDܾMҲFnY-!P6&PoU.X_AGD%N {qGsKV?)'B8731-aL=~ % .ow :cˆ3ip'𦵂Հ1 0XΣE)SP[ZƆŌ6—c\ 8W`b¿Z՜}KEFlem-g9pXw$jZxAeZ%EL=i贻,U_9[1OC M3IEud *`ĝ߽  M*zTt1ަM*tQC}BQmz,Z]`>dnWr<)\|(]|59Fdh2Yw\~/ZCG7߼$68*IIX-q'k%?XKU숳k72reof$5 f%'PLLq 9 Hq6**!θPF)n.I̦W5R 7Yt73<kQK<#KF>V.Rm}˺KU }+كS)nŪ,]/ B1/G %9 |kXh-Yɏpǽ62.7G=S ^F}B~ya4Qh:UQ[>Z$ [vuP.~c.9W)8 DwKBMӦm lX$f'jSL{G 4[Iu42,_[zXH҄X38`e2t -IJĞjFZ+ :߸qeס,Z#"ՇQ(tQImTEH[aTCϦYЪڄ$MFe=PQنyqXB֠Qoe B<{)P~9g:t-ay?%V9T}PG#ZRv(jLO\Ϝ ͫaOUJ.t@B08\nė3?kIm#r% \,Ji%:q}@-TB6?ۘ(E4ؕ;hZ,?5غeaCf !G}w TQ^ӂ#tV tAAD󈦳_?X# }M(A,b"y#Y haFepjЦb:14REsC-; 2Ybx=O[FO@` TD[׹odJHO[*9@H-.6M%wS&˨.,Mƿ^fCu\H ϔyDĽgI3, XׂB_# Uxy7;z߶n /DE %Fv X?P9j 6`qxlXU򍫘4kIÆDi6$#5^ V]W[G-6L0ѻf^߮^Dw=dSh Ⱜ[㌗؄".2Ha ,ê@rrA{]4jn{=,Q~y';ا??3Ȍ`_(Tə/#nTMFB)=Ad0wo. Z9yًN  DŽ_Q~vnݚ(K1_L23.^1ȂfGL wg Y`PF;vsĥW"E;a*egw6v*Fl|=n= ]\=t|!sP4CDw&>jֿUt]$cU3¥O"M* j_&q:gاJU) VppԒoF@b£ 2gbjMd)o2VQ;4_7̾n<̓'T~s1VeN9 znʂ ^\qAh!DZ \-3F.p/! &b㒯r,6cY\Naw&jksLԵ糳uZ`c.ێz@#W2_5AZGk*rTo j)SAYiwcr[q1b%U;buM"m@ril qxbYՐ*(9WKvK@n\;.hv~vGl/1.yW\?)xͣ?Z! qi{3 S0#![qpa|{nHX.p:䩑a1I03m r ž[Lteo`|O|\Y5ϐ D#H)>/iZw۪jKcG5{ +뾋~Nzj#P #_6d'b9,bk/[04Ľoi|y7nz,Eo߈sJH βKVmH7o'lɨ:gdj%˩᫞GyH#p>Ƒ[6Q76vU }.@C>Zu0&-(n[[]u i} W,ʮwpr0mDvn|?! + ИuMO:e]AXC*EOX,SBM Ry9K!Xnn~7M ?xF(}}}V0c`p~~䘱GJ͉ V OũqDf.xSf?g.p@i>@aaW)tIYs "_=OIiBK wk$JS YQi{} Mk0ԏ;*mڴJ~-H`ez0Ft~K _{ڪ.m e;;"W~m Ώkb95Vp8(Bn%sxlG#]>3,T[#qev#f55srmN}̍h0Aj:i!ysR9Gl?Z!c=+?wSËi˝!ҸQ+l aIM$ [c%ߴְ -7ā_@I4I1In(333ykE'tqԆ!\$0.qr߭bF>_1 lɾӾo>呄sJ{>\.w4uX/uY_0lx}fͱnUUq. 5 SrۊD?Q] }YF7E/{uM1Xj ľ ˠa FݑΜGF>,p6,7ݬ%aa:Ѽ! :]Mav25]D :g  #yQ jc׀}j[0[QZHs!;@ܨu/V+JtEjw9&nWb`7'.`Gd8OێxUF~k,{l@E`kk),Hġ׽;@!3;  .l߰ڼ ֊@[s%z]- YۑJU%^;zvփ91@fh?=)KVD+;a(s]Eix*CZV#gFae'·un6.2uNB,Iב}QBNLDPhV?k709 J`Б?:=|f?'*x W?~Φ5@Wm@ܔy}BPy[SՈf}#m3C̫Wk[9ZlCK|Hy N1C5-;<-H:m(18 {PQ${dF2cqo`:J t !~4u&}!ے9OE( {pn̎CN+զVN(嗸=Wi$at6sC+Pxݐ(/9D7v+@-G3Q&|Q1Yq)˶^:=_4;vHiTӱ!oHV︛;bA6zf D9c{a>blg 3TF*@vJm]I`nWF@/: _Jj ;`6S(YG8oRKzHťjgC Pbyc\W ^x_I">c\DSŀ3{\>5_*JuyA G:sk|Ğ'b'|s7*Rj{%,)D56Z`)$ gq20Wda%J!2_ +0?x.xǂVxOqh=.Ǿq"sS'?^{P(NKrOnJ㌭?&NxQH? jK|8Oֱ2'YDЎ>֎Y^M32r4[b]ncJN-u+21=C=-e){nW:]'^>[{b|qX`=V͵e|C쉄_!2 >H"/`+\^~$$o֌lL \:Tta[.IGGA"ƶLjb kM7 mD牵?GGȇAR \O6SxٳTX"bUZlSo oA}|ZǗ4`z~'Y#zX;jI`z}WVyrTZ3H3؂RId#ןd}~ ?fĻ`h옭\%.JGY5{ z3j:oi`K-/g+]^Т&2U?r* .%|81;m- &qsT=|'r"o3u FԶA_@kyڟr|9+[6rSKS 8^;K.gHIOTMֿ յ Zw qlWArCߋv=6w4pݭ<@x:3$xw!srT6ѸΖ 8LayVVg]IjjiR¬oByj&LxrF,.͚$W䲔;'ĝO^c*oTU@Eb]`)UK,iHpZAǪ5IV[pE34@UyᆆaUQ9sA/C+BBwcg#MCIHL;ߋsߺYGC{khH(ijWPAEmބ/r$${@UzcdhAw=Y.HJ'{Қd"-Ϊ H_s@R1룷{r]L-z 4N1n&e5ж_TfD_r؟MyW#/ 2g^gD SCvV ,fFG yfF έe NbJ%N✞aq+]`7;n4v?|ZQogqEYx Ijiڝܴxm`ֶ%0[XZaIєؽnOzG &; 7K=p"~B ]{룟N?/Np 3,'jIYCL!DxqLU . ,\G7&T\dcv8DaW.`+ Y* zd?Ru?uC12U4Q;'3߯0Iи逸L G1Wp9C}8 nER;)1)Nc1٬SqC ٙ8Ĥ u38z6̌Y5'OJIA7dQD\7RWY u%kl%p0]LOFFh#c0 ;/EWzboEFU(k~%#/ȭXS<,e\PGr 7[6ݯ&sߛڜ2:jΠ(P^,/"-LԾ*ԳAP=g+X `.`$92JrA&ӫ8"f}de٨8y: a;g | dחRqX$20&è1 3d=4ܱ% \ fqIVFR9+,bԠ!AY ;֯EfZf]>ur(ߜfثa[ϩIE\G<\i;SdDD+a[A9c&}7qhn"vv q\vEohrziqݭ5Z蓾ٱ q+YL"gT3Hc+ `$x(ϻM(?< t@quGb?+ \HnjK]W>Q:\euQ+3`t[nM )(ʿEatLt_ܟuEC~9r|HrQC=t>G0~đ0(*u祚ʦ)<&\a{ ŲoGa4JALTq+Ÿ:A7 zAle_<?N &ߎ2EwȻcZkTFow@gv\iX+SǸLqsS+ zpX_uW[hi W# yukq-vp[\9٠y"LQ5(C2[byPd!SN6zTBvC3+OtJ@413Bٰ|5T3U>{z9S>fR4>,!wzלBHyҽSC˱&d 6*>k-ԏ@ºL,֑f7&x[:+QeeI(WpX @dU*o)Z}w쩐^C\ rk4Dn=Qi ㌇qI\qϔe x)@S*H̺G6oK8[1AUC$Ct0tGܒH&%աKKQԴj p0ӈ ZmVR: %ߧ^}?h'xՎKIΓ_~Jv$Г~o1yl"wJ0ӞfYhj M%U5x"=\5?n"j|Mj: IkMouqN5oP(d6bhYZQj6HX3e@љτڵb(n~CE1G|2yR2%)z]QYi”͝Bslzd~8Ic4ry@jRyw_oFHQi%wT5rI]M RDrsehVt@;͆.\z̾Q(I,y|{7:$}Xnj/GXNz˭LM1l^ wg˟dRá/T KKgj #~?Ru{}k6rJ4^^ʳ@k,jSS0p+`cd9xV\??= v},` QZG&ػFȴ|09ܡ)ffbĦ0/kŔ?k$n+Gȃ6Q􅩞6QNS.!%x,/X1g(Vν^qax[ڸx/i;¢ *AV\!0qPV<;{#-2Uh\82pB7]“ B8mqrm Xo.TG_G"N>0MޫؕMGOg!]ear],hڃFTƀ8V]Po7.u%r&ey<`<麀d4$p[Ӝ'i;Q;(axU*EܥRD$hVAq4 a\N¡Qx&G99JYqlXTѸUN`jwkХG]xj66ޜ !ww-sP(4W5i}^:@a'ڼharY$}|{;wQ1nJ\y [rBm$[H`HQyҽu) qRV:)[Tj~v$) -X6(=E 5fr[4;!.jF}ݑ>odJo=5t= V=-")XDd9gN&]\:$"c~K|\z i/pB__<"$O^f9,Gu7BS~0 O~E諔 ֛r} Գu>8>znCDКFRcv"AHEjIp ϊ{`\oݗs;]'qVJïs X<d"+lIlxmk0M*$D+*Ge>1,I[|JQԶa[q -N?gj5 ^y{@/K@m/WqHUNd ҂my3mX1͟6Z 7G醓D*`͡Jv{M0#kSrw*&XdyZ#jpQ뀔 Z6yܰoLJ&4cl(촢+4b^ʤ y+4fw.e]3/IaHSβp=%"~~:Kۀv lQ'(:ռEߡѓ<t}He듐R{`YBZPmG.I_&%cDWm5Bs7j}^ $^TTr-cSzcp&`Ki:5@8+eac8xZU<#8՞._ypP+`B{EoBbv{R_6씣O&"p|VɰP~4J!U ?7d)="Q;#jZ_C ⑓sG1Wv$B @\xo?źQnј{t_M_DžǶEaWMrmʍl;[ &-؎dlwu+vSlԮ9)1% Z\ I- ӯ?v %aXV28=(N|rT_8!Z `c۷Sxɕlݙ58FZ[L/dꄴT1m;;`T8(rˆH>tI{ Mj) <@;boXT}8Kz|SފYadzΤt?v7VQ#k>d2/h>$,(iM4s9f$RSy56[>3Q;dթ gE! tm}j*gZoKCZmBhgąp.xs߻YKQ0^H#v@E%Z2~>fYoa4E߲\Ym>EU@Zq766צ#x 2?ĺş!?)QPZ5ޫQ_]>h {Bso@4 %3|Ra ~x7`MXǗ⥅ߏ|f Ak`ec?VB\J@K]1a^EXeNR&rGY$ʓP)o=x0įmߎr.؁F`lÿ P`(6\M4ꥫ"@;Z;wp4b_ *)(GmRAr;ad`X 4V|]lAxo`]03 J )Ĕ`ᔦٵ5R!cʱ1qۛxH8T$ϳyǨδRDyoDy՘tOa's'$h&`3v^N]A*%$n&zjoqKbJ+Uu3eF-[2 zF@ϧ.Fhl{?=q mm8h0:Hlӡ~N]YܚKPe '}q2=uE^:U'ΐ*qۇNїޢ/nC#%8DJ WPBgSCr|\6p>'Nt8L>(UHiL4XqHU0dÙxT5"NjtNhzVx;< ؇?`ח`\9giI֟)2&}Unxuy*Șs!lʭh рu"I#b\~1qG4Cׯ -"\L} p'B:k osD{ij$ ,"<FE;[ >׀I?h)Ovq{nkj剙,Q4mP73AO_p䷉?M\ك|$7'Xz^AD9+VeCy2N)ztI{@a%j xV,A:6#ˌs{wQ/+d} ODKgќUVHb%AztrYH#>F`xlpB<~JfN঺Jefaդtcz͍qTs ejYm^Eߣ4I5oם&2rmg:#Ԇ ` :髎ºnw1R6 t45s$g' k,Ѥq*)OpfO|:A#M+OZDOg@M4QXvnO!k^C#ech#d#=S9~yjf?'*rkl%m&ɟd%,kCjck'3{f0 VT 0@ R3NB6}6@ 6*Kׅ*pRMlS%AGfHG]5 bg#Oo _DNі`4uuVfhVm I_U'_W%Eݒoy. Ge1lIא,yprLMsP@3,hfmY'ڠy ֍ѹ Da#R=fV4?4eC c<L\!Mv!W@M;7P*שef(ZL l"3-N*<zdqi 1:U L^'pS0j{2K\A\J @W*N)f{c~-$RFshJRˆu'zhR.m, NeCbHf<28+׀ȐV`Rʰr%@źJ+9iղl՛7f4 =ݲ%YKq4xomwR09X;7~WD;d#MY@)  ЖkՕ5GZitcPCyD7ԜY_ 1HgEsgbxxA*3K lӑcbgnQjBt ]rV?xUFAZjVʅ/m"qqU~ߜhy~rYl8JJ='%ybXcc4Owyv뤽a_PD@or+./[7ߒSkdܹ{@UM۴qoPq(1n˝.;VVl0ä;B Lc*PR\zKmhI퉣f+CA 7t:ٮ޻ JhLlk!*y3;C)C\V8Q{rf됐_K 0Qn OVY#j|M7T6jfT>j_AnZ! wF3b2uijOPk4Jڅ.tc^:uTw&=}[srP3~5-kfAz_ti 0^^4?8)<߳1#osҪB#/z%jiV*jP%]X\'e!{5mk D4~3ߕQWq0af N_?ݭIe]-#~&^edTu1]dߎ92Gq XRzIV+I v:~"_} \Vh!`C}ItˏBBwr unTT C2! hwQ4/A+0:WeKoG`}bh :!Ie_Z CL-鵙]J>^Vx5AmsS*|H8ߣƏ)a I˱$p$įIRS'^K "U# F(ϛ 37ս򩹉HT$#1rk"eA_ϫ*XƝGսwk=p}+ &~[PhNG)k\ާLck l,|Ŧ80+\QqLjgl E&so-7H&1'I, I7t999?}ߪXqCd0cy=Ɲ"9$ +-pcgϔ䭔v"`x!TfdBԽ)€D)SثSP|&0!X70Z͝Fv90 `;k}l8b ?OE¾*0d~Q80ٜpGwa<3= o;v`hK\YeT"_kJ*lkw2:;mHZ1Xd4FXv)E?'pu`K/t^g/L FK Isy1gh. 62}޵u>f //2-`fie4F֮U+z T $c[9~GYCrd9&2JQf߉6>%OVlG{Jy%=0k*$˥#> a>b[ 2x\ ? D>X擻ѧ1X=wp|ba|Uݽn-?:W)t{$+E\ӻͬlM&1e,x[Wa`ă062q.{IYmbVbɸBM1'vʣyto^Io ݜв* KJ ex2gA7S7jБ' &^%7ta~]Q&_lD+6ukb=J'560smO|/{ښ`D>->[m s.1%aS%Oʞʊֆ т>]C3=SL7{C C{.uZSge~\[~2f@ !ҒMyT AM/RN>^2ONc0iK+#7- ?ID;_s]!?*ZͻALR6Ԇa~/%%g: w6Ӭ+}ˋvD>佑[p>J}]_, ,-=,xP%+Ӧ@ϴH+&E *ݺ_su4nWG hM]I9^)돭@>qsr:t8ohuf(V΀im C=>0vhBzp$;$pq)~LxSK[F3œa:gOE%o^V#|_Y.g=uno-jƌpEIyM^ǹF&'~"\HDl(p0$ @--#, 腎mV @qLP?VMRW)WBP_$2X8>My^!),oUr>&k@ԏ -Go@hi[KAAIL0U;7rB;+-PI 2_/rKatSVMe |_vatM/&\@'`Av*,v<=q(&~Wpb_JoV4 U> pf]P&h3,Q>1ջmգI,o= ǩg.i :OgHLhM\XJ_N#n:y` hP+q7f8gVie<Nqۃ { re-(Cr1럯'X (՗8)dIר<'Adl\-:Oo&O 3N6iLnSPX2 .Qm zy;C|j1CSi{.^=JRI \m5Ts71vJADF]~>t pIw޵=Q`_w׶~z*u_LՓ,q ^^e@ռXܠޙLרQ ?)*CzS9wМK-L)_%Zۇr)аG^\򵗎! @qW_)\43>}y:Q6wӐZB,V\W: d؅ȍđUu7tL8ZS/-mah2{^E9rgPz?194i$@`P9&l&srUofjtz&'*Ğ`iڑi *ZEmD<D!E඼" qYBD_|6鑂 ,+ad~wp.dLR \"t&w1a[e>R̮ Æt sf_+; vrBATMjbº'eG.oH9' Iqӫn]ɭNCP/Te{fILOn +z\TI'oS yM|X$UŪ-,Keo;HhSu AC",Vc o,FF3]d/g[$25| kbQ4+-rJdel3, ǕDI|(ϝeFΥi*>WYvg,\s?<+2 IrODT?N,Ic /Qo]>y=unv)/Fl@yBAA`/>zJYùSÛ":8"O,YS tJĺaAo9.v8b6c<$^1xgBV0`Öm VnF|z8Nb>/# ׶Ve"<]U:JIddTG2X5עT}RNoҒհ~>經|Z3RIjwR73%΄Ns`Lݍ% nJTp <1eTN\gTCMtx7bnx rLu7/cR<4c1#::c%5/+4o[&ŋxBEjr"aǠ7 yhS>e K$?!ַh}˳fr!NZœ‚ +f9TbOn=|%)qǶnMBjhzw,(t&&/IgE4,ԟ։ץDE#N;|h n#x4,Ҟ!|873keؤ͖pREgnP4g#6kq,JcLV q4 Dl,w6\\I@PQ6MXq [I08܂pUoُ=Ue@*Tڑ3,1X0h DߑL%繊\P + Bs0a lv;v_wǚӾ9&yb+B$` S.|xM gͥ ,bu\~VA[Q:U+)z}D%ZF,(&賏*z&H"jAw!oZ9P7mNr;QFW@+?kDn%~d9G\V֑ 0exȫ)$= w(rQ,8uϴ*HMs@K(j:g1F{i* +x#1IrkXs G] $ްB+sTi2Y&!3VΚjpɼj;fXa=d],籦${v( G QT&S}CfGRh }Gc]_^mu/X1Nx22g^|d%Ёi؛5}Tv0`?m\~Ë.YtÑ_ NKډaKޠeSE82Y*# *QIo8z .!$ >J}_Dv(NZ:$e 1)=Z]"dXf\aC{[/S&_v+u`rA!?zAo[p;R*Z&;Oi2fೝA"w Z"n /,p @.TSDoՅ4ް2c}[ijuQcwWcaBqD.h*g'd88%4 ))A)|)4T{V&Elpmj[k:SCXIhGeEs|B2-ۋzwJ,?WsSiaZn<-- 3&w)-ϩ\>'ayfke5ؕ,{$:L724 :"u%'޵ԴFG]&''rz5y*x$p8 7ʷH$tH(5NjnTBaXdA {oqhسRKۓnјzYZ@0??k#ҁ}#rs"@uu6( g>`NW?r9\5#QH%b`b7f\ W)@ѭQҭ(17^5R2.@3[]3sW5uAn=\GЊ%xH`4ZEQ(^;S;)5A.ّ3#'P1ݡm% ލiLL?=%U'lU XąQmpng,&Sqʷgͩݠ" ]ݰ45E)CE? l%qzcWS䶧I3.bƒYRUz^ J#4m_c :Ez{^'v!6fA3FʱXJiϵi.p5)!tf'񉫵$ tc DI"B>*QA*+4W?:o/u?OSSaWa /Q~o>yI,w|nJ˹Y¹ :1X[k %deS3h:D2 \qw$I+[S?Mt]t+`$ ^^[f6Hg3;%*bVZN= H߽kާA $3䙯ڪц͎#~EQɩ}4ZcTpRkѴ~4(u,=k7Ь|<K|c=w1|/mzGEV@Pܟp's ܘ_%P'|t xнPo2ׁp]Nڙ1^{\AZW\I4'.r-/5¦"Vʩ!tc'M$x𷎸)s)'w ~)Z)f^AC֙m{-… fZc6F:ꊄx_$.Ns6GȂ%,ZZnEC-M'Gq&lQB҃Y z3f&\/ X6bwTÍTַu!nbrJ*3Hf]"PC2n|fK 5pdzuUɟZWd7w}O9)b*|(7p.-1$k=WZAkLm)I$,/'D>YG(2XHL~Hj!.fΗ=It0d3|oZXr*emO(lOv9q1d:_3a&- /ߞl|"ۮM6Ĕv8Ƒ!ŕ}U b(r G?|_`<@uB"Ϯcb N"䎆Qܔl"zHnx}TU QQ“+Tz};iI6r&2cOOIB6Tl);~QQBy~-ҭ!,j_xܫT J(8Dۤ!~.*^?ng-S/ fV4]x$RahkevUNc\3}9$#B˛ţiC%|k>b7;, -qx"Y,Z&cg"^%~ϛ@ ;U4uayI -`Gj݅\9}oYn{ C3ց3Hk|-|S&} ]@krD}Z՗͡.Ib"շ}NZ.BB=-Gd0 7BA  W l(9f͎'b7%7 ܧ:-W~[;zhwq4fDC|Yڭ @,(G2՟M+Ug! o|WudKv.0}+I/$o`s^1A{GYj.DPQm!ÆQik-ˇFrM5*upHpd]^P!q걳т? QfWu;J7dq0Hv 㜗wNƲy}[lwj+T1O 8Ơ$җ1?lC9&Ī}0Læ^{ə{J=?s NQ]w ﳥz* F Y.4}^_wssl޲Hʱ=)`2a;5byn-)oj)&*-6#P˜!U)[ D5ƄgɃnY@POUw |Lo23*sj(IXWHSdR=e w+@f3 30Mz< @Ww53PɖwjHO]<^z͞8.t!K0yCtsT=}<`1 Pf;/(i4m[]>^l{1rB}ANiEIhf˖HS?x Itf,EӿX!bmΔZ@ 8kdvkI%f'YlVBEhP]RKHMmfXO\6lp#L|JJbNVݬ ˺n67 ޶:?M vFzd+y) ማ@#y JW A)xXL!SO"=k{hƇDo1bYѲ%u`|iKo(1ddBxMGLh~XZݴW/kpa"$nϕƟ&]X:D˯I 2А'HZ$\Y&)kNI"bjãP["fFfEX U:3]`3 ȇ.`i. 5ph舮g{Ugů̮E`rL)O#x>^`YI>SOH6,ʉ%fYI/*kYoCUu!-T?xU U/)@^c Pb[iu|}Hsow{7خJnFed&0X|} i\z!^}z&kNW3RƬabzޕL) I Ubo`r8xX3^'3khq/ z !|hMv:vߜ=D M2TY&f&$9Gx~6mZzJa:Y&`z[cIlnw ^)lb^V̑)u:t jM;Ϝ2qd^GV]"&.pQV JBoJ|Њ[G]ڣswl,8 R @vdb]7yj%M/ 0 & '] j79Y|nv ? PLm !'a~Z&kN\anOx}EImFUkLD<̄t(0)Dt mv1i#m'5Y@7AFU3B6RV {ć6ebdBǂխ_ˀiDW9p=KV`3AˊY,sG㳑BVET)l{"6q p2@EP'37|(3s}^{脗)03nlfiDquڬ+^]wS쀯vEƆ.pKdqSLJiqO>SGZcMyPA82Wݰm0bV?E;^XE&%xR9NPsSws35e^70Dݞ1,6[<׽CGm[5إ!GLyX01irP(;~h8(,y>#9+.o Yb=6(/ĥ-fqCHpfP`n{UM~Q<l= u]S0ȬEA F͍S3bdR**Nqv~hqpw-ϢNF6jeXz w-:bKq?ZC 3{Y_w7!M\ S8CTow]1-bA#G?⃩iwlSMl06陼qo+~ j\d7/=`EQ*0?VV^1Ӆ aU1K(B"7p4E4Tpt]u5Ryk/z[^&Lğtܘ,KNtlR$|diBo4x̩}w`k#qn}#gl?O*oeW_yJa ,OCQK`ur/*y Ry8U?GXˢWBin1P6#1 [2( xE)bHA|51mEwj:G`:KFՂpĤM4NAØp,HkZ9t""v i J`Ʀ!K,4Tj6`0 O!jOoLHvV*_4# jZL-"2Y+cx|F8{M1AZ}Szd",PO;\-5? ץ/P}Xm3Ʋ6$&ͪu}@fәNIx8fnv1`6xm% Hl|x ׁ1 x{d[$1`C@U=xcGg,B6JC>!WQϘq:SblRIF#l=6e(amb8#Q2;_W5@"'tDwӼ^IAPH<8VNj ~nl4AcЉU!_2Y cB/rw)$~E(r{lR6z9Tۂ"npՌHXQ 6y%_& Tvӫ!6c7TV;Ax5H\5𾐳ߏ?98T&Zr)=~ĩ3ɘ_}!;3qJ@3F~vAH%ůmrVa鄯d+Tp70&8, BE%qjHcyWk3 }q/)fCD"FtthSvRv IБ iĻZ s, 6v6$GBa9A`\4VF-ИnEdvqKS}F 8E'hw  PSY~A֖%GNEs!Z6iE9F6j;1|_ Oj~2!Sd "FGQ0DQyL jNIރCٚ˼VY2㉟z3rM M׉kZf'`r>'#ըȁ9׵?.kgDD/'H< Xf?MX?nRr-i$%+'1ssZs+ uҭuiQALv4uOi.S;ڹmISʅAž,?>.59Y -oqI 6jΘZVDqk]TdEM+㇤?画b ~="RD\r*\o (Ş_0>~ꙆӧFeC>0%=>={h cOR͓yj֥<\p\4pMJI;ꦦWG_pˡ-h#9MFd \P׶sBbCMz-p/Յў`RC]ySJҒlD6յPzK4JGƔKPQa+zeN{GL"`ZI|Iܙwy{&kb=7'ɼdxQ3V,`O{r:mCtQ FD+<_C1J&MQamjs4\Xڔ6e?V"i? X,g^<J%]035 XLВΛ]4 Ν#2݈F7o[[LCL&C7߱o`BkH@Om; DX3(nrI!!AcrҀ좍v'^NQ\4זIhWT'N}VFF}AV'1#xMGx{9Y_Vebٴ}&Ez;3`: T2M|%KYQ落&ⲜpH~t B` D37C) \Gޤ+iM= 4M oMnWEh"rO޳һPwVѰs@ .>n6d=X--I\-C\xFe}fZ0T^h@R4 8EETg=h1Sϸ9u! Cb~Nn-oa0 Dju>$iŃZOf |2jWu6O>sHcU!tp>T,h0,K$a[ވtvYKz2AOfkPQ|MMhQXMPEtwH ՔjoƮ|vZQ8T>4YQ[Fa L!AV#S%^{n!18tǝ-N0&_. ^)a{[q9S / [V[IO!p-Q╅t# \9gbޤ*rW^c'ID1 ,[$ϥBWk93zIJƠY֙a[|bXti'Qlɵ r6ynnDLr/X BO;vP*jIwG xr ,|iR:Al_fc;6Hƚ&>lR𱇤OUixGǝϔ.Ш\wcw|HG F$hR9a@~R>?m̆x4=y,ݢ4kuquY,fk*5DK#vWt%Y_j)<}5)CaV%.sojvdp NG !xlr s&8-H򆙔q|pFu6I*H4B>> w~0]jtCn YX08>_L kNN΄k "QC= v{gUB?*5^WX- ZjPLBg䊊7sS1vѻ6TbWu̶RgۑyQf%ky5ϯ뼦ҸRNو8NtgW\VOuQ{.W#3cƜޏq} fOE(͘h}sF jle#?qV^o G];!CT[vˎLNsp ee$a:MiLg<ߘu_& 0RZNJ0UxˇJP Rt*tu*6XBpӹ86RkIH^e.ZX hKX+^n;{ ITUSjX!(gSUb 2V)ıFyˆ= ̖o\}wV]ȬF 7IGקy\xD8hùT> W|VR !֪ \)h k*#kc=j'H$*|ml'.Doa:Ao 5ܤ.{C䜮{hF[_SQ~g [ʡ{]m9=JH_zlDicx'hM5L3tư?zuѐTk'H /љqms2ε~O'Yg {@Z"&1ƠTqꩋhHEO~0F(i^W)-B[6'b(U0"pZCGRr%A0 ^\p hw)LG:z,>Hu?WB+{YI*J}Deބ#9"fA˳gɴTFݹ]2w6t ZyaG<$RoԢj u?w,͙VMJ* Ski(YXW-`Q2=^|@OțPDM:[$Īl1q+ 4\U^2PRL~s`gdCOg9pU uG&&^G\N5ѤI<uQ>JU#KңF+5*By&GxUCUau".|QA{ǗZʟ%bԳ[T$"q0tF_oN+][$1*%EFnD|_]26̌˅:&Q!'̝ί; n`QZ5:]Ce vtƃ`U\*MJ\̻ɯ Z6`(#$4گͼ|Pׅk༌,l[OWJh$U7.Ooz D?xv|C-ph*nޕ{ߑ2eͷ D. l4"Se-ZxB.7sHSsO$`A9d dA ҽL%AhPbl?JQ$mo>(P2 QȾPe.B$xܢZ~ ɌЈeNOԤO~c3}<' &ҕRy^9'b$&bH$a faBWU*p2gC`xvg9O (&MPQP @6_xxrM|#oa]DŽK ^#bnN '8QR"1@0*kɽ,5UEϭ`~]z$dJ0Zo/%qBOj`Vs]:)ʜgyOulc"][Q"Cէg2(FK[nˋFZ߻wi(hi q C7*PTd/ - 䡖jΏ% R,] Ϥ ^x|G4s┃L}ZfAϰv"џ(]'m TY<;ɟ[ȩJ|˚7hpEP|Ows]mώgjq/-(cmX%!?|enTțV]$VOd&3{{3p̢8.T)gN[5oeP3P#ޏLHo-=-nkS̩]#o<e/lhl"~+"<؆b^;Y+D:x y#Qw-pc(엞L?ޟv=k]nd[~K*mw tz  h 3{#_>r7’í &H:&s<! ANFj'Ăک*8q*mwHWȿoo- xDh& ;㣣}nǏ s+VL1E)l.)N_^|HĂdjQ-=]d@~eֱLJ]$ьt,P%Ko/?{P>p7Roqw \V%Meq8/C+WNf1䲚`&!ULt؎Yf! g3e$o4i.up+>oU<=}ccpG-nl:S iʇ 9=}ϿcB2;!aoZÀk:A*t@6?,8d]H^n00p[K75c5yE"=M@g'Z9<3"ᚂi9.e"WR>:yꈂ36UiZ?]fpATcBzz>GiӒ=s5+;2L;7\+O}W^N'#hi li7u MJ%j;7cH?2!:XcR$طj=q )DN`Ԁ[oC%sFyOiV&xoy͢M= ˓y;-r˛8ucL_ڦZ~%i: y2y9Ðu sߏЖ]L 2@r/y(-v%hY(VMh'91oڃc?Hsw޾RߺE4yC{Z2n$Y$6OE]'ʘ<x:Z7/2/iR?5vk3yƏƁ\mv㋕Rf1Yk@v s>xA#!Bb.W źWsXCz{.0P&OF0Щ Rj[g7w٭U$~K1ޯp0@ F<h)t@xMbWY8 I˗? dPoVH{Nl+QBY.OoڛUnjlzԗi;">s1Z%W( ODxj=Bd>cQHPMl9X=@iSN)D{%٩q{2s}uoeB~ Iܻ l߳q5'E/bHT@0XF8K%pBE!? /Mc8z1|^@|a:)>_n7QZAfP 㺫p4*^y"UB[Fu@p\/QI9Kw}7T\>5_,3Zx@rjFTvޕkXw*K%Ek#TG%!f*-%b֕MG ^=`Qyi9³,š |Pp ֧u[2 I~gkG$ת`ՠʞ*}PN'.Wˀ*<7n-Zn3LjaBE=qfOEuT{cT enpp|6[p\kOZ4D{syNiam- ,-,PY}C,p>Jw~'{)=h8b=0/0$);!Y l%gǤ",[pHm7n"x4Eifjy#tp:r@Y]S鯕i*RZA{~Iy9/٘as0j [nA6&~\1u;_U x#QKG4C5K*$do]@sVKLъ Nxԍ7Äipw k{ņd|L)a|8l!Vhڹ[z.XqI:;x*=!azdb14(.T TJPG2"^eA7G}3JYZ}o 1J~볛m@@)*#y^h02o_ɴIP']^A U­ -^!W 5rR.3J3#筝@ޑ|84 Ԑȴ"Fq/Jq<2'TsZm VsTJ:!:V5?%M6;0=:IMq9\$F!V /E5}Ӭc԰9X 3#B)nBd:WyFrX,@+G"|㡰Lf:D;}+uWVs=O[Pf5R=M̠-{O@&Ԟ6=w/<erqCֻKäH#P5tuUꚠ4dQq[gxNvWO=nY.Z/bo>F{mT4.'m^AmQh3ILSEpL-fnTćm0Nr# 8-*=ʍ.-qI.!%*ur./?o|0PlH TҪU3e[ek5@uIV Ɣ$Uc E Id6۲9VXk[fi ռ9LWA_ h}N||m [ BqD p@C![Nf# vv1 G Msq6*CMe7D.}I,1{( s "RqRy [L䌷ɰR Up guE)0rRzr&^W1 a>/ ĨgPD,nD n33'^qV#I0;xqc/|gSo;UE| 2ֻXA w,[bI̿約(3p~Z#$EPD FԲTOA_Pp2,j5){!@qxS\%TW¹݂}Ez_İ [:'(_ꚨ ׃6'韋)Y$T x2ӚH1[TXBm8|݄@H](~qg= Nvu@M"0p5RjޱtSjֺ  ț6QQ R蓄9nd``a ^ZJ9)( x Sؗ]ĽR PV5e,-=hbxKŒVa$-8 T42?{qN1-jTlF'f\3\Y% ]'AĬփ \cBl̸ǒ;-3tVʢM+qҟ;|2yXC-?yԪդ}Pn7Zlk(+d6 Xyh_Z@]/U>-̷3RTcKQ;a-UFQe9xX[Z%-"Zg<8ڻsu~SuBJgy}DY3^=9WMZ%,/ʼnƁ:  NCi&]l\1t.W*&tG.=z "<Τ'Q qh_ 3cm&_`C` /:rto#:~"h}hF";FgRI' BO馆^f`r/.90jJYmaE g"&&gaG|Zfү>&; #` g抻-[{>gܶ߆ZlCR)<[יM8نE= n&.R7k²cgHZ ,C. thцyQf}F]F-j[@{8|(^n_/^pm$MO5d8/yv ]h'ֆIh2éxp e˅jzk̼ e]}MG`)eQ$hx9CHʍYB}JDi/F!v'^}f">}(R@9_]2LJ* żv{x?Gτ_279tY kʓb<{H7SP~Ήe;o/MH?Q{D7͑4- p I&omz DG&w[ʖW*k'̥UzPmdܫ0'U  zEr18 N|"Y3[#&+6( h+3#).ĸUO/I7$أ6{Kx\6 1[Z 7*zL)FIb"ܱ2{4)ܙܬ\'VWz"fd̫7i^%f雥(vhm9nX; 5rb/fzĬ8,W[P:MQY6Fba^mOv++C'nD(efHzV$vۇģBl<gpm8a'3}(奊~¸Aa#KD"n9ΛЂ&-;AḭZ ayCWY1%6/J0V"x2/JA`-Y&\Ox A5U4"7bA̋V~= @;6r~&A򲀽$_G'3pR֐ߟ`|ԻpVG-~ma 1SukZ^V OuIܖ,k㺑E.6XbZuȦ$s^K>#ż֏B38!S2҉ኜ*8[5 V峔w$qNtW4ݚrD5$D AsH6Yd(rn+C9؃ũlp \F^/'!'VCJs[JkHG,Y6: )s3I"M 8sv^̳@Pڏv<;yx_4?V^K)!ӿ8 bvN"{HF(-E3dJKWh?4dK> V;;Ysvh{uJѐ@k^ʞc}?FݘHj,[v>|X-6|UFk씁 #L=N뼽̽enl1`]lNtlE`T|\ZZ[tat`_fLslj[{)jy /;1xdhcm]:E7hJzܚ^Y$l{qS:EGi/Gfe!B[έ%Ǫ0 WIǂÔ3Pŗ_1a}/DH3{{l!Lh@.٫ߧ碃~unͪM+qSFq>t`;/wkKq2! c`Ί dqRV %̞s6WqXѺ v{d)pn1|J(ͱ\USC; 5zh V qky+h&nqɅu#9sd>p)kq *ΔxU'cϡM'Je175%|KrXBh)+4ȌKv:s%a 4l {N86:^3ȡX,$H^H $8YfJ9D~%J&/6NS CRI!0Rvz$!Olqk'bOmLt8ʛsX5;a? ' "#'L+.3.o,쯀qtρf6<$۶~w7bmׯ ڒMڞwE^$#ӗoIF+(ۆyczz%bթԷf<,RꆙAuۇAd6A_-X[&wq^*'~'[fUZ0Z٫$uQ|I6ybW6x;g$~+mm"i2.vz5B\coH LƧzԊQҡveʓDLw^bF֌&/B*Yph;^z_W~G^!Sd<6Hl+ssЭC\ja[[,4k͈U|mJVSf-STpk.LMȍj @I6' <_S; {zS"Me:|WaiyS4hLXZp#OՀ':͂3 }s{ǥ V^4#ZK_S'Մ\i՜ JnpeސxO@[3|Hn,!NGqG&Jl(?gh M!odl>Sz)xErQ;ymCLa+[~{v5k] 6kSxsjJJ5ưFbY&bú쿽 xjwꐭ?=qņ3GA'3DcEǾɋiz.Lïe9NOqڮ/H} jmtn3~>~!5%uv (NLG ֟ILH{ XZ̉g>FZ{ޖF/cj5/t˼c&;,bA&%%_m;C )'ٶ%uԇY3Q-eVp^0@F1gk=٩C9cHgbv910gw"zn\B ODJS8v$@ren¶:)-}hG-H_S=q@U+93JyI!G=&Son;1Xl9z+Nӝi`مi#> ߸+_KNo56(T?c{qsLvv6ӘPfӭ݁/x'KוXnI(4c9WW>o֛FС3R8nCs~+Ts2~g=\3x @LQ.xG+@շɉ2H3:|}Hjv*mGO~BWSBu .;A\^@KRa~>,8 bI|p:/s+칚cCyG}QEaH|e x:y(*%f}N9Y e+VK S5P *2+Ix/ƾFwJb>Avb%a jSw6G@"'e3[B!K38g2ȩ8?53QhuI#ź\tG S#ʿQF]0h]D^ r~f 1N8pćovwҸa+Y!3G3&s:oTڼE;ۅkG, lu![=NNJ7QͿ(w&|:߅>ϬmD HTxAԖj OK0$Ěq& uf>P;i_73WS ˆ``,M1#+|CNB l[݊VAn['.T1Ç\H9 Sm|< .X/4:HÓ_(J́ {#$4nGtS*P?Zxz%sq*-tuٌ R֙0dtKRWbn ,X?23eTš}?a,ff`l\GF x=[C@!x&6L5}VڢTmu^ l.*thcE[Px 5ݟ_ b !PB ˎ*m?yEHܲ%<* -/?>O w0<'{F]Im%nhR҂]:S&Y"Q(N je|-g.W؟.];%gfN"XIY2 XʇlJ4Ss a~YZ Xzz(>|Am&)+3ei>su2j7" MNˉa|vqȰ/k C5\$֚ TlV ēZ!!o 0sḰ\cTpqnqoՑ<{?[v:hS21${&T!z 9&Ϳ=Um)} !̼ Z ԮsqU/Ap9hP縉[y jbQD+69tT^=vA#`p pHJoRRޔ)S|<&bۈR>kJk(0kG.)W֋yDDyԲ{"G:aG˪&"`|a52t_ Yd/$/_sWLv+}zQg6I#|H A!)iD[\KX o\c9a{jj`{}c'$:~KCy ^#aNۦ|yiP=}1y1pɏWɺipχS&v֍ {T-^\_R1G1bq%!ZSl.Cɜc/8OD_bK .I$*gn8?G2-ܑrAFRfEX9 u:;΃t=ɛY_ي}9]#1D3*HoӷS>əu$}` ][7AI݁NyM<+ji٘)/Չy= \ʂpuDPׂ1 V&bH&Hϑv8eҕ[*;O*;auN6#g=wd;4;lX/nPm펻i*5DwG'1}y񔦊 BNH1pѶ]"P!#h83l;?dTŢ$>ȸ˓tw(Mg,Cvɶc|tmACEe &+ZrpHE}SFs|cWpp)+'m͍G [S` n!2يjBS8i;f#V,| 6ϑI,,'ג-+S̖do}"b`C7rN)ijNNFDJ/sobA潲N:5Kk;nݖWbkOܯgPvφN_((d}9M\J99U/D1P15}ƂMPTB4ω3SL1.\@ēm(&¬ CE]LĊog;1Ġ0E3mu z~訞>)qͼpcoͲ=? ~`3{XzPBZWkh4ltnUgQNUv}VP/ S9 7drOrkf+2'䀇 S|3x:%{T]_Qc= %{%!@4ufNh Io2؁-CjH א78ɌBU8JkxK iyYo/h#+'[u JhkG0&auZRJjMP9ke /J9 O8o `dtw=Z.<ו [%4BT3"Ҩ׎,U'o=zzw CNZgi,%WEo&r90uP1!bU=NڊFV$!s2ŘYy4Xt9Qزy6#Wg俒{g?}:cE $] &(bo`bBw4v0hhF|ՌW}1ǻZRܥs,KQޱm^% 1зZAĬQ CI.tVKڋV?'ړx^z&-R+kmww" ߎ = hJL-ZNq\Q-2ymi4*ݹW(hw Iji}0 *Eҗ8L>q^-DR h=N7! :mDSڙpOc竑N0BaU'56Ռ .5y uQHnXޛLkl)6?!]1uj!o2Rud pp_Wg/];ѩMߠs5]B:mb~X5-6 82Z-.'権rM}b Ue>**#Ě͢WYXit4g' kF ~Hڐ ?]2\ku !U<TYHՁ dٕȫB3MQ\͗#uq dpB0xSQtD6L;3dNr Kjie)/h1x(k%1Aj\UE eM5vuj/gu<}Ŕ2#ǔXb&R[%a,L^xD*ƭtҮ,[wHEW X28PmLn}ݫoWAv5毸GK`i(zYn3 %1-?L2YTy xjE,+_ɻu亲lTX%=^沿OOiޢC-?N@dVᒜ,;8g#D?PëMU^Jw0nb-|s- Na+.?lF@7!ΒEgdmm77/@~eAf^ҘU.lLfhsuc_.L{꭯dVsDDg!%2[kuڥhD P|E!banP[CԜO߳hj-'7}uuoF0tc鶍au){iOR5Oj8 +LC-USVd4|!M?~S@I­A*شL1l(zN13~r\E%DN!mb؀~ (ƃlSnۉpQ\$"QW*lh`!y.c#C0{B ΃Xzc0 t@|PVEOZ8!.6]RƿX5=#{/}3z눶b,L~}*>2B rJdK< C+_99M;B!tmGjC@ 6fF˗4_sUX ~#f=`R6cURː(!@PK VEf"vIXQ[ ?kfxc?|P_DC"݌;TQ k3Pm TG?)#+d!l0&yn'Ta];NQӫ;kHEJ5Z{ŊgFR뙺zp݇mie'B1NHXXCHQ6kZK,[ Eէ`%8?xo;^Z/N5b5sY S4D-6Baх\PKڃ҄Mtή К%X9ea}ݶ6MYň>Mӌ+M{NPb ,aGHt_F8WcӿMBT3akIܡE; j9cѭ"!AJ~p(tw.2'W,H9CaHcJ; U1?"Wwi;E&Mǎ,ֱb'""b Dbb!aS$=0H=?{Y`Ezƪzj}tD'ihrz?v9L:\TJZ=kb {P!#'vۘs"þԽbA4z$b0؅MY] we FhKZ[ѿ0SuyٗJRW KMG ,ǝN@tr8pO=slb {y*q~ij"5U`Wd@.) ͮ(zpzG'ӡv(.8F⨢8xx ĘSjDDprg)\ UL2+j=bO?&?mPC;j3-@o)靖dP- $b(:uBr{s- }ĿaP0*hZNTj싆F@Bu<Ӱގ xm;-|}vѕk%zŞ) P͊)[MV?C9C%.Lo0.(1LEM㯧RwD{!\T\bjLGB-Ey44h4(՟+tIw ] UO(tL> 7wwscʱBBL\0(fN8Emvthp-u1Nij务\ʹ#\Ⱥq f2E x\Rj ޺ˆ{s1a|'&6n 䮞zu%Vi3ׄ'R`"&+ՒM<ލIap݂l|᦬:Ե;5f5+h6Nμ7ގPƒ} AZb9e%6ٚP@V!ȏ26pkob?kyM 0"g2 &;1wj$˓Brz r]+Q7Ig+.ltc@粫J*j(5McY!!zVE!o?>@U ; %#1NԓZ5ayY7h!9pWrlIďϬ,Yq2fBN$'ܪՙؔ?"M.{WdCk¦d6 cv@vC۵--YƘx7(ntrQVE:(*>ؿ -c({0OZW!7}< fGIk 4ٳ欰i *)И3J'b _"MϢY\KO VG:nCX4uqSü[yz`L+4I,D]$枪Skƚe/4c/4*QKZ%Oj{ p j'̙֡xlnLxFSp&coI6؋X> :6` .OQkG?xlH:,Oܨ}&PϫBZDX7٣8`,5{Xu(HH ۂ_7Do5trb0~U î$ZpPD0ڊI#PM|W` #05N ߔlWyN [Rùwc@_Uk0(Og zx`?(qOr(zڦ5t62rhWak$CnA[,xӵa+tOA'޺M|{ Id=SO֨KpXD~ hR?/;Ȉb=qx)4Jj_;BVdc^c n *wfӠ-|o蕌mFEUf$M f֎(##~6qs(2nB*Qr,ɴ~[Hy4Y4a  2Z:UD".pԳG];jW>P3rem4TH57՟AD,F*-Ex݉^ĝ(Lve X[̀8]Bþeb(U1 !l4 `pt-#[7>g;O%Tч3o^Lٵ!N[)6!z0wɁeR; .2PJ #fئҨU!CN+mU8jD]b9pBM\zwʛW< Ra(ÆG]=D&m8<<#,CA{&iJnuܳ5P<{P@9d~[Ukf[)?; KhMANPc&pYcw*i0N)ԳZlH>g+W> սouatKߑU]hV~ѯgf҃EOݸcN﬐Y]'aR 8QzN 4}0}("X$~c=\~/fT{gHhCӊ4auT=ƦUע35X[$0=p-JLN{:*uavZsNN=xbh{^_3`U4-SAwν,a[]Ie ׍i\qb}UiQ5 (?k=R J]^s A M+M]&݀>uy$0}HtIi64/#Wf[3!mK)tsV3 _H$z`cX=hmo2iuˡl7h <ސt oJGs B,9Ixo+ zp^mD/MNBSHQd&:6:v'TjzLa5ΞncBFEcj"MBu ,. nD.⤒`ciΪzJ ,?AL܀"a!<jR܏i&}<԰4x4  ;@޶+W)D W2j-,NWX7:ZL*䷳! tK`\6o~#gHD(C:Aޓ&q 7k)mr\iv1k[З3 Q̗* _ igqfNL>+9+YUG,!ڗ0J m4Nxh>L ԇT,ґkE(fgTLECJg]>v^UO2?{@O,E4ީ"Q,>'D=H>xH~-WhQ]5opY68-0*r_PՂ!?oO`a xZ}z^ܨmk]{QD(^%:6{>ORiۈ0nx}i/Y@ ]koW4UMIU?E5*=-s8#ްڑM&k'Ԋԡ]m,;,;A߼SQk!<%_+Z 5Qs{IojҌa AΖz@LPH?bOOXa&6M r\Po=`aÏ=}듋~ooyDNvAEc}1_+H]2MC^7K^ s+bK񷫡1x7\,̎u}Az@G,6$8dN"&;F $Iɒ `m@ }J֛ks3b=K 嵚9kKj%3snHcBXJrCMbv-J_hccHU@,%a:#nŇC [4JN32sX8_W/VjKZb}UpnX[8? `B`|$'쩜YLjkDDw;wYv v͆O &@eQٳ*v_ܸޜM9ĵ=rzpd> ,nnwrDs9GflVOtc 26@Ӂ*&y{sDo 0ZtG䑫"|g톦qg0$gb/klBQ%T+n6u .ieTsmL_Jaˎ.0r͢Z=`!Do5T /7er07vnBcGY׆dXAkBZe<]4 'U-I&nw, ^O&oo#xU-)ۡ򻱵s+6ܱ"1(֞1,!Io 6"psi(zBHM5Lvųku /u} f,Bxfzb(Q*?l$K; fӿ.X ]hJM1(Z@Cc$hic"mrmh;9|PucۚMʖ01/4A0A!~{F 0 Uld*F1PqIʵ?nL~Jq?1'tW}ڭqKq*0 `z#]ɜI*tByK7P\k&/ Q1E9,.&'`>wSS%9@TYFjqךsP3tNmMP[f{>#~]m,:n7K9w;jT>mRnf-ѯ\qΣ&ovtiM9>]s) foYYn!5D|-4rZCSbtҧBn*I29_{͉6[m;f]+b*@)&9J r f合jMC5uSʡ0? r݀%DΘmqNp=6FuAcƙQeSheª 'N%O\QXф̑"Xhbq&/wN83\ qK@Lg\HE8ttA3`W"<}=_)GخSX] ;{K oEN9xÄ^S3D!W(ir59fr6I6|7O%B11>tQby1Wi HrTfכAWUe[V礐H]J\ozNBkKGx?y[ @ucd5$L~@x`Lt[7(d8T8(G{noyWdkb|_Ǥd`%9Jr3Ep_Lt|K47qw #-urˆfw`PYzekvY {P- <M|A=+MJ.$(SUd!r .e|,#v_Vj!GѠzz%]D-&ft #e_ kvQvmrCr1B5:A /n-r`@st{ܰxz5K\c<TtT^lO=e݂NQr3gR"o(@#vMubi͎܆_#]F\.mk> ݡDyi?Sϯ@Dv#5VU3 aw>{pxc~fTC̝-e -?3c…(xFK,BIGA>[fDc-j=v˜Ij(yv^h+aAO/ a Uszk!{EpIA`2{b k\qx7Hzr/!/2{0#c#.dˈiCqT$@0f_!`ksC_}7t_CqqFNjI ,ivtp4'Xt'cK;L=a7\Ə Jw`1Wd|v89ȸ֓e1B]FT#%EIݷ0Ǘv [\M{s+<1ƲuUg]2[MVz|TG[?{g+-C=(*e6HģCq?i/Mp37D,ؘxd2QE8gUr+tQ/W!74& ԱAJE3rKtɅz `SQȪal~-2ʿה_3i7o.t~K%h<ZKQBzvR{*k6UQZ J>V{h:QE);~Ÿ\K˟'kӤyViL>5 Pkw/qdHT29A((F[MyEx8m8Y]fq3AM  F>qN!cD<#Ge6\ C'X>/,rv1䩄K#Nӟ,551F5/C[Pێ a8,ǼuQ%ؐ^HĀ?$Ŷ"ǧˮ:.XdE>:_1ѩ' {,M\~\e9?]ȖoNgY5͠fCtѦC( H 6W2B|+t2u 0ؗΒ B:Wh~mmٗ=p!w5l+޶.BZb  ʅ%V%LMǪ`@9ȖScoin׬(L)ot^гipOQ#G8REY`-0C(i6Gn9Ճ/IDžH,M}vOI,k$fްN 죔0t0uO, !:{~W=5 gXQ`r~`@G|H<:r l>CIP&9Gv'LJ Agkj8A;oqk  QNP / 8ۄ֨\% 3$'4,9sjFRG136ッHYB4ձg7YSt>O*CW>JQB+7lCYvUZ/,̜x}镜XwL)U>7侾yg4 )\Xw:pV 79Tck<~%z2 NLR.V9Un17?? C*f6]Ͳż-ӈ-~bcf֞i"_ IU,}b~K0\v.JKZpaWQeWL˜%o%4*;k-{TtwHwhWɦyG>L9*|HBދM*<*ԏAOaTq)?eV7/6 ЭJAY!U؅Պӎ7GnO3~Zl@'(T7J ]6 t my[;!G}: R)@0h6c X ~{C22E[3f>pkEʫοE8VK:֤<\$`GL_f ~hiv_LcQ\gTBJLRs<Ad EOC1EC.kTtB0a6Sa'I?qenݥ_'i Tk-iDm°PqNBBwW`Y' .w0|hˠs\#m f㨨1Cm;%3 no\͞4ш^U?Cvdħk\ aWkSt@0C'D+f Z*B|}Aw&ԙzU<86Ut~+WDX|j@Gf?@,]E99K-t 78}kH'&Ɠ1G[΀b]wԑƶ{ܨiցat'ä%p/&'r[Vt 0(RR-wLhܣf3:Vv߽|#ϺK_5/`[:n3}ŪoEgꃄ-ZI~L Q}r\P%ш9Kà::у$(*"7||ɲz &=D'·1OXfPBMpa)>5*%Pas8;s\YȆV_l@ATI_=a$rͻyW⤇T1.j:Trn!2>+quEn 񂘞>y)$a>5{\k5V`8r w+2=]n"Qy=obU4=\ntܡ}n,a=<ƾWa¦xy]@Y o;$;9f1O&+=XV="6do2p7(f9dm Zzs!lySD+i-$䬍625 K{3#[՘Ǣ,$쐗^-~HO AvA3`Wl zN^[oSQoF>z\#25+ .>d@ƍ&k bm螎4~"89ߞ#]@?`^J ]zm&>[[["\2>CGC{4cj2/JD!ǩY[JtqWW(`lLuPPsjn}BD0hhbZ*|5Sև$d^a׸riO{ߛ o|P!߼H41(k3Q$@RYԻ×X"PaيF??٤6 'yB9j,P}jΗ6m]E1V`b0Ģf<;ۅ2U u&[MpE:U㷇%~dHŔ;:v{XFe"Hy>SITڋ-tPn@u=Ifb_U]TE jr=OD9Zֱty̧b9k۾~`HՈ/qpAݔtǑv}7@4_ 2҄uN0eGL`JǶ5A)?.ΒG+􀺂ɸ'[-؆Z|r/VT푡ąEIeM@<' hgq@{gdk[8p+.cn3tS_]zEYP"SLI *'v|dJ/ F9]- ݎ0.-d(=|茝]Ʀs*|-E,Y!K k~ 2 " L@RT::oEv`6G\F{$AQ#X;81.Yeͳ"ϥ~ u m9XPB`uzSUʽCaYn4KVZ4@ xo#yr=-BmױHwAQ=q k(]`S‚C.e;è1\Gs!Gbi` J Z`z\M@kQ_'~h'5*[smsJ>:P9hn;\k8 tpt^8#"D[uhn^5.'K|r_{NEdj_n;p+oK蕨WGEyeN ]F;/H?L3E1\C焜AF&1u ''Ԡ?€vfr5Cj"D?Ȕmk%nIa`S>qJJ7q?fʬ{SV=.V*+=mZPQEbA:O,3l,7=oOd'zxev~TE4زo?ٶ"=fEDe"ʑnzm~F[qe+F́_;[ڹ7.]ѝODu'ŋ B`g0 ]E=!>emX #&͐Ȯq D?OQ͏O'*p&?,>0L˿4e0ɢyg0oTlD?CL6Ri }i 2k2fTzS7qRD9J>RO]T}9EhHQ=,:% 3ǒ}Y?$ :3M'AsQcbG)Yl3.\]o܎1/N[ `Y;Ld;jcyzK>)-a{4 =xIJ*g]ջGjȈ @wb `G0qb3;-*Tϱx)scZ~v.p?zZ8MZ h&׌r=%g){)5z u.CgK  m㪤rӈjP fem]1P$: x 2"N@d89WM)Xi}.4  R;p/UK dF~݁Dc7|"=Ճ7:(|e(Ϧl-dnhRnY>(KZu [1iTa,W5!6&|aU|D"FA:'LLs]s[8.;K[΃.3% GUMfH,5ǡ9ӠaA7&=7x;ݞ' L#'ūu'.b4d5i ɝ6tM 2wڅmFRbbsF{jG04${e6,̯!xC_I蠍}>ڣs?ʕ2vY7q[hqOqQW:<8gI;{y6` e hb9"ߒJ=+_dubXx 8)K(pVcYY:жv]pLub6vU+Jq/#: ,`d{-[` ̇ШԈ5,*vjzPzA!uY+W;||u6ߗ6f`2G0d/峝H k1(N乶UfΩGT=  ,b90ޢ&xaŊBT C{y}S;[eC0,]n4nYZ?D$a:Ӷ\)*{Ҵm+Ё4cν0*n|X 5cƥYwQ2\!.\1Ȧߐ$7)U.XRW&Xs{LhaJAj -(ZAIExw˺( 3^9c{H 7"yOb tv,/?BX"R =nا{ZST-NwKư% 3񮈐Р|LV+i$L6"@-󔘢HUj a6֤K򽷎Po0oƳ"Ca{20+nPuU@& M= jt" jJVA(:W>w1Pb34x 3\/[c =gtQi|f8Y֬~?qgMQ t"n6\`&,u(IC@ n?\*2OTAn z> PArUV'"Tmr٣.Xp`: b䈐iiTt {u[iì'/M$_Z @<"c-g'4Kߢ}v03ָU@A;MW7=hz)Ӄy,TvK")a)tট0 +y8AUsÍ_PI m  VzxSbW,=7VS{S RLe%pSW9ޙB@8YrEJ/hÍ052`n&-kJ&{)K_Ax쾬hc#0Ujr eץZ Ivi2.٘O`+j<7Xq`y}$_? A{A&m#YY ݙQ[ʿ}l19bclRQt KY\|5 7Oej7p542J)mc &5_r= S(FG6o{LѝLLI .? js=TZŵAhHE'y i B^ָIׯ(u #GyfJ.*%(J) fv4^VV"[^wϓ{EOjz|$Uոjc("oo^tXpddG.?%-U2 i4ȫIa{9a)_Zs{q ꏐ&tڟVH3fwm|R|(A?ꊪ'P,-ST:A#6;i1@$d%d %׺U32@HFu #o7@]MEofV9z;}^R7\ .юO3}2:&>@)XQU k7dvA^Mj'urõL4XbCax-#Ojy/$/RY`5dOOX)#ȁ}2shkĊp7Ju<}(;df xnFRR~rkR HxN|:1yT޿ 92M Gh2bW'_F #P*k=Ӹ3T*9m()ԁ9 X]\Z$ J-ȀÕDtG0o'FĚ<.ݭeFk%P^sy/vPt?Il詝D%KF͖e5QNn!,67AdU&e{c4(ޱQVB͉(>A ̛na\2D_I,FyLuEeܞ;jm1 ]P3 2-vgӥdS -VOBMD#/꣢}x@Zζ]K!E|#)tuAh݊c#7 ѕn׏  -􄳐< #>knTfl=o)$҄a;Oj/|qb1-I(ퟖdn, H(Tl}vDen/$w y,:H6\;HpEIz1&B=KP`B,1~nՐ1)oo3^0ZxzvwQ<1`JZcD T?nek^b %S^7~_!?y+Ă.g=ڂ7_5>IaVpC:(X U?+rMv 6i{}a66l[멢ň ē% ܢ)}цMzx3">30P8m@#Q3neXr'YakD勚rAsk84D٫6h~ƅ'|+$VfFPɥy=OtmpkEX- ʭc;R:{-J#OR'sF5=%բa"E4L.t5Jd|z\*|<_Td)|$߽5vP2Ŋ_Rw oJ63}" iFpN^H_FvZ 1 p}t?L3=RVOnϤkᰐD;EL"`+=#;HU;(:C(U~)Eދ v"ҹ'OS!SȁTpWb$Xz7^.pt>LNä),ΆQCSQt{E@iĴYVzmGJv[u5Bn`2Q/iA]*(grf"C;&5e\D;%7S ![9Wj _qhH2]hX=haQfudM ?.bRd(WQ;?; n{N܍pyn.EN_m 1Km( 0"``|*Wp'"ʤqߒUp!G%k 00B (%g>ӥ%D~%L9/A"+f$G1wJ`R]oo+|0Vg0]oXɓ!t/"YOќ#$8[JٲJWQ:?F{j^ev;NI7ߎU5;U҉zf $5`HތC)?*YӢCq<ھGUғrLk̊IDkoi k$".Sb0 3lvU5 IQL ` 2w'&^8m3UμAҖ J̧ܳ͑=t)R3aq_\ x 2vh 4+~.,9B!B6Zx=q8eJŧJ=|y\ Dm6-6o#S1#)oDy,& ކƬŷSb ~J>F4NK+ֳ1OB=A^e.IqZOٶm ʷhR`Kה<8c;Ƨn#Db=.r>RO3p{Gc܍<16iVAKL a']gc @ =[=v]sg Z;/6DT̼-E%8ؤ,-nҼhpİ@C`ME>@2.Y28dТ!]+/܂&m@qN鋪:|)砻 'nDM2;2ķbNȹ(b?v% {dzP*S(Q&V6 QoĊ(J ͫG8kXR}7gI⥏0|0{8NrgP }[Jz1Z站sޭn>^Urd>Ǚ[9{s|CuI| 淎p֟P+H7d\JW0 , (Zkn:L` ^;`޲][\WBy _ϑf5*xO+;շs=OW%r mN>E@?=†_}R D؝i[bX1=~:X> T$Q mN&ӕ:Hh H/K8h_[Qx˅f>*$ \Szֆ`.rn7#kOДv6,̉C)J OZoC! fCp+ EMQщ q\&v0}GgҎ Y~ELj2x Ru  ,Z/gi?JV8Zmp'Z֪1D7NAK_ FaVCh 'FƚTX/=9Zj<[/c|NxJ02N7)TA*gAJC\5*+P;/+ܻ/ȡs]\4Yݙg8GlA': w.Q]0]j)K7+pWu$ٹ|93Z tL+@Du--cqh'RQX)>rR^X JK$Ms0/^ *dR#%3q36=B[Z2;n=N'$5~]6I13g?l}F>@ᠨ]R?$$z:=#N>!NƸ𴓋`؜SvIE{{Puo,~t[- vB% ::.OMhPf?ht|Kؠk< !`l@ jQ#:deQn稜>R7lVUn>˄9 e[W;uk Vz2:9&򝬁#y{g70-T}^jt+Ic2M"#b_]m8 OzyhdVQCLGm1dUH.!Sq>uэw fXÌV')܀NDC4BJcSz^8(=oL#{#5vZ~A֜Ճepv5MnR׮2/)c5W~Oً9B♴s|}F~d+"|>&!sC9[B,jᘞ 5ӃGSq[뮴kƽǦ,ښ632 ;Կȫ,xj*8v;jw=e3M^oӌ8pVGm\K掇wk߭j|QSLx&?H}T[;lϷz >*ޒT*H .V\\m0JtT$/V"SĻˇxL8 :AHFlCT ˷s$rqFک'fط,vu3&z!%Y$U()r,#ȥj7{%l\/nϏ5(,:pnJJЛرRV$2.NH3{5I 2K!%-#` +/.#E}RĽ;?V{ ȗ0Ăw 52zDb30Q$,No֓el(TMZ$@W,Xs'䂧 OBk-3\rxITlI;>& =*k|ƌCfaYo6FSF2{`(WmV;@K۳4pWx\LF\%Uvc ALtmoGHݹɅ!9v0Z{4XK'?dq'ʹc)[\y> Y=݄%)b)V|p=(j rWmhsUK7tfw.7+ۇ9OlVW7@Ls8KԄIzʳI[+!Id9$ŝrٙG`S]LC\${71>TFy%R&!Xb>I2 FI7@l-d>̣AqӃ'#^yMа5ܸ-gV/aT7}р07]H5zk "|A 9A'АzW۶礧MOwBHu8zBД=Y&#P_jdix8[ #0]:c3Pg$xoU[b*<rykQH{hx?~ ;:8B"$WT8V0|)NE-`پH=oAW6TN}ڠ1VîrG{9G#M8ɚ=OB/(> Deam^팥j>Q#THi.bhlsb_Ԣ(`=H8"{դȸIbJȢLV V^X䦋.}&WK"e$$ɗO<ٖL.TJb(XwtQݒ7~WYbM Op4v2MA߻U^J<(xzLbhP_AJ3x@A~ ֤NRRǶhV:U;RVnOz9BBX?\|#? NcxT1ޥNEv>Κ! bAḑB)4#PD6|\[  xOL'evE̙5Z6RU@}n$&sz& HHnCU%xEwbjؤ١3oL Q RKj438!goEWY>O:uPy ,gMTA=ڴ{n;yFoEmmg4i>H( GgK7c's|-'&!1i]%Dӯ[|ބBL*0z,㏪L|<2DK7CT\gn=W3*M|K ZJ*Cd=vF_h؞3*R5fb{(foQʹ@S. $֟rDY'!nyA:!d1ON>|d%DH~ Wj޽ &\hkۦYrRZDAO~`eZ!ó~ X:Z q)\~rir墏"&R]>P (^'ߢS57c=ۚSR5xFDCF%(_ڽ7ڲ^E3͌+ͽ@Ⱦ>J`ϧ<1fWb}:^Z7L!>kby^.)cdl,2.|vJߡ'ph˿)|{Ssz,Lzu: Fim`ԅl ׈'Զmol?CT¯x/Fn1ۣXK!|{ z)Üj`ZPZ[[8\*gr۹CWAy|3ox :PfYwZ/_ 8l7ڼF<]GF x/kpG?aYwC0tzV(GR%L}o\t-R 8{6Еɧ8P@FF˵/{{_EPZ/yfҾAW FA?/EwKA Ӝ[[(ф|"۩W??'}%JJ)[X[ukA^"/c( kb΂_h+Pf1ac'.$ƧfjdA[%(x$+oc_G{2ҧAb~>1IBj'm%ONR|fm]/dYy.L6~C^d-Tabs+}~yIok+.}wGnj-,Z },Fx-aIb*nq>).Pv\uA(VxpBیB:oIRxD(/ \Nu*52 ?F{-vm֏8AgRP:ixzPiON p`s $ZWy q Ƶ@N?A}VCj]Zlf8ٵˡ*:QMo'bF\v\ Xޜ֢u'Y4h եW("R-c9I0_r>]H˱Z hn{WnhqĸA4Ko YI9CD#(1E`x9 Q5ngPL ȐacgFE8uZֵ${;;ܦڸEjK_A]*c.? -oa\CzUe:i;v,JZ2<+]k+:d:ޓGhŭwgْTӍ7pXI2Q34 8;CgjqW "ȇx|a"B[n#؋IK*٥o 'f1\_*Mߴz~Ko$8yI!B?3~]=CUJtO K|B&:o7Um6li52{e% (ޖYeoE7)QlhDrFO:Sw-R$I݆l5XNdO8XO(}]+;θyNm|Su"\HgHZO]Sx2^ObڮyH`pJ~ܓ7*vu\m\ D1;6"I+y||w _szk u 6H2uD3H~f4 УP +J~=jTiMy)|rK>@NO^k?rST=~Ub)\}{{|t9M3ޙ7T%əej'\ kx ֵ:VG245֬)g|FnHFK;E<;YA`Y\鰭5^.׻mS#ڹEFE>l-iCC7|.PfQMޛN>Q3-!6U!(p:jpݪUfDb}LVDJPx\'UdeOFBcR}U6Sjd/ wg . t̐-G9m~-JlC:i.i~VYa(hꕚwh=^f{ڭ^,<BL>l}1[Dfݗij j-KaЧX>5/A#\<'w}E6R5G&SH?yQ$} f*F'mvR6~u.ԡmpbow\4К i95S%o5#nqI4<|ViG80l85̪[a01v|70rz5j H{yS8 C71i5<`\D50Gg5iqc$N-h57;zm QIGYYlѵ8,:}]&2HI@V6|t, ,u=,7<NxƤ>& U/ʯkl+&Ʉ8 ucigpql> s֣sTn Nz>gz}=֑ O"LZN&A"kwߖAĎq> #% UK5KkhfoBLWͮgR@Yϝœ <7gy4@(:K'BAz1X]nCz~Qs+9T4q\¾zʰPЋ)H@'}EIOYCm"+Br"/"!`hd|$ށG .TH$t#< L0.x$ѧog䂋AG%OzR :bW,eܪkJTU%nOKk/CڕV`H̓ W`;߈T%YF~w* |BYїS |/abFX!Cҷ1eSmnYz%h7*#&ca1_*i&\Dܗrϝ"ҭo]©l>R7oM70IMJ!>(mOn1y :BB'jxPLTl3gзmuOA/Kqx = %`vP}Պ:0plzi^1LvX>Z;͒Tʼbls"0Xz?]O#hWۑ|'|*mHR5 1s5sL5D8"Jɿ~ų^SO#ݒl@w ] ~i˳@`k ho~C3{$E&8i Xcу"R}*`_w՞j10.0<]xDl&=B!AbG ڋ^3Ul+BAËXsFßWG|]<^fV:?@lGS +V <8u%OבTz]ۏ7j#6fWvUr%itk֍@XF jﴸb~P }is hj@d \[V|1r)dMxY'F X A(56 Kzql j0131013201330134013501360137013801390140014101420143014401450146014701480149015001510152015301540155015601570158015901600161016201630164016501660167016801690170017101720173017401750176017701780179018001810182018301840185018601870188018901900191019201930194019501960197019800000199035600050006000700080009001000110012001300140015001600170018001900200021002200230024002500260027002800290030003100320033003400350036003700380039004000410042004300440045004600470048004900500051005200530054005500560057005800590060006100620063006400650066006700680069007000710072007300740075007600770078007900800081008200830084008500860087008800890090009100920093009400950096009700980099010001010102010301040105010601070108010901100111011201130114011501160117011801190120012101220123012401250126012701280129013000010200#! /bin/sh # Grab the core defs source core.sh # Debgging fns source debug.sh export BLOCK_RE='([0-9][0-9][0-9][0-9])(.*)' # block_get block : Print out the contents of a certian block function block_get { local block=$1 check_block_index $block dd if=$OSFS bs=512 count=1 skip=$block 2>/dev/null } # block_set block data : Set the given block to the given data string function block_set { local block=$1 data=$2 check_block_index $block #echo "Setting block $block" # Quasi-mental note: The "s around $data are needed to preserve newlines echo -ne "$data" | dd of=$OSFS bs=512 count=1 seek=$block conv=notrunc,sync 2>/dev/null } 0202000002030135#! /bin/bash # Grab the core defs source core.sh BMAX=2048 BSIZE=512 BROOT=$(( (BMAX%BSIZE==0)?(BMAX/BSIZE):((BMAX/BSIZE)+1) )) function bt_find_free { local block code for block in `seq $BMAX` do code=`dd if=$OSFS bs=1 count=1 skip=$block 2>/dev/null` if [ "$code" = "-" ] then break fi done if [ $block -eq $BMAX ] then die "No blocks free" fi echo -n $block } function bt_mark { local block=$1 code # Debugging checks if [ -n "$DEBUG" ] then # Check if the block number is too high if [ $block -ge $BMAX ] then die "Block number $block too high" fi # Check if the block is already allocated code=`dd if=$OSFS bs=1 count=1 skip=$block 2>/dev/null` if [ "$code" = "*" ] then die "Trying to mark block ${block}, but it is already marked" fi fi echo -n "*" | dd of=$OSFS bs=1 count=1 seek=$block conv=notrunc 2>/dev/null } function bt_unmark { local block=$1 code # Debugging checks if [ -n "$DEBUG" ] then # Check if the block number is too high if [ $block -ge $BMAX ] then die "Block number $block too high" fi # Check if the block is already allocated code=`dd if=$OSFS bs=1 count=1 skip=$block 2>/dev/null` if [ "$code" = "-" ] then die "Trying to unmark block ${block}, but it is already unmarked" fi fi echo -n "-" | dd of=$OSFS bs=1 count=1 seek=$block conv=notrunc 2>/dev/null } function bt_alloc { local block block=`bt_find_free` check_last bt_mark $block printf "%04d" $block } function bt_free_space { echo -n $(( $(dd if=$OSFS bs=1 count=$BMAX cbs=1 conv=unblock 2>/dev/null | grep -ac '-') * 512 )) } 020502060207000002080082#! /bin/bash # Grab the core defs source core.sh # Grab the block-table functions source bt.sh source block.sh if [ "$1" = "-g" ] then block_get $2 else read data block_set $2 $data fi 000002100192#! /bin/bash # The filesystem file name OSFS="opsysfs" # A basic error reporting fn function die { echo $* 1>&2 exit 1 } # Check for errors in the last call function check_last { local code=$? if [ $code -ne 0 ] then exit $code fi } function blah { echo "Blah" 1>&2 } trap check_last ERR trap check_last RETURN set -E 000002120333#! /bin/bash source core.sh # Make a new blank file of the correct size function make_blank { dd if=/dev/zero of=$OSFS bs=512 count=2048 2>/dev/null } # Add a new block table function make_new_bt { ( for i in `seq 5` do echo -n '*' done for i in `seq 2043` do echo -n '-' done ) | dd of=$OSFS bs=1 count=2048 conv=notrunc 2>/dev/null } 000002140358#! /bin/bash # Grab the core defs source core.sh # Grab the number of blocks source bt.sh # check_block_index(block) : If debugging, check the block for validity function check_block_index { local block=$1 if [ -n "$DEBUG" ] then if [ $block -ge $BMAX -o $block -lt 4 ] then die "Block $block out of range" fi fi } 000002160332#! /usr/bin/perl $arg = shift; $arg =~ s/\n/\\n/g; print "$arg\n" 000002180067#! /bin/bash # Grab core defs source core.sh # Block access routines source block.sh # String routines source string.sh # dir_find_file filename [dirblock] : Find the inode for a give file name function dir_find_file { local file=$1 dirblock=$2 block if [ -z "$dirblock" ] then dirblock=$BROOT fi block=`block_get $dirblock | grep -aE "^[[:digit:]]{4}$file\$" | cut -b1-4` # If we didnt see the filename in this dir, look for a continuation if [ -z "$block" ] then block=`block_get $dirblock | grep -aE '^0001[[:digit:]]{4}$' | cut -b 5-8` if [ -z "$block" ] then die "File $file not found" else dir_find_file $file $block check_last fi else echo -n "$block" fi } # dir_add_file filename block [dirblock] : Add the given file to the given dirblock (Note: This doesn't allocate space for the file, do that yourself) function dir_add_file { local file=$1 block=$2 dirblock=$3 byteoff if [ -z "$dirblock" ] then dirblock=$BROOT fi #echo "Adding to block $dirblock" # Look for an end of dir marker, if you dont see it, then recurse if [ -z `block_get $dirblock | grep -aE '^0000'` ] then #echo "Block $dirblock is not the end, recursing" dir_add_file $file $block `block_get $dirblock | grep -aE '^0001[[:digit:]]{4}' | cut -b 5-8` else # Get the byte offset for the end marker byteoff=`block_get $dirblock | grep -abE '^0000' | cut -d: -f1` # current number of bytes used + 4 byte block num + string + newline + 9 bytes reservered for link marker if [ $(( byteoff + 4 + `strlen $file` + 1 + 9 )) -gt $BSIZE ] then #echo "Block is full" # Request a new block local newblock=`bt_alloc` #echo "Got block $newblock" # Use this regex to extract all data before the end marker #[[ `block_get $dirblock` =~ '^(.*)0000$' ]] # Write the new continuation marker #block_set $dirblock "`echo "${BASH_REMATCH[1]}0001$newblock" | tr ' ' "\n"`" local blockdata=`block_get $dirblock` #echo "Current block: `./decodestr.pl "${blockdata}"`" #echo "Writting contin marker: `./decodestr.pl "${blockdata/0000/0001$newblock}"`" block_set $dirblock "${blockdata/0000/0001$newblock}" # Initialize the new block block_set $newblock "0000\n" # Now add the file to the new dirblock dirblock=$newblock fi #[[ `block_get $dirblock` =~ '^(.*)0000$' ]] #block_set $dirblock "`echo -e "${BASH_REMATCH[1]}$block$file\n0000" | tr ' ' "\n"`" #echo "Writting entry to block $dirblock" local blockdata=`block_get $dirblock` #echo "Data: `./decodestr.pl "${blockdata}"`" #echo "Writting data: `./decodestr.pl "${blockdata/0000/$block$file\n0000}"`" block_set $dirblock "${blockdata/0000/$block$file\n0000}" fi } # dir_remove_file file [dirblock] : Remove the given filename from the directory function dir_remove_file { local file=$1 dirblock=$2 block if [ -z "$dirblock" ] then dirblock=$BROOT fi block=`block_get $dirblock | grep -aE "^[[:digit:]]{4}$file\$" | cut -b1-4` # If we didnt see the filename in this dir, look for a continuation if [ -z "$block" ] then block=`block_get $dirblock | grep -aE '^0001[[:digit:]]{4}$' | cut -b 5-8` if [ -z "$block" ] then die "File $file not found" else dir_remove_file $file $block check_last fi else block_set $dirblock `block_get $dirblock | grep -aEv "^[[:digit:]]{4}$file\$"` fi } # dir_ls [dirblock] : Walk the directory and output the file name and size for each entry function dir_ls { local file=$1 dirblock=$2 block name size oldifs if [ -z "$dirblock" ] then dirblock=$BROOT fi #oldifs=$IFS #IFS=`echo` # Set IFS to a single newline for line in `block_get $dirblock` do #IFS=$oldifs block=${line:0:4} name=${line:4} if [ "$block" = "0000" ] then break # End marker means I'm outta here else if [ "$block" = "0001" ] then dir_ls $name # Recurse else size=`file_size $block` echo "$name $size" fi fi #IFS=`echo` done #IFS=$oldifs } 0220022102220223022402250226000002270406#! /bin/bash # Grab the core defs source core.sh # Block-table routines source bt.sh # Block routines source block.sh # Directory routines source dirs.sh function file_test { dd if=$OSFS bs=512 count=1 cbs=4 skip=$1 conv=notrunc,unblock } # file_size block : Calculate the size of the file in a given file-inode function file_size { local block=$1 size=0 data end # Extract the block data to a \n seperated string data=`block_get $block | dd cbs=4 conv=notrunc,unblock 2>/dev/null` # Iterate over all the block numbers end="" for i in $data do # Do we see an end marker if [ $i = "0000" ] then end="yes" # Using "yes" as a placeholder continue # Jump to the next iteration of the loop fi # Do we see a continuance marker if [ $i = "0001" ] then end="contin" # Note that we are entering continuance mode continue fi # Are we in a special mode if [ -n "$end" ] then if [ "$end" = "yes" ] # End mode, current block is the last data block then end="$i" # Set $end to the last block, not important for this fn continue else if [ "$end" = "contin" ] # Contin mode, current block is next file inode then size=$(( $size + 10#$(file_size $i))) # Recurse break # Not supposed to be any more info, bail out else # End mode, 2nd block size=$(( $size + 10#$i )) break # This is supposed to be the last block, so we are outta here fi fi fi size=$(( $size + $BSIZE )) # This must be a normal, full block done echo -n "$size" } # file_add filename : Add the given file, and print the file-inode function file_add { local file=$1 size datablocks fileblock block firstblock k="0" size=`stat -c '%s' $file` # Grab the file size in bytes if [ "$size" -gt `bt_free_space` ] then die "Not enough space in filesystem" fi #echo "size is $size" while [ "$size" -ge "$BSIZE" ] do #echo "datablocks is :$datablocks" block=`bt_alloc` # Get a new block check_last # Copy the next block of BSIZE bytes from the file to the FS dd if=$file of=$OSFS bs=$BSIZE count=1 skip=$k seek=$block conv=notrunc 2>/dev/null datablocks="$datablocks$block\n" let k++ || true # "|| true" added because let has a funky return value, which was trigging my ERR trap let size-=BSIZE || true # Ditto done block=`bt_alloc` # Get a new block check_last dd if=$file of=$OSFS bs=$BSIZE count=1 skip=$k seek=$block conv=notrunc 2>/dev/null datablocks="${datablocks}0000\n$block\n$(printf %04d $size)\n" #echo -ne "$datablocks" #firstblock=`bt_alloc` # This will be the block for the first file-inode #check_last #for code in `echo -e "$datablocks" | tac ` #do # if [ "$(#fileblock)" -gt $(( BSIZE - 12 )) ] declare -a fileblocks fileblocks=( $(echo -e "$datablocks" | tr -d '\n' | dd bs=1 cbs=$(( BSIZE - 8 )) conv=unblock 2>/dev/null) ) # Normalize the inode data (i.e. make sure the end marker didn't get split) # NOTE: Here be dragons if [ ${#fileblocks[*]} -gt 1 ] then if [ ${fileblocks[$((${#fileblocks[*]}-2))]:$((BSIZE-12)):4} = "0000" ] then fileblocks[$((${#fileblocks[*]}-2))]=${fileblocks[$((${#fileblocks[*]}-2]%0000} fileblocks[$((${#fileblocks[*]}-1))]="0000${fileblocks[$((${#fileblocks[*]}-1]}" else if [ ${fileblocks[$((${#fileblocks[*]}-2))]:$((BSIZE-16)):4} = "0000" ] then local temp=${fileblocks[$((${#fileblocks[*]}-2))]:$((BSIZE-12)):4} fileblocks[$((${#fileblocks[*]}-2))]=${fileblocks[$((${#fileblocks[*]}-2]%0000$temp} fileblocks[$((${#fileblocks[*]}-1))]="0000$temp${fileblocks[$((${#fileblocks[*]}-1]}" fi fi fi # Write each block to disk for i in `seq $((${#fileblocks[*]}-1)) -1 0` do block=`bt_alloc` check_last block_set $block ${fileblocks[$i]} # Dont try to set a contin marker for the first block if [ "$i" -gt 0 ] then fileblocks[$((i-1))]="${fileblocks[$((i-1))]}0001$block" fi done # Add the file to the directory dir_add_file $file $block } # file_cat block : Output the file contained in the given inode function file_cat { local block=$1 data end # Extract the block data to a \n seperated string data=`block_get $block | dd cbs=4 conv=notrunc,unblock 2>/dev/null` # Iterate over all the block numbers end="" for i in $data do # Do we see an end marker if [ $i = "0000" ] then end="yes" # Using "yes" as a placeholder continue # Jump to the next iteration of the loop fi # Do we see a continuance marker if [ $i = "0001" ] then end="contin" # Note that we are entering continuance mode continue fi # Are we in a special mode if [ -n "$end" ] then if [ "$end" = "yes" ] # End mode, current block is the last data block then end="$i" # Set $end to the last block continue else if [ "$end" = "contin" ] # Contin mode, current block is next file inode then file_cat $i # Recurse break # Not supposed to be any more info, bail out else # End mode, 2nd block block_get $end | dd bs=1 count=$i 2>/dev/null break # This is supposed to be the last block, so we are outta here fi fi fi block_get $i # This must be a normal, full block done echo -n "$size" } # file_free block : Remove the file at the given inode function file_free { local block=$1 data end # Extract the block data to a \n seperated string data=`block_get $block | dd cbs=4 conv=notrunc,unblock 2>/dev/null` # Iterate over all the block numbers end="" for i in $data do # Do we see an end marker if [ $i = "0000" ] then end="yes" # Using "yes" as a placeholder continue # Jump to the next iteration of the loop fi # Do we see a continuance marker if [ $i = "0001" ] then end="contin" # Note that we are entering continuance mode continue fi # Are we in a special mode if [ -n "$end" ] then if [ "$end" = "yes" ] # End mode, current block is the last data block then end="$i" # Set $end to the last block continue else if [ "$end" = "contin" ] # Contin mode, current block is next file inode then file_free $i # Recurse bt_unmark $block break # Not supposed to be any more info, bail out else # End mode, 2nd block bt_unmark $end bt_unmark $block break # This is supposed to be the last block, so we are outta here fi fi fi bt_unmark $i # This must be a normal, full block done echo -n "$size" } 022902300231023202330234023502360237023802390240000002410260#! /bin/bash # Grab core defs source core.sh # Directory routines source dirs.sh # File routines source file.sh if [ "$#" -eq 0 ] then die "Usage: ${0##*/} filename" fi block=`dir_find_file $1` check_last file_cat $block 000002430227#! /bin/bash source core.sh source create.sh source block.sh make_blank make_new_bt block_set 4 "0000" &>/dev/null 000002450117#! /bin/bash # Grab the core defs source core.sh # File routines source file.sh if [ "$#" -eq 0 ] then die "Usage: ${0##*/} filename" fi file=$1 if [ -f $file ] then file_add $file else die "Invalid file specified" fi 000002470227#! /bin/bash # Grab the core defs source core.sh source file.sh # Directory routines source dirs.sh dir_ls 000002490111#! /bin/bash # Grab the core defs source core.sh # Find the largest width to evenly display block table WIDTH=`tput cols` while [ $((2048 % WIDTH)) -ne 0 ] do let $(( WIDTH-- )) done # Display the first 2048 bytes of the FS, which happens to already be in the right format dd if=$OSFS bs=1 count=2048 cbs=$WIDTH conv=unblock 2>/dev/null 000002510341#! /bin/bash # Grab the core defs source core.sh # Directory routines source dirs.sh # File routines source file.sh if [ "$#" -eq 0 ] then die "Usage: ${0##*/} filename" fi file=$1 block=`dir_find_file $file` check_last # Check the the file exists file_free $block # Free the file data dir_remove_file $file 000002530317#! /bin/bash function repstr { 000002550034test2 000002570006#! /bin/bash # Get core defs source core.sh # strlen string : Calculate the length of a string function strlen { local str=$1 echo -ne $str | wc -c } 000002590155#!/bin/bash source dirs.sh if [ "$1" = "-f" ] then dir_find_file $2 echo else dir_add_file $2 0123 fi 000002610109#! /bin/bash source core.sh source block.sh ./fscreate #echo -ne "0005foo\n0006bar\n0000\n" | dd of=$OSFS bs=512 count=1 seek=4 conv=notrunc,sync 2>/dev/null block_set 4 "0008foo\n0009bar\n00010005\n" block_set 5 "0010baz\n0011boo\n0000\n" bt_mark 4 bt_mark 5 000002630264