From 2ca994c3eee07858c0807d47d83c5df157e39030 Mon Sep 17 00:00:00 2001 From: whowechina Date: Fri, 21 Jun 2024 13:47:43 +0800 Subject: [PATCH] Identifies empty vicinity cards --- Production/Firmware/aic_pico.uf2 | Bin 986112 -> 995840 bytes firmware/include/nfc.h | 2 + firmware/src/gui.c | 6 +- firmware/src/lib/nfc.c | 34 +++- firmware/src/lib/pn5180.c | 36 ++++ firmware/src/lib/pn5180.h | 2 + firmware/src/res/image_vicinity.h | 294 ++++++++++++++++++++++++++++++ firmware/src/res/resource.h | 3 +- 8 files changed, 373 insertions(+), 4 deletions(-) create mode 100644 firmware/src/res/image_vicinity.h diff --git a/Production/Firmware/aic_pico.uf2 b/Production/Firmware/aic_pico.uf2 index 04c24603b0bc6e7db003f7d62b67d0a0d8357560..355ac22023a6ffca8e2cc74922cca994302735a8 100644 GIT binary patch delta 98235 zcma&Pd3+Pq`agcoWNDhV5ZXf1eUcO?O{pyfWD`PCrb|kxElZ)GWi_k@a0!c278Mn> zGRTy+DvNp%MJre@*Gsi7*Ne#21W}8i78inwI#oP=iKVTQeX8Pd#&LYk+SBh9?I2q{rj zoNMMmUo zEY`FW0Ve)Wxj_|*!7t%fP0VH9hlj+JSS*P{|O!LYXoBGW;wV zf;E~pMw}efw4=72t*be#znHGFV^%FHddT1RyJfAYU2HSyKj1PeFk7$&wN<68*Q&)W z{BdOgUci5&OwY0g3fHu7%ZkP>yW#H9J&dBnqdttHN>t+1fXm&%IV_ZB)8vw7a-vxj zLUV(UeveEF)1GG;wgwccgFqB>w#mgmdlSkBBOO>QTF;{B0*yE23R(8?cx{(n~?~;*-^d^V)4n)oAX%gFM;-`$M( zZ@=7n0KPSDV#GiFEpDRRZU`G7lt6O2PR7N=;BEb8n(jxCCwqEPHg*O*`9aJgoyi<6 zT6$z+oR8!e>qXfz7h+}Nd%c?WpyzPF3--@%d!SVvSih*bbyp(D?cz0Rz9LzeOqKC%SqF?pvJ$Mu47b#n1<{GnLm?DYYp2fu1SIwcU? z<4e>J)uma}OJc=yz7zw)M^DDQx-ed^(IuB4UNxE6AyypW9|nk7euJ%ZQ>=KWKM{Vt z;!BvBjbg+F{%|%FK|vvo3!V{n4}(p+DMnoA&qlFgb@$-X!6h>BJ0B8%4k%jl+p$>S zd&k{17O`pSv1dajc#1YFbqH>reyC?qPH?gc}=+gB~{63W^@^w_3xg+oqCIr=n8VI;)v$wZ1m9 zk$cVB#MO4ih+hXS;1o*KXqG#d>5#Y?erMFhh%W?DcAhI%+zK9$cftHo(Ol54ev9Bo41ugl;xT|LC9Higo=-`nqaZm&#y4c2Z%i6T!z+;!pg& z@rER|Zv@JB;PEk{!S~vXH=R;EoqsJpb!4ol@>T#1c^4}(5P#PByIY5d8j}MPklr?N zO{{pB|0CX@Zt^xkF%%#n;Vc-Tma;%iWdU+da949xeWf%ON~xDGOuQ+sDM0Lj8`WL0 z;yV7$#8FA}z4P6Q7v=hEX)3YW%jmDAD_&HI75uA-y2_Wq+0-!z%`qe7hgy!5WK#9* zo(d_0|450pL!7uM?g|FG0Dm3Awp|$r#Uu6<&_Z<#)#hoiwx&I-a(;}YGJFr0i5ox& z;G=0swp%s|IW_G}j?cvydoIewjr=XcGI0sNXjtktT_9HM?(TNWfbBy)DEEfzMyQ%m zK^=(n-Zq0ZYi3q?iXD#`1v&=DXv7s@E#&gH*Xu{2DtH$q{yR8Wmo`&xGuqNhaAC4( zRGms(+>=s~Qkrkmh$8@>@G0f!dt+EU`9EZ zEFV&FbP8e*K8TT+35^>`6+|>`GN|KJ;*&nvIZb;9ck1L~?ccGn-#vBA;-V^)4@uJm z>-D$JEP#Y&!>{O|4&~S?K(nK~C1rHx3~#-DTE&dgeE1$EUJV#+Q_BnM4A347cFM#u z{)rS_+;A^880&0#tr7zHDE4#%cYyP@ zBfY$$0lEs;Kya8nh_n&*ZAmlb$OudsC(6~h?CptAUzG>3!Dx@Srr01r3TgsFtlGNy zbtv~&Xy1^2P`SQtX&s@u3MnoP=xs}F^}LWVbVx`YP?aQ*B+JgXXBhEr{>O~exFded z20aI%ThYPoJ~<>aD%71~Q{nSCR%gucYT6a0-Jm2X3bUb$bO9K3LU2OJhn@(|mOF=l zdhPsncIY-66vN*ySTv~d$2V|JQ2i*B>V!jp0VNsUK>YX4O ztv)$aC&TmmGc|b=9vdaT5q#PF*CjO@B_;=yt#(Lf8i>h-uzLgaA=`qUc|isk%ncA5 zOn~>AHe!>%LcbxNo#0a0kd6^&@$2;o+a?DLHf70yO;O^GAk(D)$}u4%sYA8`^)3kI z5bSNSh{=w1AsuUD#GC-qDNr56h6jS9ac3}Fb}=4k69e}4A>{^JjXm8S^eBRZ;hh>J zG&xYtAXjYZCCJZMm%5B3u?$S8PA^&DNOnYtMZs^~s?y)wQDy&y+-U@XM1gS8tc;h6 zW;|6iF93*``7%632qX(NZOOp7%dZ6;Qa2%Ek}Ih+3Emh$Rt>cN?Y&Yar1FchGR=p; z*m3YRD)^`SprhkNtauQ0q(6mn}!xQBH&H5*TQ-E4?%WzOM4y$7#YyzVoG+$J5ekho2fYiJqK;)dS{T1Z~=t6$wE%T~CMK6WOc?O)oz zaTAx@&wrAw%MX{u|8W#Ms318@T3K3YdI=*ceQ9OsrQuxKHdIQ-P%0e+hJEP(%Yc}# zH@z$)6!Y|EKr9p9{SL9rQ0$l9Oo*}Y?i$3{Q0%*27GgSh_cg?Hq1eS<9mMqT?gDh0 zJGcf=Y%zGqwxbYfg)ngl(wrgMLKqHl5uRQM?HU;Vf!nAc3;}{PcxFL31jS?uJc}R{ zKxWjyvkt;zKzkQFw?dc!@dkMAgD?m99EIm82+0sX1J6OP=bwx*#)T@*+*#PhuguNF ztNDj>Z^G3l|B-up=tEvA;~U10&&$cX7z{#fT~fiK0`%?d!Qx10l<#%Uu%fI+E*-^m z4H8d#3s80)Vh4-KJ^bT&l~_FaP2R*1oBY*r3#UVmBMEEHO@r2ge=>iT?%^I%x5PsK zHmgUeBTum#8;~wmzX5vnYVqfjxF8A7>8}>$BIl11ANQ^*jS}r%Wm=Tj>fLn$nvmQ< zPSS_i?!{^O@OGj1A>D_HC~<=~N_^J)-icHuOP*$7_SKZrY zqfHqas}$FHEnIL!s`>y|&E=b-kT$ju<(rJAj+CIzVNr^=d8@e@$y&7)z7~exR`V+- zq(jyA(1e?lD!oCSTwcj3MXMJva!XKG0`VCqKbv3)8DY}Bqbi{fp@jz7mI0$7cxpx> zM2frv-q%1N$<=^)I{AN08iyPB-zMoa+k(qk z5e50IDR(6;4H9KaIE8pyP*TPO@f!ZsDa&Jq27bEAmaFv8ND*dVkqL=m&?!S0A?T!q znJL9VykTl_;ZOe0uh#38R;1HHM+@^x@rwVTn+1I@gTDRxlk9Q8tVQE^NDKe;)XC99 zg9=?XBDry8>QMaPNzYVW$PlL0=>(`PM(h;GPdgYOmbDjStJYyJ?%?eFA=4=Q^2v`( zGedCmw0Q*54`(Y7BIGOJ9gyrMBqVNci$jSh)*4%?t&0}pVKge!$;5+x7)!&m1%8w9 zvP^u{Po89ieT;wAoIW}=K>XM_;(60}<;Eo}+PGLI4hghDOu|3v$9g&78LLb@ezMz~ z8B(f9hi~wci!!4w_=ejU@e04V$bi4&A1IoJPxJpOn!zysld&^madf}Od3YVSMR6L& z8_P}};_k%>{U5T=WWSrJXOU8D;Eg4ZVHN+6l0y9H$zMv0AxUK;@g;tG*-*ym=WEJt zyY-;out~0e+GOEiL}pvGc#tUg6|GZ3UChJWOPtsa-2k=(3@gHz+uk+|#i2B$E{zs% z?afET0&9D-L(i4H#0r6vQPv?LN#&#QRlc}<){uOE4l-=o!8VyTEM~;NcMsv8t(Z1M z6?&`gd;3K9BzQZDXJ>j<{Yl}S<->+{`3P}!X_JYyZCH%;gTya<;|YVrH$q>gQD2Vx z_-86i%pTv#u8Ij*)6WO%C!#^3&Btd~7BMq?{JP4NStKzvkf?>kW7_cW(dEt&Y@G_} z)-PFqWIbd}4-q?F2|6#S+awd8hu=##kzWVl*E2l_H_0LCOpi=Qe&_LDR8GX(PY$_N z>ibq@Ca>*PTiL}OjMfxw)mrKn2R%0Ergd;4e{0nfSmdu%jf6Tmx_WTPR}4!bj97djxHHskmDnnKkN9L4lnt3R_2F=N%`!?w%!mex*nEr38m%ow3##nJAtrpm z+?R?7X+KM-(@BS$ms>M*h<5->c^MLq1<1r-><0+hRzzv)z$Uv|VYt~Kds4nv!AFay zr5PK+H%}RFki_OvViEM;LEF=+)ACkrv08kLFQ`c#@`$(o1oKi6%Fk)>~U_U)fOVi__64#&us=gL&}9XmJblzQ#B$IyJi)6oQ(iX6VodyJRpXdZ9}W ze_!lUz~7g);`iS9vV$K4&=?PRL??GHwy@^2Ly`5dK&%-xdV_a3O0 z_kf$$fWMfuShE9swQIamv+$HcLt0vGGS;+ID>OHh3eANF6&m|Qh34ERN=?`23e5zi zQgi*fQj?z$#eceRoKV#_i*39~O6*NkVjH;}sBob{?ZFT5$Lr=O7WjshGU0}ck6RKG zo`KCymWw<6U%DNT$Vy0L9faKw*OGz)@kTJfR`L!4tSyAP+l}yi9l|LHXCRR7w-cU6 zA&~wr8E{;Ocz#<_`Oa2o2lO&sz~c?FNUm4t_GAS;@%*+WLq{3C*(ll&qgU&Ko}oR^ z+8CnrDv00Fiw&Y4@rgPx2MjSk;@g)b4ZQ+g+0ZPA9g9Q#2kWlX!FmDz;}Vuw=Mrg= zjbkM1jG?T9@>G}f$cW-gRkl)Fe9EKKkx}E+l=AGdvC*-Rg9{;n+5Dnqv+!s9@nyAP zw=@cF=l90?_E|h@!etRI1%)uLQ4_! zB=UExn21yPLo4nWU_4f0JeFc?HwQg;_ZC@;%2I8YP;*UV@oHPnN?gdZw%MuEdtb8U z%({dw&2KCgVb;1nHMtAv@`3$W{s~)h(n$E8-uHbEH1nnC;nbifjepyw!!i67n?b(N zOf6T89Vf{jN6GIm0{yPvxm%_Yp-N?8nxzrEVK+Z&Ri?722y1R=`HEHbxQYK{)x?1$ zjh9%Cr&taxdG84@wX4I>%*d7`SS=8CLg3joCcKAVyykBMC_fF7BhP(A9Y{dN&;aBAiSSGEQbCZ~n%`6ii>7 zv*_K$U%Gd$?1ZH7>^+pkDH7onig4lLqYE1s<57$=dF5{ND=uct0$}jvVxDy*X6}ND ztQB%mZ2O$!xLI6^wWBTBmIA8-!+Lz4-}!3C;)zc9egOh0@884o286n)(C3~2!w6`v zFTlK>>JBmy6b*FsUKR0mTa5T0{uf7*JQ2QxEmCufq~9%+ew~SkC9}x(HZ{zkWEuxw zj;?qb9lcdmfeT-}RaI)JTU8kg6}l4U?HbJJqPEW7PQ(+@jW^Gdm2{g*={EE$JybLD z;p&RTT2P7yF^%F8gI0i9-taEBt|&>i zDa6;j%S+_qk|59CzmORk;P1bG7!w`f_uoG@c53fLNB~T6La&nl{Qfav-6ohMz9x$A zO;#;%8}Bu^#{j>pfxp}Z@ccHAY0U`98RhkP6#VG=>TUNxrCSLt*}d=_3j>R>H^F2w zWQ!?IhDheNK*s+6$>4*4%LTfz5GFt%)}I2;N(f@x2OMf6D+orIQ$?e&Gsl`-ms1*J z%jARg(c!|x$L)w=`@5z`D@T=&D#@uhSeaAuU}a9lg0!1$t(>}!XLsxxPx5#fk<^#Z z%H<=|{ zg3EB{$pmYd>x_^e&!Fc?|CD|JvOh&c~KcPE58E#I_j zT{wq~7Ky8c;@Y(Km{|>7!?oNFbiC$AchlOGwL{FkE}ngGcJv`o!v_n0PxJRZxM!f9 zDw5a~QEU*~aYEA`Z;P=tnY%kZZW!(lR$G&8Ji9v^U*}7AzdfME42gUOMNWn>-ga2o zMYTn;$)9SUu@6a(Uxada_K|DhY%y{YAx9Cy`o;qr-bk<^qtE&FAGbe&ZmPUgh$dTj zcF*_nI=bC37E9E{6gANj!ZuA?V);_wA$O{E@g+eI&puu<W9#@$ zk2ee$p+sU=La{?e8!Yf8qocOfw#MQdSahj&R&$k5{WVb4U#Ub`N)h(!VY<&=EJE3j zL&_2Nm_126yZ31HP-5-`#9rrJdv6XIL-6s+{_3}kViN~l5a?Rz_JU{pCy0_)lJ5H@ zlAL{AD#AupX0e6xLGV4r^mDLM9By5uX_MO!`>0vgxpx)LKWs*yYT9d4cy@mx_VeTR zzZ!iv6woXf`5feb*`FlWtfFd8W4V;Ha*E?>fXl4&SE*6ss`;xPG55Ia#iY99*+$AH zGbO^A6ydDyAKcj(ISZ^vGocQ;w4)JAWbK7Y^Y7;|Y-R{?&<}!@ zncctxW%KMa^@_1zgM9w^XO<4IsFYY#QY>zNBF?JGZ?^41sqBE%MV>u4 zUW1nWI<8I~#5x%GT~(D222e!T_U>2L?WlfQC!9BzP}M1+JjKzLgp;R_qD0^uu^p=u<;8j7$uu!HM@?v2!3=Q=H0 z9yRAV6;SE5N`!*%wQxUaK1JBf&9Tmdq3b~dnZv9_U2O+AC1elJo}eTykR&dk2oJdq zazD7ysPCLdG8#E1_eB@ZYJlH7`+7fNTUxm3QjO2f``9Imm?|1J7D6Yhmi_#js_n1DllAdXWF-`wGHlE&t=2nFB0tlUUqFvFOkZG1cp<27pI{ky&;qRdjr~%wEiODjGi3(~(Z~HX8&Zah@p>HOB<=LB}wa{N8yZ9FJht3wpS3-r_6539Ip)vkGShtG5dRCeu3XPLj zNP4WG^oVO7gr4N~a?Md%S4?wk6K_sDpMYYTc=jBXfIB3@J19atHfPQe=(1FCC@0SO zx;f^2X6}+sV8DJX5emLf!i}vhg3#2}0?p$S?#x`&x!%oYJ>oVR2%)o|&=qcDS5kx* zx{w|jOx&#;hB+u03OLVRspj5+YW+N=>MBXqRTSZuNiEt-gB!Wk83#Bte6|U9v7-~5 z>SH{6fg)Tj5w4~PvG{QB#TxYeWv*?ra4uKFOZ4B=w_b1N=dv+BD{+t z#2@L<0Z#R7E!T14RI$3bgPji{4nubJW%>yhRh8M{Dw&Ok_9&2PB2f1nqBx5V#m zieCYmlh#>m;c6Ci2pe9Rkj@(smNX5w(#?WY) zk&R*Waa|%5e7}TS(0eJu{K88o@VJe0{$@t!)2^_ikt_L16oUD3_E*Zm9Fjx_MTo~0 zz`Rgral6^$Qa2yraA6D|-8>cu#Xa~({67GCsbU;jJ9z zhrPtJzf;NEED7682^;jHdUB?I4;RN9(2}CrT>Mi>XePA#JbPn+aQGI9a0^AKK+$~A zW9W@;mVfjl7tg~;$bO@WU-MVXKt61h$hJ~sT|dO|F;|t7WBI%v2EC5;8dw{RdRcXj zXT4f{g`eon#830{y~d#=e;>0U4K9)EU`egG9>y1K`~mMkqgZ&K#Qr{teb7z*yY)`Z zo%UjRTfHt?`EJs!CQ^f)u|$inck|gjCCn4u{DvN3pr>}f#OHpB4-zMMKeU+4$b}0o zS*pmh5Ve!ho-c(_ck@$x8?cjq)i*y}(2Uz8F54(BM3)W@8FJ;LV>jP9;Z8E%X+2H4 z27v+NJ{5-tO6UelLTtQzN6LZeG04uz$0gj1QMc)+=_wWuP#CvMqPA0_o?xb0R#--j z+?EJ0$))DE{;A9Cqgtn5p|Us47cbF=xfRJBHmMwrgLPS)2QKs=m4M0MhIe z3gmcTq%wA=#A+wS>cgmnHYJ(dDvmu}ly=ypQN+i{N~2Sw70H$%7ESv#VU!Xtiuz?Y zkfMFUV@kYbz{-#iGCjYG;&*nLdU@IMN0y&mu3k~L;*k|+SE%nOyThasSQTdD_Q8Ox zybz&lFjg)VW~#6e?-Mqu@Dl?(L2bhG0g7jirCvLK`bUEm&JQge7NlQhuAF}B^d+3Y zs{1lR@Wn*+k53<@D6?eGacOaPWK2_BN_DH3DVD`C&gE&ps0B7QOc^KZr+kQ_T)~aA zV3$c{LaB-mwckhSip2JqFL9y34x%%km<6=mO;H+RtF&9Dgb$`{ zhs@W|ln+ak4^x!t3!1il91;t>iHUeD`V#3rN=hteiv>0wSK>@zeLNPzhRT0LV(Vi>LS!JcHA*!9w_E!oGq*4%u55xat64wgf4#OkD${P1bZ1zxWhB*!C zja=L;rfc*{GuTx7fFx57>>ejv=Z z@-d0;V-(*U*g?ahj^bK43;_$^XtKSd_?o+tQ;CmvJKb0xWvwzl3pD{bYQRG8vJ{dS zk_Hkd3Nuo00rP&h;7Gyc*|&862?Pot_}JYK?}w6kATp4P67zh*^%R^IR?7Ieq}1b- zQjNt~D^af3m5uD}B=(1^+f6tLY#QDbr-EjaOe{!=ek~0b3>wrOh58fya<3q!;pA|p z2yq!yEk&$W4LhHa5j$I;8D&vfXbC}JGjNJr1sivSsTp`!G)b!@U{MCP;AO(03_KjZ zH+zM%8F=b|`VEr$4V3yKD1F_nwWiykD>+*499Aynn!vJnjNz}~r+s#P%`JQCBg(d4 z_1jjso5g%sgy~61#FLbWW9Fz&n^&DQHx=%pU@4 zDGB5B*cv?nrj<~=@9hTRVLje9zbvA_Py~4X$c)UgqCyG=MLf=g?Q&_H%m*n!4+=EaiV9RF( z*7@Y?BJOVocvv`6qeFRQWWC8bFVg3kQ$owN9JPu!&l7P@U0*{4Ffj^AE zh5-@#BoX^45o1eL=n*bTycagv%3QIhVNgSM5`$}H<0j@^zi>JmYvbDd&xBl90}0F* zu4H3_oQMr^7JQ=={dM3|6z5z3I1OMhWty$mGp4)O)6kk#kgNe#C}Q?(vkJUJw4N* zfyN_|UdQToCYIh|7uZ~!%_R7RvRtgkEyCJd+}x-0Xgtv4;w?-ra@E4Fmd(l7R)tS! zU3D2{A87?P58L!DFj|DBs!|SNA*j=?1bHfVGKjI#Am z0j!JCOo5qE##-aBWHe6iIAJfAerp}3sE)y8+GUDxU<@AU*%_N8flZV^ZJim0l#^jM zGB`+C1E(u{l6%Q)=oHwoc$uCsypfC826%Qt0oVu6NF{_9#^NOdNotlPG*c43gAsN! z`n2X*j!d*)b{>R6deOa2FRXrA6)>}DN7&yoNVm-#l4<94nZx4=%I zD22F55p`&j%jh<29&AJx=eft1^=e_OY>vVyu#@onS)FSoqmgugAk?205-0zNQ3n$9 zjHJ>t@S%TAh=6>+gyg`HO$t5*ZE-Z2qk#Psx=Zk^MENX53A;Ewo4T2d8?KtGOb&AS zx>`cX5!k6TABo@FC|A;||5wZoCqh1|0MebpV`C$O}o1)45 zhD!ybqLWaS_uG+>&JlD)xEW6o+KceOaVz5yiNg_!1IY!u-rn}8BNnB=lsNoqS6W#l zupCYU2Dd z@uc#cl(0b z85j3LB{LiE0tU~|#sg~?Lfl-c#(-l9KFogSHW&xH@TiGS*{B~~nNTzZb}lZ*zX)sR z!q_HPI53y4Nne&!c$re6k~?t%^9ZJ7%|M;zT)io1Om?C?fvurxtK8!f<#CFVY!w>a z`?j0poK=oc83gk02SK+0PsWwPq6PSgv`Qml&%?l;cw-gvd!B+*DgEyTjQfhj{uLna zFR1+lkMo84w^ zbz!w7sNH?@BpZU7Gu5qwDq;!FR}y{ptrO-h!TVw0`O6ZVI>79N#Owsctjo=?%*d}o z$$;0;$|E-5Inyh!%WxiJ3JR6W@QC5x2fl+EjchT-Iyovelk=wfputfa_4Qy_D858~ zpBI{!;k6-;6nx9WU9OXquw;{|;7PLy+U0NDa#+7uQd9|p-3}N$uD~la&jr|((8+UR zU8z|iJ{=JDufQ3DX24sVMYbs@#AyNH-4$3m6fOAfpt?w;>d9}DKRo^69lMX5crqwmBWBg5Ca9y<;e9!e`Dg<^=tG7s+tTfZ?UM1vhrSXs7Wjm(*I{k^nh5-I z-!@%Xc)=-2_$f;Gcbk5}$)+ybD9aT%<3x`?e5-4qV(Ukv`DE~=OHgT+V zJ7-7r$t~uwof)M*&#>+pX|+Ik4^4SmqC8DeCN!J4IOO#_2Irb(FuBPzU_J*GLiuvg zln2{+`QKR5n7JetDhn)>b^Q;nw)J#N};@%VX0sb!*LWreURf zU@BW-9CY!Zu2iuHl72s(fDVbWgQAQv$V$AP*}>4Y3eay^23;Rgv;?-ErhG@De21b8 zo!oTEVH>{K-lI#kJ`6h?dOe8&f!%>CN0iTi`40HE4gRSTQRq-5nG(?43EL6jL}C?u zuNxxl-+?!TTuAWk49{D=OG#-mCp$Y%h_i9wQu`4{hxVWy&c(utuE6f<(@*d{5EFlk zq~CiKrLypm5-h5^PrIRC4;NJY+NB)1t7H;dpWcz|^C*2=t(o@M+%}k>S|t=dh-ctW zg-s9Qn;C1jaNl6w*BgGP5e$Pw7xI5+M!IQ;4M zk8ooaiT@Jj?}qL}o3Lp&H7mI7UlPxMQ9SElP<9SZOOWHIo%Se=6XvLi6;a8^<24!3 z{R7K2!u#v+-bGGTKs*gX7FahH0aEm14)|?C~YP}Z%$n>B;V(0=&@X_v^H|7#EQ`6+C%w;5cfD$=qGRRc@lai z0Hy3jLK)Z7@dIw&QYWyFu1 z&q2V@MV|xdI}P#O8-)8GhtX|~aOiP-(-2~s`u&Xvx}!GYxK829AY?Bt&nbs# z1LE(*?`Pi&V=PDw$xY(-TOnsi?olgTap3)V>W30=p02&!h!~gZpqA6BiWT+DBItA4!}(qBwnc0*MyiYRF1h?Q*TW z!oc6sD++_a?gxWj7A*VmYMdgxx*rcLJ&Zjk@i|BF(ZcZGS!h{*X7bMUGQFxGD!~HL=7s!J5`2R>M{D)GZ_P(V1QkhK4ANP&BKb1+hY_^8{)A_HiDsB{-0G;1Q z1Y;9k50gz#H&J7_sUJ(cKBjo7_3zm~gyg)msQ}@^o$Eu%fg`ow`O2>vp-RX4m7CRt zq*s2AP}qXU;UmJz7Thc+=?LfCEuTn?KcN_t1RjM1wL&$HaU#YT$*;rj1_&JxS|E5K zT;3pzc?NQzPMGryz6l-=JcB1I3Duf=g%6&=mhfEDHm4-TNl8ID*rhDH?pBlyaU3$= zaJix5HUTOVGQ+zOs`K>_(qQTf&U2NeI+{^qjlI|j=03A2N)wwc>ttX{N(a2dB|i5q zc$emY0tXvJNogW<_O?N2D3Zg*z5rAl2VnxNML2X2-_h6cI~4BtxhSQu&g=OCj-Zj} zr~WDqb_TC6;})zJ*uyw6Ne;7i-Zoj*kXi8+@iQmDPC=y;&YK9egBNz0Zvd3DLFAsx}aTGXmuV)AJzcgf=d=&G&o-Mva1LCW# z_?2`=6ITWI>a0eMTy1hHwieaG9FWSnlFNrFE|gv5s^-!i$CKsn{CY;G8eX|Yn+ju&hsU0AsO(-~uQ@3e>6!Q$9 z7$!*wkz4|en)`BB_@CU330aW7TgT%$-Wz2drYF~D=%58O6bKoI zI%USh&KTI~c0gI9F6s6BTW}r4395Gg>d?uJaN32qV|d^IlIOCwT~_+D`xI0hSx|A1 z8?zGONltG_*Bo`VrK42qlhC10vF>b5aWr$J9H-*yqS}?aIoyDZSg{?lf!YcRZjz+cOyIHrebix#ddN#^BH}ZMJ%vNZ@M!JNK3JF;ech$dYf4+w;Pxyy=BIHMI>HIw_PLbV zpHrD#ZT!}?(P1`z<2vc6HePo9;V3d*bYYze{M6;U;KsV>{GjKY?-Qtt`zxQ>poOo=~b!C$;2=p~0Q*Rh-XIwWk&}nUQlVfYbwx|F%xaJe`zzf}XE??{y=% z1p(`9Fah1}pXjin1tEh}twcEn=O`-%gRmik==%(k5n+%d-!U*q3K%5*e++{A>_K?e zYPaDjfJ2x8>1`-bBJz0b z!pT;cUSdyREpua&FzEyy&yv2$WvFVthj0PHbqG>*L)`pxX`+bq856#gM1Dz$6dF$8 zF*$#E;A}vy)@kL^Z641RxCNm;dDHYHJvmE^_$(bZWTRC@0natBaQy^k6E8qTvJkpZ z{aqpw7ueVFD&;P(mAiBzoXUhtlE_ODB43C8QmxSbI@aL@!Z)wOSnxI>2)_jO4LnTq zZt#1kA&7{YRD@zT3)~x2A3pW6#PKr4@c^ele|Z8yq45ozC--~0gTmQ2V7SVj!uA1G zzLE&Pq6meCQ+RgV&w;z(q;IXcx30^5LHO?}JW_Q_Fuej9>S0RhP3WUqgmG`;(Rtb+ zv5L|_tWw5h=}a7Y%J1<9*iF%`(g;XwCyUx1H&H$;IQeTy@Yj@Jdr~N6``^TR=9hr* z=9@Sp;Xly5{w!3{=Gy-9d>%lCJVAFJCuLj?v_V6t=~v8zoBFz{Z%(YK_+m4$sr168xSHEo(-Kzf9S-E+$t|m zvB8sxq6 zDA|JVZCQM#q(T>^!m0F0_00~M{-5?9&lAGaZ@~icw|>F-7A)$#C;ajjE{uDgd)Yl2 zc*5;=h8W>W2To3V)BhRx186QMTKg`H!QLE6bJb>HNe9mB6ZuY5e7q#`3MEo#=)f5; zaC)@^^se#;JqutdV2G2*s1?5I0KMyk-VQumVBZBZo)G4}iwl*FzG^P5E}Vl2-%5PH zjo|w(P8>os>et3$M(q7U+q-yV@|`{%jQCXrC0vhZCBzwhC8sIq@hlbod>0#|yS3`V z4sDO8R2cO>Ue4?onC=wfKEN^Is}zKW_i@UQWj?qg3D%Mm;hM`dP zL$84?E3uo&0$?!Ob0HWcNhEIK5ZXV0r4sfGRi?B*NIZX_coL7;COmZp?kro>8}uxP zOKvnFbFYAPE;#SLk8JePgsPS(Ll)c(@}|}gY5MLAzC~cqLTP(X7jR6&lXs5zMbW!l|=RmOkzYdOnB6D=DMD=pki^I8(;up65wf>Q!Wz zNLlJuX5>2Y=t)qPeh!tTb9gE^)a~c+NHy#K-Hk>(&;8~O3(j{-f}tD@ETW9~#eKnq z^TA#UqH|YXpU&V8n}p-%@GXO`b;q!JxP-t~)Z_WKTkxL4S@KW1Z7`wuF|A}<{J7$-%OEF<2xS$OATe2c!O z8?)rXt5Ha!XAyCRIk3rz0Ho87kF*M`6KCV+g;FO@&3&jl=y?L}*BtB|4_Vg$+dqbu zp{GbLMTM%mN$FX-d{|Zzx}P8Lri33Q?S7=R6B?XQMO+Zxal*P-weSn9VZ@IC=97TA z#+e1oCj)bVJ&(0`x-juPo~9)RBlq8sO!oGzK9T!-!d6K5Ns{vuEyr;I>ytkZZnWh% zJ~gGmZj9qy>X9|&Y8L7K^qdt=UVw>~ci|c{Y4D2KKRy2p|C%vt0c^9M0N1q`;7tA) z2XAuf+bVPbx50Ne#-Y=ivri5|$7Bu=#*E4QhzTCYA8rM1q zYazr!T`cT64_EK~>0yFG>v?F5|MZA~xijQnk5u2BognEWNuYm=b!2 z;GOhlZBUroi8Im`1vOTDR93G?asvZbENlxf&6gCH;uyF)F`WE_U!>&!LM2~l=!Ba4 z&cF>fBMSx@E)aP9)~)5fLL%ME%I^kfN>zr>?Q#sv&kg}yOuHFp504hPsU$G-u`3xRa$H&HUQ zP&VsVNy%R+C1pIpo(tFwtL@dC!A>rc7==o>Jo{36x935)-8UL^gc>YBRA6)|^)^mY z;<8^j_a#nA_}Gux<8CH75M<&5L3sj#BzAv^hcm~(!!P5+u0Kv z|B(Kj5)$|leEG(&Xcb|z1yPO^ECg<#Y1`2n^t=^Z#SM|BGz8x_I8EEXQl3zMC)`yi z(;+<>ww&<`2fxO{a!&h)SYcI`U(GEux6~82Azxqf$AL)lmi%r3fk*v97vQ5>{GYpF zqD}CBjSX>X*SA}Aq#iHm_7n@FyWmjRXkl>|PEE}8M?r3XxA9{)xn4w-e<-cn6Sle# z_brYI-(EV@FW0*_{>$Ad9O!~(Y^;A6jID?T3?O#2zYG*nM3g6kp9{T1P~8obDXoA1 z70ecP!{{8reI>-PFu2d3o@}@{8o}>w&p&)>xD|LcR|d}3v|V;IG34=Dq54}qD)Cug zhEAnlS!Ck6JqLUvbPUA98sGZ6njeuBaW1?L#abXJyCLr&m4M9Y}pU3@vY>hS|MS(w+~luC;i>9Ew=q3+2Rk% z7LRU#8)G&igRRKAk$JJ(69*Ph=m>K&qzS+Lr^nWNJXFbnryd&)8C%yYYp#_K{|t}F zou%xWOjXy_y`(bi$CU#v!~Cl=3+gIEJvfs=Av+fIOc(GE&~A`w%!k=B$-VUz2J zJ;Lu-ab8Y7^hLToWxe;+;o(2Ibtnn4%4!)LSSjjLjLcWVbUra{s1_air=-`PlwSFpg}v9XiMi1u zT)2kI2cLK7H?HD7U5^W+#sob%!c9Nn;uOyRv)jr|chou#m=C$E+;&GZ#9AO0&bEZV zB;J2fyoH9Ja84Rr)}D1HwCk4W*8%zwy>^2E7j70l{|N?6>~%bL^4cEa%lo?1p)?WS zAKs%jkj85gN+=|a*F)Wt9qC5KwZ#zycljiQ7H*PUWa2zOoWNloNeK_7M7L*>6#@sTH=)kOM*oXb)zCH`EI0-gN1>h=iTnnvxt4JdBeUO>O^cG zfselt^89R+R}T%B=L;{>yg)wkvrAEl7Zh29=HvgNA^x9@wn^{~fM1IG>9Zs#07hUS z2VV<%+Pp}=61Gt=dr5ymy-{IQTtsYCcnq)BUpkRfPuLKV&%kxVshclF{c<5%Cx^k+ z%A#&hKJ>7!x}%Xk?2Vc>HDneR=fl=$hzoc8iid`+k{3v;`a5)^jswfb6mVy%5^Mee&u$3O2%~tYMFsW-&H?P-f;w3@r&xya0!CuPP;8#s$^aLJM#&_Uj6w-p8Kx+X zn1ZOO3aR-YhN%`yx>#Cml>}2oz+#zvoFE*JWj4auE*c#zp`#iOde>Ht+tSWR`Uptyr9dj*CDKW9)Frlkn>>M!$v>Be=f>E{l=D zAs98Z577R@ZfWw~4p$7R&=7?5%5r^O3T*be%lm(2EUXf?Da#4gQ0Mi$`F~=_R+CW5 z1z)N%98AcW^29ECu>Bh3)@@-Q@TC?cUR(~~0j<}kU;*d*bV9A*QY^P$y%+Z2f!+6Z_q zQ6rC;9lK&I($qs}f)F--8eDEjXp$+K^8g4GB2As}a2}JYjD-vRa+Be#591K@`OIx$ z+JqE|Hie=U>hp=bF|=B#5-c?WHip2)(y%lMmKFgUOJL*sV1jR=Jf0W|An6gX@dP%3 z=9VGBG9q9T2y7Cwc%bUclwg?=ut@|qCCqJFzf3j)HHA4O=%zBahwUN6nQ2F^pGw%6 zfKC5){sg@wO&`I>L}2EyG+0zJNH9YL%uHZKwC-6FEGq(5L|`1vZMXy*9s%PBtb~S* zkYFPsU?l`rM#Dx*u#pk4G6E~7Vc8NaI|5ctU=?%{MoF+y5wHpZs|0RgyX8o*oCsJY zv40h1{{*81Ge*Fw2yAvAEOc>ip9keez-AMnbNiA&uEIe7y(;C?6izFC!C`sC2ed3Y#9-{f)+YXf{lxStspQP4I3}P#z(+x1h$HX-7LZ2 z&VX<$BGj)Uur)Mnf&`lo0b4_ou#Qf`L2v&6?7!Ka?UcF-`31hYiIb`aPu zx*C8MhIm?01Z)>msdVg?X=;ju&v!8}>VJ?XnIVzPh#+~8aNZ3HgmadYU|a-jH-SAu z>sc(piX&i;kSyCnXIY5^D~W*ZA>1CPxs^(=(g@h&gj+)&x6s{!eeP5i0c#-K_V#fj z7YNez&|dO!A1$g}5>+0-V;_O-r(rWC*vtsnegbQxVHFarA_CS(U`;e^mIRv>0c#@Z zYoV=GDZwfuU@e5(GZZ%=?r?;!JwpHoDL_J%#HT8P&p`q^Ov9=rSak&KFo8Ws!)8mc z*%7ek2AZVM!C3nE~x1a=|}YwPdZ)JC9A5Y+2{3Kyh>60?O7 zu-6If4Z2t^l3U~drEsjy7w;oK&{Zi|4OBCt1U*zFSR_6XRU1a_K+)k(0r2-s-? zdy9ezaqmVr+FJzBK>-q$NPLz=@aZ71cWKyC3AQu>_AY_FPs5f;uw@aj_X+F+8n#@5 zEsubGKwxKR*a``@A_8`Xz|PXJJ0#d05wNoacCHT=x@oP?gKQD7a|HHr80LzodOju} zo$xX25vwFot0H(f3G6)W5vwKG>Im3*0=qyfzD9zriGW=ou+M4OS_!r`0`@t9b<(hP z5^P-rtdqdLq+xeTusb7QUlQ15Itg|OW{-efCa|w5Zm^6L;a^`9Ko#GiMxb4rKQkb`mG{2K^p4iENT#4PcF$O(vUc zSR;xy>7wOi<%TtZozm=nvil7?6CZ{b}nr1V|W*C+R)=sm>$R0DS9hezjGs$KemJXJo(`J#) zGAsiuQ<&dl)nwI%WunL0dp#EZxE*ic%r>k&(z0~XIZT^lSQc1EkGV}3M>L;*T*Eqo zb<$~bnKsw3PGFridz|cX!#aayYc`K;o?+QwT{L@w>H&`E!;Uh})Nu>`K_LYUr-5Gj@8PAxEzF_&f)MB#5hUJ6x)9hKY zXASFzL0zCv153!37*>F^{yObBvgZuz4_2s{n>^5rh(dq?3WT0#&hsW`0N6my>d5L0 z8wfU7vlqx-Fl;bbk!H)tmKjzAHbk=*$zC*U2zqR&FxgG~=hSkt<%SJKTCq-hiR>lA ziou3ywt{ShVZ*?Ndo2996W+P!?}iNrEAiQF{z+w}VI^QAg!v=wWfpzeuo2kOk$P;b zB3otHNTiL@X|IsIV%R98jaF%H@>nxAMk8m8*ZA;HPhMrtt0rd**jUZhkgYLnEXs{j za~&UrV;uu<>9MbkWzzUN>w4ik9l4>&Vs_R*JNVI_(XzHw>EyR;Jl{ zvh{|Qq39$jdV}{lJ)t+r-ZX3y(#pLp#U~Hwb5Hn6Y>HPZ{NV!L_*i_BlCVShksbH0gxye;#L{tJyQy}yXbKWsI)4-}U+f26Euqv?Wn!QW*u3^)` zX6Uz>Eo55^n*lacr@cq^o?$b=sx{k6w$-p|usOo~Bl3N+_YIo^HdnK4WZMjz3pP&| z{ebKP!{&j_*IT-sY`bCe!D_rTw@H5W*&7@GFsufw)@KX-bI%ULYQYxhwtdK=9~!m* zY>{Ga@)9#P76B|)AoLM)J~BCrad0frN8~QDU4|_|+EPjL`~PFIj}2Q2R;P>ZCfjXT z9f~fKqJG*ZWSh|%NOsV$jbNKJ`;zQS!#06!*6a}3A;UI;%~f!}fz6(Cj<1?+iNtc2Ki=vU<0evL6jQ26kMtMzTi3j)R>L<{t(>k^N-Y39x#d)ec+0TZZ1Zz-fZgP`3aWnuldH^#7_1UQr3!Bv1Aty5Y<3X7|seUHh1a?Z8 zw`G_G7_A53sVKQ27Onn`8_AeR6*Id$T2dmT{gmH?qNt*jk{e=R(Zc+>bJ1kchDArq zE{!8I}N+q|@Ta;tWdy3+VocCyO^M02b6~ z31kU|1+k^AqtzX>M6yJ~T7#u%mPD3hSPEDh&63HI4Qqq8rFxqXo)y=cEMQnFSX*xs z+@{|~w)WT=hP4Gt(_0#3TF|gGuy(?lk06<^7On5cwF58%%`4a1f$8rB{xOS3j)Z4Ao->!`LdbQalJhIIt%q|;K#QVr{bz1dms z&9lkQHmoz!vUOTpvbKh0gLTpD9I|r^>jIXeSsGcIVL4#kJcjvX`pnY}3%l#SZ^w*w zCZjvHFIR8hxn$=WmW#AJzeO^Oj4IuzJcRXBVKR%%46mMu>E*}B&qFeplVNgtf%Vqx zd@}jlFY2t>8?29JnPi!U^#SXv*#%@57}ggoU$gdP?G4KZ>!;a;WEUFN53E45EV3-a z3c&hn)`6^pVg11hHS0*$(Xc|W0h(Pzc9CHNzy^AZv&hIg88#4Xu+QWVt$REDV#5Z5 z73rd#nbz5`B8-h8GB%n|J)uj;E-`Ef(uV4^Y_e>_h9a%ljI`lqq!lA)n9k|KoGvD3 z7}#)Oeyh5Ybv0}_Scy){A!ruUT5SnBhO@v2b-YT z6=YW!HUX?un7@m9lJzvK6l|hSyOQim!zO~2>C<8_vR;OjflX3rGKt}fH?z9PA%91&2AvO!LS8ji!>WZHqfv|V2d>yL^jB<#b8VH@E%My*svw&ilw?M zZX~*Tc?=J95cgf z9l&}4{;@HfIm1oPdawE8)Ce^CYtz@?vwh3&rE;@p2 zgkhV(w&=9m$Zj)i3p#cy+x97Ej**QtY%AC{um9a9`HP(1*tp%WZ78~37ahg4QHE^? z+o9PVWOo?018k?>($Qq24ciH}OS3!4?lf!{*lt~P4A~gNc7yHF>@Kpq4BG>?SC~IS z#*&RSY%kb8l_qn@%t+e@uwQ}DIOdEqIs3s5Xm&T*-G&_iJE+-svhju;1UsbJJ!JP7 zb_ndSW)sLJ7GRz_B4SUuQDJ-qHCyU(zbU=2EL64@lf8gL*r>J!;yvdM-uBCScM zm6Mel)`YZEI_-Y4`wcr4EjP+y)V-}KR8y3iT^=JPBei;f>H($XMp=xMjE+(Fg(}D@ z42woutWJB7>_Nj~krpRuIE*-RjBKi5aY#$>(%dHb(}dpm_?uw~U`e`YCDSSmO9BgM z_7K@ah6TWanoT2{W>^rL&{}uM!(qhya7))p*Hvl(PF3`+xRr`cmNj5#JF3#_A`fth1uu3;U)I_b2zWOEJc1lC!z z$H^WytTR})X7kAA8I}#!MKL$In;8*Z0CE%v&1cShlamA1O_=|V^(5JohIIq$u2~IP zjbYuva&^(C$euDR7c5Vw)sod3mWN}gCmC<6KTY0w!pAnV7)b4NVd?h z-e7$^7XIT_-cDa+SRb^luRgw?VcIi>^+j5~F1na(v0?dO{WN=)>{-M5ffZ=Bglvgn z1z`OZbCU;{vC$u(P=U}=<}5Wig#vBA2>ULbqHu)#wr>!7c zVc0OVZMfGVm_w$|J;SlE#9xS+W6W4-GD^Tkcr4uTm&sl>Yy?^~lHI^VWEI&e!$u-) zl$=|oQ@tPQk1-=+6u@X*ZZ&gOo1D>LV>Ek}>{Y|YfQ{8`4cQvQ#)6I0>@~923>ybF zUbD4iYYiI@HbJx3$zC^X0(z`e@56Ou>kKPJ+C)k7$JZNVZx}WatV|bOPqyB$GO$US zy-D__VUxhhJr@3(HQw0RU|9H?Y>Ln157c<sRWy***j$K7&Z;8O0&&mn+>Z1o37crWbYa_9c+d$e>ZI*+hW)Zu$emT zJ+k)rNQpX`0Z=77!BY#Z4&!{&m`)9eGX4-A`!aXVj_Y$=cQ z?PS{xn~$^_FAa0Z^tq=73v2y_m^sFb9VVj|Y=LT#o4nYJhy?(P*p~1gEDY^r&Q6oF z2yC%tACY}z*kZ6Hs$6In*)GGDfGySRW3rD8TZ(?F)2H&?WV;QkL)tQ(_6gZ1hAjhI zuGt>4J%%j@TOrIJhM$ssYS;>}l{#%N*IwO-r8pE~W0js1qL1zYDGBH=k?ZeT-e&;&CdIwCee45J80NOuuVGcOR_Hw+XS{*vqNNu4BHI0MYFHSzA|hJ*jCLBlN~l} zE7&&8z9#$Hux()5H9JCf#IWsPJM=l~Uu6F>YzNp*opzM$s9`(7c4_tv**Avm0^6 zqhQB$+K*&E8g>jP#^b{LH;_iMM#GLH?F1Rm?LU$IWY`I?dR?@MtjVx?u#<|p$&F@2 zoCIi4Aasg3r%X-*Sfj_npDpK|olYCp2-c+2oG8vAi_)_pn!rv8^F|uxkj3hA*r^z~ zH5RLGjYTphQpL0Ca`U^38j2UN`jJ9BDx>S%XXjmFp zJJl63dn{Jpuxl49M`L=dx?$>-Yi)AUk&~gzg;*|RSO!?8W+`MThGl}aSFH-2Np_}T z?ZL8iS{t%9hGl_u)a)#>vkdD9)=9HevQ)!5fpymGY_hWr>kO8ySzEHUhGm0wQLObj zWaqRncXAim3F$dXh0>_fTGTpB+E3c z4_IH#E+D(Wu)bjVnzbiuZ&*H9Kg}*AyU?(H=+^?>uUTYSh7};KzfS8w*1@p;V1=4> zB=Lp| z3>yMARI_ZdY{Q0v6)PqmMrOuWF~BedLS2~C#pDbF8!pVhw(CmP)v)1UCHe%FLzZJ$ z3D^job{W}ahK&FlsoU0#teasY!A5CzIoaigjRG63S$DGThK&XrqgfBK9)^tp8>_c8 zmn_$?v0&r8G=3Nv+3yS+2R2?8%_GY*Y&_TmUGxgFD-4?eR;tr_lJzvK6l|hqSCU<6 z*hH{0U9=ZjFT={fCaE-;MrKCZB!F@SLcN*O+vJpkP0{QsGWi%>H6eBiScPVN$od#o zfs@KqeNwra>}tcNBCS%V^(E_TSS8pr&8{K4#;|E%Rhs3KQ6ASdC&bdCZKj8kDQm|nCNhAjbGDrtVl-bi+%VN1d4bkQQRBE#yymU(IX z05Y;a8nz5j2j4a>JQ3+~lkW+n~$c zLUxN`8^AW|v=Xus!#09#((G2UTMgR;wpkY)K{mp$&0t$}+HGXF8MXy%tH&^nOrLtT zV&OJ_AtsM8<93s=4Q#t^(I~P}hHVGip<8qZ*&T-M0NbhAXtL3U?F8E;ta%@X?j*a@ zuw7ugb=nxRF^261+at`spL-YCU54$!nPsm&vy3GhYuH|-?Ndc%@|YQ4`vCSU5E{pv zaVBR!*a6M%CcE3P17HU=8&5Xgu!CTSG`olF9>WfS9oB3D*#yH5gB|f0KY)zvFNPff zJF3%4$x0173UBO{w=*m1BEn%zrwuVE*^>NP7PD>JMf?4)M* zk=0ipjDr=ly9PgM?u=0^=#0ImV23@$lLzQIX5ERIjiNj zNFQRxLnb4DjG*4CX=Kw33xc(l7WwC3noc&|uvDb*oJ!)9nR&tI@BjZmoXOPV>EDdSxblPKNj~Uhu3}eslikW0H z4NC{h5a$0D?<}%ehGl?dYF15FZCEB)d#~U4>11TH4QmgUrQ0@#Y>r`BU>*H5%rPT# z4eJQjN$;$=WOEJcgzoL!O8w^8<7AH;)){HpYD?YZ95Xhu0lFvyETso%R&jQ-T8)?2fMWD5=JjiP@tx`Fd9`CR=P+ zKGOP0ntzBqOZKc`{lE%TQ8&5JjEDk&{tASiW6pCXr$1PsW=qMI8deB4K(pt`o;Pd& z*g(zd$m$Fmh^`o{yW$117YrMWv?59KyJ8vHGQ*0%hUlU%lD%ly5ELD%i!LWyZrD(y z73;K@$X+t67;KnkE67$DHVkaIw+Z}oGP1uLHXLm$@rI$>ggItpD-A0_+6Z0rWwMtI z8v!;_F*kX%85<)3Mkx?_g*mU7oKaw-HCs)#+OW}JV>Ek}>{Y|YfQ=RA@69!2YYZC; zHcqF#M)sOvYih>$G>t z-ZgAG*bL3KkZmz+2G~qp^gXio44Vm7t=U$xt%g;jL+0oXd7tck!{#7uu5Q~lvTcUV z1)HbY2V@@@HV11U8Fsufw)@L%u%ndARrGL0y3$Z{q>q7>8 zXo41?FBa*(*h#k2uti8)ENT9+_7T}fhAjqLqKob#+hy1i6kV!|eoXeUVM~!#Cu#op z-c7dKusWnI(`lcOePY-$u;onSMe!c8J%%ku(G}{b3w=uVsbMR?R_eCxCEIJ*N)%nC z+x8jRXNIjp+G^cz`^fegwi;}WF8Vpy=Z398(X~<({T7~N<_6ZA!Lb%W>%5J`{4)J- zwslyzUN`0ds~j*@)`M-(>1Av zu$_8KkCGiVY$w<*&AuV~#;{#ryA^Yj_nP;T-2i)ZtNzWLf18{=V0*os@F$abZ(YX? z+Y7c&l?#2#v~LaD2ew}qJwbNDu>D{MblP`h-x+oQ?4V}#Wc7v}1UsbJ_hjE2b_ndS zW+%x`8g>}$h%kQ${Xq7EVMoA@3iD584P*_59R)k4*^gvD8g>lqxNch`S)*ac!A@xQ z6WLFOodBy>%uQ}EW1}7e`=lP&KQrfNlXJ3_{3)!4R>dvbc#7&T*^K?;E9(r5e@=X`OZ2*<@!M)){HpdQ01qwKXgotcxys4%s<|bpgxKTbf3eW>^l| z*3E01%rJ}7S3TX3(OtKw9W&aQjPA(D)jRxLvU3f~1+%pZjv$T}F-AFNRCrH*7B4J!m2pwliQyU4Hs z*o1-JDCEbJk##a`AkqeVMe#>2n|J!fh7ATQ(nUKnt+Qc8U_*3=Ttaqtk32*i_A~ zCcE0Osc2iJZd+fnzJ^tTP1F5<4cRq@O#`b^T@lJB%QvhFY`SLGl3i=qbg&s-+xYQh zWc>`A0XEZX8~(6m^SS2_hRsBWR7;2WqqTr(1%_24ZI14c>&UJ%Y!295y$Suv`WrSE zY@Y77>&dP+Y#!KrU9^y_(6ISnHL9r0Ff${q2B21#8^D|aCZ`r`fi8Cg*$sv*K#wib zLueq`K*JUxZLw-qXb{;T!xn=r(M1Q74K{2EiZ0bfZzQ|Xu%$?=(`iLyMTXUZE%TVn zFf-?#WmvdeXAEJ+5R@xMR$|yjq;1kYb}QMfhHV1dtc#8y8)4XHY{C|QXUZI$ z+sJM+Yzx>{kMZNl$VM8r6>OW=A^dnUvfB;YhPG{&P4LIYD6&z8ZAaP;-L^Z(?l5cz z*iOwxlZ`fPCyMUU{dOnWordkgUf3;r!M~~;LpH{+-6*<;-OKCeyU6Y`Y!BF8&Bl_A zHEb`~KCj>K&MGs^%t+e@uwQ}DIOdEqIs3s5Xm&T*-G&_iJE+-svhju;1UsbJJ!JP7 zb_ndSW)sLJ7H(?;l#&}|V9`3P zf~>-@=y=%&vGM9o!h>WF8WxMRI4O#Qk{?e-Hr22=umqoBh8fx43`+n@@>uvfwvw#U zuq3d6-h_w99x^Nd7Sw6e$fg+<1Z%CBo7^T|-#%&$kfK1SiaAv#Ck3pHW{;3PVpton zRL!Q7O*bqR{ohuY|JL*<*`tQFMOvEfiWy`x3`;{=JK3B5QT!O$V}`XuTDorAOtP7V zrGsT?Hj8YQVHseVnpKlk81klWmqm)o^D$$S*>AtU_Eu((_~K@))TCk zPFp~>z_4Cmy>;3`vW15A2J7Rc@#D$J78%wDtgr63XULv0tS?x;W{b%d8XajRqT|i@r+ss$pZm#_F^+WNQo? z3pS2z@~y2fsNN`YsuCcHXdw(X0MaIZrB8{QeAW%**e2Y!6s_<2H6{iO#~~` zMc0$9H>?bMVUj+zze)C{VUv(n?iJ<7laXyOEPPEi#VZ>A6PIpaYP|j#=oAE1=+9ZBHmnM4x@PZ^y=&NX z^z01Xvs=iv7&ZfGGbPRcXWn~c?-@1|tXi|JWLpiZ2AiYV`(*DMHV163-h^#r+YFlv zHczt;$UZP^9=3G8-qP)4+YOtKv>LB%;aOyEV1XGNH4wGFSZGd9wOF{oTNpkQe#j~x znkoyx7U_MxlWeD9i@+A^P5X%KBf}PhEzw1Hk?k^U3D{Dd_A%MVhAjoF(`mcOb{kd) zwoJ26$UZS_8Q5~o_K@u{Y&qBp%|0dj)UXv`D>d6ow%4$gV5>CyjO;VRR)MXSy&!K} zd>`LOw$HHDU~AOQa+BAY_mVXLYrS&(Xfo#PH#uuD0@ryXkbmBi?4O3ML)v=X_yc4I z3|kMjL9;K&zA$V9*hb9`k{vW`BiJU*z9jq7uuWi_Rab-#ksUH@GuRfL_7&MzhHU}c zs@Y+(!-j1|zipF#^DmyiCi~j3ZAja$(~giGF>E{74$b~W_AkSBfbG=mDA`fNc7p9v z%uU{7#>OrIWe4ID+>X2B2e+I)k1_0+3EM69cYET`!GHeX4htsk3ZFs#P5WGe zHqtg4dmN+wgp7Lhp__ctjH(k7lwKcyi#s@&_(`~46Em7jMt%GX?!_nLOXSn3-V3Xr zseU%w5octl4Qmv3`R@2L+)J9`|Epyi zofu9=i!qbY5P7O)4`VV~g1!(t6)*SL5{7Y*L^2{$Ma(Wwkc7wt9tPpIM^Qy7CHL17 z7P*AHp@kc}~S*&4kU> z8>iNNMS`D?kX?IeSj1Dr|GG$^NceRj?ZvN-CMqEYX(pCOBJDDumur^?+9+RnQ3HmluDi*f&7h*yhGtMv>ZNbv? zUI~%~4NC)Sr&=Tv(h~F?#dZJ~Z2sQ$%C$B*>B6!yR8A_Qpi#a%LHq$ z)6OJ2)3EknS(>#WYhzdzSVzsyB0I~lj$oZMOC?J+tP@ygVSb04O?I|nox!qoT3fQV zhGm0w(d-8Rz ztfOItU;~8t!}cPwiwqk8Hqc9xscGiaGY|_0`wKB4jTsl4jKN?a z$SyH#2-r|ze#5iLvJD#wR;NWyh%%9e!iZ9Gft->uXpg*fe4OrOP#B*BCYptV*+dvV6m;z@}?rBM1!M(=RfEmZ>^idR44VTsSF`?P{SBK7Hczwb$*wnS9@u=% z3dsr$n-5l_m`qVKmT@qU83RqmB9vOJTQrDlkYS6#mS{GZY_MTVz?Nzz&BL*OqhU+I>NG1N zD>AGOY?;US329`1G;A5za-BAWY=~jY!Bz<4!7nq}sQzTs3aFJjY$(}K!&ZW=^26jJ z=q9q83|j@ZTBjA06&to1Y>iI4ne1l6)_|?mX~W2d8MYQ|onkVR&5Xiz0PA(R;mjFs za@K=wP&uJn$Zj!g1K38LRzg-{*ha8TI_*}nTMgR;wpp_gWFrjQ47NqH+sJM+Yzx>{ zuWd4u&77CEV&OJ_AwD6E8Mm8^ZD8AVsZnI34BHO2L$f=`?l5cz*iOwxlZ`fPC)h5{ z?j*a@uw7ugH5)@V#<1OBdo;U?>@LIhfbG?6EZJDY_JZwGOy;kd@wE?NzXG9g%o%5L z_JbYJ>~6BV4LbmKP_yx5;|)6qc1T$Bdwb{}vU?0W1a?@bO(2_K*kQ0E9^)sZk^RN6 zBVb2$(NeNf!;XR-^NY$%HmbiGbqwmb4x30e(XiuSCp5d4>|Vo8fYtjoF_Vp~%&>Z} zlbYQ}cAsG!Vjtq z)fA;>mnTYAq*f15J)o4_X#0iK(mL)9x^PDSo=zPFp>A` z+~kzRmU~ODNITTkytEeY=ntFKTT7Mf6seLPO8h3Nilhp}Jv$}wYj=2?#CHCbNYW!* z{s@<+%JS)0o_<#1H=*fVHr>RxNu1(Fo(0p^MHUn`KxASf*yxWYvacg0=VB#?L?_n{8Nouq>T6hir~v zSzsMK#))iXu3;U)I;k`_Ia`eax4aWTX9Yr!Gv{%W(-|yVvw39m49f=VqS+HkfkyUs!-j*Ecx?+$WOD-}6ZH?jN+3q)dM`8RWfL?4 zY@}wZ$W|FPQrL`!Cl$okq^ETPrnvI>B znC&i~nmAT&vT3`Cc9XV+l~T33GO@}ns!Z(Y_M4X2t)+k8;R^5Q70RcftyPKgE1?%hwr;&?;188Y=&;?7P2jd%@8(jW@1mbd}d;-TQV~-t)={X zT;V;v!q}PUhneVyY8}3ncB{7K)e=6VI#H%e%t=)Dmfxp+-`F{5?_3?Zjcl7?bHV0m z_5s-knvI>8*xTJOFR@r|%PH$7*P1t|`3S4=06$cXVgJx!S1& z=b4Yq`b)8Xo!-jbWV;Qk16!uqCuE-(whU~!ZuB0qJ%%j@TcOiFCHvH{6<{lM+Fr7~ zhOGo!rP*g>pBc6aY_%%tCa*Q4X*Iwao%1AcG$43VB0kNn(S-Cwt;QeMURjjF>E{74xRQdvVR%218k>CbCY+Q(Xta@m(KZy zIp3I^U0}O4J4SZQu-#yLRJqW<$^LEF9a+&32E&em9n)z)lKp7dF|gw*%}uU1W8*l$2?atwG3O_fa{{bhvnH}8!|K6KYW6eP z&xV~8wyqJ^OAT_p3L!X{nMi47mtp6kT37vTQ9Vt5eFNmXYNjY+pPY1PPP%9IZfO<)q z#gWAsmIM~iES@ahumD(4Gif7E#0iE4!CDLRuU`_$5)Eq&mZH;=$dU|80c)dKGFh@= zZNO5!qWm;BvVdW!U~RoLw+WNy$j&gVEm)eD7JeTIk_8P*18b+4OrA?>xxwj{w*$aX z^hb|ZuC>WY2g}eb#Bw3SGQcu5OCd`!EEBA~YE|e=vNH{950<6V+K{y|EDNloPCJY2 zEW27?uOEPU$eOxD@3BCsKvT|#z=VMD-%dTk4*Ws_waHWaK_F_}DPMp`kz zFkP+-bGn$EVPL~mPN*wcSHp&bm1vejmSb26*a*!oBfHG75nv;QrQe?PO{g15H%)qt zO#0BhVN}v@QiH#1c~`AJ+xy4r<+17?tMU!r(k@r)%Uf=WJ7cN*>wWI1q)NF3sGHQC zzPs{n`Diq0jAlK^dKfkaY^-LvWVwco1smrvnLTGtOyh7JGd@Xu_(dKw@=V5f$yh!< zX}FtyPZEC@`3kZt44Z&brMg8u$$A=A3N}%*E6J`jY$8~hF#k%R7g;aE%D^V6G?_kU zM&Bd>h2;X$CntTA)SDT-k>Q?Qp7flXF-4Z)H-5q+{3SC zJ$-2V7+Zn%Ox4Z4n(S)Brh-+fW{3Kc^);*#Y?`pQuxhY5nq5bB zondpp=4#fTtiNG%!RC2w3-{agWY-%u4{W|pDV8#b6xgH@DUz62GQYIY;pjfO1+tJAEAtjMrBuw@>T*>vXYv4vS2FcvDA`cMR)Ve4>?X3C3|j@ZTC-xZV#8L0 ztMF_}YWhTuAY^$LWBGiSKTSr4{Bvs=h+F>C|aM$Jmd zN(|cwwn?*F$!;}l6WC_WMv#p#Y%|yv&2A&R&9E(CTRp~4gCiSh*jBJ@KErG}vfB;Y z2DV)n9Yr?Eu`<+Xc2;voU024BHL1N3*-g z?lNo-*j~-Xl8rTNFW5fCWHy}{Y5M^7D-asToN*>+KiC1y?k2n2umfNRH5*Sh-mrsU zhcvr~>>k4ofgRRt0@(z^4uc)>n9Qa#r=BBNcvNSUGNaUF90fb(Gnqq2^;e^gK^^y% zoO&jbO*HH{*a^+5j~LblELF4VWYY~x1#7F>qhya7 z))p*Hvl(PF3`+xRr`cm*UZ>*#059};x~os;$5?2ZtfbkJM|%{4)tz&dO8IN9Tdbq34U zY#!M>!?MA;X!Zoz6NYsG%h7B;*?hxtz`AMnB-xXObpz|JSq)i@Vco%UHG7KeDZ_HX z@-(X@t2HbStfyvAlRa%%Pq1E^Eg)N9STC^Nnk^(-XjpHsJ|5%8!I3R8tPfaUmF6b* zGpCEb0Qm}p7BgqD$;k)nr`fY)&l=VbtU$9RWJ?Sy0PC;Wb7apM)*q};v!!H94J!m2 zpxN_e&l@%XY@lX!WOarO1RJc`3uG@CHW;i(vt?w<3@ZW~qS=dNFB&!kY^Y|-$(9>7 z6s%aYm&jf+tQc&VW-G{67&Z)SxW~ft>D<5wbK)2dQR0i+%;~8F3rFZGFSE+arpgGg zk(#X{TV>ctuu+=5LiUPbqrgUMwwi3UVWYvuX!a`EtA>pM8>`tGvNeW{1skW?Yh8e9uu{#|k*zbV6l|hqZ;-uV*hH{0&DN8xH>?b7l45cn z&73YK0hD`yp9II84JIdiJvPN>_;aFUZy7cPX%(tmXd~H1!z#e0YW6nS+lEaAtJG{0 z*(Sp(!KP{U4%s_~O#`daY%|$r!>YihYxXYLyM|2%o1xhjvMq+q0Gp}Vdt~n!HWRE` zv#n%X4XXy5quKjp?;AD;Y_4Y8$hH|a7i^wlZgPzo8}k6>CugTNeb{n~{8%b)F*SX_ zTjcfOdvM!XV7nfpQ zvigkaon$)=TLiXPr+q~BkztF$mT0z%Y?on6z?N$EG1m&#hDYT=vV(?g1ly$3z9jq7uuWi_b=o1aLxybz z+oIFHBKyj)Enr(UJ4|-iu&rR*H2a$DYs0pIZP#r(LUzQk?O;1pnwz}K43HfFI~52W zWzJEPvlDDra$#WTH$3HF3hB-Za7^q&Kc6En{L; zD#z3+ZuxE$+N0a^Z?bswk!8?iyIMX3=EPhDC$LY8FElV^}O$ zoMy3Pv4+KgB?$9(dn>Y5h9!U{X%wb3k@EZML&V5weFnZ_2-x0F(`u&uuklh>GWhRJ9PmZnO%$?}W3 zagPfceEQ*oZh0C&J1-~vhV~og{Kn+812eC=zM#bezb(DN{TNha#>2$q4 z-Eku1``hJvd28uPGI&Wi_<9Mvip_{vD8X|j zZK~*8d3|AXDjFH{iOmeJwL3-l|7b0G=Q9kZ$!D^6&Q!hgI|;r;3QBqOMn{QmZh-SQ zX}H(y$dOV~mg~)k_(InE&zsTJ!Rymx`C)k;FS*!&$DtM^R-%V< zn33UeC#!Z^BHv5bL~w&;Wj_p3Iv{GXvqd_!<#j3Id@c_e|G%~=Dbe`?9+5p!86lCK zu9WYlw+x=M*gI#b-su{F-KxqsJ>+}Y6Rq@Ue=nT+t7W4x0v3yT)aiOLzDAxrJJVZ+ zo0IEI4i63!{FXCP*h1mI(sR*0oCXo4@{o?d7#k*y3-2oQp4UhT|4-RVWUVh+vd?Vp z;^sXcBOtP6@T9VPQdReS=ydIT*h@j0>^Z+ChK+3KFSZ9Ql9v72_Qc5Y2ppANJFjM5 zctqSHxs(6*jln>{IR2H6ipdFgl9awAUxKS-Kcds5v-}4C=T7PxZopg4FV8&eq?W;R zHhbr6)jM5dH%p1{q+~aFo*v!{vSofjZx}|^{D+bJmh=&ZXT`5=ke`iyE|9^4lbe5X zZ;(}`)1sO?(d)bLNgvU&t>S;Bul#6?^>;+#G^Z1AjAOUUrZtb5l;-G&k+Q(++LqpF z%id|LddCZF9&F7;v!zjy^1kF3#O|7oBRzZ~l^xbx(yu5YQoa5^5|>Et;QZr9;u!o% zBCEqaz%#7gKCvkFzlO@$Fmj>F?14iyMtY`s_xjC~ktXk2;p5V5b4%}>!`?YZ^^QMw zve8&MaYT9RMm{NJWNUv}CQ^3w|E%G(YX9t z@|>Yg*Z8ZQL5}RMs4tyCQG?|<*V*PwcJ|0M&=c}*FbR!{sdK(^zQLh>(MPa}J)AG` zUEJHUt~^Kfa0W%+6n_5585H@Ue3k2b&#$7MbS4jqEXMHb@H^)wXO0&yRS)M@`C4oT*Qu8Qd`)=0-#LTBd170MML$Vl zHboi|y-;Ki=bjY#QsN_i$M_C!OPhOydnf!MyOY^Fzg4~SCEhV)>trn{EMLdu$=1ks zk@Dn33abkTX!q;Q2;b5n>Q7Hl1$rEFlrDJpW0aua@T@ z<#p*hTp3-M8!q97UwZ~`PEzP*X-Ka0eOIR^8W;VttaD?y>DZ*urp+N7g;=OHqQSkvft2cGW4Vi z2Ss4;<+k+Bx$K>DRqtRAUoFLYpkJcv!i_@tzf1X-Wd!~x#pT(#K@R%U&K>fqY+S^< zvI9k-@1me@gwOJGoN#00a2XVV-5AbxE^{W|B419D(T`QIeQ!$v><$!Yk|8V2m1Ad6 zEMmWu*Q9YB5SkMnCHN{lvLZOfB+0ovd_i;C%S5BG-Vv!I{etE>sBt59X~fHNWW_9$ z=s}Tzym*hDWbJ!sOSrhJ*@X;%6Unnh+`r&GS zmuKmu=B^DNEjVk)dN^sx(b6?`wmi$>bYUL;D`%3)7@gsBT=d)FA@GC5hZi<)h+MS4 z?;P`X{#)TqZ8;FJ={e3;=T2!F&I1^5b)b74Bv*FCtndcS zN|Dotywu!&DJHwK<)F%7?_{Xn;lU@nJbeB`K{;N-`#{!JXGkd>f!_GedzRkJ!p7m9 z2N}{tIl?!}*KFD|*!<>=j=V?KoajuR6+Q(>$6?e(Y?N(9BnCha=Rx^urv!oiRm9cu zJlMI`nJ-d?OxDZc{`@E$i#IJPC_Q~u%f^P!0n$tyR?#1_nbD%;Y9xFtW!0pFOZCTp zTe00T3R-&SeD==yx_9C}l4i)3$fZsAtuFE!InRa9lX#zqlCcok17kNzc3lVVh#WMn zRgZ83ug1GYI740&DVrN9GAc)!J}6SgySy{Y+7U%^VKKRD)Es#+e17WqHilgy7B2Jx zq!Cfo;VXzcu+`D?ny(?E{~(t*C!LitEO9k)64xjfU4a29*CA5urXD!+OO_=4;?|A# z{ekmwdnd)azZ1eOAMf^0_{a+1zW75XdnZ%(j@%}4uoi9`MR>Q7BISGBR*F)$n&h^V ze+w$oaopt@f&X^T%M7Sb7P^4(7pQo*G&8V7W|9Sp{Np>+o~*rL?ZL7%yO8Wc!?M6S zYL-QoWmw0+^X~bb0)twLb|C9uSSO@)mNfZc8vmYNN3xEFbq34UMK2<|$gpg%E*_I# zmeV&lOS@oUP9Xeaf=~G?a?H5cWaI>%bI4wf7E6aLQ2 zZrs3flZWZsrKP!ORh~3i{;CW+;8NyXYI5?xdTQ2%tczhi!Fp-dm8`2_y})`4^KUEX zkmVTG8?2A8<~N4WWn`Bb)(5Pwbgcga(Qahj4C{-o$d?}Ti(XE4xncQW{dC86C+lul zKNKy{ZR;TH>yNZTFO44|Pxd>*3c&{GqIqO_h7AB4D9j(! zSCCy{*g&ws(r<&B{}ftJvYv(wMu!yX4!M%-O3m&o3Z%L-iUKoaPMJ5xIo!(4a2tZK zp*rmM4EwzfD;9#aEXww!7P(+)OvDz>RoZByt*vKtMn1e>N= z5m}L8)4-}^dvOlor_Gc7(Xc9vg6U*Do`;YPF>E^64FBvPzbQxcC!=Oa&9&15S#JK! zz@;rcGn96ywog@>APsF*7h zs}0PqBNwT7P59kC zR=?d;uS2IS(~TTOHp;MNfr`o7{@V#o@gAGh*Uhi#=XKulRmv@suLs=i1P{scaPN7S ze2wpa?a|;ZLto0s3;$uk$#<}Ycc>Qra(%4Vd%P3uDbN3ZKPLab209a*;27CZJpaG0 z^J{M2I6vde{}|?vvdN>_J)>3kG^Zlvn6wDbzigeVU<%;%1+q?a#%QlwwGZcEz{~&K zgDV2P+{~4Mg1EiXlvrm#%gN`0JK457RonhKrE>Cm4}N(3p5CiRyVF(%awD_vbT_RG zw2v&h(>=B_&_$+22C}oZ%yWY6<~zYydEo2APdLHt@)#|THu6Z2$BY^${FxHGSu=(e z$Eb=E1gsOd$a^l9=YHPT-Q+pR`#S3>`C1-ww;}AY&H*e}-{ZCa@euQmXPw~pOPt_{ zLC-nCXO=p_r=RC3;p-Qi;Lq~-%`zu==8I17k1z4{{_^#_>`)s`{T+z-t8(I$9p>eveW3f~)$cjMeey`#%4d9yN0axQ_lwt;d#^XU z=I38~y?ObsJYO3w_A3kjZfTr1^SKI+feDbF(D(W#eb z32{=SrTDapUh*6-&t>wAPl=r`&x!K9Ri2aNxk;Xrz2|^Dr%9{Nkmmw<{*B`VoHF?$ zMPAq}&u!4)@Sl&ppp*?RRSm8efzS3y`Ae(dIr7}=FYdH0fjKf!+V2(lHE*u>SGAs7 zx;0SIKTQ(H%cDvjwenagkL~g}D32z2B>h#|A&*Y-$dO0BJh0ACc`lL1XnBm6N0~fQ zO5J|jW;uXnX0X7=ibMa?o%rTD%5#S7n>2slN%Z{V&%frIX}yB&YS5t$Lrmvb_OO#Zj`^Ey-Nj#CNXf53Uo_% z1xjK@Jr$Y0-u>sUKqz9p`~9xKMKYILuju_)b+TD;H#%#NX64K;H*62s-auaD&p*4x zdjoBv_jY&E{hkTk&vouM>+B6=M+|kJ+Z*_c%=8YVL_FqRwl8o|#C-S9`vPaRtUHD4 zPBH85L%schoQMc_(Eh;rE&2iK2aMhy7#^|C{d9lef{5qch<^soO+Nj@$Wuuf&Uq0_ zoa3|Iiw^|CpQOou&{i;_!bBXvKLii@{}7Zx^B~!Sh8+x~#mtvYAL%}RFmQgv?e6Ob z110WxhrAW}i|<@E<4$kIFA!G{AG z;jQFfl3~Q(OvGWig4)vPt~?y*-)=$U7t{Wg`o)yKqn!svI_I4; z^7Icf-(2s}N~Tqsv?GD^2-%7wfj`FOHlF@T{$l%`ZsU5uFC*4^o@IvN-yANU|)54*oVCg)ZEf@K=loMzTM7U&jH;eOjEBIIs37LbnxKOX3n zI#LF%oL8Kz3@5!r4ye3~o%CvXv}8TZtcOk3ag31@y0KMcRfe4as}JO4Ui`2Vj93|& zU(q*W?XYW{H_rRT_s`s_E;9f82(unhS$gFT{cPBC583ZOk}&OK3heiGz2aQ z_IQk!u@B1gr88CEpotGz8j~eD;nLJnwTS_|N@Lu)_gH{$9Sn^q>>`>`Nzj*Uvl zpm&dk=WEa4_RLV*BlD-z-KxewTq@op!doZ**?N|fo|EdN&zFaYxv%6m1)}-4(;s8T zV=ChnDWE=PdnU!qUl+3|X8pRTrl?jz+EL_gjyxmi?vFg9m;BPf8N5BgKS)GBTY0xM z`V2WDVm%h_fH`Dy42uPe^V8(B6k3zHhQ)y;=(M?Ha}7&4V_0^a3_3iTyR-TEH*zFC fSSEY(0oilYWG_cK!Rux_L3Ch2M0ECDFD3jRoCr~b delta 90598 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

