From d76095ca85b0e5bdecb76d7e363ec87da0c18bdb Mon Sep 17 00:00:00 2001 From: Andreew Gregory Date: Tue, 7 Apr 2026 22:56:25 +0300 Subject: [PATCH] I have a working snake --- .gitignore | 1 + snake/snake | Bin 158720 -> 0 bytes snake/snake.c | 99 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 67 insertions(+), 33 deletions(-) delete mode 100755 snake/snake diff --git a/.gitignore b/.gitignore index 3a02ff8..c8b5dd8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ tools/* user/* !user/*.* user/*.o +snake/snake .idea cmake-build-debug diff --git a/snake/snake b/snake/snake deleted file mode 100755 index 01f7bb8e35218ff71256f4703ffa274fe87ce179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158720 zcmeFY3xHMCbvJ&_xpVHk-w%fO9Y8>kxs0L_9CU_Z1O#$!jiCS%wHZe`w)MCrA4>T847zfFrDBR>CT<7FtzS zrSKKL1qE;r;GIWeg{Al?t%?@8zl}O?H^^U##!~QcH-F2LJ6#?MD_Z3~{9l&EJ06f< zR_R#F-k4Xwdm-q&jXcX-eDXTKpV~1IeoB^YVtD`|{Q3-pB4*g?ahMZ=xliRk?e3{=wd~P@wDCg8$kXS4wPW+jGVDQxBS_Zdry7K*e^!TY*p+I z;g=kJ(>pPwE8l^~8%p8eZho*Bef{|O_^}>)Bghim6ZRl*pXAI z%1v#XI^f~x-vWzhjg1;m_mm-`m(G83`I$G=ls|USy_?-{wB6G= zKJwFhP+L3p+|#Q|zk$I!*8UAKzFQeb?6+ROO*$qaq+e6OLX^aB71#XHN6IWq2{`OOcUz%0^_9qL^uzQMnwNMio)U`sb%%FA%b+)FWR~W*Ar(GHRXWTq|;9=*V zb_@8aXQZ|S#WQXNp8QrcdIMa1xCSlw^!SCKVAwwPAj*eGy!+IUd-6XIExu*s$tS*B z+H?lR4=SbjuG@5`>GK1pN_S4R+-)!JZ5Aa6XY)JiA!rSiK9eUkiTw0+Lw|d+9$JS_ zieE!z&m3lj%n#XPCBvukR=yKcV(42yVbw%FMu8NVGyBYpTrS1qwqYzXQ=FCAyNO9DnHgXK2|jRtHM;QWz4}awC0UGJ5tHaelm{}zw>B&#nG;so3AdZ zIeJ~e6W>O+?SsX`r;4r`nl}7I%~ac&k=| z1V!MEb^LJnrD7GcI~cP!{Azr>{ISEI$AXp~spV&eB(i@6)boew>8YXVC#z9mEDoy7 zLM(1MIRmt@ox^ACp=l>M;)qz!$*BT#hORj|lk7FaXPu$?lhYJ?`Bf)tQ5$MHIi1W! z!)Ie))+y$Ut4`LCS#xpFmH;!)k_4s&S-^Py7)yNJco!5b`0{GBC zKj&h&Qs>aFG`3y`Q zEFC!2g62JMbts{-wrPAz)6cP9mt1yd#hn*5{o7^N)!aG%XnVc=YJ0Px=kI> zWq%dV0{d*o=(|;j+s3}MCN@+v_H1D3MS5~VHYbMS@XZ;kIJWl8;a?UW#Ex-lcr-cU zeAphVI@a@vrqhRiHT7VDP%jx99eGx5NwRNT@J#y`Ij4}{hcC0rkKB!V)2Vw)VuycO zl*&JHnp5K^$CkyAgk^^>w^F-@+rLe_|!Nck`)|VRd@KG6Q$%dmnNw7H2-Vqv?f_NJ2Yp)Yn1KT|&X zRixJNClh0T@AdO&tt?I7M`yVNG!CDgQ-0*FRB(1~`H_32vZ(yXJyJ=Q-~ALSCzs;! z{Np5HhGKZu@ zq?VW2O$hYtUm(z@xQ77jCe|R#H$PKzQ{twY;n9+gEu(|7jU?6#j~5MnX!z-xH~yNb zI`rW1N^V0|YG%`^^2b!B-+TYJ^INTZ?z;;~tg`<5-rzKydYrw3f1SrZ{#p$9v3K+N z#upw0^~Lu;L}f^w(vFVti@DD{{{hgsVy!oRl_T}wcDw-rc)1ddmrm+z8ajwP_5!vsnyT8WMG)Bu}hoRf>~*pvD5;^ z|_uku%TNpmuuXSv8fh{$HRc8X{PJ_gdIj%iQow@$w_f(Tuq~iXC1lN3n-lPgOkr zGjtZgtbP1h_&Zi61={Z89cV9qqI`H9fjj?Mfn&ugf6I^19-sG)Q%LKha_BpD^|v>T zbe$Q$xEUJ9FTNDdjiVoggGYzHee}-fFgV>?MpsM5CysWV0eqzW>uZN9Z+^PSKKt}x zo;L00`I2(9{p-V{Rl{dzAH4h-mkTt1%xoIpl&<+CHMf8JXxDQiD>+ASaDA9_V5FAQ z;`t7^CyE>%Dp#u$sh#cM>pe9_fy_9i1#V*c-W6|om==zfvQI~6vVX&Oe%&6q`pn36 zUpzP$J=-+8T$Y!T4)k%+e_|p_|1ph6Rtg-e>cyNyqql}E0 zA38Jo@cVtJ!NBNe;S@`*RR{{Z)D0HKiSa;} z#GjE`+Bk+K4_SHmB;Pu$)D0L%R`_27Hc{bj-BC#~lyfQJk??B^iiTU$&r8&`k?WPT@w{@>uy?HIk z9_Ww(9ZDF`+V*v8)^0v0TRXS!InaM@$o>0nNi?iXr1qT~eBa*Gwt>An`fuB|bKm}L zH}2lPf8nCnUyzu;YtNy<-HLPmIcZurG_W^y>9*AQsT6v+dEJKgZJiyP)@^R@EV4RU zyE@xfqukWq*_micTzT!L#5L{Ri8ZZPw;O7EXIoky~T z_6_ZAn-d$_x3q64YU|pxsr{PG8+sFpO!en5XlnEh^zZ4vG1b3g+b!D%RUhGU$A;G4 z)>Ux(>ei0VZEe?fUE|waz3$2@*R^$R*xXyR_S){m)ved`CR#f>HlTB1j%*wnNF{c1 zBzA4T1>@GXp{sLq`=-sCTH7{T?N@hf?zPrzYHzNiO$WNx;A%Ooon0MHzn4r+q8MDwWSq4Slz7~Hgu*>**}}vV$~;Fta-SX>T(ZC z%XaWTvczyZj%~#pRg>>!X$r2#r&j(5&97U$GcQB000SS-EPkrah2tM?6llJ|qM3FD zF-CV9AkZ*;QwCURRl_%B8dEpuKR@{z49i?s5W}C|*{8586UW$OUW~)J*kxSK1xNjv zb~%1wR}jZ~uIv8>XT~v8rx|zZG?*~kq#5kZ$ie7}BJkUc!0VBN%*RT72j>*m4nsHV z+ho3)Idv{L{s=MIbuO66bo`<7`SZzS7cpV$Ri@l48DFl0CVz6}759!i{+ri9<}v=j zQG5yd0aDh*{yACHY(g$v=ALQxf}jSoHwJ06nHhiX!Q30kGjo*vD8bFR(iVBd85-kh zXr^w)ff(uwUSa*9zRW#6tRJLhUSa*n#ISuXIJ5qg0zcWfh1qx|w2|K+2ZQq~SP$A~ zU(6VB>{!p$r{J0wtOxbI+V!B{!Ftfn?|L7CzD`sR>t7}<{KLaSp~bjAr5-jOqUb&5T=cjKXNI z=77Cd=in>VY4#^GPt5+5sV8%fBmZ}a#`p%;Wv&Ckai_nzuCRWDVgI{v9E;38a6B^m zk;{)vdS=`7DU;6F1;^jigZXP@Cn_KPzs$jjbe=1ZK8MB5^u?6ts_(ajGk%&fSD#*O z|8m(eewgyrwrliemYM#XtKDRDMG^Qtia?&aa(S%Txj>}1w3HZBmKL&0aODCB+b~gP zC;$bbn0l!2&IEu^0=94jFc?tqcrq!B06)l1J}#H27Y%p>`Hu4m0+en(t-Qe?{}Z2Z z9IanjNasV`$*@0&%kvNHPo(iJvOPYyj`m;oKaHIP8+@ezew)izFY@FY7E6!qRnh<+ zHBiwC0+iqJ>Qr3y_=h{xQ?SR>HMOR;rna`WT3=NL4*m;cW5AJHLvEEk6d&{#z<Q@d@H*KWbr##%3?kNvE z{l-4TsR5#*!ISsnqdic4@c0wP*I4=Om1=xd|D^+J`26@V{J15443LD+#Gmoy08?H^ zM};>qK9H92kpPQ!4uBUQ#t#q~|C(AQoyn(tlYd%+iCC0>44}j(Jpa`2y&&<$5UB8( z_$QOz{A7B2vokopGCG_e906~JdE+PZ8zW4v=5r9e@d?ZysNm4c?eUfOGXEg2C%BPk zent7`t#2kg!T2&f(fVi7>G!NeeoweRsQk}8zh(X+1Axo5Kgs+AKXiW+{hXmW_DATS zFuwx!IeD}46Z+Nqpw@S9^$5&w;~&KXE07t;N!NEek1KqCkp9U6628B%f0OM`bdd3* zgL?Bvq5M<&8Nl%UQQ}8#j`eLaeu#cqJ_GUN^iTH>-WmTg`zK4UXb}H-?ql%K0lhz@ z@4vz!K*v|@|5UHee>AP61Lr@r#EX6zTRMn-sPqt7J~W@wqDAaeF_~t4Q(Qb5KNWvE z=|I>XLKk#|JQ{7X1u6+z2 zd#KJAYH)!GjGqKJIKQDp<)0c`6CWNgjCwym&G^!~KA#XI`ju@NMX?XM8Xp~h>W6mi zKZajrm^VJ+88JFP#k$fF@Shsg`XJ-00_5?He^9RSPkEsI^X+r=wfT(v7ccbsFCI{X z$jgh}MDKTk`on!p79W*gx#JtmkFfEPu{HS-GQN6rbLNLwHu5l#nO{NsOpgFU=Z`{| z`33p3{0{mTK0hS;_4*S&zm$*u`UeC2r}J;(`3+ED|IJ<>xW2Lb-ufpUU>8(=3ttV= ztF-^B0Hv?Lu&?K@+CZd-YSIM#lLX-VOTfRh{xJd65CY-LLpj$EJx#e~$W4mw9}#lv z(a^22F^QkYQ=#=bBX*dKsO|BpI-zOs<{q<-Hf<^79wV_$Lnr>QCbl?Fp&sq|#q zH%M9`%C~Q%jHGJ&@iBfW-HNO9OP_MZH*^2x`>_mfaC~4B@|;~^nDz1ujZsX&RX2|%8 zexq3-l?7F2{uwEjK2Oyq%}?m}?X#w|8J#BoO*1g=7Z$m{hz^Y0J5kurS$7fvlt3!+8d z@2FUAy?-b!o{*RIJ>%~Wlz))dd{17#Ux{Xw8A_hNf64%<{Ylx@^4#E{Kzk7IPua)* zrB67bA<%zGyy*L%MC27dFmAFjgl!JsnDetlSRQIEFl|`VXGCu#bv`MacfRqcenzn7 z^Hrw#T2!0*l_tZXWxsChlcFxaWKH>RG#E)$5+82g;DYa0L@T>Snk}WDJasASz7OP2 z7~fYoT))@wvTW~z>t9(}Fj6XPjJ3YXtg^DPvBlEHgQY(nXq4evyg0yDT=N7P04>2H zAg!oW@WNtRQ|bjID1{||G5A`TC|+8VazGK3WIB>)Wyi<(nhZyk!KX6g^Nki#v;`^@ z-F&LL6lewG8#cwWN94CnS%oX74%xrlkx~&_@RqKN)I3 z1VuatUleE^X{L3<=Z8l~3`i#=%-JdsSy7)1ai3^WkS*p>CgV?{U&JTyZ<7A0080n- zNO_J)MR~_(XnZFd9}%BmeCeHMC*5)eIXu5ae~6qRQNIeHGGpkbq`aCQ;iJ#d10V3* ze5E-Df0Fq<+4?Z~`ZDqQ1ji>@zDyXhO9m!AWDHXfM}WU(g$3CMs3Z(ZOPv6!SVdjw z))ZD#g%2GW3i?3Tq*bVTxda;GI%1ScsUNxrWD9_Da*2oNgwm(@q5%x@^!-RKzE+dT z_w*|xM!)zc>Zvc_fa#AiLx!o*4^LbXm84PNVGUEU8DBAwu3A&|04g_qK_lahFUHy}jMtN=dqLPcgk>gKQHjk13VDK4{3n(}Luu3#pdqRGUs1K-hXt zgcwlLfu~Gm-wrtvQw`BG-2*%#d?Ik;UnXCR`Gq=(c=A3&*D~x&%*>1i#1r%?S`O_{ zb|C6G_|zn<+2wSG$$jF4}KYf0aNoInXra}!H zNa!NQF^$KDTBdM##0Z4(b; zLti=h6Xf@~%#VrYm&!ghf5YbIWb=FS^?|c@qV;9s^(i^Y`Ud|+efnM=7zM>wE(FM4 z6#=A!-buk@=nBS0^TRdx?-H7&ZQ1iNJ*8J4t>_l3$bL=Op<(+5DJfekpOah=hFu zL)Rvp-@=yJ9lkzHzP?Z{T$Z_`)-M3U6KTR>ky$z6`l@Gj4&{1Qx3-4cCUs<0>qKlu zFPAWRGPYp=#gwrNIdv+o8ah0)6ezt0#bZr+{HRwCJid%bEe&9pO7kN`r+wel-enus zo)~_JYd+!;z9MD09wbb{2RrLL5fF#dzX3brYe_(_s!qm7;!bE@j;s^;N5F*r6F`<< znn2my@da03;qnu6VOS?m&ir7;C?(&FBOz&Wfh6RuC^bgYn$W_ho=FG(U%$^tOI(0e`z$mUbld$A-x^ZiJ%MZ3uR ze13rQqzT{{q0~my_c>ZNX`=XMBo&{TVfavhdOBa^%|rO64*~t;OArF$h$=4Wxnip* z8ST&lE-o0v;wVak(n8Qw)1#1Adm_ZRkI$&lc+RayIh`TlH$~R7?$b>TJL&|g4eGa7 zPUhca{e$O(OxOX@F&Sbae!xJwrAhK*viuUh`oOI^!Ka_zDnEU`Fq!|xS0#T=^Fz;0 ziUJ>00EKFHXU|U!%RRr-0OCC3)|^gX}eX`nL1|0Ttm8 zSO$MfP6v|Upbt5uVMe5L+gCGfOU?j@qZ5e>Ah&t1qfzCz7=cN~XTtI244oi9Cd;o$ z@^iBMo@{&hLrW2Tt9I)|W}wr^(hg#D1c*VQ|TpH6#Q`J|ZYuo{pq@1Y|p*UM$%^E^pZY@)d_%xR9QLO1WYwCFw4RxUgk?WG&zucB5Wd z7bQF3UOE#9-+>5(jn72mJ6V2A zo?nyar_39fUD-3p=vUdxsgyoHB*7<`U;4vO?)eG8g!3C?Hu3r(gF4~*0tER4=3Jl9 zKT(w9!Fe|kU}8Rnc|m!1clTD`hENrgG3@CfTl2SUX%mhYTmsCWIwX7AAWN;H**v_T zy1^z~^owS$f%r%D(688vD=>nwI)M!jl5Iv%l^P*@@twLvm=99}8@ef;6gJHY7yXcn z?e498v@b$v1GA+~dcwQ{RsSW2(!jO4O$;gp%0CsozBcd_(+elHriItz1S(#91GK36 z>P0}ucargu49PvdljO%_`88R7PL|)3%?~qyn9-8N@Rv5d`6U2Je(8z#@a8AtJ@Ncj z1ETU?%*gx*t`C7BQ24;W;rr})>`Jxi}IWTQ*u^~rxw z26f(_lJ!BF#sCpeTQ}-h+HipeHx)ya(~@?iyG^l^G)_@y?48w(QZ>nzkkOQ=h9lxB ztl%H&DxzSE20X|Iw6Cq#XLA>s1)j2@s?^jwOAiR*LOEU};~xpLP=oKpur1tKicOUK zr4(V{qqDHt%|7??DSCUMp?jA4ydyo7?M%C@wL*(v!yglK!)0Cx)z?3Xf0OlZlK4y( zUq+GPl^h5ipNYqJ()=*G(c!TCnk+vj%Wq}}lV6)b0;3g}A4#1)x#kzfY~uOp4=OB$ z&hG$X!u5eTL}7yUMG*8q=lX;$n+1M0|5JALOz4t*0;46=en(1 zWdYopsh-?!oaxX#c#pC>sDM$SGzxHVgB|2+VqaU5JX~Bc0}fCv(-0(b>3*+XfQS;i z!bP``tKFMt^#WPa+uzso(plas6u z?B|5*3j#Ia`b0i^k})|*`klY<>c|svEBoe@hJ-h;cN=>3g^Q6@JZ5V0^3Li`Nx!XG+S4G+g5Bobuuy@jL9M9BPQjA9ysL`na! zEaM_CsyhF&4fw(|lx?57b^b9;GOgn`L2*u=ND^G>I-pgY*Lt!PAg$nn%0C!N7Z(4u zhXTwpkHq7TlHwu?T-h4fF<2oRcNU+Yw$(-Nvm8`-0QjXqu51m4l0(?Ae+wo3#+}2m zbXx|1Jy*~G8u9As>B1!eLUIw0hgqobdl8r*F*k)FY7iu`2iBG@s-PYar3!K5Oc!Xv zrL-QMAX~hnS`qcU;}}qdXcx2cvyMXdb#+mb@Ox0D0TM(FHNhj}K$lJoWg9q{!qw&Z z$Ip?};G1Sox(tGS^E4|fG{BgM4!B}2YS8LE^Xvi~6q{l}W&!jV`zXn$N<@Gc3#kVn z{%eEQ#3IN~t8)x~_p(&E*fT5JIqAFi!10=iWO~F`!?rCwZH#hnk7@6WpK|d~q14=Skd(g9G7TpmZ>;NcSx+5-< z*~1^_APx|8$%R7kw}8bPtQqw)NnH0_^*U^cv;)xhojsbi^xdncpFD%Hc>Z zJib_|D+9_iyJ4Y}BRsklK=}Y+@{tVklk!H%Nv-%j_=zElzqPBooBXaWpnJA@YY6R# zRV|OAyPJ!u=Kx=;saU-wLIIWy+=`E>tk|5?$~*y{wEWK=pyMYEya4kb9LeNEJ)FYV z6MRI2huuVY=H*oHn^*RO{=t7`SUCXY_!1XXp!iTKFtDjVU_iZAYd)pZ#YGCi0|!+# zL|rDn%CZ?i-9mu%04jonm}4wW3=ebG?_i)N$?Qo77+y78&SU=%RAjTuVTY3+i7-L$ z$j%|mlM>S?H(%{8SSrFHN}M{vt$}$x7v!n8}<%5*u|C zV>Mge1V$8PYDaHW$KXG^k<~l=%qCvbNBqm?6QEQ`5e9%HTw`qU2mz>LAlMmQ4?x3x z3jqG7s_cZag|mVhIFLv|n_bjw9CsvSz38)aoh$}GoiOlo82+JURz>j8d+&&+q$Om~ z3I>9VzYI3V7qCgiLq-RRB=}p*UnkQP1_g$pf)%CR8-4KzbdgeP7tK>j4nREksf6Hf zc&eM=v!VE`D6)QPU53x#P>?n>wigxec(sLp7Oi~dnUTRD&dUzg)e8oYym}ET6y7k4 zD-s`2RfMGj9zeeQP!e3807VZ}W*qRq_e3NrxsQl~3*tS&|FH^B3b~EpaK^uY2?y{O zIsW|Zv+-*y8yG5{zvZ`9{=R80`~nCDLGnu{TKEw+z!zndBwv31L~MLMeStT4vw)oZ zfD1NE8TBGg&H9#MM%EZW55DxvuhaAmm*yLGlJew>?*u@7P=7D-3ZCH|12`V+slay+ z{f2kqAYn8H+n#oK30ZkV=|v~V7l`p5r8eA4B`QjM!|^Tj;vJ4HYNmgT1JBO^73o#s z`hUWc&Xg9r=o<(Dyh0KVojBp+A5O4xHpXjxK!u!1g{2OwOc#%@NOAs;c=3YIZK)u?~A~h31-+XzchemlN zjq9F%V<##@B2eyMhN~!SNlnP8NeLQC)$&M+DAY_^PzMEZ%LNVPx*AIKn9$09ywp=_ ztSSwLs9HkRRTNrKfu$WFf%+R<;949Y8wDk*&oh1t@Ds+orG1^K%5N{FIb zYd3Pf9#D){mih`flSTqP^D-*a=#vo3JutMJx~?dD9+A|53qsdEQ#2qhD8u)K05U|Q z$B=>`UlDZjqELXyrgsGZ1`4dYJf%RBlF=qj=}}CL(ll~2*+vbee70XDEhx@9DIQhT z(IhPJWEB_SNvY^M+v*akR5jnLv!ZDM1wu0zQTgOk7Fh=C)XU41 zs-;QrBGC3-QQiffnJg`phEOz*WE5u*(DalAB{GQRBIXeTe){4{v$3Nj6io|jR)7{{ zWRe3mJe?C&v^*e2lV9~~Nx$mXd?IK;acPidh*I|-$`aW=O+iW1L{$Px3<`6xDVHHg znMu=a78)0z7^)#Dgr*v1KrER-GcFp{0Vt5Vl}=2j3Mvz7h(Rc5Y_iZ~sj7Mg(clzf z@+a`YE1=jXzanB1XkQdHO7jsU3Qe;#og{^k8mg*PG=OxI1zO&v$+{f?OANWfVj8CWT_tM2O#h_Ghau=P08d()Ow3nifkztBMv(C(;+gp1dSlF3$-=VEMa4oV+In5%hoJdPwi6BugkK z(U_dPJa?TT$Sl%tK$xH}AzFbBrG^qipc0r&a2Qc&A&+Dj4a7{HXonzkkhCzlnR-Mb zov4+h5fv;=+(-tAhL%LdllSW68fvgcy0krRuyaO2N(Fr-&opt>@NEZ}zdyut?|o9B zfllfw$>G#&vZ%-;hY^LAp_Q}{QYcO7e3hRW#!X(mB61cuDNepBN~BIQ(x8Uu(@6<9s+xvoJT_G7GWByQwe6r2 zUfrvR&T~hWD`-$0J_!*nDQ2LRP6JY30if5XG@7DjkkB*=q*UxQ5*rGpnEFYo;snW{ zr1`9P=R_32EF=lph7?RaX@WIg!MdSne^fIZdt7$%-gBL!Ddp6L(eR~n6$NyzfRpwbzJ znkDec8A&Y?YQQ6A>7ASaSp)LaumWOQTN(yw%1~mapaJKgr&&?hAW2IHNuI~)M6|NS z3CUKWDdB}D;IYL{ru!aDxaL8bqzD>{w6q2?c@ZELU1uXmGvojaBwj?7OU-`>EuE}U zx)5lfZmKK;%A}P}q9iFnm}oO})9}l1a59`sYPm0KYC`rNn(DQsqKK>-p#Us|lmQFq z@WI*2zza2yK@@H2(n5l85UFTsL`_N?e$tdvUd@AvLyGM&iB*jt%n;LHnwUvTieNdo z!OM6Nr2W3s^UlRlfF{8CtaHN=@5^M^&(oarA_HWa0OeFUW6R!9h_~g6ANuXXx>pVwFlMfWC%8*-!L@771h3*AS@DXZoky14@Dv0Qgn$pH>&< z@ut~O+aSUqbppt4?F4J=hFqRP1TaLQm>5LdOkWu25FB-L2xwIN%;6hx zxFjsn1w3*?VHa#fnj)-;aQZ`N{zI5yIA03fi2({qqp#q~rBbHPx$DWL=G-;-NUiJD zROu`Kf4qk28j=7Zi42#zZjS2l$URmgeHB~n&EYLYRmss$I%w6!z{ z*V!y2s8-qoHk1~im`t1>yqI6%7u+LGZr}u_obd7J23bsHo;|5Bw>shS0VHKa4f_|o zJjXOzfWQWD43)qbH0g;dJ(X$tlv4`ocZZOmW#6pCg;wSAR8axP3@X@9u30982B`Hd zT(}Q9L<503h7c!?W{q80azF#eXp|L%zyK_{4-ol}rMgk5O0XA$v@2LHj{?C14xnyq zvOoLw?GqdpaRDjU#2bNW2T=e?g@AEaq7PI>5*_qnla%2k12AP-xZx_@j-u> z4{CQKE9^1~larFQVjw*;eMV%}ju*bs?b{gbhx#i3tf3wTe|` zg@U|9rIhs33nGyuh)Mwp*a!e9Q3r}Dlp`RT2x=QpK%AgRLc`O=ih66HyaY$0O{4rL z7Xc+D3Wi?57LJ$HCqqVsBrt8l zi98?BqD~xinEMPaZziFNB*dkd^onVMO&)U+ozRnm*+7GIi7aY>X8NfwPb2k-1r!QL zL+uR_hUDSgPH5FphJ)f>h#4XI>>sU88X zK`3yDv0`$64uYA=;3&Ofk7jhH=v>hA!-I)DTqDxE)cye)?Pxctk8OgCN~w}TXb{Kw zBbR7aY06E43XFTqU69xVg%z&QR84YUS=4q74!MfuO`ue$5<|IWAiBioBIc^{5tg+g z&!T}t8(o#fgAOVI!!^oSQk1ipnna&;ksQ6yvkHV*QqeYMgG;H|76fV((yX!|O4LJb zAE;A*31_sdfC?G3sp0q(gI{3elJ1I5t=}eYJEHVNj zPBTLbW!Ct|NC^xIjZQ;S;)3+!VnFG-p;Y?^dLYhzn8i0f2;{{@FO`5~{R$_7nVlA}2u6r+~@=v0Spm!F?h}puuSn z9oIT#g;SBp#EAvqSjs~ew5JscMB$WE#8Ed24@9gU8O5c509i4rM5Ad4BlytvvWg%k zO_ddLRa8!?uc@6fy>7~knNz3Fnq5&@Rb5kCH>G~+wCOWu&YE3SjmDHIb#?XAX3Uy7 zWBRn|)2GjvHl=nNDl=xVF>@BKnY_rKAvI~unoW*eGiO#-R#jD3SK~o_b+x$a>T0X2 zYNUcTsP#028`i*-8e3E9$xv5aMI|)hrn;IMD1_2#5JWrcpn8|I6@kxMk5N-yp|2Vp z6Z`f}mVHNoJspeKJ+@`lgFXZI`}4=g=M&RfR&ckos?wc>B>DEs{jg~LH5?oK)KgR=dfo@#Co=5; zvrS_bg8#p9p91C$K|NQ#CHCgLVb^&*-FilhvR`L$R~3wp*9Ng0#ck<#Jz|g#er1q< zwa>p4{IjrC7v!(@`90wOa032q;6FD3|DE7}Z36yD@XvtX?Ac#k>fWmCCqVlu_%DEe zug70g>LTvWT`KU5!OOsGLLVRTFwo(=N0g91!?CO{gP%4o`~5yPgZ~2f7kTo?k9|J> zwcw9~zrf?ehwByp0?_UNKVCRKzQf}~e)U^otKXcr8Y6bCKVm8eJ^=g*;M;?E^yyBW zOZ52+Fk6A~Z9?abzE3{}{|4~=K7;Q(C;-Y=#4PLI!Jiql(d)}E1^;{Cw*~ok`TP#> z<3+jc4}xC`err(vPG9~$@EgJB{PN~YAm$$e|4Q&VKNTNiw#k=21ODaUFY@^4-%iD6 z%zq62TJWz9@>|~$YkPCvmBa2G!H`=CU=o;r{lH(5h98a{(lO_}TMf)%VE#IYG4t+( zuafZ{1oppxeaXYFMf`s(4${B-!2e3|`1r%*uh(nND$ZfJ=iKWn1A89sQ@~$UGCrP< zTvqW|SLy;koadZy)#on+e=Ycb9OOIq z3V{7u3;tu^U+(#VxW_KF3E)`n2LFp?9cQV&@jWMct1;)~*^K zUxKx!NLvz5v} z)ds&>i`Bf!i(A%bE62ynDR0(!%&T>JjG1c-fq5Jlh-eJ*4jA%QgZDo0Dm)(gjBC<0Lgq6kD0h$0Y0Ac{Z~ zfhYn|1fmE;5r`rXMIeem6oDuLQ3Rq0L=lK05Je!0Koo%}0#O8_2t*NxA`nF&ia->B zC<0Lgq6kD0h$0Y0Ac{Z~fhYn|1fmE;5r`rXMIeem6oDuLQ3Rq0L=lK05Je!0Koo%} z0#O8_2t*NxA`nF&ia->BC<0Lgq6kD0h$0Y0Ac{Z~fhYn|1fmE;5r`rXMIeem6oDuL zQ3Rq0L=lK05Je!0Koo%}0#O8_2t*NxA`nF&ia->BC<0Lgq6kD0h$0Y0Ac{Z~fhYn| z1fmE;5r`rXMIeem6oDuLQ3Rq0L=lK05Je!0Koo%}0#O8_2t*NxA`nF&ia->BC<0Lg zq6kD0h$0Y0Ac{Z~fhYn|1fmE;5r`rXMIeem6oDuLQ3Rq0L=lK05Je!0Koo%}0#O8_ z2t*NxA`nF&ia->BC<0Lgq6kD0h$0Y0Ac{Z~fhYn|1fmE;5r`rXMIeem6oDuLQ3Rq0 zL=lK05Je!0Koo%}0#O8_2t*NxA`nF&ia->BC<0Lgq6kD0h$0Y0Ac{Z~fhYn|1fmE; z5r`rXMIeem6oDuLQ3Rq0L=lK05Je!0Koo%}0#O8_2t*NxA`nF&ia->BC<0Lgq6kD0 zh$0Y0Ac{Z~fhYn|1fmE;5r`rXMIeem6oDuLQ3PJC2;@OgJ#H8Gnrpf&+p+g8lk3*C9nuVK`6`azF7kE5RN97ZGyoIcbGo%h8otH??mcJfQk zLZ~Lyf18zGTFN>=bg~Q%w}!;8cFYQ>c_)j&9}8 zsbJlT-$&ToiZ8HnXM7Q&kUy{LduZ)>$SPnr$Pt}QRsr23PulaW0_uIywDT7Bd;L#5M`c%`hxh>adgFvCDyd4L@IL2%8+`_ zHN-p32%zn(fOf~Z4dj^fMoFP};psX*10?QT1#Z6cCDaR?W1ts0pMm-!=OR#woog|~ zCC)zpQ|cT7z0CO_Fy+owcvd*?0=?3?8=9+}f5Nlc`6`|@&ZT(PI?ce;Ij_TWiqnm8 zt#{fHiK$KtG*5Hx#B;jyInZY~{{s3<=QwQ5a-P6*w$lkp!g&jx4bJ_*%yGVj=UgX& zRG;T`;d!3(HTW~%c?r)2&KXE8bp9In^PT@6$VJW$U=}-t@bCiXdT^IG9EV2d$B0SN zISmh&IuAg$$#UNd7mHTJzJyldh*NaMDUi5Qn;YS2;V)E(z90fE4$L5d|~ z`6!gYC1v|4@LK4zoCZ8>=ew*rKSG#e&Usi*^PKlGFP&EOB5t|o({x+xQi!!a57J;P z)?RQ7=+d{K6}z&Cb*uDG2wPK4|MN=EAYQSx!YL^I|KL#UDw%5~rC%dwgET5iFQk)K zS8=k`ls1ratqfCrd?r{=WAo}?;`%Oopp@Vj#&K1 zzvc+b?1=V>&j3G_;rXT`_N#y_!QJ))dhw#;ZmejrmYf0Q0U{5; z(hE-2PP7-}UVyuC2@vy883v&8#@*I;oGMzq0{3O)UjaVV9wL8#f6Dr7+Q|CPt9M{PkRNOLvGUWkgIUu!5g>5A3xb_~%M zoRI{&LB%IZVQEetG=9OE!+to&E&ETwCEb1)6=swDVN}GE*OURe&7ptuDYea+PpPVE zxY@5_w%~p+tGj82rE7qC9qvBd zwKJ)?zQ%jSbun^W_1coJIz#vN$iPGT(w=}!pbgV!3TW+rD=1sHEZ`)(3N+Zn?6 z;I+}ISxp$V-H-NtB#O4@3FCv;W~b(6qwU>jzl%hB3Al9Jo-(t=`e8XpuSuc{Qyq@N zeD-FlGmpKolAi>n(rH3}=Th>-8H%-{`KD4-u0%yB>rr_Op}cf6DrKlx$)7<@zVn~c zTC8S~ECjXeK~$#}V6+OInIwD&?Y|;>G354g4p2T0*_%vd zx2e3@R31d-`!&FP#893!l`o@m7@F-dR4za|SnX42?O*M<%_HD~AK|eub({4KyNr`< z?!wd|>zlUBOw?1>w`@sIVGR!4W{uiYcA|mgnt{}KuPr;+#`+fPCD7~>G;!r^R_wiY z1GBmvkzh2eh6L8Gx7hES(qjF!0wQvA)*)nXv8Qu)#Pq5>wA320Wg)y6;aY;bjQKS6 z&6pbZ+I58Wfw%>C-6x@mi8l2C4BAn7CONFwe0O6uXzHX*xT(| znstu9)-Fc`E??SH>;RYdYv?Dh`$DsJe5r=NBnQL zXOp%A?bitn)^4_&NV^^FTS;S%@3CvB_CB=Vio0wGfXdsfTU2uV6-a-9yRH#VEFtTV zwO8fJ;~@VdSr>yf7p$poM2Gj;wVabrgYhJ8y9>-V=;u|zGi<|yaQH_1r*-Ph%09t4 zdj4%7NgvRq^ADjhosK%k^X5?LjrM#hb&eNU4L6{Do&7b4*MnrA_$0)q5p%q#6> z!koDr%ms?M0uC&IfPJC~uYYr>V}ZStF!aFg0hcLZEo}p1nwm1#0Jt`_&%%38qpa35 z&j+(kF~3&ZA}^Eni4nlg2dvIsMikXO59UFvfc8&OA>W$*ARe)w$W;6=2*vLQH1?Au zCFaq_Pu7Tu8Aplxy!59W!pi06ATfn5$3CAlE-wLBT%M64yPJfE&;W}mTt_ub^9KWWhJv#OohnEh1D(A zBcinjUksW?>B?K{SpNaoqqvv!fqfAOg;-T%em8>^9M|7`hv9mvKZ3 z2dvm3IeP5|>2}cv&2A#ls^C%dqW>bLOo_hF z6D?ax(Flc$?P5%&VIOj>Azegqy6V7=H74z$C zGzgRD9>r{s1<0B{gpN5gg~_v%V$M8YNyaHTRhaCkVop_RXM7xzc25!e5Q=M<^zLVvfE{E-2~PK+=VxR zB8&6wXx)mt?w=sQ<*hJv%b;bisp3}lRxs|x4VS+MHcv3>>jrD`Zc=15-w5Ke^f_;#{UDU{g%C~l|lG3sCx(PbwYx3pb*wBmQ%rpL4H4OdnZ_OZnBo|Ww@4b zLaE3tSxBApu-n>8E~1Opj2k%$GxM*7^FOb^rw{Rht@<4YQsC6E{=cF3S=>`ThitQF z&Rhl**1IV$W9r*8m+X{gLE#R|o>jIH`0oJw4ctxL#Lq5eHvAmzpW?2I!9Q#y64!*x zkMex1m$)r!eO?8zGu{c`>>BavbMQ*V=3AauHR2Tyo0s9~oe!#g zVty@xu?PcV=g;A|a8LRuxXfDnX;Y!=lE?WRk6QHm5|O?K(k1T$31YF2pnN}!y%+Z) z;+6m>4+hCz5|0u232;A-Ti|@hJB{030jMnARz4@r57C5b`1dF+@H9=wehsoDL_TL| z4JKEefKC&{HxYoWd`|5}9`F0)@nuGMToYP6o(=Jm7eNx<)2M9mcr(fSvf**p`Es@C z_8s8Gz68?0!}o8pGv7g@2HQ>r?nMN@0I)pR_t=B+YY7+FLO|x@wtoqT?lU*cD{5Nw z9{w?!ehWx&YY|!3fF%zwxLL-?Tm~H%;zo~oZny-S{3B@CCuUB8_@99U@z`IYTn*Ia zxEB$395{Kb0T{=O7?A_uZo@6`x1(||Zu_g|++gMNB=ie3+r&aYEwq9J3$w^7tAkQL zz~GrEM&{$t@ekB<9vHf#Je6%nvsLswNzXu)PqMk4MdiYwm9xr(hi=HR25Ot9BI*{HB z65p&Ae^L`(2f`bHSa}+RWna|PE>MfUgvME@{u%CN-$tV!3a%pOJ7|<)@haj1mI9UU zY4%%DVMOc?prYR^mht87G}`>(p@^R(=Rsx`Z*GVG435nQ(#?9_o)&u?#FgM)hMQMD z->CWe`^RY5C*C;~F&O~~v6a{N*MnvA!E2UN8UsLH->(JeYATsU4M&OKgB_dd#ADRa zhr0*2yx^1R2n>h@r)C2cafbB+aU*W4mecHgfZ2TTn&;FUAdHi35D>2C)~u(|`V?V& z@LJ&1#5m{v2<$_I;6npH(IoJlV1O&|iC8_FZwBiK?v?Y<*hIi`0Ia_QJhlxk6Y~!6 zkK-;QwTQq+(RwfLPX2=P1gO_e2j^lmJ`L*AxQklR7(?azY+Q{7zY(~&7x$u3KfA?x z6mkzt1NV9m`0-{g?xLH}xB`{euyHFI`%xLhZ8t!MnQb?t!jrb$hYD8+dj~2!^4fb) z;TwsaLWR@GzRO@9M@1Ii#r%r&DYQ6qzDoy=fN&>F{1MH3793IWWmH7P7%F1sm#Bye z`y_%SE(P~EHeg^t&Alw6A-%Nkoz!Ayys7QP|Q4z;?qe8>@a)p|Bj>f;+ z7zoSG+lqr&zWh8l9Ta$DJqFYwlz)l5an#Rqj{147K>a-Ds9)wB^+TNF$PaOj`ti+C zKfV?ALV>eoS_g`v{5%#hH_jZfpTy&cEkD26T$OBFetv^-U~KvMO}@Rjw*35N%g=B2 zVYpdf%g=AN`uVMxUt;Z;e2M)6WJ|149;xh#_!)G7A+t}cVwd>%I!N-sj%?YL?xmo` z_?7-41n=Fr%eQKjL#Uui+`K)69mL~9fbfS%Y)D@N{|VMAKkPtPaonb;`zv@;ET1B* zDt?$IRXbDuaTVg9 z*I=!yPJ-yxfxDvkvf|~%>i~|I2Acd)A-~aXs;;!F;w|;JPql$4uT6}`h)1fNJH#0m;Pxh z_z(x54G}-<%tvPsS19%zx)h3QXTtYQ_Q_Sn>_AULtk>->rt5XZHYqr=1$}hjTs;V$ z4sC8~nmJ9JCX&VnO`P6nUoq8$bHUVg)rkh1_GV<#g8`kXnMxO>g4|hQeZbE}dG_TE z`4S{G1T>SVwu@b9HWaem5Y*fdUobVOcusl;(D%8;$g6q509e*}P+1&MIX_JbOLwt! zaADdo;p>cO@uCCei_-g1+*{1wEf*K-?4r9DNSt*laxj)KG016D-Syh2pW7_ZKzVY2zkovdnmgPmZDj9g=x+#Z)uoO(E*R@RTsx*PoLd2rP8jz z#JWOHENmPtGVL*~TdUDuoh;JVRRIqrcFi)|+ltgA#`LR1cC6M>Q?n5>51+p4{3X2p@JlH4@)ozpe@n6vMtAivv<;gVrDdq+dNBtKl_4MGL0B#ZJrl zYqZU84Ym9g_BsRI9_Ub zHH%=rKTLFl!&Kl8Q(^j|T!hJ9Tnq*NR4)$pb6vF>tP(`QDh+aifh_ZSrMr$9$Qe~0 zLdOzpwvWo7K8dIr=Bji$);iHv9UK;{$-&6dT5XVkmDn@xr@8eIjvy{}+GXF;oR>p`1wpKGtY%Dpl^M;sr9Eq69F z*|u9ayRR&LA@767oPAmkW z>Z9($ggdtpgk5eqdR7%*;TFEO+O3IShI-O19Tve-bQlVHfRhUG)eK#NfvR&$#L->^ z>?`i__y-xVfAyY}U7)ogdkPIt~u z*G{?@q6c7I=(8Gkx^sn(p&?`z%Z@uk#)L7AckWqQ0aFV9`XM(l6yx=(;G zSQw9e6({vPw=(vZcOe5YxOi5hd5e??AFTJe1t^Qxqq(#JubUsQY}968 zyf}8S(aql}Dk?=)Z`@X9za?hHp?K`Q_-ikC)(BQf>|ZfaO5+c>=Ru$}{wT)TZggjX zkG}%Z-61%hp!bC-@uD<-T;m^rR88y{3$ggS0}v)` z2Gy-~mr)^l1nKE?9j#h-wh%wY?$Iu^Blx>e{TN11k*1=wA8_Z#m&Wa#GNmD%2VxvX zUDVxbJ}@miDN#+G%_-L&O1LvPF@rJ!e2?3SDO}CuX$Ap7vWMI&RIXfsh*ZpRuh`P) zqT|)^b#6(mTY=T3d?n+{cQ1lY2UAd~E$)UEe8%hO~EVQ6^}OKziEfg&$laVz)PX&Zx1tywRNpzYChhbwz_H zNcKv%WC^qAVoU_Y@#1*pPG;fs55PeTs~!KeyFPwDS?kGicaa{y%B_>Ia~3g9HHd0S zH>xVCC0%X}C;4pwcQs&xgk1p&;<5cH*Ns)dH62z@(FSp^Vy;VQGM6rPA&3#D#ltu8 ziGi(lFICxaDcvtwN%EVRgBL0?7Q3BH4;N9V6MAikce?IW5V$P#`C6ZKD=-spy_GA{ zCGjSP<&uzytxyqL;ptZEjahf9C)U1!+7n89f+}h-?9G@W-FlWaGqxX3^QzRfmtp0U zT@#a1uMjvKyVVVD!;(e}4c2<}Z!yGT@qUHiPHD$6ziQnjDjZ9=z%%RZpymUw}H#mejyX83$= zck|*EZrL1n-VUsKmrM6KNeYpXVPy@6`5|xmDM+7&rk6FxIT^N|8y0J-iwri?dP2Ru zJ+a=#o~8Kj;>@ROZ^QXTc7Cd=f44hRBJ^RT8wZBFANSOP21&Hi_y)4CavPs@ORM8M z3qI;5B~YbGE+HG6)9p?r3|WL@s`xnNIF;qO?v&Wy-XR+g1{{0$#lXd4{}M~N^^|B( zg!tof2*lZ%V}|Kdw-cus@p6iqaZ?Vs)$83UkGs{}|B^hkxdlBKh4pU9X>W1nd@R`s z%gFDaotB_84GVwfmK-;r)3oudd-=26uR9=6h*d29qG5m9bqi|p5Q5mhh~GFYwsdX#y-jK_ZUM>fuo61)=e;|RQyEPoR^dcVxYcszFKKDT0;2)yhI z$Q+0bL*P=1`T`a4j|uj_GO=$0mSYrx{dFexjlgp91hDo)*qdb)=fQbCnS1c=a=YvZ z?4cZ-u#J^0)&V!9TQR#Z7!~W~9A{%?j=xRE0Ye;*&3P^!+mDJM&9xUv~-3!FUm4ZK=iGM5?{!wjz80qyFcp15x zxrJ8? zTK-x!jQxvC;E-GTA`e3M6)?3f$A)0zy{!WKzz%6+V@aS-NgTm&p%T zYlgfMJNUtdOLzsoP+0gv5&KtH7WN9RYz4`9?+39E+Q_+wM68KMKLDHZVyYHpj+teU#NM4OoZZ*1* zBoK~v_I7R?97-LqI#c@x_U>9WG_Yq!|9*?)UHkj-2lfZI52V1@w!eS-fqi?o4K`V+ zfj#}(4sPGGXWRZ8RO7(j?Kk&tOYKpu{#yp|_rXK>U)Tmy`?saiHE+Y;we|1avF%3w z(T-@+!uzdV{i$uLv2Xvtu7SPV_}79r?%NCG(2a&g5o^=-y*u{Z(!Lj@8dk}@e?bd<8{R1iVZeT}hx3y>A-dzcK4DCHI zuxoGsjs*X|yus~z2W|{_yQBXABD6gNFxy?_5c<*@G~U1JD6-nO7)u)7Vh z+&QqzVn-#m2L^8MM{CCpjHl|j>HqHjfnB?yZuh12>z>pjm+4sexPitzCN#4es7Huy+Uk??Yeb9-W!eSBUPh zI+>$Zr;P9F?WyhQs&y_Jc#0j|K;L)l-+pi#|3E*ZpDEv%b>PN*`}_U&wmm89hC>Ka zhRA_b|6o{3NPICkLmWUqe*y|qs^Qa+E9=Gs=kHNHztsnkqY? zW2-PDl}c(jtIEkNSXY{0vJa^u)6)}WE53D3o?QXv32o#Tvw<$m&;tck83Frr&yYA% zPp#PGP^nrijRxB=WBz)pm`uID1kcBzN4VgCJGo)NJg@ze+)16CTBIR%7H3lt_=H9(T=3RF|+#! z6-Wsb?l!!UE2Gczwlq_kEY2xFG~3)>O^g|ymO(JAQ&AZqCi-}6l z5#-TcRXJNp!vY3|65h{M`j~g`?cHjf$h%{s#Zs&^ny4Wfj-o@BHKYxOhp0PpU>ajlL>ow7xt!@IN6nVg zYRT$jli-#_t~87y=DwViL7&CL;O#U9xqtzm(SkDi#>E1}i#9Z1+gzztb=Po;LpWSc zoi$8oDv)w)OE^S@+?)m*wZ;_>*H>cS%m^yZhh6$ev<#*g@0l8ohJo)&Wn#V5Sb@g7 zEbB6}U@%L_EP4o2j=56#V&2-5`IVSacpQ6Gg3y~@AClFHohHt~HcSBq1?yEPPLb2m zitQp-aggAGsY|} zutcpby@G6yr3l+vnZ#6@NuutWVYCgKq32lb1z4en%ND#Ud@`EK7oC2}7t@gBx&ca> z6{FaZ00+RT1iKsLvK|a07gAKZ)d@R-3F%Zktr8=p(QE?i|KU>kYyxTlBQweh6X{f` z(iemEGh?n2#r&B>1u7$(IDPl{)@{Y!{=&A&zJXK4Z9``UGN(>$z5ev(Q(Jqt=6Ykp z>2%E8u8}C@hZ2AZ=(psSf!IXxbP*;j1~V{mCN^B0NZ5SnXkj9gHI*geaW$H+q>~fq zRV6;6VBEk8V`vwE;XM#y(UaL+4iW@dsX{?kSvi3$|M;$hTeXwWf(|cK~eclm$a{)hvuX%%#>Q6~R$UCG%D_k7?leKC= z+|DB&KMjo1cUcR`w|sizYV~D&;iiuj_v_lt`6EwX|X4_iZu7p)=1Q@LnQ($$MGg%ib%5uXwKteARo6@HOvsfvD;Pudqw}WUb-VR zbx`kl0vQhKC%hkfp(@z`9yk{y(;Bc)YjSrX$Jy0z*k$QMANmf2EB8twxP@=iw^ifY z?J2F-?(_~zu|9oPwK~YigSUpN_&5tsJvJ(_bVCWoHcKqOat+2Vme@9hFS}g{EukI^ z!YybXp|K?7x-^TCO>lfd3|1Mf1wZJ5U7Q1j%sUs-P zdg&LbaeE2|Y|)a&SzkLu_c0*4+PP+eF22;sH4x~-Oaw_M}sUzGir1=`p7iA&u3<| zL+tq%r0SJmj+I@gzpOS)>#p^Hn|f*tfbP+~PU9*WOvUQ${N26}dG_525*1nLG?^B0 z3>K{j^-k**t4Xged$*gudj8L)oCu>M%OIRnYUMSXruDKeOJ8dR)#iivMb=0=q8IUI ztFtV(NHIpf)=`u=3z#SR#A($Ck!)NlBDu8FNdaBkIE7$?*40iVKa)ssn9@y@0zQ6N z3R#Ro7B6A{Oxd*r&Bp5{87$0k(}F06Z6$P!Ua-iSRsA(BvkU2{kn>X(;1%8y{6ISr!G+U8d^m=ycJhF1nU!wV6}1c?(CxQ&GB+ zwV-xWF_Biy-tD>>kxq6{8Qrty3P`LjAUd`s3~4bHncS!-Dit-eBKmBhOlq_!U9PBB z?BmnDO5;8PH0;cSFa%mZ>^;iRghii*Z_oz9M^mQT&AJXA9wVd=~!mU-pr4MrnHDknwNZyRn3uqO{kQP#z zSH$VZkmA^5^3sRrRln9adhEbcfX(=gizUz8E%6&Mzu%8M8$s~T$iEPU? z;W9e|Oz`)Z_y{V+OX0735mWo`ygz!bB^N_42AUG3M^A(4Ha&AJNnaO|J5g$2L8|on zjcD-3Ya!zh(ja90V0JQ4^CBrvx2@n1@^esEM8t?0WWPg2i~?7>F{3B%QITJYUOb|U zWk*MJWV_yegNjh&LSFQ`%_`Ci&c|X$cdStnVu9@*7}Kv{7j;9U zZn+WFiBVR1=?^@#N0x{&9p9%SW(|us8+7AB-P)rfX2Sm*(SM7;12^(rnW>Mp{#1Vs zCN(Sawfg3>s)1j#eyh8IM@CP2^yaK}6{<|PwdrLmI54vxqrOe7R#!fU4;S3Zcd70+ zs*bP}^j_aCx#@^_C6eC=;Pt@W`**3IUNZUnfG^|XHM}hEbK2a)@^1uiKB!ADb8mC< zVDEUTRx6sE1f+&vhmh%K5%R2v-ZRAaBOJsev|Ic=gwC~==|2N@cd-y(0(N&S5Wfb@ z3Azd)@jD2e<1Fzfz|QBG_;X}cb5q9hrnbF&J*z!;9H=b zerPeT-ny@44-lpSu;PB7O@Au+zx)(VC(Myb~j`({aRpmr4MmGu)BAI_y%Bi5fkx#;4t{N z)s}Y~u)9%%>1Hzk|BZ8ROwO0~9yxw=?}7NhfO6FJ!T;}P9)pPlXl`Z(0@7nFX*?Xw-o`(JRO~Tqnw>=T7??cshn}VBo^Pf=6+vbU}dAB;h zczep0|3zC+^HyfI_v)<=Y@pRQ8)ZkhzU6ODTICC2R(u2=`xLyeVE2)0Dq)ep6c0!KjeFZz&zbHqzALhcR9LSU5b}oR9{zS)@*qN%hw9`xfqpEpGy|sb@0bk{$WuhV0}dc$9zGfT zIhy!c)fk}U7FlK!wCC)iu>D61RCh_eG}=VT|Wj7gj7Rd zLxpMldw5p9lSg4&Tp>1%@JE(LAkTM>g%odDaF2WC*NAX5(=vC$wgn;_$x!B&nedFH uLh2Dr&SKE~ACL1!n(IWFGlYDi*^u0;W>CE@+PPr9k&%%4y~~8q)%zdQiT* 0) { + if (snake.puddle_sprite >= 0) { const PuddleSprite* sprite = &sprite_data.puddle[snake.puddle_sprite]; draw_sprite( snake.puddle_center.x - PUDDLE_WIDTH / 2, @@ -528,8 +538,10 @@ void draw_game_puddles() { void draw_frame() { clear_frame(226); - draw_game_puddles(); - draw_game_world(); + if (snake.have_game) { + draw_game_puddles(); + draw_game_world(); + } draw_game_text(); } @@ -562,6 +574,11 @@ int handle_incoming_keycode_after_halt(uint8_t keycode) { } else if (keycode == (KEYCODE_SPACE | 0x80)) { snake.is_space_pressed = false; } + if (keycode == KEYCODE_SHIFT) { + snake.is_shift_pressed = true; + } else if (keycode == (KEYCODE_SHIFT | 0x80)) { + snake.is_shift_pressed = false; + } if (keycode == KEYCODE_Q && snake.game_screen != game_screen_gaming) { return 1; } @@ -611,7 +628,13 @@ void handle_time_difference(uint32_t time_diff) { return; snake.waiting_time += time_diff; uint32_t target_required_time; - if (snake.is_time_sped_up) { + if (snake.animation_speed_boost == 1) { + if (snake.waiting_reason == waiting_reason_step) { + target_required_time = WALKING_ANIM_TIME_FAST; + } else { + target_required_time = HATCHING_ANIM_TIME_FAST; + } + } else if (snake.animation_speed_boost == 0) { if (snake.waiting_reason == waiting_reason_step) { target_required_time = WALKING_ANIM_TIME_SLOW; } else { @@ -619,9 +642,9 @@ void handle_time_difference(uint32_t time_diff) { } } else { if (snake.waiting_reason == waiting_reason_step) { - target_required_time = WALKING_ANIM_TIME_FAST; + target_required_time = WALKING_ANIM_TIME_VERY_SLOW; } else { - target_required_time = HATCHING_ANIM_TIME_FAST; + target_required_time = HATCHING_ANIM_TIME_VERY_SLOW; } } if (snake.waiting_time > target_required_time) { @@ -633,6 +656,7 @@ void handle_time_difference(uint32_t time_diff) { /* Processing collisions */ if (tile_ahead == tile_apple) { snake.ghost_apples[tile_pos_ahead.x][tile_pos_ahead.y] = 1; + snake.score += 5; } else if (18 <= tile_ahead && tile_ahead <= 49) { snake.waiting_reason = waiting_reason_postmortum; snake.puddle_center = get_puddle_center_for_contact( @@ -652,7 +676,7 @@ void handle_time_difference(uint32_t time_diff) { ivec2 old_head_pos = snake.snake_head; if (tile_ahead == tile_empty || tile_ahead == tile_apple) { set_tile(tile_pos_ahead, - construct_head_snake_tile(snake.new_snake_direction)); + construct_straight_snake_tile(snake.new_snake_direction)); snake.snake_head = tile_pos_ahead; } /* Step 2 */ @@ -661,7 +685,7 @@ void handle_time_difference(uint32_t time_diff) { snake.cur_snake_direction = snake.new_snake_direction; /* Steps 3... */ - if (is_tail_pupa(get_tile(snake.snake_tail))) { + if (is_tile_pupa(get_tile(snake.snake_tail))) { /* Step 3a */ snake_direction_t pupa_dir = get_zero_pupa_destination(get_tile(snake.snake_tail)); ivec2 penultimate_pos = world_walk_direction(snake.snake_tail, pupa_dir); @@ -675,20 +699,27 @@ void handle_time_difference(uint32_t time_diff) { // check, this is important. This is the only place where we move pupa to a new pos // we check for ghost apples. Clear ghost apples and enter // p1-waiting state (instead of remaining in step awaiting state) + if (snake.snake_tail.x == snake.snake_head.x && + snake.snake_tail.y == snake.snake_head.y + ) { + snake.waiting_reason = waiting_reason_postmortum; + return; + } if (snake.ghost_apples[penultimate_pos.x][penultimate_pos.y]) { snake.ghost_apples[penultimate_pos.x][penultimate_pos.y] = 0; - syscall(SYS_set_beep, 5000); + syscall(SYS_set_beep, WEIRD_SOUND); snake.waiting_reason = waiting_reason_p1; /* Nothing changed on screen because we need to wait even * for the first stage of hatching. * We could go to p1 immediately, though */ } + } else { snake_direction_t tail_dir = get_snake_destination(get_tile(snake.snake_tail)); set_tile(snake.snake_tail, construct_zero_pupa(tail_dir)); - syscall(SYS_set_beep, 3000); + syscall(SYS_set_beep, WEIRD_SOUND); snake.waiting_reason = waiting_reason_m1; } @@ -707,11 +738,11 @@ void handle_time_difference(uint32_t time_diff) { } else if (snake.waiting_reason == waiting_reason_cross) { /* Finished pupa hatching */ snake_direction_t tail_dir = get_zero_pupa_destination(get_tile(snake.snake_tail)); - set_tile(snake.snake_tail, construct_zero_pupa(tail_dir)); + set_tile(snake.snake_tail, construct_straight_snake_tile(tail_dir)); syscall(SYS_set_beep, 0); snake.waiting_reason = waiting_reason_step; } else if (snake.waiting_reason == waiting_reason_m1) { - snake.waiting_reason = waiting_reason_cross; + snake.waiting_reason = waiting_reason_zero_pupa; } else if (snake.waiting_reason == waiting_reason_zero_pupa) { /* Finished pupa regrowing */ syscall(SYS_set_beep, 0); @@ -722,7 +753,7 @@ void handle_time_difference(uint32_t time_diff) { void after_awake_action(uint32_t time_diff) { handle_time_difference(time_diff); - snake.is_time_sped_up = false; + snake.animation_speed_boost = 0; draw_frame(); syscall(SYS_swap_frame, (uintptr_t)frame); } @@ -741,7 +772,9 @@ int main(void) { } /* As an additional benefit, we can check if is_space_pressed here */ if (snake.is_space_pressed) { - snake.is_time_sped_up = true; + snake.animation_speed_boost = 1; + } else if (snake.is_shift_pressed) { + snake.animation_speed_boost = -1; } /* snake.is_time_sped_up will be relevant when checking animation end */