From 67f1c6f32c93c6dc5142270ce1d696bc51cf9c23 Mon Sep 17 00:00:00 2001 From: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com> Date: Mon, 2 Nov 2020 01:14:10 +0100 Subject: [PATCH] See desc for more. - Delete file, if download failed. This avoids having a useless file on the SD Card, when the download is not finished. - Add a spritesheet download icon on Store Selection. --- assets/gfx/sprites.t3s | 1 + assets/gfx/sprites/sheet.png | Bin 0 -> 360 bytes screenshots/StoreSelection.png | Bin 20180 -> 29279 bytes source/overlays/storeSelect.cpp | 93 ++++++++++++++++++++++++++------ source/utils/download.cpp | 12 +++-- 5 files changed, 88 insertions(+), 18 deletions(-) create mode 100644 assets/gfx/sprites/sheet.png diff --git a/assets/gfx/sprites.t3s b/assets/gfx/sprites.t3s index 145e747..3e612b3 100644 --- a/assets/gfx/sprites.t3s +++ b/assets/gfx/sprites.t3s @@ -10,6 +10,7 @@ sprites/noIcon.png sprites/qr_code.png sprites/search.png sprites/settings.png +sprites/sheet.png sprites/sort.png sprites/sort_checked.png sprites/sort_unchecked.png diff --git a/assets/gfx/sprites/sheet.png b/assets/gfx/sprites/sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1167bfe4038ba8559621232eabd2ed8e5eebc681 GIT binary patch literal 360 zcmV-u0hj)XP)u8^CRb za4r_O0G5F=Fb>QH=V4$7c*=^_72Y#o6*vN>fH|NJOaePVU+A3!Bh3PLzzuL3oB^sp z1=tJ106AbDIQbSq&8ZL3iXPPgwVbiOikerK)Jt{YOJqL~?$v^N_{$CKs)OpAnopu6 zqreN$&*yDqp$;^FZQvkDlF|=`x~{&qaBrwpb)|*DAK(LojwKJ8`E&390000*sQ5vKhrKP1oLb^-3yHi3sq>=6}QR(hZLApz%OS-$x^8cJ?jQ70H z8RI=4&Ib(O-uK>X&o$>Yf7jf1n4-J{DiR?Q1VN}$lA<3V2qp%6tsuaH?>u`d(E@)V zI!J0dK@g_%zb}|2Gcq>_dId>|3aPkd>}PuNCCoo{jN+TIOpcl881t#0w+*(8G)sL#QA%f&(|I~>HHlGsa&=fS7*N{-N$CHc3pH0=H~x&C9maY z+Ss_=9~B2tmA4hdWcx4U&K@3S>4uQI!PWk?Dnmp5B27G@qGTSGMJ9K1c$EbFBQiLSu%o`fg)=VMLBZkBWwGyhmp{T%WjzG3H* zM@h!FY^m(>%M(NR5Ha*#TH0#ftJwI3kCHM$lD0;gvLbn8-_xk~W>lp7#Dp7uHmB@~ z?;$-2-teQ>#d{PaMReB&WWY>y&Y4gtv`*l; za(Gm^F()h}dFq%H-?z!f%N%Q-UKTp2iv&*uBcj%X2`Ic{Hr~S(y5lq*G%nW2vo<9rJQMxOJ>jq|wQ1j-Kh- zTAp{e5L6`!t0#>V(%s*W>FMFo)Z}^FpDh~~A5R4fac7j(UCO6)=f7f%OpZ-D+&w(p zgF_OL1S`^(*1IenAJ=tpc?k<0yS-5*TknsHtIy z_3K_ec5BICh#lV9U5{1Ni;|2>hJ$KcosHmRLo*mEoAY11a1i-*YD%8O@@1YsZ-IFG7k2>72Au9fk<_%*>U1QP@bARuA1yTv>e#Exp39>?$+vv>rNK|S1 zA~I8)g5n9z=HJXIrmxvW2rMnj$qv++QUm(dmD!w9<%W?<^D`ceY4#N%=p3Iy{+V66 z;aixM_lIW_by4!^npx|5xFUXlwQJ+T`_KRsg@`aC;P$2rOYV? zv4I$l!L3q#%e%0moZ>eMsU|hkwm%c3#BruwE>Pu+QSsYv8VGiM;3)8StSR`LN2zIsg}%~Qfb;6@cEF-6o(^- z3a8iD8Qn&=-l(z`8|?*!EGOrml^VCS9SuLYF>>qi>91%<73^$fg}(7=sl^5F_39@s zLpIMUDMQOqcENi6WTxjjxb5~?m90Jr{`~F_QMx8r_1PnSY5Bpf-j9O3Og4tKr3<)F zh~TRE`jtoN!}!O}#Pm1*nI&Py5(?RTm-Tt$m9ud$kXy^tSDwk1MPj_+RF7LDOvvC) zLEhWD^-ou8bb{*#K|kIV^K z2CmK?|EaVrApx7X+?)Law~pS&`8v41l@#mXo9ov05*HU8$Wyh&+2x9umsDAI*1*zi zf2(G0`lF%G_+T@7Hud7DL7U}si1_Jl_aS1x-REgJFaJjG?lG`X+*?Gy9^CpI6N!$K z-KOWz`=P{z5HEgk${y$JPhy%l5o#J*l?NS_Uv_z~$Hzb6l187+5u7tT!9%aew|>u{ z(kBh2lajb%UH-<wsq-U|x1h|Krt_GF&#eX%hB+Rmxnpl)VkQg(4+@a}M z!56T-DlJA&^$li_AOjs)BC6A_G zU+}F3B=|Siuq!r9X4R`2mRx-4&9T)5k@w)Fz^5w8iD;jjb9!NNU z;$p9m=rs%XG9H_qm556&Eh$szA1W*Z{ozuJI~m49(|4UuV7w#lo?uBa=Y#O zOisay+(Lgh9Nd;WXF1q8IO~J6qV{%HyDXJYR6vJd<=hs73u84 zzS=AZ`PH!dtZ_eps(u?xtyDNrZ1vrtfkFwdatQnlic=n9$!FMq8ND&+`&4d%e*Gi2 zPXrU>_lm-n({L!mGTwpvPo6nE%Se32*N?#z2R3FaC!m5LX)bwR#0g&7eE1dv&&KES zR!TnU@A~Su+#e`VOj7S?2J7mmcUE{weg^{l&&{;mfh_A}!+zV+{1Po2)bja^ve%S1 zh9W@%z^O#wft)F*kZF*Mv z?c2ACAOy0WfCw8qd;1l6bnU%DQCK0Q5Te4;%3)(5R|wPf_YMx$FC9aQX$`BjPU7CWfEN<6GS4$jmO)(eeKf}|@qpkO|<*1R2r;b%sq6B8fgNf;dEL~6c(c&aaCz*+< z!?I_+W;2Rn(#-W&TLH4y2M_1w#YrP!?;fpPbOVM7?Q>a|y|1S}jZD4seKF0!{#* zdA@SovQL}_e{NwmIV;ik(Ter{mzAxrZugXNgk+=J#;4tQMjweK_S$_OuddO%KEDGZ zAeC-!p;XE~GgsR)LA57w6ZE~K!FsclX#IzWmfA~B7gRZwpRXamL9P#avu_239eeTv zL`WrGB;BwLqljB70UH88U(Xqr)8- zNS4(8x-@HKdcm^XdRagal(?SCTWWC+5y?}2ox{N|yL1~h0HEh;wx_{a#c7k>`Bcw`G*;M&F1?EBiP>(J{(Kw>5VT$E`Py3y-(fB zw7Col^i-7DrK>SEXEJt|C$+aQ`j-DyG_iMGd*R&xy>*2tDu&3SJ%em73Q>{6g__po z876)~ah@fQdj?P~q|6tfg^@OsziIwV2N{&M%K3bp?{+m7*IPvux9s)@O-me^0FEz4 z8x+wydg$Azr4H%JE21j>6VgOy}i9&c7KQ`LJNuSLL8Qp zmM(h2`{bY6t(tJ;-51g)BenYN_B~nh0=+!r5;9r{$SfckFU-<6z#-DB9Mc!bDoF*N z3f)S0@r=bdtn3^dcprTTK-UTfS+8&N@=6C(JeZd+m$YLHwv3o0RvbMWSK@J#k)-`w z!~f-j9rolJWXH71e|W{y$ui!_n19&lC4>ST%i0Vza6y6gl&Y zo0=Xq3yI!tsq^o&0;{X+0$lhA(B;2U*ZSZZDIXh*`QoRuq5&%zef>RerFYalQ4 zL-E%vQxGk^a%D`-`F^e7t>bc|UIV^UjBH#szwe@7Xvj6fSd3!VT&=hFP4VpVydD0# zkMkw&W%co7wi@OkB#f&Tf}`U;OX^r=SMv35gDGYkk1|=@8+WE~(p%xMv4cxKdU%!< z<#zs(BaOl~T*_!iYd?Gl`}$sQy~?=Nc+S2=d$3!k3pSbvoun{>2u2m_5-Obrxi39Rm=Mt*IwJUy+N zn3!N7%^t@_YRu2i&kG>ARNqf5cAcE4hJi9|Mk2K>FF!d=htLZ$d+p8EKb{T97UIP)+7Z;HgdZ~ruG+)=y z?nz@al`~KuQ?m)}OGXb47`)Sp*?#%_=J|2*nW6$u&~v7DJJ!ENxz$%oY{06dx1H9 z;rDMenk?pC;txtc>=sGSXZvMbY9NHVdb8MX-*%NB}{He%q zZBUTx=Ye=8%2!rcf#3<$||J+>t3KM>Pahj>CNT z@Il)PO)RVFgQjNl_@a=O)~%8_6J#)rl>YWPMKnn?YIuX9{?m_;!N^Fof|8<(OCGPS zqrjx3nZ&{p@AvB|1&)``b@1{hug5_bA9re zcr?xnpQk+=S#oFvoK$+ZrIlT4_USY6rFB=7sKj3;?hoU<-rnBQ(qAAyoXcfP>*9CK zhqAs2aK-|%qrKv`CaiC0JG8a5JQkt^EBf?kYh6$WiG4NeoG;G{sgZ3N4i2_-+hf%RS!SSYKx~aob{Ff3qNmv+S*KHazE8f5fOI_V2~eaX}Sqbu+VEI{`Ed0q< zUtd!-1a-j8u=4j`!Xlq$erh@5?sv^LJj36bnzF7|&CgJ7Ih)>%ai|;+`*v={L6Fer zB`33VW3pCnv_9QNI0&Q!iL53}_gy5Y!@j<6;%D{ohYy0bmw4D_r#<$?#e2E6un?$O zx@{h__Vpn}UoiKRIXLPJ;!Wded={p99Ph?Qx@mW2R;;BEl9wPs_fYx4Nx9H+rRE|May6mYK?h{k~<)V%GlK z%nZle!f+>wn$kyiRh%b$thXsb&t>8&bPZ~)@0vF0TPuB#(z|zXy+!Y;sH)e?7vJGy z!$XRMKM+ROVWB@wnUC#^f)Q*Jo@u%WA|O7|@{!Fh?mFXn+?kpBo*(>fdkk@DJ2oMl z%U)ZT-6%&4L%+XY{$%Lkc?TMn(^E&`phi!@GrZC1;O8jZ^MQTq<|8b&Zj*mr?SH#& zzGADbow_1H=w4!EasG>qlzR1(T-?dYTKf0oeD%-|d4lY?OKhTEQuIX}pEcMFiU1cC zm2WC)kCV0$yjaZAE}@->S|LtCb#EStn@nmOc^u{>>|~ zYhfgl{SW6Q8bXjJdFQhIK=l%Kjp3RM4DW%%d zbHB3M^n|YVyRubud^EoJ`gmHMVFnAmir)-Ce^5x0L_p&Y7Yn_$*8g+U{h)&JcJ4j> zB2|Qa4aeotgJni6>HV)Q=YvIGhRZd%>+!BX*P}VMRige!OJnV$RAo*#KJk5Dwzkw* zH6P_q^9E*JtY;abTHPl5xUPw8BlY>z6|&7H78e;ABNb$&`7w_1;^$QoJb!jt?!}kD zLVn?AaoL>QHggSR=|8tcvmfH5XKHQ@PcKgJDt=%4VFf%#rlMvgy z`+^MWD2S!FytczP|Mp^5Dud63ihW9^t1$ z(J51WO^k*#7|6hIv&W?Epehpot=BTsRTvgZbF=5S?T(9DSqOViq{ad?JOg3*PK<12`O*`2Q?K8hI6alHb)Zsk zG^+jJswENsGWUkf`L9M1`2Cb4_uSATZjq3Yv0Pt^@p{be7QW2D;IjvBi;>WBL~!6t ztW{6r5t`JLcV6brpMS8QYw7&Lqx)O`kTp|1jJNP$V|0k&Ks#YxEF;)kSyjZ@o^vh| zzT(hSsd5AVJ;UdLHN2={R82j*lx#mJ6BL9gfm;%UzDI0YlOP{kTB8o3J})U~^(7tz zF{mxviyh7>=a8d}Lb~q_ zF@w=`g$xm>(+j>R)0()Y89u>xA~>U}ayBE+gyNZ+(xorLQ_w6A27XSOl%>T!O&};1 z`}3?P2O?lVd__C&<=r!9`6JRBvda-}c1zJ$nEIuf4a`SovT!cauQckV^6AZK- zc|p;2siHPhS64?AO@un?b$RMsrEOLE&aAUm<~3+3W<2+SkwUMWt0D{}A1yX3HRsXK z%w_^`#46D>3?$1LKJ_6?M72N5_VFhT9p zdDybNM$_Ek_K^)&iIyQ;h>QBV@cn)CsQ!k4Z|q&BC&ApY6{W~z&!5h&0Ys?6bRoB3 z@?@c|342oy5p~HfXVmW_U9r_{^HFB|uSK6k*O|%fN1t@JaP95NQL9@~w}YeY)Qj^Q z&v=AW7Jkny9d%^-d^I&sML$1D|Sf#iON><_}D zD;IY^W$w2|Zx3}pCSsy$?I)Si#Kb}*Y*t+nobaJ{5vOP9S7+$iYzu!ZfBJ{NebHXM z2s#c;{pGod3A6gC-!`Wj-rgiaClFMJT(Va7=PetDzxn+|wkXE_vn{;uIL@dzC-h7; zIjwDWAVMo*4US`d<>mQbw#|YyUY4Bi9?mMu{o!ni|~Kjy-ZbEs%*FThhQFxKMkAAElJX(-oB5 zbMoyvw>;3<6Gk@mxx!r@OgF^5b7h;Ds1_8K?3sOmiui&<$$X9f&%W}ZXm5`m4JINz zi7iWBhf(dKJW6y}>&V!+i4(U5CZX+L(q&XCDxAS2t!fS1ia{&~+EX*(xsy<2n@`D$ zS2G&aE!QLn=t$>n#MwHUs>Om@5=oMCRRji{dI>6X zjJ3TZUU+HGh_1YieuCtZufTTVP>n9&sAeGql9i6Hh9mu3hApqS5(dN4Gt4|h85rnd zNF3?_9W=UKc1u=5TvFD-su{BkrL&963wRG>G5bIJ%xxLKd+|xBI($Fq_c!`D6qz!P zSVThkvv6CQgYUwKpn=;|s+*=JY^3<`D05hpR7s(s**5M1Qw1!fqaZy!IXTkLsMqYn z6_Igq?yjVi`WZ$<=(88kBU8pq=c+@HnCX1uPZs%4b{~C&5Hrhobt2W2Co2|?G^8xy zp%tw)Z+Q5sq$J+(>ADf`>>BpAA9epaf_qgLaWhich4KC@j&5x2s#kPj{;>1&{hXB8 zNoWR+`~C`)N;vI46sqEc3VBNZ@BItZ96J+mk8 z{ljNE|2+$UHE2l#1R1FG zUkK*kXA6-OjrkIzbKULtRb~m6t~4KpfFdtSE+k9PMh*7qkZj~Nte|9TDEeBvQN`4h z1rn0Ue%^m|YK#y1g#u8=r_ZM9>a+D&NsipQ0Mc;O%D%;-qm8j-FG`6GfUTF!WNphv zaO3l7-D5qn4S_`yJJq|&w)GLRR6tk%_bwo{3d!6G?TUF}Jmu2V`JOx1_7UyHOFC*G zxDk)_(=a98mIw_I*mjrN}he( z7)eKLB!Xt}rlSkb{VIZCl+=C*zZH;db>kzYm&eFu+-|+P)dy1{$SlW-v>WTW&B4Xv zyQ%gy;sy5Sr@k?9@KD1i9#O*RqgBWJ(c90Gln9aCgTsL=*_pmNat-Lvu|xGN(f8I* z4@@aMA|ZO3s_)`*3A{FJEarHij>f;sdGdV{nPD%Wq1w9R6FqCA!;a+FVU&2-E4D^P z8hVduWw{M}b& zsvjP2){XUk5GN!9jA=_}c3r|7?BVBRJoI#{bQ0;M?cD7Qo}~pWfy1ky3?l9_jxAdk z1${JBO3f;}TrcszAia|hJR&F)U)bOImh(P16?x{w>--4vi|Jmtha(4iv0^V}?wily zc)$XUOCQ4uGWK^Q3m8l3DT&lZx&akF((?S`12T-4FA4gRMWj!qu$)3JFGu{~(o26R zu)lRRsQi6-bW;e5`ikO4oEV$yZAo#d=?B^kE_*GYbc#!gHm&hB)I7bo@OSr0oG(`$ z{H}LNIAwENTGEDhwAQNv6zY7mMm&!$+EbolI<@v%o~8G$Wo}-aIu{k1GC7^YLPM#x zK4Z&+&b!h~$ucBG6%+F`6l{3VO7*mu1@Y2-In^ImoktRO4Zsw-w>CF-L@5VkvmfBX zr#Z(>h6)kdX%w=%`If_Hsc9HXSF5)gXJ)zLBpuCu82?N9y*G7-$Nf@mC$kyzTOb9q z2w?XQPFm(Q=NV84xKJ;>&whPvfFSp`dfK$wwPQN)&W-QUVJ9dnwrcx+d~}!TxF9NIG0&~t zYu`NgEr0rXAA&Md8+eDeX4h%GsHD{T@z;L`*S3lE3qtBdRFnf;xCV;-#747 zVDHTci2ht17TlG+-<*5JuWJi+IB@(PUf5w-jjh1PEk=c6VpG#ImHDQ-G-Lxfta~>o z4Br9@3HgEeNUtY@g#gUWw=Up)H$ReUoBLHZG0Df;{V1RB^YfZ-HF5WCFL9ZLu{b$v z-wzIMI&6GTtq$)+S_wa(7+zkRdmvm5_-C!vp^RP<|*83vk~Vu69?8^w;bgyt&f z86Q$pcji3Iu#yMm+R}M^GJHUh{4D8~kop3$Fs#*Wa7KnYHXSL*nMu$W#V9ekGnkfw zVIY7>ILzxBH}}a_bhktbJm&YyK+|hDqN#u!SX7^#bT$qWM2D{hTJevh8_Htn5eFyP zcvXb<8&$ZOd@a5LC1#b=7vhY%qy)9&?>IE_hDw^BZQ0roo3n}sUyPaO!?I^KwLHjj?*ngFx^qi7xWcl-)s*WRzCZdWH& zPhL@3R~3$fdkLsNjRG=tI$>&Rl=txn@iE=!?w#ilg17R`L5k8e$50~QQH~&T_Jrf( zzuTHb>*)9eh{?sOgR#|>Nzh9DOXO^?<-yq4R4V=1wtQ`dS)3aMybSmB+JQD3Qjkr~ zC@q7}JO6I8v>ie^VfaCh+dqzJh?g%%D#~1S>lThII&y!}Xu?z8FkkEeDH1GKUtEZk z?V8PDdOnrzg914D8$qon;~ z8P>L+hvm`K^9-vm%zlUi&YSC9km>pOXJhlIrps(5qTeV{k|lUnxLG}CIf)_x zeL5@fl#CGb%bLTl)X)n40d^}>)zZ`*4MJNBqYp^g{FpRo(5ts^rp=4Pv&uM$(Ypfk z$?ts@jsOeg^j-Sr3vf?)#Kdi`wFHXBQS=WES90PpX&e_8gg*3%xPJdGI63j*UosyW zFRm=yY;IJRI&}p5(#54VRFr^Q<-Wya8#^0e8Ouo^tSpz;yw3fTU8O zSbwz_FE8b}lU3B0E$XMV^z=AykDh(p{WW;=ciGq|eyOx)$)E(9wd1eZ+%4x|qq0o^UDkSSS5@*O*q!mM zX%7Mi4$k+Qkoh~bK$lOB5cI}UL9^6$cNcINd$bqXmKGMh16>8ho=#K(sp5G>h2uam zein)aqH!nMk)2~IA+bWH)MEh8z({7 z7D3K!^S3UrA{iMkzI;g=J9YvswuW%Tpn7~_FzWY7)zqQh)^^h3LR$zj;T!q>0Vj=6 z`xIGPY`U_%oSA~HytXvph>)pKQf3r4ff$Ha*nqaHLfAetCsx+8re;qFZ3l_vNGNl049piQKq%mmc~w=osi}HLSHI?3ThW zqvYLr=E3WZRF5Y2yPUS;rS;TEqZ>f=R8v)IBF-M7NhwI8pi_X}&rHJR9yvY9t%wu& zY*k+Q;+DSLU5}JFx>$ttA=Db~xDcT3;wF$9{CAckL6!h{6)e_oEkaMP#jj8D2m+3u za)RPe#$t}ES8u!HPI~j;(8S2CFFuNj_9E(%+#Yo+X0L((mW{Kvv1)YKnTa*tey&9x z26ORWplS(|9QdBA?RFJyY3P2PJ2orfr(`9pYcgzqQD#beSlZf|RX{&IUfNTU(N`(f zs1BsS&nzaOnWpsSeHs$+pS$)VuC1D7rxKzfBcU!Wjmpn<_PZIcA_v_HCD;ivudycr z1qym;7zn_p9&#_y$TkdYBuy3MZRC1wtH_{ZPNfn((1~jVg5Rr1MU1==IyQTUkMA6R z2mlZ8JKKeYXu7VR6Mu;all$-km7jRUn~})`Pyxsfa3#oZjNkPEy4phs23^)@s%@Lo zRd)Xs8<2sdc4+8_8SH5l=hZ5!dl)3{?;X}ZK7~#kY>Q?5@Lx;@8+^#l2b>RaN_qHW z_Zw_h+^z-DN{YgLZ+v_pjWlNl;LD1K=SHugcPYT*@8@a)X5{5UAknfI}2F zA&n2aK;`TV&oxQ-m(9c!@xi79HM#+UfUenMb`0r%gIxtiLlY75I>|QhsBl`4Gjk!E zPk75w!q+(Ii$9HOUxo$pR1cG6)Cm*p?h$d>UDoRw1pWMGUC{Nb<)WzEp4h$w9WG4N zKNlvist6bBxy(;I1o}Z5%52!TV*LY{;5CMc{|(6U#&Dv?c985HWnVuWY2Z$kj?o!+ z9T&>0aNJinK|4OXn)*@02DYWa$^M`2{ea>CfHurndWP3%><;t* zDfVA}(_SlF~+<$%b8QqbUM2@F&2?VQE(rrDsqxD+D&BXINe+t=daL4e}`q+A?s z11=t=h!cpOxdz{bBTN2;mYkd^w?BVDFYaLKG>|FD8PaXSNf1p$g6W~=poCuTnFOq! zrr-g9lK{7~;p_v1s-Pc$6`#jdFT`?Pq|Z;eTRVhBc*bas+>7A+oSSw%u3Cj>-I1oj z>W^mHwgI|9y#U1VY{UM)e4{1z_H*m+dw)z45;=x3aCLTtwZNA(nhCA%7kUk>W>8M6 zM85{%Jk9A_yhB7fe-5Rj5(-`DMJWVZZ=#+Pj4QoJ84~Ag4xb;R^l5$NC5K&%XHV?b zd>8h{haS^heP`B$g|Gx`_38W!nD#-L+C$Y7ZpIG)G9JTFVayT{N+#TdDjV+UgMcah!5l8s9$%i7yY%|5Xl$Ea)Y*}vfd!dMadxaEO1HySO-Ow z2JYfQuQWD6XTsk`gwJ~pHtO7!)PI&gR~y;QzHIsPF_7LsO#sy|GOAYLeoXbUU0fr6 zVZHe^HK*nFp`anL(A&T|EXXgl@MXD&;Tv#^jd};WhaUqD@h~jDlD#~uuK!xzZ@{hr zoSJ8FhLbSRwOhHj(g&DkB4T;G;3cp4t=yo@!K z8wa#PVE1Zk{oYT~N|z%oE-#0JySi;^r7i3Te%`W}3a$jC1*4$4`=@b&eTxQeW<+l6 z{#ECLKM&hrt=N<)n!kg`DN;K9yEA~;Q!B0b{2KTefB5#-TRC^ci#FM@f}?)0Mk4() zoJ2 zPFu)LSY-_Mi?84)$X*XB%8I1++1+y-vdzN_@I>PXwIA1J5v(0w=b8hMIEaa8xig<~ zvMFZq4hDAjXNNS3fFtf5!JUVpnc@S68CKgD&hW{(lTq2+rfMEfPWzO$?cvO#wyt?>GO@A5Rfi}+7 z!in6g9HbM@W|^r_)q)|=odK)*4Q&iPK+Ry|wZtMpENK9sx?>7`*_sW;XuAN z{RN)i&XyL?frUR<+6msIu1OQN#m$)Oookq19u@QgGbLjy2k4X4H0gw4RnBB86wODa z+gj-~)Ze@8qE9){|1!1;lP@sg)tJn>E-ZW6G0eM*X^a#^kzATv-+dFA71+w2P<`F$@Ol{4S zW=WmP;T>>QIciY>!vKgoR1`L|Y+%#z0ZyJJHL{{7jnK@~(_G3jC>I6}S4+8@&-Jxs z1EDRYNW8RaLz;tqwd*Se1aZ(NWroXr;dN3~P=5yse|e3Z9K$~EyL^1L15p#u_VQ+y z{hpetGMp?2d?0>4#fw>4TU%EyGAUlWLyR{AoRVgzF(8ElpojI}M5@5c(zgqX5x^s|155=Ej&}{48Ic>1zfcKX8St z6W4wsu_+t=)7T8~A#jm$j4i&3y1-XxA6HXX&inpNz&j>QRYeDFkt(^pDEMVh;me~) zzeNmNTNg_{0rvfj99NdygKq^5#MUt_1Ok%7MIO5O`NfglFjsQzpIlrJZL`5J5|HI! zn!%K?_FIin{H*=lE!-0IfHw0!EWM1%5W1C^Mo}m98;n70{)c`W=D-WR>Jd8)4h$U? zGgW0wA9nZUduBA|=kXt>IHsjO5aHRHATp~)Xy>4BpAaf(^fv#WtK!!m2_MOy@2Lcm zWiLlRs^8k5YP`0poOprLWHLUaFeG|k6=*kp{i;9&$1S?IiJ0g-jNnVZx-zzYBb)<^Gv}Xjjb$-|Lr1Kz;b~^H9+)p!#!Za)B`fr~(dO zv&!-Q#I(%oxdDc@t=9s%oeMw1E^*k230oFL&YL2mflzUk~@_~GQui+f-5H(mpstdy}E zzZc$B{^Uq;o8}N^U}i`z%M~W?2P1P}EK&q66HtQ&8u|N$*GRdHFq1`DWivn=g9lH9 zq-TD+G_Ue3OywfE@nx|FKHGy;Mr=*@lFn271)^tR z`wQ^krxX*_&9?`-qkZDX3r`u`VV$RSR?s;uj2JW+KmOjtu;gnC83f080qkf#XT1L% zlfVDp5OUyN(ba$PyS#X5;@WeE+A3g_msbl@ zT~>R$yI&Q5(a+k@zbS1YCSs2$(ooYg%^7X*p}^68qzfG*2mR}+gjY!Mc#(C=!~Qb{ z2D*j6hrhNQR>CGz*vP?7SHaIU>fQjZ=sfMyqK`xnY5T1U`=9Ou9P_7}7boAT7u9)w z8(?Vw0&MWg>)ST7V>ZvMs&yc5T}XH`0L_=zB(+)XOI?l})wz~Wr0CH5^JPRWim6r6 zxe|i-ydE0uTVp>4lrJX;>itU9`~VSVDo* z@|*msD!Z?Za5l8Ui4;h{PAe;8LN1<0PPY3~$Ce^a^u>F6?w9`;r09l~Eh`#!cPY#7 zAhd~E?}4L%g8HrAz715c+h9Ym_$Sriv>`Aj*=eeJirseZYX{ZmJyQ2Tns% zgQwK_^5hI%zskZ)Fn&!q{P_3AGw@`?a_dn+K@Dixz{d1uFp)5`swp4kwXvqtKf|Dl zP^`@LP{^F~rM<2x=>FQ?7A%OTKVY!fl6iRGg#Rd(<+JxA;HOo9;424;ps~~hT(yND znR*D)Vd5e`oe+(GD@vZ*6zqO>DRNyiRFg(&6@3U`{#Z?4h5~u)1~B>zatTr!S^R+` z0Qj+kbJBm)eSGlz&EwFJbIE6cfWb}b|PZ5@_Z|6BIW?2gXeNSAni! zVf+Cjlo}>VklUZzEZWrj`mx6{tM10tRIU`n8on26GOM7w}R_~&y7%wffQamClK z@2{GnKUK&@=?ir;sA(&VnhRK*$`F*KX;E)o<=s!ekS#d#;NEa(>TKpJ2TKPw@(=3* z`AU4>2XX1A)Q&<7OUp-?BMhXl`sjgGhtOxR&X*xBe{FE ziI_Y%{A(zaXO;sv9GmB1Tv%N{TAB^v{Ao84#KgCd+o zrvt+fin2BnM%u5-Im8y_1c1*BW-Y*^Is_&A>3lCdo=7{dMqmB+EI@Q`FRl_C#zZq3nlsA> zwO)H#C&w>8v|7C3gmYuSTLk?yh5TL=YJ&0xR?R0NH9aYdKQ5PN_BZUvoA=8LFJnJi z>wNmtn!IDcrI4Wo4Biw=Hqxv45sR1KiD6@*Qn)b6kOu+5eh&fbUK9Ms`O&bKXP*q1 zw{q)(;~ZtdQS8?|SPVPWi(zifl3QqQ>Ay;+vT@^pK1w?mC(sD+_n` zi)3!?{nmO4M*h2NrDc$~F3ugcN7DyvEU zz*Z^?%8~t&{0rD&k$>CP?&$9`$jufN6waFILCrCRC-uo=pd#GizmL_PZ?DNTCKr0> z_U&EeeXBWjap8yjW;s55vQyGsB!W7y!%w88MGURm91ob9wIN3Y$1sZ$Dc{*?p9atlWdwT(^8o59^TZg@&5HBb!p#9E2wB-7# zr26dOaQXk$hk#x&@;6r%$$JJi`NQ5=bv?xAmvz{jAxRrXR)A02AS6sP)KsWO9?evs zbJuj|TZ{9D)l?OeI@V--Q)**nr>d^*9+L*|yB0_n!sV+p(CEpmY?<;kqhx>nEDS^@ zQuyHR?ov&?t9TzJpZhHzKgIUk$r;fMV>^Z`a(X;wLTa?@M+Y#53+$BU<`*mPZ5N3c zPCf1WKt=|&J*%t^HpuJfas8lK*v+>;NDbGjw(M~D;+qN;)z6n{-C&Bh>#@nnx3mYP?D0*Coa1CvqY+U1?mP~0vKorqx<^x>z2?iAYoe= ztUDIhjmgZ#j*j8l3%t+5?d}%YvNk3!%{e>C?ECm)DMt z0A#nT7*usiM;`mP!D|VO3n-hFJTk}_QyzYL^~izJ;z@9IaS8f@*SQb;qwG{xzgD04 z2buo4{OVZy$}CgnfB?RZ-vIiRNvFwWW3CbAWw-Z(<8@j~MS)l3Uesu9jKZ4Ti#7f3 zjw|5rfPtvzi`v5fKIa6URU@uX-3gIZQ9wcT^~W|vjBFB<3Q9yJCLw`$U%j#rHrF!_ zj&HHMyy`;N&TfTY?jD7@vJu?B!&$w`<)LU}hZEe1!od2Axv|X%11gUAa@4JDySb^V zt>9peKu}EglQC;LfK{80jfZ;&(a-I>1#VZl;lR4qA}+P#~>vmT~;R!&~gDuS0;R2S8Z+Zxs4Lv{9A$pXCVo$r73Mt*yvr znubds`^hS_N2Q0ff1Hec=mrScy^~e6w8DQ;bT)V&E8=&4vqF#MZNX}~j!(G)neR~1 zerreoV}W8%cb_uCqoAOm`m}=^@8g;}_jckyoy$(i5F6gdsNLv79iER{wiP25f9n%Z zmH&{#T><)Z0fLtla@%h43Uu6P(BdwRoMsF*sZ~2cy4Ldj>TTX|**MZGiwi4tj-Std zP9XR+K|&Jy_jg#z6|h>cys@XS5AgEFhv{=D)Ta$EfPO$78A$11wB`CI>uZReU%2Xh zqRgy7Wf=t>;U}{Zp}HTEL2CkHi25|Y3f?sddjwX~m>|R2Y(2m0(f8)=#^T0!khi#v z1#X$BbgfTBy&?8sp3Rro9m@KPpC*&Q%h6?I4kzR2T3wBAV z4aiYIRX{2`_{#mpp>oJQEzpj-PJD#z^`lBTe$v@BYkA#}4**)3-`Ha9t%ZKpr zju1K_P=f-3shEJH6Q;rI;?WleL`&~<4?GH~Caqo;NF)N#3lq6Cs@a?pADGmqXrOE~ zgzOHKKxt{ZnP4ZfkVi7jG~qi`vQIul-#%}o=|X)53wA)Q8srY%=963pQpVg`%_fcP z1yvxRW+z3sO=!nVq>|u@gOcbOs19b4CgQw@j=ryL+-9_Kiqla=i19xgvUZreoK+x> zIF-my!oDDy6E(fw6h`MQXEf^qiny8?=)r=ILVl<-GQkQwZ$S?LIbd(#KCw!P@XOTK zIm8mY^$+OF+XtxCdJfMe^)dB#4(qwcaOR+{!v_v~5^#Lp2gNvJR1Zwf^TqgIlJ@@B zN{%CMV$UB~%-kVIf6jYiOFNUH;1)szBFVB;66Vm?qO^t36D zjd}U4zKZFSm!uL8eYv>IaUfcQCYs91F<=*94c)|Zb1SQG{S3N-(9K;xLBVQy0laYX z0bYw% zdB@1^nf(UD3$f7ljpi7 zS?mAZ;r(;H{&n7DV9H%V!5S!W=8xyrckjU^tK<96c;xW$K&7Iz1UKmJe&Op&ft>D1 z>~RPV03|Fhmq4+5UT$GOy^V<1wgP=`*GmRvpuey6k_A4$<09P@Mt}$8nWd{dC0$Dp z;`CJOaer?YRvBwJhZpf^_|>|ALdmSfyZ<&g836X%>_FCDuM0qBoe}JyQRURRa$Zyd zZIhiX1;ne)e$VB)1l)4{9X$*HNy4g*+0#C?(6nQGgaD&;K&k7&wa0rjv1 zq}BeJOV~-tQ+qpES)ET8r;f%(`?dD_zB=^=)3xEUS-lMec<&T*tn_{=7<^zrT&XXw zu2K)bVW5vy%r-FeI#MK^6t_1@?JS-yOHWY`36+zmFQQ@I60`V<-ep1ahFQMPhPvCp zCdL%CwR6hK*3G+*sdM>U-7m4}e1Z|wTVt7WE-v1du;3ebu1%DBU4^d7ZI3 zSSL**JbNZa_?2J3u02z8R#H0qMM6TN-0XlVP^$P9YVy*Fws%oU*BSDRElqJ!OQ3@7-Khc7}MXc zwsl1w(5j`9Nl`BwE|h;ln$_%dQba^ar10N;%${R%r!MX6TJz{r{B*jj_E%aWeQ~PT z@xRhKug=LIN>sGY%lP+|^!>f@QCu?K>J!^cprq+8x5xM8GZ$I5l9r`?8k*C&ou_yo z1-OLU&Y4V``Aw`!71>@I+-OO<{98`gb^qt4y=}PZj5^bali`Q&wn)`du2*UNHIAb} zZ5O)H_k}a!RBt@*$9@VNpQ>CqV2@r*Dp6ayb|lp2}9|N>TP4uAHZMYz;Mu z*AyOkW9Oxy-*EGCb3th(iIS!;@OfHGIp@s4CbcuOZxlc1JhvAwDD?di(MdQ47QEAr z%XjZA0|pY-koOrjsACaGPgs7gj#Ly;P0Xf^y##cINxbZPc=h=}v(I682XnL1c!4{1 zl@gp2c|$5_(19JY?~VP&VNGaoWHZ^heYPY>Tk>tKAmj(y#Q$Dt{97p8M%w&a9bzkZ z`ml_L^e;VjNfd=;mb4c&>uv~X;{DDr8;xbj5-v1S_>#Up&O={N*HTZbK=$KMB8DF8((nBaYa~;cFnh(mehBXci_6S|8)vm8&U%)Ka z*@cA2$!ZzB9Xa$sBp_2o9QVX%KFoU{(asa~+VS-KakV>nx%qT z4P`B@uelMOW_e@n%wfL%+xMPed1Hp1AfQ z+|bBVd>d|HAn!0Xt>6(esiQ$hr0=zYF_SYwbgdy>x|k^RpdNoZdmHHS^3DqUa}Zfs z4J@X53*$c;B%AZ{!V!u*s`By%2Cp}}m>M&(vst)V4>`FJ*|!FhZ=7~$U%keb@@NkZ z(rf9N=;^)q?3erFM*}nTF5WlRoD$n}3xxsqnyrZ(_Zq%pOUrC((_G)dM~y!4^_jZy z`1MnP6*WP}bjb*Au7YjVJh{W2T=n0!8JheDYFg|mH$OgD@4}cx-537olYtmjF@)KU ziwX;jIZkH<`4+`#V|4k>!2KAlSLL|oCUV@|pL_q&bSMVhR`0`_;Ws%v2M723i#O~8 zwwTbsOwKHw>ab8s%9s~cXKQEhOVYH&I_3l;^Bz^l(6K`$Ggsg-NDkVVA0@#) z$8cT!@GL326b+T7@!I*2yK7NnfY3M&L}OxsBK=Hyf9nsv)t8uU~JrFkuwb&AD++cp1OW_EUDbxL(iUUmg&=ROVJF zu*tbtWH*$unpG{wK76)Ku|>((R^(65%om}Jx#~yo9=nOTOMEq)BEW0@#%#KgmYO=+ zv}GeFcZLwXDIg&IR*oC>s*Tl8r#7#EYir%+GygicwjVHf3aru&;>&rGH7H-vn6|E8 zTU})qKUtecA?2f!HT`pZV6f}MZ?`NjIs^LfFo*(r@n1Uw3wMU43<{C$*OB8A&;DROK&9N!#ETtg=4A4~i9 zvFvhUoY21l{KkDkbVF)Nn3hFuwFV{bTptS(+{g&M$md2W$F~=F;GI@ojV0{nD4CB# z@h)cy-s$7xwG0Nf+{CkDDZ~4CpO^>l9pOz?b-AF%E)GNGGbai_fNSzY7RkdK?!F+@sg zC%&sjA($}KXv%3GgZcW*Ah67|Y8O8m(B|F!a^&4i34zB8>x|jU*|GZmYNl^iK;j>{c{1{*Yz4aTUEdxCjj$uhJn)2xjcD%e(+U^ zwIjrAp~l?8wBPN7EvpW8;<{RV-H6kRAt>~K9jrXhubmQ7uA(2G0v8HC9MaYu@xUG}BO?zCn7IeiL%U@SyozsHzX2 zsbshI)?B{3l2T7bW_-l@e6e7dNM=+Mh2d_cK+-qVUoB;iCTPTRMn=8O>0J`=HqDQ)n&2Ra23@%T`|AQ zQzS(B_yW6@9QThO2=vYSww&^%&K4aeadELh@&={2m{*fel5Gb19kP?X%5FR^Hg6%>$}i$?Y$^bxYM zY+RhvRUB`g@DMkh6GdLCzwWDnN{o@knl$fgvUDL5*S z!QqCT3E%FC^2mhQp$hWfJo({Z&B~X&1Zy5cTIMH3rX0R^R$!K~imGvC7V~@?v&)F2 zSZxa{dOMpgG&bHlxsP5EoOLYlYTjic)j>!5D$4SkvghPllQYf@TCdExuHl?LE|s)Y z+Q++}Q5$(lmNN>ULI-=2F6RU0u0L^DsWH=E?F}xp@$_y3<(rlmcg?%My*;=>Au1?% zU(jxk3nM=I>q}xnLaG>nZiq0=&BD;~`yziYH&Ba7b7VyVbH=%PWa+DQZWc3$J0%gndKb;C$N zt?Q$XHKe-@dUK=V^uYbGdWvY9^YF+@%I8RBX}{i864nyA5@i z-C<{!)7MX4;jW?5&~lsmHvH<-;JKmROruwPxy9Cj2WB2n1(hc}V(|BeLuR9rbGcGY z%nzv#-54mA&>@bx8e22PVx@}m=52*2y`-^ z8yc$Q@UXUvo%BvI1Lak@Ilmg0?9!U=R$GlX7*48X=UQ)W*#`8U`!27GLkybXFYq0U zPmDwF4x=tK)OU$E8kO>M^J7y|u>GUL6Y%x19#+!^UsS#2=pJ_s^2ZZ;>066Nyqj!jr<~`N7TW5{i_q-qd`SaT~HAgC{ z`SuQuuY97Ii{hijAVfj5ct2sM@>!X%5`+0(YhDayqkH2 zp{8}(-Xa{k;T98PwXJp9plpBsmsNn-cb!#UA&0z+BmK+Sntam&i}&yM7UdQ_qSC?# zlkDH;=~{W_bfGg|_}#bN2yPcOwR_PRU681QDsBFQi!PNh`Bl#p`=#aPN0PC=mR70% zF|3d$GY-=h4ET+YS3qy2hu3oF79HMG{6GS{zUS|5;0fOS&m0n5UVd-+p6%3)%&Tb* zI|euq1k&__Ck7kEeCsrgkUf~60~tl_|BRT&>fwBi%bz*UID6bMY6-1r4S*noglxJv zGxPko7XYzKP=YX_ow6ga;A7|CEXd(YM6s>Ez?Yd~JK@_yT`<6mBDl5g)biQ3+%@v}kqKBHdM zC)*v(c+q&`*e@i!mHo?7&EsfbkbX)pCD*z^U8(1rgSD_r-$Mx4F>I=_&3^ft_`$&? znZ1>$(9l3{Z|ZLC_ElI>QzO)UcdYz({tE!oyMm%-MR-BOc=}oAq zx^7`@Et`;}3#t>}^1<9v&HK1U4$2K1dvAXCA5Xo8dBTRp#l8G|Jl^V-rk+ZS&zo^l zs-}q@U3L`Ku%`1IyV*?s;*9C?ITf?I&Qj%094IK&p0ppn;}e$S6h8`7h{+Q8=wu=P zT^dhb^!1*`9ZJSI#Nu>C5~{xX{?qora2;L`7^+w63D1#9Blm&Y7=?f58@Z=#1^$3I z<8W|63&_aG$Tw;C_H8c)LPIDmEuGW!-xsokgfkMy!fhq8BBB?FrX596ef|3o64GgR z?t|YsRil?3O_`4n5eslB(7R2!^Y3p2D84dw@5{TP+;~ODH!o@1`Ub2wmO_2jt^r1Y zJo`2;JV=`+z5sB0=b!BB`xbuZ$lb^)Ds`pauKVd)D4~SCZXH!@ zY;2mHqa`~#0nj6g9E?KAJtoHT+Lrbci}$FBgSjWSm6ZGxWRv)JRg`+}IqV3boX=wM z3jtlG)EjS^A*TiOGUO{hDaNEge&S$sX;Z!lr6v z1Is`kWR)Mns;&4U{|Ps^nwsoBf1FO~ajCAl-+qv7?`x9Y-p@G*5s{Il>(SA12!zu% zKY4(gpf%{rmzbPFGKQ7Mcj?&J9uwib9K$V3M~Fm*@)cyy&Vr;a)NTh8Pb*zB(T<%g{fqFbqm}?)vqK<@hbs+< zPV~g2Z{G@*pgf;i9X;P|*^j4pS=tyXndYe(KiJfuvs}vX%F#%E=JJ_W zmi9RU3v6+CtjLwu4c+n2mi0gg02ExK*Dqu8=Q?MXj|kFIA|spjeXu~&qg_7Bq4*Mz zTs@M*SLD0UrZ`-Qa|SB(#%z|Xagn=G#NvLGwyerJr3oSuee1n zBA6R9S7udR0=qgfmQR>Q=1_6)@@gt6WvUQ(5nPuzrg7%q#|TKDVr2XdPk#1N+~&d$ z)V>0aCp#zS^XJc1Rl?1=*ISdEBqWy`nxW}p?)oe|ELm|>u~&VT)6?Rz@1-i8)YMEi z&KYNfBO{cLjOtZEvc0E~1#)2Ybf*+q^8@7sKW~afapue=P2bnb-opbNfXq$m#LbgxifR0eT~lVHWx>VIEpt| zqw_~Xz)6}sleP5pWM#p)45~cAGlZRBRSC~$wnUipYW7B5>Q%0Rxe>%eehf>sM`rav^eP z*KqW11}A)?np(0p2}lPaVcY&pDH)k11`4VxN7H*F37~Zs4l{g6pPpS*)M7c^rtoYa z+QL_-*3AZOq_1R#B_Cw++i4n`1d<3o#hIl4!@{3GlM~Z8`DDD@UTL{C{IX&M{jcGL z*k0x*0Q>deyc}LeT6Io3Nnf5mgYsMsT#CoH;b!8$ezkj_P49LnL%>kzlt#*KoWcnQfp(=xQ>)dca%;nwq-taE4$MC$evL{DiYaz+N#Kca~!MO6c z){Uhm0E1UnZXX|4si%{%W+j!*7h#kA#J5kVFpLZ$jFL=ct4dnFp9qi3%cYqqNH|A> zKE-2KBB2%*)LxPT&n7TOv)`QHBvi*yRRM7pBMxue-Hq|bN45C*_y&A&`2tZwwhs4j zi|)hpC4W`E9Lod@sH$E-owdHwR#gfuE}FU`YNPmL6B7l%bBPQvHoA=I93Ru7Sw8FG z#5B3FPy$WN?`%``Y@%0Xx;?(u`}-z%%)#x;Br)s|Kfj$A=JIlxHUFH^k=LT#!^0CQ z0az2?tfsS*6d{qzy+_&}Lla2A=mgiyNRMheOVRB8r z$G<>>luVGWF=L7lgO;%|?qQYPK3^INzOX24YioOmhGJ`eXuO4-C*!|)`}Uqp=Ru6W z@$u0nJsq8#OcaHL*G6lHJtVe0Y&ci9t8N#5?tRQXmy(+5x_D%n?(P%NdRs&1?Vf>< z#d93mvjK-QHD;qqrHI}$Xac(>tB>G+aDQMe>L32)ix8!h??b_!`S`A-oqfZRf)Gwh zS~|L&c^{Xh)mL#$@(GcV(z?7?kg|ffz^3SmpS)P7PlHKYbHC+0+l?WcqlHVyDHI{C zHz8CJvJ9fkYQCvF!?EAK-`k$q&A%E+roH<6e$r&A zqFnmWQxcb|OhNc#iPEWWJrJ%*A1RwPQB^EK2?-;-zsqC zS5>`3H&~M{81O0Bd#$@$(c024I!a<|xmp4WRnUpSB%Ed@Q%o+fF}M_8Q!z53oJ;B4T$J0Bo1Yk^|Es)uh68Mzp{;vRD! zu}SQ{UFU@v%FBlWHagv^^|I}$T{biW=ai!yok}bYhh)1&thA(sk})XS;6030Y+u^{ zF{dNr{SdjdFDnayFvVckor~gU?Z6A_lA!>0;v%lZv_yR^t;?K7Ik}FFjkr{kea{A4 z%}``-FL5xz3RXJ$GoUA(F3$%g?5dQ}6S2WiY!>3=q38rGP)sy;N}n0pQ0>Op)6ai? zva7X9_E|PdU<2es!GCO-H$E^abev&~X3!0@mv!;8HG)3ZmzFAhh2%Tm`_rLy&0eD5 zp)yNFC#>W7KdWUcG6#7R0HnO@4Hn~CTeDpMP-1tb*qMZdhB)~+V~sFi+o+Aj`yy?9 zq@{?L+hzFD}@?ysDr`oQ_pjwdz7evy)WVLvviiMN1wc1Cqn@SqGAk1 zjdi3-RQ`q4m+CiT`e%h8<-gsXX0j>&wHDN8U!LI`m*#+Pc>}uEF`Jysyu+Ay5Wco4 zG|}PgkSb9HqA}Z~dlz|s82Rquf`yKT#&EBt+6p(1UW2}Yfq|;(%2@Ic)Z-_+&=+o9 zO#g{qjpfqi0Hfi*eDs$)HN))mPlcm&alf(C9#RW)YPK;<5)cM0Emw$1NkRxh^!3GM z7LYG~k5n`O@FttBt^U(CUY_5y@$9gap*5&=7d3NT`RDTHe~b|Qi?V9DI>{5GC+1}L z;zed?=mW}RVOyHAfbpS)0a}w%Z4+4bi zii4GPIkH`Q+_42E(c{AG?lo02$@jKAcE{qvsi@*j8@vVE%WE(bZD7%Y+m#A<*6OW@ zE-Lz=5M#kM=F{~2RGh=9Q!C|yB8{Cb(OB})VAALt-K$km`~;0RZ#;+4vqkxolpXDl zr>6PSmPDMxEuCPc8mx_gHS$&X9UKts%zj59a9S^8_xDHFhFN)EtA79{*}JqaQEC5} zkCT&<*R<|%Dc3>i&c}*AWF{KVCsxtza+w|AUFHgD4z`B={(gYsVAFF#;wvbSpCMeufTcp{IB*aI3Dp(pQqAVd(mnf5nX__eO0o50iC>(s+{ zr^?;xyi;coaL?isc%lvFrP-gusaufG{^#Z+LZxzt+eG?DPmD7`f-+iA9@zTqRHYdJ z#KEEa2jeM+e<*X59g6xLi~5z5en>H2b1f7H6Sgcg5gi$e)@Unh0w=-xIWnLT-sTT+ z@wgu#EfzEziU|foO!{#dJ^Mym+n??*E}Sn6RZ^Ps$MI-u_RKi+maekPD*u6Tv(-rx z3fWpRSLb|~`CM-(`}YD%$S>8=M~6KD*CM5il-Sxi|} z6je;>rvk&_ySIA>=^v7koLR9Zu-&B-6DwYytU3Hp=s&un(B0G1N%lEvq#SFfs=n3&*cEUe9Dd-lvL1wDNDN0(h96mW#$B`M(eYaUKj995Yq zMXYb1?d5P^y0{*)OW;9f8nMe!dshKC+kv0ox}h4)?v6lf1e-VRj#~4(G1vgbM9KS3 zGu5SSv}~n=nZU@e<{(L&&T@QZ$60;Y^i}>D8bH0>DfXH>%FI4VH%dHs zAj0x5(+Cbh#~vm8<);WxKIH~!${O48;P71;-)q;$Vt7;`&Fq&6fSQz`ef3a3@!l~t lvETY%q)z|MrtSxfy%u@)Jo~r_{9+`YlAM}s$;)>^{{>0@)TRIc literal 20180 zcmeFZcTkkww z#YsqNN*pcblg6iswlFyYSZD1Z_=C72hE=&m%h1y6LFz&zC3Oa3MKjN$Q+5VmrlP%g{ll@6qTjqyqO@n; zIb3}sT@bof?Wfuy+k(M$i;D|22i@P|Z1I`yy%vkqVsGuAt+Sn&C^9aD;6zvW>{<|? zhO@%@IfvQz>`EUSKY_%>#a*85G&n&Od=_+HDic!m^f=A#iHih{WbTbDS0rD~)$-mR zJ`-wCp4oxpo-@A>(lFhF^CHYcEUgtdUO?2GE*VyS#Mb!u z^ybII;3;QFNYS?{pVSS!OnM3-$F`tgTqx!j4bzhvn@X76%z-3RejXtN6Elpew{`x{ z>K*NoL1E2`qaZDx260$?YGP(=>RERNR0=|ssHU$Ub0OH=(2z5wN|i{bu3=mq|1C^j z%-okFTJAB;eX+>WoGz2fxQEw2fByX1@e}isq=pURp`ugi$nn+%-!|&yaMhc}j z##!oeQ&4q53fDq*oHlm}*-#BtRR{+7ypx(*NQb?sS9BMf4^qthxI+9JoC}o@@-7 z7MdgRsVYp6@_s}4+z(bEkA&T?eyZjy+-wP0~||UQ44+j(=F+2+7``vm*gPd<$UUivIH^>0)PXJh=h5W_)plmpPt(=Wz$M(~Ck(<7 z0(Z@sbV^hBcE<8xDU`tvMgpEdW^HrD7UsN^ zp3UdO%h4Z5Jf=bVx+TiVYdQ!MJoSvXGFfPN<7-SqV>VB{`}M3eK`xihvSesDHcnt8 zszUFmeDR+^L(_vE5k+kQ2a~Y84LLcvp(EXR=1T3zjMlVjYbK{5Xn$GvL~?cywyTMS z#xV#D{0At%Gn(PWY0t0CgGs+zse4-+J|TU#pu&aJ;!hy1)Pg>zN+%h$e)Da2?mbnd z3dN63yHWB=Oi_ z3cA*Vi7KQ^8ChEH%t`;zxMqAnrG%HV-cEqY|;Ah>E`3VpHHHeX3W!K>yMh_1$BrV#^|JreZ>iPuHK{f0L`4Z51!TdTj*ZumGLjm=Sai~MPIZM~-CwNW8p8e8Xo|S~`o8?qDW~eK_G|Np<>=}cqm3_wAh(D7Xm59|u z#p2#$3ASOyM`znja87MwAJa--dqdwsE0ybF0XAa!{JIVCh1sw(uLSdsF-7J@i?+ZVE_*RN_~bU!68q!aY}nI`x}%^rkKE%gg1k z3|to^HB^wRIK-+|J0a;~uG2(hr#I88D2a)PkPY)CdudxtN99Yt=W!Q0F`1d^tkJCt zj0~#x?ov6bcg8DEPhLLA=xNVrw?9igV=iJD*xgXPHerqDCZy&FR$H%rZCj@*G1;U{ zXgG+QW}4BKRNccgX4xolrMdo4)6uaqCWc`1&OazQT9$sj&GdP^oQB3fvIx~OX)y)Q z#F+HdM5g}H;aD@4xx2#$&nv8lItuBAzT==P>R!L3i)D@`h)K-kyra4fuK9kVoLNte z&BDTBA?L0i5!#@n>uCYQ1%`AIR@*%y!L*)8wzFGM^uls;?FmH8a#NSTfJs#?ew{M4 zw9BG;&}+1^s|6uOlbb|YL^1(!7&z*#^^a9m z#m80D}_5hDRmtFf%YPKNaGEh{W$$uF&JFfANA%PImA` zITSdD9NRSi(rcYfIX2DKrbn;7XsCU}E$-6iTAC(WCq?K4!H68Jw1eg7T^VV! zP4A;uDx`bit)>W+AvR`1hc#&fLIPN*IvxuqoN+2G5WU$O@7-_FY(1YHUR;Nu1_ zG#U(+4(6d8KlG}H_@D;*UR&-I+*WOj;O+-CzT&E9xOiw?#8S&kl*w=M*X#D$GkETc zjn?M3<~5Ne4r*v}oUM)5!tvyCCV*cig`6f2?@iT7-5FBG$HkeE(0a$)xcv;1mz(BH zTH8Bh&Fob(soY6@Hj>Qyy?4EDq&z-OCQSa@?$&fdIux_bo$hos|ILU20By-J9Q(Gm zC1kD27tgM)H9U5kJcXOS6plMQ@GN|Rd`tt(CmUVRPDiNwwN^7GU9dwisb)CL>!ifR z)QJ^~Clgw22H>dF6^Nb4KaZVeyzY*srxRkOQK|fM?BFiCDL;R%#P~>$_8I9iAi0kg zmVaP%Ub%=jTAJ&6=6$Pr{cAHX&oZM4|F`*X2NEf(7|MaBZJ&^BPW48d)JK<53C0#CNwKMkx7*dgFzyK_xKfHJ z8pq!BLTvT;D=V#^RyZY>aJBz<53TdBiiH`i!@_dX(Um>15yE~|SJ(Xq3dW)8o~%1Z zm6OIp3nin14oms`yv1IkAK|$nUeyT>S4q*0W|M8}8KyJCspo=BS}Y6@4fD{P_ai&$ z%+!PF#*~5{m9Yk4%Qv3i$+pgE*d^p8!tp;HU!T@fs}^&8I(KFBUi~n<1BFdjeF;ry z3c-&#eo1#J+j4D=6M#=-{-z$cJt>t8IpSc5m}(gl10OT<@}$gwOuUN{q5jX8B@7!WzlR!5lxIXl&yr2n|&v z{8TFy0Q+PWU=!{@Zz)?sd>Smx1T4*u4@c&R?h*6S~ zpOe$2Py9|_Uw={993*cxVrJ%OIo2ahvaoJdRTJ6V+$H2?z5sDpZkOt8YD|o3x5I4w zep=(V<1oY#K>TuS49wBQB#G)4tZgCPCg2KN2TOE9+|55Rwz=jcFNLdH7%_dIx4{VX z-~hhzoSe0=L^5w^Erx1gO+&-a8I4eNxq-sNZld`8mY77krzD9_V;!0rYW8Hz5K`(D z6IFp44Hc{8oMC}GUtJLF!S?T$@Wk(mdF!oZFdC_E)HOl)BG*guQ5aS5jMaC9=P8oO zYg|MWIapd5=jC)2z2EO~!Ktya;i?A_ft#n=sMS|X|Jsk*x6Xc12Ice&IIP2B zZchB2-Otx_n*KczU_Ax=%Oqz6kU6*8O;&$iKB;_Vcl7j@7T49=Z*W8GBW5hi!?Z?>*zdh*3(zz_RBgu`VqEd z`s*DXSLfIEe;ygIlpNZO`#s{YpZr_QG-re^Pb~#g&DVb#7~-q97mw3;wdJ-EwL}UD z2@0Ak*{0KEyAj=1JWg+p9N2$S@b%ZF!xK!6ZW5(2eZ=la^l#`gB~$VmU-zyM>w2OFEB z#~R?%7Mb$y^butonccF~ld|p`34rDA)7T(2KXfpK6d& zARfx(nJy~ya8-FCfRT#rNc%&p2{ecfkk{sIFBhwqF=Dcf(i*|}Q@ z()Toy#)-t%m+b6YH!ad4GMUduGX6mr{_){BPhCt*ZeSr>g|8hPq9!4U0nS<%#tUn{ zlbnqg);OT{0SeQVbGAY0N`$!F&v!WuFyNROh z_`^PscvR>N)B{;MrH3tx7?|>fgkARL3ULUvfdfbc-TkKE*X1qhHDM+qCeF1qYjeL~ z+!%L)#T7{-LWk4`WlEU(Iq@+y0zffcF2WVp-`7VQ@S&i%UkB2zgk&811O}SxvY}Or zYqUPTdOkv_H^cKXuC=e*#DFi$I%OUYrO|^t?~0@rciBFdPaLUhMp29o#^OWD^uu{y z@@v-(Nb~b>^ALqec2uQf1+vuISc!f2Kyhur3MaMd>@wiBYUGR+&MwxcA5rfk#%*=A zS@gX;kjx%(awTMA}A`#(tQO7FAlpKksW(7v-C)Gy9_u_*iH?E6IblS@+Dn1PM zh$jgg+v@32iq=F7uBQpQofcpA4-7;!QNweq*`vcE7rY+iGN|79+a&K&m81$_9_opY zm3qN8I)hQTqOA+CLOQ1znQLY1kFO{=5+yKR@(?Mfa7E#(E=?62KiHjymVvXg%#R56 z(L&6%aqX|>|32{RGvdiAEj70?wy-juE-hZjywcR>v%~jhye_Vz^tDJbzA2_}mA&o1>o7kNNGM1#0(Yan)vid^i94kI8_nkDMK}_xU03f}N?-Xj zC-B-p+hekibrJpZA<8nk^+&JYecWzLN-g#WKP4ko@nTHMMi(jjL78M?DM-ZB*u139 zFA$YbVuGb}!ZVYl!|R{g&X*-Q60`I5^kOnO{TSk62;`OPU1dY#Jj$a6*FVfmd!LEb zUfZMH{wx3eq4*b5`tKR@e;`l)4=#C29k&m6<7bX6^!6PzH41&dEiLz!Wwy~&sI^}# z_=*WN2Oef`u>Z7d%Ope@)tHvuhlB%{&{$G%a8d$Hf^7c@D* zq{>e-HWbskf;>T@1|$$6gm(%m(jjHRrq>hb2N;Pf!L#^K~Jk=ox?d6k|$J@gpDju_nx3Y1Ps{>IKe^z%TR z^wm(c?iuYAJ&1aP!+PVZOzd<4`t9DoY|`_u!(igiok#Y@72dNOymFjbTn&hte6xs^ zXluG+(cckj`L!ikP5yNFyY1d1b93`BNr;`DB6ykr{AigE@VRgJF(-^3Exi-u^*@@776V*N-iZ zbZzE<`n-R+D#%Z8<67N(ZIeXi7;9sM3cUGwKW9|D*LUgLDkaY?%d z;0w&ygXF*p8*>_Y3yzvV+G|vh{Ej)TS;ZCQGy7h8gRNPFN3GKDb%EdOt#wwnmT4~z zqgI>Xv+F^v12*lJc>E4YZRXhg^0K|Cfs&iB^v?EYz}$PhnwMe%35ONJtHdnz1nS48 zr=3Z;YGdq@9|+yc?45rePy%=V)1i~O;1wxP|Iq%10-QfHv}>Y+ZOqRf@%vAXK>v*a zWfHZAFIDF3#9RlgFgv-h!A~3=(pT|Yu_Y;}c~Qnds_zZDe$1JXGC3sYOCUlKHr?sEmV`pTBQlfNHbyd#7=`vXU3s znX0c8W`ATwOD*f3$N`KM7L}yf*Wb?yry0W)*T6%Y`X%f3@2LAf0OJ4OT{=JegY?kQ zR@H>Ok5F!XAr2`FB#a1@qzpl#kcTuHIp2)>lmS685%P3BHKU;@P^oZ{J^C zAKJf$NrAWoP``K!IX;P#^-@`Gm6lhxGB$i#lSIOMpst7*+_lArfqY_{a1lgLJ|3b$ zPJ?O_YyF|ZV7CXfbhvord)kJ0&{yh#(kTabygSGYPzvpr1Az%`EL)l?@y(4^|^;c){`Ng#XADe-p= zi-vY(#i7iG-`(di5aor1U9g2*l69Ox5@}ps;b-UAP=}&E&j^hI-wnYzt#e48DUJ-j zu1iY(28BY+Y*a!#R0n1*O!O?4H1(_Z4%ox2&bJ)5Mfw-o*orEACR}x^(cR+0~n9z+lrqa>h)rW;uARURLyvfcA{&(d@~Opzcu^#th)L7 z0VKILZYFfkIKI4d&*?(tWj4{j@|lI7=HX#H%No)nx2|$3EHTdG(Lg&Y*)py~gome@ z+wXHRQw0cB1c0&817V@QhD(@~g5PH3Eu^nj{%Sb&l?%eU-fUSCX4DQgD)O1=T~FzU z4bHc=wqHU1YDQ5R)gPf%^KL6vHOb5tUOmfO4%ZtukubQIxm1@eTwR8{ZwCTap@TJj z|0rVKXGjZ&kAXpS=Qg$*i?J^wk$a(OPQwEaSf%I4LeA}-+Rgu(bo2HGWo-*cw%TdL z+Yi+?EGxAg{w+VTPA0(WiKf&WyyTB`5ikJTR%hMS)aZ1Kv24Ox#pFRA5%(LZv|sFV zI>`H>mN=Sr$QY0&xV%t!l~hu)cT5$yueSlb0VHZOI+fYf)M5#kbOMZsT6N+v4cU%$ zdQ&9F6}DzWb5f;Z=FY*M83N#Nb;6C)(M{x#LU<6atC``BdAyH_d+FJH)jk)}I&Qs0 zBrsKT(FPp*UIn6PYRVZL9Ur^I^0R>y5g!-*A?9eAr1*Fr?pG!C**C2P+7^TZaD0ok z1me8=Vn%v;)lO$G6~xMPUe?xUi}Dl!^ZTAz^SzMy4>C!XG;$JC2BFRnZjTivUxss_a#fE4>Se9s0t5nrf)5iJ@FcOf(UovD#*Exc_H zpDVJG*CMI65>019xz;2ab?xbFd`Jt0f^@H^tp`ACwe_~p$E5u5g&*T|R|6aMZRq~M zc>z-3)Oj@ykVV(l1xN~l9}mkLl`S;uG~{QVWN+5*Z*lNX6?gOpf^B~IsT4#do;zSx zN*RXnbWR&n%9@(|$e{{5I|e;xBS+t2}%8U}6wLdOBLH(QGuNCDiQQUx;4 z8w}01)L+Cavi596`+yC_I9ZB{ifVX&G=1!veNAW@b!A(bb&&j{6a-~C#Q~N@m7KI0 z$d9|AG2|1lAKTDgx*cCBWN(!&uY)8;GM{BO$jyS)(!Jejb8Y4sxq&(!rwFNT?$O|> zDeUsoY782X3_OMB+z!Ngy6to)6Ur!sYf^ZPpR2(-I%@2s&j3!8qRpaj{{?;v_6QU@ zCJ6~=KSCrS7j|*Ougy6P14mzHiuOKSZ+XuetC`bep&bwfBA&uYLdpZ4j9#XL!;GcI zt0d@PzF4F(eZbHu1(By%M_X$+06BnSpy`5*XN2-EN&Hq|MeO@ht)gR|w*V_hz7V7_ z`@K>MmIp#YW1}mmO)o?)+B;GEc4T@fH=;Rs=J_gXh_SeBSg${R$L5i)wjOW*iZ!w3 zsj0ItpOIuyp`Ba8D-{2buXeQw8IO6?Qo`orP!oxTDt`b1hm4pYePyk^mI^MGw`rPr zr3$bVqP<1GpnXAI*XMNYcpzf)@KggUwuSRnS8!=G^Z-v~hhHaQR&Usf5Z2VTEIt*h z0s#~R9Z(8IL?krL!TY z6r2|M0%|?T-~Q&HI(Cshl5ClP)G>*9zTRegXI+gx=Dx*%?l;iVOD=qZEN>yXsQ4YB z@PS)ZbpmW0cs+W0)AcKU-`)fdBY6Jj(N$z)EF*Rrukm|LO_V@Jqv?mxjHgiE{OIA1##b~A3|iNmqc0j6qo7bF^-;zj{%|tpMaQ3XVJMZ zZeXtr1kdw;950p1)=T#(0Unm}lxsqNk0!=e*~O~i(Qdnx4$XL&%2EjFBPTf-V&csa zX|86UZAf>2aRv27uh6cO`Gc?O2XB~#{WuY%=U}m*6qF@=R0@#p{6z?WP2iM_+C1GD z(2+zuB^9jEok7<~C6?+d7SeD93y`hj7Eq#3LGm+n#jsdf%(Kx0U7hN=1%9Xa^O~=wUU|xZ0IW`HuLK}%h`Y0(VHDiyG0ibvj%@)EwuE7Q znJZW+ej|x21G(l8?q-24^`z?uEY+P}w*b#4N#r+XWD}u`7PFtHBED0N*MI$Mh5`7a zjpXLRk2)U-vv{km7rQ3#Vub zI`;s`0ofLCQ>F*@unhrgGb4ahfl~lH)EV?@U?j4y;nZpC;5`We84dm+2F(!c1Eddx zK_n9EvRUYFK{ZUpo@%A_S&+!u%6LG(_qpG%7JvyLA)iO9{}%IXtfS!N^68^uZek{& z^o++YaUsV8LE&WafGPUvUyKPCUn<~kcDvXy0JpSX;zn$gZt<6vn#pJOGS$`8eRSRV zV8L>*H2MXf+qQy^2b#Gnc)56^y}_4#sM6r-(SF7+{^hfPZAkX!yyE(4-eI&s{n4+$ zYO&@ssze#g`AfkU-cmmM2ThKwx_Ww(qi(0*$flryz%JOKr5#K`h^#-r!VE!;EdGZA zY>v>Z%JTcC_PQQ)N21TX&wsIO6t29?`nmeXLPmtD-ZWSf@H^&ySc&CxfbBz?ebk;v zH4A&2cP!m&)FnaC1B*mn;x}KaUD~ukG!eUL}1Z4*R!~tGXQ#BOD#M=70|YrEnt! zswo`(TUeNRYw|PlkZw;>(qzK?5;H@tV?}SghsX;NLc#~QsjUl}FDCuGAtt8sJQ_sn z+4r*Af|Ue#1wgrLrrYnC&}&k;lF_O#+6R7GTt%&?=M~5CR@V|@=I2|$5Ab7~nQX>U zZMBO|D;+$zPsBiCUk_b7d#-D=!qg2D*aJ|Q)>s!_T?F@y+>4($%y9GjVGqjJ2{l~kXv)hk!fvt+e`?o7-kH zdNgTSP5^m|;>1yldYD)DqEG*0i+!n*w#qnuxqyVtf8o=3T$wbjQiytR1k|lk@9j5kp(xc!?z$@qgZh50x)(wlFaRSfwaX*gP*-PGVTlOP zVo{&<@7V0b&CGT=sqHptJ?k$7OIB7MWz+Zq3l> z|8-uT$Hk26;tzD#KAn0#jrCz8Zv42d37e7f(8eK4yb`#F_9y@AD8YR+zW;Y@+rMcX z{|{)o|9T_n4gPQU{*QWN?&kOCDtKd~2LKEjRm*0Pzr~s#9MfND81m8NBqUrGMEhu! z!w2VU9ULYH@|CZ5M-gJs%kt!F4yZjwO%@zPQ1KR|J-kTLz$lM$jQe$g+YU} zL%tOHJz3DJ)z%Z*Xu7+yvhueGw$BbaRoEppY#iRhN?5h4P6G$|+5%)2t=~Pr+@5SmT&ikCdsp3tug%da98R$qj2{!5y2=56sr>aUD55%n9 z3=HPYEH7TfwZmIXNBcyG-Iw>9@nZAJD7L0=Mq3BTrvwhhPU~xGz7II` ze20;n*@SwbicHZ{ThSK@Ah#k<6)^hy`{7>C3o3I-?_+(oHhM*mE#grKY93H84dg)u zgg^>fW#YU%$vlS71~M~mXNvh`@EZTf^a}}t*Wehot@fTU1$_8WKsq&EsNj$v;b5T@ z`vfvH^c?~zCxjeGi|^0D5}2L07qO2VZtB91+nw+_R$-72> zX$ebo2zPdi2osEF>Q`3qrY7(d1#K5;l`p_bC9R7hIASqqz^*jDasyS_Y8V}?;bN4P z1VsP=ie6A(4Uv{D^>B#zS#0jo*#UpF&MXmg1cfv-TS6m5m)P)49WBKiiVIIy5x)B43@(FXGDK6bIM6BIS9CJ9w^{ ziWoZ0)+z9)WI&MLJb*YD33sVq+3j_J0>PGn0U~3fS_PUUsly2_+*TdGK#iF{tUEYw zP;Y&CE<4zFXY|rfVCNifEq4}Q^Fv*4QwCp; z$k0C=%H1C>B|DgFd%@1Wx^OiGHu)tK6Dthkuj^1Yeb;ZaJ>Cef#-kG3U%$~x<8zpP zAtn~xNQpf6Kw9ARCzd5~cAvfDqA~MNL@cCA-&Z!g{HBPGHs?)K0shaz`OvW4H}O=^ zat9$n!hW^;et1-T&G%%odb8{agfW8rT~QloWo{jX0mXw^m$A-!O0iGVPCb1@Hm-ya zfJ61eLRcK=fe=Ja@yA@fjiBTF=UabEd(7 zO7ZB~^$Qj*exZW0Xy3vCc*}-JhzK#Mr6 zh*Y;Sf>IYcJ|ni}mZ$Df>pj?9^|{@57~92V8ESLpdVu?aPbR1%()ht&>%g_?`;{?7 zQlN}_Hl(k6DwTKIrKvbPn4mSIf#_A%r{FiSXH8}F@=1u(odfloo*oiD1JF;w&SnK5 zjo`C5CiZ|bsjB#7F`{?6bF>SXnk2-hXg`}#nUY?8`%5uFMV()WvBeEj&yDoHXBH|Z zs@!U&0I%zFFr9SZ=&)WOLM<@|+e~FJLK{|WW|qs9F$`YqPUiMLgV6$qtImtu8uy}g zs{IG;T@jgY;#iTD|Gd7eqpU29b;18W|4XgTNV08izY*=k#dN@@U#6FN`kisC_hs75 z2Mb9p;mmsd=@Qo~=+dqJlp=puD8q_2r*T7(AVY7~_KQE+`l4yV2QVnrmJ!!> zdl1k#@>$4hYI2U|D@PSChId_Bjv9Df@iQ_Ay2_& z{DF=R3{dIn8u4^=xcPY&_)=O;Mwrd57TxL~J3n|p3A?v&*0AFT3BulL&iOjA8zxSbIjd$zVcNUAokRWir0 zR5Vxa>3791rIoMg5pT}ahxXYT`VrS=`&&BjG5!K0t>yRw`2@t)O#N;n^2xDc(M{3W zpXy~RD^ieQIf4&-pAx;es==qDqubRJAVBlIFMcBD=CQO|2fl}G7uV*u-R}UqpiU)hv=oIMohQ>n zIw4t@G?IFHfazS;p!9``hKMlY9};osw!H7aqr#qg`VXde{V(VTk{7LB-R z_LDzfsx6ilm%7@8?-(QkLJ7CE2gmg;+h(*>-@g*oQZ2Ev_GkmXn%_O$A_u>4b>xqIv>B3$o zC(NBma6mWd*Y)}1S3zweB($1i?-|nM*M*ZUcd!}Mxf9R?^sXMjYk9%Cz;9Y9_aD>v z9q9dD{%E#Z`9VEWXCZ?!%&b_i+N5Z-?xE$^Is!0`QAj=8$_C!xf2H+pO1<4;Nn%*y zy^6(A6{S9h06>jcmOeYFq%Q;Iwf5pdT}RXPGkUvbDH!`1_ilY9mZcK;2%DWfGzx!3(A4bB zo2=|XM5k}+Ou2&=q;ED<{@b^2Nk{k)C5nX_&xOTBA0|H;#dbF&hT1HATNm+R-}+i`3E zZttD-%rt#KK!Blu!wT<+X<@n@vLQ)r$X1?~IZ7^9A+|Jig9@)H>5x`7#%OHZSRIrV zNlr+_Vtx-3{rV;eHrd#!u4Ejj&$GVRLm;ZA^3`(o8*!vIV6F(fhjqpI_OtH*%_gKN73Q9`hK9@fu z+Uj2anj9a$>63JL{y2T0C%L}r9hM-|p{KWr(1YN(ap9mo#_JZ~gOP3Dr8F28kqR(ZUO2Ux)M&%03z#bJ<^>n%4|ROQ3Ncj?Rwi+~cNN4UITJ zI42gVsp@lk&i@pV6{9g5`%FbtjtfMCYy<8JI*v45map&Z31q*t8SaB(Gf!k$Y68R< zPQ$iZ_Y2(pIo-w7TOhzBCEGf7pT8|LNY-riyiP$K#Y%O0PM0oV&}3FS8MS!x_(i+P z9HK1vZwAVCKh5sLXK)!A82}AdnN^lONDq+#4ODOkP;jEQL>+e{=sJT>+nnuZg7K(R z`D|WU4GgG?&bJZ9#+@t=1h#S-wel4+wK=cztNC8{J^HJDiQ2B7meN1M5v&dGUA3?< z_j5!lDqv5SrJ>kvYZLM=^OZA`A)v#Y6*y25z<9KtLiW|4T z{NeS7*$YwS6~k{hE}(^hM=hw=FN!Drz*~wt9`sIt2DZ&*GwV98>qo>$a9pI6R5t}~ zbDPcru=|G(1A&?j)X{RsAl!idHGitXPRSUF%fT$*%SQmzx#)O{vn%Rx`L(gMtV~nd zNY7P^=He1FQ7qEWKz-v!?bk~yY92rUtjU|*Al>yRJy#q^@w`iCyf`agJ;?*yWAVE96NQUdKV^ZQB8qa?hOaD(fIE>6&48Ts`_S^XQ zhw+7-#?@d<^Im56We47U^}J4mDzL#3kmMubmXt#E0D{0 zEb87jN)YSG{o2Gg97k z!#nGrOn7wyG!tycu)44Ks-u#&?|-;0uK+NMlRVHF+yvGO=?gFJrL&*koim+v9$gnG zdxQ@G_yUJ|+HJ7|hsUy35%TjnYDW^9ow0V#09f^8IQt%x_63JVp2oz}5WqteheBbnKyrg=Bf+vnZsb!7FD#YReA0IRj0u^heY!VLNJ9q_=ZU+29 zO8W;>!wj>dW6-PieI6jGFNi|fRY@qHMQ2++q=MV)&qU!*v?S+B(ed<(Wn<8Ixs|@; z9dp{+7IW@8@xK!IU|r<5{W}1G_2o3yGcyeoI8wCz;(kXd-V|V{yT$XywS3eXBIA(H z;Wwlwj}a}G`zD_QoF8;@TvL;Hw#HTtTnLSfJF;ihpca)_~r5k0%BH zc<*A+oVE4Txi*nKBQGzHh2ZhJ*20gr$H?-s=zBB)!xoWL;?lJJ%CZ;jqw=Sps2HNx zm|A48#eDjqxy{}Z7Pm2}tgy!23dtC1{AaZ48dg>dW^-#xBWbN{>S{z`yYsDQ74hLj zH1x`}U}=Jl9syBUiL^>-A`TyZxV;}0f`q)&$mPCb5!#T|)%7&YSo<_POgv0JI8a^f zbnd-K-h2>)hK6hZ_j>{6VT53v(%(}U;^mOX^s0sGwEdjS%rpTnSg|%h*Eo8u-REps z?tK5rL7775J%2yTp2>|wi&e%E=p?i(yBsNUTU)J`Snl;StLY{ulOX`}JHDh?v(g0MePiMxLM^r@(NSKDA= z&dnhMTg*xDu&WUadnD}m_5Um!3eU+o16Iq%aofS!XKCSMfvandlPT)e`2MIz6?*QS zpY5rk zeSFb!&SV@AwH}rq91x_O#G8pW^35EmgrW~fzW6yq3@0N==P4WAXT8CH^8@? zic+g|!LZ2VIC#pDaI@7TRRQB7SECx#=jNK2OL!ps_>2s+5k5&eVjiq9TmZxV1H4Cz zx0?Z#{ss$-+-{qkbMCuyN4=G!HZ#*jxw(!aT#{{{4CwqHcufQJl$Dn^UAtqz zKOw1SJ>gWdEy+@;)6+1R;O{rh`_0&xB2Ar@qXm|uMg-tn5U}VvBGVt7^_ zqlla567pQDv5|n#^kuc)3ZbFHsV;@*^3MFj-I)@&2g}D9|1E7WFOaXS6C9bw0_`lQ ztS&baM6FqggmrTZlv_f7_L68}ET{bDN5+q3tg&zYAJ@OGF=*E4!y*qp-uVx^nu|Ax7 zMpVPc!xItdr%_k0s>TnaS5j8i(~uHemipOI7l2P_denRJ9au1?CW~^LL{L_iFK{Yb zX&*-_QvQ>{um5`0|1ZS2|Fww!VIna<4;_uDFuPpTBnjXc#1}$D?4-5l zE56Pl_4)o=5>wL$K(ejn0P3prL)yYT^oM-@8fvWeW3!ccnu=Hq44Qp~c9xJb$5#}= z9Cl5@ieQrKw(lNBAj^S7T9ZpH5BCHo8=L3JxyS22fjl%bITO^p*nC+7KQ9P9T^)K& zZjh4ka=H1VL7cjEbi%@57VQ1pnlar%dZRur&0l&PG-%8!wY^+9?5C&F@Kv?7YrKs9 z^71Lh`K9L^V21wtC*6 znj^Yez8sb9V>RlJ^#7?4y;45(&=-bp02an=4`w`Y0`-WwMl`uXLQ>wXS0HvCo$e;E z0BLB1s4#DVgGiqb>TIMW`e4Krb&#B#slzsHn8^Uz86C7GAe(gNwSxX%Q`6k(;MH9! zm^;VU7Ehe2Iccyg&r=|yW!;{JMl>2PEe17KS`Ge=n~GfWqHnI}lygt!^|(wK8X8py z1v-C4EP&%TN_D}P#hgHwywJinl%tf3fxHhAQdh_5Gy~TERnXLO7c?~m-Dg@{g{I?o_&Zt_ugxb{^8~dMW;SW|tgPFQThUvm}9MDE}7WQ~tHsWHZ-svSP zwC`Il6nDIhm9RGQ@nwi_BNSxKxvH&BAW=+8gJ2H%hd)uM!=ZN{+Jq z&1Z$6%cUc0Y^-t!J8X8NCM16OlK%w<^M$VsI7fM6g{}VW0{)^ei321Ff!aw zQf6&aBXiP0QFLRvFinKOm|Qq@V~$T93|fgIw7|%$V=$!UqurP=SY2sp--hnuO}Yja zy)dV=$@9B<`sSqPfA!>?^S&o4a{Z3fE&C6CtkLR7#E6VsM;B95vvrLs0ODK1lbGEtJ4dl;qmVvyFFkv4!Z-;4>2J&9`CI^?C})@EXQBbnBDlix zMMl$~?s|H9_JCN)0ESGGDg7Xm#R_FIL&!~?v{A5YN6O5s+39qiDwZrA@R8zNKtKSK z8S;I7ySC>Zxg>5Di`8tl*d3JJL7B}KFT5Od^IYYvSit~*h_zwyeC~*T;)m8wyMs!8 z`9-gVL4YeP-()mS0*L6k=w$iv4|5z2DlCi%0115V*EOei?K%9v`?V*h(dv>@-jz$U zxZDl7c_)?*P~FrX%qxCAA*Q0LmfQ)>`1l`m5gyKz9?ArO^A|1yKwj=%&taouzY_{T ztFBPaS#1v=S{ML@$8+hmRoR)N=Pz6yzCWHX&yJ0WN+Lo)eEky-l0Ep*vhz8L1=$dcbDm^9JoFwvmzJ?WASzh?b z$-_iv2Y?a%MAP*S&nM|=Thr6FdOm4rQtJ&yqA}?AfMsWnCW?42mx}@L+wjA_cSO_7%fei~G g mainButtons = { { 10, 184, 300, 22 }, /* Add, Delete, Info.. */ - { 92, 215, 16, 16 }, - { 136, 215, 16, 16 }, - { 180, 215, 16, 16 }, - { 224, 215, 16, 16 } + { 70, 215, 16, 16 }, + { 114, 215, 16, 16 }, + { 158, 215, 16, 16 }, + { 202, 215, 16, 16 }, + { 246, 215, 16, 16 } }; /* @@ -66,8 +67,6 @@ static void DeleteStore(const std::string &file) { if (storeJson["storeInfo"].contains("sheet") && storeJson["storeInfo"]["sheet"].is_array()) { const std::vector sht = storeJson["storeInfo"]["sheet"].get>(); - - /* Cause it's an array, delete all Spritesheets which exist. */ for (int i = 0; i < (int)sht.size(); i++) { if ((std::string(_STORE_PATH) + sht[i]) != "") { @@ -153,6 +152,56 @@ static bool DownloadStore(bool Cam = true) { return doSheet; } +/* + Re-Download SpriteSheets optional. + + const std::string &file: Const Reference to the UniStore filename. +*/ +static bool DownloadSheet(const std::string &file) { + FILE *temp = fopen((std::string(_STORE_PATH) + file).c_str(), "rt"); + nlohmann::json storeJson = nlohmann::json::parse(temp, nullptr, false); + fclose(temp); + + if (storeJson["storeInfo"].contains("sheetURL") && storeJson["storeInfo"]["sheetURL"].is_array()) { + if (storeJson["storeInfo"].contains("sheet") && storeJson["storeInfo"]["sheet"].is_array()) { + const std::vector locs = storeJson["storeInfo"]["sheetURL"].get>(); + const std::vector sht = storeJson["storeInfo"]["sheet"].get>(); + + if (locs.size() == sht.size()) { + for (int i = 0; i < (int)sht.size(); i++) { + if (!(sht[i].find("/") != std::string::npos)) { + char msg[150]; + snprintf(msg, sizeof(msg), Lang::get("DOWNLOADING_SPRITE_SHEET2").c_str(), i + 1, sht.size()); + Msg::DisplayMsg(msg); + DownloadSpriteSheet(locs[i], sht[i]); + + } else { + Msg::waitMsg(Lang::get("SHEET_SLASH")); + return false; + } + } + } + } + + } else if (storeJson["storeInfo"].contains("sheetURL") && storeJson["storeInfo"]["sheetURL"].is_string()) { + if (storeJson["storeInfo"].contains("sheet") && storeJson["storeInfo"]["sheet"].is_string()) { + const std::string fl = storeJson["storeInfo"]["sheetURL"]; + const std::string fl2 = storeJson["storeInfo"]["sheet"]; + + if (!(fl2.find("/") != std::string::npos)) { + Msg::DisplayMsg(Lang::get("DOWNLOADING_SPRITE_SHEET")); + DownloadSpriteSheet(fl, fl2); + + } else { + Msg::waitMsg(Lang::get("SHEET_SLASH")); + return false; + } + } + } + + return true; +} + /* This is the UniStore Manage Handle. Here you can.. @@ -226,8 +275,9 @@ void Overlays::SelectStore(std::unique_ptr &store, std::vector &store, std::vector 0) { @@ -309,11 +369,12 @@ void Overlays::SelectStore(std::unique_ptr &store, std::vector &store, std::vector sPos + 7 - 1) sPos = selection - 7 + 1; } - if ((hidKeysDown() & KEY_Y) || (hidKeysDown() & KEY_TOUCH && touching(touch, mainButtons[9]))) { + /* UniStore URL Download. */ + if ((hidKeysDown() & KEY_Y) || (hidKeysDown() & KEY_TOUCH && touching(touch, mainButtons[10]))) { if (checkWifiStatus()) { if (DownloadStore(false)) { selection = 0; @@ -330,7 +392,8 @@ void Overlays::SelectStore(std::unique_ptr &store, std::vector #include #include +#include #include #define USER_AGENT APP_TITLE "-" VERSION_STRING @@ -45,8 +46,6 @@ static char *result_buf = nullptr; static size_t result_sz = 0; static size_t result_written = 0; -std::vector _topText; -std::string jsonName; #define TIME_IN_US 1 #define TIMETYPE curl_off_t @@ -138,13 +137,13 @@ static size_t file_handle_data(char *ptr, size_t size, size_t nmemb, void *userd } Result downloadToFile(const std::string &url, const std::string &path) { + bool needToDelete = false; downloadTotal = 1; downloadNow = 0; CURLcode curlResult; CURL *hnd; Result retcode = 0; - downloadTotal = 1; int res; printf("Downloading from:\n%s\nto:\n%s\n", url.c_str(), path.c_str()); @@ -191,6 +190,7 @@ Result downloadToFile(const std::string &url, const std::string &path) { if (curlResult != CURLE_OK) { retcode = -curlResult; + needToDelete = true; goto exit; } @@ -203,6 +203,7 @@ Result downloadToFile(const std::string &url, const std::string &path) { if (!filecommit()) { retcode = -3; + needToDelete = true; goto exit; } @@ -240,6 +241,11 @@ exit: file_buffer_pos = 0; file_toCommit_size = 0; writeError = false; + + if (needToDelete) { + if (access(path.c_str(), F_OK) == 0) deleteFile(path.c_str()); // Delete file, cause not fully downloaded. + } + return retcode; }