From e3f474662e6bdba727425f4283eea1708917e5a7 Mon Sep 17 00:00:00 2001 From: Alexander Whitestone Date: Mon, 23 Mar 2026 21:23:15 -0400 Subject: [PATCH] feat: add PWA manifest + service worker for offline + home screen install - manifest.json with icons, theme colors, standalone display mode - sw.js: cache-first service worker caching local assets and Three.js CDN modules, fonts; graceful offline fallback with cached index.html - Offline banner (visible when navigator.onLine === false) - iOS/Android home screen meta tags (apple-mobile-web-app-capable etc.) - 192x192 and 512x512 PNG icons with nexus sigil design Fixes #14 --- icons/icon-192.png | Bin 0 -> 8976 bytes icons/icon-512.png | Bin 0 -> 51869 bytes index.html | 30 ++++++++++++ manifest.json | 25 ++++++++++ style.css | 21 +++++++++ sw.js | 112 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 188 insertions(+) create mode 100644 icons/icon-192.png create mode 100644 icons/icon-512.png create mode 100644 manifest.json create mode 100644 sw.js diff --git a/icons/icon-192.png b/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..bce7ae5b74b2407ae3bc4a40ef71dc9c08f408f3 GIT binary patch literal 8976 zcmb7qRa6vQ)b`NbFqAaXrIga0(%mIp4&8$^3@N43Ad&(CQWAnR$Pgk(Gt_|03^8>5 zy#HF?)pzw>oO9ONYwe4D&U1D=dnfDbs*?~h5CQ-I5={*i!^iW-e+wV?aW`D?!UF)< z7c^BAjYA3%Mcx@Es%;}9v`M9GYEMA8Vtg?KTO6eZ3HXZ4N^h~SIC!S9*vlPpDfE*V zxm30lv&5)`0;rWwC37$t%#w>qT)N2p;Ji>?@fB&mZ;vV}TvjfT`yPa_xhZV1 zyPexd`kyyg{_CqX{bKp;z^p=T^$tZyvqaOEvKmcD<5>PYn$SCK9KhEq&WBY!{im9^ zRLQF1|04V$^5B0L1PK>lZVH)%xkL5@cg+Qw%)O4Ahx{P&mh~HZe)qlap}#i6^-c@% zLXe2BH;Y=;#H?5X^r*IwMHoG#6F4F8$D-T&>rcnVAvTCEgbG+C(Ax}ed*KRND^D!h zySy=rKw_^;5Bdiktps+v3Zdq2Q0amY7gc8fuYGb*GNo*CKZNX_|im@svJjlY;|gfECRR!*B%<7i;fvX5|Cd&CSc>nnn3gW#BkAqJyJ&r zaLLG??QS@ej4LBl*4oJ{vikvV$-nTtMd@vxTWKt_b$<)loLv76YURs4h75 zoYL;6_l(=!vq5XSt-M$5?>&yKwyZzBl9NVs7VPQlT*V^)gsnY1L+qDD-nCxvAncUE zT&~`Fb!E>1_Q}t(C{9fvWN);?1br+coMxQALLG@XS~M=P*BKdWemR9cP_^#SEVXBx zM=9Tg??ds>dUu6%R=ds$R*cb4`Nn&};J z_r*gritjRCUkTlrKA@6T&&_!%*@;+FtW!P!>jdSV3mwd6=n0xR<_}q}B&a*39bsI* z%sYpc$$y92vE0e3KA3T2v_ZJOI5dikRHqJrG{B(>sYy)y;9HTF2 zt{T3it!%HVE?y&E6O| z+UUH1FX##2391Bvj!#qHq?GuI3r*d>Ih4pF7)HEQT)NebOG&G3aZtSXU(VO^fo(P~W^@jc%^{i3hO*jOa3W=3pZIFus zbfzmsF^!&vZ{JXy^vVY@wv_La{NUTvRD0@uemfX&R}7M_@TQpORT$pN+6y1O;NBMO zl&Ak5X))c3YmWn_)%rU|9r+hlI#m0-Lwc+WyzcO91{Mr#5dd1$H<>#fcMZ8ff(6=+ z{6)cbKlgygJ?qDX@GQEOa+A@k=YH$S%*d2gITo=>408v)=R(T{DIJc-;tn#1kaYeo z*}TFnfzK8KP4K2g_v4x&cZe+{3SuYFV2M6%KLxr9c3p)Q_gx%!+FjZTL$7l7f{vJb z8jpIldPhSU{rX~hdF(9he#f%U4>&iDvl4(Q8Kf8pa|qV8aRgnl@o zcDNcD(BVD6#x`w?Yaf48KV+A>Jn%5pQ9trjHEvg+6WJP)M{!97VTNF+y}7&3 z8#08@cL)T|rSDIau%<=HNe|rk?sbZWK&`sl3xd!`;dqGd7C_`Hh5MUnb;;|R<^1Pm zyu?2`3PW_he^1jsMz9HeQReL2Z5M6s9mc;UgG>O6E|CzrPNQ#S3AanHuZ5%1-LTu; zmJ!`x3dH`W$cNG%j|&vx^e->;Ol(w8MdNIVEKd(c)1u8N&ncDxeox_R7DoJp-h(gvhTOsTr%aRC+N|wWIefIAZrgS z5us%78W4e{JVSn6`E8E+X-LV_QEZ4a5Ko|C!`7=kWDK_O_FC-4^|}Y{BKdfvez^NZ z&^0JNss`NIkvd#y+o-H3UoN@d*s2*=DGt~&%nv-&OO$M7YP8XC7RHqydrbhcgDGW{ zwEU29_$t?WBQl73$PiaZbHF|;18x18Yb@EXx(>G^4J$}0mYP|nK%0+K|1)F&Y%fUM z8pK`FD-l~FqT>+e-UrUE>+OT5aaut0qIqTQ zjBrpWeOhS%ZuD{saT#xS(2ERrF;Ky)@S|+;=MAPgPe-CwQx4CF+1oV;XFkoNZ}|M) z=f*PUm-k_yJL|oW`ZdJSIH*~McJ%?H_kxSCUwqeW5Xt0<2}#q!yDZFWi6?&(1LIG8 zj9}+166}dYqdR5Mk<5wrqzfI&+7qoJLTQg)OV?_2zs{e|1%moDobx zz!}{`jnqaN_$QV#M1w4f z3_JWZTGJYe1}6)w54ZWgnSaPt7jRKOu;W{B;WVpp)9@K>Bnx%1&7g0$Xrqq|p6he7 z_%!qQA(Ao--Evi{Rrq$^z1H<@()#%NSPtYPc=%c6z|N!nb9z5Dl5l?1pV04#Lc@nK z59_7DAaoQZvr01YkQjieT%Y+004blW5F2087E}KFZbmomO2{j+FQ1z--w6%$TV-_A ze$uuzvfC7_z!$S==in9A$lKlJZ$bIvmG z8UD&NkF75-$sKz%?5ST~cgZME9Rd8o^Ro0F7&hIjk0sI&kX%auSNJxSb6{@snFqkp zmjf~Y9lqZ#&G<0JIFNLLeS<@r75?XgJ%daKvG8EVfK~&wH=vfg;vIwh=EbkE>LlJ* zBRx;K`tony4W;p6(kTj`KwG&)e5lZ@-Q@DcytORx^nkgdoT{UI*pFJF4JK2Lr54%} zvD#&$xsg($#c3!J$x4|vykA=CwRP7ZU&xFyn5ag<>=QiM8gLbGLRr`5w5W zdT?n`r4-z+ewZn$Woz#cK@%B5<~E#b9ZD9J#NB_Abx=nBXp;UHSTA2=)u-xLY{C-G zxcI+v%MX@CUjI65k?a=`A(Yi%X>>jOXMH(CX6Gk7TJRl%&a6D*>0E*7wdGm($eyMz z+{ynlb?*8>me@ayRnC?lA?TU>r``h{gaJ%P+r-^t-&oBla7(XGq)uy%&1oznrD97< zI3#y8>Y3K8(89qnyYBX73JNg%>to$g(FUM9rrlt{erTJt*(0J!Ovm(UMH>y5rGR@o z&74A&p-rT^IV;5u*XBu(cli(+%574TKbj|6Zek6rD8EZT=KJlS6ainXX>sW;_iY9_ zo4k0Gi(!D-kZFL<1EIg(0iC70H5P}X~DdZFfMhv7C6FDl zSMpk2zx~YNsdA%_>TstrqTl7~do^`m;hNVc>DzSeY(bRw)qR~$s-bg$faTKkK6lkd z&){w!7tIxVTc)`=&C1!|MXAr&X&-}3_2CP3o z%^P(Ag5#`{lF6d#>-$WzBRq1UqLY|#Z~CxsQDr;Y{u0|u>IlKie2hskfZ^^CPk%%wq1KsK{u8%mwrIP#5x^2Ri9}*#)ayY_{09ffZ^rg9@o-wn$(iSOiTz(*cqWKMDM5;uNa5-3*9V$%PPVil&z|L(293*OSU1p zYgpbruVL!4^`v|mZ{{CHi9gnGrTSrv9qjKmIfBp~Aob_7Xwg!uxo4J?Pf3SoL_qe~ z^&+8XrhO%y!vwsTq+GV-I&HbjD3r67hb+I!LsB5uK`PMQoG?zBAwCRta~ z+Z0q5CG*>}-XYP4P6$^1Ugut*L=J}Ah!6MNT;gy=H`~BWyw9=|zX!Hqt_Rw;t&Iyg z)!ZT%TL^Ndk&knQ6__O`3M$b@m&N?3(c z1%pb^w;$CXh6fsbH>`Hu^m(xKy+>MrHp3j(%1b{Lm7EoQoF=ngRWcYby7||*yd7M% z{hQotRHaTwOL7q73!Ypmp2W4cUcG2fTmGc~Wn@G)?nK~ftH6=J8iPI8MNDVr+)$<7 z1KmRqS>=;)i37dfwD}y)sYDm;2M!1_q7SzcF!T+!QVifkCY-L1nCiA<@;EPRJ9j64 zpR~G09>Lcmj}95SCvq662LQIMFML*TbEhjvPZ}v0dE2a0Dr2s$-I!wL72P>I82~z&~y@id(3iO zJ?ps*u=A!k&#m7kuKG z4GNZv^vde8d;>eUwRE&qVjmSJ+W)E(2~)iv?R4qI2r8CdOy2d<};m#_nFG2-BUdErz|;ly+pu zuRps;9b_StMa=^u`Gy1@Ex4#~_m53oCNn2PkzNs##*TUbPKJ!TloDwSU9X-tghfxK z_R<*9mnAu_4487v$zx@M$se|_NT|3zIV7sVJW{kCYB*jFuS&0wJal{hauJVym8N0c z!%{galva~O-hjEiUPN`A=ok#(NMZ)&uFZfCt`#lt))hk-qd`{>d{!4FxC<%d^ycB|9xM8^_f~wBM zukR$B_fQ%uiu(7+7vs-UPlJQ|-yF&*GvKx{<~=B3PhZ)u=66$=jGKzJOb%Or zN}2vs?FwdxU{s?!k$zon$0_O~Cg)A^$#42?c-Y^=%H=p5f`@z6i6C6aa@k|nK%YL) zOGVnvGBbiR0o>9p_wf;Zx&!BobWi?UT1foUXVI-hc8Hjfle=J2_p)$^21)-{92n=!!ndKMcPRV~if^Kf`$gaia%p z*bFO%Vt;FT51VAjVUhJ9*+(4#T|X4)Q|-(@$?f<`cXNUAYj?u%j0tzD817yjgC4S` zk9rj}USf+pKA?SCqR?Ky{PFZZ%sc_yO!sTe6_ctSx#f+Qneu0&uGR;BUb73ZQ$RCM zgyJiy)R4^U6qD>35~v5DYxLFCqEt?%l(Qr#II2jPk0<~;zKZE?SES(Y;#N)P z8QQ_u@hNyUC~8q5!r&*&Lc&Xc0CL;*%Nkwn1DbBck#sVDhJnV}Ugo$265GrI_#;+7 zJc>$zD_$sx%1qW$CS*jps^ved1S-fuFyNf;(<_-y#i9kbV_h2%?+j+-@LIkR-Rlr& z*b#l>KJ#%adRssux?S7c%TEE$*(@?{OQ(QJ846Q0zRO3rin$v7 zZZoUTE|o*243$jkiQlP%PIe&yDd$LOi$Y5Yfslv` zEqP@vk#XFBS_s(vA0|$odlSY}_uVc9v2wB8&6M}e>W^~%pF6AztU}JSlewEpV(bLQ zjAG|-ySen)d0dj|s+AZ*O`_kpf~tY=#fk^PC8LysX^a~x>t0QWabkLuyh1UDvD#mi zJ{DGcyBKJbCS-+-{4C);1vS+jCH~TjWt9##uEZ#88*=V1Z9VMTIstIWX~WpnjE#{1TBObD>v zmAmfW=w<{%6CY#hg5srR+;c$Dl>B&%E^lqkITrb(XCZOenAzn#+>W?;5_48KEb7-* zkJILY}amX~=%?luOvojxUpdTWw+QD+0~#uT5d*pe_- z%0Zrj!=EA(XeMPK{J?*V)Is9c>MBJT`*~7Xwlls5eC#l)?s2hEQdJGC_g=>sb8|vl z!Ey?nig*IL<}!<=O?5N!> zT;>tF)n1Ninfy77Kc_GYZx2)&sboULndQ#<8z*NGSe2MqZy1pg&0IsNKF*Up?~B)ac!POkhc_M?2=OEn7o!>zW2E2NK5AsK9Y` z8!xFi8;}`jxT^KmIO;G)4`wp$I37y(g9%udrfqUJyWpsqu~^aZH5s*TdSp#RezCrl zeGVwe`%&S4#AkAqGe8op1{IrfH5x8HS?&osq%@N=a8(Po__StLO-?pT8?8 zVRhiy>Hn#lrLm=@W1Ys?&fquW3Hwx$@@Rb^!z^ zJ^f9#@zYz9d7nZ&X1>UA!816CKZoq_QcJG}b;}S3awl8fOuO7Nx$dUe_6ArIReKfr z97}tz429KP;E>k`QOUE_>ZfQC(A+Dlx6DAflU;kvwqW-Yn-igzR4W%ODh;>_iN-$- zTqS8nbW&ZJg0XK4hv*?3nu?N>W^U$^M$-`VsWon|42ho4kAf9sCRK_E06|nQh7{s{ zEL9$J)^z=}QWN#+4Dx~tf4(?nSgp*Vl5owx+uv`TWo}>K*_kG!-;k*yaTP|Ge^$+< z+>2(H<#Awwi&iM-^U!`Zd~t8LGakvt-)2Rmn`8gKX63eKD zjPrGhq+72r)Z2@)Rg@EqKI+vg29wBt9)O@WlY_B&Nm9h33F2D9-mjT{ARa2MZ{oH% z)Ul4d+Mq?4xM|?=XZ4{)c(Ejh`x8Zvlw~xFBoMI!#L?-s_Vtt>qncm1J!kfG+N`8f z>zUUDeYLM@r@e9|)SwG4JpZr6C*;SrZpBy`#!Z|Gu;qes%prYXq?Y{i=Z?Uq^0tkNw#2D62ol%Z!^hPI+b$FI3wMC*06rI5zs%oKkcy- zrh{MYp`0EN^FD5ULFZCi5?m!z7eZ8-=G0Q3fw%ZoB6g6X0R&*Rrv_ z5AVbY-_y*H0Q%tqHOQZ{MS4;gpZEYD4tf`OPG2@t<(AjUoE_-vM26}p>n>y!1UoL1 zGp$2x^-5j$rNazb9@#g{k3Y-d>TLsoWL}wKi-VPh|76~hx(858}Yl|lqWIs%k?u`hG@xXx!BHcW%^QB3L#SZeNW0rx|AoB1XDee zN?}&oi+{`tzh}coV%gS>fSe5~SA5qm75e7EjpZhR=wRV%hJf(&a;PI?0^2w?JKK0*XN+&X^p}9I%Sr8Kc?8Md(~h4mt?PhE zr~9n^5P!EV6N{r%eEU}yGI_pXu>Ss@#Bj(FRj)&h;B?U~s8(i1a6&nlqk!@jKC#I5 z`KQpz$!A*DQ&T8+S8jxyw)}4V;@Fpps;d9t%U$}z`E%9)4&1= z7bF*oW*y9&a#8et-e1jgI;=nNu*vr1UkI1W7PX>SS}(qJuf7NnWsF3ZmaM|-sLQ6p z+z7F%DcXWkzeP4Yd55BNrgoXQyL>|AVj_*ySRr*MBO2?MdNH17?eQ#@M_YeK`8-($ z%!^{I&lXb%mn(~eCfF{LR%8&2f?2NNYVtF|A&ja<^Z+F@WF}>`E~TxJTqmgsbso%q zO#I^q#ZEOVs`k);w>Y0qcJxFsQ5x2THi;TQSn(@8>#nzIK0}) zDaGRO6|dQ!aWw;NjWPF|Ltc{KwP7MVdXSmhIJxuK)D;^oR3cw z@{Rp3))OIn>^$flZ`}NT&10A6Xzb>4IrR3_C#rZ46&Zn~?OmAgm)q%N>UOm(mWyQi zo1r|loOwfoW{p&tI6$i!F#uAgVdjY*0q-oqwDli)m_M3w##xt#(OxGI+Fk@YsJ1J zx%Hz`d>Hnf`Q#Ppd((k51QL2X0K`+wQoi{#{?0A9u~-=! zLF`^g3hcH3ylO;$9+2IA)RVuMLotpz$opkQXnp7^#9JB%c#M|PE9Qqba(xO;sp%t= zRH%SiZUxEY!j^M(jDPzq$tT_)mV+bF7u0ulX)=~kgDfd+V$lpSZfPPUESEN0q`o{; zkyOD71+pv*w0H}nR~c9!+&5B@U+r-~3BC+^3W&kCBXw6St?rA0J|?~=hwuKxn}O4OB{ z0m}B)Q8%ww62ymhy5O(=S*#>@rk49Xm6H$(YhLSc0<&)hL?G5-9?n{j&$7X%-8C{` zA(R#LM*g#`Y-?l5IdkQmCmgz6k8l?^#?{Bm6R1doWOxo5w{0yC4-I87w!is3R)rDa zA;?1`Z$=X*OYSe~lcctrp9X1x#-_G}B3WHdFG3@b&b0tnIRP9P9Z>k0SWp&Cze{ao%YlLNxEcV3+rw0lEGcf%=HVO zvHvxY@P}@hZLKf)yj$ZY#uV!2Y>bYDb3biE@Y=@pSHLM zvYI*#mwb>P+LOMzw=KSqfU*R%7jNEq)AkU=j{`7&z9_M|At9q{pQ!a3-vjyPXt&T^ zxV-ckCyWx>LqV=qp7dUbK|`bWOywdJ9f6Z;v)&);awKPIM;hu1AkU83RJ-5Ybo&T~WYo{u!Ni#N;^_@A*CsXU*RFO)0K z&sVTH_3;9?&9jU%=TwU7s&ec69&~~hHFtL)L@GZTx@UMC<$;Zm9-?d+LT}<@>LVnE zXe-T*C4EGXAtdrx>~L9H2?5@v`--OB7q$9Kw%%sb;_B1lsyt|9O}Njv=)&j0^uIOM z|9|2C;bC<>kA9Q`Ri?YxIoP?_IoVyPxnf3cDIth3cmMZyD_flF6?ek!x{~mFIy>a}r}$Bh}&UuH)zXOrsq1Rdvz6v=c9e(?Lmt4&>^(0I0}idLg-BHq2D&Pw>AdF z853@SX||LY6b^4tf|&X{q$T%2U`)&XtW+JsN+}u{8iM)?vc<;~Ot^KF*d0pgV;93G zDh#U(KX5svDd(v56)ulVjt#zW@rPa+@-7iP8{+@+0}=wr&mn}XXb*Rz+)hSW4w8k8GUor^X`xP0DTwtZFE zRsPd?O^tK-&4`>&h@>!a>)X*!JUS*B7$povbI}&-z%WE`xd_9WOy1be41-^h;ZD;7 zk+*hnJW&bz%90Y1-vBm4A;-4iY15|Ys>=SrxU(he$0IiSGZEoP(3l?dW5BIeHG@Lw zBF_=c5yD8|Dz8sNll@GCgbPg$il_Bl+NVQuu{}9J0xyk+cEm(8Xz8 zPxI9cA>WN~LEzHC(y*xA^HFd{)e~4fS!?VK(GO(y17+n%9 zJw-gZ8^FoZ2Qd84T(N#E7BO1l6HLws?J4MVuo%Ht3z7jbJ&BQ*H{zJzRAa4t}4YnHA;kq`h&1s~&eF(a2i82J+8U8jX z3;VQ3F@2G!YiVq?qz<9aQDX@E_#QO2EwcxB*XRSD^z=o*rREX@4zG`h5E;UGz|d!4 zQ>rv%wFFvE0{clh8ioU=5GpmX=n^pKzG*N&wq}4|)QX2uy^E~Djc>FIIs2`vame$` z{?l%YwnItEQ4-gI^2Rn&Q8Vlbef)=DeH+00U*Ty07W!+RJtcj8iE8htuC_rUE1NWI z6j<(kk_*(9c+;ns-gz*S>Fgx}?J>5bUizm7ZY^F{2*J{l9_G;~%5?XAHx?W@9!ClD zT0zIB_V{u@30q*;O#XoC#r$o3oDl@3L%qAKFAtsN7dDI2Gd?Ec5da8?6!$v>jK!f5 zXd+_7SNz8j34nD4A$ttS#to~--3f$aMB`Jm)`JI}OqKZ=njex|v?WC3CAsVT+dZsc z2Cx_WxmT+Om+dPn`|M)QONvMKh_8>ePQF^6K4$tlPDW2KDvDl-EPRH;pXx=`(Qmz; zZ#jk2%YBhv*p&-Qmk+U+240}~QTd6T%WMPE1@bFWi4mV;Xo-tDP}J1f=mab<0T?6$ zrOD8c<Q*Om6=%IQ};gPNF2zTd!aCr6aF& zwLwZ?^;btE?Lt0XDHYH0wJ7TLsJfqO1W=uSBL7cPF{UxuvdBo{NqThmc>(Vro; zqxsQAxEDD!(V!;FuW#oK&Srf&1qLpcfWICcG50`?u>=KLX|O(%K|2D?ew(M2ByjU~b+ zZtVjO%RdlbfoYtS7_(n}k<_jd1=|v?h;#o!;Ag_-_se^>g_IzJ(9=%;6c{p zvYfYLN3O+r_8oO)5aKy@?kVi7$QoNiE(M?6QQ2tJ&93~zCnpee6--Hx|k*9CUsY-nfq%gJMH!PM~&Jd&0 z<|7Kf4dm&;#zI<38^T3wmcHG;{h&>SRwet_h+Q$yyt;o2VAmEhZ+0`4O|QNWfI{2$ znfzo0YfAqSK8?K=`B8o%r)h(n8&g2AYjXirtQTLUnOsXz%lB-BrJ z?KBecNrpY~^;Xp~izY^m{G0&g+*vlCWnib3A9*FAr;T%G+h%q_rEzFf3nuiRW#-`7 zMYnLiV4im0!IR4@ox$PRoeLuCTx%FWykPs+OPAzE9Cvt_eeM^7;w&WOMnaT~F5ve< zZe)AB8Qd@@{K`lVFhM^%otEaRUN&Y=>h! zk&_z84{lsP%O$%_I>l}nbiRp(~C@`yQba# z(Eaqu%vWI5eZ4g`#rF%rae<~+EWA?1Xh?dHMmiNOg&C4yF zUM+p%{>721_XN)fT$GRL$L`=tMZbENsO+6|%!v<_NG0_NhZY|-k{^cy7EiiSJiK|! z-)#{n1QCAahQO9-$dFyLk>qGk$DDSaJ-Y@EdgZtypYUD)3*z;Exkiz|9)%<6)f0cu zjuTocM_b;nwlq&sw5`T@jwdw?ChhJw2&>&wc+RLc3jENYIg(OxLk7XVQ_f8b#!0=w zR}6|-U`>t6T*;fEwMIDxURN3@i3VMRyU`)O*%EaA)AEQUnXQn#5X|ff4@m;j-cv)o{e}~sJojTM~o`# zy&2c&)L3oKqkb@7O6U~FLa%Xu96je|bL?gxH*0zPui)@dXonE*AFZmDe>hv*Q(5_N z>QvG9zgn696<38N7&m3*sR{~UC&Zx*3kZQ4crcuv=t2re51;7Lvw)RkPL}Rmd06M- zM*hxUQk|zPT72lU^220s#N4VY)9h>qn6OiIza%5~vY6eOx0A5Na?kkjl!d2-+b;L6 z?i}dRE|wc%ZyY1X0!FVfGa}xRALPF)$8ibfN5H|huM-nJzLTt;-3hNShv@G5g@~NFL z^_>W*ohXSNitOys$Cjw+6aU7c-dYVt`&D5wlw+b|5mdR(Y16nu6I8hiNVANOmUu76 zBAz#^ypw4#&G%9$((`@C7RQD=p9cmGb)k9&MeTOYJ}ZjS*_7e_VbxZ-5MCo`WYa08 z#zD?d0m%$Ic87#Gf z*Pos2o`^oY4iF+29(LF^?WWH852^W2X_MpS{f>5Y*ewK7$_UPQ~vBfOCk{aW=ZPDv@^S_%b&tI3-6}NuZwi-$ON~~<>fH_V5 zu@K1nT|1UW-Qv3|WI+-lKJ|25QatS%A^iUPqZX}DKh_b40yDpyN`J)tOX5kldTNXa zKhz&hjqUpWx_CM^w6q1+)mWfbIq)A;av44Lma{@E?}Nda2KIl`q#beOMh`RfLxjQ; zeCF#N<*Cd;jpdh6mL8FTyTM9xI&E`3y(trZH`_mT%S5S;6-DZ0MCzM1Z6)&hq30By zD4huG&?;Z2_Ohc2j`f1-mkEvSLX|TN5@P&AaB)hfvmnUyW4MJ8u2wJt16tWt2GBHB zQr0nP;i`gerb~jm&f`B>DbuxIVcx$J1uZ2CR_qQh&+Uje4wrD;wd&k9GmyO28J`&0 zl@NJyeut_%dtwh~yDzI%K>BkY_2w9mQ@_%6IZpRAHzU?Z&!qA(uqlwVuKZqS_2)_j zBF`+_{j>RvhLT(_X;DvFPWFpb#+s&R^l# z9j4ik+Piu=ku;SZ;~u{0Z550&hOOv1_`0D5MmHF9N_ZK&);bC5y~d6q?FEYM&a zc05@>G={>D?~*tZPr;?%=z)a8XkEP&41)Cj6#k8R%5&T|VWz=L^0ZRvL>u-Dvz;); zc3Og8s+Xq)DCpYvuucE<)>aTza{afJ1U-!Eb>*q)uFgnJMIEPVYYE?Rv)JG`OK0_o z*Y&tvyJIPvxCT%5fK}==nzGM|N1LH)8mWs&c+gZR%?+Foa)WU?1zhMCx$%{UEpM!y zWU(hOQe*eFb{Q#!==6I1cs%*IyxJ{OQeA3=&Y9bWcfEIqz@T8E5xRZr` z>xsQ)K(OvaBiOr!C`3v84+I>D2s0kVQDa|_b|5I=&%Uq+P`k?Lm%U=vsbn1Ohw{Uy zEX|S!%Flxo)6_r43^tt!Vi$(N^38YOm zRI?&Hig8jp0cbX?8h(DFjr;T;P#0A%_-6JDSv>tKWeAZdnQL4sJ$DPm*PG(L4$QKD zYGy(5$Y;G=F3XYmRz{g4sv^VB*x(SaoqZ>xN31=Gw5);3QBveAi_aph+oIn00MJ)M z7E=X2kHd?N0QQ$a=kO_*zv_q8j=rvJ{_z|-O&r!SXZ(6_0m z=-QB^06>oFg6G*SvbtPa=B36|>q7IRSgkjQ)tpd;77;4D(uMf?*@ z6zHdS=L2n?uZ#}%RA?uS$1vZ5Ki^l`B*V-qVZv${c05kuiutizDt&_HAN%`q!UODc z1*6k57Acn&5)EL}{L{7ZE#|K%{+G+}%BibiwA3ew&*2CX0EAekc4v`h>`rB$VLS~o z@Nwh`pQMG7{C9Ts8^!zV=f=N7Gwhwe(HmBK%0p+OiLADKW0)fA++yXLL0UkX;}xwS z0JI(tj!hsvF~rX~p?W^TbD(>4;BwFC5>;}95>Ufzb&64vQ!0m`&VFCQrV`#N6ckcc zlAnJIJmq7{Uz9C{C)h^L=QLQKgw2EG%Fgnmgi{`h4m~5w%>U49*j+Xhm!0|CdkoJ3 z21C-EJ9zb=O2jScKU8EXX`y~a6{gOl3d`(0zfzeSg3q{J)ouVT?M!bQz)MwXolSy$ zi9>tuJ^&e86coqP?RMt7kd4^v|eY_UB;ORM`UUtido})41cBfiHyfl{$ zrTb!_(h*Ft!8Q!1S{O}6t>_9tz|nwum3Y(AA^bF@FKhs-Sh0VneG5(a=ld+kK2t`) zMbcb5Khn_hlho?R(%h~Lk*Bce){>Zi_i3b^=h9Gc+W+-ya{*+ljuLv9;rbj?j z@yuI!erhk_xX+ouA&az7hVk&TrTCxqmCB+^Bcu_) zDyt7zzN;4sEd>EzV}VJ)AW z>(nsIUcIM_KWc*$vdB7>wQLJ@ydwRy8&+HQ7zWGG7Wu5fy3YtQX-l$IY_dh`lDp@| zAXokf$XAG}+xY4>Z3VrDiyUhgF-tWg20Z^3g}*LoKb3CIpaBi8#hAsU*`0^QR_wpK z?D?wh=PhC7tU|?+%RU|Z$o<47C%2Cu9F3if15AmA(5?*~74eG_}7WB|> z8KXJDNMCYSGMU;Gkcft@yauCRmn?Yy#Mfe}jefRGTK;gObe-WmKW9U2)_aq{g zA)BZFep`vLVI+_ZjNJL{s^Lnqvdlg9l76!?tT6E?#m^{HVkJj0YfsvZV(rz#`PVOE#HGiJhwba?m>8(mwdncs0lMpc?65fPW1FFTXf8d=^p}(b8Z9BB8 zfF@;wTz*fgG(ElcqL?dUQ>nPn(Rt)a;|FlsVL@*L(BNR^M?D!hEakUOtM!5O`G$kC=tm6 zQ?k}6L}>r+Ki(|T(P6O5)Al!(T9Uhi(xEf}_)5vblM(R|C;bKc!kgi>!10&|N8M8t zN!`dftm>PM6yRHVPZWaLH?!n0z$cAlz3*Ij9Yy$})V>`kZLoJKyuEU`xq}Xc(T#um zG_nYg!!8i{w9K!(ZP%?FVTZ`;7%u@ne`zCMlJhKRTSd zlVOj`_7zIjANsr?4K1s!Z!d|qO{zR-%a%U`k)uEpF)PZFQH1s|1R9aJu&*|f6+R(f zg4K~%4&sA00H7ZhZ8w&w#DAVBYjR)W;%?JA%|l%FA?G}*fiOtuNe4EFK#_Y#+$#iW z6#jf4J}wn)kcI9^LHKe5vBlJ`o;?x)A02=vgTE2oenqb2ex~0(M0PsJxwij#Erra$yZ25{c0P##Is~4gyQY|GZP-I zwz2(*bFiD@rEehd-1{iYoA^0AoE*Ci0pZcTs5n6eZ?G#}g-aFKwNr|34owdINE$zM zRW4SgM;faWBvx;%a^WXQ!Dfko6oC?ZMXIknycY_527-$9&~MPXNEDLhDxvdr5B-d> zy@)Z0*O-tDrYTWkyq55BC5WiAK)O3@=qe0t44cw`VPj$Vb1;Ge>_|X@9!EBw-9Ndr z=gz(2oml^ex?3xTph9E2+74{7@X|suCgBT9eB)-KBBS+DGz9}g<|*Z0M0N?e zXHt5ludq_CL}Ainm$$;KY2`BPuz!Ir8p2zmhfn~t7|Ji{DY9!U9b!BoIfMi73|%6# z>80~3r7`JCMB&&a3>G88BZKsybfY3H@HNlAV>PfuDRQx7<4!{eq&SYhL`xzxpODU( zu1$uE5IY(e-04sBuVe(t5wbfjkzOZJ+y=1Q0t6c9!Po%x_f7YhhvLul(9a`_OTqS2 z`{yr4CS(vUM_%>!lI>#IRkI4us^oSBHr5u}#3$AK3TBF8O z6!cZA2I6lh9mq$0gpS>Rx?C@Ow8Ghr8!*z}ozAn(VJ91pETE)2`%E9`K4&L~m0)9v zH?Pf61kxtS6pdwkcOrrw2pj5?K;Qvh4Pn$5VTNtNVER%t{X3EVlHkpQMK^;%-4xm^ zDSnoCFif9vE|bKcFm3j}$E4;ca`G%%o^2k zSbR3VQEHcnbb*L~m`?kcj+;w3_SQ08&9+V~iMeuT!`ld-)1$cr`)rHa@J`P(j5^)b zT?2j_5MjJ8=|}*)rM)(|O+7ZlpPKokHqcGx!xMfIaOl*@C+6uXl?MXe(8KRIh}_V! z9P9_TM9ncE&>R300Mv8pp|$|Kon$EpE{>8-H_jnE4G+9DmP!yIbW8|w4uC|whAG(e z*u8TH_Z1Hw=pNu~H-{xQfADRNK7a5vF?CRwi8Xa7=KGOluw9Vdy(&uCiPC0*{3oUP zqe?11Zsf)=2V{QeEckj+4z)znBH2ZIUKUHBj$et)E!eQ&>q?XN{nL$87K@s^2JI`+ znOF_he4Yf*Bpok(3hsX%=Pwb*SX2xPxmfxWFe&wWe_DhduX(7wx;T7YqTvSsQleLS zqK8C>cKL=5kAHdk3=Kzk2W1Hw?387W4twFR>=3u`1f{>ccn{xmy@k~YAJ#^^=m2g^bEENY><)RQZb<&3p= z5^_s<@6tM-O8Bpz=t$dEGj7mdA@zXC=@-0LZqGF6k9=4(|BQ_al-X z)-^f`ON`gRAD4VTI+4Lb*=EfZOJ0)I`VTRwiI`^_nCIwPdA2&WCw1Bdbp|K3=40|% zZOWny4@C8c?TRl>NUIxJt2z%vQ64{TT7eMG6F-_eUJx`IP@DSON2z46EFpv;rPnczU91PzaTtABnH zU`>{?Ux@|{6A7rJON9hq4(!x17>Xsu@2(wt{x~v9CP0;UmT%8mudbz$FWh%^mj36g zX?EAd`%R`IrX&wjo+}&7pg|t|4{^Q~=NPT)ghGbNAB`NlPDLQ2bVBZ?!$9r$&gx9H z2s{DY7`8p=DLpbScZZAlQ7t5WKFs1JPJ_aRS6htlg{EtpI*9G&@z7zNWg{dnd5q!;`&iymhd z7`Sz%#uBTpKt8r-#gcdqlpeCrUyoOv@2XX0z{;*)hdPIVBtMYi&9cXuKGb*(mPtQy z^~oVGNn#G`xu;E^23IjD##~&O4=#>A8M4`1! zN-e&P&#vyCw?6KuQm!!=y(g{Yprk)io;V=w1UhsGy6Om(I9R{GDG>gysZq$1!Q-%+ zfMLMLp;$#@ZhQ>!1nJm&ivLT-Z%d(u(R|k9=VxMTT?kyc28P zU8vw7ZJ@Ac)kJ2Rm#_<$BI_o`2&4X9JzuMp>6$1}vilQ<^)HR8^|ChI{czW3Jvru$Fog0_`2&%p zP>1ZZrxHnMojvpGPp`tr$ROM?6n?0cb=a7A7@BZMI=kb~v198O^mGKt$0r>XE_Cpa z=|Is%)YJZC#@fi;GCnphHbV2@$CtAgGS!*RS%M$iu@Na9<^xkZR_MSh1e5CeQ!DbJ zj`bvUB7bN3Bi)J6`rLDD$9mAItP)YxZtkT(o~SO{m=EGf-N9X16_;$u1Z6G~dsL#b ze)92xlWT?nyfTP^;Lj|k*)bI`U3W}MsyzNiW%q~5la!?~v>#~FFX)sX^i!YNP@2Rb z#ICw@Uezrp&$Z3~;grtfQ2g7W=7K}pZYAv22w@LHK4=gUbwsqPS&A=29|;b9I zk)J)7&tqjwKr~ujS^mAc8xgmEEc3nEkYA7GjednmkNnA(cS~Tgjp`OeX-m!7mWEp$ zslE0seTpqVYW!-*NGFu_I@iG(WY|s_?_7*5*iH%ksLnFM$n9ri86;k{ttF~s>ia_& zx89d!*vD{x2#W2AZ0eRVht_6~d`_Gs;bDkErw*Q+x0vcqR2GPf~SvCp?Je->GBU*&1N@t+unrHoGb}yMb%*m=4-VvK^>7nwf2X$FheOjuX z^B>dC|2yNm)z=ri(SI^ag#Uf5d||NPtQ1=Ft51S18ySHaKZ)cBe)vb2#mEmT;Ggrv zA93v8AUy`Lo-DmTRXhlxJ!);9)mOxYWhH#XG?av{NA$*Hx}7#$#~Ft=i++(=KeW&l zr$=7-<~b*qp5=lJT$|*?Yf-n}*?1W45_*qs&sWNQ;wYMRc*VWr30?D4+i&DAIjNfX zLHVXp-SxzXr&IrtHRK{^`nwfyfQ|L+azV?FHoqF+WT5UitY)GLEOS$J6 zp~1y{DQ^Xw-K*F#1ZhG0w@i(;U_D##sVxLk#xO5lCCRzmI=@Iwy3phFpN3PB4p?Ca zf>b4K`S?SW$>{)QK4#*t&-Kd>zh<6~@?|eG6;yZfqvfYX(PHq}`ilhv6pi?d7gql; z&4wD5QCI)mrSE_fe%avFTFRTn^*@)h%&qz`sM1d#amIrU%?Y30CtO%EI}Dx0C$~(w zwO~KC;Geb-UbP&t`O&M{msa1t^&FLxkrvn!IoOfkT*$)obk?R<*So)#Yi08D!F;zD z!Cn?P_$)no^PB}b&2W}L##2k6{_q~s0GLlOqK)*`1)y)4`dKqNAQSU0qC-+ZzquSA z=i%CDNb~;G@aXKHC-n$t9e9KM*o#AbKvczNSY&s4B(g9PSV&?bmG4=mJQilAyiCx+ ze0CU8SfAs>d=11{zQKOXP-k-ICo1a9Wf0yx|NUycH1&+w`%tw%4%gLs%y^<`KEbr< zgQ!rXws_?AFnG>ut38aD4=3S86{M)*z&>C3CNIMesXRMz znmZ@*v-B`HZ^=lon9R(`!fKOwokhxXs@3n8iZKvS>@S|^y1P+f zsDOlCb@!{t5*G89albmBS6*wiBk5L7pvG9l7KIj*@+Q~6wPq(}B&iy}8(OZuNy@18 zce&N6aM&!8*az75p8Y&!!1~FuH}5Ms0o8)X`(fYv6OR4pKLFBFcxwB*b=SN31E>FZ z!`Ezuap4JHj$|W(xgr`lBbvq#J<8K8WkL?#w3^U5@*}Yd!}kDUe9O3vz(UKIgZ!T# zayG&PIyU@@Ti_I^^8(@=9>{c(W3gMsB z1g-6|mHc+N$!+RbS%?%get#}9{P5RgkQ%-~3>&J|9* za8YRxa#-OQbOcI4fE4dxTS)aS$IswwpkS}!f$7K zq%$wJ+}PN%J0)=TQ5i!JZo>IZUh4xSZfs9U&9;zxq+ujz#LB0ROq=yn>3@L-K_-7{BY_bEnrQW>u@=(j{jBrdQv{G+qS zILh58DzJuWG>4>K->_u(9h4V8Olc}2`EuX|kh}ZS=y-{%e}gtXq&F9?Y+@g6E^BP! z2F*RsqaoEVYfLa>gaq@5vIbf4-q=?#YpT8uo=O|3(mxym&Kuj=lg6 zNz$As{9zj|Z}l3!vV?y+Mb)oIAHnvV=dpLFsa+~8DC4GN&HT1Om;tMw9^C#smuZtX z!2Wm0;`WN+>(Q8B1*8wTI;YBlFdb~QaSf9&WQ7LJ~Jb7%zVEVFM#N^GQC8*{&C=#u5%X1;BC? zi*dzQq84lx#BWM+ZH%$i6}+!|b1j6K+NuUX~)rPQD!;RM^nIe)7xQNve2`7DGupm2Fb9CG`Ga!7x&I z2Y^I<>#JvZefFmSs@NC~4AVnEa8&nE%Ao=tE7XXfh;FaDYE z1Ajw@edjN2tad9qe7-#LZ!TEMU;~bu|K^HE+k}3cP{PaYhl) zmO%!rKFw!6Dd)W^1}am zJV+V5psVUT2w7_yPa!=$FovYqv|&Gz9`?4dgL0ImsEYM z2b#xUJtN({2~OER>cCyYT;lb&Ni~37WI2EbJ|T4N2$n_Ebwr8}Q-tdmka#e-h$KL2 zaj;D8uVGs>i|2a9tfsh?|E1`QezN{t&KHl`n=X&1S(X3}I0I*JwQ6CzMZ|lR6;6+U zyo>9+3k_pOvG9ld^!3PFFT;U&`4h)tiGgcg-h2}pO&3IRQywX$s=MT0R?(j?6jr$P zm15=*)p2nz@@Ak${TdYvCwc3(B?N!in&Oj^9IM5z zo^0mR{kM5N1yR;cc+g?o!v?A2IrHQmfX`pB3#>^(g;M zTMYUDGl{Kj$f|2IbuRC_t*|coiM98V95>;l(Y?f)nd(R}2Zv?(tR%ZTOo=UgnicW? zJhE_xqrk9Feh6I%EP6W9*%f7h+#f|frnFUkRBSs2{%m%0zsHFKYbL(YqhAO$4#ZKZ z*`$N>DC{@*2+`%U(Lt!_LD>0&zr34U?wdP+#^{9q)G9*>WF9EH`-U3Lm}5ZIVOVwE zwLF70_HO0RRd(W6_0-LPRWOGWqgZ9H>0#lgO|3x&Ao%He3%6@JS+7SNfeP_z zYA>VU&~KFX6jB%vzh%hK5#ZFkfrLCcH@08K81z(K4c123^*}ZvN-(0`JMXWKPylmq zVMfq?n7V82HIHHJaeBrtofS2Y=lr1ErsmM=+rB_2my7ieKJjPfUJN&0Sl9H)BKcc; zmuNaAU9EnRIhiDQKfPrCtmVvCD$a1bFQy}d^j8x#mkJ+xiFO@;EXuRSUSE(fkt{Ly z$*uQdfIP^C0v#X8i2vr}H z(^X8mc|GZ+M7Z&epQ+uAy@*FZ^&0{xoeqOY1J(?-HCep(ofgd{u+dA8mYn4-r2ZjE z>g>u7R?w@-*|V5m4hrkK{-WMOEyDlqzGT{(ewiT6x-#b`cgwO}m778{C;|?&eeRDJ z`sbGZ?$%Cblj^MyzxRLF>>f1k3*`s^qmbt3CvtYxCPE(M)!|*7=iKI0Ou*4kqona0 z;_$X(y&RD+FKhs8>u@)U)Hl11{y*SxQqC{n^QfTV)wMpRaMg zXiB0C$Nam3--$)x8uS_vn$vPiclEAF$$)%UJvR5AU{*^p8_f@Zar}(f5L%a+^aJgzl*M!QY@PE>Ea4MZc1K6-j0ynJvqNOl{J(cgU?a*Zib_kcHas< zxa52$v;DtBQ4(so!>R?+3rY`@g1R@ei~fi~fbW$(Br+}3Hk7Z8oEiSd3O4hElpq&bhpfb^lHQ;r4(*Unv)#`%mw0 zT_o$zjrH{=LIWcvj!|@<7+TX3m=#?QAEH?HPQeM@0D3{r20vEslhHv0;2=`(;Hd0j zU7~jFWOvuwct${IZs-$-omalj?RX7VJIXJw&Ttyuf2KD@7t}YNPGyY7ngv4q+ zj^;m=dPr>70zeA|J}11sUBzXvE{C{R$c=x0X7QEBY4BhSO$dMDw`sCJkko(VxnWTv zd2@lgE-|j|N04((x>MVZY8ekhqLF;X@SpXsItt@^D&OG=huqiu75f>X>HE@(8zB+M zE=|>x@@wq-DQ#Nr(MANW^f3HARF9BeHtr&3x8r~PjJt>i%a>3u^qL_S9n+Jm&t!D% z%WJ9dqJOb$2ZxrMLD%|dul^Y#VxPJ)r_1_V3o&$1D*QKRZNXV1!GGx`p(fz>BT)k) z6(++rRqyUr!iA4#w!V6so@Ot|Gmm9LAh8J#VEzXn> z0{-+>#Y9-Wx_9qh6pEw^AkZs#ewJ&PNat(Rah6ms9#+y&6;k*HmKQcJg!q!0KAJdi zGtPXciBUIovoy`0wG@CcP;YCx-~CsAiLdN7n@b1+u-oO@F(RTcW=B1)0rOm7Kplj? zw(U6QB;c@PB$=d=6cvWl{O(DQxAKgJ>xV>c`+iI(KMH8G#kn$5J|r|^Le^vU8{IxK z+J&#c59PGb|d%j$ElS*>xk?#Jc%Z? zGLI}Fat>=Hq37+dX2M7VNxMH-nV>g~?%2kQ-slDx9X4N0CI9~Vbam`~LaxxKqAx}z z`ise5O1FLg(?>scIMs0joO`|Yfc~P%5&ZR;v_jTD&HnKoyOn}Mo)MGPTRxvj@qOd^ zf(w1QymvEP%95l^rU=5zRF6wek+w`Nq3w&1I?W^>ax6y^x4%fvC?UtStvcU=G zk!Ca1+rdaEz&)cP>yE5yQc+$ks_~-1Lj%@p0(iBA!*ZT3ThD3Bl9$&O+Akc2{Z1Bd zovRxXP*CG*N&j+^_t1a#q?Um1hwQq1VrAk-kf24OZR9}#ihQ-hmb6Zd`B&){ghgfM z!%AAjzSq}VG=R^m{rJ(-*3uy@=X4A*Oo}ADg@pAj`zRVoQ%-FA;wgkW5nQdbYd_@o zTRw!)7%WzT<8-&CTSEf1Xh#4OwGM7l694$@ERY|&!K+uv`wT7XDT6$C$gY~`P<}?| zi`{_;C|7RA&ka8b;oH{EJOX1?JBxHi1Xu5`o>~1fjds8FF7nD^KVE(GmNoxZY7LL! z4bMB~CFB=hE@kTH2gJ&Rzl@zn{G*=PQ9JziooZgjY*SiD)e>{Pu# zzi%9-k|deM6`l~gCwj2#yg6`TbEp7QprC!KtPg{$$Kb)UhsK-abj(3b9Z8rkx=EcW zi8;0K-094+@zeUYPtPHo|8+Mxg{(ZeQTeGqBH!;Lw4|y=S@%-D?v1rmC_EK4eDhH! zTh_H-k@Q>i`MOg^-=B)DIcW0yxyqefr&hzjbdV3LwxqvFV&6Ql**x;vq@3G4mQgX; zjC|riVNG~A3i)Rvd|ix%KIXp}M$~(YD@t6MbGi^G@m8Rv{^BM66-NaoA?GvCN*^ zX8h_K)?2a6xd!@X)yh|LUViA3M}AOXxrVF;+!R7QiOmW9od2i0gTxKtYat~y-K99r z)O8hbu3txPSkL%>J9~RgW8RK=La{~`S1WE%C;y{PZTK;J_^W?l-h)`xr&}JI6j#jA zFy=TgfA3b{6NdveU!^R3+=Ji zd#KxZQmm`0rrL?;ii**#vQpCf5uRzrW`h*WG7a;*2$S~_Qp z+w5M|8@`)gKc}(j$oi8g8F^9lGoOtRJ}Z6U+QLga$+ICA&2`#iZxo!%$|onZWP;Bh zP!q1)!1L66DZ0t|VV{NRfEL7$y}ZxrQ~vPCvU~-5!>4M(RG80#GDJ_zz-O*5Kt24NM$eZZp z+$LQP>#_9YedQ^uzNhk!nVhVkE#aR3PJ_weFWYzpZx%t}^UFbE4FgMAU%{IS4*seg zkASF}-LiN*yVcH0>8>kYE%s(G@@LI2vOUw>$y~c2KR)iv-}2HAWypZ)#q2VgLb20D zq??1mW>oFYxd|3})uQHG8t?|xq2syJsxVW25zOLJhHpPUtD^X?9r2*jd{!EkF111& zOKn7S3NKDFzDJHu4@1^OwI3nYz&;IIMI%=2ZB*G-3)<*PW_pES`U=gZ3RKq?C zl6}UMr=)0mY>R4-_~y9^ZiczS(US|6;JU75@TDA&B84oWThICcfVtJHMpnXnFWJZV zH-`%_#hP`x@9ThL*(Z86f=HA;yN%?{03IIcz_~H=#=trAZT|LnulwLQs0|y+kR3Afi;M0i_5CC=d{-p?3rYqz0u)lpdr>5r{yf z7lA;M`|!Ts`OdxfAI<^J+1c6MXXZDvznN8PalOv(ARtJw0^UY;VZ4Stab|we0m~Mh zDrO@ESv3RScQ6E|P1P5Xzh}kr$Si%pQS(qTjZx*Rf;Y{iLX+G!ZZhSK%Hbrj`q-H1 zk-ULZb5!2DM49-pRyd}nzqZqtYweX$z9x_suz!A-`YCrUcV{a3YTo)h zA@jgT#S94<)Q`352_nfqbf>`I%j3|RKh0PE^tvq|xCnq5X*>1iJE&43+-}k$N?#mQ z@_U~2JBUQc;6jwx!~BktpEzoStTx9+D^_PD442~sT0ASonsb_-K_H_XxFJp4$aUNp zH*UhHGVk8Kk;=b>lqHrz=?0LM9jMR%*QV&tD4swvWd!{UbcP8P)6hmCHN8|$peY4+Q#604ln@q%t_rU@-wK!57Ck>(^?OpCxMl0$W4NU$c-v1|E*5{NaOCBcs4S?)U&tQ_wWOw3 zB?}rg=@7D0dVccO{GX-h0oe@}xca4U&z8@izHe$)7O9uLH7=*u;9$}#Uv6-%&ZYc8 zbNVQ@__?b(Zqx`&AwN{f{;t^^ZgcOSGzMQKQ`S`FG>(|n?+lH{PfCM+Aj&l-@nX#V92^i;nIE*Im#vY_e4QGymq~Wc6~jj zRg(Rr1xRq`K>UNfvw9=7dn`uuW{jJ(`hNnF$U`%dtnBqVXEW$%Iwb$e{E1$$IHuP9 zDf*P3&=Z7DsyyV?ql#CcE_DR0f5&G5YbA!uj?$C=-XWX96$#eq$R~PqCSdVLy5HaW`+M?5BsdGr1a09I@jdv?^gH| z2{G?2o1c)03~EGkL&4bY^fnZ4>+r_iMZKWHVxq#~tkPA=Vk%9KE@s<;bfC4YR#b2j z`%liHalgA1LT}km2{I=s8(5zR%MwlvPVMc=I*RD8E*{>@_DdaZ!EgOI%+^8&tyOy? zH~MAt*|CSfm-GDbvG0nHECpUOFEp;LDP6hwRU1`=L4QJ`6!T&%afuZlU%w%BFTK$8 z8ck%WrD$}iJxI3)gPINFVF^{A8BoX=)91x13v$Hc!rdh>W08mrS-7ZoUVZ(%iKzPx z{VNSTkEC6n2umh_^NO5}iXsVGs$mFxrXkjR9ZFE=#m6eF3*UQC7~WyKVNUkF8AM~1 ze=kzlTW>IqR#7F0 zboKkE=_qw5v^#NBc5HcY!|Fc}q zF4?PInLOk|jivr5g>7g-(+#qRc|@PPpVV} zEOg03{|db=FtEPLf&{}$(mv#~l4#wMpV`L;$EjD}f6I%|;Hdh=bjHDux<#Bo4&VE+ zpmk3jRpIJuIu(R92B!^rd96}}7!O_YQ@h3#DU=O)y@F%`j=C5L*|%c*$o3ezp_2P+ z9=^3r(pszbK(z4&zWp!{x1T=KSn7&R6#}X zP5v7RWe>-1C5cmzN8W`tA|likwyGE29H5U@lK%bXu!!)>4uM1T#@v2pqkmyy4wMP_TqM`YrYx58CeJ&1c3Q+ zs}5QlTNGhDbgUoW2)7$$k9?cqa)lQEzAcO5?4b8=HD^Lrm&lkoujG~pyH$Fvvh!#y^2dO5K>e2*vZ9u_4)YpPfv zoHRRKk$IHhH+uSh=39=I!_Ze=DFj&Mp>csSootv+0!X#E&ZuOVr)1lxh*8LFje>Z$ z5gj!$2CpfHp5_w;S<+uF>MggXBJN3n0(MQVF8;VFOT6?p2l;wM-@Q%Ra6|IaQ9zKI z&c91*5O<{YzhiU``qob%nvC+lg6mH*usgYe&2UV-^j3X z$0;$-nUy5~nV-}H9utlEbcPEyfX4cAc0<7x?%#j>EVntAfRskKI7pD zU|l)az7y3dI_e&qN7`gUiV-S~e29js*Gg&2E_5xQo^|bS@L<}p7?cq(mP^j`2u;bx zU#vZ8-&CK7^%UJFTk^E=97~-Hp$MuzpuA%O`}Z@*-eqwb=f`QCQj%| zp+BbG4udMFjOVXN9c!}Zq^!`Q!ZiOg8SjSx=W@7XG;M zfbzEKb^i{(RKF*i9yQ9%XHsf`Y)}6&GJ}+LI=M^;b0(_vqS5RFk=moZLjE2@LjD2- zrt`4`;L_7m6i0RgcJ9%!pV_Fzm`pUmJ=bPve|eC6n{Cyc^oHss8He>h1@Plz7~`gD zS@Hoknzx)7o6${)8DMNExUAdb{b%-Zl*FORN@=%NbYdImvu&$JV;KYTWaK(l2Fvj1 z8i7|;T_YJUj+J!J-A5i6-8N=Jw~pX;Jky^__|^{>qmqb9N6?;q>*Z zG^D%G{TNws+Cwga@jAm(UV=H2_A~1<@Y6WATHx;U(c4D7##z$$j4S~Nk(uD^lzd9D z_ScD@6!=K;#J6n!gJ0mqdLQM+Ze2^dI8qD&sdxn$cKXj5%9lD{FL+WDH5!Z5rN&S( z3!t2Jc)#9Hz7v2}5H8CC$cR39$nY{lZ`nciiN!y$0)w7e(w1QKGIZF6*uHqGJPmmA zm&tXuQqtFi60XHoxug_zOn;ShDh$J**em0yD^r;(v&JCgiBhx}XU>0AC%MFjT!aw; zJpW1Q`hP`4DGvpU_8>UYn!M?2;U2q-yK;IMqQ~s_Vl?*}1cqe($+z~`Mc9J8y=vO* zS?i-^!tA6mnc^a|`?aH8YTODp&i(46F|9)-9epIQ@-L<9tU@8h{?$McqEqr-U3Joa z%|WbG5QHnQK4ubjY62{VG;sK!fo#wJrSOvziW!ZICAZ6r)ePoeN4{`a!<>%%syy(- z3!ap(-(AzuA7cY~KosuZ&Oks-!Jx>vYa zfw>H*W8hxQXCbK>U&TQIrY2T(7I-mNL@b&e9jPQskV?S8TUSUnh$E$*$l=qtYhw)U zRqtdft~ak6Fh9xIE|iQ*9uLJm6q^De#qRqkFGb>!v4;i`8|AdfEiHS{66Fovg9q+K z`ziaiK(Dt7anpWX`wjTiPi|82FYLKxN^?~r54BB}G95JR_{yLYVz}J+PdykY3x zExMj|P4|(bOB)70C1S1+%(u>a%O!sI)&L<-_;w?6LH%pAJ6CUuoYw91 zos-4-lVk6bz?4OWcTj4mRH(fV-Q0^jGEIs$-H2T6&hupaDgBXb72(-lc&(dzwD$@q za||lT{3=p0u@O`;MAD(9+LwZ-%kGdyg1Y*TD6p<;-j4NtU6by?SXe_rgBQ2!BlCK(`)Tc`7mE+JQ4HQD*T4reO) zNiuO=L)2C^sz@AE=jk#E*L^lRX)0wyrMNh|Z{VKQsL8Qi^A9f0C6+gxRBtSAcs|A- zv`?BdWF$R3mx3?moD+ClQnh4eH6O9XYW1EjfO;yk+A9iVD$2+HZW^rQjG10843Y`e z0(Osk5CA_+Cg!sV^&h$0ZvU=mlqc|IyRyq+7}3nb3ZGBRPG?Uuvo5!4;vH=gdT1h$ zxhS=r(_hg*TdODxCm?Zi>0qgKI8{}9=ss6zJDV8os19z`5cek)W48Y2Ft&_4lqb(b zXYq!e!tBDKgK%HupHP+u;9V)KwtLimQKRO0gnI=k)#=-TK2-029u%OR61Wvshf6w=!MILgCm< zN8_I*=0tLkZ2W9&r$f{Z7FEAq;9P=wv8a!4YoVb7Z9d=6dv{Bz1rnBFf>1*14&q2U z1VgVv_SJFHy(83{kSoD}~M)w+{xF7~wT*09hr%fmZpZ&KA}NJS3kL?s2Q~qp+{*$aibI?9QD`mQdcs8YE{e5N*hn?;1Biw)O8aRO<=vUu z@cNE=L*qwHrBtEC`vNa*Bdwc7>XjA`@Qu?WHiEc>P_&B59)s4K#AE0s#oa$k@RN}3 zWYuP!N01;|Ch)qz(Y_pRZ3JVnj!SMRFyYMCH!0)A=SM!`Az)}k)$bOTu!EGJ3maqx zC*Z#$!KNZ03bQW}-(TwMV1K+D`5SJLq>{Je(`l|$SYsrbTq?$5HriJZlx!2J*Zru4 z0w`Y4k#yqNr!|LMJuH!aVHJ3pt0j@w5(tR9V)Ir8Dx_CSQbYEIWqLn4nuJw#W*)fv1 zFjgfddvkeko7lJb7M>O5`ow5Agf~_7pN^->?~%b7W4mWv={P2w$1C!82z{|8?ohdT z+Z#*8hp@qik)>UrZ^5A4x*GFH^TtoHN37BJ8%1T<`}_O^z6 zi56?M*M#=9D7sFE9k{q{^wx4i7DSrRMh|=Q7>^{k109e}|R+z5aBeE0)!CTh{0|p;| zP5D{orsE#RRV9fTVZ}_CRMa2$Ggf5A<$+;oaSS;5QJAU$i4vOWc5Z{Fi<-#zi=gfe z7Idh2Y)1S8XFu4ns02MvILNDc)7F?>3Go%}$>4HH^JT4Hv~Lt+YsxvW1A}lijlN7K)~{LJXEbViZypkZG&(L z08Cvu_&vOsLP({5ZILs*Q4ZG#8;Q7R#ho|R9y^RF(ta-`Qa&_}ITL*#lt=GHq} zae=P!Sp$8L^WDo*bcGuXm7|5aIw`zeH$5q0nRTZ00iQ9`)`~2P`}8uPn|7Q*E{P%qwp_ zUT9p(r?kM{1SO|`b;EM*+Mp^Eb#sGxQj=;H%oGpd$(V3et3O}`anV_aShgzvd!C8t zq47VQ&pz4jvZ~&l`gQ-jD2w6A*PlP*NU4NycS^h-kB|6gWiKuD6CQj4@leNLy?}8X zCTLaFb=%wtv`QTmKGgm5AIP&@vy;wTqr*7F(XQltwUIW8;96dtk)5Gs7w%e6h56_E z=vGR@L|2;g<4o2vo8w?Rt?q(~kH8|$@a?J`LYq{<`&^TIY2UP)F2;>v=?>L_@W<*v z8VYO}8q%fjg-p38Lxe!cAkr1BdWR;qMx0%!{BP(kI(HKR&*9Yf{CQ#T^T*)u`^}CU+8^}LquxC8cPoun% zXv}jvrHgCAIc1oI|zn#z$38)$}PGI#u`Q$lspi--z7S#kFQ4_dXQ37^P5WA0BdOf z9vLnWNxl1WA1Q4WVz^P{c4HpehjDdk!vm%m$|lBfq>?GxC^jkZx$9~ zCQdO^z7;K_^CZpYSpSXq>quB=YNVHfj~uK)zSSO7DGB1N21jvzzxja=W4m3US=%@u z%Ze$>FAuK|ul`|v-7+ogx0X=g@6yixpf^_cEy;G2XJS2PqEgIFJj`II@&(4kyoU@V z4Jb?K&zPvA&T(CdsA*R_13$pxmM|l{GZxVPXtKRZR%(GS7}_$B8d5ySZlFql)+!@8 zv?!reRSy>Mi*G@|zlor&9P*%0mn4^_I->)Gq~E z(1tp}KFaR5zba$+)O}pkApVx^K=$aev`*k_gF*)@y9)kBz0FUGtt1t2xvk)>g|zN= z6TDj${pXrF+%?=^An>%0CTiC<@e%R$&DTuRZhJSCdOzm}**WU*WY< za%ikTSB!PnJz$73K|m2$v@Z4!uvKjDnP%L!?fdKr{Vq>7gJA<|Q)Mm%?x0Y8Cnw`P z0;bf0Zi#lV@#n({lP%<;y)l#uPKC|rhJq2It1+5rv^--#e)ZEf+{7MT=l&XmeLrn=*lRba- z!^1tm3+mq1*yo-s7AH2cT%G*ZM~SADSwT4E>STIH8+8~Gfkb}Z~%efq+RYNbH4Z%F8|{JGMl90{>e3mon-ZZjC;w7!FQyLd)< zsFOMdorF;5T85nf58k|R<4UG#0+98#{n*zHuv1DromXWnTOf~iDw*B8$@Rtp4 zmi6k8NWNsoAJF&Di#^C$2A?F+0BZzr*W1(E=mnpxW z?`g4KXMtJ%hTSf(VyG|P&uBE9*$U4_>kXqpyd!5)G0(@1TLhQR=}FgTdz%w_rl0yH zP4oS3^y^Nq_}E_AKDwClcJUaso_f6mZZDL;R$nbxNg2gB49%!UoB@~fA>#+V8G9b?zgMGBzl4f6LbH!D!aaeC-ZLCW5^R+tuR*GqFr_S;d_CI(PzpyozyBj)4UnxvCWEhOQ_c%CSy3T37-BJq7-JyQU zeiSHi^e+PEyY_A8R95K||I*aq|E?M!%F(8@8Kmw?Sz?WBAhQ>dWLY%dD?DLK@)ea5 zxhygTDen)p4))|PBuDEEPnB=~;hQR#=e3?c6X%_^b zC-a*5T0Ei&5F?C{ADZ}%!M^x@fqwza;+Og_D6O!c_T~8`5PoWBOqJm>@2ZzzNn+7|oo9hIFd?v-1kir}7)+J!XNN5HPp&NW*^ z6~}PZ%~jS{SF}`DqDFsvc7cF1SRqB2aKS@PBu=DGZlA~i6&NjU;Tm3aQRzzR5lZ)y z6yL!8Z?Ny}obCU0kp%5S#{2ET!XMEF**!FFY3%}g5Te{AMOA+C9sWU!7NN)CJ|`p~ z+NCHguiMM)9y4()eTJfhQ=*!*uI@Wr*ng2;eSL;)%e64GwVe_*%lxDWVJm?|krce+ zT4L&U^48&N`i@k8*SUVP>F47~zcAnW994Dlh6Wt(#uxX!)QdK*^VahLKc%IvDBx}b zP4`Cg^hEbN>HnZqr_txA4|inF@T*QUEb*w~*1nb=Kn#C!SbZV}F86R-iV(2!AkaKk zJy)`GFri!*4V2>zAlyDu@EUD8p;TAFm)<_KxEUmY0!6`I!VUhEh+!$!UB9q2(M5R< zY$l6?{y`uB8{TrK{SDZB`MZ_FmBLTmXS!8CyzDkrDZSW0kcyT{anQZpP@s})b}0}b zmvemU(Xxo6R6q38m-{@CV+*?DO&7%G+xuQA9z zE`uG!Ms8}3ODJTyFD$@D{)SI)0L0z@Z;NH=mMy*d_cya--Hjl9V-5;aak?8?X+va+ zUzI*s(>8)qqTRut=tU(#HH_*BmBNugjev;S%So_qs@q=>ci$b6URGQB+)1$K72v$H zJQT#%TwQADSp2#}^e^ZW1D9!~Awa2qk}*(rFUe0-!(!lOno0>!4LdLxe`xI7(W@ge z-DH6F2u#r4v7Nb!g?UZQwM8ZV_2*yt6Im$##n+=W>;NmiR&w@L1r^ys}l zlHqx8lQwLvazs_}V#n!Ie3*w6rGBynI)7rh@J|%DO*Ne4VT=E2@N-Ur8600O`2U$K zw^x82If?gc@x?5JV6us&EV_b9)YS0@MmV--{Z@)AD1l{d-33r$^DkB_DB#nc-GnPadm ztV%2ZSO30!pI3I_*;;KlkUz}SEQm`2aGUH3puW+3_`kw39-yycZQP5cwKhs~c`tN-KeFtKmd;p46d|WW%DEncmW*%u4X{u&fCXy=JBFf$yZY|dVLBu0k(ZOhW_hxBR zy*3#;NXNkVj%RQAp{-5#=lkdN2|jcZiXQs@E&UMOh3ZF=3N3{nj|eq(|bbAK;w+3J)K`lBu`I2)i}SB4jFn*I@enNjVU>fRe{ zYw}IMDd!3d3u$Jqk@oFxj<$ZM;@v|Ui0rbxka`)cQd zG@nqUJMSC-OCL1&6tey?7G)pNAwQI5_dT+ZT%g5sO;&!rJjSbfm-H!)h||IU*Aq3- z0TaGhQUE$y0no7;O}lq2ih6dhkOH!8@g|-p5IgV){O z&jJIv>5!#d0QzF>sFr1JTDasqxAN7(a?E5YW`+SXpWh%;*E>)fSPt_Gw?U1m{r(@9 zThw2BVR3J0TB?bw6-Ly{rzbb@#pOWMFb4A}Cxylm#Y6wtO8{Fod;#ok z0tj#6t!9!K(6yJdv%;*Pts%2}Fd)LKG}vY^FX`lQ6p(YjX?^K+uxJq})kPBVPoVbt z_GrI1l69932ucKhmqzZj1+V`HDx_60dk*-ab^`!iWB}+Ivjqnt zish`I#>-R8)`!=0R0IUG{-qv`@k9`}&7q5@%R2-Yl|HfPJ;}g^TA@D^vyCI=_PIOc zqj_!k+kx^3ZFS+%%SS~pdv$1FRHU~k;o3RJ`RoQ@{7iso>yx#nulpzKAIH{2hj3r4 z)^Zr+7(1o)mz)7}^5i1&HT$OsE8AzaY4Gbl>eUzf;Ccmq&ORq~2t z?_F!@_JHA?&tz6xTefohyS6Z=)njJknu9zLstARD@jrHXt9N=OTey`HM13T-7c5pR zu&07}e~#Hf_#*7kFZIpcc^!5mX3R=?~`YxDM^|*$&TVO9R%hzl;88Gfqq-R~%V*R@mDfKOfgS#}{ zMa43B{y13ywvQ_b;#u9m!w32pe?aO9Y?dbdm7 z?y2|Hlk~dHGOxV;yV9`OF!b?f-zg`^q^;&JjveE${=|}yRr7S-HI22-yNdp)AK?Lz zX~Se%JBoIFS{_+0hQrcpIPYU-(RB|bq5{#*0GiJjw-XJ>8Sm*R*WWRGe=YrEpAHeA z)3{Ttga&N}=Z-o;2zp!>dAG#2wk+iweTFClfoif7PQt{DG6O{)2_-9r-V( z&CNd!hEDAv^N!ZuSSj45E$#`XB6M(e3aW)VOc0puY`#bq=9c~{p=Vk2SEaB%7ma5l zPrPo6)SlMkKz8I9Q0Dex5EZv+B~DVrc=N*F?Qs-DO^7qExS}SeWpA(PN6>-@B`L;e zAe&>*xy5pJDnMsD!Vbn;G)5gI90FmSnF)lGf09z&0!S|Pm0OEj_KQSh1d-rjYxsKC zrhkNXd;7_%Nw1HV=J&*Mg>dvuCxX;LsWJShkCmYhd8Z0e};Pw!VTC;r?6p+7CRVB1AYJyvLz)X%l^?6Pv8U-&V zZ5Y8nWe_($3A}4`PO%gQiPVjjt$x`S3HcyZx_>|L#sV%JhC3ZTu2L%$x1_@6m5rZ{PuD7MT-9WNkn0XhQdTT8rOkk~+)#jsVA0u{6e~6+&EBx^h?Cb!jRD%mI z=_b+SJ6LHG3fv8?jCOtWsJcfmQv$TL3DBx8o#AjxLIEde*E<9{VxHDsxc*x{>-`tj zYfCpj^L?`A=IiQnsgwIsY#5b=7(pPs_~aa>Na*0(HdilM*C%HPgA_zkU%~DUnaPVlubh(< zS$E^^)K9w4R|$Qt5giqBZyUGLt0KoxcBEI?gUjlA5+h~hH z9EV(3I}aABs>+X_34N)2XQe}~20f(xfCsHn3?D;d|*{2lHWk^}8S znkv6jR)6|-7V@*_tirS5QHjTM;R1&RMtS$$aKGejN!q4qw?0EOGN*~cM#IAad%mf` zwRHVZBWXP=Wx^yv#BSuhfCcC-nmOuwMtepVnx%4vP4SamFX|Zifv7t2*S$?2hBe9x ztg$b9EfRWT$u6cp7e1fwu98EMJ9f%GYwdTTO0z+KOCMSkwg@1N4U|RZ#70DSAkfwtzCw|q{jRQqaB9|;HeJfS8L;k^ znxD#G($HCpCy9>NfYrTx)ByLe0(8O*7l>w!Iba1-iyUNh4j8?1e%YEx&)PU#D5YFu~+M+lNvw zsnvG)5>kq*mN>lCp?y%&9Kxl%MN zUN-!J?(7ye`C|Iq-F7j(x$qt+X+TtrqyR2=;ys5gjI4w}=k&|j<`_s$G;`Qfk_BeS z2{?ofg0W=k*hEZ(4(gNLRh9Q@%v$e2_pK})TKibY!Db!HkFa?njQ2%HK5lIe z+gPfbT^aKrnCvxxbC{nlv44HIpz|OIm1sP+#jdQ^>ByN!LTNbpygfeBI|X&mqA|jq zb5=2z)bGqyNiaRF5g30ann?a`(7$>yV-o$DW!z@?cL;kVrJ3F{^#jQi-u{YN9%V8mdW zu~xSM5Q-!WE7Ylj=~f%MiUMrXl4-C9b?=>5wCTZ`4DOI!kUr{76--QZgw1WFhE7}iSwX@Rq|HJo{ynjh2^>{O!yJVYZGm)VTtd54 z+FfB%efQSjb^ed_q1>=9JXw?E&rMG6&J_PJ5{$*tkIa&huIikpyn7{;?|%ziP9i<$ zp?mJ6SO2^!*8Z{5sZ*2)B2+T)fEwp1c1p6D7`bDF`e^QD4RSPuP9{Y{Hh30Sg+bx# z&$PN*xkq&}b`T~R3K>XrkN$SvaX_KG4PMl@z2+6=3)|7YDvgCHo9{A`CHF05@XoV| z(D+_4ijX7Hgf1fqeiE^>f9B8ruz2%CCEr&uH5PlHH5_?Ct6e&Dul;edzM^#P_@8S8^9%-gVs# zVt4ZiE#`1mDpF2COJYIl&ZE3zRjxHzNm~CBYNrx4W2AF_S)@?9HUo(d%U&EW@TG5k zMg&b!7%(UJq+=HW&~=&(zP0~2%GIUDX`v&~o>&d+s{=xfhsxrh*zx1ov^DQ)679Xk z8LeekDpNfi`_;8jrW>8jttTr@f6jN{Sk(}D z&ec5juU!}7N-^IfFedAs)gARFUO}K-V-zzxC^U<>p{IA_2EkFJmm=yil!bz`wu4^{ zr5HfvSluyPn-!k{UyJBezF(g@4sL0y$+3F%(5MI+@Yb3JcwRVJlCQKLZb z3}SG^!W0d_$dk?>KCE@)0VzyKC1;YcfM{7Bkue2R<<{0P^M>ywm2gmx_MS%myjj3{ zRD-f~wh4vk1-z=#;!eB6FH662t{VZ&OV=qpPdVg=`;kRqackBDVt$*}1=Mgeet@|3P7$S$7SK-k{Olw_ei; zA31^6s!6H_5qH!(9ed&5JJYL9ia)9d{57x$CGw7sQIDGl!ikp?Wx*oJ6}2H72Ze7lgOOAJx8fyB$SGTc^}}ab}$*ZlqBtZb<;=@`_l182v|LJrs`EfGwog5J}hZNJR$K z;}=?M`eQ;Mqh59w^*rp}@?S}K<+-F?Y2#;Ri@LnxsDq*Cd-C04*ou9`L7(L40sfD6 zWZYmah`z`3j`=J&2B777Sg@y>3u_$0x4-<_q^&xORk z2kp8SdJYx?mzO@3GfAfw#5rA}@pe;jG~@D5^o_M7`@)u^V}RRt?KfwGLbo0L;)Mc& zxsTWjZwrHmr-;0FRnPPBiUpzBnynjr_+0@|Z4@Y~c=fT(6iz27%H)fjo#4#{oZ71V{rs+YR+-)V7cCeZhME07VV z;nZTj;9|F8dU`Me>=jw;!n?1DT2S-%#9;la$tu-!TDhQ@S3dwosw@u^YxWN5H9+{K=ET?hHLNCe6eI(aeUl}5OCATtE$ZWb8{_x`q>sJo z!qtY>b@Gd0msmXwCP;01eAym>$fwMpE|v^R#*L_o!4B%sRfbDk96%OE9-;wV5)*~%h>j7s2rmaP5wljgE#_S#pi01Jm}mi!*9 z)oQTXQFJi*wA6`Qt$sBTel6}TRmdjU1=-%9@+GySHE*fU!br@Bpd~43Vi;9cFr$T% zK}6CJMUM3hoPhC{u9hP9W2CL^3Ll%LBuf2Ysv;}8ts#sp>!{~YgzeF`)~-Ko(o(9d zu_=?jR<^LhI_&nV8LvQJ+z<@DD3_?jpwclt*_Z(V>+xN#LtZ3!UieT-XTz6mlyv7V zJV0+@%F%{a39Q)jUCDOe&)G6mq!xj~Mhq!`AeH^9e{H7r>IHZWAR@LoPdM+-F38Xq z+sgjA_vQ4{x<^IW&66E+9N*#X;MzD;;o|yT=v67{%VllfY9Lzqpx!x|i3}{zp3#K3 z<3|i5^`?OBZ+*i`xX15T1JroaV@`(KlJx@~Zqe|#2f55m>sp=HS??`Y_^(ukq0Ffl zizJ)Bohj|wQIN(-;zYqp*FSCMtC!T%`G!XWqF|K)L0yMf&NVLBWB;zJnIbKiiGzko z)PrklKRDRvkIFbk6>z^E;}(1|U-U42kb_9ZaJInt2g9nP=iwro6orgZqQg|*Iz^bC zcHJFia*sYh)JIxosuYlB8`PS+A0Gi{!Re9i{L&Rq9o#QJ+=4Ui#^J5werPyVmj2K> z>7KacNPLkA$ZM`lbcl*ZE4ps*>^(3DxLtGt$nRUAA5wj}A@}D6m8I*CRfe95JDh%N zOl{f`IeMKcT7(>9Rl}mh>*q0UeQ^C^Qo5?M8gHT+_!YSvQ?e4QQ9k*ZS>Y9ZcD)MY zj|Xxe3S2o2buWcaowiK}L)L)W5H|kiPtcxQ!}=P)Q5vc6=CAO-dE_e^_+c!xD7S~8 zP>#BGQ!a@V(|mBS;hT2p78FLS3SRo&W)`B!AtaYXM(77~A5(p{Xcgb_rW$7dN+TLw zpaP>llUe(F|M=n%_A7a5ZH{Uoo^HZ4ME@78{(`RIeQNt=`r02&1n2_YHYhG zmXs&;W{h|zKbDfn5%=s1=J+02sJ4@XVcuDOn?j=UyIwI)VsxYn6QN&!(2KNF0uRxn zbvzd?yD9|qG>|}SryWsESDcI6wQHBZHotCTugiDzK5$gQ1}|2x0%K&Rye+?LSkrD^ zKB%wpc%CE9EDuv89H^!rlVUak;2C4{9p`eQ;4@iB*N7nuA+?hVi7*|8s3sPw-1_Yq~_W&H7R#}48+jFr%1amc0HnxF}?p0VMy9jAq<-1vqtg9ydkiI zSo14@J?wBm)B!F=!o73<{f zLl}mhTP~6T9&f8j55{mLVcaiUoO7p@T4(oJM@A%4n4tMhMCBf|F+b8>fM6)ioJEIB z69P>E+*Wc#mf-jKbBo6JAgO~j9)y6OaWqgJb%vOsq-g+=)OsQc2GuXttDo{&nNyUE z5m}+b*bICF#~V7uw-c7My{C+i_21*&m6`ezF?4iS&zR{OR`0dTw`xKH1ns_mf2kG!uOZ4P)IkxcJZlbFt_QA|N^ zeoHO$teWB#DtT7vN?n9N;cuJreskM&rHNlN6+qrsXX+#CK!$(OwX+<&xA54+#vs4O zP3Bq8t=DlyzXX=xq;@vd_P1?vFO`GR{trpl;RyBr|INr2vbV~}DC_LKvsY!M2xZT3 zoQBQWROrm?6e8=8aYmhy%*>-Wkvb$F%wjBn)%$@|^tA!rF!+&mJRr9#@G`zF+ zp5HUgT3Ec?J!W1a_5Uw2MXXVJ)+6?UOjQ7) zq;C>1cv%(&vN7=PpUm$Z=h?n&)>zbv7i_iRCjl(NkCR&!4Uzwx?{CLtCVBE~CurN& zJU01s2WC52_H?WSWpW6|Qq?r>f57vNY+C8R76->o#%Ze4j{rpTLxD;BQkP-eTissuJLe3G zccwmjnWNLJ&%3Q#+WRK1?TNP*#Xq`!PJcGW9PJSnXJ5yWV8eT828_2}m2xSlJem&^ zoQ;E9Ua8;x1HQOf?_=pWCymH21$59-W>m0G0Yj%em$QZawrz&m_Pw{8eA47Ivyg%n z4dXxVQ*!?!c|I(5nsuXEUz%KCmjgKK`fqa|?=MG5L=`Aq)noGqJDBjS+}Zm3ncG%? zj-B&j`Puu%FnH~yr6*Urn5#W`3SQ#H7d$rCQwH{NSH1O~do*k_S;F6PRPiC3& z=+Prn>f{;@R-C@iy+Pre9yHGrs)4$o*xBoGdef9)BgExl4tj$wzZCX)<{oczV>tZP zZ|(O#GrSZmuUG=FU+Z2H^kgpQKhBL~j)3IR%*2Z_Hc(n)55jXqO-}KW)0)a_tn6BxUJ@+^rIU; z{M^xf9p6ZNK%5K|D~%~V{d?mWlgSyupl;pEdi=0(N?4#0a@Pcc>v4F1@whW=MM12{ zx$>+Ts89kp=nvc4D$Zq$f!edU#^TAcCX$=33%0BH`W|Etm})OzYKwNLt8L>PR7j)# zo2;(%yz8%c#1p9q#?yj3)586z4Y}EK8zS1}G*R#`$B!M=bscG^M>26#hpN>DGnUbM z(JtUjv<;6WP0St6war_d($>ft+N9Rc);xDxEus-8Ld&%saR7|+100QVrTl`aT4=vQ zJMPM`^tHTybP^3$my5cDsfG+TV9b9x;bJqQn=r~maqz*z+Zb0Jk()V36Q^85tAg#{pt7*Hk`kVQq#op8#%2?Fy( zK$OpQOT>g2$o)aCFoLqG#7_lE`o!m(4_RT-I%(LyZALBOS=#2^G*OgnY(SZ!rZE`a zHK&Ju`m}Ep=IE83=E<|m?l+S@TmEvknrpUhODVO1965WEEd)=DUpF~T{9@`l%yl7E zy$R$>aFPUK!fn$xqVOJ++;$uB1#1JtN5+J}=e3oYr%SbsiK|Nys;2e*K>PoRtoT~dz5{{K)8;{O6LO%r^$MMxySNTgCy&{se<1Sg^=Z% zhnl!+!WL1K*Fz&y6f0(LQ%!j?7PKWv;Vbd&$HlRTA_ew|`1SMCW9U;AG3 zAH$5gD!1^-+PhOBu%;Tf&OZ0<9_XO}(vK zO}O{ae)2f$cob4~rQb>5C?HST*New^dmY@lhMX<-o`nh5nsC%wkL5eD>P}96JY}_n ze8mXIS8R@76jr{yPO(7y#b7s@rJEv!&9a5~60g=_E!CQz`76d?oq0S+d!qJN)#J4! zPfp?vO^G5LTX46;6MZqdlUeG#PYp%=wFF z3DX_PMDh*ktjgpJr|+5I~0OH!B1bv$Q`ChM4fA0^kTkyssm z(j-t*0iS&cHhwZk3#$9Wy+%Xzx!izvv@rL9D7|v~viV~a{m^35O^0_;a4P5Fi00c& zl_AfeHrDTI;D6q)4s}C2w&O~xQ{-vpftmZm);cVyju5g+R{YE8*m_F$6GYiBr(4UY za6e?TK}QgvtkK=!OtH(};VyN(m6D4G)%e?6sd=Qw0=*EO7ImY1bHI+!{Er?>7c>4C z^GyX~)e>T|nclx*BFHL8*8fg60FtjdY)2OjkB?dFfdKIw7c^E+og_rLd~J_2!fgc_(&>PM&Y ztNv_$Jp3TE7Ps;T{C&S}{0VwFSST2-&W-%tbzd{VlP4k(ec|>$syQ87pZ9iAfk=}2 z1ZD60Kpg`?4`VkSt5Wi-E}gV^iVKlCijk2r=^GRRBJ&}!wK^Tig`u%KwZ!*qq9B?& z(O#f{BJ;ns*xPM^VMHj0lp2D!v|E?AT(e9fdOyh%m>7N0b?b$COI}w?jyiR(UmhW% zkXqfc_rU0!Wngv9eyy)+wa@T8S=dxA;nS_!-zF4l4AFNX~dsmb$ zf3lp~buJwN?(o`O6}HEk*pN5q>h1U&A_4Qf;LPa;+Lp{V84dlN;%!-EU^0x=k3-5N zWcJn8iuk#@Mx?R0l7o~Mc29{(JfMtYHr=^a*rfIb*4Cr!KloS*;0BBD z6*`P{sN}l6;yQd@Eoq9pW!KA}{sczhDxqv)h_rJ8`gkBI@?5DE>_LXDMpXq$W2B{t za^uAkbf~;kLy7!!s_RO@IOoO9F*l|`g`*oY*;2Ea2D3SivjtwtG+j6EEv?aG{yo7E zg=dcoW>3iZ;AG)Z(h|O+9k5^z&)t6#X23$K4bD;+B!Y!s%5)HJ|BAD zTnF79Dr!xrJz}nmycG+XeL=-MD4D1S0a8b+)qw)l&~H^Ae!U|^%q0;&G!yJ=YRn7& zMdim_@E*qr91C^99QFt!?=iqqAXO<=sh7h=uM9&{1aplt#Nud9Dr&DL-k*+=HoLkQ z0(Vg83MqF)yNnm^oUvTfu>FS8D|&!|0=boSusQDKZ1Rb%!1PtjC>zE+H|J>T5hm0c z)0TI09}7ALs~yKF9A5wtS0l)uYHABYH@UrOpH4o&-b|t7i z6ZoFmqr;wgcpW0$1JQ99FdwUQ>}UJj3?Bui%8lpe_H>u*xV5XT{!|C{mkIsQU@Xe&@b_(b3SODUUx3FLxbWAUGaf%+KHkv47|{#BuVJ4yF^`#dM^(xp zc7H)^`gC#|C!RXjZMOB<-64t(5i$dt|JsgNd{5Aw&04(<2TMp>FmI~awe~cV?tox3 zKRSl`S*3*m2@6JV?WVYoo({ao4#K{rATgzjO`ffc->ink08%&jvUUP%Uz26_y}u7P z8?n5{wtUzrvb&cVgM4w%JUZehl6p7&keWYJYbQO~O*tbEmsb?g`ed{=W z4;(#dR#RNE(R4)wRTZ=Sd5 zGqIhNJ#3}{zDN%YONcFq&vm3XRIX!lI7%c6*oWuF7&BzsZGs`u{KGuk9$>|m-;Fj>W1v75F&dMQIY{(rMGXNEcs-MI zaJT7_RNabe0&e2+AD=D}7~2T@ZRCL2mpQY^UaiHtZ<@%_v#6J|Xiz|`WQ0IWe8}qj zJ3bZ4TG}yn^YV{FzS{w~&MMNdY5}q9n=QqC^XtW26eZTIujn(JuByTIV(*{iiYbhr z++Q1ee-1=tRbN7>-x}TzTjNJgucdRd>xjkKlA9*{&mop>tJbCQ#a%1*R}Qw`s;W?e zs5dPv#C$kq#d8e0?t&Fl2R{qYii~bOzP5|5H;&IcdW~0uTT}-0%a>sPB^K!3@VWMq zx$+R?vDv|~e=4{X4Z3hK7fcY6h|9R_Rt?v7otPtgV(^8qj3sFBakGj4l?Ob-iAXa0 z5?*tOaCs?~o+61wVsZV3G1z}jYj!dF{kh-R9GPx**K;;tC#vNQQ}iQ_gjSJzt!3^2 z`)qP$LeRAdhP&79Jr^-7UKLIK$B+_oPkPF5JIhEK$F-29sHetkE5CqDtw6o8^ABhc34 z8-&5Q%r4sOLF6NdmY7ghOk2P?j2hUw)SDWYR%=p-AM6>2=HF^poylp_ZyR_Q0_@AC zj(U}8`fV$j*D3R!83T&wi8;4l^>}i!?mE3vG#IQ^;ra0+GqNi?GB!8zOnbk}6iH^l zpi#3wfYN^H?6Se^8tv?(a&4FOBejPd3F;znU7H;Z!5G?}8~6CeCpTTJ#gx6(AvN~4 zo0Jq;)G@bp>21H7a_Per(vog^&IYqyyvr0G9OXrKpMI`#gVvM=)~p;<2wGRUaeFW8 zl#u9}O0C>h%uAX57O-Ycdwm?oiwqYf;@8(BUbWiI<{Oj7&;YIZ-MT+^R;Gn~AXuwi zez~EpxhHaxmxpJFCi<)7)gu#$>vzq{(s}Nus*I6hm@Dr;Kc8la{UJA4bi8MAMW!Qy98Dn^R|mb8Gi=+s9)aCxL1nQa>ln-%i$Agkx{ zQ|U~*h8{C@aO4PQh>6y6wr4JUAgyrqUokibmO#AnC(1_N#70M_>RnPsgXQe9)U3x&@Qfpq{qS`PbSldii-P5$ zni5T!dx4lDTTNZC@$pSaN43N+^)H<0iA&H`w{Wc4^tAt?xlPzb|aiuQ^fbmAH0)m)bGT592*bAis;@gOReT4p#3~ zx&55|c)6ce46c2=vgu;KsmV|+iPCf|ac;8zo!0Deo=xbrY~Gb+ue!dgCa%2FWcY%?ktGO&2br!tN1s1sDQFV(h%rz0Rp@K3plSXPbS| z#-;RGceq}kcCzk^>xVYSQ@f1p$XDT&_Q)bWw>p5#anpQglZpwYxe-mKZmV(j^;nx) zjhwo8KPBW@RD_QE9zl6(BKXJ34V~{ExYX8^x10N5nyN)SM1Zw#3`I5Q3q7g5 zpIDeLli!^0aZTpRtFo&!AIly`IO7UF{|p=l`3hcBez7oOK+R-Zh-IERdKrK z6C(JHZ4-K@0=s6Qzo$O17$E`~eIbdOk(G~Etpo+k-N4o@4|V$NbewIh4I+N382$L> z@aeLyR>jLBzUtB$d$8M+w#GBlMcI2cB6fGL%Gg&f-mJLGn8(XzGtikx#YL6N_Ui9T z{PbwCl#QhR3$bfaQjgn`Lasiz(N?tD2BU4O5pQc|mSgNmJYUHrD9>}@*vTD6-S6$| z(u*Y+PnRvvODwha&Ek5mWA~al{i$pwQ-TD+%`?utH{f?^UpU(gQN=Z|O7agmx9jhX zXY(dpDNKAjK#f+U5%M~mzT;iclI4=G0ZeM%UO548llD#f6`mx!To8V^zyA>*IrHw{ zH2m?*>Vv4n)W57L^7zq^i#fZEeA1aUas5JHorstl?G)UVjk!Y@7Qfe7FA1?vz{2E@p+JqtJl@@ zExr2f=&IS8a)AY(3r-20&S+nqagQ%Q_pj1QRB~CkC(5{%VohMwsCrZf5#8+jb!%4y zBl)*2n^1CFh0<4KNR|1C>^8M4+hWWeu**cjG%xqegY4z|3jv{M#sZ*f$aA?qzX=MZ ziIfqRY*zOeZd63kGj!~E@^CYZXdxgzOM?wC{w}&2Dy5h$zToqE8S(PH#(Q zZp(VqRutu@L+xvwD1E>ou07wUbsQjZEazn=SS}P;sg0~~kF1G*tD?jPeDni}J^!B; zywyDe_vGKYh)f=TB;KE&7^>-duwFUj?IIQ2){yqo8`&W>T)53MY(z!ipHwPR^XR9c zv@HF?*Cl~{s+y5Rg(^n%a3Ic^mIfl1j9!aqELpNHO?yXskWR$3HR@#}0%#%vc_Xk2 z5y5m3IA)BOywqK~pJG73Hr8$VmY}Ukh_SzSP5b+H)V2w3SnlKTaoTNHudTvQ~!5uweMB-57Ln(F3l(5|jGhcQVsnYCIAIAw9Ofcvx$I^tw~BMjxoE zqT^P$ss5&`&t-P~V~7Z3jKD@=)}=9ZO+T0#EjQ2Z8`OdJQ(Ha#h(uY1&-yILWq;lTBk8Ccnj?%AgEeC|b^bEr{o`~}p zOYtBCCbL4peP3}GTnI92Tk=U;7Mp~NZ#SBKM{xF2`RwQF*-mU-Y;5gI(G~03yeW%x zV$cKN5^S0>8E4edkSzqVeRJd9>4X$cxq14Wf&HUoY-(gtR%$cY@k>682mPZYu##S^ z%&!oy{4FZvI4s)*mJ<1H9b9j3vOUt%yrO{Q&hUVu;sxfh!6m|5U)GE?UK@2k%a63% zQM$Lo6|r{)8zurCqbOW&4CV$?$<8q*7|5prhyJg%2He#&?JM-k()liTGEsL)Z@ zrB9hGpFEWS-ePoT9q#HU1*f?l>gsW2jc{tuhk%X8U#MQhNoVfZ;v!mQJg)>xbr{-? zguliYe0Kr~(6&{5OXPdGw{fasDwLy?I7@~5CdOALv-{E? zkMfI&^SYYlQS`4QbVvVIL!Ok?TIUB9=m2X1LUhrt*N&s$XMXsKpd7ve+N>{c!@&R0 z&q@)v?kv=a3l!TafQ?hTVC=)tT|+{G+rBKa?FYv@KTgKmV#<#h{Ji|BvN@(z?tzWl zCDg?=1TCqq=HH=W5awVj3$EDXovFBFB6B@l!+=Yv%2-tWR2)4~33WP^BpiW%QYB{m z3Wh&j%M{3p18Mt&^&D&w&r?xqe|(vLKkNH!cfBRI^aO!~=xv=@1KOZ%h8KJ&2ln*0 z6`mXk0y%GOTLvZ4b5}Smss7;_Z{DHWe4U_gav1@FNwFdCm`DX3eha7Tuw<3-0KpV9 zo9t&Tu)E;4a8H>Ve8a;hBU*wW78v@A>qtn>{fFZ#avp?{J3RT!W+-}mm6 ztAu=gtfeH$EYVAi3xFb98AQ#+Zi$J!Qg%x!mej1m6(G;^>U9FbSCflNpyundJp9TO zo3hrs3d$C?y*5fA)G^IaJHM zq0Mr4w6)bo?WJ)}=2s`Co5^@b8g|Z~Z1ZNCrS1eH?;lmwr*#wP@Jy zD=CIp%R~jJBi3pJvLM0W_z?(f9MGmhb$OkCBarSCX#(}Dk=1OW?w@Jko*#2{AD&UY|cpQFm;8C{pVU( zbs~j~gS`RWXFnwO{ekhu-kI5Z83`ejAjrsCKA=Z|m{)>!91B2hs0pctf#F|qOPQ#S z&Gs+D^Z$Y@&UwwX?io|azk!$sF*ApxOt?X|SBHAnow?xyf)+wb_xP5C? zIum;0Ul|x_^ez$K$TdCF`wV*e7GE$MJO^m!$(EuCZ=tmm2+STSw+yd*A#Q{nE2md(VS*mr0!9L0CRVtM!GXEHv`9W;m&I$*~y2~c3jho@`nUrr~4WWH+>C39-Ym~ zh~(g&Z(GEZ4Aia!!a4Y?Rqf&xiXGK*I1C;ah37{rVl09%-|t{1(bFsd8)cWoQn?Zu zCJFqAeBUbxitV1>$OSgH^d!EW`oy`nJI&`WW}Lx_nJ!f?ES{(fOQvXIl1s8avT#s3 z++7}5T>OEIy1)EQ_Wqdw`{JZzmYVQX#G~r8_K>+-;Zkc54QR3tNc(YEkN-2VU44(EFO>^wqd!}r0`P6&*A{BrGLpgoF7b`|D@%fgeU%l^F z0sH3(@cC9B72bA_z7LKI$p78=3^9`0-^3YFG7R0kDtFYH^FFcF#lf582#^=*%ANUN zbq=HMWH9tBDlU*Yg5RigMtbVt3Do1nXsAvhVtm^-w%TEL_d^g(DH)ZmL? z9pWZ-mZ~2qMQqDrzB$j9uGJa9Y>MUt{^Z+-9 zCk6votD;1A7)uvz>bay`Ro4~qaCuY@;wv*atCZ+&a;P=A9lJIj5}b>ANQW4sf)=Ae z&;!($`m|3X+TXEq7{mk2m@8(&3iI6-Gs%aU_QKdpI=kZ-vnqhJ*9#GNlcBbaR;@OJlFEQf>3xeU-xnk#BE`x;mL#fy12f>g*qP7qIJaCiiEq=>OA1e&&osAIAoU}c3@GK4S8uHDx|8V}Mi1tFWT116v#G^|QUepoWpoqu(5ok-y6b0tW z-?2XxB7nso)P}fyXtNP=Fa+Bm`Nu=O8;B{c4jcOFEDRwcmUQghl?63JbohSL=5Hi- zK7OvhGNr7)x?sy)cX_RBS0lB%_&@&&`4{V;hHUbz0>}LU3xP_;3@-$cFS~;iQxrFz z)_WJcR{gconKao;y=LG6FG>Ylr=P6Cw_-JsgsviNH0>IR^TJIY%9xQ=-^#p08L=UX z8S=%9#LnhW&lX_o6esF59@QDJ+7(G_t5oCyzm_ufF~)Raw=%=-ap}Na9h={#R|OV~ zzzJ54?|)A{e^AWhwkWh+&lCu!FmnR9GY1pVsYf%t5xm|$O zQSCVgEEG%^AxcB~ULH8xUi;c;W!FHkzN>WD9Juk&8i75b#Y5b`cdo&uojdotUq79!u=oN~&hJ`=`6TEb=1GJC8fSGeg8rE?*(?r2+k@dKVh{T0q!~>DjS|8# zuzQT~J|i#;MU027lSX2jms+1Z8O@x19ypsQl}k$ssEN&j}Mss zlt!-Qs4Kka`k1YbQ;tA6V@B_vJbe%ni^)>{B@Kj~T8b};$?YYki+X%W30zL6aO&i| z(G*KsM48>Z@z^HSNQ(Tyv>6!Qy!}Vz#5xfKlJHm6;RO8Yh2ck@_8c7t6+n?rxFqX3 zB2w{m0O-Xn;dMdMD;RjGwU@HzCn+gym5JLlHQ<*QgJUG`yz~vruQHN|HA=0=yB*7+ z&R0fB0SFRy9DOT$(uWE*?*fi*AZkY8P5>*NQ^Ux{@T?QC4oa+s%(f=JTH^@zKY}fZ zb^JIW+0uQDCL3dhE@MWVXW32McnwRRuR3hAKfDIOSOz_CQ^K4QCR>zEIS zW@~i7BRCiM;ckd_Zw3^@e4*u3JE_s9oGBYv5+KgdD=sME)c8G`dEu&wUa`bl7T$&6 ze5hW0)a8QLRzHGw;kD^-a0FhhX8_%jG3loWTNc$u*n>aB0*u&4oqgZ?gufGJUSjK* zn+K59mpjga%1U*tx?!e*#O$uaUawx`c2g%$CBxIG3glfVgceA_GQ3!h5j7B*{bM}H z627hf5*n8~Oe>Nc#oTdh1L(pA(ymT6=~-+`>6MysY{ygsitD4GB4e#*oat{yf1)*z zFpK8&>og1RwULf8B|Ll+{^ATj z-?Ru9OH*ERH3vMGg;xe^v0L_O8;XJg(w(;;z#Z(u`-~)W5`eC`q1D}iKKy{7$vh&w0LAP|MZ4ds-;jkcC(VHm=CJf6D z;+v;%|Ef5W9vK4Xz-kt#PmtwCW&nXSaYzBVV1x82k}qz>yIaS@4@sBsB$K0<>qn>V z+s8=Mu{`=5JWg8vPC9=>faFf1C}5Llusas7_!t+hJ&D~PK(7=|3S-MFpm#8g3-bF! zmZb>D(#g%G^P1V`YqgBswH%BUiF($U%i+UNTWNX@0)t`8dVl1!lQ0sydex%`WwD*? z+Yt0LTq0r3KsJcxh?>toio9{gz+=VkvL3t3v!NNXn)&lkI{s4o0Q+H5!L9Z|GzdnQ<#-!8{YeX2 zK;Trj1?^t$5mJylC36t*W@qO`M1mqQx*3mO`%RGDBs8xdH=>T?2KH7a_Q;6@JRKHm zvWjI{CEt%9(bt9*MQcssPL9{{{*&l*v_Ev`W`CexA7ScU@)UfqknA)Dy#y(fYpk-m zll#Z_W9i+G9!3E8V=xA*4ycrzpw14Awj;LVa3?*Y3v@0J4K=(8r@{=_ICL57iSvn{ zn{HqM32RW8M94VT-*wYD01xmrmYB?Jd|mYXtO-N@6<4<_dH%@dj33RoDDWOX^n}+I z+ovIX!r~K?&BA4iqt7R$S@CQKeCmb9|C5Atzk{7$E zCTgu6#X`0s&Vaf1u|3UidlyNBPj6u7>;SyOlDxH(bHH+OCnZAbVci9j)5xPeihw@l z{SNv4=u7*tvis*gV=rE++H$+sSTU6aw%uB8b_J5S8!0-Z!Oj)x&GbkbQQgS{>k4to z@Z+zGYsL(eR1h1sE#41QHv9r7@ase9=Xf+`q28DVEc4;p_NpJTvL6>K4Poqn*_%1>0qf6MQOxQ3HEa{eZ@;|Vg>XF(t z-ksO#o9VAs3}fR;{%O4X2NdCAh4;1mPayhQ^c-aES;n2DVJb%jAlOjNrWD(79yqdK)rm8jp-GY$PP}B ziUy~FGLNKwn>u_+i5`jI00iAD1hxLS%=oSDpUpkHq3%$UNhr@7PUB-I(2pC)olAab z_o%WTS-kKnD&4o1HAvxl{cTNnvQKz$l7C=Q_$zh~fyEB&?GEjA7tb%}&O@}Y2;@FL z1tPUw_$78G!lH2H+oA%U^~GRYa&qEk#o8 zTGnt8*^rWL_CkBqk&5B@Hbt(WKN8bkAlzT_ z+^vTQ?f+w3!uc&7M=qUEEuG_MpVQScI?mJAz5Va+iD^43lyFpBdL~K#V(#6}(QzlS zUu260Rl?@2r<(ug64U0I*jM7!Ppx0QHmWEQ%$8re52Mtd21oxTlaVmh4Q#QZH7D+q zR>#yu*R&AIk$h=spM43}(YCkUhPR<;EcU`_wHw%b1K2EW14C&GuRTaCd?!i7)q7FC zNa56OERkMh?tdc|`ifoQFDF^ZCE1j#CCp$DNbV!>O4Yp)73Y~%T5$UojE)g$Me1JJ zT0>jd#@gUTQ&ms_a0W@6fRA+>B@XOkQiA^8x(Ak1Sb84l^v|T5QdC96i{Zhw=j)=J zjCuvP{&IG_qe`-!OljU&%Z;4Ni&V93p(h8=2|JyW{Q88a-re{CkDXfeBsl$SPWyB@ zfzq?{?ny^z5mC3yMwZE2m-~N@q&WV{Zky3Ml<4ZXPMEehyA>!^q4TBm2Hyy+n08=| z+CJvi(jw2&ivH4u%91x|kG0`qxD92q-O9Kx@GsCr(-CS(kwGqd5nMq0<-u@@{>eBg0Q)GhYEIUr^Ty+MjKK;RX z3MsH3$gzLOvmYwFA5Oa;$*}*0d!O%LoZ~9tan*BR4ZajCPmrA_IP+xq9w zW?$GwBSdMRV7nA%->N4*a-G8X9^h5Mt0}Dpvvjb^n;b9`0VKbz)n5(V=OJf{$eRjI zV5{4hY}7Y)bkY36T&3q37tSPPe#+{gaz)cXgJJo+!Ov%H`as_m>C-l$*7l>k&Bf)I z|MNo*ib|)76$*d73b|)G-uc9{4YrVsBr&=nI>GX(QTIT-ip5b^-1JzAx^X#siHBIg z1?v4xp`|g3rSIWO)5&cOy=|?iw(h1}@83OlNPkRXdncUEN8WtAoDkwP zL?^0OaS`iyKFm3{zkfB z5|>xF@S_v-<<{4TPK|8Mh-@p46T%`}Qd7pLz#FNyy-I_kkrOR}g?Dj*qgK83Y{P?5?TU(QqPs#=FkL?HsH zJomH2EH5XT1wZb5+lRmZCRKNVy??GY)4KBTfk2ohLgr!t*Jm7i*OIhg9ebknRul4V z?TwKJ|DEnVQ;oLQe3i)8{e0+5qR0RwY?=ML>AR|0%T1Nvb~tqY!iXVhI&Zw$^}9b% z^H#b;bNw*r6Ia^9Yaotcwd?h;#mM)zpdsPn^K{e~YD9zw6n{AfwvSU_i&UR)^W&CAd4NZP0UmKb$0rrq0bTUACEK@Um9`ZT zt}&Jg4ovRc(RkUr7}*!1w?NZht2zV=600}~#MRvaD#mRRZ8wazZ_~($Rzw#aRT5jO zafTuS%rX}8 z&6?gjmFItJv{o!hEg;@XcVOq*Hm6{1l3g6J#$_wmI)-0gjDk$trG(hp^o)y&f&z|UWbXlt*le@Hs0k*uiaeVZ%tBHCSv zonC`#fohmnGNwrU(65OYF6sZ$3cV&qtm_~y?a_Ksahz>T#*O}tGgWLoO zp1C>rDK@Tc3GxaRAc9!qgd!3JU@)V+MU()7PVIxLVcy~bj!@;+R$jWWpv)%#oDG@g zO6*@=zTl3e`FNb#YTc$_^jERItQ?_+DXnBMti^pAw3S5SS0b zV@C{SF6jJNe-kr}fuZt#Djen@j>{z4H*aiyp&Ov6fH6X}Ypo-W|~E)J`sCY3#68 z;ga~L&@3wfdF!yVJL}IvbDRFDhW$Ec%N)k4X#+-=+a#8L#c3v>Nbyj@d*HJ*fgqkk zv)SPqf?P_IX=Za(E}_!22Q!B^cIgLmIk}nEoaT|!$;QV@GeRK#!Ftlh_Kqp=8o%S|STJ=ExBZdL`ARL?A-|&QM-u*=R`&%-c`{v648z!Gr;G6gC_|`y@V|g z4>IIdCd!Kv@m(ES83g)Z6n!uLh{8#EEQpQNvs=1l7snM?($BnLAxpzyE+_DV z4bmQxp!OOYMYTo{fRnj$eyjmI)1f8d2Nv{BB@{f|a1J6#%vOCVMI8%A>u?W(fWBV^ z25KX10oMEpgmH&bn}tybSCy+MRcu&lEqRQrHN+((_W9HI^s|7HV=+rcbO-$}{ram6 zJ+D@tBfhj4SpHK9SF-H=9M4+96#>38oT+j^Kn>pvRt5i@Ml$#w``g><^4uEPYo8+v8rtkjikA$ zdTm+(vIq##t?}ygH*dL8N@T_jLk_A&CDLIm``^UY-z?!QvO6LlD)aisk2iZ@E@|tX zhbOMX=m-v&2fy|t=>*)3kJb@XJG%^)Z^moMZp4yaVMFNF_N>8^^RQyU}-3{JceMX^pEC`!7I;qHgXlK)kC%d3uzI-mky&d z*YU-pXtngoC~X+QT${XpNH{z{`$~w&#bVhYPBBA@Sy+fP!oZX{bI-8t_h*lS(^l1t zuK%ESMb6u8H`Ew~`KO02+%BV_Wm)Dc23{biyt~&bh>YglNk6xw)L)CAsh%;(jLU{A z2;;Fu#(6L1hhS!?*zB03fIali&c}jG$E>Vp7FV&~vG`4URk;a?o z|1rjROQZc;^G5I2d!DK^o!Hv8lz?N4-Pgs3ZxSrTzV;=qb>>5&cy-XiXTKUwwB~WK zLF*B}zV1C4-t(W>gJ%(@Qwcvy2`8M`SbEqXBUsL!SmK`dZBc$3fA)GZiV+s|?1l+Z zTVG@M(5fAO-n6||bSWD8n}h&8(;s(EYfN+FtyKSSS1Fr*Z)tAYDPuEC3iu7OWD0N# zd6%)j9UZQFH$dzOxYdi}#YY1Q^h?>tH2I$Cyy)>*VyvfKLet|CGx4`zb{&GHy1Ku& z_$ZT%Tce@Lw3N0CT=k4X{SIg0uGx(=t}t$OSwr}v2>~fz$>1fz_w$C#*&n>skk?ZGuW9UyQ zlV}6&=Jh`v_~>{9IyPfc3PpdNN(CmnF_tO4#Dm0|oko`QwYN!m z`u)7^6`yXe=$g>^d@f;OjNT2~<=pu4@&0hyGwJ3>nx#98;g5qG2Y0;aer!DS&cyG< zhYtlu#_hb;!=|`jBMZjYu#yj?;;kU@2a0F!d`@~Naq8~t5t--+tL=!%t+<{s(*02q z;CSwX=tDKwgq(KGOK>2f!Y4X^l0X3?sEk29wYOp~zu{MWCg@q9lR&tCf9En*7`2|; zgQ)UUQUT8KdZCl2bqm?{(4QNq@RZRLAvxt6G@=v%w*;4-sJDK!_?V2unBZJ~-2Egr zc?KerZm4&~h5HhV<#(8Lsvo(?F49n<=PY&%H+H5$sO&jrg-C%R1V_<50WrcbxE6 z7_ne-+giKE_5+Zk&9Y@ zzg!$1@*#6S*gsC3uZLgI!jFNkM8c{2?(PVBF4$>r_w3`tOy@5HxWvYnY;{n`AchdD z-mjpitK8KLygifZ^rsIsdFQX!lC8q;vO{!DQY8t5%O&`3pY`6Is3IIzXB{0kG)aEF z*70twFLfSI+Z^Pxwa$8|%>vtSA2gKwlkJbf-=D;$qoh{1!ronnSPp}8v1oR9v&PBA z+oQOpIk=}GfMyhsFT5PlfhpH%LfHBIWgis_xS$rUWQosjG}?r=|IOgH3a2i;A%JG7 z>y#eBaDPUB+7~>UBj-1|Q?`#}9Y)1hmz0UIR8u=}R z%&dcTiNDZ`_xLg*-t#VWK3b`3P@UdpN0mk8FQ4gw0uAnDMMIHg zpWLR#jvu$MIsV?v$!Qg$^XsP z{&RKxgq%kk`>${J-t@TV?4JJ8J?o1;@)iHE@!G7?_W9@6$!nH5dCUclo7Z)_Je~1b zPP#1+xI`{NLcHV07t19l7p^$lJ1KO1^JJ$Zf0QRZ-Ko4Gk0E?xK|x24`$Ne!1%>zQ zn$HP5f9(-DTm9xutFYtRFI*;`?qjgZISL#%<&FLr{jz4`)PJIL3nL!B@46u?_`mvw z;*E3r?;ksVTkGbx=mxwB-)XOMgP9Cj{U@}+0LjG~*upR-AI=bY-^+0>oC z{pX%}h3tB-X=@E;UjMDMzMkcM`i3d%D?f0|KYq8yu5js*>>o03|J*Zp1zct(;ijy( z&r6Q$^%2zq=Te(B1-CD8CSC28`F(EE)9a7-NUy9sH1(5%)s=-Yj)zaSmDtRgs;tT% z{qph49`D6}oR`!q{E42UYS373-#6dfZPS;-f`9HU+|$>%NAF?jw@GW_9MkXlyWfkC zzL&qEN@BXpvCkX3s@pDdfYNf2TTS)t0K4y6>#71%-!IE(YIs#r*t)lRXO`R4z3nek z4_J`%&pF3lJ+RpvCm;aO1yQ#B8xuf0r z{;AzNZ#wC#?Sa3u{zW8dsb}jSFo7VYrgof>vF3((-&9z zYFjuF NJYD@<);T3K0RW100`UL< literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 3a2c6ea..46afe52 100644 --- a/index.html +++ b/index.html @@ -19,6 +19,13 @@ The Nexus — Timmy's Sovereign Home + + + + + + + @@ -33,6 +40,11 @@ + +
+ ◈ NEXUS OFFLINE MODE — Running on cached assets +
+
@@ -118,5 +130,23 @@ + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..9f7d7b3 --- /dev/null +++ b/manifest.json @@ -0,0 +1,25 @@ +{ + "name": "The Nexus — Timmy's Sovereign Home", + "short_name": "The Nexus", + "description": "Timmy's sovereign 3D space. A crystalline hub outside time.", + "start_url": "/", + "display": "standalone", + "orientation": "landscape", + "background_color": "#050510", + "theme_color": "#4af0c0", + "categories": ["games", "entertainment"], + "icons": [ + { + "src": "icons/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "icons/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} diff --git a/style.css b/style.css index 519b05e..e23b187 100644 --- a/style.css +++ b/style.css @@ -359,3 +359,24 @@ canvas#nexus-canvas { display: none; } } + +/* === OFFLINE INDICATOR === */ +#offline-banner { + display: none; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + padding: 6px 16px; + background: rgba(255, 170, 34, 0.15); + border-bottom: 1px solid var(--color-warning); + color: var(--color-warning); + font-family: var(--font-body); + font-size: var(--text-xs); + text-align: center; + letter-spacing: 0.08em; +} +#offline-banner.visible { + display: block; +} diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..943b030 --- /dev/null +++ b/sw.js @@ -0,0 +1,112 @@ +// ◈ The Nexus — Service Worker +// Offline-first caching for sovereign space + +const CACHE_VERSION = 'nexus-v1'; +const STATIC_CACHE = `${CACHE_VERSION}-static`; +const CDN_CACHE = `${CACHE_VERSION}-cdn`; + +// Core local assets — always cache +const STATIC_ASSETS = [ + '/', + '/index.html', + '/style.css', + '/app.js', + '/manifest.json', + '/icons/icon-192.png', + '/icons/icon-512.png', +]; + +// CDN assets for Three.js — cache on first fetch +const CDN_ORIGINS = [ + 'https://cdn.jsdelivr.net', + 'https://fonts.googleapis.com', + 'https://fonts.gstatic.com', +]; + +// ═══ INSTALL — pre-cache static assets ═══ +self.addEventListener('install', event => { + event.waitUntil( + caches.open(STATIC_CACHE) + .then(cache => cache.addAll(STATIC_ASSETS)) + .then(() => self.skipWaiting()) + ); +}); + +// ═══ ACTIVATE — clean up old caches ═══ +self.addEventListener('activate', event => { + event.waitUntil( + caches.keys() + .then(keys => Promise.all( + keys + .filter(key => key.startsWith('nexus-') && key !== STATIC_CACHE && key !== CDN_CACHE) + .map(key => caches.delete(key)) + )) + .then(() => self.clients.claim()) + ); +}); + +// ═══ FETCH — serve from cache, fall back to network ═══ +self.addEventListener('fetch', event => { + const { request } = event; + const url = new URL(request.url); + + // Skip non-GET requests + if (request.method !== 'GET') return; + + // CDN resources: cache-first with network fallback + if (CDN_ORIGINS.some(origin => request.url.startsWith(origin))) { + event.respondWith(cdnFirst(request)); + return; + } + + // Same-origin static assets: cache-first + if (url.origin === self.location.origin) { + event.respondWith(staticFirst(request)); + return; + } +}); + +// Cache-first for CDN (Three.js modules, fonts) +async function cdnFirst(request) { + const cached = await caches.match(request); + if (cached) return cached; + + try { + const response = await fetch(request); + if (response.ok) { + const cache = await caches.open(CDN_CACHE); + cache.put(request, response.clone()); + } + return response; + } catch { + // Offline and not cached — return a minimal error response + return new Response('/* offline */', { + headers: { 'Content-Type': 'text/plain' }, + }); + } +} + +// Cache-first for local static assets +async function staticFirst(request) { + const cached = await caches.match(request); + if (cached) return cached; + + try { + const response = await fetch(request); + if (response.ok) { + const cache = await caches.open(STATIC_CACHE); + cache.put(request, response.clone()); + } + return response; + } catch { + // Offline fallback: serve index.html for navigation requests + if (request.mode === 'navigate') { + const fallback = await caches.match('/index.html'); + if (fallback) return fallback; + } + return new Response('Nexus offline — cached assets not found.', { + status: 503, + headers: { 'Content-Type': 'text/plain' }, + }); + } +} -- 2.43.0