PaSVN&JLqp9otIw!t>K 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 Yo^W4(|Ey5t2lKgmo8t5Ddo}t00Qx93i2wiq diff --git a/firmware/include/nfc.h b/firmware/include/nfc.h index 633bf70..9a7f673 100644 --- a/firmware/include/nfc.h +++ b/firmware/include/nfc.h @@ -93,6 +93,8 @@ bool nfc_mifare_read(uint8_t block_id, uint8_t block_data[16]); bool nfc_felica_read(uint16_t svc_code, uint16_t block_id, uint8_t block_data[16]); +bool nfc_15693_read(const uint8_t uid[8], uint8_t block_id, uint8_t block_data[4]); + void nfc_select(int phase); void nfc_deselect(); diff --git a/firmware/src/gui.c b/firmware/src/gui.c index 36cd40a..9801dd6 100644 --- a/firmware/src/gui.c +++ b/firmware/src/gui.c @@ -119,8 +119,6 @@ static void draw_home_card() center_image(&image_aic_nesica); } else if (card_splash.card == CARD_AIC) { center_image(&image_aic_generic); - } else if (card_splash.card == CARD_EAMUSE) { - center_image(&image_eamuse); } else if (card_splash.card == CARD_MIFARE) { center_image(&image_mifare); } else if (card_splash.card == CARD_AIME) { @@ -129,6 +127,10 @@ static void draw_home_card() center_image(&image_bana); } else if (card_splash.card == CARD_NESICA) { center_image(&image_nesica); + } else if (card_splash.card == CARD_VICINITY) { + center_image(&image_vicinity); + } else if (card_splash.card == CARD_EAMUSE) { + center_image(&image_eamuse); } } diff --git a/firmware/src/lib/nfc.c b/firmware/src/lib/nfc.c index ca57c59..45ddcf2 100644 --- a/firmware/src/lib/nfc.c +++ b/firmware/src/lib/nfc.c @@ -136,6 +136,7 @@ struct { void (*set_wait_loop)(nfc_wait_loop_t loop); void (*select)(int phase); void (*deselect)(); + bool (*iso15693_read)(const uint8_t uid[8], uint8_t block_id, uint8_t block_data[4]); } api[3] = { { pn532_firmware_ver, @@ -146,6 +147,7 @@ struct { pn532_set_wait_loop, pn532_select, pn532_deselect, + func_null, }, { pn5180_firmware_ver, @@ -156,6 +158,7 @@ struct { pn5180_set_wait_loop, pn5180_select, pn5180_deselect, + pn5180_15693_read, }, { 0 }, }; @@ -325,7 +328,7 @@ nfc_card_t nfc_detect_card() } else if (card.card_type == NFC_CARD_MIFARE) { update_card_name(CARD_MIFARE, false); } else if (card.card_type == NFC_CARD_VICINITY) { - update_card_name(CARD_EAMUSE, true); + update_card_name(CARD_VICINITY, false); } return card; @@ -371,6 +374,12 @@ static void identify_mifare() } } +static void identify_15693() +{ + uint8_t buf_ignored[16]; + nfc_15693_read(last_card.uid, 0x1b, buf_ignored); +} + void nfc_identify_last_card() { if (time_us_64() - last_card_time > CARD_INFO_TIMEOUT_US) { @@ -381,6 +390,8 @@ void nfc_identify_last_card() identify_felica(); } else if (last_card.card_type == NFC_CARD_MIFARE) { identify_mifare(); + } else if (last_card.card_type == NFC_CARD_VICINITY) { + identify_15693(); } } @@ -482,3 +493,24 @@ void nfc_deselect() api[nfc_module].deselect(); } } + +static void vicinity_report_name(uint8_t block_id, const uint8_t block_data[4]) +{ + if ((block_id == 0x1b) && (memcmp(block_data, "W_OK", 4) == 0)) { + update_card_name(CARD_EAMUSE, true); + } +} + +bool nfc_15693_read(const uint8_t uid[8], uint8_t block_id, uint8_t block_data[4]) +{ + if (!api[nfc_module].iso15693_read) { + return false; + } + + bool read_ok = api[nfc_module].iso15693_read(uid, block_id, block_data); + if (read_ok) { + vicinity_report_name(block_id, block_data); + } + + return read_ok; +} diff --git a/firmware/src/lib/pn5180.c b/firmware/src/lib/pn5180.c index 0316244..dbfc6ec 100644 --- a/firmware/src/lib/pn5180.c +++ b/firmware/src/lib/pn5180.c @@ -565,3 +565,39 @@ void pn5180_deselect() { poll_mifare_2(); } + +bool pn5180_15693_read(const uint8_t uid[8], uint8_t block_id, uint8_t block_data[4]) +{ + uint8_t cmd[] = { 0x22, 0x20, uid[7], uid[6], uid[5], uid[4], + uid[3], uid[2], uid[1], uid[0], block_id } ; + pn5180_send_data(cmd, sizeof(cmd), 0); + + sleep_ms_with_loop(5); + + uint32_t status = pn5180_get_irq(); + if (0 == (status & 0x4000)) { + return false; + } + + while (0 == (status & 0x01)) { + sleep_ms_with_loop(5); + status = pn5180_get_irq(); + } + + uint16_t len = pn5180_get_rx() & 0x1ff; + + uint8_t buf[5] = { 0 }; + + if (len > sizeof(buf)) { + return false; + } + + pn5180_read_data(buf, len); + if ((buf[0] & 0x01) != 0) { + return false; + } + + memcpy(block_data, buf + 1, 4); + + return true; +} diff --git a/firmware/src/lib/pn5180.h b/firmware/src/lib/pn5180.h index ec976e1..cc52303 100644 --- a/firmware/src/lib/pn5180.h +++ b/firmware/src/lib/pn5180.h @@ -52,6 +52,8 @@ bool pn5180_mifare_read(uint8_t block_id, uint8_t block_data[16]); bool pn5180_felica_read(uint16_t svc_code, uint16_t block_id, uint8_t block_data[16]); +bool pn5180_15693_read(const uint8_t uid[8], uint8_t block_id, uint8_t block_data[4]); + void pn5180_select(int phase); void pn5180_deselect(); diff --git a/firmware/src/res/image_vicinity.h b/firmware/src/res/image_vicinity.h new file mode 100644 index 0000000..279049b --- /dev/null +++ b/firmware/src/res/image_vicinity.h @@ -0,0 +1,294 @@ +#include +#include "../gfx.h" + +const uint8_t image_vicinity_pixels[] = { + // image_vicinity_pixels (15180 -> RLE 4246) + 0x00, 0x02, 0x01, 0x00, 0x22, 0x00, 0x33, 0x63, 0x22, 0x00, 0x10, 0x00, 0x00, 0x04, 0x01, 0x00, + 0x23, 0x00, 0x33, 0x65, 0x32, 0x00, 0x10, 0x00, 0x00, 0x03, 0x23, 0x00, 0x33, 0x67, 0x32, 0x00, + 0x00, 0x02, 0x02, 0x00, 0x33, 0x69, 0x20, 0x00, 0x00, 0x01, 0x23, 0x00, 0x33, 0x69, 0x32, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x33, 0x6b, 0x10, 0x00, 0x02, 0x00, 0x33, 0x6b, 0x20, 0x00, 0x13, 0x00, + 0x33, 0x6b, 0x31, 0x00, 0x23, 0x00, 0x33, 0x6b, 0x32, 0x00, 0x23, 0x00, 0x33, 0x6b, 0x32, 0x00, + 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, + 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0x1d, 0x68, 0x00, 0x88, 0x00, 0x89, 0x00, + 0x33, 0x04, 0xd8, 0x00, 0x88, 0x00, 0x89, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, + 0x39, 0x00, 0xac, 0x00, 0x6e, 0x00, 0x7e, 0x00, 0xdb, 0x00, 0x93, 0x00, 0x33, 0x02, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0x79, 0x00, 0x33, 0x03, 0xd8, 0x00, + 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0x48, 0x00, + 0x88, 0x07, 0xe3, 0x00, 0xc8, 0x00, 0x88, 0x00, 0x8c, 0x00, 0x33, 0x03, 0x34, 0x00, 0x88, 0x01, + 0xf9, 0x00, 0x33, 0x29, 0xb8, 0x00, 0x88, 0x00, 0x8b, 0x00, 0x33, 0x03, 0x39, 0x00, 0x78, 0x00, + 0x88, 0x00, 0xd3, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0xbf, 0x00, 0x88, 0x03, + 0x7b, 0x00, 0x93, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0xa8, 0x00, 0x88, 0x07, 0xe3, 0x00, 0x4f, 0x00, 0x88, 0x01, + 0x43, 0x00, 0x33, 0x02, 0x3d, 0x00, 0x88, 0x01, 0xa3, 0x00, 0x33, 0x29, 0x98, 0x00, 0x88, 0x00, + 0x86, 0x00, 0x33, 0x03, 0x3a, 0x00, 0x88, 0x01, 0xa3, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x02, 0x3d, 0x00, 0x88, 0x05, 0xd9, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x01, 0xc8, 0x00, 0x88, 0x01, 0x43, 0x00, 0x33, 0x02, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0x48, 0x00, 0x88, 0x07, 0xe3, 0x00, + 0x3b, 0x00, 0x88, 0x01, 0x63, 0x00, 0x33, 0x02, 0xa8, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x2a, + 0x3d, 0x00, 0x88, 0x01, 0x43, 0x00, 0x33, 0x02, 0x3d, 0x00, 0x88, 0x00, 0x87, 0x00, 0x93, 0x00, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x02, 0x68, 0x00, 0x88, 0x05, 0x8d, 0x00, 0x33, 0x01, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x01, 0xe3, 0x00, 0x33, 0x02, + 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, + 0xa8, 0x00, 0x88, 0x07, 0xe3, 0x00, 0x33, 0x00, 0xd8, 0x00, 0x88, 0x00, 0x8a, 0x00, 0x33, 0x02, + 0xe8, 0x00, 0x88, 0x00, 0x74, 0x00, 0x33, 0x2a, 0x3a, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x02, + 0x97, 0x00, 0x88, 0x00, 0x8c, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, + 0x3c, 0x00, 0x88, 0x01, 0x7b, 0x00, 0x43, 0x00, 0x34, 0x00, 0xc8, 0x00, 0x88, 0x01, 0xa3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x01, 0x8b, 0x00, + 0x33, 0x02, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x03, 0x48, 0x00, 0x88, 0x00, 0x8f, 0x00, + 0x93, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x2a, 0x39, 0x00, 0x78, 0x00, + 0x88, 0x00, 0x63, 0x00, 0x33, 0x02, 0xa8, 0x00, 0x88, 0x00, 0x8a, 0x00, 0x33, 0x00, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0x98, 0x00, 0x88, 0x00, 0x8f, 0x00, 0x93, 0x00, 0x33, 0x01, + 0x3b, 0x00, 0x88, 0x01, 0xe3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, + 0xc8, 0x00, 0x88, 0x01, 0x8f, 0x00, 0x93, 0x00, 0x33, 0x01, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, + 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x00, 0x97, 0x00, 0x88, 0x00, 0x86, 0x00, + 0x93, 0x00, 0x33, 0x2b, 0xc8, 0x00, 0x88, 0x00, 0x84, 0x00, 0x33, 0x02, 0xd8, 0x00, 0x88, 0x00, + 0xf3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, + 0x8a, 0x00, 0x33, 0x03, 0xd8, 0x00, 0x88, 0x00, 0x84, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x02, 0xc3, 0x00, 0x33, 0x01, 0xd8, 0x00, 0x88, 0x00, + 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, + 0x93, 0x00, 0x33, 0x03, 0x39, 0x00, 0xe8, 0x00, 0x88, 0x00, 0x84, 0x00, 0x33, 0x00, 0xc8, 0x00, + 0x88, 0x00, 0x84, 0x00, 0x33, 0x2c, 0xa8, 0x00, 0x88, 0x00, 0x8b, 0x00, 0x33, 0x01, 0x39, 0x00, + 0x78, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, + 0xe8, 0x00, 0x88, 0x00, 0x63, 0x00, 0x33, 0x03, 0xa6, 0x00, 0xca, 0x00, 0x43, 0x00, 0x33, 0x00, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xdf, 0x00, 0x88, 0x00, + 0x89, 0x00, 0x33, 0x01, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x04, 0x48, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x34, 0x00, 0x88, 0x01, 0xc3, 0x00, 0x33, 0x2c, 0x3f, 0x00, 0x88, 0x00, 0x8e, 0x00, + 0x33, 0x01, 0x3a, 0x00, 0x88, 0x01, 0x43, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x07, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xcb, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xd8, 0x00, + 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, + 0x88, 0x01, 0x93, 0x00, 0x33, 0x04, 0x3c, 0x00, 0x88, 0x01, 0xa6, 0x00, 0x88, 0x00, 0x8f, 0x00, + 0x33, 0x2d, 0x3c, 0x00, 0x88, 0x01, 0x43, 0x00, 0x33, 0x00, 0x3c, 0x00, 0x88, 0x00, 0x8e, 0x00, + 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x88, 0x01, 0xa3, 0x00, + 0x33, 0x07, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, + 0x68, 0x00, 0x88, 0x00, 0xa3, 0x00, 0x33, 0x00, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x04, + 0x39, 0x00, 0xf8, 0x00, 0x88, 0x00, 0x78, 0x00, 0x88, 0x00, 0x8a, 0x00, 0x33, 0x2d, 0x34, 0x00, + 0x88, 0x01, 0xb3, 0x00, 0x33, 0x00, 0x97, 0x00, 0x88, 0x00, 0x8b, 0x00, 0x33, 0x01, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x88, 0x01, 0xa3, 0x00, 0x33, 0x07, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0xa8, 0x00, 0x88, 0x00, + 0xe3, 0x00, 0x33, 0x00, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x05, 0xa8, 0x00, 0x88, 0x02, + 0xd3, 0x00, 0x33, 0x2e, 0xe8, 0x00, 0x88, 0x00, 0xe3, 0x00, 0x33, 0x00, 0xa8, 0x00, 0x88, 0x00, + 0x84, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x88, 0x01, + 0x43, 0x00, 0x33, 0x07, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, + 0xc3, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8b, 0x00, 0x33, 0x00, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, + 0x33, 0x05, 0x3d, 0x00, 0x88, 0x01, 0x87, 0x00, 0x93, 0x00, 0x33, 0x2e, 0xb8, 0x00, 0x88, 0x00, + 0x84, 0x00, 0x33, 0x00, 0xc8, 0x00, 0x88, 0x00, 0x63, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x88, 0x01, 0xa3, 0x00, 0x33, 0x07, 0x3d, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x39, 0x00, 0x78, 0x00, 0x8f, 0x00, + 0x93, 0x00, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x05, 0x34, 0x00, 0x78, 0x00, 0x88, 0x00, + 0x8b, 0x00, 0x33, 0x2f, 0x48, 0x00, 0x88, 0x00, 0x8c, 0x00, 0x39, 0x00, 0x78, 0x00, 0x88, 0x00, + 0xb3, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x88, 0x01, + 0xa3, 0x00, 0x33, 0x07, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, + 0xc3, 0x00, 0x33, 0x00, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, + 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x2f, 0x36, 0x00, 0x88, 0x00, 0x8e, 0x00, + 0x3a, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x88, 0x01, 0xc3, 0x00, 0x33, 0x03, 0x9e, 0x00, 0xca, 0x00, 0x43, 0x00, 0x33, 0x00, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x00, + 0x3f, 0x00, 0x88, 0x00, 0x84, 0x00, 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x06, 0xc8, 0x00, + 0x88, 0x00, 0xf3, 0x00, 0x33, 0x2f, 0x3b, 0x00, 0x88, 0x01, 0x4c, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x02, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xf8, 0x00, 0x88, 0x00, 0x63, 0x00, + 0x33, 0x03, 0xb8, 0x00, 0x88, 0x00, 0x84, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0xd8, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, + 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x2f, + 0x39, 0x00, 0x88, 0x01, 0xc7, 0x00, 0x88, 0x00, 0x8a, 0x00, 0x33, 0x02, 0x3d, 0x00, 0x88, 0x00, + 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0x8a, 0x00, 0x33, 0x03, 0xe8, 0x00, 0x88, 0x00, + 0xf3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, + 0xc3, 0x00, 0x33, 0x01, 0x68, 0x00, 0x88, 0x00, 0x78, 0x00, 0x88, 0x00, 0xb3, 0x00, 0x33, 0x00, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x06, + 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x30, 0xd8, 0x00, 0x88, 0x02, 0x79, 0x00, 0x33, 0x02, + 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0x48, 0x00, 0x88, 0x00, 0x8e, 0x00, 0x43, 0x00, + 0x33, 0x01, 0x3c, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x01, 0x48, 0x00, 0x88, 0x02, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, + 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x30, 0xa8, 0x00, 0x88, 0x02, 0xc3, 0x00, + 0x33, 0x02, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0x3c, 0x00, 0x88, 0x01, 0xfb, 0x00, + 0x43, 0x00, 0x94, 0x00, 0xd8, 0x00, 0x88, 0x00, 0x8f, 0x00, 0x93, 0x00, 0x33, 0x00, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x01, 0x3c, 0x00, + 0x88, 0x02, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, + 0x88, 0x01, 0x93, 0x00, 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x30, 0x97, 0x00, + 0x88, 0x02, 0xa3, 0x00, 0x33, 0x02, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0x39, 0x00, + 0x68, 0x00, 0x88, 0x05, 0x8a, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, + 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x01, 0x39, 0x00, 0x78, 0x00, 0x88, 0x01, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, + 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x30, 0x3c, 0x00, 0x88, 0x01, 0x8f, 0x00, + 0x33, 0x03, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x02, 0x9d, 0x00, 0x88, 0x05, 0xb3, 0x00, + 0x33, 0x01, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, + 0x33, 0x02, 0xb8, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, + 0x33, 0x30, 0x3a, 0x00, 0x88, 0x01, 0x8c, 0x00, 0x33, 0x03, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x03, 0xb7, 0x00, 0x88, 0x03, 0xfa, 0x00, 0x33, 0x02, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, + 0x33, 0x01, 0xc8, 0x00, 0x88, 0x00, 0xc3, 0x00, 0x33, 0x02, 0x3e, 0x00, 0x88, 0x01, 0xb3, 0x00, + 0x33, 0x00, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, + 0x33, 0x06, 0xc8, 0x00, 0x88, 0x00, 0xf3, 0x00, 0x33, 0x31, 0xf8, 0x00, 0x88, 0x00, 0x84, 0x00, + 0x33, 0x03, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x39, 0x00, 0xad, 0x00, 0x67, 0x00, + 0xfe, 0x00, 0xca, 0x00, 0x33, 0x03, 0x3d, 0x00, 0x88, 0x00, 0x8d, 0x00, 0x33, 0x01, 0xc8, 0x00, + 0x88, 0x00, 0xc3, 0x00, 0x33, 0x02, 0x3a, 0x00, 0x88, 0x01, 0xb3, 0x00, 0x33, 0x00, 0x3d, 0x00, + 0x88, 0x00, 0x8d, 0x00, 0x33, 0x03, 0x3b, 0x00, 0x88, 0x01, 0x93, 0x00, 0x33, 0x06, 0xc8, 0x00, + 0x88, 0x00, 0xf3, 0x00, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, + 0x33, 0x30, 0x39, 0x00, 0xc9, 0x00, 0x33, 0x0b, 0x3a, 0x00, 0xb9, 0x00, 0x33, 0x5d, 0x9e, 0x00, + 0x5a, 0x00, 0x33, 0x0b, 0x3c, 0x00, 0x5c, 0x00, 0x33, 0x09, 0x45, 0x00, 0x55, 0x00, 0xc3, 0x00, + 0x33, 0x03, 0xe5, 0x00, 0x55, 0x03, 0x56, 0x00, 0x33, 0x03, 0x3a, 0x00, 0xce, 0x00, 0x7f, 0x00, + 0xda, 0x00, 0x33, 0x04, 0x9b, 0x00, 0xdf, 0x00, 0x7e, 0x00, 0xca, 0x00, 0x33, 0x05, 0xac, 0x00, + 0xe7, 0x00, 0xed, 0x00, 0xb3, 0x00, 0x33, 0x2b, 0xd5, 0x00, 0xc3, 0x00, 0x33, 0x0b, 0x39, 0x00, + 0xe5, 0x00, 0xb3, 0x00, 0x33, 0x08, 0xc5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x02, 0x39, 0x00, + 0x55, 0x04, 0x5d, 0x00, 0x33, 0x02, 0x39, 0x00, 0xd5, 0x00, 0x55, 0x02, 0xd3, 0x00, 0x33, 0x02, + 0x3a, 0x00, 0xf5, 0x00, 0x55, 0x02, 0xd3, 0x00, 0x33, 0x03, 0x9d, 0x00, 0x55, 0x02, 0x5e, 0x00, + 0x43, 0x00, 0x33, 0x29, 0x3b, 0x00, 0x5d, 0x00, 0x93, 0x00, 0x3a, 0x00, 0xc9, 0x00, 0x33, 0x07, + 0x3a, 0x00, 0xc9, 0x00, 0x33, 0x00, 0x97, 0x00, 0x74, 0x00, 0x33, 0x07, 0x3a, 0x00, 0x55, 0x01, + 0xc3, 0x00, 0x33, 0x02, 0x34, 0x00, 0x55, 0x04, 0x56, 0x00, 0x33, 0x02, 0x9e, 0x00, 0x55, 0x03, + 0x5d, 0x00, 0x33, 0x02, 0xa5, 0x00, 0x55, 0x03, 0x56, 0x00, 0x93, 0x00, 0x33, 0x01, 0x39, 0x00, + 0x65, 0x00, 0x55, 0x03, 0x74, 0x00, 0x33, 0x29, 0x97, 0x00, 0xf4, 0x00, 0x33, 0x00, 0x47, 0x00, + 0x74, 0x00, 0x33, 0x07, 0x3b, 0x00, 0x56, 0x00, 0x93, 0x00, 0x3a, 0x00, 0x5d, 0x00, 0x33, 0x07, + 0xa5, 0x00, 0x55, 0x01, 0xb3, 0x00, 0x33, 0x02, 0x3a, 0x00, 0x55, 0x04, 0x5d, 0x00, 0x33, 0x02, + 0xd5, 0x00, 0x55, 0x04, 0xa3, 0x00, 0x33, 0x00, 0x39, 0x00, 0x75, 0x00, 0x55, 0x04, 0xc3, 0x00, + 0x33, 0x01, 0x3b, 0x00, 0x55, 0x04, 0x56, 0x00, 0x33, 0x29, 0xc5, 0x00, 0xb3, 0x00, 0x39, 0x00, + 0xe5, 0x00, 0xa3, 0x00, 0x33, 0x08, 0xc5, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x65, 0x00, 0xa3, 0x00, + 0x33, 0x05, 0x3c, 0x00, 0x55, 0x02, 0xc3, 0x00, 0x33, 0x02, 0x3c, 0x00, 0x55, 0x00, 0x5a, 0x00, + 0x33, 0x05, 0x3a, 0x00, 0x55, 0x01, 0x64, 0x00, 0x94, 0x00, 0xf5, 0x00, 0x55, 0x00, 0xd3, 0x00, + 0x33, 0x00, 0x3b, 0x00, 0x55, 0x01, 0xb9, 0x00, 0x3a, 0x00, 0xe5, 0x00, 0x55, 0x00, 0x59, 0x00, + 0x33, 0x01, 0x3f, 0x00, 0x55, 0x00, 0x56, 0x00, 0x43, 0x00, 0x46, 0x00, 0x55, 0x01, 0x43, 0x00, + 0x33, 0x27, 0x39, 0x00, 0x7f, 0x00, 0x93, 0x00, 0x3c, 0x00, 0x5c, 0x00, 0x33, 0x00, 0x3b, 0x00, + 0xd3, 0x00, 0x33, 0x03, 0x34, 0x00, 0x6a, 0x00, 0x33, 0x00, 0x9e, 0x00, 0x54, 0x00, 0x33, 0x00, + 0xa5, 0x00, 0xc9, 0x00, 0x33, 0x04, 0x3a, 0x00, 0xe5, 0x00, 0x55, 0x02, 0xb3, 0x00, 0x33, 0x02, + 0x3d, 0x00, 0x55, 0x00, 0x54, 0x00, 0x33, 0x05, 0x3d, 0x00, 0x55, 0x00, 0x57, 0x00, 0x93, 0x00, + 0x33, 0x00, 0xa5, 0x00, 0x55, 0x00, 0x79, 0x00, 0x33, 0x00, 0x36, 0x00, 0x55, 0x00, 0x5c, 0x00, + 0x33, 0x01, 0x97, 0x00, 0x55, 0x00, 0x5b, 0x00, 0x33, 0x01, 0x45, 0x00, 0x55, 0x00, 0xf9, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x55, 0x01, 0xa3, 0x00, 0x33, 0x27, 0x3a, 0x00, 0x5c, 0x00, 0x33, 0x00, + 0x97, 0x00, 0xf9, 0x00, 0x33, 0x00, 0xa5, 0x00, 0xe3, 0x00, 0x33, 0x03, 0x34, 0x00, 0x5f, 0x00, + 0x43, 0x00, 0x3a, 0x00, 0x5d, 0x00, 0x33, 0x00, 0x3e, 0x00, 0x59, 0x00, 0x33, 0x04, 0xb5, 0x00, + 0x55, 0x00, 0x57, 0x00, 0xf5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x02, 0x37, 0x00, 0x55, 0x00, + 0x59, 0x00, 0x33, 0x05, 0x35, 0x00, 0x55, 0x00, 0x5c, 0x00, 0x33, 0x01, 0x9f, 0x00, 0x6c, 0x00, + 0xb9, 0x00, 0x33, 0x00, 0x3f, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x33, 0x01, 0x9c, 0x00, 0x55, 0x00, + 0x5d, 0x00, 0x33, 0x01, 0x9b, 0x00, 0xc6, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x39, 0x00, 0x55, 0x01, + 0x43, 0x00, 0x33, 0x27, 0x3c, 0x00, 0x54, 0x00, 0x33, 0x00, 0xb5, 0x00, 0xb3, 0x00, 0x39, 0x00, + 0x77, 0x00, 0x43, 0x00, 0x33, 0x04, 0xb5, 0x00, 0xd3, 0x00, 0x33, 0x00, 0x65, 0x00, 0x43, 0x00, + 0x3b, 0x00, 0x5a, 0x00, 0x33, 0x04, 0xa5, 0x00, 0x55, 0x00, 0xf4, 0x00, 0x65, 0x00, 0x55, 0x00, + 0xb3, 0x00, 0x33, 0x02, 0x95, 0x00, 0x55, 0x00, 0xfa, 0x00, 0xdf, 0x00, 0xfd, 0x00, 0xa9, 0x00, + 0x33, 0x02, 0x45, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x33, 0x05, 0x3f, 0x00, 0x55, 0x00, 0x5a, 0x00, + 0x33, 0x01, 0x3c, 0x00, 0x55, 0x00, 0x57, 0x00, 0x33, 0x05, 0x3a, 0x00, 0x55, 0x00, 0x5f, 0x00, + 0x93, 0x00, 0x33, 0x27, 0x3f, 0x00, 0x79, 0x00, 0x33, 0x00, 0xd5, 0x00, 0x43, 0x00, 0x3b, 0x00, + 0x5b, 0x00, 0x33, 0x01, 0xac, 0x00, 0xdc, 0x00, 0x93, 0x00, 0x33, 0x00, 0x36, 0x00, 0x54, 0x00, + 0x33, 0x00, 0xb5, 0x00, 0xb3, 0x00, 0x3a, 0x00, 0x5c, 0x00, 0x33, 0x04, 0xb5, 0x00, 0x5c, 0x00, + 0x93, 0x00, 0xd5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x02, 0xa5, 0x00, 0x55, 0x03, 0x56, 0x00, + 0x93, 0x00, 0x33, 0x01, 0xa5, 0x00, 0x55, 0x00, 0x59, 0x00, 0x33, 0x05, 0x36, 0x00, 0x55, 0x00, + 0x5c, 0x00, 0x33, 0x01, 0x3e, 0x00, 0x55, 0x01, 0x93, 0x00, 0x33, 0x03, 0x39, 0x00, 0xaf, 0x00, + 0x55, 0x00, 0x5a, 0x00, 0x33, 0x28, 0x95, 0x00, 0x63, 0x00, 0x33, 0x00, 0x7f, 0x00, 0x33, 0x00, + 0x3e, 0x00, 0x74, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x55, 0x01, 0xf4, 0x00, 0x33, 0x00, 0x3a, 0x00, + 0x5c, 0x00, 0x33, 0x00, 0x45, 0x00, 0xc3, 0x00, 0x39, 0x00, 0x5d, 0x00, 0x33, 0x04, 0xac, 0x00, + 0x93, 0x00, 0x33, 0x00, 0xd5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x02, 0xb5, 0x00, 0x55, 0x04, + 0xf9, 0x00, 0x33, 0x01, 0xb5, 0x00, 0x55, 0x00, 0x53, 0x00, 0xad, 0x00, 0xff, 0x00, 0x6b, 0x00, + 0x33, 0x02, 0x3c, 0x00, 0x55, 0x01, 0xc9, 0x00, 0x34, 0x00, 0xd5, 0x00, 0x55, 0x01, 0x43, 0x00, + 0x33, 0x03, 0xd5, 0x00, 0x55, 0x00, 0x57, 0x00, 0xb3, 0x00, 0x33, 0x28, 0x45, 0x00, 0xc3, 0x00, + 0x39, 0x00, 0x5d, 0x00, 0x33, 0x00, 0x95, 0x00, 0x63, 0x00, 0x33, 0x00, 0x97, 0x00, 0x55, 0x01, + 0x5d, 0x00, 0x33, 0x00, 0x39, 0x00, 0x5d, 0x00, 0x33, 0x00, 0x35, 0x00, 0x63, 0x00, 0x39, 0x00, + 0x7e, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x02, 0xc5, 0x00, 0x55, 0x04, + 0x5d, 0x00, 0x33, 0x01, 0xb5, 0x00, 0x55, 0x00, 0xfc, 0x00, 0x55, 0x02, 0xf4, 0x00, 0x33, 0x01, + 0x39, 0x00, 0x55, 0x06, 0x43, 0x00, 0x33, 0x03, 0xe5, 0x00, 0x55, 0x00, 0x5c, 0x00, 0x33, 0x29, + 0x45, 0x00, 0xc3, 0x00, 0x34, 0x00, 0x5c, 0x00, 0x33, 0x00, 0x45, 0x00, 0xc3, 0x00, 0x33, 0x00, + 0xa5, 0x00, 0x55, 0x01, 0x57, 0x00, 0x93, 0x00, 0x33, 0x00, 0x7e, 0x00, 0x33, 0x00, 0x37, 0x00, + 0xe3, 0x00, 0x33, 0x00, 0xff, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x02, + 0xe5, 0x00, 0x55, 0x00, 0xea, 0x00, 0x39, 0x00, 0xaf, 0x00, 0x55, 0x01, 0x43, 0x00, 0x33, 0x00, + 0xc5, 0x00, 0x55, 0x04, 0x57, 0x00, 0x43, 0x00, 0x33, 0x01, 0xb5, 0x00, 0x55, 0x05, 0xa3, 0x00, + 0x33, 0x03, 0x55, 0x02, 0xfa, 0x00, 0x33, 0x28, 0x45, 0x00, 0xc3, 0x00, 0x34, 0x00, 0x5c, 0x00, + 0x33, 0x00, 0x45, 0x00, 0xd3, 0x00, 0x33, 0x00, 0x45, 0x00, 0x55, 0x01, 0x57, 0x00, 0x33, 0x01, + 0x56, 0x00, 0x33, 0x00, 0x37, 0x00, 0xe3, 0x00, 0x33, 0x00, 0xff, 0x00, 0x33, 0x07, 0xd5, 0x00, + 0x55, 0x00, 0xc3, 0x00, 0x33, 0x02, 0xbc, 0x00, 0x66, 0x00, 0x93, 0x00, 0x33, 0x00, 0x3a, 0x00, + 0x55, 0x01, 0xb3, 0x00, 0x33, 0x00, 0xc5, 0x00, 0x55, 0x05, 0x63, 0x00, 0x33, 0x01, 0x3b, 0x00, + 0x55, 0x02, 0x7c, 0x00, 0x55, 0x01, 0x43, 0x00, 0x33, 0x03, 0x93, 0x00, 0x9b, 0x00, 0x55, 0x01, + 0xa3, 0x00, 0x33, 0x27, 0x45, 0x00, 0xd3, 0x00, 0x39, 0x00, 0x56, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x63, 0x00, 0x33, 0x00, 0x9f, 0x00, 0x55, 0x01, 0x5c, 0x00, 0x33, 0x00, 0x34, 0x00, 0x5d, 0x00, + 0x33, 0x00, 0x95, 0x00, 0x63, 0x00, 0x33, 0x00, 0x5e, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, + 0xb3, 0x00, 0x33, 0x07, 0xe5, 0x00, 0x55, 0x00, 0xd3, 0x00, 0x33, 0x00, 0xb5, 0x00, 0x55, 0x01, + 0xb9, 0x00, 0x34, 0x00, 0xd5, 0x00, 0x55, 0x00, 0x54, 0x00, 0x33, 0x02, 0x9c, 0x00, 0xe7, 0x00, + 0xec, 0x00, 0x4a, 0x00, 0x55, 0x01, 0x43, 0x00, 0x33, 0x05, 0xb5, 0x00, 0x55, 0x00, 0xe3, 0x00, + 0x33, 0x27, 0x35, 0x00, 0x63, 0x00, 0x33, 0x00, 0xff, 0x00, 0x33, 0x00, 0x36, 0x00, 0x54, 0x00, + 0x33, 0x00, 0x3a, 0x00, 0xf5, 0x00, 0x55, 0x00, 0x69, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x5b, 0x00, + 0x33, 0x00, 0x45, 0x00, 0xc3, 0x00, 0x39, 0x00, 0x5d, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, + 0xc3, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xd3, 0x00, 0x33, 0x00, 0xb5, 0x00, 0x55, 0x00, + 0x5c, 0x00, 0x33, 0x01, 0x9f, 0x00, 0x55, 0x00, 0x5b, 0x00, 0x33, 0x05, 0x3b, 0x00, 0x55, 0x01, + 0x93, 0x00, 0x33, 0x05, 0x45, 0x00, 0x55, 0x00, 0x54, 0x00, 0x33, 0x27, 0x3e, 0x00, 0x53, 0x00, + 0x33, 0x00, 0xd5, 0x00, 0x43, 0x00, 0x3b, 0x00, 0x5c, 0x00, 0x33, 0x01, 0x9b, 0x00, 0xba, 0x00, + 0x93, 0x00, 0x33, 0x00, 0x3e, 0x00, 0x59, 0x00, 0x33, 0x00, 0xb5, 0x00, 0xa3, 0x00, 0x3a, 0x00, + 0x5b, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x07, 0xc5, 0x00, 0x55, 0x00, + 0xd3, 0x00, 0x33, 0x00, 0x45, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x33, 0x01, 0x3d, 0x00, 0x55, 0x00, + 0x5c, 0x00, 0x33, 0x05, 0x3c, 0x00, 0x55, 0x00, 0x5f, 0x00, 0x33, 0x06, 0x95, 0x00, 0x55, 0x00, + 0x5a, 0x00, 0x33, 0x27, 0x3c, 0x00, 0x5a, 0x00, 0x33, 0x00, 0xa5, 0x00, 0xc3, 0x00, 0x39, 0x00, + 0xe5, 0x00, 0xa3, 0x00, 0x33, 0x04, 0xc5, 0x00, 0xc3, 0x00, 0x33, 0x00, 0xf7, 0x00, 0x93, 0x00, + 0x3c, 0x00, 0x5a, 0x00, 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x01, 0x3a, 0x00, + 0xcd, 0x00, 0xee, 0x00, 0x33, 0x02, 0xe5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x45, 0x00, + 0x55, 0x00, 0x5a, 0x00, 0x33, 0x01, 0x3c, 0x00, 0x55, 0x00, 0x5b, 0x00, 0x33, 0x00, 0x34, 0x00, + 0xcc, 0x00, 0x6d, 0x00, 0x33, 0x01, 0x3f, 0x00, 0x55, 0x00, 0x5d, 0x00, 0x33, 0x01, 0xac, 0x00, + 0xde, 0x00, 0xb3, 0x00, 0x33, 0x01, 0x45, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x33, 0x27, 0x3a, 0x00, + 0x5c, 0x00, 0x33, 0x00, 0x9f, 0x00, 0x74, 0x00, 0x33, 0x00, 0xa7, 0x00, 0x73, 0x00, 0x33, 0x03, + 0x3a, 0x00, 0x5e, 0x00, 0x93, 0x00, 0x3b, 0x00, 0x5c, 0x00, 0x93, 0x00, 0x3f, 0x00, 0x73, 0x00, + 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x01, 0x3a, 0x00, 0x55, 0x01, 0xa3, 0x00, + 0x33, 0x00, 0x3a, 0x00, 0x55, 0x01, 0xa3, 0x00, 0x33, 0x00, 0x36, 0x00, 0x55, 0x00, 0x5d, 0x00, + 0x33, 0x01, 0x3e, 0x00, 0x55, 0x00, 0x5b, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x55, 0x00, 0x57, 0x00, + 0x93, 0x00, 0x33, 0x00, 0xa5, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x33, 0x01, 0xc5, 0x00, 0x55, 0x00, + 0xf3, 0x00, 0x33, 0x01, 0xc5, 0x00, 0x55, 0x00, 0x54, 0x00, 0x33, 0x28, 0xf7, 0x00, 0x93, 0x00, + 0x3b, 0x00, 0x5d, 0x00, 0x33, 0x00, 0x3a, 0x00, 0xb3, 0x00, 0x33, 0x03, 0x39, 0x00, 0xc4, 0x00, + 0x33, 0x00, 0x9f, 0x00, 0x74, 0x00, 0x33, 0x00, 0xa5, 0x00, 0xc3, 0x00, 0x33, 0x07, 0xd5, 0x00, + 0x55, 0x00, 0xc3, 0x00, 0x33, 0x02, 0x75, 0x00, 0x55, 0x00, 0x7a, 0x00, 0x93, 0x00, 0xaf, 0x00, + 0x55, 0x00, 0x5f, 0x00, 0x33, 0x01, 0x3b, 0x00, 0x55, 0x01, 0xc4, 0x00, 0x34, 0x00, 0xc5, 0x00, + 0x55, 0x00, 0x54, 0x00, 0x33, 0x00, 0x39, 0x00, 0x85, 0x00, 0x55, 0x00, 0xd4, 0x00, 0x3a, 0x00, + 0x75, 0x00, 0x55, 0x00, 0x79, 0x00, 0x33, 0x01, 0x45, 0x00, 0x55, 0x00, 0x56, 0x00, 0x49, 0x00, + 0x9c, 0x00, 0x55, 0x01, 0xe3, 0x00, 0x33, 0x28, 0xb5, 0x00, 0xc3, 0x00, 0x33, 0x00, 0xd5, 0x00, + 0xc3, 0x00, 0x33, 0x07, 0x39, 0x00, 0x65, 0x00, 0xb3, 0x00, 0x33, 0x00, 0xe5, 0x00, 0x43, 0x00, + 0x33, 0x07, 0xd5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x02, 0xb5, 0x00, 0x55, 0x04, 0x5a, 0x00, + 0x33, 0x02, 0xe5, 0x00, 0x55, 0x04, 0xd3, 0x00, 0x33, 0x01, 0xc5, 0x00, 0x55, 0x04, 0xb3, 0x00, + 0x33, 0x01, 0x3d, 0x00, 0x55, 0x05, 0xa3, 0x00, 0x33, 0x28, 0x9e, 0x00, 0x54, 0x00, 0x33, 0x00, + 0x4e, 0x00, 0x54, 0x00, 0x33, 0x07, 0x3b, 0x00, 0x5d, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x5c, 0x00, + 0x33, 0x08, 0xd5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x02, 0x9d, 0x00, 0x55, 0x04, 0xc3, 0x00, + 0x33, 0x02, 0x47, 0x00, 0x55, 0x03, 0x5f, 0x00, 0x93, 0x00, 0x33, 0x01, 0x97, 0x00, 0x55, 0x03, + 0x5c, 0x00, 0x33, 0x02, 0x39, 0x00, 0xf5, 0x00, 0x55, 0x03, 0x5b, 0x00, 0x33, 0x29, 0x3a, 0x00, + 0x5e, 0x00, 0x93, 0x00, 0x34, 0x00, 0xb3, 0x00, 0x33, 0x07, 0x39, 0x00, 0xb3, 0x00, 0x33, 0x00, + 0x45, 0x00, 0xf9, 0x00, 0x33, 0x08, 0xd5, 0x00, 0x55, 0x00, 0xb3, 0x00, 0x33, 0x02, 0x39, 0x00, + 0xc5, 0x00, 0x55, 0x02, 0x5b, 0x00, 0x33, 0x03, 0x34, 0x00, 0xe5, 0x00, 0x55, 0x02, 0x69, 0x00, + 0x33, 0x02, 0x34, 0x00, 0xf5, 0x00, 0x55, 0x01, 0x58, 0x00, 0xb9, 0x00, 0x33, 0x03, 0x96, 0x00, + 0x55, 0x02, 0x57, 0x00, 0xb3, 0x00, 0x33, 0x2a, 0xc5, 0x00, 0xd3, 0x00, 0x33, 0x0b, 0x34, 0x00, + 0xf5, 0x00, 0xa3, 0x00, 0x33, 0x08, 0xd5, 0x00, 0x55, 0x00, 0xc3, 0x00, 0x33, 0x03, 0x94, 0x00, + 0xce, 0x00, 0x7f, 0x00, 0x6b, 0x00, 0x43, 0x00, 0x33, 0x04, 0x9a, 0x00, 0xdf, 0x00, 0x7e, 0x00, + 0xca, 0x00, 0x33, 0x04, 0x4b, 0x00, 0x67, 0x00, 0xf6, 0x00, 0xb4, 0x00, 0x33, 0x05, 0xac, 0x00, + 0xe7, 0x00, 0xf6, 0x00, 0xb9, 0x00, 0x33, 0x2b, 0x3d, 0x00, 0x5a, 0x00, 0x33, 0x0b, 0x3c, 0x00, + 0x5b, 0x00, 0x33, 0x5d, 0x39, 0x00, 0xa9, 0x00, 0x33, 0x0b, 0x34, 0x00, 0xa3, 0x00, 0x33, 0xff, + 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, 0x33, 0xff, + 0x33, 0xff, 0x33, 0xff, 0x33, 0xe2, 0x23, 0x00, 0x33, 0x6b, 0x32, 0x00, 0x23, 0x00, 0x33, 0x6b, + 0x32, 0x00, 0x13, 0x00, 0x33, 0x6b, 0x31, 0x00, 0x02, 0x00, 0x33, 0x6b, 0x20, 0x00, 0x01, 0x00, + 0x33, 0x6b, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x33, 0x69, 0x32, 0x00, 0x00, 0x01, 0x02, 0x00, + 0x33, 0x69, 0x20, 0x00, 0x00, 0x02, 0x23, 0x00, 0x33, 0x67, 0x32, 0x00, 0x00, 0x03, 0x01, 0x00, + 0x23, 0x00, 0x33, 0x65, 0x32, 0x00, 0x10, 0x00, 0x00, 0x04, 0x01, 0x00, 0x22, 0x00, 0x33, 0x63, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x02, +}; + +const uint32_t image_vicinity_pal[] = { + // image_vicinity_pal Pallete (RGB565A8*16) + 0x000000, 0x2effff, 0x8dffff, 0xfeffff, + 0xffe73c, 0xff0000, 0xff738e, 0xff2947, + 0xff008b, 0xfff79e, 0xffce7a, 0xffb5b7, + 0xff9cf4, 0xff7bf1, 0xff5acc, 0xff420a, +}; + +const image_t image_vicinity = { + .width = 220, + .height = 138, + + .pixels = { + .input = image_vicinity_pixels, + .bits = 4, + .size = sizeof(image_vicinity_pixels), + .encoding = RLE_RLE, + }, + .pallete = image_vicinity_pal, +}; + diff --git a/firmware/src/res/resource.h b/firmware/src/res/resource.h index bf75e43..14d3ebd 100644 --- a/firmware/src/res/resource.h +++ b/firmware/src/res/resource.h @@ -12,11 +12,12 @@ #include "image_aic_konami.h" #include "image_aic_sega.h" #include "image_aic_nesica.h" -#include "image_eamuse.h" #include "image_mifare.h" #include "image_bana.h" #include "image_aime.h" #include "image_nesica.h" +#include "image_vicinity.h" +#include "image_eamuse.h" #include "font_conthrax.h" #include "font_ltsaeada.h"