From 9c74cc72633534e1307613b954b89c11bfe09467 Mon Sep 17 00:00:00 2001 From: log101 Date: Sat, 27 Jul 2024 14:25:28 +0300 Subject: [PATCH] chore: remove unnecessary packages style: run prettier --- .prettierrc | 4 +- README.md | 55 +------ bun.lockb | Bin 272116 -> 269838 bytes package.json | 2 - src/components/Card.astro | 61 -------- src/components/LockedContent/domUtils.ts | 46 +++--- src/components/LockedContent/geolocation.ts | 97 +++++------- src/components/LockedContent/serverUtils.ts | 4 +- src/components/ShareButton.tsx | 38 ++--- src/env.d.ts | 4 +- src/lib/db.ts | 8 +- src/lib/error.ts | 31 ---- src/lib/utils.ts | 23 ++- src/pages/[id].astro | 39 +++-- src/pages/index.astro | 121 ++++++--------- src/scripts/initMap.ts | 96 +++++------- src/scripts/initSelectionMap.js | 164 ++++++++++---------- src/scripts/lockedContent.ts | 58 +++---- src/utils/distance.js | 41 ++--- 19 files changed, 350 insertions(+), 542 deletions(-) delete mode 100644 src/components/Card.astro delete mode 100644 src/lib/error.ts diff --git a/.prettierrc b/.prettierrc index d9cf6b8..768a00d 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,7 +1,7 @@ { "endOfLine": "lf", "printWidth": 80, - "arrowParens": "avoid", + "arrowParens": "always", "bracketSpacing": true, "htmlWhitespaceSensitivity": "css", "insertPragma": false, @@ -10,7 +10,7 @@ "proseWrap": "always", "quoteProps": "as-needed", "requirePragma": false, - "semi": true, + "semi": false, "singleQuote": false, "tabWidth": 2, "trailingComma": "es5", diff --git a/README.md b/README.md index 1db3fb3..1dc9d18 100644 --- a/README.md +++ b/README.md @@ -1,54 +1 @@ -# Astro Starter Kit: Basics - -```sh -npm create astro@latest -- --template basics -``` - -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics) -[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics) -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json) - -> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! - -![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554) - -## 🚀 Project Structure - -Inside of your Astro project, you'll see the following folders and files: - -```text -/ -├── public/ -│ └── favicon.svg -├── src/ -│ ├── components/ -│ │ └── Card.astro -│ ├── layouts/ -│ │ └── Layout.astro -│ └── pages/ -│ └── index.astro -└── package.json -``` - -Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. - -There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. - -Any static assets, like images, can be placed in the `public/` directory. - -## 🧞 Commands - -All commands are run from the root of the project, from a terminal: - -| Command | Action | -| :------------------------ | :----------------------------------------------- | -| `npm install` | Installs dependencies | -| `npm run dev` | Starts local dev server at `localhost:4321` | -| `npm run build` | Build your production site to `./dist/` | -| `npm run preview` | Preview your build locally, before deploying | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | -| `npm run astro -- --help` | Get help using the Astro CLI | - -## 👀 Want to learn more? - -Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). +# KONULU KONUM diff --git a/bun.lockb b/bun.lockb index 40448cfaecd51a4253ae0ffd32f6e6512750e498..753d514a102c50209ccf901b38699f312e037955 100755 GIT binary patch delta 45769 zcmeFad7O@A|Nno@H8adbMA@4{vSiC(%oq$KWZ$wDG8hbF-^VgT)MV!}4oP-VmQvY? zDO;4Nl!`K7Vz=upL(#&HLi}1_fs9XyY6BbeCFRO}aD8r`MD7I+yfs znYVdtR%kFe?18j;_xgN=e7^JwaACM8To8_`==0qQj~tPb+>3O7R`B_XVGn~#!582X za2xn;_ynwcYQT~3F1QF>7`_W$W9?tcyY@V6{L|7uLQsNN;5*@Ea7lPNtO|{Qi;9y5 zjZPZw^YzEhi`{!j$`DN7xoSS&E!b6}e7^i}8m#y-_}vB8i!J z@%zj9dCalE#iq8r;X{>ytD(WynxpuuZPw zX&=;f^LUH2s&-18%kRM&ha<4c9G*0ifG^FL-mZyTV;`)U6JzZnaB1vIjopHe z!)jsiW^Tq;o4WC*VHI=$Rs}a%o(F5x_LEK(T-!ng`qIx*a3OdD70;7KAhV_0rQgD; zK=M8JPfOVx^PMOYzKE}x^#3C^zJ=m)Zmdm-x6xB`BuA=yJmBD zcDr^WtR6~&HFTGWSA)*LD)16x@rSAf3bGg{vP5&-j2)l7jCYKzN z=uh>;53pMB39Oo?4q>_QdKdc^>@oe5d-tz0bkLZduK&9|gDV5&(kk?F%Y7YLb8>X@ z$fUlbd_J*~H|y={i(zFmd`L>lsG&YzNMCnEF5smBI1FnfpNCbAdGKBEAow1*6z@RavLnqhLwSuA^kyE1;xTzbd_KYK+=d_qmonl_$m%|XFwrX z9e90^%NH%bZFvu@fp``!q(zkJ1bpd}Ef2EX)pBFYQI_wtoCnqb{F37GXO>S`-V19W zHd=nl@)MTFh=YyumPuPme``$J(s3Gt5&e?~Ce!!c1~)vZ|G1&_*QcZ1F&H|0$e^Jk zNBEM)xMMdkC27=f{I}bot~AyigP{ZaRq2yF+}AgGaGxp+T9I*X{&_7At&%dNcjCz4 z7kLY&-ANivqvyy&JhaNNQAwkcd=cZ_rT<&1+ufu|9+W)N_ZqtDI%IevCHs66C%BvL za9DZ|SZ(UvKQUz>@t)llUHLbHZ-L`r=6z`T%1Oc0Tgs&^wQca)G+;!PafyRce2K&R z4b>8xPQ3D+Wc^0KDsTQ|cVSP3mH$Asc}QPh)hVvM70!p=Hzjc->(iGsHmSF2zUEPP z^cKOyr=`y%po$Gm9NE9hz@%~M)*cOOfewPT7Y-SmG%}glJ&5k;U8V2fE>uJXG=p{Z z>66^IuR4Y+R$>YrSq)taqgUdHq$;&)`g#u;GLU-sBGJ{LUPHzv4Q4+2O0xf`fO;8j z%WA^1D_OqVaxqvH%1;JraTqK+vGIemBH!1>0!d@SE73;9rZR-}|$s>IgtO{hpYFfXf!6U{E?(G{eV#wfV8c-cwyWH;! z+$;HKu&zH|gWPm|C%C~NNpmmuvPKzh}U#% z2&+d!R|YE#8y4G!bRa#ur|Y`WT!ciID!)# zVehKrZB5=*bki1;WVe;H8~cj4&$!FN=lh>lgSQI2et2@N+wKg@AFX$1$OLTl%P?3o z=8p}o{T-a&SJ|D-RNR+mliM+WZgd^DGe0yX8W(X}So-Tq?FZc6 z?)tjBDo?{Iem1(=JLZU6-cgwLrKMLUp_akSqwX@92&*C^V0CN};+Ze$VeoD6$Txky zituGJ)NFX-n7d7U0c&_i!79kB_@uYo3MLI2lr)ltwL0#u+E}=-4llh(po|_q;Z~qA ztO7rw0F7v$x7~f^Eo-lY6+iPGx8h^q!q@{~jhNRXQ}I&+?mOw~?I~OhV3eI6@xKRa zb0;$=f^KvYyh%g=z2N&V4KMsk=u16|pRO9*-K?(v(=x$p&EoyV?g_>Ba_aoHB z(e@JR=V;|BdzlU=^suA7NvN&kcV`u!?-56vK*-hJxS>_5>ZKh+$W8k;q3%wK`|k7k z5}nXoLR6QEe@v*oLjHQyf^qHQ1H))*ywlu}>M?=mv8rQ*1w&$D{NGdyUc;qMl+V}5 z>7U6pV*=B$l)x7ZiH->z#=0LXG?-N>CQzER?CR+uj@28h=8d@Luv$BDA@MPRt61D4 zlMXAqdJT=mp4d8pUWACE0tt;`0t>L{3dSOQsTTZUEJNv^n4Seg)Sx_U8gx?HMi zAPuW2ap8`22&>x-t4yrVhmf8(m=F^a=!>Q1`-35rz8I?kR+!T@AKEyYPkH$%TApsV zHMAD#XxL~hI~_a4hSUzGc8w4J94#(5v1^?`Df+M_DMQu5@JX_Qdn(llTp-lMDNS{* zM9+{!H6h17SSl^xwBThdwTE88^LH$_mRR8r)OF@`y*h#IgdW1n8Lq%>_1spwX~tuz zU;V*^k+BgNnh$xMX5Pz0X@!-~>4F1TngMRt-Cp14BUiWTfi_q@u&5%{_ztW64J&~f zWm`e4E>4_g+@Dx&J;(NK)T(!8Rr zbn-?l4YoVqf5Xxi;%*c5iBRj@+0>U+Jkm+0Tt39gZc!sD((6XtGg!lKSjE~g95<|V ztg((Y`MKB#47WIS#9k(kn~AK_59XLLfix`Z$&AEo%Fwp#K^TYC*C{}`T*K0Q zbrxPArK6jtJF|CV)pR^H=-*?h%knt0tvMMo5-dK&74PiMBX^cA#L8Y|-(zLZ^QHtT z(w%YsC0&9$Q{n?(Bf6_!Rf_HER>JMo3@m203Su;rubS!3!$w%DU~Xqy9g7u<#Ym;Z z1YW?>xJ5YCy^dvzrF+^x>@LIzr}De8lqZeWB4C5uGW-vo3;!~RdgHk4VK$9bwbo5J|Bb6)hQu5 z#y{neVBGL{|67j)Q-{X~t`nzqU)Z@~)Mud8Y&XwoSjvT~8sl;XEAB>I(L{F(realM z{2dd6*G9w#b|BWm#TCCx45p5Z4^(HG)kO@^M(ZEkD|l^Wynkb_VBDzqK(5|yF5$r} zF0DO#2X~H&_dnA+cn$iwcQ9^reE40=uZM&6M%M`+N2qJC-q^ZfH>4{4e7*;r$aF&8 zozNLV$xf&VDvNC-jIDx{p=nhGr9TQ+#zpYd+Aa0BKhd z>Z}xjYlOHy&^j(};SEyQQ-gcP*9{xYa0K_H)(M|Oi0cobk8Xs@50N%8t!|hTP~=`h z%^kPEP%b`BsNIdwlQ%-=ZiMa~=J^e~5!!Jh6vCe1=F*H%6SpciLMLy8?ik_4CK77o z_^ok5e@vS#dMhD}j#D|YWj0@JAQYWy9P&Co`oHg|wmNId#&G(IQ=NJ>c zPE243mOHt0x>%2;sxW;i{0x@TIqS{eXlyWUYJ6bXSZ|7IPM^GCIVZJo?kUdQ)*rE! zyV{<{(#mkQ?(maXwSs%9)d}QHb&KSpL4NhHv|^a+th>q9$`#ZZ@c>pW;@pj*;COd6 z<#M*07FZ35WOZ=;;6T;M#GD(qhK%1sLHd?G&3caqzwEMrn*$iwZFpRiO6TRhjL z>S=D1$eG6X$5Iz@FePp|R!ukOIk6#W!PFV?fgR_q2++o^|)f&s)5OYoShDpQQ6srMoZog(=xf4Wj`)r)s%f4xDhq`&z z#frO;=V&bTf;(^7d?4j9Z_f;&DNC@F+?}OwV?BgLv8=_) zk9!SMm3m=mK$tJ=R12}%2J2O+6Zo8v+hC_r8E)m=#Wn>?!|mkm-lC z!MKI-{?r-4)P?ckp))yS1Sc-66P`?{i$Z}cLM_SIowoUA1yfCY;Ne;B!8&(va;2E? zJy><+?EiIEFm6%2zsBrf>Z17Y8M7I+;KW6B0uRq|`8(ir{r+oJSRD|X+Wrv6T5&=!(hFobt4FAJvE>M(^`5OOh5gUQg2@eMNA;)k>TRUUqN_SP0 znEkj1mg1bL9N2`V9nIZCf3_Bd;@NSPyBE3pRQ=VSr93xb^>m7pm4A&_xU4={oMEVn ztZ%V;I9ABa*obFxX0jMd9nV#xzZ0dkOKBZrL)Hd&J{RwQZf)?|bMb*QYu%|#mDzy` zuXDFSCUyfViKR*5?ng7Q;<4P#?R6|I0XHt>S+BcPtr#qM^1KOal#O#e*JEkKb2}65 zjP-O6nRh%F+_^D6(CImMK-|?e*IFc?f=95_689XCe|>Q0ruaac_3pu%Ct4gFp2TX1 z3yrP8-3gXk7bUN{!L7B^?f#(~g4dpp4+J*4jke9ia!bhC6ccz0tC~|?P0$jXbP&@< z+l!F0bq)vq<(q;#tHk?1gf_hyWwSu9<#-L-ZJOVi3Nywx^u3b5S<=3r^87=f(V2n@BF0bn@p+V0lb z&7?b)TIaTWmW^}fN_ZAl)!?24?h**O+0hn%?2cgEuK2*v9qs~fucOak#X2QsF#|rf zmXmFGsht!VtXHc}po2n=moC;BSgIKP@N`UIKbAHuT23LQcLn42#0RGDa=VIkMYhMW zR1XedoHO(9=HeTi7*i+kJfS#ry0BtQ;1ZVR3M;HejDN|V;Lca#!_V&FIfJvQwtGd_ zM_o$x5~__O*Z%03@LYQt2WO@?ClrOwY#tpG*o>uKCv!&RGM3vF+>8e9+viPET|@d| zxpA~Ed@oi5C%-?f7o$P7W3p7v#AbCP2&nJfkywwV#0+)ynD9$jan5tzGOyCj&Rs`W zLK<+Y^>mDX#;d`&*Wv?v5G&uvsT$5{&|mXF@Y;d+z}kb}P=*|c34Dsx z0~hD46h8fs&o?Nz=jA&7Uk(MY9gO#PIvk8U6z`vNIGB1UK9J{i_n|MnGb$#03|3O` zkArmrUlMBMloO(D?1=lw#qkPcVBJrgYn{Ssh(*URjwO!jHh1EoI)QbBdOCU*J6XgV zP7Bz{S`*T|V|Fqg)3G|rKm02~trYSveKWZ8NPPJ1$Moz`SuG{hj3mw?4gUqJzB8d~ zz2&Xzge5#j$5O`5v+eMMSWJK#b^N)G2UFjO_xC*>-1$a)__pKZ72HEt`cC-tpivcP z{~LqV*|D@^9K&kij0E>`Xj0p-HzI(BzhFR}DTfc$y_y?Q!- zU5+5!-`ZmNCG(b|6BuA4#L6fIb>>GNdp%E|JZ55z&BS5RH41Pg&84A4s~ zeX$H)f5ocU5+~MW`7Z;?XF2c%t9C1vf|*zuZkAbM8D6*ibH~T zeyyj!T;gTH)%E8lz74yPjc;t@#Tt&Lu*zs|<6GExvGi8bgR>|_Wj|zN|B4m$u#L~j zlDb)49ERN!R_VQAMfDK}?>tpBP3jOVt(;Ldb~LQIjD__QYtNYoYh!y1R@CGAV_Er3 zw{}ieJ~OSJlO@dxu~Tq1mZ~`)z6D+i%VC+-S6O?tL|$SA*YKwxycJgZomSsvc{i*I zykdDDTmbtxtk-c(LDl>n1ZD8P<&P|%g%y7u=AZ9V{jsdzXZ%smeF@9&8(6#P6-8QB z1%9!%Sn+?t>d~+?Vigw-OUMH&!ve4zi@~Z`B&-Qh#@gj!`B#SZ5~~9DS-qy^+OX2s zgZ0YE@=t3(gu1*XET7ia@xNhJybb>O;BGdZSbBGBi&gPH))uQ_DKP)ie1rL`mW+Uv za3rjnjj@~x>m^o8Cc%=@`6K_yuzKuqi8rz0GpwGIr9Xil<}1%Ev<^90(j2RcLxTCf zFPWAXb%`waX&WondVk*9{|}kD`d=1Q6u*PELjU*JE&u;P#!kEbC13UQ2^ye@@Gh(# zKdH4M;goGzPL}kcb^Hj{OgRh7|2)h;-)H)B6D$4;8-EE_L0?+?YwItTp7xCmd~5kT z>+n~ssLM7!Co7{LtS;7m`kS@I3jSg3n>g(+Bb4EFo6u=4wpeQEb>la+2Hx}wI|_%We&(Ps<9S_c(4);i{76*vi9Elr2jGt*%eFx%>LEzgJb z63c&qwQsNvC@Lt^Mu_ETV72HOYp;V<@FrL-d`^h8JxEKvDMF6`%_pIy=3jLV7%&?v4_LdYjsGi_e={4OlS6fP+R{ekWVN`9)pN31 z*2C&KSp__T?hl^%rKmP?UvKLrR%{<@i)ANSJ10x;i>~zjVfEKAYma~xKhoNxEsuru z%E9d&$8k16DlDH#)={hi(qWCwqp&ibYUBTk1Ho@TEqbrKW?L_@>^asJt8+4?2lM^v zcEXc3_CK*^;Zpo`idtj+bFy+>Z*{Tk&DIvHEiYN#0;^5i!|cXFz&XAhfb|lq+6S#I zRt1h)`~QTM?;AFsH^S`3k}VKx9n^xiaa4;xunGQ()soZ1>-_bt^%E=jgSG#PRgoXl ztm7}Ry69J%KrDxAmVdLlSQQJQI~4C%x7@_4P&m4h1T5#XTo6{e+hD!Y6i~RR6>_pF zR2*FiN?5)FmVT%8&&evVG`hH~^(znS997-gHDTo!4fA4SaRUykWp%8bla-*Z)pN4+ zdg!W9eOR_$B`v(L$BHin^njoi@N53%d|Zd-*lIytpsv(5sMr67RiOl+d>RAg(-i2H zlS6bL*bJy<&A~s9?VPUo=ds;CkL|P?oX2=t8~;4EbG8t=LR-r}kL~_>Y{$jrpT~Cp zJhsy&`QJSDHg0j-?`=gU&u(+`Og*l=dqo7=%2@S>V=}ZY+C;3 zv7LLL@y}zse;(WY^Vsg6$98&rrzbA|JhuDivEBdjv0d~3dynm2D*k)ey{1a}kQSzY z*^qo@8ljMJ=0y3B&Zby7gy;$g2!|zHkTB6i-HR}`JVNHZ2x;aVLP)x)T@jjW z=82}5OQJ_jLM5Ct?!|dcC7h?3%LpNlnP!!t$IS{+hWS~hd$Tr5Y00Mt3mTkvM6Y>L<>yuC@9km6D>5ai;O8<9a?0@ ziJmkkM2pS6HK3==WXK$jQd?_K$kQgOrrKIvZLNv0%$$=@p$0Tyv zM@>j0gr*GH~*^lySNttr9>=7fY|4AO zI)rpGhoxMQ@&`ZA*%4*zgD9CDQU3Iq^HM5wKxy2GY(mVuPGoaR!W9XjCZRJzMn{A- zoe{##WeKsJ5IS~2$Zb}1LAWR(yemS$wCjqns58PA33*M(LkLZ~AS6A6kk4$Ea8*L# zhY@Zyi4P;J>xytdLP1lo8$y?d5Jq)FxZPw)h|NG?GjE(C~8XgK(+i=jxhx?z5usymgz{!ZZ-k2y!uufHYufc;1FLAB6;(1JNl<0e zRaC`n7F9KYzR-OpQB=+B5Jj1S{h;b5SyaPhiE5hS{h??xOjOIfE{ZXwlc88MPE^~R z5XG5$2S9bqWKmu7fvBE|8VJRkCq(tlIZ*>sI|WKG^F$5JCDHvRVGz{FJSl2yE{mF& zW`m&z%nDIc^Q)+tX*UFFZk`pjFd;*smZqzymDwz6Z34rfHYQQj*6a|qGX;l3?M<@i zL6arwV2Y1`I+|gkPUdw{XH$A4)WwVwbu}j-Q)~ns96gE-e%MSNg>YEH1qt0v)M$jU zBM~x3BRpcxNvJRiq45}mL^E#;!YK(?B=j~3V-Ye&Bdi&VkYp}Ph#iB_aU4QFvtk^= zMG4`l2+5{hD#D_%2wNl!G$G>=nvO$A8jmo@Y?g3ULg5JrLrmfXgmtM12P6zL1t%hO z8ILe(BEkrhB_U!0LfJ_Oqs*{L2-_u`lrYAWPDAKF5n);y!Z>q6La|8*(dh`|&E#~1 z!xAn?m}sIVBaBT$$efIjX3j~dkRFoXG?^08TqlDm2&dBVxH1KgM@_<`2pN+R);x+Z z&0LlcI|ZTRRD{RPim3<}C4^5yc*3-shOp>Sge?+gn2^U1nodPXdJJKf*(~9zgu;&_ z%rS|NBdnW-a6rO5Q!oRe%VP+mG7y3$OG3os2xXr@$TY*AK-ezfqy%G1PeQxdL7 zSY;AsBV^1(STh@8jkzo#b{0a%IS6abia7`uC4|pKc-FL=i?C=m!WIeZO~^cirgIRI z<{@k}nBt*82}0Aw2uVv2-ZYyfT$NDxX@s{-;?oH0o_nsX8=tUzeI3gMiYw+i8ugeww0H3_Q`GFBq2S&eYPT$T{K3Zdf~gfGmBH3%0a zgg=9D$+UY0VbN-YEfT&mA!`wuu0cpzi|~!vEa9qz!s`&eGl}aE);)u8K*D8H@L7Z| zYY|30i}0h#k`S>Dq3m-ASIn^I5VlJ=Dd87WdObq_XA!2YNBGs8kWlP7gy;=AI)s=h z8+3G#azV-;A*T999Ua!AWNy^aA;g@QQegv1<4t4}V&-ikn^O|5NC-6v&m&}PL|F4Y zLb$msA$Ai&#}^QCn-wo0T$B*L86jZWZAMu1Ji-WR2u)u=NO}<=pV=(os)WKX zA>3*bUqV>78R3A0f~Mfh2wh%881*v3?Iue?#7hWew;&WY!?qx7mvB--QB!&=LjRW$ zrfo$iZca!jwgn-28^RrC@-~FS5-v!%(?o4Y7`qiAb2~ywb525qZ3vBbAe1)qb|9RR za798HlduyZV>`l{od{*kWeKr65IXKcC~sEmLbxa)d^f_qrrmCYMLQ9;NT_5&_8>If zg^;udp^Dio;i`nfuOQrK5??`Bw;SPrgeX&RFG80+2&48Q)G%2RB3?l#yAL7S4BLmW zUBXETF{X4DLjS!8)3Ok1n-da>?L&xu6`_uq{3^m>2^S>PGf}T0jLkyGd<~(#IVYjQ zs|bzvBP5u4`w>n_xFX?xlW+hb<28ge2M`*Y%MxPuBXm57@PJuy5aFVP@IwgAOuIt} ziw+=ckLMyXb!c_@{Uq@(T5?@DHcL?Etgm$Lj5ri&>5k?(Bc+g}? zh`{b{X4p}L?GjE(=xj>A!Jqy|5T?C>(AAufQ0yo|^qU9|o5^n?9F}lFLU$8& z3}NgW2${za9x>-6RCp7i@mmOqX5L!}rzBjF(Ay*&N60vau;w^IlDRA)_AP{tClLCX z6(U*(~9zgu?G43^9rCBCLBG;edo; zrr=40F7F_WI*BmCWJ!p47oqHX2&2rf_Yk&AI4NO_Dg8b||C0#Q-bWZ`PDm*B9zygf zgz;wbDTKokE=ZVYqCP+v`#wVE2MB5AoP-Le5E_4oFxkxe5aE=BD-s?x2_GS3e1Nd# zBZO(@vV_^X!?Gwd9~b_pjX7*qN@LjO-f z@@<=TKID!(!51oqZHxRSrOw^14o zTF}iWzlB8jqf@rw__nL;`vb*ITEa;>azyVTgZuU#Sag(4dTXf4tb0?L+ggYCfA)u0 z;wyXsHD}wxaDQ0%I=;zQSmwjorizbo3d=XZ{{C{~1vXVbWyH_D);0Z$$!G?f!9Ow zT%D(n>-c67#afL;$- zP4BrMb`-u2Xf=I0`>56Qg)HaOmim^~`&R5>9rI&Z?&FQ(}yLUE`t)C z4Bg&iIy($kcnqKr5S{zCosfi-X0s2h&Dbu>|5$D~?9vpMHMX`No90 za;)`>B;3{djkA7tqCI4_@z(Dyv|3i1V6~EHF;<)CYH7Ywh_P1Gci2?J(xA50ypI&! zjizs=XbjV>Um3#Xt)IT{#y|a!EPNHL_NetMi*~Qordq8WT2b$79Mh~=9x8i&& z)Gfz|YZ(+8mkQHWmN7Z2+ZZeoY-Y3s*NfA}_AZK>7tq3P$W zw#?6mfK*5Wpf4Y36|At1354}^9nJWaR%=LD-@K8w3XOlh`+>feqgAlR`ZXe~?;dFt zJY%)Sgd3n~6|A*d6UukK1yu@OXT=8y$KzNUe%5MD3G3TdW#H$mrcY^CMY{)HZ#8{l zyCPayc!Ski5Y~6VG~+j-@lQX+<9r@R;v;|h%ZnchR`dW%! zJJ4v9eh$c|?}=&rcU!;Cg!PT8`tTmBbs;>*YOkR2j~|Pm{hFETqJ7r!A;Q-QtBbO% z_AucAO2O+@t92th#ZmZe05nB+2h*saDtf^B^&tG1t+YP1rUpL(o{*pV|Bw}X5^g~a z)uO{zOC%gaSg+Tu){F2U+to*`)*EdqP^FGqtqvhs<0|={ERe|@cHjwZPpt9b# zT8j3wnN~by#X;CgtO|T!wS9{T@T%~PnZDe=GELvO(6=%4WwmWUhZ7w}boh7+=)j=^ z##W%u6g&f-1dD;r6Z%fsH$dlz@4)xqGWY=;1#f^i!7=a_I1WyLx50iLS`JW|gWwQ2 z3|3<6uoLV8`oc;) zI78Qb498q0n_OI0&o%T9-vcfh;gBzPa_%TznS zPOuB?0k43)U?0c=uY%XWey{;-1kVF~!)qB>4pxNm)y7o>>Qa#Q_E?|kvDRPCY+vP% zO>0R+E6@hC1?|9tpabXxIs<)&?=!kjUp~}Ft`-3ug`NUSfKEUwz$&mBJP0~~j-WH> z0(AP(X-B6Uon~}+;johCt4AOTR0lPHP9{2u=;WdA*cJuFKygq4M1niPU7!fi7lHGD zyxUg4;kC2nV@+eTqI1e>ptFh2B077l z13FshD50Z+jtV*&YyvaDOr1-0+1F`#0+Gcay`pa&>I;2ok^Ip&0dEKTilEL7x)yZ<`p)QF zFc0Y1pku;pprgTfFab;iBf)Uc8}tCnNxMwxX+(gYyaYD{_k+fu31|wM>0HvBKnu_h z=+ZwBbOX96eh_p9cY?b>Nl*%u26qGfoXJ)2E4T)J1HXemzyh!k7_bOD2^NE=z+^B5 zBSD+^dhWVh5JEeFbU|EK(_$xKm$-8!~@0O2daUpKqvDu;C3*J%KZ+yQn~5y zG%y-WzGx!lPhn4%^dj zW~WCe-#G;TNsUy~WY85%qju@UO#+6(GJy`f89)bGonLbnrpo%z29b6u!3-d67QSjs z8{*=K8%e&4u)X1k^IEAhqmGDPL|YPkLjuKny`gXyZEfORIwF?qxDYcF1i>XT{}#+A z+zYe@TIY>`mgW!OGSDRd254hb1GPzMv(hMN;~Kkd#|Hm4f0{O~FYq}B_Jb`zlUWO3 zGgt@Kf@gph$7=92s7bn2KzS~~){@Uncm>clpzT20!XWJBK-)wekO^jhifGgI+fYR@ zrh-R-_KS3&ll&ww5ex-`!9Xwo^aS0(!yuDPH0N~5=t5YRkBzV{B@cqKAQIdGwA~a3 z#lUKOo&st7=ls;0P72Cw0SE%^QS*QfO=^?NL$OFHQ*WW9MBPaU5>CcVS{Bati%c{Bk>mS5_l18 z1}^~R{W91Fc7q*26;PU8V5dgFGn9$MSHK=1N9%MWyf=p~e=_i8fqg)QNfTZL$H1Fl zKTuwZ_p~<%tFnhQ{s##h0IGgZ>Yb(^GgDvL^{-6+6w@G?~k^5dimtR<}bDfy_fvb{`hwLYq( zG(nA!k6JGOjlj#dFmZ)|^bPt+RWFeWR4Y_-C0++~(YO=b14@CCKtEA=Hz*CtfO0@r zwgCS6d6;OpJZv^^^B2wgX9a?Bj%MQStDLwUwk}N15q<$Y4>o~k!EtE)`N{;C)f{O1KYtiuoY|pIxDSE zwy@HA*kQveM(Ok7vkTr0MiQ2-{P%&qU=Mgjot;JCRiKQNIn8(O;}2Nv6ZkAR2|fmg zzzTfM!0&+5z-z=ugjJFE!23WI`4D^n-UWw&(wqQC!4aL=Ung)JyakSdH^7@fHI~!c z;1o~=)FWzzdP5aa!76M8zFv>02fV_)-cvfI@fzhd^0_obWpG0v>~*DDtwL0LZ%95P z{3$pOG#v7M38?4P(iK!hJ>vC_;uWU~r~zt-DxyZ518JZ0=K@em)h+6tufZiSoXoz0 zzszBOXT#sx_+j|S_u^mZf90z@ui>jQe%1J2B_PM2!4>c$P=+}R_{nNY>{ZO;U;ZLa znR{t+=HsQ&Hdc|m?$;Bz0)Cz*fqX!>$i;~K9q5)>-LJ9Km>vWgDvkL%uogT6)_^?t zhJ%`9sw3@qumt@nkel!d@Fd|yz<@#6%fUj8ziN{SW&qV{I$RV?1&@L$ARWke5|{{v zf-njk2oC_)L3i*l$RrP)fjbe_p4k!Bm0>L?N4PBb1Ka`9O7N#RSWTo_{uE57I9CI0 zkbid;kI}OkJ)^lD+=G5Mj(UQjCmE5T1Sk%QfWn{b6R}7ZV9Ts}Vqr8=08RF}} zwLxW231q6N6$z9B3vsvyUICZ2Tpm_!^+=@x(CSddYJwV|DyRaggZqFgRt@ALk0@A= zW7-gofop+O(rZ(WCY%6Q(K8zfx}R<+5$GXd15h8-1@(Y5j~f%#r85F(qK3g*zS_hd zAg&3}=2Zg7uQ_%zaPz9t?ELG>H}-mDy(j8 z4YW*k!JP{a2Q$DBpyxBnGXtIgQo%Sd3JeAVK(f}q##b*rE*S(;z(Al(q$$&(K-w^% z_z_?v&{7)PcyENS}VL|M$+=HGx=XuBYj+8a| z-^crdvgZ3Dp+&-K`!19^>^Z!!TbbH@l-5*xY%#}y}a^|`B{ptS5a;EYre_wyK za%RCP>}KUmkq_|eQqDC0z~47AsT^AsWxap7+s@Eu_dZKm)vH#kT8*JEXWsaLx=+I6 z7Cgqz7`f;6udmI*qXr%|=%R89KlHcsFD++Ue@NEPl{3dbr0DJC%$FbfkNNkPGvE3{ zii%neyh9)0Eo3yt(BJd5tJ<8k`}o>7*!3idU~zzWV&( zZ&rqpSB)A~S#isVDM`%zTYo!qV)wEUVIfh}zdEJ7Qr^r~+K=#v#N*J)>&GAd{KD#N zk6(zniGP zVYe#=w6e8x^jEvI}4-A`qyCB6F&8SB4Wy0y6A$%a1xxKQKP_p&{T-fKQl?iKEJ`)uel@!O}2|7uyb zM?GRxvle4Qnz#G$bb;)csEVfQS%3A&zi*Xo_kZXa+jq78zIXqAMC_RPmz6igK4JXN zRWmKcRiaG#C(ORID6{wzW@Fy!Ch{D5q3WjXIeNqUd~M@-eRho-5fjEV)-+(EyPn0& zl5_qNwf=rRG-fK@PM6F%c5P1i@2j@4D}~wGrKb5>MI>8~^*{cyvf9b-4&%XWRuL0w zno{TK@cDS;A&=g})5bkC#8G=r6PD;`>h z-~Z6L)1sC0F37`e!K=jNBWA^#;i+;X?;-JoWDS2QsPXJ&tcE`NStZ?1)01TXC{3P z->j3_8`3?$MRgX+eRUmE;tR6zWSiWif5BGmiFNCmtvQ{%23Y6FX?5MM4EuD^tM?>K zeTS~B>2~F^x~Bcb99?HqMh>p$4o~FWsZlTdHZPSFc8m4Jo4MDiSl)Ou^b%Y&-b7qt zZ@XC^9dACy&ph)B6`d7ts{ZOP9v$yarQ)|{_PAxh^!vzF+cJ~wMPf8jzpWqr`q=O- ziT^g(+L24#7@>{z&G+9idk@riH-lOa{Icr(UrR2@uI7jJ%?n>sJ&(U?V0!+5?RB%q zUNhP>G)sRY-ujttUs0SF>GkK{hGxT8^w!yi=98}|{>O&SAuhei`Y9=ok3D#R;%&eF z-q5uDmh7tBZ>p*q&F(iFuEIB0$D692ZX4$J(tEmFa&9QGN`BG!k;1}2{!Pmq@Qp3n1P23Cj&j+`*8Cd$d_82?TwhsTH zlf72OG%-unT88-*=0s#W^3>AJ6E~nt`6jo2oSmoF9=dtx&(zY^;@|ouho3WSo}V|2 zUMoD?wzk&1rrc0aa_i;^71LWEU7TI=CSr;blNk5s1NGkj_|5DX+cS{|tVg*oAB)^p zDp%fYkJC-fzVH9N@BCMrn*5h(Z}DdC^>p>HJ`MAwomiKh@}?g8?|Q~*vDd_KykdG~itf2S+w!nvJO)6Lm?J!NOM>GX%cgt_Z? ze~HMm9k^en{`D%4Ik4)FU2ju=yIj29^A=W@j&4h5uXwTJ9~0l|h^IXX-F!mvF2c1t zneTts_G&NI_5$XV?qAR;vl^$O=Q^30e=zH|b#ilGG3oT(4@?TvNzB&cXeYBz9!0r0 z>!Q=ISAkw{e37~fk0{sWOeb>}w@d!ZolJfm3Uc!uxa*Xg)Y){yj-1HTCEY9?N?(6+ z(dIQdF8E%}JoYZJ_SjJCNLTmD{$9Pdk1t1_o#4|7%lSLPrX@v)#HQ4Wyje1 z>PXV$PmcTl<)Pw-uIBKcIZiN6|5W$i+&0(k-}*H3dT5Er)epM|n+@-@jd-`)m+i9a zWOFesLqbc`+Ju{KT#J46V*WNm+dPb$9mpSOlwt}uEOMyogO67w#$JWJp&M|K$?Nr& zJA{#SySaBum7eW=;pb7SR*}l?cQ;qwOX#s3e6!Ra`tQda?`Y~ddt>u%cT+bsv{>Xt z-pbHz>xDnQ==|e7uWH8FW_X_7y!3LgY~Bl{xFcQ7522wg?eV;NJhWo?xn7(v%)|o$Ovk70S~qN*7GN#D*t};_iT@lzNRf6wZ^2l+rY;k?|piG^*yz9e_cJQYBUeG zY)tZwy6bA@8uWQ~%u^|5snTw=9$6RWt-HPG1HWW@?6onqTE4M$#r&63vtv%An6Fi{ z&+yQKU-|5$0pCWHeLLIZmlRVfK<;@4xgHS(<11|sS@1@-$DPFJB5^o(Thrv?pjWeF zq6V44O550ayz2Y*fpVAp4YEDD+L(_X?b{@3;fGn-F@pw~-K342Y(07v`8{xJ$wEJ8 zdt?qW-z)cLz4CufFF9d#$6&U{9%8hJmflfq=R22rKa?Hw_8=3VhqM>*&~uc0MH^jO zx@q*GY>(?UW_^?7?!)VsUy>bDXt0?{T7SjC=9xU9>Ho#b@RqE1Ct`1!O~qS6Yx}{sV zIP>*=xGk?1db`<}KeSG*-%{QC)wNH2lTZ7xm&!G7edLYodd{>lqdQl>bJm2`M~KnGN%p%%kD4C0QQDeE z&Dh)6W7#1O-bQJ~GTdI-ReNuv#9_NC+S2IJyE9Co+o@Nj4AWFxGs8@{ogC_An1#28 z9@B%~wuQ0X$HUCy>FzwfWq#uh1*e{3Y`i;&>o%s|!H5bEMjYCb9aCtAIaY`@@IhI( zMMZA^yk&)qrdia&K74w4hPxXj6k4BL;`vVFv)g)bhFMye2hB0Qb2Cij-PFX^=s)DP zgmUuHbGP2#jN3nMZpHjIugJeI_vq|}cTkx7bi7Ddtnc(}Q>qBcAG1w^ zyO<=!=D7C;aXV&o_^oiC7o9?Qq8{Umo?`~f(>_tpr6=n4dAZqMB(#=&c z%?qX67V>aCX9h7ow?1ZdQLedD=b3#)nT56$ra>{pE*(v`VkC-~Z$=j*(k;=;yokwP zJhZJRMt-)yJ!|~Za?W>ApOxvKUHRV^n5BB0UnJ9PDo!)2XS!Fg-L*pwy`A*Iui2iH z%bHJ0vTm;x5AB&J12=WKS8DdV2{FD*;>-0zD7BVPI2EM+p?Ehx&u+wBv-91wr$uzAsOqViE|2vrPgBO|?;zA4MBHEX_ z&>SbO)=b`R)D`}#^+{`%zP)T~cJWJ$J0EMz@12_U^zw;*esaNW#yVr}ilpS-*4|d^ z!0F@1uYcy0%uZC(_qs9dBSTxZ^?op5$fCDyos`ki6bPxY$X(gv5>rx=M~w9SU|x8y z#Dvm6kX9?4y{f}v_q;M>Qn2v{Yb)yMh4W@ijL-JE-y=HJv+rU@u$h_<@5)hvS1e-nu$nh&;|-`+5pOox zx$+-I@?Y26UA29e77lVW}DpzFP-%uF*u3nsh0u|BT~)bOTv zs@&<+$e)pE8kG)>^Lw6dWpl1^Z}R{BKzRe=4N&&LFzwp1O-26Qw2Sq*leCCgd^dYR ztL3I!Sys`PcZXK?Coea}%5cyGVlSb-3#8>uwe*lH!*f4=wZTW(Y4ff&ACuN! zezmz;HoGx5>OE_DU@mt$b*sf75N%{ca{V_mq=QYK73a z$bM_x3*p!0o~hco##52bqKwv}9JbaRr*CUbz(beawmXI-zuRnkG9Kz5E|nR?6eOnW z<F&}!MRJaD51oGRRN20o?uo~l!Fo#Ki5xX+M!v>bQm4H8*2eGqd|EGdf9_PBg}_cKVX6|7>>#e+~sSyyXS+MolOE!f1x0`HSXwG)?Kx+sJBc|6eDhht=PrBeh+z z9bPnHwMg*%izZea^^!@cMTTQuGCOO9_KjTgvb!E`>9M5L=aoB^%uc!aWm7kXytD8q zO5StUrq!HUef&kIF-}L0-eQL0;ZNIQrpJ)?yIagF;&NNf4>6$?{da6Lcg3>bRoZ46 z#Nrpd%{&xK+5AS%x>)?OUN)y=@e6D>5w$~C`oG(5Hq@r^;k!)LIN04ui`Dw~3wiHd z?uC3Ptad-JuZJ05xYBUyRa8)Ge)5M*VnnphP2Fqaiuew(#aOFXLj)PBfu%5yW zE^J6)MGm@I*53Tctj{x_=HncmLuF$0A%!P;tcdz%XWrb|F^vwI)})ObgvT9tG<>># z{LIZg?_sRCV(4}&WPz9*PecM_3FQ1)$BNL+q#K8=hwn8msC_gp*9mv+x zr>1kb0E4#p^mH2+pl!9Mfr~bQX6;w_w&p{-y#dfRP)Y*kkDk-h3xFz^(A+zHj|(s* zA_ooE{WFj<1kFcSLe}Cec>j6>nwhXrgV}{A^q>~YB%OmKiTfX>NIXo505#n~YkPpP zR(fu_fE&|`O-x4%w-HZGp zP@4dlP(dmo?i2&|FEB$E6f3}fIVhDp0NQ6}aRJ(mkuK8RoYd+CH3gX9eStEd0lmU2 z0&h9QSs^lpz-}W0&;@$#z%Yi=GOiaP=~y7>q=s7l63A*Pa9WJMIK2j>5|&z0E=}J6 z;-iNoOdfYSgrx|mPCO|9nj+zLLd+CnF=NQOJpCLnt(xIZJ?DX0RuGh~_)C(Gz1;p1 zRLU5EYCr~9IxoKr39lCnLc6%%sXqsXmn9_S0plmY6KHx5Pz5OOuJ8#|T4onzjWB~? z9wD5Im?BS3e*?4y?mPXf(-pjc=?1sUq3(i(`Sdm~;B*4hHArUke9sX&>y6Y##JI@W zYt#3D3>3T$DXbTto>4hJ>k=?|)mi8PQ;q?HXY%w9Kou(JW8w%iB3zh(K?dCa<2qf( zo7rW1o;R})V|`B|q|!Liwdv2{fWT#QfP5}sKs_#L$`nZPyuA#_2bGsgv!lDy+#O}! z1KT5@0z>&)*TIELYRZ!`^T1~SYHz%CTkSgIRL`}LDt^)RtpXb_%hV+R`Jl>U;_aQY zWae~=WCQsi^WLuJ5Gu@lD*d|-D8LI8cph}>c-C#sat$|#Gs|SROZhUtSKfZTh*@?E E0N`BPIRF3v delta 46833 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/+-@*r0EQ+a%U3r_LBG^^kjq8i`f!R@NJ4gjUW=2!4vF&dL#r zVxWrN?m!%a;W1RuasEs3Jx?_p^Soe>Qbo=F`-Yj{aAnot{b_7k?Yy;!QL zYvq2x&72M)ho)GHbGO9BSk1B61na~_U}#+2J`T=uYv_*BY%J}h?jHCamXf&>qUdb5 zQZ$}E?vCY7kM)h?B5ag@ISxUiSSW52JXdPA(mU9aX{%qsi?x;P_9S&woY;0f<7B7-G{yj@bBjVo8 ziazL8&Rt}ku{7AqJud9QP{}0;!9&)=oetp-x&ChI##m~od&{4Mr7m}mHZR*ar?>q6 z`Jt7egkb&o?vCkH%0GI3sN^FF{u}c{Nl=>wp_Pv$1WqpCP!U@5NPHmnVeXj<1s4+1 zUEQ6v=N=BNT$&K9y3jpA=L$u!J|Dv3mikD%|E-0gq-6>IutlMj%Mt=T7cpp|HOu0I zRTsN`%^8i?$jMmvFN+VXAvDq{FwYW>rA}xFA*blTaYCf0I{890&j}46)Lfz9s?f_b7)^Cp3sqS10rwAzH++eoKf=gHVli zs+_d>gy<+j-xDGiLLJwur-%(cLa3Qjr>M@c!Bf()+*h9|8{Doa-Vj>(ctYSB zBHK2v&8t7=o{L@Q8CdRE)5*avv9zj5%C=GCaW~H0DW+nzaf+1Zo7N&1JS%K;w<33& z%KL<8$#W`J|67$ikJbH_75$|9O2MtmOIUqx#g*KYJ(rUY=kSuD+7wvWMaVVgo{ zHzoKdZVr{)oDkfy*`3N%nmyF9QctV|;@s`cU}<}EcdNIpr~6_j zu*LP{=@JdP3oC11n}nqi=QRFCT!eLW51U_X37y@N5WHinJ09-h>T9iB&YgBSmKx$7 z0M2g>o!y!cEWOP=Omi2EjSUXL(wNY<(YzkPQl+^&(7a!CNh*eLotb=C=sTk_jC^i^;#%%#ZLie@DvUO(X31Mkg zxi^AySSrd{xBgTXx`z|tIYZvl^CsgAs8V2^kgOSN(bJkN9Pj=_*o<0jT}%X$K} zch^YoJ#JOWr4u_RmIl{dBR8=$a@=H^aVp&FP71f(6R$Nj};#(9UC8<_KMd_$(-o+V5zTJUD3RX zel>LVrG&t?S9ze|?5Aa4vp2`!0zwUNN1Hj(_Dh-7%+Xt782<-wY+~O9(!MSmRbEd$8O^rETH!Tb9;! zvHhMWH{@VXta#EnucL!ovFc(K3|-n3>%X}_RPv34z?}!2mvVLD1Ct2x@H-|x_$ndI zJLfFu_rDb?`DQ|J+(Br#vgOqvObA?h z+j+`JZo^NwHE`BxU_Vw9XHMrh>8Jx-{lTX*)rmhbXP+_6|_!PQvpoxJFQz~{1@c6E5qeb~qgFYcx2fDJedVT^>x`~!2 z!Mgs8bE0Pe_B)cRJ@1E5Fx(YQIlit-$L*mss{2mfwVx;4N#jFFTi5`Vk<1woK>xKVhXi=1nE` zRy_vu-G-_fmsji`SW*T4i0`oRVg)N&TdZIuYl{`EtUsX(Uli-9Kvn&*tY9^3{~0T) zI)B79tY3E4c+^7ohZ>(M)>Eq>&U%RzY+$*e)w8ptc&lgULg;tfbR88Rn)anTSMIgm zVwK(9di8)cBuQ594XZW-VO@X5iW+3&v$LcWtBbYyrH1)J@$Uznjc5d#qDR`ev9QV> zXL%y5Wj7t>pHGQY*BLS_2jJP*L3kmos6{qjto%aO&c+!|MoVo(c9yh^KVrilReBYC z8~mizH(7nFwYR~##0qZbPeJ%qSn1!e`kR*bhp{!OC2t{!55WcCGq5hPYJMJ81{W=V zYWa$d{|e@x?`!?Btl&5NQP2GwRz5$%+KPWyq}c09r*tXQLJkqIx->5=-+b1-9ae@V zVEIMCs#rx>)1!v9Yr{%kAJ!#S1>&sU*m6d50?MEjtSdV!L0fcnc{f-tJ*?mVhE?%I z{PV&oHl0}dVAme(1XS}8)=JCHT4wd^ENQvb#qwWa?d&XlC3+rsqxE~j`iZsp_xkNUkAQRi z|IbeQoto%lX}-5@MgD)|jQ@)Ts;keEpC-ZuSVQokwJ+Inva_U&Ppspou*UoftPH+_ z`RDsafBwLV|K7&`3syn@w)QpaFP8qJ<)18HxAB%UeAxxX{cIhwvoiX{>SFDuIaCYF zippv2{|zg@T=@Haq1opvb&;9JCKt=T&Dwv)>ZbxWUaaB^Sz8kb+P=`!D`VCYwv_r@E%wV zd@58abY*l9Rs{}O`?%$It^OXYd+9}(f4)!nqx6?8e{S_J zT|2|~H38N1U)JFVSeIC9?l-sz+=%{CMhURGuDP{az^YJ7%dIT8hINS*-v-t_x3jgo zIPtA{Sl|Tyla-*W)w8qe*3IhK`LXT&xGYN$NGs?z&u#ZpAUzH zUjDII=;)6T1y$lQ>*;Xlw;$a@|8lE})iG<84t~_~IvX!m{u`|QcdQBcBz`(eZMXi} zS>-&N!=6G2I0e689mOi>CCjhCYS2C#FV-pUxV6Qq@Y~iFs{-#?`>)xaLjKyp&G?kf z=|$#U|nJb%UL@+t3u_`fOTbOwXB8Jv$OnLT0J{UZ-uT3wSmLz{PUGV5OkGu{<^FL zQQ-gCgTUHk-V~@t&4GHN70{5h1-i2HKMw-wkn9ft)j_h=VgEb`)Pq4yrGFj-(h2T^ zLoMNd9t6?}*&hI^b7cSXAW-{8wg-Uf7}@_k2y{0RXE#xwu&ey@An>0DfqHW2T>tm@ zp9g_-sqRw$JP35B);|vdoqo`RK~0N)9t1kCVE=g#=sghp=Rx2<4+7n-;eH+$Xp8vg zL7<+SaQ*WjP!9w(CH{F3s0V`TiR=#mHAiGi|IY`3yFR>evr5w~Pd&JL<6B3D)?ZRP zss2w@Y9*Gckg>AOXVdO_Xh4Y_y-Ljb@^XP52U^~_eVQG;II>THBC(-{DXoh%|K_6)i&Y9=6f=M6thHOt{_FGF&-5#iKl$6{ zA9~$BZ>ec^YIeoTXUavD?K8emA2aQau;LvK4QRJ=@dICWE8JpT$@0C1Hk#4o_2*7s zsB_2WJk$HNedU`U@~+PF!{V>kta<3%+{K;VyK!`OjnAS6b&ng_u2#|Lv|m$x&Q`r? z=4AP>9wx40SYA`VLRkB-3^SubSdXwwb4E17)VTw?-^>%uG?yULrZUbgE8;xMEUt(? z+k7FKW13Zh=9(3vdFHCmV$>6X7v)NkW@wgqF1tHk!q?5w1(PCgDlb ztPaAax(FNVAZ#{QB_!5E=oXEz#jKA;h^UVcsEe@8bg7H5SHf-yJ4{$TgrPAADfJL` znw=7g$08J|kFd)m*GD)gVZVgkreF-h#5ja;F$jCiJ_%JCAXJP+c;1YOMK~?tl!O;e zR2;(Gh6uCb5MDMXCB(%e)Ng?Bs+rLM;fjRI684!o4H1?%LRi`m;SF<1LYu}2E#ndP zo5k@6*Ckw&@Rn)T2w_tK!p24jhs;$8iA@l?HAXmM);C6oXo?U>KsaW)Bp~dSuv^00 zCaej<&}IlJO%P6+of3*SM<~)1;a!v56yczR{Sr=@g3S;n-i0u(8Nvrs9vl!S98>Mn%2EfHqjg>b=~ln~bnp?(X5kIak~2v;OrmT<|`X^F7BHNw)C z2%nfs656yuXxR$kvRT{;;ktxt5CzTquY}zazB6I%5QcU@NNI;~)$Ei|{BDFI?GgTMlG`I3l(1jIHB+zy!o-dU z<2oSxWcEp@(g~sB-3T|#n7a{9OE@Lr7ZcSHVQy!HSsf96Gbbg)bwQ}#3E`%h(Fx&- zgv$v2urL$dIjp-`-W6qOXO!?T^RbjR_n@@wf)WTbOS+(3mvRjyESG84m25WMi?FdP zLeN~5kk}2O+dT+*%=&u}BDy04?nTIJy4;JfSHf-y`At|igrPkUQo11&G&>~}Pedrv z9pQG9+#TVdg#8kVn1VeJCiX-a*8`!L*(ae&5<4`qZ`O-C zm>Z(IO_yO%N3&Vf$%Nepbv8XkUCd5VR}&l#-D8qP_nPNL-Aus|PS6YY5>1Jb zP){=kGN(t=!KX&j!M#k>D1^CV5N3@+=wnVwh#QMge>6frGh;Nu6$zImB%3;85SFJQ zEFFU|&|H$xCLN*WScDX_cr3zo3D+bHG0oBtHjP8rn1+yQu1ZK8kI*e0;XboI9U)=@ zLSP)i2-9U8!d?lxC5$p*;}M2VL`WHrFvjeZP<#?XkqHQCCV2wFK?(aMj57r%B21i& zFm58k1hY>}nCm~ESVn+$}O(-3Bv#nTY3OSmRsj%hX>VN)i;#_0(2 z%vA}AGZ4CEAUtH&XCOq}j}XX2SYWzjBJ7p0Tf#yUHUnYkOoWsf2#d{53B?~kC~`kS z$Ryv7a8Sa22}@1EnFteSA&i@eV9Y)VRc0epd;npE8S?qA{1GGu*)PbKsYF2zl7bU;KK+L7a@#$7-5guC!xw>go+Cho;PC_BAk|R zO2UgKY7xTRB?z+?A-rr(N{9;~)L)G7s+qAE;fjRI684!oOAwYng0OT6!W-t2gf>eN zT80qzo5dl7>k_U>c*`_<1Yy%MgpH3N95PoWBpQTnOA(Hk^-B>VmLmj~AsjPZmLcqw zuv^00Cd?oVU4f8d5Kfw%5{j=xD6$;kU6Z^V;h=>55>AI7v`#j#0?1D)**al)~`c| zcnl%19^o6)Wj(@P3A-hHXTmlh41F9SWdp)hvr|IxjR-{^L-@BzehlHDg#8k(nSzfa zOnd@i+~Wv8nSBzfJc&?oBfr^9zl0*D;0}a|I}yh1KqzMRNvQG+LdB;MN|-TEBb=6SNa*qoFQ_bNjDml2wn880JTk#Jc;GgIdkgypXxEPVyx zE^|pjn|%l^UqxtX7Qc#cUBWd9txdDn5H`Jzu<Ozi%j*bxCG3{a$%MUuFmyjc${Pq>%uWf#4XNI8x$#_W_({3Jq=w-M4z^4kap zCG3|l&J;X>F!3FPaVHQan0*qeyo*rrB*G*!<|M*t38y4XF;VXz%zY1G);kE(%t;Ax zrx5DDi;!Vvyo+!}!et3FOr7@-mcNg%^gV=`=8}XqA0V_mg)qx3K80{y!ZitVOtbe9 zHl0S;_&&lsb5%m(8H8>hAUtH&e}E8i79nsNVS(v#8ey-5-4Yg>urmll&mp9oL0D{d zN+^CFp~zW;kV!s^a8Sa22}@1Ea|jbJAdEYQV9Y)VRX#+hcphPe8FQYKDvvHit4!1d zXtkLnT4PR%*6ykLVOZtdX5Fu06GNS=<=9grr+9VcbD!qwM`4di zE8+cjApF{HE&j_7=d%jVe+^>B`292YkoJWCkAI7YIobXCLs*2r$Uu|xTG)91p+RQ) zwXlYP-6?!Bdk@+3Scd#_d%x%(K61~uABDZ+ir)W6KqADFZsl%Jxy$2i>ipqZ)mAxy zA_Mt+rSkpU@8s+KF#3&$%=DXKulUC=T$hg_GNsw+SJMC zzptqG+u_-pYgU+%e*coJp4p=k_PiGE&ygcgZ#y6SRCg8Ib1|1cF)Z({UCt-IGhc-Z zC}N>g{nJ7J!3ggMn$5+azl9@zpW7edFZY6)xx^6`<)K2KzGyRTA}z1?OU)ng`v?V8 z`Jdd%U&-rll>4sz&SyC@JMK5N^7+RHt{&hEaB_Or>4>~<@Rje9K40bqxQz7tVS82= z@|Vcas8tHfeZ{z+HppCOUR~^O%qInYzv*6j=Geo&Z?3P@>GEu)@jj@VXnpiCpZD#X z1U;=L^8>3TS&e7IzB5+qWi@@uRG&b0J}lbXirGKc+{bGAc*x^6abK(HQ`bMKbgq6@ z)7J`)JBrWO-)j2E>q)C6TTLI%f6r2uE)tvJX!=EMHRYTh^6^c8~}R@1lJ zcr5CCmoTUR*AO)RIbTR*?3^pr`srg~-`R!?v)b)y|G%wxpA`$^sLwp>8jhxh76Bij zsVhgJ@z44E?0z(LFa#@cBZc!XlBI+ ztYZ{fbF0m=T6wfuXd1)WR;xg`w)OMA7kCF+9jkfY5v+(7Z8d#gP$O0eWR$bwLsqPe zSi)-atyTr?HZ;wN1y-v{*clt>VXIXm{5fG=3$0e2u=kb3MOLeU*2tYR{3yN^Ya%vv zMdv$<3f2NGtQN9ed>7EQ)N1VOzEMC+S>Jh7HqoH6CJ~qR0q4Wo zbuo%rak+J@hn62rvsPb(RO0$TAHLTFU1_x#!k<`emDOU=KDF9vtHq(Q6+07ojnx`p zr|KI(nzd`K*pP6V)gDFTpMJ7LU+{3Q_12GH-0+RJ+6JpNM(adcU5{BUf$$4fd)#VG z&~{lZLtp3QpRXy<7qOgGU>%#G>AOps@tdsHobX($ZARmt)Ajm_l2*YM>(_#?zKEq& zu+?fU3G=Nl{a+8hZLXH#d^BBO2`h)V-8!}=+!`$k-eI*ig!R?43h>ib)5q9j(e8kE zTCE-7x@Z;QXROwqus-{u8NUmSf6gym6MJX4WeFIcS$VZEWH$@rqxx)PoabiJevL}~5;tL=EcY_)sQ)>!Qot93)u zTl2bJMWa#r)g|XUa~l8GtzQqqhDeR|8&*psyxeMUqVdm{(UU)#nd+hg)-j22E*v|+ zZ&|Gu;WVY-I%u`tgl9Sm-v~ofbRY0A6;wr!Siio67urf6wOT*4CHk_C9FJMCKjC{R zSS>nkwPeCg3G31~dDUA3zo=C zcu)%0DZHqIZwSzrnpFGKHt|rx`ubsi_$->zrUHFIR@XVJ4I`{xRRzvl?LNZufy(l} z(K}odV}TVvw2mXNl~@({$ZAioBfwRAt690yzagV6VZH0Dcck^@z1M&aC_0en0CF1W z(4j-dt6)3W0XBfgfX)>9j@^$yXNl|J2KX8L0^S3s!293>a2lKeXTiB}c8OzD;5c|2 zoB$`mJK$aO%_@JXBIgKR03U*nz(sJ$lwR#G7Pvz23)6VDzm(~{+F$SPo7n2eFyIH_ zAO{G5oFEs_2_rYi1Kz}aKR5th122Oo!6xvO*}2+ZR{#Hq?>VpsJP%#~FM^kV-lK0F zF!|Q_OJ;mSFMJDhF!>%_1^)s%ll%aZ@gD#N0gZ-+U-MP-Q>#hml=I*M_z+wK`Xbru z;0^F5H~`)P2f-n57#smdbNKG`9V4(CJO}myeZ6fH*bJTmTY;8!6VSkC&aUw{%+M;; zs?;jfsyhs{(zLR)khE~Rk*+&P1U*3#=neXSexN_lHygiUI6nvLz2aSNvC_0nq45CjTmIG0sJg5LF zf=Zw=C=2u*>DxhJPy`eO#X#|J^TJwx?u=4|^MZUJKhOs}f2HBSf#1PR;6n=oKNG$V zZh&vVx8Q5=DYy(i13I>R473Kd<_yX810{(-zrdn}t%a%0QEr(hy}NSyyncK{^}Ve2$lq;KqM#)%7C(<9Ebu(sK;AiAJEN7H0{TX4G8m9!5bKIS z3K$G@a@hm+f){{JC>tnfBd9{SG+0A;EqD~@{HE{g>n8%P5^fFp&|`f;KhPf}hnc?X z{bkJFHU2v?bXe5kQ1|i$U>49ZIulF>-;&@va1|^ED}e6j`aPM!;BKH_$f*Hp0{!BT z4j_}jWH1#>1Jgk|7zf4!eQb(XE*ZW%2vh|6zGEcN_aJrO?+5w-eOGn`SP66%(7oS) zncx913(N-7z!ab_3l9P7NxM$zX+$A|Ibbf(*IhG#zG9sUy3qsO!M~~0 z51v$ar^inGT51?`(!ViNC zFiYby3R#CYbK)(u+2@F^c>Y z{ZOD~t@YjxXqjq){{(&n`gx{r!2{%VKbQeBff}q0YucV|Px$xvn`vaUnN0-R*tDrh zldbSfpr3sD92^EO0!{qq!5*;PgzfU*o}rar57*6L2GDMxT_G3YCxLc~wLrUuj=N8Q z)r6aYRbVlwhNj=uDh;%Q%mZ`5Y%mKv0JJ}AZKi`UKpP8tb%yifVaXV)$fO_K8|cK= z3*H6mN5^`C>OdQL6etJE0^Nh3!e>3u;Oefk8YnLovNNE|VVx0{fk(g+;EmgS_3Bat zZEw0)YLGS9n%>$y<^b&^nl;)44G2u%<{vU#i;GD)^ zwNu6)0kz@+@Cs2S33+yMUqr@%MB>)~&+!Wm9?Uq$#HsJqq88o%#=GSLLR4t@eZf@|Oh z@NaMtsP(GQA1nP=x_s4p>Wz;y{$48;k$sHRO&Sg_Uaib-Yu?-hzk}bvFW_gO)~Vvk zPd?f0U;m)Jukp|B;3ZJu%ETY$X5@oa0cl}`y=ALakONy?tMJo6X$pedKpv1AXyxdo zc?1Xm^=>XWBPV~9&`Yf4R0ypA@Dk=DoPAm4#a0ISVWm@HYOPm*7w_e%xWf1-ejDN2 zVfj$mj9Y72nG^wDCSIk~3MEp@)w*54%eWMAdR-=6J>sQNfog;*uC&{M?io70Rs)ql zMQ}%0CC<(SDub$^2GE@?NCF*q>%%o+Gh?T}cXU_N*VJZ$ZS@CvXT7|4asg&;wvUcmuo%-qL~RAOU5h%!lBZ3XWLq zGx#z%2R;SIfGY3_d?y7r{s1EI1C7<^ymNoB(fY{NE>V3cLs2 z0q+9USWc(Ghd>ojkEj*u4OK)1tFY`nqKbHhd%dT0O5-)kYowE2BuHA*#JM zBwrH#0$c$a4*5P0)N^X7Dxx0odPnh!Qw7ujHAEFrBR&UTgN(2Eqn4^$)II+K-+{4Y zb`}0Un|;lOf3Wdm@R9Ggf1>}Huk!Ty-7;>H=68+19DfDBfEz#=W-s7pt0}QpF^_-y zlQ=cNOOrhxFOBxIYUI_HiWJqu1-*2>9TWm(h}1)ZfB0VmVo(qluK`;(`GssVPGMo=iB9FZAZJ-BX+1i-&ph6#6&`|2} z43B9toNm-J8$G+Z15^MdKs7Qek7IGd#Xxyb4wMCvKuM z$Vu8*I01Ab+!$^IGD)v3I-YPdSZTXZzVmFS4MuCw0<;1xL33~ykmhlF!n%n@08P{! zu$HejvAePL=uDeeNg%(@*m{ii$5o}teGhs@SN>>5cY!rQyp6}>?&#fs3L66Yg25mK z3{dil)A7O!&TtGq_3Ru6$$U?xz42f$n~ z2Y8ON2|ozt0mTb?7CaxQu!X>@fb8szQ3cfy=}W;QK$?0fNf9BSf|mfVwb@w-4NwC4 zsUQv0N_Y)e3u+<=d-q{*m2Ynbyy(|EBfdRzUiA0y7ag9evj9!A|M|E-tZ&^~b@rTn z**~>l#yOT~5eCZppT~)eu2s7hljD10n9-Tu|4mLzJvW97YYt5xG2HuK%-sxYMYFW- zV6!2O_y3yP+=w|&Oi^OI|Jj_FI<=x}Wz^;t`IlAr>w^9wJ8~O1JZ+*{d(VfxKIwHK zGmk$^?IFUKP??EK6>@hvl6iRDg&0*XqE?*h-Knyf|F*w)WD+g~aQSN3l-a?CF^}RB zTPwO=tva=bRW`55V*(ygcuajHZcMHbD=v8+vA*S%&C?~qi~FCfY`)JQUbIXD-!6O$ z;XAu+Li@*lnERXSTf0_$-~P&``3Zk?lTTt7t73jV>5ukTs$y!tgI>3aS$mdxHLK!|*78cdsug*7!X9$c zXw_wBs$!15<1g+{tYSWU$KSy}yo#y!u0Jz!A}R7wcAoJ=GERN;dv#L8Fe3EE>?-EO zyZ+<;B~{G2_b78i6;u8cwcSn%wI}YIhAaBynp2Pzb!$a4mwc~PF{4jW#+fRna~1mF zY8CVNDawkeYEIM&FJf}N?=KzMtSUDYl5c*o|Cf*5KX`nOFzQ!VQ!TNoY5G3NM^rVx zpQbVM@hpvJryQk9kI3_Sa*nV%w1t}aHdi$d%X5EK^Rzra!LtmW&+XgrOiZE68?!w5 zZr6D{BTKU%mB*w1yjB^2HgofateAP#Okbsa)TW*Bw!iW{GyT)DJa!So%^>r;#0yLFwcA}RE9O`=vz4@w zm+{biytuE(?+=_F`e~NOkJZdYdE}|?)~x-6uy$SkeZD}J$Ia@d@M)%jZNuNR((8x6 z?kU@se%rTy)BEoDMEiF{o9Hu4h+h~IO`%+c`xTz@Me`j@2!=@mb$4Bpd4{QTrmpdy z#q(n(VqQGIzPYUA4;vF2;8~{@gUbD^p6Sd4mgg`$y$Kz2dkm*TQY<|F^TNvC*Xl$H zE#x{JScp--wL1Ah@p`*|SwW1ZI;F~P0VXQ z`iq;KAN%Y5kH{8H&FGKGtXEUB_H&%aH#M((3}-eq{jbArYwrv&0ladiG&4=r;7~Ku zSxGiEGY`x5`1$7M`zwmK9pkZApVBQ%flrCIerE7Rf5}^w^$J+cBRuyZG9w z=WfeNv8T1^{}r|Ly7zc%Q%>FZX=@WnH~&qoyn*oA8E9k9e@{wpOv|=0y}$g=_7}KH zoxBpfx_SfmN89uB;=LMrwr!igUptfV1vQ=8&b_ZCH@w-p@dqCs`=4zLwKMbO`4pa! z^v3hUs^!o0-LJ!g9XqcKTXy6DJax=C@@QahzkCnBndSL;JCjeX`(x|>q}9%}^m6`V zEC1O4{|E6-Z~j%jf2EJR+f4tOdV9;l6W!S)?fk5??Zixj}=Mt*kT^)%&TJxIMsaM_miir8ksdvTZpMh%-+J0+lrOk z)G{mPL}&A@(td-72Kk=M%7dGHb9sK2N4_rH=7`y_|9XX$W1HWZ6=Ro&b`xh9{@XDA zFZ{AEj=!0B-ZINJQIsSU=wS z@|HoR9%iKU|9&j+Zj`wa&HLB1AKDwIy$6{_KQhk;B$^XHlikEbGyE5LR-&2D-86Cq z548%>UwOXjch8i@w`uFLt+n^t$SruNuRA@z_SurB?$uGs9=cvlG-Z_6sYH|SCuU6D zp6AtW#qNDHcpVjy6dz#+5mwQ$7*t<=-w{H#~z08OB#cb>4F7I5cjzvEwo_FDDL126wL?y<*ctB$>FW&geBy}UejM>lIP z_4?O4?0J4xkKEAD9oq|O6JOg=H6aIO+tGinpK0_fP4IH?_D3%V%jTtDX_6f_^Zl<( zXnPJe3BS>=EeE)ZX;r&R9XDqVd4U4-N`l6j0Ve%7hGWA3^Sb!Qfu_Lk{%ZamgG{5} z{UZw(OL1TLF1|BqL8aY|8x#)9kz&f_2ruU^pJFcl&I{e4c<6*09M$N+mt9uA=ntD- zzgBb%FFbFgn5j1zhn$1W(>Iw;QG?z4^X{8p|0{RN!xeLc@zS3O#j`|W%92NymEV5b zblu6{vtoJ=Hoq(FWb3i3VvatwugtnV%VUL&iTi#^r+fwGoXm>ZJ9udaUWA;*foC9@ z*ZZ!RUT^i`n^_LO4PKfVUOcAM5ceh%TX|bt^e-n`WjVwX!;_WFB{L#>P9J}*N>)t2 zAxn>wbQ%sifHle0W$@U!hX!RiEF(rcVCl)7!Y)rem6;W@Ylw*qqh4=YkGW%4RlYE{ zZQd-8mLpAPJYsr`ba#c+=NoORmvh8tdVv~UhX)+KR2%d8vh;tgZ}Q`dSus;anzc&1 zzV z&QI=N;i28=V6M)l)s+#iXL;PTF~xuWxlY%^F)3Lww~yj`jHInR%1wK2=HOO!mYv;~ zaVsuikIH|(KL)@Q|Z8f9K0ZR9}f5sLr1!mtG^=Vp0K7-ha!?hoOiCvIy?)qdgK zF9s%Md8{KwFI&4NoTwgIy5N&pG0%-M3E`wYYCX2JO6@bYN#)g99v|D7;r%zV|UwuizP7Lex#w2qzXE@ItCYz4A zc(MKIWK*tcIETbs;T`>lrkWFok?&7+p3!G+`sm-EU)}qC9g@fJFoFjNi>H|!5#iA> z5!2nGefPhz>0qm|2k@|aZ6RXRjK{k@{?v*iNdt+AuGK(k%S<=JBgnl59-4V$p19x} zU%A9k$HUpDn@%_D@bI^vZeEB8AN*&Yb=;?aqccsTVEA!=*O}(F+~nDRru$rSK;A>W zU%IR1Uh-5|(BNNZnx?rKmIod%>2PE`?<4X4L+1M(TRr*J!b|n=v^#Z+S?2ZJ;T`-P zXPE+dm`h1`swLxlM3-JLwc}wt>${I+1{0%a9vhdf{W?&te={e>DJ^Z5>6?c<*f_W5 zq14ajnTzD*|9+nNS@w;2rq*rL!vCOKi+zRSul4J&6l*5n@V_w&MOL?x|dAm~Ldw1KwEQjs<2d zY5%igUWUUeyFHTsu2$#rH~uEhN#;Dh`l}4%ybL4%x-u&kncIp{WKw1GwTgafk@>a= zd}NU+mmmIYk!ebNWcXtD)j<9&zi%D4@{W92m9|f%Rq4!PMcP|LNl9i2@g6!6nr(jz#^I(DSlK!qC^F)F0!G1a@UqQyU67MW(em}ha znQp&Ld%GLi*k$>C$n-9VrTd!#m#+pIK)57ov>A%gol|H15-7?mf5fneS_L zTvu{lR;_%-Y?mhw=hxP!aTg1P_s`wkxFg|};Z=E{G1G4+yT5KE&*w)MB|CciD4t#; z{bS6s!k9CSxv2UqrvTmQdrp4*5lH12c zbFis9Z(nf4cDk#>t#R`@`j6fBhskBZO*Y<}joV%er9nHMNdSK7$G88xpu zcDi_z!5c1b6#w#_n+86HtrqXg{N=zl@VRrRXpT6aT~B{gpFh0IlcRypoj>N+65%!c z-HoYMGQ8p6q^CVvsa`kz&ER>%``4@A+p_H7mErUDe=#NFd`!vCr6`xlJFFBvUuuKd zTPnPTKX!xpy%dw_(G8|tWO$3*u^XH(QD>ff%q%LyqMIEV-bzl#BS{QjiRA8T?Z0&n zI60Xe^}>rJ+_ur(vB$tV*d;&kM*Ann_ABZf7<3o&m7-WZ8Ef6^l5f_L*^gw!Jh0L9 zrXrE6NLw6_B^8%FcdBi(9$6l?sxiCpsDww@wXwP8TyJ_V%i|0&%Kgpvm7?a?D~{EWXv^)lZtD<+9@M@Vf1<+u`OIZPrCHPqKBW zmwo@J@P_{So6YJd8rx*E`=TaiwR01qKIwaz?SX?ecPd}I&E^CiG2QXdn;<=}hOhtV zOiYBcf#|I`-w+$KZT)>cj&w`V1NrD$yb|a0OzyjMCZ>FN$;dx@H#C^HH}e_uOij0p&uWGrk1YPITgyd1Zd~_5>G1nWsTm*3 z$AX;qpNsp;|9^d3dr*{B6o>s36f@UF#q=8ld>oe3Xfj5+y;!WLExK`8|e9kydrj7mXcfW6zmWY48z280e zoZmg?+;h*p-@!&VgD_&Njl6YuKDAM*4jfITbVMhtG+4^`M*YmvgFe>-7mSlQNEz?z z=urcAW~;8OXZvt=EiI>#1!XiX82XR5^ISLaWKc@p>8(Bv+{t#z35K*HI~`@u2X^WR z7W@bPeg-_rw_Y`hsv-q<@e$e{kTG=0!ztE`mgN!$={zEoQ>-31pDm~N^xy!Q)q25S zb-A4G=!GKHxwEt{1diHPK_fziZ7I&l0ysg-%(8t`5&b!yibUhd>O2z8FQqLb19GJ? zp-g*;=cp$X`u3`%q%hbvppsUG3I1YOCHICn1a79AU0)q*9lfz7Q0@9+C7lB0z(t_& zqZSddU-}86IY^k z^)X$ImAeku zDSs-s7lVRrB}t|PmHQJ7icsMBL1DmCRZETFF1CU~1B(5Djlt;&nY}1_YCnvE_`g8F zHs{?-Ki1zqJERwZrVb^C=n06O`r5mN#p@l+qv~ij#;O+7(YERAh#m#gEUTk~ys07E_HyZ|;kYRP+=gPph-kXVMDfAPpBkC%re zG5dtD%LA9m4RkmTl*-5x4Riz}4Si+EB3w+3Ttm_MJ!u=RmCkbT`lylaOoI-mH*pJ9 zd|)&+sr_~WAMP00ru$M8UBvXnG*GY{TaGu4ME^XKf4tWMN!c*`ZY(!rK zO8Fhi(Rh4zkw+=#sYXG^>`)tbC?@)yl4TQAu5RC>^bv2ISS#vOrv5)_l?AJUo9V}B zz@O2~)wxj97Osl4q)SdK-Fqx-CUs0N1C%yXd<;~Q)WXr)Quh_#SeMJb2f$^SN;oQZ z*ce++r!ZDrfElm|IPz)L%#u|dWfH9v0o_{ZCq^;0RsN8CNqu{e*Fcy6-1JOEkQWpS z`SR1?*~XWGI<jsAxw73WcGpg2PRj;ZLJJN+ncgG)p^kI|3aJ!@iz*xV$<#$Ilv z!XoyW0sZvP)znTR++FM&2$Thp)=nvGK{ziAr?xn`ffrldGmhTl``nUwDpzHWivIro zf#aRid8o0V_{xtIR5XKmqFY|OE@$R7cg}26(IPQ23bnuwH4&b-c?`l_f58fD?%+V~KWLM1; z?v4-2vg))tR{IF`Vo$MVZjMDumupU6Va>`jYt3uT+2&WRi~>KYc<6v}0ZOT)Jd%}X z_8M;8lw-E&thpO3R&xgV?i76Ki@k!oulz>K`?U%MZ)>q==;r|gd?RH^OsLFXhM;A) zq6P(_c5V7{i_T)n)n=^A)>>9&Wz+Eag2=G-0S`XT^WpN=3w{%rygs}z;$N(NDujvl Jds%|F?H|SnY - -

- {title} - -

-

- {body} -

-
- - diff --git a/src/components/LockedContent/domUtils.ts b/src/components/LockedContent/domUtils.ts index edf8f96..2ca7932 100644 --- a/src/components/LockedContent/domUtils.ts +++ b/src/components/LockedContent/domUtils.ts @@ -1,45 +1,45 @@ -import { incrementUnlockCounter } from "./serverUtils"; +import { incrementUnlockCounter } from "./serverUtils" function updateText(elemId: string, text: string) { - const elem = document.getElementById(elemId); - if (elem) elem.innerText = text; - else console.error("Element could not be found!"); + const elem = document.getElementById(elemId) + if (elem) elem.innerText = text + else console.error("Element could not be found!") } function toggleClass(elemId: string, className: string) { - const elem = document.getElementById(elemId); - if (elem) elem.classList.toggle(className); - else console.error("Element could not be found!"); + const elem = document.getElementById(elemId) + if (elem) elem.classList.toggle(className) + else console.error("Element could not be found!") } function removeClasses(elemId: string, ...inputs: string[]) { - const elem = document.getElementById(elemId); - if (elem) elem.classList.remove(...inputs); - else console.error("Element could not be found!"); + const elem = document.getElementById(elemId) + if (elem) elem.classList.remove(...inputs) + else console.error("Element could not be found!") } function addClasses(elemId: string, ...inputs: string[]) { - const elem = document.getElementById(elemId); - if (elem) elem.classList.add(...inputs); - else console.error("Element could not be found!"); + const elem = document.getElementById(elemId) + if (elem) elem.classList.add(...inputs) + else console.error("Element could not be found!") } function removeElement(elemId: string) { - const elem = document.getElementById(elemId); - if (elem) elem.remove(); - else console.error("Element could not be found!"); + const elem = document.getElementById(elemId) + if (elem) elem.remove() + else console.error("Element could not be found!") } function addAttribute(elemId: string, attribute: string, value: string) { - const elem = document.getElementById(elemId); - if (elem) elem.setAttribute(attribute, value); - else console.error("Element could not be found!"); + const elem = document.getElementById(elemId) + if (elem) elem.setAttribute(attribute, value) + else console.error("Element could not be found!") } function revealContent() { - incrementUnlockCounter(document.URL.slice(-12)); - removeClasses("content", "blur-2xl"); - removeElement("unlock-button-container"); + incrementUnlockCounter(document.URL.slice(-12)) + removeClasses("content", "blur-2xl") + removeElement("unlock-button-container") } export { @@ -50,4 +50,4 @@ export { updateText, revealContent, addAttribute, -}; +} diff --git a/src/components/LockedContent/geolocation.ts b/src/components/LockedContent/geolocation.ts index f956477..8040505 100644 --- a/src/components/LockedContent/geolocation.ts +++ b/src/components/LockedContent/geolocation.ts @@ -1,5 +1,4 @@ -import Toastify from "toastify-js"; -import L, { type LatLngTuple } from "leaflet"; +import L, { type LatLngTuple } from "leaflet" import { addAttribute, addClasses, @@ -8,34 +7,36 @@ import { revealContent, toggleClass, updateText, -} from "./domUtils"; -import { mapLocationSuccessCallback } from "@/scripts/initMap"; +} from "./domUtils" +import { mapLocationSuccessCallback } from "@/scripts/initMap" +import { toast } from "@/lib/utils" // Update the elements according to distance remaining function locationSuccessCallback( position: GeolocationPosition, targetPosition: LatLngTuple ) { - const newPosition = position.coords; + removeClasses("current-location-control", "disabled-button") + const newPosition = position.coords // Calculate the distance remaining const distance = calculateDistance( [newPosition.latitude, newPosition.longitude], targetPosition - ); + ) // If user has arrived to destination if (distance < 100) { // Change the description texts - updateText("button-text", "İçeriği Göster"); - updateText("locked-content-description", "İçeriği görmek için butona bas!"); + updateText("button-text", "İçeriği Göster") + updateText("locked-content-description", "İçeriği görmek için butona bas!") // Swap the icon - toggleClass("lock-icon", "hidden"); - toggleClass("unlock-icon", "hidden"); + toggleClass("lock-icon", "hidden") + toggleClass("unlock-icon", "hidden") // Tansform the unlock button - removeClasses("unlock-content-button", "bg-primary", "hover:bg-primary/90"); + removeClasses("unlock-content-button", "bg-primary", "hover:bg-primary/90") addClasses( "unlock-content-button", "bg-indigo-600", @@ -43,71 +44,57 @@ function locationSuccessCallback( "hover:animate-none", "border-2", "border-indigo-800" - ); + ) // Wait for transition to finish then add animation setTimeout(() => { - removeClasses("unlock-content-button", "duration-1000"); - addClasses("unlock-content-button", "animate-pulse"); - }, 800); + removeClasses("unlock-content-button", "duration-1000") + addClasses("unlock-content-button", "animate-pulse") + }, 800) // Reveal image when the unlock button is clicked - const unlockButton = document.getElementById("unlock-content-button"); - unlockButton?.addEventListener("click", revealContent); + const unlockButton = document.getElementById("unlock-content-button") + unlockButton?.addEventListener("click", revealContent) } else { - const distanceText = generateDistanceText(distance); - updateText("locked-content-description", `Kalan mesafe: ${distanceText}`); + const distanceText = generateDistanceText(distance) + updateText("locked-content-description", `Kalan mesafe: ${distanceText}`) } - removeElement("location-permission-button"); + removeElement("location-permission-button") // Update leaflet controls - mapLocationSuccessCallback(position); + mapLocationSuccessCallback(position) } // This callback will be fired on geolocation error function errorCallback(err: GeolocationPositionError) { - let errorMessage; + let errorMessage // Show toast accoring to the error state switch (err.code) { case GeolocationPositionError.PERMISSION_DENIED: errorMessage = - "Konum izni alınamadı, lütfen tarayıcınızın ve cihazınızın gizlilik ayarlarını kontrol edin."; + "Konum izni alınamadı, lütfen tarayıcınızın ve cihazınızın gizlilik ayarlarını kontrol edin." updateText( "locked-content-description", "Konum izleme izni alınamadı. \nİçeriği görüntüleyebilmek için konum bilginiz gerekiyor." - ); - addAttribute("current-location-control", "disabled", "true"); - addClasses("current-location-control", "disabled-button"); - removeElement("location-permission-button"); - break; + ) + addAttribute("current-location-control", "disabled", "true") + addClasses("current-location-control", "disabled-button") + removeElement("location-permission-button") + break case GeolocationPositionError.POSITION_UNAVAILABLE: errorMessage = - "Konumunuz tespit edilemedi, lütfen biraz sonra tekrar deneyiniz."; - break; + "Konumunuz tespit edilemedi, lütfen biraz sonra tekrar deneyiniz." + break case GeolocationPositionError.TIMEOUT: - errorMessage = - "Konum isteği zaman aşımına uğradı, lütfen sayfayı yenileyip tekrar deneyiniz."; - break; + return default: errorMessage = - "Konum izni alınamadı, lütfen tarayıcınızın ve cihazınızın gizlilik ayarlarını kontrol edin."; - break; + "Konum izni alınamadı, lütfen tarayıcınızın ve cihazınızın gizlilik ayarlarını kontrol edin." + break } - Toastify({ - text: errorMessage, - duration: 3000, - gravity: "top", - position: "center", - stopOnFocus: true, - style: { - background: "black", - borderRadius: "6px", - margin: "16px", - }, - onClick: function () {}, - }).showToast(); + toast(errorMessage) } function calculateDistance( @@ -115,24 +102,24 @@ function calculateDistance( targetPosition: L.LatLngTuple ) { // Get target position in latitudes and longitudes - const targetLatLng = L.latLng(targetPosition); + const targetLatLng = L.latLng(targetPosition) // Get current position in latitudes and longitudes - const currentLatLng = L.latLng(currentPosition); + const currentLatLng = L.latLng(currentPosition) // Calculate the distance between target and current position in meters - const betweenMeters = currentLatLng.distanceTo(targetLatLng); + const betweenMeters = currentLatLng.distanceTo(targetLatLng) - return betweenMeters; + return betweenMeters } // Generates a human readable destination text according to // distance remaining function generateDistanceText(distance: number) { if (distance > 1000) { - return `${(distance / 1000).toFixed()} KM`; + return `${(distance / 1000).toFixed()} KM` } else if (distance > 100) { - return `${distance.toFixed(0)} M`; + return `${distance.toFixed(0)} M` } } @@ -141,4 +128,4 @@ export { locationSuccessCallback, calculateDistance, generateDistanceText, -}; +} diff --git a/src/components/LockedContent/serverUtils.ts b/src/components/LockedContent/serverUtils.ts index 2c00837..031dcfd 100644 --- a/src/components/LockedContent/serverUtils.ts +++ b/src/components/LockedContent/serverUtils.ts @@ -4,8 +4,8 @@ function incrementUnlockCounter(id: string | undefined) { if (id) { fetch(`http://localhost:3000/api/location/increment/${id}`, { method: "PATCH", - }); + }) } } -export { incrementUnlockCounter }; +export { incrementUnlockCounter } diff --git a/src/components/ShareButton.tsx b/src/components/ShareButton.tsx index 28ffbe5..3fc9c65 100644 --- a/src/components/ShareButton.tsx +++ b/src/components/ShareButton.tsx @@ -1,37 +1,25 @@ -import { Button } from "./ui/button" +import { toast } from "@/lib/utils"; +import { Button } from "./ui/button"; const ShareButton = () => { const shareLink = async () => { const shareData = { title: "Konulu Konum", text: "Sevdiklerinizi şaşırtın!", - url: document.URL - } + url: document.URL, + }; - await navigator.share(shareData) - } + await navigator.share(shareData); + }; const copyLink = async () => { try { - await navigator.clipboard.writeText(document.URL) - // @ts-ignore - Toastify({ - text: "Konulu konum kopyalandı.", - duration: 3000, - gravity: "top", // `top` or `bottom` - position: "center", // `left`, `center` or `right` - stopOnFocus: true, // Prevents dismissing of toast on hover - style: { - background: "black", - borderRadius: "6px", - margin: "16px" - }, - onClick: function () {} // Callback after click - }).showToast() + await navigator.clipboard.writeText(document.URL); + toast("Konulu konum kopyalandı."); } catch (err: any) { - console.error(err.message) + console.error(err.message); } - } + }; return (
@@ -48,7 +36,7 @@ const ShareButton = () => { ) }
- ) -} + ); +}; -export default ShareButton +export default ShareButton; diff --git a/src/env.d.ts b/src/env.d.ts index 9b73ba6..62cde52 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -5,12 +5,12 @@ export declare global { interface Window { - htmx: any; + htmx: any } namespace astroHTML.JSX { interface HTMLAttributes { - _?: any; + _?: any } } } diff --git a/src/lib/db.ts b/src/lib/db.ts index 9583650..a3beb06 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -1,16 +1,14 @@ -import type { Generated } from "kysely" - export interface Database { contents: ContentTable } export interface ContentTable { - id: Generated + id: string url: string blob_url: string loc: string author: string description: string - created_at: Generated - unlocked_counter: Generated + created_at: string + unlocked_counter: number } diff --git a/src/lib/error.ts b/src/lib/error.ts deleted file mode 100644 index 0896785..0000000 --- a/src/lib/error.ts +++ /dev/null @@ -1,31 +0,0 @@ -export function onLocationError(err: GeolocationPositionError) { - let errorMessage - switch (err.code) { - case 1: - errorMessage = "Konum izni alınamadı, lütfen tarayıcınızın ve cihazınızın gizlilik ayarlarını kontrol edin." - break - case 2: - errorMessage = "Konumunuz tespit edilemedi, lütfen biraz sonra tekrar deneyiniz." - break - case 3: - errorMessage = "Konum isteği zaman aşımına uğradı, lütfen sayfayı yenileyip tekrar deneyiniz." - break - default: - errorMessage = "Konum izni alınamadı, lütfen tarayıcınızın ve cihazınızın gizlilik ayarlarını kontrol edin." - break - } - // @ts-ignore - Toastify({ - text: errorMessage, - duration: 3000, - gravity: "top", // `top` or `bottom` - position: "center", // `left`, `center` or `right` - stopOnFocus: true, // Prevents dismissing of toast on hover - style: { - background: "black", - borderRadius: "6px", - margin: "16px" - }, - onClick: function () {} // Callback after click - }).showToast() -} diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 365058c..4267189 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,6 +1,23 @@ -import { type ClassValue, clsx } from "clsx"; -import { twMerge } from "tailwind-merge"; +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" +import Toastify from "toastify-js" export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); + return twMerge(clsx(inputs)) +} + +export function toast(errorMessage: string) { + Toastify({ + text: errorMessage, + duration: 3000, + gravity: "top", + position: "center", + stopOnFocus: true, + style: { + background: "black", + borderRadius: "6px", + margin: "16px", + }, + onClick: function () {}, + }).showToast() } diff --git a/src/pages/[id].astro b/src/pages/[id].astro index 28cc2a1..42a61cf 100644 --- a/src/pages/[id].astro +++ b/src/pages/[id].astro @@ -1,42 +1,41 @@ --- // Styles -import "@/styles/globals.css"; -import "../styles/locked-page.css"; -import "../styles/locked-content.css"; +import "@/styles/globals.css" +import "../styles/locked-page.css" +import "../styles/locked-content.css" // Components -import Layout from "../layouts/Layout.astro"; -import ShareButton from "../components/ShareButton"; +import Layout from "../layouts/Layout.astro" +import ShareButton from "../components/ShareButton" import { Card, CardContent, CardFooter, CardHeader, CardTitle, -} from "@/components/ui/card"; -import { CalendarIcon } from "@radix-ui/react-icons"; -import { Separator } from "@/components/ui/separator"; -import type { ContentTable } from "@/lib/db"; +} from "@/components/ui/card" +import { CalendarIcon } from "@radix-ui/react-icons" +import { Separator } from "@/components/ui/separator" +import type { ContentTable } from "@/lib/db" // Dayjs -import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; -import utc from "dayjs/plugin/utc"; +import dayjs from "dayjs" +import relativeTime from "dayjs/plugin/relativeTime" +import utc from "dayjs/plugin/utc" -type Content = ContentTable; +type Content = ContentTable -const { id } = Astro.params; +const { id } = Astro.params -const res = await fetch(`http://localhost:3000/api/location/${id}`); +const res = await fetch(`http://localhost:3000/api/location/${id}`) -const data: Content | null = res.status === 200 ? await res.json() : null; +const data: Content | null = res.status === 200 ? await res.json() : null -dayjs.extend(relativeTime); +dayjs.extend(relativeTime) -dayjs.extend(utc); +dayjs.extend(utc) -// @ts-expect-error Generated is string -const dateFromNow = dayjs.utc(data?.created_at).from(dayjs.utc()); +const dateFromNow = dayjs.utc(data?.created_at).from(dayjs.utc()) --- diff --git a/src/pages/index.astro b/src/pages/index.astro index 0edce8b..b957874 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -10,17 +10,15 @@ import Layout from "../layouts/Layout.astro";
+ class='flex flex-col gap-8' + id='sample-form' + enctype='multipart/form-data'>

+ class='scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl hover:underline'> Konulu Konum

-

+

3 basit adımda fotoğraflarınızı ve videolarınızı yalnızca belirli bir konumda açılacak şekilde kilitleyin: @@ -29,24 +27,23 @@ import Layout from "../layouts/Layout.astro";

+ class='mt-10 scroll-m-20 border-b pb-2 text-2xl font-semibold tracking-tight transition-colors first:mt-0'> 1. Fotoğraf Seçimi

-

+

Aşağıdaki butona basıp galerinizden bir fotoğraf seçin, seçtiğiniz fotoğraf yalnızca belirli bir konumda açılabilecek bir hale getirilecek.

-
+
-

+

Galerinizden bir fotoğraf seçin.

@@ -54,99 +51,94 @@ import Layout from "../layouts/Layout.astro";

+ class='mt-10 scroll-m-20 border-b pb-2 text-2xl font-semibold tracking-tight transition-colors first:mt-0'> 2. Fotoğrafın Açılacağı Konum

-

+

Haritadan bir nokta seçin. Bağlantıyı gönderdiğiniz kişi bu konuma gittiği zaman seçtiğiniz fotoğrafı görebilecek.

+ id='map' + class='w-full h-[450px] rounded mt-4 transition-colors ease-in-out border-2 duration-300'>
-

- Seçilen Konum: +

+ Seçilen Konum:

+ class='text-lg transition ease-in-out duration-700' + id='coordinates'> Henüz konum seçmediniz, konum seçmek için haritadaki bir noktaya basınız.

+ class='text-lg text-muted-foreground mt-2' + id='location-selected-confirmation'>

- +

+ class='mt-10 scroll-m-20 border-b pb-2 text-2xl font-semibold tracking-tight transition-colors first:mt-0'> 3. Fotoğraf Açıklaması

-
-
-