From 263a8f675cf3dafb3be91f6654a2d42a4ab425bd Mon Sep 17 00:00:00 2001 From: Terrence Huang Date: Sun, 18 Sep 2022 20:50:00 -0400 Subject: [PATCH 1/5] finished --- README.md | 91 ++++++++++++++-- img/comp.png | Bin 0 -> 99639 bytes img/scan.png | Bin 0 -> 124999 bytes src/main.cpp | 14 +-- stream_compaction/common.cu | 15 +++ stream_compaction/cpu.cu | 125 +++++++++++++-------- stream_compaction/efficient.cu | 191 +++++++++++++++++++++++++++------ stream_compaction/naive.cu | 97 +++++++++++++---- stream_compaction/thrust.cu | 42 ++++---- 9 files changed, 450 insertions(+), 125 deletions(-) create mode 100644 img/comp.png create mode 100644 img/scan.png diff --git a/README.md b/README.md index 0e38ddb..94aa9e4 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,91 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE - * (TODO) [LinkedIn](), [personal website](), [twitter](), etc. -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Guanlin Huang + * [LinkedIn](https://www.linkedin.com/in/guanlin-huang-4406668502/), [personal website](virulentkid.github.io/personal_web/index.html) +* Tested on: Windows 11, i9-10900K @ 4.9GHz 32GB, RTX3080 10GB; Compute Capability: 8.6 -### (TODO: Your README) +###Project Description -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +Stream compaction is an algorithm to produce a smaller output array that contains the indices of the desired elements from the input array; +such an algorithm will come in handy in ray path tracing of computer graphics or huge sparse matrix compression in AI. +The performance of element selection is extremely important due to the enormous quantity of data pieces that need to be filtered. +Modern Graphics Processing Units (GPUs) have been utilized more frequently lately to speed up the processing of extremely big, concurrent data applications. +In this Project, the stream compaction algorithm is implemented in conjunction of an algorithm called prefix-sum, or, "scan." +Here is an visual representation of that algorithm: +!["Scan Algorithm"](img/figure-39-2.jpg) +The following perfomance analysis of scan and stream compaction will show the benefit of using GPU comparing to CPU only. + +###Performance Analysis + +!["Scan"](img/scan.png) +!["Stream Compaction"](img/comp.png) +As the charts are shown, when array size is large, both naive and work-efficient algorithm of GPU out-perform the CPU implemtation. + +##Performance Bottleneck +* GPU-based implementations are constrained by global memory reading performance at small array sizes because of no optimization of using share memory. +However, due to the advantages of parallel processing, GPU implementations see a less drastic rise in runtime comparing to the CPU one. + +### Test output + +``` +**************** +** SCAN TESTS ** +**************** + [ 0 7 11 5 35 28 17 42 37 26 38 7 26 ... 25 0 ] +==== cpu scan, power-of-two ==== + elapsed time: 33.3664ms (std::chrono Measured) + [ 0 0 7 18 23 58 86 103 145 182 208 246 253 ... 821757286 821757311 ] +==== cpu scan, non-power-of-two ==== + elapsed time: 25.4672ms (std::chrono Measured) + [ 0 0 7 18 23 58 86 103 145 182 208 246 253 ... 821757208 821757214 ] + passed +==== naive scan, power-of-two ==== + elapsed time: 11.3899ms (CUDA Measured) + [ 0 0 7 18 23 58 86 103 145 182 208 246 253 ... 821757286 821757311 ] + passed +==== naive scan, non-power-of-two ==== + elapsed time: 12.0769ms (CUDA Measured) + [ 0 0 7 18 23 58 86 103 145 182 208 246 253 ... 0 0 ] + passed +==== work-efficient scan, power-of-two ==== + elapsed time: 11.4359ms (CUDA Measured) + [ 0 0 7 18 23 58 86 103 145 182 208 246 253 ... 821757286 821757311 ] + passed +==== work-efficient scan, non-power-of-two ==== + elapsed time: 10.0679ms (CUDA Measured) + [ 0 0 7 18 23 58 86 103 145 182 208 246 253 ... 821757208 821757214 ] + passed +==== thrust scan, power-of-two ==== + elapsed time: 1.05677ms (CUDA Measured) + passed +==== thrust scan, non-power-of-two ==== + elapsed time: 0.978368ms (CUDA Measured) + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 2 1 3 1 0 3 2 1 2 2 2 3 3 ... 0 0 ] +==== cpu compact without scan, power-of-two ==== + elapsed time: 59.5784ms (std::chrono Measured) + [ 2 1 3 1 3 2 1 2 2 2 3 3 3 ... 2 2 ] + passed +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 60.795ms (std::chrono Measured) + [ 2 1 3 1 3 2 1 2 2 2 3 3 3 ... 3 2 ] + passed +==== cpu compact with scan ==== + elapsed time: 129.865ms (std::chrono Measured) + [ 2 1 3 1 3 2 1 2 2 2 3 3 3 ... 2 2 ] + passed +==== work-efficient compact, power-of-two ==== + elapsed time: 16.1052ms (CUDA Measured) + [ 2 1 3 1 3 2 1 2 2 2 3 3 3 ... 2 2 ] + passed +==== work-efficient compact, non-power-of-two ==== + elapsed time: 16.0944ms (CUDA Measured) + [ 2 1 3 1 3 2 1 2 2 2 3 3 3 ... 3 2 ] + passed +Press any key to continue . . . \ No newline at end of file diff --git a/img/comp.png b/img/comp.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4aaa55375a0afc825515212b34282a7269d336 GIT binary patch literal 99639 zcmeEucT`hZ+b@WU;~)r#A_#~gC{+{!qJWBsbg7|*AQ6=kkS-+w#YPjA-UR7A(gFrZ zEEF*)5=tPUj7SRsBPBo*0`~-U=DqLt{dwSZaX>gIN>hmEA=XW=h$y!4}q~7;n+=rS9|8$@+Q&C z<)cI5s)s|R`5fv%q`1(yy(N#T^gXZ5wj5Tu)O(NoF886JHu&(R(*x)Kj62yVrQ2rQ zFk{Tv(ExRG3^GLbS$2l+lf}8kMD3TGu zrfsruoAVKUPA3YJERFu{uTpNR&*nUi-LT2pT-4o|j_8)W`tSE}hIl+>F5*?7m(CZi z<^GpRI5+6^RY!7Uw{`JJe=6We@8@;0Q7!RE?zUe)z4?n^67$ckQO2iFY?J?eE1&Xz z2L4Al|JN+%{N!j$*pdRc>QMhkQ*gP#;Ee$VxuI_z3DX+h!4;}+rKiZsf)U1F}&CwF)d35@K)r>aahH8piGgG#e5?J&!< zSxs0$adDlj*fRK6cVC} zDBed15Nd{e`}r^?kUDsGcF^Z^Ra8{edxW8b9s;!cRNT#Mats{9xIn0+9linCs~-LNO_gW-BotU#x2k*29PEVo;8fv)hG1qB5? z*>ike)3FFpW#c)&WqRZFQ(m=0Ubb`J7J}OabHWPQ zCUfA2cHi&ueY0CdyS8{IXr9ceDt8khBP+VsoWnD=DI`d0%PS`srz%S*CzSY4f0o#o z|D1ic-}=p7v&B{1+6xiZGXl%AY;de~P1*b9fev-s>e)p|;O4E(kNessdtbe7*IWsE zuA9oGd1fm#yxIAfTaWzK&{@?^^)Hv~yv_R8>kD}?Jcx41*873c&~wSm!1Zk3R#c}E z{+!2SXmz{cqq{jwUoZw-QEg-B3S_F&5 zYFizsca;*kkf37=!IpoQnun&p8-$60%;!|vwf=1}AIviXDnU3>bd;Rxhf0NwJ>@Yj zhHPrJjYrP~T~Trwt6iUW;TtV3pOQQJ;LihPH|cU8PCl_gCre}B+o8zUdfw8jL>g{r zc7m;fdNbKmPbPpW^9*KFs`!;JgA_AQLjOwZBLAlb>{-aQaLT_L~inCaIf&A*;Y z^2P9k_0Yysr3$C1i52hnvf2ls#qdVr(w%WIjB(S&xm@zjXMsZ`jXlLQ^r_Y$j~4Go zgy^1i)+OuZXuC(g+vFmUkcB}*wp-ZT^x|rhq1?z{YMP~Eo22iLzOg%ynjS++&fl6G ziRGoszvO40Vyev#YD;_gNr?4{5c&i$aW?W&T#d%*M>wsNPl^UiN8Q8;xk@}FX|&JFD%ONTVPQybw180>f? zMDpBY=t7m>d1W8-96Md^vij$DxWq3euKVu2sc81@R8pgjIVm;oNERXZ z)gfNU_<5IoCZDjrVXZo{5U|BUgJxsuW((DA!iw?s8p4&m-P$a{#yl>isz8W6UC?PB z&}yg{DP4h)s?yhdwa+rz_gh*6)RE(kp*3FPc0OgQdop1kVK}Z=oj=`CY_j1>G}I!l z&Cu@Qs~P7`xdmcp7XL~-`6y27B0K#c?l^wcn23VvhF1t&c=+jPu3uJ;yvk z2=yh!N7(n>0he8RJFG9p2^zyXKnym~;@4K6;%Z{hd7m0_0c@=W zT8WLKBdGfGw*}3^V3izY)WM}}l`$+>iJ~y2J#Sz^J$K6zh1b00ppx1sWV{aV*Qte5 zYhR2N;ki2e7m;Ihw25gu32ihxDaCqhGukaHS?6>U$M1Wu!MUmjm#Q5h&rsk{%its5Jpfb-0PMr`JZLOQUQ#0PE*bX++~#zOk>A+yz2 z(#B6COK7)ZNE#Px~|(8NvGu5W!EA5x+b5R6&A+0uMv#~^BAT%E8Xic+0g+Y!0) zTh%kmy;29s(5Vz{rMK)c z;j{eqmz{h1v*J-Anj!H;BqKL}<1@4$bS#JlW3Ver!sMFbZKI!mAz8fUlDi7%2&l^XiI3JaF zmgB#a#P4TP?c=oEEKB`P?6Ey`DBdkqN3QY?R1a}EP=vQ^iD5|eIrODViWYXN5dQSq zGrOv4(?WPa>0mQQnXq|#GSi0T>By>{o54K`o> zpg(I)0Xh|{6JeS8>P5;ySKX|bK=7}bjs+oC~GlXTZ!5WPua|yt%)mMlfVFxUTFy2{&^v2z74U!>H@i=exl=9ejm=q`6ZFTvY-K;n|Kwd!M!u-lqDFXDHe zh?VE}F5vw$L(u``%au2ui&DE2=SB{A+E8WpaKQl<6SbE?ZNJMr(Wc_dT%H$w9CYRj z4o*FtGZxBvEUW}KPwEH{JhP_WkG6@8N-0F#uxbm7i3%@0u@b*PQyv&W<>$1%&0Vh6 z?|0igTd?lph>gpSm>}B{=~t;uI#eDXN*$v7Q}Eru)l8inHavAciR>PZt{*`K&u_-2 zjL1f4JWkvJCsiq=tkwtzKw3|Igy!RKT75_j>#L!IR#toT5ijS1tV7M=?G8!cU0L@P&CbB1Toh`{uC?J=Lz=vY~Js?SEVvIyR{ zpK@SmxjXqepaj56I7)DsPP>t;bIRHghLBAm#UcA`HthFPU3bAGS*DXzcl$BJ9CAHL zIrD_hd!jayJGbR0xVs#?)4yDjYd4&Ct#1t7%zkJ^&{aus7vM_k=GL&%HfA%1K4p=i)S4=_mOWx z8K)8=RBEf}efnKi8=;WZ_pjGs9q#`&h}QqByQE&c85& z=yheWy{%kD6c^?x)$_4$uRs{*HJvpO=PK9K-3-sApapsEhI1W2Sv6Sc?q7PYu;+;D zi*XlUz94Fpw(70N7aZLWi}Ollw7SUV$nHF|Am)2m##t`KcU@z2DG%zGG^LxWk}3Ll z5--b-YzvKF73LWs{E<|$rXGyEdV~}MCAV_N*#)VhLRdgHvOXbkJl*4J!>#jD>?6o{ zp#&nYp(}fenqOsi1Hu0S&SZ8?Yw)*E%(tz#)kHJmV^-^KZ3-u7r2CO~#}*~5N}vv+ z1mSHgR-DtUVoo>wQZrmN~HfWPW zw|7Xbo^yRM8xp^HSxO%9qD|*WO0acZ{mgv>yI`FCWUa1`!Up72TaXz1$;jpsad@Kp z`P#Ye;&_UyeF0n5Y*$-z5&lNvHhEPPW4Q;qKYg5a>jUc|asK#JAyQGECbzJ@ynq=; zBxMz_Kgjxkt&mWUTBr84IH+2;s_ueLQ@8=%v>vgNjLTVDJwI%a!b`6xJym{rkkpN~%8cG^~y&B1=;J2kQl?LCLx{wtfDZGR+!Fmy5F4$4(VUdzNRfMJ92m^9q z)MmApanx`TP;?yMBl<|}ibnKmA}X;&Gvv!MQx!7Woku#U#{W9+Zr_Hs z%b0fK-BvV=9^Y=EWolj5TQ}cv$~a=rP{1NA4gt#qfvTY$HOkSr)T#QugpQ|Bp)&(; zL&XNdO=B>Gcr!d`5-&Fu(i0koD`uZAn>Q>nozb9BJ2o5Ga{`c5I6Q7%t+JZASwkEy z=zbo4umj!OSA4N6!U{?|I;ESPP_kAvY)hHA*xc~E6r1p{S*4;z;z771ChPtgch<8y z5WI<0Q2jxa)d+}FnItxTmX!3jH$S2G^_Q`}>KoBoN=J0?8WlAWeB~y%_#6dl)^uI_ z>?R`|J#PTBTTLtSk@`cgPJQL3Yj}cT&Vl}8_n#(o?{6`KS{-72BKBToYY*s=ysZzx z9IltKjW*Wr#9MBfwuK!GUEg*->?f4vX}vqLY#ivka4f7p>Y^TB*V0=v2S6Y7YlS9S za6TtjuHMVY+aW{I%c5#+ZyIC6H}X;>*6r%NTyuxi;CzH7?qCPiE8b$7Z7xcHS3AN! zOxIH1VzEYY`!aUEFST1y&0#F#&5nDKnNDgr-&~)e3+ZXoI`~^q7X`Y zcmkK8Jo~2wq#^&Qk8n>hNefU12ISkcyV{GWz5k%6RO;#jX5h|94GZ>3!UnBv@1;J6saA5r39_00Sjc&(m!&s}{rm-G` zJ-*AxyWrk?x6q05*KIyavb@Bh?^=z{viwgbP}N?0Ar7EwY>I>lf9%duJb%(7f=hKb z%9C^jdK9Ss&!9DTCE~m@p|eFsa7F4S8LeZyBrb;|OSZ~OJbr>`|AO&$ESztdzfgn* zgs$uf6K4f3e+nOKnS0Z>cl@*p;#1nAqA15gZ1arJTxEiBqF=msEVa*D9`+P{wZ{_rc(xWW z|IEk8{&vIRgiG+n;5wZm$=KE~DkcF?8wnJ5Ko8rM3g^8xOYbunWB)ki``|(INKyHr z6?^PU+D7$2FcZG+G;}{ivT0LbLBelW=EYVUO0bdWfM8687A z3lm)$^ufM(I74IDX)wKeYtlV%Lah6sZXTD~pEdj*A!zFoPflUXTO*>%C@gz8ng;`E z&DF}rcHbSjv*|7l*?AV8v{MVe^AV$lBE)}u&zo@<<1Pd7LZ}>{62Dj>N>IJkB{-dc za!ZlORf(QVZ|GfC_yrcY?^fYYjICZ0*P~+KldQ^;mje6Z0jNCC4qBl;RVi0xUQy1O z2FY12VTS{A1_KdOtL;8vxuDH+PAegp6KvTs>dlBsYE5N)b+%d0COG6%sjl(jd=b^~ z>B~zwX46MKhJs(MnPqiHSXboh%e543=wz%uD8Z5~KCob2#^Q3mx_$(#|D&q0)OUTX z#&w1T#2MB3Q^w!M@Fp!Um@~Cf-bYCv$l8Y7$$(((SI?REY%aNzR`Op?(hw4`jFOi+ zVPN<2a^;-p!oyCPu;K-0f;-dePe@$goCegqd}Wnj
PSTu~9z~3Hf=6;3z8BpH0 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%0D=|4fW?S#f$+vDR>yG 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 E0KZs8H2?qr literal 0 HcmV?d00001 diff --git a/img/scan.png b/img/scan.png new file mode 100644 index 0000000000000000000000000000000000000000..ff85f1af9dc05db9c62f3713242bfa4963e502a5 GIT binary patch literal 124999 zcmeFZcT`hZ+cq8@M@7YgGe{8}MT9{C0VUE^6cB0B2~7+E2_z_xV1R&+1$1a4-4GZA zK}tXZNrXVK5+D@mkPu=6gb*?k2tp{|2|A9?`#j&D-&()*Tkly*4CI`%_rCUhU;A!* z-?g(bm)s(^1q1>~p0hY(4+3pb27xxqZr%v|#ozCT!^E z&Rh0@Op4j9n;KK`cVuk!T@TLOKCN`3|F%|YN zW8{Z|X}wE9K8Xp~LRYDW+Wg|O-t!_iDtw^SbFMdeV5@PMyHg~OLoMx(HVIs{jrsC& z-wI`Qu5o2xRk-i?1x4h{aTF0|H85+5&!=a zhwJI=#+aCyA^$vuzCGSiTFWk94%0UWnRQgnb7Epb<|g}E+HqhN3X=VRw*DDSR`7r? z_zA$m)hXNb7t0MGkn?@{jA9%7gQeMG6D(xBGcS*}C25x{g*#Ab>lHEa$iJhC*pZ{B zQ;X&?XW5`BqE_XCu?g^o>ssl0XY$X0Ko^x|ogPL0qyq-)VZx_}^_V8fibfAs7%f*4 zo<$5(!-GTKy|@h>ck#y0l0dGFh=r+fH|SL6*Z0^Yb;3a)q1)Hq3~Eh0UHVjzoTOMb zH--yVOw>hxe*d~)wc`UB$)OoxRpKh5JdkeC^EkGA=6ZjX!%DmTd~qRpADaZ{t|sgy z?@b;({ZGucmUx5vp759udgXm!{@kEcw7~Hy53G5`Z8HonY6fP zVd4qD!}RTxuV-D@#Gvsxc0DF^F{wQyVQruG1R#XV`0X5G z+5NDR%czJ^+BEpB6SixeAhrBwCw3XY6*3skD-pPt#7~1Q-k*}sz6}!1Cfa1mhpRl- z3dw3(+=g?ia5qH?6>bdsRw4=vrM922VhM*D1E4WuZEC!+lsAO`(a`b!ar(XgXp8iz z3R04wn7+ODRwTT#Q;q-b%E!;ANFV+zcPO?|Fv`8WZM{FMm|taQ8hk?KOJ769$BmYO zzqN_`Q1{%$*?8XYG;u{?KWpO&kFsbXzYY~Ome!~LN1u!c))q+X+_9Ljyd1;UT?XK; znfQ;^d%-u(s^POJ!JJ&0z)kk`hnZ0ZUC}@(?V9UIB)`F57~`EdH}D1Mg37?1nXxFv z-K4gaX=+PmOz=AyJuA}n=BcY$q*l^lrGz7O?=n9uyfL?GLr)?16dZWz<33j%GoUWY zPNf@ls{JcFEPt#8-T#AgWh;8Zkqfi)=vO zv8{U_+8qEr%c#W&#;TIK9L+wvIx9Mb0rFMQ_;Kv0uXlJde)vx9)elWoF}8_UQ_sB( zTHUOy9qaVdfv$NA((n=^@tLX9*7T41JFYx#`qGwt?!;AT?Gh&jpXii;X`f#>mFKxd zIrmktmoPpW43JfxcARS3X3!HDd|kp4Nq5@?gXr#4xqsOt6-)VNiI)EC)VM8W`yQ+*I@>4@ z0+rkT4JV22bm-nX(=c)Fs;D)i}A!!jT^YmSn&wwmF_Tr;e)L+`n*s zX31SKE{xkxnD~Xkki1cI72x4XsJ@QWY2-1Fh6vOn+yS@DHWgms%&H*RbAe*G@;k$! zA{c4mhpqIal2Ks)hq`L766L`~l`F6YIM}H=*hLHdc50*{(wt=?dTco6$1>sSvEl@! zb4@)#E7`VV1K16&8U6_$jAQqvF7Wq;j#?NEN$aV!F1tUlc0eX$z&X`~*7<%#|Mb?z zO#b1rV7E)z(1Sc*cK_9B$)S;y6z7@CZ$nncWBlnHZMri88)D6vQ>G6EIc7SsX;{%^ zyoNU|swQW&Hg^G5TWtev559AR9wh76C%3ajcZ!^j?LNR#quXa_DvhTh{M<)5p+O(9 zgxI}-)q=3DS|b((md-FN3t~-+?6b{zC-VHgD{jU!6Fm(%FT;x)o1+GnjYu_jx#nd- z@kdxe-j8Bq+sRmy9VrW$BBkSIs#?SjHrc`S#b?H}cmcz$EDgR|NEvktEAJpLXy?gd z$uRtZRo$@#$~2(1_dCa?wKEtgyfj2N*0vw|tEtdoC2|NF?8!qDxRIvDH~kqSlqE*% z>;lr6Y|uac#i}EFTDQ5805qM!)%{qlFDlF_dPEGKQD}U9sN%L~z+py%bz|^4kWA6v zVg*r&L?%(tiWLX&NfT3C4O{O=1y??`cb41g%VY+`I8Pi2u6^gW)eL3uIkcb{y}Q7D zNJZu9?jl=#3N=4vDSSTmq<$D4tQBM6;= zYAw8DBa4_Pp#$~kba3Ota$e2n?d@bOiljl;ef}o7bH!H)1&E=JmrjL0RV^J}f(3f1 z%(_0W4vW@|{Hd^iU5>nAO2>G{Z%w5N)6kZPuuKBFt(SaC?O%U5lXOEr_{wIlx`LZp zRb+XTH zf2aSnY@Eus>1D=1Bw;OfEr8As^UxBkZ4(C-+ z%a@&4E~b@pEOMTE!a}w~YG@-X8h&B(rLREY^Y)4UT40hA#Xtq8lNk`*DcT>*@#%9b zV+tPz-OZ`ErIC9V6astH1xCebDf8Qd)wfuXid#^-RqpR&Egub*6#9}3eV_}NL$Um1PuRXLqJJ_qU;G%Tm<6~%*1#LL^TTa$ zkn(L#EVSOH#eS{T5hL@!ft#@Tb7O8uD(!>Osu!)YJVz5tw?klvl3?s~Uq%66?j8ca zFg~|o`z(2^w$X+R+SPCY>zs(8$nqS(L5%9AX~jZ35{N zI%S~lAefy1pB$z?%Yw6@UH)A}u{F4&Z(=eNK_H;=_K|pcP5x#sdrh zr^qVnoQVZyTC#*0-EurI#fpX3AWaAQAZRS%k7OflxyhUG(^Y4Tx=$z^zv8)arABC(<-S378|Y--vM~ySZHy z$W7(C^;1MEj-2}Q*)#*sjL7Dd7ECT;C_GWof!Abz{^Y@dFGz!uvtR>J$LGB|q-Fb7 zbSbYO$J`X@SIHgDogk;S8fKy{4?IWmUMwim43=LXq7`@Ke4HzALU>CqPjQNthvDU& zIhe)M25zgyWmB2i)3YTttV;=Go0+A@h)ykI9Wnx6N4hJ}aObNrE#70M<51$R5<>6NkWd+Y!ga<#UI}+>sD|`;r)b%l?>uSv7d{+ z9hH$O7vT`oC7E|*;33@>mMuaq=JZP9rV6HszMkVH1XGT&dm#yG#3DW_FzhbzbdNjB zHA=;4lQ82l&9z4zk=xNMi$}cuqkh7=4qi4S zGJ9Nm`)7UE{)!y_J8I7ut+?sjno{(=>0Ch!b(RgDQLPd#;97;;>elG&37fnJ;7*J) zB5lDp!gaBuVFx|JI-xf|5#7%3loQfSb?Pl?O+f%FK)Q@wZ%{J3eK@Z}qv z6=|28gTM?jnJRybM2_9NBOZC0G_vG6=SLp|D^o^?<)L~ZcmlgT8<=~!PpzLJxabt7 zg*CTstm0C_bqkJhCki>@@5S5OIZh|S^Ab(X-nkCc8aV{&2t1nhdu{S3ogWv;2m$C0 zH5TX2ewWgW<@!IYZ%Kt3O?D_9=j%WDik&4@{Tp-`ye?)1W=xuh>xjXV=fJ^k+%L5I zkU0Zrd>kt`bf5lYoCZA$t}u^@>OO!K z)sGfk1u#PlWoF0R_?bNsH=HxMHM>wyf0oIJqVgo&GBDu$*eSYk*~pZPsOTf0@>oU+ zmef|)ha7B!XUoT7!O45rs)V04V>cG)mXLE88_p2bMaHW$ZUe>qoHn7C^ZE!j+CKh< z9ao>?59j&inkr19j*0EdAeW@^LJ3Jpw}baP5Gky3d*NbasG! z*^+WJ&&&4+dl#qs26gxkYxiOlFu2UlhD%Ywn#g4v0e!-Lr}Bv zOh`_jSvt;1IA1SN8c1OtBWNQi4XI+}5dLe(UD?w)uQjz8UTht0%Z>$n6DCb=ai~#J zgmJ=cRu+0zZdXownw(e3sl3-p&eC|i?fM-Pp0ndB`_{*RW2gHdXaYOa*6r694GzZ0{)?qhbanhmIi6E z;16db-6q=awUaYx&U*7rkfdQdfcD`-#-v?(((K{VpTk0WkSw#*$5^jX4~C=wGOBYJ ze39CdmL3}2g|=~LPdL|>IEfP4+L@Ss6tc6I*WWw%`8eN; z0IXf+93WGGDvD0G#z|QY(>n(cp2evrRu_%w?#BG4nn|JCc<@NCKCLpLYg!FL!Km*9 z&nEvCGJ+~*zfz?hcUwixQeT(S1%{-f0r2Lkus;7@vg~mmI^B$ zo%py9h{w4OtaM!UV#S)?ysd)$A3TJ1U3p(C+|$f%jT|en)|u5Zz>&X!F=?f!h9{DC zWyWqmTar4)!~8T0Q0~1*$Tr@wK zgS0GYzCp5Me{H7>tH1yYA2A$vdqhB-Fwyo5f8dlahVz)I(5O$kZQ5bQoLSP9J<*)?prcmbLQFqR%$6laI68Bz z`83>)ctxG#MPX@&E@pI0CiJG^HkKGxJR%3N<(PMIyk338Ko)}Z_~%9K^*zLy0Y1Q~ zZjJd6%2{6JyXsDX%Zh1D!fYSdzDb52N%&wy|7`eOqM#MyYKX+zy}%>ttYUO(n1#jf z1MLaTU3hYNj;)?XX2Vs33}&6WL-nXPn%d8lquNZ0EirtnVcZo353jGlJuqFE?w!Zf zQ~;JWCebs#x1Ni0W`|O3eAVSwm9e!_J5!lR47{BRY%EOW}-~%Le7# z6A%)+D%cXqs0ELOgt5+%g7SuQCdfL+3eyDPpN=0BxQ#XS%D}l97c^%0*z{dyGj}Sc z%A{-2VdJ$)kYiGeDl>v+lh z^v93}tMm~E;WxF6=VeY%5gKyoPim|=G34bR{Yb!)WRbR09SJ`*_W%9>GTt5+7LnAY zWn7kze+or|Dn(<@4JSTUupL{xd7U?m7>)!2Ofj>jmE3H7pSiT#qqSLv4Qp;sV78Yy z-mr=<7hJ1M%&qB#mf+eXYdAWJH94g0kpz`_@4DLVoSmJ+L0xa6Ql zR@Ck?HuufT0GE!3eH@KL>Q%#|wY)TNCcs^BL{^763JL77WDoKGppkrk+;lg35)M2cI+q#ibs_ZSaqg%7ZN5qLUlRAzj=^m z79OOqq-6!JWq|I<)!BM($`nJ>B3QoHXn>fBoFoGzMIct%M3^M+r$>a-fT-83!oJ$+ z_OIZ;jW+!Nj+mQDg*B4D`%f|~ClaW(y8S3CUY4)t^qut?c+ux#w4Q1dK z#ZxlrjVJb9N=In%yUa}w<5x_BGl0pgOgvN7LMNp=BPhWJlI#vo@#6N4h*ZEUb-bEb zDgTfjm4cLBvs>9t{gI!Vj}icB0YWsk;khN&Cd@$3aiJB3=QyT!i~Dw_j#sFQq3xRq zFGeX=9w%XVtp)4CF(%1A>^wc}x{|YW`WjiQ@yM=^2+SHFj>SYACNa1*mhRXARz@dP zYpN%B1k>L&eJ(oqP6A{Auq`j_I=`TPA2vw~#;;q^Qt#pG>h!O4)Ca!nijpP+lgBLL zo3Lhnbj))nxp$^5i#>T*iTFfy`~wnZ)a=CH@*Gl{%%am z*;A(uPev+gKYUrW?2vX6L?)e zSkKceeL{EtAZOJ@tTB6JsqEC1k)x>#C|2{n$~2&l9pNpW+BE>BlrMYAKhmOy1pXQ7 zLR-z5{n1vAR0F?*V=wKgU`6RHX&&331wcKf9>q;Fwd^3f#Ty;2R^U-Rn zM)!m&#BRg#+cVwf-S7bbmEM0tr4$XVsJvMry<+)SU=SNqn86G4T2qnLs$j)!>6ox_ zgC_5r<6|cY(8y+sp9!poRE^pTj;ZphgqY9X4%7?PleF{qh%7&~RpbA(e|n2fTdKpA zQVL@ew)IRFp1xaq2tCeH$cC}S2JqjupGGm@S2&DE&M%jkil%Ey_$5`61If-*TAmB3 zqBAGTykjPuWusn4d;No&V3(rU6cpqUp{jAU@*%o|HyJ!~wh2jLIm3ZCuOE>Rm|rzC zpG(75b#M-GpL_)(P+;}=D66JVBYIWu?vIYB5LjqVD5M|9ES;NgDA^BY##+)ZA`}<4 zj>F2k?;7~Utqy{B#5R*BJ9N@vvZng@K%VB74dkGB=I49n)`-(DlG&JI=b30m`p!&f^h5E3*I?C(iWl1$l*F{5ZRA{egJj8r*bLXisP=`0;-r zvRfPgkEy!LFVSILS-wo-0=^P=v909if# zs}tCek~X{v4^lZ()eP9eT1*1_;yJ2%lSe0DbFR?@*(l9b9uc(9^loj*Fg_UGtf!Zu zl}vg7=mM<6_M0xe2XtXVQ}?qG%1^8f&O`4c2HlWz>)ii!?55)!lBK)o z%R*f+w+8MGjb05V0Spl*Q_V(v8L^w(nsw-t^VYaSkDs2;;DyIK3B$?myuAt^B1r!+ zbm?=OqV#1eJ!-ontHV;l9Q#)wC(@Ie9whu>hdTrw&S;p(O&Sj?9c#Mi!sK>9vw>fV z2K0T_*4THA6*ws@F&WOyg~EZ}9w@bCwYNSngln673>St-hE{7YNnZJ4i~ zyE*F)O2Hgj6Dgb;f+FhYM{*-WF<~|LSoflhV>< z{9QU2R}}VEtmz9N9XL_0erPwKD}YIh80;*Q6X+Cc9@Qy>Dc;uq+wk}rxtR~Z10UM> ztLlr<$~BKO7dC>!<`f**qir$%oS+xy0NY2Y73RExcL$VaIIR}Cu)y((EG^AHgV99K*UmDCY6^G zI&-Fq6Snk8GSWyvxbN;jA6fWWfXeF+=p)0&FL38qrA1$G;VD%tBfzrt9QEgy!v_Yf zm(A|XoZy5tx^q{i4Zs=8(1#eCNk|rg`0wGu6sGm{u)(66y7;Y_zj ziL?O!?yH#{O|*&Kpfc3KF-|vT5Kr!}Vp0;~6(t-*=NE~w=zGaSUxf``Kq`kuljbbj zBWpsq6Tx7yyzJH(dr~pfPimm@L~Y9H?a%J>k24g zE4?11iL#-6bsrm)$503rF;$(}V0B~jZh0LVhrC{D1vHJqJ<|de5M!MjP z9E6ROV8HzD0A~7jCME`xhr2ORXbp4ge&>!erzGyjKh^rm@?+=Xf(S2Bmy7=*E|M4Y z*ZXIa`=5_MBvi)yp6{$Z)g5lwp+?6fy&SUUhIRY1;e6{y4f%rPH9^JAeIjcCZUuF_ zFRpW?K~qK_KschFWW(xP(`@^sm(!w9Y;#rifHtCE2OK)XaccxJ8+v?c_LQ3wAilDe zZHse+7`5?0gnGWM?q@_$uEbv?!1$apR0n)~5a?8K52h*pWj9YP=yX$Yl6b^|d; z>A6tY3NGyaGE!X>If5Co7i0(yR@}xAL@S8pA7e)G+iHjEtR#6d>W^Ml_V*L}!ar2- zQ;wP*j#(Jy)p+#YHR$PHH|*a=mTnAfFXx8j%{`LsIY1EparKT`y`trcU zTRykfi>%Fo-8fNI@!@hgdOR`Bu8el29f;I^*KpZiABt9Bhv}0%7NuCd!gdXwgsD`m zo1G=Y*W7_D#8(@8=mqLZmDpX);p+gIm%h5j;tZQfvA@crB1E-kfw)LP_p}H5`KE$@**B+f0zxQUj;&gz=K0heBmK6f-E)rQC+z+wi9+#X3UE3$wXNanxAK(r^q z_9+#nH`*b2X^h0%VUvAKPsfGB^R%R;Y~-f-dzR+Gij6L~=*ycHvJ_Uhb-!P5ptjUi zV9q8zpI)-Z;s*$<19&#ZJDfSZ`8=-LQUxW%xXH3Fj$rQF%;v`^=Z(6~nV~a^N2A;a zt{!uyx)o!TtWjlrzqWr^&@t%|OkLi-^^-bQ$!=Roc`*6qq27K(4^VPLx;P|1g-s7U zZ??zdo7BM5mnZd4tc8<0=I!UHo%fgnd>igcE<|5kE8;}v>rRiu=6+6q92Q}R?xEWM zHnwD{31VYw4kcGWsG_ZEmI-BRI|AuN(E<%(1=@Bp($qS-u}uWz?jh9j)XDI`AJ5sv*JmIGCs&fy~Q>34p zDS4!wn*C%7bMM{@BKS~Ry0Y%y>=6iny{6g>r)l0k#RK zvJtCXh4q@sRgzIAno8U!Q~V+#F-DLz=+QaD_CEp*Vgc1P+%HRm9~ZR7s`NW6DtcVU zIWnBp%ye=ckG}}4!TlJkyjSzF#NAiBfpqs_X_b5DmgOQy<#iifTACD>VRmT zC$28K1_JX&2%;4MLN*q}I`)SSNj7d5 zCQYCQ2kYs6etZ(R_fKy#&h&~`XLC3R^lar@naMM=zV){-!<}j~kN-sC$~GzhTL7-3 zF~e8qDG_SPi@^Q~;kPP3knUttqC6dGkzQnDeLRN50rg4QG;wY8U=4HM z&Rl&IJY;ocdBOmA5!U|i4lTZq*GyukStyqez6a_+`-C%Dmw`v#`qs~OpQlHcdDn#n zEUE#edBI=nhd@uR`U5qYXy}3T3%|rBW&H(IYFl^YnRp|{+rgY1+Sax9aNuC)n97*h zF7qB>P$1E_;x3RpVBqqdf^FI+fl^KLb+79+-@SB$9eceL$-CNK-5RL)vv^~Oib^Aw z+BhKC^oO|cT0De7@V9LbCw7tKe<{m2c>uUAr#y0g+S&%MkD3CDMj4sKeBh753tt1% zAR8;Q(}vi^*(&*88O}(w?}oEV8o>9@S|%g)Ux+Kqv73NVC4U>$m516lPOrc1-t%EUEIiV07OsV3k>4~=zn)_0Koje+P!h&vRGbnj3Uu9 zJ$Wm$j{(s*E-u=gb-L&>-1zUi3S2Aqh693(S(LrMng`tpbn5M!uVqWXr$0TZXkI{; zud}#d2Y7nVa2<-PYUhzl|GJ-mn|hH7-2psva&4#1+meu5WsWQILN?wYJjpEd{GafB zzMidu6La0?HLbmG&qauMlw^e%iB>T+?7ja@en5N66YdO3-v8?L?O`ZgGSbNKy#J>o z_)a8H**Z~1J+GRQnkFcXTmp*n*R&Ay%t!TW85-!>^N6`VmpqA-kGpc_r`b4~zV~{S z(V7xQrlzg;ZJwh6(g7Sil0$=nC6q(DofiznvOKuyZvi}EK}sQLc-5c4qN)Vro%?Vr zYwEj&HIeS(rH39as_>-hV(CaJ%a4WZr&m7=YGu*&#bmPgkMG?t+_00n?*0Z`tdyni z9=uVcaPTTFVs&}Gm_KNJ`fg5*d9tEH2hQE7P3DnAywi+J^U^ z^lRUe8aj(j4(@2qr&_6gu9UjLsLNy>7@+iD86M>Est>zV7*^x$WlxDWNxj|qeUjdK zG)6DGUhy5G2W?R%#sm8)mfNaubUpr}>fQZmUtGjnH^}Pt3-i)Y3Z)ZH_qp*5cmXKx z&##51Ake1q7q_?4ZzwSg>-26(`9yA3UP-rm-_r6arPwwv+Rp&y=v81Tp0OVuQGR!C zx&Y^XTIuxNCq}oVRxMRO`+C-2`#eal18T=-oq)TqFFSoDSJ3sFAs?C&q5n$Ruq{(L zZ8OUh7~L%?TW7_%5w^22P^kUS1`YAO6Wx!1dx4!0*4_#>s=I)C?DyUh%DLrCVXG2e zJbOaVZ`=mjZpQ0sFL9?JtvOmbb_arX2XLVH717NF#q62<~*O12h>r|Wv`8;Z`7BS$@2|s zy>-U@?i&^UY!1THE^3|hltNe=46$8fS*29&C z_?V=Y_&u76gz-T?!C{JbpsO0|P!CY+yl^=ZR?9$Seb7!OwqLD5GHyv#dsYX*t{fS+ z>EF*Kwi@U8d(u7Ths8>h7ZB;ZFh7HZrPG;%JV{ao&w<&i=O&*5Ufc9D=>J`uWh5Si z-8@i9Tb!Kj8$I}24z?y_TymdFH5`)V_94)Q})fUyFejq=+8(; z@yV%jYX2&m51I<=QZ2Ja{W#8r zN6LWIOo^gwqJd?YUc|tNwf9NqcO^X9O268nrUW4khN)_;%gyN8B~oKuvN&3$3m+tM z-L^^AM^gd}WN_*_}j0c3i?aHnnUCx3D|1QC@b`M-*IZB*sHCG|@ZQC&nF~16FmjC0=kz7EE|Dgf zMNoq%LB&T*U!0b(d_)MMV;J?9qjkhylp#?+`TX=sq}u9;wS z?;qzd=F`)8T3a_Kv%RcG90Ei0I$D^d(m8>6v+Kn@-%05=-`)!3$%E;@uzF7)=WbE< zJ4T5Chf8bo+qIpbamhp4c7x>c`Q z14|E}NTp3}O&_iLND8oz@2KuRrx==o?Zz7)_x0{eV2|YIq>^^&?|v(`um)YeE6!$# zUr|3Dkf78s9aXjRTOgZNPCeN0I=1x_l&xzY5ZTr2%}#k?9}s-!tWVYce?83(;!Mv9 z$e0^vNCt7W3BO2{2COc|#;>LsD16-@-gftlruH{coqBwGCPU&C3JA(&rI6|b=h$_qz{R9@ zi|bwD%~nfquhZEwxRb;iA>ohe6--K5_eO@yAO8yh1Uh)Xy#-gA+R6jM#2rb--;DUX`eNr9(vvi3T zdvBzbCD>;KPuy_> z4;>U+=}#)ZQ^8JW%wD*-@iIf*T3hdDs>$fwV)C+d;$D}n`(Y~*&(l{k{u+F^s{_u8 z^im~CZ-ywJadBUj2P3V#3EZtG@gJed?xuGEGuJ@ZQ^+DGWDM4MVHejw7u>kUy3+RA zb^nX(DyBhAD3LECUQmA&Kaw4*K1C=!1k`BiO1UbUHk2l8=|_Zj5eL@mN<3zG;S$DP$)qEp zfe=^_RivF~EN-71E471{GqqJ&W6MP`3r>}Ow_$EUo&~4xdh|$K(%D#h72C=ITN3GvHHn1jpW>6jxqu4^}+YlX~p2kyB z*^E=r=pgovm^77NpF-&5X>#U+J-O^ys0R6X+O^B$zC8U*I9qHuf>;&b&5(TQJ8q+0 z`COo|={6|NkcLWuWcgoc)`WA1!68uf<}|vVxmh1KDJsj(J&!q~A?E{x;!wR05#$z7 zuU**@2O+Dhk`@uPNF;h!H)<2#A0j~A2P$M`eCAD{R-0c9jDG@?h(4d+sd z60064i24r>p7Otc7V=nhrY-jK>peZ;HD!s{zz4HZPxil=fG2CHn|D#Kyn9hKAi5DG zaRkjV&>T$t%VU0-`xsc|ZN^MMQ5lY$E3GNB!!(@$9;UqwKR zY49pkn;sqRRnosKZvP4I9}$G_f3bgEo-u$zMQ9qK%%xH>Fx=v(fA$so@UWM+PM?>Z zcoJolK00Y>S0$n)^n-0VAwXe{S>Q0;?!DFN;_M2RGePQPdvhMQCJE8drbkn!dmIVP z-L7R8$s&q5r~k%KNovF^J)qrZb^oZ|!Rv#PaRPe+!cYcOqiOT5jHb){ot-U^zx2fv{G<9wMNh<FH>CUOX%eLP5XDnnu z8Xw-m@0yq6P7^Qu~+r=;rjybEfhb3c~0Fehwf-%>Lj>Gg{ z#8CW5zlqzQTFSrxAZ}6Wc*XDnDUC8+qUU;;X%rw5^djq>gl)V1WT}+{FD{d?_fzKm z;00xpY=3r&oC7q73fpV1di79pKu0uhtIBqxjto-L+$5j@;oA@|fwtu=4FLj>wltg& z>;oFUi2rBqo3`I6H%OBq?X=~5fM%x5O_OoviQAprD?(mXPZtnHW zs)3D*fc^aU9&yn2)8Vr;HS+GrT&fP0y*7MHj5zb7Hn2llFj#LdYkf5cS~&o0oDDB;aGd}A{t@ED z*d>4s~_WpqELRF4#I_RVR`m0!7+3Rxf9-zw0vAwFd|FFn_4v(+) z?^Fy7?otg0*zRn{=yXV-b_6W`E9IiMNh(bIDn@+IKT_{|s~Rv<`sD600p1OEeA(ai zdeO|#U02mX{@u~^d-h<9TGhWCwyHf!tm#{xhmnIhAHu=1Tcj*=th}&ueNX`luolvP z;}V~Lpb0eSqlQ4k?O{JPlmrzxLu?n66oLj;SXSK$H@vHd!VFnRiN=FsG;jefH6PQ_!dtC z{N=|#UxJt`3kTHYI9oa6R{w`X2B5Xiv6J;&OpENAtn$9!c2_dnTiyLGi= z@z7Cn!Yvtwu3x(O7RtsCQdSJ(7F|zY@6&g)4~c|KQs8;sO{UiU>u-sot9LN@uN;%| z&KC5-Y5}*y4sSe=wBH8kRtcUjae^XO)?liq63ES73pQNL`#u*JeSIsDb_f6URGM_J zBj{FR#)Cc06I(4GY4hrj+Aw(=m;BOWfQ^N)T#_#JxbKDik#=D}MdOAukD^bip}KfEN~%uBvZQ269!Vh*vL{+&LBx z-IAHdur@PUxE8d=xIr1S;C?l7s8~?(Gn5>@8Ca;Q{nG8${78*|0uIee$<$LR{as~? zW{Mt<7H`-}2>TRox;tm6tjl+6)_R_I3jt)n)CCqS<9PD(H_yiJog8{|VLw&M3sR#X zWya7we@~5Z|72H?LBC=izBMpDNDV|v$bhxhp^IBEsn8>pFis&msBtNrBkZ^wAO9i& zD5Ofi?yfGA9mA-?E$613-lIS_6{02%Cf8=u=$nd(L2l!YdX^LQ^n&D}k^O*$d!1Xi zz808x5bNRh1y;!?3jjF%&sL)J&)E?8NXWroj%hYmTP5zYNHFZ6^skh|3m*6Ro*^A^ zASAjGr2NhgRtqmrIKgpdFn2SCHtbB@^f89BkiV9DN~$D#El?7Esrxkez=eiQ^jbrITg1N@5K&A{^E|hSeN#I9-4(=#ea`Y5X+k z<%DSP6Ig*L${_GDN7nekq+0t9fsTKNBde_Mp#U`{6wc+8C#q$4>A6Tauh}~{zOVCX zhTCi8WdbA`l!xsjj|BxjBIM^67)q0(tS0ZZ>TB$l+FPnwp7EFciy%`N9?mOl+Us*f zL{J{g?haxPZBa(qZLAENo=p65K(!^(hev2Q@TD^0C=urzs1D?Z?GF&=gm-cmS7+J zsBK0{@XA7+vpZ6dsNCB_NSMvA8`L-d)T(PSs8wLy0i-<9juaq;Py=&^8v4~8Vjc7; zO1S36LQCvw?}w$QDDOt%2e5j4vxY@r6sVN-IX(OUdytTzE){otFkY@*{ zcQu24^J$yDoTJFz27LcRWGpA)qjRj8z3iMM2m-6=nD&o12a6{n?jNBn7H%E~=IoeJ z$SO`j+OJsBjpQF+ZdfKSZxKz!Wl-p96Vom3#kXYKv-^#x!X z`%>Guh1#jJz`fT^|8etyV^&B|pZh>Yzy`Q48i+BOL^y^n$c6w1p#Tj5S6sn&O;s;A zkZTgNl6|seZI}M~la1mKyG@?)@~l7!*o&zwjsc!H^SARVe)|7eH2HsD{=er=f&RaD zz|zFrr>=q)|2(X2ZS?Zu$H~63RN!Q!)lZFlHWiFD$BE|o`$(aH()lynm%hp{@N-aI ztTQQ4shvQu`u)dZljVS5&!<;>LdHAr6TiItxSXls`5;FhRm${RF{-STivUhi`g&aq zUE?ELSmBGaKCg&U2LQ8oENpVYc=1y~%S2Cc883`0CIWFVy7-@`aBKEWuH}^{+cp8G z2cc(#tl)h{UV12iU!c!lY}mXfF(~W0Pk7iX;P@87r_b%#{)+E%FzJidfZ z*R6HDxWcIK%h#QmGV^ z%1o~~BXi?!yzj@C+J;%?#`Cp61Y3vi`O7iGn3biTdB2)7e?I{tyNko?h36DmhFf>| zeSBq%`6#$I-#!dvKPE&D-hdA@D>kFQUgWhrBXIL)!-GMtv3ms9#?Atn*JFC9$=;p- zDfssRT#Q^p;z8Q;=Uew^Sgp>v$&OwT=JuNJ!yd!JXxe{e(e=bj!`k(vVGZo_Q~+Zg zpO4Vz~0}Hb6lIVr!uJHwh&#aj>7Rt8(<3_)rytB!3^~H0jRqQviIDU()6sG4SN81D>kdBDx~VwuBgAC0iDqM`p}HU*oGYr;y}L6y5~gg zOPAIsV6`8-pK2&eNPF6z|4JOd&EEZA&gByyrWflxV=nsBLnZ&rMiG$oI3&Kg%G^LD z%2mf%^>bH&d5;S@+3vre#aBwYCH2l^El(&;VC>#27WCP^M!2N%Sl65C32nI#y1OkM z|7**n47&qXZ1K@x;*`j{=Z0goTtG8zy=^7M0$<#7WVhcx5+PWd>9*Bc4{~-zi zLO|I}BzKHm=lEciX62gsRW7sc-A*NgR7tR>x3KyDi=r#L0wbu`&K zx1m_tW6JW%RpAP-OT_rQY+lj+Mg$*UigkT8kS6Ax?7!Xut}hrn>c%!VY+SPzlFoxZ z_m()=a=2aXe>VhTt?6UPM?g|+UtR~i;u8@;A&QN|=`n}*v2t23-&srbe{frvPq^nw zGbz}QX3@k-z(0RN9G3cOgRH%6(0NTzlq7a!Jb&({ta@!_X`ui(*e&z_u=nQSRITqH z@NOQEN`_KYI_VgS2${C#P6Kr+WR5~5LuAUZJB1{vqe;e2=cJMlp~#jY2~i?rLQ&>< z-1dI&XRWnaD}Ar`ulKs%KYshKuI#m*XWirH{@nMo_LY~KtJH^J9zjE4YQtlY&)JW* z%1O5&P6gdRF#Z_vMfhWU+h6dk%gpq*eJXtp#mcrdx4}zZRB0b}3&MsAu%$9PFr=j} z5p>84`kImuBp+QdLvKtI)A+nG$k0SrY(e-A`lszig-m1crSBT!&)aqdbF$5D>bVi=JTOosa+bGDA!(|NqOi;~M+Ft>KpYf0p`xmim8z>;J3yrT_D> z|EoC7f;>D2^YZJ)vSafrl{GaUnHmi@zGqH(yqi1wgRF$1(Ouun(Hzb%_EsCNV?}y9 zK4!Bc*{4RqMe5U-wJ1GiQlJQj^*+-=`21>ua_XTdHy8xsYaCjEiQfM)(plbqXqSF3ir;Sxryt zN;}aNAJ@a)GfOU+y04}h!$`gJexCioksRlq{#xR-p7$Vs3gE=YJ1Bx)W>t_k%(baIKM5(w6{e$(n}3=l8Aw2;z4OP*FsIbl-)YMiI%~$ zj@8m@?!Z3WsLSNkc8Y69&dY2YyH^V-0VS zafGE)){y*)3_H?z$QbR^&HMhe3L(m)XutWD#O6`Ilc^?N^JFG}bD5pym@_=;0QFIi zjQiiK?2M5#@6-(-)iiEf024<=R9YQ9Ox?R98(GM^jP4&!Cm8L-Taj?ln{AmaF&pk2 zGX53Op4Vxnhrk_f>`>>h%LhvzPDwsMF=f7?qUbtZq+C$44(Q&5@+9SL#dYc`OZwx5 z)Z1cE)IqzTynWs*5O%SCxYDN%TW8Qpm0?W0V4B!w;JcUoZb+K+;bA*T)4DMSBoV4F ztnT!%Pg|lMriUyZEIsWm#buY&uzJ$+9oN-8K&INst}lmu)N)63uyxFix-h*}+}JgK z$PB|h8%xn`{-fOH;$(rf{XFg!fXt6cp4oPbBG}#I zcGk)HQ3oM)qWy~rcG@puStMl*-mYJXZG6}hyUR?K!SZG-41H~8hNGkj3L2$`|EWKj z+9)-1Ev5J-ylq?&WWu3@k?#(Z!@s=Jy>7YnCbICe&C7oR3EN?)p(qT=0`DW ztz6MguS1YR4vBTMMh)x0{Zy7x%s};LWAmdJv{wCO@64vgh!%1<EyP2=jhQGN4H=AVaM+tGAcYid< z-H#$z`;u`~0cNc_`Z^jcnqrMhANvJGE}g-PJjcEMS&$@M-Btb66b5yr$qu@e9MHZj zN8SLQ9d11ZgZRcn1w72qkH#$vHqBCfF9W48}h3)6z$G?OU{|>(p>M2cjhq~ zDI%No?H4ekggfGmEubL(&AXNG9=WzHvCBI6~7%>vyqi(dDH1u>kqg(A0scW7lV=Xw|9fG>we zB!fYpdtfUMC>s2{@fSWSGv4k)yNTEPJp9FZgR4rMCW}=Ep)LL~^%kjMZe=A9gK__4 zP*ODGB?X?qCp0-F{kfo8tr%FP|{O)!qqXfYJCZAu)q>Hn5cKmG`8wVs zr54bnc$j}fT5mOCUA5)wfM0&pUKq27%aZPM>@DbgbQdfHPbNg!pe}JF+hAwBF3dQF zppmfB-$&utN3!Zz`mQw#G24REY^~%(!yK+Ih71sofu?KGw$MzGS?UVELy9jff)ccG6o)T-{#mJzkRP@pMfg+i(Dd%65tAtHPU3;?6=amZ4^!+da9Dw5s-b?0s z^cE?{+*=OkuX?R7hZtr>t(EO z-x-{3g?=&w`Jb2eeNfE z2qcrERa0rL81Op&f$z7^aBykltpj@XH1^SoakTR^L9tiIi(Q@n$pzH{nX9o(e#hwf z>2JqNx`2Hz^^O%lKZk;S47efPb7+_esmJU97UK4z9)hB^D>`h%ET7m_!Hb`KZZFpV zk!c4aUT2H%Lu~H%q4XAiWCsvr*&&?Bs0NtY$6j#k#BDEpxmr8MuKzmhC=Q_0vtQYJ zv=WR`2}>1ElXl-)t0A!7qwo9sz8f!2AI#l$<7xxU9Na&^m5pE1|FD9JB+Lr_Tz}`t z;*~~U{7Fvr=2G~dWthz-e|!NWA;& z{9<{BLvD-uP;Hxl8BgKI7`vGH1*aQ}rwc%1v*?F(b!)X9)3fQqFK%|waLk*1t4@dQ!nx&* zs+|^&*RTtAPd)6OPlETYJiltW3J(uDzKMPnXRqmE9hX(FFGr-dUs!l!(mfxRwVJY- zkveRCP7vog20BYQz1|_LI3{PyGmZbQSKWXUUCU9k;`lzf8+o#EyIqoUrVFN2-rEs$ z<>vlh{FGIDzxSy3SR4kmIyrHi-mlED!L!&VZ;d~ANQ~&tLhrazh$#^vbx4on{l?Mn z+?ondU!-_enJfXRJ^?cqTeXfj$EVvV5MA;{7QM`agUtai_rkOQ>DO zM$cm}VZ5%(DFO~_hO?#dtKfVp1#>{&fkaTT8inU;7SKFq?^)jc;lJIbdganEV*)2- z8+*C^O{LcVWoY>2R!-CW7eDX9x`(&GL|*>j7`7n|7mhX+!E_9<1BNHJ0_z95Wwj}L zkRuOPcM415Zc-~U*Dp#vv0Pq4{C@ZazUCRcc5u2u=4$H0ylvd58`>Yl@rcGsBX(CP z005#>i+4j`Wgdg5eIOW3#2AhQsJXz4s3O$w46}xNcTCBFslcUUoGNuwi19bFt`d97 zbROwd=D)IC11q)Zremief>l34RZP#pEJiKk%ldv~RB*rPJhx8uwx`sYv|KCZUTr%B zSa!U8fq;Cp2Y@+%TfFvsb70PN%f77gM?P}|_N2o!!u#(R7w=6F+FEGs53Mp)r4K8) z+M)lVFr-yKMjLs$A7ZiUlKt|>wsIq>3NIH>A%u>$JU%UtZWymLN4R`5)UmgiBc%{h zoHvnSp_we%65d)wOu>gAxcxT9dku)OJq@jqShbXOQd|c`VF1MCkazqwtV$N{O zEo7A2D41bCtLsbmS1VyJJrvUe;=I?p4GrZd&7e7RPcoy0Xl9F=KaZrN-9)ljDZz1_ zY!$Q`1?lKlasfcmI%X(jg|(E*`|+y!EQ9Y*L*fWD^9kjziev;T734Par|R$y%1pnK z+UWR!O0>_CuS9v+0_EtQ3>LhP74$bsk!<`V7!^q=L~r(xV3c>p$T!gOz+Q@u~j~+t2N%2b$3-t7WEhmn;qJ7XF{cLGlD4dAO>U+y9@lt2~qm?v23X{=w z`G1LP1w~xyja<|Tj4(mp(EPZE_pxnsef-JBR&bARVSirwM{2x~YM7oLyMPJw;+K7t zx?wf&Hm-dlO{gI2xot(GK;u~*|04{m93{)@OC}|^gMZ0^BW$72rSmH2?A~yUFB!?U z1N_N=pLZfYoD~#7T_+cNnNvnkz=JB@=qG0!3LsY{_6%+~146}~pq?{L$JIndP+-@^1vCS4gkWg=owu%8 zzVI0!yl?Wwv=S_%ah!3E({8&>+v)XBf_bzyr*4o{Ha+^fqitL_~?Fil|Y^lefz4qXu4 zxIFvcyplN=6}P%iO|!qf{+z(*&E9ZT<#|sm8q$S1uBYn6izVPyyMv#57hY>I_!eC} zYHqtRVkV>g54ElPxdy5wnkp}Ui;rJaHf#zbd>8pI0X!+od=2>>>yK1s#a^QA^GVvW zXuOn2idQap*6=3eY-LxxO5oyXVm26^{F@87~B^k9Z1;9m~#sx~wI1jnGZq zhU2t~=ajoVcyH>7RzKDAqt$f@?a?*oi~n%bGDB!lLza7Ma&d2WG28 z&-91s;F{Cwe6+IN6bTTrY5&9w35uR#=JM~df5!XKQ8O-7&&!VWdkzAq*WE^|I7NB% z({?vc=3Y}6dvgon2X_DH>l^r^HU1;7;UCCuNwaaS zunyKS%`2tFkA9f9AAZRV|CIc@+30q_Jkj=^_DT@m!1k&Ym$;QA?M_L7k4yh2x#q0w zr#_#+u}vtC7JT?&tRU#^jj!J^HC212Yobwr4vq0Lm@LKB3Lf7ME2+y=pA%@z4S4`nRU;`RX=%)r$BDjhh4D7s3iFdqc(kdbzoxKLp?@R!MMk6 zkRQO4VnOj7vh?D0OxC8yFnu=)i`|q>Z(2;d^9T9S243wt6|3Uau?ao@`*WkYq2CNV zrqUGs$X3{PzFxW*X?R|k$U2ikSx`}lI%SbO+dYM7d!zk!O^wHC)@#W|Qn95zIorPV z$Xaz7!_-3yXm<`#cJKz4bog5M5{> z#B`!Z$dZnbjLf(aJtb-b`3a(?u2>5e9OyheU<1|{D^0dOwVx$4k0POIu%m{d=d;lI zJ7#r!DxRXHwv!ZKGUxq5I=9FwIQ0UL&h76$#=zFAwve};yn-s7G;(0i6nc61iQtZR zH3i_|t;-^$@Bm$+N!j7H$=0)uEWV1r@Bm#PWYVoZ+;;{f&`$BcP~>3{0Pq-H5<$89 zoOQyV%S^Mwc=+M^US3-JTC(uO6R0tIY$+`%jjVl-oUR*INOrTdFAJ}0x{3V9j=VeT zFRycql+=r>>*vxlCu8mK9kAS}SvWz<1uS zt&0c*v+AX6!2NmG6BXAMTeJb!A_bb$Q}Uy;0&Y|pI6zcHzJG7pU~4liDwu4RUrbr2 z+m2IXv#K7+Iv7`6D30ZnOuqlJ_8;P2kL%oTgKCr@$b(+VyZf$B%3kh%(U)L15d6r} ziL#iKyBNz!>ebru!gb6Id%E0SJoI##Q1&N4wj3=f%C&A2(y5L%{Vqj|+C#Z^vguqU z`%RPuAsxfi{oQzG|4Mnj*~+V%K(+U3L)-;*rqPa(%{J*}wD(YgioLlyV1rXbZxg}s ztXGk@XLxoZb(O2BqdSO`6K7QHWZ49fEu$oPt%-L8ghg;Gmc8Zg5i@B@K&x^+*b!&5+Q79j%`+(LaQbNr>Ix}8D)cii)_E^QnR1JZnVMy$_nLRQt$wTZ!x4O z8~g*}j^Hev+9C*jqkTM{(`g4~$@(k!3H*4?qdg$w8ph4upXIafKg#~UQ36lY3CiAH zm(p4KOI75Nf(hqp^QBx~PmMm{eQh@>U${G2K9n!)?QH08#uO-6%x`rQf}fc(IXqaO z0KjMkxC2k@G-pGybno{=Vt45JSc@dA!z|IFWtxyPYsqzLYLAPYMjOzk+@bGh0mbW) zeMm7}RKOAGr(@5{OVLvpFRzobTGT`JvFxB+0F~$oBE2^VfCHVSXsDC~4hat%T|ri1 z>G!m*HQ=AJ(=X$pIbNKyzE8lXNO*n}n(1MO(H6%3CT+p2Zm*_iI20ZPcCOGNYjB{9 z0q0qawr6rdt*|$Un0JFV$OaqeZ!qEwn&Y(L1MZV_iR?Z%CdcPkN&x>hvR3^qdi*Jkcu|q`H|2U#>dFrJ55@ltJ`bPZD-8Jy zmuXtf2rRryt5g*a^ zJs526yCV6i%VQ^Uy65_#Q-GFBLdcSR%%hBhUBaW9$q{`Y6%3XF{s6Ic#gVtZ%<{iv-KF%wZCFNU0q%%gF(x>J7xi2H?z4gn~4Swr5D$ zo&c$O@anE~0=30!kZnR~!Bk8s^W}W6E})r7lBITPdHP>CC)2Poy=5`YESmgRS=)y9 z{0LZp=D<5?YGmAPedHH%q3AS#Bo`hgKUm8nGAyv(Pqmh)UF2O0IT2FHxhD=`mC-_$ zib3IIsZi*~q^qR3%N()+wu<(EToFb2T*#C|WYqM_D~?WwGt_A9ulL00UPgO#bcB0* zd%J^A6c!eKj1(oh*O_@fdN{$Sr|zexF^$%C9~nW9f?ZvPEWA-w7acNG@fhkV7Sd$8 z^;)v}n_{0lDKEaEG59q$bD35m3`zafzFI5Z;S ziQl<;x@bs9NacKfr5Cae@X5B@5~bgi4bijxGC{D0w-K4ve+NAWjO{E|quCU^dGp3y zUBu+2(ZHi`_5lr}b<5P8AB%}8EwtU?!5NLWKTojhT9WRQLWo%>vYKnB{;%M@stUYIFVpN1K#e*1VPlkW9mf9hh`be58I`qSaD z5R1Gkx!kL(>cBIwvikPzfaoc-fgK39RX!aa9_C9pQh72Y@Ad0sL19~E?&)OfW4~}% zIwyD^Wec_4y}(0V4ebg8bM zUaLd>s6O_*!ODt?N$l$In(GyX`y1e_dO&B!=sWPkiH}Y7DBX@Vh?4s!cD=*EVM|NP zas!^R{W#kfdULz4v9Ymu;EdAHh1LE2MR6uCtGc}R!M8{s!^(ap$2-8gH!|ZLz>`r^ zc2M2X$Yb!0*pw3SXXpFs{66&rQC+7g z#XeQ%jZuHYrjk#K*DEL_mWQpmcEzc;sfh2|m+#-LS@#nZcL9L1EqAtfJvQIu_%hqm zlp85jw`jBMm{<`#I99i)muGjS6}ZgdlWY5Sv}0V4Vqbl%PyLO;(Ej?$+}zxuy%s-C zMxH%;wlNyl4z0bBs8bPzhZm}hCM@Fa@)QxA$H$jzr)1^f;gLQ3~GS>V=B6Nn>3lS4%zgM+pN7}zL$jPrsaqMBf7%Ijn7xCuF<|aWTG<4-YBUPaXIoPdK1D(XEuFHTDrnA z{2pc#2t$^o88(e(ZHZaQdH(Y`Y&LtD&pGkWsTJRwvb&m>syW+?rASCfbfdQ|!-r8W zY^#p-Ka{0>Lj|YM?qD>`;lZKqM!rqvsg-i++HR7Ytt)D4U$P71=WBYcNpIOW{pyd- zEIL1a3oSLG2}QKXqMjqTf9(uN>ht^=w#QbehebvP=~S($xiVDWxupx8PdB%*dCb1l z%%7e6{{4G^E!ZdO*<|or!a}+A&5MYL2)-jcyE9MdY`G&vm1B_Q6N% zB)Ou3(h@Ry$rAk9yLa!}tV*pcf&?M?&F7Q6pWy;WtL!Y7=Xz?yq*2l%Dm=uCt*6aG z!osa7QuledN7a*pyXH0_tOleHR59{M-OG@yiS)p@#087MPQhbEJtHSzDa6HdNe$C0 z8bG;Hss5;yKW7)M7&1ma_!V$Bsp^WlK`yMMxP1zo%hYNmU)okOIr+zu%aZtMBuE6s zClC@e15;8}Yc>mLRzx;$&J@|a9e#U(j0P+2PZkV6Sum$kp-@IBnh=a9Sun}pzh$L0 ze0i9L*cRr}vr7PGC*2~U#Y`c@X6VesTwM)XUQknIDfpnU;!@xjbd6m8Kv)QfYu3$%)q!H&_<#7-;l!tFcRqMa553wbq<*C?))z) zXnAOtJ^&_+QkOCK!D@n_1?Lh3xgwZfa z`z}c!6#W*s0#GVJ;}R^ImP{rOlWt6Q zCL3~F*;<<7Otflp0af)H928?Mr6WwSb~eoh!*B#(vgUz?0BUEa$;%6aHBxB*sBbSP zI1Hk1!U!i9owBDOmwEtsff@(UIc|aai!u;W@&VY^d_X^HAC>nrf%#&bAj|eyDqZLB-$M~F6;|rtCWofE)`h@UV%lqlW+guWV0zFtEPY& zgQ){423aK9%QsFPp<}$jBXV2R55(_KV=yg^+-z2SnRri!Xh(ju1GH*3NVc2%h$$f3 zO$z0&{q~j*iIx^Yc{5&;9s14(Qp*PVp2)BUc99a4^)AA0P$PQ_yfcV031Y2EB9!G* zmLl7@MV8Ki=R~lH^HxASPy8qHUrWhx81E?2D15)7&*V64#v$9reS6@CkX_x)@Hanl z{5J>*W=!%IJO_Ug5S=U_&tC|LLirCAO%~7{GA~`B{F8w0kUghDc#?ohWJn^&jNnFN zLO>;ZD1Rlji;0#St!OnVSG0vp7Eshi@)K$}P7+YmV#*h~sRD{RO#Z9!;A9K3B=wLg!vxAP zyeKk-W=$RkGt0|ry%mJdI+f$_SxcJCpsGQW>jok@iCH!9kdn7#1GwS=jSke%an0?; zC$Sj1WX>%aO^A>tv8aP4)jcF^3?oa(yQ{X5yu0Eln2!T2j+TIV2ta_ec8o2-3jmr; zC4m4Z=4cqsWcen4g()3qcR1V*_QvMG5LV*trsqH!? zi(EqhJ-I_S!={ReG71d`Cu-)d}RjP^wmY2}8L`Dp4bb?6DPz15o z0ECJsT_fMP!)|yjkhvXS6wW^_@x8D@YmaGxx}xGD=J0cP{p}OZ+H@gq>3?D(@(M!{ zj3@yNj+@T_b~#;ap&0O&uA>8|SWS{EHhXY9D+&wuu$r1b7z%Im$G5IkHpyUUbQFMc z<~{~W*&=69{)nBO-Pr3Km}m5cvue#pfT6e&-7|CM%yRG6e&W@9S~o~;s3n2z{|&s7 zGjWAxp=^5A#+pY!!G2O#ezBi8KVv368F1rW7X7>YrlqXp3+j~@1_WVr0m#)*n0AwCIp zwY4nJ4r_h`K7Gvk;_W-(;j$y6qphN%q5+Xa4c1l&BRZ%$L<|=`rAzB_K$j7Uvpzs| zZZm0;=a=|SN({76Qe0;!eVj-PXh;okqggNc29|_g+M&QFW^`%EWMpvaE0G!Mfikth zM#NlR!KtnQc-^NU{J`8gc%pz{NgW|Se(}#AfHb{?n7pl+Bx#JGvp}GEVI!(s++l;w zPf9N`&zZjxDEwnvvSV%C-BmRg+qGf+Wf<<17HxY#5 zMZqs(C@Vfc7ETBW{ZmK{e;F72h-cd3b8mVB^q70UUsYF9VqxDEbMTI_#h}BU` zCQ4LdZl6|xF>#MeATqoMwo+`h$qT37y$FUco}A&-v3VO})IGsm+}9ttRT;3dl=O4w z&NaYW?Ykf1GSrgfaX503*RdODuN;_aKZ`%{+&KGrai=<3S`2~~x;#b1@KOBxQ3rfJ ztrN$`UfN67u{xRX<2u-}0NqtJCq!(w73PvGi{M5`hyfp;*T04+Oa0VZpK77z=H|vy z+)NnSeZzVRm?!Jh%HqS^w0LFQR=_19Up{@Fl9G}NeYCOU>@EWwPU-u^ z`&b}MYNLT|G?xfr8X?gNY`o)f$=9z(-XjYQ;b{{g({ z2!4PgTQ34ZN_==<|6JFdCZmI?rT)ZeiYN_KoKGYav}t^j|FPD^S&sYbwUyP>L^*{1 zqQX5!acV^F56&Mt>21*{sve0WQPI@I5G zjv&8a!)S~c1>hnwlaOWuL#+s^!w8oU7$)}QHRSyTkh63QiNeWT>n5LK#Oz01Gh(`k zX3a;+b`>)a$^Jca4Ba0e{iGR?3t{J1(WWdI_`lf>ftEPZL5n4Gu7YT05q$w2%Ymv2 z?LU@WiwMr82q%_2IxILR&Q$ZG@->B!%7y*Le@863UO=1>MYZRHX`HZZSH%mq2Yi_G(YKk$5eqPldld2WQ0HPps z=3WTpD_!FNGXvbLk`(+4U7W?L6g(2H^8JJoCHk~ClTZ#m)1~_bb&dBol$7ja5#qB( z#|T>SLjlC(Akk{TLbm&L6;kW53OfNbUiV>Ha{!0DGHcfgK}WZL4Gc)6u?O)jXq_GE z3qWU)o-W(y7>6I{qD7720jvI5QK#K*cniG8_+E~YszM@XMk!z@W@Wu|4)oPy{m^gR z1=QiU2fiW4XT|!$To_wiAOR)j9Sm$(pFVwhY{R=F@awym$G^F1QiQ-~(R86H{vrdK zg8ggcZH^xO7pb!xy4~YB@a1H<8I_15t9suY#jTG|tT;`Cxq))-=?s)E*QO(Ail1>v zm*v7cO;0-r1=A8UxR@JW^1>ic{s z-i8>{qYSgDet>aNhX-~mQFy|q^k}Z6Zj;sy0u-W|D|Da@q6e*$yg?PnG?y7!DVG-sGZy6(@dnTvKKg$iebdB=-v(j+js0} z-PAD3$IF{z=e2NUZr|vmfg>y;1hf?bVMOFPAR*x(BaML#i`izuTXB?g{u&z_>kf^) z$W3;`lS31J`a-!LUO*vg{tDpJP?1hnYj|mAjDagLM6@rE9GRdAfr`vEm}l?RH#P=a zwy?0sg_oaPg7*o%w!>|jp=%Gvs!%vXCk&w-hAtwXwa_vgM~E4$kx}&Lq1zrw8D2jPKo5^#M<_=vv<%@TJlG*nR6hYpk1U3A+@k6o$#%_JNx35F z2ArMf$4|%-bCWbfQfD*j6txaTu)$1?e1l)ftb%;T=v4h=bEPz03`{QaY&m*6fWLq{ zDVV8E;zg~G!*qNuP~ynsq0qv%Kpv<|N+Q4lv>s$(lm>fz@=*(eU${BtxP|o}L{EqZ z5HaHfW{^Rs(t}d0yOYp!I4L#4L2EjMhw ztgj;)c_Rp*FIy(#iU$T*f>KgYI1sd;bbfcXh8IhP?S2nJXBo4zr9}z`47ighS}mpP zys)FDaG`LTqG0_5*oO0)~s2d zyay3uMlfAbiCmyfAB-Xx(@a}DdD?zXe=fEVUQ46u_2Rwdy&U*O_Bc)l{JvcG0b*IB zUxX?A42ksBnSL-x)?FH?B>LNZCXaV5FB+HPm_YRq!*L8(cU$k3xG^|5cpI=lH=Azm z#P9eQ0m#t=2NM0jW=wZzG)rvZm7t(J9px&U>mm)zLFP%{HQn8fdE4ylI!EZGqo=lA z6rrng5_~w?xKzK}OeAq*XyszJ!&+5nZ)$`rQX=;^0L!5~{cmwwX<#*;7F#Dl#g97t z=;QRy1WQr9PE(pwR}a=(OCS+FK4#F5wZ<m9VCh$bwSU6ebI8hde8QoAog7ozJ~RDBMDfFiJ^K1@|^_s_(Y>8Xk7# z>+?%lq%@8Dih{IbYMUD1uv-Ao^l-iy=KIimcg`grIr-@x0K!C9W)#WPgjHPLWWJo> z+{~11BzN-iG{cvh5J1l{UWkybZzzB1?api;R|k9h_}d{N{*s{w4()Hq50-2#o*S1a zwq(g8PCwMDmmnnF=Ub1fpki4y-@8^&ch>}Jy@@s ztGoZu^$P11CA{9+(qn^orp_F&QQpbQwJL@8BG9xFu_`L`Y495Pn&}}CV-;7Hsp%HN z&=g^iNuljC{kfI{Zpg62S`13ZB*9i>9a9&tZv&?g)eH>_li9v~yOO$^OnTFELEAkZ zV&TuhkLME492gck(VjTO5Dc^t7G1&(!DxlH_A5buItcvt67Tf z^!SGG$UWz)Y&HLdmDg*pEIi-!w&}@}C;fDZnwu4ETm4D%jh3OI%ip7G+L{G^`;aiO zau+Xf!%D1;MeMoFUB!a~?S|v)!9PyMd*5bdU@hxqN>$8G&i$b=aiPRwY((*---ff| z&#*(0H8bit2}Wtou_}PA-`CZdGP~FDwJRk8RcG$tAg}4bX+Lz`6@Kc5&l`p|_Yf2p zLst<_W1O0SNgRP!6gBT0#$pmiY~GJs{y86d2#xS_S0>y1(daBY%yO;*VH8U?t%MkY z9qQ9vWpvLC#$)+5)oOq8-{0`%%a@Tz1mL)=UhMX(fW+{zBEdf_Ueshshh@ivr99R4 z@N{%N)jvv?V7cIvyIQRaRslhYogy}$fd+i1pY1&VB0oQWD4;w=cz=VR_iKPqTrwqT zF1C#btPuDD1CXNTFXn%G7TUhm9~kS{IuDVCtSI(|OBv9>d%5XD5_U1;_l zlG_?qFO=W)3AmSSE-r(B&Q5fs7STM!Pn=X04ij zX@wDQio9=NP|zoi*O@aL*!XT4x(olxF|r>@m;>-P>Lnf)>ygW`^-xjf*if@|XylN->3&Zh`_ql2~fK1$PBctQab0^J0TkE=uZLKX^ zt{Z|ZmLQeoZ@%>#5#Rxo$K741p7UtiAr)3Rnv}R|5JnG{+SJKRd=%h+-UsTR4SbfPC{KwuQ|I zwCL&GlEaHh#?AQPIX{rol3glTLhLR+bo$~<{&4{%FF-6sq<~6JjV7FRFx>eOx>{ilf`)~vJFq9jEyfgUiaafK4%kfHe4c^9!8|*!mE7b`$DRd8 z0egXtZ}Qc*x3*pbwQ`qxGgQ7p5yYEa1F@ZAQ#?8Uy9PDmU|+K&F?rUTFjXBU$;P12 z`Fsv4pa6l;9+76|tXE*)#g5k|V7zouadDnbvhA5O&;AAkf<7e?$kMeGa6dr@dX{Q> zq-J0z63U^;{)8S4JQCJ`C8#)UOojOSV5H~UDtU+tz&V;6os?z>9IeG8O`&$&{*u$v zV&1b)j+hIwIEuq=AXPE@lSSgdz3La4`((w zZKFkxnN07o#ht=z8SJ(+)gbJO-|#D-?G>4OJ}m)t9%Eu+x^-}ZFzNuN4P6X~%f79( z*6)WXXk}&97>UyvTG8{7i{OdHP*G9wI^Uca{fi6WxBd7i13lDBI#JYskSv72jLQ9)H7_$+8C6+1fZTRBgGqM4|rJ$ygWG_%BphH z8MxfFPA)|13CCtq1!u<{*0#v8w`dp|a%Bl&H)Cj{S94*d5;xotAYrz$=>7c-&;;UQ zG;K)D*vWx;bR`rON*-bP_Z%u$XZhD}AX1c*81_f(NUQ!ic+qd{4u2@GxhhcgL82r` z$4r3tkW5KE*KjSQc_O}>IXEPIZ)th712wMtnX~Z6A488%+v=aTGCg^C?36!5r68jH zRq_PMjYh}v^|q|`ix312`32&P(}b8r=&eNtO=Dw*h&cM^>?O_dFrdNZz^sLl_8EaV zwg4nFf)eSyocL?kt^xCBV`yk>9H>KVWifU$FYG-!g0q!Z-CtpTi02xx!RS-82|Wt- zB9xrDH80Lciwbr){R20L52I;0@`p7ze|^DKP8j}%7#bby&oC>A-FXRVDD66C-yTL2 zv46RRHQIGW1`g?_`@@XF6Oa1m_@3LIpjl`1ekHCY!6c6hBzYU?-T8$U2!Xch^Uqaf(SO~>mDiXSN$!ZARAMH%xQQ(841V#%6I{g2QJDq_B zr-;}q1!`buCnT#F%5ZA;B{!oV zupTD=DZ_F9cc?y&^H_f5t54a}e^Uj+GjaE`rOWp#aN=l=TIXrY7<#^oTo9}4&qED}T zmDU-g$_jM!ZYv>HL1abkYirz7hm^gq1@epX;crW^S&80P?S56nx&P7N5dH`@e&DLs zRwwOD1nt-b-i0&$LKkacL)I13fjJ2PuR(1W(SLFv-{hI%RuF&qudTGG@Ry@SWet8h z9CcAqTg!UOZHz}au3Q13%HVSg=B1yI+?bq0nyLsR4?Gi zJH>QPV`qT($YW{ICAP=BmvZVF1*TvrKWDDTP}R5aC(xOLsf^2nQ<^D&Eoh|~ut#}v z`Mt-iD&N>kBXQ(Lo{)w~2i!(xK-qI6kS8T^{wgR#b0i6!Ek=7^R%XIVcJ=I7mw2vT zH-+T_>A>t0o}M9VL7bLWbL%;(VT+rO*-31<;ZpHiEenpUU0c(#`J+g~c1A5ui(HU% zh(VbRbxq-u>5L4@IdNpD)x6t|y;4-f_E`Oy;`(RBwmYWdBphx8)_-7PeEibw5NjyK z6IP8GjV^w1$(x;5mnR870fStSNEWBj4%FNRLt}FJBiU|Bay4(W6xb@=ri}-tklzzy z{X3fZLt~xW{Q{9E-`Sg5WdGxX>9J|qv1`>OYm#S^U)!QpfZ2-qaOb*3bXI>P`j!oB z`X7By))^0}Og1)F5R6Dy2k>%p=tr_Y;Yws}MHYF!Dxgk?(|1@8cGTjnwsm(%&ce%j0!jQos41l4sQx>~{mK6ftu^l?kZou-sPaW!Y2S;j5%Nw`jJWS3h zcaW(ARCNEq;b#@+Hhl*$A;epQ?;9k*=z({c{*ZC1pnRC8_{#g-LJY~iT-YQoU1f-F z2~Q)F-m&pQ;0pWc)~j(8)V1pyWHT#?tU;b@C`qb!J3^7xAB7HHpJk729)gerpOSne zacQ17-Fb2P?`HTK8oPe$MP}L0~7)yT-`G4r2|gQHGp zesiKsX1qgz$)GZ=&PY~>)3oj>SlmE%w6}>2XUu2lAfpL0BH7t-mhZM*I0o<_!}~@r zq~z?-1zU1N{@Rv8ly=yIJsW5`l;HFu4&6jJLLg#RNgHzi)IV0NWywjYgUya@D5~F{ z6AwS&D+nm_b64p6^)ME*)$d1hr*Omq+ikpYJ~-e-NjT|={kOM0+)`$bMV5Wckr2d_*ZEX0+~RsWf{&-!%F?o74kjboR20Q7v4_RIO`L6{U*nD zji|8gnYiMyV+r6sLq{3qSmxNfOClSTmZwwT^GP*Y-dz7)HJt23AJt00WiV7R7u4># z|7>@)`_9`uyeTi{EBR(Fh&qGL16= zQp49cczJ0Ohto?cF;gCD_GWo@>qMSGPTrBnY?o&D<^2aT#)kp+?wW>vj=U^8CrDO9 zK~pngY;PqR8i$XT8bX*wxT}7Wz(X#?NJCaAbB(UJ_p(Udk__AqVQszMw^rC?QQ^pD zE%iVv4gJrVg|OAyo;tp=X*(D=u-*H1+xfJY_7(tJuvMUAC4)kiuIsa&>XV#}$QC$? ztj-n(2`x#K_ZwFC4-8mlzp4!*@Qn2=NHz{f)~eblf)&LJXSLqQK6%p-yhF%jFr76h z+;CuuD(0=qKY+`{LQ!2EQ&Ln!WXxKZyzyjaQQtW&=Ay4gl%sbynB z-rJ-Q!hzD(>g*e7IFRf1BX88wbt(2j7i- zO&Cq^G<@VICDfYNJk2O`>EZMk6^+29tLlvO*z0NHzXPtr@fXc~GXxagziY#tt&KH9 zFY^>=UtVHSGh53bVLXd<6@npVF86P~(HQdWpqaj9!}Dg>fsHe-&^$8C#|8W)1PORk z_t59?cw>!gyu1b4y)_9X59{8T&iwMnrEx6F&_D^~d_#Tz?z;{x_Uq+j6uJXv@!Vh? zqP^JPHvUrFwtSQGIqSmpk)vt!x+V%GuU)D$)AyKUhCqt!)P33$+uK(K-(+%L*=4u$ zi#Ns5XzHQmWxaPDdiJ4vheiio*m3exkKU9uF%{!9&zf!U)Jv1XLksS@b?C$Q)T+w_ zjtsui1?ik6?ZRm<`rf}2(s@^_up=>b0mDjfVyjNr&Hi;Y+30)WVP9l%6*jx~f`fv>m||i{NQnh zV`zP3l{`l(+2rccsa^5HUVX91&F~>@54*4=gV^}=^rcUXp8s8xm9^PgDRh`V({qdb%=k7NJ)H}+vkZp|8duov2nz}Mw9C@Z;MxWxdWx&8#(oR z_{7$~SRmXL>1?~!YQ+&LP#F?(qssA=>LU;|7mI5ir@6;YsQ3*sM=$^A8;$^m(>a>nZXO?7`{g!n41wJ!(O&9K=n-9z0amW8BmM_i+Ukh2w#FKfOjVPcH*fx( za70;Q!-gBosU>Q;kh<|CB-eyOG+jNzMbgGtB?8&JM{~EOEG(iJS|q2T5q_C3EgS|@ zSQ{9hC!CHUk02hr(th)AirUMx(OMbZT_gXo%DSH>Ckw4!z54IFM^Y5%^hoB+5<}8* z_mS4UT7RX1du1nlpe{Um6x=i4iZS-*#B*67%BC$EGhz+#C6fHVP0L=N=r*#`HOU#a zn*Q;`vwaT_{(bF8%7IwjL>Ks_mkH;(jG|aP61rcS)s@xLvY(c|@KEAenzuK)G+$db zdS&){1!ZO7s`l`x0+jxWB)D{L`m@GiR5WlEmDAiP_b4>`&`3)iAhrkB3CYh9?an-$WMO-<)kL z36`O_WH^8}Mv4LwdqB#41~rxk01ZtNj02x zh;g127bJFJm$kMGm#Da{0Y?rgD&3KVydkDBS~te$#Irk>VWUI6-OCu8_Dv{N0x7lc z!@HtyB_7=c$Qx@SNA_2E#@}G7n>1|ChLJ^N3r$T;o6~CFna)sgB|V@yGTXSej-)NE zJ(WknIXWUX-pLJYd}I>m2Q9RtM=RP7O5KRh$cSLhmQx`q^#bw{lgXK2vNC4wCK=Ie zlnQyelX{%{x1wNM+OF0zNT)2a7`HBkyE zZkv=Z%DNX7%j8AL2`+I~>#lLU_x=rBYec&CtNGR2bHT|WY5s2*Q+bmo0*;6|y7KU|ClUOC!G3?AI}%c z-W3;1N`T+MBy?4~Gg~UNYt4k+uRxGy;Dk%`GJ{*is~fYPIt~`Tk9Tz3=1KcPrYjNlxk8?wr#ouy%iS#I&Qn;TPJmC0)1*yHMT8OV%br^KaxRjUVevUbt&| zpYh05D3D*X$H%u;TYYe8vF5bPmq?PGibDD0yupqOu{?Rf=Z;kRcjgSfKAcuN4;tDa z)IuPreYK;5nRDfqkjyW$9b(GskQ7)}?!H)hcX6dz1b5oBy)RaLWi`5N=Kqla= znK4c766sO~y0qiD%jUDq4(z!!xwWeOqCe;U9@k5ve8NIP5DG&=!o!P{WT#$!MB4Q} zv}?mOwe}K-fr{E({qAOWoL|Z)#c$ayBN3ivj!A zO8F^)r5YYSjD-j2TH4szHLsg`nQVh{XiZUYoiRO~-@qIMbTm6z!-J43V=8Sd<&Q|g zYLGCVK3HHDwg|8`4$3oWsNSf(I60YphA8H0yOD4j^-*3qTauKtkbg(JkzvKV#v%iD z&(H}-vzC^tQNV>G9wk4V08zar`8Y2Pe7sAMKhAV+-~m5SX^6jFPRi`NKZP&{Qofyq zBBuHuU}}oR%XWh-t*QCAgSoF@#Qg@Gaz?;A)oVBvw3r{CE{|OnA9Za!Lv~*To6Ze4(-Wp3zsI&yGgz zob86{u}dYg5U#kh&TC_U=$yNRHe?j!PfY)kIB{WAG1B_3pRyNguX^IrVw68oHo0OI zIb|m)`Dr2;7&(BT^w?WR3~GgQPJI7p_jO%RigVgB7&|~VdRSk7cDS~rw;<#Cgq405 zK#Dm2lOl#f4Pu2Jm7PGw*-)J4LUVmVx?~z$vTsq!Vp{^l)I1eQk?o;#I-iy1D~aBR zBrl*W^LlRp%_({!#SVmkAl95Po(w5&xWlO@NlE002Ob{G!je0!R%#;1d7>bv`4pm> zBD|d)WduM6i=4%6zO74ybWB7lgkA$^*Gb886p>e32?ty(d@~#{iKT;tw}3>Jhyb?D zd)sLPPe^-w1+~Ee`sjJ2vz_X3>BCvVm~A#k7{)QL&$u#K53WiR9$R8@mT#f=P!IFl zIvOo|ZG`UUClNcrP@|z}z_d|no08quW`pdMhldAGAzd;g<@=!sncaG8GXzGkG|L82 zej%yhn61wYWDmxa9fd@j6B*P=BZJBk32=E4I|N+}g|A2gu80w`rS45Xlt*Q$hM9C^Wla5{(cr*OG3&K*FZY2 z^?u=ps|^kxo+BV2kY5sC9TE{SugFrtdjVsN1Vf6kb&vldU4>YmJ*yTl=K$EL|9%PD zXdFo^$bTDuydSl*oIvstoV5{$uQcC;3sP`|N9)@$k=xqPw99K9a628D=msnf=9Lz+ z(vUY;S%ImAghWR2QPaUCF5mho zLk+o5lyJA~#J9MqC3Yl(`A?j4T4M21%~NREFlvhO`?T&`T+g)$=TMNBUw~(El{KV$ z_=pJI{|k>ZzB<3qN|S`NwDjS9x937_fxxeg5`-$1ofCKHT7)c!ANh&<*neDH3BKZs zD&bqhZw3aOg)o0f1YE$Jow=MOFiC)0nXVPjpNILNYPKzDZDi5Z9h$#K9DZ_83d1|i z5sj5rG%~>Rn1`g5;c76jPXwNw zXsz!7ld{yV{js_{WhXYE>Y%&1QH{p?Wa6TsMQE{Pq?)sIjxLHG;3s~0p?^Ks34r`9 zER0!0NXVR6U1^Aon+{E&<{3yZr+$u&kAI~S5vK`(UadZPb*LeCuveJI*i`ngZZ-f| zz=M^QPa@tV%k~`pg+4@PPF&taN8sbfN$*1F#LPVOE3CgLSD-*10pVkoP}YEx9hoTL zGAn>F$+WI|{(LFI=>W5|0k+4dmA*5*zvgGP_>zh@3&dXBvjSQ}Xu*BtGxuJLDEAz0 zcUCJbD*6p&I+&ORGb0%!?AR&H81Rc;q) ztDG%t*xzh z|9l9@0j2UMpIRYlkzwQZ2#8$1bsgGj;7WU6`y6Wq$auJBrvac{M@L75cHva1mE9D% z5z;n~qiuS1r}s4RnC^j;gV>0d>_3H6{??5t+x*O6?{+}eHBUt9rkHt5;6Ay(tJH$B zA4ZO?;Km@4hU4GbTl^8q0R{xszw0B*e>i1*`0yu@O7JKqx0bZ{MtKY?|NW}I6pdt_ zuZQA`Oh{pL-JeSWx8Dv6+XEZHiZ?^U0@LYcHKfh_iGpB_SY4XH1bJ82*cP{#{ckNP7SZa}V5T`h36EVwd z6~IkB<}T5Xn+Q5kd~plyj6y$r8s>wo{a9Dyf6EBkeUq8=5Q! zDQTfY$LXYKm1?GKLOW7vFYWujOf|pPb8xrW!RVe{Dynv;IF zT4mV%GTA=!C9{}J?P+C<;aQDbPj)jPTvZo?0PZ|o9XEy$uHQ6t)nB?dzrW7`s#={V zmUCfW^->e|M0wxjU@>LwYTAjaglyA~9m;j*+067R{2n?D-u)q#%xVWx--lg}s z2l_rXkeAyJn)bux$2&u;$?`WYgwv;oV=0Zj=`ey8P*}v3kgGXQsXkM*I|~X|ZsDQp z2$!AnD%a%AwIE2Lh!fsp1%XCGfO75FUMg`+|^7QYa1KS#&n_@^F+~4 zioWvGHLYQ8TiHnFL?F<%p?$`}@uypOIKF#XHT2@FqnkJxB**L-wVVa&`*29XLwb&J zirt!OIz^K;n67=jKj4<h6C!E2WO@=uI2cndYcqi2IRya!2l|T^9U3iV@&a z2lZY4JQu%Qz;S~Z0W7Y*lKYgq;gjoN@N=CQ3B^H?ie(N4jk(tfp|6>G9SOUy4A+;ow z972|JK!0TMdL~;YxUo3rz)LCn$j1GeOO&@@d=beQd8!mZ5==WM^`WldB?Jz5NN9x% zsUI81LRr7d7CSQ7@9Q*Srw$eGRiIA}w4z9(PNu zSqx7MQBHmJU?aLgTZTOq>)yP1JY1tD%A8qPSU8FLFyOl6_dSV@S;|Fe_eD8aScRsV z@`G$}bLa>EZlodQ=#*n$lj6a0|``|lRSh?5!-uOvQBQsmcGDvgfdPlbr zOzcK&Smu=zo8I^4tld}wpbd=aYyD)J$O)AF9W$p%xuohuEkVdRO3iu67-2*orSu=} zr|-S4kUsPwk7B}s(iyGjE9z$;i@`kzMn_mZ*QKSVK7^k&g_VR377E82E8{ISr&)E= zBguoB9;v1`7Q;2*Au*}jnM8A%BKME@{0UuUE5+g%{+HU7z!U~v<}0sL|2%z@3__x%?rpnUAMHgIB(!peJ|zp z>tOcX%uB6Bp}La__ju1kPY&v7b;^%!(44lV|2o%CHzYh`LT}&*`kO9~?a!u9qzq26 z_dx0j+}D_1$F>4XOACwjX%ig?Q7lNCp6IOf&G}>rFR{G(`c&!0jng_$_M)9uoK{xR zm|ztzUcXT3*b~7gc0tJjFI-Sx;8xz6g>E?yf=sc%5Ex6By0AN!Ru;Q&1j6JxCz;KEudszIxEx-RXh zqucV=6yD@n&g5`*OkbJIRzOAM3MDfJwa07+lmE0`0e^YU_9I*|4HkxhWY791**mJ; zSi@f}gNk+3%f@5b6S3$`bCeqmpBIyu#BI_`SdquD!V=rpSkK{T-O0m~CQoc2*l3QA zS-!t`3S)A~eKi-ly|IJmF!tAVt;VeLvXnUlXFWL8Jh-(-cWNUBB(?l*Q`XZQ}yJX-{QJ` z8BZ4HZoYpI0aLI~e`D!0sRGMBbgzk=PH13!k>>YX}gb~b3Btu#_z>G0Iy^JWoaF2LlX|Gab|_YnSG z?(s1orHo{wjA#r<$;VvEg=dj(bMk{l$r8_YXWFztziENVul}}qTdqG34;X~4+{seI zzE)HLmSu=r9xUJz4X@o=tWXI~KdcP(*(n19I2LHY{RSX-fhZ?#MWN}fT+RZY{=Wu{ zpBX9|PY$)WVv8Nc`PR+oTTMho%nzXSOGi}7y#B!GcaK=ZNq&9I*al0sivnyNVgj~e zOn~~-;T?+WXq<%Itb~}YO&~hrIi)&+8;8n)uo5f~Fvi+pbJ(eyQ3%k12Ey>Bc1r?r z4*tO|1RqYc_NS}iyiEVj_mveDB8UQp${zp#plZQhi3G$XdlTq#-9C&Fz1wbmWzSOB? zKs_;b2F2cxIXCZpytqC4)2EZj0079(djJ05G{QFoJ_mR;b!wUJ<~m^blsLOWlln=) z*PBDI6anb~`41xnuZZfOkE~cXT{G&rq_zg|^jQQ*yJORU^2I_<^(A%IVHceJ0=`Fm zN|ey_7yhntu7Ruj(>1MIfqMPv8y3~4sR1$E!Aje=Z{N+WtP%|tz^nqGm8ks!B~mM( z*oXi4qJ{@WyQ=nzg zVFVP^6hbuQX7JB;6aqI;$;rKXl!q{K)Rf2|q`U06)3GjzpVGWYsCJ=OSUWUYkb6z4PK$s$Er2!0eJpUfz zxS+ZMge`eV^5z$@D6u8z;>JZn5`_|}?cKUT}J$~!w9-|%#=3&1lJR- zQHx3AN}ssuo^uMQi4)jBUU&m_j6ZP00zX>_es;whzx-GqApQ}_{QDzSX#^aPM|bT5 zhzL}!XvF}rv#^~dC@CT#nL?cM44&Yn6Ttmv(wr3ql@)}N&G;%~LIpSAp_zrg7`(T@ zAK-*y6AJ}_Py?r)yFU+bTuA#9Pia*sHYq$pphbPhi53`thtnsF?7*Pvq9wF9!gcr23&C2nUj?xg$61%lEQ z6&>7|LuTX95^WJ!l7m8+UIx44Inq4PmCTQS%itlxE1Y%WH7=F zP(t1&0kdwXU)&n|N*}i*5W+l2pF!9D4xtwAcZtW5?Yx>nr~+5Uk!7j-CnhFx5F!B4s;zzoESBme;4!@6 zB=(*CwycEErv8mrdyNS!2woBRvLcOE{UD?p9RDd7=6=&&w)h1=Ob4F=3-~4!)Gz5m z1ko^or9r{4Sh9GtEmv`XsS5_X@PK~~+CTxU6O@tcK_bWBXN0lGC+K(R1@Vw^&J-dM zNPpvp-WMr}KFn~SrBYl+2KSBmb$27D%gy*W*_R5OGj~0{76?$PJJyC@E5Das9Iv3gHD>Z(H4Wa#m z;Ogsm zkZBVlsp7>8zoJOo5ODn-NSxg%EwYMnJz;lpapm>~^abBL7T@7=eZ}S5zUC%Pj(o+K>5e z4+elO@W)7m5A!cvxWFanoO^bJdCVnfv9s%visL9S{902p*?{3Ue+j_|HM9XhvK^*pbNW0ofg@bAq0F7;xJXJi0 zz{H9n>_F}chqy@8$Aw#1rg*sbd;W_kiMt}i?~~6Y)_Lp{&;|9?2T+Pkp6Ulacz~S; zaAH+eRcJR=@L-Io7n<5;R0Xb4e02rad8y!MuMMdenl{?}Oyd^;P0#kZZVo#g78G=V z1NZNh??*#v1wN>P6qD&m+WX3VakCIpgn& zn%^zOO%ZV6R4iTCs6DbDw-A*1aH0o+g_lreXwnQgT!Y}sr}uO`ya{dGn}6M_ zbrJ>ix5$S(LPZwO&-XEtcqKE_QK?wrE}VULHHZ*C&nD6Vze!=IoTTpH|J(lc%`Pm)+E8!c;QEYcnBAH?P7m7Xj#zz zvrVM8{B6P{4CD%dEJDX!E+cOmbtZ6YdQf9?0tsO*ULBD1(DsG^nSL=IH8gCq&o--0 zcsmU+=wpKzq}P(0c6S#hkWUFL4>S}rNbTS00O;~dDYXOdh!mPBrY|vR5<%3De`?9{ z=%h=0PZWgJTb|GHL>O(2we=QAmdGjivt(m`WHHVb5ZDe zF2mKYLg?y>C5khH0B8#g2GScvp9b6=)8x?>)`O@v4o9p2+nM}r5u6Qy&0v!j*a)o|Qlg#Mk63+KID*7>UW48P<$(f9fPIB1UK+ zWc5Jzk55A|v!_L0KF~dQl_= znfD$D?UdlDPq<_fB5I`}fzb4fpXm?}f}5OMD401&^>3Mo#8t#8Mv56i1kwwEml|v` zv029v=2EBnoZ|zn1)^0Y1vG)6CI@pubK1B9B!)A-puPu1=bzvxT^OFA4E#@r%>607 z?{11So`Co=0U2?IJGfnc7eKEtaupM`)_q5nM8IW~qDWrkMRtk`-G^-q%0Ie5Bw%um zZf$F8$w{}M;;aM=oiL5#PozHNL9PmRo`F(pDn27)6&G{bYMd4n3N?s;BAI#xwzNJ1 zs&43cL%b&_P#_VWv=}i2xC!Le7~F&@k_fl)v{w{arEvF*)-+7h_(AL&Q$aJ00Y9l9 z#9fCF=r$Nyt^&GpB;6ZXHHFaG|JX|3I({5tFu*wNZhs>Nl0k}$r!pPGu7dI-Bcnoi zr~sVE*o8iN^n10|M={7C7heU#fmG;H}5e+GB%M`y8BiQqrT%bAXAj&U* z^3oABEYtz~Kwg3Lr+#$~mBeiajCjdm_}Kr(#`c*A!K^$c*8ZOP6C zE?k?zfZ%78|HzQ2mU!kVy%Bb0YQ(DBK%nex$dqC~q93HA#x8C@1YcD`wZt8*G!cDx z2+7PLheSfk{?M^iQy+1}94vOb7M-Oj#Hqq8wk=3@DvTFi|U1FyC}vuxwitJ}L-` z_Ym1c7{Oa(N|eE`OqjN|{2{RzHD_^}*xF-(O5oytm--uXk7DvLLWM5>Rd<%;>T4-l*9n#%S-(@g32j>C{ucu-*o zI2Kh4PHmszV?#wxWLCNkvv}BtomS!hW>u{yPB12sg zA$kx_&^m9@TFbCnKGY3*n=ubH*a+J_bkMxTK~@90y@LCj^*OpqfIIPeS{LeRqD^+f zRNwDNN{K*scA<(0v^ofSvVZ@@j=((pHx`3Rnz$-EW2*1hCFVJ-*sytkFTbN0F5Jzx z4dTyCApfYPcw)2;j@#VwjnG1KQj1E@x2t(g)I321wGx^oyC{N-|FgKs^wYMn(P;q7k#;nr-u(8_6BJm)C2_PuYA8i zgUJlLb|}8}H#JV0>dUgP5?k&%LzO^a;y5c!5spHuzoId1!0eHvY&x;?>Dmm_l~rQb z(z*#>hn?9um}71;|X|(fbQsQxRVL=j0B=3-vmj% zv#&E!UQOM$N1g`S9FV60RTm6#+l&9BbLbz%O)b*+$>tXt-?K2c_`@JATz_E>{Y|vB zRbmbAa4N3l{r%0{7|fvaEtjeY=RrI3Z(GfaVQLc4Ub?%p!=*~B{W{1mpFMj9{8uv4 z&2zoFK=wx#6_xP)DKd!t^D3vN#>iT$+?1Ft~x7^W)+x zTFQ=9Vvy0&cXZwQ4`WS@;^VkfamX>}UhnpcV}C0XfJ70hN+_koAOy#S}TjBpRnh-5(%(j{3XW*R4O`jDbzFDcCS4v3 z00i& zBp^hH{h6^*Ac$}mPoN3P4i=9V`Lfb;Op`(<8fXB1%`Uuh3{}?u(UUOja7z+OfH@F{ z-M4S! zZ&VSiHD|ZcVWX@U8WNlo81(a1iurPC z5m5q^3y>2dp?!Q@-0e`1I#KQM{Bmc~P_2>H+VIU)o@3J?m5z**^(345hke|$Rl)MI zJ3hx4{?{os;RfYOHcb?tZkOz}Fg4u-g_FqQ{dZxxykcu?{J1kQ8W9-Uy1i=gcV~iy^@dXOT?v!FnNZGIEWS(QKVOZS|H|4aTaW{Z~ zpTBzJ3vlh`RBYwx7VH=*nks1DRyhUxMic|m*%T^n6v4PW0#Nw;_hZ)Xw+yCFHCDZ& z#+Az+PzSI00}ZB&ESuR#4wnYuWTkm~O+ZYS{Gg^fJxEk|6s9RonX}dqP;Vx#&~y_f z5b)M@vb?)P;JBXxyDB5h!t+B8;rQ(eH+b0X4|r|_C^txM31ja3LrwdaNYF869U6oA z41eAs(_4^=A`f@k$q=Xs)=72Xa2Ij=C!@uO7bKrO$y}FHcxw-@|Vfipjty^bR<-sF!|xS&)L-#vDepp z^_Q#@JJefKNMBh)Z147y6SJUy1T5PJV0-ypv&od4Ya}L;))WAKfocSSMt5=>T8*6X zva`|^#p5IXwtkf07@rWCgaO;U*5!WPexsh#F?4IqGjAkT*?u0Vlcr83ap(WwP0)m0 zF8p^C^%CU~3VkP#Jm}f|+h4CrtuXQ(XfxBR6!3ZbZ#E_PNP|QbYsaN_N^wg?$ z5sQ^5P(!Q}%JeLR-jZd;8Gq!TZutSsg*Y3s5or1Xa15Hhh*+x(&O=g#mK7`IjrB&r zpCSX1@db)Er7hurkp7+l=W+ZQ!IhuKP&523Z#SK8ahBMzOl0IjV{2Zoc=6s_o6#dB z1k^a3B9}09kRRSzJ@6d+B@J5P7B{7qH=SdqJhp#?-ZTz3He+K@uMz~>;;A0?gI;=L z4=N4DVBpA~_GJ17?b~uivA*vvP?m?p7ogv~>GS8$uP)^yT@{y&AduPo;-+LBWjub2;5b$YHyMB^^uZ5#3*TnEF0cI$nP(Xcp@aMhG94H#v`RukA`6X6S=&{X!%*}Dk6c3GpLBO7JlmY$TmpZJ zEQiBF`r}k3Y*`BGQ$llsl9uU#>{UHQ2Bvj{&bbXsl*vyTRxiV6Ta54uJs?`;KH?S3!s&^0eZdO?TQOuQmmEN3#%fX z#&a!H#SgVE(k-r+r7V$W!j$pW;|I+NAdFoBMr3#DREe$)lVT< zLB4OjChd>rgG%$%-*S0&b`rd&7QYB2+RNA^#>W@Hu|!K6%SJ1p!!lpnqN*n^8<;5>X$g|T&qq_S(mQNEiMzVUb zgCAz0F&wYy4Vn<&3HibO2==mLmz}`I_f1IMgQ!l8!oZn1_P}?d3=-1jCG;i$_N@|q zS@a4xwz!aQ$;iH)gSRg5j3LK*K*|(FhlG>`_@Zwctz6-BK9fQTb!L^Fg>dkJDd)A=Z1=X;T!Z z)!M*QU8O0WrL8rW-mwV@I+6AZnx2A0g;>8}-w7NelorsdF%NX+zs`jp3p8q_Q$TBE zlhZ9aj4>uv^Uu}XGwNQ_#cT57-#*_JXEIm{Zf%3>Cv1=sec+7JqUvI_sIM9&GC_HX ziehWY!~5VH!Ey_dwlli}?ERrBh2)BVVL|$5oun&$pNgmL>Mettw3*=3fsO$CPUR5-sHIm74i1u~U2zxx3d&xzwncnmKH4GM?{s@0Xh?IrIWop6%%!)FaUWWo4a$!I* z(!QQJ;`YhuQF^#~`I$#4 z>-(ptSmWrHO@e5+lXB84u))4bGn7I=lCs0bQo0QG5lwzV6eyZAK@)b{i3V$+eXUt3 z6-f|*RKgpOMN6qUAhE`JKVU;q6$X`0Rec384|UKx7lC=bvvtcNbBHU!NYH;9zA+tx%(~RDX;-8hjX!>Mp0^`xuTCzk-q^~<>utw0^C#~R=P*_5 z1_8=z$~4xct&-VF52UCPn*N63UD1R#fw}@Gq!O;bJWJaENj(}wKv@DOkJDYs`|?e- ztdEXk{R+z9tu9qFouNQ@o3st-P3vria!I7HBRW1_>0v~5=B1K;`JV|*>%$apw$dI1 z24(@?{AXreL?KMJ8!>7cZ-WU;a7d=B-~~9C$E)7GX!bkgA(p|d5E~%!a`VpdHu=F1 zZcbpkh)`&NsVdk2A@z#<-yf+j1-S3k-4X)r7SIEbf@DFSfH9#Q2O$cP$Q15vVxglT zjJe24rzd;i|B!>+Q_6~pl)_c$4{1WI9jIJ!3>y6cwsGYa2tGdMH7y|#u~OvB6* zQ4Blg`U?ml%nlSnV2EePye4MWNqD8}A(BmVnP@mC7_W9I1Z9|=CI;>p!{jCxe1Xmu z7$YNvICSb_cnu=Qj$RPgXAFHfR7tt3z`Sl>>(Ux}6d(&a8ggBt3GQEWsxe&%4#KGB znDxj`3BA0*A+u^7V)9a^wa;_sxbh{*3d}7udns8$q@1?9VvGMV6B_F{@)xxA=07iQ zdIzZ_djou1HWnQ#opLw!|2jC;OVI>C=_}SvUSik}r$R6rM$Tg3zM;8O;OjP|U_tY{ z?BdGNxJ?+aD~0HxC?V3k#^p`UMJikOq@Vyl2B)y~NfQ<-KKMH8Km;N$<-B80NZsT) zrQMThk_6DE=UO+8J_-rR&v3$A1}8jMI@xB7x8$`xZ2Ix4^Q&?2#+OIf z9t~MOeW>?zo2l94psC$xPfZuy=XYK!a8PFObBfXYD9;JKu>tl(2v#Q4h)n&HF54u_WCNStpnJhqj_wc5#|=T6)BU#^x|8dQu4b4_4?Jjq zfe%=)2Y9Q&ggtB$-yP5|eW}A~8>gW=s4-{SinBh#TW$7Dmc@E5gF6C8u9Fm*{$4#r zp=#k{CL2+&HP!?^MDa{cTj4p;Vc76mk|H%7%Z|MOS(?e93_H2bn_W!FST)T`bo#UI z@}rh?Wy`Ga4b$aEHHRq&nPAuS$*;~Sih~CS-k@IWNte!;A<(UVnGw}GO-eX`3J>}OKsj;$4vwK*oQeO)1~Z}+tB+y@&=dEMzdf?iK( z)-F((GW*GWc!+%f-2X$OmM5z#q#>{DXboBN3DLDRR&&y< zB50EBlb9SEMZX1WcqNqBpBtp0?V;Fn2;~Wifwa=IG`S{;yidIr+=Z~%e@_IyxNfo~ z?^t6peX4s>S6IJ#z?nVmfv=V6be@`wcRc;neD)~F!cZc`PNq!CG_a@Q%lhglhVw%T z-QM-8+FY`=Uh{LbT(+O)m?m@f=+e+s>S=8DeZ9DsRP`SXNAsG zmsmq@#wd2m#=p#`&)1x8)^_gItr|}@hdD>iaYugy$8`j49SkYP=GK6!h9U%Gmm*6= z5K3ZWvlVNPLP=lm4oIy$ddH?Qn@nl(7ZlL~-t$Y0iWE!wmagg#LDhNW*5opi^VGn9xL_VB-1QxaJDa!25 zM!?JnlW~=Uw5Uhu(WOhg=)~zIk}&1{Gh&_CQi`ww*= zY2CF^jSNqn$%XxU6XFYgSDZ()C##1(x&hG#4ebr}o?Bm^yN%iZs2?f`)cl7M$o?}! zfNDExsLs6yA&G5`UIi07oUKEXOVG4{AF=5o?ir{bT3XGqt7)}jn2qO9+p%dhWrJ!u z1Zi>hEy`I%S_EMhSp*DX3^pgL) z0!3En#q&YXYb2yz0DeM#E`yMOUNLaYWULAuDTJW{gV*2o!MK)vBbK@2$VY{_^}N2t zHhx5u`+UA=2!1ys?)v`>{QD0Av0F_UK8Z#ULpJ6<6-{0jXj z2;Ra53qzdz2rUwH^&Q6QR4L1tRDHE16AK1ia1LPHmToC*y&!D4SV*5FmC zf8xZ61}u8*lGmxeNmTxcc^3e6SRsGQV2U7w1^K6oYlDzw@S8=-OPNP}?9EL#t?Fvd zDfG7&GOx}N*+oHz)_)w$MM4e7=n!b`xmNlW>J&817G-S&Uo5HrAlYAc^jg$I6VLJH zJ`|||?AUsi?Yl?4DGd$lKnEYxjNh$4X>z>mcZN|(K+E^IGF%0m181?$$>hu#QAm8= z)q_Qc`QOYut1h!r=sgUpWp9UXr(NY0O!eCUl}Wimf;1@0srJC!t5XkC?({crPJU#u z6*Y9tObrkOs4E;%-uP1!0@q=xHa}9oYXj&y4xqsm3)mKrQd5udr=gxT8XA<<{Kz8NILl*vXY?h*HcdStwM^58G zSPUY9+;)8BL2jqp#&$LaTct`CugkmiuK(g6n;@d+Y%Af^db?~vjg4kTTQ8$k%{hU) zoyrkrN-ny{idU_YX)x6LtdxkZpf?9oz)l5XO#y2~W9E^l0u7S|2O9 zIY-qEM2dHC&XK+k4Y}~xN^n~ultCQGjj%=C-;jak995coSMd>TmIaJGr%1uO;P5r+ zYGCafDdV&;&oLNxeitEyu;mT;?7&b98w6mlv_M+U?aP<}DD8Z(L|K8kfM&l$me8Dg zg4zF9KcEmP&i!UsF(Mb))ZPY(S_w2+)*)Z{p2w+E#i9PD1N<*!kE$q$d%p1n#r2>E zs|?Iai9sczYvV|6ijTch-rPe}8(`BR9ex#Xm5WBG^uK{Qd_Hi)j0FNC2t&Jh0IBHn zDjAJ}A|(ohHz@4Gm(cg9L;1PHZ4}80J)2*jRjKGiqpy(^i{twH)&Y`KwSkyCkJ)|o zIatCoz!ITCg9@~|5#c5*KA`0L_KlPw`pq`xG;p_$+Q4=kq5XjLN<2HOMm%qJb2%LU z)la!Krs1Oh)|iOL?Y5Tk2mjT^XQPQ^#WDW|6Hx-)!E6n}Ld`^$d%Y!U4|JIkQ;@6? zozeQ2&=lk-v4UEBW0r~NxLJv0cE(9gT}eF5v{RaUPw_8UZK@Yvsw1=^Y}d`G+rka< zgUKfDYHH%$@|SEKI+U{j`?rX?i-JBnlaBLL!yruE1*3KT;0(Ein*F02D7k*u=B%n3 zcKc@3U+`r2@Dw7vx@bwUQusur421Sk1GVwwrqj?8jY1GM%TB$b6Ln9Z zyylJA#e~_{{tGj}#xi@)z*g5GzdrXgZ(F6Q&VepH-Dk7`{A33{K2>-a{Sog ztKi-mfKvW(K*<49fL8kEx|_z=s(x(x_Eaj`n9nBe=N6IB;N%B#2qe9Pa;p&38K=Oh zLexernpj9DJM-uYh6Yr}$TI*Cbcwba7yu|DA6e82qi*bO{jm9HWC||@qjc;?ZM_s# z#@IE^Mk~Xm4Jb)B+qm589Z`o#Rq{m$0_i-@8AarQL!eCLx>cV3dJ<7SsCI#wLhN%x zA3#J0x|;DgG&Q)N9E(jK1HB)B6wE#97Sg&aii?WQ$=y7`!I)O+?vDk9FRyAOec?T# zemRCtHmrVx2nZ95D)CsF%^-?A%K~UZbQLlNj{7GX0X>R%co1Otpm}6obgf5YMokhq z2tBZF9fCb3^7W~4!ip3A{dEZUg?j!MK0^6!`r0uv$n&}!{(wk2oO7b2f8EcFjTaz& zfwqn+{s!Z?5yxsLkMItU!%tyatGqGd;v=M4|1;-Q}hX-Lsz22_Ngx#uw65Aq_? z`ES5P5O84*8AwmQLmuJ49)xhdTqC>*@~x^}2u~3a1lkbrT+6z<+Kdk49J65PxesU! zz&k(q2-hPZ0VW;4uet(d%J*OZZowY`kU}%(h5! zM5!L&&UeeF8|5#_pr*2Lthn8ba25Y zn!@=l0${iZz(T9!Ic)S2*Z?}@O=+R<&BL9PmDd1<_MQYZ>XAiHB%(85(2gk=;wpw- z7sUL)>WGGOkfB#GR}t5Py@*>8WUY``Ttvt*A&$;FoW%Lbn(jdWJt6Ydo~$Y7>E|4{ z!&7b|3Z_S6Qe)U{RNtVX_v*F(His`HN%J?HWFtY7nu`oTz=|t3Ab$~oKjL(+&BX;d zh(l2fv$$EcJk+8m7NK(_?W-6N6Pbqw6YB~S-4XN$GG77c4^0qp#oI{sbH~=@W)3x-5dY$jVKQUs776Btx44J40iD4d(l4mX7=h9oxHBwqz~=;z9C+Ab)(kfHqFNKc`P1EPQ8mJb*flXQARnt~ z{Y{EA6g;;wB2Xy;wk%kRjO}b1g-ah7K-(#n=u%C2S}_I#a&ABvw=Du=m=>lN7AYyD zJ1Mgr;U=KRB%A*pP%Y@ocy;8eeI&VBo~SH}fy}r)zd8a9hR~G6BizWVJ$Sg{ij2Nc ziOyz`z?gEjLiVtIBr#isMzQ~6ZAD#UoMMI z6h1)LF5-X10_nfLizdUYtZhux?^3iPZ;*)+Ayg7rMgrRFtesku^c%361SUTudm!?A zfwz|(WJ71&$KP+U3>H2hDwGUYTXBnP801>CTWIJ6fE94p^S5Bda=PtgZ9fYoZ~UnM zalQW||IdV*w?sxwcHR%w(SZ`+5%f=@UM#gA7nF$Edy%Wx5tZjL3$NN|lQ$s{TuQ15 z2XYC{{7DBR`_#SEML;|P$rWo=|KXp#%msKwzPZoW)KH+|5jjnVDJj_Peo+Qw2dea3j2*0%G@Nl zycL)+WapZ4VHRO&BMgH+Ck`emL z&DH>(DHm(!4VL!PU<4qi2Egxhins^YWBE!dWXMc6jOT*fBNml2aB+ZzWpI_+twGzo z)h-Aynn8G=2^Z}gDc8)BZKX7;L*bFTMb$(Cg&~>-|m1qO(sResAtAMR(e)bqr$x(?wi9GF`ps|ClZ# zlegWgmn4fZw|FDq8tMVVrE2RZ9+D?H3ub2fM`Z-W^@ z&}%b2hOvYgT_?K6ByB7szF-eD)bS~BK9+-yYCYtbHC45>3sK66WP7%c5SY>Uy3KjJ zYS^utmVc?iRCGktz!+U_Jx^6!jHwEEWILxS@Bop>bT{#=8fDr;kdXW~GRQ?kZ|w}= zXly4;e8`6WPAj-d$``~Got4|9AIYQ2~y zHK*xZCKNW;me4yjY*Qd?3YzVKMl@8o zH~4d6L4&h%%A^4p0(+~ryZ!t|i1w(*7ZB5PAj*bR;B5a_AcZ*T7mcS^rmg{JN_TJm zED!{=B=#$vfwGSq1D1H@0qu>()v+DO)wxt#L@L6?LJ-LiskjaFi=k#W8_tSuEKU?OP0^;ZfVkMY!VyRja7`Q%!hf@ou4} z=Uf~)Fz{6&sx4vr6-`49@D=aN7vq5CxcmqxP#V1w}3H_o2xT5KHsKrgoCmi<{SLqSAY?b`U z-Eh5|9E1g37{uN+*x33*6OhJd#p?zJ{(yl6KO)^A0Pm2q!!QS*xR)=*laj5c(QNFt z`@Dr0vWra|1hEvRafD0)p((&40!TO;=3UyKFs(j?eDx0dL9=QGQCabaNQJrXieC-S zoGHk{ih8uKoKnC-^e4=B@*DF!7XM$d;1rswf!rsLLI61f1_t-syjx3p&k_0*>PY1+ z$-@Fp80}_MWYdrBK*w{U+7NHb8AHPWY6IX_c>q4AG63C}?AQMZ{b~OSErpOw%mX!B z19W{r@Z{`wlano1jsfZ)UeeX}m{SuJ{=o3k$d}&p7Tr9O_U7e%ikhzx?FVydqHHGj zoI;z>psuj?zUsBaEIf&u{A<0=$IrClP zY|CD@+1IpUwbDUyv2j7}>!94%!RcSBh0G8$v0LU9Qr+2N%q9EJ^m81 zspf|FLN@G6{IvF|)6~6AYt5;FQN8rvru3XH54Q@bFDm=3m;KLZZ?Y#{ z6Z3fDYB~OvoXY4~YP5X+17>NWy@UOkc~gak`yP~*UUqO;v(o5Slmf=Fnz;{1xVH6n z&A{GuHlAi4DnF#!V#8MU`BUE7Uh5M95QZW(O1%{V>Puq3v}Ik|v7 zq-G-Hke}wRr61_umF{1xuS`#fB}#X_dEwC@TlPhN;mKYT!{s_FgY;qg=nKz2FPW3T z-u-cT;Oo1NzJ~1FlDf1qh=P|#x+*&cn)A!xc5lB!XzdurcXP5#-BHQy5h2QRt9iczvbuWdy!4hOI`l@ z_Kp@=>FQna2-<3dKM=eh?OBR$9wzHvvk4a4dC4O0jm6DHXC3n0&Bpz_?AG~jxq3x> zk^CHC)(a8!7duBQA`Gp_(|fOhd~?w2ML?u~)A2Uj+D)mnn=c|G=eM^ZRT_ctg?Far zNB0EoNZq$}&g|r9vk66+REt_E8xxNhSGV?2VI#Q*SzaEWJ6bh=Zkwl?>OHq*f5KH_ z&GPV>y9}m(-owal6?`+bhr7#EAMq_>+Vj0j7dPlQfE)4l7BTJ4rWxn9Fn4*AkGdt>WdDJo9#saBz+8D}-}7j3c|kkP*ZSiT$< z%ScK_!##yK7Lu&`$JYbsKxMk`-+Z(5A;L}w1;>ll%v%puP8zK>c#{aHCy&y3A(vY3 z_?tuiWO(?5Ta8k$R^J zgzJe;7Micr^h{H|)KU;JC$FIl$Cmu%@?%%-Z{)+1ABC8Q-gz+y_Puk z*Iv~cujY>a5s!l5l!-NfttduWk{O>MO)OGiTTZb(Q)HZ%Fh0Fgk1 zf(Ja?$lIG-VB*mpphd8Y0`pk?HGFcoxx?^*t!V4b^bNbOTrk-|YEyj;e(TMX&24Rq zSG1XUk3QMl)b>Fob^BJIsg}eiWlXE|e!guZ!h|rmg?G&KO6UCH;4>L=EA2RPjJfK2 zB}?H2-e{yG8mF^9+$|g4-?M2hn4pa2(DjZ`$qbb?i4|@8XODtURB9_yN&RK(9Q2S} zrqydj1G~vgF;CJN65z> zCm4SI4VfAjh6iQ-v00TKn>sv^pZ#3uW2y&hWObU;^yGNQr{^ciN+b9Co6=oktP&Ls zY|}uFczJ4KxZyZD)r_78TyHgGGxeEO20n6!2*Gn8quFei-J4BUZ;Q#WY%ced$%w(S zbzm_?US@fM-l=(FBSxhYW(iruk8_^Ir>3fk^ljmqPefgs9-Q+n%G#T+0eM?CF)?BH z9K9L2pXX!J|9)eU(fe|Ku3f$3=bd5{07zypzYtDz;Ur~=gZ)Or=Ql1Pk^Ioo*$k4+AG{$ zn?79D(ehwqnU|MGd7^^*Uk0rAS30IHY=$kee$vdyf1scbSGufB*m!E*MB#;f{sE&tDyn^P^$-4&UmtwP#;6&9^-+2g#? zts0t-R7(;vGBm7ql2T1ITn5gfKw?&5YkcAN-=BjcID8qVQk=j1Ti;6bMyYQ(#!20| zb+=!u@l=1rT6bcN;{JV3Z`EqHT=HJsX%lR&@mQi}-F~NcrPhD^gbY-Vab9c$*~!F=~K&Rf;L!4r)%J=>OewdXpRD){RO zMGi9tTZ{FhbV64oY~t)!bU>7D_=~M)Qb<;XnD+?^<-TCW8gWLnm#_F+_~Y{1zH*s~ zDl@9B_@-3s(3kbM(qj$J8SIk(~{yXNgAQBNNeu@%Lg5yE%veNn{#L8hkDK6(NWUa=)4ZafpS$mK7>=Z$^Ibg2~u{#F6_#Wvp^N-xGehk~O6L%FNQx{_k2C zp@kQj+;mndoymwx6<2Z}t8h}@?Mol1uQX%mT#imPY>}C4t7%x__X?fC7SA#48Sk*fR)s~vsFg~MGg!dvDAUiBO_C^a)rsCMqDe%%3eke9?tk%slhcj;K`?z`~k%bjLwT9Q0ln2Tp$Cu`JQ>mm+Wo%$K&K(oizzIB=$ z>o+U0HSUD_CA{j-&fX|{zy(IO^B!izeOOiFe&x@wigJOJ6!D+k>x-vtVE_8-CJYn_ zQ7w_4gLm}*fjr=e;W<@S{b$$VogDq#|B!!b1TWSH4OJ~iTV>m+0)M{6=BzSwodsr?%h zvmnb&ywRUj*O2Xp1@I+uI-*&3#h*Z@CO4!KJU4J65n1w|Jyucl@fK~BZWNDX6Gjfv z2Zzn#juh(WI{uS<`Xb%caI49wnhGWfgf5+h=eu9${d0k(sfS#h@+$V>;hucm1yKtJ z6;e%a+R!4^n#}WVF7pC|QKXl8I5^0z%tw|&DA~t3Net<05q}*zY@EAA74tcVWw~#topE`bx!PMIrnamh0m@t_c*o6RVOxB^ zd~z>?M7*}*9OmAulnkE#>*d>-Tq|R9`ILI;Z+|!hOLI&|-(k*5qutr+1|}vl39E=T zq;PeYS11if`9xwu!pYDbm!749UX}XGeW@|r5Zu;=S&kKEIXZ5b5w_?yWKn1-;@i9(`U%lgfriX9M!%(Fw$Mcb-QgQoHdV&+Bf#^!YBJSZpr$c zGEn|N`G*ViB(_v8I%79TR_TRn*BJ;epig{|lBybwNi@ukS(xy8Sgh_v?eu_98PBT9 ziYb4mx(sD>Ks_WDwNPzy>eicEX^|-RO<6h=(t5+?=GMO=H@Al<`*dQ?vHLzJN0h%O z5>~b*LF6x3|2D_ug)#e_(w>shvv;9qZ!|y#r9E1~_>Af{t<65A2BtqjdbO|9zjU5? z0#iioCj&8c%C!4sNK3V%uRg^x#V^hiL+u@KTaedhtk5Dj8gSm0G>S?&?M2-Rx-l2M zKXxz-9C8ikC4$?y<=NvCVC`6EF1bCa38E?erAMUyMY3DkXpN-sjN}oV=k`ac7h|F5 z(T9tC{sG-=G&p3;RldC=>jh<{R0~$E*1UuU00JRMljFA-Nrv>{X>F12A?3Piktl>5 z*m!^TYKiRfKOR~wP?Yu(K^?71Gk=+9lT%^kf(Vfoi%VG z`+4@rwGw0R(X}~}rWx6OP=JDIi9e+Eo%P-*dl)qq5aOh``EmMK=B?Tqk;nV;oi3|% zE6cc8$R_BaH;;C8%T0<-HcvQu+P1FZGoxp5CL_e;i@xZ>5hHQuGyMEA`{KUQ+|mGh z2TOOj01mzD=G1_jJ&}=8?QN(90DNWgdycO(fE~3Oez7oW-v#H(R$C0-ZT10s`Yl2A zv~9dqz^mH8(t{T10g=N8$uIYABxPMel_skHZj>~+NrubltUTA$QW#RkwPZaxoktrX z1AP6YnF)87p_=zO=vRFYVObduS7NLhh?MG-T9dFOUlW#gCm=n^;sz}6k{jn%ficHw z4kb%f{abs}FYNWJmmVhU#}PtZ`*@b5mHZC*lHn#l4aK&Fs;NG{88sOmZY8c{$lDP< z1KWz(Qh!rk^ft?)lb}=h7h3ZCxIZF@I-}Mz(ov^WM~EloIE=wxO%v=JemuSA@ofV z(tyijeGOXq0i_EDfmKM%=uyKKnHQx*(*ddsSoFmt%%Bo%xJ5ShqW9;6k71FAA+d{l zncm~pmBn;apPn35PU;o&9O|))7Ai>oZeUKw;ucY1x0`sa{~{Cb@wK1y=dqx0vrmC`wrcM z>`G!&XSdWA{U5s4i;L21?jC}ywG%wlf>f`YHjf_{0(cqCtwv)Y>pvzsQFv)zegND( zh(Wk9F*{3G2_BZUS2S5h_)+3N9$G_b2 zO(fct@;@!7meu1A4zd`u*#E!HnBmA-=Ljc+vWo9kdpVg6xteeDHb^+Fx072C$ zs$dro9#{!)*E+Z8PQicip&|KC+=9p3` zW3u968I)f3gY>eE%i$a~`xve%6`228-}sKcd3E=%4EVX^;HMdk}}pWxa8M41yPzJpwk;1_DH$y|mb72#W@^Sv0?w_IFu{bFlYsU;i1TD{;jJ zLh*&5h@owp;SnbXFjFuG$;n45q&U;&iLZ(AfIS5;@zTPn!hBOWFc406*TUw$aw*=ylAIPLVpiEi}WYYhA zS_@lv*Q;xiGhn=Tch*5JCmB-fA%!e-_H`wf!#>?O2buc^FWEoD!0OO=*Au7p!FZzXJ8| z!LL0O+U~{tBjl0^wOoAkaRZTJ&ZLGZ-*l=oGabCf7ua^t*uQHtG$|e{VmzvJ3;fY_ zyl#w}16HD0q{faqtYiaWl6V%BkP=^L+tHKd2F^yDM(oPEjcsXg@Q79xBV}c_uWeDz z&gZC2378QrpWAzSyKR~Fz%sQAWH>Ug*!?67)cQ}1==YzL-2StalDSu>f>|r-jW|rrHo-YEZ^Q#A@P`6 z?B$BUx;;-EMgx$^FE0z@^L*hH&%xWb97=K2 z6!dbP^gTBKu!7|P2Pkg119s^neQ8&YtBJ?EvYGBYRtVXp)pGz?12*qf=00bESe_l8 znEX}Yl&4VPB)5 zM0@KELZB<%eu4vHi@J09@2f)G*{cl8kE@_`#dZE$M97v$4+rj+IsKCr~9xoJUE*pX&Ho8Z2$;zp(nYp(n! ze$SxrP7YitK|ff@Fryelf(n{^01kZp`t_LXk>j8KfQZ!te{b|}n$yP4NR{0Pr)771 zWskzAU#A*aS`a}v_oL!D1Z)Hwgy$$naC6b}NQve@=saxFXaldSHhlkIW@@w==hxJh zl8;gUG6dcL0DdFJ+|TEyZclZ>W+RJhu|`G$Gz)>%tbZ_S08SJt-ZUx;z3vGctsFw_ zQX)PA3H--MUV799NNY`ab@4$qI7Gmx??iRiu(Azs59V_7Ut2`v|CxT?Jpa3e_ivE+ zWxi0JzJt=e!BD?xBPa6$B?iS@}oi{z(Xx90>uF^6=SiZnO`H~l6?#3zv z3PVo(HVQd>X@0#pYOv##RuQ+`W+`d9_qaSX#8mz3ih_Juf{zP|oZf8LYV-v7qGV5Yn@#{sU!*v#NJI;Vv? z3Y6r_x?kE(i>4Y?dLX_~0f((PG!1bGSpEZL!A3SMNVu5E9;N$l6qUc`fw}}ZU2>Tl zX`zxUAoLz}3_|Y>MOrtik_&p&CJ4;bb)$6!JL3X8Vh&V^>+paMp=|eq2GNwAjWK5w z{)ZaolDE;nc^&z$ZTxI&1Ojp3d&n{TX6*@aGag>p{(||9p-HJKHLElId$Y-TveI>C z8EOD(L%l0#KGYnzG}^nW3>es8$71^bRLS(THWi~9<+J26Ki~@bI05K|PCvitSHO|~ zql+mPA6d!!KXGQ=o*M>g%Jeih`s71)6t~iM;fY4`D(TEA%WVZ(08)amEU0DqzK;X6 zEH|kstUIB|hO#UW(YL2{r8d!8*v9Isx1TL`WPel#wZF}dJ>=ypdmR4ohcP(ADG#-o zNdHTJmeFN}>b@Ojn=|~?`#xQW^0&nZo{%P2rg75>;m_I{4&?cU{S0H+ZUZ=4lK`JF%~$VmJ_ zMBS?#hd-I#p_(ZyeFG4MU36CF3pA0+Z~Juj+=o&Ih-*c4b5Jj_t~h^HG3QYm1WR#J zX-XS-Cp!vs#y9yMuuDmso3NL)II8Zt4IrmbSt=7y{%2$1YG7o90;hHLwzSu~KxZjC zl2@H^`-^`x*kLe>4X_-hKiQze$cy5L@JaVr9L@-^v31oqFyL^$%Xu6#_7ym^I%-7O zpte!+fHG1BO9;3}pK*-_?JYnh>V!h$pB{k-UW8J> zNt4gqG1~6=J~{kI3dOl#z}({ndVzIf6*3?&wmmj2I>o-V8^E0oYrO2L>SN z+_}sB!yuw|LYX&&EpF*}>qE_{1FwNSIN&jIo09C`U?%z6Wkl7j+i39x@>DpPqeoox z{tHEmxc~G%)sw*VPHkBIFBQJP!YoCb;fF6Q#f0^lLUrg;#cC|I^8s9s3)bOCoo}>k z5ZMfrdd?dky9p{AGA^amQSvk35mWp9Ko-EopQrZdIi+qV$htcocx_0f>HN;%@?AG< zIR7&ASRxZ;$W#skdhxr6^PpkO`F0ePo*cQ$mF9MKs4`#{$LiUPj#5cYAc9E4hptgs zabMGJbb=axGcU|9-3TL-%mB!x+~EtX>so?}^2>VmR6drowO2zKN0H-FB;rmU&O;6> zjVGpXj8MDopwA9&VbOuI&W5!{FYFrDk)~<4HZrLEV=0}L47G}UUd*8(I?KCIobqcS z)P2;KniSM$3}vNDJzZm|L6aDjIb>NQqVE_=>;Hl<{=1L%<vog-~YQIWaM@5ouvDO0+DXnsejhJqJ>ihyEIs|f< zsmc*L5QTv5END7_(?^?0gs=RD$eUwy7$0crOT`=0?K>H-tJ^h8c?u90_){K&Ft471upm{ z)g9>3Owzehez9ALFEHeuo!wOUvAh1Gj?aX%kDThW>p$tB3#Ap(?z2Bk6BLQzM52B@ zEtQL*r)g+)q6?7+Bgaq+Wr7F7%Ry7>vfeaARAo=s?9WC;)j{kp+}avMXyUqD3&Kx7 z^C?--K1x3}2wYe2Woa>FgLGIIk2zWS#@{q)G-uGFxar+6+u@&cJm&+(JC8n%SrnmL|;%wf*wyGg9S1Tt5xKl_B7(I%UI~ zdMrXj+Q$!x_?2uO#!@}}azDi?)tH=Wk|ns7fzSTTz3w-WCPcBC|N1pacQny6dqv1( z*+hKj?$i{|zT2iZvoL(}4s91kK&yuyWx1g!iyKotR1UajkfJ;hT8G^96bBt6H8IgE z#Z46Bmw6GZ_Hdv693s7*P5m z7HUs)a|zfa%6YnIN(=zSuSzW^LEK|w+T39q zRnSBzo=IgV|62N0gC972D)ju5;uo=_*1LAAC&?p$`T$l6WRFk*=AAiD@h7v=l)unqE~=}-~SfqGY7OLdVR9MOz%b(l~n??04M=?Rs}dJ%ys!nKgWgw z>TV1a??&lSA)z=i-V{pyxxd(p*XXNCz?f@QRij|AHp;JuB5#4@yFf_-Z8W&ws`T7n zP@y98*dKB+-aBYh^R?O-Q9S5hLh?P$XFqwoSEPNzS-Bs=R9;9nmsn7fD&*V87K4SyQ`olLc zGOY*i%U!XU%GbGwfoGS^*3L|jC?g6wK9nDiCZZ^7c{yy9_Ns4(PkF6;cK|!MKA*Ja zO#c0CUbID%+k9C>`FCWe?SAF12nfhn4xc^{$K)H>2vb znM;<|5BwHDwx4lDbV6-)bD zT0NXe2~|vOWC^NBn!^lmKpZ^W=jrLI$W36{dns=?Ei^+k+G0;_PMP%M#|p1OUSqa4ecag z%WaMw8g<1_my*qSv|>pJ44+3flsb^!p@v(eI4@nMAEWWus#*I$3<&?;u{<{_@gxV> znX5942*FHL-!k*c&O5v{QLcQvkUNPyvN#A)?lyMv*H{7$j2opONKfDDQ^Cm@YHxcZ zSs;zI80hO@G{b8Xs`IH%JcL4t`DwPDH(=CNgc3VV7@xi?ALMpGjwm|!KoZheppB{8 zpVyFRkNJt8y);K?@Q{2{>i3qi_cyKY}kWa}s9l|J&dw*bJiXzo`twuL3daF?gjtna2ii?9uI^!}pmnyMorf5w2 zG<bb}o>jkzEQQs@&LE-nz=`_k^&*cEA)Y+UOtXnLHGK8v z$w@FAR0@f2IW`EOj-Ty&n>*grU`hmyd(M}YpY3Nq-+4p91oQsQf<@&|^-oEWnCxHf zQ#nI}*Tz@dl`H4N2BX=)Ofv^Cw=mx8t9SvE!suycG;dnRY?XN)kr$Z1=?hca&G^8&vMv<>i1I22u7sMNxtVFK!!TxgF5# zDgC9L55U(>ycQ0x5*@q#!=+?c5sHne|L~5b7>uFy5oIm zdBHD@R7P(jwG2WIBLP);j=1t_R?2X^qF_osaTTG`l6z(<9sLU#PLhJ{Jx48V_1LL} z-%!V|d7RJeDtNSs`;SK;XbMr*DMS!un5I{k%_JY{fb#iVasPLloUi+zlmv4eNaHwU zmu7GfNCYT4L+65TZr=F>&qeLFE4Rj_U*~<*-woprkW7ybpKmj}GtNl>mLs1R#M-7Z zs;L4YZcDneQyD2fH`F;=8jz{a1QIxRg6h- zZt2o(c^Bt~`U0C&buc;0!?wQe+JsH{Izs{;l*cvdwm}{`+GJ%wwMTVkm9($w7fhIE z!wL%Cy}P|{d@8_WXolhj(wAi)pH^D>ytG25Tow6H8fX2bcF<%^A;&do9W>+f)|KW5 zzWEsRuXNQ+`0=T~5PCVG98?RZ5PR^DJRs ziBsfS86vpS?M^~2NdSd1UMfxMJAA6*mx50b`{!O2)WD)omi<~e#eCF*h^H79FLW!6 z8xkp16r=e86S71C(eJ@JaaOTnV`^Z2JsygCEz(|J<3X$whVvCoI=gx_O?D!K9>T{j zvKl44l<%GCKZndv!QV~m=*mGAPnHn$3?v$ecpmTZZN8|DP5lh=lx$EhvikXJ_&EKT znW#@z&OT(a#?-0lvqIn5PVeJ+fO~DFisGZo#!X&&ElBpE@N_P&*HMs~9KBZoG zWr+q@wK}b$*gL#XN?Cpm1p&r>8ytW zkCOlT*Q=@2A%cj3-5oD~yQwZy#n!7e*1b%cRg{cjPr9;myI>YHd{K{`l;@oT zJ*3R5E%(K3YoeHygm&bv)t<5kR(!rz#fX_M;9`@$%I8J^cQy+=Z7|H$ijuc6w6!y& z`XB&!sqTj5htP85y@aldl+xK2SlWx&j9AfboD1O{s>j~)<@qa8uzW7au>(Ii)U7Lh zW8MSK0LyZgBG_fI@8@)QOz!WAF3!Cr5A9+J;+l>pxI zmWqIJF?kk^f}&7dh@E!XV7HC~(j3jU9TszvRHZ5JI-WCh+-_VpJ0h6p{)^A!E7@O{ z)2MpdvmD&jdt=lg(nZsY*z@xZJ8;9BP1as@vcxdQ5tS@Q#U|ObI4?UEBc+%2>roTX z7G2Fp(X9gN0v+7gKpH=lYSDjw3?%DbTwiqM79&34PD4A}W7O%QUNEIxlV&XUYhW8J z|JjC9fD`#BqqC|9LG(7EJQ$992qrCp(*g2!hHmqoRBStXd;DltUa(G#3eFbU*;EAr z?_}ywY_YQdFn;TT9Os))3993g9bKw3GI{%%iU1#(Mx)Ocwnq|8mv@E6Qar{-n8hklj*8t_?gI0tR*D<4U@0%tpgBf4R z$(V^XY|~=SN+w!Cr_3R}L$ni2)O9gRp*M{b2@TtQbwd!u^w!wUjH;Qp+THs5#n1+PV{s)7lZ?+q0->B}O&Smqbu$T?r?dCT$ zH_sl?zF}%jmB{8#VK+BXb=r4)vuN7C`Sbr15AU6*TpY+rL@s=rXjA4vO;=IY!=#eMVW3> zJ;gOdXe8=aGquBXFa3mDOt~!vN>WSl-kwVn7OnEDlj){rbS%Gzk8yy+{o!Wi&)U6! ze^5SMmIIDc9>Lr$@u94%k{tF5Z=e`ppQ%Cj?^hl_Yv{qz4tgeT&h=s=MiC`N3FuZ- z+SkUTEpm;@OU{|H_g{=S)Gs%Bw~X${??-k^Q6JfSjX{KdAKr}+HprLS@6;;CQP<}~ zA=g#?d0+&jIe)*pqp#n?z~;Tup2WS5s35N{I_v{@24>LY_mDBlv>`dAoh?rqE`4kD zc3HyBq;r86!_dBbr>LBj=H?nddWqU6i{Mh{pLqninfgN@#_#0Np#DF0>g8s0qZMKM<%7 zJOYm^Ze9s$zG;$N?|$Y*=D+@CY>EHDyW5fe2T7RK=|Pjx$Xh9YBL0?tS@#@N@!u`G z^xcnRuol2@`zg}KjHd^H6#qqj?!VfU!JpN4<4HsI`GsBwCX*uquB%?(s~`P~m@AfsLgKCj0Tul8Gs*=B#~6V#a<$u62rx#k z-}>+CPWAQ8H;Y1Jt_B4%avjBdoqob*+%4J+u)RPU*Atq9@Wwuufo+l49stb~>oQmY zwm57NTlIT)HdR$_b+QnsYUV1b%IAxs)5k;VvIXOnZDjENwv8{^`Po-l496ge#MK5c z-wd^ng;cGE2-ywd=l2?!0UC$}K2p6#bwL*P_wT1cb}I3NQCZuc9gCQwQrMtDtG%f0 z-x5W-Ly#_*F^K3E#hiWi+k!WM+}`tL*4{wc^!*n{fk*iATIRvVlz<^`9va^G&j0V- zcdfEUMHZR`S=RyFcyhXQqyXGJ0V z1Kslb?k`B4ZnVt#Xg@k1(6+tYDP%I&8uL`$Wf~ioEcXQj$xWQMG1mHz`8U$sDIv zfUGzBPPwg&XXF64r|a5}(4EgxM_Q-KuYPOQVUk}mMSv5AgXItSMuxv6U*(vCQ^<=< zCa?PT3RMW}rB}#mh)nOGXVenHEDilk=x;HLH=24m{Ou!xPS|1St{SJZIS>14Ex6SC z!NYi>!K5b>h(Ac+X9tQ%VU!4Ss|xurx0nM2)Tn~)BrypDyg`}rxCY7c9)YI9NFsx2 zMnmxfP8ou}D7d~Pi5*+So9JeCMq-p8eR`p?#oVd`gIwK(C0V7*gbaVnLL46I8=(eF z;M-K&!-MCGfWMe2a&3~_Hlm266b)b-5FNe}ij8MmXFqj9E`Xo%GE$^Etel^HuB$=MI9j_48W@Jb`$=HX@Di zBQuzolzZX;8?G^JI2hhA_v8A@oIf(&Xdtux)z^GZ&iR~nykYBXI#O28N?t37lBCsl zDuiCtUDl3;*WF0%hlR-JT$iTV$sf|&V{~V}l)q<+AL;HoW3TrjT_YR)h?!}u{3+5| z*6n;)#vOPh>IUD@f2c}#2BI?YsZBSA`ysZVfLI`!&cQTL9@8*8*&&@RxBMfrq1vnP zMD;)=nvFG@ZTiGURfe@9@6uoTH%puRo?xPZ-D#YaJNprv zX%WI$Fx`mC=)a)m>waKyfZJznMs+pcFf#ZV(n=N{#@rrc6X~{OM3GxaHt4KKd{xvl zeY#QP!iZ3n#KNLGCCMZtxT@Ib#=IQndW+c#GQx>XYEPEW+GxPT z4%9{clEYXP$*FT`8zo{JJZFX7->WpS;*wJTp)seZR_Sufd6cbcB_fcqt376Ol0MDKl2Wq;)BO zt6J_!-|G$QXTu-C`NLux{KmTJyRe0l;Ui=dAXZ7<4}{SBp9GFK%3i}Uw#2a&L~x(( zy6)}MH)fsaP%j#!Xx@p-|{K_$rg9c`P4>8($|NHE$F-+*^DHmNxV|O zLRjoIPV5}QY)xjmO^h`BWXYhS3oBRA&5K3Y;(}Kj-H(_fU)GD+dz(y-#xYHrzly`% zE=W*W`K@WyW+6N}4G2|a<&o7$t6>|ABq@S$Lvu}_*4W*LWwrP@1}hPUexMg2k-KQ- zLCAg|VQ+1$+$iQS$9ZPGYMDQO3UiO9=T(+O23r2LebQHQcWadzitjOFs^AF0LbXE3 zUQ4W@<&C5Wx2tBB`;N0}p(_X24!KvrXE`ONXYstd?dzpK5jf^ej|+0nwv?98i*2#d znBig(vBmZol7>ZrtW0tE6~od_LaRY zEjD`O;yEbx#;*UcfCFYpf0L3&f~!iW6o%fLRq!sTwwUXOUJP%APja3PXlf53*j)z# zS29*kU8pf?@Mu|`kW{xU4+vdsL^iEd7JN2OxJUEA-grWMgKVumjTGMd*4^=Tc8N*w zNMt+egG8s&lOt!Cd7I{!9ABID+%miPv(06@uFXINU%&6xKyq*%o`LGQ(&=8+nRYs} zJFlVTk(&=^m3dWnpRRo=gHT6%gmpRm?`W}?$GP8z9aOOWKoBVI*&3x!IgVkp;Hk2? zCULV&{jmZhWmAy|bHhu*;f2d&qwp4_Wr^CCg{x2QKxUU3qr;6uTVX}`tExJJ>+Fy4 zR-bYdF4MAGedUGHDO1bIJ55-(!cgM!j;EAauP=Fllt7FWi1j%8@$#CUGJ*RmR&H#C ztkFVH{G*k6hAljdVtk33FYA#7D{_R|$EiQQ>uQbnxEw@A+aTx3>hCJI^iy}$gH zu(mGA`|*!`&{AM#)41WiWONM+8)!y+-N!D8G|m*6OS3U9n1ie=%| zoOeD0bXoP82fBnq`_5dATHi6N*gt{!bZucy%~ zN;P*^eB;KI&fBEn;$rWfTxK$^e@ED)c`}#ZkB1ozckLs1 z2zg&SjQub|?pRq74k4?{8D8&`2$>^mEUKrLWoNK;F4R@HKf_sR^%e+~p1|LCH6+n?zsr`B;b-VM9co2(!I#$Itw zNmq7XQk2z|AUOQ_Xr3_>;YTD|a(DCA;D1g23~;bE@?)(v_2?OGid;CB@Pl=7wr|K!k6-|;HmaI8_icLnzuZnb;=a5RBCViovGnHP7e;Teww;UI%I(x`w|6XkH?Svg7T%ZPpI)md6^KT%K)we z`vqMZyLeS3{CYj&Dz^h$3*q`)k6Yr8pZ9u;-7fm$WfiO{a$Qxjx0PR$!B z4fP&X9XbU4Bf%VdmLIu!`^f7!%F`}{U-j8%8V@e5l&JL{cs1kKO_ z^U6{Yxb|c%HEqeYciv`B&%pY$xy}h#;wbzDBrsH}hpdK?A3fo-%&g6vEO4F^=GS^F zd%gAvXveokhoe$&9#Uym5bh2le$AbYAg9C*zR)+60b#OOn{7GS+n8yK?!kx2*9_Z5 z#ajDsu;AXb2V0Hs^dOeuD`$}rLQRXWN>{uDavx2=6&pOJQ{06r*B|L_Q912Rm7_E7 zsPiu|HH-gM(vN<1%^P;8Cj3t9nHSx%M~LT3<2&QKwnp(xpD2ZiUALT)baZ8pS?|@j z=e~sg`{k7L*@C8DaZGHGVBv&QOwkUUpSPs+K`VL}CX}t;Yu8(Zl_lB*Fb%B~9{K!~ zY`6~BY{u&Nc;U1!E{O>K5(n9M5aKZQjckjg1)@#1WO&d8=+qhJ)!yz1(Yzgnl8hrr zH6wUmsMG3oRUoNFf(6pYm2bAdwu5O~Ebf|7F{&H{?5sOCecHO1^U)^^*;WJ5pRL;a z=!b*J%{rn<1@`mrt?`7WS#;@9l~A6}(d9`G)s6~z6zRbNEfWhV2{$#SVtLi#A%P4= z-U#-p?ZNiJL#IT~tJSW${dI^*dNxQ+)-pEDD>B9A;YrGn+w*+oM4h=axUHgkYQpI9 zzB+|PWp9*C zldJ*rD3eq*Gt1>5!PN<%XfAoF?DFbDB|dC3M?TaIPgNN-?iLP`G_Ln{i|qxTYW6gYtf%1SSa9_s>uyVx{ivU!i{q)@3Ke z7wVDT&Z;}fRu+%N!Y@u2c46P5jfsx?><=wIbm9xs5LveZ!Tk9MazxSsi?FVgA37@1 zbwAqk34H&H(c&iIp!8+AX( z^l}2J-?wBH>*Dh*a74aT;Ptce+2Dz6_p7HOe764PA?z268zJz%W(v=vV5=RRsr54# zauri2OqJ+XXNw5iT2JBX3iT4F43%2~PaE-g)L)H~HKb#i?`B!|$kH~nphw?Vd>H4@h4yk8|woi2pb!9zJc2N;GB7GuPaZWf=YtrTc z%AG7N_(5a};WCHT2o(I|mtpO}WVHb%F}~cq6TdpO!46)V<1{sFh?q*5Cp@>}IACRb z6(={jk;-i`A#P@gF~Z;t-_{6a=#rJp{RjD$K?4TWBv%49IY^QlD@hEdM0jH6DcG4J_eyq(i3g*^ z6!K$-Wv+V7<^f`C_Ze zLg`ggZ+c!mW$!XPI9vB*>u+8+bQs}jP*mJo1y7X=Pgo{tz~hOUHx(98hz4hK9xj|z zi&ccRI~www(}<1=`;fq6M)g+rrN0mVK#K76Ab6kZ>#JHoPPUjOan@ix z^iy;5Y>+#DOc0d*EW?y9Ww_R>g>5xmGI4|_9@jZce*>h5>dd#B6?7tk&3!bRb-mSf z3wT=V8fF9k7(sImwbRnQBldE@)LMfgCaY_HL)j>Ook?Bggl*S8dY9b-zmAVw3?H0# z2HoHm;h#p;&7&b%NZfLmC7D(CP=-MeE`R*8N|9;LH=tpW0*q*En+J zkA{rU5(obLk(M>|Oi_RO?zgJFee;iY(2ECHxhTkPNs81$IDXD!`1M1=$af4BAC`MN z?9-*l>Bo+F5RyaC1uq<28br$iI#Up@J(l~tY18mr0 zf=7P)zUR?ppOdKIK(Nyb4^9o{r=%2j+a{(PP?|7egyDWVae|&wHZa#8P7EJemkcj8 z5{+oGdqhrO+fm0^G)aRw+3dKsHS1rjFYUDPheTlk%XLQ`#uY8kGhjg0!M#Nxg!49l zD8*wU_JWd{hP=6Bt~r@#N! z=_PrXz@BmBY>>&m`&;yMvdF8iPX)0*IqaYST|>)LkNC)42d{E2&RuA@>L=*P_iToU zx7`w(6S^wI$5wpPmrc`%5ve8F?&Nl_0}8-*jU!(8-0GTNk)7u4sC)64p1Mwcu*TK= zOu?bDWN#lszxv`2lFQgzh26U15vZB!%AAp_WWhS|ysFuGw?7JM+7&xUL>b#a*_`5c z0d<93p}1MO;amm%r#ye*>O_4G|4C*Z(;7jry%vevgO201;(oB9mrn_L-<46b9~KG_ z5SZJ7nMgc6W?JNkOPjq)VuaVs$Xxf43>g`s$4rW;0ITv!5_*!x8 zE8=K-z`;1C4|qxI&gKyHj^32;IF#@+drpcjlTAQ2sHb0Q8A?1k(12aW7_ z1pH;J#HYrcJSRept4al8KxGvmNd3&)F6L_cXL(FRZr>E;a~s8MuXFNDm@D@BB{Ae8 z_AAs&IyTXX;7@~$44}6&i5{{>={z{MdCy*Ne`*A4P2YXG5hJ+ZJ}*2&$kd3%owHjM zF|U}PIkkW_Y7mjcM~Bn@ij4h%x!3#v;~lPZEN+F{1Vxkv{S4P80Es`5bZKzP5*$Lh zCux_3gHFdCWc<^KtA+DxB?Q|!B*Ej}$IDo>l0Ed3XoP6UI4K=LSH9uqo}#yXeQ-?V z2Zx!+^mU*9qv`ukH#S_7Gn6BLZFv`y(RV^at5>xcSU>bUYQun4m2p?7Oo^C-N>TrJ zKoi6iurNiJl$nIl?~+!n>x1*zZ(1Xqo1__Z`9M+o7a{+6`M95%9#;CD-v4;c0i}V}j~=zkuTC63fB? z9p17cDTS6bJuYwEOwUVrh>|=^zF&+mJPT0L&qg$XqR{V7niIhZKZKK@j$^8 zrGyvCXWxlVbLKydJKBOHoYCw3=p<|Vu{~nY+?bGjHQpcl(O~YHL!Z#C74FefL`w;N zb%6bBWBqt4xxU+VgnWNe`G(_O1r3pb5fLY?V!59mjrclQM)wuq!`;CfSLK-vrt|EG)Mz|?qi=Z2P8>KdJAi3NfuL%&!+hMLit9AF`qw?8%y zi+ul;+%B0eN@{DsTv+&f9&;g}B@c^1bdZ}yimfIiutDaU0}rsWH*?&P>@37%FVm*< z&xh}~1L_)cj|=nw%I|`>bj1m@E_mwKvvbjyCQ^`f?*m}6`jawqtLCz&m&=56@0UwwTbMzv#nyA zm{pXTS=^)YlAorQ7}w{)hu(>&9a=95KJ-g)g%gPSZ1d`DhlPlmucFBHvm*AAKaduE zug?a>9au(2>hyiE()6hQqBB#S-BhKsA3TT}J-fP$V)z;vTFr+V-9gK$(V zo?{jF{Q5#Uq5;v0COhDp4uN!~bEqQu$dXNt+rtaicc}H2OqTo9#p}gJb7G#YN3>@i zdKuc>Z1GGGS%;taD=F|ur-v3BJWnLTL92m@u~F^|2?X%mR7?iX2oi{@RutRTT~$0) z2qY*F{>?q6#N3TDdTzB*+wf3$xr4q9cbu|zGZsx8!eDV=vMY(+F^j;q?@+N1{->yb zBPtSa&g?d-&y$;7I+F#LuupkKjPbVW&XjZ~dYmvO+Qdh`P3@5tQWp;a4b#V7h4S3K z5zig$8~jpA;`T?%!p?T0$?yv9ss(}l94xD=X!wO7Od}A?{kaO+Z;-d-sK>}IkO!Y8fvt4pM&S2 ziiC)_;dX6ju6%2GZJ3LmehNzWg(!DfII`=03|d)_=@9M%ax#+8%|^(^_P%wq>tO1S zTj9iu5;IA|yXPu^S)a~Dm?_9kD;v-3D1u*JgLGq3eJC48lnH4%n{|cdiC1n_BD0L!VnkYD{gRP zR0r2qA)p=ywG~Q3ICL}!+ntxs)XO?M9F}l1!w``klX!x~M;%*4yulsiIkfC)s=hGe z4izwk64N|**eQ6i`~%p46-j1nXzoz#>2z>hz0sK_{pN#B4AUqsC8 zTAcNFH&BN4o?cLePl7j|bmEpA)$h%a1Sia`kgDv-l}i+q;e)Q&#nS|RYd+A!4Rwe` zXc0Z#Yh`mcy_s){)XRTpCIU}&oZ06jW`5PU>y_{FAO)Gq4C9BKU6J+9;!vHy|dJ~ zqYMj;EI%4b&(`-58m@1B4Xr`{`1cTdUlnPOVNm?!sBscqF~-tW9*bTAs4h9+g`VmMpbDZ!0VGH(oBATs!3Is{;i^REPh zn!u!#vPg)D=ja3kohR)Qi2RRyc@-BVkB7$bgLBz+RnMW34l?mhgTDIZ5XCa5^U!Fc zg-PVe@5xou@jc+@zm88kC`lg6ZT0Wl9J5iZ2cikA@x1~gZ(d}*!JGKMkCgYnN%;8v z>;L!D5q~e`|1+MA@6NeTe0jDV#WuJAKp2}U#Y0zwX9IReipT6nUf!e7AuZoZK58!< z`ezDIcb%k_jtp^Y$~w6dkT)c}qTCM-)^r=Y;*pE#b~-q@#Xe2Bm9f-LaP;Zn(|1<` z8SRcvS3lZOrwh&h_2$LVFqrF8)&)mNRPKW$q{|ZH$YuX)JfP=4ky}1}-ahZPBHvRx zh;XS22rAHRCcbd0Z9-$9uNFpKJ6^ne_)+~=m!rCN0>!MTsWxkJ<#uHG|c2H`q_HU+35N-A-rLX}EOlo1b^PDqWLW=K*x2EC!-Kc*U2 z0a%l9kL{UnH&G}*BGno3AJxhL-BR2x8gM>6mQ=p=I#kJ7-kE_+@uv_p$uAMV$+F@f zkJmHgE82KUt(8D@MwxHtn1zd=_q)Sl*r=WY`lszv*pQKHe=)O*=TH#uE}w{LFDC}I zQVh6H_ul8;llqsSv(CN=n^&;FssqNhO9u9XBjv$93V?$4ofP@>n30y;XMMWksW-+L zE-6(4_FkQ?c<;o|J4K@G{aU!XA9u~Y2=$&5%kG3Qi2$FeY3M?yyBYgk0bR5(t^^B6 zlYx1*M$MYh?m5xPHh=)(N{dJ!3oMhNlseD^~POQkPUiJsF( z*5@;}74$tG%1|JW5AyY2>(1jA&t@GglN~5KLHEiIv2>v60I9X9Tc>T-w4$n|-xXgu zGZ3?W>QOnkKv%Ur_#ys{S&VFWOp?4P&WR2H>LlXrHWoLwf~lc7?W4+C{6x`YJxEj* zn{Q`<`989o5elqInXj3wq37xQ>zOvsBFWa3d`Va z0bYox+DxVAQqP<3I??g+s!5A|P-S+sQ_9M|tSLkNe#R{? zciFT|Bgz9NVz(8Sop^(5&VG*U9c+8F5$k^PxhKmxyhf!Te|q1 zz>z+Op@(J=lgM)9i^W>GK+%!jGwOvmJ_x@=dHc{^ET_8yY1Qu+AHZPKmRY$1KRWkK z$^i;&ovsq!lRf2(93|3gZyfjf+qGK-jGs6wp>lEQ8>>samh=4tgK*ofQ-k%GD?yR| zx=s=u%*M7h4Hs;@8UJHwU%A|GEO7t&o_bFwSgs8pq9xxT)ckqZ6f}6s-X9+NZDn`k z`pitU3VX-ienU9b7STnB6rGC zSD;3_zX1?RxpB6LX#lTsV{W?uI;twk1l);)`I>vgg?Qm+N#`JMlmUr@MJ06k!<<;Q z%y=JSE)#CASTul!c-eC=_-f-*Yo8hHKdodbCNzrvVqG}@0iIOJum0dA$^ueMVdFoK ziZUU@JBWo`4M!HsJ@iHSVm}*jB5j`#xv1WKq1%HMKSb3FwRx z(+m+^EOWhGDFhvyQ;~B_AP*aNn0*2$kP?&JhJw_ht_G!+P!G=+(x@Ncq4|M|i|?hh zaK#Pp`}&rO*n!)O*%o zKZ`wZA}IQo+dT-@hTl=&$cUl^+>5L6MztQuV8JN!@)7q?h;jduOX1>_N4V9GXAkI% zP9Bg_yZBbhE~-lkj124j?L17G$|>usA;q6iWM9w zYbJ4(+A@D=O0Fv>VLX49>KB$1;YLSWuQaP){7XMJ!V2f~wouk^&4;aJ&@9nWqQ~gG zz9r-%OdtHV)JYBIj;2TXC>^@`9$PUjbkyLfKi_uZX5y3-_8NYWey6pK1u?x{wl+fQg_MeuhkGTYWxsEg0B2n^ z)a93dq+inW@0fVGyE zkV$*bxVq=GczJ!|o8j7#lAzX8kc7%N-<1KBH>!Lt?B(=;_v#en(f7Jb-Rhbwk?f_7 zJ9bc#X%#vPVPYj=byj2&n74V12NGOJVNY<-kok7dlUd<`9=7K*r*ra_uH(dBbnjD8 zG8Iync^qt1E|&O&vncdDqEzmqN4R~aQ)x@vi63ujx}F(44-IZTLtVs;KW6a@IzF-I zvFg!-Z^aDoHa6q-e95)>QG;=FlG(+z4Ex2eh8kTBYI$Z%2d=*PutG7fKtBC$a+9|U zfrFV`6uwjXqg(W&hrJ8FKW*oy=OYzX0#t9jxOsydtlQ6#=xn#GSTMGqw7~4b_wCb9 z=9f)%N+0q?BW6l1Y#z_AmIq%la#|`&;Tr|f&E0=T@8g#<0~Q}HWKWTea86DM+>#GX zmp(Z=;&2)TTqk}=eFAUypl@QWgG@ZX@OSRB5W|2ShIJPiN#GoHu^Mf5@OGNCl!<{Y z_UWlR>p;S_ze};%!GE_CU!YWx)b+CkN4j$O8gbEjiL!Yu&(OrhHvw%WY8qov?>qjr~mLmL-f&d$S+3fETNP_5ETUb*-u8!=_NYbi?C z_}kJdK&}qdRLKrxg1c*&Os3TN)&19c^shCup!T|0spbFhY^%+{& zA3I?cWy~?$Q*0Ag>jYkc!hyLUQ}8*p;Zt7=yeOT0j%V&-kjMK}CDbUOc-wn8M91DM zZ@8cs66O9X#msZ}32OfE=TyL$M$s;CP=cA2n$i8fv=IiAqvn)P4)WS%9e^h461ORS z*w}SvjrbiwfC>Jcc0T3z>rg=qr@b$aN~&$& zwb5ppEKSp9d(|vwE!0LWOU;}$Gxg0GhfEO%u&m5-DrYgR9B=})6lcgBC>5y`K~d3A zNl-}$5pX!$>U+QMtabi8XRY&F>+=uS+Pc}B{oMPxpZmG*`?@Xw?c;MeDO4~7wf%)~ zv0l0Qe_kPaB?3bqF#wGC=L(hoafKNm5R5mjhWLd0!L4Qs@JDm1c8XBWoD6>9l+Llw!&~5+r4v6Nk|4z)EssvIZSRlz_pjEU2 z*_o#d`L7_>R#0=mM}bhZp&lSf`Qd~#)z~6&=2!l&9d|mxLq(e=D{=c@RAaka%Tc)z z+)u1n#T;r8z!|;Od4IW|S|R$F6iAQlg7SJa5w9~$m0kkYwHEw`nO*djg{Cq#0Nl%% zZ+MQkEy%hTF*{Te6VDmUXQj!$aUB*V;l;__Ju6usenrod$yRK{Y}?)#gs^zS-BvoI z`HQC5@HS9SZWH{)xxmgU9M1?dv?%dv-%A&U%~L_9-lfcI2RX}ynTZkdwW)4boCy!? zJ6^YjQt?9o$H&!p@y&LRA3*+Rzz*Zy1}*S<;qvX~1hB7{dng3}mUI``zP`+=sL57? zzZ9OapDwcVnIpnMyjAk>W-5z+W!TtUw!52GLH1U~Ck=FW(x3yR%TL^H%CP~uSRHBG z*y*hj75aact;gTiF9B&?BZKR4lyC0LB4k0LfygtE>VC;b-P~~T9x8?m%lWpdE#K9F z|3eK?foxqkqUwgBpp_4Dj0c@d>$=oh#( zBwesSvP#?9q5aC7!t8KZt-YkFt6>IHBj!D?C2zyCH9fJB=ZmFk+}rewr-B;RZsNg# zs?5EHDdb_5q!{GH{XhectdQItOc>1In2b4i1F5CGKKr7aA-nQ_{eSo^DFc23m2|-Le{ZH8ac#l^LNz*XrS{!j20JKWmO4^ zWqhs`ub*911%N`L9HaEbW}9+JR~+viYKOQdOwJKKp=N&>!i4ZO_GB?3fp7=c@HG;? ze==H8xlcY@z@H2ixMsYF$a{D7(&v)t^ug+drCP5u#b9%XD=sxpB>kN(;D}EpBl149 z%<3QCs#5~w6(3(nhiF}X!SouCRJW(8hd}t%iINwcv=okz(MOG-CE2m zzIkDAkI1s)#VCER>PLZx$};GbaSh$cQ^Zr8T6Pqg+U*628GO^1e*)JGezLfrDUg5j zEmWNa#=#aQZ!q8$wPg1F39zYK78{H8eoS`FWKkaW8a?CHPz7`Q{pc(Y6-|-?t()fS z|L=6jl-KO_1Mm~M{nyYPHNaT}ho%91yF%W?C@*D?}ic$CGge!P;t zN}N|stP4xfhF7e1dfjSQ?$lae6f@}tZ!Z>D&c4^GS)05@D$;Om^rgMbJq3~W0KdT* z`4ig48+4cUi)+5ZYuLgo*~(<`mkoNYnkE1y#w`v8^zuh~mbF-ncBv?AX6=(|?Q(4z z8y)ED0mnkDNSqKkOcHr z1xl-7^}gUW8m$+`tRqp%=tsdv8u}4Q-DPN&%ZY!VXw=GJI59 zijpkQ<&qbZJ;UFVnb9Yy%C5_)c!9+Z@WZ%O^g&6TR=v? z10$;~X!rD?iAl~H*;H)>$0qrYEylzTHkfAMt#lFVK2|B2 z5ZdQb+#MI=Oh3%6m!Qi34!PgwNHwDtMs)qUppfUs98Nun*;Ih66dHL9-ripzOu_-1 z&0!6b97WKN45+aAhSkFI5vQMREe-XLo@)ymbY@1ax5>tZA#yl@43$s3Uc#Ep3H6DX z%)IlTtEVH*uKlU};1MxkFn=hQ;_|`bM9Rc$Vpy%L7`fqMLijTH(ayt-nFOtpfA7AR)^!|SMl*GtD482XW<q@%^EoI3 z`H!0EY7Uo*mkpKr_{V9&s14t3gL26Q!M$E%UUA{Ivgob}fw51VDQ~yQmSEc`i%K)X zCoysGkj+}d_I1sS>{F5#Lpocy8Kkfr=r=nH^M>-^v>F$RoACG3F|r;Hy@73$CnN_F z9(r91n~@(CfSn7H#_}1y9sglbXlEc)aRVTd^Dj-?+veWb1HB$U{-S@6lPzP6jhv;K zQbl|W@G;)lDtVrgeD}B?l5ys=*XBb`T5G}?niskXRI_WiXH~{vEXMt7UNXET_nSVk zJ>UaRubV#1b){ywTdhq5Aer}lZD*5?KaQQL<$>FQMJ>Gd$iY%+RfpJTqi^nH1iFgb z!L1bfy&DVJ}IHSOQ-X&|%!WMSgNq%Nx=FnB1mjCNkX@f-nn-ogrHGa6;Ft36! zcb_<|{b|iIRj2Lew*9B8D(Uf&x2guI)di!W&P}-hylruGrKxf5QKfS?_in-&n^yJq zdGTQGM6foId9=08NZ%PI+s^GpBtAWbSd__d&v3X!adPxZoFubPVjSOmqcak`dafxa zG|Uc5V}|EuGoM1}{Gk3h*rv*9Mz!5z-R|}f*+-7NWD}%&X1O-uE%2xjn(veFm zvX3-loVjkE*I5_NBit@v^!_ox`C&-{UU5gK6$qJl5a@T|?+_P>P9MP1YI#u(P55p? z7qzDSbRsP7X`qfEk{?juW_)GJoUvGGKK&MvAZV>+^Bxre*c1=-3Bz`J|j3 z8kxx$gT-#Qxw05W3Dh2kJ)LX@cQijP3Z<$k7rY-nPJ}7z*T&9XQ|~VP?W&YdxJ|KH z_)GBvxvf5YaXZl*e7&>Br_@ugtTUPlz6M7GEj7d`k3lq)9?FAQcRM``o(5Lye}4c= zGUQkkY!7zk-s83mX~Tw1h6dZA0bhZ;j-vEDI=;CeGq2XTwRo~@gY#ZpN%WA zQ|#Gh$*%AA-jVXru+ZBkF7HIP?qt=WAGs|p1y6-CsGqQ>9814*RrW-_74mNj?X9J=4bG6yvg@1L=kc%7ya z?Yv@+SqTG@V=?(58oYfoECv-FbSm(*tgu384Vf^K{z6p-^`?H6gxotD+FBWw-`n zeHvrF6DUJGg1sQ2@(z91Qg$K@`2^0K@f$t{JbRGP!$p~L8<_AFJ4!kk-lbH<1aY&m zynkcOiKHQL`N#5Ly~1%}eDKh*?p55{yl?Yg2l33ni)YpF+L!@MWqUucpr=t_w0a*u z4u+7f3Xnxc<^Il~M#-$Gk+T3%A@mGv9!WNaGpe#&+D$q2bcxPxy!=bQW={v#tOyv3I}I3T~(6troPG(D+P04$Wz+|NAY+~f1b3-RK0(< zxGSulIQ?7@Z_gX7+O67|b-y)??ih2#b>0pytldY(;z2NHc|u%R?*8TYQP<3G_*sW- zdE=udY*haTNbddCB!d2mGYyFi-jiAbl`Cc8Db^>&nk~KU=y%)M$0e-+?yIAH9&&_l z(o)OaO!)$iRXVT@^iaY=d3M7Q<`k0Utpwc!qwV>(bY?jb@a^O+;<4bDYmUrvM4Vu) zm?6tPyt8%rQfbL)0SWPT)snJS=hNVbS?7hnnUOBFT-rFtGosJqFNGMRNV?CCsB*dj zdC>OJ6+(YXOk&of#smgE`N^G<7^3)%wE2{q8-C}BFB4uD;~Qd92*{T4S&p5eg<66; z8_1Wxsh8{FMzrZ(y*sa&Rw*N2R!;slPzaMN7NCg|J`0FN2d4s(`CcFZB6CmsJ3<*) zXxTIBaA1Ti)OYniZ3bN*C;f5ukqb3A8$fispKNR>I3K(q1>g+Yvzm7D* zed!Nzt4(WBw;&?FRxjlI3VwEj%mi=w{*l!Vks~c_5-+oy(D0=TD~j%q9Y@WG6#(Df zXrbHzX~7RA`Lkm&J0ZL@g-!85+(8++YMYm)mi8KcA`QK}mks!V53AL1)S85^TMFaC zmWu>HyW2vTV|r?Jqtl`H00wf`s$T8NGU2<=SkkR~D-x#(0GIx+?+Y*u6R;J%;PNM& zA(e5j`0&u-Erux*Cva{;eJA;kI=_6icgJW+kz8-b-5({x{%w^fI2r?KiiT5(pZksn zUMrykVPzRM$$5&#i>RLFTnN(3tFKz08sj4mM6}uIc+OeZBEo*D+)6t^UI|1@=2n)o zDHIuidBdBnSAoI0!Zh){n9Ge2ub&1c3t=rj_XpT zDNU>><8ejaz-Pm;8TL=` zj@3&bL7G2I2>WZ@CXZl6GNt3e!`K-US^=az5NU(HF5BURU@Lj4#q1y`)wO# zMefv*VI~Zh)l#~?hmLL}sgP@f^1)~e`lP$=iMi5(00*Ak=kfaymhuK^E~T!yNd$Wb zMWKFWHmv{dlh-GDa|D#U)%FKtI@}aARmUiUAnbl;B#7>&*S>D&1$k8kWml?PXeNNW z=w)ymAfrDWBHUSm5dAds)7NOHJGph?=?5%nm8G3kT#phodCtMNC1Q);=2}fd^U5uG z3FR<(qnANroQ@*Kat^oK2N)qI3TcZ@`%4zd$BL$QpcSfo9?zexK^sk{Gxz`;3THg) z)J3l=n(t1#x8DN^j_6hK9p9(I@yQ$LyWn}tFh0ybsF9H{T@CIknx$~x66#eyIT=G` zJU+d7yp!;f*&b3#mt|hcOK_8rSh)7PnAi0l&|WuFJC4GZzd6Iy4vbc(KbdNfdJUu@ zU~al_Qw7ijZ%uW*Ni)&`?o1<2Sa8A9IKch}|jo0z?GEH3K@=vm`8 z$&Ybv^G2=L>V6YTg9d_L9rErK{Mj6!!AZsO4(&-T!4|}r>`46s9e1BO<@MbGEcz9v zMhf@M!@j!er-hl06uzD+>bu}glzb6B4M;Nq3pdf@SsF6)^HMDv`>M=SIq;Z?d zkI{n3Ry`_4G6{JO6P?@ue&r!7BV_H)3;OXGt(p1k#7L*a@#Jlm4j%nSn$rW@O_dW| zU=Dc>OC{rO0RXi$_a5WjDb@Ec5-F95p2;N099N5YjJ`CUTlVApbu)g_pJ*4e1{aK=JKo~1oP`O-8@7c2FCqL>qn>(V?%ZXKb zv=f<|jtzk2+@j%5N*-;H17)pBz@};JwSM@@kjN3Zy=0nu5r@VWd{eLV=ro z8C%51j<{ZtS51(r1PdF3((bojH&;|jaI0K0CKq91FEpa$oq=6qev2l>-V&}~!VXcD z(Lu{a$w{s6y89V>;((T4y(y9X4l7|kOsL*Z5oDJyzx&5zS5wy!uYW5d`SR?(*yQ2N zVa~nPuDM!Dr_u@i;|+to*(m#uOtF)IR=u)kruxSxqqLNI(+Fo+gb-7}Qpw%sW$YId z+D{ZJ?rpu&m&H`d>prPiO(xl)JF(gK!U@8wxLY$Kx9vdhpX%@4KlhPeg2S(}2XKJw zp=>zwQW#aDWH*K|AQQB8ydJ z3;IOzmWuc=Pb6Ij^X=e#ZGiPJHyUUu5ATJ$?~G6&iF2e7 zIkPr#NSkeI+C7xYIoJ*Y9ZMRmoz!lFmcS8KG`@vFO)P@9%UN9aFGB(pr;lX;rysN* zJ(I9g%!&YGlxuv!EOGB3G_Hi|4AqMvGP1|0*V#dczGHJ&0UF5P@zeC(EuVV!RfDqb zHCBgZU|Pn7vB6F|38Rhl1b_!C6hR4a;VqQ01Dsa&IqbLHsD4#ghANu1M&dxq28mNa z0{xKJzbBx>9i+Q5kPv7Dz?OFw&iL)7Sl5i~1WA~H9@55ykbloaG=4tb^_Ro&NriBk z5jRienZi%)TJ}p;@FrZyT+oky%CWEV-T_+O@N~5PS_80{&UgD+%RAE+E}lIe!{xSo zy`r$at@cnJf}b#IayMc@QMqyZFBj%; z=h^%MCAS~z)~YKEGGvKU1eXeu0_84zYdnDScUr?($#^ENB(b)4+9Vn->Blxk*2`Vs zRvAr4AKUMbmM>%nz~HV${soj9=E+k6047pe^=*KC@(>ec_(X<;Hhg=sZ?@uJACCb*u=mg4bi`-JD24 z+pp7`-VF{V3hkjYO6&L17<3~DaA#~MEi-6w98ZR1ZB5mTE?)9&}@v2Z{25Gi^-TYlU$jxVt z_Cd&Qr4;FwwkocAo1UO{kNO1zNzc+7>U&QZ|bK&$oiRG$Mm2aCCPNuM(YV! zmUfDs+0-+ZS1XYGVHe9|JJpVu`}7)kex2=OxzukTPN_s%h zRa$~X#_DqmR=&I&c4kDJSq@llaMPXHOuzLXj_DJ;;0PoAs%a7K%GlzUeDQ~Q3=_6b zY9!lA#aVxt$|SS36dDH3ClM>|L`FPIi)G=1H~NePTrNXlvW9fh=VD>PV;k3{JnlT$ zRiukE73obWnWGX(w+-fk^$jzAO`Syl(t|mHJss#x=5L1xnLmL_N9`s0;-@;tzf@4} z&L@{Y1RPG$LM&*Q+8H2bj3aaFa~jMK&Ft@G#ARt($rz3l$Gkjp%`i4X|8p?j=^5V& zL>rfWfzt9;(3}kQ;h%Df>Evm!21@?w9uKM+VYFAKUx*bN?@BIn1J_QSuxY*i|yPwav4&p=#oV~S3Dp&we6M@ zjQz@K>o@Qh#pwtF{JrM=7vxoM>WLbjmUM}}(w=S+K^vfl++F7KR5Vw)Z_w*tr*d!u zXUjeuRIes~DDFWJODF=kTM_d!4IBf=V%D#|ASe%e(Mq3NRg<;g#KQbn(LW6eJP znFx>X{m6P{wSSPdzp?%+XaK$Ch}L4`#*K~SZs;|9()%E!f!O6v)NvlU<_I>aJC%I@ z-O7lXT)SKZhsz!>S@Q}ievRqz3y&_hpy!TB_t*K&e|_D$&z-i_zZVt+5mXJ-jJFMcUL1{&#SS<`8a$RXj8?qlA#Yz6P-EC(n0{$QbbRdao=O*trp zSx4(zjO=h6o`(tS7iSH^o=wCK&E4B+(kKd^{82rLcoYN=y-i5paqTjp0fp%Vu&+k(mTp?-1dP@=^BsV zOlY)W@GBkqI|a>#&6;HAhQ+_n?#JaDNIYip+Sij1Lr@y@Z-WL}UA|lUmggEm@!&%s= z-d&K283vghJp`M<@;||GZ{Iqz4F)#K5vQ;y@^#m(RQIM))GI^7f{@i=&gv=Be982$ zI_ULZMLy3JqkXMKLvu2viy_I=y%T`?a4#wB((y{%2@!_FLCoI^@ef8}IOHbiVp-~0 zdI@S^x+}2O*CRa{r!hP!-2&+qLW{Wp)q2Y_P%j+@3j1{vv8?B#)?*yF^N~F(_T{ zIAh>L_6v8|dUWn!wyhlV$0j`kADZd->EME`h{@}&h=_@ZaKX*j%ee9gS(yIb^8c92 zY^m3+qLv%QrJrxo_ZAunZ1m{E>p1GBO?&IJaOh-`Pc;pPf0m0$g4r|G#gjpX~W8Jn^Vh@RukI@hM zADg1U6f^EJ$Ii_8U-i|JJy5cEV`)%wRE9d+E|IvP zPjEAwPWJyX$)};nc8g(@gt*_kL0}5Zd%3__ag>lCacN$Jr63-fr#RtM1FQE zuJYE^swG3M(~?yxzK{)8uun|B=POLvR&0fSWdWYzgbf%+ z6_Ua8@yQeV&%}zwojn{$i68Q0xi>4V{hZhdIsp6~P2VtXpatVZKI z?ojiG(^QdcSuD_?pws_*>@d zjM?f?C0aoKnb{05q(Qu%!G&l9Y7tc&RoryEmtmVa$=@~34o6Wvk zem>T#WwB0|J=8r42#66e32bsluqbt4FIon#m^LYgWY2EBi_+?=Gb)GfU>^NCOM!b@@f)8d~vI*C`PoX2#xM`7daGa?JIG;)XF zJKC2A&zfV}9q0a+#0{)q1!iT9*cJ|N;JouXRI$WHR`gcq*UUTHJ;*>>x}MB z=fNP+dIJ3&t#k+ljT!LSYFxH5Ir{tilns+oAog@=yXlBNZ=`psS2@Nhgl375$8S2? zZhc%QI1Jp(OsQCAEk=}9P0KNDNeAA{T{^QkpRl%PMwD*@Ws6h7URDH=cJ-SB_W5vt4?*T?0W& zM4qNZRHPOlqyP}YUs^xCOSh|KLi=N;9v(rdL_@uLHXbjGr!+s9YmeE|+BN*$`p&CEynHjs>o$K!8M0IPm}X{#pD1O4 z<~y=@Vwk)C-SEc#DxvKIgZ{ZpR3z!AvCQ>OxQ~A-@h;6Eo1d6@vghvs@^o@dR5hO% zfpSTISn<~RZT1pGM&?N;bL?h-RBKeZ^?+|v_aqIvWeY28o4|8A0(e#D~g8jGBCYB7A0hAN@ePs7+ zrebwZBBx_E3;xP*J&&2KU@Ll}SfJob4;SR1h7I$7O`1L0gHAJ-2aK>DO}9GfKH(p8 zY0NGWzAFCa-rnoCB15XehW7TiXO_QAeA}fW{@HIiQA+bEFcQP=AZxtd?ng!lF*`#Ph;qa-S2qdUoEqQ-yzn&4s~sUo}7>U*OA2g$}B*`W2LSC z_fNtf|M%xGpzQbT{Bs!P_UBFdb1e7YTT4j%cfeQPhW|;g*|+6KJ5&Edvg98zu9d%; zvG)Q>-t&a-3jaqLl$BFLSbG%!@lk#ZNMY$e^u+%6^Mf4#jh02u(pHIP{97ma{O*-e Ox^l_vBIf+<2mcFHu<5Y? literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..879c8f6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 25; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -51,7 +51,7 @@ int main(int argc, char* argv[]) { printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan @@ -64,21 +64,21 @@ int main(int argc, char* argv[]) { printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); @@ -137,14 +137,14 @@ int main(int argc, char* argv[]) { printDesc("work-efficient compact, power-of-two"); count = StreamCompaction::Efficient::compact(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); + printArray(count, c, true); printCmpLenResult(count, expectedCount, b, c); zeroArray(SIZE, c); printDesc("work-efficient compact, non-power-of-two"); count = StreamCompaction::Efficient::compact(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); + printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); system("pause"); // stop Win32 console from closing on exit diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..504514b 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -1,4 +1,5 @@ #include "common.h" +#include void checkCUDAErrorFn(const char *msg, const char *file, int line) { cudaError_t err = cudaGetLastError(); @@ -24,6 +25,12 @@ namespace StreamCompaction { */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { // TODO + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + bools[index] = idata[index] == 0 ? 0 : 1; } /** @@ -33,6 +40,14 @@ namespace StreamCompaction { __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { // TODO + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + if (bools[index] == 1) { + odata[indices[index]] = idata[index]; + } } } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..d7a39ae 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -4,47 +4,86 @@ #include "common.h" namespace StreamCompaction { - namespace CPU { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - - /** - * CPU scan (prefix sum). - * For performance analysis, this is supposed to be a simple for loop. - * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. - */ - void scan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - } - - /** - * CPU stream compaction without using the scan function. - * - * @returns the number of elements remaining after compaction. - */ - int compactWithoutScan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - return -1; - } - - /** - * CPU stream compaction using scan and scatter, like the parallel version. - * - * @returns the number of elements remaining after compaction. - */ - int compactWithScan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - return -1; - } - } + namespace CPU { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + + //helper function for stream compaction to remove timer error + void cpuScan(int n, int* odata, const int* idata) { + if (n > 0) { + odata[0] = 0; + + int prevSum = 0; + for (int i = 1; i < n; i++) { + odata[i] = idata[i - 1] + prevSum; + prevSum = odata[i]; + } + } + } + + /** + * CPU scan (prefix sum). + * For performance analysis, this is supposed to be a simple for loop. + * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. + */ + void scan(int n, int* odata, const int* idata) { + timer().startCpuTimer(); + // TODO + cpuScan(n, odata, idata); + timer().endCpuTimer(); + } + + /** + * CPU stream compaction without using the scan function. + * + * @returns the number of elements remaining after compaction. + */ + int compactWithoutScan(int n, int* odata, const int* idata) { + timer().startCpuTimer(); + // TODO + int trueCounts = 0; + for (int i = 0; i < n; i++) { + if (idata[i] != 0) { + odata[trueCounts] = idata[i]; + trueCounts++; + } + } + timer().endCpuTimer(); + return trueCounts; + } + + /** + * CPU stream compaction using scan and scatter, like the parallel version. + * + * @returns the number of elements remaining after compaction. + */ + int compactWithScan(int n, int* odata, const int* idata) { + timer().startCpuTimer(); + int* boolArr = new int[n]; + int* scanArr = new int[n]; + + for (int i = 0; i < n; i++) { + boolArr[i] = idata[i] == 0 ? 0 : 1; + } + + cpuScan(n, scanArr, boolArr); + + int trueCounts = 0; + for (int i = 0; i < n; i++) { + if (boolArr[i] == 1) { + trueCounts++; + odata[scanArr[i]] = idata[i]; + + } + } + delete[] boolArr; + delete[] scanArr; + timer().endCpuTimer(); + return trueCounts; + } + } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..523721f 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -2,39 +2,164 @@ #include #include "common.h" #include "efficient.h" +#include + +#define blockSize 128 +int* dev_idata; +int* dev_odata; +int* dev_scan_idata; +int* dev_boolArr; +int* dev_indexArr; namespace StreamCompaction { - namespace Efficient { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - - /** - * Performs prefix-sum (aka scan) on idata, storing the result into odata. - */ - void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - } - - /** - * Performs stream compaction on idata, storing the result into odata. - * All zeroes are discarded. - * - * @param n The number of elements in idata. - * @param odata The array into which to store elements. - * @param idata The array of elements to compact. - * @returns The number of elements remaining after compaction. - */ - int compact(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - return -1; - } - } + namespace Efficient { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + + __global__ void kernUpSweep(int n, int* idata, int d) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + if (index % (1 << (d + 1)) == 0) { + idata[index + (1 << (d + 1)) - 1] += idata[index + (1 << d) - 1]; + } + } + + __global__ void kernSetRootNode(int n, int* idata) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + idata[n - 1] = 0; + } + + __global__ void kernDownSweep(int n, int* idata, int d) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + if (index % ((1 << (d + 1))) == 0) { + int t = idata[index + (1 << d) - 1]; + idata[index + (1 << d) - 1] = idata[index + (1 << (d + 1)) - 1]; + idata[index + (1 << (d + 1)) - 1] += t; + } + } + + //helper function for stream compaction to remove timer error + void eff_scan(int n, int* odata, const int* idata) { + int log2n = ilog2ceil(n); + int sizeOfArr = 1 << log2n; + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + + cudaMalloc((void**)&dev_scan_idata, n * sizeof(int)); + cudaMemcpy(dev_scan_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + for (int d = 0; d <= log2n - 1; d++) { + kernUpSweep << > > (sizeOfArr, dev_scan_idata, d); + } + + kernSetRootNode << <1, 1 >> > (sizeOfArr, dev_scan_idata); + + for (int d = log2n - 1; d >= 0; d--) { + kernDownSweep << > > (sizeOfArr, dev_scan_idata, d); + } + + cudaMemcpy(odata, dev_scan_idata, n * sizeof(int), cudaMemcpyDeviceToHost); + cudaFree(dev_scan_idata); + } + + /** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + */ + void scan(int n, int* odata, const int* idata) { + + int log2n = ilog2ceil(n); + int sizeOfArr = 1 << log2n; + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + + cudaMalloc((void**)&dev_scan_idata, n * sizeof(int)); + cudaMemcpy(dev_scan_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + timer().startGpuTimer(); + for (int d = 0; d <= log2n - 1; d++) { + kernUpSweep << > > (sizeOfArr, dev_scan_idata, d); + } + + kernSetRootNode << <1, 1 >> > (sizeOfArr, dev_scan_idata); + + for (int d = log2n - 1; d >= 0; d--) { + kernDownSweep << > > (sizeOfArr, dev_scan_idata, d); + } + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_scan_idata, n * sizeof(int), cudaMemcpyDeviceToHost); + cudaFree(dev_scan_idata); + + } + + /** + * Performs stream compaction on idata, storing the result into odata. + * All zeroes are discarded. + * + * @param n The number of elements in idata. + * @param odata The array into which to store elements. + * @param idata The array of elements to compact. + * @returns The number of elements remaining after compaction. + */ + int compact(int n, int* odata, const int* idata) { + + // TODO + + int log2n = ilog2ceil(n); + int sizeOfArr = 1 << log2n; + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + cudaMalloc((void**)&dev_boolArr, sizeOfArr * sizeof(int)); + cudaMalloc((void**)&dev_indexArr, sizeOfArr * sizeof(int)); + cudaMalloc((void**)&dev_odata, sizeof(int) * n); + + timer().startGpuTimer(); + StreamCompaction::Common::kernMapToBoolean << > > (sizeOfArr, dev_boolArr, dev_idata); + + eff_scan(n, dev_indexArr, dev_boolArr); + + StreamCompaction::Common::kernScatter << > > (n, dev_odata, dev_idata, dev_boolArr, dev_indexArr); + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + + int* indices = new int[n]; + int count = 0; + cudaMemcpy(indices, dev_indexArr, n * sizeof(int), cudaMemcpyDeviceToHost); + + cudaFree(dev_idata); + cudaFree(dev_odata); + cudaFree(dev_boolArr); + cudaFree(dev_indexArr); + + + if (idata[n - 1] == 0) { + count = indices[n - 1]; + } + else { + count = indices[n - 1] + 1; + } + + delete[] indices; + return count; + } + } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..482a858 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -2,24 +2,85 @@ #include #include "common.h" #include "naive.h" +#include + +#define blockSize 128 +int* dev_bufferA; +int* dev_bufferB; + namespace StreamCompaction { - namespace Naive { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - // TODO: __global__ - - /** - * Performs prefix-sum (aka scan) on idata, storing the result into odata. - */ - void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - } - } + namespace Naive { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + // TODO: __global__ + __global__ void kernScanIteration(int n, int* odata, int* idata, int d) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + if (index >= (1 << (d-1))) { + odata[index] = idata[index - (1 << (d - 1))] + idata[index]; + } + else { + odata[index] = idata[index]; + } + } + + __global__ void kernCopyExclusive(int n, int* exclusive, int* inclusive) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + if (index >= n) { + return; + } + + if (index == 0) { + exclusive[index] = 0; + } + else { + exclusive[index] = inclusive[index - 1]; + } + } + + /** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + */ + void scan(int n, int* odata, const int* idata) { + if (n == 0) { + return; + } + + cudaMalloc((void**)&dev_bufferA, n * sizeof(int)); + cudaMalloc((void**)&dev_bufferB, n * sizeof(int)); + cudaMemcpy(dev_bufferA, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + timer().startGpuTimer(); + int log2n = ilog2ceil(n); + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + + for (int d = 1; d <= log2n; d++) { + kernScanIteration << > > (n, dev_bufferB, dev_bufferA, d); + + if (d < log2n) { + int* tempPtr = dev_bufferB; + dev_bufferB = dev_bufferA; + dev_bufferA = tempPtr; + } + + } + //the inclusive scan is stored in bufferB + kernCopyExclusive << > > (n, dev_bufferA, dev_bufferB); + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_bufferA, n * sizeof(int), cudaMemcpyDeviceToHost); + cudaFree(dev_bufferB); + cudaFree(dev_bufferA); + + + } + } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..17fb36b 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -7,22 +7,28 @@ #include "thrust.h" namespace StreamCompaction { - namespace Thrust { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - /** - * Performs prefix-sum (aka scan) on idata, storing the result into odata. - */ - void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO use `thrust::exclusive_scan` - // example: for device_vectors dv_in and dv_out: - // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); - timer().endGpuTimer(); - } - } + namespace Thrust { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + /** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + */ + void scan(int n, int* odata, const int* idata) { + + // TODO use `thrust::exclusive_scan` + // example: for device_vectors dv_in and dv_out: + // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + thrust::device_vector dev_odata(odata, odata + n); + thrust::device_vector dev_idata(idata, idata + n); + timer().startGpuTimer(); + thrust::exclusive_scan(dev_idata.begin(), dev_idata.end(), dev_odata.begin()); + timer().endGpuTimer(); + thrust::copy(dev_odata.begin(), dev_odata.end(), odata); + + } + } } From b10eef46b163974c89759a25286012c1a173efaf Mon Sep 17 00:00:00 2001 From: Terrence Huang Date: Sun, 18 Sep 2022 20:51:46 -0400 Subject: [PATCH 2/5] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 94aa9e4..131b6cc 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ CUDA Stream Compaction * Tested on: Windows 11, i9-10900K @ 4.9GHz 32GB, RTX3080 10GB; Compute Capability: 8.6 ###Project Description - +``` Stream compaction is an algorithm to produce a smaller output array that contains the indices of the desired elements from the input array; such an algorithm will come in handy in ray path tracing of computer graphics or huge sparse matrix compression in AI. The performance of element selection is extremely important due to the enormous quantity of data pieces that need to be filtered. @@ -20,7 +20,7 @@ The following perfomance analysis of scan and stream compaction will show the be ###Performance Analysis - +``` !["Scan"](img/scan.png) !["Stream Compaction"](img/comp.png) As the charts are shown, when array size is large, both naive and work-efficient algorithm of GPU out-perform the CPU implemtation. From 39d8fef210f97c65fd33dfddef8a9173d12a0542 Mon Sep 17 00:00:00 2001 From: Terrence Huang Date: Sun, 18 Sep 2022 20:52:16 -0400 Subject: [PATCH 3/5] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 131b6cc..73b1c2e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ CUDA Stream Compaction * [LinkedIn](https://www.linkedin.com/in/guanlin-huang-4406668502/), [personal website](virulentkid.github.io/personal_web/index.html) * Tested on: Windows 11, i9-10900K @ 4.9GHz 32GB, RTX3080 10GB; Compute Capability: 8.6 -###Project Description +### Project Description ``` Stream compaction is an algorithm to produce a smaller output array that contains the indices of the desired elements from the input array; such an algorithm will come in handy in ray path tracing of computer graphics or huge sparse matrix compression in AI. @@ -19,7 +19,7 @@ Here is an visual representation of that algorithm: The following perfomance analysis of scan and stream compaction will show the benefit of using GPU comparing to CPU only. -###Performance Analysis +### Performance Analysis ``` !["Scan"](img/scan.png) !["Stream Compaction"](img/comp.png) From c766b051187736e0777afe1de58253c749a06c07 Mon Sep 17 00:00:00 2001 From: Terrence Huang Date: Sun, 18 Sep 2022 20:52:42 -0400 Subject: [PATCH 4/5] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 73b1c2e..4a3e4e0 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ CUDA Stream Compaction * Tested on: Windows 11, i9-10900K @ 4.9GHz 32GB, RTX3080 10GB; Compute Capability: 8.6 ### Project Description -``` + Stream compaction is an algorithm to produce a smaller output array that contains the indices of the desired elements from the input array; such an algorithm will come in handy in ray path tracing of computer graphics or huge sparse matrix compression in AI. The performance of element selection is extremely important due to the enormous quantity of data pieces that need to be filtered. @@ -20,7 +20,7 @@ The following perfomance analysis of scan and stream compaction will show the be ### Performance Analysis -``` + !["Scan"](img/scan.png) !["Stream Compaction"](img/comp.png) As the charts are shown, when array size is large, both naive and work-efficient algorithm of GPU out-perform the CPU implemtation. From 8897356983ec27eba37d652ef6b8b955faf88747 Mon Sep 17 00:00:00 2001 From: Terrence Huang <39715359+VirulentKid@users.noreply.github.com> Date: Sun, 18 Sep 2022 20:55:08 -0400 Subject: [PATCH 5/5] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4a3e4e0..48744cf 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ CUDA Stream Compaction * [LinkedIn](https://www.linkedin.com/in/guanlin-huang-4406668502/), [personal website](virulentkid.github.io/personal_web/index.html) * Tested on: Windows 11, i9-10900K @ 4.9GHz 32GB, RTX3080 10GB; Compute Capability: 8.6 -### Project Description +## Project Description Stream compaction is an algorithm to produce a smaller output array that contains the indices of the desired elements from the input array; such an algorithm will come in handy in ray path tracing of computer graphics or huge sparse matrix compression in AI. @@ -15,17 +15,19 @@ The performance of element selection is extremely important due to the enormous Modern Graphics Processing Units (GPUs) have been utilized more frequently lately to speed up the processing of extremely big, concurrent data applications. In this Project, the stream compaction algorithm is implemented in conjunction of an algorithm called prefix-sum, or, "scan." Here is an visual representation of that algorithm: + !["Scan Algorithm"](img/figure-39-2.jpg) + The following perfomance analysis of scan and stream compaction will show the benefit of using GPU comparing to CPU only. -### Performance Analysis +## Performance Analysis !["Scan"](img/scan.png) !["Stream Compaction"](img/comp.png) As the charts are shown, when array size is large, both naive and work-efficient algorithm of GPU out-perform the CPU implemtation. -##Performance Bottleneck +### Performance Bottleneck * GPU-based implementations are constrained by global memory reading performance at small array sizes because of no optimization of using share memory. However, due to the advantages of parallel processing, GPU implementations see a less drastic rise in runtime comparing to the CPU one. @@ -90,4 +92,4 @@ However, due to the advantages of parallel processing, GPU implementations see a elapsed time: 16.0944ms (CUDA Measured) [ 2 1 3 1 3 2 1 2 2 2 3 3 3 ... 3 2 ] passed -Press any key to continue . . . \ No newline at end of file +Press any key to continue . . .