From 2b35eea6b6be70b2a55daa09681a138389106e66 Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Thu, 21 Nov 2024 15:50:03 -0800 Subject: [PATCH 1/3] Add blog post "Supercharging Training using float8 and FSDP2" Signed-off-by: Chris Abraham --- .../2024-11-21-training-using-float8-fsdp2.md | 243 ++++++++++++++++++ .../training-using-float8-fsdp2/fg1.png | Bin 0 -> 48730 bytes .../training-using-float8-fsdp2/fg2.png | Bin 0 -> 48750 bytes 3 files changed, 243 insertions(+) create mode 100644 _posts/2024-11-21-training-using-float8-fsdp2.md create mode 100644 assets/images/training-using-float8-fsdp2/fg1.png create mode 100644 assets/images/training-using-float8-fsdp2/fg2.png diff --git a/_posts/2024-11-21-training-using-float8-fsdp2.md b/_posts/2024-11-21-training-using-float8-fsdp2.md new file mode 100644 index 000000000000..524af13edcf7 --- /dev/null +++ b/_posts/2024-11-21-training-using-float8-fsdp2.md @@ -0,0 +1,243 @@ +--- +layout: blog_detail +title: "Supercharging Training using float8 and FSDP2" +author: "IBM: Tuan Hoang Trong, Alexei Karve, Yan Koyfman, Linsong Chu, Divya Kumari, Shweta Salaria, Robert Walkup, Praneet Adusumilli, Nirmit Desai, Raghu Ganti, Seetharami Seelam, Meta: Less Wright, Wei Feng, Vasiliy Kuznetsov, Driss Guesseous" +--- + +In this blog, we will demonstrate how we achieve up to **50% throughput speedup** while achieving loss and evaluation benchmark parity in training over FSDPv1 bf16 training ([link](https://pytorch.org/blog/maximizing-training-throughput/)). We achieve this speedup by leveraging FSDP2, DTensor, and torch.compile with torchao’s float8 via linear layer updates (compute), and float8 all_gathers for weight communication. We showcase these improvements across a spectrum of Meta LLaMa model architecture sizes, ranging from small 1.8B model size all the way to 405B model size, making training faster than ever. + +We demonstrate these improvements using the Meta Llama3 architecture, and then perform model quality + +studies at two scales: 100B tokens at 8B model size, and 50B tokens at 70B model size, which provide an exact comparison of float8 and bf16 training loss curves. We demonstrate that the loss curves result in identical loss convergence across these model training runs compared to the `bf16` counterpart. \ +Further, we train a 3B model to 1T tokens using the FineWeb-edu dataset and run standard evaluation benchmarks to ensure that the model quality is intact and comparable to a `bf16` run. + +At IBM Research, we plan to adopt these capabilities for our data ablations to improve the number of experiments we can perform in a given GPU budget. Longer term, we will follow up with a larger scale model run to demonstrate the end-to-end feasibility of `float8` training. + + +## What is Float8? + +The `float8` format for training models was introduced by NVIDIA, ARM, and Intel in a [2022 paper](https://arxiv.org/abs/2209.05433) which demonstrated the feasibility of training using lower precision float8, without sacrificing model quality. With the introduction of newer GPUs like the NVIDIA Hopper series, FP8 training became feasible with the potential of more than 2x improvement in training throughput due to native float8 tensor core support. \ +There are a few challenges to realize this promise: \ +(i) Enable the core model operations like `matmul` and `attention` in `float8`, \ +(ii) Enable `float8` training in a distributed framework, and \ +(iii) Enable weight communication between GPUs in `float8`. \ +While the `float8` `matmul` was enabled by NVIDIA libraries, the latter two were provided in recent updates to `FSDP2` and `torchao`. + +In this blog, we are using [torchtitan](https://github.com/pytorch/torchtitan) as the entry point for training, IBM’s deterministic data loader, the float8 linear layer implementation from [torchao](https://www.google.com/url?q=https://github.com/pytorch/ao/tree/main/torchao/float8&sa=D&source=docs&ust=1730743084184771&usg=AOvVaw21FdkNG452P-nDIO-hIwcW), and the float8 all gather from the latest PyTorch nightlies in conjunction with FSDP2. For this training, we are using the float8 per tensor (tensorwise) scaling granularity rather than rowwise. We leverage torch.compile to ensure that we get maximum performance gains. We are computing attention in bf16 using SDPA and are currently working on moving this to float8 as well. + + +## Experiments + +We perform various experiments to demonstrate the benefits of float8 training. The first is to ensure that model quality is not sacrificed. To verify this, we train an 8B model and 70B model for a few thousand steps and compare the loss curves between both the float8 and bf16 training run. Our experiments are performed on three different H100 clusters with 128, 256, and 512 H100 GPU configurations in very different environments to demonstrate reproducibility. The first cluster is customized on [Grand Teton](https://engineering.fb.com/2024/03/12/data-center-engineering/building-metas-genai-infrastructure/) in Meta with 400Gbps custom interconnect, the second is an IBM research cluster with 3.2Tbps Infiniband interconnect, and the third is an IBM Cloud cluster with 3.2Tbps RoCE interconnect for GPU-to-GPU communication. + + +First, we plot the loss curve comparisons for both these models in the below figures to demonstrate loss parity for a few thousand steps. + + +![Figure 1: (a) 8B model loss parity for 2k steps, (b) 70B loss parity for 1k steps](/assets/images/training-using-float8-fsdp2/fg1.png){:style="width:100%"} + + + +![Figure 1: (a) 8B model loss parity for 2k steps, (b) 70B loss parity for 1k steps](/assets/images/training-using-float8-fsdp2/fg2.png){:style="width:100%"} + + +*Figure 1: (a) 8B model loss parity for 2k steps, (b) 70B loss parity for 1k steps* + +We observe that across these different models and in different environments, we obtain loss parity for the small scale of tokens. Next, we characterize the throughput gains for four different model sizes ranging from 1.8B to 405B. We explored the best batch size and activation checkpointing schemes for both the float8 and bf16 training runs to determine the tokens/sec/GPU (wps) metric and report the performance gain. For the 405B model, we leveraged `DTensor` for tensor parallel training with FSDP2. We use a sequence length of 8K for all our measurements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Model size + wps (bf16) + wps (float8) + Percent gain +
1.8B + 29K + 35K + 18% +
8B + 8K + 10K + 28% +
70B + 956 + 1430 + 50% +
405B (TP4) + 149 + 227 + 52% +
+ + +*Table 1: Performance gains over bf16 (both bf16 and float8 use torch.compile)* + +We observe from Table 1 that the gains for larger models (70B and 405B) reach up to 50%, the smaller models see gains between roughly 20 and 30%. In further experiments, we observed that the addition of `float8` `all_gather` enables a boost of ~5% beyond the compute itself in `float8`, which is inline with the observations in this [blog](https://aws.amazon.com/blogs/machine-learning/efficient-pre-training-of-llama-3-like-model-architectures-using-torchtitan-on-amazon-sagemaker/). + +Second, to demonstrate the effectiveness of an FP8 model, we trained a 3B model following the Llama3 architecture for 1T tokens using the FineWeb-edu dataset from Hugging Face. We performed evaluations using the `lm-eval-harness` framework and present a small portion of these results in the below table. We observe that the `bf16` performance is marginally better than the `float8` scores (about one percent). While some scores are significantly better with `bf16` (e.g., MMLU is 3 pts higher), we expect these gaps to vanish when the right hyper parameters are chosen and across larger scale training runs (e.g., the `bf16` run had half the batch size and it is well known that smaller batch size runs can improve evaluation scores). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Benchmark + Score (float8) + Score (bf16) +
MMLU (5-shot) + 0.26 + 0.29 +
ARC-e + 0.73 + 0.73 +
ARC-c + 0.43 + 0.46 +
Hellaswag + 0.65 + 0.67 +
sciq + 0.89 + 0.88 +
OpenBook QA + 0.43 + 0.43 +
PIQA + 0.76 + 0.76 +
Winogrande + 0.60 + 0.65 +
Average + 0.59 + 0.60 +
+ + +*Table 2: Benchmark scores for float8 trained model running in FP16 for eval (at 1T tokens of FineWeb pre-training).* + +Finally, we scale our experiments to 512 H100 GPUs on the IBM Cloud cluster. We were able to recreate the results and speedups that we observed even at 512 GPU scale. We summarize these results only for the large models in the below table (70B and 405B). + + + + + + + + + + + + + + + + + + + + + +
Model size + wps (bf16) + wps (float8) + Percent gain +
70B + 960 + 1448 + 51% +
405B (TP4) + 152 + 217 + 43% +
+ + +*Table 3: Performance gains over bf16 (both bf16 and float8 use torch.compile) for 512 GPU scale* + + +## Future work + +We are also working on evaluating other forms of parallelism such as Context Parallelism. We plan to evaluate all of these features to demonstrate the composability and ability to make choices for training large scale models. + + +## Acknowledgements + +We thank Davis Wertheimer from IBM Research for enabling the data loader for torchtitan runs enabling us to replay data in the same order across multiple runs. We also thank IBM Cloud for enabling us with early test access to the H100 cluster. \ No newline at end of file diff --git a/assets/images/training-using-float8-fsdp2/fg1.png b/assets/images/training-using-float8-fsdp2/fg1.png new file mode 100644 index 0000000000000000000000000000000000000000..d7df9c7c9d27708cd2ad91383a5d2a520ebda26d GIT binary patch literal 48730 zcmcG$WmHvP^fr176h%ckR8U&Fr9nM(cL*pgA>FNrk|H3T0ul#70g(n#x>H0-y1Vq2bF!!+54=u=9=@F&+{w;l@uheUnReaLZPlpOQBUzsEhE=b4}Ri z;jgDhxET2Bg2N+eHEe9`p>f53$W?bWEk_jtm%Fz1Hm2rQCU+g(Y)$SyR8rzVp|Im7 zWfa?GSz6>Y7#Laaul+HRYbJR8l&i;tuY zS*4UONU(`toDbs0s|vbH#mFdXm5N7{e^tN2zV>_&mHhpyL0CkD8Prra1!!L1lo~UB z@WgcH=!Ea9i}b_SujNf^Qr^Bbb8&9rcc817O;UX`cxM_JItumj;f4z`dKBv4#>2C} zQ8&eI{`ZfIH~)JN>fFV1XII2f9Eqn!4S%MkFQ5J1hpm84)Z8`SK8G^W?Hy)~X(;|H zMf~4O=S|s3uSpm=aftE2tMQm}J%yq{D{gXe!vF5&bZas(CMKprz2CS%jqHLN0m^p8 zncvUPuieyPIrG17VDVwlij|dBLnxVX=p2UpVp}W*6G8KF2N!vSQjKj#V3S2LW01xu0uKk?X$hl4_G=M*U8cjohio1=NA+@?HJ^8Onj`3m1z2V_5&sBhQGZKX(DS zNgr*ZLx-DFCkCH#Tv~(V{C}g+Wmx|(7@TdElC|PJo{(aOJCQCcB;zZFd;*0cSxCzr zh*4o1D5c{t?@Sh!jb;v~3G8UN_lib3K9lU)n~IfkrhE53ni~1Goa;0R;NX^zq{-R2 z@%q1ypODjc1l;KqsrDLjj%igdv)0j@MA2Knzb-8;z5KVhqDh8@-cU_f*K=!5xuY!8 zTp~T3l*2GS^L`MObVT=aW)_xD@%gEmqx~k&4c^m8tE+2ATbiG?tuTD~7LpT`mLucp zy63+t)yv)CwoLmi({@64lFIpLXvn^URDEBI$BreL{t$!VY+#)#jaioa9YX~Z;VbZ{ z_gj51NlbL~rOTHONBu}>q$6mWC)d@oskj<+Sz|KIf4#YmgNs{JclChjOXWr*rBCI- zLaws1a^XV}`@JSrMdAJ$pHmK_2Hh=@&R^Cg4jqplJ*s;mu6+B(+kOik^3Y;CK7;9& zDAAKWBSXUpKU@)4yJ8J0`-%}0=Zb!EwXzJ0Oe|lAl^5@FsE_mO*u$@8$)WS*%3}%L zi!}Jd44d67dPd!Mo+hWXI@2va3x|agyOV{%v`z;F2jAkeP0ci)$Yh|VTOi_1XrFg% zXlTG-7^U&)70|kqh0Hd?rFM(I^H^gRBi`lb6w(A&OxD)cnijl$MQRwc#=ZiM|-cZa6W4+mOCw~ zsH*n%^q|91$%T}zFUj_DH~fj9l@;0hccCFR(>$iSQ{WlqqkXUmP%c{{*iJKX7C`ZgzmnDbx_)#_mp!*=p|~reyim%CT?zSA)(=MTiXuHoTQJY z=TTIDzrPszQgb3>Cip9$aJ_oXYq{vXhwP$IJ)QHMUb~AZQO~~-ej}^Ho#kAOJpAG( z3c6NOXc$>CyTL04sWClug}`0absuTz=4|D3G|^L4rhHWum5u$`6u~5gv5SYvL95k= ztkl%$KYv~|zZtX9ktFDIvTueVlu8tJ8+A}0u^>{ok9SANb}hlC`lF0^=6cYO#gXSM zlAF%Ie}I4Ulv31t*qD>YqHnG#oO;whv9#p7l4}1OF6Gw`K0H(3>8N&1qjQ_63l#R) zSsJSu8>;+gQmo@(Z_mla<+3`er>~#Gc1(M7T>_1+^V%J8SuP$B*=V93&~>U-B#As2|dyiQZe0sl4g22iGDaA|@s$y`IEWE;be3CL*F84LYqK zB{fRZp(H0KCnM6nH(i~6zODsL2tVZHIwOPG?<=p~aqSrHFeB2;jTp2d{v}lR!_6k1 zDY2gmN1NzMej<`guy2maBxPUWe)0F4d2i;Z;$WOzEVf?4@R|0Z4ERue!~hi@~7~gjqqS=o(tCW*IV4MTMraM zh{qt~{Hyiz*j{j&O>&_Sc31l_EVx?PTjjB9JyI^8BBD1XMdJiX$L}&O9hG*p=;2Zk zyl|bId#?S#nCHKjm(i**X$*$PX=!ONimj!=&EHRK^eUY50*K}4dNV^4DBR~hvg(z~ zB?}D-ip->ki7vo12lDmk6_b~2`R0aa0$OIL;9g5ZB{p#RsrSAK)!$;v0SL?yiU)Z2 zgE&pwVp*PiXE)rOX(zbvIT`u@Zh3Dtb?>SNL2Y2|vp+BkEG5G|FuTg>5+37~xhIC|0YiqY3Hb4t@=?LSJA+MMK)(h1{ zej6JbEq91n-(?#!1=(**HFtF>X-C(Kun^0-y1JU0(&4$0=wDU7S2_OXRzv8m2li7< zyLiA3Q=_If4HxTe&GSt0hVZgXUIk|MMM||{lum!${{%^DJe0r(rU1< zva%A7TH+cR=W7QMo6$;$97%c}N=%K7;Vz$~Bk7nl^QRIaOXk8}=I7_Ha9*|;$RB}8=aKg~n9sU=<92L9 zLMwmGW{2R=H}lPXl9bum*)Mt(-{li{6E`O&CKQqc+7tPUzJ1&J6r+#7sRGOM8D2Zw zT|M3G6h%HW>aiMFw=_~w0%Nf*NpPrkUjA#^9`Ci;{y_5GZ89DUHA6!~ZS6srKUnva zn3zU>O7>?z>H-OHu3n91c@iBPTk3V_+_C@F;Fo~Y!Z*9g2Cu^%J&)yLm`tHr&-x%D zC@#ZAW{L_53KkX%t!y=I{66dTB#;@cl?8W`jm6dZW+^?_9`3G;gi(qnhlktM6KOK* zd<$?G&DX1NTKsL-QDQaNlPP~oU40<$2?-_T>2k>!g@~u?R8x3hU?9{$51A_Z{mC%V zmEJ7e*`q%NMu062_a?)FgMyMF;ePw}ZDYe;UHwb-!2;}sUehAs{i(4lg#*9@$dZuMR=U$0fBNH)8QIy{J$(2O z{zOl$yCUh}qqvgc~mZjgC0nmoU9qXhzM z*mW|LicB_!6(&D-?%a3V@t?@1TOKMA4VuW?dAXDc0@zeJk4>pik;dHPlH4&J}6KR^%yd@+gi0*~F5iruA5 zi&s+G5rNOUQXh_a?ItxF2L%Q~Q5q^V!NJ>J99V@gqe+Wm(j0Z{m5-qDI$CdZ8FA8F z9j$uu-D-bIRneV3A0x-j)0Qk;0pUt5`7R_Nz;&f;w#{^N;HeLbbi~kdv2Je|V3xA8(Lg#VfrjW`YHY2Pc+-%)Q5NLhcA^eE#Zvd;mpoD4`ZoN#KBU<6tzKb7u3*Tz7h& zPB9f#OsffRLS$rQ&A|ebfFR$)&$mcOX6?&lWM$h;H`BvJ+!y+CN=r+}d`_z#zrA6G zubWenSXwC*WVSWeed8@P9i1tp(hHYw(4;}&2%qdtk`H{h8r<0GRU}aM_CDE$^`rAQ z*{Sh-?hHQ(ye|T>D=UXBis4Q6W7S^htwFPts*3P%v@ixndonUI zxWS9z(t_6MgY`yABJnF%uTCTi-o63-Vu4njaXRc|$bU02zhAs@fG13+imUBdcuM8R zl*DxN4Coe_v_@xSWboz<-3+f=Sh)M_OH)(R(UB(=CwXY1tF^T?lpH-)O&B)-6EC5| zy>B_aC);0q^0W#dgAfqV$;Gl8{Dc$$hIExC|Jo73V_@rg|KXyeymI(I-Nx zSqk#9vha-z3=Gn|**Ka7AN2AQxD;}E1c!tWZoUk9CFHvH%+u4;&TjoNuJBgZW8CH8 zG9*pV($XS1Yj@0t^3EM7a?Ec?-un9!5fKF@`M-G`#1w)@u#8$?Uw3nJb96S%9v;@k zD|oKE`Gz%3(pyVQ%iX=acV4%^5DTyB^yJWTAb&fvJK!Ku zQIW(>*}}rY%4+F}O*IiA;fLsG2{d$F5Q=6hq~tA3as+h&9oN|njf@nN1g7O36cjoj zswL5ooOR0`&Gq$1KWi6Vx^cVI;MbdohzQ6&V|I;q0KF%`?9BIOoo=R_-aW&TVri2c z>Z-y-PJT1(3BkA0V^pX~h*n0cJf3=O_owkPH0W1D4*vM@<78vl?r7iucOD=X$5Cme zlL%6)uZHzOu&JpT7@8*6U;FzD?{)d56_!9^LP{PD4SK7fYjCcNweepLGi@Aka#LKv*|Co`Z*n|` zjIOOsh6iD`8O&CF6VIPU`uJcQfi@mnbN6;^0fhL#;~)jXu6@-xY+Vw2alWlOpt-Pi zR}7}`X|YBByE}p*5|bO#tpFZG9Ot?c6BAcPD!x3e5uu~Y1l*LRm=bN`1}%ZG`xXNu zBYxG_x_zX=qi9wX+{fIRtg3k)Xh(Zxsg?0fP*@rp8{6C41LRRrQE824sej?^R|`q+ zE-@Ya(9;J$Nr|!NQ!Z|8Y57}V)Cgf1FU-kIjFY8P)~<7b1x2Mz98Al{7aQ;fml8mu7XV-X*RP+)^ZJ~4QXR~So&pwW zf}$@-LsK_yTe;qF3%xa$9;T4US0EWifx(<%#=tN)A&QETm87RVR=f@!zkdF#tQC`z z3UFc6$nCc%&|b0N(F ze4J3+e6Vmjgp4cMeIX}1n<1u^He%}^P#2J3p{miO&CSheKK0@e6g=$u_}Hd;n+}ic z+NF+t06^sqvmKE0>l+&%SoAUQ@o5RIC@lRp=4_ASnr)^}LAEC3WytJ*OKhG}1qB85 zaKC^m*%(F%RKVEDb+Ava>5#Rm&J3AMXYH z2hadgAOQh^pyS-Xs&=1V`3IjeG6F&@<9Usn-outm2M`N+2$~*jT-@DK;Ttn+3c?u} z3uEI9q{4+dFZ9j(ljxI*dV8YLXlUDEE~w9bdV6~j@YdDU1^p4Eiq=9Q&%HHR-Vx8u zc8Te*T$EUX6J~Pb=U-E13F?`SDRJr9>l0Pzl)76p>^TUM%eL3Ta;g)2%! zPe0}|=EYNC_Hyt}RPxgwu^5JUOaQaq-I&&Tei9ygD#rWwn>#y6LPbW)lpziQ;`e_u zSB-3*(t~DT(YYdl$5H~#1`RJP7ZC*o>t6x@HPF^lLYZBDGi}Q!M;AGlGvO#eE4}f1 z$-%*aN8S=j*KPoBLLSsz?IP3Z>FGk|V4iyF&*E7e4Y9rRLT($zMW*fO*NhR4(3k?4 z=6LiBdQHd{2Q{aMqN`aHVU5qZ1(Fnk>k9$iyruMZ1xyq{!+-lm!IOf&;nb379-Z4# zo(r~o(7M$n*Wciug{4HE3;n)cY+W+Ug`jC0DIPkoG6cF?hz~RT#4fq$slr0eRn$|C zDX~iDiV?cVoMCP2Vy%HMPesjpGJwSkBjakAwhuf};7xb|$UKr>@%zv+P#RSJFbaBw z#OJ?1$Jxx6>gF#kEtQt?b@$Ppq+Pvw)r$8?Ffj}E883Q1uyHaDvYVRP2hsqoS^)PE zPv48WcKvIiL|So31Jn{B0fB)z;VpiRlVlJ)#>P`y^SzeEyqw-guHwqjFVQZzLcUKF zan(k&{gt&y-l zZctjav`F#X1jh)%nOhC%)6!$>4e^My$IgfkE_=wH!2=Uz*9^b?pbit_guU4vcv^k9 zLQw1X9EDdAMUw-tqk52}0JMPj*~h__us(Ux!F@rVu&bbwHtb%z6)J&e=r*vMG%A_s zQ}FBf5UE&p0K}kAP|cJhgAx}>Cogh(pHI43wOp7 zec$kQPsaYT;f)z`@V}!G)4_<#sBbg;&2GPN8bFNK!4?_!bEPQriub~&HutC{+A7{| znnafF+PNf_?#gNW*#X@8q}tQX+}u1x#LK#B`!}PD`u?{7lG&+=r4TfUy&;kUcA<^T z{rveeBV`$F`Is6%R#s^)WTY|u3{U(Nbcy{ssRc-k{-=c?wA~}9u z?oOX-zpzT9OLs1!7u8IMrKWKIu06RJ7C9;Z_4igPKc=|F3Z;2sRF8$QiSi~@N0o?b9OLFv@#}7|qC@U+A&)gTh zS1k468L&pm%6RitV*ImN3Q0Y??byn%pbuhW3)|99MLP>&kI8eo}FrrM57Ou zG4wKDzkXF34(W1vY2N{Cu*FoPxTv0QfD~^NaZ&wPPU&r^0fSaM$N>CmQ&*jZyS-j< zn6l3;gcS%BGRsEfuL!E$x4p`JQzo*5IJ>$g_+mpWb1O1m&)#1*%h%V7!F0NW=Wj~W zwA%aXmP1=Ev6KE~)mq`8dU}RP$Wc|Jz$qM<<5I?jw)!J-B>Mtg0?h&98YZ z2jz>gd*pcog>oV}@9X{s4=+5tZ|$d*N@87X3c*EGlpPh-8&O3RDm(Hfs*fveGK@N* zGeKu(GvZf>RIlw9JmiL~A8N<0_}087piaB+d0*F3rq{4cuzOGgwmUqnMg#Xes)K(v zQ91-~vznHwLF?}KuUu4V43_-O6csFg#&VGN`MPK3Uq&T5j0Jf|*&N3R)Lbca4ItYL z;_;zJR1wrdoWLDaz(G~J>CpEVPXKn3b3gw<%EZd5UuJKjt*s3dE%18;&pCXXF!kB* z1Ff7T;uEA}Z=B61tJ=tQ6e88lLpLy7YHrjp8nU&u1w0I2QU{5?tHBT7bK&9PNQVG1 z1(2+RsXgGSTc9-vma)v1-L)3hA5DwQ4e&C|b$uS*q-PcI3cRB3sGAwWVYA|xC~xzb zbt8K+@qkx3!rOrn;)qpGpoGCGrB|$JhJW{Znf2`Q_4hShT*dxH`@MDwmKyMN>c-5V zS$E%>Tb~GKD<83@0;&uE*m8IJWjtEw`b|s%Q9lkFnf2#N<;9}O@W_l=+U6MhsniA^ zp(8SW9R>XrHEMgt{yx9;L%_95el*ebWUh}`7@&BGj`8te# zHF%7CDMJHjQGvAzm;(?15JO5{{*!~^+e~v{%GK2SDW$7#^UYrJtG$~ON*)`QVo$*z zJD5>WJK1f3gTmuzfG$fx;a#(FkDXj6DI}sBZzlmw3Utunol)FG;&yzu<1>fwm_sbeyZEVG_~cL3~QU%iSi?C<%-N;<+(?ZZp0Ib8zfv!a>`r#V(hE(c3uN% zv2~S4NRpKn(eAe~_1e@LACfkcs?s6<-(CRp%ODaMS<;it69rk84O8};_KYV3F8;M8 zVn}wL_83{gSrr?>XTu3j!PS2zZ$MniF?S-*0MZ6 zC_-b-;<|LSxTH8wK=3r2LO=QdiW2Lu>k-=30 z!;L7Vjg5zb_hS4q&C_x;#+IBt0KA~H@a_O90^CI?InRd6Ba5Wo`H;|102=G?OU!e- z>o9rpy>fJ_a&jRx1S*Rbm_bawPfVZ?F%TdeDD)OEPhbOZS^8rKAQt!vB38?hF#U-{ z*@(KppRd#mm(Zrti%f=UQHzD0pfP1K1PxmKwu=j*pr-mfV8>hk2?m|UfX=WBo!=sJ zP8-zY?h7K8h4|D6IIj*1Qy!l=zteDwI^V9NtZ|Zq^qM=1k^ls3Czkt;0%ni3$K_?v zDpijYFTY)&GzJs2GA3|hhc_n9Q(RO|feK(tUCggw6%dFI0E$gr{Y6)5El|^%`ug7O zJOkHm@qXSg$(#I=SLD;&cehVExja*3|Bc=%wV;SCX=tTUI#!j-<;i?r(LUvEYeTJj}LuJH+nDF3*AR%?8NU!hX<KIE1M|fg&+P8;R760`O1zN=)~C=TPieipMKc1 z5Pk^%NF<)K7M^JidP^K=4i25dF$oDCgAr4X0#LiT(&AN%?|Vz!g2Z zOCf5(O&-Ilw@_gZJfH8m3#3NSbweYES+T`n^0kZJB(+-c0#COZpSe6%1FGYRMs6`^ zQGoa%GcqV!-$LzA3k8=5R-;B0CNv&^&SU@?ReLDB}EP@3sROy%ybe1HI)!jQ2!kf zitmFe1qxUns4#X8#~|oKrzkXg1pg=l4yVKhk&8-VqM|_d&1!CLt{xId>VSzu_npkP zC%D`z_MwuIme%(E4N?q<6mba&36Q)93AcdIt^qm`its21s26aB{#7&w5ivnm5d&H; z`L#FD>l==gJ55kaN32wCb^!gxs$b~}Iz!^-)$4@%iJL%)b*D=LCCJaivt2x(-^(59 z;0-K0aGD^IBjhfBtBpU-1mOdyZz(?vqKV)h;1N0yO4B$~Os;ld< z4j6?A?{xZ{AhccS@y<|sTAD-%X?RMCBHFp)7#@Mh+`w4-8$-YQVAM4oWIRa3u)xBu zYyYrfi27K+q56#E4av+um#V29$EB!3EB?}Wlk%HEmd}mj&Kr&|4uc1~Cf9+H%KZG9 znT^c`!vFsL`-!F5^)PV+^a@(c(J(3!5|Z7;0UKc9Mz8b8w>CBHK{^hVFoIN^;yMu+ z8ykDLQo+W^xNsy1ZlaM&H!di_;Ji9| z2M^Egov-}g#Z;6lSMPy{9c)P<&Nu=8Wg`+6E-IoTs8H+IY>LUr$rP`h z!M?segd_a(^&TzlG>~S{p-D+eA*&7?9;`<|6EKen57sUZvl2h`R= ze{uD9=3*92q-e>N8me|&tIqfPTOKr9GI6YZ6r zPqIJxCi8dK*FOeL-!EXQx zsNcthpv0#5?&n*23M}i+9C2vRkT-1EEt`BQ1xX8jIc*?cs*Dy#%Nn zPR2y7Mo+%F*QAby#_A~Pr94KFYexQx0rK4TX; zTKk2j$!y(n73wL|bAu9z&T{M4AD5Q^ogs`uxH8wS1Gwudh`C$VrL}^0ANGCcpQTCw z6CcFQZT4qk;HlxCg-{`C94WSpp^?6F4sZ}4v(y^~1_$S^gg{a! z50z;6gTq$Y1>0x6(jQz7IHI@v06T3*WrjD4;oV#MXVCB0>Ix2Omj z(9Xa7yb3@7YyptQRn?t<#|=tD%z-CI`$i2R`vWy6JV2xYO&s;%!_@372-^H2BGnL@ zya_BUEb_`9z&>@T(Vm-O{ufF&h0l>4qV3sqr`1C_zCW|Go?qlJtB~8j;9S8YZxkZD z_TvJSnLN*w(S&r!9tVg7yf^-K%zcripz9gCBWw|X9|*e&uDjZ2dn*;Ig@uK%3Vpy) zK847Kcwu8^W`-OOPll|FgM-7ib`gU)00Y5`vFc-JacR;36g1Y=?I|3a7wdpWZ)bH3 zA&>zsAxi@uzypZAH`mAt!6X4q11EUuQ^cL5p(C!=y46_mKV0s0>?>I(3+Qb zJYye*oC0pxZtfRg&H%>V#h-|87P9*o2nO)0S$csmIkdb3rn_Fl0-?<|F0fBj=LW7w zz?SxgWUUXQ-ds|WV^!OqgId!X!&Wm9#N-XL#$);W8l}h)>=H1rJ_Q3>l%{@}>-q$x z_ufZXBKYf`kx%-jFLP^{$iW;!bw@=-B_aB8 zf;hN-%shuB?IKuzfab?1AlTMR1?&v2KiKX;0RjK&2FK<_S`lIoMhH^4A;SK1nROI( zih$^-%#qaLPoE9~7%S_FN;L!DEI?y`O1<C$sxryo>1)-x;s z#>APol0aLRRDe5C$B!{=LX0H!fQ40t%Kxei8D0ZqBGeHNWbN(}J~AWFw$`eNHkUK9 zvO1FlcWwGl#5wEQ4`s(~`5Hh01s&|%g-dF2f7jO5uD)b4T4JMoYU`cmbL#)ahBtvt zI7_JrNq1BqinK`GxXlWZu*3S{{-vL3q-A7eTH4yK-Plo-E$+7f^M|>TlG2N@ooJf- z{QQ7CJD`#jyWcGpf*aV_g@>p)_gK@W$+Qc?=anjeP>faUW22Eis9?b*X|&?)jOCc* zyp7F@JF=sA{U%2^zFT(N%)Os}Kj7`Ce_!sQvd131BE^#aE+iPpR;0Wx$ z>}Sjv>V*8f@4xRBt6h6G+yG04Hcuvl+uAnAEYfWR=zH7I=9&5#TCV^qx+5A1U;H0~3qT z&L1N{Csh~>uy`Ibab|#(rdAzm$9$pD3=VvjA@zxZz~CBKQGPsCCY*-+2okQMyZeD8 zrI*@>MdIf0@GyjucHVD*fS0haM!@g@{a(JcS4``66Lr{E2R&$KCITQuD9XqL0sIII zGzZlcm@8olMSpovI}dhOYph2E3LaOCP~hQ>AFD-V+_)pq=kNYKjp3>1dOi4lPau<; z$A1ST1)?&drJpE}99?(Cx2+<S{^GxKkq z1{+Hcj808mUQw~eY)TjmThLd-F4{-j;LsLAv4Vcw-=TxQv$OL7c_>@eRu5p(OvMxh zw9nv6$%qX2u4emSWQbvV3OyMZwem0vu&M#i=ej;ZLf)H-R0Q-?0?Q3Pkpt@uQ24rlNS@iBnd0 z0>B7qL9f72+@CwZG!mI>US3`fj_wE4N?EB`siQc!2F3=F&F3^lNaS`c!jM1OJN&J{!$^+aqZ@ZGp`k8ZK?a2sty6h{{_LG#t{r zZ~UK3kl%Xs_{4fbT+%bF@i7{D`K(QaTueE*PpQgb5&%>I0g~)C69-M*_1k>5f4&+Z zb{^O%+`uXWvmzD24WfR{un%~xfdB}UI_vQN{rmUr8+XTkOBB;n*KvQaKs(O&Kvk>U z_p|u}C!s1ej41;&?st4%Mh9yxYM0$4MTkhb8f{v^j)OrNYx3#r_9az2h z8$1Ac1;EKum>}RXuj1f=ZoP{g95)RmOJ`kZ-Neuu_)FAt~u&ZHV0GrWXQ-j?Vy` z=uF+e&pcRGwlXXo#w@~qN5&`_=V94|hd9TT1P+(B?~CmnP)-@qRN;e${suq%*MhuH2Iz>1xd zl}rvQa=pV(EokGQFMyK^VRr=S&ZEK_5fdxaF({q@3!9&@AAzChv!`xY<7Vw;O7;dY z=>>wTejVwZA=csGRSdKCBQ#J(@xa4C#|VVlJ^-7og??EpB7FRa@bCgyA^0lGU=apc zAFLvfWdtE6z{~UK@#9<}u99JU*(f(nbtg#S(0w9y>(!c5eO=vQFpC4T0#f%TV5F)w z&R4A{q?mAUq`$mv?UM!c#d*JbG|bm@=M_Dpzs^>H6ZdWTwsh4FYy5$DY26YM~ zG9_A~tvjS?RRVQM!bAS799wXzUi#Iq`Sb-hInwh0ss_5WZF1ccNFsn=a-NW)MN+v@$&S zj9nKvAoLahXxCk5V2ibwi8)l@@;95Y(Q#Y&(;Jo&Oi4t|xt^w&*3wLKxCcE|R_{I- zmKcK!i*@eYXarCQLCOOKRgi+BC5?H>5s#i5`VO&W9E-n|^IyX$hJJ7n9dL2{C=2)1 z*w33Nif`eG@+={;sgmtrr5}4yTqLVT%l#?o9?dsido#|sfTm^Gf-7LCZ7D?j_Hc${ z28aMfdHG{#=!L=OpdFn%q#Kce81KNIS`F4_a1eo&4^Go~y1DJYzCs`Zs2|X8;Um-! z{?3jL5$~hYK`R9*shc<^+Q2?ILm&b!hf_Z=)44*dv$|W~ACPwB{4LXEU467(GqkMH z?~r-pOIMcE=LV+G-nHbog^d;A#9!llP78#1P?Uf~y^MvGWJa)t15KB{aV(*!K~}KZ zI}W7i9EKR+HGB<_9lkP4p7WQ#)=%R&m`naDxu$v#VLqnetCXegBzg0@RC67G!_a_% zwoprI*^?1CV%^!&!Wk!*Hoa?H++zVKX;TRP@K0Y8}hjaYX!22T59#(odN0q)I zHv6$PII4w!wzU2I9xE- zpF8kBgcMjK>1k+=pq3%m!OBqUcR7&Z{{4BOb8Y^KWMhi;gr7zSSaiPKO#{k>RyNwU zLsmvch(Zwz?EaKDSm7ksb~1DLVBPSIu*MZmtb{9eP!RguLZpq~YbE8p1&lmoUBN<2 zYcl@R|EvvVrU{gZjqqJ5xmy>|xB;~efs1!(2WRR;Nr&x`WDQU0HTC^RKz9k zj{SKYJqm0e0F9=1X|E^$*}4=uF1n3 z8fj?Pllbh?My$txUC`3{1J&L^z|AkNPW4gA_tHos3?DcrYP^rRLuK(RxT>}mLw82jBx|zzFoAoLryFOZ;v~R4_+3@$hN`Nr(w~ zpLhMRCOW0gY8uv<6(~qc}gtZ4v1VmfXkkm28Kbfx*WBN>pU-L2Yk|h<}snP^nC8B+D~8On-mHqIl(Cc zyJ;KjUpcpDw3&&=K9+zR1c(#?+kZd6<9PbJgUqPAyE`WK5vVd?<4;Z&0Xd)rG=~V2 zG8hCAu}nlCR5)3F>nO8KfslfL0NFdV=Mg6Pn2xG^4my3OY0zUMpoIJRSysI`T1_U)mW1SQlO|5jtCD7)*H?SR z2=0J7c?T;7dXfI#K?uibhvj@yZ1(r#5v~i{Qo`6MzS*?Nin%`8QG7h3Yxi=VpToXx zI5qK|bNPz~qUZUFX%1XKam4--{Qa?|{rbeN<1@vtBUfSU;cf>f z2aFQ(J^`N5=dWMa>PemghxGGcdy&kD9CvAGG$eq5^Fw%G5~I?o#S7$nVLLjNV2L5e zi~&OLfoJo@Xk{6MJCuCdG%!dYgfJjNpyv~LEH$7!Fm}FB16zchLfs=jGP2m#U!ct= zO`Z6(3m&ySInB)4VQ;7`>$T&p!eT@W5$*}J+exa*sV{Bkd&-xD)4^TIc58)^jLd*kH0iPHZ9E=kLc+?ih zMP>w)^CX;$?Zc=uaXb>UqCLSl4YSS35e0Qzd(BQtLv zMCbw_c+bdg>f6COJ4L3(P1}aZGzbdLwuQjEs!xhrZed@g&<~YL%~3 zIXd@4$%P!YKW)Gi6ZvagiSW}#(XH)9>k>&cTKC_tsYNz*)jK!dKL648K)zQ^e%qU5 zUJJN9U<)0G&)@xH#Vg-?{-fBkvj?2?0-SxE^#1Skx@${I3mj2AN_wv|yY344<8B`c zSUZah;Vf^@81TA?D+e%uSOn?mG--QG|G_q3;*?Rh**gLyH8CraY=KfS9Ww`Q1o%>+ zq1;n3=Hj$EYJ9!iJ(62Y1Iy6DIo3pIBDfRB%r2Ft2g_BBh!_zTZzf~ z{h^?E@gqV|nI?Mr*N?@KL+ptTVU0%Yq+2?vjw>$V?{GeJM4O9wlH3nkSrjLf!eTrT zvPA3QqUuPL;2;r@xiryo3B1dYCXln$lyFo5Gy&xc`AVY#Cx0=VS#$)!@8085bT26c zT{R1tzlYj;sz4SF{v=QPtW~S4FC(=_!m838WK|paw^?MWOjSLn-CLE%u-tEGya+SA zgZ+ASh^rVY;rALTW34gb(bn|Bk0U9 zhx&nBJSD|bR^y|-(8{KAoCF>s7)~$J-=<;R70{(>Se|~4_$g4nn-5W`1QMAIaYPAz z0a6jz2$V#j)UKTKRnTf*krRL{=aAvmq=1RVZNa z!8KdCn7?_tw%zCKt;8^{Fph~tnhTaU?&Q=2LCLUiyaP}?0Oo-BZ26ID2WBB1| z2A=!bREY7wd*AZ>kqY4-IZ-&PTzv+}J@N3A9p67noF$oD5k+pQhI7u>yAI6>pZ$Dr zR_swqF85GfVX3xEc0ajOk@whAV51yg;^D;^w?9)4ZsEg|X3#>eXJ1_ibidnxLdQl; z-Q?+%2$Bi;cxJpnVSG_yqSuJidD_%;G3CQ^SZDO9`eRh;Wtj3mpX=YOPx=q9phqZ? z`(WOn#7IbU$T^A%9)|3zy)qH5>P`Q~#6h6kvc z$IYz1M&2iO#~&r8N%fP|TrGrE47s9o9hTugokHz@}K#q4+7Tlk=icxDp`I$6ng{~oZ1ciAela_x`Tg&ymnr^0B*OfDB z7V`=M4~-+{_~D~n$hcJgg6)LC59HlSFwBFG=5@yW%x$jaYEDeqhsY9%5y4u>_iE(~ zKQ414@87?K(r@fVmLydYR)h}d_yw;_PQ|58Dz)Vy(At^QJmfL5+)2pJ7kPIgERxeY$8rFFH_m&UPX!q;_<17iaVNjP_*jt-X4G!iu~2cl0^aY{d;mG|fG7 zWQ%5d!4Ui%3`5d>(qtuA-H<>#F`WOG2uE)|XmX7m3Za>rOL@bXUGxSd{-)eNjvjAr z9w2}49({mJdg{)<%-sBd6A^hs6Gqj|jS+O+;-8BN$){$k)xT(%t`@(nQFjt>QQY0i zXn)!M63)63Yh8&DFT8l}p&0t+IW`7;Ifh-;n&7+c{Y=fc52erJ6KRRrM}N&|H{fkk zxFMW$n21>o;}R6C_*`x<5x2X$x5ih*)vK;*rZC{a*#F=%Ba=jm+anRPU%b=hUZYDt zGEL3ubto>w|HFaqqkN-}VsGGkmtOok{z;=}&^h05BHug}H>_t}LZ_>SSv~C8)teHF zZEQbzt3{6uYW}%DAG_Q-Qu+u!jP|k&z(N^?+ zc>0rEN9ipx0Bm^5V`T2ZzR1~nXjZ+~gP$H94Ah8NY-JA?nOf%6|HdsBPQ3a(uD3>B z{yHka7Mt;I!h`R%YUEmehNe{&m6}o?39STETy!|oBnXY^h!(8=`n);)eL3-yWs;Yf zmd>pQ#ieezbC{^NL*LBaZQJrx-0I6qe{1>IOK`(ke&o`f8!@ckt!2La?)!m_Z4^?H zJO3Bc`Rvk&Vc96B+{vSgQQfv^+{@qiymCpt^xq>uT?@JS(=HKOfB0{FoS<8V_F$~k zU~);j$iqACP?P0ScU_Er=Iis%o($Ldk!-DnTOIBq{{72aLJVhvlhEs3O*|BXn`=vEjHRWDk zuwNBlbL6R56<=W)7>dasy0S#{m=1-FEh#9IBgICGOuIw&+1sVyGvkBrTx&JgU;NvR z3r$#(`<^|8DK3tab93vuT2FmFI41he*BeA1HAl@w4XyK)UfJUEa7oB$GZ6m%^3+EA zcl5b)Hg>ttZaS0=!zsAS<$PXEdFBF1tb{ms?%YYCDBZlY%Ym8XE7P?GdLj99dh3fW zIXa_|`%yCbFO*_9=we#?fB$CuG)zY^hrcaS@^EwC^P|$y(lV@lrOa~Of!1X+lFUq^=Z31K5fH4{e)$V=9AnfmD*?Q zH?dt^l{&pjfl{Cj4|tnv9#X)}6xn?7=%p0R#JFDN>zkic?#HzH|1w~!!L8M5VI&T2 zi1l%1+qh-~is_Y0e%>`>zkD)Qdbx+b3y-Bf3b5k6h3$H(uf|Nw6&F%6ri&^a>@WOK za*NQHgDy#7wotJN#SBl zqSSxtzH{mOas74A=Ni9XD{)$Pwiv`%Kv^jq6bz-fJ5aWXIZ*~ABg5;*3Mb3tq6N3AA%qI0)k$4GhgN+k&+R*T#V zyK+6e1v%Z6U%84;c7}W1>Ict=_ZKJAQV-%@B-MJ6SGB+f8|=nnfVqZ4;kpxWb;@em z9Ab@oH5J$gHN)4-Fn}S&PU%{W(DvA1lUNL;yq>*}WnOrAdm0IGjiv6~H^{^#4J*?J zS5RLbqY&w^_cRI&FTpqqmcupv=V_};&cn>0#y}e=T>%nrPwZv@*ML*e#M(-~=7Pl| zSRTa4mkZ`-qlyazlOc3qLx8Wg)l;}7#kNd6n%yb=ayeKYLPKwmrLIygzf{DDT6auUR_pH+)!8plQ?03{hm+bHoh2vzyId z%=M?Juw@0^23#h;pl?Cdg3S9(`XdX$)*|!d?;X)`iFlCj6}V8f{pmmm*@gpsj=G20|p~Sxp&~yh8 zxSd_Xg(**~d@gT}qMMpU4}9kYWy?DEV#q7MXC_C&B}Rq**myjvIk^427p6+AN}A?6 z7)U@Nlo$to-V(sO|`&O)9N4aL~UdX(WJ!=5kVSI~GJ z6;c-WpWkriruOOzG1x3+BRLxw>hs=RRLKT-#@@9C#IU2mQC5szhYB1G!H=5pWBlK#;R;H0w8bMOB8;zlba13e!k@yUw#@Z4u}41i*jB3HmFQcQHF z(u!O#W>PkadB`HMJG>wvK5WQH8aRm}CPvdNOfDmP@%ChJCb~;S2V~#SD4GB#G!Q_w z|3k2^jqWE)hhQ>-eIQ-V;6vVlXoDpq{t$Cfq=ec_HCro6RbwjgS%s|UQBLtd0l|Tc zV?$+@!pPYAuhOGfLl8>D*k4f7LVmwfY2}Ddc4F^bVJKgj~|!9*@Zr>%OfDjOdjxBQkhokl1JAx|tEnFoTW7qrT)WXWzdC2CyRVbTZ)H>ugidI-npq#k zVP;wQbmg+Co~K`s{%ewJK~u03G<*6Oz_)x%K#qc0Afxj(8bI<^X>%f@&Pyuc+7gGO zp;%n%nk5mv@ANyLSFqXoZ>ULcHLn)Y)?h&N+3VWEA)Olq@>NFrZZ-me5MB5KMlMcS zNMTJ)aSyl-UN(85#o_?n=vRbYO;2q+^sg>U2uCu&j4IGsP~c(x@{~+CVN=|%c{7yY zZ{_q+=)`?O<5^OMg8w^uCAxzKJX*zXxLDM+ovuh14sy3A*5?PlVFU*s=fMtmCbi&> z7g>ih+RW=9^X0OMPQoyNIZSymVDO9BAi_iJa`HDE$GVHVVeCbbmYRkVd%lF}m15+a zf9qwXA6U~qntZg>ieyqvBZ>Gv!wI}~M2FPn`pHZ+<`lm_X4eThLBC7spyx9p0T za+$$4h7$X8*9D^?oweMQh*^C>o@&VXd6(6s4#%muZ0Q41Ab-Mf{}3 zUPmbUH|xRXjP$ySl=5$oozufZ7jwFS%bH#D4aRiHG_pxwau z9M$;25XyiNJIoh*a@RoMa4v!l1n$Pe)mkVx_~z;~3jeKHj{7|J+X+Nr{^uvd+{Xyk zBSmb-fBMP-Y`BojXsH-5m27R5)d#0D-u)d(Awjgw0D@t;>YbGQj$J8Yhx0FFiDn0} zljgHKMG*;~-PHjMjvUlkT#R^Ub8Xdf(Y_DwNgaQ}nBmzZ!(1t3!j+Va(r{rTlu|^a zjV|BcS3x2BR~=?=`8*RsbS`|1V%wf&q*7`t+uCzFixC zQ&ygq+yB?p*h4^aHTmW_-;3pxOGW80Pg@_NZ#d%%B_%~SSF^*edqq((c^rG+8~wfz zF+2y5W8>AKjU{c-@DxFBhwo)6e^2r+fuDsRS1g*cgED)o}HzGY20XAIft;m_mmF zt(88kS@C~LJ#>CQdA6ZGcr_(KfcU|MsF8dnG8#49w|_lQ#dUsJ)*5A=D4)NNsf-r6 zEx2^(2myx?=8gd0S+(Y#f&JBn8tT6#MA}TrGwW(7B?Bh8Ojt|7nC(FVY&UbIjvYu((y$X?co8Hf*!*5I zgFq7ArQhRQj-ieQWz%6G2GRk+zgT!|1V9OcVeBbvGJgK7`-z`-LS@f(R*AXz4cYpp z?re<0mDTZ{Y!Mx?B~eiG=oLk%FBXLJ^Jj(rv|bu3f8cGV9FhfXu&Ip!^n~0U-2ZsM zT)VrIWymrU7qLfTL|9@FMcXomn+pVCpn*h9g-qgyq0hRqe5bWf$%B6|HQ}H4q(dwu z*m`%ydBAwT;I&lU>CwXFYF&)ivEZe&Ut@C)}D!x6#VuxsCyE^+_MC z!^UIbtDEsgZh}oY?se0M}cNelNfl+2jKu zuV-_-7rgB3!*yt1LJ_?lPSv54?;|n{twH^OkAD1v1mKO1?ERf7G;Uuc;`PJ&^;0>v z*?4`yzhi|v34G_tZ~JVQO<}yiA34Z26MD#Wx9d*LA1uDmj5CT2zV;P1{)sgv#DODf zyK>;FO!?(Hdev~{N%HhC#*Vs)?loxFi3)Ib4VLD43Mq)wt3urzdVapZ?x3CMmkq=O zb{ZO5QALAGhF}>BqlRdzZ;-CjDWGo^I_{2&(Orw-BMew!wg2l2>T_RM5Gl0FqZiSc z%HtebmmLXjd|wfi7qvVUs}k+~kY3Hq989*AMm0cq4gdn?;Bmja z{u%EIHbR=?I#OBNAR3rCQx4E(C$Z5ap0J3S%;yv>u4l%V7IlpR4#>b~mO_OJzV-2X zY+>E=!BQy-rK{h+eh(if0xACUz0XT?;O%EEU|dI*0hCjF=%IW(0W~=B#daR&`+n&z z<#$?8kf!Qcts160t>Lx-=7Ls8EgG~tT&RDTHY?6Swq2S7l#KWyk zvOl|#?fK%}cglZLt5A#73et=_F%vw#>Im`MoWEbar|o@Sl4LfhuaHr9*M zeOu<4nwt0Sn>~u{_1npN%Iw{i%fsZ>rc?;d-(7XvRVB>l5bhnBP928rB6qFzOqUXW zbRpioEKt;T+BePQJC?N|i)#u{-VPcgR1l(B5@b@{dV_FK<@wu5O!WIaWTf z_M8+l3MSitv=oszY2RDJ<&M3>0yqaHF$f#m(Rk?6^tVcLNGBh?xPvdv-N2V(qPBLE zA5OI6`wy1XfL0P?XR?^5ulSE)-%hMHg@0g}DA2xF68_}Wj*>+K8vHEk_ z)8o$xV&Iv6iU#L^R?-%CekiMcqqT}m<2#R=U*vec!kGf9xGQ$5jRr@ya-MDPLU6=T zGRKgyd0sCqy3Mu?EMk74xTdM(E*fql>YAKBXeavKsOMnVY)@aMiSZRMii}esL<<24 zMBH3lLLiw1gohfJ-E}#>9(=tb>n|=ZueVz)oo!~9WS|QHaTzcn&q-7K;MW)g$iIkF z_3Nn2xS#R^X^FKpJqRzn-Ecag+6%u ziOWM)E3Z=tDTLg&%CR-cIF8eMK6SLRUWf$P-YyUYz|7lgHAi8>#;O~sdtJq6IZ$4lY~%lN0gm0DQgSCO*`QN8Jy1T=WsvLc`ZSi6y z*<9-V2-5UOqHZ7j6?uvd4&-dg+m^F{r9#;_u-D<9o^;uHefdtOIghVe0t&P<;Hui5gjXlNj zN5{+Lmz0$J!`PHw^G0vnAR&&=%xGw9?~cNqvE`Sk6myc1)U~w<#Yz7#sSae3US&*_ zIXpZZH2Vjw)qE`zS);^Cwg;c~E8ieMIUu4a>%0oQ1S=rPyQ1xC0iC63EjyH=859t# zzVu}st2A&9ZLa!0v#_&F963WG6E3TW{&=c>p4RVlfSPu1DtYxs#i+3SC~G{SyZb(Ss7;4UQ-OO$9H zZlzsq{$2pLW3SqeD?_I!=-d+&GqrrSJt1;)wN)6}aTY%+W%&AlZ=M6EP5s1w=7IF| zB!AKFuiDIp%`rxmn~irvfiBPg50vw^$q&IH(sS&3RxSO3D`lB$zDjN^AP7YPwlfT( zOE!;>6t=$wXfqglJD_Di#=ly}p-S5(!tw}Rezr*cVIlQSEY?t?2G ze0UTp&2e)6U>q7_5B?{6Le1`!wI!ia;p?wgjf57fhU^WJ>28*5`Mtf#t4t6!gO&Z~ z;ah^2a-6Cg%aw=@sF3^EufwfE!HcwOr5!fs>+LCYK;ngMqB(6(n8Zu>mM3gr0g$Hf zNy$)bT)HFz`pL;)KaME}jr*gCUx6n_l7=}=nk*Y@Avj?@Hw_fX6J@fTZS#Y1_%bB| z8^FQ5`&q@+^=o*)x0P`_0Wj3=XnWJzmPVniW^E~G`)(~V2p+pV!SKQx7gmTZNDVf) zz>EP*^)8ETS3SUMl9gwEVZOi2C0y9Qw68$o2G&qY;n!;bn(UPnI0R7?OXi;Sv$3Ph z;_^ei3r5&^47S+DX);>N!{qafv_?W;4URsyni-^D*&&SuSe{2jm9Ke6?Oo@h5`a{d zniWkA3T_oNQ*W1!ts(SLlmvQG{{YJLU-x{0Ht%z2c@k#;&6>r%V(3Pb^*^LV;qj@Omw|LqN)d zkynjex}RE>d(=Z{|M`y2tLH12_@W7rRj!4mvr!b%b)0VdSaAI?y{t{3+VWR?`621{ zbKhmg31aC6;O!QpU|$W)nO2J(OkfI?Z9Wjiy~K(z9jvqA0E zG#z~?cUkSRuOKoO+%x)NhYb(d4QHTm=7>H1{S;eH^K=Pgjdx4H6A-~3fMzw>nzPUY zh8zo}s<82T0#=`-R=VVXe=a&y-^T`iyw*392-on^%#LRw?CUbS*FZ#$;@j8_uie4PC zfvx+-zj}$Cs`->$7(w|4;&`Fx*-|0n58!*bK~k*;oEzE%md&w+4qtmxld# zfo>=~DB`%F_SbK<=zT$WHEjZW8#$;W60KCS7r7zxee@ur(k6?Mp~K(V^L_b4KfUwZ z>5u0}Xih;kU|fWbj?7LnGW@=SmFLL3ykqnF3SMzLVWAqa>j>9~NwdRh%n@#|=URCu zx4kI=JmixRq;XasHHhrHBHGV;V!j|AJm1OPXa$olKt!z=o4ZX$wLZ~cR}CM$_@p&KUx0%!y+@W7QLUyWgjwKzR^=H#+tD6YSmHsXmy6hma$9l7+#C>f1OzW;fZbz z1ldFj)$N`VxthMEB0RDquTOreba*i{V@1vTKeQqQ0(%t7PN=r4U4>|-lRivH&AN34 z3_i)1mwGIj1~v9TQ8$yP+E;{0%+F39;CJ{9%Em02ss77+vbCN*YY?EE0*n-HY^$;j zL>@>iAfSum+I0b<0^+afV4XayV7;LQO6HEo2c)Ouj@gx8#(7Jl26spF)~l;kQxtA% z6wadr=&+qh8+jDqG(LtoP0(v&?48sJdVq#(M3ABxXA-k4GO0E%1oJjfU=*y|BJ8u3f)IFTe9d=wx0A+nXTD zoUZov>Zg2yGuq?z`a$-znw%i4V-*wxJU0t~E=&I!aWVSmYU!UeLxKGaO7eWdr*-wE zMs3++G`=q`|yzPW*aklyd;P)F#b ze!ln9fDSua{RXP~m@#bet^MS;hrbfVYv0S+dCe7O#_#6us@P*iH*W8l(*B$5D{3pa z?1FSIZehWxX-2jG{dx2bW{L&Aj@Uh1PK&+jhyMrf07$@sRp0Bt&C4e)=K0g0M4nE( z)kkv+)6ydYoC7Fi?E(8&rfU)@xUz;Gh}v4%V!D#5}_jO=6tk?zom8^M$g) zwNv|FlmvsvWM1$Fg5+#uz}j_xoshHFzTt{xl)?Q5w?}sQ22_@MF|K9TDS)j+QA7>y zf%p1j={s1yoyQ|$=Qh?!cJN*1(4{8zbC3iL1T1*TbUD$S|55Y1)}{Azoh0I@6uie? zt?&2%QIY}v#uz4l(~0}LaB40^LBQVU$FgeJj091Tm&;W5*l#PSHhx@MqjvEdYge_E zcOra_mAK$sljIx8oef1;=y?yBR~mTBt>x}h^6)H8psxK9v2gIqasBc0-p#NYDa%N# zb3((-{E|V+e5Opkt(_OQ4;2|vSjSl8>>92rLtggZN_qiy(+#hvb-m+N!1~+dR=<(g z0o#qoEc$;Rk|>ug6svevT&-2LIW~Cl+J(W^YmANckTYMT>8E25q<3w`(4T)R@Rg#ft(C9 z_-e86PjFA_H}CB8!~nUpES5*TljWEQY{8y?VVL9ybVD9#)NiI>T5(~&Wwk8h7>+o%jJ%U01+aqEy+wXAy zp@^1Era;#6E4s)y(VLjc;`{TAIEMgL0Dk^XYSurigobbL_gjJ4N*SSMl+F-(=YQV} zgTTB)KzIV0TNf9UXTeMd`x`EmEdOohaTC4aQ107W%jS8uM{?3P-+UAbv}a0E&kK0q z5|5e+A#bNrHQl zLuDWEGHsjc8Mnri#Q-+-#YAn4wWoV<2(FsOrIH$fHO`8 zV>!#!HpvVZ-yRp%{7hep&H!I_=$D~Iia|ozqio~n=+Og;`g&!s10}4&{gkp(%Z|F$ z^?qjvtLB;5!lydxkA>$z9mqHN_hLm0Hpx zZLVtd4fT0(_MpQ9nDAmi(QV&NxR8az{d7i%n_E2n-*$i7lQz(2gfxLQUU+>mFw*2a zb_1e4FdRp+(q`+a*-^RK>4qhDY*^(t0y3VJ+g<&y*U17&h@tp_;7YahGy<~L-^l=5 zhQe)ov14VAgAV+Uw@Z1a?WKy?6-!2$r)^i@|I0X&J?~_n5s?5A3UD`PBq4s9EDfS9 znf1T3xG^tf5n{TXtdvZutRMSpa95)v#Sje-&Qjbpc$fo)a%|~+*X~bOA7vK*yXJXZ zLjq>?pbuj%G{dtChV2ceer+26{d-vf-;rRS@#!FH2L9`L4tjb|rzjc*~+M(lhq#oi%3b|QL4jJWR@g08u)!~5# zQxxUnbJ#vB$R+_I*;DbkEN5RM+R=bnpI7@9g-I-Se<$RzsPgWo8*|XFQI|XwZ}$w@ z|BcuJa}b1kaK)tgUZN`oeF9*q#{n(}UWJuy8%G7lhLwS59QW&?=C!Zx{QVXGbQ}-l z1iXde4d^b>He64mkbmF^)|ZdX-BgyG*ejiwBr8`4SJ+<8`OeB33Ffw=;67nU|PDCmiWbrDBQef-I(BF0HyX;tt_n+KGgsWwn88FYTd5%~_THi<3LTX{j z(_9VB((d*M(uUIw-7x4guvao&QpReGrl_#GHi~YvS#Y~s))T1In4GRv4EO67Fsp&AdJUOp)gVxS%*@55)^1TaQ_)Bk z$?>T~NH8s@#rg;j1$!*W+2=_NWw>Ts%FbFF5UaJ2yBk!OWxbi8@7H7dleYb;vegr$ z-Mts76x>g3FuX6G{O|9vgJk}}BGXXK8-|ykyYiXx)nvLRlUaaa3smZ*RPTEEWp9T3 zrSzjiq!<6=yR|N69sQL4$B_FU<*fx14M;M_jQ5{l^K!uzyIhDFGIPm%JdL)q>5uN; zXuITS>vkf`p8~bipTLxO15mnn^>(K52$V$u>{sx`%JjZFgE{J;ctG7hP)`8q*TRC% z8$ytzR5zg?GuS4LGBH0-j25!gvDco1DHgaCq-gfEebl|6J{?L%)_l-9?ytJCg46!H zVW5QTPgpqNn~`>$OMk~L9L`0AjtL*D`}H4@)6{K zX*!65976(*kGofG&f_%*0cV!}=m<=yfQV#Yz-v3h)c*XG9x zVq3|>61fx4zzv?5S*bqV{0hCWz>DeT9z}BJyBE%s~s-_czwo zo)@IqH-javK<1Qez6xU^BNG!mf_EgKrl#g80Q`M;OqxmZ6*g2?-vZ&^$+q98p3i{W zwXu9XVX}WO|9L|6zJqqa@IzFg|8y#++t5-qPx46n8_zyg%JAq)EWeF1C0!X^yq#&2 zrsdxtFg7uv3?feJ0?A;88VETNfXbz(O)V)FS?JUBO9pDiYBI0lDf|gRkWy7Op1p7J zng-}gF{w_Ge)-Jf^XWTc=1G*vpR{t|DN54^d;I3v8Y^u?#MEZlN}y@Lj3K`}3jVAm z*~aSXiJCGnLuMHXME~9N_4O-VUx2Jt9I;lA?4~j#aMYCB-tG_53PBim5tJ~Sey9ZU z63orb;q~X*En-JLhQ62Qv0F%xe)*}(D4=yN40pm%PxmxGUia9q>}Fy+mD0afkM;K5 ze8lY0dFhj<la=`FVf)}VOv`pNUnS4 zs@2SwZSeN28%!-NrOUlq))rmSctaTaKB%Ft;m5|Q)*J3;;#zgHivMFJjPoR*H=E6-Do+41fD z{D5`;D}|y*q2*}^Tqwte&1@>toK+utcB=fN!$TcNa?@Lu6$7)W zpQbDQr~TNLTyPz)lQHFPZdVE`Z7Vh0W#tjaMWzXIe0-E%L=?|Y!q*lG^iw(=eNOzN zeAgO!Z}?Due|aWBe}CdA6%1ZFd5MZz+zssHjbsf-2on+4E`?B+I>ssd#Mh@&P4){e zthrhozUxn4xCYrvbS^4eq&;m2=_lLA+o>sbK)r?RPL*XSu18?0q)aFGLR5`7Wt;s;lOg2O{ROjCF3&q|qnq=#>aQbY+>dExz^`*kgZS9tOX@tBJ13U##ZpWAed(ypnAPoY zOL<_3W`4j!VI6zyf0O@CDkmlY)xryv59_?%S4$5R50~}o*vl8|jfKMv!wx+3`V+UO zjJn^EQ62f8Zwr{h7=U<-48tz3Gblx%_;7Q8FUHe$)mw`;CUW&*ZB2I3pfuDX4>m*z9{V3nDk6l`7y^0?3Gyg6KJdI5p z#o_5NQQh=7$Up2;j!{0XlUD}Z6x|DWw37=y4n_BW8*5<-BJUTqIk_-;HjCwRf8=GL zv~|&ByaAi|*BNK~tonwn>mtbys~*-7^pAC(59D9}vrE8>Rgtv{W?O*v{j(<(_`|k$ zVMp1p&hHi@UJtAyk4HPJ+xF>`%@+cVi3&FgxAl#aqrb7YbREL#OM?l-P&zH)`;GCQ z$K`L1=?V!G6qfhMp4_-`^!76e_GK$P;ZjkrD ztW3v3+U}a4+BHM>f2!x8{}+w10XUb$ z)OmP)&|K=g6wc99&QZ9?&z3%(lS8tV%R6c!TsKRL+!SY5%-JFFKLfrciyXyL0aEW} z9NC@^ueWfSoOqYa)WK?ED4>A?xy8EG(tR(MwvU#MYq^qJz2@IXj6Ic{PnEj0Zv?0{ zZ8l%klakX>15((o6W|IQhyX2d8&05v2JQoW6OY7`lFKgpKah`?e8xKS9Rk1@$|}(3 z>w1p<=tWfjblgU4n)R~o^Pk_(^S`GKP9wZ1xbpG|!sDY;PnO=(KDnOzZ;*66{gGH* zbyO`%X}fSI^K#l(tt7|`CUAtpKM(ra5fhjI;_zTjWW{PbQ)9-*Rz9rSLPrILte)q^ zcUMgp_GITvG3T1(iBAi=aSR*GK=fyvBLEIu0}~Y+D8Pg$o(zPoSV8v7K)6(l=VN%! zljCJfe86K*C=o@Hf$v6qU>l3Pp`WR>S9y7}6nqo+v#s3WK^O1Dm+699Zs4P2INt|v zQ}FM5SQr@I_hQf9XIhc(`#%PAZIga24XEZrlD34G3bF`&{w9kNKt)2fbR*Q)>6Cyo zL)2b1cJA@8M*r5{#ozldHB-((=i$76DqZ&N>W#!+&lVj+*300#Ei(LPcg+C93}*@o zBp*QO$2B+KE34fWa=F9yZ@(t5e!6k$!JJ&2HF#=Db zy#m1zuy7<01&bUfi7VngtovS=UN>v_&BpwZaeLv=#UpvxffP-i6o!5dKX zukhF<{3lr({HZaERoQtD^;X+kpG!L047@KWLka^HZXR0DeH1UoNX!eOyT7UWpmQTTg8-SA!D6 zUgFLoN9{CSm^}?j1>d(IUu|8=d_TMiRXU*!35<1-Ps#ZXIw zb>2aa$>1>55}wQY;sn-nAj@c+C|e0c(|`od;hj z=97^Wv*Ho`04ex2esEwp#=#KS0D3SC55_J@nk)7@I9@Wt@s|}?MfARV_;}^IC7D!G zxX~(ed;b-)H~W{8weAmRO%I!KcX!*PCm!?=J0px>QWhu@*soR)p&xi3j3a{r==5|( zlI4yHx^%o%Sgy=Isxhx0PGSl8p8at`s>@>atmD?cm+N{RCWO|1K>KH`>d*0R<(t(S ztD>3l1!-f1NSsfq&m64Q=gviNv%Y}MNZ$M$IDL%UxE3Vv>Go}_-^!I*@%cF6GgkSf z?R=)mhA2i{T!a2?|0rJOyy|GidK$;d7m476BMe%wHUf%WFaa4c=oV)nc1LsU+=#=~ zmqBKRQ5UOG<9vlEH7d;Nx65?w=Xs1zS@wf8YPynZ?6#)_H{h=>#>DR_+_NG+laDoi z?H%qpWu+-X6n8&E&T?(^0w;r?r-K`8vl1T;yi3~jR-1zpK=Wjw9_ zigNHfJ4LQ!J(OB*~&PwhFk z)AC3T7N^^S0vpU~Tz#+HOzZdH4kG|gm}Qf5 z;SDLgX=ETSo(946geTYU&I5+_hz?kRhQ*DJ&&_R3z?@Mp#Dhj@=mXywVz1Uuo(i!MvZ%IeoV(F8MM|3zF+Qf> z@M7y!zDbZZUYzB-XnTJN1+wQ21XK_dzfinfI_!r6k~X5Z>Qf@GzD)LQ)Y0Ap+}!+3 z))|vWWj0ZnDKZtAkbB>P7^G#)t^)XMlj4>V^QwmF|J{G@_SO=d7&D0bE~OwO;i z4##%=Y5Uxa28#HIw}nDrVeVlqO_~e!1Lvrbfn2H>cN;&}1Pck;ie{k^@U zLOh49SFNiF_ji3~{h6%B%D7!8JD%>D+RjI6Hb<_j3Dqhxe;;Vba9*J9Uc0raT}N17 z*K?1N;IZk~CN>>EpC&87IF^$^PX$byI*O8ZilU$tgY~SqCJSeQbK}v^Kvi{@cH^M7 zJ_v!7A8lYhT8K1I22dkInq)D%X*59TIO?miL1t)t2D?T~&U2Yg1)l?D@ z(i(*#lIVNrp}p8pTPWxQ?l|xO?jZ~HxJw(Wt0ozkY?|<6hlHzHk{lqbPG&9(yHNLS zt!Xlgs?GjTnCe`P$Taz%cB?^a^^ay|O(c3A84D(wjIG4L636|fq56$ilEVd2r23{& znC_8iAAf5YyrL<36N=GdL2B!@bz}s&fI0oc=yq_o? z3=(2FORE~%am2b6Qi@^GeqidXmhw zzQ^T`A+jarGZLc$uUkRjWFUo9oFj94bYnJOku2OB!lN+YVuWeOmubhpp#nO|S*pn6 z2dR^Jm=BvP2DLRxc{tPLnG4!`KWxPg?uPDRCMCvlE71+$#JxGs=ea-X6L zwoQ$XJ7L6r0SBAWL7@gOz_JWa4?H*%ICbWX(Q{|0P5Ou5NQ2N&I#p;WBm@~H)rPd= z%W1La&Rk>~7?Q@PN+$Vgy>ks}`mAhSW~O$NY;jVlSO6eKJTmr5kBpJWgC5b}V6Aa2f=*AiX~w}y=< z&-?NXx)2`R_y)md#gl0;#Hc}SLMSv!8N7$x{=z{AL6su~5uYdVp7B3^ehm+;i;YLZ zjZOOzh`vcD+F_9zz(>VC)KJ%l_`?*nLY5?@*Qx&n&5Vkxrqz~dRBCHl+I#Gscezry zX>%61RV=@YkLty;g*P)M3utQN2Tw=ID7=A=#d`K6MA{tHDlv?#y|2`wzAT&utL^gB z$8!&cT};0rM`ez^9)1`wj}qlnV9Xv_`?hM>pFW*kmjSZ}($>JVN2K zXW5Elu)en3E0+Q4&~&#M?LKH%qfm}`0*4IC317CpSRRc>9rCNkmZ~=MmCE)`SWashD><)i{^rlX z*h^g-sHz-6(cW5x61Ydn-Ic_ze{qzD(7?%kv`N^q%`kI)+NpcRoXJ=5T>DcU-5?VH)>{Lm`?L1K7UH&2U#=`oGP3!QLW6C zr#kv5#fOyEo(w(XWa_p_yu>^<43x|hVaHy@{BJ`Wle z1>)**Tb?-jT%FlZg9*v5ns;FJ*$h6HS1^!JR;u*c_D)@YJJ9>8TEkM`;%dFqcGzaxcPR-f zC}5GGYLi|xYzuEdEX-H9!~4=2EI6vC`b>!HHE{yvMB(+5+UbG^K7y5r8oqy@C&gS4 zsvU40n$7Ay+iiFu*7;v|p^^rqN$Qm>;Mm-N@hLakZ8k-k-@+Nutd>8KeYb4T zETf?=k*PR`nV*9(J~_iHaWGrR?giQ@7WtBv+6Y~Ej%aPCWRwc3PEUie>#QKXRSt(H zbL|IC`Ukqiuvc-X49xiEPaSP$$6Cnh2oiVLgS746!Ez1yV&vH68A@naDB|lyn%+HN7cA8jbmQ4YiQ11 z?J-~9KQ^gLTz2PhyQ^Q`_}?4Nmd;ildu`iqe{&f_tawec^~TAQvveU}GYOhMny_eW z8a}*^)4i=~J2`?GI+kCO#oHuRpRyRJKyQiGq_?|_k`C$>h+Eq5D5C(PMxUJ0oQ!i} za@;S)ao}*2=7OfaUACGvyvy|s`pV?R=3lpPIvb5G;2KX+h*kT^)*prUYMo!Op$8@qA92`VJe4`=91siayKDG*#?$a z0z|V0>aU;{Ad1~!7o*P}!yLBb$lJZ{NE4R=s^wXw-f##~!1Hc{5}B+_OfD_Uzc!Q; z97i`!J$cD0z)b7k-_UVEDOfwZOHaXUrJ^uW2GgHxk)xxdMn#{P^cIkiFTa4IJ@!ie zuecf1kkTRBS&n@-S*pX%`ytF)9Qj&=1sESwepaQJS4*c$;2CL;|6)cmfy#;v;Vc{D zMkinOWebdwm;g!S5$w`57-1Lq%#a442Z@?C2MQacW`GHFRhXd0u<0rMIeGmq^h5wD zUE#H9H3!%3W$_Eh`c+Gl>g#M+{|2rYVETnkR_!f;GoRlm)vS7B(04sK^%t2$&?5hi zZb*t=k60fc9FZQR&$a-7ed3nwr*IH3h8eKlYvH8!k0>=|5WMGLV^h-C7t)E3ybordnVI=>edi}^h>Oh< zS*^x6JwLCl&h;)Vr@Rs9e6cb=QCwmTO7($%1z=$#BO|%L&|mxqo;uQ*3amgy%v`YO zN&!IRkgpD5o@c=sAuiodeRu_~cd+%3UVCej}uRDa;s>?EuhQY!j| z&*^D zTqSqhn}b@a^ck)y6?B}I*DCBR23eg;Mo!{yWY{49TU+1*s2)-xM-)6CnSgAvGcz*;gs{T%^*5OtT!^nHYdthd0KD0DeqJ|wiq@8AH zceL(9zvb=ZsBV4fx(Oo#jo)boyJ3k6GF*u(@q~N|1L7cc%)tn73ZX(MNS}pbBK{Kp;(sqk*x8Zb>g?^>fH*x7_pk_RiE2Pzsr-O#G#@dWsW5)!weV(V`=@ z6^Hdx55cAO$OMiJKM1Qs-$lX!$k~ZE^C=m*wf{5Gv}m08)Bda2B2q9m1TPWHN6TP6J?GOa~g3=}8l zc-SZy3%HuaW5~^w;!X)opEQ~jW13&NHPI`mO-ykXBqU;ar9}n?&0`?&LYC~6mWi?9 z6mRYA4tu{MsEFUa5FAjHXD$pKI&1ip(~=L#PPQYJWBIAv9B!9m-u zA&4z$E&Ema+tGLG*uo2kpZ3sri?8An3_+0MPgJi15-nwxXeV%vUex#YG%q=8^y`wpbG*cuq7n+~BYC2~nMZ zBitN!7A6{e2*VqwGi)_l$GVjOkIpD-L7*-xJ+YVpyKzW1Q8cUtUcu~()XV!Tm}noD zI_6DC&aIk2Ctm8RZiV>tS?tGs9j}4xoR5Vtc7oUU?+SywxTXZLDzw%{5k#G_D6j!w zQj~b!$^{zT9n%SjHZ3&_V*;NFYopeb-|*JN$qfe$ER$+?pbx+NJ@P1c;nd6PLmMWT z+X=pI4J@y8L78sV%n{z&v#shVj$N`<{cc`gc@V;#*i@KMBMBPh;mD&*c~Y{mUK+pGa0^lyk+Qc!2>1Kb_xro=`=9&qxE~LH)W_xeT<2Wpyw^GB z^?W_7l`>u-5#ET!>7{=*J1EX)AJ*Ya7g7*x4Ex(-M&*M0=rgQ7;_kHeFXOjhcuYGqZ>A(V7&t*y$q2ih3R4v|8FxUD-fghBMu1F1U^Rze*!^d3cH+L$-- z2W-0=DQ#L~uwL?9)A}Qhy)*6He3h(4$SkA5`;%EuB(}6cPlW$<*I?1Run57KBO=>p zMr`bi6*#6Qd}k-w`_43y9Pc&bLa$0zAj3WDXFey1{h@flEl>ta6>IBS$tR5y2TOZa#Mo93`aM@?{W-MyQP z!J5HR#s(m&?H!(%+>L+98nL7k1dRwDTr^{H6|khWARtl*ewV{$$0%*e9>aqnv>h49 z5yPGGqtz+SZ#l5MFsY|y?qkashxcVMfqj%elr<1 z2x5tp1cnh}Z@Doq<|8XSc<+`^kUEBiFo9^Qf)(+6FkMTYQdn!iMND_ze?KTMvw=4`zRnnFaY;fsPm;8^ zq9m;TSgYVN5j90u@2uUI-B=xRw)Y^g}LNsTWg zjAxt((O_QM&4x+e-=vzjblB8PW7=Jm37$u9mZ>W2Rj5{7lV>@z?wYgH+hHh)Z5mUB zSq6|_4$ddq*iyi45hUtxqKnFSMmq0aHHt*YRtPY(p+-ayr3j_GSGS2ZGK+}VPUnZ| zXrH|q6#hOy!9uS$u1zl4Mdu)?tUXwPa(j+}fhmO%Hr+z`>LNd8u`Nye;D@$f%HtRv z^PhZh>7Ksg!VT18jVq@4;IQ<>*$u(BQj)Q**(9f@Fu&$eH@huKhDvFx16kX^o{Xrw zwK)f&v!8NY_*-T;QTJS0{Fht<7hAF4zHxFHBM>exaSPNp{{<>N^q-t?W--E|$x}K= zaXcD61>W13w!v-S$i};)O7I&4M>3LdGBHH$2M?C;`mLz)BO=Rr_lyiSl~# z2j&64@pa68Y|9N!urFKI(AFu6@Va*3gF0DYunL_F5+pOH07rZn$dd2GEid+rJY%GW zO;{3pVxe9ew~$bKSNbSS9t8g>T^Pf1Op#lZ1LQ!KJda1{?Ow3UFzCrQ33RW;;I*?5 z{(MhD(Yb1+w*2t8-kSKginauPP)JaV5k8&laW(cdF1@Ftsj1+MhwtX{7oULy3@mPy z>jvF==YfiA(i(c~K_e;isf;6}IaPBuQ+TG888n9cZodjmb-NMewcOI7vK_WrRDU&w zFD>$%!}}$55_y}|>bOGKaCW?u5<*Gz9DO=fA>|7oMvOA$G`+|%f= zbr>XxD~)2p)OwEN-@N23jA!}|VIKq5i10yh_aW!x8y5MokyILND3?Mw~Ci$gLP zWW{l<5SSOF9kEJrSCKdVbhTB}pTZ|pvTe*Wh;OkZ= zpOx=yMpVIvFq#$!S1P?LW%~i)LaZiC?@&oFfU**Ok%#@;f}V(;ws2RRF#SiNc%4H3##Cu zba41|=mcBYtK3^trq!sT^j?gb=5#32vv81(eaEVmSzXm450U1|o8aSMB{1LyH+Q9bZwcMDmb$uX_XP{m&k~cu*DY zBKW(Fl(MR!-7L-EU5CqiTEe98oz}R#`PRVpe6DG2w!YMYzL%1b&aom+lGkI^G$W^Cb+AArdG&WWRrJY zwj_-kmL}4YVr^~8;6&VX>7HrB(glR5Pf?y0_wPi)w_vAw#7}e~=6455JtlSRX{27S zKP^imv*kc_OC=>TiMja4!?WiEKj==VVnfQEBudM0%y1rU#an@qheBoE;}Z_iq?4cC zd)%Yb>$;O|KOMt&gWInh zYb+ioVNV-MyanlRJb0IQI?DWWXxfPsWhJeMRMPiv-r{MY{7xAD;A+i^880ybHn#dO z8`oA}$>()U3(Pp$=ZNe)p&;oD5d%H}5)ovNWq{!GKYc<=$%5Rpi8bbINX8Uw;R&LD zQ->Gb&*F)+aJuXHCE*FWP`Z`ms3+V_aiK>DQr6u{2p4@#UnH=9>OoXvOz^96hyV>~gg2Pmo!pp{+K?MFJ z3CF2D`iqY1Sk-cZxL5?*A$FuaD!CeT%LCQ#svL)Lv2iD}nImZCJ$T!t+dF1{8Vf$- zg&jL2ofo@O-ImM(;{GX2VfYzB?}Xdn7Di2k(6hGS?qF(LZ;+A%zBHSRu`=UYsg}Yw zBcdh5eovw`La1BA9QcN^jep12Z2*UP)UrkX`oF{Nso+xNJDG!55%X1SU9H*$tL(2B zPlSmRYi+R4do>(v#WZ(PCj53T))|+G3Xani3H|x0AiwcAQngfUEB?<~Y)oN5q?0&{ zrAzY*Yet*ZtG!CbuOn3wu3%cmsN|T_EywUkO|CrIrMD68o#RpYk>P$|UIZK1cHUDx z6`3%Tl2rw5E(4|n5o9Lg>RtB^x*miM+zGzL2d?q!ZNxUIzDY#R&xod|+T=fcn?GzX zXIy5FZPANk41A|>hleSXay3Rj+72TlD2?pbqPuIk&#+i)-m$W6cFUD0w`|rJwgiF| zOG#V=;xRCZl)P5{;-Z@CmTL1<2y=#W2vLY#3*}W}-r1zpQh9OSZ!1|&J?Zj2BHa=zr|7@#{vO8EiOOVEuuh;|E%?>+K&}7$dNlXfJ!$l>(O1|I{LjVM z+);E`fq$Fwl&%Z)uSrH8!2f$;fv{Qq7DG@VxJzvqSMhVj4t01xYo z{r|Z6n%WMNvOz~2PZuoy1(Rz2 z$dzSv6V*0`-IR)%(z|!lbRIfK5Fq$HRH1gJH{MZpQv|A*-U#4a*kTrYKi?W{X^>&5 zTodf?9sUuS&%lzb`0RqHlgpj4StsmK+|&fQ{Hw%xNY7dQ?-+|m#HuioRshqyLD zjTKL7BP&xr)@X}eS(nK>4-Avul}gfau?BqSmHZL_1-sL3i8BpjV~*!Y;6n8(N^lvD zJoA0r+jF6pbqRe-Y z8M8#kT+7yl8R}=ZayKKm8Y9zGKyA@xVm8L-Vyh6Vv_h` z6(2&C(7>5(yvE*mqS3^0B%Huj$=%o{QYdqfAt?caOgg3D=%b^*7AM|yR6Cc&?)&LY zsx1NLI2=~n^H1aB2|ygNIq$r{aF-;|TEDZN;%02z-DMw?GHZT(RTl#V8PBeo`uO0( z9_9pB&gYUXxkSeCkynB-dEkTN+*~>uAE9gHeL}VN4Pl+noyV?VAPgXL&uS9Iz>VA> z4wdo#^><{U2Ulz^5AteKAiyftf+9Or#Hfs3msDN&r0cb3p7K`T7z*b$wR}>7RL<@A z>lL{a+0xMkqZHkHYp6w5rp2gu|J5C8+FKS;o;S0F#<9)*{F2j`mrJtXMZ%R@LmAfB zSPKX_(jR{gzLi-uN|o8jaGprkDV;3#R<=hmxsekqYOEYnPHNk~#$JS`kojb*{jDc^ z|FM!#T6kJw*}D)!B&IGh1TTH*Zi4F8%Hcym5MF((BrBz@J=~Z0O-$y7Sb|Fx1BnKw zWz2H=5Y%p^HGb#xrIu#MXd8JF$^}`xk*1HAwN^|Pkv{o&bWp{9aI2-pevpbrRP)FE zahcvbuRr=9+&tI&aqzZ|F|Q@Z4`o$c@qt6P6DMbQDAHH==oVuBFzQBsB{s!S7t*Dt z{8#jTWc<6`NlAJ6T%(T%e`37-G{BA4H`f#CBV7(%VGA;AqJ_}ZM?zv22vxJo)`1-4 z=;(M3yLjp1|9Qz>17j25D&)U5t|R1fFXZ#Y#Ke#m&_V(DFKi=bP+;uRV@)i6`!+(B zp{`E-LfD4W9$>7hYin&3rq0gJ>g$EuxhlyzmX?-)^4aGdrA`@lca>bO!d@g*WyxeH zQPCt}(*tzpGhBn7awn-U!DfKmkvF~^mNz;^+Jtn;Z&F0`zLt+c%~h7v*VjYcxWol& z%kbPhsROJY=VzyYC$orLJlVJ&i=jo16WD1{f!bbOTZ?PIx%{D`q9P|ps#uTk1h_9A z?(T~LkL6?s-{&&-T8(l=&aCq=HC0vdUW>+h?aE~bwAS+S+akkm?(U6129~)ryTlQm z%hd&n4hP|OITd<#fC}xkigR_iAR;zwcaMZ`Zw?Jd1Dre;d7qactv{>>x*I2tc^_T2 z`6Kx=h@LlB%;ykp=bUuyVO;NzEwKjc(2V7{yX^gy?2mu%k8t=_ctOcsPWZG&WgJ7eP5*7yJ z-@>wWKR-V-KDzp$29#9+H3V`MBz)KPYM;yk$c<20Q~%V>xOxAxq5bsM+FJcq{W>Rb z0Rf9B4p`jETnCUngmwXT=`U+7CuU-O_MN$mRELPtDk%D%{qB}%0xp=u?^cqf!A!R0 z-He~m>@6U(yTSp2BVQ8n-*iZcVQpDn9^ArYUiwdLneTwQ;nkxGCMfvy1JFB+8Y zRW^fWnxnz7q3zA5n~v677=vEQ%Kbn$5HoLk4p=gF)22UgE(W^h5U8+*T3TbHqb~3! zCq91`Km9cpaMW-5!Nd`CVWa(j<$c&puxe$%iakFb3$OtzlDGleXt`86|MhgO zV*r5TYVD^F)?r&A)T8y64FdwsL47!HWCi`CKqiK{1Q6EVpa-9db!;-6yU_f~^tnF; zFu_t)K>c)N(Pgnz4WorC^86_K+zajvZ?O&plk29ET}@0)VKr{;1=+2d+FF2&e|t`* z=DC`m3?OoC4Gj!L!tZw>@yCh>AJe{m{rZs48*miHz!>y;tFHe}0MNg^x3Wvh%Dy%S zoC6X<*U*sd@ivhAK*<>BKR?oX`yCCU!axo7owfeRLpMN8EoZo@K}YfqiSj}xH#Ic@ zmm0?4VinZso10DV>#B|cm-UAn{c~&m(YNvYo4y7MFMbT4#~n-ZF)6FR!l#FG7z}Im zS&B@g8uwPeIeC`!?-#{fTXPZwG#XE;HyUhy@#4j)azgUy8q_Z6OqhP~k z;lY9UZU-4?&m@_mIiX>{Hyr~`B+h?IpmxCyobN^lM200#`M|X2; zeSww!6V34Rljd`glZ`5rGmIznccOM-Eo2df9BLN?m^atfq&ol%*aUMprMxdO{|m6b zEThGqfLW0EH7t{Y((?Z_Gvhlbv}^>e-SzxXTYE?|_dCQ$9HfF1ksXZCRVCG0n> zxf_Eza@c#PZ*B1RbPJ$^4J1I@fr(Qi5qUhpDJIxITB0G9ElCz2J{+HFpb9&Y-1Q(Cr+=J*%qVg?q!3DaZF zI&2^Q@Wnwh&&@x&A7pbw=y?-AB-9JxEz(=bH7cdgF zS;4TVj{RA<(u|J)gwny$G4yG8ep1h3D)2zvz#z^2?h?=}(&nS)U||7NB1Ryv7vcWk zq)h#>0|C$lfW#|=s+}&XyX8Q%1Q8&9yUCqq7!Jtrj(IywbRy)=ojWGwwRw4YwY47L zCXk&@D$|6m-+3x_8M?Hf{RO}4Nc(CFCM*zD}4O9PWy20Yw@ zkB=Tc43t)X6G`}cNuU``>+TD`J0NtmCNHmj^NFsG4n_-n+sx#o=X?uBkx}-L09fvV zf&wQ&-#(T?q@_f^>iFb@zB%!&?H53?q5YN}y>+u&_f?M>w=q?uh4O7_DNZ2R`Y|<; zi%8R-#oHbp9@~I9hoc#bi;Ez2G!)QOQGwdisng6cJswR?;xsleG!zkKUI#1CyxTn&a7>0+~_zb-eU>Of@X-j9}J{m zAZZ2AZs)zXz(kGz>Zct!si#W)KYlDlAT{l9VAmC)G9U zZaz_ak32numnmK5*=dEZHH!e*_$EJp5zaFxEB5Aj+qp(h#CSr}C7Yro z85y3nfv?Rr7lC~ek%(EK;H`$(WUrRK2R|NPWWHi;2Qc~v=L^0?-gzt}=aAhmbWrmZ6obgzQ zjnRR2fvt-;bF-Fs{A@YxOZhvh{kYcF0^HFHQh1$@K`t_TdS`^Lzg&pe!4k4vT}c#O zVF=p)no|O1885Kpp)}wDa%|IPBALs34r9(=3SB8`1;dO6sGdV~1%qt|jgbBI3;L?W z2qtvxN4D^VVZx1v7mCP@C!V#=qqWk&R37g2-$r}FQ~%~aeKq!~W3Scn=fmDGhtK3{ zNp5P(7n~gioYzjQ`+a{YkmbErWD2&azDy)jO^EdZ{p;6tnV#nVOl^$wALiyV*Rd_` zAxRr5%J|=Y9#!_YLmEXJ^;G?_1Hu>YZw1onXUFSTI1FwW(*ltU|G5fGzdL^XTnGb2 zpA?_IJ6&#ZF^GRbx6Qv+iZ=nb1HlS-Z{9;4IRCfrT~!Kuk#uwv{J34*S_jVdH!icd zINsX^xN#X^9BCXsRQ$`hht9umJY8dbm_B{GSB<3{j~bWjeQ=-mNedPUIv506eS{hg4|n6r-W42l31b#-3AM%`Q31tAfzQ&^IgmU+d+H*el7F1{OT2Z6Vj{uc%Q zkj^tbx>o~oP7pYPEp0qKm@d*TuBhN9#lI1+w3-YFA8h6;DJqJ^P(y}iX4w5Qab8>K zk4w_c?|Va}iHktMA)f8HHeSSYoL^fjKoJ2P1e|BBkfmWt!a>)K?y9orr;_)Z(P^85 zH@FtqD3VrCH|wCUK|@Uq=TEJz^UK!78pRNGQ&S21FMQ0*!AnoW3T#0Y?nZpClOPcS z5gI^8!41Xs-BGP7Ek#Gn{>`Q)Q;j~gL(9(wNVAr$@O0}g5g{N=D0DdEdgZnWdpR`6 zey-^%0vRTXFc_>b?CikH#X`{L@!8>?L0#&R#nw{`K%j!I8~hHQ2Dl60*9uiqN1>(D z-vMFPsK7C5Ez9S%jB`G5#gTYLWxR4VfJmwR?C%0}H`q3Ld=eKO!JeRH7b03-v?&^D# z$W|VSMBE|dma3^dID0yps|{iDc>qfdfKX6P@Edkd2M$z7dNy^?Z^1}IgWiJxOY+8O zw&D$tzMFBVC2|6qr6e;swU$N{*dg<@g6b*B2g87%8sk&2Ke>&Nn^MqG9p2{3d~YyT z4bFD1p!+-3`luf(r6s1Et?jC9VJ4)B!pZ%2pcz!{$=NRtm}8ZE!CEx{;}zsN|ExEk zJ=WEoxU6gB471e4{gVz*M`kN5Ly6kaRB*6TzahMFoNGE=mN*w8kGeyWszU{sz*+Z+ zUN%Thnis;^!0Z7#(i02$yJ0Kh~@vhkCtQZ|Q7KHIpZ;ij|wav3QdV}wgp zYY>MqwgRAmFQ8OfrPpM5DmBmLObE|`(e0q8siVmMk z4Fx`5qP@(Mp>+4SVeXWZ6yIqO9eBZEbX(ZwSYZ1VAiZo3#?B|j(`Y6QO#iR212{Yv zbnbB2U{>6}4`Q5AoL*HLD`@TQ9BUhwH)60EWl}qz%*xT_GmB6aSdA zVWV=fKe-%A5Wt-sJ@WmequU$x7%C!_rhNgyUurlub>uW4XT5F=S^|&^nLw>VB71kp zklzu4!i$Iz@RSAA?H4A4nF41iwdqdaLWx_!aVYfYj*f>NfB7u}PdC4f*)^So?^= zq(-MB5Vi2}^8+lHXwT@>gVwINA2gcNe&`?r&Qv{MMWX&$jg(NaEFLvI!n-b0qP_RyT9Q@7Q*D$ z(qbg@2LtQ-YeWHp(YW0kM>CNmppGykw7s&jbL7j@I{`Vrh_HxSrt726Ir_S~c!&#) zH9f;WW6+lIaXy2BIyq%qtxR~kj)wyAo_rX9+^QXDFb10={z#xI#*-NChr?Yxst8A;U z50Ev@kog$7jmSZP0cNP_!F(({G;HaE1O^6#AMmQ!K|$07$~kNl5t-na*FUcj_m5m#S;&#E zzCS<0VLatlGp7!+s6{ax?@LY&^e|C8wr0FO>)R~W45JpGwywWEy1hgS!|c9>2Dk0# zYx;kjJ$=~UQwU>^@kxB7x^IP$)5sV&I@3K@^x@&UI>L-q@6u@8UQW&_J%>|WswJ>ASMO_S6zAeVJJ4n$AMTbp!hT09qCz9h1 zg@qUj?uANgtT0ReUEJBVl_Foo7V1=^=X43c3^8=>>|>T!TjqVOZh;@ljfC5ialw+3 zbEH}DJ552>$WRt?qQPrgGcnQ;kRMsOkU zgl|b4DT!W7p7ZZpjz_P!YH;Dxqs=!|Xc}g>Agk-u$jQ&gK~%>6?3V{LLZue;Gd_3T zfRzmK%X^dGZ)JJ5t?zT1d=R9FfLS4tF5*!(vHsEjq$um&EetYjDRROWvKC>;X{Xk7v3!s{OID1f0S6=g)WB=U1{_DX{`85x9mNH?o3& zj0u8^(uxXa_(r(7C`ek{pmX0aO5)H(dx-t9u&~hGk?Br>`0l?oorTzbp)&#u5~QjV z6BCDEs%xQGv%gP359Sck$#*tGS!P^x{>{yWg@w?eP`!;+`~f)xjZ6-_jxc&f8ielZ4liqwge(2up=IVINLxGS ze*(HF)o!b!@%O~1xFUfXj^4~I<3J|8fiA(<+D*Ak+t;2#&mw_P<2~ZAw1dImP%A=7 zG?*=6icepQfk%{cr@8z{}E5>vw>vslbd=JCsV$k|-N_5El8u5{ZfLZYSI-s=yWo{lVl5 zIaspx{rq|K4iegq-UvPb3C>u7D#TDC z-y?Y;BqLBALkDJskj|D=4GO~`TyzE5n&lxl-{5n)KLNw7>m>~&8$1PZ=wX%3;zkTB z@v`4?*1ZL3vjD~Zt*VWHURXp#CMTwU5fcLW^V7L=zuvf;x=_;vX9u2rd)E_c=QcWz zpuZQYo(*E4rz9(&z}?;VQI6j;uCMWT=|NVo>4N?W93&V$Ng}UMT0&*Z^r%l4(xUEq zcKB6CigOAn9WUvtXY~Ksy4)SENNx5kN^a~Gu4{oB;?DoGU>`OVE~B7BvrOf{O_y5`^;;az(&!g=_h8H7u)qQ#xVvkR011l|2(H21oxtJ*Cj=*WaCZw5AXspMyWY)t z&pF@s{sH%=3-dfPTT|0rUA@&)-F%uz4K;Zj%omsd002i(K}HJzK%xZz5Khq%;gVpo zR95&2!9`163Q##twFm#8VWF>Rsj3QKgI}Wq5D^FgNPkt}zkqNX0P?@C0RSfW8D3N# z!asNO5dU)*i8c@EKi3GSe-&rVV-n$o7})6OyXvc|2$?y2;Dnkxm|AdpesKJ&01)vM zf?s~HaD@UrKiJv32ziQv{-q%Vzy2%c0s;S};%X}j(pS|0N;^1P0AF!JI3XZ0Odt>_ z;%sgyq$MNw@5kYvL_yZBu8u-nTpk`CoF2TK4$f9w+=7CFTo4{E9v%+328WB6y(`p{ z!`_Ade+v0eIWiV5X3jQ_t~L(#z`x}}O^MM0py75(?;f9!O%vHYhddzXJV3*JDk zzjwH}IU!vCEgSx*$X}_Dy0eW1yym~z`n<|DW z!u4ObiD6Q_T}J}|Bmjysk~*FUhuLUZ#1!kEszu5+;Q)fC$7gC|Dri z0tqtva5&4fBr!=*X@CM5K05GwDCtMcLg|lHnRcyP-rZ{>jz=r4R`(Xy{{9cCf-c2k zyjI)d$D@LgmG3(I_Gio3^(tfJ3J4x$B#{4myif;{MyuwCcs<;l%8beDZ0+pO`kZu; zkdO?S*PfQKhM`9U{QGcykEl>KK*~X=X-zkXVyf=ivS6C}uI=WIm%r=|#rgn-%C z2@#dD|Ftwv5V^22Lt5SG9}!SNVxLVxX8ym$gC?mEwe-e5mo)t&!e;=wkuc=j{x9=z z5z5N9C$)|K5up<%v|tiWef!6#m*H>&Ty|M2{}CZ$C>Wze?!NiQcNx+W`(Fevi1q#v z1;MQhl5yqur_Ez@K(`-MAEVg+5lONeXf!p{AE$?wf`$+x~0pV5x35=uv z@yY*NHzm+sOu7jmy1BVU%793tNr;JM3Z@(riItGw#7MAx0#z&@dmkx&F7@*A5&?7Q zKC3H8K~baBm9)d;#}^d(_Oj{)g3WItFj*0)!z9W}%P$Y+JMNEKv5R9~_}*PmaGT16 zulJR5dtV)T{PME8-2aiu@4(5%_5xx8a9f6kQ={U%n1y~Ri~21PNcPUhX)0fqIH}!Z z0UCZ=WZdGq7em3j9P;O$cY=hBEG;Dk-va*Cd#V823q2&Oiy0UiW*YbRZJs_}Emi4N zy-g(+!$x%39yMsNTb!#fR4i$0%d#>*S?g*&ti{5M3+=6O+U)0F^+`4fG+N#-QcmOi z?tNW68X6kv2j1~p3q&J-kN9+Zd+SNqZaZIDARo`k!GVKpJ-c$x66q=sJj z%4WLo{~w=Jo4gATCN8F=Gu<<^KHk&78k`x zyvXBpTD$Ah?GEopOKhMzfi(f5%98)%!8;DtQO#}lxPV(`$24UX*1xqZTII&Z(mmRD zmUPV`t~dAgo_(wG{ZpK2uhg;S1Eco8D4>PT)&PDdtpI!LeXmzM{P(qUKOWW$BoLEw z$83HMrvZVODj|WC*hJ2`SagHkJPAKf)_Ypr4lHvPuAUxt#Fs4kQxbJskK6C5J(i(e zS(~}f4?FNy80si@cKC8Fe!JP%>v+L}wEqQTu9*LqCz9=Mw#P3Dg+FB_Ia1j(p@>f{ z#DPZilWfAlevFwAq5CP9-dKaD2>LkdYDi3pozKG>nz#wk=dMmnAYv?IK!nu?*V8^S z{#T|SJ-3aDA7d=hl*Ub|g2DOD_4aa49pZ4>Dal24q0+e`X$*|lvoXfMddTej)22l9`QaQq3;W~u ze7}0%2*LRMGiaJCXE|2`@o-Y~w3lf0{@3-m@NwJ8>$Ns4=6V6%mmhwc z)J7RiI^QDv@hr<_TyQHzd-7ZC4}X`P@kTYROCii z=j??3VkGV8Y&Oy3yTf+sk|JYcXD^srAQ%EYN~phnO)@5_fD4)W5FlZqWGd^1VR@@8 zNDXBhfeI7SaYf00Lh{8M4`E>aB3%UpodhaU3?_cPy*=TzRC;c{m{#^b&s;Tc%j`=& zJN!2PwqeWlccQ%Cf#GV)?<8e>MNU$sP=m=9`P9NDl-Ic0>M#hMG9)ANX$`THNIN-u z_LtXAHi657n+JhJp0YZoHd-;O9m&z$@1bPY^;rI2)&npauipf?Qcf9cqDM5|htT3C zXqN`7osPm{y)xHFMPbvAq z2l}IYz1ej!(XXl6AQ`Eka3*VWn_3amycS7g@w=u~zd26yN}to<=M=4g;xQC z7DBiRE8$XNj9@A;?zO&PFi4#!7!VsR&bZUOwzo#{wXzbG$v9#jk^C)>m}@FiFhuj$ z#{-V@&&<`ALpHubfWAD4<0fZ3#!xrfH)IJdOP$YXcfp_4;}P6*eXr<1zVT-IU|VBS z;_0&_cr+&h9$Wj=znv!~z9yN$RcGxn2o}#N9pP-XTW)e9B|}RlJ;zM`PMbYMi4y#2 z5N~gJlon6y1{hxxYQlSB^F$d4 zo!r7h+TLRk$+?ldO3>H&qzi3{gKD(>YuFwtX?7vZ!3d_UF8b*^2LG85?H6ffEPf$!@c=Xd)28*j(%)q?gq;h|)mZp{+5Vy`D3Zgs!+!ezzm< z8j?(UT%OcuVg3OO6Jpy!ts~M(ZV`hK<{}0nCJR{RWK9?9-)0_J+Bhl|vRpJp?CtgQ zf)LDJA!N14QUTlWsdQ<+`ciS!D!&+?Ap2w%FP=Rxpujh^D1U9aA0F|ypW>9$y9D0OUlRr}g2K`3MG>BL?%jFaI7``S?6xtyoe^^<0fhEl+gh#d68ux1BT$PR$ur(U;FRU=zRePb18ehSw$)M-Tr>r z`}q4~@7S2Rp zJ+~#GB=ct^9Sw7kh2o-G`CS#hEUk=i9^;$WuMjL6M+}}t+{e5xddJpu`(O~?Y=!p2 zZP{tS;C+OrxNggmo?f6u5@UCdtc=hJ3Yn2f4g%VXsaX#-2W)!ETx15WW72#_nv~&Mb{1M>yEn@p-<=D^a56NI$vCM(~V8A9kv${Nx z@;B)b!VgoXQJHpPtz$SrItkcB;tctEE6t;UZ5$=hN;D|w)>lmlDTUynSn7__*yCDe zZTUK1$8dL@f90{RZRak>Yg{OCvE{=iY3S>8>^I!_8xfw(6SN?~!40|n7@VFjSVR$` z(|hInF*RAt!!fcYeSMNzfr+7B<6xIT;1a)6&4TSF3dN|hABd_C=-WWvWbxE4ck!-t zeHY0EW4(q#--ODC0fREQgVFVNE3MV^et$SVC{ucJR9!)CHCHiB@E7gyig9PldQ$Ce z#gOoiK}k~skofJ8x)D+J#lTPK(|BNmTv+YB<&!Jw&%RHjA1yiP0q>Jq5e8#Mki&wX zUy!j|Mo}-A+#UNrA0$;ASAF1Z?lw`T_vqlfNsgAaVjhqBLxp}P;nw6zDj7}U2-tz= zQhf`1F`^>qsg^{uB$3Z|^BoPuo**MU4D)?XU$@X%OWUyTubu~H23WnZCrH1yUt-@& z&Jrs_`d0!n>@EmoDO^PTNaGJnFuW0oYz74=}~*Ifn<x5#hHcdLLnFDlz+tkH4Yvmg=( zCGug{ZCI{^Fn7O`b?2~&5(_@~G082bqbMSdj@}gm!xVghLKH1kjI4!T${s>5=T?jv zhjbnn^9g}BY-D^j*reSx=ePIn=kPZsa-t7qz>I#8bW4rgQDoQ#IZ?LwwnQTp+#@NR zzZZXORPhGiZZj5R_Dc@OU&hUk{F%kF$*)w1x;pFGlmkJs>jrw;KaoTh32v$A>G}8u za1ah3AG>K;*4;`@5Uv+OY+WsNWvV|6Ii=lAj|JG!35xVCOS`j}M2)QzdK|!CR(_=A zfXN3gJUTwuI*f}orb}C&u5}cX&I4YxCXD6s1KDq0g@i zZT6#z>xmb*&aXo`$aYSCe3Hcw5Fp)4%k^4$o|FJqxAvm;oOPaI7QkmN`dY4l#%CH0 zy{yTN69IYv?Lh7MTheGFqqyFUMQBCe6(_yK+NPl{o6AiDyHQ;rdh^o-`1j6_q;R zgRgQ{Qj;4&JR3VLD*Ie{sUwoL`Dm9*?^-`QdMbKtW+0Y~$YEd$Bx5QA{KZQ}|H*)u zYHnih{Oi_(;r4bqNOx@>~nhTI;Vk;ZZ30f}lhvvWf|+aF~K_vPzA}&?O%p#v4q5?sE1p z4AhU&BVmaZ^EJ-&RDVd>h8GzS_oKL1l(w+=aLEPzCk;SZdM*X8E_u|iC{_q_?=qNi zzu2+fOOwl&o#2(SBQ_FC zTaoA6PpH_bNBN#}du%dFu=28=UYoFGtC=+xZ!S<#vsCvCm3mB1?}?N03^ZayB4-T! zf-&0aDjVaY@Ve*IQJ#0+ps__yDZB8viWYfcwjWMu`GwIa8uccv@z(wK2IFNFzY z%*kT@pR?=I!v0HdyCWaW?W?yt$raK1Yj3|2d_<_lZL#1$IxoGbZt|@f)q;! zi^B^zNlP6~0+sucX_qrvHslTk%v%Fpn2O?q>cGifu@cRZ!Zz zDQD>c7ke&aXBK(gMCU?n?9vHZv9Wq#06N+@3 z8QJxhqNoflIIV8W&U5l%&Z!?L-jy+tGMqk*g&3EjnGj*=cLS_j zDA``D*A^)3KeV^~d@<`o`>uMr7NLQYfgVY#$HpVa2z^GJfbl8pTdpP1vL7C^kS`5* z{8dju;LGbvU83nmmbuqicuR5iMP1Tett}0WBbBZuqxHm&z!*D{0U_krkvwxNv?&(% z28;*#)SADNi6`A3Gst;-s2CFx;&gJ5zQwb3`A5V|Li|LOG7)j+{;XrdyPdK?eLZV{^A@B`86HwUP% z?yMrr48HVUDvVaC>WA_o`tYPi#R=$6FuCnuU?zH|UhyWyRnVdlzQ`qI ziObGmz`NvRgK|}l%CCC`{)S=sWRzs)s}*cw|Ix)@#wYOSt!akO4AwEFr@|O!>f1Ek zON3|#K65{%V?PQkiQJ)fA~Yf)I>d~(f$iq6gWZOIym+yTM9OAOu(TxQ@WW~yoj4$+ z!ptR_XC@61+GMUT!8yrU%{VXzw8M+rQak2rT$LWJv%!653@y4Ml5F@{6yGN@*0mWH z`fG9Uv=@pc2(B7@aZpq^)FAeroJfFUmy5yZ{h@8$#~PGOiz$6HTO0pf`WEr-^9#v^ zcOAFP2ZHtvi#2xitYz#-Ao)rHYk#-CLHk#z4OiU17veCgA%KPXI?qwN6Vui3*Q`ir z^oW$|ha7j|p5(^@jIk@Bz3Kh<`YOMuT>Cz*yH7q;y{c2&2vG3dkE(@=H(K_{jgcZX zXX4?i#ka)bHGIEuO6@LV*NzQ=Y7adN5u*~;&6#-f2bvD?FfV>}$l1eXKr|gME4Rw= z3Ns(m?G>;ts1_%w+1;6C(*~C%hGvGq5++H(rxYs>81b#`OhC+*K)R(c@dm!dBo`Fv zRg>vPsU#-ekav9BZ*V8*^s_mgB3r*!Sa1l%p<2mz*o~q+EVpAjNd_(w@^#K3NkgJN zS4aEbWOX;0YA7gmzhlG2FL{1272t35F?@ksTJ_HE*#!UFt86R9+w&r?h6eiYWKK!_ zTYV~D)fUoS?ui$@nR`9K zqjhG4StVg_ccx{0X6L;!5?FncpuHcK&AhJ|BdXMVyg&3C>02zycj!}PtS89QkLZYF zu4JkT^%K4C6&T{yKqVzLCPn2Hv~9K|+{R}xT=%OwQMcgM(iDEzdq2JELDWxM_VsV_ z9ETtA&0P@IxlFZ971;56T*SO2r@43Byj)t2Q!IH?P1OnOQx9(>;-)L}JLR1o%q#|z z7!%FDBbuI;XI$!F-~^32k1pdC)(v+V-Yjzoo+yYklz5If8?Mss7oHTfYZ#BReWD zsG=ubn@#fogl_k~;V^@lYxCSVhsFdkU1UQI!cgu|uk4zMZNgq0TRtWQM3<2? zg2g@@Z;H0P*skSIA=+4_6vQ;CyfIL0#V1zMb|UFpjL4S!&MP?@H1C=`4X$n87?r1T z^R}y9O3$zDbks+#CC?;gpjy<+Z`33^MqhjbQo89CyZSO<*V7#I?K*pSyW6ymz}H@{ zC%tORhP85J0@ko}J<{al-_U(t<`*H5XzLn?RvV?t>lqw)zu@~RoM28(2f22{4@0r8 zw<#sv0VXBD9F6bcG^JnPL@hXw?14(~&F52a`X?S(bLef@2ZA>uX2s|{F>hTpJ<@J5 zG8r`|)1LSl5;vhwW5+QD^5D}Xrl?pt}GYF5N9s6CPzh3Wh}DjFfbixu!T>a7_x*| zm)@5!7BG^U?8O7B9;SmxH$Uf{rSQBsvjNeVVZ{iT3G;Zbcvbhb<#v~V9vpTcmbbL= z)l|M{nMsFR&C9HH2J-s$geyvYDGoLG+}p=gYI*tqR3pnr3G!rJPI6`w$lqz%E-I6W zY5E_0bvYMv4Ipc3_0v51ql^!K)v_54kTXB3Ys#L^cH!Ga5d=h;Ew2EUc(RUG9I7qW znR_3hN&Ka?4?C@LAIwD+GY{^<7}fdX?-gwrVLZz0XTszx1hdFEk}$8Uy)GzhU8HV^ zXpgyi9;0|=WEUs%SdCu8f+OS;7*s=tpYvh$0%UQqPHWvwMHoTTgq+c5FQ2nbZp zVBOSIQ0}E_Bi)bhsxmHmfaqK-L^oXKN;&P-AGIrr=Y_7xaMU zG_J$*wAcBvz2r8UJVN?-h9=LMEl&YytgX zE#Y}&Di|*>Vb{Y{7N7xRkb_A??@cYRrEFSa!zkazXd}d`rPesQYnrRFC;zJ#uYX23o!Y0a5%p)}5IpJ@RHI2A5$&l!ukNSROBDHcad44aX(5 z76`=bRq7Q8m2>RmhRNktElB2 zbVf5w>Da{(p)?9Yq7Mv(a)lL$lYgHy6p7N8U$8Jiid%X4>ILM@%|N)9SQ(NujTtg3 z2Vxyj2q*OIfSvSQR*93G!&5D)seedU=r>$t!z*fh!^0!9=QVReZ=yrVo7Rv$SvN88 zYYHw%iz6n@CPD)#Ptn8gkzNV9MN6ed9kV*f>w#G{u$;>9L>D4k-xYFHuXAr! zuqygJ4phJVHa}rsxKKr5Z&UcS$w6!&EEdBO7Z-4wN|z=kYr&6?G1x`ceiZ^V+xSgP z%#xr1{`M%nYPZ!H^2+p{-uF1nu&}56G7BY;?T{q>*39rUc1& zsxeATw)+ZZQ%zKvW;s198~KxOXG4AE_SIC8csT>Rq%w4pvzf?36AnA4T_8va0?Ej! z3WQcYxEhtbO{VxcirLA~BWkz9Zx4e6h_l(<=gL)INBW+Uh%NB|(|K(h<9;kJLfaHV z4y*I&TsVYH>F$l(V1f_Fh#Gd?E?5Fhlx{&GV$$ND>uNj|_zTx3<~WA#`tn$tdz0-u z>rfG9PIbS<;F_Ms;71eh>OhAhS>w{ly}FD>8h{+#(%}_x?IF!Uh-Rt`s(A)+t|U2N zFw0R5pFh=20vFD}EhLBO%i8KzQl+eGRJi|Otl;$TMJr^-GEHIeF<1WV*f^P$MY0~4 zOt@7+>|QPjmT_8+x|_lz+W61lBh@=svxD+IR$km{G&F7+!y9D81fYXibz7HQp8+Fo zVe$(W^dapYvia`g8K(sTL)HRDo9Us)(5R7=>HJ8=T;IMe%Hb zh%-H2$bis&ResgxPO3LR)?WhaHd~sEzBKQ3Enq{B+na)>^@UhaPDXNLbf*d6=$hir zb^Jc+aGo*&+`F2o^mc(WbqC($85$aLLjAt}Ux#4mT`)bwMshLFQvF4u>_Au<$hY$w z%K`^E*QAPyam**|*VyKlp;mHMHp;`uCY~E)es;A~P8xR8P&JDLiySkZ{DhczKbR}O ztVM>Ct!@9n-F~PFov$BpQf@A;xk=J#DwZX}blKfr0^%1$d*Vn_NJ~-tQzbd4u8CMr z@^vH({j#ro5z6nN0e(!W@%=|(k z+``RwZ(7$DO^T+G=)+)Vx5}+nRDv8zS6WWC5ZO5p5bZ;XM}<}bk#w2?Z53RjF(sW05hjMmzJsw~bH~^}bR%2J_QkvD z!#WMRHH4YW{0zDaSMy6@{5M6bXTIb&56Y`6z-d&ZrdbyM;K^FzV3~z==hbVoc5~GU zeMKwNSL7b?YJ-2)ncbV(ASL`z)p$wx7{l#7JzWSTzv zTil?~uL8CJKfmSv7HLc538okaT^MR+4~7z3To)`?_UlB~-Po_lO0Jj(Ss)rleN@YE z*T*jk915Lp5v|<3H)HvoE2*SKgPC4&XzLx$717>*=;C2v{Wp|1XaHyA1eabm8$!l| z93jzqXhsBrfB`NIqo>!g38;e-GRFU=1v{CuCBENl( z8z+3e#|69o&NE^Jg548jh@By|;8R~io-urMr~VXRr$_zG!m#Eoc3hVJ#=GcEQ7+sp z=a-*?e`Dvtp$C#L+f+ZT`=r=y2=D{lK>-v?zRu~IK`uHt?deNueL4-G$s{=K_a@1* zL@7G>`-4=w)@0dWX)T;R6hnA>ZF>?*Bi^|xctkP?eT0wLqprWUelWHZYizZ#X4qOvY3}c_Hejx z*-b2DVq}D!m342a(c$`Ng`=gF@}~9uk1veMsrVkVrJ5@(Zdl9Tl$E4xY~Q~h9v((t zZ1r&Pu-)vBJ#IV4Jz8;JilyQZ!DW+8fs>5du&2lS>%Ex)rCqe-)*9qp@;b}0VREcl zIE}!{!Lh|D8lGB2YyYb)T}>+YGs)fML0azfx}#F#=gSK3H5L|@-RUAMj;(9t4A1rM z&_WZzBrH1kL^iDFfmg_rilu+LNO=#BLG0s&b&ExRLc5i*F||d($!tEHK1^B8!4h9! z?#@;!A_ePr26rOyIR91vel={ge|oqj_8Xw~K;C4|CuK92XM~fcnuZNXb66NWZu_%; zDL55P?5|Jty)u`Va0UvF#tG&)w4L_7d_Du*F#6qXNrfRUvOgkw`Ucfy${--{`=jf54^>t&b6%X!|%rZ#+TSy|Z-DsjID zIN3L`3a;J$)42L{tr>yB~IfX^o?EIv>35cz!%C5xZp7Tf2MG)ze#rLtS{{50J+X2Xhs!&Bh)pm$TaH)WYs| zzM9U9w5}r5f7!S~#pH4EXCGuzypO@`^|weT`>`E6rig)CT`M@jch~3qpG)-tElmU*5+}@|4V|j? zJ2qY%EezSd_c`k@;)t`xj>kW3=i~I`jf1!-SMX{;C8*fs0f;>flJAkt?#z{1;p`Im zWb^0^y+P^}gH$^O(wf&nMWYy;pIgBD3w3G~toMX(D)#2R&L| zeu(-^tc*>!2dIA4G@@@3Vl=~?;(j!=JLNCVNmez&$x$^r3FLP zesmfqLoiKF?`f9mqUX9MXK4g|N9}Deo-yaVg2jOXe7qIXvUPuGfgourGBwaX-wc3T zRlOkNJgs@k`jhk(uo}P1@^?^xL@lHS-j#0f&b>B^7Y(yObd$xjj}C9;Uv@-FrV8en z*@wINgB|uDSus1mst_eo@>VF>+X$Q(lTm*es1`%ljG8bg=mJCqV2|5* zCSwzhLn&vXq&)l=T414UE@0x|bTgM7Ka9g;cf*Y2p=Z!KE`RsPwvD!wUdwVRxTgEA zEMmj;ed;VrWVx~LUb0l`Ztr_Y=$)4RYkxh~H(tXjtXA1>sq7^qiTl`80{H8p_1(Vk zaDuak;(u}K24&MjU2vmd!HWSHX>h+8I6fLS36zxR)y{`gVL0q63)Q1bVYN4VaWnUf zCwigrGuw!Tl5%U?A+%~jaw(Cz!oa{lF;H-CP+N|ZQ>3{A9@9tQ6kf;-cPW9#5H%KU ziit8fYGCe_Cf?qA}9|qVyGi-<4v$n zSvchMXM=O84Y5_c3;p3+15RZUnB2kFZBVV+1Q==7&g%1%hilj^8Wk)By?@quQWCBC zL&j7BCvr2C!T2e?)a={6BzW{!ybu1@t*ejl7h_+SkHoFo?*FfvNx9(^*bESoUdSRp*5%4`mKv0+SQ2+A9-ppxX+y$p!2m;yNP+)h{uGPmb6f%M5 z=lhQ59@_K`us(T$1_md?&lGwiWN8;*-NWv-oE`z-2Ixi^l*KCJB|suO5neG8(Lv6~ zo!Q)U2oUmbC?w#7tu~qa*R{uh<#!xQGQbv8*3>yX*B6?;YzhVU2-S!n`v^7iM!N<7 z=f@T8?V!)vr`K4coPxtiEDHHVY65{KFq=KQR4{AxXGH)piJZj)_gOQ`>@3Qrzzc*t zr7HJ{v~&52r>E-<{+}UJ>d0>r09MNSf=$R4t+iIVaimNTTbr}uor8TsyOft%&c-0O zUbWkSqs2~dElxUAc{%e&$AR!q`~~L}R#|~(68=7L5LYGx;w1u4I+iW&1b-(;lW$SX zAaSjtMD^)}*94k%v^fl>L?Uz|nj}FZN3pwr;~12)lv?qT4U*9WvReZeLrK|Y{H3Dx z=vda6E_+33&aPqUNw@KPfwL?$-f1bhB;p%G&K|fII4=@WgbeC@8e0!_2uBRWMtN5P zHM_Dm*B6fe@{7fsY-jK@hN$ayx>f%A^3`0;0L^{+giqL1AQVxXv}h~oTslJb7YWb+ zcdCHQiv#yV7c!m?Ft10T_dGfG0eMUb5KxeXZ>Zuo8@lni)Eb@1NmQ^4cYh~!x8H3v-zrLC&-*pN{&8sI?>|E1) zLe?ekeoswbLJ?g+QsdFN} zdf^8xgPc?}^h*RT^Zivah zPg)T+-gz?+zeiLQbY{}9DgXWuJ0Eo+r4Tgkys7kKw}bfLQPyoHH=5L^iQ^Mvs17Jc zZz@@}2@E|XC3>Yh+F3%8bzx4KcFh3jD|4x5)!c<>nC_6F1n^YHS}Kou;KPWm4L*k6 z(nl|DOS5UxLC)q^q>$;i!LVbAYqL$)Y&3uH2mKgp+>L36J%z0PO$oy9#7l%Y@l0szYF@e%@RXUw4(C7aqdaeWw-nUnr2I&0g21gTyrYc^^+o|P z{$<4duX0}G5Vuf;GRTj9zi|J}JR zX56)lu|VX_Z~xCA?9;C+f|oHekcm60uSw}4uqgDkxFGIcUjFK|UJm~D0^Y%K3}HR2 zk)P_Rd&wvEs9UOjqexWYR^2`LW7xxOM_MNZFiI>UR6@@5FmA!TQrJVa&stAgL?Y4> zYIj^=Q>dEh8<2%k=r}$0`AcU^wDkPnEDZ0lH;Kd^nix?0n$kxXvZ3!#>9+EmU}3xV z#pXvl=9Du&b*?|q((N5SwY6DmrYT7FSXt*sde&D%3APD~6R0je=QioCago%oFv1+I zBhzVc0^hIa35Br;VIu}19oy;8WN>C*bX;(Ho}FK-V}yO_oWYAn__Pi2T3>axkAhOH zyT77|Qo7EwgVpY`!J4WG>71-hKT>nV{TLo1QwzqAQ7#me!Z~N&U{ZEBR}yX!lTddl z*}}glW%)=g?n-!o90UbzKxKMP=^2`VqBZyVZeU*}S*zlO3pq?|oK$Jz1>E%JSj%$0 z$K@g2kJNvHTAa5qBz6*r96&DaHNjk~ zyla*`c^ikjP-W@T#1}K(8VO@)|;6(#_QRp2qKQNu4nrx!om zd0~qV+l4vYPeW5>h!Zms35{R7San~QYudbWV}NRcYBYx!N3yo?n3&utR`BP%B7&Cf zulS?Oj^`IDgQ0ei1vG?&NV~Q(XxznG8-9QSBVajT0?(%VifCEmjkWewPVFIHE&C2~ z;5{f=AdfRgtL8z5|>8&sK^kN4IHktdt1%l4E`Jub}C^ zD@FE#Fm9owZ|quk?`rc1yn>o6B4-d->TC^Ul4jnbtG-{?$|E(}C_Xlzm7tq)GX^Zp z*RhO?pUfXam?C$R&EG$=;fE?8@epe$&``W8V?`?3@&hevhoVzU*(ODXFanRqJgvykljaNy?1Uzewh*VEv#{8mfVjeKW4*`+j>1kAUn~`55S7 zJ#ON2s3so9FIEmQNVmLC*;sj9zgYq|2uwQX>*V#9?L2!uy#Pu&$!Rv>u1OY=~`t9S&@t=;Q7g@*$LReqPp?{^$ z!r2hPp-Y#o)&hD6+;{g536db^=OSujq2-)FTZ)2UZ%euK@!ub=Xb>_<9ckGDcxDO^ zv+JFSM5Z)NkOMf}slh>|aw#m|P`RLhg9bN++{NgN^vyB>FHM?yYNwU>*2R+PXB4}& z=c(!1qzV5b>$8->@Nk#fFm>7dP?V|4r9UiCKfjs#b-EtLbD>=U=a9;Lq53`E2@&ao zN#u59d3B&%nOIp3fy#`@mTAz=cZ5}U*&u+*u?adKpgXEa%7l4}ORH0rn`HvNI^@uT ztlFao$y$@PYkn)=<1`zotr0;dr6r}6cWZ5m-RQ%JJQUhDbxA7jCkx9mWQQrYY=Vz?Xfvj_U~n&iLiEq$y`!piS)-T?i!v zMdPLy(RXDT_9bR* z7$1Kf%7BH2_#p<*YPE92X+Wz2=vORAq|Q^qn7h>x*v}a17WDzVKSC9Q7oNh}MwI=~ zSKH?Wm7%tGiRZ%3n}f@Z9KR=#k|A6(rMVI=^mBHUmj!_Yl;Q zKGGTZ_9m4gv2)%3aEes*ci+%QRWchzS%P?*9NKfo(Nms*0egAS1ufXeCm5g^RPDHr zxhPXqO3k&QX+Xs(#399u%t{@TT3cA{m%iRhk<4Qm?z7V*R5Qs=@#9k;4_Y7rH@T%i zaQv*?&oefp<~rXYO=cd8)~roeyLYDVdV{tK@w6hNCg()>DxV#dSdEPd{LX$4?J{S4 z8ke4NnHzo`^%VbAM$^eJx>vGSDyV|roC@KF*>~6bf=W+qc+>QB{`O|eqtS#_eI;7!H5{GW28>Ca3L$@@N(%s!1(#_pI&qsaM{oa4z z-gVdF7g)pW*|X>Uo_Eb_Mpt$qDNFjy%cJXeB+uaJWd$2^gwhQQyn5YE2RNORV?i(x zq#+ov$6ZEt<7s{GJw;#h0)fPRH~U(3c>JV60jWlB=Oa&;g@hmQDoe{h68icUaZ7Oh zq7d%_gI$E)GH<*_{$|){oHHng!b;Mo?v{X<$j623cC`{Kks2-E8Bm}`5dnCXD_2uUY=p5pn0aY`>lKN?Kz=Fy$*dNm?q=Y z|7AM;Q6vUM`aWKJ4VRAZd%rMu7e9lA>6M?sx1owoM*n(vr*C?LoWA=33lJI@lmWUTf z9q7z?J{Yhc+Snk9m*U&E&!Uzw`IDyYDPehnSL_0Z%n%b|j0koIy8>><{~^kp$OuVLMlPH!hk z8Txo0>KBw4O-|k(fM(Kbv+}d!qSZe`)P&wxXbT?Qr+t&QFZ^dJ-YdEJ&WYM#jBxNKmcPOh9lkLH0 z*rt|Kv{-%X%xV^u;r{vy9J7VhiKuu7$|Ry-aGhifNrR|zB8w6(Z(peKd*&x$3zXSU z9HY{dF>Xn=-&#bHe;oM|inSiH0jG&bbLs~x0*Ayhr@%oQV(A-<5nAz86w#N`UlAx` z5@z_QT3J!u0A~gZ1NO##7doj*jE@>5DF}~fl@wvg!jr8u*O3X~GBGAXBAI8yhKQ%D zS3C)zU3kI!ver%V9qz@s)8iB2*C`|S*nQlAq9nObvO|r2bQ+m?8?Qn%;8C7_w4hc> zYJC>|F2p0m=vAHY*wuZ2jyE}NotW@>sAX(`PdJR`q2d#$JiE=<;|?U-*E={|WXPMED5&jN>NyF)8r++Nf&3_Q z{LB5*gpYB#(~;Cqq3z^CNmpZ!3n5|IlDKyY^?Z&QuML;If%5>hh-?8*YCN$si|A^o z-+LNWf6tPL7?+3VL5D%G?|@--F;{+Gx7>XEnLSVozu%|r*!->9)svlb{d&k;5{kfJ zhbXpTKOMii&q~mSS0cI+yaSU?c>9Yk%)uvZje{rjk(hZQ8Z{N(XLjq+;L)@E^2s-7 zqx0^BB$Sve?zPu_f;>UXucf+j?IlNeFa;v%rExCE)XlOYVQXRImAU!rN&FiIx_uyV z+M+kOOn3DimE%8#__LC~ou6Nau58f2%D!&J@y8?9?r`B0sG(!J7g>&x@iO9{!z)&X z8^?nB9LbeaVp8EOMURk)+BVR7DE5m@V@)U9b$`9ngmHAyLXP~2ot7Y!V1HdM7}($D z|Gh|_o`Z)Q-e4q^{G&h8{K4D!Vh!2Qz!V)Hj;+l1=)$|N&{4dd+M>#7v=z^~&QOEG z0vH4Zex&_Oh}T6h**kZKJ&Yq0)|SBgx;Z+em?Z==%9M=3$d{>I&m$#cGr?My*ev_UuT3uttJe%k?i9XIKr0!iQ1j9{>GQWEcRw;ozzN z53%R}-CbRWg$?7c6c!em45rLfn@ad%NRfur<(gLCgLv^ zX&uwsp;8+KpKZIO;c(WvG&Jn{$Qv?UgIEECD*^F{%MB@yQK9gO%3`%^;@|{7#=Hv==pY5gj_PmK^K9w z8<2MfQn!)FSIP*#izi@SA-*)NP5my!4I59Wy(O(WcnTyHsRNcu>o${~5j!mdScUG> zo4r!qN@LmA!HoYQNd0=~0j=wXv*&Ru99jww1Pqi4TuvKAWM-1JMG$hc5Jw0C>15n; z0ES~Y*k&RL?}|%Z%c9X)(J@-gLB8zSUNpc05(^{C-~eNm)Swk1fL%Ak1{5sE)$}b% zh`mPuwh;CZr}zZc`T9rf79qdu@NJuJq5zr@12s1zHYO&fm#vI-(g{gP_&l}Fy;0=w zWwIyEtVvAL$eR)hyq3&b1V1S;-R~(lZ=Xnu6O#$ZXOS{;5(Fw1gxS`Z6@7eR{|&%! zOsu9;{ZN32`f>LR7Wx3|ZH1(X`Q=j*;6PW1uUE>R?Q#YDSaA(?t6^*RM;v;!w;x-d zSj2#{YOH+_?6SkkFzk+_@*+$=a4aJPRogtl4?KE$vdNxBNN3G2V%aY!<4`qHV>xF^ zZhW}9s$Z>uYidd8&(Zd>-LX$SzshNn8(Na!?wl1_`xHo3j{+$In1Xe%oIHdH{p8`J zuW!6;4vo>+B_h z)#%@l)69++DUKPW$aB+zD@e43D!}?F5Ipr-UpCs~f5#1Oc)u^7#1`ax@Ce{r;+S+j zfZ76^?fnM;ECj%p%!nBSP>GU!53+W?@P5Y})BF*7#&y-zD^c0={BRCX* z^&gpmDf3r_ynhAY%={$1|Nln+{}lXxcNJ`x?b0@bjm~2ts3uF0{NDZNTW9zo+N(jT z^)6D*b-6PyuJg!xM3BoBS^kRB@LO-x!V)NY)cUebwRKY>w8#S2_x&H#VW1H5t6%+N z1&M?Nui6=R#WR_csz{0bl`(v(VZ8}ZW06T_x7T{(RADZEJha3r;q!m{kbe2Ak5Tj1 z(FfiwEX?sm&w#<2S`k$R{67Qv`fH$|$-?eN=G&sJI}T;hL}$ufABddJJ8D96b0^ek;r_M@6yYhV-_;?Uai0p_Sa6WUUZ-AktJ(B3 znfQ-sGmHQawDMU9)QNhUg*Fqp#5$W}a^C(ZX*D~IAQbEOduJD-rXG%(m^cppaWi7D zb;(DTq>7P#E#@|IC$~5aZT{1Y;N|v@U0Olx#JBZsv%}<^*l3~3R{6=CoFLUH1eyQz zXF>(^hjrj`j9RYV6kxHglQMInHkkT zL_3{!&d#usBi&c}S`L?f`8`N`9athQ?N}`Fh#6*xaHkGk{Q+KaK~eKwT*sztYHc;h z?)T()Pf`zmpTK$&a1n+|JiZm=p>%RWw|2RhrdC^WUO@ZoPrE_sjJ3i-J@->86uJaW zz6#n>irE$}=A(tdxmjr4pSRw_*uL7O#SVM1gQ32Zv$Y#dl%;*sv6MP%Z8)ryVW#)4y>~f2u}qV_@zA7z@{R5GuY323^pX zv*J|tER-L#$ba8ZGNUrTuzA6t)0Y;km^0$DdX?!{@a;h|WpHK%^c$23thrQCZO9S& z4oBJTWZPnanhw-f8r-+3B3}67&&I+-={=ZPa-tt)YBt5re<`s+8B?f2aV|R|H?sf& z>Sq7h5>4TLbtOt36_h0nrn||`99gfpTrE_og3&S}{q3R*BO%#iLqx|M7#K8^7F!r6 zDHTdS_*srw>pMz;CZ6zcNOpph(9POagm{yN)>6xK#MKi8++gVmd=c^ zSKA`H(5g41?h;3{J|0oCy;rN3N)r>QCDkCkKNA5giJ)pB%;;0-vIv22DKD=O+5}`Nz`g~yPmDaLw%p4SWv84 zTcS}7-sp|htg(=!Kp*&Av6WDA6fYOLxs^9rB1gG8AR{~SADdR_wcw`(#`s?-NC4vV z>1;$i-Q#Abd|KRxi8ul%-a7z@l>na15ex=*g%dRZ^=h(-EWa3-vW#0-E7zs=$y}LM za(CxAWbEuwj5)G$Qm_8gdn#})zi_6~MAvyE7APSFinNX*UiGP}$_w6~0p$=42W#C! zze*<4@7AdSROn7D(%M)aUw!UUczJd59(H4r6ji&30`BjR0NC#G%jCieS6mEO6*V;% z-p`1qfx!W8gv00=1S?)Tj-DH+c!*Mo*Y&stn2=LN>ULAwj$ydWtAJ1D4Dc6|wEWxD zD6H3y2g-wgOol;N7cFdgg5UgJSFd65kO0R*1Mo!vj+<*gbGIQqcG`5+G&bLZ@6z&j zU!d4nbQy^F$7lk>)^E)K>5}a{-1+*pJMNb=bCAv2sSQ-+jluo+kBgQhoUt%I(VxgV z#I^P!*aN620qT8PUW|KVsD@xOwArb_of;M z3FbhbG<_0@K-~NP0B><&4{}R-`}#bOeMuStpc7EsH<_=H1#7gi(27F9vCM5coZ;gG z+rVqTJq*~Au7fGu0NaygsEeo9H9iLcRaV4cZUPkcz@O4}qU7{@dc7^+XJxg2!Y%`a zq^{ZMt3mDi-Yl6VPLeN&fSTK@XVWtzMfv$^H5TfCf%|KOY1+t{!p|l|8bqKRQ;p{? z{{UV8Xl4|^!-RBl=q}?n=&Cp%q}KNi4Mm7?)19xBe*5+;VdZm>;A{k#_+qf0gm9ubGcZRANEI_;%|%0{W50-kPo{>P z9Z$ng$!y$J*jfu9OlBfU{s<>1F~!L_iq;e`vw>KHKq0Xc%u`2l13ITdj89aL&ZnDC z5qeaH)bKu22@(8E7W8bMeZyAifG9ywEmi`!GjG*nzkK0tTZ5k_V}a2e)k)@pZKEE;h_qQ$_&WM(o}K5Xaua-w0gmC z@YOhBOO++UN45}fTJ0~j2vX}MC4R}QMThC<3ET(`v_r^AvwoCYKaHUn{WXy8z%C@(p48{ z3849ag7(X~r3a2KXn|6mj{S(}JkM@^7XCb5|Kev#=cv^O_h@ZeGLSR|@>U+SFf+$! zCTsgYtmn_9fCJa-uH)VEfMhSgdDC>{9#QK5i|TksFr<(3>!n_I;v3;*iWcz~@h%=)-CVX7xMZRm`{8bzea9w)^ zlPm3aMgbb}Pqej~*+*mD=!k#P!eh zvn#&3JnG7rk7p*jCF?Z^mkV8V0@DjGcx}|q@VobLC#eT z^zw&GSZO3`RkM}5na!=|YyI7+_`KzcOS)tUtMaFQy2XDz3{$;!a0;-t0Dbtg!J;7A zgCSTnv^#cpq)~>D0pZ#XoI!KA`QG<`nzUnV&+pQr?_3l}nx8s^TIocoReWpbtfBp* zntxfM4fVZ8>I&bs4x9{eQ^ zYa(nhhp~me+Q=Y<^BG1E>dYwg%OBfs4nTU(4%T&d{47XoQi4FLBlr{4YI7}z>2Q88 z4sTRRpuwC zB3pLo%=~>d5g?LFQnM?^d#S;7_E`;DV>QTIFq;%UJqeBZGagM~JU5ZH9yT^BJ9*UL zxCwq6`PC*r%kMhQ|M#B2?{u>D=QB`@V#pzLyVwldftJNQe`o0_5O9ci6Mwd+^leIK z#1wjSy``wh;b||-`1{3xU0qgacb8oGnlfk4KeT{uH%6<5>nrCoL0IzmKO-UsV$$yL zg+-b+GbILV{QeXse46L|F$GDx5r;jLe>d=zU+p?*n6PQ^-hMQAB+7L5`x&1mZ8f>M zEdFU7{dd>}5tz(f@(&{t*>2Nbqc#TQK}j7xGd8J~kAY!Yf3`3^fa2~Rsw}BzcyNpa z8d+6_KqiVgx0eX-aEY}4OvLBcuOa8m5`H5;yxgfvh;1m+v1A)-UzfXVbX)EHS>r`k; zBjJq@rYRK_j+gIh|L#egfSCBt30f~NXSU~N*D!|2d)n+RIIm!K`J~G0@^Tp{u{}7O9VQGx*7He41$`=q>$zc&%Eb~_M+e(Af8_~|CfP)kxWj)X z*`5XVI<=@-w$y3`)j+!Cdf~i0^KfWBA>~nSL)Rl-%~7#uMO-W-I62Lfu``sKjA>9- z>sCu!(!)dG)F?m()-;-` ztdD}?Q_hFOTq9hMp)j$P<_|U?@WAdUhI|hJ8%1xPxL{99A#s6vE&FKY8U71#~YaRKy79UsdLv3rG=|t(urJ%2$5+wwO_{sNu-} z)m}O@)kSlG{E?PtrzjH+l@XU?6{DW%Vlk=1ue9^>P0)b=%j5jobMuSn-WZYpr?DNbF2X-5u~iKVw&t#Vs_)nLL#qpqJ)b z1G4l<>1v~uySaiBeAi2>L#b+R!`XLwQnygg5hI@u{h(D&5!8fzv%RKQ8%(TukSg4!M&#lL!`!f03DGl+z}&UF!R3<2Paz zRUD((hpaoNSZ2KOP1$xl7=(dS1l9W1XgIe@JVB>a&3`HuuJ!i#c<$D7v$%e-dhTS4 zzUby)w5`d1zwvV0hrfILgiJ|s-lD4 ztd#%BTZT5E{MlbUw(30X_ORLtK^Jts${~-?wi#j!awQ8f8E4e_0N~}#BW|>M^psA- zkA^$4=Q!{m?N`s7Awz@m9VcYnCC&y@wVt&`nnvKg$%9guuEGY&t5T}yUg=2-27&Xu zoNi*l%(>ReOv-9VkGeFvr%Q!{C205h8p6Z`o%`yzKb+bdv6!WL8FPyzJMTWXR9fJA zkXUaf-(k|Ia=&iS`HWEO+gwMZx3EAF;Uqn(@s5ScTurs@zvhl90if$-x3m^1ZF_pK zPV)%weuUoVHMz9mq&4JO%(03ltAKPpZ4N?)u!%lN^yEc^oF5XPJ5fi+axZ?;R(@o7bMn?B>Spr0nWR?b&7KW;$I z4J3+X-7tQ)L|^bLl`Ph7OqT>?^GXx`xA{aC0tz5$f+d9-e~go*jL-AB>8?oLCy~(7By#!DMtM~)u`h=dX(3%9an3c@Jhq5 z_G^vA(sw6%>J3L|Ot3?fU((U`?~SmQsvhlA_sFFwb2)20^x3UlHsk3wlE&ssrb4XG z%TA`7g-^Rx_jPT?jqVrSv-{@r>d&_0b|+cOZADiXHKEowmf2gwhr(S{Xty#4i?^7e zxOfZ)&`R~XaVBN#f2F_}NVR~m1#s%B-muim8y>G$Ot=yXSRa*_@LM=Ft|ev& zhA^A?9or+};!y}s$MY9L9C2HQqDVIwBF#c56qMrYkHWb8p_#kY0i`WXjkbCf zni0{$s0_HQ9BwzhfS$dipLYzn>o)F4Pl^%xTD+K2?`zbT6*;`TXI!O|ABD+9K2Mz<9)E|KJK)I)+ko#IDyERf~%~YO3WbfoTg3cV6wyb@`9h z;OQw;Mn2p3;ECMz%A*d|BI%}ju5t@uw|7wUsXL^nPFhaTP;$fd zwaKY*W15qri~h=fJ#}uE%LVQ9o>%k`ak`*W{-6PSTua-(yZ1UKppN3K!#x(Vq7ID; zzTb*cAAsz}M<#{@lrCF~7r-hqTD7!wR63lj)hk~`*kUCpp=1+#CurPt>*hQiw{Qj?gq6Jif1hL+9>7Vp73jMj^Il5yQ);WYDhEvD)iOGhE1*+*Z zC7A5m8qBY|^1HMC(BKzGPjX79nVU7DwOSiSYh;DEVNjie62p}hbG<}b?kG-1Z~&!4VE~suB>9niP=~^ikW*i zi_hL6C_Ml76)dGP7^qG-ia#70VKV?#2R0FH%)BD2LF;j{LDzOFr6n$qo1|S)Y3Z2c zE=#ve@x{%0-jWj6J3(h&S^AVR*Okxw$Xy4Mv*!s7eAoRcA}r`cDq5ANH;GU8uyb8d z=y^UVh9nO^v^1T1#jNF@x(D>IHn1k2N@)~lgK8)>E9g!7U~awI5qwb+9QnB3evCds zGXR~|6w#*)KyT~Xn9#RA8?lQ0@gTM6FSq@IB zJSO$6q0Ps;EL&Obl{LE?-0d+@qiCyR$0~hgD}k+ zk*Cxf_!csIm%5U;$)i}E`8>g<(~Y_YUB1H80_d65(hcvb{5;0xvw79VKIaQs=Mffu zWj%dtL3JOccpiui5y!z)%jG8*`4+t6ADol5oK08R0>e8ED;R@ML*&rIGvqxUuS?iN zh?ov1jus+kh*TcxTTZS$WU?_@iU!JEN@kVS6{tAF}kwWEQD_@OPwru)~= zfEKno4~#haRcWp;xq-RTlak=q*wU~RLa-EX{ou!e+m22f9FNl2%~d3O2o5e;{qmR( zf}ejY`hdFCuYygVuZlxIyU@7KZ5B(-L2lZ(s=P3pwvcE-jOVc&RWji2db2@&L4_6? z3$DkPltkRiz~(6Je-KzB@RTCKW%Fm-If_r(a=e#RcdcbHF(r<3F2Y-6I}r zBd^#MibR}YZ`!isEBKsO_No1C+e+Ec*6HoNk{W$T5-seGy^E=7er|5pPyZ`)8Bn!+ zp)E_|i`jfAG}uzP>cA?=SXWn9T|KdTjixagsCiHn78Zt7WA#SW6t+2Us>9MNB6_kH zKKD#Box5vB-a4|@ZNAu&*o&DO z`?l1#&1li6Ude)DwW(Ql2Ac)eo}uMBoD<+~)aFiHmvs8xSPBkPl;&A}HMp4P8(J5s z`2J){u~@4`!|LRP1GSH%g{`_7v8Sl8UkXQy#6=t6Ez=ohrJdIOwloe*L^*0c1^d{B_x0Yc^Zn2m?D~v(7Z>IdEN%?(~(_b8J}718y6h+WQ4Z3j%ISL=|&e9(xU` z*84?)3GKsdMuDv-UU!olgLH8`XsCG4Zq8LN_HJ*&E)>j;@@HO+JTwX`rk2DdA#Y9$ zwPfyOs^6wx?7I(Q9m?HZbQiQN=GF8=bZv7qmex~PRgu2vcYP%TORM<7OL)OcEVEGw zK|qaROt)|)tZ}?J4Cf!S^>j-om+}r~3#?}n9>$npH>5OanRzSl&_#Vd?8HzAOJys) z)zlkHni<}Up#u|!#M2E_&Y$Ag(|k?mKU$i|a;0#7Cvme>NSExRvF?Z_*^{6JI^ua; zRbqLAhA&Oe7%;ApwQMa~Xz)fKH5B*O{3PMCE^3W%GolPBwI1TOMFCa|okP74ft-EKyy3@Bd`P@>mslZtH zsfK|~HO-u=bV~5tZ=BpylHWeQ!loGBb>LfuPc92a^iI5tQ>ZHzHz+3*#rVRSwOXdW zrgNv@-VmzQRVF-Uf3q=aI#Wiv!&DqkXw{v##kEy~)uYy^SQ^@*KG9pD(hZ_f8q2mM zx>;Z{_Gpk!FX-`=>U41w1>NuWMdK9H)RBMNBj!%}!h&_9lsZf9n7x^n!!~G}-UM4I z%ga?DSN>R{F8FJSIk947)F;Um(>3s4Dfy6YiCdw%ts5Jd4$Dw|Zj8pFRG&Kr$B(m8 zC2Dfs)L(EqT7_Qv3;Vjx8wd}6O_LIBR}=2jV0)e8KtVYcsRbj`wpMqy8^f>s7Oi8O z)UW@2*C`Iyv7=Ii&E@INy|3|Ynazij#}3y)e#llWo5uxIC~qsV8#=1}wVc1Cq-pTJ zw1ebcm~C;7YmN4DVu}ZcQGp=YOIk%)S^!GD`j{@Bllbqt@q+I{`k*blM&hHWkf`mN zPQhSKD6dxL_O_gl^#XmI>lco%72o3`M{cDEc1i|Sll?2c=)c5w^rezk zm{ci+^SxrRAa|*x9Mcp!lCb#xhmFX*m=fu$cAr30o%{;3vTuYZ{j_y;irjWJF5h9? z``)cxqppSf;?*k6tfu?~Lt21`57+89GT$9T|rTEKiW#+=#O<@foFN75yM? z`HWOaS_CC{T{Avox3HD6mtU;PY|Zvtoh0x8<5B9acq9G(_$imFo>oSF>ck93Do%f) z(yI@QYS}5gx;IPp*Gk$qp60AXa5r73G?`bNu6J{dfuF4>L8T=l5AHjyc3Wq6W|Px> z##E@aY&7f?cs%qD#+Qs^%GKu)IV6qZv`Eg67d%UvOUxTePh?H{i+KMr9faP&=a)Qh z>+a9{{Ddu2sWUwXOVB+BOQp(s958k)77H)M2Nv#)t@~@WPm8TRx?4E3?d0xSLk&yk z`l~u_2|^`61?pcvONWsKIQP^SeyLTeygka_OaSDobZtyF-o=s1wyEu$M`--{KhK-91FA z-$a}0<*CA*T1WzFJtGj1PAr?XGO&{P6aBumFYgC-GmX!0?6ezP!WQ2dIEm;ww&F@k z-HH>!fk6Sc`Y7Lzu&$9MclgrXRxHjNv2)r?ZWzl7L9Ki&4e~m&1iTm(3XUOxp2GTF|*m>q7~BQ6hI~NlwXK<4sMWk8lGW z4`)(ob4I+&xdi?B5B>td$M*#(1^wDSGfsp9tg$DyTcPT>-uYi*!=AbDTQZ+^{Ce@_ zGfE){CNc=IWpcwt(e1JF;&{1mZzdph$0(~$I9#( zH9IXc{=dBk3)p+cpmoj_bx1;bK`+soZR?t~)R{F$?ZwH+QN;R-4_sU$nydS!1uPn; z$+=$@z5B_lZQ>mB(r~N!2)$|L&eJSpA966aLomIHH&^O-z&d#_DVxW>_p->)DqfMd zulh!DYZp1Sa_a{)IMI0;lF)#c@Q*}UV*@j79T&ImEJFhmKpUU07$lws@W4-# zDHfM{^vC;{j?3nZe$7Ku&E3YkgYaCc>PD^N{4Y(5!sXSuRVVbJ{~8bD=o$4q)pyqi zW4=Pdbv`YXn>^@dcJyG2!{J&-yat5+MP@sCGZBNXuGHC6sjxXEPU`~)uhmvy2xHIV*~>mI8pM$zZ*sYO$K9wq^I&)rORW@+URTpo_bJG3L~$yS zZhRAO@{@4ksSTgn9l(1QP5UxPSQSOih&rW5B~W##ilzJtbhN&|Yl!RSsYg!n`d+1y zZ>6}7K;agnuJLeQXG(omho%9(!u%fqJ0mjecyQ~Q0U1>V*Z;7?ipWjoyHL2QJm=JTb z%B&>guXr<7*UGAxzW>H9M=OiSmR3)MylXl?swaUrJ-#X-_r}0i4|451h_%HV&)D4< z5Wa~QJ!T}^*Zx0qTN&ex4kT78hlhu!bqlBuILe9Fae==3c`NzxIbv%Odo8MG@FZ2| z*rr53VR!<-H10jgrW2Y9dm5 zPbxqyH&W`W>pF_ag;_98zE)cIzHL0fpGLc4Jg{rvyy2Xe(>(dM`kOEk@B3toikI$BK^>~3oR{0t0^2A83C@^Vukp zdlbi;uf6K*FhTWhK}s5AO$Iq5ykG}Z+*CaSdOiKLokeDvq$n|^OGex4S^S_pXBYH*BwF@&W@eT6(#boan6gRtSzWkV z)tQ@p&%#ung&qiRwgx^-=RbVj5LnuF=wYWkrE?#FCVgwM%J5jv;KV`-Yu-JWRR*Ek z;a4<6QZG(;dN!hbjVdyGjbh_6X;BIWDh>053(SPRJ!8lH9E8lM#quStT~A|0w(j3Z zRtl~+8Az2Y=qWO`8*sHGz$|dPom=N*D zb0II^L$pM>(QaNKOQ5Pt7q7SvsP@uL!Sc}i-pZuqZy4$%!)@q)iI+>(BWKVAmIA6| zg(M0rqu+0U?Lu}gx%DRMj};4`(EOd0l30v*G^R{_E6*AQ=GyRlf>}hgtQZA(yhB+u zzT;NPcr8U$RY#WQkKn!+0qs+|p7-ql?s3@{O~>PU0|Pe9*i)4!)xTDSC9z*_-6iVf zj|cV;Ap%jwaA$UEg2V*72Ic#d6p$eY}fZGVex zTUy5NcruV=4Jvk51^tl0RiD-(Al+{8wJkj&3o(bNHzsI4y}p=vOET6 z>a1Tr_0QnN`5P#*7}Nv|Ai@e!^k*CI+i~pYTfOi8*o&^Y*=Q*5Or?^FXBmR#RBifZ zQN8%ZGjWH8ux~)EGPCZb&XG4!m+ty_qmhej(|C=<#jR1gJPk^Z4ijv*=DQl@fPH(7 zck5p_GRi;qSFBI2oWGZgcBX#SD*AbjoRMsP<5OuRmmLiYtSNcp`sL;2)W@@uu^tZE zii>inFNaU$_RbDB9)wO265C_=09+AQqTBKSK&=3yqq;a#Oib)EtBRS~&QICZA3jKS zatJJO>Rd2YO#P9=y{6r5(gsK~@D-kC!=QrDYyw3-BdWJsXJy>joUUS_D+zVhKei*1 zGz0pz6+uA_H=xox!^C|K7E%TchP=Kir($L;j!~WT{SpE-)fiK>+zZ|dD;9?)dh3Ni z?||qjrg(pfT5(GY6)E2Yv{%v61tsN+a7{XNvw)nr$01bib)C~tcyY?`)dAq!b^zZV( zeeS|&{GZ>VI1za5rnm{nBx1vNm=o&Y=Zae9SyS@M&9FYKGoY#ANSmjAZq>NzGo?Zx zr5aPDFnbZ6n9Lg*u4mWo!B7C)6Kh7YFIy%|Ba1pj7N0#a*<36Y(of`UwE1IFbS2My z#ELwa8^eA^LOM5>jxu_cWu=lbi~5xqJ?JF%&2hYAzM`ZAsvn^&>q~KBfs^p3(l0md zZ`$Z&uzDvfrCWkC-Jz7)8cecJ+&(9#A9HxAen)S zL~o^t!}(pyLR+h$p0(k^L0U@Ek?-wG<_naam2VtzwgPxOyhcBg$iiq&0*kbgwxJ_r zFyt8HF|4BsJ;Qv7QPGAG?Gn!v;l7GAh!fcDy{e5mW9!J+JHtsIW$9U$Z_&SyI7#uU zzhkKAEA9t_c9SPgZ0)INkGG!_Uu^p<`tag>#!<%kC&-Z?03WQH)w*;oOmg$V+?-Af zu^BjW_X+K8x?8~E;d+Z4+xL@2x}4LE*%nn8_O2lY7EYBDqM`7NIre!gz=%vnqOaPHGG^= z+#|q@H=hq>qNAjY+x5ZVZ*z3!8;f8vmw}}?&ZPqO{pZswR_8UfO(@|9Kb;6uvk*z7 zVkVMrrhdfGk->fn7XE~A=bRcnWdBQt#Qh8X zw;{7!N;D*B@y|nW_?ttvIXj_|t!5$_`4h3G&)(3^72dOf@zQ9KFqvUWrMpOIO&bbI zE%=oeBu3{Kiu2gbDD=a_@%asmxvWsBb4)cB@lnt6DUU0y9Z7;qOg`?K^?Y`96NwuN zIkXOOtfdkkZr_%w;;m8u5!e~~Hzo?m-(=9c4t$6EwAD7HX471RCA~7+vES2?)F3 zUHK%+=qE@iY_OEX&gy+p1kz*%T}p~9mgfv&`jLu?mx1LCOZ$WzXyLf!RhZH}c-pj_ zIYenQ$xX$Q>fy8}^UB}mC1Mi_Z23Vsd41K{)a)-M9Js6DskUs)ehSs&{M=aK(Z!n! z!kQR&n@!M9V&rn#LBbOz2M%~Tt(1=swU`=HKz4F$L8&~RL5k`q-Z`17BRd_0AyUqD zIkhi~kUdh$J_qFwFitt8uSvpn_yF+-IXGBxE1$gYJtvsJZ;Pg|+aQspOe5wB>^{?~ z;V+D%6ew#MC(8GpvIz~`OTNlNnSF#_g$5e^qh3X{_CSc zF|>vX{5d%us|rodu;eb&`73NUx6L6CQ0J-!;>U6fo*qCrxmA+liMk5NWqO`M(hfgD zgtGds29?2MY?rW#12v}yz5ey(SwBgz*0((IJwi79R|EU=B!L&VtmV=6->4Q#!Fcji z_)>l#Jbk*gi7X?d```jSpVtPD9EB9*XQsCUUJ zg0<2?l^ItvhOqZW>Jl@F;F39!X46t+Y`omOP*b25q0Y})_{6xDXQ!s|)%@gG{n!&& z8f0WZ{8uFGI}}(Qje78}8^bli7wzkFj981kG~*c@!YG*;ve+=W?Oub!yRuCc@h5YR z6XHUZ0~xvv1wrbp(f51t$2mXGzt3wfF4Vo(thM%vXW!4g?)$#;CTo7; zx5&?|KTQZCwBB2*H3@e2TGY^vR8;9#_*WS52`2;bT^k)MI%{s5N5|PP$EvU5-sb4s zrqxle1Wj4r(1_gZT~{u~#k_4bP&nXH4YOsc>`X-=47Y)mg)@6Te>*^AkXpcjrSG}I zv5`Xm{eeRZ&L0U|d5Y{#*)2VsEYoWltEocf3dlf?+Sk^$V(yWrn~BsKY!iYwOb!IJ znwYRU3Gr3!BhgF0jwg%AnF$#SD2vkz1Ma@ZOo`Nn>CzgSmXwLv^}dq( zlpV`IfAgK)+jC~6w(RR^@x`m$=|k7;Gga{nj5hHsOzhLWm4#{Bb4NxD#;bm-INmDv zm6^q#@8v$hRA+yBd#L_#FCJDOfNPK#xcjx@@>Wv0C|Jn?8%;k&qjk3b{S*_EeNX9B ziX(6MfkS+ll$bwe*n`L-gE8AGHn-@kY9o0*R@I^x*-RWaeTyyCOK;NX!^`3$KfLmB zhHr**8F|k{pUJS^TGA{{YYlNBV+qX6;W)YpXY2xkmQz)1?1@C0^-b$%IOft@R<1_g2 zL+TJ0_F(#VPS=hiYoir7|B~%P)=%j=Z_RXFBGE|EG5T(WUdnXo7SM7{>=+CVGPPIW zSVzOLRQZDv#(3qU;AS#Kk#sJY7r)q;MCXQ3Sraj*Uf1W}Q-_5+?tXJ`p(t!9&{w?9O&t@X! zfX`+nn+UVr!LB@JS9NIpRu$b`o+ei~kR|nx(@Qca5j|y$TD2y9mt2F#RfzGMBhWlr z2Q5l)i_5x5mwYz#RYQNAVvhZ|g7)T8DeTGhyLZ)fRHB3O$8^od?b4?{4bNxc2vBu( z*3Q`{WDZ;GW2UF`%^9DkZ;&1aFingvxdiJb+lMa)q!5dpweZ%u)JTB24?g`&5M~Oy zYcjoB^OH(CVn=jeJ~v)qp82Jk8|~!QRc=%e$>O+pl)~F>ENndB6_iJv9f# zzrR|1`O+}w%JTC(FrcLf{mxsSPvjau>tTEJzfK0T3?A4`mSIyYJ@#<0)BNdlb3^oF zjXQyHp508NMt^9R8$%kLx>>mB%?GX)V!G~0*H0GZekEiabqZlIzNK^5bz)os&r@*> zm%PQdwzRbF3yE@7M;J$G8C7`bUVr*T?p2ZfQIC28LGaLoaY-2|>6FSHJ^jxUzN-c) zq**~ru6XncbR%|G0<%ivUBOa+b2|fejfciY2Y-V(2Sb_Mc_t4!e+_xE!Zmu z6=8wh)#_r!kZ)zy;u)Qbi@)*8{c5krY|hYDy;9ULg~KE!hdKI~zGOUploc^Uf!jkx z8aq7r^qpK4YoV^LfaJ}?7q4A1ZgH|o7YU8ZC!cSlSNa-#+`JAv@;K;p#~5^;I%KUZ zhACmRS4)W2QNEOJDoMcZMG!@VUZX3}a8`@$Usa;b7ZV=(E@BcJHZ}qq%6SXyipY2KbcCLG*p6ihg_?8JouY%YUnVPw?ZzRK>2%b^&n4{Fyt}E zkkU)OpZ+d0*QtMOdX?Y1X&Zt4+N+jiZg|dp;%r<6BX!0trat?VQY;bt#uFK}WR;Q1| z$>d{Lvuct6X;)*ZQ8@ax`-knx>cmcrsfMV!EGm6QbRi%5C*}S3)zY3bPi@smtt7tW zQ&-83Y9H{nm$Vtq-N&4l`i6=!By2*^PzZ6ZI|ekZq@G9mN!W$P(mP8mwkS=B+9^Hf zLj{vZR3A9>=_f=|ZJe@<=Tg=7w~`zg>G|3Ou1{C;+;ZZXX(%N2Ij5e8e&s4I&RoSz zP8ju}sAgk4*?@R&G+r4?bxp^GFL{&Ff!}8toU?M}G{#kFIjeD>EgEp=x`<>KG!ciL zW2oDadl2l^b$M%6TO zoNi@}(kJ~&@ql&{D{|%f@?attC&0mPIyNY(sB!TIeJpeBlQiwW_1%As4r}R)sNb@ZDIqz^^G7DT|M+ddZ^?v z(eXxCJ-4B%UEh2+3C>rcm&KkRx8tZbo+x@JIrtFLsB3ECE?(N@U#D|nkXbc(93W>C zA<&(k-MJH7qOFnMi~Z3qpwFtx*+rN8o&xr5B5ebDy(txYTF9e%ScR=BU8sjw-*4`G z(e1tui^F2|)#9(wSJ6M|(bPzAd#|kER*;It-%%@9bV2j>tu0gZaxutf{{A`6d?1Bv zX)v<^y__I3XhupTgpq}^Pru_6j__AcZW9NlPeSXH_A65gI~Ci%b=oJs_&%YiZ|}8` ze=Rtwpw4m4`PlO4vs_ zg3nhR+y+6(2jWYWzY7oT&4&iwYULTTt~Y4-rc;VI{H2a$8DK=DU>`8_<^NLPr=4(9 zlXg)|EtAsKUrP}*^RXkJ;5QkQseNeY_U+iEt9pK-S%rm}cyIP?Lv7ioH6=cyTl};Z z+}4!C5zjK3Q{m2fKE?D4uFl~(KOr*D)A*IhHa4Vwg!uG1VK848xFGAp zp?XzM7H4uq=~SuHiVnw!g--TV_O^bL-yX0t{>ezIFZhhLe|xV!sJnt6YgQM}Ku|Li zH$lXmxBjT$zDUfj;Xo=g1%o3ePg!iwu;8Nx&TFDgju$rHvby7hvwk|g5Aq+oa|t}M z5TS=nq)ffp6o(3RmJ=Ex>(PCCYO`ke9C1Cv46?}X*mfpZMCuv6d7E~Xlw-@wkDQj)IwWmm<;`ih<` zMnb7bCsm-2$NwX-W+K69n&MQ@i*s*9gM2SPg9_6=4#OUOS$DUHkSTP1Y}Q`K#A_N8 zOgl)Pp2P9HbFOWt+D#?t@obo;O9M;4jq2?{g>1}wy5{7NBx4j00Yyci!a(vkAaP&Q zkUplOU)i63@2=d%kddnR?!_k(PV-xO8y@bo!y9wTR+ZR&I8dRT7 zSEEZKbU2AD2CTCiDthai^`5_&bU3TV)of^EXGm&WVtuu zc44$_utFQAK$hbN5`UGhh!Q0uqI`PAlbR>ue1+*7HC}5^S|F=o?$^6%bynD;0|??1 zU-TDt{zO`7b5m`_5~$pQOM9uRy{_~-4lW99{;YfdqoJ$F@fM?OX~6U59G61wq(2P< z@jV^d1h&hg_OOB8AC*oeUW1j2N=Qg%(_tYJughUlC>H%w1{1~&BljoX}q=Q3ro>Dq zO%w2u3jv$l_mw`ge+qvJnbLRX(PaH|3yOXkdWNH8zSf`c_Nt@}*z31vJk$ok8^L-?i;e;q#yd-uJCJ|EEe2+*MUjO}v+I9Dzwj_aS{%=S9Z%6(A9Z^~Io1D*Xv!}hEckK9Q^l`936K%>g z6PsZ$*uD9tns@KaKh&3$lmJ>sLw)_KSfcvXgwmnKh&3^nHwpd@Omxoo9(mN6)Y$X_ zKf|rYMiI$Ku79q)3z8P*%0&}n!Mpd94NxKrfs3aLIvhTi=f8j-plrVEql-j3Nsj8+ zO~;u0TS05 z`ua}|-P~>h^CtzID(?TwrJa7PAIWJe$=1|Z&qLa$x9I5TM(hN7(Nl!Q??CsnyO(_= zw1t?H9(ChHi*&8i93`9;lEM)n^EQD?9JoU0K=bZkSo0c z@>b6mz`2@fdJTO1Bb)cP^IPeY`tyUntNXhz9lsCE_IAN7@LCc#w6MtgvJ>c1-s6!k z2RT}4YipBZB!XdSeaNlOd|H|dfpV|FKeq)-lJDQ}h_ls)hyd{uGvi~nhulh~Qgosc zRIU!gS^R6lH*|d?Pb24c`ev7hy&T^NQ-n3z-r(XQ4NMAWrigQ!seWEmw8HX!awSOk z!8MfodXT!$Ot4igXUydkAc@y{mZ0Sk4uY6-BF+czzVg)FB5m0o(^_4+3ZGt0q2kA-+oy09(gAD00<-H4skpk`}i8< z{}+K`i&Hf4_p5sQc9y5Lyc|Cv`kk6twN+fl{sIY>4Yoi+rmM81+F$|B7qocQ1BegLV<`{W{IJaBP zvPqy#6Leyp5K%6cKwNTVkL!z3iDWXUrdsNfr^lm{QSXqnA7q! zEajQG*mRO2Br`q>+XLtWM~f#1+XV(nW-+sgBUToKnLOF@w1D$%w{Mi|HEMPt4imgF z;fToEd@aA+AKO)8wTV@4&yVI>T3WpL?=yu$apeThS7a|%Qu3#dKR-I3eq{Yw^^QPD z4pm8Va0gf~UFRS7Se#XOw4Hq2erI|4dzyH^qQitg@HP|@2olkFpMhmyvKW@2))(OY zHmg+)1cM{?d!OJgLpI9lMkTmTA@O3Jf->udeEhOdrySHbj67}yp1Oefrv4;Djiv1% z!NYFvd_YwuOtoPq&anezzSG`OKIG>caPK@T>oJ?f*r!5iW#wL@-aE5t_YSo4v)ekwvS8I4PGdZgE^>0I`+zGJPO#kWWsO1aksx6g0wx&Oa=G-> zA?C^`OWK3F?n>IdS%306%RL$J7?*(**=LrJC;n4?x4Iu){(2NQ^62!)3*%7`o-bxMIrl7_SoB6cQdRc%otlS0 zb{aYt$J@psVr`>Tg}t3<^8;J<7%h)uRe}|R@7o^m21KjIDUH8{l}l`5?5R?U)waBN zdA?W^lZTH{(V6ZI9QtD4Imy&RclT_5u*;s{#&k$`?+<)+A$ zM|2E5h#@cTe!6bH7m#^uU`D<{+k**FhHX!R`H`w4vL7m zjYsyq?bka(Kl!G%^Mj;E5#89$BGtH2oCg`+hf{_{aTJDwfeSzA4-%Z{W|EX?mPiz7 zI)m)zZUg=06ew5Ub{J&7bl&}qk?K~5C+k-?#n}C4T`R_B1RjBNbNd9grlp=m;V+6y zOR;(L#i#f&E}Wj`Eab)D9_;cG%KA^;af+z%f@v`ipow@}Vv*Ox3)i z05kHIq=ZtzFgUrGDvD;twjoD3J3({W&2X`A%Wz6{9sjH8l0qDfH0=v7$YU~utikpj z=5f1$#C1`UgO8M%N$1G^BD!y8c@0KC*y%0Xbpv%)m%HA$IXvWPJOl8u7rBUf$ zX0(v0$Z0ihsuYA4jKWKd)~KdGa%Rl`&UIPsXo%JF$QiICuH1QKucoM#Ag2RSm)1v7~;h+GMBefmxVJASG(+0W)-xIyID^G;hbc!Uf&+JZb z#f8+K-@6zzY_rKkZ@{qp;`;h67AHmD&EgeKaNBkxVo%KvKel{${YQ+#{#l3qjoO)B zZ&q0-5QCK8qo?q}{LDHJ44VB#R;=&6DIn^xN-Py7P$WghhTl|r$e{DPcvZq3dqZsJtH~;KYrD+sd0YzJ}m<27Ol*B@8DV;+^Ig@9>w5J?Dhh&;8 zV5Zl?OY6D(&UXLXy$L_of`j|9xE*vDyJLlE&Q)FCv(C@0}l0r?-+#KF2wyxap$mRe1N z)ibR3Ul2k4i>jr4x4jEq?|X+0^)#-0*0Pn2_bRH}b2ze?(B;6c^!VHO$DVA?Zf?DT z_O;8Myp}?-37;P)-NH(+X`h>$j%#WfhtIf{TLe};I~PkYZk8aR-5pGW{Ek7oL8fo7 zwgbBX{%y;%61TMU;77#TP=9*l`CQ0koT=uKTl7T0_j@r#bxSf(Y*QF{#CsxU!u<@k z-)LTB2Gz&~CK!_wbVB85hn~%=^=Q_Cqy;mQ43VEfG^qNB>CNpd2z@szD=T~s<)qyj z*L_2E24U?JfjJQ(g(MDh#Zdk17V*Y!`xyw5eC}MYi1%9{eN7=~N8FLbP{l!|ixBd! zTY7&J)`9Z3C%%E6U}MSFm`g4yVW!lC9osMR{WHA7y$HASvbHU)yh=+BK~C8lQRMdZ zC}GG#zCvufL95lzG`dl7k%wNh(d*9kNQemCdQM?;&N$vYcQhm<#UHEV9*@S!WM&%% zO-yxz!uDLq-J`j;8#|AGk?*P=Sy(T3RV{{K)>kEjaX$F$h&6+%NC$*H4`smK^gL)o zk%8py!a?E#IgjTF$dPa|qw1a?kknhWkn;!wA||S28_{dAU2J(NU?ax{{qeJ1)bKhuI=M1jhFLitUD_rm$H3fB!;zvjq6%mb6(s`VTT zz!p1w(b|2p)>Fc)8#iogi}nijaAW+bY@>w?#$}_Adeh-&S~Z4JUA+yD(LL#w(uSUp zc09Y5agz-Hqk`e=g|4UOaEM5Zg}IsJGGw06E5Dv@rAIgti#%`%9+dk=1K@TZ{U4g; zd~iN{5m+}ggEx!qapq(4<(u;3!~{l7*Kp&wc7^@Lt3A{`yGb(9%xbH{RENAmI!lFj zNo60Ns!NG;2-!!=9>xVS;(T9 zBH{S-OI>Ts|ZQRsj)iMs{RHa{C<=?%Ph+sT4eKk*!RO%XLxMydhRequrv(w!lHlg7tPl z`6x#T8;c~eRz@AtD4VHwSc57H%B!c_{P+qmu3d9x<>4`lX`FENKHQj+`MaM?Lz_rH zcbfBs;dWmfnD)?!?4AM&e%d*WGD1hHS9zML4b~obrgETx_D1Om;+Bkh>fazeYh)`k+efpA2}~m`|qhLA}rjMkDeb$_n5}pHonv` zOnHh&W{~{i_f&*fSmT89V&vBI%@En19w7Vij+WshgIN*ao&C4A5)4xb`y5~|Nekq} z=h&Gf3otK7@I^tq4rOw9DlN=dcp}6(Xj)ir;{%z8I|d@N2>eyaL#w>T>RZgbKT=oa z<>F%V(xSFH(Q4cGj7F6@GOLtWeA-|vl_X7LZbvqUz0Rqo{BovK8+WQU~+8550H`M_#f$7D6vQ>xN_? zgu>C)xKrUeUp2)@vpnzP;jFfPi_2$LNsZ%`Gc2H^!D>O)#4&noTo45=t%b`qH^$(H zu=wvN{^}>Yo2a}BM^HM|Ll=hg0yb|1$}V*6>_47~TgT93JhGqy`hhod$n!<#J<*{} zD~S#a9qC=T$k+~2g;qCofdzh|YqTrUJE>mgGfPC^snOx@y+5+>Kk0}Yb!Vnxn;3K5 zThmy=*jIaeLa`7lVrM3BWcQ4N!FIfsm(<@$K6!RAZoBE{c7ZXUepg>8fzm1D^{N)+ z7u?HK@k2qvws!}u4aaG-Tr{cA{wy|f)Nju1&FnQiXUt0OddkGkI@}}9xt_?*m}*ST z5E1)wF6wEP-!@hkwThFoFYZTT+>VB9zi29rwkXA=p1@7tAxa38rYHB*kt^IOVyx{T zMr+|iQWJoer2I86EPKsk3imt?G^67ENvx06fsT?y1*Q}dRF$|bq9&d6y=;R~iH~?LU#&mAC_SqBMhg#-Q8%Obr*z*j7LeL`R8In3*|2Y14u|ls@rpIcgDe|3IENAd#T3!OweDxF(C7uW$;^ zo2yht0TD?jUhlsHZI<7<~^W0&)DbEd`mb`1b>TWAG6x6tY~B*+~4Asz903xvnN0C>@U zSm|MX?$g`x13W@8dvMWh>VOb_z_NNmgvcHg8o^bTK3PqJ_kQ!aJrgfZLQPfZlIL+=;4W~`GUQCx)o*z5VlBt@^{evoxc(K{-xEoBA-|oybWzUB zyv-Yhzz=?S$Bz&On+Hxu*o5>#u%eop1L?ho+FDu(V%ymO^8kPa7bhpr+f|Y$C-e8m zz#-os>x-V<*XWZRCB9of17qtp6Btx_IQf=fR3)>A0x4^Y;KQkL_1P2I!&ln!}D7jv;28DdP zWf^wk*2jx*hBM^%wW0pLzBYhZ#XhMDIV@j1-+hqDZ5%f8pml{#T3Xu3ODwU~C1jPE z;bind+x;nhL#Fdl$-Rh<0BPx%LeG#tvjT_q?Qvz=c=sC|hNN~mTH}2*yXIYK(tyXKS1mr0#g8syv@sCAN^+|?dWoP|Y2xngTQmlS@oD3~+VcJJ@=O{F8dwL#xbqXZNVb(ZaYY5J z_C~g*gR0wpz`JG0%o}JZN{sPaCj1G;e5IloDkT|+VOc4T} zmEt)g1^UlV%t=xL011R#d&$3=@=}zx+A6ZFva&&x*bdF0e9oht&OBs8R0(josV{aP zw1;;~=Dy}T+XwCm-LLJ3GM1{hZJTbR7Sn!qpnwo0GY@tN9Uly&9_9~{-)ML0gk3*% zNa9Uy#<1sguyqMBu96p%4;vOP?2rHMqHKd?Ry+j=FF3!=q=GN=b6gR;Y9$*iBetsA zEh?h5iHp!SH^EV5k{i(o`=@QSNvjg5K}Z`1VHTi`gM9#VFZKy!eugQXXaMi98`%lW zu^2+-CK`UlXa_-=F_uCI+PUJt*STJH;qw-_?&bGUvh2>(D5`NOHHW>$FS&85w$VuA z(Mr5FH@P|8esKsqD6AMd$WhyxzchwZOMvtff7qV~CD((IRrI>`yN1%cum@!K?nL(@ z(87-f+8P@h0X|E8XL>0+(T6IZsGLrv;uq*>B0JCKu7eHITd zu!05DAT62iuU-JS3xR>h2*Qg0e;p-O{F*FMz?FpNpC)!}F*6R;1{a{amX-PW`LU7U zeh}KB`?EIvPYc1&XM6$cu1@liyW^Y#3@A-1KEuCvN literal 0 HcmV?d00001 From 1580429b6ff8630fe0be951f2feb079aae051e50 Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Mon, 25 Nov 2024 07:05:17 -0800 Subject: [PATCH 2/3] fix typos Signed-off-by: Chris Abraham --- ...p2.md => 2024-11-25-training-using-float8-fsdp2.md} | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) rename _posts/{2024-11-21-training-using-float8-fsdp2.md => 2024-11-25-training-using-float8-fsdp2.md} (88%) diff --git a/_posts/2024-11-21-training-using-float8-fsdp2.md b/_posts/2024-11-25-training-using-float8-fsdp2.md similarity index 88% rename from _posts/2024-11-21-training-using-float8-fsdp2.md rename to _posts/2024-11-25-training-using-float8-fsdp2.md index 524af13edcf7..be921cb29a9d 100644 --- a/_posts/2024-11-21-training-using-float8-fsdp2.md +++ b/_posts/2024-11-25-training-using-float8-fsdp2.md @@ -4,20 +4,16 @@ title: "Supercharging Training using float8 and FSDP2" author: "IBM: Tuan Hoang Trong, Alexei Karve, Yan Koyfman, Linsong Chu, Divya Kumari, Shweta Salaria, Robert Walkup, Praneet Adusumilli, Nirmit Desai, Raghu Ganti, Seetharami Seelam, Meta: Less Wright, Wei Feng, Vasiliy Kuznetsov, Driss Guesseous" --- -In this blog, we will demonstrate how we achieve up to **50% throughput speedup** while achieving loss and evaluation benchmark parity in training over FSDPv1 bf16 training ([link](https://pytorch.org/blog/maximizing-training-throughput/)). We achieve this speedup by leveraging FSDP2, DTensor, and torch.compile with torchao’s float8 via linear layer updates (compute), and float8 all_gathers for weight communication. We showcase these improvements across a spectrum of Meta LLaMa model architecture sizes, ranging from small 1.8B model size all the way to 405B model size, making training faster than ever. +In this blog, we will demonstrate how we achieve up to **50% throughput speedup** while achieving loss and evaluation benchmark parity in training over [FSDP1 bf16 training](https://pytorch.org/blog/maximizing-training-throughput/). We achieve this speedup by leveraging FSDP2, DTensor, and torch.compile with torchao’s float8 via linear layer updates (compute), and float8 all_gathers for weight communication. We showcase these improvements across a spectrum of Meta LLaMa model architecture sizes, ranging from small 1.8B model size all the way to 405B model size, making training faster than ever. -We demonstrate these improvements using the Meta Llama3 architecture, and then perform model quality - -studies at two scales: 100B tokens at 8B model size, and 50B tokens at 70B model size, which provide an exact comparison of float8 and bf16 training loss curves. We demonstrate that the loss curves result in identical loss convergence across these model training runs compared to the `bf16` counterpart. \ -Further, we train a 3B model to 1T tokens using the FineWeb-edu dataset and run standard evaluation benchmarks to ensure that the model quality is intact and comparable to a `bf16` run. +We demonstrate these improvements using the Meta Llama3 architecture, and then perform model quality studies at two scales: 100B tokens at 8B model size, and 50B tokens at 70B model size, which provide an exact comparison of float8 and bf16 training loss curves. We demonstrate that the loss curves result in identical loss convergence across these model training runs compared to the `bf16` counterpart. Further, we train a 3B model to 1T tokens using the FineWeb-edu dataset and run standard evaluation benchmarks to ensure that the model quality is intact and comparable to a `bf16` run. At IBM Research, we plan to adopt these capabilities for our data ablations to improve the number of experiments we can perform in a given GPU budget. Longer term, we will follow up with a larger scale model run to demonstrate the end-to-end feasibility of `float8` training. ## What is Float8? -The `float8` format for training models was introduced by NVIDIA, ARM, and Intel in a [2022 paper](https://arxiv.org/abs/2209.05433) which demonstrated the feasibility of training using lower precision float8, without sacrificing model quality. With the introduction of newer GPUs like the NVIDIA Hopper series, FP8 training became feasible with the potential of more than 2x improvement in training throughput due to native float8 tensor core support. \ -There are a few challenges to realize this promise: \ +The `float8` format for training models was introduced by NVIDIA, ARM, and Intel in a [2022 paper](https://arxiv.org/abs/2209.05433) which demonstrated the feasibility of training using lower precision float8, without sacrificing model quality. With the introduction of newer GPUs like the NVIDIA Hopper series, FP8 training became feasible with the potential of more than 2x improvement in training throughput due to native float8 tensor core support. There are a few challenges to realize this promise: \ (i) Enable the core model operations like `matmul` and `attention` in `float8`, \ (ii) Enable `float8` training in a distributed framework, and \ (iii) Enable weight communication between GPUs in `float8`. \ From 2bb6103133e4379a8ab57d27a1460f5850e28c4b Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Mon, 25 Nov 2024 07:27:07 -0800 Subject: [PATCH 3/3] split authors into two lines Signed-off-by: Chris Abraham --- _posts/2024-11-25-training-using-float8-fsdp2.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/_posts/2024-11-25-training-using-float8-fsdp2.md b/_posts/2024-11-25-training-using-float8-fsdp2.md index be921cb29a9d..64d0ac39e6fa 100644 --- a/_posts/2024-11-25-training-using-float8-fsdp2.md +++ b/_posts/2024-11-25-training-using-float8-fsdp2.md @@ -1,9 +1,12 @@ --- layout: blog_detail title: "Supercharging Training using float8 and FSDP2" -author: "IBM: Tuan Hoang Trong, Alexei Karve, Yan Koyfman, Linsong Chu, Divya Kumari, Shweta Salaria, Robert Walkup, Praneet Adusumilli, Nirmit Desai, Raghu Ganti, Seetharami Seelam, Meta: Less Wright, Wei Feng, Vasiliy Kuznetsov, Driss Guesseous" +author: "IBM and Meta" --- +**IBM**: Tuan Hoang Trong, Alexei Karve, Yan Koyfman, Linsong Chu, Divya Kumari, Shweta Salaria, Robert Walkup, Praneet Adusumilli, Nirmit Desai, Raghu Ganti, Seetharami Seelam +**Meta**: Less Wright, Wei Feng, Vasiliy Kuznetsov, Driss Guesseous + In this blog, we will demonstrate how we achieve up to **50% throughput speedup** while achieving loss and evaluation benchmark parity in training over [FSDP1 bf16 training](https://pytorch.org/blog/maximizing-training-throughput/). We achieve this speedup by leveraging FSDP2, DTensor, and torch.compile with torchao’s float8 via linear layer updates (compute), and float8 all_gathers for weight communication. We showcase these improvements across a spectrum of Meta LLaMa model architecture sizes, ranging from small 1.8B model size all the way to 405B model size, making training faster than ever. We demonstrate these improvements using the Meta Llama3 architecture, and then perform model quality studies at two scales: 100B tokens at 8B model size, and 50B tokens at 70B model size, which provide an exact comparison of float8 and bf16 training loss curves. We demonstrate that the loss curves result in identical loss convergence across these model training runs compared to the `bf16` counterpart. Further, we train a 3B model to 1T tokens using the FineWeb-edu dataset and run standard evaluation benchmarks to ensure that the model quality is intact and comparable to a `bf16` run.