From 1735a3183593b071ef973bd8096706fcd7e30709 Mon Sep 17 00:00:00 2001 From: Owen McGirr Date: Fri, 9 Oct 2026 11:00:18 +0100 Subject: [PATCH] feat(web): make the web app an installable PWA - Add a web app manifest with standalone display, theme colours and 192, 512 and maskable icons generated from the existing app icons, linked from a root +html.tsx - Add a dependency-free service worker: pages load network-first with an offline fallback, and content-hashed Expo bundles and assets are cached once - Register it only in production exports so development never caches Metro bundles - Serve sw.js and the manifest with no-cache and hashed bundles as immutable on Vercel - Document installation and caching in docs/web.md Co-Authored-By: Claude Opus 5.5 --- docs/web.md | 9 +++++ public/icons/apple-touch-icon.png | Bin 0 -> 11138 bytes public/icons/icon-192.png | Bin 0 -> 11944 bytes public/icons/icon-512.png | Bin 0 -> 33353 bytes public/icons/maskable-512.png | Bin 0 -> 30477 bytes public/manifest.json | 18 ++++++++++ public/sw.js | 54 ++++++++++++++++++++++++++++++ src/app/+html.tsx | 31 +++++++++++++++++ vercel.json | 19 ++++++++++- 9 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 public/icons/apple-touch-icon.png create mode 100644 public/icons/icon-192.png create mode 100644 public/icons/icon-512.png create mode 100644 public/icons/maskable-512.png create mode 100644 public/manifest.json create mode 100644 public/sw.js create mode 100644 src/app/+html.tsx diff --git a/docs/web.md b/docs/web.md index f5959d3..dcbb671 100644 --- a/docs/web.md +++ b/docs/web.md @@ -11,6 +11,15 @@ npx expo export -p web # static site in dist/ Web Bluetooth only works in a secure context, so serve the exported site over HTTPS. `http://localhost` also counts as secure for development. +## Installing as an app + +The web app is a progressive web app, so Chrome and Edge offer to install it to the home screen or desktop, where it opens in its own window. + +- `public/manifest.json` sets the name, start URL, standalone display and colours. Its icons are in `public/icons/`: 192 and 512 pixel versions of the app icon, plus a maskable icon made from the Android adaptive foreground. +- `src/app/+html.tsx` links the manifest and registers `public/sw.js`. Registration only happens in production exports, so `npm run web` never caches Metro's development bundles. +- The service worker fetches pages from the network first and falls back to the cache when offline, so a new deployment is never stuck behind an old copy. Content-hashed bundles and assets under `/_expo/static/` and `/assets/` are cached once and reused. Bluetooth still needs the PC nearby; offline only means the app opens. +- `vercel.json` serves `sw.js` and the manifest with `no-cache`, and the hashed bundles as immutable. To change caching behaviour, change the `CACHE` name in `sw.js` so old caches are cleared on activation. + ## Supported browsers Web Bluetooth is available in Chrome and Edge on Android, Windows, macOS and ChromeOS. Safari, Firefox and every iOS browser lack it. In those browsers the PCs screen shows that Bluetooth is unavailable and names the supported browsers. diff --git a/public/icons/apple-touch-icon.png b/public/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6a217ea6131dff6d892cd60eba45d80a45abf1 GIT binary patch literal 11138 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 BOlklC literal 0 HcmV?d00001 diff --git a/public/icons/icon-192.png b/public/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..8c973c31e9f857deaba1ca5733511a516d495e79 GIT binary patch literal 11944 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 I*dXw~0AugrvH$=8 literal 0 HcmV?d00001 diff --git a/public/icons/icon-512.png b/public/icons/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..4154821d260b1ff7c5479560fe422b86e3ac1ef8 GIT binary patch literal 33353 zcmeFY^;cV8&@Y_e?(XjH?#10op?INKk>VO$iWeyE?ogn3gIjTLad&qKx%octdftEG z{&KTc)=pM(X3w7ajGj3$+L}t3Xk=&r002`(SwR;7fP;O61EBo3_>;-k!WL9lBLneYvzViSdh2Bm_guVGAz z<67H7n_xpP{DFXK3Q<3A1wYwTh6q)pztsyCW*Anc-#_rM&-fi=ZOzN47Ma;Dr*41z6}r%0boC7 z^uhJ;VBqT+0bqZ%LPH1i^Qfy^0xd`)V^}!=u#0#j{@+Fa_XP0;9ZtJAAHH9Jp97$d z9_;ce|44e4KN^rEcxyco`1s)XV%EdEf#ve#^#hZM38q+$fr@x4!7H)mNxw(y_{e9^ zey;K11{-2}++YaZ%NhNK=)Id6F$%@g{iR!+a*c*5NtvVt(1I+cNVFB8-gLZugl)D0g{|YJs<2d}GWy#!-`x}KS zXfGl~f@wxlHVQK#CWLI2sOiHO`t^1|GJLyen@iNd%80)>!!M+I@=rq~=D6Y4IN_1& z$Q7YvUcdT>eXUWw*M0?2YB|&{^Mw(jqCxHCzVqCqz+o7SdD6-Q7>n=@OG&!a7t&`y zq*YVeo~%eV^ho>J3Ki6$gTeNGMt}^|t6QbG-)=YMp#jW{8|b6n^4GaZhX|R7TX4^o zW@bRbkVqPmyWunWQMZ)`zx>w>>8>rMmCa%?I*dLA=0~CHbwt#t1`I!xTgOdlrG?Lp z*8&FSegA?XOgR0$3M6B$Mm+-LFiq-DN<9wkV`h(#Zk_^0DOsMJ)qjU|ai#PsZ4g+u zz_A1~73jFTbb4pqr;)7qiy7jL?YHvCr6H{Tz`F=x&<;Ym{fd?sI)-oL3pd6sS8Mls zHK3l{5KGZ<1Y^z>c8>S~Ar0M(x|zbYso>Qgv+lHl#Cqb|KgmC#O*2=J6>D`DCtrN~>hh@X#hAVCed?YKD{%DiCn>zXFx-3g!Vm>~e zL?qZGWR!psKDV1dB4Qz`@)75US*S5%mxrd&p)I2Y86rBMsW5Kew+1XtnA4v6m%OP{ z*N;d{rB5|u?gC!$_^7pU#vHjAERv~v-+<;7yqwKP9ilFMMBMNUAfPUq)iXj(vk(y< z@PxDd4#SNQ%L0A|TSeoGud7$#`0tFh_}RH$l?*l(gV798Tn05ncg{{VsfS1_mI==l_O z8GT}V7?}E#x_zBqdBe-jbTSi1#zbpBvrpz?8qkC>Pj*st*&SgYq#D@T zBSV^o+&7tGk>S}7H~lLdDb#^r9PUDIIS^sDQ<wY6sBMooEdMaN+>O|VI169!>BZ~Osi3r9C@sX81^yyp z0J?SBS$G*}d?#FC!2+LyYqf}kEa$}!EEsSxLcc7Habf*o=ie4l?QLow9W*Ej0w{9{522nrCM0oHjQ#-ge_xi? zw0eIeiNKdrAy8uV(jahtey)xGb%f4tzcs0BQZJOk*FR+|l(0ra9gf}}I$aPImb#Jj z&@dEuN-xr%KQS=jnxFopX!8pn8~Qg+8q>z=G-3NkPo#HP!N)$mMn~%LphUwpGF&D2bWDD~2G5CyiuvSx3m-XrTrL zhH}%`9l;%ddwIgXzo<-@c;^)NN^ppsKhywiTc0KnEYaSP@nF&+^I_9z72)sdyLQOl z2akuShl>ZLFoifrJ!ZGu9mjv4-dz&VS0bSiM9y*98Hdn5d@+9FNTp0Q6d{KoWZH%x z7VP0#u9(a8Y9_tW-3Q?C8R!bFZ8WE?3x9Z>UJXO0LwOj)4l%=c1NWFCyy2k`6@%#n zo(HD~mK4D&Jom%_kSRxXVEk+UGPvNwTm9RjV2r=H%;XNV@)6mb0o@MgdMh2-L>>;!aJBz6qfdlSlv`(f zyNa7hU${KIy3u|iPt6}Xj@1rCe1$vg+2us(qw*pRYDBr1nyI=tgiqK%9DY$>ydu6Y z@gNcUE0L&@cIXP|m#g3mKb9rna?}f)7d){ zk_hlx9h0rz@*P8@jZIt z5mChI>I+^Os&`>xRdT$j6Z?!^v^Ja{9GjNRkt%_2(nZn0WJVVH(HYAOCY}bM@XNan z(o~vx9(=S@luAdpl#99JKNYRtaM(QNOnq(fEP!^5;jAb2bYfVYQ;~UGcpBS}CNClm z53$NqdUrq$N%d0Z##xsR`^fm;o;S6;n56}Sr;`;_%UZuIQF~{~f(odIw)?d`0K)Gs z;FI2HN;Z@#?KegGRWBnKXNMx;u(m`+zI;~B*ZM;&Cm4eDKGGTmCj8Ps<-6b;!W=J@ z-KvsU%W5tD-3RJ{RDelK&W zM)AmqIWFr03-Doo+mnvzJ_sriDGPH63arv7IG~MO?9@EyURxO(C{7#|81=$UpQ7-e zsW}#37ZWD^} zQdj==h3ATQJSbIcJ<=>xfmIz-P!;KvLzG60u>2HI>27zVW+@hp9Xp6X6ilT2;t~4F zrYVhZO~|))h1vL4{Nas5S?*EX02CXs(Kmgg-{?#A>*d4{jvSw*?9`BvAR4yH-x1Qt6@Me|rIQA|eEKE=GVX+?Vru z-AkQuQxtwb87y7+S*gWa|1E;>g^D0VThuf2f|}&r=szyQ6&lz0j`mLP6tYf}rcppq z$HI+YMQ_ivD5Kwa>tpO#&;Rx!_9m0T4lG{n`@}`@fg9szhI!t%vqA# z!p)ZV&QHl><7D25r#Pb59BF0z(rhOQW4GM2Jp?6J1rIs-7Fv&Z6;85K2q|D9BXk$k z_5RMbw=f^0ipUk0A7j+X@gQyJFGeGv2yfSzmdyU~TRDwE?A5rHodYnjbfhH)yxb7k zu{&f-$@+xPvv>j`3^OUXP$cugbg=DDC7m1Pf`%g?Y>nt{(XRo+z=eg9wErbYNJrX8 zsggPvDG>mQlFhY@S5oJ%LYxqK!Zwc8x(0v%E?i^PLbGf5g;`RI3UoB*u(IzX2y2%P zBS^i>#s+l}pwuLpbDX)17Q%C8pc}Cl;$PXu{7JK~4qHwUkD&kCpOUob2}@pGJ?%Gy zgI8isaPqSRJv0Eh85YtfLKSKbH@_skQceED`ks<=+lqPQn^diBirT%Ty+Kz|$O|c> zPvQrpd}I-tctm-S+X`YkNB^7B_yS3q{iHgOvdH7`oH+X0=CU0px*L>jC}!CU@|b~} zLxM4`(VvL5j-9FIy2#-g=|RI>&AnPi^Ruj935tQlRlZJKi021!dM1zL#5N*rLytT! z?E@x>6Lz+SDP%IaOlcV2@YJ*hk%jWhJXP5U5N7$Cn`or{a` zV;V6DiY{)Hz34IBFq}thW82+XYr{2(CuxB6MuSz*VEKf%-j>~|1a9Ykk{;ko*squ% ztb1ev57*|yQ#v;xPI9_4)WVI1h!A@NBLG<(pyGH_d*(@+M;7o#-f9c@&}Ol^~}lJ!bbMK@Qt^&gTn7cr+q8ZgX>0!lj#9& zv*?EV60H8mIjWc2VyZ5wO5IRV8GvtEC6DdfOuOf78Iz@NOvBQHwx2QdxFny zbm*(SGYzLufZN>mn^XGF*r%CMqWL4(iRkLLF@u?X-4q8oaj{15#>7OyDu_S_kUdE=j#p8U3D_7WG z=B;gF5iC0mBLGwTj$R;@Kau*kyZ18oIP%KGeb?2MiHa0Z)VD@;coIxR=dw5Eir0J* zNPhD>s63SW-CtSFR96j=O&d1=)bsA7sXD<3 zL(e+{<$)5ZOEOSlyTO9L*JBBwk0{lU3f#AJLn+j~`t94=UUE9YMzVr=+u2U_sXT6? z+Uei)3~nKn?<{~Bu6^Fht__E;Z0hxy30h?Kh~KCXQ{{LOJh(VJai1B{=D0`f^F=I) z)ZiGV+w;FE%~eCg`0oc3;4<6s@I6*g2fpd9jO;>>J}~zbg)Zu%EC&AwMzr9of#wzM zkn^kw#|z{8{8NMXEO-^4pDZiYl4A|QnsQBG7DCQYXeXFwZGPm)c_z&%iVj6R!QwlB z*Ka6R2boWaArd*(CVw7kf#U$+J3}_;`Jm|h6Bh4o>Uv`SKy7E9I5Be7{us*inBLBRj6<04aB$+m`S{mS0`8HQRctu;))2v@SUP}6)DKgwz`7*9*FQ0j zA8HXJ_v`T{^%Zdl_J=e=2(~k^zUCEO!_4!Y$W6c9j|mNZE|i9f1#k?j8cUmQ{l0vk z1{QixxQsD<52Jv)e=?g!&Kg{(d+fS^2!XClPCx z8J!%SllthNa=#H;5Sw>JS=?u#m`S9jPhTVJmMd@pG$Pz~b4N8MZ zv1o@I_D8yxQv;PPG1;=!D(GDqwiNWCpY>Vuh`ShJQc3E&KrQl@@*=)NFot4nNuZVT z+mBjZru6B&BKgbT4Vu%GQ=WQYBehKT6(Z#_TzO`_376j+Yvb}IbRS!`qeu{JEU>4e z-wEa*1%LC{C9}{gAY}#Df2QCfx??pTx(*eV<^bq~MlaATn|kHI&yAHZu}nDplPq=T zCY&r`gfD>k;X6?Oole!TM&9m06pf6)hoddR17qfo4<6tfC*xyT^+q8P+ME+lmwJ@n znEd!Gp)oT6^GeQ7*W!N9Ds3bJ8e?VRwgC+Q1tdBo)i1{k;M($H8ErqhNH_a}8vA1s ziR>SSAwKlOCgzCww<>J;4|swb)GNM>IAJs*0I{HLthat{Rp#Hms9(-04!9(Z6rQOj z#|ta$DSewAkd(5ArW4#frk z2!Bv|WY;GkKh#R*F@!x+^G&QbIC0zS{Il|3D2OJE=1Gb}zR&u~U(dz-OWSa42^tgJcUirLY&N4^Y64UvVIX+Qzn^pn8Zh2~j% z!S2vYmM|=>z$FZVhobxq6!6l}o-1#8d#`%|n)$lKkfAQieVsphY*%XASxFz71HQNR z7D5r}{vl0&FB`lN9PW{4Sei0e^vB{JV@op_iN-!R^}5sH+48H-hw7LOvvDUDn4W!d zWgFsCM719D`?+FK$6h}|kWQv*jv{CRzm0u1b%{TR9;PG8UgFL)=8j8U5L;0pEW_iY z9!XS>G4E`%yWR_IDdwU7MBMTgsjRQeYqGG%NZb+R%|<<)e1%4t^U)1^5(c(ERZ8z0d!a`AQFNp|uCG#%DY&ok$aZG?Tte_5_3wE$K$ zoosAO9Z6($jNvCeFDZ~7y&7Y`A#=E^ug{MQ#@;J6BS%-jwX|pF5qms3goX0(GxvE; z)$C~zy&EO=j6;$rRV|MxP49QoiXJ&w%5wed_M7mQf{U0{k~VO5ybZPi`vK32N^ZSh zfXbF=I?IKvMyimhUqq8dC8_NwxzJ(^+_QR;T1OsO>H!pIi$MLIQat7q{|(2#xY*lN zP7GuiG4-ufIy94oC#NEOhG^W&mCsyTkGo_qFWMhiw$%V|;!r@l0x!(7;!oeXly#{b zxO8|RaomOYfM@+Qo(!FzduW8~$l`b<6Wnb%L7^;{7~PEzW^!T=6}|N+Zn)z$ijs2V z6GuFrbY2jhRB99?NlgSn0;1sfTp|3&;Zauqn2(GOCoazfr2!i6rQ_9JJU6d#((Vdz zG_kMqPMix~qzy%-Seh<~{|-CIC;VAIB*Da)<|iJ0Tfsfr!{ol#&I0998ai|yfg zM+m_vyIEsI>6(ZgaaXY#;Cgvgk)v8eU!fb zJ#`s)@B8t-nXB<`1BalGRCbcG9LB1&*N?y0(Wmq+z~R01fu$K+=L!jG!|~ZkrB7V{ z@DuFrN061QmM-2sVarOxxJ84>LFJ8ty*xnMLm}^VM#kRbE%wJov2XkkQa2GB%KDM5 zRMk*Agc?1$vN7lAfI1lw3vNA5X5K@HtJ6&UBK7EBq^HrB$I|z3zsWqHgRECqn~J?~ zJm-`78aeaCktxzRzAIBL9S>~A6Z}%bI1vp!Q{s6|xaZIe(z@P{nQQW&pd+$9S$N;W zR5@|}IL~J9mdvyL%sFtS8_~!w?Enu^%3_8hT1em^q8wDR`p!KyB@=z-#8y`s_SGi* zjl}+uAV50^ehqrIcKVw<4FcL(KxT9c$p`gp(O6)5moe}46@2~mF^F^mE(AC4U1Lmv zb>oTVhu3QJP21JcC>Y^U>J4bdN(=U`1Dn+ecj?EPs{COa<7{bnE-QKMX!KBt4y-RV zFu|&=pL}`xB^)dnaTVe)B4nz*T)R0FBZ9bQ03P9&H$nK(vsj zt#z;S)|{pk+2Z+ya-kohdNQ?hy;n8#WoC!xuk)~3mHa#X7~Zej2hbjv0Hzi4lG107 z&pfvA`KT@L{v_-zPfk$OcLr6x|0?JMyYI1lDcE%El+jU{U8Ruq+8D8MWBF9<5WQsM z#PZ22f&0?^a8zs!D$J0YGcL7!)oGmn=S;@2Lm6wcz0E4SXGM-_smIJ#Y<$Z~N&Gt|^af z1zR_#V`#qY9=la(F)v4b<4%+8Qha#h{3hzR^SuT>aBa#Hi^uAbJ5Iws`-SM_Mrfb# zURC|p?azeMPcm_nDUJWz3s^R#Jmvnn6kDkDq<_!Q2iE}HsSW^{x8BIp5nqi{3#9yd zldn5O5730TTnhI0V0+zvrS5UUQIKd_A5T>j>7Rloumew6kd&LU?TB+lJ**_Dzzpw?l* z-XfWh!W}PgIy=y@Q#~OPn##TbYcQ&6Dd}T05QC6~{VOJ+5=Likq_(;iKqF}ThPCVQ z%Bn~BWCH2KzDOcs1a-8Tma--!aTxL-eYod6lyDg38izxZdwu{q!MZy6si=;mIhH1S z_VM$cjevOHO;YqGer}=Ig+~;d1cUQ`M2U@$oVk6oHjb=Q4}x@}f1>^7cwZ?an$TYf zy=sGAt4nKf$>G>DpObt4aXKr*E?MR5b-;pKyq9C3I4~3Rkt|D0(JMNMMfY}UtHk#_ zc(_G#M$JVq0xWiak`Vczad!26fyEEgT>6%M7gl|#$tJs8U3EaIuf@FkoCf6W*X3~P z(w|zy2^y$7hy;>jw@s|>oMjyn)T<8hWCd$Ab)T|V3k_rmBPyW0nVv927&hxRtf z))AThY0`Lm6(#AwdyyE0KOFWxn&v$RXYo9MoNyWj+21IjjrOc(VH~hR3dBrdwEC*lZLC z>ad)_F;}mxJzL5nEIrP}?pkT=;$(sQ8K(b-(v*ZI8k9BYDA`L#X1bWV_s4$O9x-!b z;(>QRALL~_l$ew&mF0l5Vkds(2<`Q{F=4@|FfTB{vI9u49(_d0YB+#w+x(m&q*zW^ zfox2j{KINW*?CL!D#wx=+)bCvQVnZA$6 zzyQot4IiLA1@zGk%XVF=fgvjO}`4& zYBOC?H@pXpCnDwFmg~O}xl{=B1}fEJ7HNAFuDk@LdC?h@;2;5eB@Q1e#UG8e_eqcN z5zu?Gd2>h1j%C2~W4=*x7|#o_xl+s)^n7m|O(%J_KcPHF88jAU*wFk(Qq)V|?Ps2G`$=55>;CXKM z9jIa(6uEQl!j)eqA(!+sj_dcawL?rI5fr0VO?2PNL+OzzO?SK!1IS*mt4X<-w)g8a zrP1h_3_d)15Bap}olj+dkvmlWKpB>3o9^7YpLy>f@#Yfk!nf+U>uTWeOlVM6-$-k- z!w9-$yqLCLSY>=DwZlTPt8L2j{y2TbX?pFW)q~IjcWL_obM8rq*}S23g3O zaz`A3d_{QcwHh-_#BSEb9761^=KDe*n!O2=PiL&0U5P1iNI zOko~^BPzq8KDbLU#f?;Sm{%B%c5S_t}L5>i}4_r{%!-H%W`UdSRv?F z_P44Pg#N`T7^B*Aw%(!_{-jf-)rh@Y%k94MYtR|y9d^%}Nz)U|dt^bW><;I|16sk` zV5)x;Cm3{S#e_%JVW*hqfT_>%6hy(i^3If>gQjr}T4Q|q+s*@np!t=XVgc8V*8h5> zDR%=)Y*AiX7ER5r2WUXJoCi&nC$Vsc{^y&{RrDQ_KnFG9Zf0B1#e=9s7OSoiz-)v6 zPO5&#G%3Ngt`I9!EeE)TFVc1H7LZ;?gfMKe#54qP`8Hm!p-5fqzSI_0?W?-?92yKp zig>X6>N9@I3 zlRa93TDW;Y53C<*%G{vChHz3U?d)s4X)u>^@o`yC_R5Up-|*RW@l6F5I^RYK95q@j z4iP}SM2WhBpOiambV}$20+S0D16q_E+Q{D4+e zg^)qMBa`;@JH6sMrVGXg$*-lTM^Z))hNbz{tB~gyaR$iHJ@+rW3y>>@*OaTC#@-v) zQy;>Yr`!IUW;3(Ehnhg@R8bd|ho0=SPh~etVEOS*&~!y~Ct&$qSf}3;XKt#l7~R8$ zZ;8+&0s)0oXB+Q?Pz-+jOMTY(Be-2Mrd+>{xbTS2<+2~Q1^%zx8Z+cH_aj~@&(03|pF`jWK0w|uRS;QK6f zfZYk5u!C@xur_#eAHS?9nnWLf8GuD*|W53An$# zhCxwMBg z;oDZa(8DZSw9Hb=>`Ub>_M?cA!hkU#8l_Z%Wkg#bfkK5f{b{drm2SA4oIh$ogX-jf z{$oGSmbEJ6^>0t{@zT=#$;*;>#0^ii%)8l!)>8E^iIvP@w0ZRg(v3ub+B+xVc0JD0 z;!$WY&USi{QH6o8^X20jDDeB3x8i(^xM<@JaN4a>ylwixV?!(qzzSlF{k+JQ$+CY) zT0Y?}bzYud&?`p$Ev5xP;v!cWs35lWuIU*Uw>s#Isg*`W;g(`2)X*U^TWoBqCHzJD z-fs3N=-l0C*XdRaN3N#IASkg^-o_i^BH&H~yB%imOgH6N*jZ}tW+e%k@VtL-k4Laz z8T#S~seiUf@01?C_@7FibNjyv^S*yIac@%%25)?zYl@zT!d|hDn+B2HkCY7b%BXq3 zRAhC^BU6Lz2bJF&1jTnV%pL`2?mfhvh?iO*Igq||$)*UD&LwQ>t>A=@X@3)68uYTi5 z9f9tmpHCsm`p*av!6{i5484ZEOOtgs6LtKJj>O7Pbea& z5xf(Ld62ut6+FDGDiw>a1lZMHe>Ya*dF##5sd@4id560|)wPU+lS{Tc$9eb$ z-eN(u-QeV(f}PJR9H-hb4Y{EUtiDL?9`%97+eP}02V?$5Bo6=mupUU83BQh5MRC?G zhZ$0sE`W_hvQb^|zh!qV#fXWu2dsGg$)cL~*6NjXxTI+h%B_cHMRm&@%d_2iPBBgp z2kyia12V{!H_zE3oCOq-aW7IC&yZ(te5_|8i-R@Mzp4ml39TwxdP@f=dz~`;)OrjM zvp>`D)|Cn`HE3~2*MqJM+`@gK!*l81MX%~%?i0!qfvHez&#!awd-5$5C8Wjp%(%LDp zo+JMA$q~t-D)mYl-}i{b>xUxbS_{y`MmSE#FfIJ`kgNDEteyOn&to`L{jS+ zmA>3cHi5IaUx`4m`I%}D7ts-{AU8H#*d6&894ybYGn#M{!bX}FZIm2=w%rT+@ zcu5!F5e&X@hcH3isSiLyP_|v!GVNx)zHntNW>y6gi0%wsc*UZ_!=G!NSqG45q9Uva z3dCkSe^2NPUKg=q1{j~PI&bH)>44xXa=l(kxHt_7d!O>Jf}`DS2tASU;zuP1ZJvq+{n#v*Qabx@`FG|l z{5VLScBhOqs2uZE;O~R@gYzK;Y;l}+TR3^apW3EQg+9o{)6K(EPWH&ooep$uDJ)wX zo!1+<X}qcxrm;JFNn zFG>45ta_ucYt2TfzyRT?ZD=dB0_F9G+1pY-0u&xrLd4z?4JAY%P3_A(am;K16{AX%)l=cyBsHvgou6g+pGiI;8>w&B@ zSBV4;x9l0yF^IGpZC<5q*KQ01;1|Ui`toaIku6*+1IJ7rDkSMcO(cn9F#Do6{Ck-f zahDI}jT#dI{3i7s8SVqpsg2$-u>QJnYpL`1``~fgJW9`PXM=sd9z`5+;E4G83LN)0 zxZq6aO>`YX3)xhOY4OoRh(ke#3RR?DLPT9{@9i4ibWoBcfqQ;LDfWrnyIHM@hw|x* zUq6moVH^M)N`SP$S!9UdntN!@wu7z=)~02KKR^}MeS~P!{Rl}mD~Ni>Sn(wHO)N!5 zs9a!4Yn5`rk&Hj5Ef?TJ?CY!$-(PZsYuO)Yi&-YEbi<1}zLTOrG7&46KgLq#xP@8F9c|Ljd-$JyzLZ7L^>1YNd z$Z+I17Fym{{1Pl{scXeHa)g-WZtB#KE5#x7th2A!Pr2n7uQ3DE<+IKG=c~W2Y#7Z^ zhnIoFc6+BiCA^&BW5{LzEI<||iGUCz1Ba~a+;fSmZ8+Bx%aJMv3-mG!Bn-d1BbkeN&%G}Y?6I!0Zrw2^ zA2Osij?m-wtNJgTOm`wvxX(v@1Dt`bTLvZd-CHxu|Lp~Uz7I%@ObypP$mrr?hV%($ zzBM*~oCI}m{sS?y!-o|xYz@aOD|v{{xkCh zB@{H#dkv@oY(vE{P5E4!{e<<{OW)|K+|I9lSVs9Hju#%o(|E&qouRO5=<|TS{F5Yq zxn2CRoo&%#HWl`VmyZWq?0#t6RJ-llbDjWSFlq{FYy?Jz##PllpMEQ0CQbCF_Of`( zaO0yQ4l%Hyz3*%^rLI`xU!x`vM;1qda0#v_`e=zN23~#+j9(I5v1~V&NPGWIhnBz! zYJj3wl}7uEhTxs>Wp;jFWI%FSNQgEPR@ABz&x;93N9c22gsS={ixLd&HO<{)X}0o~ zb;ImdFN}>iPdwOWb>=?l%7pX22yr-rR@d+CrJXg0D~`NT9>Nk*8vUK^p4H-oAd6)$ zzom`!Jt&y7Cpzk~M?ZaB;v|Y)aA+~CCX5}Nx%g_jDf>)SP0z1O^z0V7iOlA!V)surUNkPu0pRqlcFN-97o||TXrsQ6 zJw%+UEO)b)xGmpeGq;h4rs_JHR_X%^ii@pRzO=3dKCHEF1if&!u716l5T4rmny|C{ zSZ`R(Y5qH4t1kljI4qs#cU&1o<##wpY;iNK_|7X>p?GP+~C)*@HPOYPX!zEvr#sizj(-eL{mc;P{b80 zb7ck?H@V9#ekkh(hPBH9U0b!!^V_f_G+}~MNKH9cZ&(K|f+0Khf8Q_*ip!``q!BWo zmb;ltO#A369PFOSZC<_B0`r z0lhs5uX)TdrhmMi*V6*Zu%)5Fx!cy#@)h*i(Y*8F^Pr4wH?i0>K86y{|I z$)=|x!HkbK`Tl1ocqkS>pTEcCy9sD2Gq7286TC?Rv|F-pk2{Jo50gdfe3s7D%y;cW9j5eN)e5>! zxtWp%{rzb(`bqc1)%l&g4UN1Hna5QBD!1L`=Xt2H|7dXFd#Q^>DY6MKo^C`@-Am)e zD_nG7Lm-^VclOd6cla+p>q=drK`Je;Oe=y`VPuZa8`wwqjgBrOW%6_8emSFfUW0~`c~}aq^cex z(nI706)T_zb!dCG-G39nae@fRcIc!s1H=u6P(u-g>8xLib(ba1>6Gp%@*fcZfM2r- zuJp?PXuhS-EESI0m7~yf36Nw3{lnE|wp{u>oy?0$Es0_*^babSao-MRCu z1|5tA0>R5Fyy&u(+Ky+qt$8k;H4andzpNgxrK$2|*0>wWnrb;c=Hw=aaN*^Lu|`>) zE0VN@ApL0hjj^ndfYCc#gvd_3!9#f*K(MR z{aSJMzwAY>H|y?bB;zqeLXx>ldZkmB#JCaGhHCIMz`+9#TWT<9wskSSiH$6FQw;qc zZl!tPUPTe0vZ4hn28?4-)ShqyGIILmoKnv4tu>%tNjZt8$TCU^3b@UpW%Cqep!o;s z^R}J3_IAU zRUUdz3hizVKi@56kdM2>Y7sq zn3vChn?0qj_djHyBQj_pnPBTA>RuSidV`Ib`J84UQ|c)b$vo8C_9awuO z*IGB2WL-eYV6w)a{pp`Mpr$nM9afgGt0}gPNwC>Fe%As*JsB@&cSZq-iPg5qsRY7T zNrqSr`{!D%_gv}aTKPdR$o;i8PqBs!JM`rFpZi`75`*rW^1nnXOq=EsRQ zZ;LB$$d197NKx9NG&zPzK!t$8-H>BRWE=<735IfCj}AuHZ9e3Ah7bjdGQfg3k~1n> zt*4_XnYB9j9|hj9BHkV|5N}BXD+{=_7!t+ zP3kf9(6hmPso%W(+sR0_dhC7k^dlAS}_+GGR#na4mb9{al%;YcJvn$+x5V0ZhCfKIbxq+g1IKY%vJ#Js7!$GKb}s7Uo|ZS@gBrY5MwYG`vrUlre*| zLNy`oWGO5ivRuU#-_XvqUeJT@_{wwwQ(7hbse} zc16u;ihoJb5VBXkKG4uY0!TrQw9NgEO1Zl(97WE!0ryNNv&o;F`mzm#T!QU2KojH1*nT4r zhW*68$%)ZgK+Cry>XWzpuVbvm_pOan%qXFs_nqfT0G0Ln8^k{$R=mWAVu4ykp>V0?lV;L%k0lN9KV5Qek6|$OR}U@o6Ezxl*E0>|sp@*S>}pI}nhjNOOmD8Ta8%BH?K@ z%J#2v|C+AjbJ+ClXO+pY$(=?=6XnOD6Kv!8Ta%i>4fiR@FJO&+bbyPWmH0*1&FSAJ z6BhJlMN$?L(w=VGCi1e2ux(f-WwG-Kfcv6B6;1aSeHzu#2w`AAAK>)!cPs*04Rp=n zT%U(Nn%qBX6!*U}fW%{RxbBPw7YFlK&5|_HiiPzWl&LHIYy0Y?_(cFLHxhD}K8*Ym zO!G?e>0w}8QoAe1k2(U6hM@;TVki@;QycR6ROKA{mFit3Cea7>V)B5(DH3KPie)zJlDDVZc)gUzZL@{^m{mU z)Tvpsv2VdpY-(Y8jGU=1=ybOiNI_H z*1q1<{KQ;wIn~6BHza40IQvQOc1|o+)oUIh``u_l;ib(si!|NGOoCI9O z3sbTS^1L(N?Vjb&GaQ=)I^jnjG=cF^_r!pvTfr{oxT_j}B99r8tw@_7$^n<7Bji7t zwVsV<>d=Zm-~~ey#uODhE8wL>edT_bA|t#lp2!w%(u&EaskuMSOYnI)m%u;KA|kK9 z`Z~}(Qw0*2JWT&-s7W9M^Hd4$+c=HKM??p0f)q8y=Z~l`9D@6={7q)(=B!OmZPkDu z{QUf2LB3Ky^p~|h(k#Po;9S1jD+p;%CE7cXhWa>n(Q0GcvdzU|>`PK{HUcb`M6=+E zAtp;?iR#UvG%unqiC6vLY_oNB?q9mm#JRUoEuWhn(Be)RZ60IkiSOqipJv-)#6tZ^ zT-oUzaUG;^acv4b_78uKw?1B(B?6V=AYy^;U1sweAAV&Q7HnJal06aUKod=vZXeO$5%M z@g3C%sgF!iuUSrWn!=8D-v+I2FhYFT2dx?-_GO$9%3knwkdB3aM*Dp?LzI3My~{^* z1u$5NgC&yxBh~QTZgNH#ZjK?!hqrEBO4*tFyL<^84X%NG=jh?Zg^MPTL;i|xo@?$;5EoJ|tf@a* z9B7sn!%PJSI0N9evls@8CH^o)4!mhRks0xfACV!afTyBd>-aSKeSLlXXs%qo={SWF zXN@YRKxZyr<_d4VF5=C^z5qK789xZkiQ~-mS zh{taK-T4<9cm;-13K9|@n2(304|Oe-GIDbkb5dH;5P@dI#am{X5}8+c2rNNjA~_tC zDNqh|>RIIRT4T;NLXpAAHSiz{O#J@D!%Pksu1e+!M`7Qh_z|;v&)Bf1;#g}_9%@w z!9C9to?+2c0y7!OjeM5~srd!hAC>dNP5tE;$AYoc2BvkFo2UA*rCS&XkSrPK}ECYNus!&58=&@MZkCTHyhd1j%M|p=N(OxV(e+Eg7W+o z@oMK?Hr$MM;Xo*$ zFeEB&W3DJBw8czF3-K>>r6zm`9amYt1CA(%>avdndv5=JS-YTeALorxC~9;$qCue; zZr@1|KLMiYX& zy9A1t7IzEo?u8=7ofavD0>RyiThZbU#ogVVQmnYUlQ-YzIq&~)u5+FIp4rdt&W_x> zb58{~UVBAPya6RJD)7I>W6Qzjk6FOLa|@!7%O$GjibKrBJw>xLH5vK|{n!d24_Dk= z>Mwjzsb473K1{Rz*}R_@IU#!Y2N@a2_heF`J1MwFY2!5)c5o)=^X}S2ZyDhsd9Qa?ks1xSoNH|r+FR>#K08!q^9z5s5pI9!Ns zM7cjb_F|oldk>~->`lu6q%sl6ap10ZfrM0YCcPlablZmH_doCi9$6gvfhy^}<-CytjV$MbP4DJVRyT?%Vb;LkD zt@VUn!?ldHYr`;RX9W8>xPQ!Tl&jeJ#T&;*0!8JI39;WPd8-Wky)WRI@vIVn83!+E zfXM~J>x3?rZm8u;3lo9Av{{oLud-p^chjt2&qKv2b*_i&UzL*C1UG{S>K7`H_zbTm zix1erYv@vXT4&n>*HUGvuNo~1IR@2~a}QhT{NBK>WR3Sv+pwf4k;;9&fmCml1ZDQ3Jqf%CGx!;_2Mh6Dgg~maP#!_&i-! zz7hRfZQrioiQ;c7rPrl5zJhU<`8!g28teJ$b~3ZhGVK%=+BIvCRD_6sxmyr;48MlE zhSAb19eksUAVQc0){9$@!0Te>kwvzX7Y}_knVpiD`b_EJh=P_~JfqBI+J5FbA;^?6 zn&ta=@FC;teb8<|`59bi_Qo^rmds;$lWrCvsHsQ>GLP^63vfcEX3zW;RQ`jv!CTr9 zg)LIjWuaGDW60C+bLSi>rkz0nEFLX2XywlOciAA%1wR{HGwxHcx8&(4&D%Au6!LSD zWHup|Aik6BmQyn8%<09&ucys>G09;}Th>St8!b-G&S(B8)b~?TIJ~hpI4a^6QsW&c z5pXycC0AhJx-sX3=IUoDY%R#+9dLs*cA%n&+;oHZW>IB3{R;qwlc$8q-hD zt^NF1-_2l>^u9;K*=$bU?@c%ndg|*w>huN4d@uQ^w1p+|f3?iY*$r#O7MZtxAbh~< zcQk8HGAPwyl5onw#H9U*-QHQy-Anrw)58hLIJkJlhOC-APMMLt^|Q;k9&aUY7B?d6$^T4SEA` z|7$FZ@!NPa^{dxYyA)Fx{H%H>RD>0~M26KBJF>69ktI1Fmhz4y7{1DW+Izv zOx*Yr46o;l!LQ4fDU*J$S0;}$DYXV#YmG`?gNCGFx(bznF5m40HL-_&cHfKB*0W?y z#)M(i3YaXWU>)}>*RBA+7{afz;)0QXoJ8eXIzFCuBW-y{Fmi0qbNo~@iy*_)?~wO&4L%Yb zXC|JT!TjsruL6)T;HI(ZyO{W6l|YZ--tCg!_=?Y4Qh3GM?Xq>}UHjQb*Kyt?MTRtG zyNZ0rhrx@C*ZQ;tTI%4-`MIwogx}{X$(Gp@Z7*%h_P-Mg&Rjzm9zy7(YseGV#Zs)f z!Xg1|Xh`56Y*U5*P?xn&E(w@Hm4akoT~imd@|JMqn7#=$N#6w7QK-s7k!A^r$@kCQ z0Z1uEUxxAIC_lr|gUKx6I~9UAvhQ9qw7XlLgC#dRo=%^ZCw)EOcw^$I<>2QZ!xkVl zZ-d!v1lqBH&=L4;00r}0h)U=3^pb=5_d_{*(NIe7k*c4AHN73lxp~ZgcQ0~Zkh(e^ zNX*qc0s5hqT3@JGUZ!S)1ctjbF*`tSo$_A)2WFV0D?(jyj>BB?$dab>5Bm?H?s&ba zGI5)haow9(gPUKE|6n~hs=ZKdaNzc+@)@dWXKHE+N3&zaU+@156E*^IIxa`vdf-^H zCTY?pyq2|f9B?B^=6RyC!YxS_hqmlVebqrD?)2_IMW%q>q+3TP9GCjfQ0jO8W#|+7 zz|umUna@XU++oZN|1e#Q9WU|$6mLNjbeJ6qZ=Iq34@>T-{|ZB&_9+-Z3y#Y4_>y5@ zRBAL%omu6=)>iMxcMU^3UzQyf+}AWqwAqML*iByH2qiIku-$Jvnr_9gg%*t)WBbPh zuo0nO;K=VeKVi&dS!KVvamN@+=|5uy6!~O`7SAI6EIFUy$k+Mr4-wtT`|~s?s4R^$ zr{eB4?eN!;2|yh698aQW44Vh{B|l0JYRqQa=w#qi?FR;RMIF|pMajR9{b4rtZDGaQ zJW07;yL?5GvoH~zs@zwT9#f!>vT~<;Q9)wHk&TsuO$7;t7!sctJVN5Tg)t!;Vw7|D z@e_;`{1I|Fi%B>z$;Sjo1gk%hziXv_j2*1}HpLli0d$*cDu}B%U2(i@;J>brF)dq; zraH1x@xu=a-I6K(sN~ZL?UvBy;w$tk2ege}>&V6Z)cMfK`mCF_@RuGQu9sKcl@gc| z)=h-jD4h&Ei`9ika*(?i2dsRnKNi~0i2axiHPR!+Lfp)(4H0dRUt#AV%P$o7-(o2K zi1E@m12K74?hFpI%3BSGBRdckYPAx*f|4=b&7;5daOrF?N%0@Tf%2WbLBNXHo$Lo3bK81yw=;$m}f7`98nDBdZ*cJK)mz?*Zrc_`Z&i@q<@z{`s;LZ#8(?V z0o64Y@GNLWNy2&UN_tz?2oZu>qkbRnMsA~G_#-1(l`~9(%CmhuQWyEB{~?LZ!S7tm z?}W7v94r<^#GMDN@>&HP!>D4$U zDuX?W*<0u<0myD#@Z`U6+f-P>1lzFh@a|7IGi_GIu#co(^QJ>I*ExNnxY7<4tvi>; z8OAbY_$OwN2Og(?TCv8J{hc5~LJ3nGw89AiEqC{+({)5xa&UvR8$(6B5b{d!l3}`m zOs*gEd&%p?`5mB5%R63rMlviVn1*?$<;LT&KLQRLxlcW^=u5n^@embx;p18d5T9M?D*gs=T{dXgKulTZdaaY-jH-t^~N8;Pe4k(m@6@(*k zLCfs!e=tr7*vY?zFz30J?0E_@Sa-PfA=al_E6bCDvm&%6a)0?1Y~dbaeC~(!9P*_0 z=}jxsO5Z*%>T`W-R28VSALO6EA_srMMPz4E#$iSQZqvO-Fg^Q0BCTSpQ}sl1o8}l{ z9P5(uL=*$!(?$j$L*kqFIKpem5t&9d?qC&l z-2QGXi9re3xz9j3QldUQS)?p8Bjmx)v}Usa5FV18EFMq-PeND1B3=ejTV6HG%i@4rhNL#ThxP3fVcrow;j<-fD$g@ zhTo$nCV|^Dmi5`UZyQVTi*lLVnkn}<#49qW|B_`fdZV|O{(R%q$CCgChW&jTYnD%q zSRxQ1!+bskb{FkDDfD1ZY%xqZ+zWe5`?VA3s&L z{Z<@Fdxml{?-mvot%uq;d}=Puu|ny@^_bVg`hT&2$|FP(e+$Js1WQ}JbqPkaoF3Wt1v41wkcPi&`yJo<!5x}!;q)(fxP^-JTl3U|BnzkU+} zf+?7{iYGl+ykEB*32pu8FCNKsq!56S6>wHV(BkS4Z#42o8QGG}uq%k>9;f+M0Gk9* z2w!dR*4Mo0?+3Q`4*o}!2Sqe|{hmJ!W~$x4JvL|wI4mFo35jeynsNA!A}pF>g_fOYrTWoM6MX7RJIUD8}$dG#2Am=hq`yDVRMmffaRBL zz(8u$Hub@;XsThN-p`q(XQGLvb!WVm_)GweCC}J$Kas)(DLNrpYxX@hbprW3BGrrH z9CKm=7_;AvaHm_5>75_GoCgl!gA6NNe}II%cp~K#zq&~3_8e!O=v4uEB`&cNKKV{; zwNn1+iqf(MIWLaH%rANq2)tTySR;*^2k%ag(GYN_q)$7o?)(C9w+!8hKbolCcj zd87DME3FPj&_|l!`X|4w9D8dRX0zToTY}bGvRINJ4Ga_O>eRT|Hoqhf+dmPy`}j3( zEv|4v6DcVp*R7np^Cb}A9ifszqzYVm$v!8Vl{o(}-8`l6z{v|0+tbVD#u5WgVJZ+p z_t#t-i*+cBTMl-k;edRKd?zJ$ERv-d#>$`1rCXf7av4Q#Z|-2!Ri5mh&tMjn8MuQ- zY=Q`Gn1=X4iC@#by6X7T--ILJ8k_(-FTe}2i66(GGN!|;x1ayyYe$?3GIFBcCzv$j zDV=FMQXwue5x2nh2}+x}Ct7~lRHO(U^tP9Wn>$5NHBljUChG7wJ~F1gqt^q-AFXB{ z#!o#fhuOT3^DUe3=~bEk#%e|&-xaC7S>YQ>xb)MIQ0i{|A)5ahkVIvS%%6tU=Y_g0+t%%&(@E%aUz*8f`q0}%$%Il9uiD87rLzI>N+3iX(DG7 zzW6U%Nk9_4jC0XvoVji7oH2XCC8((sICuQKULFITR9w(2ZMAzG$Ez$(T#b8^K4XSp z;2>u1@4=!+{-piEM8D895cqrM66}yospRJ8e1lBG-~nUuUuYQ|raaj*{|w82o@7@} zx)QI6GXjRyLMWae+tq~?2RI_Q4pDrBci@&%sioa$(ST{p{`n9Vv4yhJbBl(Mr;z+M zGvM0#v1E+8=L&y!jWOGGP2b6qwCO0L8OFqj4}TtgVl#H5x`Q=Gv}iE+;PjX!OYC^MtwMEr#FT*MeZXP%!ul%=r@eXAZhGjLG})?kuoPmS7YayW}6Y?+spe@7HbG zX$0IX)K*a0i*dVQKewthg{$V&=igc!j;0M(?2;qyz9%0vL=4`;WdZPBx=aoT;Raz& z1|wi&JkP#4;Ub-)T`U6fIk5cvp{hx~9w2RyQ@h@zqYIO;dQPo{cnd7&bNVGrzT}J} z15<{#*1fZu1z35;TVdiiD6gc|PvXr-j7g8`QzcoRPKb0~9e3PCteEW3sL%oo2+#b5 zkij>#DWa5&57;3_q(wma&DGRk^0MCkS8I zwwuLVpm&v?r&w``K=L;ZHbAdIj-1L3nwEESg7X)-rJ>|JQ@Hp(B%;a0(#@9ZGQQl!5PeFNR3 zGFuc(dZ~GnY_Et|aBgnA_px@&dDaS7)9LcC%<{smxrtLs0)Xyt|Jq;5{L)|}n=W$- zqjg&JPsP|GeZ@4T`fc3l5o)-33nMiHl42t`^^K4ji_(M^kx`)wOYh>~Jv<4b+Hj%9 zT`C%g3?Ch9VlVS*3ap)WeyQYs@q-(}AB)ii0^=>PfGq(l=T%s6ld-Oy$SbX`K7dU! z%(v5nTURy87BTt-!2Ez#btQ(4kS>MFxj$c}9jvzf1G#@nQGi9=bo}nU1`^SK8?lTN z+LTq*{hh7VM0T`O{L4syz!MDso}D)5p*NBo}MQj zSY^g5&NGjtT1T2g_(Yx8U}SG4$29L?3BF8yyRV^dQrjdbLdV^dmM8;}Os@`RncQw9 zv;>Eut@$YNNW-lk*X~#=5qW}f^EP-A5rfOD3KeiEQKMpoZZ>1g+c21lK zAqqdIdcp8cn%3r34LlJ=EE(W44XHVs12^@&qxrPOf+Q!=^;Y{-W$9bwpfy4|7D6Rn zKh9$oM$ubT)HS~wQF5cvQy6_!hWep$=c)jz1SUVLkn(wfNi&V-z^7+;QSyb@6K_)X zMVWWg#c@T<1Y+jq*R{%#fvM{S_B}$$u)Ib6U+8;VGY9Y!D)(He1@~*UD2#tM$Alp} z6r9a4GcV#wb(s?s5n~1qeL#cA>Dg16&V$I1eVEyT=Nxu@V}fwETg5_#QRvl>ircpQ zgA|+Z(wR~DOa(SV&n}HS7FPM4edbGcpF20>QIj>|)psJjbg@j#{dp&kksqPrjR0b3 z#gjx8$*kqX@;yQK-3t7^pPQxQuIBuLWv7XwiSi>?#*Ku{hA+D zX4KW48$6BrDMcZ@fqLPiQ~F5#q*ejv<;d)U+35&rS%?UCv^~6yl0E8IedG~68?En_ zIW@CkMQy@XqPb}G(iTcy+gkMjXS~qto8S3yk+$B7UQOq;0&CXDSF=y%{q_?HTVWOc zNTwNH`M8T=TcPa}`q;r(-m;9IG;S|LEaJVRJ?YIqB&^+qSfhD)jR<+0x@Jif_y>zc}Nu0k&glnsk$2SvtrpEQZ|Y_S(MD5b6wn92@@) zdLfNqddg}QOlv~FF%%6dn@gHnpOm%cvN?J!T0hu(xu>gRrZhQ8Y{Fg_(gzISAXLWn z6KqpRQzoYbzR@16nYz*Pi(5-8F;SpBwxBLLH;HrXR&>GFbhth&%c9$(WE4hvA&nnx zVG)Pd=6z7@`%Mb3|Hjq4efVuJ%{c%D0KY^1uy$bsCCR*cff;euznq{maxaylTi6I; zT`~{iUuMCru!J@i&5^}ax2U3ey1VS7^NJ88QJz27X`@9L92guNO?OtdZ(ZJdjBm$S+d>~Xxc>u# z+o)((p+BDmehKG&5=yr|I@kP&{X!v#w+JWS_1FseE=M#O?u=~U#^=eNB>Zs_#(L8n z5C|fO13jl-Z z;o;+U89&{pk0>+)51qunp9Jvc`Yf+~{DKXenjRD(0vNYQowri(wee!FUtl-oP%FqV zDkW#Rkoi(Pq$u(ZKBMP<)BIVv7+V$mAy3gAAZfm#7Ii|GLXn=^GiZ@z!{lh*!P7hM{dNQlO-Y zK4`#LHC>;0-!SIgFrvUO4oD8o{#BO5COkm1)hvYThw?esre9e%|6_Bx`b9hMw9RbA zpDL8db*2Rb=cqJ0+;fVLzEg=NqQAfppm8~Rbo0?GhWDd1ds2y7#y1!P@?(9-tu&~!6c8X$4=Yu!tuubbP^Ug0_SP`i{z3dlrtSJoyE`{4V>JJAC@BQYB8X!yuH zDs2;0ADKfZ@FI^cDuim~dIL7plVDNC=R}9wpStEMX%V}ToHkh#GUgn^`?hU6FS&Iz zUFY^ug~N5(W!*~*yowJ!KX3RFdOxXbL|pJf^z(7tpRm4wUBO5YGUesha1F4_hG& zZT}%V3WIuJK*fvsS0X@)c2bG%^$u*mBZ-N%S<1D zbgjcxG|aB+yrXLVzqjq600(G1;vi%&qsH7%@f{!>AZ1EDIKZCc#+^iAqX}+YtTRQq zPu<9$YWRO-y0!9~owX+j0>>aW( zjRnc5c9bDnuTQC$Nzy~Q@#SQ-?$|qTo{ymj`>U#()o6(SPqtr{8Mq8PF@S|R@`B%K zt33I=sfF*eq`C}&e7(+k&5$}KYk{!3QJ5&r;9rxY6MKlw7SRYw&LcqQtIQo_=osmg zPLrjJd`jp#J80l6rvvXhBml{nf5rzzk&~2XLhB_(Q|--yNF1abxqH=O&tyn= z{rVSTHg<;F_gi)Kjs!)ymNj841o~-39UkAD-OMNFsBd^pZ*#51mEl`FI1M;nBb>vD zdpPU4M9LwTJfO)WSz^1x1V3bZ6P+x?<#qp7p7)i&{2Dh z#FsnrtW4g|vcY-KLZF0QDV8u=2@iiab7e%CqF#|4ztH}6y8Cf#@sDHo$)d&2=!$Z} zS02?F95ZN_2$`;@euQW*s(NDd3r6UpSCWVx3K%g}K-o@m?i91+undj$*!#lA^|AR1)$7^0XZ)N^1Ds2`vNU94z$H=tZ8|Q=FCa z6b-Sy2dbPXYcNzgMFscH%I}zq#sR`}0H~1UoHIwsY-_?ipwJOce9MTZeNStpmUv}; zj7t9E=C0sgbMP%&zfRX%gw$v2u3z_S;3a$Uwbj=)aF>UX%xNe52`P-3aSrG6?Mb8NENGVZLo=dR;?o##M57Pr5MVV{?DhPM5a}u->{(i|T_o8)_ zhy$ym;GTBQr_r%st7Vqz2IAe|-G=dq;7tN!i5*$yj@2}iOHneu?6?z2iNS^lY=7&i zv~2_qK5SDg(*_g_h-*0b7d5Kl+rBPq7mfL-*)NL@T5;IeDGx-2d)oV0QJbJo1a0i- z=k|GiFmPSA{GvPs040d<@>BbTn3e~D=}Y50^lalYGp-|?TYE>qv;oeIO~`0u>ce@{ zDO-f2MHPK-g&6I)=$(IjA7bDkbWLuKh<-H2CEVep>BRAhVmdC~8?gAPA+YaiA2vkT z!Hz!RGSAHtW!HuB`Q+E!?0kR`-ClqdI~zbH5Ov_Y?Cndo>UfH3+sE8|a+mUB9%M13 z_7HuLhpGVlT!n5>>Sv>r;Fg(+@VpO0Tz-950zOD)p|S5`3q}IR6x1cQOKdyLeLEYhfw1Xuq|E0d2OpdNY0V_^l4V?w#jzk$+uNV~=z4UGAT_hdcojgpOL4`*840%?#689FR!wX**x0iS;Asz%=5 zAYJ~<$p)jp!6wUEnXqFD;ap)OJngqymMkIn5-Nu^k-IR#i6(myaL;z-ISXE9cOLD> z-m}mu|B-VJIRXj^DE_PJ`ly=!*L^?@W4UFEnp>&Ha76)z@os5+c<#I3N;zyl-`;#i z(x~q<#2YT=DGc?dsq*JLzH(?XVbB{a=ClnRx-0RfQKsTMTP-z=e)6s;8T5`&QSBVoiqrB2erSnX%=#-!mTSHNAA(x#c(~yhH^qZ zdG-B#Y52V-m9k7$gTRJl3}}Uj7^+JY#9r_!8s!?0x)@QIv*~zQK$83X{`As7-w#Ce z$0e44DKK^DzGF;)`}Ki38uUKs=WG-8l<(Lzg~jO>z?b?lnS9TkOZ@ax;VvFjERArZ zvD*5pi>_v;bS~iAU$35;9cJ2He}_<&$b9my8z>)~vYlZGc;xY#_ex*+)Uj;Ip5~-M zfs9}WmfCeNY7=fYDZtX<*$gjAgZ<;?Mxw*l0OeC1b5AY_Y?$ZWz5n>dQgeXww;&s! zLWGv>UkDOoIRIdZ{t9e`^9ne8xU;q?(5OMCCo>-up)J%|x$#RUDce16B@rd?Kl0MqX~OI3N?*zHRzj}=(N=rL-@eXU z@?Gc$4B*blQT7}a5>0V49zdx13H?No*Od0pncwYMnK9n-Cy96-vl{0g#@aP^X>OJ5 zDyw#E{qzBa3ZT=uUv+(t&Rw<4;;VF6)s|))@}7L}|KiN-rD3&`7N~0qYlG5kRhtpJ z_2#u?Q1zd#$?@AS)~#Nl1y1cDCt6q5<3CnSyMo zgAK^R|M+d+kP3iE=52O)0eIPi5c_eN4KjGFWyNEfbP%czB7e64-8=fPy`Pguy;jg_t`sa$saa9c%D?q-NH|b;WJ>rEdfqK>R zHh#ywh@E7-5ceV$EgmuU)Gm`VMGYB9u97aG~CFpQMOLBbb=BKLfg>31zscH&LkbAx|Is$}oi(SyW8qzIDcB??k%S+}`wO!OSH%(y2Qg+D z0xw6vdHa$({qFms?lRlrpcP=ZsHEfQ{%XM15K_Fqnu@uKK<(>dT2J#*=s*K4JZS6e zUSVBJ!H-y-v4V4{HB3QGG!FG8zw zh*%uO$_Ty))SyJ-Ltm{2K>NAl@v>aOi0r5>* z_11hvn+hD;{<*n0$0_Y-sQU;J>S*K(A@%?_$k2J`iUFvh`jzL?i%bXM`(gNJf&lhi z%5b)F;(Zt0KCQwFi8A0Q4#6`1Z;O1=ylmj(bzl;jSc}U{%4#E8$ zm<@2k!;ZQG?>$jS@=B0G9r}@|wqxzOz@`EX$QDQ(bQUlH$Ak$ID+_YvDlh>|!G*Ke z-nyUNnTEeY?!2qLY2DqT;m-{9D z!`#!YK^~)rx26aJe$klg`u@Yq1On4G+K8Wq%o3nGyvKy<1~Ex48dh)bsee$Bf?FxG zp6)_$lTI;`-roB|KpYo;N2-OK=eSgi|>a|Z|_aI7;I}j%vN~7te8__m~AL6enaaO6{$iFB)$=O7Cz?v-b$sj!znl^z6}JQ8m)QJ?3BgsIVghv)4{h(fP}xgNJC2(epT?F*6JgyxD2&gWNpAZ zM$^YZI=oSMo;i|TMv^6Sv^LBX@M#Xpq7QTA?E)J)BKJtKDBHusXA_>K+H-PLF=hLS zfMA;L2VlH-`$0|^^L;fLT0nc3C<<{F!j*4uQnuy=uz0=)+6DZF-mO~qEEb3T@pWgv zBkgkV)8K2IDuHe{W^kdO-RGbGQJb$V-4GZwPrhZ98xKQ{vVSoV2Of1AfWpXaI+P=6 zlA=QcxneOKdEpx5r;HgS`-ro0PC7r?&kzYoE)u08#6we~Dn>3$==07!@;v??ao7nR zVb6W0=l!0+Q(Ka|zky#AB75R%nsMhCl?eKVyR#lcRaNwdOC6~3?zxO5<5eSWi231j z)sdLN&&#kZxS1a5fF-koxWOIaFKYX&RhSw7H9Da(Z-qK2Y%poxzv1l&Qo`wWNX520 zId7ukk3t4WnHk%N%Xg-8(eyvynBJslcTknt_s-#laQe#^;73ufW1V!U+%$oWCDQmM zUTucj5w+5$cG#f<7xryh#t7v&ePc@6y9R!T3$AwLQw3+@mr7u!e@IrdizRAkg4^C0 zKi~<111p*cTJ+s4hILO5&h~c-w!pM_b<=tg0Dw1#l{EA`dZA@!QNsmC_bgy!P5lTf z$&^Q!@Lge1v+*K>;UZGT9^5D`QE0;FPQls9UeE%Wb4(YePVsvd?TT?NP!+FG(o}5^ zYY9dU;@cOO`1jfKTpiR?czf#A74BqUh9Ouhc6? zFPTA1^U#4^BDiOT6JI4_`1-K^FBY)pg-YGEvZmflV#f|O!GY-lN;%k4xj*4zIY3?F zN=byC0C6bI;yc)b$D4_36q;+`=jtp!jK zwqCN`DYEyiVi%8K9Z%3|`G4;u1G<>r`_?vR#9>Gr!m$VO{8)ekSSC8{_8t;aM`@?A>q z+ym-5=Zi_dN=8u|uh|PjL@}0^ZX4My0RDYER2Hp)s`Ea&Gup^X`G;xT zd1#|?K|?inQHOM)d=lr(Jid|hawV^rUQ(vdn;KTSX#eE11i3g*z-Uds+739{&1FS= zQ2O3)9HW$gm|qmfj-^VzfwQVrPw}t<)=sDF{QM}G%}0S3;ZG5;2W+lcY)VR-6zOt zz}BH$pmt3iWr!97x7(ZJ`X*8m$M|T09VvC;q=n<~k{8-`%tXKv>f`5PSUkBljk<#z{)SnS^J!=loAp$k$ICJ>jz}#f_XUH$f~?hCOq5R}yM0)iFeG+*zmXc> zV^TD*^M(CX*2aORf$$dd7d{LwNzmNT5%jojh@wQtD>+rg2JYwB+`qPF^*i@gc64cJ z)x82ldkm09?-=fOHpmO=%&2~duH%j>{g=^qQ5Ivqp)D`;Z!P}9_+ErqXxJmgFt&9~ zOw|14(>mi+=*te~#@~%o92O*fCM_(SzDi&xNr3yt-KQxG3HE!RoH9Op!X(2%-T1+d zsgw5oitK8Z7}{Yw(nxksFngeOu*04##d6_^9I}vhZTj!h z-uZr+oMeAZv&A^ZQqX+&TyMZ3;}j?-6hd;GQUWc>DZ!tgW;8p52)X&ZaD+OsxLgQwxrT@Y#1aX5SUV`G!9{{xk7OWye$=H*%!GT`KDag$Jd~b?cWWBR<#;fIk zZ5ygO&K(#wMgxcnhFZWYTYVQp{!^HOJP{Z6YmMm4<9g*FU|1fYG|Z%SPzS6JYlp|nyi-E z2_~MxFX}5LwRAE8sWNp^uIvC~j%sr(QvRzeE@hqGo~pG7+JDICVsr}~ITS3kN2Yo@ zt|sb{a6r&C7cfN2v!}Hltu6#2>A<@rwF+9vm9wdB=QnRZX4ay?)C(LZR>+J`;rkKX z=s@%+-R$e=Dxh)b=h-~64~n+Ew=GJX2%<%_+^5r_H_6{tt^+J-|3&06MM=xnI9f;P z9{tahZCle7&hf}0oOSVYdT@FmbDQL~YI`EH-z}pgQlN!+@_9Gzy3=%&|l4OK4=}c?X4r!n0 zg0+}t`x*j!I*|<$OiO7 zZ1-aEnGmxt>K+ve)s++(>DMj{ZbM~1JMYCDzl{FKqk(EhQ-pZS*poMIJP*BU<^|~aIF%GUU8^ATY*n1M&x}j*G&DG{* zp5s~~^R5ApY{SNsFWonMi?i57H4ug(BPs76MV`Il&q-db3cbg8G~xFcu%4@+54tbA zQ1$;^Hg>63`p3lm#lonS>d3iBxrz_8*MnT<&i&G|OU(ut{sFhrB>f3f0vQV*(E^#w z?rNrL;w*SY=0>I=!UWNO#{wXPemReJQSs{TiqNu%R~#yr>otM5XHGvXTs zgpo|a7#%)fNjV3{Y}Z@?T1);+`0ZVGDZ5{UP#OKlgnURNwdq%K4xU3DPGczaqm#D2 z;L)JoIf_BRMSPxY~BvE$XiZ&}Ydb=LwpCa;kc|?MqxpE!4Uy7bQJ_!?FVB zKR^Mtt`9_}#09eV1U$aTzbJC9*?0lnNVLa?H7D5r(xR7m;&EjN+DyvZ$Jo}@3h+#S zlL>@Y{P(3@4)5_opU7pPZo-MqMVCsP?ra_%SVFgmOhm|t#;K!OGFl8)@oOZTlr4l| z544o|b2x z^nK?>?Chl)9|`8gcv$T9a~v3D(86%s_%h5q3`qVr9mSDx!9B;y%zhMu7 zEZjH_c0(9N46!j|7L1m6SyQJJP~-Eno|(xKH}-{*+|jcAD-C>ln_BMor%U>?S|g+uoSxsmCdd@qa#I=_F~nl9x5Ck!097o>Dy#6Y@~2b&NO* z+|Vt5P9OPd>JEB<;x<3`M(X05Kg#7!QAZ0;#M;8&J&dW6u8oiqMexpSPkB-vl5BN} zB?_T`k%Krn%e$|JxY;ZnPgVcgt_C0O<+^mZrS9SR+T1yJU%~+bjMB*j5_ieM9*-1@ zm6sa&$Not~xWEDuNtu#dz`j|zDCX}-n~nYr>X_w4Nhfi|ah#NbMLB%w%~!Sz8b$dS z8w-P9Nf09JZ7qOh&R%yXPU)T0iEsH$h=;iH&CnFI3rIZ;#`a%#DEggm}cNF;rd>Q9ivUmK?i@Gx$f>JK*Vx48GFsVw9% zIC=BuZ%V7bIXb_sH@nIiIX9%You<3Dd1^y9%qBaPg?aToA4LnUfyOo1tk#J`oPiJj3}&&3<^ z4wO`f6`u+^SlUEs@Wu6sRX$9u8V}@PDn`#Q`!~p#^Y2{pTSj+EZY~MbSb*X;P#dwG z__;F=rgxbwcQ&~pj^j(F47Ku1?sie`lFd%Dgg3{XWksIuUUZo#9uKjH`c7r!+=8|9 z2U4|{-Zzt4;0TE3cnuk#+tCgM=MY230#LI)uj-H;M#Saf@tgOV{-Ia0*q75%o|Zz% z1tV<=BCnHs&EmAs1Yi~Ot5@R%8lx@*bfN{MJKAw=ZYVwp(?w=C{0N!et}UAU?=mGd zO-P?3lO-ZVHT0sp`s4cmGK3c%p5xA1zQxTUTWXmGp=T%5wy8dEd8|D0R8~zQWtQ^gWC%$YW<7J|ovzb<@MQOo_)u%*H;BDXjpFoEa6 z>8d}6G@;@&3h@MDr}~ECUt$_h8k{(l6X1(>(w}UbIgZSaAA+YO{_Has5zA+J3P!5m znRN0EtH76w|2o<5Qvu%KXzbW@R5r`;)wM@_LV+TL?0>t_=fXu`_R{}v3;UoR1b7Sk z1oi)EVUPd6E$k)XA4(dc04F?$x3Guvl>gWF{{O>&I$%75V*$Vn1!)QG|9?^bU$@cz b7MC!8Cl_)ARYQ6J{HGwJDqSgQ8t{Jr`3y_q literal 0 HcmV?d00001 diff --git a/public/icons/maskable-512.png b/public/icons/maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..21b23eb00a6790061ed3865594242265f62cc70d GIT binary patch literal 30477 zcmeEtWmjCmvi2~zyAzz?9wfNCI|O&v0E4@0aDq!9ID`<~U4px72<|ZG+{wA``4R70 z_XBIQVDIkg>Z*F4s;-VvQ;|hSAwdBE0O;~^QW^jN5c(?+fP?^j+=AwxpbunMIeic4 z6XriZs&oU3000(1UP@dGlzW_Q8j{)2toA*D}P$QWu*qBvezwh7;GyNKUrAuW7HGd2ChbF*>j1?YZ>a(S9AU6^bQ+MAh17a*9hCjwLbDCkZ2lL>0b|g#v*7oi<7h z@bCX0!-2uj=O`5(0Q!;~MiJoO%kD_<0IG1T6iEgE^pj*ViU0fb|J3yVqe*xsuKroF zZ@dsD|8>m#oOR*!#zR%w3N>=eFY4Ms85Cp0=A1JK--XK1?=61c8cy6RwI+{6UtcVw z*Lh0ol^!t^QJI9g&0Egb9S5yr$uJX$ipMNBrOF?SRTmBqFQIJm;17K%pdm*e=jx6Vl? zFgBG{9GpB90t`-$Uls~yAL6+?O=Wa3?f}zM_mDG~@`W!Ghxk=XY@_+3ruju@=4rj7 zsZf9&p{XQtilLZzFJzKuEoT*4N#qj4@l(7All)%nZ+L`II5paPQ%;O9S*$(rv`YZ> z3oiD#G#sEQL#2gy5M#yHgha3e=*o=Qh(Nhm> z+78a;H8>8kAx*=(jM*wA8VUJwCSTuFe5tvg*1YheTK1LS{&0;p_d%QqW7Ys5uUZ|P z6gG1X7cRsuPx=C%+Jc@6Zp`c1sQi13Hj5-~P~P(wKoy4y^$ZV=C;7o>!HY%vYBiC2 zapwFu-qR@F)4yn4`^V|1aha9z0lx7cObQ6*cz_Et(e||X>Vb(@X`nA@L+40tIBguo zXp2-s6dWO+I1?d*aOCxLc-s0OeDKASy@aqN2r!^Qo1DHw)ae#osH(o4X`Axr-by99 zU&%JgZE3P9%Km_2MlL_e^751{(MT0--Gb#{Zh5HKECstXA1_sJo;?nq8CiGZ-ua37 z!Cf&CrKK6v2TEh-P0J&d;=6vJv{zw86~jhVVhF*q{*CamRz%yd{3gf7bB#*eS0`&- z#;GA*$TS#9osS_d7@6)C5zc3hwzQ(Y9zz{lX~;*(i0dP)&n+f*RtO!HX@H&FpLVkf zKEDu!A9x1pI_?p%b<@61K_#?!&+2hd!0h+v!}qjS{B-w4*Qt7zlxoY5#Nd+U=WbIa zrgu^F2}kS+XRMziwi-1_sUDY;6>YdBGCW|E=RoD&&ZYae@3M*KHfSLsY$o#EwyMul zm|P{(p50}0)Nw14#Hu-iCtykf6+?{q4K@Irm*2x_IRQmUm5MTa0uu$0 zaTmUi4@uPxTgWRqokODGYXE=!T5s{r#&_?lrYBuMui7*U}Gp#+Q^ z=~|xmnUK8(-_$oa`B5B3%-se&ZuT~CaQ~p`#4mlf&GFfkSSWLfebs%kO=vnY|4kwe z=IZiWvWBrwc05?;cIWd#7>_;L7N2CTwU|Bp*bxj0jKnWOs5FB8Th2Tfl7z<9zOKRc zl7540nH_;`SW%HdZgsj(Pv!98UE2I4dHfRIyGdTat;Vnx5*ngPJamFWVr)vwL^VM2 zI?)^3$&S?RE`B8$}cZUqVIJb&!szl z#VQy)eunj=ZK(gvknNr}T!;YrF`g3Ug}h-Gn06t7uYzt_v#HP$9X$wF7M^xivl=M` zv*JJn$jInCSj%(X|B{3NfJD1%s7ZPNHAq90r(`Q$>3;3%9Z_C_?jQiGj46c(OA%EK$3M^=HeJ%UV`s3uXuU!SIQKBh^gq! zdh}v#*uS%tD#vbqUZ<=1aVg1&dmT-pPzxLQjdMR-;n+J^CDi{6 z#=lcE9oBh2XRTbWbLktCYoqeJIPanZ47-w|gedPkmb zTJw22#iuuc*Ruu9XOg1@r76F@GdDn@7-D|On$ed+q!3wb8a3$neRu#nhFP9=oO4l> zJW#vwpFg8udjasodPtRlHotPOfkB{Zz;DilX5YB#!XuEX{vYD2@#s&Bx<$> z&DZQIuWya_tP^?J`xTLCCeq_yxeGnEp_AmL%gP>18G~$V&=$T}37bi4j5HLFU8OL6 zQR`f6$(NTd>=5}ec%`%u6{aoNWy`mV=w-`9(i0O(TL-nWNJ<`FX;KSayi1HuwBh1$ z0m%h1?{^ov;W%vLZd){eLo===4d@4#|294S`2b{kjycgKCJ zhRM$pre1Sb<$G{#?ilWDKgK|eLM&k>KA>f67_SPU3>q$6^tLs6J%pFOH1agohvUf@Jv)X_tb`eDksjOp}&ZZ;zx+;2&(0jxPjoaEO+K4IibvMl(t(A7Wg%idF0h^IbJ7O3IVN5`T>i75crh+D+CFIEP(SGo zW|4$YcvZJ~=j0cKNz*Gs1spu68lAE=6d3#=e5pH*^yvp|qDEeAjf=p#Nsw_@t~P)_ zjQWrIG0s40H|~EiWlL*R7;&jn&B}GqRUz7F7I5w9`PI~VX6sL2_r|$$^a5Q-MVeee z9MQcj)(&=>E4NJfq&gbpoWWET@AC6cQ}&-N-$VRO0(GR~nWw{Rm^qV0M6;O~XbPuv z#@!0-hd){ipZCE5wKGy3iD`X;fx+{1ZIw+Ibd`t~I^zvA{!3FPswW^#NybA`9U<#0 zE;>gDVf>zVRu9D~IIY*aOgjB{vTnLd9oq{tg@=HZ+PKHob&zTh9q@fkmE3QTMul_> zyhY15YLwL-GtBU1)EW?hK?A!%L)i62PZnR17=i9gAtYN#% z5c3pF%K@XXcz{w7$v0lN$G@0W?_4{M-S_+k9jXxfMd$uDi&<#szszM^3dZkQ3x<4J z;9p!>zAG4KjN3BYw7GDxJ{`}ue*KeQB`tsFqrfUAU?OgeT4B=iF16*|Udu8Qi#ANY z(NT_bCMj(Kn zdt{wBsxmM%>1HBvPA_u=t?o@7QN=$%BQknnZiY58u5n)nqUU$p=d>=poPr~bM17KvC zOKzK6dJa9#r<5jD$tODp{YIjfVT(5MqL=OiTUj6TFwjf)V3ywtq0p&=fm_S*fSIkg z=JP&%X}cMxCY)vy3~#SHs7388n!NGeO8V>8^jF-RFGPdgj&4jpO?aQ|Hbq{K{54qv$7Vu)*kx+KfprhvBdY>m`C45y%=)FJV`OgKO%e(Dbo zYY?5eSTV!(7T1>xL3^w%9?4}yR(^5MJ=@Q1-$bZ^Qh*G)#l94UBs0=ItcAq!Tii>S z8>B!hS))v`r(7hv&kTT(;^eRQDG3`1kUjf|90hu+<-yA*%_NifE+U32aP0s`pl#Gf zJ<&(H(L+Utt)DaH#LM|h`qyU*cA--GFTI|MO52c%z}#S!+<52HB9vONhxwOqF$2mL z6p^kn?;)Ghl9rMCeoec$_jRJsG@_+wJLtc)0KiBn4d0ZW%!Xc^_xA&SMOII~r$MAg zUDCj-=!iczy&8;rvZpw=UA{Rrb9@`55h z;glNddFKxz3CbE}b)6j=d&JXttb+Oz?AEi;1J1ti4@`IfOYs?nBFp$3$)H4o9i3kp zd=Ke2U8qjrZxMBcAI`D+T@W|o!Q$y!e+DwwdO)dl!gf-02`FgHapN4(6f0)*aK_)B zFO_~$Rv?8$tV<_j$fP_RIcOK;#Da~Vqe-VG+5od7Q1gN3eM8pi8GiJYC5!gTykI8{ zY$}Z0LO)X%d5ffGYj~ZUj^5F=7no3W3A!oBsxkLA6BDkR>q}D*~ z=d6+1=F@kApNf=2*p;|~l>nRUrj}uq!omQ0B_z8K(2Wb-W{fC~X%IA6PrNTL4mQJW zzhK9+6D(k9(yzlYwB_427Yq)>7iUb0?8b-?^I>tJ?olN)?vr1TCud z%iLHXv94el8e2mc`0LT|YgRSrMMU@w0UNkCw%gq>Dh($Ems{*R{Yf9KNzD$%XGweCW;^u86HW3CRu*3R`D!-{XI3dhT}LGJO_r&nYj3B>-}gM<|4BxttPB z@{qcczGwOvNb)9w3q0VJpg7TvS6%gN>BHEm@vT@p&tx&Bs!+7i57YVP7P5(a(VVm$ zWsOyoaf?lr00R%GXuT3u@!s>WPjB}jtkK8XD|j;780&|PzM^ZKiAc84?KG-Awn^-E ziwOP{QSA?<@|(8gee#v0E}DuBBvdjrESj|e>J_9^EEhHmxm7wviheE2&XsrwI2sV> zMt>!N;C{vwDc5Pc_{KMGkg8Sre4r~Yxbo;lLoPA;+cR@lG}4Z=;3z~HMThYPNm9>Z z=#rpm{u{hOjk_ki!#i}jC~@hUQ%LYO7wqHXI}+rJ0cXDhGWi5zBiv4Wjl1<#I2=Mq-=?|8epyf4cI+hcD_N*X%6O1s z-SV@`DJ=c9S(VxD@x&wzumeDqtsD;-Z9^~xLN$FEuL)RHwrgL<*lF~FU2J_k zJGg5{d*I_+unWoIh}6wOy!2|qtJ4TjLscWClqJCCutS^F89xXU!xlRxhf?;|tDuVW z!SZ>9fnOcCb&EqL&Tn~R{gTmFjP0AsSBi*_)0cI^u-D3#zp5 z>qq)Cg3I)zlT)N~4qUM7LdK{80g^KT^7Qydd}!Rn`(H>YZO}@drS(feo#0iF(IiFv zkiK`!z4SaMp@8zFjuK7>`?p)5xB0a2;P`0Vf2=@=}gs^erO9Wk{5s@bG{YXRSf7 zsDAVAxZXj$yJN~%zc-xgZu~t^rheRWmBgFl#abUvE^g zsW4828iPGxJ4*QpqMJ8YNY9OtHyTwOGznelx-8>FN*nUgi=jUzP@;AF{r+Y2xBhig z*DSbWWBdB`y4|vvLh|iXmx%h{y0?zVE=}~tmK?v(lr??Dd?M}GZvQ>@dJ@iNT}HcB zFxt%w4-QNN=ieKDLtC94t0!?s1!_>fEH)GoQ2;-Tv0f|G2$1d!Er9{B_sp4 z+D{E$M$o9IH|Mv$3{&G0W>x_%1~kY@S2rFOmpT2(NgHNlrWJHf_A}iHgIVqvlgwW{EiX9q5~kquOA4P#{hWV~^+ONp&}YYYK~cu%k+1RDBqTu& z>eD3s9H1!uI1>YB!yNRG>r1P4oT)p3Jbv8C%cpt)KYuE{ zcZK;@B>{n0q2h8403sWxry=)7C<<>XOZv@x(dD*k&;FKhJZm*D1D8k;`m1G92f%C(|i4xT=q903^$;2OMq z&6VeI>VA6OY))PKTbYyRjjQeM4u6lG&&v0$u|;aAkOt|ht(5dj3S)fIE8lhJh{1zP z7e&13>_9wl0t6X-b{Zh+m=OuD%gVEV4;%}fFpZ(uy}82R*A|7Vhc1W%x*!4{2vXhB zxNFCGFG%Cl9>j(_WN9_3zRUdOqk!lACS=@`LI>W7VQ5CDnEQYs_$5a(h0ULJrNcWxEb-y`AclA z_GI_&qvA3|odnX_88}oZ$g(}5*AYbA-*Ff8DG^ANYuD!H!++YbW}xEiC}k;@q)P|v zviIt{ai9gxP6l%?;H;nHU(JC4AyYu*9~@Adc8W}Ie*qNmj28)?y@yzBG@ly03SmCv z$aj!q?x>Se-Tr-?vKvt%+rzg<){#3GUH$sd?Sp3;RgYgjw9&%hlcpZ*6dmkF4=!|Z_V5T{Bz?iM8)6Qz$SMt}r$RcT8WdrMsZ>C<5Pr<$yFdp(~(zLg$k zLgP+yOpBVLt1a@2ZhFVws=;S(KO%C7jUiqSEr0*#y|o>V$kfw1CvH>bBY+*UKMncN zH)|WA6^B8~A!^DR#J^Xt{!9jua|`_{cvu<^P~M~CK8Brm=XZsZoo);Z`^8s}=6x?| zJ;6h^{Jo@0`2$3u32wYELmvdu6g@&qe3>|MBb>CrGtIfs%ob{8jJZPSB-r8-G)pJ6 z?s}kBZhp7#y~AS-B$N+8(1a-+g6izI+}fbdV-5Jbe&k3h9iu)C>Fm!F77*& zP>^8q$xm9xUgq+SARfLinY5tvqoHp*90+?U?e8s_H(>Ikg6L8~C4oelS$Q*z@Rh`M zonF!*i`#j6p*(N=Zv;vGhyDN!=)uy6#izHlzK^3^x9~+b3S19wMQXu)ey0NKmNK?4 zhYhAOec%8yRE5U-w{mRQ_oC0o-$@U@-m$&wNB3OAfe|@ZdVlHlip18JsL`AG=qp{( zZg&;nFJKUv={rke>%i#{hlL0=Fr~i`xhZo6uYqnK&I);xf zfPYG8Obbv!40RFik{|0Xy?zroX&p|@slUsYAj6}SZ|uA+>r8(6&2!Jq2zBypGq?o5 z#-F!3qU(dXOPu{zYdzw^iQt#-{q+858rnZKFatYO*nf8jtJNNqG7Fvd^YjwEktg(9 zFa^&8Pyk#`TBdHl^h2$B4N=CdqlnU{AKd(eA|EO}FKfs?kym@=GuI}t+YU0`T)y$O zpUa14uCW=Cp_##!0Foe2y1Z=p7JS<=^3nY-rzKV?C=6f`5ggWDJ6{~~cAy+O6gV}D zAYrfMWJ&qM6JMtKz~f{gMYMf_x4ug65kzi&-(0_0<+>~hbwco(52;wTJ=OU{CK-B8 zr%{+VLCwZV6hl;A*C@^^GCBo0AMh!SVAy|^fCJ~Je9&p3#k%Ml-qlwu3i&6~{dYSk zNnG&|X80}Oh3?5!5{Rsbg5#pwh<)#tVJmZN0uqm=Vt{(7@p-S^s-|kf($BxPJu%7ot%;LzyiOlWb9@Gl1X(Ql1UlCG#7#@eAuFlQzz=@$NQBx{C?3i?W;a_CW0JxH4B{L||6RaX{ff7vCr z?J7|4i=E#m%@RDJl1uRmbs-w(-pcqB7)#zL4F4CK3c~UuP6D`;i9*20BhiWtd>;Rz zmzBt+tVR*5!p^HNEO|8j^0?5HL;3)6KGCn80lf~$s^g{NoH%_ksR?S-RoyI{P=QlO zBb$2yjepNpu*>SZ4UQU?Iz_TUP~uh$;i|JCDSAC+vLz5+Y|_QxBFQhL2X>dgu}}1) zS1+ckl~6E+>2!qL$|n&~OXI#EsSR6XNhzMoH_hq>2Dp%Cql;dCW*F<|HhHF=hlcmW zLws7y#wSpl=iyNA@!K_iVIuO>q~xZU7k5X57sGJNH^$ppuE%`-JE`Q6Vdr_?WTXw>t0cVM0PIKwt#6=ZJqU;rx?(_(NFDF1Lzzr||oN z5qGPXzNft$o^5j>dU+PPzhnkHJWK>nHX$CM^-c%a@$p!O%-Y{oJ5V#g(8ayPs&&Tk zjR?NuTiPcAN)$lLVrRuxq4 z=7{^>T0q@PZOLcCuHq;+_7Z@H3j8{G!fwzl!1#<^lCyDf)t!DMwtnF(7|aEo!$$%p znR}M(B4>|$z%0W8#F~aDAuXM|=M+llG3%nU3Hh{34u`t`>S8?-3UFcc+^c~C{$tZk z(@@Y63>mhkDPs3Fnm2C+pk-moCX3BqkgN}>1Yk+72H1DqzZmsJ_Cj6bx_=7+eh{hU zHFFxMgj9Dx$`Q^$MMs8EcYS&ozwj?Q@6)`)I=99%b*?K|B*Nw-bL@-Ii_oyntQ8`& z^;wRc+jGvHVgO_#;sHMPosnQlbf{;HSpIz#Od5_5mUYd}m=>*iYrJ`D--&t)^@ZdZ zEm8J-QrrOHmH^h$QId}`m)5+n3eh1(4#gI(HDWqXCXjJ`qFXf#06oH z#BzqyRyWx&k^d@1Z~{)x!^cZ{*bB&!8DgSd@EF7?FY4vI-;*$Z2Yrv7PNgVk4;3j- z&tHJ3$D;%TlzoQ6APbWb$qLe6A2a~`*nqBogyu`$uFX)M99Q*=Dk`Lw>28l8p1&?i z7;-br5Ya5Np;m<1jNqaM-~YE`AM6aj-&=c&<@?4Lhc$CDmvYb={eE4Wb{*Y}(f3IrErLR-e zcg?Vq0DXNQv$rvqxL~v?)?7&Nbl}GEu-Ff>a7cIPp1c(EszvY2ir$Y&1fQkJ`R#B= z(4MG{#nUXao+ovxXbp>a7^EYk&4c2S(!gEFGPRAjtt9d zPi!rOzfn$^x3uvu=BNC-0+JlLcQlI)ov? zBa9}S2M_SuSu4KRt?ZqVnWDAee%?df2ew&BA}0K!SDOPfKk`ii&wheqDCDz9?D&EF z8c5k6WR9FBv0L-6i90xm`VMFEjqnP&nyv=b1w|}mcijA7v+3{v%1S=TaY>m&@8mw~ zgat8e27L&*ctyOb)lb}=AciR+N%v02N|vq02Ks%Wvy z)5s7Uzr(@5`FZ=r6-zo1@qJ@B)cmLp76Lz6?*zGN!PZ(gidww>2_0gT5t?qHU|Qy^Pil8&{r` zkZ1WqBc)tgpZ+)Um$85HMgMKkz}~u-y~NmvOnLUFPBrg&)gtw}`gCRbVJ8riYAqC4 zh%DdvQ}Q!kTfc<$$Ab_4J`JM4yba$*{|lRFYBJ(`bM}q=v%pA_6q20IP%pAXm6wiz zLulQk+ka>VP0f76X1TUivNqCx{tK(-~G(?~siDuuE%=RZ0%;{w;lH zk~wHd9E~!&4js@A9Aq^e`dXsHhe+Aj3K`m7dt=ZVZ7JsA3c7&&ttV8SdxyUFIu#E* zCH}k}@pnL#7(R=e1ZC?^<|^eoeIrs{>2rSNr-mr!LE#yO2i{~S37BcimaD>{?T9jT zR-Ct~LNGh4;gjx%5T3WJ8-pVwOHEbv`?r~TS`?6C1!A`;p6TS0Nio1X%WeHj{2sBH z&3lJ}jb|n_*U$5j?Pnt$iPB#wP=c*lm~Mo~vVZnkFFu>F89sIK9oqx=@A*hCAmDmT zRXeeZAZxtsEvP1)+FhmRryhpLOhj=9!Ok49HpSeHC+0X|L8_~+NlJ~vUmy7UvE}avwf7`L6C%k@`UukoDye4-1r`j3!%f2)h2ti z3r6K)MIHF5n>$6CVAXl}>P6O;_JI$86#=N*NImTY<=cr5K3yx(bT zV!*wC?3*I%M4d74et!`4kPQ~f+*2Y9#PVQ&HKcI}Q^#I9aqC!i`CUrH!MZHW@7!yW zjX=2;3>8z&U?;g0ovGwF$Xm(5Eu9ZRYUmqb7Gx{%AD@BQ#PgyqXuN?Ur^c%ccer@=^VBiKhl=mu7nJJ`K4X3zepZdC z_MAE!Gli4ZG&zYsA;wORKp1?-Hf-oOz1ibVInr7Sxqz(u-OFAOfsw`u3EG=EwyO5R35>K9~ zp-l0xf{k%Ir{sP?hg#8UeN83Mo3eCQ`u0Jl7{?idp7?DldczTbYis!nt!t8_Ysi^y zQ|C`E!ZeAuDUL&`d^L&zw;XI*31EtswU&pwDvi>P4J_~Uj&VJ9sI^8unLBp7#0QOWfW*%GYZY6nx z%UkU4tt3^|qJlR6ypWY-ad2*aU)srg-zVON?xdruWNDF-|J=f>XAybj(}}$IUZ(2a zjaHyO4&_SqQ(uA?9t~3w7AUt!jPFDqEmPs|W!Qv>M+!nqR)N_McqkYi{K1A>=3{G_ zHhVvOBlN;U+}~C@Kv1kt^44MwUaJ|3`P<8^O_5)WV%s35&baP4d};lPM9xFkp;{+d zzHn(6-EmbAWX>u>yK2UgaROxPQ8=wzRj(&VMQI_GHZ*^}vOu#?qPr~I;ij&CJo%0% zQ-b5Hjmy98ko`cOw_qU5ga; zbQwpBjx{#7DNhC_GbxxKDdw2r;Gf1ZnojIpc8Hg_XcnOorZ-D!j7y$3-GSIqHlK~+ z8~!f9cxh9;*(g7;%_DG#M_~g`D zjK1v(hHb-6obnZNLvuv81vDzkI=lQYQ=2uuv#k1K5+j)6+fE1V1n3$=sf0( z-Py@#(og*smVMYSGYNCIitUqtD7-?;yG7*@p*TCA{Ll1ngJf+e>Gb0LjQ znu?QQ#euIjtze-#*CSXi{~L<&DLF%PN>r&F0be1IMkaIq#KLUuTr)7V?F`y6GvJ^_ zaj)w%nUdr(cq#hlPWlYJUT9zV%bT~a5qu2R=u(r?k>kk-cSMh|Z7<<1Q*I=(fB)^C zjS5oMItt7Z29Y!yifi?xGt>5*0zIVFgenm7IXn-C-=&oToN}6Y&?Pgxh95{wb)P-bl$=R9r-RhLDV+cegeX*hQN5YQvcS=5 zLIWsAMcdW}obzRD_1E9KS?+tSGz`s<16E7^xl2*Zcc7-@!QRS^gO}k-G>Ccj+ie?O zob6On!d8)7#7THl=g-tJllZQuh$PuHjCXu|HHOp5f${ zr;x*B9}XNaDKcfb29*q^ zeHGAkQIs~p*Fn!3PQJKGy}0Io2buctG9}&4d@cw#J6_9Suly0cJ~~qL_gQ%)HPRSlW5na42z%W z3{>mfUw1~-l^95mv|sR{5zAG&MgCN(XR|GN)KZlZF6|kPY5^({zxyYKp!!B6{EW_V zL0SmKptGt^W2!=~hBlG`TKE3br@>3fKlkO(rn;LK^Z7yWMd!mN_|!%;t{=1DoIo`} zifQ%N`%P;C*jQKo-DsNiy{D79;T4;LgikJ=3jw09d2!-QaHUle`VsxpAz@mAffX`t z4a7alw#HQ3ys|Rb=a&i~9U1C%gE0E+p0nGLPg+Ti@1T)x8Nk38T-lzWBEZDQF<^ZTWMHyzF4^;TC|ypPwbDa*k5;kzg46gi!MM z^}M$c;&-X%l0I>qhl~AHfX}h2*2r%6WGrbVKL`=~5u<^)Qi>w)0dBGT0P6l~MCW5c8mMU}=`cuKi78uw!S_{H;fP|GrPp#c&ajhl4Va3OBgUyK(Z4cKKaNz}Bs zB0SiT@R7{Aaj2PPU$;lL{F>8J@f3~{10@(iMr2-br${p0#rH=*Kp!f;{)I+sYJ#LMot0h543cy z6P&}QdqWAHR6sbFNGyJABYs2gZ4$vymt~ljQDm5idJSk-t^{SmaVe0plkG;htivVW z6!v9C=?88wKLdco$GN3xdFDxttuFI7rR!r*FI$pwQJvVpV_daXh3T$~gt}?P0qlPil%jZ$YEL|Ei z60Ew!`Mf8$5mO*QHJv2LxiT#wR@)z)&_K@Vr7?@lu|;5ljZdzlkJ-%Ed-&B77G4aN z2Eq5+UEYrZmv64eRM4Jlh3xQmC*zkFAwc5_KQ~}o{ebV}C8mOL>m*u`r(d~Y>Ns0F z8X}o%Pbd+@e&72WwU`DbeXeVt*4K*saI+??%bGsMzeDP6xVkIY{&V+xwFm^j_q^ct z*!s8}Bt4ZGCwBMI{hLlM`?o%0ERUpA+ zFS!b|x&1sJNcSQlTnl_bm$nf{o#sepjYpqGHZ^}4Pqj7lDi}=fI7nssH@o)Y)NNU# z${eq*d6jW)bz4Ii(VM_MxH;`%%cdZ}uqo)Nb5Mvv90j(n^$*Fq z*P4@OI?8t$ZDg3%MXv50wA*c>jTnkGGblb^dJ|$#qtn2VtFOec>LS^WpXDXouDox8 z5(II1)CgL5wMk5CkBKIRq$nq?{%%|pe&xHC+DD8u!#unB1xCO?UM8M)I_ z+ABz5Lr?KYsRb~iRWE7vWP}Ije(N97dM?79f=p(K~6aMpyq&i0q0b|*dq zW5LwJjxqK-uA<79G=jYex$25LH%rMXr*<1z_`b@1=0%kw7`h~7X@*fz7Y0Qf_fB4N zZkm!qGCClQlLF(f`l|U}zHBajYiqfH@56XKjuF8>1G?}PFR3>YE>@`wtr6=Nkwczh zkkUlw=76SejIHih*3FK(S|swd_sl6Z(9FMQ1icv1PQ;~)Jk;H|_kGNb#kGFcK&iQ%Gp{~>QZ&8#=K%KGNl=P(X zAfGDXlQYDy0dcL&l+09=7kO4Xdq#S(nctlaBgOsKFw9G03k!{&x6M&th(}oum&^Km zrhsxKD8f1xk_#-@DJI8<7?OW->n_sQ^xorlx?4;;!#Ss^i<{|0iiS#u6A3R4$1ULG zmig6_P{k@kEo-0!g&ow3x?XTc+ov(>ApqVEGm4V%olH<*f*Uwwr|xwJg9@N0Ulq=T z=+Kp$rQ!m~C3Lk~>Ln;&b1{2N)43OKa^NX#YYa((BMXr50O+y)!P28PW(*pylsiN7 zih4@3XU^C-pY<`>B`8#M13pQ+2j25eWjzJ z(-e+G=_BN&t@-^45^Cj)uet`W4B`Q%+mJ}qG2`UE}K#gkbW4lS9gNLc2K9}NW${(Xc;s5=~r{r2(*v8%={&$$Wbn*|@PQkyK z;AZW7AGU(JpSgKB?%u;`gy;m+{$>F1a=$3-k>k0==;!kG82GcLN^gA@JBI(yFxdf> zD(9#nDPs=XIA|@x=j=a>a?pWa9l5BINoM{L^{}uoPf=8{$*ZpCa|Z#KWRgJSFU<^? z55+Byl$77FM>O)_Me3^I#R4XtXzu{fjZO`K6I=LwlaiBYnzzU+|pP%mKew<-8j(G|N?%Y+Uqtounwz=I0`wns1T-;Iq$>`;{Ul}SnxjHA?4_Gh-cXU+lj;^O2cy6harvEHpktCiA zL5vBC7YyzeM5!~K`Wr-mpW4)bgq}YVJ>GnG9%m&`Ex1R7vWxRUFTD`OubnRfjY()=)w8DrV>7h|(Scc<`8y(`CzMb=nVv7qFOdpG%v{j|p z&tAG~OzpAq4)?rE{9h!4!wz<=XPeinV+__uhB?@yk^=uUN^-Hl`Y+wNBauNW1)g?Z z1h6}I-YrVk!OM9-aLzM56s8*Tw`dk3yK%{RD+eMTzhy!$vZ~kAAQ`T}9_!}oPt<^G zeM%|lPK6@%_$NrVX|xRcYBI}_(&5zeP*LJ{&@P+ zcnCXq=-EGY6}qJ0(#;+@Iv@vRrql|vL^t$EfyV6>K0&?-OKr?sc!Q$p?_vTB%6rBiXJ;;fT;m0K)iTJNZ>Si|Q1REQKAdL`sWQYI`fn^N-yx{==qY zgKxbz+{an@&wkFWKg|AB6IRd1FPcWjlpNb$^FrFN)!f-{!ho)Vq4 z!3h(enhzj}VnKsKv64CK(-%{E{I>N?e`hRrcB~Sb&8vQVm}xY=Xf33c-!bW}=QeAy zhEm(mi$?$Q9_ES=UmT#hZ9m87PY;QL=luT?4HY;!@%*2A3krp!JgRZngJ24e2~MJS z?`qnogPL|I+=||)3>^_J>6Jc2?5Ng7AYF^eW1A98NmBhl$VvXt(L?_anG5-0o#L5Y zS67Hn9#v823_e1Ihzxpf)$M73^shhIVrlo&uLb0g60Im)AP%-%!nipNf-c&{Py(ru zY|pn$wa9VIGC@;$-R{+5AXyU;sHG}`oS z)n3>kzF5EtBq9om;TZb-=*B6LHGG7!^v8vx&@=Hs5!NTAq{lBw{sXTVMaJ>n74r_! zI|XV4x@K^M*@5e^S7lr;+;zX*Pg+j|x8@aB#MPXGGx#y$0a!(?7x&6aUz0ZeS`kjB z?wvZ`TxDbt09T2V*EmC(m!ldAocgOgDKKOaS8KemVdSY;{uGyfpk+tc(JXkvtA!>P z{`ZXqp8cVfo!+g1M;t{po%FMRRhY;J{+7=nd|MQQ8@dRB_&q%D6G88j94usV{l)+> zFvU4=>`J`ynN1iq7rI-0CE?u|`EM;?^ir3mK=v#>itTsznyeWtj`!Kz1M(=}W6K&J zC#ja#xZVI|3+ZG>I|@nEd>syzDZVS}kXsz_u*Xay_h$;|Wle))F{D!CHqd_1%N~W> z{ukNZ2zGy}&Bsaa-Dye803`uRp35W8w1OG}q>7o$Ao@ti%gxlVwyx1Z*V63lF509y z!Am;2XzmU>W8BFZLznY&!_ef1mlc=6YI?5*E2<25cQScm1*$?rNQeK>=;FU}9=VpA zHJ?2_Kxt)fgp@lX7?j1A%_;QXYSp_CMf5b%Q36S%Qg~ktG6oY9zq6+EhQoZn-O^MQ zcL`HySw==xb&6NGqqkRlX%3RJ^)htuWChOH_qjejaaL!VXG~$^%EbNwh$h|@hx+l6ATDsE)sX2cTEF!~EksR|O1a|i_1X>Kc zes}Wb0U}mxdHOW6n}qSr zPr@)8E_;w+}HIsb_JA|#*Cl1y;% zn*||P|Ajtj5dE&bv67{57A*XJ9Z*nU2B$uF*}k-{d@)XFcXe>iE48f+Cx$SbcJdlb zcvv|UMOW(2tRr_#Dzg$q6`S;q!68_qpp^az{L2yyv88v7A^u#q zRmydlyYt}g0nX^ttt$;HrSi6k9QIxet+TGl z&w0r&m0!Erf`PG@$u1AhfGMu*ygqeu4}u)Yscr=(wUgWm{R{w$ow3JYzVF>=iBWymL%qRuV()O@niPnR)1CZF#qYtAY-iITJiyaIJWCOi z8IY(Zj($t08x~8v)FWeN!KWHIC=pb~0izQ7Dc`%&X)A>6-mUB+3BQk}?dv=2CDx6> za30fb(fC3!;RU=HBtnwhXKW`xg<9baM{UVm;V->u3YK!=rD0EVOJy zrV7;ieHkR)=`88xGbz?*<|Xo3eom4fGy{WPeia!;r?!aXLgm&ko^A!Z)s^?k_qKI= zYfm^@zt4{r&}Zh?Q7L^R1(C11y(Db}Oc0+cSkY(^nER1+QnO_7XXu2QQ}2z-yreN+|YNpgYSq`Qg?L z*}DZnIcm30+grH^n+`!lh>cq|xg zw<80jBCBjU5i-Y?tjwX`Swa6o|HudDziV(5Q+TdrI)wV&{h07bJ9yI~gXmdx^-_fH z<3qTy0X*k3if*WYY%Da{@U*D==aM+~3?@{{h_elWaKLn|;ic2qZt7%h8h7(wec`11 zu*FGKqm77KscETJvwv3HbonDE_jx71f}R`35o}r!GWUw!*C`{&5JDY|4&;w@qkp@s z9i82T8h3ZOUV>)YD-Nkn(LD9l>DLcq3^Z(hX`-xGNYcGS&~`9t`loFdoz0I5BReyp zHU^2s`U>ZG=2LvqFjpg}hyoRUI0h79wgxCln)uj!lC&Z^t;IGd#qkx(DZES34PN?V z!uNRcb_2;VJ6>(1lET)cGv3{Po)fEuM{jtPd|T;W`Y}Q9L!*Kv?Jxxur0BU>8~>AI zc`?pDRRd|b7?~qW+q8j%ADI0B3|1cKI)6zn>07QPJovsj=0TBP5kQ)R_d1%NQt|rv zKwvSztd5vgE@p7DF26NLrjqGh|Gw$o59A(I>tu$f{qQQv6dffLwZd3N*kNdY9Vf*v zqjj=3M4lULQMh$QLVs#_%8=x^VWs|L=j+RyC0SNy()Fy!L(&zR=mdTtlp>Dc+n25!(G*ltqy5;?AQvCRP{1FB);@ zwT;M3=ttPt!G4y+;9+3^KG!G!XI?|)=!aqd%xRRDzfLA`QJ|E zlY1zh8Go@lAjP@sh&qjM-B#&`&vNz{`+=b{j|*2KOn(zoU&*e1><{~V($9L>DtqI7 z_4rL&m2lics!E(!gBo&eXNwc?g6R@=|BkZa6>>HM*j~`yf8viB6uA)T80y`)wu%Me zZd=Z4Z3Tpp7A6dlhchm}m%j+a!o2E(V^H*2$5Ws|kh~O=8~icrqp(^I^j}CwfON;s*?hkxV^- ze?E2fC;{Vd4yhs#F9#5N?#TDazXnt%v$=Dzx~D9iaZWWt+mQ50{|e$Ie+6#NN-Yvt z{5F_3BdlIr=s7Ge?JaIM7#D~P;>6J_p(5VH86PEy6L?Rxo$V$43K`M`^U&|L_~Q;% zoXbFELy(6fZ%N(O-E;f&zgtwVfzP6peHW+f_?RbL{{?Xm7v8Q6Yi0=RcfpIf=O&7l=$KdrCToXTaR$;Ic^lFbmS%+@Lf4yjGEb;!yHfYba@A7 zo1t6VP7C0}8{6mi4AvQwM_cESp)V=>y|2P%7{;F_ZzAUuIrbh)AI)kesu3}^i}cDt z2gv907^fQw^-Ci{8-7#a8{?!F+I!2HI6Qa4IEi7QVw(ON_=7b`&ktr_)8(`e|7YTMsd_NO=y-cuO2=$mvM0mdC=p!F`NaluBUA0g)Yz&3) zz3(!hYbr|L_Wfvs+kKEMpMl$}XCjD$^d(6=xUxi2KpNI5U5lNd&CiYAR8+pkd?-6j zKcE=!vH}e%MK{DJkf1QIsh9{V*+lTEhC??JnBYQ(oMQrl6^%TYm#a{mSP@FEz)YEw zoxgQh!yg`%ZSjx{blWL2x&)X4XGfw35!xY^k(=RqB;S{t1keJ2$K!T@k)~l(3({~$ zzx!woZht)>v$Z4`XVq!^UvC%QPy)Ji+piwOT~619Ux3jW-Z)`FYIeXUWQ5Bn?(ht$ zc>Y^irx+)mB+C1*^-D}=lc=0rMrXrW3nEdZ^#~g9wOG#j@NL<6S|MR19EZTn=0SQ{k}vukmRqT4+?Ci-X6(#;%sX1o!kV!ld+8fbd`4tn*?Sq163D%IWml{c;Vk}$mCj6+1pO+OWr39S z5T$~ial41hO`1Ph@gbvm zNMiDQ1Eo-y3`?=E|8lm9s=5CuKPLSAJ;7$-@V3B{K^l86S|5KBvK1HyjFxg2SzXrE zOK*EF6TT$aLT1MzbvSOn@9GtL5nk&4xK1BA-6vx$f$Yz~`ZO<~l~5Nka342S%fgRG zN`LOPYyL8hS~c8Rp)%Ar?QlH9k%A4QIT4f;xvlhnYXM0AB`8*d@>!nC#50Y5M?LfX zeB?dbz+IPHN78*xV8vv4Lcb!7G=+RS$Em+iSVyXW223JI(;p%_VZb@Q4@T4L!E+mif;SnD8%zo`<`fFV4(>o_w4 zzF%w{>A8FAz-tdDq2Uu@5)zG7JB||!(&g+hn?TQeIZ9eDuo9iDv7%;M3^}iOJ!eC_ zP!Thy*l~ZqFVI@^bGHxMQOT!@x4J=FuO2!Ns`x6@**5a`s!HY#5W84vX5}w3Ji8Dc z0R*2YZ)gfV$rySss#w-*mED!kg$rP@se3U;Ae9Xlvy;1wpr!;?N5V3 z5@~vp%VR@=PvWDU^gYI>FVOZqEC}TiixJ%Z&pizG9#bJNaIKjspDrph+>A8$4hzU4 zfxSX5Q>G%m`|qV8H{6YcNZcEHrx zkeIq`i`E|rLSiev4P$cA;*FGmzg!tf&un7AYSm|Rb28Zb z8Dc1m4j^cI`Cy2bbr5|?Iv*=Guwv?0Q)Li-m)i_wclI1k!& z)GK2hqv%$4UNq}&MokA}a+1q-M*?xd!zbQ5#RNSrsQTh_&F|k+xKiJoT%Kg&Q&>mj zLQH8#Xys;~p7vRd47t$(W*lg=MuAMCVOciowu>)QW0~@3Zej1V`=>4o*GycXYz)ML zIQ4aU!}?x?2WThcFL7W$pE{ZmD9c7%9@hn*o3y6GE5klD$Msuk46(~n$4__+@c$Y$ z0Sp3U1sB z{1>#8S;U*>Fg{dV$nqH*|ul)N#wR`z)92W(05s8Ye ze~2Phx)@u_z!sgAwyi{#?23zR5yMq<V#> zmVEo0bR<~T+Fu{DUQKeZ6*prUS46{G{h5b9PCd~p|Iz2hqcq`+R-Kf-6KgQu9axIZ zL`Q)f%)Nx=3WOm{Px`Uic=ekajj`E>1UA9d!$G!0ts?{L1SuB2)RpQxTo!}~1y@-X z>3>LDTqA5G4(SG>XG7jUGI#3TZ4))pp^?gtKmT2h??u~EP=HA0k`5j=0M&I&e5qEE zO{8E;$rwSpA89T!YIOdK<|og=Xh3PF=z0Nsckg<17GmbqC}|H=pdX1}H5i*#e2{#X zF_28*+&$^0j*y239q@_Id=3XzvED>wW$x-@HtXy ztUJ`|{IMFZ>p}*z&ve@p`{u2RDe6C`8r*(g*I(*LY-x}%{4$U38mP1#C`!yv3)-Vh zw=1#5Yxzd*`pXIKxi@Q(kxN)Uj;O;u*JTOpKON~Q4(r6WB>KP{6h`+hf# zm!>X64KFu6{Ww4r-pTI6&|5DEeX$u`<=$)Z=;0g^Y5$5JFthNZ7uo!_UZw=kYI}Ju z|K(I2{e?2h{^)APC9CuNnpOg{XqeO@jz%L(?tQAm<6XxG2s7U{)a8?SZ`L(KloZ9& z#JoV`JsUL#>9AVF{0*mQbU_rrPd)L6OZu~gb8lN8)!?u>5!t{E5uejTLkNsdN7S?s z$G2c5F1#+AuI1abQOPFxh$g5lU}_g-yjiiHp8nkI-(mj1RT6CqZ-hkfT6|13M7S!*e$iF~&L){Z(Fma$vt1+z=CXnh6jr)PDjeyoe zrk|C!=4#96P9=SRj5VC+-r1WqpNfF#PKpuN59cq1;zGp#@-m+fgWGipRIx*v+{< z9YVZ?KoXkB(H5~?WqM|YUxM^P*>P|I!is2A16pYGco^6N&%&sNlbY}*D#Rw zfDFY72|J%#Q~80e6UjciS#1nKMPj)DmW%QsOI`dq;#HvbY-voO64$* z(veyLlE@=%dAk$dr_|YI`Z%AD@NfYOqklBqb^Mj=b2JbQ;P~z5Cs|rgPIznSJS;b8 z?eQ%zaZW}9S@r}7TPc|1Z^g$$)x36YwjFhfoa^#4!2A}LooY41>LvqOQ{bx{HWV_c z0Akep9L^n{X1Zz|9FIxRyH=uSM}GgwyHpK3WxB)(sAA#{ZZkG9XHIh-8zaN8$TjSh z1;$qk`MV&0=uU{H)0tl+BqERDjR;8OC+7=g9LhKc4y3)rzSy4iaHxts;(XJIEly=8qDBi8q zPd##XZL`nLktW@I6WG2{Q{ReG6Cuh@-HfuMb*!!KbPr}Ij%rA4Pu};w(dkp}mowgq zCI(eJM%!L^a%!*vbpMBR-!jT9toqVk{?( zDQ0On=>BufnXoRl9o|q#P3+zf9;BNxkh~$FA>*2=svv9slD9r!o#`RFozE{=@awiE zW?@Dc5P~mJRQ;OpS$sViLF($Io$GQRk>HA-VC9T=1>JP+%l(0}w#%u|%e3H};8QN; zTTrnrbEtmjbeE$Q_#Ur)YyO7zcejeXY{Lt;(3RcQhqugyV!KkjVT=$x5IR8IG8Yz- z%jZ*(_??EKjZqg z$AD!hq*e_wg%7+~=zueS#V;i51;{FQ(VH_RUAlB(v}V^FelAw4y$B?hhs0ibVgdcR zHeI}T7`2sh@d<@cC#kKptyE!{7qcgsP50AeAn6IPEDv%mlHU5)9PM7dcs9K7cmfvc zYIDA$0{!#CH(M~eRByz&8zDZWcoXl46&P4c9AdL*E-xa_JHSGM3tVud0N8In0D~!# zci!iZMBkvNJ9{X-CjxP@4pY&>{JVzox4I{i+B;C7nQA!hdh00p1cdr&@!pvOi~%5$ zEEM~{$as8IfRNZoM0_84l}A|ZZCBB_Ny5G-U^CUC%`#s`&K%8`%@`rxmX!{yi(88TyZM!UhC znjd9*@Gspvwi02VW;%HilN!`M#oUN|4C#FI(G-n>Odkh#&I_W>%vk{n(Oj_;68Zw_ zsYP>YeAQ<{$B--Mw~|SR>ZA_u&M()_hl1*Pt5S@Zfj9qV}4Q!==w`y zBcGzJw?{p(NfK$7ZT*^YscZKHpTqy=dB#06BpVX9SH@lwj(m*JucVXIZQc%Sr0!|5 z+0#8Vh5b!ciC#m!H!>Oc;{{~h&0Nf$L`4Nke-zniGRL?b(X~HnS6Q&e1vHg|8G;^s zhDbY2E{4@?aoW9LrZYJ=ATDbB5$6QEN|E*Qf(V>5>A?9U22G%~9mE2+@D-?6X8*02 z*3CiyQ_Cvh5CyddS|0h$wtUA(kc>tFdawrfy=e_%FB04$i z-%{T212k9;WfI|4qZwWJCVL39NRCmxNNAMrp)&I~*IV18MQCRd>R$1vT>3L)UUDrk%& zbY6$Rv|Jp{AptQu8(naQID_{hD!1NQVb0W$fVk7~`3-UhiCe@;^I~&ik@jbc)RXUR zoy27Nc!||a`OWb;zFM*&B0-DV3I$|bE3&QQx%;VuKG}lE5bZq2_!bXt#1#dw3dOIv zOf;v-aK!sd!`D;v8|lDhQAiMjohw}9DEJPfFI2`c6-G5y(jy#HVHn<{Y2y2t6GjyP z5M8lI*Eto({PdyM6)Df2l>?6aW0_t*o79l=q)AL_?R@Y+x2NN`PyZlh zCQMP!7Nz8JqC62!)3i<1h32!09C(4ht(9K-UEmI*8gP}*^hcy2p4nx2f#YF6+<)0< zlr9;$i^A`~DKP5KhBV#N%SQY;<$dJ*+AGwLZ)_)8tc@n7eAfG9+aDBoWf$8p43JeN z0_`cDl9wekp5g}@x(<7Ibx3q)ozA-QW{41kg*Nm$9QLWS6SuA~xik&jOL5|YcuenY zRKEXyE2Ak334D4e!;T;OSLbBExA*Wdlo4i%Ou7#8y^}i#S;-_jbXq9>(=sl{eQ$F+ z{XvciRK^yw@V7ajkmYkX>}goXEpsK5>zXyMvfTvpjow}^Uyw|3%&ZIPX6P^9=JP%t zZ&cAW!c%SCyYIf1gzF+HW){7s?7|1k@v~rX6I!;0A%}Tt8C0cF=VO2RI-Q@I*z-IPqI-#++>a^ma|iEp8R=Dgc4Mqjm(ECW8xpx zlTiD2KphwoTF4<(;&=T9;U5}S0Ke*G%m&gLq1eRmZY+@TskYu9nOEO)Nqx$BP|naN=6%z;hQw*^L~(vb?`0NlFu6@A|n@ z^R}R1?sEs>L_+?OASzT7C_v@0NEyb)^mzRGmfr4iNZx154_-x6Y&mlX>lv3dY0lyw!r;~v)GmhAkTgpJz6xt|KfTn^B!{)t&)xT`?7}qG`u;iw&a0$CYBd2nSgTp_iRJ2Jslq zXg*2M?K~3V~X(n z6|F+uVG~wrNc6?a0U#h>1;_T>CfSHoK6}xf=)R;3BQ%mLv8I!4qdmfriu%1q*lj2t zVj23qT%;3}kDNr;hgAvb)Mfu5bkQF&`p_t=_#v>cg~}(Ic&w})En&S86X-#TIQfB= zt9xD^U^)7bHmpbONjKf{5xSH#_3(%BzigP9PvXBqBL)orb4Di_7Pt0g$zgvf(_6*d z7Mv0$&HHD}C9w^UUKV&zNN`sn*o~ybwC41h8dXipbG5!sNpg#<3x&aok}Ez2IDvQe zTZlu-Ixdx4Xq^b#HTfO(#mpKotbdrfa%8f`{b1Qj(nt0!b4f#tU7i~O@p!;!sbkUP z9lky0iv>pBmk;n)LNO`DA>#lPKr<@Gm#cohsZf`Cg?mw>VdWe2PKvQqh{392sKXKW zYqZ51q7~^=x<9?R~cwOaQ(zhp6o6|~Hn)Hyd17=mUqXQrA=+KfsmRHECY1!R; zQAp9*;Dj!@x;$IUF-=os0B?K>vnx?fYHtQhF^T$1TBrgZ-?_Uj7Vu2j-ifD+4|{Ig zHFW+taWC6>30TYja7ify$-_@Nx?nLBMKer0^q0~(X- zux?Qhxhf@8mL3V-gTF@-L$A%^@SSxSu{GH({6#~^il1J|D4`ix!MW3vDR_eijIA(J zTKe>lrwocw(wzfGqcr_Y{XJvO%6IBc&)>x%*rtMw9WZ9g!u>?WnR0ND20cxMki;ji zcHL+5Y=`?xB`I`EQ`Z}N0AoE%xaPV*S3+$bFx|spuGvJ3L0?>5B(st3H6?*15lReL zEhE0O+5sKzAjB|YtEnZssopBjYKV&taNK4AGUx!iKgQQ4!vFe9nb!EP<6M54MxV?h z1;0m4<@o5JUj=6(fwS5Bpt*qsf)iCFBd~)bvFV0OjHJKhIlAX&F25jo;fnMLd;U?T z7v&$GC8UBFr$grA*z#-MY+27253}wWf7aN<_7%ZC$F#|kP+>gylejkjnda|1x<=A& z)9m$674mmplJlp%W0k}q5kE_U_+bAG*PYnbxl;ttM=L57F&KGT8_oM5a@tQC2YH1`%6wup^u7r9%*1tmi`!3 z+4h{@xY2T@7k*}LN2Y@gxFC8sZTYr<4qRdZZuECn?}xUcOG#e!Hw`{|;jg|L@t(Uz zR{P#gE> zoa*#g>m7pL@bM+Der~;5UB8>okT~s*QU|Fkb}E?RJJ45~frkVIP*aZ=2E1h+#yF!3 zTuR#R@~1V833DRl!V5Gk1<<-|0gj7ZDFsx0KTq>W3Dg5$wTAM(j(+eHZ+=B7+w z_{97%+azTLHQRxG2_X^mwS@co335{84?bvoQYxHLv4`N>TI-BykD^Af2CsaoCWDqD zox)~_r0!{&vU6Uj{jUQfd#6h&ld#0x#wttyB-?+NX)*dC2sv17pR~rsrvQMz7mVuP zvYhbB4UT*i3YPTu6tbH)9`E zzFf9cxZ7b5Da*i_cNRh|?}<^x%6h(S02Ne2+4%km{!H)ZDTX)Odpt1D$>$}=5uAT6 zkiNP;e!7+p+k==kWb*|TxC|aE-Hp}WW+yKl4|RV|xb~tjw`)$gh?-aum|oPtmjr9T zXt02e=in3)1fZY^1%ni^v=ra-7<$Xl>-rJRwNKqyl$0TBU>I|`%CeQuO8l9SmKGgg z*cN~SF0AD4Hjjo+>m}LM^ocZ&H(%1aesMA5!2en<(kq+77jz(LN3si@tr#aX^5jK~Rbly*?x2Gq zRdl--{?Z@{be_z}vUuH@(L4iRvt}B#L@l^h80Apwm2rs(vfU%#GDJR32G)Q6*Wln* z+_Im!R575BVL5To7Ris}HhN@W;t?6U4K}f@7zS7Zk+cv^Vk=To}%BvbA{T zo+5;J|HwDo8|DHs9tY2SS7=S&jq9QHq{h}i0`m#c#xz9=kmbuA#vxXYMte*jWePWL?w9OkeG0J0+s4Up={aT2(XKotG5`=kC^cmUuo=fMT4;3 zw?{Se&pl0d8A>v1yDE7VK0E01 z$-DjDk~CRm-=Dt6A^g*=y=BiaFy$Y^SK|4uf&qpAWQnM(q~n`S2$II=qD;6YVCBo= z56^NWH7#E~QAM#meg+z5Yd?Jw*5XQxK7HZR!hD}eJ5(O`*+co#PoN=6lHS5-4{1k zeM?NXZ2U*NUx``Y226ao&^X&__&7{)QE+lM$*=Or!O%uHhB=)09jxGt{alZD*~!VJ zX$#tY;Z(JDecKl_&R|zE&$!EGgWScJTlmSooWv%vaEqq$+CVF)UNy!{Y0WAc*vMmx zRK3L+jpV*!+VEAuXQ8@aO0m;5bt^fX@OU9g^Grf~Psj>acn1?Oa(8+dvzIwqfX&+@ zMsv{#dR!s)-4uYB-(N^mdT1I}ozsVi%XhHewGZ>;>d=KauU&rn6`Qp%Aj{U&F{teF z;$7X*jR07fEbwoq&CeJ5JvN%R+PF-^PhZ@Mp8~Y{cUz9Xnx(1hfB^t>r~mF0^vjel zEnB>OH6-=mp_8=#bg$S{??6;0?vab~ne4nI(U-%pQnYkSL`I%4P$orBFP3Dyl z;es9N9^r@USVIgHz${bA5Rs5Ah9=+f1K5Jz@g6vAERg`kYUUOzS!qEh6*VLdgn{ zBlG$3`@Nj>>Os!^;XI;#CtXIzRkebmB%^Cdy#X}EQMr@ZCyow?m zo9~^|!tw``hLf2&&c`0q!e5IIfR|9>Nd7u@^-lPA zBrRn|yFev{f9AgU@p<8)c}{>23*(nRJjKCpC053PhjZK#*R~QqQSiAmrld#CaBo)g zFl`?|xiXQQ_yB|^X*3B60Kh!ohASS1heZ-fY`MlXj=&p-U*%|@3aM|D5}4%l{XLjKRo%!5dZ)H literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..8f1f1cf --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,18 @@ +{ + "id": "/", + "name": "Switchify Remote", + "short_name": "Switchify Remote", + "description": "Control a Windows PC or Mac running Switchify PC over Bluetooth.", + "start_url": "/", + "scope": "/", + "display": "standalone", + "orientation": "any", + "background_color": "#050505", + "theme_color": "#050505", + "categories": ["accessibility", "utilities"], + "icons": [ + { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, + { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, + { "src": "/icons/maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" } + ] +} diff --git a/public/sw.js b/public/sw.js new file mode 100644 index 0000000..9d29986 --- /dev/null +++ b/public/sw.js @@ -0,0 +1,54 @@ +// Switchify Remote service worker. Pages come from the network first so a new +// deployment is never stuck behind the cache; content-hashed bundles and assets +// are cached once and reused, which lets the app open offline after a visit. +const CACHE = 'switchify-remote-v1'; +const SHELL = ['/', '/manifest.json', '/icons/icon-192.png', '/icons/icon-512.png']; +const IMMUTABLE = ['/_expo/static/', '/assets/']; + +self.addEventListener('install', (event) => { + event.waitUntil(caches.open(CACHE).then((cache) => cache.addAll(SHELL)).then(() => self.skipWaiting())); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys() + .then((keys) => Promise.all(keys.filter((key) => key !== CACHE).map((key) => caches.delete(key)))) + .then(() => self.clients.claim()), + ); +}); + +async function networkFirst(request) { + const cache = await caches.open(CACHE); + try { + const response = await fetch(request); + if (response.ok) await cache.put(request, response.clone()); + return response; + } catch (error) { + const cached = (await cache.match(request, { ignoreSearch: true })) ?? (await cache.match('/')); + if (cached) return cached; + throw error; + } +} + +async function cacheFirst(request) { + const cache = await caches.open(CACHE); + const cached = await cache.match(request); + if (cached) return cached; + const response = await fetch(request); + if (response.ok) await cache.put(request, response.clone()); + return response; +} + +self.addEventListener('fetch', (event) => { + const { request } = event; + if (request.method !== 'GET') return; + const url = new URL(request.url); + if (url.origin !== self.location.origin) return; + if (request.mode === 'navigate') { + event.respondWith(networkFirst(request)); + } else if (IMMUTABLE.some((prefix) => url.pathname.startsWith(prefix))) { + event.respondWith(cacheFirst(request)); + } else { + event.respondWith(networkFirst(request)); + } +}); diff --git a/src/app/+html.tsx b/src/app/+html.tsx new file mode 100644 index 0000000..05b0d2d --- /dev/null +++ b/src/app/+html.tsx @@ -0,0 +1,31 @@ +import { ScrollViewStyleReset } from 'expo-router/html'; +import { type PropsWithChildren } from 'react'; + +// Runs only in Node during static rendering, so it decides here whether the page +// registers the service worker. Development builds never do, which keeps Metro's +// live bundles out of the cache. +const registerServiceWorker = ` +if ('serviceWorker' in navigator && window.isSecureContext) { + window.addEventListener('load', function () { + navigator.serviceWorker.register('/sw.js').catch(function () {}); + }); +}`; + +export default function Root({ children }: PropsWithChildren) { + return ( + + + + + + + + + + + {process.env.NODE_ENV === 'production' ?