From 770d5c02b2b9bce034fc0c8a3a4475f5d1848764 Mon Sep 17 00:00:00 2001 From: Daniele Verducci Date: Tue, 10 Jan 2023 20:08:55 +0100 Subject: [PATCH] Semi-working png textures (broken on horizontal walls) --- assets/texture_wall1.png | Bin 0 -> 24541 bytes assets/texture_wall2.png | Bin 0 -> 11437 bytes assets/texture_wall3.png | Bin 0 -> 24738 bytes v2/raycaster.py | 68 +++++++++++++++++---------------------- 4 files changed, 30 insertions(+), 38 deletions(-) create mode 100644 assets/texture_wall1.png create mode 100644 assets/texture_wall2.png create mode 100644 assets/texture_wall3.png diff --git a/assets/texture_wall1.png b/assets/texture_wall1.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a13f59475733c438c9965bedde96755acb3cb1 GIT binary patch literal 24541 zcmeFZbyQr>x-E*k2ZvyR;O_43?oQ+G?(V@|gS)%CTW|{=+}$q8w%>mDymQ|fP#_<_NnrQGfPkpV+?CWE z74%&QZ0&7~%`5=~j&8O90)VTTF%XdJ%4w!%+%89)(R)j{4#*`$5-3v6@QGd$uPFRY zsO{8nY24Wx);EtjN=DE#;!8S3MP^20{Nwkx?B|E7_a|Bm&rwmSg8iiH5uciYeNLZ} zgEyPy^RvjiwpWbon1@HJmxrfrM$`w!6MRwcL7PEtpGK1x_w@rT+Nr3@1CaaHZ_n=A zZ~50vH?P+XS(leQ-s1-%o!)E1=e+(NSzPy1*DdlF9&6l^919kuep|Z637XWr_uIFu z+2&rWUySWnzgE5$S>0TBv0ZBuy)y60#?sVA_IUn%Z9MJ1vf+`w^X_4b+u{`v@8yP%_|_n7 zh5uML!U9}qpOKr%>(a$7JIJv)=;1S{?Z9heWP)KClg9geA3wx6KiAYmqE!VMcz>>2 zRdBi6gt&j~f8(A1=+0;M)>OeZdH3e$k*VX;HRFyaM>80q-md=BeWEzi^Pw-vVemJDY3}+xuyMHGJE-?SFnek11%rhwU_0W6i5N{ib&p=@O2Za*Xjcc~&;v zDW+g*p!pe(cL=X*YWohagC|sP5>*TB-nnPW?%nXk;w&-*pY>|Xt(S~*x;@6E2U zOApF^%!D`3)C{-i8@B9}s|om-YhSC^B*x-PJ3&9%xtH_W}10 z`ZpXrQ!YH8M}m&e0>H77yh9H9 zYxq9ia*jROWLcUcLCnngH$0v0 zeF|fsmOdx)%RcXUXr7zAJ8!f*`xaZA57q{%jo;o_vNi^%Xg6*y0xq7|7u}~SOZEj=B*ktdXY_QI2Pl404 zM}-W1t&14a<#E;ZZ`-MJ$wnNWa(!r@x%Is0EFtVf*t!Nj!_w{gV$@iCX&9r!DsiAY zxPF<8_@X<=E2qzhGB^hr`Q4;+KXY^Ea!hCc+&S4hE|ifNBYW=B#*c1oeqz>oaQ(m) zXMH5i`|_>fq5GBH8)MLC7CUgkP;~DlMLv`q{h6RM=p@d3$vMM2@*abR@y$3EIO&&H zE#fFXBZY}c`x~$&c$)g8^UD?gUclSf!-q-Gx{fyTWykMYvd+_6-A7bEM?S|~woT-o z`=~WK?70becIi#*+XJ{dVq~p%NO$lz5XCoiyt{VfeR_sp5ooV1*4~@ty#hZ!XP#XQ zx!x|Fe}2cb!5efg;bm26uffLSRmMvc5UM8>3AddMDT*n)&(|8oWX<{ zgg8ShByx5AGvqrMaKc)cNI_N_wCxE?G-_@dKUN%4GeL?0`|I92Ci_d*>#UDGjt}04 z{soCjwdHu?SW*or{i(;Vf<4VU&sFbN$?q;*(J_AScRoWtcMZ5#nW|wemmVPU3eeu$ zH`E~@Y^Xj^!F4-T^qZSLlB@{Gu#Axy7&6;)fkvuh#D}Dw!dM0Ej$Su2pJVT~XwSGL z0i2m2A`cG*fl%ochSTSM+5XYQ&Up4#$R1D=Mw09(uPNX|iIdq)(|d!)R^NADcvte@ z8z$ZkMBdkaW#ha$EY4) zeK`}Kw=D*X{rxiN;_`Y3z4?az%Y6-G)wre4ylOVi{`2D_$;RTfgS&A8<1Ry(XmI8U z_xt+PrrF^+_UdJUPbcK7D#e-TBjx_04tJd74R+<{Bbf|b*~Xbyl^?HEo<0YUyhj_j z!Sq9{x=_fTIaveV4WJ&C88>@IDHsc!4;~I#f?e8mw zD>O@L@B>YKx-o-4liR$uik(n+w4jtE?L8+3F6CZZPxKQZWrtWhc8t$lZ;sy|7Q5PK zymU1y7OOf8bT+8Q%`gJI4>WOmw$4lx=hAPu-pLkAsHj3`SX9xMrfO{HsoNLrwQT*@75|V%!9@c-o{+}hAm>hODOH&` zNZTdWo$x$zueF=UK{M;HrJ=W?8bv}slh+ssatEOz@31E-DN253#&H;>$S>~to?M~t zKwdz!>jBTapmZ%SSQ7otW8QSuL zaMji;yTme`)1yzKS$2hC&6!S(%gLH4v*DD~-)~FHD!dKNU7GWMTx*}XH?{d>uQ-(Z zygW_GPISmjtcrt2AXOT#-AgjeGSWjZwr#dpld^!}FmZM9}K;B_sB<+1eeW z+yQe##|G5Yt@JzC5_>AKRpT}GEnlagUSdTv)b3gppi7#abQE3EwzAe}l@m{tYb8xe z=(SEeHPsil>lQ|@Q`;a+(oDJ+eL1alD^EOHhs0EGBS!We568GGnGZTDanE=RJHB$F zmnIz--Mheftz{h~2ULx3q?s71OaF8`GFZy(=vq?l6UR24a5cu6EwOaEHcOgN_Lc1`^9?N4 z_OLVP>Ke4$b}UKu!;sf4vC~cbE`RE|;VzWEmNXfUY^*ch4~8W-o)-KPagJUo#Y<-> z!7@3_Y+>zPva9>-P!r}tYlyDv-ZDyt0m<#8;HqR3kMG|6#9gGYWMyY{l5y9XR#CVC zDLLuI;5Yh>rBiWgYoR@b;Ec05Wn@8L_n14;!Zz7rd%|kiChjZZ0f#}qh1xW;lm0#0 z!3_6o@pWfq#6(9oXnXGJXIl~?kVYr{x?~%BMF-@fx~<$r?ZtAcWgA7VbLMK1pP|ce zTvT^lbVuMlZFXj-BoMwK(!BPtkUYG!jTOB@5I#e>prjaRORKg^t7Kbvijy@_j!}ol za2zPnbJ0LK7E%St}YvMqF~4tIP|n2u$E<62LSs`J*t$52m1 z#S3>M(x0bcH|B_fH-+42z;W3c9?&!|fL%z20@p2t<_-H5TF@t*;iW)ouk~uMN(;f} zHRs_8aclH&Y?*u#Qp2!6x`v^205Y`4il1U=pl?3w zo;o(twx9+&AllyKp+rK!QjU2Db#_3|IzTwlAnva$L5QJrGZ;Q~)4+xFQPcvphP@1l z?|ncWqvG?MQNT_51r7z{W=P;*H&Fqb`Cv4Vs`Kf)pl4I4Yu${gH5B;#S z9Q3PVpe=pagQbt5n=RqVA;KaF9G_(B%vjzj3&UCfI1QmbQvR|&R+WEV40?zA z;}R4YO$g!A8KI=`_6;ZwG;?>8s{*cJH0jZeVf9iQm+dceenNPw@v%d->b2<8NUtHz z-WGO}A-&bv0XTF!co4y#GaHt57GPf6@Rq@}G|_>FA;%fEnmZ}IpF<}eGaSFHRXc@% zth`QM;6AggK-c?v@0Y&GxK-;npOKI*iO!JLm{^JpJl8}nt9K@jCKpoxH$Q6eJIGLh zB|Sl#Uygqo%q(n0kBsUMIOS(RAabCBnWBry5Z1O{;CldWk|6AFVV1>RT|6n?`_uww%d!f@CN1#dQaDL@E{@($uB zCN+YpFGOT+uGK8zZT!G+QZTYEjUSLS6Ewyri{_bKya3ei%e zSL2!5zK2*dB#M`B9!odtuT+$U-RJpBS+_Z47hd`CSnQr!ww2IFX37wnPeJrDkDJVQ z2ti&F%Rd)k5jOWdzE|>rmQ?=qg3Z7)KZp#R{^mQ3opkQz_)R(SkQe)8`6C#~B^a z%*mFApq6&d?<8dCH!`7kGP7nErSyP;>mKg5$Q#mBw>xDGYgk^*w-+I{|@%qQ~ z0CZD;+^-8FFIN-|EMh2qXfoPr0m#DDNV{Q6-+O&9yn2NTlgSI#XOPv*oRh;0uA=Ak zd_AkRh5U8lyj~FaRc%C2V77TCVJ=j$+9j?nIQY3>gB?tb0l2JlQ(giN3H*mva7(0P zZr@wnn)0%-c!Q)K9YlK0kkMD8>_XKc12TQ~T`@=akizT%ziM`~;KgYjNO8y_n6$ub-En21#SG zc-Dog^o=irqxb~a(j@I=*eK620)=4#=rEnjdT}sVzowxOTTkz%U071cw!y z?O)9c%jprD&2EJYW2vF=_%oD&POCpjF_IiA6>nZFeW^9crAGDp+B`%bV8y4m%z2ql24kgj@(lKXnoR-zlyc%V9i?uvC z6HEMc;lOlPf5q`7OYhF7?qvd4MHvd6UTE9f3rqTTgH%E&jEg!f$2*2H(j>0gv9#m! ziBn$aEjEq=*2d~+Wk*+}TG)izJzIovWtjsPKKpCrywr)i6&4UM{|qQ~g!*856ENPC zWq0Eui=TcEB`6rINuIgn&&OKI;+_SzypQo@Cwgj*`A&OE9Rq&>K~Z|7pC-rZyz11UdkUY|cRS@lEVyGnAEh%8m#&&8scC-*(!Kj7j^&~Dq&$;n(wW)`}i+;H~1`40$BNIYTrTgli5B`g2 zM#rei+K(WAFPLl#Ri1dMaS{*MaXneUS%MjzNOP2Qny1~N{Bw~XE0^0yLqbI}bz71F z=juh)X0=PEME}k87P~U7s&p98gaXhF=JMCbyeV_?8gh@6U#A5xoTNi2DG?Doy4>XQ zZug)W+mf|Zz~pDqtlwqyN|JU-c7tpD25`TJavM&v5znd>Y9R;a-1Q7{+^{Iv(IAHr zR&*u+X7W;3$RAxNsMky;8nf0?u+WSlxx()`ALO+2Nrh#nbimM#{hIWwM{YdOZUrwYD zhC}I1h{a}UjZui9+MH=9TS#`A8p-p0-^$rx`70?1u~;r@+ym7Tz}z`=B^XD_PvlqL ze0YHI2^Bk+?4cH&HM-&K^F!Ay=JO%=UcdFP09e_QoL1n_`~jIe?G_vKkRpmx+X;{s zP^9iOK^3P?dp8G3S-st_N<4-8FL7uQWmeF+8mGOU_FGGrf`CjA6a(weUe>bKcys+$ zRQDyZ7K1G|VY71egEQe*G#2q*kM67E*&)oUi3P*I&WnGdqZ%cyE2DBjQzN0A;-qLI zQBj`b%4+N86{ZxI9A{AB>#dYpB@cWb%i+^G9o+5*vq^=GHWAUhyG-U{V-}6wuyd&O zQ`{|$%oL4ic4%e^;e@8sbHNf3CNN}1yZ;Wb5~)hi3#Mz~8>gV4p}6k*D!ni(TCOAoh75xF1_VG{t69Cz79MTbHZ26?zFt(UBb#>PHRuth*&TgmrJ=kqv?-cgj|Hek9d zhzSgao%WkiaavFP9$vpo0&s6or5cne7w~;R`%bB-iU<%9Q{)yJE@5UAIjq5bQrqp) z8#G(~NP z%R2?xy)LC-mc!r^X|9MbpI5B;M=KtdSXfg_H<(N60>041njn25hLh9^qV+d%3k+58 z@8F=)lO{QCru6X5Mve}^NBlgJBFwWNIXgcZBAMB%X@1^>lF|Z#J^B+mMa5i&zgIQn z$`GX@BcjVu!8GO=s6vRrR~Sm@rn?nhdqEf|-Kd2I@ai&z@csvNodR$)gpPz}dH4otC&f$b$OD?nCFT z0m%w+qG&Y(stt8vw~S+yR^oo_dOVz)Kh7%&b~gmvCl@U3)uBQqh`e zfFGyRwUS}f8`a@Sp`>C!H_AI7uYC^#(|Qo08}hDlWCd*b7vquTN-RQA)2<6um(B`l zfiKSp$sqS{0~dFZhXp;gk@cz%O0Raj00;M8X`|&&RiO-PZULkWjs;8#D`D1q?zQF| z8~hmkuAefr8v=-Brg+rG=OgG?J2jk}!;e!p36&H@aLqYF>s@{fiQKBR>qw>tE*C#J z$-`rC3L!{=zhxfbs&Jf0j8gO$H!~+}1mU0d(;zZ=+c#<7tJXpq$jP-ngvM~nZm*Ze1N(7^-LW_?b4vWv(mr!s-8BLHSQ>13NT~ZdEC=~>(f-OOLi!?(Ua0W_G z*D%h>`vF5`+3T89=`mMh!FhCd8-mV0aI3MiFg4)%isCL>-J&9`NC+mOE5V969epx0 zm+|$Ztt&*uI666U(1JiFr^R)t*o!Gt`GOH{+>Pp=s+Er5<5e~dtkYlj%|*jMUpF)q zoQ?jO{DRld^w#Ks&JQvPxk;NB>kHCbZwP>6bVf_A+m1ZlII$_6xzK?MSx2Q3jh5}H@d!kX4144uZv}zoQZG`O z7G$G$+_jV<9()`z^G?Extd9B@TdlqQ+I(CRSM>>vpJFfOeu&s&!~lz;nv#fw5N%p; zDYc~@;JQwShW97$*P}5-nW0ZIJuVvqvJWZ5%`n#CM+#8|vdU?IeN8x>>%b@F)UmTF zG4s)FZ+6K~#GfJ3NfzKuh%L({!;*`2fTJkQT<@7nKY?>z(Jjf!@{2l&b}1%OT;pU( z%|zhoNAPR|;wY)$DA9Rt${=scaPz*G8h#2(4`pa(#$qzj<6C%KOXvmovh?k zF%vy(O%cTxhbuUJg*vdtJ%Xo;)Sun0QKThJrK1-;eXzI6dT$HWU>4hw!a3z4ZCQpc zNv+*<$Y?r5?WbG<8wGsV-KD+Ou~3{MwdI(=1tp(^#IIF6s%Jk%D3OTgUzLZe6i;ch%ly-JTr>sBg4`Gj0HT@l7#X2(hi6m1>xgDMe`{Iz@H zhld`Fur#pu@FFzxSI6lq0wwF=ALYAgz4wzP`xNXYr~ZQ1z>TvKz56Vm!v1O+-* z?Qw$q{&l06j`P-zyW=EK!rH_)+FK*qxY5@NtoRhXxBK~I>rMi5oq3&`>aR)L@w?DT z)XQxHBV#(b-fBn(MQj`X2Zz;wd0}N+L3^-6yQ@S$(t-TGH=wI zLC$wp#trJd9&)ugqZU*I^Qc3mhKsatp@4blOY2B^uK>(K6`2<{=LS29GUjQ^K?34z zYf9kFeil*<;E+%tbr%YxvMs{XD~ie5GCg+;gR{xxG77~en|$0VWrzxupm%awwbd<(3H?;oN*!KQsy0qYX zz*zA)9vH$!euxYU4zG)@gevepn z+2*@7!ErhYUCvQj!4S%P79oD0b`T|96N2nHaaO0Xy6$8B+}Las0;ryixuGVF$F$4E zlo12EN6`J9d-s5_HReEs?n%7IWRxnFr}FZ?@u(UmQ!wn~PrF9H*XrO%?s)WuKB-FY zBUt>nw&lMlQjd~cSIxH!lI~xJad@bd>K7}`Gle*7ylbk8(=}aqPtLDcZw6`uyQ{;5 zT#N$>swZQ2oN{3GNYx}h&S1ogu#3_T=eVvjIVJ4#r3*PE&Lwz@4NjN`4gthyzux1f z7=qGfk5;n5?w@t01AZ7RG6$G#DWEmTJAcAF%2KOCFb2_|cs96%*+qU%jjXNAWJf0z z?GJ>}hJeq4NYw7UZ}Y4&S`V~NT1lWmhs)qBwJ1?hvb4&W+RneqIa+9`oqh7SlqU?p z%1m-_`o-iUykvel+bGf4j^J~mlie7xJ&JfHtFqQs+UT2tkjUh-uQlH@Y}IyTulNdL zkxT~=vkM-nWc7b`qfCDKA&sVvz(3X~uO?Yl8Y_inh&T4x+}LdTl-yB!bXqNKO9ji+ zZ{Tv{!sWrNg1lCzc`r!mm$_%8qRm%!W8e^4X3o;0J0)ltGWnoyDN$gRkLdFnBfJ834jg0c%%F%n#ddm+<>pS>L6$UnkcBt#g27sHesNNu2Y zlHE#gQzH&CEzPRI>Q|_|2G#r7Dc;)M<*~O={o|oND@UgA%`#h2HUU}? zp-K@vj6g?|3NHD}Q@dX$!k|wi@bby^?+lZl*XH1elgaySn8(16>yybFcKpx#3%~E~ zH~6+Q9Kv4uLmQL}b~KthD;yi6%bc9uB?vD^dcuGqCS)mms&4ya5O;TXBe_(}^1>Ph zW}xY;FN;h)$4>i8y$=&116HO42KgAjJ1D$JE?AN~@5zO^72$j%Wbr5GNk#2Y3wi@= z2~<(*Eb5fXTVMxCHF>-XN`f%Syx>9YQ>Vb(*e55&G&J~esRM*WR4Z_9JRT3q{F+DK z96UJg1F)NZN$q6t4$$P_Lv?18MQ;XFZn!a@bW6~s;54ghm5w#$Z}?xbjy#B9c2{pm zd(LLE`@g*zwMeY=kLrOqqXy8#P%F>0;mjs~CgVO@u?U`p(ZL^>ZDCe35Xxo93^ z-rv6rs`F!XQ=6V+^)Jd$iD|#V9cnS_0c)F_0!t03E~2_bM4|R!gf|sW`%XjoBIkw= zVlICUlb#KT**XkXTHGXD{LwZ0ZMqrvJ%$x7K|>x*DNCR@0?2e&P}z^$<~fgpC*)_! z$LH7jH!UG{=*!3bZs65ot$4CEOpU{=vi`0tfzB{o`Yi8bi5&}u`|yl z3f9{8j>_^qc~0TX)%(?AioT%~AQc8FDuI3j7dh7M^GanQXm-RwGg8W+40KW)$oGUS z4>-WyX(?4076ijDOUo^mtlq0)1!Z}W&FU&8!6^sbyiq>@ev3tE*e=!BP#Rw;0q)8% z;*)T3?-A&?fCM}HaVrxUiTXvhv_f)B2XZkyFO-%1Tg!z&@Q-BtqH%uhcv2mnTpIi4 zM4h#Y;{p7H1dfA)KJzUE5MxUCn&lBzrQq%QcG64Xs@dVWu{>7mcHn_tBDUn>;MRN= zmsLAT?i!t{UCg0gbJ-4+@3v?@o$e^ICxih!GzA63n!?7=QuU+8+MIpr!neZlnHZb# zCAVHTca4acTF|rNLUYr8pqTF0Ih4;4-GYkzB`48dq+3a)C2}ox?96k|m!(b%wDwgr z7DQ@%{I!yMJzbSQ78W`vHX=I79wnBT2~}jLr9864kVP9>_UK4~2oHoW-2<^oE^FG3s3GlB>IC)At2nJ>&WviDuhb0Lw+aAo z3L~ZUSkU1bZ?SO|xR)~3wT>XMVughhVufD> zAaeCrZxBUty|?vb?2DDe0VM^8-;OKyF=}cD$`b>cw=NJ}>#zV~ zfbYQ1zbCP?YpNJo)&vsmHb^`lLV?NB4)OMrEyiANQq86O1Uz16w>$g>P{- z>T5|}DMbT`PfWzonsHB+ zIp6}z(JqppAT0zrjtvc7W5L?EiX$Yy#|f3E5c0t0S!#j1k4zrBaWsKWY-zX7_ zwg&Uo)#Y?#?W__6zjZx3E@**aje+V~eMvZ3)rEMj?s4;84u^n!?YgHRL zYuvo8Ij-PN^%@Gvq`O8g2)=CYTemR%4av>QlJ3gT!V{6)n*JUKx11UsO^RNCq%g%% zAD$yR&SA)0ZRzpWo*!MSzDCPV`k}aS`I+v1gk{h>LM7~pApD`FE@32nwQrl0dpwTzJ+BEEiazdb988EaH9TOZF z_0#lCU2l{y(pnSO5b8|s_1j#v-8hFl8$Xdz+Y>1{S*ZTZUT>By?F(sI&!Z?0)tj*Im- zqf5C4ub#CZ7)yai;us_nPZvK?`ZCXhE7q0sp23JaQw(YvUMSG-vni)x$@=9T(gnYL zhQAOOo@vJidT+Sj0p36(u0R20xGdq2bV3 zu#~_9JBa`%*RrPZMJ-DyD2vLE0w!l3B`Kp43|nAT1z4SBuOjd++reZ;Sp=VLckAn3lF}^9ojf`k z*`Cap)o>L{a>^Suzc8cFLXS_J{qTT#&WZk70EAC_?=W3zcndRhbH~sL)`#FGf`7x& zqE^L$oJDoEKpZkUTu~XcvHVcLVTTre?wb8NS$rPs`sx5nU}J!=Kvf2&KWS&MJnB6{ zIVyA6i7Klq$>x!-mZ;p%&rdGhRA^mzB(;%=i{dD36HcnUJ+-=0%_C;E_?{n4xD8mo zzS==E@DEG?iybk~IrhT!ueeswd`10&I~IO6Hw=_p&AKOZq$u8fq-2e3+|m zP6$Ff%pqVP_q!IMtB^;`Cyxgo;&T-w0tM8?kKN10|K+x2Gh0W)-`keC!zB@X`Je>v zGkU+!QC~XX_BN+v!k*(F_b)-1K2_VT1ICof2f2|%9T6Wfrbm0E>7iSLf3-@t&5%;h zILv-e7w8m2)D>O=z3#>k9WYB^0|EjLG!qn*6BiWx$42RoJQ-f!xW)S9P=jO@g~`$Q zIYZfmie=D+gmD{Sgo}~PgH%3C={!M7W5=Oli1sx6{5fSX-!q`D3aQGE^a5<>WT)Wx z4dq-ChT5S0!WI8u-NE&ohp#v})z~Q#G|f7_L`ZAgNOho66%0uL9}I46oME4s9D4Jq zwaB`(4Rh-1{JGBkN5+7!uNc=D+}zg!-6RFnIEA=q4}kSik-2SYJ2Si>XfSL*I6$?TN$0T<4ziaVtUAu zu>=DAXe0^xUqsqu!h=vVhrC__Ds_pH1u9W6+0o_vAeL_f-h0lMH6BNxX~}URIdpLk z48eY_fMYWcJ@Pnb3_>G$LR8))btym^^N3e9)c-=BZiCm-YGMK)Hm?CgWWg;bXp@Uc z4j=g4Gd>kkP5ZzGF0{8WPuV>IeK%7X!TI?U36omxu63%dZS~;JM%KZb7dg=0Hz*C) z69@<~!t7(?x|*~UhoOxXjlPkM0f5HU%J#z=KtNo)uD1Gy763;A1AvK{H8;_DTNe?5 znGrXUDzh}5w5=e()J)9X9-!zhqh#oAVaRSo#LEN2<;w9vUA7e*QzdlOoEc6N4JItE$>2I>z4wS$|rqrNM(wZoU+6o2Co0yr4j zfB4zV#+u+ar@n!WlOs0~(MLVO-^qWwUD)-b@b3wJU;m+Za5SP7|F~fK=+6g$mVu6r zjhc>unt`46ukjzX($fEows!ctiXVE?y6W4~($mnOsvc-EOd1A)a-Oj?9@#9 zbbyaDMpkMACOUQ&ePaL%JCosGC}i!;K4yZxnID}bV-{%_IfSy&kvSw9YXW_DIq7S?}(Q~>r4A143JNl!<^!0@NW$dE(igHiv( zY-U#aCIDJnYm+|}zlVk6qcb1E>i?b_AIyKsKl;KUXb;eLw6RyRv9aVP`rTH7-;{r* z6am-YCkuy^jp3ibKVX2-@A>xk87H7`Li^{Ei}t?*|8Go+rZz6t|KE821^p)rzrCZ2 zjlG4ey{v&bz|ir(=lQR||7245SnC`d?cK!x51smd;JE%~SFw*+8+*6E+ z3zDVTAE^ik{wx9<`i6g#-$CCQVDx7QK6LzBm7%G=wF%&3wf*~4`$xIie_>;Kc4k8Z z7Djq%CRRFDY9p{lf26?w2>c&+{YS3wrmllRR0EYPl0!uS~W(5R903iqL+O{T!-6|g4dbcv5Yr%Wf6hJ*&dKwrYRhyP@@1rhkhSKuFzAVGji z-$)X6>@K#wGKrUc$-6ek{1)7R4k^1xsiv``itlyV^+@|BnI)TBDO2Qi5)-rep0jbL z5Q(moG&7&+q#`+95~`qqE@ZcWvuPB}7NcI z?Ydrk7lHDFi`psIfQcY1JrbFYKqVmBtEVc}O0vU}0s2wl(o(%U3}Y5H$F`dhub^;G z%KQHKEKBpA-*tV@r++4^*Ub`jI%Ic*ST@+yc`F?dXEDaWTi&W+m(*)itj%h=#$c|6 z-i_kVF`%bSV^kAt6#zA;j7mWrGv&o4?A@{%Un8yf#oxB2bA_5du|Cum3LUxJCJ|ho zbeLe;vTBAaq9(RXVp95|&(?Xc7A7x>To^vY;r*tyW6hdn^>ebRXEpE3a`qq*eZkHv zMp^42;=AXFTZe{QmJ6$_%c}L>h}y9yCut?cqLYQ;bb^`!)i^@ShLRqRvPymBAxv4Y z!A3?UUPrvbCO)2}^1QOLnikZ?s$1Fyi#{%-ML86XAs)9^h-9>#2vf_&{5)DoU@OaD zPHA2kJ<-yw@c}*7xkN_t+u7B~^Ig;1=y?u&bT`m+Y*dPID@A8AP*j3|MU% zHY&#x)7dkw$H$lLE(?UqeQuH0P^BB1Xjmb0&K)S-g_`6`ZmCpqTHCD__@^tp&lv9( zb)BtCRz8oUyp19SH4t&9;b`O zD9R)qcuP3UvG^L5*ANzmHYLDNNg5c-gM9S##bM;={`5t@&)cJ zRkhI!7Ff3xRzB%#S<(9QkJxE?Of%r=umixMdJM&Z`N|Q~*HIW{59cG2OWRxA?U#5x z-yyr6D-d}Zh%@40J2kA}1V+WN!tH{6lL?0gR&qcZ)f;x)aAgh}EfR52%)h0~a!KX2 zw>1Mzk{jDr*7Yb$hs6V99(Z~;r$29z{oAb@{=DpQ;sSjb&x?zC3=7FlxCn4pDa7+ElZuB0TN zN=`GvQC2F}U-0o!?^{9=bZF~*cqF(gV80b+Tq_93cfl3ed=Y0nKfp3dnWnf@0f~=a z9hqM^XIIIdA_Gm19XXe9SF1iD&LPc&NXXD$MkB6Cs2i}h*t3_AlmcXxM*5*U53zn2vCkuxdpaz z<^lN-nVrhSq#GFju|mc$hXqx&2C6cs5j7z;2-+mM1H_KKK6-3iA)ryn3@?>1LSZfY z>^%1|7RuKlixk6CW<=F#GzeT^t~AdfT7B4Et|8m!$;1gtk(bBk($mFlUWpkyAE@Y> zZoJOHI!jdD9e+(Bd|yd<%W;j=Pd{`L9NoE7VMHOE&~YJLjGPghk^~zA2wGWarWr|V z!p&eH?#nmk4OkQXDDrRpbL(Y|mBVbB^IF8Dm71e9v2%bl5))+U@dXVLqP%)4B6HmX zhW5@^&93J~*fG~NpUds3Yp%B!RXg=7s(&)c(jO2eD0qwO{5y(6i;RF7$dkGkfr<1yUV&wsIJS7bAJirEhdS{ z91Vj@^cVAhL9AoG2V2}EK&lL4Uo!?z$Nh|lZf3~))BW2e!j$%^n}Kj!hr3j9Om@4+ znJksWLd=i{XlqMr%j$g(Cv}7si}vX(Lx4>={OeZZ<|g6H`Y8^556;v1Tk^X@SgIrq z6~6aP)Wn&8WD~@JS$Sz|!fpk|mYdE-hq>j&q-H>O?*OLkZ5jo{@mQ@GZqIx$5>Uy8 z7Bgqot-Vqeb|0Q?4BnR!S{|R+$7^;HK$O`C$alWL@{5tC&extg6D=4|yQ7e~ zvu*nhowm7S<9oFT)8#T-dH0)*rtXLHmx3{Om-rvv7Xj}VWwJir4o=Fd`e7p|6Jt#9 zUIuOl9aWS?fUFM2wz8sUS|4N8vWA}eNJW_lXl9V75AREXx-T$^kl-Al=GW;A=aH2q zB}CB+|I*C%yt;%uw^r3QRRwB3;=mV>SSILf?dYhy(LCoB5jRVnW$=go7)QP#c18>v zB&5D07`7UNu$@5|4>NC-2r_4v>b`mF=$(GYtcu<`@AlpR=J5-j|(h@7uitl508yq8X&v2A}8i_oC$V zMl)=E5v2s8JTNjh2%rN2MaZl>^LAKxb}q#HhROt^^a}W>CL;65hSCl2sk~?)U}}ZW zYd`Qa=$)WK=J3E1+0mTC@!wZipOd?!q&6OzGEbddl)-JFdfoGZc5!~CX^)5z?B$ar z{S;4ZHWH#@Ps+G+X@X;#bjzV}rOiMiFtM8i%CU8SHcbYkD&|hpactp|Jhak_nRBBP z3e;!$7H*Y~q7yo5wymI%?5+J^&ifd{!X6|ri_cE!m0@ESbkP{e$y_ny!sG*;-nXR* z29YG7dgU-*)N6J4rRSAczSUMx$och-9@y=^~snjb0D(t-LGgXk4&PO2;U z2UJ#A&Pzy`me)ZHe@V@2v{!SZB00#IRzr1E*84Qr_wnrqg>Tof6%Ja3DH7VMi1&!B zs*7{D1qp0Jkj5%ng^C1?L3NBWGo?<0DRIUEU_wF+oy@s1V_ebK?(-y*U%`+o)1zQ` z+gqcq6C_214gx}<>VR?@hEIm+KWxT!`|D`BaYG$Flsg7VSU%I~@`i7}&wabvgB7cDpjpZ+jSkUN29ADidu53kdc{*w;THyr3Zq~7 z`LXM;R00i+PYBZtZ))9Luo2`t;OO*jkX1hnx|?Rs?8L*6I>AWA3RS}HYi*N_4tK}0 zx?sp^)wXMEbNgiZI7qjRPP@8IRiT-)j?%^6HSMX-E#kXAMGN%9GR9O9AneL>4(z+2zADF@Ty0XeVFt^2&w>*Lv(YiGN+ zkszfw)=A%`C*EM;Ve3jold4h0b*|YF{_8^#@6%z-rS9vs&pwr3LOon>IZ)8Ra}La4 z8$c%m{@PX~51{j8#<8~XJj#ix+jOw=IF?NN{!{nG$LD?XJ#(UU%rYrtQA{ZJG+AJr z52#%Y)GUnTpm!P{-(c&lS+`2nbUlX0<8sma`FV^X-59d7t@z>UXoT~;<2>NLlZZhJ z6I$2^`)RRCmp=K{m=*4eq#X;H?;dUo|k)zcs6Cu+%a{5LmBGBC#4Fg$G0L5sNWu62uO16%vL|%vNuc| zuHhpT?RUhyXLh~VBqvNm)J9!>{KJ72nGJ}DViY8zU<%Kh+p5HIt*iNg1&$CSsOdsG zC~0c)mQn$x45C=-ybK0RlQ5xzez9T=lwu-wBx*ZgW$Kf5*1-S)Ep!_2X()loJUzK3 zq%fx{p7;7%`|F31_4T)-{}oabt?c^RS-Zp{Ou5Kvz202hh-i#4rP6epk~64sDaLtg zZ7Hm(NTzPOl2d4EU;&W6@0}%8u%Kd%V@Emi;dp487D$cr88}4_IwJrx+u%h7(GUo0 z0S1nXCsaTm2#qDe5CT=56a~?eQ-3_gzPG`>_u&U=8cUHnxVCNPaeDLmP1jTxyItwJ zWmyo+JWcD>N|8ccqcIlLIcp4wiVEaqnoDFZgal}UcUADlc$I92xh!daKAlkEbUds# zo6T+;r#XwTA_xO#Afrn%gvLT42e|+jAY?SmP?kPUqp#}W++RHM2F;unLaLf7#ie9r zLE$nEJ$b*3LqWH@*l}EjacXabR7AB6Msn=?-iKga0F`1UWy!1}T-R;gbZMCY4YLp# zV_eGIG`0QxfBO4P)3#OPomb)KuV0pBCgTd)Cr_VNDDx71-OT;z^6I8rcUt;Tg{o?` zFsD4FI3+n9509R$R$b?Ph)Xs^zOKnyYcOSIE@W)I+7c-_BkYZrWt#8ayngx@z6YRW z43YyWprvH&4|i9Oo*84Nc~VtGT;{=;RaLizxvqUKg%ymYxJ3KSkH3M+N-j>r9J7?T z)mzE$yyt3u1iiXR0`zQm%sUIPpz^G!Bnj(#*_&W zl~anW3TauESvkclKl#O1o6ARFs^i@rq%ao*EE#>M&Zk~V29e}_Qw8)JkaTyuFPmAJRM#nYwLK%B%I3OGzmiUy}$Z0g|YwN{ovt+Ie17*pMBj zXjH~!sJ!o*W@VCXw-N_fk{ZA6wg$9tZt4)cD>;iQr#KDc^{ZP25mUuBKWIPxD>4FDhWbPSal|} z2ACu(B1y4TE#&VH!|`;itm(Qoivm(i#W*+geJK)SuA3$;3vjP#5u|Rl8{%Opa&@_z zhjX*uAz_^QX&j7otJT_v=6u?()*A#=fMx1a1{Xq}XBH7=O-iUa&CE=t6b4Co0ZG=- zFr0#SFK%D@5Xd^JT5xr1!+n3;=QyKgR9@zVjPpL&m#<&lT2y;%T!f8?w z<82zpD!7t>yqC+dt(rf#}ntMZDp-pmXQmm7^^Cvak*sIv=sswKlg`Ha$)h{VrKjJoy%a< zg~qj8S5-gx`Jeuy|LK4BRr?SA-rr2q85OuBTazdn8}dAIilW+FJ<*(0Gf1w3O^HKY zkp&OtuzdyiqjG=q)`SWM*z7J$_imS~orNuc@3KvF1^TnsX=++x!{d#+;fJ;nEOr&X= zr@~TLR>9-{^-upt0x-yAov{AVAN}a}{>dNI>-DpzPe1wkM{(+#${WO7iYQp;>biE; ztX3VN0WzRkRbf6oOy}ciid9viam*q%khNofLhDznZrwIbQ~OW}^ZmnNyIO_dN=nba z`h1$k+PjypUSI7tZ{FNKe*B26+dn*f_SvVWe(W4RdH4PIKm2%@=5aW)fPvgJZCzE{ z-L7j_77-;U@*V-_X+AII^6}G)i`{pB{oCLB&UfNGSZfR+m*RXVEZ#c=9frXmYCz*ZURk5!}`&ao74U_rTG4L zKSAfe`N=0NQsVsV=Hh$b`7Ww5r)3@=4#&JKm`71NQ}gih)nEO=4_51q2;)Ecz5mvd z8bnkc$D!R`qN@+1#9_a?yv%7?=4sWng(am##yMxsr(?<4T3d%uH?^_OSXWq7N>hbg zN)@~!l)_{kh#Vi@IOh;i6utNR!wL3ZJ=)fQ1nAKESfuGX>jRJ_L_#1`FqPyPQHjj5 zEa&sFAM@#ag67e9dh`A7|0Nfyx~}ZIPaj!JX^Do!*(YGbX(cDb8c4Dgs!RC8s%fSG5~sj3S7LAq3E6n!D9HrZkOX*L6gOMdxM7xmf2@S=PIo z7}-}VM%x&dQxwj16-2~ZE6hk>oN>+qxl-ij(PMu+leGf)`ehV=x~{ynmRVGUh(IM5 zwpN3)+so_I-HWzuml;D~6+klHSM$7h?=05jo8av<_SRQmD8|JY)2=pEU6mAb&c^vt z7yz4g)wCTE<`j|aJkKdEcjx89RE(v08JzXL-ig>8=aQ1K29SJR$MNh!BOnMEnubs> zE_Oh69A|HEwOS!6bGD#TQu59-Ga_hCVw#+WP*ou`##rUdZ^ckt2!)IR^&wOW(l(v3 zwAyS7Gk{4cF7xE9$!U&D^vy~YKxLUn0Enp|(mai))9LmwrkvZb+N|0ZfYkTPGFn41rD;ex$CP>P+mdEu%;`9EU5AK$e))?4aKI;2^>`yG>iCAQwCn94ASy+L(t~sBCOXkAMG8touY~lidso;`i zc=?iYPFe{v9ewSFrRL&FMQR-rSFg9yzJZ6db`~&F}F^DCCh5~XaIp=Y%hGBT| z%O8IH?eBRbbyb!2LgQRrzK>*msEv)+R~Ji$Dg;qZDS?W0fe2MO7q-?KqH!GJGFQP8 zfhWhJB`0et>pUnki}CgCv7h7en8~8nRV5l(5ztm`S4z$)xlol^O3Fyag(~NqQgq%M zXAkG`XFvHdNWQ*#WDS8amb{;qSrxwc)$?~h{5UkL+L3`o2*x_&>uH>jEF!9^C5>?o z-oFJ{s%o7D5doUwBt@)2*VZCp4J(kOM5xv|gNkaGWwy@$;`y6j|MhQw`ugy}<4cY_ z4#TR$YO@-b5`rfiN-7VBb4s_%G{-mspsy-bWR|ag@@rrF+DDt#6Oj!*sDh{(qW-jR z+q!O6t8V2&@F9$EZnxXbJT2?>YB&#M-7rj5<%!JsbRr@Eb(U0B6bP6Amo!=DLh+M>Ia?Xi@0zP~3qH>l6Kt(v)^Kq|=!5aWmVgV&p zEv1OS@p!wtxH=tAF(n0H=4Bdv@Z&fK&(>GWMHNdaE>wtyMN%q71c7qNK6K7`7DZBE zG=>mio~Lfr-re7?no2~7jBy@RL?IV81lC#t0VM@3hz2B7)|d(aSw)4@GMdWQUyTN42I}**dvg2*0_pGGR9O@82j`6-CfhvE>wj@kwBHmC?Fyt z5?K!*D&QQT6ht6nMHPSmjcOqxKx3@uoYHhwEmlhIhhEUcCCPyb{`th@QURYrry6ugv>gL%8AAJwLzsyUFbIzFo ztqWYDAvhk7c{f|2zx><31xNu$rP z@Zo?Zue`H)aF75&B_ml?Kp;_O=9IDu8^W9x1Txkj01<&^7iYzwmWOWbF0L zlYZ!h#W=?-p{kv;0Emdj7yw9bPf*DKG7cAS-n!e2tbIS1(fjZ{t}2n<-K*b3 zqu>=#Rf;I6rG0R`r_wP68(xA*FNyl<<=O}k22N{sgZ{eyp!m$|N+oMvN; zvla+NF~!U(-q+(aBQRMHQpni5ySw+^c^8diVFj#$L&>C~IU5 zZh=Knxnwl9O#N`W7nNz~t*?L#A_&XEY*39M1mwc3OrQjeWI-8JG8Yvk6V{iH3Bfp( zyx3>&evqbtj8)~Pu2W13K*pSoM>GZ$nx=K$sp>M1ssc~nw?4Q~fpK6APiM{1`6jE@ z-hqlramI=i043){te|0KD}^N!NCxw8fB)5sH{bf^$DquK5tXqvMhqzc2(yS1k|9C` z1q2`gP%t9pSAYKbS1(?6Z5N#Fy4DivcDK!`SZk^fB2Cu07^AhW?b?(}&SI@Kgw9z( zd;j?tSL;>I*#H5M3XrW7$@oeTI3}_vIpr(?WSD0XR#0CxIWC+tRUQyOd-VY8&p!I_ z{SX`=0-2l(01~|28znM?#0mr;%x^7Yy495X0003XNklmfQq)-rucuH>?Pp z(z00RG)3d>GL6DAp7$}A!rXLgDN@z$^OyJE`PL^*g@5#a|8M)-H`aHvnx~JizxMtI z{pnyKuP+~gYVDm3O-^xt8d{TxR8w5n_2oNPp{}G9!eYtUlp)51LVzBf;WR1Qahb?^ z0pmk3PDN)0RLNw$ko$jr^poK6s)cD@454vhoae%&lw8*<>pdYDGF7wop{lQ+dGD5a zNtso&sl!K`cRm6k6jY3Hl9JC;J`a6ometleUjxiwtJ|P|+L}tl1hfPI0DxFUSwRQ$efRQ> ze+Bc&PPiHc0FbBn=oz7OAf7-3(!~bu2m_+L5ilUk3vL4dcukF(K1lg|o8)5rmJj|a zaR(N*!vT@c@f(}~I!Tq;?;9T)@^#pn*s|WRFRHEF`BA#he}0vf9lq2=Jf?X(B#U=* zuT$%Sv-;t?oavS=C4Q#G9bHK$CS@V6bAyWk;M2okk0wJ`xCICK=cDnUF;SLJ=*c_X zJ$G5mrk-Nuwvbezv|kQLt-zQa8oz8=8T*(~+lP4Omn=RxG&sq9zw-kQ%Mmf5DJhD- z{o%bt5v*oNW6X$?(>6Iy5yFu$cQYTj-OhA(=Ki-GI}W0u7W?ER*?uqnjEeSt5wR_x zLfA!7;02_SZ4JiWLs9n7A)>9aErX`?R?uX0g6g3Y_jj$r0*-d23jdk(p%IxuRZ$Ji za$+8wr70Loy(VRT)>vjhvEwwg=2x5Y0eeC7PU`#{z7B^ddgaGNPQISim9MLc=9)>Z zYv(!7jHbittBRaxy-n_qO!t1RW7)}-*gCLethTXmz)ZhjT8`gia-<>okiV%%ON;UcpgCcU{1V^yw9IRR?9s*w zR$tSL%lY1?JcgC89$WYk5|F#ca|x+xytTT%zZXGO^g?#{?U#x+v0NDi0jpYG8S1p% zo`u{SHIV7=9BLo+SEaAwYSoV6>t>b!{EpG(IHz=3=#M5(Lsw{JJT&$G?O~vuXkm>3}ovf z=sJzpGCbQ9%bE^5AM7+8wRHhQSdM+KFIWbXGQW*fVZ9f-&af9llc;`s!#Y8O?}Sn( z10qwI+2?30dM4fr?kT?2F}Wbt_{FWeBJzsv?S^N;OJ;u8*bSbU=u>IFp4xm>mer}@ z5N$AE(rCYJ=3q6H=J-hGOXX~yu#jXe3G)P+X6&XA$6|dJcnm;f^17dczbd7;K2%p8 z0Lma>tx)aw@IF`=mw1yUr_gG6wzNKLPWkN4hK9MYQgOqNu+>O?&!HJJ7wi(@x9IfF zDXtuj5tYT`6TL+JYJi->eJWlm?SlRoJH@4p@&$sO<)R}T0fOY))P{mmw9UbuGtxF& zhc?a%4!yYLk;8fK=>5m4%hMGb!?;@|)27HcPQR--bZwff*<0yoCut!+d1upUI+%W> zN-42%)_x_C_~Nt4G7&Qyz*~e&)IgLo+IVPM0qyz`q6of*SF}9G$Wk1uu6i3`dt)z( ze4M?En*>A@aDyjWOU@pYNCt86_*x0Bayn|@`XOZf2`4C-rpq~O+K2%)6hRAj#;mkc zJ8IKsTZPoj_8D7MQ7}0epfhEE@R+~Kv-<{U~{C@vM5A92-}bX@!BO1DcA$qMs~MniJDGG*^;yDq$xeA z@$b2TCu;R*r-Ub31i!YD=aH7{?cI72HHYgiv~pa`)oreF4jxS#99;HWB~)h~_o<)h zk$pifin7~;s{v$PCumaW8l=%45CQ6f^vA8`t7&Rnf@~Y;TZMWImdGn_LH+k&DX2Ra zmZnr=SKQRe&EG=Mpt!3K^;9!?O)GQ}1EY3grsmz=*p@6bqgHx^^H|9TtRq!vRBYfx zhldIxy3Q^o#hgt_P%aq}t~L`-;uuN=7h0Vup`%x`?!ky*J~PR#_qz>vMQUbaq{9?( zD^JV@q&H@&3GJyCIPN5JcI{Cz5lyeKxm{W70@q}vQkWei3dAz_;juJo>-LMc8tri* z>aK=i=dIaL2&DT6U9(E>)+}1DZ!BtaJzDl=dWY4owr{BK!ktWG6bT3=coAU0k?pZG zSz;Q)^8w4*jCDEE0Jf=`Q#}pi=VX22MBp@iLxw6d`4i z;|ZI)s>OqQ&r{*N^+ZV?XWyraHGRHuhJOg^#mL#I)W*3KFc7 z@aT|9PDrzL~s3F#+OzsyyzLo?u}9L@5lD*?7D)S*;yociFg;^%Y!x!7`8+aroEZUKpki=3XQKE5l zb-K`Qsu6J`LTasp34I?i-F&^V zs@&Ik@2gFzXA_KTLn)Q`qf3cMV0NoBUql!Qxoc>bYnGnd^=YmX_A%t3@39yr0Y_|h8uAgS zi+41iY>4(xOf6!tb_>v{uk;*GZw_(F941|Lyi@D-DRy%+bInu6UdBSTe0|97Zjqva?6seSy~JgCWsSmu6^n9NMhvOw^6D`jMJHT6BLXnrdD%ysRm-#>rz`I+bBY)P$O+rK*{LvBRlMAV|9B| zl!+bML{Yv&wHuAK+`$mESap>RXD-)ZDl=8Yw!h>Hh(OF_W|K_OHLl9)qXy^L#odOd zA7^r3e872*en387!|*M8A9bt0*mpyt#oa>qOpWn%uK$gdZp-n(lfpE$B_GFcH!V&! zM=d@AuY8}i=m!sP4UWqKTr$w3zH-kc0_WPb`<3gSK7LCqv+?M;@4Zj8EaFbyI6t^q zC9WN0e*2;QDN0L`%ct*^Xj;qYiiPe8>bbE0?8(H_v3}z<%{rO+TrRqF2}{nH*6VTi z%ZM5YcCYhMHWC=jex!J@RZiS3Z`i$l?JS>c@=n#X(8^I|jT!n`kejsN-aGea>>UA3 zYKh;yrgZWM!x=*c11zi;zMqXoRT356W-w~4X)CxXr|Htvrpt{E#Zlz?KHo?Kl>V}Wml4q%s_2BX=k)~AGrA{1R_^q95ARl(XdwC$219V} z7>~^syTHIdRW#lFMl#Wl%o|>{Z$tNv^zDp}3 zqYv+sE|s=W$iCn(v4iA&=dzmS*Cn$Bj8DhpP97bYg!n2$IZ`mM$6mDq~Ly||KC;VkJG$UWUo9kOik8|%6Z{?&;gsce>f z^X?wof%R1(+nJeOZ%reoQY)ecze&&c-SeR4+@w&S$x1YTwyE8xB@`F?#ivN2PU~j1 zgYj*l)tzRQPP5XU5x0*@wi4S0r{^iN_POo8Ty<-2w+*FFXdO;I(H4oF@t@+B;@oAs zD{OgpM$dC#KKkDT zPcuCk)5@J_=UUc}(g*?>Vhg={?87q+RY2AG?Fmata>69Q*-(G*WA&Aut&iD- z=ePJ1*4BKSznUblcWm|s+)8F~I`i*b!xPK=G&`8k>oBO;GR82aSlZ@BUS&Bhm&X|2 zQgzn5C|CC}WPmZ^O-IrmuT^$L`$u7NfrK%x>vBkM16_7$CT zjsh(2@gKe$SR6W$Z90RpvkIvlp`gn~q1;4^{M!fXW*gbQ{(NcA#R#R{ndapE>apdX z>q>e88TI4V>BhhJ%6bsU)#8~pug_hZJ_+X861DExz1_7zk|Q}EBy|N$Ts`V~On*J> z2VG~4p4|Gwj`4+wPoz?NF&rOv}+#`>(ua>Y-|7`bc<8QHn>h9C>5 zCCroFaONoZjjZP0Fhlz84A{0vd8;!OMKd8qioUFylbh)RGpc63*OF`oos^Dbs12f1 z*Zi6}8%=j*MHfyVVrfFMsO@91jKanaWhEB6cy`MQjiAPbYsOi0q+XRow)WDko+?18} zqq5}Rm${)Wp56Ko0Kf``%gbx4$jkq6C4_O4;U6!p+@VbwrlqUMMI|d4DW*`MNv)tr zUrnG`KxQ9iz@Tn^il;%FKzT!{t$JZ$z-qMZov|UFp)A=smaDs~4l15vM~#5js%h7Y zX>HccYe(j8!P8V5_s7_2&gq2;roGmN?@A4?lF2b$CFt?WUGl?dX%(#@*y4Qk^1W)sL z1|JfJjy2T_54fHJa^ME<=@u5qXn3^`8wMI1r`HZ$wA=#jkcT1z!_w&e007cxIOdAZ zNJCu$>f*!)v39Y7@p(BRFqr`WNZs*5K%fpV6wnH03wM@g*=cNH0m7}NSqz0WKpF^n zm>pc%2MN>l(bR+bI6%d%S?w`N87i;`|^1egOeq41(9q+ZhG%;&paoy`=b!LjmRnMPkw!?&1u*< z{p!=*4R+b}Gj2y~8-7esKRy3yqokst{in^PjJ9wm#7~P$^sh*3=$|-*JJRtd#u~~G zbA&lz0&&AIga3v{!EOFppuf%Ma^$}Sf^qjJ|KHGm==C#}pSnsYxIo=6ovJ8Evs}h2 zVeJBiTTA@>34sV%i$g@gydnZNU|t~zSddptP|S)~940IvCMW_Chk;c14BVzF;PLApH!FYAR()bIl~F? zf&S{zc7&j8T#!!EEb4G)cdx$&^x#e~T@>U}G_Z)MprELzkbtnLxUhhT_+KCc7}5=s zXa5TAg+&k<{=#61in1e0uVCx|VKAK`5KbKr7WBrub~2n)Ha4Gi`@pBuDs9ser(rn}7ra`kVZ25D%F3&n3X<_}dWF4&rPJ!|b-dm)alw z@PCoU*5WX*HPi;mD`aCM&MPEhCBQ2tW@F7O3bql0T8mnNgaxer&hF-7gYtwRVY0TE z9KftIrnG*pGw{~W?Bn`7+S3k($q{Z4SONrM`E7ZDQv8=2>L1gSy4-R!G$ei%KpxQ9KLY=gUH{1SA1Ux3f&a;_|8H^;{B^>HIb;6ld1B7bk%y>N%-Q=ILfP02 z0N`W2d}Dd#-toY6;-OSD6!F%u2(DxEu1uK>VY*~dibg1T7pKc35O38<>As08#75#Zthy1GLg;V5sQG*BEwP_Af{2ms)} zQ&EuBvzx0nd5?s4k@wo8@aaluS|y^2WB~HtV{@2N+yx3r%fUHbbe3O$B8++x`vzuj z05p^MxJ$gFpFj5(f3WvCKCsO=r|aiXsIqX{EV~KJID!JQD4{~n1$LXKK-Dp5|GJui zCq3sXm2BjEH^yy1+KTv=Bu9F5T5~-p^pn)UogJ69^V9t(MdO#nYxXaBo<-f-?|9I_ z37B}3d&<+(b=9g|NTU|1XK&9Xl*Q|3>_NOL@^Ok~f0{HTGIb?!;x2tAeZFt{5pYtW z$Iet!d&@U}yVJayI)ZoWb%jCc=h@_tFID;Xo@peW`yiKHXTwesL~4YuBim1%JXc>^ zJPAk^33(6`D2U&uyyWHd4M&B@J7En;ykiGc(yn?*%%%0 zVHeM5VDREjf8fxNqq?;RFU>_y%a9+zZa}s4n@ENq7gjBERS=d3k~=>pv4PMAGW3G| zKBWC^#6e9^cE-bpO%ErpfWqsXG3dAf@LD?t``>*U&sd~Qr`5|;KjK3Bij6|&Z6-61cm8>eodq$H%*}t0f zt5q`|e7Jsd{5V%$B4N2GG0EKh#7HyfvvHBgMsiZmM6AtH(UWm~(TZ?ug#y1)iBo}? z)$4(LH$+D~Jd9)1>T2BU`n=#)N1qu|gSN4P6oj#8LFXXc)Q~0O4Y_evtbiX#fF&-6 zpfV;`tW>O_psn%gW!(v{Rq$Tja=)wgzwZBae8#(qALHDR;4j4G;!gKsDjZoj0;Bd`gl*Bb3H3{(@Y z(kHHxi|jAhM{aMs6v^b$K0X}?)yj}bOcOK z@;_0VzY@L6nRqfx&}?c-+PiSDmzYQ#=>|P)zfVau^C5YXz@3o)`iYX^QSCAIKnpJy ztMZ4u@zI;%wtl?5%P<;EEA4`bt+X%c$CfxB#ohwuWWtbNww9dC#T9)A9KzI>6<-z5 zMwL#)`VHoU;nFY+ulSZp)m$|+z9pc9-(?T%QF)+KdpOmo^}#DQyYlGWX#l!L@y#a0 zXL>a>+u{Y)_-35w5z(o}MB0_dCe51WnMx^FvT$jSvIg{(!L4L`cyDZ( z!ebi-Zr9XhLSsAkqO1`1mL5tHTOx*!TgDg6?4~gha^Vk(mhK1InfHYDH)etpPZs+tWO#`Qm`R+DT?;lrlPFe^QFa#&qB#PqwtVN2ebwEAEO;tin&{>u{%+m=^mbC#$KC=4KjtgVsTz?dyD)CF z`&h85N5WeY+u;s-RxCxP59HWSl;Vxv+Sn6qoRK||F%3i*Io07x^AzA6V*??Dlx>uw ziYj42Lw;8CmID16z|n{m)4mfa_tSz^Kc8?8 zH^J$z{X?pnE+h2l)ZytdXX!n|;`D4zvje~~wUkeHt~%S%*gcKpJ1f8mV>L}CFMDA! zE#|5zZY@#-Gqg~w)IFvCwA@{yjbttHb3|jNt+^|Qz6aGxgD3IhRoyG4J3FCWw_nTh wh_xL(Y4<)*|Dj3F9l}Ll$Ntzh@eWqv`Xr)-8%la3{D1cXxMphaio+ySqbh5AG1$-3jjQ9^Czs9Q&PjzxUnujq&b( zrw85iu9|DERkPNr-FuJf4wIJ^gZqT_2?z)XPC{H*@#8=L?}fWXns7C-=SH8TbRa$T-yGpqc<5mWxSp{5{ZJ2q|44ALH;>&++n zi2eCd1iNINf_cdiwc`;>NRH zW9J(7sm(K;x6S3bPy5@8Tko~vrb*L#`Q!7;xzqgt(7o6}himL;*`_8sEd{OAf zj<<`RP7J2^$49=7vuU5UH{6RKq;Drb_1`$IJ9V>%8{gY9H{K7*pE7FC*KSiZreD@( z&sBf1@v^I5ebpO%p?JxDXkW}8$bQ;vNBLIe(h5jlpJ9<^4c2BeQYosIV-{wKwO zc1>4Rvb=!=X|kfZS;2z5p$yA{;)#;h=~yEWdts86S$+LH7uhLJ^Y!UCq&vQMAd(oC zTY`cZw%0Z<(>U`rbuDl0SjWpJm<)BdL=`nHuhuB4)25m6)?Y0vXOL=KTYcYTdG}^# zWZw;0?zL;*8u{K2R2}%r+-ehe)!)>ks*+G(%a|y5AjoF zSv|1nG2#y>zeUz&PzQtWIP>D(4?4fApXoV!7`(g#*xqYbiDzCns(-)IB|V=zKjW7- zBv|cZxcRVV z`O>Xw?ry3_m<__&k!BZHQx4E(QHY2WQNKM@5XH2-DrXn+%^oc2S;hiRS7z#V+a+~% za$8h2i{UzmemI&!|9nb&wWDerTGo4k!}U%-RfnfscHCK9^j@ce65R63aYs(!sW-AlTQ*xh2IEyH*E*~L7Ii7WbIFOf0t;sZx~OwoONvUR4`y6(cr32^6T7qPKr^tW;aH;3c3P($7V zcs5C{(U_t3LE$V3Ym*EIoO9x6wVP8Xtj1cS&P2siCiadxi3t6}uM?D+4v>w`*|3>d@{^qoq3jZwCObTys};OYU8^nAd(WO0-DHoqN7OyroH{sGTNT6oZ}YxoRVeD5 zNto)m9PIG*TK;ry*hK*jfWWnLZ zX`<9qq;}oxi^Ik6+!g}L$B~1owTksW*$iK?EQ=G?xLuMHr=G+Dh*>9+ZrVa(@X?|W zgJvsOyWO>~AZgSwhDDYWgZJ>c$cJd%SuABzu3iMPUtZ2(z?`86TcI=ValmzM3PBHU zxYGJz{jjKW8mf5aGdHf`W1&f_o3^NjtUd#)Bg3>Z*~Xs{uDYZ{sYu01M{t1p+8s-qHSy_k4IxYL z+t0TXxpWlo7@o5GrWBuakV{2Bc-jmE6aZ(Wu(=JN_E>d_$j>qi&KFhxkaKf=--gVc5nj+nS|@&_%c9RP9G`qdkAz97)Fs zfy~VOWr>MOmH3I|C^tRH=yhFRB3LiS5Cqg66%mCopZ04$G-6$(f{z?L!E9Ami-RO; zIp|lr4FHn%xHaA)x{I*x@QVguXNlT^*w1Z!@5R~pISJjGU1zZkctwMwnxwLoGolOV zhu+HxYPNtlH+I{WY`w64RHE47XR4|(o9DS8TrEGu{`{RN~sDwRqEi<|? z*%k){y^Fbw40){j9sHz~9$iWI^k3VM@HtMZle0$qHqlCm6W&Ru$<5<>NmBmV$pr`; zUc554u<`V^b`DbKr-U%&6L}l0i&9vCZVl)kC-6HkxgISTSpl`9N9u=a?7RzZ?*4vp zG_b0LsyfiShc!M6r4PhvZX%hPH4VaPTY;G9CfeIv2$(JK7~d|NLj(GIz}c2U`qTo? zoAcVgNDCv`h~j-hl8t+YyG;>~HH2rP-7@HE+aPFD?vXXx8Q-(&iU6mrNgkgZ2J!&; z@tuvkqO!V-gbF7dhPQt;Crb}#!7qnI zMr%aXRZmIqtI@ZtObbAlG?KWHVusg_N?Bc!Vk)nlX0`j!h48dUQ9_oqXjVRSeEuc; zV_7H>Fzj|Hdt!$NggH|;h?h>p&FH95iR0$4uQ)b*o8$@%LmM-+b`K}m^hPjqDBwNe zb8H0|DgL+BH;=i2K*64n2yXE;xAG0D5a)ivN)cTi;kJzsg0o;^NmRL62!w+)nTt?_ z+KlNDS5Lj&WB562Wn#E@j3W49n`4yc{qX|8ZRGGq)?v@00>RUM>I#0J*zNg94D{AT z7{BS~=x6w|NEi`Z5%;OTkcU1e_`w-qFzi~9`EGq_vTLosn|O*CBRGb}7Wj-BO^gCR zLMESiH6n-LLQ}(y&W-0>l^0wDf--VRfDT)=SWjVwpf#TS!tZL8Auo-u${>%XIaazb z;ka?Mg3@5I%FBjHU3y{cOKfYX@*;_U+9IW>d2~@EFA+wJs3c$rr=m zCuqkJO==iuk6`6Oqm>ZKgrqm1EIZJPT9l&>5uDYy!A}AYD?8uRfpiJoXe68|uiyNj za=y#(y&cn~IY)Su&+rhz&47%2nJQ3V&-js8`KZSl@oh_m~FNiw1pG4kSYC}H&3r`WkPY0L$HhGuV_M;$iP zv8VV_vK`D@Rl7YXG${qL{;-HfE>WJ)EexlSKYXyZQ*+=g%O}Wbk%Rj-F~wMn*T=zm z1AK8JBe}Oj_D`ussKNvcPdKI3t~HT#2%f~6#tY`C64AYow2a;3qt4R^4Olz&qs}Og zc#{?6S1~$I?vtt`-uS($l4W3^)NtuUSIP=tDUyi$9%05x$3-1%pMkSJTRP5(3p1bm zG>A=9P8R&eU&;|35B0)}QXve=4{4EnLzpdTzF8)L0bAXyl*kkh)yh^AUIwoC$q|$x z-WNw)D#ot>I4jO#N%1LU=@nc-XdIgcL_T*bu77kDL2kgEka zwLlvO^`b-X)Fil!FZ>kk$az9)Lt&4c)JkC=H*Q10kfhe%rIegXkK8CSE}dr~{L)S$?>Q;_qRn z^C_23HbDib!YtQAp_y|@7mM--HJ6ekZoFRcM4z>kZexzZha1Yf6_fV~99 z5*YRA*d{bx#V5H?--D#Z^=*kQXl=d7_853&Ai5Cr?6&)|dycdeY;g|7>!N;?klwm( zw`{i59H9bWNUC-$OsIg+-=(-c`daUB_d+mc5Ut>iyvgB)>`{)MbVnPR1XfPj z#gWq)dydR2&tM0`!B2#K*x^TP9}fxCr6?WxL%0*#SlBD+th@>M9%&Lp8*hPahJHVD z>;$+$;wz}xcSQ15No^dol-(ku{Ij|~cad4H-s%B7ql4{F`cmt@v&z*J+#;irv{aM% zL|9GM+zxxI9p#|(I?UPGlEg?dh)Io;_N)Go&CR(xVe6zE?s3i6Px2-59d(Rboyy=U z@t}23IMs4-1AeF!l%xAi%P4FVu*-{058t0zrn_!ymJPv$>7jw-6?Mjj78pypRNhPM z9Lr)r5GJAyJb5!ewU1-N#p<&vrN+|DesaR;R0$l8wrDq)7s4r~e(!^D>>@{ zQES9yz%~c_k{c%11=Ky{fGuuOCXhL&`&qO5%^B>o=q# zV3!+L9RN;-e(sOL+%cOm>w(?TXPD zsw^dea0UgeK|k-u?*iCV4pOxWy1SVp3DV(KjhAZ_gmPUK^kYY$0Pg_?(*Kp`eu0?T zR6H!jkGQn+Blo9y_!V(AdO9SNB#0Z2qowBMCXU9o`)}oE&GKTR~^q+{c}){Si;p+B`95Q$DJ48kg8PI!8{1Os;}SmHw5vZ>vH$POA9rOQ0$M;oWW)$v}2 zbuwb+ldC6z?&m(3QV!;q`(ig162!|BV#Spf@f@h50{Bp+sa0p`-Rpi7AS`Kw>4F;~=|wJHj=hgfJu$*cmw zK=9~eQ$g4~DF+!#nd}pJzG!GYzi| zj$=VR_$ad3o!Kv&_oCwHY{qb6PK@iP zTF)(=_e9V>E9eVh(E?jK&&nj3p-B#V>)|De2Evp=ggKv(!TSbaO&rijQ9sWiv zZyq%v7@n$L@LYS9t843faG$B#>03!1jHKZd@0M0xg}*Nw>JSmjspqXvf@)tuiAi2@354GtpOm#U<~BL->>xgi0rCj2=HKP!8ej;6N{r# z``ip@JwjK`EP0~bo)V|IYskifp3|o``o3%B;-V32O69BXq{H3`ZAqY?XGC}3LHmt7 z>me+|N!p_d78SXuy?xYW5ka~ui3Zwo==AFG0>UlK8MgSh=6`I0>`Q41#5x+0A}mU~ z!lG>Xv(Isvw`(TeKo_V=wCgI9I1vl?h>J9WTkR%$9T4WfQCaMEEYfn$B_}vQQmTAW zsZi0+Rb4{xv!*L43FA-!&k}{C@BE~R+yUe&IKduDq_+FLhI%n<3!L}sE0+({X$AMg z+>hM_On7Y{Ven;tIOh6MFK892{>y@@P4}!ZY0=`cZ?FuE3`!8PGJzv%$YS zbF~VxVsxr{Mz@s^C2W+A$k5ZBGEcso2$#o#wLNsIeeRqE>q7=N-=&gfp04q#+jk|z zMKTq{u&eQ$I@A4idVELStU-K3_p^A{z#Js34wiz`Xe)nKUMx@Rl+gnTfin5xys*meCO8pWRIMF0ddkg*q-m7XWiVHKc{r25rH*qkHH@%{!II%VQoTnj9S8`|E>0n zN1MaJGUtptaOULIJ!H9fQl^zk@gU&>boqTPAB~KDXb*>oJ6#!iVU|Eil~hP6dY4bz zK>PqMtc4hC{1C`N+F6F3rG;iV?5#avmY71xaLb&e@QptU8j?Q3J+Q9dgOB z&k&^Wueh?~@gsiKzA0EDDe>i>dK$0Mog$TAG%zNDC8EEe%(jc>ao&o6{46RVdXyfc z3fHYom_AO+^bqKAS+6mCj;dPC(hQ)z&7u6-VQ}%qG)e_qU2M#ou#sgz#aDv{objm` zmJq9mG6AjhjC{qlBKK&Q+*~#`3C~lHxbWnJAD+e6QX}t1{D(~_yQ%Tc!%gBzcVh~$ zI(lZGh`~7d5H;r9X&BjxcEBtIZQZ75#-xQ&e7%cSBl#rPDg0=0<1ymQgRDCVntH9V z^lm#vt08GVg#Jd{J~$cZ+*G5+gTETNH;LT0TW#r^hXdz%%Qhm>qH;`WgnqM;#EG_T zylPL7$`Kc48RWU)ch2PA$}@$mbi7O;dO8`*?+eOwKNlrLcr9j0>`bnJ379esCElCi zkVMReLmUXVzht~7^=0a2&3Re)adA0 zwT*kl&C8JXnnD5(R#kdbNRAa%aP`P z_H$#-xee{`FM&w2#hKE-u6zAz1}`r=4}`L-zxXp80_cn#XM{kf@$q|1VKICFL^O1obk~Bv$5rwu&@1l?F1C#6iubg@_L5 zeonmyqB7m8&I-FZHx3s(63|`jPdYPSvG}kldn_(MIs{M+cSU8h2<;jhvoqd~ z@~Kh=1B%UdE>SA}EgN%JlstgR(+Ihi}Zh zc>hY~`N0gwwG6;w$7VZXulWrD+gttYRT$kIO446!(J{qY+KA;rBLvbT+_9{iJZUKm z+`rqD&<374p5W=7pDR3XCz+^}Mgg!?Ku(>O5Y>JxUWG~+Rn46?)Q zEQ70uEorKG5pwe+zw@_GtCUG71Zg!_uM3FXtPCcTR&~2y;L1c)^SUX}*L?ey?Vi9CN_F4+t;9iU zHYiU*hF)<9$Rs5zB~TS(W|%ywFs~F%m>jyDaEz#whUayh)0{PMwR`~etwMJZma(f* zj-OZ(E6A>&)EZM2jJ7x|(`PJN3{4LR@+^wWZX}bNss>0o;5ObeUU_WI+>zDT$o>bf ziz>Mwx92ifX-+CGt#i#UvhHxDMe+cFYBVcS-+n!g8@@^~h`giam(F;37TJVt<0D2y2UyKgtR$o z-kw7y(;(#|u7msp8h1dtJAQ**PoY~$I8KG*37^re@>+?VHc2OJ^wH4&zG&8GEZssT@{OtT9l0np< zF|oMq@cv~$Uxg^OF_Iq9GBpBcc{Z@pfuS=~c)t0*YfrB4SaC~g7P{P#;g^^v?Zy@o z&bk|mDXCRj8oGTCDJfj@3r>}momQGb$>-XRv~&;gAR=4x&$oq?HizLl0ch|2=3w($nq@gNmGD;6=HHgkH`w{!GoN$z`G}th)H*<_{(=Ct;PjxJ=Jw3{E%I$n6jhggzt^>J!TuZDO_GaT3NSxj(wOm?O>->K{n5<>9TgzIE#N~(1)$GOBfKbIHmW}B_?1>Ilx*EaCGsiJoSFO5 z)ZW09EPBM3QhTfTBH&RCn&DoDa4ETWTu;U0O?Z=_ep_tWj6`Sj`)nm-ItVkG!EKzL z!ps#MC&}qI;+8@l{*6Y{r+Cvi)H4_T;%ASO;(i)Tm?9i=q@ZgjiG#|rv{SM%OdraBpS&hl0Jk?EQ zrtxC#J|~Oa>P8XQei0xJb~(Yt$nq^I)l6#G73f9n#j<-i_r+l*dCaKV{XYE3V$9+j z|KuUruARl1QUKg?>Ec{w_{rFsXu=(>5B|jzdT2{s#m+|FnG*Kb_~c3&9)HI!TCjbv)%q?j;?pwQ|lh+v~B|2)zTO^9WSBCJeFivhvr4Qz+oZH<<-iuaD9=CaNS|M6Pa^*K}Ib&HOdN z=4ah}SrY4Nu{MDR>X=6()GxlY#YY8zW>k2nP=`NFl`<8FoAk;wa(b%g>3UT604AXp zw3olEu>QKVLR7Svr}MKzFt^*Wm1O^s-7yD$khwG~?%l*3)t-+ms4x zA80YkS{qeygc{$$`o**mA#`yWf#~vvys^|bS-XW;-smZ#CES39h1}cPocW;1GZLCe zu11LF;VU6}2CK+LhX=vrB8H<}TtetF8QI(N4ayU*h?#ey&(XQwiADnc8KDNG1^a}1 z!0ER>9D;JA8t2bqiJD3Du@}7lz7tsot%lm#dbPQ zg5y;@?C%}%K%Y_JB81UX*({8~Rjy2ZC7-@mqy?3-SR!CQVpW897n{~NV_(^7C>$>= zMQ&7+^81+txREc;h7lImM**1aESf}0rp4v&d_-^0fjBWBT&|C)N+TybU+Ws<2knLl zbHLRKPnm_l;EFZKVZj`@>r2ZT+c^hLzmT5v5v)%mVrGCL0g#B$1Hu1EtH7GmqOwI7MKYw|?U9mEM zxwwZWUaBA^heKkq4ogQ0v;`{t#I?cWSjuQeq_Q{cys%9lyRcjfw*yYtNj56|6K>}E z-eD-^%3cJ{ML*8cug700XRO@ziH-1gQ%UI>gEofWSS4`IJfe!NW>@QG^S*>mtVMO1 ztL5Tb@H02RR=jc11EeflM2O+X21F9it&CyznRnVDWOUwZT}~LhV+L#~UCMNq3>7_? z1yjV0G`vi2O;zh(L-wj(Ls~H4T`C@nuRZU>@>etxn(7{TGPHSUU_s+KSTj7A&*8#CqTjJuCVp40iI28Rk$hSG8;Bt zIxdUOC0~#zZ6tID{pG}={Fj$6*Wz~=1D>bw)B7^zYMOC)5Wq4fuCEc&;Q};@J-6$X z4pv+itj71~@DI!hO!<#`=L%n}S>PJnDVD)gp{A3pu6>v9-E#8z4gj zA0<1f8Qu9xqAMbZ+(z6B0&G#nHE`N06@(29NY)K+FgeS+t~^!r5|Xxh!mk z{>eOCEAfTqs%b6O8i+_hr-EX0me~%jg^$(A>N!>C$G`>Z{VeVJX=Pb66$#7iq=(N8 zu9!B||G9(W5ra9~3DPrrz#H{4Wis}3*vZ%4;!-u@7c6%}WSBn5C z{sk}dVAkgv&Nci~m&<~`RHsi~8 zCmqF-KJlrlfzj$zof^sHY%Z%Rr`fRns3uFxRwzNaJd;Apqh}8IzKWHFG#xB*!h9j_ z*CRTPk?${I1UGFt;+oGRU}nW5vZtz!b6*}?1SMrC%w0F9fUxr|jufcVV6jveer!w5 zT)0Zc=ZkpX-)0k?x#!=WcXc@9G`jG)%o4TjW3q-8yyY}5p%p?bm~&ONrO~DUvDB~;RlX}IkiJUR)A;^e~`}W zW=c#zmOob14{}u#>Xee#>oA`;rK9$=;6^sJ;9a1i!Q@Ls6>d$vex6%OU{uU2<1AVt z)pC$M%OD3zuK%_d%4lhz@G5+&-LisGTAJ+pJ~g>pV}9P`fsc|bGFyg&Rd>LAOh~4( z!#;SV8k7L<*pa?p5&9T>w<_%7f?yHs)@$e41X^PEIzV=#Vs+NErT~Pi1)iAqale>Z z=$d+^YPW@ljMAdFl!pd7DNrZl*eJP=JuqM9S@OMvrQ$Ox?{_k?3a*jOn<3~&s~O(z zJRan{K7HPjBDb63F}kl@;?~VnfF?kX~I@Y=DSZmc6BJ?Yulpd~kWw zmll#@kwlwN?u*}?aqJ-`jr8`Oy@I3)2lS!q8XI(7iK&QG_q5%~ob zjDRPAAV9cK>Cc-Vx>KicVo+)VCtqWeSeEMj5(8LTWhsY9EZ(d%{K~Ar9f&!ew&aLo zbt3nXJ~hs|*T>9lGRi7n7PlcVrJHMm2V7N4o9&83NoY2Ne4M~x5 zS$=Q2KIXn0TVaCwSfXhxL{qy#5Gy+0?5E%UaCz?LTV5pQgmTfmQ;b8jq$*Y!;P@-<`g@=#iz~;d3lz!pLu>QrWzw_JC@@nOtld2Zb;j9Kx zmB?w1@;A)_BXRe0Z$4WSo+C>O?gt&0{3F_;=cuj-Lw9Vy__$xdSk4j9aVXxUB9K^| zzdVi()_AB=!KuD{rfMFBo5ua7=d;fo{17k$0XE~S>wY@X%!1)vPF1iuGehJIBWkC@ zm{n2C8`%pyeK!e>b3U;dbb7wFV&C3Ss7auC=Hy&e-*l_U)=jzy9ZEG-?<>RM7#yRh z?kN{&?jp5i)GP;MR4jr zi4-H62dUyp>pnrsV8x?ih;`R*ZcZ4?b@ywiL8=KLz5v@f*(o~4A)iZqqA_T@aK%4Z zb8tQ9lX0Jf0(#@ArO3Lp6?5Y1{JGYB zHlyFySDbqkcIL}ELDqU5-1u`Jl4^p=w!=2VH(K$RA*cQwwsG)e@T|`aGbL`@P(Rd7 z4GW?)re;HnLi0)sl{#WC)%V)^HK^1yuCrc(wlX?uemZFiiGM|siX{*fKqF1iCl+m$ z4G%)i9Q1k#sMI4$7OX_ZQsa@=9Q?buRBDVY=zU-Ze#`^G_3+dWWg>a=un7D4ITL1Gd&ejPx`?5MxH>(#vVYxOv_A5Pb1=L=FCXM`-ys!O@6L;^Tn%V>}-KI!1bWb{cv{8b%JfzuJHF z%E<796L5OD@r zI}-oZsja1x!(V+mIRJh){fXPs$e8XUs6U?nY9l5gBmYmE-!ht*S=s)v_>KN6(#Y_i zI9n%s%Rd++Lpp#Z!0ICqhYx0kf5SVP8UJg7{%t(Jd;YgTKHUA2|KHI6(Cbeue{|&( zwlQ@2?NmaThv;{_oJKZ=W=5QU-g2i0Zw3dl?F5HZry|EopbQs2?o#@>pDNZQQW$@O0y%4SvoB}e_=qA{?t zF)^{Ru`n?+vvDvmar_IU3b1$hNb=vD4D_^&jDLEJ3^_$V81+Ar&CE*Q1VCqNZStq% z_q1?+4CX^v{ol3m!ThKFV=SCP_5giH8+&CN8%rLd-?0+>ru*cdyy=-UGXOg?hpW1c@s>(4wBkpIa(ihoDDm;yd> zgo>Vllb)XFZ_`V_P4|02{m1aQe=j*QGMs-Efcy87#3}JR^OT%yZ7t0J_Wv%-KN98t z1@{;GzbEDY$^5UdzgY{}*t&fbt*N7&i}io&{=WeJjX~PX5Mb?K^WTO3SIFOF`OA6d zBj&%geVorePLFi|JU{+DEq+(d|Ha4O)9wGFhY#xiIQbvx`yaXfBiH{(f&UTsKiTyk zx&B8A{Exu@$*%w3!;u;P>Krkr3pTIzA8JHi9 zkd6{EB9I5bpHRSwi1{`LfPe^qB!mT&P1i}AN2>rX&Kr%oorCMoZD$o8W$OKuHIJq> z>8e^4Nk&rkBzF6$vfg?>UO?t z=S|!cy`Q?I-&nFA62@eEG8Zh@eb3&n46|z&tmB3o<+544Bc01)6XSas-r0D$fBOaK z?EH-I^f1LN#P_pa$NB!Oxg^MHQ6W-x?P z=LU{b+0gZ!8@2(gb*sj<=k;aYL5P=kk{)|krGw|QD&nPJz49=q&HXE^3`&?Ql8Rys z6kW2+-qo%cKK#ttS;frGf?ScEsXsOu*|cotj*p02~sr?xN46Zm*OBucXU+bVeoDpo$22oCnW`t{nd zO1dsv?QD8$K2M%Y4OZBg@=VM!wm)ZVzg|U~lM#l-S>UA4Q4*y;+votXBaxMBN_@A- zGhwLU_w=mGIA~5H3Vr3SkDhPTHKP-#m*!}Ut3SLnMr#K7T7wLNo=9O^qIf_bII)A%mR&1H{6P zL6gGtlWZWY_tlmdnN54MsZhmsCMcCmsBmCpC~Gvz_x{ZyJM@n&?5iEH+QzX?Cs<_D zm*(}TcGBXNL7XuT=gpclBfl~UmUA!1$~M?feX_Yz2@*8nU-9fEImU$e#)y$ikGUtH zR4s1THE2TK_<@MVk(v;@s1LL)aN)nvCzO(^3G?u*QLjHYGZraQB7Ix>zF|?JPDSh( zrBoK8eN?*`Zfyk7LNMt@n zilR>|VnJw3KdYHE+5qQ=TkBAaWnk39k!}Xpjnrx&o}Xr6no;UMcRL&po;*=`Pls<) zEILR!5z+7&{uxnwj1u-b!~cR38AKT$6y>|SqRchX!(p>(rqoe2dT)b;fXO+cFYqJ` zgutNn8G@w{Yl2P3{dh;VgXG74;p%+`OzWh~q`q!A>Y15r6MT~ zEk6{dewzKPQP)*{E+?C$D?YQU&D~so6|HS58{;2(Z+EJd{k)E7K@n*VRW`#V$MJqub>jiAPW%fnqldXZ*{8cd*56kYgQ%{%q6gH zKV&TnA~wyvUYB`(9Zg>Y@Z~LyD6G&l?6g7GG&?2i|6C8NPKE2;H3SkCkgoT>+pF!b z;JU6pN0>36YKSatxS&NWrZ+dwgWXAR=vbG1R<{1xZvTwFyJ~0FCNQTM@tGMO?9y}z zG1aUhINgbD48WD-O}WxS&W7=@;B&@8jzxM0DCZ~Ze*Rj3PG%(DoJLeLWY?ReFU@hV z><(P^dG(fFgv@GXk2&#^zoxIR7ikz#dgZW4(GL?4<4Rj>XQ*kF&F0SMkF zHm`HZ*&W44rL$%o>(Oj%jjE>|*;s;vs=H$==VluVjOW=OJI3z^eD3AE?`_`1I_tT( z&hfq49-k)QvtPH`&tFR3u70_0k;sr*v?dt0Q;P@|Z#~SNzWu^~YkWW1c%OJ%--6tb zp$H-PX7lcXTv6I_eRg{CPrJ^#Cro)5VBZ%X>m#eE{ zq~g{&i^iF=t;@9)=eH(scI{tk71s=Bm6gv{8_a7eJ}M(*uj~v4YQ~NwHA&3nzb4O~ zy~U}9*7YkXd%nzCf@}o}yFCw!+*eHSxpyX5?k;htjZFDJNl4WrNnIBy3~@ke`ePt-cQ(Por#lPuQK}*tb@h_ z?hjKclg$r{u4g1<`VneUt^!vPK?o%>SX!SHIna}@l8J)Rwr^Ie*}o|@w}}hRCPN_y zIgk>820DwCn=J;BC$td&B48&NO3Fj$t-e&PPo zV;7jJiLr8pF*+{Yia0CbH<#UNWfsD%oiWL|<-6dx)LEu<6{0kyFkPUZKu>m8gopx; zB#FSj(CGy9utW56hNdsv7}WLi((nU#k`)|dK~o$8mkeFpG1|UQ?Z8Ap#A&L7n_x5C zW};xAWho|7O#QyXK*ytwZ5I@zg2GfYbJu_sbb#C(BEZd4)6mtexpm|Lh@;`O#lmxD zH^Bfqjn)*LY={sDg@J3}ZGY13{@0#}NO0lzSI;_gVRlks2y|!Z?{LVi5p?(>BN2Id zA|521IfW(rAzH0+)tVK+QkFdtCKzS6HK0)n&TQ@UgS7j8ney4cvN#uc=@fW21T0cSx>0 z>=~R+vJZv3Q70X6$S`rKQPo9pMH(8_=u@IqTBw3J&$5oPon`M{(;b*u8_<`1wN0^L z3^v!nfY-Q}z{uol_qf@D)SHjz?WAy-&yvOt3H5~-Z%(i%W!-2XMN8hlKw{QTqXE4%bc`je~2L1N>ot&>!p zIiAum3h;igZHBM9ZvM-G_bJBi!uxD%rMB<%@Iq(5UuMKL^L$wmI2MmKvy1Ml&)egD z=e3lNajkkx@T#mARUo4(?8$ zTQR}{&Shi5ZH8!WuI!di?V9aRX5Nq99~R!vTE%L%(;Fg`fLmRm{6GKvQ5UUv>V`|c zW(l(CczGfA9*pQ5LQ!L}4E43PSsyFVph5*iSq=zb_w(6%s8|2~!NH$`6S=T@JDA~6 z>ZB$~LM8?En*Ov}mAUYTqR*SBsEw!bICS*eBv~qzt^P zM{g8T3)J&|4`6aacR@s8e!2uD1_+=@<;d2t7C5ExzP3ebtnV52Q^%fP_a~iHkqL{F zSf33JxcF^%8O#gU%$h<%kiPpEO;FOW=a^rZfZu5h)`+hPwHPlNMW!NQ+0)@LmAcdgz>!VKy61>F`AO3_ex<6jMZIBk zbNLW@GOQm{JrEJe4-;|N?L5bF{||7g3NDkvnyz(3 zlH|)PKChIDgE}onTzS_23Lg~U>z=gpaEJlC;JR~N*BBzpQq`d9*+pMeA770L`N{Ja z_;-Kdo`DSoD$p<`BATYTPqk@UMfL&?EwD4;ei&F>+cu08NxctROPLOxLr>T^NmXmr zY}$6KJL{(3-=thhwT>-DS5iJCt!}aM%p&77?Gq#y#&HJ6-UY_mkMlHVL;}FWZns)= zi_LLc_fV!udCX;;i#VF9lrq15@1AFnUwZeA_30_F`(ljS7iaH%>zhW+)sxRIKK}5E zj1Vq&^E==A&etBCKK=a1Up#(s_x^)>Z@pbV`M9e6;U9nY8-Mk0)MuYv{rE>dkOE}q zl{kL$=j7$X!{(&K#nI-dyLJ0;b*);8_(vbS|Jpa+k@f97A7CDwDeo`Fem5Je?mxJ` zxbj%ncVETk7K_i`ttC)*TDVGYzt5{I9sAD6o+_sljyMOvepa14x{?>zg_kGj>em3(3qd7=DK7GOl@?Bn%f{+Q)q$$6~(2K7^pvFCkTw!w>D$C9QvWA z>K!+p+UN%`<9Kv(nO{pVAc7zq zgCj&DMks@Gt{AL>W9Jub6vhfPj3pKI4hhK#d50)&Du%@5oD+6TdhR5h40s>s(@Ar(Fsr`KyU2QphMeUM^fp zWw9azVx(r_gvKU%;;>$ZMPLFSgqTQ(+TemC1vEn;^^PLLG)ykgqTMVi=E}K(cMNDL z)oCtsfpJJa7h=QM=(uMexoHS--aTU`Vi1HVuxNcs#W~h$1|*;D!1iUofAQH(dUnw_ zN2{x|>($+RiDc|v$LP(Ns8)rG&wupr;pe~ni$9%fURwO(%k$@l`h!R3hyHNqjyI#g zZS)=u6pQVq@zCEoUOm0&TgU57Gwk!_Sp3)12hU2wrRze7aj3AJ;iPRU`RU}S(X_p| z=$~Io*K9BLd^3H1U9Nxs{SLKj{hY}oj@A^-m{GixX~sYQ?N?P*O}i#KiH@O^(yli1 zcxb#E4t?~#>Dn|G1{E}RVV)-=u7=`V*LMB&6%f{Gh#|Dm_er1Z^#ri(oK~HjkElaR zX2?Q>ApQBauuT)SE2{&qZkub+>@Xar{Z*+Ng_n)77rjc%L#;Yyf zKH|uQ+F}3VSk$^xw_0!@cl-7s+xUYIH{^*n+L!C&RUMU$WGFnYlW`$`LKWQ^~I~d^yYH2825*>s!vw#jjpcnj61Yo zdgsW0Ws#!Hx5vX&%-Wc%f=-{a@cdK9>C)dk{QmCwSq4TzH1k55r=m7K{{pchc{89| z;9@BH7{QwPfS1o}-M#hBiNk^V$5YY};*|2jTU+Yg(_4Ncrwjvs!qV2gkN){jDw@pByh7Gz^Y#*+?73F(RU>5n*6p5>)8c ztLR^HY-HPdQlS}PEzoWU#vhX?=&rUb@>V2Y+%>#cT?ub)QmtZEQ6)y{**nRF%u zCZak!veS(;n9}~{;lKL6M+2?$=fCsXkoB|YyME5XbiSQa#r=LdUV9%nC0$39#ljUW zITKULB|2h;oQn7CgO~y{fRkEs<0#bxSj^O{5<3J$L}SVY%@{z<48Hm#%)UAYkOr`L z`k+Z)MDG#Fqghp}g<|Lyq2KKgnc0Tjh*lgUm?;*Iv#3E}eD~gZ+4+>KnH7c2I-*vs zg&91dTW|E`HJCZ3QmS_Z0OTzO9;d2iV8DV*AVNe?kN}ZG=b5Wkt(BM+6`=x)RRaX8 z6#HqV3}sgjw2da+WJ3=zN#Nwo%{u8oc%I5O49 z7Q~`cFIE+_)^dH$XfX;Q22V(2fM#X}%oIE`BdBUs6oIO9B{Z{=6JScotf~SMsgeR1 zfB_I86KE-B06@iTb^pPftWTgyW!hUU9NJ+VYsrp_KowRYC1OHQGqlpsDA7r`Sh&~- zOVz6T$+M+2pWHcC2siW9VHo$%&z7%lnzq#i71bt)<*Wd)@ug_Z+H4ln^|c{3T{ujs zjtFT+tS}!KfzSvGf~px90)o~8U}S65 z+8f83W?ckK39ObTVi_z>yF>Q?|NH;sR|R$4^@nWEyY;f6ns)nfv+$QUL#?G&L}~k* zm&dn`s%kAZXZ;G9zP#?M6STAnKB;#Mf!$?)SiSe1J69j8DKkSU-a7yzOR1Wgc_uV7 zBw_(%Vw|V+!QuFREK52#fa7%|!lY$C>!Yi5_w7G{XFqBj7{XjFRW*@^&khe?rj$nf zpa09>$o;Or+P>)11a=w?&5&?Ru%AmR)e!|%ihi46+mFQ9Im$VG#V&o^h}+oyX=R#= z79e)ict2NLgm%dUnt|x_&QUl$eQ~~he3fE3@OWY9EG*20Jg00#B6ni3{@jZ!#8L(J zVWb9q+fj9MuXCoxtM|h&B}ISt&eR|L;ue1PkN+zVTXc(`Je#kdoIiN?&C$Cf)_boW z-)zUr$4}V>rJ#8{;-Q#BS?&(|5{`)U4}Sk&{_J1+?d=c$bryH))-ga{I-d{Q-7tic z2YC{Q7*;J2)^XC3zxLMRpM7}tt#|)qXh|4`&mZ?w){=aTjZc+uI)5&pZrP%C6K!rk zxb^(;XU!{buBYc`XXoRy&#y-x?7%K&6NcL0L0)|HzPR8WeD=xtv8ViOKFrz|efnWN zT`(f$s$;6hEoCRels&^bNS&V)z;yL=zIc*femu=d=F{!Xc6Kaa!=bOwen^CfF!5p` zvl=WTonJJEhxM@i!INEXJOYwu1C~mBk*p0=bI!oHcd6=r0(%~wT&8c_ef#Aff3FOe zR?wU4JP>Q5Wu6k!L{7vDFf*|0jRbRmX%Wpk7Dh%ufFRg3K^3B-;28{@!)0V*VjZDo zFMLSF5E}2yKm-Vp0GO!Z)UA$)01)@P-ScOc9!lqGq(oq*?0t(sUE8#a1-h0baOh%) z>qs6|fxi6YGqw?>MIXZYRp4NNka{8n?!GFBQ5e~|R1#T@LV)H39AmA(!cdX0niex) zVis~j2EbkbbJs;x3s~8^oGTF!5^{tpzK2Dy5V< zF{(M|tR_ZsUKnOD>%aW)-UfgL&?Add08}KJW^{&vgkMP((GZXj4bT*d;mx2iu$ijX zzBr}|W{3u=U->$+5Qm!btmp--6tBOiim0`^aF52yVHIYEW|})M`Rj zDjFI z1tfOfw~NIvObmsTsqGeMKKMK*a~*it?T43_+dulrllEdfZrRkYj@AI&9e3U7@uxp| za`$8vy9I)A8C@yTgnrlWlg8-D6=qHuHwzSDHEr5<*!GCDTDoyk3ZW=84W)US!9Tm0 zqZ32-@^Cn5ieTLh*AQ2Cni>D@ue`Y%Mt05R)pm1yT=FyyDVLmcT`mFxY`TV+Fr{i{ zL_tX2UaT+f#mcB0T-ov)DoUyx=uAk%PWQl%N_Lk;S z^!wj^|L6amUtRjiZ!Zo{o@B#tdpYJhk2!dE=k0F{FQ3iR;8)Ao$;|E9`S|eRvp2r} z4*tLY=)cgcIo*_TijW=ST#r5@fBW8}zx`MK?B$a$$G#UIA{FmkQ5*XG ztxZdaO?0TUcvt5cUHtON`TzGvPyWt7_>VvQ?myc;ecCO$X&PK`Q$LQ@kdEFphD2Z# zqB!XUba4!?fBVkM4-SX^s<*2?y>YiAgQSouZyFnC9j4p`Dpi}nfbh}txjcC9=kJJI zee}Is>!ns(x3Sht#;o)8lc%X@=UE(g2nF=z*^To)GG0x3vP2SZR1TTjK+{~9W1dT$ zwQ+RR0g!+6>7Vhye|nz-M@&c*ya<4>07@-&&QuIcttcCNLI}|z0dStD-~qrCOjUPNIm`y8B7%&pFDS=0_UhpFhDqnM}cJbH&U*ECmRG=u4I=vrUZ*!l6R4G0VzQ}H5509w&=KsVPM zT=Zz-gd7Qd)pz7ns+Ot-rD`c4jzJC3uJ_|K)zGxY)iG5w7KV0xGwi~VC(jglCPV;K zAVbL&2$7h;%!N>mrg3tP+a|8su-^}>bw>!*00>!t2wd{N@*E{{V+|YdABbiNGXts z5RnK&aO3`Q2XECn%IOk~tqR77+ubl!X`DD6lyaZ!i>H@__H5q|SG&_qY#r~W@yoN} z?#AEj4~o2jc7M1D9(VnGv{|H^ei#NH_$NR5!ijx0bw71nn1t5t+1UlBLl8vBP1}H@ zqVvx9<4>=iZL?0i8YNdU)y8YJQUQZU$jJv(%Q0wDOsP&~EGRdJVKHtGFynvvXYRI5 zoT}|7J>+`Qxh{qw6#Y1!+2yVvEIpTbXF_a3(T+RA90R^u) zmE@Qc+klGZevyWMp|9)X-zB+HS|Y=3@!e*E=szq*v& z<>hQV4HcMz6vlezt+(^bGp`_ZI{*LyBS}O-RQwdO>ZR zuVxI@1wW_ku?lmpP*t1goc9W}-5!4D{f~e7r{2A|de#pI5ni{>T-))yKa5AM-;b$r z6gr(rgBLPk-0j9iAXHs- zvGF(;qg)VC7;~*DXE3cKdARn1i>`@+^E^3Cqw_)#nrO8uA|txI8xC~w$?si!@&0!8 z9m|Tyjqu`VS=AP|Umg4X`0~l|qC>V^%n9UL2?zv9q~DHh;9OPAT##mY horizDist: - texIndex = mapBlockHitY - 1 # The texture covering the selected map tile (0 is no texture, 1 is texture at TEXTURES[0] etc) + texIndex = mapBlockHitY - 1 # The texture covering the selected map tile (0 is no texture, 1 is texture at self.textures[0] etc) texColumn = int(rayX / (MAP_SCALE / TEXTURE_SIZE) % TEXTURE_SIZE) shading = True else: @@ -358,9 +337,9 @@ class Main: texColumn = int(rayY / (MAP_SCALE / TEXTURE_SIZE) % TEXTURE_SIZE) shading = False - texel = TEXTURES[texIndex][texColumn + textureColumnPixel * TEXTURE_SIZE] + # Obtain texture pixel color + color = self.textures[texIndex][texColumn + textureColumnPixel * TEXTURE_SIZE] # Calculate color resulting from texture pixel value + shading - color = (texel * 255) # TODO: Remove "* 255" when the texel will contain the full color integer (3 channels shifted by 8 bit each) if shading: color = color * (-SHADING_COLOR) @@ -392,10 +371,23 @@ class Main: for idx in range(startIdx, endY * RAYCAST_WIN_WIDTH + x, RAYCAST_WIN_WIDTH): self.raycast_u32_pixels[idx] = color - def dist(self, ax, ay, bx, by): return math.sqrt((bx-ax)*(bx-ax) + (by-ay)*(by-ay)) + def loadTexture(self, pngFilePath): + # Loads a texture from png file and converts to sdl2-friendly format + reader = png.Reader(filename=pngFilePath) + w, h, pixels, metadata = reader.read_flat() + if metadata['alpha']: + raise ValueError("Textures with alpha channel are not supported") + if w != TEXTURE_SIZE or h != TEXTURE_SIZE: + raise ValueError("Texture {} is not {}x{}, but {}x{}".format(pngFilePath, TEXTURE_SIZE, TEXTURE_SIZE, w, h)) + # Convert to sdl2-friendly format + converted = [] + for i in range(0, len(pixels), 3): + converted.append(pixels[i] + (pixels[i+1] << 8) + (pixels[i+2] << 16)) + return converted + if __name__ == '__main__':