From 5a737c45a69f93845d801d92df38d878cc00bac0 Mon Sep 17 00:00:00 2001 From: Kylie Wagar-Dirks <107439830+kyliewd@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:09:53 -0700 Subject: [PATCH] =?UTF-8?q?Revert=20"Added=20blog=20post=20"Quantization-A?= =?UTF-8?q?ware=20Training=20for=20Large=20Language=20Model=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 9f6f7a649d092e8d74eaa93059b35c0bad7901b7. --- .../2024-07-30-quantization-aware-training.md | 293 ------------------ .../quantization-aware-training/fg1.jpg | Bin 188363 -> 0 bytes .../quantization-aware-training/fg2.png | Bin 237225 -> 0 bytes .../quantization-aware-training/fg3a.png | Bin 53666 -> 0 bytes .../quantization-aware-training/fg3b.png | Bin 33965 -> 0 bytes .../quantization-aware-training/fg4a.png | Bin 55149 -> 0 bytes .../quantization-aware-training/fg4b.png | Bin 34314 -> 0 bytes .../quantization-aware-training/fg5a.png | Bin 58524 -> 0 bytes .../quantization-aware-training/fg5b.png | Bin 84689 -> 0 bytes .../quantization-aware-training/fg6a.png | Bin 92109 -> 0 bytes .../quantization-aware-training/fg6b.png | Bin 50726 -> 0 bytes 11 files changed, 293 deletions(-) delete mode 100644 _posts/2024-07-30-quantization-aware-training.md delete mode 100644 assets/images/quantization-aware-training/fg1.jpg delete mode 100644 assets/images/quantization-aware-training/fg2.png delete mode 100644 assets/images/quantization-aware-training/fg3a.png delete mode 100644 assets/images/quantization-aware-training/fg3b.png delete mode 100644 assets/images/quantization-aware-training/fg4a.png delete mode 100644 assets/images/quantization-aware-training/fg4b.png delete mode 100644 assets/images/quantization-aware-training/fg5a.png delete mode 100644 assets/images/quantization-aware-training/fg5b.png delete mode 100644 assets/images/quantization-aware-training/fg6a.png delete mode 100644 assets/images/quantization-aware-training/fg6b.png diff --git a/_posts/2024-07-30-quantization-aware-training.md b/_posts/2024-07-30-quantization-aware-training.md deleted file mode 100644 index 34340ccb987f..000000000000 --- a/_posts/2024-07-30-quantization-aware-training.md +++ /dev/null @@ -1,293 +0,0 @@ ---- -layout: blog_detail -title: "Quantization-Aware Training for Large Language Models with PyTorch" -author: Andrew Or, Jerry Zhang, Evan Smothers, Kartikay Khandelwal, Supriya Rao ---- - -In this blog, we present an end-to-end Quantization-Aware Training (QAT) flow for large language models in PyTorch. We demonstrate how QAT in PyTorch can **recover up to 96% of the accuracy degradation** **on hellaswag and** **68% of the perplexity degradation on wikitext** **for Llama3 compared to post-training quantization (PTQ).** We present the QAT APIs in [torchao](https://github.com/pytorch/ao/) and showcase how users can leverage them for fine-tuning in [torchtune](https://github.com/pytorch/torchtune/). - - -{:style="width:100%"} - - -**Figure 1:** Llama3-8B fine-tuned on the C4 dataset (en subset) with and without QAT using int8 per token dynamic activations + int4 grouped per channel weights, evaluated on hellaswag and wikitext on a A100 GPU. Note the log scale for wikitext (lower is better). - -To demonstrate the effectiveness of QAT in an end-to-end flow, we further lowered the quantized model to [XNNPACK](https://github.com/google/XNNPACK), a highly optimized neural network library for backends including iOS and Android, through [executorch](https://github.com/pytorch/executorch/tree/main/examples/models/llama2). **After lowering to XNNPACK, the QAT model saw 16.8% lower perplexity than the PTQ model, while maintaining the same model size and on-device inference and generation speeds.** - - -
Lowered model metric - | -PTQ - | -QAT - | -
Wikitext word perplexity (↓) - | -23.316 - | -19.403 - | -
Wikitext byte perplexity (↓) - | -1.850 - | -1.785 - | -
Wikitext bits per byte (↓) - | -0.887 - | -0.836 - | -
Model size - | -3.881 GB - | -3.881 GB - | -
On-device inference speed - | -5.065 tok/s - | -5.265 tok/s - | -
On-device generation speed - | -8.369 tok/s - | -8.701 tok/s - | -
Per GPU statistics - | -Full fine-tuning - | -QAT fine-tuning - | -
Median tokens per second - | -546.314 tok/s - | -359.637 tok/s - | -
Median peak memory - | -67.501 GB - | -69.850 GB - | -
AToa`%e9#RXQ6Qu!eBfypt-MuHI{Zz0Niy+NDU>iVa=S$pJK_;wCum_t#kGPHZ5! z^(ntVAHJ)^^n;&FAq8SJFs8M)jtoX!ZtzFI4u)&Yy*txwFaKu!g@gy8yx(M@Yd^ga z0o5%JKVNWaQ?Du_T*M)!HMSA!l%K~thB%E|ge|DYnnY`51S(uH6Cqs`%rn1_)Pm Wnz|`SPiCJb(k;QcUw=mN{a&jBFE95D>ei|~m2myO7xKt^`N~0>c90D@Y%k9! z4m7)VO|Wg_t+`t4vD3{bnyDz#=iXGm8rx%Y*DuAB_&R&_VPBj@dE73`kg6{F#x-4i z_6EGAn1H!X7QZXC@(_h5eqjm+(VkAqR$Z;>tGIp8(Wr&gmW$|@jUOBP+Wyu4RUxNi z!^1D1VxJhRF||f?2hbzwi4nmGgJ!d749|dVkE!>smIS%H)$n^C8t`5F;D{x)@_dB- z5h0rmPw{~dFOFYq+*nk|`R#O1tP-W5sS}DC3%G;h4fv2%Q;~G4BUmXksrz})t1JeS znU3>8Ll^-f#-T9Esu}K)>3YNTjhgM;8?}+qNn&kGc`@x%gQDCOYy6aC^|?w*( OU4ISFf)=)KRL_=3 z?eyg^^*s~SS`u)jmUd}a+xTrHOX)@B=|0nmf<=AUpwrRp%n<^2Kqzl`Oi&NClhUmB zk|`9ir#;2}vbf;2bNrCA#drSzsuqi1i@t+a(4e@5Qk&VBF56bnvTPFM{63;($QEv} z8cF#yqR~hvz@nmKT$(dPJvzK#w`$vi^~B{$JAq#EBEaoOI_VQnzd=XUbf7A|r~T9Z zn7!UnuB{#jYICUv&DOQDKi2~vM0(AzKD*q4 0BlH@P3!3 zdN|OP83Gg>Sj+sM{l1D26JK!_s9Sueeaj)`BA#nLvQs;)eC;4_QJY4rR!R-+HihnR z>(fwFN(-O(aMAnNgtf(zqJ`K+HB2fW9m@N@8Lc@h7{`Wg23~{IC|r=X#9KF7Z-Z;) zod21u+NZ=TOj^bPo!XZ&@0{vrSBDk!!U7)C;@bz0g*e-FA3^Q#gO}&MC@YS%A$rnn zE}fH@_M+v5jLb_E{nWeV3(`>E5QaVF3&ATqjjRdQf$JlP75Lr-R(bIQ+#7S`vh7^1 z&~6%%#Sel))JF<C|;MlEiZJzcJY%I-G=OB)jo2qdu{riSiP16)ur5r|gGZ90>+W z$A?${`ZXE5|9_2jt`0sWQwB2eamiAZHiBif%!ZuYXP_v=j3paVLjf&f@ilHcV*~z6 z@L&RK7w#e(nu=vb&|J`XS`2FvMa3pFN-yKSdQPrB1AD-%L&`tnaZon6W5^Z0sO!u( zQwu)`TTp+`35}puq#Z_AkS{_q>1pP;TTa#za|JzIXP2APSJbg!t9usF$x1btFc=?_ zM18wWd%&tEqELSt0m5*$SSotpyH>`eXiF=_%0jW8zMIuo$HTmb zG1o00SROjcy>3Us*-a+vj3rj`QNs^&%G688zGq8OM34Gw+KHO#C2k-p1&*gs@TvCa z=vJ(+&!V=v-h4=57WXMN*tPJEe_Fs#ST&*$rW&Mlgd6Ql %56^jHw CIcwr=&6esXpLz-Xj dy$UKUSDgcmfkV*YAor7jLpIF zQPC}0^tdoi6Loskjo~cDIWXa46NZX%zy(FFRUxJ7iw1J8@{AP6fQ7^50lapRxK%b( z%7(fwK`{^L1{l|VbA5(-4 )MMSP%Qi#1duep4mJ`i^GRB5lw!2p!?eyd0 z1y&1XZ&c+p97vaL($LeKo=QR>;IUOAy#Vl-KI|>41r0QMHsp`svnM0geYEo2XqsA~ zn4@~U9Cs2un2haQde-Xy=-uO?qmTW1j69s$T1_nRH*mu@&~tlAP*cD#T2;WtGu)^S z4Jgj0I(6Fh(*Z$&MBbonS7Nw%^ 6@ri#>`wC@yoniQzelAbmMwkobO&0(sXgzV_j8rX83WleB6-4iY46| zbB=bJ+?j4JN$qTqQ}0pt_p-n8bo1Le!7JiAM!AUZCzqzCm-O6Q69-=<-Nys39*f`q zu^YyNY8#IUeq W^1hbHjylduG@^JIHNCzm=0E+X9z46i%660j@>-^c=poG zCEe+CdLS)wDOJ=jI?c<0DrhSdSXS^wCP bmEV6vuLNB==W=rB`0EcXi*kZx1o);`x$8aT-cPiD48d#KV-z#PD6SW%rzU z635Q)Y-wrCkd|1nrHf*Fk&0LZZL4#SxlEL^LeP8iu^v06;|G$0VECb-!8y4A!a! U33&aNWI 0M7+goa)hP7tuGbZ<)*2JKFYUnrX0Z=VMm_0dhDe8AOg^r-0V}b3R^sNpyvl)N zm*p>?(L{gKTA@%-jQmGatU4V(_+sbMeOe_|m4r%|UL+*0>PNqup0;XLQiHf{Edu7x zvE;^=TERvZ2E5T20w6oOGRLQ)y7H3Fal8Gn#>bwk#7hicTGB8wAzPr9>YD6XenH9V znV!=6WTTlW3uKx(2#1O0%^YLkEUxo1L~9CurAj+A_M9W*y#7UFzR@nL)Oo0beS zPfqvjj5AEs&``q{W74VVOViA(I*lkTCraG|(x|6t;PV@KS4jJMuiOSm7om8tx-^#& z+XQWlH_0T +^4tm74B-T(B4QE z|5+-s$!)Ybr+$d<((!glC3`hJ=*-;+e(MO7AZoZED~@_pQI {hCMkGiLt<&!? znkm00-=chNJzuPy#sxSy)La;`{t(W@?Wyc9Ys)xy?$(E$-b!gkoZ+j)(aI(~O;d+J z8DC033Y42|8_?hBpYU0X-udP7mc^0+79WnPdw^Q-I!b>g+Us cQnPi^No=Ue%+xP>q4lKo=nEZ-@%6Fzu3(_r3D; -Ia9+m*r_X1hcWlHb1+7?D`1}0oO7cmiJc-ZNL z)lJVUF@=lmG+ELQhC<$#U7 xvQW2{DTM^vmXGjA05B?4eTs@MK>LQ!{SN| zkr|3(a`t32WV8+wFXFx(??+924`vE}SRY8sWZ7uDu X z`|t6PFpnv^A>a#i7jS9>k9tV_BcJHPTC``_&zrm$T28?h&7-_0@=}--X4RS(No%DX zu+gY?I*7&`2Ro+(bG_>vfoe~V#wY;xx*mXBccOQFKXFg(mnA=5QS<%b>anQ80aZIM zzkIoyExcy+__3m;-tGkgH;X81^PFUTD7fI2x}_qFhk}1rj;C$JK6v6k?-mt6$|w$w zQMoEtS_CzPoR0fi=Sh>GNR7D8Xw!EzQ`5;AIos|%Y&N_z+9~5c4EFbUi)ILCfkvoj zjK8iHYWj9t?M2)jvrtE$I(;y)s{r9=QAMmO1e4eG%b@%D?H>06AAL%*4U}zpFkr)l z0a`5=NY{^1U6~=s)pfZDG0@Bu*H!^kkB_?@zG*Gy-xbVaWc;%<3%wY;pbujJO~2j_ zs~O;7P9u_L e*^tlIHohAhP-pM>lL;OKpPV>FX_^LQ*1lW6Lvy5dU18R-T$Aga zY7zKG-HRVzGGCR|KMAWiFz||1E$F&X;F Cn8e69T>FT Xd)#v2Zn^6W|I zcXwgI%0b-(+&2-ao{I9E6`sAUN!EeX;h_~yYY=)+z2=-r=t%*Q3yhk7eo64({%ye^ z^E~R?eM}he!aj0fikGk2N3tQs9$a<6e8AE=HgxR*wUgCy8@1rv#WNZBZ%=;y-D%MO zSDE8JZa?@ ?zyqriwEY;H q>fbm5B#ZTQ}TB| zvbx}s_Ki51v~(sDrzU%&qPt_G?wcR?Z(A;?`NZny;q>&cKN?1iJ3J`h_*YZ|$UJ z!~Z#-GQM^8(*xG-X<(;IU|$nQmS=z{S$_tcs;AU-#-WB-dscM7S`A&n_t9RYXyOMQ z+Wtcj62S#^47DO@3Tz*=2pdvGXGE;tro+Ht$aAvpDlL6Qc4gmMFgS+kIu@hLha*^x zuORP(U>>YIwq-4*2fGnh?@joY6Xn3FQ)3+%!vV47dnZR0+o32zD<<)tiAu02ued#G zInR6S;@)UqhU5{J-ST;0n35ev(dSriS0$1z5`1RFEc-@8KY2`c@BDtQXeTTeu>lB% zv#hQqHY9^xci7)>KB#{|v*&9}>v$ww?MlErZVAYs8_E8JMPSdoNGUFO_mtI0s8D ox~Vxmy)}_j-3| z7s<*q?v3hWgK=OnyjaGSfe`t?^6PgDUYfwezn24%JRF{g;+ZG}e=RuQsCCaNaTsF) z`*8?iu8-|77r_aml64|xdC(PoJ}ag#j~){?9zI9>j$(*;kk94Bx?w6s_0znpGSsq} z@4|8@2LuB3a08#qS4$2~?iM4S5!O1#;(M4*bCktyKkE-X*~2-5qN__Nn&whmP^Rc6 zo5j$$H|WK{PY M52zr`}8) zM}zOCQwfv +qisHslw8be^m?Fn$#-E-$41>Iz<++Td9=9nJiM@?Kuq`|oP7UpA=-_T$I z`9lF^WLUd>vRdb!a*DsKh;9aK@X(7FcYR(xCLGK8B;b-dlbIv=bY`Gs%!Tta*4dHA zjt;|iW6hGt2cOf8F?$KyGYazCsn%K|HxDH#c_pBIu|snmi0PscW92ZpWLLrbc;iJ0 zS^-_27TjbGF$s8vE?MY+L5zdLx#S=nFRp{O3P(7vzr*(8>MhPPZ zU+IuWOt)SKX L*ojQ9N4_F@Xb8@6ZODZ8Yyh~3nRoe3-2 zY?FGgXmmK5{vnegrp1&SiA>kNzv4y5S@tpy;q!3APjlw%^@CTxv!Qo>@bTG!Ar{{& zlI}&cV0fp**MQznZQ&`+QfIjLBi)#G6k x<_&;s?PI5 zV2S+(9%(bJ#Uo3e%)6%AbTgVLacA$b!v@A8d;44T+^Kz{dZ_KtLU3}n6jidE@?y4u zC0i4qaA3wOaYG+Rdpo3&^ALN&kRi4YY#kYUZOJ@Mw||uQ9&bLn(aUrsUhBuuVB=D3 zIWwCj`Q2RS)7X&O&QC489h=SK@NKB1YQ)SdI@+ymM46n7F@EHr%DXe;t@$2myHTe& z%zh+&x|Axmw7VAs+)}Q$hN4@2^<)Agb@+X?+te2DAJ79@BZrx}EM9-CG9j?~Qh$lg ze)*d|(o^WGIb~AQ?(|(W9#SnEx@hW6wdr)~CA(C^#9vo(4oik=eV?VN1vd3yRBID$ zK0n`d?3^Rdcq>C(b;-AzCCk{+qcc7Gt!n$sCmx}k%t+HP^l64U5U1|6t%oVu7sxWE zRw3z;0fM90Qykxgw-a-4^#=&wA}J2c7&f$ mB!#Yl2Bh z3^Ctkq$ooxV8r3#SN&J4{(dj98(PZ(X-lg2@j}d}gZ6mZ2K 3ArrPHc=BFi&Lhw*@>xO*6wHHWt>U?Aoa|62kTV^w(N1 z7GH Lbx2dR@i-?wwUePnRWCGCQYyz7E);P#`RT2CXjR1%R^ z=+2y(K-nYMPgv=y^MO}?Ak`v=U1wX9__lN3b#URtt@7pyJpsqY#%O8W8` mDw1*FOm`bFPPGH7N|66JlKGc!hf(Yg|C=Add`%zJu $8rBMx2u8N+}TB)b}m3wtq!+UdN!ZFI!zlBzWJ~Q*$X= z{UBh-h5;7CeYa&64LM@V&>Tw5S S*VqtY_kqV0&hu*Np&RR Pwrk>D!JmDRqlU3A1PsxK zahH()+IDIIHBP2?#q6$}L%qy)vW_PF%lLl(XpFuO!WX2zCVW3YxXOI{Kb*ebDig6n zt6M-i7c ZYTjKZZ1V5kPU{KkV0Q39KZACeJR Md! zV|`Bxp1pMMKB{cPQ{|apfo#7p+j^T}P1ie#;xo0}!0M)a+p2zo^l6jD6dEi7ibIs_ z_)_?hh$%JTVFiB}C#TYI+JWlPN**hG%Fv{|8!O5`8QkFZXb1KES%s;kJ4?cp$cqdy zirXh!s?Qyr%;-9g 0+6>+W$UyN!g8>iPQojF?-}PD7d_0AfuB|gO8~ET= zMF@4*{hM)bl!#-vnU{3QqZsrx-DD5w_9=|ru{{qd_PcB?wxDGuhNMu#_p>>AGV7ga zUQT_^{g~t+)wnYk;C`lce((oCD!+<)(%1~lL>exys;X~h7Ku3-YBRj$^{VSs p|LNTqfsUo@g6~2kG@oPXEs(A7e8_v`zb$3Pu<4mh=SI_R&wI2f~d&X z(O(}F?s?W!Q7ZTx^7VW@M&Mlpu_m2M_n22$Dko)UU+;R Y7V!Z`5GKm zQLgW!5h 3UITi@zQ8_P2DjvEh|Zxz6I} z8PV2lK$k8R8BD*yYi;CI3o@D89)WMi^F;YBeP&)aNG0%LP(8W^@5J5)YZsFQ;|^bB zsY`suSkg4;2U$Jl>t0cHo5Sxm2IX5nT(MU7soxl-1_E~`a%gG`dFTsadukOPdD7|v zMms;bIQ7@*V|xcR8Wmg}uXWm3m5&IWkHLRd6p8_S49;=AL39T}=vxmaAn&u^yw+}x zeYx^MBlpdU5}B`1UIdw_&ZZA2DXe%$>49Dgb#dn&lf*Aq)A*s)*4N1Aw$qEGS;Ro| zIg-7Q9pj<4S~rKCl43cn6X?ED-B^(*)JSlGsR^ai=0)$e8jq-Q$Eqv#Lkd%$87S%< z7QceowWuAz!st(LpbJ4?zhIv6fd3oE5*|()rAuL=(woiYsl`k8!pQf~E?II#h1yrh z+&YF@+@|3`=VA&($>m&Fjbxq$ig+$R!;G1V`o>%fyF@SJ+5(nQ^@9;J1&u`t=3|nV zN!nfqt@<`Q^5R =x9Z*HW(a#7`(fje zB{ymoUTsonZB8_M7ViWwIQZ{0IgO7UdH9B*wJ1f_h{usoG_S%a_2a6n-qJa~pxB$O z1~fyG0~eM!^nCncM6m!VDDG^rUu30_#;U$@Tq~UGmLtys*i=r}B@(i6U`KA>9YmNS zj}dmGPUxnvA*8wL-p8%f^hVb#Q7c}*OFbKZU`F8nW<}&+9)=XH(4USwO8Y+E=z4lW z$e>Z6;X%7{by)TSjBZU1mhk&3K T>;T&8kD&E{^V2I&FyW)DJ zrn>5`bP$B$x-xRPeASSeFpQjTrVvRj#dtJL%Py%c-rCh~|GMcUe|c~OQIbw6U20*b z*Bp6#2(#%$6|pS!qQdL)q|lkGsa|8Ay#`YRN& jWG6Wa(iK z)@21vhH6VPY(_}ijo^gcCnX)knmKzP3#bpsafU{x$ufnQWmpb(%vqW(j#R7sL1B+X z)V(;<`(M%!M;*D7rd?I+C}KNLD5VE4AFS;p;~2@+t;} P1V#0KkF%*Vjmc9&X8qQyj#?!3F|F~fZOj$za`%{OJC zm_%`C*^atoE<3S3`;y)}(ZlsJ8!a0*9g|&2V)1K_TtYSwO3&1CeQwwB-I6@==JUXt z;RyV@9RA6nN{#6!y-~XL(ca_9WxMXB*?d)aePZ<$|2YPN3C`3{IY=G?F{&eWW!j1Z zNk2;RG`GbI3-^F;f55RB=N-zs#e#ZYs>ItsS@$oWX9Ty@huU)2IZ+E3`BuPwELleO z5W=w%7=x}l@hH9421R7Db@0g)IR$|kSUNcXM33iiu{OG6zep+?RQ^BAy?H#8f4@II zQpq}HO_qsBSyHl;Fyv!PqEu71smL~=lqHS1M93bBQjAhbVUji5*q3Apk&%p1*_pA7 zi&^@;yYF+(ec$K4&-tG3{XO6B`TbFkF~+scb-iA%_v^X5=%2r4?65hEdz wr+{1)A0!bTX*SKRsY|=H@6TR32(n_ujJFOgI45+ZZA7C*TBz z AIVK1jo^ zZ7;Q5Uw;hfyE-v0%{1g4w3y0Zsq|C&-0<^st#|h#HcBbUmx6w#z;#+QM=%Il1x=A1 z?9GJ& #u9aHNC74ZqY9jJ(X7yeuk@9mC7Eo+SYsUr3^%5hvn zeQjUQ^!pB7H|ULBCd2kbarC5P)t}03&>{Ytef;_3jne_Y3)cVT);-q~es30;H}Jc9 z?%YEHPe9~hhAB6)iu~v5IoD_p)Kebx=gNCp=l52Pa(^FDw>Bw&1Fpb#(j>G{zF3Ii zicd5n*CpqFAwXTOGfPBprGr_2z&Sb74rS5TaX7)0Mg6eX2Szg%KF|Zwc0ay)t1#*P zQ2Ishd^26@sx#{PN+9TIf9)Ou;-Tyf
AsSuIt3!FtnEftU)gvX}TBe-nspT;sKY) z+^Mu3XDTUPJ^5R6c}`yts4+tTyo@cL#I=cN#saF@ a_n4dT)ezjFdi7daczldlr&c4_ zTB*|#Ls-9)vc*?i?ZM9L^*ZZb#;C4xw)nxi_40-Viftn#IjeZNS1}krVRx-6*tM7J zPuPOD?*Xi0qh7pyj#KN-_mTdu>)ugall#vGwUTZV#9;>Y4Ur#C+2l_xIT1Xxd%s8s z09<0|ddx;na%t5=!ZxRl!pZret;0>&A99GV#sEm&ZM7>#DCMo0i u6n%Gtz#_<7WU?Nb>`$OLSe$6OVtSRP{~Cd+Gg6jv%rRlJWp%4W-- zi6OlLX##ZS2cr#6Gs!3e=K>R&+@;BwWbq j2C{kYn%c(e|%WP8pC^ z;w!!{P0F51Zb>#TGS___k2u0(n=Mr1!8PfFDxn9LU_GwMwoo 71m3#F8LyIZ4Xu!s7Aa}!SYK3K}h>2 5Z0x_dl6CFLMn=>c zaN9)jR*XAFI`o%$`x5dt98YQBI?A$=yw_yvKY^I~u6yoaA(nltGW6)ET~TS2+Hl&p z;r_Hkfy)xCQ&-h~`o$Z`z+&SXzTJ(`HlKpr&- -mHGgpvyd1y&sX1m^!WSoR;i{-;1R9-3d|w+)O0__Kj^jtO+*^;WB$?G$~1)!-oA zC_%BgmxcKQ(Q(8dDa}1hyTBk@`?cw3WIPDTCU^x9lHCWnYXI8%9c2Z_kQ_l>@+zp^ zU20ieMR^oAlw1cBSERPFXBcSSJ)}`IY=_+fO`ZoeUoEu03^jzqrogPVlf+s2g&55F z*S|scJ6SA|n%F}Bg*_#~cY~od0Gc5HJN6o?i!4Uhiv7L0$W8QUZscPu3v>iXpo^k; z2feIL0XYNB2|?2oK%07En9a*EYXTHn+qw^GtKD32sRq=#qz|+} cklfbn$I{Fua=toEX>lvx79Atu8I@z@eyTU*%>a3vub~kg?8q_2KSXJ7Gt(j|< z+j>}NW_#TwLtJw=+>od#thzPAX1Hj^?TH#j@NR-vyLMr~4S+M^Lwin|iSxj}`~PVm zv4@VK*WuJP%w*Cm2);@xji{9gP{lrL4k0z6?f@uC)uH|}gZGc}f$TEnob!WMPlc-G z_u$bvu A%X_9r1hTg1P$?d> zBs#D8pnVg?BYf6p<
kO4@ln3)c=-&* vtgMuGp?0 zx2Yl(%@^=IARRw|O&h-nmC&P`6ZGf1UHZ2EF=Y4pC?Z>EDNBuMM572+IDGrDF}b4t zloq&v8LhJgEcDEJgm(rxeAd_Z$@jMQcA)+RXfvp9N^D~xFQT9fc9R$8ti0&ki)vq; z6zmpNE;L3YV_#zFHd`$~Z#kE@-vYH#hyxD+9d!rK&(d+8`X<_^(C2f9?5|wMdRdtS z@6Ki4Q$wzbtpgknML&g#%+jTMG~4h3v};zWmSr%f&UHxp^15OI<*?e#1J&ErZi5;W zF5_NLt&UR4dY=0qeO(pzs=jW0aC%=2VDB|iZd9JF@k~!k6*BM_3Ri2);iQ0z8SF M`0mU3rCa; 2!n*SC$ZA2lh; z!GejredFPcTf(#4)4K%Ucb((v41OCL_LfZf0{A}R0edDxw6d~$_^4#Im<89Gl!Tu7 z1)`-_ETF3kIMQdF7_Ig0wLNp+rkz!8ywsL?^v=Qr>j|T&t&J#zcaTGC1RL%1(#1u0 z?M2Mht}iXNV=ggJ?$C5v%DL%n>hxp#+ZuNQ5Z;LcR&{<0k)t96sq?{_t!GztcVrP4 zwJHQxjpb&RUuwo??SQN3j!juA^kS(JAN}!-RL zK@}xpOO0zIB!ZV1Ln1rI{6xI$zD(IGSd_ pv=-ZtqsOE1->Hfsf_*(pBn7QIOEQ-#)f*wxgFAwrq+b zQSW~wqlqy(yFhoP`Q~v-$4LT1Gg1}2osYD>-pEF_+J0GLMsPqN_88@F4InH!!-+8e zK3}ICBPMFU@SrrQ^2P$Z_xE#{H!WG|Q@yxWe(Jf^2hPNWoE4opEFE;0ilsPPb_8+g zP)lwpClT%b_{c+&Mm1k NcTnl zM;DE)+fW-3d=6{2%;TKeYB75H*fL6lyL$=~68I*!$bNC-DXH6oH3V8{;ulKXuI>9( z?`*M lk6y|zE{ zd|vb6F|U3z=E9Tl+uqUlMT~JS`f6y-YFsRP;6@=Ec#4k?E0RxuGC{;MYfs IrrSQ;_6j6No4oo#}NT~x3!t~Gl$D$e@7Y}&T9kA%iwXQQx(HK-uk?EAos=} zE0hno2_&qv%1#AO(JFuwam&-#Xo4WIAvsvySyi%!YO=#2nN@1?MIgEkP>u!Zl=hMZ z-bwnD p2noH&_*Mg~@e0x5-s!YB^-8$=2K^{JkFS9&3=F+{3528#Ys2Sa}c`S5r)XIvm zYyDX%J&_ smFdOJ@`@478LQDgBpsY<<&kKoN}{Vv zj?jVOrh7-LPVJX4p5;6CC;6oarUkXQ`SBD7=V%T#hDXmQ{Wx#5AH38awViRG=&>Wf zPHsS|h&-uoTN7F8b=Hb3z>eEc^+J$AA_A{bcu=o}4we_P4iZHu9~}4iEq$v!THR zGB?g)UM>3XfW^PDp+f!|{Qnh>_?u7m&-|0<4lX^ XW! z-%-AN)+8Gjh%VKO_gzp|36~0>EXb%59~bGc`qgwtEqZ-+ {PTwQj#-J*p@o>r^!JNAOcW(>BN81E6@ zaXO3D7$oXup_WiocnhJnJRghTJK+hI!v9Z*ra#zz1vX>dTX6a-mD0*@OVci&?7x4? zxbWE<7m5kwrSqUSIx1k#bclq(HlU*z 5g_IN60 zYN0VHX;h$Ab*Nw>BH)YWwlMT9FU~crG9I9;;aAv5ID4OtjM~AAudUKB_NBb23u=o% z*`&f2D`zId%E1BMQ9C+Y3WSuZ1DWo}ss22&0toJdUdtcOjQs(I^=-L>OFC4*edn7y z%tE`EJ;h(>^
2apGXSpNuEZ0O ybdCeR* zu@FW^DZ=CX@?LrA Cq Pi(d>{|phrPrst@jZ@IB&N zHJS<2XDii> w-H;4 zs++@F(gS8OeD-&IcFun>83*zW4#R_an_>Q*hC;CS!{>vc62DVjHs+RGzkSlr>{H>v z$(Bg3AlDqq`O!{h++Ei*HxDFy)X!kUoV&on!`XFAlNlXfyYq1M;Jk} ;r`_ca7|GvTO|Z-^{1Od|675YpC7HxLh8;ps=KQfpR8^WvIqW z>z-xM$7%DAG>CU^e7E`{SKPG0Ql{uDxO9UzMz?uZmSt3y5rbq0@~ax(Y&Z}<*cq}~ zzYvAqfe(6tH!rP_lFCqSSv;AzJzFjD(74XpWkze`FN6&Ga;A6VSb5{9_`avEwA{UZ zp3ToQx610N^z7hV<)m{ZoIr*=lRFub&|X#hUL#05-s(s$&)tbEVMM6##sk9*_x{*_ zcRydL^ wpu)e+4t=7iVzVK$>32Y8HY+kDT!8 z&zepC8Fu8zsAw=`llq}wN9~pecQ)lUu`Q$Oa-P@veS$CXy4(jSL{|uX02?>TXCyR3 zE_0m5ir4O(4&u+nqI6phxd#VE%)AZ5kzk-qmL_yUB~E1C71nAkeXjFe=M|?kh3}UT zUz<_^B3$j{?C9`^d*y?R2_ePzvI)D3vcb9Rd%-d+E5NDeCcM!SBWCNYHL^U|Cm4Zb zu*?>~Z=lN!l|F8oQ^JVUV0>*)wox(Zfaag514R%706%Wi=falv&tFwmX*pRd?l*ZK zcJ@j@Hu6i)@Ajy}S}yYxT&~xGil{`z>hKA_vXNS7&Dp#wcMNNNBYUHvFyR6~u*z&% z60M7*zQFfkZc@^ukLTR1fHFEoOEw8MYhBDn_AB&e{6bvi>}`CZ!yN-p1^-j<=z#9} zv|3G}peZQ$IKL46m|OqAQtKaxC?qmpds71AJa#{QeWHxX5GpRJ;~l6zXvcX?_88em zrC{M<+o&^#RC~j&8>5b%bh$Q$j3bKRgRhOr1rFP*aDywnmqS2}^B&k>j5m;x%YlPz z*F3WqQ kgc?S~(f$NvIFKun3B4;Utze)bk7R5*q!H zjeO}zdPE*80$QG=b<}b*pRF>Zk2-b )ZH z|1tnb{4~;rJLnx_-`;pU3+@A_c!v4( cf~#}j?$jC(@Gx}P^b5%J_Ld{(55+~!%kx6k$S zvS3L~ar%6_^ao-~+2mjC^RM^+zxA3|^Y393%Aehf{vt;T)1L<2Jptq~0HyFQE`i0y z{Rg1g%T(|Djpa;lom5*~{rflf@cb@0|F-abYjCC@H>z4E557I u#~mb>bbfUhZQ_`Zv-VNvN7ae?5#09W&0$8Q-`KY=G~~klw$xZ=Bpv58 z;3kxJ#8Ig|wN>cgH?oX2IRYil)d}vkUf39XiPlA#w)te4Hh(W$CDFK!G a`Zeb=z?^N@Rp?SS#UceZeINLHOL~ 5K7aE-An*}S(P5kNOy04Ao@yE)Yk2Gz4b%rNUP4_BaXHo|F zY=EI|_vxaH7N&BV^yxQyr8jQFcI7sqBG$=a5H A&ABRa+R4=*38FC3 s zPn}ZYlR;C~F8qON_&WVv2Meo~H|<^Q^pq<#ku(ry^y<%#|2RH$+)%B~NV1lpTcnci zhm!$_Uun{P!VR8oya(N8u*omlp*uW(-sX8mzVMc0N8G+!5!i&i^m1k EwpiFqGtnN9X8#+@C-ARx)DW+Dk27W(=d!$_;()`^s$0~5)^r7$aH%Tvy zfaw`Z2pSXX8>DHpa|iD{*OIW`t#mTnN)AZIZRzCM9D0%^>?a=wJss}2s=-kHn7sGl zR{eRMC6(EWx#V!dA+{-fUtEyJeDq~)Yrf8!ty}r0>PSTdML4|)C>do+2kVD&s`c-m z6G=gwadI`dp%cSW!*6*^U5!+#9DLl(kStij9{*bW_OP_!B=0okcer2|a7Zgq!su3l ziYJKp1TiN$0O?=<`0 rwff>XgzcJS`h@Z3+16LATL3ELc$R zmIhY~vyM)_d+4gD)35O~FhY*U%d*u3$Wr1xu`*m)IJzMPCff}7{CF32aMw1~6ohpB zM1dc?I!3-@r0n@yRV?jQ tM?HdyZ?_+Y{$S(5ma5+g$DL{uzOG@uEkJ zbv>ZJsoQ~x(7tw8Jx8u6&DVCu(+lWB-d}Qaa?{`@*SV{v{xnFXofBKyC8B{Rg#A zV)fV 93$4-EgbQ=38=Pxfwpc#BO2mIF!$a-PLGZ0N`0<|;;Q7u^^|Iyz7>@m?6 zaG6ou4UJp{!nNOqa@>tc<*!J0p|QNu?)6P(YZ>UjyrS*-{tL0h0Ly!I^#9Q2fi%aI zp}IsfOql!p avwyFh PO){KO@~KAB{AsYEu+yvT?V|c~jJ0afl$I z6V!UxL8t~4MWkseBfKKU7prn}K1hBKFOv}a#`TuptD(kFPnxBN*^P@`XQC{o>}|9I z83w(XuOgJP>g+b&$1Gt02X`2?g9^{Q3bq~7yX(8mlG_j%d%DcE?D)m^t)+w-ZUa_s zA3>Kb))(L$NFTwyeIz+?tplHn0Olg@vFu?^p3zqBfV>WT4^+TenpK~)HH#H*ZvC(g zU!U2^H&Cn3SZ&Z8Uacd5xMsN8 23w *&5>FYCm9jrnFV4fVFuR_$wdC^^g99(m z<5Fc3j&9%Pk(_94$)_}EVZ2GA1MY5iz=l^JglInQCxu_cUmi*FW>;}ijrQU%ah?*i zXSn+-2IhULr7mFCfnb?9PB;MbEvZubm}jZv>lFca80)+_cUy6v6( z+TD2FLEjrJL*f2!CW04^<=6QeMuy4&Pbts0@Hm}xoDrIT`{m_r$I)>ii0#S1`1k1~ zD8_!^F9N>rnNlARR~VCr{_lb>13+drrTG9>t2r9mVPN`ClZM5 zFLS?=7q5?QCX}OkYnwUGv#W^A8v~Iq{k8L~UHd+e+My(98^H+g0KcJj%Mat#2QDNv zymW5+ +9Vv>5hBSyDX;~1m$>$%~09Cdg>*zCHiav7_cB7*Ug4aycG!z!`^Nh~ec zVUOjKYne>z)zFy c~Hz(3u1e!D@YX3`(q4=PN!Get(5|K4O;1^nYq4<|=v0;>0pfTQDqx9iFL2 zLW}w3{%gt=+bOu^)bXza4E7F2L|2_cpRaxvSp)x+<%ZwF@QBeNBH1pm&*IECiBUzx zJokHLAv}pKwLy%eCcqCH4~q67NLm1`i0Klu{^reVQuA3_y0r)5-NOtUx%>qZ4eXs( z54ZX4G;#r^9#hzy9S?Fw&pDlM-5dGR+<4}*m7H1d!t4tD88QMAyn)@QfJtl7D4hA4 zV!J}}1B!xC32w8z9z&!mDBqFoJb1;m!lz;T!z H2Yo3-KR^(OiGQ+NKOwi5w2A~n8*Ki~%k8QI ziXFYceO5(5jN>7ibrOH@Z*gI1ytT$_Ux5)}`~y&1SktiUn@!e;bkg%$U8r4q0GfHo z4OmOYM!}DpDrO~h#p$I^_6f69Bg6{WwQ;+UugHtzXOwrp@bN26UeRRh0Q&5tG~Z9C zAqn=ziUQ ny;7>@j8Yauv8B$r{gqym@dM`!`2}qW9M-gH-N@dIY){Yu>SFP|R|}QB>fnx(KcF zVUyN~r@%e=Z-)YoBkBc1lf%1{-3? |oyRT $KXDJwGZAr =yXiyiexe! !MUuQJcp^u8 hq7i zR_ZriwmNck=wc^y6q2nK491Nw+#arXQMy+UpQ2uMfAfzM79ngOa1{60M~Gu8O%OjG z*K@I{CE)yy1Myo<^E|=Krq6Q5-(c^e1q_bRwz!K~8$PkwCt~Se4OCg8Xtro8H6v$# zWonr1`ctkB+)+U2mKT4=$wQBwvrv=M>vHS*c2!1BZGAYMW6u$Ww7DRGrP9$Wpv$oi ztam;MYQoC7^;QKt9~D0Dcvi&enKvqBlIpNwSyC|1SO-Zs*ugyI+w@5_NxSOXi7hp` zHlW=VK;rn@epj7CNH{G1JfdbrQa)t4Ei>s|d`7X$F4iBxpYVM2$IgS&Wk2~9`9?m4 zWh2|VrE!#`ISk8f7(V;WG+-=A;H&8YJO5k*U5gW+S(!OrXEWp<`8@xUo%rqZ2E{}K z?+bz&RKFL$do_d{TdRmo(se%hooAR>waaxQ2ghu*t4=!c_I>~EUkHqk*oV zV~nee{MMCphi=is7QX(9#jnJhbf@_8Yu_&F~{lJ z1f8n);atPBdtTl>(ki2>c6*UGeg`*}?CmvC4j(SC_S^LbO{H O#}v53_U4g2H$ zw|(^IWwP}jKF73j7Hyo}&un@~6|vHRLA2TU`m>Iqg~@=UT~)?pRJ#0?ctEV_<2=Ky z 61( %GpW%s6OEZ5X)43ZC#yE_o%(-T1S@?+$V66@m)PXTylR{W0iT*w={(0X@P? zG7s4oeV40D*PKJY_% S(zE zrn^>(VbPNG1v6gzfJ&CeAzw}EzsY>OsykM(Q{f4)`@d^&`StLWyj)FX)|7@o%dz5$ z6QMDRWGToEN;1*{njvqZ*d#%XfwO&9e^aYjc2z(@K-^XOP%|Np+lv)cf#>LH+kG@M zS_3MG{zrBPy+Suw6hQi;2 r-0+jNR5_^vzTddY0Bku>ILIT9|L&;Tb}w`jhBK 6!I z?dKacCxtRDf7kP_Ij*H17J4id+d%@sS;vfJNO71dtJQqpUphQwP*NJZXs?)}#V?cO zzyS;FaCf#g0N$WGdX?RYg&y~3c=owEM!CBgSH~9_-RD`qrqd)j=~j_^$)vwX0DbUW z0 uFGGV1p0-NaXpU(1I)XnRj~e?^b%CT9Y|%@nFc zlP%8Mx+C#*<&2k$e0iE#!XVzeL*@ZO{9@OpTTmS2PNWDjkN5ai-yB1VW;(QdQ?Z&$ zT+6%@Ya#P+S)8W@bbk-TpvzEAUx{mh>Aw&b?bvt3lJtf+WE`-O*MS5_viE&@BvI6M zAfXZUfUpyMUMb+w$^zwjYsQOS@vKnvjW9q&Zu>!Y;3oK95*zN|y^$f+sj|o^CII9FXTsi!e?IeF%F(IalJ*V7taSS@SS0=3}}AmpiQ+;c^JO+ z5^i0=0%JVwFO1OtyH(x){`|K8XR3ul*Oq8YdC|{Z)jWNK4owQr)DNE{ {* z(cUDbtk0l1BNb4i%mvcLv(s89GW`)>(G{SDiXIXjXP#ilG4pVAmzDwROx;r|yCxLA zq_WSGKJCel+BCF5-TTNM1mOW229i6?0u2Mq_`v%IuEK!_QWJlYA#(YRq%~F&cU_#P zz{Qk71a^_Nn_+XTbTDPgM;mtDTD9EqL|_@3o0GlHtN>D Kn@|JA*aeDlRaF->MR6NSa7e3xE17rhVb;;X^qXuuaH zmw6M;_0S7rV}jELg0f#_Sn!x;Z5GjAGL}!J_l;reM(>h^XVLGpCwG^pY~`1|cdg6T zrIeA>f*xWuLGOOPB52|jZ`#|GLb{71R%$;;gI@=nP(ntB@teu=s<7Cb+!%vhf%v9U zn?cb{Or?8jIKaLXhrBeCDmP6u i|dnRUKt5He4x|Xlmg)h?wGZ1Xm zfm#hhj|&fnh_|PY+R^dMlU{GF6V4@<>^0CG^ s^|4vT| zv#E`;xO?KzdIpO{;|tTq$_1OArWcG 6 zbE9OitofwB-o~_1jp^Fpx4Y{r$O&wSp?U1$!e9Ry^cw!^4@q|1fYt2(%O9O!8`4Nf zxNvB}!0?vb@`17e&n{!52R)cSc0VUc-MDeo`xqn0#7z8*_h@ZrMj9!L;XymW?DhSLl@g13cyA)cVCbkVW1u!RO0ob_H2g|L@UDR3S zN<(cw)1Q-<(+Ia{(d?M%kk%!m-#+o{&$(xQ#}G8{Z}J)>u9Inf`ctj=WU7|r{g`Ci zQH-20fk xHAD?W G0Xh)G@2SI%0;RoEIh?)pvkqTWe;!9-HjLGBd{@}^t0&j498%H4q8_XqO_(r z$jTr&Uh?pGGPdl@S{^_aEkCOlK<=4=ErA 0cS4HX@S0pE5q{)KFQ+nVNG_I&H#J_wik?7&3L4W0(Je#u7m-6 3rpGEI63|Fu2*dJw=_ f8S#g zfA7$QHV;RAu$x@U$4 `DV#EJQjbz_$z$h)$Z1ivDB!pD zJr)f3tho#tAv?m*dmw5Y8KOZPJb3b+>JaD{>MsO)ThIa 5?R3^&VMKlX5lfvp;#-TxLq;-ezTUY%9F@t<9S3BI+V12-XzJU+ zgQLMoW6VbfB_j8IZ++TE8b(L-SoqP)8;Y6`CvzQdfMvp^Fio}@V?LTb+z`Z7AN+aF zC!ZE1lgO);rvS-fX!_hQs8aIWLE6kD TVv}CmRmwa&uEIXCG$+*?S z)|=JJd_f0aI27)(`_qc2=$W+7b?%6FtOyEO38JQ~-*B*KLQ70th2E6jdNnv%2sEW6 zi24+Ts#Rf&mwi%#Z@tdcDg2(`)(~;8J7S=A02ZVrc(h;zwQaZImN?JW=XdrV-ri37 zs0piruj6L0AGgXBd_RMe6SJU{SF&h?R_g5d^jH`0e=snOsE8fivDI>cS4w5hIp^FH zqTX(GSVF-n-7RR~#R8k?#ndWzgD#Zl_=S66M$Yf&97gGOqUf>AYOqn4MM%Nr!0&cE z5S8&<18qDk3+N!7IfYzhkd4GX-_R7s3((n=(yli`N$Q`rv0k37+lcbT(H?_VQ~1;E ziMc|no_w85NaJAAaat_}cy0S2qeqLI$|#|oBxY^Z)#qkHM;y!!x9m4D#L>oC{@j5q zP{|&r6B{2-slWKaUvl b6R#*7sQv zUgTrL1ju~z9yUqk!ce?V>vlkK`e8e3&GLgIXvA0&L6m*=&T#N!TjWoJ=%2fdwt#t~ zNn8On4+e9*;izAfRJTvIMiuA1gz4r(^R{I;YK?oZ=4K!oDu_ya_7!X7#=kg$k2u^+ z=;Zc$pm|psXM9K3!Fq9m%vA3M)&nw~DreCfO3z;@sOP|zpNp4nu?FV`XP@R0KI>vu zbD6jMf7F&AASzkLKE$&y?L@j|_nKt2?Fy*C9 j!B0vFUF}D}Tc)3(}U8P>8wRq4{Mo#>|%p{J{)yF+0b8Q7Qa!pB-K1MXoCImql zY5=AIn~s7THf4g#&IN5)v@GOhJKRe3&HHTxxDD>Ie?4-a-|xq68tN%%jZ4kBvQEO+ znZb0M&ZUnjxP!X{J^clx0PBB+1o$>XNTxd@XpV1u4ebdfs;LbdbZR`ve-UjyDoybh zpn}T`I3`uJZWJ6rO^l&+#}*&-4wA$fEFKaFxtypr=9fe)&rMh%-W9_ua-Nj5elETH zq?vhlJL>TyZh=U_U?Cp1_`rNg@W99^ie>W2qme?n* K2#_!7nb0}#% zlmqA+JBFdlaFw-s>e0D$pC^*+nGVo#3(td3cxFf&$>7xE_nVyAg*uLzSh!ss3K}F7 zmMu6JTVWSZN&WcP)aP;K%A-n|*?`F%K{(8IqfgWUbz^iQ+e)?7&$EIjQR}0~r?pu2 z6+kDN(_~#E^j6k%mD9~B &9x?xl@ScaL@ z>+V_FY2=7=9J>1SB_WJw&LtWIkkf}@&GCqtd^4az&8Ypvsp85{5_CC41M7g-#!359 zy>vbvH*UM^a+nlHrpD%=HXB?u)VWJuwg=zeFGRB+-xOD$zPWg;#%AL^C&xBRgT>dD z930~fmp^rU#Iyk=iN8jNobEN_yt{mMxwcF^e!DKf>F5vhF`BY96-#2@7+fl)zdqXo z>XWCZhP>Ej0oS*NRtrhGb|N72(?C<yX31C-Qd`l9jV&xA_Gg z32tD(WBG5N=-d0xpn-qKZsS3kVju1WK0+F)+~#ZSH_Py{&RT3DnZB4O)&Uwb4f~CJ zulLO)0Yirqt;hamw(s9e4-x_^ll5PSL>fSv7D)-jMH?OB`cHHw!3{Ij+VYIA(b+AT zIFd+qV1HZ^ +r|Ip-|U*f4mons0ZFT;YI{lX=*v;UxAHF@W#{#w`v-?s zIJRTy?3k&LjwO%9^ceEup*M@{d%(qhb)qhkfQRajm8jJ~%)YgG)t2Qe z02M;uEoc>ouh Bb&4*cDw>x5vXg}dqt1SE8!iTc%x!DU=;>)`1m6b~*r z)33M6t8>B#hSM&h3_{k-Sf_hH+?=ZPr9C3^g2f@2`SfVCH}dv3rQVC53-FGY;#4=g zX)QjQ4bDdT_xsJ2RPFVf|EgpcUu1|N{mfxnhx G zw!?4g_0i#^YCd`cLuc+fCgEvJ0rslJtmSrefd^Eti*~Q^XpoeGqztZmzQtwaC#cHm zm#6P Ujg@+T7_ xZ^4Do)}qoHT^Lh8b5oh%%syCN&PhOD zdHS?*%ezmS-z?|u6;HS&l=`2)YZ$tRcm32qf@?@q`rpQUm*M&JWc7>W0~uUj0~>9K zKJo&8r<;QM+2OH}#4G|yWjP7#u}y!F`yM!!1m<~>7e&Bgw$O_G8Xz_dKDM}`^u)SY~kpfjzfk8Lz0{2V;OZM}ME`G5}L98|xDeNnb2IHImAPN>rU!?6vw+ARD* z0kqnZp$*baq>j(-KbDO8ybQe26wfwPUN*7;3oE%NxZYx*T0=%?F@+Cx1^qFirGQ&) zy~9SPdFO`;Fi8;GNt~@3Z{;MAy@ 8B{6gi|I+ib+mFYnJ+eXCJg^6&+_bL*4Xa|JG?x3%(exh_QEGTpS6B~NXQ6g! zP(925cy$sqM`e&PgIGzx^x yRGVLg1r zNuo5ES49!sMMFnZ_7}a)d}wYkE@^BatE)D#KpAYnmPI|Fm-$$aA3s(pU@Nl3OjZ!C z@L402vUahwxu4KH`)Vb;G<*uac%3p8&A(TS_;AKpi7|tH0wx|~DG?@&(Wutj)gm4F zUPf+^XGKihAMbVvZ7|`}=2-_lgN-9K8Gx&Nx<@55PLFt~ohgXTK$V&&coY(bzRAC< zF=nhqzBRvz#6AbwNgHzv=f3vl(_4%_U2B*?HBMWRy0H|k)2Oo6==%-vLFkXx9t*c* z3HNzeLt||z!hE)|2O=$Z@zPIXqd^a|>X2;{3Nh-#nZ<4A;|^oyf7b##aj5li6gOOr zA;lHwR8>hZ5Za-fs)(+3Od7ofBya`t+q0~bBF_3-`a{LfP-{Y%anvj*8dWmKksu)f zzZ??@mKpU3rWUr!b!Z`LmmNT$=N^(8i9@L^fClNo@`Yb_w47>uZl #O2H zU@?yRWC)>wqdIx*5GnE(VqTM*aE#N~!&Su_Fq9i8o(?Movz_tket=M^033^dB%nQ$ zqIjNK@tggKb0e%60+rYZaWmBR^eMRM63V%;4s 5BrhI7QAXTG0v4HGDPMSE$7 (r`zx`qUX*qjIc>$$+PCYuIZsq{Ff?PT6uB)n}rFZaFz^& z43@Dg>mA$L=;Ni@61!h~qoLZzYH5ZP)#5fA?KL)sY;p)KEq$#TiK%Ntc;uFbTqeaB zXpVD`cF~O?cl7W3h_$rrs@Twx2)xX>7$8@-O(2VMW!Tpk(J^efu{O31q+V>^p=+D= zMxlPY#5zFikXtzU(Bz}~H8hNg0ArDon7cW7E6L+F(kG&6QeXBxvQ4XXO;bu&M=M}U z^`%< R39p(gD!*o)IBU=}{*O7f~j^##~y{X*FFtDJL9l&gx+ zvmMJv4nt%3QAx keH}ifJM`jgpQy7g}C$beYKG%}obc-pSr5ia%Y!KlqMG#y7AhWkX@f{#h z?{+j@73B|W%_S;BW~FQ@kja j2QVwS0*ZchfgN!?nYA?Z@@5bFtjSpZ83~K8$R$ zM%B58p)*H^OE3LS %9?bek109Py-hPjtfIF)eKu<<;U<~NL8=oSNWspt` zu0VIVs(l6;Y9?>KemS027%lWJdGVeZq$97$$pVUo4h;eB(m96tQ|0*mRmTgC+;ipq z3C8 ?(#FgfSfs9>U_{ ! zqDaX4xwGT8SrnV{-O|#6dbMgZB-jHr%;HAXSa5%V8AjyMEs)1T1aag1ieNYIxuL1W zY0X+!>3a9ouPrrTk+p8iW`q7fs0ISs@5;Q&AwQf0XGyY~;6845F24=xCvdtY6HN
u9Gc-87sf7O^W&^ z+{Z@c>>I|33-Fz|deHf^g?Q2Na7!ostjH5)R{xM~EddPV#woU|HUu96n7?gT3kr`f zeJUV=ag?imA(Fg+9DMEnWADx5p=|rV@ezf>$i7ddP`0upg-JqENFqz7LYBFZ5HV&% z*`+878Imo_WG~4iTa?H)Su%`$pRtT#mY$>gx|go*?{z=-bANxY=lA=)Uf)0DoXMPX zF2{KspXI&0p>x+%H>%##w~*60CoikRnh6?Dg)k5NgUItwsm2d#1^aRWHK(SE0$Y$D z#ciXJ+yxsB=~jGcHeYnS_F?z!F|j#YVzpL1vHv@SC44uJx>uwIovl2+(~t@&+^=+< zt3?;NfEeJU`gEeTZ1oj~q_r-Td8 i9lxF6G$hR|0bKku1 zG&a4mcE7k@j@5P`LJk;B&wodVtX8z{bTN>OZyN&ZRdR+FrKKrhK$0|>1#;}ss>}hS zgzTa(4(5`N$5)=M%2uMf$A}{69(Wlp!7t53(}=P)hdQ}s(&%9s&W;KfGNB| }A13y2uYqB6 ORdso0e!_~9RtjM#hdVZt+}`KKc-%$Xq7 zp0F5fyZHtQn}&&(@xXKlF$NjPF(uT~D1`z>5AY}1zfn#5GMUGqn78AbW4HdFy`9hv z|B7XuykyU+YgyK$K0;lg3m^2}GW+T{e#R*`1X`d;4MC4KU=}srLchKWX0~DTW Ks{QQ9i9uoOCvhPR6IdKF +eF;?D5s{e2L!U8Ipq}?GWdmD-X|!m?PtAc>hz*#) z7lbFKLD3z)Dwf0oT*)8mV-eO}nCV0EO#1I~Yy2(XxyPCUr5MB{j3T7wy#c~0vM9^A zvBG8$L2er`XKvg39fHRIwX@Mj71&K4@a1R#Vq5+Bdm|Z!JZUU6p0O3km{F94sRV{v z6^QNiqv1 k6pt8Gy b~Z5Tqtv%~u7YbOw`<+4gXQZU75s&NKKG06Lrj0==-Otab@( zQv$?rOm)X`mmWXmm6~R?Wylc--&tS$OPht_(ZMBdeR4G^zOzfS9k$NpCHWDdvb)sC z9xuGPro%tf*y*q K**gQUpNN(4u4j$CqTkurD2F7by4XSbpj z==;&lj-t$zVqE;a{LKmGYO(C4vobAgZ?2!pgr=mhxOvI(Rtl7x6(EK=YZ!=K-~>5J zAz3sWEjlNoLaxKV@USaM5l!Pb|H@fOw{ShI+&|<%hkdt~#v5AWeW0FyzMBIu{^a2! zkFa7c1U=X=Lzy5)ES&Cc`&4x6V$WRwQ?3OdFzCjfIxxC%wwTpzxC|C2x;_a0t|K 9^Bxx~3VDAV)$+t(A zL@#FbKkwL^bZ{OjMVKMZw~p;Vh%>~=- X{W}b*L-c&{rs~aPrB7f`C5k2}8CQ zy&v5{IOujr-1|2b+1I;`%u}GBh;6mt$`{km(2kmiZw9>Y5Srzm35tv$T|7K=B(8Lc zP>il5UL5ea>3b1zQm*=y(Y=#iaYYC9H)9x|f2a&{Gy?K2R`4SU!!>I@vN3VB(ay*| zi3Rv-S*(6cMRh1+H#yj@TSM8J*W9+}vR_rix5jw<5Fc`7jK#e(*ry RxZoZO2^!k zM^0I4FF|&^$$aqEBoq3hbzB^1dcKzC?Lwj}*txB?ULE3hCimlfn9*=Ic%+OhO)%4b z7 NH^X!P& z-g}Q`;N;Wrja{O!HPAsRi<$im+^RJE_F^5*e45qJt<>BcK|{G*C%NCW%yu}%Y^qY7 zm`^o2`f=|%MxLskPr492v7*y2c;)k b1hs+#7rxNn(b?9kYF zz2vKATgMO1cXlK0rCAS(|X!gCzDPo1qd?dMn8dGjW*_VFZ >I9kHqlK zN^CE8qXt|*Ugk96dP0BKswPtu+>Ygwm_=cERw!}|FAmCyXffm_F>=kDj|hV{Wtm9T zo!RMS>v$;4 6Cs@_6Wm`o!r6V21}T{>= EJMvUjrXQB9L;YER)4UQ=mY1T=f+%gVk1+8l9Rjvy|FhEWLGqKCgxEE+T;RfIX zTBfgiSv%&ElcOBX%Z^>;>Oc*MCGP= zG(#7st`eVLA7qob=lWMh;fhuZk!*^C&=MNg9ruwDQP;@fLscu%&+Q}3>Fo#u7T`^k z-6hPg1P27b<4PE3RGju#kq+MW9l8u)JufN%cRXS!1gs04z_MfPJER55%iy8~2amz{ zPjfzyImfo~B WCHO+V zk{--7&I7+b3I{WyA?r|}w>d43Tz;`jqrY!P#q;?g4cF_}27JO15r|S~R2_`5lNL>a z-$lr1AOpSRUk!R{_FUd2-uh7!y~vQDUHuN>X6(E&GUIRSpX4IY>?LPWL=Ogr*Jxc< zGlC1PBZ}{<_~5A-(6Q-JD6T%&0F*w@zQxVI_4TSgCl~hRC2x95XD_cHf|;7ubbs1W zG}7c%?{Pl7%hyk@^m-{8;CT#|bl+}|GU?e qmA5@yZhj=_>f2zd7&E_? zeGCyE
wp%(r;FwF#evTq@A@$=~ES}#3It|s)A zz(E%G74nh;MQL~!7&CI@`%h!ViubgQr( (rA05Q{j5orFtn&LqiD6-T) zF!(ab*$aQGw9_UDQ!mVi-a#AMoZE?+&c$Wb?gz8uD9tI0hH&_@mex=-8`PdX04gkJ z#aFHZdH`=+3>DVTPCfet?~LP`(-Zts`NaS6T5M&F`@Z9Mw--1-xB<$wK$D(dv}#H( zc)X{Dqd2Mit{fgq{E9!FMw(hkB6Wy2=CyW?3v8RedD ikGEK7TNX3W@z z1?LQH<}BtF`r+vBx+n_lcRGPEJRGwoJWSXM0@J^0qh#{AHnAilo9blVkQvKjmJ2tN zr43P_-oR7(49qFkhz~Zst2P~zL&~8oRu_D%Hl9DK4n`$pwgqOxZinaHeL+gYpY3=E zA5GRkY;OO!vHc%gn{_eEc#@1WAT5uEEHOIHv-ZdU2#7v(5iyPeNAUM=IQP>w_%`s8 ze+3lWusfD8AkW}mNdU~R8vvg+0j0Ubi?YJXSSLV|@Yk(6+_MB) Wl%(*AV{0h5<|5 z$q-~qMfm&K|JcM8PG_@rPXfe}o+yZdKLH)*DcCAMYl3C`0Hr}QcOsLJ1)eIy
^YI%vN{gbGIm`Du*j3pAP}m3I0p0ca9<; zyLJ<+)AJbK^}4n$#`&@Rsmzv#3+Xn~d(Rp3Acal~^IvBBYW2{94a~4zu$TBda5r!1 zX_oHW-pMaZe&OPX-TFgLmxrbZ!s{VIY#o8F1{mn{;Q^%-^P8TX@{hkm0z(fWcs$@Q zMek}t Jp;1D&RU|pe5k9 zdeXyfmf9Q=6xCQvIj#W_uXWUODqd;8WVJx&t8;YKLGK&dI7FwPy(-@{wMGv6%HB3J zUQ6m}VYghUo;?$cTBn2vM1_RpQ;&Y7O7*@4esOa#DeUQu;P)`HDRfI 3;E;rVUt9CFhRA+5?(l+|!QSU|M@XlWiE5t}s 3v^>b$ed>k|j6>k;ET63_+1>m|jA&hw% z1&o#%8iImtR3;&j$>g<_DiZaBmf)IpQO8{(`7ACXgZ)i#dw@k!W0}~nrj{G`*#>d3 zmeWi*P?r&BV)0j@J5X#tLZy|Hee$(Q)|YZcErcQ3kjpkbz*0pl(3DgiQKF+tniE^{ zRN?&gAOK=)K(l!U&glUGPBvNE5^rh00BcG~^{
z@QgejXuqX&qb@T_hx8?#Rk^8X2nmb?T-ftxX>8=?meJftLF?2$v&DV)uiRq kS$ozc|Da&NZ !MLUHpm5*MQS44a<8{K|@eXina-7#h!-U$aq zcT3d87b5K%H=W$*H;az*584N43sXJ8z@s6K$2Ld^XGC&DSd~Zb;R(7Qvkh|^SSx}$ z{oH7EGm#%FWb8M<_naP=WS==a4|3vlT<1~HG{la$&a=6bZJMG UB$i1&x8v9h^) m0TV?>Y@6fUz{ciAbi w^)D@5M~yr?=9ge-(0 Rq+Dbv@sp1+5lqeQxU}gj3=MtIFD3T%f z=GD<}%%q|RAFqeL1O?Kah%8Uf9rkI~7FQ2g;eOj0XSE8PJhhqu02cZl8*8@`7 9ykN?7HbAdKlzw ;arY8-u- zSnuV$Q2B9-`aF`F`^q~K57kj8e{8r S7&|5 T1I zJ4}Z#aOT_yqQe+M*{s_H%=!mV*3|=5&aDbyef1|Ym*LI$e8lg6S$NF)b!WvfZhu|d zXO&fV1eW33A(Nqc0nGSrk`)G0v6WUS*+jbROh56efzL=CagLxq3KOCQG}}oXUBBx^ zdfT0=RG=iUa5`N|V&*SuO dtKBmlW-&^9Z|9rMO`2#_qBJwx0Hf`@5 z2)axsT4M1**zKY8?M10~?-Z9Ed;Ih*djb42UI*@ph;>veBly9?WgxFaYH(3EKR8b* zip=XB^i8+9gSyCkTDO<=nZ*GYM+uS&2btz37g8sOCrKvR_e-bq%@o+zvYShh1R0T@ ztK?eJpp{$Nhx_sMh|-oIniCaG!MB)V;!`kCmI5tC*JEf<2N;CMUW2lS1=;jswxIVm zQO=K6Js~|5doXr!5+F%lWWwhV8o bb{I-H! zRW|)Vg70w=l|Sq6Y@R>IEWx`fdh2yzWZd1AZdsp)?~df~!#%=}WYi3&kl-RHcY>ek z!#6MAQq)^{zNBYoMPJun1%iABerOi`$&cFFQ&+Q2jhV``mM&of{HDjG*kU&J3{r<_ z+QFn8a%D+o*(t;o^oj8FARAFIY}hD=Uq45wN1lH9pm-j4EpkC{|G 1?R262+_*TV@PWv`}gvM&Zpo|q)^?lh9E@5;#flCfM>e9GAVN9 zaQsk$!?iaD!Ul$SoDvxR#^KWp*}e_3CGYPt(c1}!tpj4qmbs=7#ug20!goui<(3Ry zcWYct7C4h*um`fuIJ3#G$Aa@CehX-_BcXRwCyPn+8Q|dyDpyM7hfN0fjMzRa&K~#& zgASSoN|qfPvZ+|6U+e~9TpC@6?!_(}Yr;2YL|1Shjxy5z+GY7j`@PEoD%P}y@%KNm z@}S+gKek5f>4G3}h%LkrzOsw}3T`OSo7tR_MTbE#ug|YCPXNh+->Bf 5Ed-&T7EwT*T)W1pT%xXDF- zwZYmC &{Leo|7Ht<^bA~(e0#+(&Zx?G {tabGt59 zNV+IwCS@ESA(XnOdL}1a+4dx_d3SY{VZ6}I3u40P-_PyeSEi9=ZP)q^ksB+(5ZZC9 zc;WT8sGZ=Ell&_{b&~KMViW@bot|IZl3!sW@XNd1U~6OE0F&GI=8xC(d(Xeli1)H3 zb=tIJ#ecA??_fE8bHO&HmMP8ZS)Gtdp6BBYf#&Z`{OZsm%11eZC^#R(I7kNNUDsx! z5GvpW?G1@lwld@E_}Q}e`SoGMo=abtKv^TUy3T*I(uVPb(lf6}KG zr)ERc^MQ^9A|+ bDKima7NVGVA(@O bnM=;t z99?cae)G)=*I2=aEqH4dc*5&Xp#@MEkRh^&SC n!A*DbutHchScjd+4zDev+ zbHTWX6Jk!}!d^3?gNtoP@ zX)^`ceW?TH0E7wuU1}!%sO8QFKxRWE!UsoW8V2-E34HLw?9}OsFLlsz9I^@KU8tCq z(PrBgs(kL;#urTBxhX^DD1esy&x`-L2LIQ`f#oeQ0xh C7-FhKQq7r#_kJ!+a(8*A(=^u;7p8}IUenYY>ZL$G8rd*5l5s`0@ znYs1Z-<52C2f&oTNqkR&ivwYoy8MW=&D!!*g)*O&vioqmc?B@Zth~ck$S+9K1sM9T z$;8GTz;qQ>afmq+aF@RdbMrc95R**frk_I{qHT=QLu?u(5|uy2un&G{OWY>*Sya0@ z$hxIPHI&H1Qloi{nNix~c!VW?Tii0g-i}criYoyqkF$Ba)?vgp#)W;|C)-AvI=5WB z3lTU1iatFF%?SfLMhW#$zK&vAwPn1F=DsV|)(`K)-`q!T&}qH&OF;ASWvv~s0W$RT zad~!%W!LH@9grpa c(N~kF7D_m4r!#h@Hf3nb3y<2A6v_ggiwqndM<%IcG zK#O#ZR4%UF?aHyP6yscD!Tq3=@D^e~mt-hYRO|7fdNO4BSX=w^ lq5n(JxuxGH2V>)iASkZ0H7ow~AWo6Sf ~gr!MY0%{f3hAdnf&& 1DIKilC-7CvPR<$6U*L9Ie|jy&*@%gh zk)madzGkSCE{fQ@(;xBZOLMiOuQ7a?_x$j8Suz!rjyp0__Gu>` 7PR0Q^SD@E-2pwrzE@DoNwUvz*f2b1RbPow! zy@LUSbBCUw+kh?|wy-}lelex2jg5nS#u3;x((9=~4|*3WK3FciRuQ`PW*0;Z*jL#7 zHP)1U^vOpj{6zu$J}z3*d%&qFS>kE$Lu-+yT@UUHrjJP33~IqCfd3TFC|o|@h+T&D zz~?|Je3X&Wq_Zv>7SDM%e=K;ID7%K+p{68v)W1(9^-*Fa%e50h?m?@9v^S)B&X}PI z0}1&w%yX0Q$;xJoI5!MpCw&11`~x$AsSk?Mzbl&^0}@%rpo_7|If$;nG@PU1S+}Xg zVpNkM>>r T1(X{J76;{|b{eMX(Vlh`S8$12IH|eksgn