From cdf955b34ea779138f5617dff97f300348b27da1 Mon Sep 17 00:00:00 2001 From: StepanovPlaton Date: Mon, 17 Nov 2025 20:47:42 +0400 Subject: [PATCH] Work --- src/tensor/cpu/tensor.tpp | 5 +- src/tensor/main | Bin 189680 -> 0 bytes src/tensor/opencl/opencl.cpp | 3 +- src/tensor/opencl/tensor.hpp | 107 +++++++++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+), 5 deletions(-) delete mode 100755 src/tensor/main diff --git a/src/tensor/cpu/tensor.tpp b/src/tensor/cpu/tensor.tpp index 5762253..0f3fea7 100644 --- a/src/tensor/cpu/tensor.tpp +++ b/src/tensor/cpu/tensor.tpp @@ -8,10 +8,7 @@ // ===== CONSTRUCTORS ===== template Tensor::Tensor(const std::array &shape) : ITensor(shape) { - size_t size = 1; - for (size_t dim : shape) - size *= dim; - data_.resize(size); + data_.resize(getSize()); } template Tensor::Tensor(const std::array &shape, T value) diff --git a/src/tensor/main b/src/tensor/main deleted file mode 100755 index 45dd939924a39582cd1b9e1ed4a41bcf991adabb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189680 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 |1-i;}dk1K9JsHBYYLX_2|8Z z#t*!T?3M&7h3>}ln{oX|e1)SxXIhKqnZ|d#3N;1~$s=VlgYe2d6fxfo$@?YsXkUR= zrZ<)vU-L@TDm+9}%2N$-^8!e}l42GP@}I9GFID!I81zAKAuG~3RdI^B))1eeQ7i=O$ugL-hE&Qg8=@|H z6@MADw@OlF%8GT+5O1vq>mx8OJFH_Ue^oA#>wCeUXqO1<4$)s=xW;P-)rR|^)9#ap zu+N&Dtp=!$4XZ+uZ+bJ5T_PEFB#Carq&Os5REjjnB|dDXNuxoS9C}kdbC0`ig?=@1-NxbH<64>E-?-riirFR ze0^hUU_<0!;CL<@??YytVGnCGh=C$loDMc4IQf6k(|; zzJCXVF97~fg1}X~qPM~sTTM}z2bMb>(Q?UjY~Wsk(w;s{W88Y#i5pp$X7tH zrj!QV|1vJ~79AW7<`y%bQbc|b?Dt87+~cYg*bT&k++tNDgx>(XUXnoXb~9?ar^KmL z1t$FEaQL|?8O_`uqCUu-dO({Iqc{=yOx8%kJJXP1$|UavLVw!~Q+SG7?0Q~%IssUo zZG_2Zw#Hz$2!O8CUk2>qVtu+-W{h%+){koat-!Vy>(dP~BiAk5RrH$Z1h6y3`Vyb! z7Dw7)MoVS$J+Pl0efi!pW3gLoM!VrbIhbVNP(`3x$@ApE<8Bc`t37(zP@+S46ZV*V zrIYcpTYO(1gcN{%Z33%Aucr!n!2KHV$C zRT|_hlW)2*stIxbPny&ggq|fxGF$4sI0jy()&dJBo({$Yhea0+^=?F?s}S_JCint? zOKbv*{BsPFJuXBVx~8!X@@+OI+qUk&+us9vPKddrK5miCB z4DeTnKr;$$W*1e`Qp5eyO|U|cVl7Hlc2-$z#bp%v#P^`yG~DT*gV7SSjt*7!Ir9#T zDM5W)?!#!#bkExu3PQR~VrF4y;N!SE5fffAZp;Ek15j}xb5+l0W9!j7j8$aSE(2iRtuH`7+l-3?V4#!Mk&br$yr)nHeHZ6 z1&Sp@HK7I(4#@hN9t~`FpqPuS8OND;iMHYwnp(Xom*_Pj@(!2hBO) zemz5TW&&SYg2N@T`Z<_1@M5)<9R}fSNs^p8)t}w~ zmOkeVzGehCq1K| zFxH~6#zD0+4&y06YDO-LkeIA`E-~>^i@&bn$2njPx0zTrEeAAQ7#?(TO7cEHvmN*l zmx+uO#<`uCldZ4;zKQHI&)3LYS?eLW%z5q<9@oBLoyi384QRH0`#jvn>j2)IiglcR z9e^DF?AHN&3|85%1GoXic^yE~5KMz%BOZrwFC61^#);#+4nW$qUkC7HPr&`axy#mY zUI&m<6)zx$BF_Odjo^te=)4Z#i8Cr0{t%!?9oT*yK;pX!ehJ8H4oa^Bkjp*~4SH>? z75IuPz}=BMqmU3@2M~qv$9^3E{iwoz9YAy3sQ3hC7;wJ)b)49*1NhHMv}1Z50MX^^ z07$}We|;Lv%1eSfkVW|iehcI+Gg&Eg?~K)s`vw&Jpd_CtwEl?xUxb|pd{jmE_vh~2 zB)i!qn@u1IAp{Zvgc6!`L5fP34kChdDAr{qD5?!Kqw^vemf*Y&d~YV9dG`V{7XE(i5L_LK;o*;DfLt-NAZJWr+| z))N8eG37$Ir)1R&lrVnHLjNb_AMPnRk%z{8@#`1*Kb!GqPf61iy#K-PaQVL&+7I`X z?3cs65Wmv`{mh<{)?Y9Ug7eLRms3t=IrqxGx2I$gMWf&z1@UZ%vIz+HlD3B=a7$=pFKGjXVQ3o*TJrR6)R$DE|zjPG|GmnQlibZUc> zll83!dK$;qp~$O5wAQ9kTQ_CS#1%}_OFzY%3R=E^g5OJ}R8tNr<$0L0l~Rso@Xh-$ za6+xo-=m2|o2*YNG1UWy{!rwK^+;DRn_(Kgu>}7!vc6OYIsv~ULVvpe;!LLtng!L) z97b0zEsFBF?1=o zIj8efyxzq5<3Q7k+1}PoC<1Nw?@2Qnoi&Exg4R!Iu}O%{4L;}N$ji%G0ZjHh(pfdI z-ci)!rOuY`jOjhZb-2Th#MiswUgSJ>1KUlvwP3Bka~cKPbt_RDto@w#0D8tb53bMs zbsl{ejU%OYfh=FbC34|IaL+oz_PI0fb8a2Z&GNJ!o_W*unEj2Zb6D1!q+4%pb^@>^ zuH_eW6|=olA2J_-)~Lti-@b+W%lbst@Il^~xZa{#1)V#cJCp7yj-HTB+Zoe&Fxrt7 z9pjC!2Mep?ndBRuFk!LY#r9zNhRR!KYcy*eU9rYNr%NqK#Zg>xA1A(DmxK{RL-eo)WRCjeT z{XbemyiaqpE~Ytl1|Fs`6O`iR9i*WKV*3C6wvy^*4Qh;9-ZwUN!v@-n`~Mm-Qy!s+ zk_)oB#hLCu)z28^<$s)ZxA`eF*{{&(>tB>;eG&n-JeR_0ladv+1;M`-;`r@ zr<-*Q$&jJ(!u-qX-U`gdYRX?-$?MHoT3fxiwrVB~Ccni&lxM`r`uG7BI}+hF0Ifw^ z@N#iksa4DeU)@ZnQMFxhFKOA86}#3;${eih zEh%kVcjjf%Cb#-n2ATBd%fUHf?8Pj1?)exyChGQTZoIBcdBK@YPNaK%+O`^X>?Isx z`#QMBa$aG~5*Mbm6C2;1zevuqGjP(r879PD#~ajU{W;kaEFkMhdhX|(Xx34)PB3xx zqOD_D%fGaL=j$(;^~^b#D5BQ4cJgo9!Cxf*qn+}}fBs`8pPY*m)S45Wgtm{hJhvXg z$!?>M5k~Jrzi>8ZVt zOWNk@QyN+PUs~k-kMaMX@&9-5zh8GQZ5x#FXf&1?ujZu~}HI;{^&UVkg`rM@5+yq@hz zcBEX=rIWrk7C)H~?0CJTYo`Ik%dTK3>DH+wo_5_yN%u}?%Ux4wB|SU+u@+vFV!gI}4&Y<@5@|)d?Rh~>mK;;QD+7`;U{Y}fJp)= zS&q0&ooT4F1$E|~>3*g!wj8GxaPYg-EHjC&tdMX@La&^Q2jb;drLX^8CA8D;ChleYVH=7@9m*3X>sGNxu= z<`|i3aytPB{mj5$m;u7|+`#Am>SxfiK<94I+AtZZmaVYP?AFg5$<0j|=L0U=LvUDU zc2ZI`s5^h-7v%=$MJ%i{?>+AA#dON?YZ3VGQD<(-^Ns8eU|;|;VLubY-|mf?hTp8f ze~&uzVNX9<%K&IMr%je)_jT^QpLy&=KiG#sZwk#?jj+yan&XH4A%I=Gn+@ws2fBNk z3sFig1=(Ei!uB==($93d)3?+DKu3X;?>;D~Gdt-RY(Fy;z~}(9M?X_Jmhy@#N1A4F zD z+=px6n=ZRhDLggrcqz;nN+-Ic&%28Jq|vjzDZ9*~j)9jJ`b}uv1%4CKpfv1uH_*(S zwHUesii}uKHU>>dt3#i}^`*ea`RGBl3Jni*tDbuj^*gv#e_q!EIzNH_LmG$5R@j7& z5IDG1Pd>=QI2Gsf5*+ftVH29WmJODuJALr$FMk`cunGOXhA|FdI8*SO8Tjwfgs%F+ zH?kDK`2i@?gnroR8@U<3y956{no!$eezINw@TNdYmLo3H?H;PM1>LTW=(chH3rvhW zw{iD0!X|VlBT1WpN&qziWz2?6==oMO=txJG?ksR z9KaO;$ZJBX4dKiL`%lQ$f!%@F;oS!p`E^DURbicZ>P<{-1M`VYX+2_CXYQHEtpZnv zDr$Y4#qtj8OpHmPu+F@xdMv8u(ncC*Sa2}B`|l~W>dZdegoJU%a5*#thjpe4wekYg zofGj}Ab%UNu+E%9Nor=rxeUMS0{=bg%&6;qBM$@E5P&ju=AMUrBk$t(S>V4%ooV_! zq2TBI!zGs-w8?VBW$Mg#N?TB8B6J5f?(Mq$3YEiC}BbPr2Gohi-rEnNrT);%l*b>_d+W0jq=3BU^h$g4A|4YlfwvUTA1+x$9{ z;_=Kr671H`^nD#u`Tt?{4-|P%9ZAs7{C+DBcer*6eEzR~=75_$pfdsVRB3!>JEfq` z?AFgLTkc_;a{yixg2Ot~nA*Ba?cx^v?v%fcSXgI1Ka>UTB;9!)zt;o*J?hN2SNlf3 z0q|1*%G8;^R{2Kqh)sRS2C_$;`Gs4D((mj8U_XJBEJs|X&g|CDyv+^P#(f5u+0szl zJ&mx=+%>@u`&0si>kX&Rb;$Q|(*jS!dIx9IQf zlwkgo$8hiImX&qwS6ZLZsZgqFIBJzFEO{>-C&{w*uFN zsfYaNAJ_30i~gg(Xmr$mL|D^rts~KkM_Q+w4zYlVNAQ;)om6c79wdWW=Vu+egs0Gb zJHR(jWL?73lT*>XiqBd*tVvmz{3_9`KaorUB=_;#_(*k0Z`sB(UT_dkFPW6{Qplmd#O*E%vzR zQQOmG8w#puxf7;y)cf@Q0?q5(S z$PwD%)4woR2$TMfMD$PPXf}s0g)`LcUpH$FK2bAHJGVuLD21-(fu?mQ@8p#IEkX3J z=UyrPd-ws_^_)xbtivVy6w)y;tA0!Prp<3-v^Qvhy(85PDjnT{?XW!hTlhny%ue zH>j5tdZ*u`%?#>mg#qaeTM_oR!tnI34mV-B=jq4Lw__mJ-aKyfV%r29GO0n z(jGL(#(MT^&db~c1`W1S$#rh}6-FI{4vKXJIX~Tlan7KjiL&c?SDJ4ABEpCQO{gtN zpZPt)$kf*er>C>%`3H@%I%lNcpt=njlNx}5W$E5BFtJWG2L6-&@EU|k#Ut@qk^ZAT z!sPlB5Uxw7-awdQqqjEwF}J5dQ{$=*ccsr>fiSJ!6kzMq+bR*J+o*0xZ*>q3x5Cru z6TU_`GH=CoOz5SrQPv$ByXFS!pvi7Ufep^Fg%{J?+_;|OiZ*U$;o`xLb0IFV%V}M< z!W3QdI?ij{l$;yMSr-#4r{s&CB$7j(cGCyqBy#LUdOk|?ghhuP4(fi-!r?;6)dLhA zLxUXhf}50%-Ud4M;swzVSX^?^rBP6CL@a8pP&Oi7{GOkR-!{*0Q|KqP5hnkVN<165 z$#eM^{PR5kMVBgdYrVMr6?mFUoYK2-zr%Ac`sX-=sg9%0q4gC6ul%x-BhkdvB#IhQ z8HV)Xs02_43uQB74`|WWC7^mbHYu}&(#6E;%fc4AfgwkG7FLE9EGMIWV79O(DNi5p z;`gwiwes}+eeiqK^LsV$GexhQgY)NJM*SFCw}$=P+As!0rJH<^f8|zPYMNId9-wF> z4^=~6^DMWMrz(YClFz9ezVXbDke@9hDLN8OYz)}^ZgoH%<0jkjuOJre1zGg6V*00N z>UsfePKGh{?B(Cv3)CDpxsHFCdPYbaUMA3@2TACVUp!Nvga8|%{J}rqcbuE-%fAdn z=%zda*1u>Uy2>H_yy6I7e|Q<~6}!4g+qF~=dKT!(wjB(R6&qni!&J{)gxBe|yr+c$ zcwXJ!#p^2TwRjJ&m-F$OY7MU3!{CqHiHE#ytJ!_KYZa|J5U;|h^?Nr|%VeC~OiXK% zUUyD7)^t56#|r7bOIf!Tw;hK`PhE(RYlUb!`*wtc6=LaW_aG##kW6=?4e&W8Wn6yx zFS3?z4N0h*evk+r_$hSUa>9NHKX)82NU-T+M-K0*Us!lg0<_FbFscyG3 zah-2keg3f|=2x4RD~Pcz8B?7^Ysey-F%QZ$%xT*mO|@Z&GUP0qr*8#XUZE-*Om$5e z{zq8-U-zP4bft24wpZv4uOa|j@|Lst=#{+6uey^=y=^1dQ%GCwY{?dV*cz{kos>=_ zIVAKGXJU$R(GLP#;pAzQa?0+2>N+*}{a~YbrMxmpvb?S?kz)x3WCV=+Mi11#8;Y9f$S@ z4fQAOcJdAr?t5=5mbbKrh1$ZHwuf{<`{{=Ilf$e~+cR#xpDfm&v@Zy?J?|YY(f*>L z{-k|dsO=fI-aCr*C+!zPZR?${$H5^5PDB06<-1Tllc63c-zgSIM)ZmD1LASFi584DhPu%c^nzb&59euQ9RS=wYdRya64N7g1;VO;uRS({>o zL(*$xZJHIvrw^628CEzn{hh4Mw8Dh+d9rq_6(*YM6B{9&lBXWA4H;>R)LVRWOkOv< z78P~JIrh>uJRmICMH^^ZPov@NhbX&Y&5CulV)ic!;hUH0M8@oIXyn7H%QSq>KK^m| z7IoER$)fjeNskL>I!roLN zzIA@iKt{JQeNHYlqAnM4vH#?9v7)%6W5av6E1zMhC&tsijiuW3v~TClmI=w#0#kt1>nmG124N#w}fg5mIS9af&bXcymtDDg_@H;R5# zeXmsJQo5r`y^=WoX!r&;_nW?Z9K(sx3Hzjy&VGTn2l+`^GwC}%La0}70z%AtaJ_>7 z?1O8LX_-qY48PA!J%U?o1D8u}?R*2y?u_@g#}};|4D18%uJM)pbTP5-xxVS-w|frX zPa_5TS5fBO7$B;D;r2PEzCB^AO0F8Hn4-%XpzyJGf800Y{Fa)J0_ER^foYl4d%S=fuxWZtst8HRuE=Bd0_3ajXNU1(A44XkImwi(_PS}!_+Vi>;D zO{utFl(Ry&7gKcaRQy^;?WkyHpyGGwXT67C7jMiMUyX`7|I8DPDcZ0ZKwD3_aVZG zWu6^C>3c9zH-aeinM;E)>4$B zmu|=JYsWfiO^a8P+P195`J18&{?y*I$|aLzKRK^Z=Z62-=o$WW>(mOEJu%fkDccs> zVWn2aWc*F_fI)bjYH!_N?e5id^+mM0gLCui-b_RLsf<`B?F@%W_pL;zlhVWw&A!V# zq&!#Z?>KXNGN(|JH*w(#{92$H(`=BPQqoL^ZJ9VWhM%~NsvbK?+^_ZF4i;K7FWGAd zdEA%+1sp$Iu9`#|e<{^r+(`FA9Gv-FO!bwsaCyX5;MJjP(VTo-M|*|$NXGeT;x}%r z=e#v^uKs5R&fj{CAapG{>Qr3&diC(1jPorN^|*aJ8x7X@@o>bMm?By?Tww>B27uDrSWn99^lQdBPI~Cw{9C_UH$Gsh~Bkwchw@172Ec|g7r~=Qz>fJ1O zxl%Ot4gii9$xQ-C&ujR$l@;yx0Dx{D;NuV=&cx;@6)z11kmIJ+hW-iwrs!y8%Kl!a z)LrWvHpkrj5#`#}R>$$@&IHd(}(UcXG}YSL(zfH9cLl=qhy#bY)S0DRmg^#qp2DT<<@+vx^}WW}op345z{OU{)a0&Q z^gYCsEw9CNHDC@c^~OJ=UV(4mjd>>i%tr0{C9AJPcX=cD()y2ze|tQ9 zgZi(Ff7*dBtN)eww&d)DM)mI!f7TTE#--1RKZ>4XLPhCE;#0y`mi{LG%+F{JZHw%{ za6j7l#P)@%eA)HMpNSnjz8-hViTil`8N&A{v4h8+!tdve!AgYhh22`-*xJ(;Byw#F#zawkiUr&z+?7b()@* z(!x$5;yU3fH3u#wF{Z=hViIFI zlP<19ty0!ar#8iPFjY$DR;47y)RV;Zek~@qxQ>3Zrvt?eH<;9C!fBOFN+%qpI&g{U z9ba58@KRa=lWNK(rUQ54I{BxkxRlNiN{NfUfTnE-`IIjO#R; zn2sQd>)@KyR^jB4(g_|h?ZAj@4{GYDW4LV7<$-xXH3?C^WwnE+j`;o zr=9gZ@xKJW8+Y^f4g~f4!v`6oO@hwtc&!h-y-|RN>6g2Zs&Ds) zyo&!eVOl88cJi>jmft#K^YacQ&&Z@mzWsClD;P5#7HZn-J-Rb7|NC_T$`RP91W}zq zX+elHBfa!vFGU=*Yf%G0j1o%aZFj1e_J3XrJ2O3JO8|8(bS|*PdqAz#x#_>J51>&C zy$0AVA=DO&XLUjPu%-bt%R-+A_WJJ7;#KX5z?sfTKrQBL{C^Y1=8b3WyMbVCY`v5G z)dxg5bJs#ksNLm|mp8>1uK+bXw|@semj~l@C^T~%Wh3Dr^=S6uTbJy8ZMWWNyW*|S z0Y@F{y>~Hj1#y{kJuS8I^tc+*9D;A4Ml!u_V;g?_3|zN4^>O+WKjX}6LdQEj(ZF_% z^VX23(~~9Y`brx8z#Sk~n!S88(cOZYnt5ctD$Hq8ZFH4-tH#+qKfw7r{QeC6?HyxI zBZXV!{-+&%$i2*jLXmw`eH+Oq*4)u~P)GTbF?K+1 zOX2VnOl(%SPcHLdSAbCO>y?9Tz|)%-Y{y0Qf(C4R-^Y;E7kja_4S0HW!5nTT9?G$( zPeFWK1pw?p^ju)N@puui&|-C5v3d1Zf99pgxdZ=)gt4{T zMzUDz%3_O3KfB&D=WNAaH>z3*DOT4OJEQ(Zm-=>o!QbJgR@;u2iN?;Y-{>(PQ;L7n zJup|&W5$-3>Kt)f;CkL1D2y#|FFrrW&gJ!cZujj>#a}np+F{vrU0uHcMWK>%mg2uW z#CU19=~`X-Wj#Nvb@=N>Tswbky4KY{w$QipGXC%EVaKNH?)o+N`j{W^|7&+ldv$`- z2N$P*4m&|xBn>IACXiRZii^1u#&Tm%lR&kG$Z)(SL$(u?P`eYfCG>xGf(jz0jxR23 zN?htcxTQ4MN@;6;>RI}qln!=?=>UYd&Rj_8@CN%Vm^%A%JRTHIo8Nm{PM4U(nD$G@ zwIe#FwOpz1HOSM#zm!C8x>P;u2qt={u-NY|)+2yxTrI5X;p56`txBW7K*EywMT zmAogvkDL!nyeK&I;ND%jT${4{AclJt!#&g;e|?Xgh=t<|K4b!j27Io38VK$tF2%|yEocHLc6Ml z3<2ugAFX$ga?>OSQP(zND6)l%&6oFYCpq?%-7S`B1CbhVCDbDVHxY$H2BdsQ>h1=KQ6uCceKN zlO`RdJ$fzen(Z>_yt{<@&;P4XLK=xRTuf4DPJRgI{=&r?o<$?Wz$~3Q+1M6ZQU|0) zA0?DhE*3N#P_s#srkKczruJymGU+#?<8K9|Gn9}*q7D~Eh%@N*;B2C@-iYj9A9Yi% z`TeVL{`anTudKI5i!)`tHQFpw)?1?;B~*>xNKwBLEx7wMrDgx=#@vd%$VM(Unpr_K zvu~@+RhVT8@3!VFk>vkgT*-|T+*3)K3xlRwrdAwG0&g}Uw z_~&POm-bF`ZTl}6yvhm(+A{zS)Yz~YYO`uE&5s_&{+v~R;W}Ua>q71k&X|5*(jsDm z?Rfm80A1jt2OVW%L+sR*T#`_meqU#dMoj%Iln-in88+R~_;e5iawj5;f*A&xHkGxM zvN*m_O2wO{)DE9HK*)Yt7Q!VkG$o$>Z~Qb9Qp|L-N(uLFT)7>X4UqdV!j~{RAbv^h ztVujUsZ?^Yr8u^BW3!uT%9H_Z7$|6+*nUt#8i~4GO!DJn7^T2Prg5&iI#U%A)ae=rSxmW{Ti9ttg9g4MYVV@?-q*L!XPJrY8 z2`C|j#N}K}@}$|^3gF!BTxv&v*8X+0OlLHi12ymAZr~nPgT(Jc@6R}^xn$A|E)kE9X9%bynx2@ z&~AZb{aeQmq2*D}U z%`>nU3%S5voe!d|+=W2)MP1+Oa?e4S3^QKB<+X&NH`cNg=vS`B@l>EXK%>;Dg^2$< ztOueE+%h1SfW1KGs}a`2+#{i5ElU-z`gI}I+%a{WG4AraPOamNjx6t8#~I=DRz?xs z)jmia(!3|>*#X|@j5eJfsO52?=MkBU!mqx&1}`^x?ilM7S0BMogPzSHobclAB%a>w zuUokfDj`OlI{Jc!PTz(arc*E9U1P8uDnBt&z}-gIR-WJs6Ga?`PtkKB*m-CZ+sC*fo+4BYdBrtY+DW@lwik;;7uHofsbsI`|cZo&5F ztV(Rgs!Y5eVKEfso`#TeVW8&fC&v3q8IG}G%#yi-fl3ovqWr2Fv-@l;?hfPWq`g}Rpo zfw&>(snC(09I5QH38kliZA0N*sFj8vflf5!0-ciS`@6kBd=2zVs8mCO0G<_c0X*x? zNWL8;xEdt=ocImyR87n^ryPodd1xkPD-^vdA3_;ubX4Ks>i;EPGj)BVXVc8RL|?8qPkBupV-E zB76+sI zLSM*jgm4VZ5l~Iy++y!$R)b*yd7R~$qu3N_X&a*wwr5cB zf9rhj)(Yx)6pph&mFgMc=`h~{uC!KAiClt76mxN_xSWpO63A_jupH(hs8r9EfpR3| z0yBvPk;aJ}(wHdZ;x^)P16tQXLt7yPngPDDHI8@VdnZ)bw-&+;u{nMec>-~VExi~a!xvx9H*KLU=PX*2*y9TB$kXBF|b(#Ux zVTT!annhK&61MFp2LL$$s#HHY6=pJIns?qo-SX|%=DeVs#bsZ~zyY9+2Y(#o9)xf@ z%o517(%?BTKr8S~1+~msoa<^Ry&UXCkozXW4KUY9*;EAa)kxbLHfX@3>^o4eb*7V2 z(^g2Hm%Kj)*r&c&E9dUV(4CN%b8~IZy^j1cG%fAx201q!P37E)Hs^i<@*QMzE`U1b z5ary7Ri6>I&AB=;$^o)D*BquPLqr17Xh1^Kx!1*wIo}&K&_WL&~Nii0@ul=O2r#`%c4<9tcIL9XRvhXB=JOMg({kLTH9qhhCxDe`oTTkvFjLo`7 z-u0N~8n^|PGF+IdW8K4vgR8OJ^%%GoD%HbapyGsFpc2_Zr=!P1SC5DHpl}yN{^>bu zhaYDr+0V}WIIC_Uo1FpB z`IpM>*;#=?BgoIrHNJhv1YE6w-`MP~>0m-Lw5M z6dtjmknKT)_Q>|6j(e$32D?qT*auq8hMDC23wV1e_k9ER$#PHW{Z6^I`Om}M&VKK< zci)@+zAM^WYToSk-O+9mO!D3Hm==O_FXUo_vL?%29EEX|+UZ$NDQ&DU?DQ-` zcPp%+udQ>sTd2;gYUgT%b6q=u{E4IEVC!7zHmnb<#J^`5W&IHwivG>1^ zF7<-i>ekH!wbgBs32Lj`*}n2j>O*^jFyW5oVpH)aku&8w5mk=?|HtvBUKqzmZF217 zJZGb})qBGNo1EjLy=>oXk3CK5JArzFaJK~k>5T^yzq3rv;?f83wYv=3^*fO#k(`T* z|HIq>@z4>g)vxn-F=^QUIw94I$7RucCC`h;Wzj~Ncw823Ytve;lUB!CTmDH#-jS)q zVKyhK)|2|D&b9kcwhJoEg7#$$Bb*uF?}KdC)Z9YaK0S$!zmwBsFhaYk4~b@8H>Yl8 z38hn)(RE&TPiR+l*#M;doPv7ty7U`_UQYfi#Y&bbZ*(fp(xfyzRVh4()h37YTI+{J zhtS*#b`rmBR>BI+Ze?iRE~{0FKBGzpCnP##rS)2;T~)h=NZqsA>vbt%>A+V#1BUh6 zd#klEQ6@tssV^1kVbGnftk+bk|B7Ok$$qj}^ZKUzk?wTrvhlCeQ@!|}e)b>rzz^raou$5p?maVP@wh|2TDuF52A!Ice zCO@W_tQnEUb*US+ND$g~!Pk`QbY4w*{jY+&(QTJ0$Q#{WD#-25X9KBGceq8~J1u=# zO*3NdIb3XoIf;Nwxjswra1cJipmL|3qE*L?ZobLP%_^`KYw@GaT$(!NSS5qr!M{yvultAL=O6aYc zQP4#`hx;wE@g)dHI>ol-+O~SMla>zeNavWmW1N(2tL3jWV0=Spn3`^)o1J2nzqO0d z(yxBA2{@mlp4eY>a!&m}3EXW9Y&G~BpoLu#oDrsG=VvT{@HHHhBx1t5zvBD| zxVs_Oe9kT;m`^0=L$7s`jQ=H+B1}gZ0=dl*9*21ts_cmHG0bZc`XDr@!-6oV%PqA+ zjF^Umm{%Dodiz~0Jcw6kFgh{9-GDF_W~79d5N5#~E#X~+r7)*M6^UkEGWT6byqqy{ zw>7luT8TeAjy&0hu zObZ#%{Uk8pgq*K$qU)VTLotxB_mZE%c1NkJtVHOZ2g3A+OsUMg7RDpPd4{47ISn!< z#-TAbFfkKG$4(KIBdMNMe#z=K;^|g+ezG(!#y6@0yIvRiNy#P!Yq?;9>Og! zYoNluRgP&HS_`V?(Ty!9PP#aqE9)+?$bcN!Pr-_{wl&>Fn>bWuk=;twX!vuS5vaDP)6EN#xdVi z$2r8Io`2@3-yf!my?-Q~MQ4&w-=2t2tcjE^WxBNB(z!F2%Kf?IQzdet%Har|VDu4T zo8t$Dkq)>ZkMcMs2lh=g2VElQ5t+`a(p zIZ{?`-w1QP1m*TUFn2)}qxQ({Q}@ViN|)v`-ABe}=N`svV`-eKphuJ5+N^+&wF7rr|}w$cJs_Cp9Vv1>~@l0exp z$Dtg(u(`Vrt}Vbehuq!>JzzRRHS0dl;3MW#@b<;RdYmWWKT!%B5w!VnCe%hZyC49U zZ)*^d7plMd5SZ?5mjSs%I)5Upg}FgO4xRrCFwaA#;sQTydb>b>nZ11dso71i!>_O< z8F88Kk2RmGXFbV>6P@&#A7ij9u=g?_Xw=Bj#G-9&PVbx)CzA1pgw)O(8Ug zX)2)%p({*BsOFT@LH36#gTmupD73%w!2yBg}<44r-$jNf7a<)y{sa z$xLO6#v&I2IbS+2AY2V|m4vqt?tobbnTmDIY#Pl#FaPysN58^*$kf0u!v!~!ym?OE zGYVz{u;(%KtSmo|@HWhwvRrxr((S(W3>UZNDZTklfqNB@9e_WR_G*M*V1AOeDV;?L zeG=Z70xsya@(zrYx(k8i6i`Va_bh}Wn7UBmpjyh2&`fw&%XboI(mA=~fHei*Luc{kI~!{7tXkGzSdorVv|f^Me!qtHi6wxno$Z>&|#&Zl^rKV7^H5XdAO06!isas!tTZpZX|UanXHAj~uf&9q>t;DRXNQ8^v#$K}doDX)+T z5dQVPHz8YzQ*=37mrJ>rq`qZsU;BQIXamVCuv_BTk13n-(k0AfeYUsfw{R-KdwAUG zcE~))?R5KWIE_)FCJRhb-)!xL4R;_H8_+{?FW2GKr{H7@JZo8`(tm!OZ4lb()M$KW zN!ZUmOeWh-W4wYwNf3+Mw^ zI~96-DtMZ10-?PGo4*MA+voZP>sk@Vh{pEn1+Bh)TCq=mjUuI1-#+~{inI##^BP6^ zWS;&SN9x-LzNNH-ysC)z^rwx1c}+b*OJrx8ycUt99{;NBQ(~)#o!@C!HRXALZ6kH; z!xIT=A1D39#nqkAM(A;xh<%FV`Bf|z;UC+G$&$~*YgsP|2a@X3W32EhN5P(o^nRa{JRU#x6_i+si9|Fj~_DP2e_|FJJH zAhpCNTuf3QY%9Vo(wK|2vdZR-a9@_vZSda(N(f}iS5UUE;&ZNT)z{eN{*fzV1u|~R7cXI`j%K(&0q_*VN2BWM%TNeY zB~;nZL?w@;bJj{LS4&63u&Q2vg4l@WBO=eTy9ByN$^`3S7T?3*al_g?o0nf<2Kh~4|XPQ0wi0(ohSHZ z0sJHwlbS-4PR`=8R-TUsp6VS)KE3jnCF+!E75A`o0B`4SF1Cx6v}YHqceFcg7wZgf zU8{RF$%_@x*My-J=Qh567_%6aH@1Cn@)ibIT6XSgDZ9m}x_HI#wmGJQvaL(k6kG(qGh)P*bYia%^Y_}C%X9& zi9WbQ1_w5D12APmy};|93H(omEXZ^2IFkn{oK6m%%eRmnT9y{}eY+3A_=cP91?`{| z!FGfG5bW$DxC@}_zR1O9jvA^-uBG+AEBEgMciTs5gc6w_EwQ~~a{HkifG&_$q=&`H zEgkn_oZO1t-3`4$Tbv@@0(TqODT3|fRyKkE9#sU-kJ@j4&MK|WbES4n0n1>ZF6wN0 z`8YBQTx7nJI$1b%Iv0RB8*(cVZil%=LR*AqVKzcF8gLE>Ewq(|^PNI>B+fdH`%fuM zLMUOdTm-o@5n8}Bg=+L}A<%YAFSPB$uihYx#(%gJUPaKR%3~zFkFXf#6sXM|Z)CJ1 zc9#YZzeg$ZdL4BOkej5l3E@eY4H8~Ocn#(i$aFi{kGURx`IVkg%50MFmf@@)m&nOZ zj(aJP|DyZ{)Ji!T;3FXy;?K)-wbU`MF7*K7ms~oX>W^FGM=rLcz3x_)^kJSTW3F7t zTO*l#hR(bMF;dCJ!nG&LlnGL^nEfC8cY_iFnPk0tne-HQ85aw;J2&!Z3bE$hw5#Sy zXBl1-rkhx`UBlH~i#+6ER~cMGeX~oE#CQX>*8V`POu_s;h!M~Q86Lne4#jLVHc0NZuPoxXD|HHbPbFop>n5JW2Mrs8&m)H;2CVMfq(R_=m z$uEnsj|CbPMB6!KdJ-_@&ADn%IGr93v*$O}=}5K%jGo_7hzT0@M=#8^FMX2pS~JX& z$zuYOx(P7Up3kmL&&nLrdTHbTJSbQ9G^z`(|Hl^>3l`B__(Eelb(HoUax_2P*?YgD za}7R3{n2I^<9A_}_wTGaG39u#Rn+}=q)wDWS3Aeeook%cMf(w~yL`jKX(zPs6c{kr z-@IRWsn5E*d(s+RUyIHa&==1B5lZwI{EjxxeTDLS4tH%eY@<%Uprxnon9%^82U9D5 zB!GqZYzOiIzh9|MyTE&GiHb*IX`}h4t@OL^S22)3546*6zMAT_Dp{#T+PQ zo13Lnx1OyRtiK<`0 zsVPnZbBL7G6qmp(hAIx(dsAFYyBy(kB)iqVoB1HeyeXp(C9FZ6=XQBu@G+Q2WU%Yr z4eIs92&X;KY_7r8PQS;>aGyE&@uPbh{Wr1Hi0ds3z6KTQ5i(G5Lhe{k!=&4|oqkj@ z^ zWHfC#68Lba;!8igE$jVcEg@O0KIT=%KVeJ)t~@l<#{Cw=bPP;|3ZJh9udV3eqeCO{ zHop__TfpXlKLIj@Q)?-?VQ6*yFr@UMlx724hQd z4wxytq!!o>)k5&_NMRq9<@LbcA&|Eq@7+NVLRP4h_O+rTA}Ras;7hp->mSOABDG zc>-8;iCdTuPVdjAf|)Fw-k$}ysCh*=-kJULCpf(`I|0lb;k4Kwz-4j%12`5Kyd<37 zi7W+kCgd$J=n$y;Es0`TQh@ZQD^3^f8SEWO}u+&a)}A^SG&ahQi8`!+66 ziI{H{ui$Om8~DE_1-*^i0rQyzy^Z?=<|oL$jSIA0s~x_LD{Da1Ap1714NPkZdK=dV zW?#s@jSIA+R+|TsKmH3$Z{wx`nIav%jXM!$t^~b}TLyDFWV(&_lkGo{n9}?z#{`ZU zF3i0pZn0YdWF6XTp;l^J0X`CPA%0Vyt7i2m(1#Tu8k$iJG@>ELFu?w(ORi>KUk3dm zR59C+;UDX3^>e0h;Z7#h!ZHguJyGhXn)|h?nx;rU!psMdH&t4wSAGLO6b2J;K{B1YT0Wvs zbVII7tP3D}Lv8|7A^OzU^~c5$t$ARp?}6NJ^wV9m3&HGS)jJ#|5?7+x!JjIC_q z0;t2c27+XH|IXb71&*J%qp^CVf>GiYz?=+ui3`-CCZ*Bd-SPfXQsOQJbFq|^xSL?E zmy#{IX<_05F6c*{yBn^R0VVD=@UO~%#-N|Td<0bl16{9LP}xV;N|qi67m?+Mg=5g2 ziq%U6oe~(;1nS?|_zkMjyRiTkF@mMcNK_;=K5;cJnGa|#)K%k?0Lb_RptekFOyX)RawV9{A!V@M zfd|kWlXew!emV+LFT)=L^$=uVig(c{Ex^W16R^?ok@$0pr$%P)0enklyR4*{2f$p@ z(+7@m0j|O8zkq&&+`AA;8!f5VD`aZ4Ds4^}pIf9A42+5!)4M^zz^IMx zYV$(uBVef*?I|5^kT~mmYR^l!o}KHM${!GVq1_E?Q}F}?*)Gk0s&cZ3nif+` z12PGk-3mdTm91gU!{t<{iUJ#AuZWx=4!?HS73KR`W0$1?&V>s1J3g#D#pq0p@eAN$lr}QF#s}M zv^aQ;uS72w1sHL1XOl6m)&pYgU45X$3BV{t&vom$T3de<{?nw; z3*lmz^QE9&7lA^=Q}{AF?P_zyWmgeuQLXa&<8 z>hdPT(7>i^Is;}OM#~YL{^D-Ot3R0ip_&RBNPvr4Ty#aWu3b)i1pd>YN-ZZo3+4=n z`IpNHXK5?3bT{6g862aoT!F{sU@n%@YJ@vr)$!V0J)u72m~v1eml|+Wb{~zvKO@@LI)}*MuU2>?*z>Ds~lLpzPRF z7lKuMHDFsob`@V=m>!T_#TVcs=12kySMg23f07imif!Z85A!T!Dz5U==C9(5%yVom+f`)O_@kNio<} zWba_;Em_tovaeuv%CcQWc5`SU;E1CA<@M!dgI1A6s*oYOimVVOEeBJm&g_Y>IRsq3 zRVKd&IO*esP zeopIYf&KG=E`z+sw>v|i4#@ymczys}2k2%2Yqat?0J>(a547uUp8@bBWY^t(0Q0T{ zt-JjN<_E~GbPlwmp`AL49zU(Stx?aUmCnhg%(p{!?QH{?`VzGEwk1q8RPmr6VQ;1L zh{#-Q*qnOB_uwsr&*j1XEJcheP&xEkM@R_I3Q{ zwUdF)hsc8ftmpYmTC7~7luS!Q#5&<$Aa#?|n_CH8R4ec}VpF-aB z#8J1bu!ZvzXJYQ3f}a@@1aJ(1;grav2eT@lfjUko@fYDAF|UEfl9<49urPa zbi}`d6f`~259R;~nw~fWM(fV)^hBWTTJ3OpVgddqOF@f;wW#_$37Vd`4n}K)?es*T z9ktp_PpnkdYkJ~IAR8b%J@GosRtcJ(*a7n~WV+@0wR^YeiNMh@0TvhI2ZXF5%;<)uZ9u=nWR1_aF4iuxLA1pdR}Sj zRkM@ZMQ@bb^?Pq5Lc*>BY&T&#N3J``|L;p@-t8-tE=Mp5%6GiGA<^Jr$NrpEO?d(D zD&!?(_X&{u2*O5~yP>O`XOWITv-5K>tDM)lc78*bk9FCl%a2@W4|=0Lox7Cxo5Y`! zdr*WE2VK3|&ZER)kgHeR?O|F$v-GBWHptu43>fsbdnB$yp-R2=J_+VX33~gz3FZk2 zdJFyo%qLKDt?-x?2Abi#NW`k$d@S1|2M3es16Aj{?n3VD83F zeqs+N3ly?Lg)mN+7TUwfN&px6H=tRn?#nURx;_Zz3gE`!`p5gvxQ2ddGs(>i{gWKtV^ z806@m_ydjaNos5Jgo z#z5p>2Es$;-Ua)%ly%75moQ&QSqBURVY(p~gdQF^_XpVDq^twy5;ZLFgIejNi9k6T za)EMi_*^N_638At*9xYE1RXxt9i}T((ZWx4@L;*vOZ?E`WZq!k&#y72^9URZwKXH~ zaYD||G`k9TrE=|fV1o!@fP&PF>q9GSpOYCx6y90nc3wD!~#~{27 z^ExzjDuPq010DhsSs@pixYw=go(kj_G`^9E^AXD0kn7OUm9>-umC7q|?2K;*s89!W z1m?4AabAKGi{0YKi%D;9UWrgi;;WGRcoXh6|qg z>nvols4lo)Q20R>DiHG8GNystHV6%28bGBw2_~@Qgj{IpHRi}}0n!F+ODR8qZ~#nS z2~Q!6f*Ao-Zb6s|Gg-oy2yZYJ5}7?wW*iuB}S2cX_~RYM1T;B6@X8WSW0GRa?#pa9?^Gr3r}T{2rHNCyUH zi}=^_&xAncxGBIR=jCa&XXF|#R>NC+Db%`Y9OTCT{ZK+6&bY5I<|#OL2Nw&s%giU| zF$r;PG;>%+^my*k<>ZT?f*16W6mUGx6aPOBwNaxp5}>F;Xa zX00H!Ohhwmu6Bfmb_!%C8h09c%D-YlTR~k-;)Wp7z!J>u#oiLkkz|l2a$QX!)C%B& za^|jaie#77(lup*jm~BPG|mm7gg|DObLZ3CTe7nLB=;U-;#9wPyg$PM7L6U&Q%*5O z*>!dHmb?7AQ=4mj=bt_@!`1V3igFsX3{Svb0SOj{!xd<(IiqX31 zo{thOJMmn`UAt6w?m{g|4WMqw`C%E9$}0)Y)mqdxDCl&EQcYY0I?<2|b^0fYT}@i_ z2D_gEG2Qb0*%Q5*^X6m%7g~<*7mWFea!Nl?kjlQXsO#mVovSMGf!q#4&I>fkgZp#R z(OlJh@Fzm{;XOb)|JLyz-p>JgHblD(!2Vp7yL`#1#8yQV_(Vf4c%m;FkBs)y|$B9F+#Sa#)N6laGs7zYL0YNQXRo}fNV(xNLJH@+P;ooQvHA)01?{&^6!!g zeB97XSI>%}q|T%$ZAp#8%vgo2lA02R7jSyvr(aM~#{iuH*^&xCwG}qmDy=xc zE|8yUI&5k!p0n6kOQUzx?DOFyqz$!CLfTOKB%}?Fe-hG+VqW{95P3cbH?I3g-ksbF zUbNl34J`U%Yj0<{j4#ROp3lEl#w4Vi(Ccpdn%gAjcIW8<(basfO~`WHzmnUy>1er` zTN=3A<@!mj5UZBEx=f3=_q${#@aiI6y^9Vr#3YMw*Q*&1y+%*0ZjXcO_{VF z<8J#Y|5}ycy|+$2kfWD>y7e)?Wv%KEDCZihBix&mVKIJM4`3HAc(3!5cM^`)J4E^g zivB+3DTa^Gc$qJqh77X~=6@<=7f9G;115P61*rw0k&C(5fHMWTrB*?1X`ZL@D3g9Q zPX;&ge=n4fazd*}?dnle{#F;g4z!ic?xPrQi*XcLt0fVx*1?9kW|B8Cf2xJAk>7W7 zFB5EAFCL}o%=9)TA&@!lVPYHIl&3B((uzwMVN)j5pwF42zz7%0K0`v zIST0QQcU7yZx+NJ~Hexc6!43g( zGg!VMVF(Z)H(@Z73E{;Fmk>xGkm15j2#|1J!b`%-m+)@#{(r5#_ZjN6YB2b_vb(Cz zK6~D4uX(SHY2SDWis9d-`UTdAw_=Eq z{vWaoH=fN2oq{P7*fKD(d>K6xer44NNErUq$g7f^}(b4He7kHU7lNVoSqc8EwPJ@*kW=8d-8X zpfG0{`hY$U4;SN4j4ZqGV+4QR-d$#}*2psb3m<^S2!GSx2ioG_^w%aJMc#@Z|N10g z1Ao((9>&z+&+~KM#5%|>{2B!u;L3sFb(wQNdIR^+R{uqtgOyhgzA(3Uu(ony-N@kB z=IM1l^5+U3k_Yz=@}ORRqbIrW$hrn{c+}botFXfgOoVxhU(2`2JBZ$F2bg=S|KfGi z>xKqd>52(2vx&zUpi2){o(~9Kwc3_no$SllW)@kqBGU98lvvBgwa094-39*ex`Y15 zZpf|i*A5&Wd`a#eX==UnAH!n*H=t9}$&JxQCe~>a=ek6UFFp&K+$))&aC$bQ7lp7F z=cV)lL^?WcBk242ThZCtN}b^g;&t1JzmO9)v?bu+FLGI=XJPY0@fRG4R=VXD|3UvD z6n*Y!xXc&3+-8|=?n_2vbNRe=ez0yD@CpYi_Wc$KdMW z#)L;fADqay_*;D4l6SlJ7#1fYe07h2*p}dhTV7w-yJd|m?Z}o4SXAGi5H$RfEf~l) zv~q8xmMtrE0$yt7M<5i+>gaUA*>jx%ANYoA&8Vg*h!?!gE77!@TS9lqH6X*#7N!W; zoRjjP&v_)EO%o!mB-ZDZEXYyinQuYiA zEF5=`2)I0<>j0}-6d4&9z2B0T=(c>d3~$BY^bQSyshw;8(+ebKECK~|^2RAkBA zud#B&ZK5*P|LcC%j}~RxyZmz- z_;3uM1moiktn(o#p+6(CQ2#BgS^B65;xiPZB>AI4hq@l;uXl5;N1M{U{%&6Z09} zPD08e(>pM`c?gv~)m9n1@)mzkap`9huWucUGrParRyo(_b73h%{fS$DuWdD%_w!+1 zSvQ>tghvR|rHrsHc6y_Ct;J2a!F;Df&Y#7uf@f;J@ILONBwvzd9nS zei0KoI0*cv7(uy%Kk}oZ2VTOX#eboc{^M`~WYxaxL!!m|uSB*qd+{fVK@ESgV(>ob zb^erP6;?4~=K88n^~%?L+LHb(>^J7g$|PS8X91~>T7ARz5EVf^YNtS+{sI`8mH(x5 zfk=g09cM|TtK?8%fiTsQ&NA;e-Lq@rTPBHokY@UyoCxo)*|foXtm<$4M}(GG%=m2! zF*1r-K)~Pn6lttb#^%1mGKwk9OneuuQSj&6@5SE2odjrJxv#%BebTljgjcun#P@}K zu>Aju<*KdJ9r=GJQYVa(;UADrDLcvpdCv!>$aw|tFqmuK_kXl<1;0R?JpAFuMGV~N zU5CG$@K?g$QT#oOzhB1R7xDLf{L$XH1AkPr9mHS8zbLbc8No;5(Z8Q*Z{)|@`SI)g z;H|%z-{uFi1iyz5+$4ayks0Q%8~BUI%`&`MHFF=+j`8CpAK%Q6xAE~;`0*}$fN4&WoRfghLhW0Yyv^4A^s$h{mNg&BN!$MCW2ettZ_4<2Dy_833j%#YV$ z8!kV?U+=@m@;}Ci27jBsKE<@(=f@x8WAK0Q*AMvXKl!m5#g;vXW%)69F@IgoUwiq% zOE#C^iH~!p@R6i27d}4%iqQiE}n0Wr1)+$@BAm zHj^932d^0z%Lc)ipIeq+w@;Jq@sVpn?!V`|Z1)fQYB!tB4PeAh<@;_>?wTJQ_H*aw*Nt)D ztNh&F{Dxcx-OU8&?#m4Xs}JW7W^=*UGk!K7JpF*59SCmqQPFer!P|U1l`a*!K_12svkH$wn{>{w3q*u0q9V0!Q95{1v?Fa5k3@-kRALtvHjrI3N6_sra`~ zwNP;;w=y3T(LBnG$PxvgwC&_@|5!%O+h7rK2nP#T$Ojkf%Uz3K%h=qvy~p$5KbOlZ zyKHZL$j{~S>*O(;|5;hANJ3K*(8&$>;pbn=nu1@$x@Fe0f!sO{rd$phXg;ro}Y)&CqH=maeoM-90;DX@9<$J zkKrTxZF~d;J_m)Z+2xq7;0rnFdGN%b){>E0GLLfJ|L&L%u=!i8WIp&S0h>=^(r?HI zoBhJptyt7e!E09gPokBdUhv2AD}uK^z+vWC?>BQg;(_3;r~F4x173pPEHG)1Z{K#( z4?cmqmIZhD*>iHa;I;SrfHn>S%gpbY>jzJeJEK79yzrYFV+YD+uz66 zUpuug_#o=p$RYtK1#9qggIlDsOunLTxOM$J!4Tc}kH`Jo?)|x;vD{_* z_sO*VUnhO&>@nahrgT}xUdS+MMDvc-Pm{;}LS`StsyUF1#G>1@Mn2H_%A0?Ht0UPL)mG}_cDA1!FLDv7_erUj^I7_qw;+4vkyI*U8Oq! zOA?&)v#U^h5d+EQE=7qfl4L97xVpK+C|?L(i!H{U<%6$0=m#(LbLRmS;&CI2t{B<2a9@k#f0Jpi|8$k>trIyXGk^z<75H$B49%HS+*SU`Q;NuS+28N8T z43K<2*hJXwfD+Bn_sGo2%3tE=F3PWa6!qtVfAADoa#sRWY?Qg+SABp=;dFKl8+mgM z{aqXU=7WCjh57Y|Pje)Pa~u99H}qs~7dFLfbL*bu?`=;$nO(;MFZHq0*A?DhIE)H* zB6|@05O^1FzHxt{1)s?;v~+P`aJf!EPhH2rb%H{|6!RKq5#R?fhuK! zf8&0`60JbSOz`Cg2|wU_^GRXwX%x?~c%G1< zK%z^sB!Hk1)b;*sOMv)kA|b2*<}~;c=}_>^^+dd1epLi@ZsQb3kFEGHc-Hm7w}50W$b*=z5j5@xzxoi8S>edx z+=cpLRdC3E92kO_2IBwx{f~#3pCer3XP zR0q|4Gxzxac~Hwae^e*@53p^{0*K1TfA)l7NH^xr0heK2tvBXpazXx|bK8I-gM8ti zN#Rf{miCe7z8|RR|C^D0_K6jK@SgkdGj|~x&IIoo5(2B7>G!c*n8z`l$iv}8ZbX&A z7eKSm4bD~J;5GRtm*njaAI@&X%zqm!DVOM9^M&`jHEOT>T-Hr~0EjQ>P%ZKX|9-Nt zPwIcw)54gGuxO9W23v_G3i*G*a<9u>@aSnk`DL8p)vP`r{62)S&k`|ZHvxSF??baW zH2Y5=;b6=`^qgP@bpfQPEA#6G5dQ_dbSC&bvXiX<%5(Y1KCOrfaBSwi5W(k2z&EgZ z4A0++`a^*!!@19&2iA1Wx5vPnW^$X^$>2W#@8|8$y>R~+a2^Z3ORyfA_Rbx>_u(^DwK6uO$`!VJoo!jLxoi1nyKVV*Y|ChDfGq6* zMWaHVEM02j`&8{w$X$fiYqs@20J0O#WW5mmpCXb{&SaJS5n)l3E&37A+bTAb%A!28 zDj-*@1`2#r9vwYxJGvR`^K|awe?BZt3l9Q(@b*jrd~fjQr=Sy17XI(;PnEDgJV0PC zfmI0J2Ur2VU*#VjdmOcMt#ZL{f;01P1b%`qx&m_79bZ{VU#k`~JPf;*r`yv3%mh@NQhNQE$wZW{cHUrBQ0t8xsf0w@p)|_D+?W)pD^~Z%&kvWtdrttwyQZ zLc;j?jiabiGVWTel-aGB$GHA?yAnH(;Tj~|>I zEux;p0#}j?%no8EXR5Q6S{)DbrD_8U)~t**kJcNlp@mwrdZbpF9>OrL9OAkU0d$(J z%dgc=_Bt(linkR3x=qeMnrm>to&mvP>*Rbzs~sLG-Yt+MeX-zllfqeIOeY0MJIqRd zOE@>dB^0O~-W`S3;$pROJPl;WM`xG8>tB8E3HF@iBJ4(}>%FK+jml~%J=YH@@Z zL9sYjnJdrDPt47YR}btzRK(wQ7UF(OfW=Oou`XBMD^7B!@{i3GE468^at&L1k6TaE z&TPG0nyu_CPRz~EqMNrBOViWEMrEebsMN4Wxamr>$TU|v!I5A|yqV+G>56A6*J_4$ zH7bjhMza#)rA~eA8Es)d&5s*&lnxz0j|OI{7)^1y)G8t4ZN=vC(!4xjPmJiEm~Bp^ zps|BU+o7wBscTe9a}(u5#qr6VSevqU9Efeo<8GcWHY@YRsgp&Z-Le2Iuv)k9vAbNK zn=ds8{{#}V;Lq9&8r;(Bw!LWtu#jBjvDtd>u95Xyf{~1Bq;8lot>^OYL!PS2K^^?3MkPWD9yqB zliRt{*h-_sXcMgi`;QBmy0cUo*;Q>8rzhYSmh`RV~c|y-lN$`IE)cm?Pv@U)@H?$7W{hB|Cpt4mDfTS6{8PRNt5+ z*^DIontJUJ{=0JMCswg^>hddxZ_ypb&NSoh6uAE$r!K{4CjJ5WGaTx$6|fHi50?*++Mtqq>8IMF|%)ceDT1c z;!X2+0L^j*d)TwXyNT36Bpb~Zp|V(?88@s$?~K9DsmhURZ3!X|@VNuzTjrEF1$(M; zqydIc;Ive0O-$W7wS8PbuoGvvf2NI)jL%htC#jrhRe;Ev0Ho59%2*oPh?%^en4iGL z>5A-GAdgfwv{$4u4jkxEdV;4MnQZ~G%7UKN2=3UIfr$2#rDXJBj$}|+6}G~V0IX@KCc}8P_1&@fM>7sxw9d> z2f8szMgr`79kg6W6<@;2v55mI&@n!BaR2R-#WXqNP!Zc^e0=iy;+>6Shbza*v(v4a zTer^_!JUJdvya=&GfC+vU>00~V%AoDVoJfb_Z_2CyQApYIlAVWcG7d@&?khI9B-COH7jy-OPrN?b8-P8A&Qlj=KA)4K`KU>_g>cyb5258g?vMntO#%iia1_w z*1#ji7cXsjdKUwA>lLS~Gc(HEVYQ|~vg$RoPDXqTh_hl)zd~v3;Zn@@WKr4KZjeJy zGAcS}7?t6jZUMlLVOCO^?whu|{JR`kh_Dn8MR)9OR%XG!7V9-4(^jckgG4NpS#YcH z0QFk9iQAB8j{+Eg2PG^M&?wGUn;=8L+~7z>;)NtzJJLGZ=Vsqy2GJCJHZrUPEMsixH>hPbl~EkQ$Jq65L` zQ!sP@nrImk$BP$AjcFB|(8B{Wb3}$oW>MJ4Vr^m019RH|e|5ZAY8=5|rG)8M<;#y{ z`q2Y3{e3N_;$BfDfSK+U6u=&)ZiBMrp%YX;#J>l@1wkz_TRPH&;9R+HzHXrL?DGv^ zJIj3EW{@jIL$BI|L`Q{#Ft@5s+Mi%=!7d%#AE)M6odolvthi-oyJXruvXR)rHK3#l z<@551Qc=VmA_z#}<@!QRWE}FT&yIZE8ehD#ULPKTcr;%p=h;w!sBz~c)D?$?#?J$P z&bLU(i?h(ff$u+3Y?c-)26DkyuQ%=k2tnUu zhPSjFQC^(l?A!(waHV`-gd+96*N1mBk3x}qUlH28nJQojYCY_*MyZCKiw1z%po}si zhhybblxq`n#-{4^*(-<0f?NwhxHP*^G1@^;&qYrZ!83rr9V5CNZNz%#Oanw7odDu6 zC2vIgN9v7}UTY3yZyLZ`yqQ8b)MA*Y$rhACDavitL8qvOlp~(p4Pk9*%m_{#>Z3zc z$O86+?0Q5(vfjPVF|hFx_*5yZLURXJt9k;If1XP9nNpP+>e$ANY>Y_%i~*pooC`ih zIflL@5V+13x@mV~3J+8sw>v?xp2Zc#%87Dio*XE_Hi8h&rXwoN9xt727AwaVO0#Ix zN(e)QAKfOsZd0fYZUbA~1mHMT{Ii3AmDcVC-J7_hNG+>qEp-$LvNuW+hVdQ&KAxE| zI~|)q#nC-;VBR3uHw~HXbqb8W*(xVp@sJk>o4Eupt`M--!50O55C<@OR_txl8mj0< zGSR`#6tek==@=fxnvsbtmYTFzh!T(!*MpL0q|_outYy+TcMG*3UmO!9KIr$3)QVu6 zyV`g=fdhpap#}xc`d;)~?K%^4wAs`Tg}SLWq)6S*@c6jF*^|&hhXM`wY7rLoyE$+8 zVz+c%+S+!R`J=)cG*d9Q6G%ON}vVn34{{3&0cqAB0LB)4Svb)7qSALl$)L$70%mVdeT071{Sku2}6APwgsO*$M=-K3!2j?m+g9Hb<6h0_;5gj2#`z znAmPTs`NQq!Z*~q!7yaY8qnfflR7QS;miR2Si0Ub{+6ZfSIZJ{X#s4o7D#^rLLi~N zuFzg=ktVp$)=?t(R83r{SX4X-llJT^fUIBAX&hUeKh9bACQvCY@pDrGI#f2O9--(R znXONiX2GP)&I;}~7$5;4yA5BW5=vaRGj}V=qA?G~Up3~!SG`ZFTcM~}gOy2Wk|w}* zVf|oc*;~9FI04>W`gnt(A4zd*c(`&*XcB22I#>nmApKRA&GG}Bh=@3q*6z&Wxb=0x z?5FC`;fWQhbx5GFULxh8K$~{QvKS7NCiS0!Y(o@Gj}7dBaQ6F{v;rvM`uB|1m4`>M8{FE1P!m)97+98q`>}}xS8l~|A2VnTzIRk&5mO*0) zyrHAubQvLA>#;!VBu8uor^g`YIJ_hFNFOWkSb}{NIMv5x3ezEq5ZO|Z-P$!=s*{O| zzoOD}eorLyXfss4a@qSJ4ZBqPNY6b%Fs&*VbFv7N(G;Bs`(Y6QQFN_p0)DlE#I*03 zufx@f4y23T41q>Gux1*iGITUY;D5?}c7LA(iuhtFq(SjhK~L&1Qr&=^gSxp}z-=_l z@H(j0bbkQpO;;AHWuS`&^|1AY27XU1G*5bBp_kr9mN*R|_h*)}I&my+=$WvSkSD?zg2$ zut0|1U(SO;a#L}d@c+E&W(Z>j0@4|lHZ|qA)t{wSHU-Uf9r~TxN%4zq!lMYRbG1gM zxK*(`Jprhqf`YR92xMOB(sh0!h^sdhYN+a3VlCR89fgM!2S*^OURTBG%TGn^mkJHN z)`eZ5`Xh0e;#zXa4P=En#IxA*VXLp)2gT<2EO6uq8UErVQl_g7JnxX_JFq5Jg6Kh0 zl;+9>rfJS|Y%jpEag=BU$ouRrdr>bodf*$UwN!5^y8Kxme7LIhH?e)NkyaqUV7%f@ zirk#2V>Bn?SBU|afz@HY(Y__X+i6D=Mk>oEID{hvu@3+gs@uat8go}sd8=l*3Wv7p zOjY?X;Yee2H$jFSqV9q<#?aKLYZW>8mKpfSaA~a#eF3*});Vdid3L>-s z5~U5`X{i?VPE~7Aa#g{lG>$CHVX~!zWMP~FH{yHJj&XOXw+qPlaX7xyVsWAgrljUZ zd=0uxI`B*^ti~#WDNlf@NOp0F4thSYuc8y}0ql&A9oYqn5txjorxO5ei$MV5o!aKL zD!!>;fazykr7ao&aGbexzonyj!Rf{yl=&h6u@qwn-B4U$As?vHZtrBl>g+H>y;6bU zUE(xLF9Fd)!)MmanlRDvErtCEP)f79c;$r#t1fb72I z(h@L(HB3=C^n#TdOp ziZEtSFM%V3FQz-!XDQH+egDBr%&b$dJ+%f#;)WP@jGR-8ohbrg3AH!2NSwfkc&3Wx zVgqp5?J>$btP6RsgBTtO$)6#8I+k=oFaFnR(#L1TWl)ck^o0S*QGC)R9V0Wb1Bj)X5COYqu!oEv`YF+0@M!r`ifx5snTZ z)<&IsCVQAy(E=wBk#+#!A-y(`*p)0EDn5JN0uYmo_$d&QV3D2%prS!rMoEY&)&^k2=Q$kDd+4OFL9mL%#ViWDqNk_UkcX6~b-$bY2&V7HqR`F^T zm}sl;?xzPR)-&$bY|u2ZNVkAPs1p`cLI{uP*%!HpdU@I8Z?u=e%Y z=D5`4I1VFIFfNInfoOsQ5x*#bcOuaEk{BI;&ZEIkH^~$WY&|=Cw>y58!~u?oS#kSSr>$z-j5(-1&~1wTL^UO{v*IoU3EbiQabp@wEL|#p+v}2=fJ5rl zLBGsK^Yz-M3L@7)vKZ)ERZ` z^on=Y*x%woFdVd?!yTh0-s`YCPRh~H7;x>G19pQ6`lJxPwuUUjg}sqjg^=(;0)lHA zXQ&;X(~Jm*iXCQ>hg#HGdZGqB_Jj#Xg|W~OCZ;ooaM7`DF>d5gs~R$sQj9E?B|xed z)wxP@K^oo;X<1_!RNzbk5slm&T^A$>4=F*&*Pg{1xl1h-sA3knepo=Jr$s?UccMmP zVV<7VsPcsMfk^Jj-8}0DCkX(W1hBz`bRc=d+Xc9%PPTA{1IU}c-M~(?N=E&C7U%#p zwNRaHL2tI8Kt(Q=K*fFA>&CJtoJDT#rvlh!aXt&KCdSw!x|q(xjfceO;0BK*?Ee}z4Dh)Y@Nb_%L z5p1bgIl4N@>YdVTG8j&^U6C;MiYnc&^=4WXJt@;WU`D-wWJoc&%h_uBTTaoKP=!rP zQ^d;D0Wi|=rVUXgD39o&Ep`hGK5{w++f?0x7HV$Bp=Ustpd+CMzUTexY^*p{>W+Za z-I==HC%zAl1M6OIuOH9M5pJMwFKBF}Q|zcm&^kKM zo{Gk^V>CfjNP_@^iP6!)%wBAMotsYYgLTAThU$qkkX_~8Rd&{P6G5UW4h!XRgnFZg zb^Iu!;m9S32f6?-+Y>(-#yObiz@i>VL(n*3H4erVR^020aI*JGO+5NbHY@181%c|ZiXE;z$#v_%a=WOczn$IXTEQ6N6+7HWCO;*HQEA2RdYD=tac zm=s3)tSi(<%y}wVnTpa$?TIGXesjpQ+w%gRi@re1Dzz!r{n|S+r^^87X4s2k3w6=3 z_724ari2=-k4mibct;R($2D+L<9b7B66}^(9;1f_$b1q1rt$|Swws)yR>=-if*^J- zvL^LT^HUAj4;<$Y><7XR_h>{sFpK6;PMHkZ9Z;b2&}%BjF_FDku=kl_jrPcJ8I+&y z)72W(aJ1>Gm;@pC*g~~oPM^vii)rR~g2$13OJT!+q}HIPuK5ReJV&g(2)PCd%*hF( zR^b^F0W8U{5i=Eu<#30vi#J1R?Qhi9K&_b4Dh@md^d@ksR=WgYry`f`_=o1LG+H;I ziim-nH{DqT(!K7~iAov?m2BJ?-20*$9TK#Ui#(G)N_0u1ENGATVkwYCFgx&8n_?$L z)e?H-klU6x&N~>tL!tw;i#K6dfPU2FfGNXSrtm0oz6Atg&J#0_3`ILA%fv z0<+C*AVHH8CYlqX66iFUi!S5d{02BRh&Zv z8Xkpe(U_Lvi`~UgBrrDY>=HPLepzO}ggrY8@F!T=E}Apmk3G!X@UWcuu;(BxN^bh=kwx56RnoVBj&EQd%zCncgtbXs zRze>W9DAMiB(9VR4xmh*oKvA{?lujW?R0kX0xFQ0HyVf)ynyvIYp3`pqvV*z52TX` zXZP=phV-+yJ3)4Thn7@n;?7pfNd*xuJIRG|yaZT2bhOggyj;3YT}>fR=!d9UVlGtuTH%xuimW*5!Ql_M${k9^M{CcLS5-9Oq)L1WH{!~^HDF+jfnL7bf?<7sdY?5Qrq zf4gXX_G3@d0jGNwr>L$}#f((0ofpM?rybfSGU3sjDgwpI40LKE1q;|?@R6b^iVGeM zUs`dYb02p=4KKdvgq!sK4p`W{nVDJKpJJ9WUY$sl@Ll0mCgSYasaCKZj6w%5A)ddX zJnGHJ2^6i~afe;H>_i-o=wq2+|HaAD!YFknxbEf065!ozZnyWzJlbPfFbpB~zuC!g zKM}mbo21=PRGGU*z2c4Yb)5_q1QJHa+7XqqP(iP=w8vV>T@4**T4=JxUKJ%{h-x_Y zPS&bEH%$xugGLh$G>AM6qa%2}V+*_i#N*Kk#_KdpC>X-}oQV$XR1&;bNc|vkB2UyKzk6usB^ODMRgR1~2uu|mo|Czm&-&j>|}u7sYS$k|gHKu+hPTe2S7#0}R9 zqG^uX_W_Y{$wq3t(MH3@KE}$~tCjkwoH%Z_ItLz=%LD}<@Kf4ZYQBqT#60+B&Q%e) z0AdGxt*fdk`pJO082eP=AW+Jn@dT8FXlIq-U1C*)ct+d~jcr6Bf)1h!pmoO`>vWY` zLHi<`Mk=f;L)OuOy-&DT#>6b3!Lwa*o=$u%UXRE;xF`$}XzjsD!-9xYH4OE|I~H0o zhmlxsyCgn#b%^e9)d5k$Byd!clVx*)cH$~*7lDdR#}%a!{@L_or#7;i3hZ-9IuqOZ5+L6<;^k8UMAAI#aaRy6_=m~q`9LxUjgqV(GvAeIuA}n zEr~gy(L&~?M6sWSpseSvJ@xt0m+O{2+Y!cL4LSq~#+-5lw$)pZYCPOHPG8d<^y>m4 zP{XO#nE(Myxw*s51P6psO*1B!bqAfE#22Q0{^|0a3>b}p{zUeIO7;R*OG@6>F-&AZ z1%3p5cKfb-{$U5uGzM+Y4Nv3Tmds8x*6TF&>UA9Vmz5|>AiN?@r7>fN890l`66tQ2 zh_ny)4p;&#YUserj`HZYD&f1KwZ&H;-Ph`BYMlE`=m)f#p%;~a<|f!=j_cDdLvydn_ysBbYFt|aqDWeB>0xx<6OwNC3(E~lt`%5-^CmI_)C^~N&#IYaw(%D71-3KW!51h9l; zX@l0`kfz3ei2B}jSjwIc_etOpJ&!n3#c5F0=D_>Z-qdAIRTOEhamSZcpQn!Q!joX& z<)c+Zwt|mXc+X3k=Bsj|QeLnj+0#ZIUlR)133w7YKu=yy*B781Gz|9=y0Z4LM#va( zdT}bwgc(hOKmh<^r=0}v+M|WS71-0XtcIblEE|#Nv<(!y%iK7K3Bw5usLbq@k4Y{~ znDRJt|KnDBbi$zs;phykDf`+Qh3V<;;@dm%1UG7_YR=rP*QG+Q-R4Oo814Y@3Gj2r zX*zSb30f9JNr~7H0Sw~2WrNEw?vugdy`m6jDKboCyN+NolbJMy_;CwtiCZY%B-Qw#V981G1Zs3q(lp0vOKSj=x zC;VdL4?PE=lrZPq9UOGeg6*+)D)I6G<7Xr@#9a)Cql*Z)NUUu~Ph^1I3QX<#6x@8E z2JIxlvc?2#icoK>9ch=jJrxNAKJtK=5|R-$2ljL$<`M^lZhnH}$kNe<#fj6nkP(RmH2( zns%v%5?hc=zadoH59Ak&(lK#>D*^m;YYuUyg&QU?oKlGX_& zW1@8$jjG1OR5`ZP@ep}b2uWH$ARpci zUe}*CICFmj=oBO=WAzj|h%l#M%n0!DS^fZ<-qs70EHEbo<#pPHL|U z1Z?cC!bJJHcyyH+v2JFzH8Bm34DpU-lcGJ0;hpyR#M7%GnV0Ao*URS3cM$c#@ z;=-bF0($LZJYrGU#b@WRxX8AEE&{&t;fjaAvZdY2HXdd2+MMG+`a>zCpZO%7Ru&1i zEXCAoe$4c&ARDB0kiG1ZkAhnaL6B`99xs#&?V4kVxg>0=3< zd)MpdTtx`A*pFSB0V7An#8Xq;Sb49qnV1-OM#2Z$5bt0Z%<1N62&G=9({b2cf+>yx zL8mPa?m!gW!4Vg&RBoCwh!M?Xe)bX^z&y>=C43cT--tU+=!~i-pxhPN#9M5JUT}R7 zD>RE%Y40>57FkD-CWv&@QAWwXvaNCG>2)6EEVoL{HmokFqP;H@?wS%@!V0?yLgrWk z7fD^Cx573|eJ*;wSeb04QInSx?D}csx~54wNo~X zhP|Mvt`x3Mypa}8wawYT$51iuAWpY?9%zT*-RI_UbG3MV^n@{z(Rm|;wpVa<0bIsO zt_dLZ#vGQy+FzfE|3z;hnuua9Ul^5aa+K8J7L}&%AvpS0y zU9U49Xf+IID0@$JiefNO>0YPMyzUl2tlpVIn_TCu=dwDm1!=;cWprW&J`sXauXK!@ zYXc4I6`ab8OVK^ZM!@jUVL+217P}WaYl|_9Qvg0L0x&&=#otn54Y&CXQwu_zfIm4> z1D^#}j01k=WM!|tRt^O~V;BKl$u#X^8<&bxd-K%DHL5(^gVP#xS#RJ5N%b%=xAOKr zk%li3M^(p4J7@opeDIVO#Lq~8c?^a-SxrzP#v;Jx9PcBv=SX_*O@GXRY~KzL3-gPO z3(^O;r4ZYDYscpfh%_gMz55_-)&aMBq9$iiFxtsh<=BLV*O>ydVHM?viiaiY510@G zSqV2C8+{7Fc2o!5tuVJ!wC0v?4b_!PD>2RCSX{paIjt;C(g}sP#QdLul@~W36>&7@ zzP|6oi-c$-r3YiuorsFSK|Cc*Fcy7Y408!P*TU=$%h}vrLPue>A;VmyMkabEEibNQ z%Ml<<>Sg7~Fcl-H$QbzHWP+o{(8fc}VYGR@Zy6{cmFY^gDj?`1u8^RL|7i8dQFvYP zWU}x8z2dGUFQB}xsVt!#H>MQDnp|MS9jDEQSc2FW2iS;PsYj)&?5Sv65HE6No>|N` z)Dy;YbG{_UO=KHAV1hl-;egHV#v@#A^#JOpQy6=Fuj@k?*rnx<8ZSL%?BKDM=x2_sXA^mfs0otwa*<~*f{W+AJ z=pvMiV1wJwloU(-1#FnyUF1zwP}~YZhqNZDNV$WuIE#yV+7KgjKXTAE#j0Yx=421Y zm)4$JiSTHl;nx`GuUdl?+NtI1fzZhOxtpuKCgbJ=lar~(@?8ab)AN1R_0D&@vL){6brD@;3Y@nw4z&rgXW1(#fM$%er(z!TA7_>H zWOuZV*F77PW2Q7$oyDn3kj}{M@K9shLznI7gwtv7eu5GQHj>coGK_TT831oabsSC{ zHR};qq6>Gi=pBU+1oR565;ipHIAA%#?qD_(558d zlwAfMZbxGYEHecoRdH$tA+mUk9@^q6)ev&nls$8VcbDE*ES_k10dAkKyXd#Xe!Zby zpFPB5=L!Hydpnix&%h8GW_pF_(3}t5Appd!3ckdKtL|gBTiX#mBj6&314F_cPU}~A=K6Bn ziw3BvgG4HEs2j-#+lA+|pNT!kI3g&gZ6ups*SH^v8X9-R-omgjZ!ugD9)A>0LX99Y z{t%mn#zCN!C5(e23-MxbKvjE)k`6GFrh5XKF{C+!WOC`k#7B>q3mP`Z9-)6P%{Jli zx`1o`8qhW$$50a3qAVuugb08$$RboFxe>ik!}M^SDD<36JI!YZL?)^`WbILJj~g7 z^EM_5I~iaJnKQ1$h2aSs(JpTCD2?N4&~4y8Wl0iX14oL3iI64j0C&^PJ4V|4Dgenx z1rXV>B)>hOyD6qIWWWT8sI0OFk2_41m%6#Yo_n>j!xh&UswHk=a+wA^1sSP)q1A+U zJ09wNhMch`PGbXDLRu>hk3r3XjR|upk9b6IsM+4|l@)}Gzz4~}0YT$&D58T@5WdS=e3)S(v? zmK83$NhM<{w4}ByST-&^3!@SXc@1)HR;W$ocH^+Fg<3=a<$B|j38%>m91&$em_{0V zjon~+_P`=`XW}HGcN~!rkAwk`MV$ffREGS%Ugidon`U9=kSMLNM_B_V!q$+bwp;9~ ztME#Pa(6~_<(wBA07Hjvu`6|wD$Rj`Mjky9O>ceBlQL!xxZzFOxz0>|*WY|nB9}o0El)8E1)^UMn!}#?IWmc$7WleDWovMOLt-e4d ze`Sscgs8S2`pP6EB~G34GtGr5@&|3kPG}R`D5|ShV)=VTt|;^XGvi=qal{R3FwD)IRpq6L^NH4233u1a2V3s`Lt83Rk%^8684HyP2dEczj$V%WU_d~c zUyLUae_A7rSY?*IgyD;=^bW|N;|?^8=d$KV5uC#S(n%^mmnIRzu{#pu zlk~wc{AUR}yVogk0JKm=wwu2s$cY5Y8k&Y+N%pcW>}>!Wl|7I^<6Llas;y>T4YL{fRiqys}R-)tGrnqC(Mx>Qjs0`iw)r*>Vil)_NaTGS)?VHgdLz>)+fWpeou%!n7m0*KtwJ> zCWdyy43SnRHFz>wJU4s0_OU!3>oA_@WW0S(m&1G8A^*HtbR>0=^YThcG#D&z_U=0Zx4$U50?PvULKc7W2L}4scKYsRZ;N)o% zgelBBFeq=DQE{nFQ;{A-0009y2L_^+XWSPJt53v6K1w2WwgkQ1%(FndMsZ!L_+3e% zV@=>bE>?KM8=NmE7zVVAXkbvQt2g|dn0GoXK+iZ#0?8jQi(kIz9*ByPU2CS z1^g!ljZuE`8E{8ox+>2u5bTJeWUjkbRp|BZoUzaE@_ozyf%o^7(W_WNCSzC-%>j{Bb`(Ta854taWg6&1d$uw5qmK%=0^fbt>@w zEiO(#fI)wX2+BnZFz0o21plXw2!56+ChmBg03#Mz#*3! z#$?>#fRGB4uyY_T2SV~#&xquDS%aH#2yEjep<;?efv^%Pw{bfV&O~%P%+aMydlxOZ z2x@E`;S<0&yjRqYaht8N(#%aU+81U<VqQKR^? zHiomF?k9U|l|Y?%AqF@UY7HL~#L}Z(0?aURxI`uZnu`Ui3xnr65%V~$@hW0c`ccXh zVgXM`QyYCEPDo7WUZ+bLht8Bd8gHFdFBH{->iJhXE+Ia+&M)p|grq;aFsGtU@4GRK zgK}tbd$EQ%QPC~k8}E11cJh8O7K!-9Ij}NV@BMNxV10CoGq{@0pwjLPH=_&>%pQS9 znGu_DUqoOhbk2yZ(n(G;!nyi4C&)G})#JE{HJ?Nx0(amddKS+`Zq(6si+M(=Y{#YL#5@QX*uY>_ zfdK8GyB*v3f&pNYPP4$R(brOJCzjU7()*bW$t?P$K|{ZqRPm z$D%e&f2vy$-pjI6A=}^9-%WH6{S}a*7j-<+jn?L8p>D)#uj+uuafnX3FV5WzVkL*U zaenVmr3Q5_C_@cr>Y+4OFL_2vB}*rOn95^DfmMzUgtOy>gb*opvR(=|fi^2O0Iubh zdHhgsspoBFeR@1%sjjC_K8`-%cn)N!1LZp;bTPIykeS8sOKTUR@wGx&HMCb2O9RUu zZ%V}C$kAWqc2m)%bsz!6HqcXyV>V7CBrRQ{eYq)-uxWRtS=gR?2O|_By;BKdI0{w@ z{|?sI0RYnsf&wz?xZ&IeP*od4m2#HFDltPp2ZhyMhZO3=z(i1(utv~sk%H6m;{b@= zFuisnLC<>!8?i8|=Q$R+1HlZL96*p0ZOY@;!^0h@?sXVWQWl_4Ut*qdhMuBanHRG; zajrd`j35(mKe2nTTTTt+dVDew@Sndk=tMF5&2_ zzB_)(Phr_u+7h}R1sA#!f%r6rG?rxI`Ee=mw z$U6Jr^rd)_CHo(cz>|yZ9l(oUjvXh3$N_!SG$MjHu+=)+Vl6k z%(qNouTurF09qE}5&CzIYaqKgkPF;Xhm+t(o8&zi6M}bJK)|dV;c*nGQ{{FN@sN=& zJv%mW73+5!fzwbCJ^n7#$}X)tekZ}c4(yjZf_Pbw?5EzhOVY;+(}_rE)}bH<`7zxE z*0o#KIz<=~{Zx465n&fANE8vpGkQOc%C8Yju@st0i=~$|LI_i8{AfVe6Q+XbHOE-{ z_JtZx`BbKdfQSsg*#|0& zXh_tyIDvSzlhz|6#h(?T4msGR`D&cuxLb~(%k|)*)G`X9AA{*h+>VNLW>XYis>aBr%r;0TYmmNCqNJbsJw*BMn*2eJ9I39U#$MUmb;0W+c1> zCZTWXxs_H4SwRkmPT)Y-`+E zF5&IMjR-w`h5k-WhP(=G;)Vo;hK949wP8I+DmdLm&3~&7HnMoUQH7to^{03SjF}bV zozQ0t1Pv(l6pvsLyRAQhgi&vQfDP$I%7V{;;!x0Lc*4b?HcH}2>m{zFlmMkg1VxgW zjwuMR#mgs7499g=icLr;1^&;DM`p&2VxTm8ymYduK0|JXMtQ+9APm@MmR@IKNh3`L z59BOjbnF(6g2Rf-Y=*}OWojktDkNEs#i67SY&zMeP%kDc8Dvhhwotfgq*pAktGP>a zPsEgy;L|OJHjEbT9B?}H`qZnySrIqE@n7AKqq|Gj+L1^(6@yx!)z|yYh}ZB}guh*r zA%Dv_e$=OJZI{&=l@aO-vR|{v(`0~=c1I@f#kb!zbmJ9QjO-X1-nn&T>+sOX_K}_2 z_YChCx@xYqP^(-cJF{BGBf~FTb7Ie~t9FeJU3FyWsyl{rkkCc35s|oYT$pq3A2QnrSmS&UZftoAPeiHen83Ca!ZahCAf zS6^-X&}8Lq#KfrsO*H&ooZLtBL*TdO)loOGc~eeGPgT`ujD?8Y03?SE2>!e=3lL9K z$LrFb36~qWwpb}un{YBb3Z_JS3Dke8qX(hx90~CZmqqwq2!-x-136oeh>@%#LVQtK z!pt&ppl7qFr9-OEQD;IZba)12YZ*(m?Pz_jvTYi!zBAiyM4aDk2P-%sTm`%$2*$SC zD+^$@Zig>Py>Z{RW~00f%og2E%JU1}wuNS6TeVi6T|hD5_H9ZSw&5;^CNpf?x^<~M zOQmnaep&JzC`xhH=vDLOt6)7{IC0gH+Jd&VR7a*OQwvA5y4mW~wj<^8wzN7-x6Mf6 z&2uc<=yTJIrN zo~f%6k(=Bh=*rNJ=R{ihNh=o*C{| z&P$Toc<_V>CnjX>kc>vO(wXDaY!H_rX@|(UY3oI?6jj(`%%Ti|IW=~tOgbiE(UX{@ zPDRGtI3PM#fqJ~knA~{g@{;J`r(V0HZR&5gHoCB8b#yrOCUQm=l3C1B0_E~J6sx4$ zvW`vK0u#@b!4(iZ@{Twg@N1Z7w<3$H8SxrF#w1k0Rn^+H-f`k_))~1yP@WhOPs-4a zBggr}r`8;P>x@a_G!_RxxP?{Ljvse zfDu_zSL7)$bWTb0WV2P7Gq+&D&434Kfkg=sy3AJz zXu3!I;ArrLeGU@=gZGga7H<-y0!}nG&i);qm-7l9|79{6-}myhtK`Ycddo7~&t#Xa z%?zK(u3eWIIpbxrnQXzn_kx8@X9~wnZh1;%K=JTBYVooI*@0;JLgan0P)KGNT-fyU z*}~8zg`rC$83z~6cd6dM@`2@Hjrk{rKaI|Zjhci+wzhuhfb}zf+KqpOe^++JQGYUf z^uFvn{kzU&?>m8q6MydO)1Uj_^!-UG6)CjEKa}0_O=dZC#?+htjH|Mcee6RIoyiu~ zpz1Yi<)J-OE_m#^Guhl4)U;+Te|vsVuyuHnkVz&4`7no8n`=wSYhP_mSud?OZJFA8 zqu|nERBf5s>sjWxKCdNsE$gO#ZJFBZH8bkv_g$$!vtAMNUHla+SN2!@cbfHkr~e_l zekmo&nEmo8|L*K5$$#h!R`lII65s8=$4ByeSo#nO7Vb5zU`^wXe9M3N1=o+!U}5M? zc62Ui;_JlgeST{u^BKvzCukwlp2=VlUz2lrK-9%7^?;;5@SvnWh&qtX^D_n8iYEz~ zfkXnfUOY!GnUGH=40x_cK`PZw<{xz9xl+b+<&83)`3K!_B3WLPd(azw&YA4|gZjhE zcm-R*CKmUCoJ#;2K|(f}02CE3Vmk6R*OB$ok@Z(dM-ErQj)YmBZ#r_g;yS`=@?j2B z$@$SrGVv_uCo3^Md57!CTItE!^Q4lyUmEr#%yOQoHrKFpC;2{T2qv{k~M z#&V=pBEt#WNv$N>2uZ-*FU2Qtd*LZFNKXa@fC>`;qaNTVl5p7>5Ab6XvV>Ob@I(T( z&+nN^&+}h~?uU=k24E%e{tG7i1-V6nl^29L2J%n5@((x%@wAsp8q+a54{y~US#LE^ z!s-QJgoWe&0Zoj*K9pU(h>gB@JjCVs$6WD^oSBU?{+*tW|DrEs;cvOeEPUY!Q)Gax zWC~B2M^7dsnt-Y>T>Cz2$L|vGUjOC2ZD$=s^mW=G*0|z{K}2381~Fucm_b};9^D{Z zf)2tyx!k$di z%kJ5mnU}75`5{+$m46_+YJD&-Q-hMr+?#E(KHIhj^Vn7BlzSskgIS6vAjb+@*1}aJ z!FKyPo5w4#+goGZj=Yp^U&U@;wbga|m9B7hpgEME_nvzun_ad{e~zAS7GlEXx z$@A|V0`)@Q% zz#ILKW(*T&%f`QBH66;nqUFCV+j_OkO!n1pAVcs5tqdH(8~wL4;qCqtK5{+bzn@R< z_dmj?kNBVE(`WrJ^Xbd}BN;qBl0oZ4d$As`0f?^oXa;TEDU16Hb}YhR*zVgaX|l`H24*zaH~{ z$*5;mL)gEF;U&gu*WozsxrmcPo52qgCygcInJZI_W z{m1zv?HtO!*Z(-5K8|+q?gu``W#%lLf;)k!F)aUX*R1}?f7s2^F#3A$JU*Ha;NyWe z$WY$I2Jg)Nn*S8Pp7Q^~4JA@?43*#eW>#)!Y}oDwOn7wGB}Zh$8&E4JvOOLBt(zL7 z`IiS*Zr843o$8S%Bo^#o)&mlNdF&%d8EKw<43rW5Z98%UHu*oY3Eq1D<=JbF`!AP< zqUnT=YmO^$6m0%gT3`5hi0r0)^uPtj9#N}b_!HBXmw(VZ22>DBQ@;6`auYUnwE#xpYEx>Nl!`n$R(;&$ z0DllX_OXYuFM2T+@WsdYTYHPoe3)qkPzu^AX7?Y!uLFyIQF5i^V5e<4)4A|b0V}N( zRyoY}GA?@fC=)SlI((&Iv4VTdKk@f}r9F0Of$%wn*O?OMIJ}p)Nm(x&9P@#<3jpiF zIRhAV{$d}}g%>Mj*ws#@&{>;>ZJE7ela^`=fNZm{RG<@Tle#Ho!1rxtoEuOJ24Ej^ zGVH=HnzyUtkE=4x)tu$%>)7MVWgL0?9zt}!xtf!dEvy2hqWAU{YmPm>Tn4jbQB)Nz z8hd;>)G+`&`##w!VCy%`cmf?y_(+H>e89Y2rf=P&f$PFwo9#NN@54tzrhA*k+t?!@ zFjM%B-Rk<*J`M~tz5JqVeO!b6jwtMPT9k zbFtfy?)dib&AMd^tHFGnPmy!ox#xfqUhJMPxG;RFeY(Z9xEw7mUnMPa!t9Hcrj5K! z$a>4eO0vsW###WJVHlCDkxBuA_5~|V<~&QKBD2}DXg^XZR>QtvrOBLUsniP!_n5(Z zI%?>Y5-BoAZ6Enh8eqzL*8tUC^CPes*&k(Imqj(8=C8}X5paT!$4tUw*&hrb;Rgf% zeYxiN@5{fm90^}q{tc7xjpeTc;ALMo_%nl&!!?<2y+D6wz3n7T+kXnAKl|S@ALG}5 z&3!qiTOD)$YcAtDW?Tn0&$0sfwU^sUa@oh8dO%cbP`|C02fQlS4C|K%_gdl$c^6tY zTP-ABC@a5c8j+_&hQVg2mJBmSQ@K|@8ml3i5YJgCeBI>S!W|iX1nU!hyxa40vCOf@ zm&M;=H|KKD_~!rKO_#^%@>T&6Jdj-lfy2uT4ra6Q98dszM2yH#XbQf&5P~<=#ksug zXIx#ph5Ec82c3a^k2!<7_2F3uI8VsPc5)qEh5K^_xX2AdIuv1=+e zvrCQ+v#@GauZ{y>p_!DxLzxWb+f{C!ECn8G-fJ*^rG zmy)?o7$y6BtIP49rp$%e#~yu9RJAq*(8UyBahrk;X$o+fO#`*hKK2B@@3>#Hwa*xY{@z^dy zxBu1EwOUco>T^-oxtrYnwiz~|F06xn91Od&%8??wRVh<%zz~4aFf|36VdL`Pwy^!6 z@VppG#SFQG7$!0TgngOyR%%aIu0=CzO*71t53^*~gp_2*B~96lG`@UtdlGhD}3$2wLhn})a< zFn#uM&GO)2*dOdMjNlax!yeN~c~9n%K!1HS_^$q9#tbyvvAn>2Sd%2fSOJs5UPuNQ zBBI65F~vWp#glIbP(l9U)g0*O0{h?%u2_D~SsOWL#o*a9U}`gkS2;q!YCEdh( zFK;tsy+k*YZ-Jwwhs4zYm1xO=8Q^DhfXTO7@-qQT3TQVRU}WuhQS~Rn!AmwT|8AG> zGS=};|F@`F%>I1vxYQ**Ty%Mc1TCSW&jYlSd}=+?=Br)4_0YMje?jor4<5)~c@uuW zB?Hago!QT3{s+H48vJ1Zg_?{ZtQ*KfLGhEW?!xO$jTh-oc-TB@R#KU_n-oB5*q!L0 zWZF0?`N3hyy0nj8U|YtoznE3wojeCtF)~w2RN9_#=}Jk%f^I5p&$x7@vI_5at8g(y zvOo7f;FQRbH<=fmkyrReHvnnj=#+#D1nBs)+^J`I4-|Es0eV%<0584a3Y}qqJUVgC zB}y%_`Nv&)4j3065@K<;xdjQJV8JEipLkVXdA=}>eMX+2GgZl+($>7ZO$2NOi=iHj zzo|m9ueFR}CT(I`8Bjd?TFY=bFg}}@Rt5yXzSc5^fZ4=OWpoc0>{Q9l*HR)n($ z9UsyQ@3M1hAUjM@diEIu5YUGLv!Z}YfMkkEv5(8-eKdiRYo_qD-DC0|Gh!14mJzMy zL0t{f`3>6>&j8U{Feu6oV$MG3-ogb2$Q~AUc8D_?c{c!}e%|GV%ZsHSV)~(E{uO{P zq)!5f3$_K+5q~@seMAY)!k0{UaypCQBUH(m!e5%V%cYM<_>M`CzEfWwPhf>+p5Ej; z&gZ)($*|YZN7$5$bz(4^i4;JOO)=~>24+)qTG_w)av^h*Qk(3B~Z8I%V4U%mRQ%xi#!d}}2qak*U}GqY_e=%39K zve!eV6qsk_RskAbe$1pU#bGm({>#78DIm*$-10QQar&s}_X<#LFTz&u@ znSG-!l|OCrsY_)%0}2-0dzJ^{c--VyXDT4zcmlR(JOS*tO>pj3@dQZZHbEeZFLp5=C_MX?#GwyBv8GfDdzvv6$%olY1V+B#fTLH+(-qYac!oz+N zOd{FEqPJE-Td~%z=sgWdXe`(S z)GH~h*{*Qbj6YFtUv&Wk+gT*E00d%>?D?nNEa&KGlD*?8brw_(BAx-Wea8d%_-X$g zocVXam@P98;8*h;WVjnmEm>~^^6q>Q zK3+6unm||fyVqBMvA6;bEkjCYZCy|fv;FLammAj&6pFkFyU!j4zC+N8Jy(BWGiM)r7*l@7UHX03OF-{ma<4p)MYS0r9U~iz9?2BQ z5Q#jdiPaa|CLjc}iGY0h0Myv52s>eu$zZBRV~G^Nv`tYpBrD8c;_5YC-^)<#GBDXx zy=MycwegY9h6$O+t|OLp88VOE5_^^!Oy_TNjV#gmyV^RRNWm)Glt|}GuHMwn+t;r1 zF2Qs@@+_Tq&tc~|M;jgC5Vh__!Lj)>*^8bB0tuh6=UobMg~%zA4Q#TequaKyxDaIu zn@wGw2sxae{H3n?L6jR@CDpH5E!E?F!MVPMLLwhj&WtM*QIkd0Z@=XW_0uP zuHY{3R3AoRi;FokULamy&_#Wq4AJ^nBr*x{`ZBmclNFWx~saJ_%`$*wCLqRFCZ_QJ*W5Q(0@jkWYn22f^2Z9mpkk8hQ#}Vm$QZ( zuHQLpyj*BOK>s#+xlnPB=k;FBT2Pt)X<3OkI~&44_EY|!Vh$dQq^x^eBH=YYQ><44 zt9ii-yqvX>^Lg2__GfE~=6ir|F8aI*U>6#a(ap_?=M`S=7hIRl$^HzSTfLlB&S$-2 zY6qYRAe!t!P5aSU$|j_IDVBoHoFm!r@wvpCWa;+$Y)YseZ%<+MtU1h6K+0#35>ap? zBtuK}HTBOddkY=VK{3q5?$taq6zg{cqjA~`3DQ!f`P z`xMZ7eU7Tq)}HI-tZIu8u=c#@^9rcHu;Q-23djpaBb)W+cudL5+2c1^??#;D@p9pz znJcn~E79lk$aKxr zxnGu!T{>XB&bAC#Rm(dw1J*nIqnQEg%=9yZ1NOMshx`H0ba(H7b$j1BV7t6-z#b9& zra$noInHr>z%yqejtfmm{UB}2djHRVroBu{UoII}dml1VkS%use)!(G-g|DdDf&&P z2jAQ5eeaHV`WPOc>#gwIteDpi<9my@(R+BmCJgD9_gna8emhOOm5zJ=f%LT|PxR|{ zykG5|=l!v;{o$Ltke-&mg>=^MX4DkiJlrp0_Sh&u<}pjkn74%={3!@!w~W zz6I%znsnrle?YIP{rNYf8+bA~^=m!&jkNwhe~I*~C4GhGfYa3Wq9yW|kc%z2?GxgoAg_l zj{2WA^;>=3G}6=N=PgKIW6DOqfEiQs|0UBiE4>qD3)wP%y+r>1L^|gux#czk0Mhz% z1=2aLpb)3=8rH+u7?pF<{nPcD62lT6PHa?`~Ay#(omhva^&EK$#AknO_wTIVdyeOs6KShW`fAK)+PdF_bk={1f%8pTjdzbp-(%A4{M?81v~~O> z(urr1_~8#E{W;#IgQjBh^+!w8bJc*3%i(^EhyM;DJ+0lk$?vFwX7}EJbdKv$vtG9U z??C$M$o!b>-aD75|4XKRN2^SMe_SH}Mr=T?i=#~@|5YYExn7ee#ZA&~SkR2RML=;KCnJ zsTU+9kciX^98izshPd^D#IbPb4Z`>4y>C4;wiAk2seU^%@0)q^=Er)+>Gy=YT}>=l z359piSCrzIb9tW3PUK-K(860Bq7moI(RxVq0Ac9L)io_~Cnixnl^iJL!bn_Mh7+!PSQ=w~y^lD)~0*)IYA#8>7h6IX7@NNd} zF29i?R(gtUJrL*!d6$IK+ntrpu62bHSqWrn9hrjNEcYu&UvPd}#qtm)%KCbH zwo86c_>w^J%CYxW0d|0xY`*m<2iKl`sJuT0v z1ICjviY>0(--?=(wxZa~-aye|_wi`+C`UQ5#_WMX-yGQ^cq*gNTG8_qJ`h$<_Ye!< zwG3Y%5O#bMq{$n7tTJ$0Z)6%(>-8-VYBlrMK*!#}Lv3jZUm0Wr&T6s(<0k#_71xBF zW9(Q&O$B|G?w|IRVYDhdLBQ_oSLnVExGwZ|`iKbM?r-nZuZ{F%d_SCv#&T*}jP!6T z9zL&*Bm50kkTX%5Vo=j~2$FQL*8zbnX@(jrUv&6=m$ z%_Idq*hasXIK@_d&`Q$g-WDoVi4Z5QWET%iaD)Yk9A$`&R2P8V^+2(Y8nL^kpkKqM zd%&gruKU)NZnVGwTL<%5s|hSqsI<|rZzdqoL|82|6yHxyA!54Lm@8|btC9CotC)ZW zoVj&ym7%sS8pcQJtkIUSSd$c7=N-h*g{tr?q7vbLMZP8-?;nfS*AbMAC17oYNvZ|s z@>a4j>xSuWLjs2u7529_H9h*$@E>yU1`LiH{GMspi#V5%i?ZTU!w=!#}zhx&M;6}R0`c~|qk@A-LlkF4F{(oZlMXT_hy=+p>SjB>W z9RFhc7swNzh<)yw4yDXb|FYpIvOdF|kDs2_BFYb?(7SlPLHQNReEbh5Rhja89MSn# z#ZTZ~{^r8R^Zbu8f;(UPRopZ@{m*k?%5QvS+|zDme;wg@&QAFy6-~zeyB*7JLIjtp>n^ZIz4M*||@`L@u@Hb3ONBG$O-%u`7-KJ?WW9NS}=M)&* z%QWR5P?IT7{H)<;|0Vt}V5LvQ^Zaq%@V#UF_YlBbo2aJvJ>=GTNnyMV&-FpOIS(EI z-fw^Zg5vgHR5`1n_#~e4M1<$>F25W8pg`&kag-+`JkK@vE2__Zg4Gbm^fSOq9{tDj z*n^5{h<*N5@e{az&f1UrN&MMJpVd*GF?^(!Of6^*&xKh|9Mj7a@Q*I4#(C+WcZDfD zXD8s-+NwDf9Y)9aw)DxrfBs{gxVL5F z_b%cn@x$zhO``tir;5K&_Q1F$j=A_-f{{EaTli7&Q(QO(i1CtEO;a$jaz}IT%I1XY wY5bF_IDa{>aqK#rySV2y^Rwcg)E_{ZJz}d2Z!z}^tt5HrSH<6q433h?KQkQ_p8x;= diff --git a/src/tensor/opencl/opencl.cpp b/src/tensor/opencl/opencl.cpp index 82a5ac2..d79b4b9 100644 --- a/src/tensor/opencl/opencl.cpp +++ b/src/tensor/opencl/opencl.cpp @@ -77,7 +77,8 @@ void OpenCL::initializeDevice() { device = devices[0]; context = cl::Context(device); - queue = cl::CommandQueue(context, device); + queue = + cl::CommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE); std::cout << "Using device: " << device.getInfo() << "\nPlatform: " << platforms[0].getInfo() diff --git a/src/tensor/opencl/tensor.hpp b/src/tensor/opencl/tensor.hpp index db97801..4b51fd0 100644 --- a/src/tensor/opencl/tensor.hpp +++ b/src/tensor/opencl/tensor.hpp @@ -3,3 +3,110 @@ #include "opencl.hpp" #include "../tensor.hpp" + +template class Tensor : public ITensor { +private: + cl::Buffer *data_ = nullptr; + cl::Event event_ = cl::Event(); + + template std::vector all(Events &&...events) { + return {std::forward(events)...}; + } + + void createBuf(size_t size) { + if (data_ != nullptr) + throw std::runtime_error("Tensor buffer already exists"); + data_ = new cl::Buffer(openCL.getContext(), CL_MEM_READ_WRITE, + size * sizeof(T)); + } + + void fillBuf(const std::vector &data) { + createBuf(data.size()); + openCL.getQueue().enqueueWriteBuffer(*data_, CL_FALSE, 0, + data.size() * sizeof(T), data.data(), + all(event_), &event_); + } + void fillBuf(size_t size, cl::Buffer *data) { + createBuf(size); + openCL.getQueue().enqueueWriteBuffer(*data_, CL_FALSE, 0, + data.size() * sizeof(T), other..data(), + all(event_), &event_); + } + +public: + typedef class ITensor ITensor; + + using ITensor::axes_; + using ITensor::checkAxisInDim; + using ITensor::checkItHasSameShape; + using ITensor::computeIndex; + using ITensor::getSize; + using ITensor::shape_; + + Tensor() = delete; + Tensor(const std::array &shape) : ITensor(shape) { + createBuf(getSize()); + }; + Tensor(const std::array &shape, T value) : ITensor(shape) { + std::vector data(getSize()); + std::fill(data.begin(), data.end(), value); + fillBuf(data); + } + Tensor(const std::array &shape, const std::vector &data) + : ITensor(shape) { + fillBuf(data); + } + Tensor(const std::array &shape, T min, T max) { + static std::random_device rd; + static std::mt19937 gen(rd()); + std::vector data(getSize()); + if constexpr (std::is_integral_v) { + std::uniform_int_distribution dis(min, max); + for (T &e : data_) + e = dis(gen); + } else if constexpr (std::is_floating_point_v) { + std::uniform_real_distribution dis(min, max); + for (T &e : data_) + e = dis(gen); + } else + throw std::invalid_argument("Invalid randomized type"); + fillBuf(data); + } + + Tensor(const Tensor &other) : ITensor(other.shape) { + createBuf(other.getSize()); + q.enqueueCopyBuffer(*other.buffer, *buffer, 0, 0, + other.getSize() * sizeof(float)); + } + Tensor &operator=(const Tensor &other); + Tensor(Tensor &&other) noexcept; + Tensor &operator=(Tensor &&other) noexcept; + ~Tensor() = default; + + T &operator[](size_t i); + const T &operator[](size_t i) const; + template T &operator()(Indices... indices); + template const T &operator()(Indices... indices) const; + + using ITensor::operator+; + using ITensor::operator-; + + Tensor operator+() const override; + Tensor operator-() const override; + + Tensor &operator+=(const T &scalar) override; + + Tensor &operator*=(const T &scalar) override; + + Tensor &operator+=(const Tensor &other) override; + + Tensor &operator*=(const Tensor &other) override; + + Tensor operator%(const Tensor &other) const; + + std::string toString() const override; +}; + +#include "tensor.tpp" + +#include "../fabric.hpp" \ No newline at end of file