From a7d15c38e84daefc8a4fd080741b22a8b4a37462 Mon Sep 17 00:00:00 2001 From: OlivierDehaene <23298448+OlivierDehaene@users.noreply.github.com> Date: Fri, 3 Feb 2023 12:03:50 +0100 Subject: [PATCH] refactor doc --- Dockerfile | 10 +- Makefile | 8 +- README.md | 105 +++++++++++++++----- aml/deployment.yaml | 4 +- assets/architecture.jpg | Bin 135442 -> 342347 bytes docs/index.html | 2 +- launcher/src/main.rs | 14 +-- launcher/tests/integration_tests.rs | 12 +-- server/text_generation/cli.py | 8 +- server/text_generation/models/__init__.py | 26 ++--- server/text_generation/models/bloom.py | 18 ++-- server/text_generation/models/causal_lm.py | 6 +- server/text_generation/models/galactica.py | 18 ++-- server/text_generation/models/gpt_neox.py | 12 +-- server/text_generation/models/santacoder.py | 6 +- server/text_generation/models/seq2seq_lm.py | 6 +- server/text_generation/server.py | 8 +- server/text_generation/utils.py | 24 ++--- 18 files changed, 166 insertions(+), 121 deletions(-) diff --git a/Dockerfile b/Dockerfile index 99fe6dde..93846d77 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,21 +26,18 @@ FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 ENV LANG=C.UTF-8 \ LC_ALL=C.UTF-8 \ DEBIAN_FRONTEND=noninteractive \ - MODEL_BASE_PATH=/data \ + HUGGINGFACE_HUB_CACHE=/data \ MODEL_ID=bigscience/bloom-560m \ QUANTIZE=false \ - NUM_GPUS=1 \ + NUM_SHARD=1 \ SAFETENSORS_FAST_GPU=1 \ PORT=80 \ - CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \ NCCL_ASYNC_ERROR_HANDLING=1 \ CUDA_HOME=/usr/local/cuda \ LD_LIBRARY_PATH="/opt/miniconda/envs/text-generation/lib:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH" \ CONDA_DEFAULT_ENV=text-generation \ PATH=$PATH:/opt/miniconda/envs/text-generation/bin:/opt/miniconda/bin:/usr/local/cuda/bin -SHELL ["/bin/bash", "-c"] - RUN apt-get update && apt-get install -y unzip curl libssl-dev && rm -rf /var/lib/apt/lists/* RUN cd ~ && \ @@ -71,4 +68,5 @@ COPY --from=router-builder /usr/local/cargo/bin/text-generation-router /usr/loca # Install launcher COPY --from=launcher-builder /usr/local/cargo/bin/text-generation-launcher /usr/local/bin/text-generation-launcher -CMD HUGGINGFACE_HUB_CACHE=$MODEL_BASE_PATH text-generation-launcher --num-shard $NUM_GPUS --model-name $MODEL_ID --json-output \ No newline at end of file +ENTRYPOINT ["text-generation-launcher"] +CMD ["--json-output"] \ No newline at end of file diff --git a/Makefile b/Makefile index d427ff87..39017944 100644 --- a/Makefile +++ b/Makefile @@ -16,16 +16,16 @@ router-dev: cd router && cargo run run-bloom-560m: - text-generation-launcher --model-name bigscience/bloom-560m --num-shard 2 + text-generation-launcher --model-id bigscience/bloom-560m --num-shard 2 run-bloom-560m-quantize: - text-generation-launcher --model-name bigscience/bloom-560m --num-shard 2 --quantize + text-generation-launcher --model-id bigscience/bloom-560m --num-shard 2 --quantize download-bloom: text-generation-server download-weights bigscience/bloom run-bloom: - text-generation-launcher --model-name bigscience/bloom --num-shard 8 + text-generation-launcher --model-id bigscience/bloom --num-shard 8 run-bloom-quantize: - text-generation-launcher --model-name bigscience/bloom --num-shard 8 --quantize \ No newline at end of file + text-generation-launcher --model-id bigscience/bloom --num-shard 8 --quantize \ No newline at end of file diff --git a/README.md b/README.md index d092781a..74d7a988 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,42 @@ +
Nu^O2? z& mrU`<^Wx+yqkb^*TP$i~ZZr&u`e&v-ZznbI1o0D42Z&+>I zc2P`k{Vc96hgbKKRLg$087aVDVwpzJXvURjH>W}-O {KRYyYV{Q5Lla`LouU_@fwj`~esnpa4iV%||BmLb6 T)>b5xg zgXgEXmGYSG=~=l*?%|^k)NgSu=c&Up+=A4Yh|=IR2dBXZ5|OCmj `pErz76E00uD7I%24JiRux4{}l(dVhoX{|vdXHi% zp!QqeoqQ5_I!8UU-3lip(A&$BnTz=`4Q4g7i5d##?cV&SQJ4i5ZOWS!b 6EVH{a=l4u|aeYz^1LZBVLsVW$>$q(W$n8!Bl-ALj_|3L{ z-~GL2&0Y2MVS5G02Ry}4!OnVH+mN2u3HrYx;Bmb4@USV(eS^DV|JIo z+)*LrI=$ZtinE37*T#}dzN7ONS*CmC% +;)ue)ImGk|4-LEL7DBS3vfdqr2AM;Es?caiVz zt|obX)P9(4S?^}!T5mQrb!}9TU**JHqO&mYSYYBH^zI +pT2Z>K$W19h;8q-NDDz5|>sRfmm6q3trtf!^qPhA`rPjp|{ zeQ`|qU=+tEKTDKpWPGHnWeL-66v&f>K1a#;3SB3MPN*7MIS6LkWId>Q6kgxhd;%;0 z$ltf0^iBMr4x1^+s>t|O&ph^L_S=McZRju@Bqn(7EmU%e7e)IMu&rE9Q{>`=?z@ zzR42(=k5SM2FnE!j-)}5QKglT=jyNuI7jVe>M8P2wq`z6f!OjkKQvPJWaf3gRlL}0 zJLG}Rw{3w z3H{|KT_1emH;|KkF?N*oT5HFl zgMO_lp6WvQqSob}_o()?{r%NE*}jz&tMdL*g#khR{3oI937OFf9C--lYpDoFU=t@y zo^HT#S4(^(Pq&OTUA7F*R(CzWn)7{s1=vt2@qvzsA^QV$AYL8z1}%u5$cOW)Xy*M| zz%a|1OLIDKv?xDa8hupVZ#x${vJ;}h06d+hDJ_92V8rW!ADwO>Xii0WHVck8cvNB( zjR-lPyyN{(ql-_2F?3N~H`^e($clO-Uyodh{Yh0Iw`c$KecI$75hk}{-0{{~I``p= z;8)-6A2|o+dP*w7j-UO+w5 vJA)q;Kv9h@{?xRdZneWtXotM|HJXy@k zwtF`h2+ai>n_=)}iji;!Aq=0d`P4%PC#?MfYsN#85c-&beN%RYMeA#{G-lUP^)zHT z8Q2*j&C;^H+=j7}%xcF8Z;RXxFI|3p8TBT~$geOj^1EE*TcN;fqeCIDPD6shfuiU= z7*V*x@u{vuNd3!a$!M+hbIv1eb#=YtY8EXkb1x!KX~AdmHtN%%cWEEsj(CtoEZPpv z7*Nr{<~dcyf{kaq*O`--KPxI OcFT_^nioRgq8U;(7Ywx!W6^v0N&B-ME=m}5>HXT z fh8DJjmvks6(zb3FWKbYM=>hi=tH8O7#6>u`S$Ibux%h*xt1SYe+wl( z;!u08pMKWN-anzaEHSHbkngsEtE)U)!Y#jOfvJ-Qt7GgVz_C~AqRNVY46G)}BEUvX z+^muFl6CI;@JB8to~eOyTGyW@Nzn%Y)Mxq+25=DRPBfqJ306Bn)#&*oS7T>cq8P&x z>lM~u@dC_gH~X~k5Wi0Q&IYQg{Rh|l7bwX7A*VpOXoYAyPUy(ZNtU$`m#JVCgB;g> z71bwXi=-=l!6_vk&kCy`g 3k07U|+>sR3BY*UfcnD5Q;ovW}| zelV?WegE+pqv(qlBvxMnv@`$B@%u+otB^_js5zZOKAXx@TLVf>{3WG4Te?F+4RJ}^ ziT-k_3cRqTT#-Iy!)foSqo*M=U@=~y^a?lS?jn(TpS(6LNt3ufc=55cmyBIM_PB)P zZ}rDtnzYBpO4ZLA9d*A~>TZ;q?PcrnA+dD?eE@zRI_xt!P#Hru?I9;`xDHhlk6>Kv zz+$Rv``HE_vVNTj|9HMk)-zu9a^D2BE@FRm3M{A=QjS<{oottfWqV;tG2RH-RRmbm z1E0Xs4ndhgK!<}}4O-?&@v9BX@JVedFDM1NGJ&B=tiZ`*qP+n>EkdcF{yPY_siOj7 z >TVuZ3r5LKLCK>rEUiO|E@g3tsEm`<5~@>F-*+8aj5qH};$|1q%t?qL#!>Kfyq zwtT*kegs`_wJR Mlkd&>-fG#~p?kJv&no@{k;oR6Ls3L^`F|BNA`4BN ziSR;`wOv5$T+0xE7jS$Ux~*pSivW#)6Rv~IhJ4V}#^mNm%(GHcmQ23h(t&U^Y2tMv zWLR8XRrxldxf9Npb2iEqndOj2AHop~V))HlRhH0`-2V@A-x=0qxMdrpi-3Ui5)=?o zx*$@6q7)HPkzS(GrAY?~2_31S2nZ^mfJlvW5F~U|dY4W>iqwP>0x90l)8?KtbMD-E zo;l^0Kh%8fec!$J+H0+??L{MGJF}LR;m4H3Hw8QOgT}k=%^HLH=z3T2p@FTK6mn!> zG6SDW2qfMmh)~#(^tW6ORHZ65_{2Iw%YBYs3Y^eZ>iRAw3ZesHOL
lM>x)pzQz{po+;~SRLfqTvQdVDb>`L_3pwwtoQ~s?Di`}HYJb-z zw)L;mSW?M8tOPk6TbQW@T|us+d$!e|@aEhqS$Wo+yo6xb_)u055Y^>H=I8@bjl-UY zl(a*$+Z!_7GBYM|yPtDr4%9C^mUuw0LuP24vw0#*ID`@v``Uy@&rer;Kjp422YtR; zQ+R5G?d$o^N3NuSHyvM#hpX26pICmr^YF%mk~AyL !V&^ITvR+=ZS$rPh zFw@dxU@FrFF=Uqap&L3|&iW+`#UD$d<<%d84A|-p6+xmTchuC0ssY_bOwv{AwP|c> zC3TtS)%{T5OwN6R5KV7|2L5cZ%Yf;j6ojKP+tTD&kJbcC1nbxeKjXB0GjmktGy?Uh z9TaS=!a9nyAkLs7 i7D5)6rg&aGBoywFRf4@d>!24~QD{kY((E{!vC5p|HJK zApUFF#+BNK%+q#=mq>eooEB3$C56`IbwY8h1`68feKD Na<6(P z6wU481@amEZlG@pIL?>B5ieJ-&Wu}qFHR_*7TcXZQ2SILn>OFv|E#I%bS`ra9Y89d z%tuUYLXS_E&(x9eNCE(W6o}k{bRdg0#!zcZ8~^wm{^Y0kMTJgT_H#8QbDfU1k7zPX zO*v%EFp+1f8aW1OX;Rk!8D6oo8o*(p6(m #^Bu1y z0S=Q(f_snU$ckTd`vktqT 8D^*v-E9=+=$1mx=# zCl7yt?x+NV;Jtv-0rFn~%YP!JP~){IjJ%5jlN)yl`hghei8a4t!;a5tnN9aSM9n=8 zE@Xxzu1olpyHQ;X<6PtdUzNI${*V>zM7_sNVe+62cbaE#x2r#gS1ofp8&`GXtAm|K zOQ{xxRuh~FKY=@phjSC!^>K&oKzTd6mMuKw$jxOs-b>x}T{w*4;@Y=cm9iJsdrMDN z&`=-Kkdt7}xV>%!jZc{)J_*YoVB3jns5^I4w_vm^!t>>hSgnnlm{&iFiS}%s10&z3 zcOgN>e|*zmd7!PR4HrVRA&3_VSpiZVb o_K zSBKQ#H&mW3c1}O;`y>=vmM^D=^pdtEaeN=7FGIANQ$&C&1%h>KN3%$|U$G+8nG$cT zL1Kr80MZkFO5Y1I3kji_$LgV@A=pIH=?VBbtLcaa9Q>ngB<^ra>P%NO 715OrN8lY5f823V|p>JY=|_FcUJ0bnm^>Q4^)Vu@>9)=A_r{q~b0d z(%WkU?n6a9i=A&xhq5$-16*1x{Fu?v)g{()JP2?q`&--XTPeYPAh-m4EQhU0i+BS* z%D11Ms@Q8#ifB{95D~I3hv$@=Ue+E5A~Ow%_iI4#CU`%jDmn!12tHvRVB2 P1PvcSi9IaQJVGeJL+Sn?K8Z5~vB{@ZOQwE3*lmE-I;e(`K?=wG>= z xqv>8ggf9cgq5R#e@YoI}XM{9!rYA4rw1(@Kat0ye5 zkfweU1n;8^4tGN~cX0AfcBYAjv>TG~g=a%6UW74&;Ai0j5C$2FD#;c*&_?97;5l$< znwycnO#AwYUG}wXC5Exu@Yct9pFwb30Bef|E5RP)0;VN!XjTvH2dl^laE*Vh_F4XZ z;O}0#sW10c6u`rjC?^exmkGArXvP}D_+u_4ZCxBmjD2=yrk%$G{gFnpNCF(tRoH8y zEG%*XQxC!-38KhO%dN}Z6bXWIpjWrS_$H)wGtXgB^$Rb%LEgCTYxZDa3lLfF53mJc z72ge1)4@(T)pP|)9Ujro-V{bRx#Nmw#oE~Hi`{rkUgSy% %#bV1*{w3U(T}folG;>+?4WE8*BS)DqY3^U7T`FaOJEMbTcdWgy6g^3Lv>^AQ(Pa%si^xGsP}9sCuebp z`#BxWT!gcQ)=kfX3tmnfDCjIY|L{+w0eY<6BDR!Q)Zg#Y=ObDbAoe*7P6+1x9ps$! zP?@g`M?jd~`Jt>8;C3cWDjK^`JZg+~7yFvLPUrIU*imo4+TfSE(;uvQzbb5dc;!lL zfOx!~z=w8PbIY@#0;dCVS-T)WH(>MN9eiM(uWY-C*;P_ad9l&9*vz6s*HU5(KXCGy zuv>X<@R0Dmkar;vz)IFOC-!h2*pZGh^a0c6^_PL}t-YJ7QSvJpvA(KmDG@}C@Xe%O zpov=`QYyIt@?*1E4DsCzvG#I}dVc_~Moxxvk`xJYm|2|;4Vs|?1ZP0FLHNBfl&?O| zwtYe&z#DZilm$zjmc7o+ADiNx1==S=@$LkD@pc41NfBEYu7G0sNl~fG^raoyiqOMH z$34FNLBsgM^~y-liOcb+NvvOxlZM?EsLffTnNtonCG~Obv!*$29L>#-72TpybJnZF z$|t`50=c4r4(Qih)-PbfMV(F*;Z8F|Yk{9B=duA-Fm^JH{-Q@AljJ6A hDK|~< zJ7`5=8!O>Hq6!s367zTY@nphee(JdXQ8dxMU)0VcU^E}98wrBz!VtLm=Li51nnD;g zer(`oF5jpC%ph>p5#55Q*TS{N8zGY{-@(sx)Yqu-N(=OxM_8a)>5rAliBRLtpDvq7 z)?ZK~@;+}H zpgzzsN_@?hG2O6&RO^KI~Ruda`OOV=%T?dW29ow$CN+v>-O z53|7iw!z2p!IK$_$>9A9>p91__o)c&L>ZWH^io~72P5fnbBa^-)~%n*qjqsomb$ji z1pw5~Xdj>J-n)dl1tNd&0Fvh*1Y=?7{K7!Qodf~+{T81Obx3^EOyDcx&TOL^FpYf8 z;t%289tihSIxc?*_k-H9$v0v-*>oPB0cpITdh+iM#-0d)$UzqJA#{rK;b_ik)+saw zky-d^_B#FO`8p_JZwzzvu3qH*q_ONIk90!g`P+Bt*Bm#0;;OXBZ#7N_AQls2MPd$k z)IMJyvV_<+BbT!|vY!gD=kMN2M#qMzU;KA@{v#R6NnWBkdUFFi4q+l(A=~2S |b8M3hlR^lj)Ij<*&=HCPK#@d_=?z&+_#lMe$D=N|B61?yr{rKxlxB5n zFE5zf{c@~c `ABlf$JvdTvq>tln1#=)4UW2P0GI7)` zsk6|4JI4-J*uVVHLD-q`R&TtcQ|shuw|y-dOGRrsmS=8^%xtpnMNS}qJ`lT_49>rW z58Q#In+wjWwdX z$O#-@PCg#pInR!Irz0y#Q+uxi9Z5q&q+>{Sv!fVH@Zxce 32 z(O#EL{K|=Hvc;&&av&BB r+$oc?!oAIZOWWb#6XUV`)_f2!K*SKNInG5 z!tgrN^q btXtu>Og^!Fu#b=hXaMDWvn79L zL#<-t*s^tA;Sze$^Fg<1(fC|6ho`rv? w$!23pMW^parSVzg?~sVm^Q6D0ExxC+OPu;@iw19|-o2;Uo#hPvG}h zEOYPvhEq!Hcvd!d(2-=m1+fn~1dH%8EJVEsKLq3i(EqfJujsK~m@;SKq;j~rMhk*7 z!RMhh+mS>|*o|Rd$Vq~bApZ^Q=W4u((xDs*pPiqgQlWGzzqqTwTR^k6U9{IM^U4RH z*d?(eySd?P ILX5O4kMZdti1{3@+Q8HaI8ou|bQ!sfe%Yc2Yy)(zlcPil1zmt3z04k+EQ*W*(S0 z!O$0%+F^5Pco~cR=rSvBCi7Or%$C~V6qmb|= 8?MRsD0CiZ8a(>wn0i_ ?P+tQ(^0%wJO}IHb%Q1#HHAF+J+O?zcn{~-)7H#RKw%R6euyPTJ2lH(d;R$8 zqTMHtR@*v&OZN-(7{Rm-1_WKMNY;&KKOQf%7F!V-AHbf9#$?&MKI4yy@FuT=$Q53# zJh`+VpR#&ug8OqK6>`oHUUg+@142@TY>_d=3sU z^jsN&J(3`yL?RI80U}Bqf^r++k@EsIfdSyC`CGf+wg~)1>ILeIQS?K@X{dSgs|RBg zPUyVNOzly*H0)Yok7U_;|Ac78;rS4VF ?l{2;1) ^IA=%GX3o*kQ>fay?)2LVp`WDp0LLX(6tx0Fk(w zJ9dY}kL|H;{ygeK M z3nbryJ3eoCaPjD=`JEM-EzmxKAPVi2db~T|g`oH4ugz*V)UBD76Z|Ucfsn?W5qfUc z@tub%F1yr;dKFEOc%30bv 79f)-{NXr>_uU49byLk8 zIBMte>^bMs-PE8SH0P&ovP9Yv@4ukA;+IC_4;rM~A<1`>&b*?)U;y(evJ(vmu 6LJXn zGZbRFh7^q_wzqR@T|PLTpIwZ0agUr0^c3eE0QgdS9QYr=BB~^${Q^A#+Q08?b6IEl zR2a5=h?Y*;>^%1sg+eX>gL46p>yX6Bfng;HL%?~sl^nO_pK$dm?uL7j+=E+*7@g5T zd5)QHqg027ErwI7w{YB>!G$nyoZ@_@c(e}?TWWXbRcFo5>OmInzc2-w&jzOBArM)J zJ(Bv#eD&d$OTkRQTa8J<6%-`4={nIX;fz<{?j`D+bUkx`hE*FD0&!DZ&6Z-lmon;L zSDl#$-lDlm28gFiSa5Wc =wDX+Dyg?_2uw&TAnJAp za&KnfPD)+7Vl5uJGw%E4YLa;^CVApDK>7oyik}!($VI0T *&DfN%^dCXcQiS{Y;#{5FeGrCUCnbngq>#4G?H`2onFGW`6; zd=+|&V-YcFyLdatF50R&W%!IAc}As!m*MVf=F|>ZenM<(BEY$;`A=!VzbMIv%OaKV zIC8Tz_-=j5Qd`Ui-3KT9-bX&Z(*d5{dv3LqH&apS@&NzT>-?Q>s~Zur?H(sBr#q5w zvPaywd9pb7A&4GCHPsaUGWc)6=zr1U{LN*lmLULVq}39P%%O!{!yX5W5U=aPr}KK- z$=YvEOEEcqw0-# &2jQ!cy%phS7=dkS j!|c_Y%De zgEAwwFaH9)kDCIK9{`zYV!#Q+b3{dV$0c=$PF3@$g1(vBwI>r))D~s0e=7D4RRvFQ z#d$TsdIggl{TS#MZvF}F_dv8>YElJo+NH&nyai-}5LF$HH4gO%7~;(G0qs1(bMw@^ zOX!y2_M8!aV6nX(_vw^oqj#Agh;wz{WrHD~4Fj;w$X2POq;TTY_&6|wo#*V$lgVAN zCyI+hPJ{p+keXahf9{XqGVll3<(*dKv XEc;`Xt0kf8d&h@7D3Vvq!o z_dJbjImCHqI$VEjr>wxm<20cb!8Y3|Jdojh2I=$IJ(oH8Ir=pH6A-yE_Y_!&pks&w zyw^zA7Tg{n-V(xZe;N_Lx|VulC`G+%6X~f54$Ef8Wjt>_1=wR_mn_v(606?M6I70r zY`?L3a%Zz*m{^O>P#r=@?5vo ?2VTa0@w89GI0i zOF0Zru52kJbt$SVJ1}d!^3fSMRWkZ8yyiJo#;L0cRNn)-yEJ$R2uy-bmyP_m+kP4N zR%p5OcA@J<;r;DiLn>{(KN@W<_h$lmvIzNuS|Bct!iJ9WJEp;FoSUFc3@upaGxI)k zzo(K-G`X_jtgiHA%MlU;R6pHY4C2tqk;VJ7x+%BSI7?#$&lFb$M_DB?Ugh0NJy7@! z^qnI)R|3{Yd+pHEH8~1vLrt|RA7hwgtKXcw94S!SW^$XwFe4O*;(iKlF1k3ORA-bE z-<$G0z|pCWtIn^oG}(avR7sw+)(O>E(2+Rhq(1Qmpj@hJO)$jVc~h(<69;p1myFDJ z<=yhZd(8I e7bZKu2{1Hs<|!Bha;jfh%ZJZv4{CMhQRL9*z*w8WqjTooBb4TgX2>Yi(^RUg;)Q=I_MwHn2T=>QO>SI-$XwGm+6GLPi;=7|r2 zdg8gctOGIx3CNZ&cFBz3?T=-`tbBG{6x28U6k1bKB5`AU{O)vb<@2U7RSR25=QOLW zlhYq{&rrPrGzrlJ=i=)CRn-qa(etrE*N2Ib$NN$VW4RpV3%O;$OP9i-DG*KKL}C2i z=96w?Cpvp9ANzbp+~zarjlHTr?dQjjbi=7^36e7Qb6I_XQ^1ijJjaJCY- &KUlnF}+XvU1Rf%|2sJfLyPfDzJ1)TCS8ce067EbFJ4|$YWW3X4j?Y} zm1nw@2ZT|>lYRn&W1O8 Mq~I8v2~f#SKq$LCc* }{OxhF0V{3W@4f~8D6EBRC-?A$AG+i-k>0-Zq0BmU#i5-fe$8)#u zu#p@`%PM>qgWeYWENw4HtI%*M+7FB|+Ht=?y^}(HqLhl}Vfb7Kgr@m?fNcj9Ko7Pq zAqp*~N==&?aiSL4sVhJ7KX%IxIIX_DICNyUH G86({Z1%Dr!&UL&=6fcXo#EaBbFYS^518OA3z%DAo?x{N$$+01fxF?D+T zdt+}BIUm?n2!r%;S$k#Z5Un?Vfu5jZpuAErk%bE|Rk6C5gI4E!=ZRy}my!!9R>H}P zK7I^2mn%FlwtyG=pvP3HEICu-LbPxl>72@YT^<^8CK0Ic0GUZ4 PoiS`sZGZn06BPqj>@?f6Y!m5lLAOGtWfb1<;Zr-9QU3i~;KYN8{D z&%m8|>`nQbf@%H48{TTex6v_S)C5xkJ%#o9LegPkAE$E%Q#k8*YnOhNQ)U;8({Y^H}E`Hhd8xKYjM5{`4}b7{{7lSoamJD%gU?N}Bts|9D8 zvxZ4_PhP{_9uY Od8|Gp?B{| 9TwiU;1#jo` PX(8 zOY2_ X)%nPf_9-|pNY3^>389q&t!DSzfxtszWu$Asu8mO7N(N6$NDAT zy{A%Iw(|w`h72!I%t`Hoqq(s^p+HOD6&;z){kcA_KWf_IjbuTJ+S0T95s6Dl+M1mp zpD7&@TV7|j@NntDEIs}?Hof5e`f0Jgg5~TS$w8~@>%5|gH #k0_v{YJ12g*h9N-d~EaaCx?D9~l z3Ip1UTcua^O!NXlG;7o^8;tKyf95wI*+T6T38FQP)t@5mqZYaEqXeF}l;lYW7tx&7 z1*Dg0I535w$}M=&WmX^K*yU8+$G+~LGOs^YU6-YQ;R{c^l_ g3i8W+ z0E_74vN_Q}K<5WEcI oc##ZL#!T|0?X(!_(v1UON`h6B2N>D=?RJ zI%o2b!dOHU4bV5i)^+^?(YpxA;$W7NYBw>H2f_EaXk5F!U3`i>XjlvxTJ63iJ^kWD zy>;u)#- C6d3u)*{J>RvpY#hS%;*vMe`%sN+wjdRxBy{kkuWc7zA#iNR3 ziLSsF`ZZ?I8LA@#qB*4{ryAhFIze~>+A%Wiz$|v9MW)WNv-Q>%UDJnq=RUVcD12!- z>N0x$Fibg@^%LUpFHpDzx+Q0FwLO~-rygcb2+dl$JGN-fZjf>LR)>UB&n3?I8=3d7 zO#<rvT6maY26HYn`u=iQX#6-Xn5!PTg?LviX?2!_W9N%x9tL#;&aYSy2>iS_nkx z0Q?<=pCy178BuDSm@Pyvs4J^3{J=XiNdUL3a)%z!x58h5w)F9?Kw26K^U3O;@1h9e z=1?^E!`X0GP|NMEhTp8jdh 8+Fkk15RG`CyRilBoTqQ{#Tc?q#l11Iz>XIcPHNgc*mFN$ zlX7*$`*cbALwQ|lwPa0jdJZFG;bo3clVOPqpJS&XOI^4dqGCDY)@Xl$eIPeJwud`I zpyJx)25n?NO^96U*A^2{w_ykvdv_;f*ebxX)da3lJEC7ZPq =mrn?*jH2iJa`-F!-F+#>m21o75~nQ{=*O8K2ZD$}+F>OEp-4%RSdYP#h( z#u5>=yTR7xe>3E%mveR3zfwXiA`iXu5;4WCt)Yd63SrGbd7mi7>XHu8)~V z`i%G&JaMAB;MYS_?3H@syQ-bh7j=~|2GP^3-{#}MSOf6XWlVbWR9#yKl;@}4NFd%c z%Wc?Vor`$qZquD_{$ccTmydCSpocRspr;y^6wq@!wbh~k**QI{IM^xmKCi?|toj2Y zbjta<3Xxqim(`8@60!ggnGO8!;Oe$`#S%V8z7F%m1O?vg$dFVvZb)NIFM7@X9Qt%2 zZ6ySvzYxY`CQ@4)c`iznQNZb~@tIQ~&;m#m$ZN#6%!#b J2W+bXwp za){|Nx$!9KzG@ib87ji;Z}%_smR2EQ$!esD1H0@CVYyjkD3tc$N<(4ys`*j$H$Odb z^D~>%^_>0QKuvBz;UKAxXmF4euoLaUVCPya{uMLwC7s$&PDG%DQ2Fv}Vnr@XWr&6+ z8HKiGWuS~cyV+d8yz8W)F#K4~`S@epGkq@q;B1VJl#t%VYcr8CyuUZNiZt35IgMO! zZ&V)$Yf@g+Er1A*sewyUq)!V$Mn8R{&-F3d(qxAMQ$^|yyIpz|aoy2PZpGRu$cxZ3 zPbgL zu@=b4=+fvo_nNNRu zpjRB-wQgO1gT7!)TNe_Pu| zs|7FYFnuT2nT CzX1~ zdrlO9;7R`lKKI`gCI5<2;S5zPEP!D29uP&}Ttr5xBqbnfONCU;t?aJ()dz_E0)>40 z&^>xWb&$Rd;LsvsKV?Lae3uL-8#@!k^6SnUn6!=ChBK2J*sR;=4<}DtQDySWWgX@F zOAPy~ln7|t{o~o=f4PF1Hy((&sb+*CpubuJG-6{FsBk+ZcBuz2bwUV6d#Q9PEGS9% zD#f9R xth$vwz|24GUun7xIL!FxRr)E*y %|c zjc_hRW~Uy}9(Mb_- R5q0b9 zE70avS4P5;RfL6W=}x^qap#UKY>LFD$h9`!xRzBnH-bo>){l8NWh^o2>pYLGBn`ZU zu`LapB;6QX!m&p9I-$x0UObhryuMVd8@-~97fHItOT&TtKEn)aF3EeIkh4G<*&s^| zyla14^cb^sp%Jy=4R2s>`zz@FFQ4$AsfVWCZC}&{vf) by@_vyzqv`8Te<@YmffCNNE50Wib`ufapVrGbIi06!K9@y;;3Wjx_AH%nl2So{zGf}gu|u3aU5+CIFg@UDM<^SD_MRr6 z&wqti+?()uTfUYR_1u?fgX)7t&lC4eN7 ~XB4b%Jjp8d2ySqvb?kak1D zd1z>p3y}wyRf8rp4G}8$v_9bk!!4{VYoi@$E?P~^R!Q$&V7ry_MfBRK_y>7MQY#_B zia-kFg%iZ1h|(J>Qk0K}TGw%rTQzS=`sydAzPh={8ru{nC}gmxayheF4bsoP`2BD~ zOvC`f_W)|V2BD<<6}X06qM3SQ_i$^P{O+giiX$0Wz0)0BzoQAJqI?BoZ_7j@sv(;L zg)l1|cL$Q~XZAUq5`dLdE>%XcR+t5H%TJ5v@E4^l$xtg#i$X6&@`!kXNNWH{hWZ{& zVVuRP;tL3L0P9Y1KE_767RTqp{mg!>_Lactsh>Ni6H?BzcWgcFQWkmfr96(f@XDM2 zGB6woMoWMckf;eaG3W@3E1!!tuD}KBQh0WJ#Z9t}L{XQ52T$ZWpM1Ah!^tfbpTt7> z*Kd}8>Oub3rvT&v!qrXYF8Kw-9l{C=z;;%37jF1JC8XLxFQnX^Gs*MFF+Wo!_X|{* z1tNP4*Qhdk+^!n;DS6RQi4IdOaZXyciy4)d#S4cM25F1`*8>&9LPOmrEvZsmZ|n}Q z(|1{xc;gI_dVAr-4z{UR22Nihbsty_I+xTG`fN@VI~Pu_>FIv_A4SDKg*DT^3TuZX zb{UG^JP->u6 hA@M-!z$-Vz{3R}njJTAbhB}{M@dO{O`qOXX3jRpEJjTOzuh*wAvG y)1QHze}Eo5*H}5GV9DzdxtYN%(XealV3*9uKn)7K+jxgnm=hwN z?rEY@t8%(@Bx1^>rp(`^usPdpe!_TX$xA>=O|szD`aRRnJ3; D6!7lriWZD)5018O3cocf)f1U$w)`}9Rd}JRSAZ?N)heVf zhw1rK1zbI21L_&$SBL_NutnHTUbpAT#8li{ex{dCK`b{MD?*dNx&LUe>Hj040|u&f z>>TN90AxU0|0wi+V*h6=2sYzjbS=6KIgzy{`OnRn{_m~EVzgL?1p5Aw2xhf=IIxj% z5Q4?oR3#? 4aGmIPMeDh?<1LC1gyT^;Zlruuw^!#coWI z?kQA#;DxkzV&nu4L^k_-OI_^{04rMEsPRz*twnJ7ocNd`v(g HeFBo&w|=a@4&jW@y#bRZb40;(S1&ZlZ*C??=hMcrpZ zMVq7MbR(X2o^g$@N*8{xz`gigPP;r(Bucx!yzzR0#%t6u(9Y#!9@Y?D>!56rD(g_iEGAff#bU+S`ybp zU+KTSV3yVj;3Bn6)IbllkWg5l<;~qO5N^YZ G%-w9{4S!J83NHmI~Y!;w&YaigetN|qgj0u z5cfuE1Z}Jx%zZO4>GqkJsB^`SV-=ZdX($3e>aMncgc|>a`PP4xAN{lII2h1*rPU^w z0)*g!O>Fj+N}zqodSaasQ7>(|>CJX(UA>OSPGg7 70$Um4l~ z@u+Qmq1$&OgC5i8hUuoN_qy$azz=}L=zleN6%xa>FKIa?TM=~Hl!83I$j!}*ENxCM zbn~v;ZKQ*}bB`JfO{qfh3C6|MYmL7^EhMrM=`gOo03#yFLT5u6P9bXO6KAIg&w}Pz zzo1zWZhagJhw eoO(c1*^_U&`|G=fFGY62mr#WXg<70<=G_1c zP-poFj*x3JgB^->6i*<>)?q$BmU};W>&!ae8XrOj231z+b? e2P9uN7Xr zmCAB16Ra~Rn+U%0?2Vv EoD)fw7AY83Dz1r|GD+Omq#%6e_Ii_^ytLkCm4celuCypdS0b58%IB2H^ z`6&j_#X@rI1Yi+ 1p7Y1 znRas5n#xblSO!Gl%^YIBskzrl8>dAJhf&dZF~cX*uPe&0%VvFgnlQ4lowujv^0aI8 zg>_acY4Y |FV?r};&D*w=C) zt&cUTXr?XlXNUKPk9``04@WmU90QsRz_yn}4_*8>P&T#t+k?2D_TA5pIlf5rh+Amg zRJJSdN>OYU(*FhG=5A}Bu&4msiGEs{0mcEh(3p%L{jX(kn055!gZpSUi2h%m?Ee`g zshLc1tD#MhXFgj&UC+2)`4tPa27YKi6>6we^Id@NiPUDat-CV&1M|neK2Leg?_8sQ zOP3V==M6$fPm*M%LOcODt%x>{T!eEVAVegB@h>zGZyG%^mbYio{`{V=afWGAc)?7x z?q2|e-wPx35g^xjR{jpKNnLU~u}jgm)3*%1#e3cXlyc${mncYYsp9?Oc&%W<@%6v= zEYzQQ^Bs-FU&$`0t(8j+4=q~Xqrkp22`l^M8y0iocc4|SD-2`?R@R(Q6hmh~Q| zX?35Iwf7Yf4!bIxxF7M~8jw-%b}#yq3UYv#UeVYNJ=SrwDF+kukJo*)FghE3K3xCo z^X@;cN8gFSny|(|vCk=eg8}Epm+a>g4xUR1Qng-52h=U>9|1ydjCCzvZ65i 8zgg}tNOt5*ioi9Z2uzc}k8Q*x z<~Z8>Vx}{FW<~T3&u$-B25^=Zq-bglC}&Mg$lvN6c0F;u<#h=B35*K3V?&q=p>cuP zuq#`69D=d5PWt)QnXf-X#Cq;aF6mIB!KVM*!UZv#>q_X1>a$7I%czK)6U`DZcLI{T zEhoB}v!MycDF5oid7 lZ>M(t?qt(~~+tK>|Q6fUooZ>(k~4yMI0 z#u~BR^y=x9>*N&_^L&=Ad^OyvQ*^g$GByRtW)9K-3hJ;Y@PSWt5oo&vt=4&d5;Zt& z5vZDN*7tr(ne|R3U9_BjXEilbcpvXze5(H9&`03Q-6DYrOxU;up^Rd{%AkqU1v9Pg za8z^YJ0{Egc2yeFVS%5$CiilJ?#&*zd-Xr4(SI-7{Ck`2Us%@uV{WMpw;JICAb s$X}`634(hAN%VQOM<0M8%Q_u0q42Zk=N69#XBe#O z^*0#f?|0=9JI{Lszr~-SI)3}VkTg&&&vT)jQDI _R#w@km2hnn=G$V)P1r2)9cd# z!guMG{|Lkh8R7~TeRrbSnxx)Jjvr2(j?Th{MO~c^Ij8=8VYz#@6|}vqF2KcU3?B{x zxaOCa0`k<0!k`b@XAR2iYf>pth+>_AA8CgC4lWD*`oRWZ(2~3-uQBe{T#8P}OM!*J z@|pJ-zKBSX0+)U)lVkKYVcCXhTDPq&mGGt>N~_Bw6CRfdFoier+7mSf)E1-XV=7$m zE^?v_K@E@FrIowE61*D;pLuM|Gy-onPdPpH^ccrg&(SkIFSsQYL>j4nL+LBs;;IYk zapOE{P9|^?t)8G66%P}dBo;sGw`c6qjVj=rct^2n1g{oGO%Pkl(-XC_rKvCP7A8g| zJ#lgLXgz{MpTVK@V_i?v#SdS8V{h*x4&gr|vXl}UQhvTmG4ZRm2bTewvvTzM_uuIP zh7&NvEm?t=kqPA0Z3IwJ6?zlV3(+LS39= =F9>h+}?cr zd~L>aDTS*F9?UQ{K-tt-cK4I|N)=|r WM z-%UUvGQCGEvi+Vfo>sI!EWRF5Y_0qtLuA MGs^ZaY>zWSz?)9e)nPb)ZMy|k|hhA;8I@cbeIT7Xe5 zvwSd|eRg@@U9fN6q27Nh DdaZ86s-RJ7$AnMfYxQ23`GBnWt@(xJJSQ^IlRYLvz`{8*a5k;JzJb }&N#Zuj($hI_~N15R3hANR2Kfg+Exw*ddilZFdO-t}>Sid=$05pK9| zH^upkz5T@D+^2kBaAk&b%U1fd#QD3_Dci-71BzCsa#8f&b*!(h=iMtVTOFa$F9xS4 zrkwlAPiF!G1~ck>D5stf)Z{#1zTU3;v0=>DawF){r3*HTD=Uk}iNO3<$?fe9TI0KV zq6;9s_o?n*3_g^6M#fP9Zg{I6Ne-jmgFZ##9DIwDe(NR?bMOjpKSC`LpL$Y+QTjpn zMfX|uC}Vs1qSfX^sve8P`OF`Wy`5TjhfITy5v?Q*$G$prwdqzJZg>t$ur$KG0d!2k z_-JJ7@r|UiSF*uLnOh=zwX}~<=!rNwiF;povhhH6AASi2eDLg`PFp#pW%oIK((`k` zA_@7aWK#DPSXe`IO6GYcl+lLk55lOs{3V2nmuT!xYXdwohi5_P5cKrBogKLNJ?s+Y zq#kahZDJk=y;eY&HuRS|XF&5TcsL>AVyDz6hEeyaZrB}NniCCQVqfxk*=$EuS3Mbo z{{l5N@AQz6gEByi2n-j54{Gq`bik?5IleENZ{puPixXT<71-RnXC5^HO7nFvisGF~ zELkzmQ;{B4@6|Y;eNk-?SQ^jN?R;oK0jpaHfRqe{Goo|?xCr@-6ZOAaEn4qQSpF z-=6?=$ql|e9GYFOq~Wm7llONvY-%*7Fw50tZD=+swOP6V>QV1_cXdRRDqZbV3g}SS zxi _GsxCcoMz$e8i|dN8_{!0X^#5^qE;?=^XUCdL1diA$S+W`1bXW% zw&EG3ca95!y@a6LEdB*D1wiS2LCEimq;liCI4GgE1jMeGKe+(TDFdAhZ;PhTy8#AV zFVJJX2r|7P@P2=Resq&7B7T8#%_v|}%-)MiUsSm(mR-U?n%*KM0TC_lxTq7UL)P9z z>_0O-4 aMQ+m1#88-tP+)#=D zJ>VPh5MtYA54Lz$yf;O$@!Qr`jQlc7McvE~8EztY?ki`gGfCH`&Ch;A9ioihnKRWj z8bJ*SV&BCR7v&@kk`S`N%)#Z*myh;tF|kGY#}P+1C$!NECGRsA7iAA*YXnu|paXsE zrk){x$hreiTM0PJ&Uso0@C8o8ZekT`D_m4y_ czD+>?5DB^x(_I`o&@lAg Mh{PdUbb_}NRzp{7s+gFYc_K!BN(c@5ZC90Qy+kR023=J~zQ2-hr z(1@*z(BPT**|W%eU)fjcTKQJTBEKxGKIA?kq2o0m^%mK%HhXfiY^GKrBCt-a1g}bN zps16a$+=C+*wt>ns5t3_qE6UIS#8$GuP@8Q(qvn3d*>*;WiA-Z9Twf9Rxuwq(v<4? zUzHwIgjL|tfU`QabPT=8R)|>3I*`q2SCJrzZ$yV8e&}Kk$zf%X{aX{6Qj_6I5)6MT zb4mBXyUA=o8CnSVrl)NndXO1wKEcRjqNR;qKTtaXb0kK73${Xjd)xrV{sEcLdt(Re zLqAm%n_{cxRLCo$t35GZO3L)SpcA_E77y%=Cpmc ^@1dE#QJN_mB(y|lEaNdiK(G>Q89?Ukf*lNQ_&GEsAeUMIFjEJ+4 z^EtP5!UNk#Ipm#yt0wK*Y+koxt^uzt+>|XDpgeISzHSDnQrcCbDXCVbWl)0TS`OeT zW18X}`FEPIR7Z@!RrP?^n++v$Z9?{yOGerdr{=P|*F9Q)fsRD8flg?JHxRvsoi_S& zI(ltZt?vu}Hzfl^5-yJTX1 cRvn)4v z<}*(5sBdh_d>kvc-8YjBTE7DVEP>R3xt~TPI>G>ICcqLi-@z2DZ&Ih7x|w2W=q6f$ znhS{d()>{H&P LQHbuMtF+&`3Bp zIq%@ji3d1D6pt=*LxNk4gsnmC@NC!JOtHGFPWdL CRB~hBa8{V{OI9 zicqOCH@A0YZ^O>qE#f;DQe2!1$_4mycWJZ!*IS5x7x(*r!d(CC#qrnI1ICAT-$Xc~ z2^SMH7B95ajKHp;rfj&?B%&Y0eQ8Mk98uXnj} B}jX>}>p9i`WARKo)l4HiXvH@B> z&Cxu*rGxEbJF@b63deq(x(3kkZUfeNgbR-Ckhpn!Y Kt}W4 zNa?s%Jm2eC2yY)K*l{9RlL=Vd-pyCB8mUX41*`jXc~+1zZeHOs)W^i4mjA=vdq*`D zw)=u8DuM{oI{^Vvs`O3}q=^ve0s<-`O?rorC`geiU5Z5MJ<>aoF1>f@y%TC6#k)P{ z-gV~AI&021=eu*)oHg^0ELlKycHaHI&+}`~@48jLJ2&TpeP6Bh)AaS17s^yoS{bWV z2LJ+ep&ev=h2>S)@E@Wp*<;qpPbVC+eoXG(N#oyz?fZ0dU!8jsb{rJ-OLIkT2+#IF zh3@)&u_LnDbmLpE=U5E_=8NhHw#}#!F9%3MqsVfA^HOJxVtnCDpWuXfO;RXJENUZ@ zJ*AV9^ 3!yo{udn!+M{?jATsR+ z#{b!{2P(>RZZ4^GviIyO#mzS+->a{L9cOcK3@~Zj^bHHDCB4D5)L)@4x3sxg-%PMT zAaXAOXW?@18tbHFxTpR(r^lG%S(>qqWlxpv!g3Aoc-3*&?gu4C3yDMHP#pZ5_R=7= zDN{)f=SnQawBs64aFQf}fl2;^Bax$k;~=!%pmogfK@%K&&(~x?J81AnT+51;Pm}%* z!-#GGGtO{STN2T2aUCBHOz%Ly{X_I@Y#&)A#&Jy11pW1gsP45Ihv747y(~LDik}ZD zTBR O^kPI-7o=Yf()@y<;IZ2U7U5 zm=#jFg%dth%mt2jPn #WZ}?_ z41}=DrUvU+kDVOV50tQ*C|Kq7em_-k&4|4q!CnW(2T%F15SHPWj`c`)CL9wKuxGn1 zoaf_!suk9391@@#v5dHe5$lrtJmoXlDk~f&=(u|PJ;>lk_`dXN3rpe~qbol&er;SE zS91#~^SbM?q-$yi);|t9TLYp+r4C<@^e)5O?wmC &ll+BmQTvCt*SSh_PJ zdO1HvC4Md)=~=Qmb@`HP{5xY~a9x^lX`}$+)YSm=cM{D44$V>+>rx+*cB#qaBMjgA zw1ATk({uG#F43IT`sZO$CF`BbE~R0$24pg2Cu8@r>%UHG`x@jf30GWzUKx{aBa%Ti z410F@I3qOMK`ZL2J(}{W9m5sg+KM!niT!7RZ){k_Z>~@k#uXbp(SjZHo<00xt?k|m z|8>#W#k`|A5_E11pasMP)-%X7 h_o{|2XF+jz1~~5*n~P4o{kE9tEi~>#8Fcd zD8l-z{XJhM-y+|8A|i4k5et9EhKeaoo;MH;n;2*SK8e6U7-H5Q#Bnnln0kM@UKifh zE?Ks`K8Ja*PNY;D>DZNor$fAoibglFKHhAS+;w~H;(_L$HwySeR5F+W2oiusE^Rrv z6%kg0x&!rJF2KppJRP*Mw#%GT72SF0bba2fr){^C)-fva?OZ6nS1q`{OuE(}RKO6J z 7UZb3oKO_2SZD9@*O8-eFYK)8L8gUGJDOe8kY7M_MiwPG zxrtbZVg(Y<)CcaSmt#kmbWCKAm3rK|5B~n6r>82D)9G9AfYv%$Jj5CIQ1c!pdFlR& z^8V#sVBv>2&Dy6|Uib!Sks6}b{<2YgO+GwxFq>_~?4K5z7&xb82h@!J?I~(+0e_G8 z!1qZrH3;0FU;**FFzGv`)sj_MNc6e;`fC5tk?WxIA OqHng#Pfij=FNpi=z!CXft%6PET_H2E;>RIGDgE z1fsf70JUjF41O4an*E4Y*OqGEP#JTLqvEO7bX>s4*752Em|ypMLHI-Tpy{;i5&?jC zGZ^4Oxy5_tRdG0uA51C4(7R{$Fs`Levg}#1C2)#RUM@Nebg0C6@4wPDK^RSnTovPc z;Qg{Ni#z^3AmkIqtmxI_0VAuU=5j@n=83t!F_xzxi&Zsqx p%rfLfI@=MmEO?{~mSgCQUB-;wt>s8V#b8m=2Mai;@uW^Fhd ztRtaU@hU1n*aFj$-RsR{?Q`-gZ_Mk5G++O_IKIz5EqAM<*|V!Oa!5r{A5l(-Y4uL; zg4``QV`Z;dimXt9vuj>%fP8P*h&-^{ q(uIqDR|z)s*5`JiT?mjo0nS#4^fM z@7I*|_&A?o@Nqa@XsTm!2bN!RRa(E``J9RBsc1iSCn|z0FQl-ZGEU>XL9SO@ZG;7{ zxXqI0@R7PrT!>xfPGpD?>m7AvezvfC-zYmcfh9u)Ix~fz%UIOlYA;}+>Qfh>s;brW zC16Fu#DL9KqtUp?C*}-^zL%U|hm{Hy6cF!a{KfU=-n0 I5akb6U4Lfp;ahHEO)qbj$yMDQpAXd?H!^E4W%02kS6$?+(xB~tP zCe7}QJONz@O`E(Ox7!0_bpZVvyW _rg2IS2&sOZIp0N> z30pvvE24a==@E>Mf@|*YohxT&HGm*Rp5SLN0lp08!c9d@_JeE(X7w=f*#MhI v15s^_HVx))#-~{yZT^ dF) (gjuP+%2#2`S}+;E}tJUGk9BV(o(|`xM$0mdT>&hSs)Y&yG?}?M-QYd(~o@A z_7V6Ue>2{zb(*-e3s<7oemy=TL3Lm=)CKkI}4Bmo! zJ+4s~LD;ku1~bPShcid`Gs6MhEP! v*+>Z&r>fYNB135uRL%}InH`E zJ+ dDrcd6Zhwu{25o( zgmmRQ6(i!G81ShWedx$KMiR*4ZsPM2Vkg_Y82=D8ub1xf9`@Vq!g8Si+!?327=vXH z2lo8v#x2~_j(yMZyZ-^7_m6PyBz>St_};-GauGh$D7Dnhg$|8ao?|Mj_!5vhpo7?= ziG2TP!0KtU8bu$_yokWWVMA~_n4$xG7DNTr S6hguDz#gaGt0kG->Yiw3|escU)4eWSM0I>=Z^ay{vWO%IBXg) zswWF{P-zU}rKwz6gjvZwllYLx* 94 uM<09ghe$1bHJ_L< zs^;Deq8GsW*CCL>0Dgk38ElJ~0h%jy)^jQjhbGY#Doc|Mf}d)fYkbtU3F&6%zosCs z!S3SZh6voY!rAsktH0HliVt+%d5S}8PxU|4xrvgzzQQK`;^|? dByH!vSxjVbgfg zc}e#Pn-2g2NBT^jb>h?HiSwIdOK|$5rNVk#4??xV9hHdd60$U%Vwg3^ShF6!YT>v_ zx*0-WJU*uL j__rwpYA z>K@=uyx&y (+{wgyxr4pGd_xkFE`A}vD}PJ_Igzty{^fmN%FdwMT^K~M2$k~ zZNtN7ZiT6vzSB9X 7rhzDyi@b6cLjz zPJWLrT%s@>Lmw5Al^E;pfd(&e?_ime(E%L)#%-|6V6EWYMK}WhUpM_j1i0dui7;3K zDZ?Kk?t?BM^^+MuPlj*&58K`GzuN9#ZkTg(AR8?5bkA= ;_L=E&X! z;1s0J>OQa#$o0yP<>?MFNKv{cNq*%_ChK-o5+xOc>h=rnY-DxxN`b0T9-s5uRP4Y! zDleu_`LCCQc>QlK04`NH0=~1O1<)6p4gle2@IsMm9W*7j6oBdkCKIec+5kzJlyO6t ziQGvzn&VjTH <_;X{hSyes-g=BK_k0Y!}l6?6vSS7c>t(aWcLL6HF3% z(kIEN P)#M(1wY8 zZI;Y*!mb>`UQTJc-7#o*&0Kv54Z`q(a9 6Ev@IZLHH|<|dm? z2N0qFKGd87b{WbS+Y8qkee>;^6N?@1+Q}|=q&2#i%Y}{8v7TIsx8t@>aDOb4?3H?5 zzixfuhw+{n5P6KE79fz|RGS-|Nw?1zrd?;}S2Z*3$*~Mh`+C429PTh5J@3dnvq&mc z9eMO`_o(sV%V7(<4;P65cO{B1sG3F64q|07yaq{wnxmOfI4uFnDx^)UN=X?P!6Z{O ziRmKchkEzm_m7z+drVc*r`E#Lc?8lZ-gf8fTLdtscew AMzDJ!jv9Sd;8|$eX&s|A2~EP9 z5X({fB#E%F2f5Ml7U=%^VkNXEPKI<}bPiJ#MR!G3eE}`gozBgdWzMK)$tM@8{?cGd z)O!tk>oL%3w%!`K8t70hqHD30sre3eiD4i-j-iB4@r?p9ffAqcx%9pZegc^o)_4be z1FB$kh+LY_K2zjFOEkQgTX^g$gveWq7s)8%jw~*0OT4-ID*VTG>##m_WSZgTf)TU@ z%Li{!z-eKXe0&vop^woDgP~BV0 G;}E@*yU zqLpyrp N(Hm=Ys~2q2OfEP& zxvKUN{TSIfI_WucP|5f@BPd*jpm!I%Tlt4*->u2{!u1GG5mR;qc5vvHX$2l}+z;TI z@}M-6;^0pcaF$|0Zp34>V5Ow-DEFHPv#C3GKT#^NbEHAsS)$t%qp34pS9hJYx2(qg z5WR`P+&}+N+Q^>`mBAeNU9y+uK4Ob%Zu~W9 W1zouk#245v3A_Sbk zSukl!lkI5;28=AexGIf5ZFA2_*X^*fo115Jxb;^D X|DX7q#ChO?ZVv~(PCSNJCq<*ny(KN#%$ z!f`alD_vnY5_In15_?wu0D%epDT%WD$!bo{WtP0#H?T)@8_Sib*|GFJ#!))$C#-YN zw$-*bc7lCFNIETREO-6Ua%VB emdatwcY5ULH-bXw+rIT~4Tht-FKjKth z7a?NBy10rcEyUyX#6Ko@%LtRgTezCpXQx#Gr^aLloXT>Zt`9XWIb^EFG7KG0_^hBK zwkd1a%OYGJvfUgy2=rM}yHtSd2jfH;)=Y+$m`5$SyRzkMTPPQKzCQRI-S?iWv+wE# znTlv6>#Cy)&7LLy?|ev_T7V_+pmtyumO-BuNUIRn0Pa0acTAqr^P1$jSe+entEW4e z82j@qRnb7m+?1Sqe?;zg{?cp%BX7k(d=9`|{BC{#fV;^+5wt~K6)e20K2F0nj2S$H zoCTq~TG)s?Q+eA)1)Gs8W@hHHa+v2A6ZUZ;Z^MY(xk&Ek74CDpUH2P*P#7iSA>|5j z-$n!>4xcR0U>Z~+I>5|0U-u>KoGNS>A8+kcG1rAk|NV5Y>dorf)fx*k8M=P?*AbOe z6gkz3jras$!G0w zzl8q^y;Y=T<#4+kvixZ=pj>Ap-={>1!tk24c^BF@Jnwx=y-R{& zQ`QB8j)F-Ktass1n bjF{jet-{&P5!Jk%Wd^OxEBL7l?wDSy zsf1S 6 5~Q- RlS7GMTG5 z2YmcL+cqtp$Kb9#BPj-My@LF6f)M^Q3^ex?n>XrMDxPw~z0&MOFD(Ft7u%q}QD*(~ zT8EoXdxFTlw`EN=(f LjRRqG?$g|nM1wI0Da4fOvQ0_VmCpxViMajmEWlJ1R z(~i9mo$5XQIlZs^& H>-xBtE9>5y^>mLn%!%7laID;&o5?GR%e L7iK+#o1_!xI=PH!HoRK(L))y>;qaq z+;_i;TOdO(*_?!>`AJK$4F&(DysiTb?_dPYG7t;Wjs^uf=hRe>Sx1BKv9wHf*Vpj$ z2{-gn_2v9vIUwdz^Gkg4eCnv%B%M0TQUFmI)Cez`+ 7EFr%6w%lvF` z3p9IyBU@`>Pb|d2|1Jrc202}b61R;sZ;8=eAx0 zbPoxT(se5fm&bs(dL;jEw`7~{8;S+WuhP5?#BMwmVz*GC^L^QD4sb8ZZccu$`eejX z71VQ-s;t>l?Y{2sfz+o7^&HWh=?V($6yS=tKUe$=D0lNQ4ur6EK!z6-222DPcZ1vX zUc{(i--5d_Ulal2Brtz_)b9M5kN)C#P7eBKRsEP}Qr#!mtKJq?k))p0mrovQ$Vj*3 zuk{d4!jjzf_S-D=H~0gDS2p&t(5Bkjj-^#idg~gFd5t3Ceoj&EyuXZ3T?Gc1nmiX4 z+GYK~9qH{kpF~eTdu)@D2n{d;n#$`0%SruHn?>)I14`&EjAIT??hsq@vqE2R5B=eF z9AWPw&ihsdgzQ@qU)ZPG;2Vwh xI%IZ+7BGK+|gWTP)vd2A!PaN16uZ2 zE!i+s4QsTckxM0>;aLn!ki16D^k{3A?u2d&YwC2X06k^eOKE6e575+HyMq|Nm=M%v zv^^Xn4ICs<#w2G@)R$AB(6PcHK1Ka~^bHQUD;h%E7OuYv+{*H-tZkZnT9&o4X2+>P z`-9|Keysbb%Z@?${t@oxzuXZ(tMDE=y6g;a+2Crac7A^oM`WXRVS9NRn;7K1s$K4E zW0os%aQMT1W~Lm+_M2_Lrc8Gt?Os_;vqLv5L3*>zbEwjdZHC>BLrKc%^CiL158Mrb z$A(FE5^S%xe|N7z{5hV@5~l}ijNEUz;(hZx(dadQSG&>K==x>=J0<0*=@T};OT=HA z%iy#`=QhLAVCd@x&rzgPmE3ID4ashCQm0s%gG94WfZP%~`SwNPDxOkKCjJT47IM=M za7k;aHI4vd4E>9CJ~vw+m$iClq3}V8ked|nMHdC@81EuyuB-iw>gJ5H^8e(?|LyqBL-W8Vg{0eFg^?LVtj4RSjV}?E z$pSeJP2X=pOAnkTC+p5CF?W;s8Vzx4{J6cmxo_)0Xqt^0c7f6wd`=7C3M;3{I5jdv zKNxovagj{O9ws~oWb=Al&eP6k&II95J^13pIgsu=0(&@S)&s{}2Om?O-itW`prxyy z0qa7A)b5J4JKb;a?Q>1y;;`~<1~*P?nJcmDd~MMxS8px`@{=`-^ta?Z*uzy$E`OaY zoEl-J($rLZjz5Bb*t~Na{B-oyu!jQQpw_745ocvZ@as=kWH N8CCdBwDeAkr&du|lvr-}=mD{L(~Nb@Xyy>BzYAiA`muv9Cj_zJxA^ zFMo#NZ3Bpkb_eZ`4Pqcztu%Xet7Fig{}Pd))1xzc%ar=Be76sAs0X?bx1 pV^_&(d_6-k0xk0Z)_38Q<2#K1uJ?p8Jgh4y-^|KwmVE5hK*vBQBk5k?H{a r1Y^Wf>Fga0;HYFoX%Sodd6N4!E~tC_-jx@JhG9Qz;kuCx9G*rWF#&$ z^=3}Jo;tMWQ|v*%-}nL#ua)l>&Dl(2d^#{iI*mXkv)Bs;LRwAt=92;eqnVvusiV%- z-n$90p$(e1>dvh!O6gyWjSqx7p}}U&G(H({W}LvGb7X1s+sQ_7p1m6!rBJQ`H cFrVNVMwU)~iU`F6GGE&i*ZELWB- zqRzF8Rkv98ZYBp=Vb&F;O`=`?E}770B+Jfw_$4g}DQrSfrh0TyqvZ5KNtK}?BYv%; z(d|js@18f{D8DH?cRlsTY|F4-pZ^I^@ztCAB8HAQ+e6C}`0>T^zOKGv7qS5-rZ1i- zI`hf-SVab3i!Lsm8Z?sFUK%gp$^?;~Awq%Aw*Xwh8zRmo)#e9&-^@8XWoPtx+O$2@ z@x4K~_|0&lhMzyL*0ED(c{?&;WyDkn?7dhy_)sF61vq%lz_?`fv2AbVvv;^9%rN@a zBXmrcFg5NO#@8_*XUaZx)IpNelh*Zx3jf2{lq5-OlD^+QRy*cn%PZHJSa_`8!p==z zMD$7v{rs81^O;inCuqk)qz5KId7%NEt>pkvRM&HgTI=dPkyY&ag)c#JZ~TQq<=QRS zhM;Dd78r;2OI2XluDuAOQ1N~ywW=ul_k=_E_m `!BBc`H+GX1=e3pQ{iggb8q2XqZ}N?=s{@3J+QG znb^gQ;}+8lQ$i*6q1f6lQMvrm96rNIcdbsFdCM~Ay)y)xrw@z)`fPMhe1Wl>rYU&u z+q6UBHS@kS(t9%1fm2LISITOxK fJ6`s+>t#B8?co`58^gL z(WcIbY%z|d04)p@ZBbd3btDV=37Y~G^6540pl~<^jCPB^1gDP9jbGZ4AqANAHQn5o zqDJD_5lNYuZwUMRR(-E p0qTv%f+h?iKz1vi{pCuF2 zS;Eu54v{nd1TxSec*XnY0WDPM5U^g$JKQGJ+^(P1&NnqxCwEhIrTtl^75WZ#@I#`C zReY;ov(n(@Xf3>jBPFB^t?K6DSQ)6^yn{q%u~aG}RrY`}2>=z;yNtkp@>?K$?tS5b z`UEntVH>_M2JntejCT%H1)o=GRWenwmKRdIFL6v0`8|pH(=94OUwP-soT}gR0_jn& zZAaZ{P({@m>yi>Eq* `2vj3Hv5LYl+& z6DJ>gl-z|a&& o5qATG?6t7K*Z~*cW80n)o+6p*@ zyu-Q6KD`b#t0^D%y8n|}^J;PE_K4bUz|>?>aN<^0X4*MqQaA`m-P4q(0x}5K(*VQ3 z@MH@3(-(z-`s_#lcF_O3G&{@~s-Maa$MDmCb#>)arL_<^oNWLUQo7b}HMviSy#EhP z{$|XK3W3Zz)Aq(eE4bpcQMUP8PG)kuvF`c+%}|=ppcvHv+mH0C*WOP)ve|HsggPt_ zhADE?p&?O?Dgh<-lQyDr7Ej)|$=x3$%PNl~k|rV}>Hzp!IZzPlwkIS47$Jj`Ib6_~ zuW(52cIGY=TUAoD%jwEgD+LHNzyPo~ c%p`|(~* # zs3JS zp$WS%R*5hHCk5MRa8;vWSqg*(PpYI@)zQQ^^&XpSN6PJhS&rtj4#m*a-S>)&XmuPd z |H_LaULTA^-I9O@ zX2>>SfEhHFkH=2Ud9BO`v-<^pWN9)>hgHUY|6TY j#%vC$Pfg=Mn+|mB&6yYR1(L_XXO2G7x2&}x%trwVAhw3fOSJ4tZ{e_z| zFI>zM1GeL+pLdr0zPI;2`lhZDdxR3ZKGwkJ2)l&bJzt4outV6HO?fPonf5xmyiA&R zD4?E^8UFdpcIFjFC+YNiH8;t&7K0+jiZmwO;qMPh7cxSDFk5ZZ$9l_X7{C3z;^e#C z13`Hzhilb829vDEoY)#a1=8`giifzzJu(&%jf_O*MCUJEryE1NrIO_s%LE|$@L(kC z<-@ }&NNtM|XWyA&B|U5{EFoTx`r=F6*`O# x|cVx8Cj?HF%$XO< mlW2Le}ZC$Y=L}_E4h|-XT~-fXo|EFJM>&m zqbS{tbqU+m-} 1l#K6ziZj=f*hfmBNO-yW z`$k@X%K3Ph_W|dc1GlqHO`dHYci8BqOj(;6