From 282c93272424a2acce5e019aeb1a6c3f1deb425d Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 4 Mar 2024 16:51:40 +0700 Subject: [PATCH] initial commit --- .eslintrc.cjs | 18 ++++++++++++ .gitignore | 24 +++++++++++++++ README.md | 30 +++++++++++++++++++ bun.lockb | Bin 0 -> 77811 bytes index.html | 13 +++++++++ package.json | 28 ++++++++++++++++++ public/vite.svg | 1 + src/App.css | 42 ++++++++++++++++++++++++++ src/App.tsx | 35 ++++++++++++++++++++++ src/assets/react.svg | 1 + src/index.css | 68 +++++++++++++++++++++++++++++++++++++++++++ src/main.tsx | 10 +++++++ src/vite-env.d.ts | 1 + tsconfig.json | 25 ++++++++++++++++ tsconfig.node.json | 11 +++++++ vite.config.ts | 7 +++++ 16 files changed, 314 insertions(+) create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 index.html create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/assets/react.svg create mode 100644 src/index.css create mode 100644 src/main.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..d6c9537 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d6babe --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default { + // other rules... + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + project: ['./tsconfig.json', './tsconfig.node.json'], + tsconfigRootDir: __dirname, + }, +} +``` + +- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` +- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..bdbc33f615aa098e4489bb06b3f8213623d364bd GIT binary patch literal 77811 zcmeFZ2UHcy)-Fm|WXVZHvIv4?Q4tVCa?VJUoFxZAK$41rC`ob>1tm!mPy`VqBcS9g zC`d*DNd{h((C4oEzkAQd!@F<1H^x85F1}UW^?h^Jtm^9OUTe$7!sqGk#%FHl#AoH? z#cb~BLf)5k4!oX|XsSK&XcakRIR~NCPoI7iV`53wL*n0uUUm zX8|Mx=w#;PY-b7LaX0t0bF{?p1f8G&$ISs!0#pS^1yF47IOkrSdha~;-tlFk-FAZj zX+Zmiy?P-)T2N2eJAMNo)OFoEe;FY3r?giW1_=4A0AV{~fYboDK(H{5PXOWh&b@jy zK*)avatuBO#sY->wsLp0a{>bs4ao3#*d9^=GOP#e)$2i>4AdR1yqo|PS^Sx|-fm_tEL?w%fYAZ{ynS5GT99}HzMiJ@OBcNaG+;Gqw+gX7!?j>CSL zSvb4FfoKKCVg44`c8`~XI`}Wp(%Hhp&Cbcn(#qV^2DH244!vVwB=VHFM_yvDkHsG%%8xXek;$eUJXE)udBSf z=l~F2=eT^k`8y2S!+E?7k`48*ftX<30w9>efuHzy+mQ?I_G3d}7bgIMOCYcrAZ(up z5UyL%dv#xckZ%DH_FHMMeg+_L8OQ?=#>)Z_#;3UFH~RGMI;IN{@|^%41DJhgx1GDy z6)!6{3=E;OyK(uLIXc?8dte~>K(0GDZ_UB{baym!hvR<5%FV_K^ubYNmq&eW*S{e^ zIKRx@%q*9!xVucds25-L|`> zZGHdCz!=^Ax3O6Lu7U9v1i5FP+#&7j!*$X8lWk)7Quzj`ielYEgrLZw| z$6$v)!xV@~C*KR4{Mq)C!B-7)%C9$20#C!*Ev&`z3`fCP!5>|+(-+wB zzh9Jo8-DLsN(CGF+}W?!)JVu~y)R`)8S~HFpv3j~VCmSgilvdXv?Q7F{`d2pg%!dh zt?X4)G!(}75`)j1V7=;D#veB_>u6n2#t-7|&2oG1P-5hMTmE<1<70l8)tHX4*7b#x zv58;w##^m8t=wLo8C~X!Pkx@e5;L~Fc|DNH?~zW-o2jTLl(cdiF`^4>_IH!Q!ch6P zm&wmv{qn$LB~xO(%ADpW0VxyJx})jCoxZ3S7q}=mg)qZEWxmfOV|dFstClBgXY3}y zk@E0qfc+9a`-kBWYgvH@LvQR}h&?%ldu6%~V@dA#ES4lOt@LbKp;r^XRMO=NTvDtw zdj6N)vla%2x3>i}TTfeQp6}v5%0QmejHeziJ9DLOZ0vPvo?x{|I(y(r?i*I-+tF(& zhGf$+FSG-%JtKRvsWUjiO~It(%fLFpR!hM8!T>X6Sau`bh1pB7$c;*|_Ueo8XK>Cb zqkP1)q7P>qesPfrDeitOJq~UUXxz;i2Qq|Z>24fgW;rG zS@~F4q)WZJbz_ZG;X{);?G2B;L#?NI)jWj>QzwQ(@jeOhk>Z;(MU~FYX*RYDSY_M4 z)#u+Jj3~dyTT{s^CCK^V4Tb3U%gWJhX*a7bKKVtGO)_mqa^$&&yPO|orn$*Pj;=JdZUpsxn++WbKbhWk9)~4yiva)M)kyK*BRWri3DT5sxeqKMwljdj-kN4P6KR#JEKiSoT z^Cj-IQ$pdP-!rUh8y?h&S57dR=f;|=z0Vl$DJ*BorE88N7`;)Hca`fSyGv)=Y%XzSN&3C2*#<2Bdv{(%HH-q@4qLn9^m+Dq_{M{ z{YvCUmfDK!laqQwS`>5rlGNh~=U(Ic6VB=}NMuB8e{g^OyH`_;pz~7@zcP){fK0uG z#XF8wx0n&zm&BKbTUGh$9@4eeQ<=LS6PF|+J^TJrZkNJZ`qX!|SQ5z*#S0w7fsIDo zcW$0IZ+`m>36Ak#*zw=z4Z{dRC3@%;yPD-n=$Mq=P_p5@KAAius&iP;Yf`bBU-hmr z=`k5?iMW$S?+&T-7(8D-aSQK6no3qljwqA7iEp%`Qn+Po@vEVh@pA%7+DC%M^TkzN zd>C%ji6Qgse3-_=t;>#nG&uSUsth45Rspl#Zu%2BY6b7T7yIdi$IA0aEi@lzENq&O zUZ%u9mB(`F;r5N4WAlfY>4<{a1t-FWJ&ILZ@!enP^3mU+u0KMa7a2Ae z;(WuX*)&L*aIP%*b^pk8R?-#K(}#lHRl+!C+unsxs@!2Xl0KVP#mso&!+3p)VYZLX zq1hW&`o3~$1!IoeraF%Y=fdLIqMy9`rl4w^dq^VWsYslQCf!Q8AVU67MOSmoM6g8}XS@PcW)>DSj=H3#S^$u$J3y;?9XQ&mXbcv&n zefs*=-zBBLy?Z6TsPBj$%LTbtcHbn|nwDo-fiAU^y zA>>Eque?pZ^hKjh$8=$5`@Y$FE!6<-%la=&;;XgAtz^Qss7r#{?{IS)xcKCMZW>ap zAlH@q+lJw`xMkbIk*Wn2_mf9DK3BUWM1CK4VqAUQJ8(>-xxHiVh`I?cp6WGkmlI1; zX^|VQHP4>P_beJ)h^nZsw__Cu3#-chaM=6($s^S4t=j_`MJ|p-5wpf8UfcZClK=@a|2e1_i zgmv&}_owV92!#I{d=LhF*nhAO+qWV7U_dlH0Dlzl^$);54H9<{|51RibpZdL0pIKZ zd>LE}4C4dv9|FGB0r+@$7#Noiz_&gizX9+M(tlR`gT)^N_y?JPLx8V$fcy!7hYPrV zz-u2Gm`?jL9u5@_z&8T? zgT$YCK>u@qe~|tQfCu1%#P0?82g%=Sz*jjy{ttndGzamo1NdqO@c#(#4-)@3z(2_N zodqwa4$}W1z(2_NHy+SGDR{|pko*||{z3AW1^7w_82=@}KS=)1fQ|b>`X37T2l4+7 z@DDQnj9}4+_a7Xv_9OQYcrW-TL)L!-z&F{;KfHfJo&6ZXZvcF_e}?y8@G5ZMhVWCs z`+68ZBqGQ5BZ9OY*yDq3;2%Tw5&xut@EK|TNB$t^Z}|p$e8?pL1&+af4DsI$`0}9t zNFC|NKWQNC>A^!6e13xM;rRV+{7Qh2P=a!{Geg?|m21Mf_+0KJ@=L zxq})A|K1)Si67DbCq($~03YW6KaC%Uaku}-`uR_Ok@JXuS-^+=hsXCj_h4Iu9}4*J z{)_Z~zZwX?5AekRAI6UygZlquNLvc%Ke8fL85BBT70Px}bL-_y1 zL(U`q=K&v%AB-DbLw_6pah6^G$hhw}4#dAD;KTI?@?rT~eiGoz?(rcPi35E6w}$xt zxaS|K|1F<}bvJ(K`)}4D#GfwU!|NAv_v;&W4BV6-XG2#7{`7L;dcVQ>R$ff z*zY$6gwMdXd;dh@M~?qf3`jd)z!w7k@c{wuJ^$8!0pLplKC=EGy8HFNz8C-B^c`v= ze)x}JV5kHC`@L?ExDb9I;KTJ}zy1EN{7S$V-184L_8SM{e-7|Z0zRz6xq}=>{QU0_ zX-C7pd;P=wL)&jZ5WYX)!}yUpg1c(}`@cxLXa9x&zi0f z=puYiz=!uQ$p4!hBK%swmqHuAzs=tv&fWDF$^Cx&f%umPd_LeG7sL;~iukhzBYpgL zi0~f+K3u<{Us(P&{z1S;_8%~Rf6FI7vAcf3SpO6MW`J)5;)ng&uW#rJ>3=og!}sry ziyVXJ|H+WHhqy2>B+&Ty|3ut7kMKj5h&p6qtF;*E^| ze*2E@UjgtHfPWZ2Aw029L*kDHe9b-n-{b({?*P8R9v|L=_G<_~20Z-1{VN>1|AfB) z`0)D|WbPrl{}cz(?hM$x=pBF`c|iUY;Hw?L|0!_uK-Mofen`Le+yC2uZ+rm%(+Bh~ z3N{~F2k;*W_;CIGPse}!fc^!+_>zDRa|inbaX*Iie+Tg4 z{u%oJPu4Fnuz7~-|KD(7e29N9z=!+4zgfG{`T2YP3E)9se>;Ds0bdsQN8FpQ|Ik15jU4|c1*F|P;DbxxU-|pn_)mhthw&rh|4)9A^N4?I zz=!d}`hI;w4TS#)@O1$HKV3h!4#*D?KiK;J1@OTT{D~iq;om+#v4Z5m^$VFlq%b-A zFeHDrfDiX?|7rdz0RJN3Qvjb(lX4%vVH3pvHsHhlBYcpKeHp^n1rN{2_aAWnAnU+C zi6Hz4z?TC4VS6%A{x<&|fG-31Fz+yj@IJ6#gYUawfiXiqj334T5xz@-hP+dO`GMLD z@E|aVkOLl{|JeVV2;=43^ZUO-T5t}`$v^i0XN2P*2g-3!uKelEF2dtZdv%Dopm^-n zA;P)k1qy8E4GOe>hp^pMP$1726lnhrVf$-;TK&%mkNfQ%|91%6`R}!Z2vZD zKnnx~9uL~X;5`fh2n`}U9|{Vb54ZN}VE|!1B0+%$5w^PrE5OhZ`iuH=bQfW}=)L;C zL)b26uN_3_|G{1zB0L|zSBD7wB!U8uCxHSDBCIFxVG2NK5TRZ=DDZp+D9|!Mf%QyK zprIqw&jJOWe*_9Nh_L>653>P6gNOnp7Zi9t4-{zs4xxSlD6oAYD9|9n<3*srGv0)*fyHgoch#?V(tkndp9UO!-@C*uwm}$qD!M@LMRK_kJmIeX$oB-6HT@H5pqG1 z#@I-akxrWKgjip|VQRj-pHKZaa3Wh7+ap-@eMN%frrep^=j;;*$~i_dxV64l2%LL>S$=>0KHE8kS06tf zFD!QM1V0V4GhWy6A8Il2{2VHz%d8Gxz?aEUqhVSx-petr)m=!3c%xuFLk&-mK2wxB@ef5ePwD zm;*dS6d>x$5p4hK>3kJKm?A^LR`(tkU#Vkyzx+I#zcu%$<;%}J%dZ#?GgjhkGF(bb z-TY*zd@pf(OyzXH)w_%op$D|%7x#4G{Dpfg#8CC;U)BZi^h`8!5dSt-ojw*zy<;JH zokSH&_2!H(=lB`E&hH)mBwo7sH5g-5jS=Qu85inQGFFA=mHE#)^#uI_LQoPuvm@`H zp*D)=o3SjVjiK_W;D(fQl*$V`t5U1vD_oNv$=}Yc(*!ZAnkAd!e6LowP@vzLuWgOF zY@|-vC7C(g&NM9fvMyvdzq`8V--)7BX1i|0saB9~JjuG}P!S+Sz$lb|sjJH69TQ2m zehFXne2{RMNo-e$<>{8%%PS%^@;c=Pq5##x!^%HSX2+HARO`tD3_-EU$TJ!M_eeo@H}b>s1@~eNorG2?L+L zMEM!EJ4xAlx^Ud!z7sK&YsdE!vbH+U2@)*UUFIL!y#H|a*HvtONmaTH5w&WbTH(zb zT%}lUa(WoY#oI&Dz#%)EZN*4(O=;R@Im39@ftZ%#>e zyh@mw{alM!ELVbxg#NvNz3O$!KJQH_KTDv237!&Qyrk&54*3!mSKXSIZa#<(AEvm< zJac_B59W;`=}E8SJH<&~3_kgE*!a^ryxP-+ z$$;93p|)~P4Sd)c2xuEZJOp1i_qGm&zm-WYQr=m-XsR|Seq-_jidE1w1dAw(Cxw?Yi{ ze*Hq8)9~i`+GqFg3*PEI)5aV)Wkxa5poLv@K1sbo;k*u0mAX5fRixmLLK+U$_;X}h zC$6dEtv%}+ArtVs3w5AwAV5l3*)!C!uiqYSnp_(4^)A9AB%*qt6wLL*X_U-onoTGEA-;?}egqS2#ivjtzjPm31Kj^WitE^k|4mZ_fK>@;jGSaV;>;2ZXN;~FA{ zIzCa@kSkicdSOo&D8qm2@n43zT*zZJ&LFMUrCKCU(NPhV6+|z)MW?|q+Qi8_l0I`w zugu$Qg(>VyMtL(&XBnTi+qE^q7@1=)?@(XDGFxO90ZPdFOY<*PFn@o`lD{==GZg5+ zds$Q06Dy_R@VrUewe@n_)bDjR%tvmoBugfm9P!1&qd%YKk?T$Rbz2{^g!47;oKBY~ zR$+J>nl3H6ZdIJv(>oUkV?0ObS;-i%t}w{mWW;q>Zln2ac{?IVfY-Z+&Y(1>| z5&Uw-)*{Tm2pF9GGhS7SCs1coN)yT>AaYr?NmM1dnpU9sJQH4HNFLz588KAv z&y2#*w%BVg=g*eU8c>q#2+9(aQ8zKVwee(qVku6={t5mmwU$?uwQPo^+EY4OvSYFh z6^YXsPRC#0YA!zpCmN!A1Q7*@@;PRgeTI}JPlLJkxz=Njz#UrZ_MZYcH!lo(3h=8h z^aUn;uMb#tb^0DR&QLPLA+6CItXSJbjB9w~X3#fG&LK2idURb|lzs3s?hJK{?li(` z!maCuI8~C{pPjRB$4XVE-0r&KZFA^aHBH`Bg3Zt%*%?7vmm}|V+jdskOl~IpK8*j- z>5nc3ejvc3=(=j!g5u0|%?(4MzV5ge{Abhz1m&a5o}(-=Mu&S!#H^F^D5=ASSi?UV zaaTMzhRLb*NWWR(MVxlnU6B;8K!2!(tdk7rx?3@!b8*M`Cod<{1z9Snh%&C9%9VHc z)^PSsX;stQJ1n1Qylp#yJeLPIiU#8N0|>ZcSaVowmQ*+fW!^15JG{Fu*}ab8Js&ZY z#$g^gJ%u#0XO}xFv;8j&-Z*^b?6ir}?X!1o4tQ(NTTm+n;XPKV{*;xNDa0Xj;d88m zg2w~zQM^?zfk1+*Ha$QHT*CO00GSX`fT*KSTHYM#TbU{#Am|d6uy<9N)=1FOAe#L0 zNbJyB+exMn2SU~h0}JNQvNpvR*6vZ$bj@#GmWsq_<>WnC+9?m;%|cyffUqEjl6g6< z%%o}1x)x=ZyxuxaJNaw;S_JWMH7a5h`{l`@QA!iCsK_!wf=>nWIIhoLOL3k*x}Ba7 z%DK_wVrkYe<_v_OF4SW|L;<443@t9c_@0GjN?jE^ua)&J_2cy`Z%$Hr~X0%6(r?>wrvH!-^|4duSxG3py# zwF`dhHyLC9qYJDuZ~D(e4>`7BA;`L=m&w_fLmE8dq* z|N7#)bVK;6QQL>tx_ssC#kIeGjy)XhEle;I)(l`;AV~j#rptk@%ga7$M0|4OPL!<3 z%L0>lJ5x%9xRB!(T!3-_PsSv^xXXe!8;BcQIP;C|!h{5%NnXe2{&DjTK` zFO-7UF&sBebX`^YBcJT&B`(J@TR-TGTxxm$0X0LZ>4#Z6^kQA!l#PIgJKwkK>NEeU z;&nES_Y-wYLg5jmME)0vh`269#kKFQ54-yZcugaQq6q!e5)uAFYusaHflfz*TX#IFcSFc`8YicjWMJojg6sWb5*B7FE&Z1)`&>d%FYd=CfZQ4^1x zscuZy;$h>FO1}8mHF&!*`MlEH&9P~Pduk2FKX!_L#!z!|GPoYao57xUiqR|j`J21Y zTZ$A9Z=1H-)9F6YfY&kHKkz`oJwt`&Qs2*SxP6W?_qUV67)_6k+xn+t;^5HZFi?no)R(#p%ZMwfJf3bXAoRpab_iQ1{Q|Ky>jQGAiPl zmMJ$9-OVbxmtelEKjIeEm`RuegZ~xH{F{Q3jJ8T$fTF zo|>WT?an1(my|TZWU9oJN&3EoH6N=U)ozkS!`OQ5k1mK7=<=iMO2|;3GH3O@I{4aq ztD^v0!u`rXki=M`OviNeM&9JjuWJlrw|*DW7+-iwM7BfO$gSZ0u7z^=@wpncM)f

OWJl%zi@;@Jyrm9+kT4ZR+4zCV#f$BN0%?h@;3eQ=Cwl#A(dSB zn&QkHhO%_~3o{=Y+ArWlXODe_}wy)j`ka_V|S4}Nm{-8cv-62ljg{?4rQV&%I!|xe9CjIF=MCx=L zgwS;#d!`iRD}Pv!RGL@m!hDS~j%j^*OH}2mjp~|aUBDy5ffrP{Uo(G_SUpXBKK3Ds z^pNMEo~sdNiRB$ZpN#h$hG@Fb2VyAF)CSXs23udJE!!NzK7Ok?$}KuclKaY*;_man z+EXP0qgpv?+5sfDSj=-qp2olFppDh}oTHUB_eQeni-irzDiA{UQNoBQK$K@%P2z%$ zoglqDjc#!Gi(b{pWI-0wcX2NLS8j{SFJ-;6zOsd-=#x% z8&ujU;x@duEyHPA%;rJ25ex&W|oaI!rcKw&FPa22SEURKCMSl)QDPIp^l< zyy@x4)us6nN~X#Wynf*ri?nvSxG6+76gg2BkJr3njGvBT|SCjoa$e6JAfuM35>G7x`!$K%Lr zmN_8i4TKO~QA89VYO8F$G640tICP2W%jo=w(hsuOxVlGod|RDKE~T01J$tzz$`!vd zWOsh<7#YvdtMSZdTax5Kx5y@&^pq>?$aeRWyVnK0rV&G#=*4DsI@Mau-F2k3lODu! zYE#G@QCwVwosK{iAH6_PA31Tz{^Y;W6qTHFisc%iT|Q*PUHm zaYPg#szwg`e3^chHXYB4E$QNW*`$35q35P^X$)v_PwWg&%~?gu=3Q2(?rgOq$h(@P zm8;qCw0SroaIsg8Yk=Wo|1{7*@^Btqw>NBIkh}fcnJIFn4pMKDNa_b754OG%7c3J> z5Ax~x(NKon4luf;PH+9GEo7QZriA7Mt*1wTvqm!UF3R-;>D zLhiK}aweHt)I5}_S9`UX{__k)vh&Ui1xq&rSDo#LB`p6CnPWd|CRigXxo*}w3Z#(6 zN;jXWXncJIO;_??svr*{78k$GROog~tuyw{E2dxfh|4UV-xv#4!xwl_DR?31M2NG; ztq&ef3!(Vk3fJgxl9Ng7&-&0C`^p3gyEiH;q3K>g*X4NWJ4R)WB_@1IfWKa+Dm>sf z9xJzq#S3E;#=F#Bk-9apk>tAgX}wjCF9MRCC~=LGp{@Z1qZezqALQa-hrzu+l3yuw z-7xNZM+HptJ%2Dcyk-0Cnj$ zDn09r0VB>G*C4}rgPUP!y6~MMVyItS%M-)=E!Yke>vy4G9QQN6Xgn;}Z>I%J&AU*v7;VK^L3k(~>Kka(pLQGlqi&@}Z$N&%Cq z&{4_6=L_5sNl#T5BUz@LsV-X1$#p%h-sFg%D3i4F$4IC5s9=aFjI}dF9g)CdXJH|@ zaYF>o0Yp~@UAHUO;;DyDO}QXp!}n6ubz{M@>cTiF=|eO1whP-2mW$jX@NF^4#K^Zh zd&bUlX=Z&3Ewhp=kdYYBoN+T1&0;~*l||RZ>6>Yry;ertLFaVi9*dm8#Vy{CZuhi5 zkGp+pEjZG2ax`Xqhn=&$%Db}{mF=y0x2`bmY&LEz(W?c{d|j?>^mygab?Z{}OS^3w z9^58pm1T)tIV78qZH#k*`8*Yq!SR!62~U*kl+{BDCMLuckK^Dn#?FZeX}H-X@Xm0{ z3R>azK7%<$@*t0{ySl9Vbb6TfoZi~!0R6(q;l6yz=gDBirj+F!51hMAr_y#5xKxV~ntbrelk0bQ4Rj2VOGcgvf=gk0WlpP0(HpDJ=~ z#T~W3elz6vhKGxIu6s~hcWD;E{4K%Pqm-8&nJ3DT9aD_ z#e>1id4_VBnAL<@h%UVL5JM@HBx4K`&#Ux?hrPA_EzUEgAQ&J>PelJNg)?7Kkb=9Q zX!HyFEkn_O(g5o5)Suf);4Ksh?(gz=Nu?`jPiaI0`q3g4<)FD?ChDT7I+f5wNym>KKUP}{I&ZBZ~ z_xWOX{Z&EN{cKdwxx#JRJePwvI)0mRxV~Gvc`zcXoPTSpqBL}33QN8JCknU9IWAUd zysM@ryY@51Ld&`8;X`SWX4gLdyo?sFD!MMkhoX$7M{ikwU0QOzlWQdSE zaM>Kuk2sl8JTCiJ!hUH^?w8)4!wi4L^X+qAfnuu>Tb!*yb(21`J({i>x-J&wiwkmW zEBX$OSHy4Is%e>ebq9Mkx{vX-kR=*$E4J4tp8Z~;#>~d)>#BJ4h}kBe3~wlw+ct%= zG|BNmlH=(2d3AJM;pH^SJ8Qq$a~>VKxSCozLVCB0-bZ?T=d_@U%xD~y>+xqN1+FJA zSYNs-_td=6Bs~&J|Mg;~4n9rJlMuee;SaCR zUBBgv8BnUA>cjB$YD-t>3%7pvC?m5^h1))j0X>z<@=H6$4i&+-#f6x!Y(4vkrmKmr zyWH7nEbbCpQXeE%Us}bMH{jl>)K9wb<;N?*M{^7on~{UavJ-1^_R6b z#T$J7DCH-FoY}_je~9M3mmk4$ZWnzR{O03F@zo7q?bY(&dn0)^+J0K;7IHYuy)Z^3 zzdGo;JXsdcsbg{O)wDC(P_DYT<{oO*z8CYk#?t*luh^(#opL&FYOAm0k+J^YgV!(I zsZhQZI_D>s{a|LGxFo6g1^POvi>|8@l9cl9D?PSsag3L%_JA1S*H38zsaLmht#0%d zb7FR!cU7B-FOIwQlEHU#wnt0OYhq+1TiHd=sXajN z;f%K`-i=x~JP<8u;_%VXmQy&%QGIIc=ny$JpPFV9B{%={2s7{YC9@j7-S=|4>y81s zE_)(@KqAIr4K)dCF5|dP#};K=B7t@_eBKUr{u?_(cZt4Bx~we^j71jFl1_dP9(vqB zU`Uu8?!)jlWR$2Nh8buf@xo^=#84^P9_=r+2LqGjj&kBBx6LZmF`3IW>&U-GwH4i3 z?;*Ms+jb25l9|fjd0t(Dve`=&!`ogzgh)+gWiynvj}d+cLWr&rA_@?Nsrz+Q%IjL+ z+4J3h%|xlh-$hE^UlK0URN=sm>Bb|S6jV(i(=$L7QD^`vh+P}An8@+}&tP!r?d zx_9k47Th}_y2j|bv3<7#@0DMSBbTH*>LPVZ1^b?zw|1kKK7}@=)!jqXlDxKxX+3Ip zTQ?ax*Tb3zUfOgEiN-tkT<7@G*+}-%`v;n?3A%24=+mF49DVQns;vpFHm*_q%rWn+ ze1CKBcdNgNJd3hy@7hx}B_r+P)TQMWGSLWu=Wi}dRGyGrGm`Vbs$S@HMbm|AJYuMr zAB}ba66U%UhGG$fYh5B=vEFxwGJ*G_bdvsr)OS!l}PXrYlt#bBJP zt$N%vm7cc}SqRhK03jp~rids&RLp4DuWGTp2tJx7TKuZHfH!r8=Ngtd*0%^! zG+lFa-7IRk`ySWH;@9zezZg;}89vQeNC_s8!|f84K4QM^*2~$ms&&U-P4h&+vz^Lk zF(-5}UI+MFMz&u|I#n2v8;1UTY=N#j@!SVz%_}LVOF6MdFIi2z|F?B=W>|Q4C5BH( z%h3Y&#K)(0E*_$mF?D<6Z`)DxnBvo@qo0dyqV<|nHk$(z+&dxpwM5sw+{DFSGI^~e zUs&>k_nEt2bqUvtc|MBzF3jWp6p~F1{cwo9vQnLZimu0(J)oUk@-?R0mxpXZ!+2jV z_1em-G@1HlpZc6V%jNs+xQCZK>cpj&JIz_+ zDug(eEqVU;e)TcxpDNT^n>=Gpv5i zM9JC&td<_puOS3&xKgfjTrmcC-CChCJ%Q|)AuOwk~qU7i36BP&-d~`xq2N#z*Q% zzI`(Z3z5F!ziriR<*)VwyMH4{`Rp3Qj8xlK6q>Fby6(fOL|c8fhh?+0{*Q=RMRsa* z!ZFjV@pBG4mY)uZ4)G9o@?%dko&MW_7C)fYuXj6u&ASx-zKQtuA}8c2Q}(RD3`-up$pxLX%V zDH(pJk^Z4D8*2%QvItj*UqaCdvqYWvMp=!E(1}1=BXJ4OjI@r*bTiZYu3vgAoQ~?G z75l-p5z&Ru;E16-=Dm8Brj(m63Qhe=V8p%raj+m+NRzkPvUmEHrl3(vZB4&lVkmLy8;qZ0M?Wq~ z#w@4wiL$paR$N-Eh$%ex#$D{^g0JM(V4~ksxd!HMtfe?}tl#?RG&+K=SJD5dJ2hZ( z>(J#WAcVy0hKK@071@zCO<4#I2F^6BF9n{ZB9}g?o@f(VX_9kO#O2w1o7VQ}jT*K0 zEe{_^Tg-dQ~GUnm9UuXE%bQZ(RFW=bsl?6s(ta|;`>g~*3XW!ojJ@a zLA4FfZD)Nfq(b;;B<%a$soTDZ9+UaZJ~Q`b!0ESo(opa_`~D~=&yL1twSeTo6A=Z7lJ-;PO}9$PY-FJO_#M+snvLERk2*V`y2SFPTfz8v zzD1CZuIk~<+=s);FYFh&*}gKRvk*&Hvf#4WDV82%gx@_Px?bqI_x&7(PurRITj!73 zlboBsyzW`RU`b#5ZJXc(w??Ip&oh(u<1Q*@DyF(-%2Nf|{QW-@bFz7fBY&6=51)~< zK7^(V-&G=pT3$}2p*L#s-x~X9kXKtT7vl7mwg8X6$_hI(@f3cFE5mGAp7B6v8~-zU z)xl3U4ttbk>MO@r#7MLr{pl-5-vfk@c;R=+h@l>eq@7Vr{lUXlD!`K&DfaB*SYEsf zzXEK)qb(?GmP?hvutH*=&JF?Kw5xnZ7bDS0mOqsy}kmh1Ave^oXHxELNJw!=4uc zn}IVox~FJT%ZG6!PllOT#!^tA#p{o*D?^TTzWK+Ubj zKT#tjk;HKsM`m2uI`JH_%a=x?k5MG?t-nOIKlv zYl3l75>59yy6!#iUS6W^tkf!dzl7$Pn<~ME^z&a*arr0}UL@Ha?G>y^Cp(cX8O|TP zW|zj`q$71YDEcN{O^m=HE2x&G@XL#vd|ZAexvV;AvF#u`d%d*l5$l$1T7kMrpSj@X_tkUB&^MpW>s0%+%!zer zhF0A$PYI5rpXZ$~6gDRRwqRu-GT*=^{m~&Jy-|U_j|xH8eL#D?_Hua4IG%NAUAc~f z?X}Cd;s)*rvf1m5#8e&898OAQUOCxr!$=iRCTPz@_9N-7AE{Ds(o@Si{mvYOYpSZ>aNWq@Ucr08RG>x^9MPfEJypeluD0A|Tcnj_*42I?;3eJI^PtlD~75rxQY+@^~^JD+=2RA=OCUOrA=VY+_d<>HI$B}w(R z@A}bnZ=vgI4K}SdR`_?0-DmNPSL>0`S+cZ$=g$<$NSH%ZZ2yuCG>m!EbU{r6nA5mA7sX%p&} zSihO_>#<_`DvViAUSm+HM0W)#@&9^>S-HTYj{Vl#3~%EUof6&;o?jYYAC8W!ew|gX z+{&?yiO3M>Lf=>4LDxM!eOI9{J@(NS`=f-5g0?ZL1n&gDqL|#4j=8*kw=HfYnN(Re8pSWfEIFHgrn=q%B!7EEiKHbl_Xt{7_jN+ zC&e<{p71tfO&eN{yo#N~$5!MNbC_qL;m3;+j4Hp6J!ejct8jOE>hy9X<*uLIMAMBx z*L9{J)4SpK`T_l`dcpyB(0xsw86C;iT5tL?x+OO{n?C9_jNvNVmX_rOSTDWu;*Q@6%5j=Ta2n0 z7D{^Hn|DXQtiMr*h?vnnZmH?b6>R^xuWM0?Z5BR@pU~$o{H_x*)QllHCXv9!0_*y@ zd%Y>cd|gJ%?Or)Cxu>!1(gJaK&h@VZC^jZ|5VlMtJiKcxoMrM@gildcoN>ZjEnYuq z`#lgs;=PB60z}OyvnqwV@~hVMLy4H* zQMQudGg#e^thTU3-sHJdn^@_d=T^x<(}lkYK@4TySrKA6WLSxDXwv=s_!;?RDH2LH zu+iq%QU7)JR~YdHzmx_}32RK5?vXD!*`JymBk%oo3?-scD7@8EBzAoo2qE#pJu70U z;b;2e-4ydU3gxX-@y0~+GO5uNIv(H3CrB8r1UAxKeIF!$P$VZDN3juKSCBEKI=?!x z!1knaTYK%!oL!Xjb0CE1MkAsCQM0QfTa2u?2=C2|53&AA@59Dh(TaO+iT5z0vbpey zys%DYTQ*ixU9Jdi+LHu9x`;P?(`0V5i+Y(4M(5(6O2cab(TzdZt)4!71Gk1$8$ zerffatfJ<96VA8nfm@SvkK?vlv5zSBoVYJQ={8f5c(j<#Y#S}!2k5#IwH8_S(wuigRuKPau{;Pnmm?E5Q zNIY62F(CS#hz3XDZ;pZ{0bE?tyG`o@H;S-s25~H$z%D!Mf2mHrlU+igtar#2K4T)k zi%&t-mDV)?=KQ8>4d-=D$nbPz-JeNM&l zSC%f6>T~XXRqiD%I^Qk0oY`zzkXp<)tI;t-6nkt+p7j2Na6!R?$jsPbXn((Q)&DXQyd49DKL zGr0K9yu7Zhbd&i0$eEXA#58iG5XAh$)8&p@mJYF<8PrbXJ-2Gi~ z7P{_9Bb)DPMaWgwtlEnaU>+e*q`W3&(^|VkBbXy8(>N!}XKh5`K0QHhm&hDk zq%6ZU`Ig-w;s{Qt>}{T!y?6rwK0?>cH2MAvKl%}gYr$ghm$WrpviuN@hK;hjyp7lU z9i5j?m(ZWf8|QAoC{{SrCdZW&>%n}L%HmVTuNLZF@9;&J-S6Lae?R#cT~{S=ef5i! zWKLldt>6+?i#m%^?kj9-*F_@7AFlm3{gVvY?2-eLF01@1QvW$;t@4qK&$r$Cs(JMf zJ&)ygxxe9Bj;v?d=(@=qJ-+8{?D%!lvVz@L8MG&R?|Raf1)e{BfBq1~?Xr@OL(SR| z^cAj&K|389t=x+4X#sIEg7GiO{YsxjS7(-@>B4(HVyJ7T8k2?u(b85Y(&zBqzkYuZ z-SF;^j@-52zC~NcA;E8B?7ECA^+8|x_3!@*DGR+tcY=4l_Rj42l+?Re&wV=xfDjVz z6GRjsN>Afh%46Ousiv1MO^PI3l<%22CwgvtNA*K;aG>QYTcM1{56%qdtkNv{NaC=) zdAur4d?&@)7^-&@#C2EPp9gB>-uhWv*ZBimjTuch7hU(MaFzkb?YAwYm{g-6`AS_zR@ja2Qb2#}=TEg*r(RB0Bbz@2e3yQWWBP;M}K0L0^dGn0Zm{zXcU-!0A$DQa3zUXNF*It%SsBp`s zd}+-WzTpc<9D85J`qmTI1fLX36aEuy|H^MZx~}w1jPV?TbgPF*RZ7RVy{dn7rrtq);Ki&Xmcv)UZL`Gwf{Luu|c;t zjTN+Ak8a(Y+QOevMSqShL_`6ijz^|)sA45@E_L`3DDcc`Ol5n2Tk~I=it_yUCZWc+ zK%3D1el2If)vCiHfkhVMp5bN&x57M87qOb|#DrQez-KEY-e>5#<9M>S``q$k-gI}+ zo|Jx}8WSx|{PnI2JBtO&%PWs$+IBu^=M2u?e?O9P!HL((ZR{S_vyjY_)fHCSuWy*j z@hqU}7NP4(Urll!d}ep_RFlhLS&X`#ladm}-7Z7(WE_FtZW8#|&1Nm$|ICr`JYncz zZ;T;X9FYxXfwQ$DZMN$L{6h46lF z!=t?;2D-|o!fPhweaZ|@wMVHQe>`zv(4f60G4dgwA)Xp_DAmaV^!JD*=(>>DcRDd?a<3FPoNe z*3MJw8`m5|ix;jHh@nDygm2^|w*^EhaJx9)Uc@)MX`6RMhqG(G=}lwk(U*fh{yfev z?)owLQB+)QXf||+VY<^P<4NBk`LR9FLx^<{2qAeWLqq|hRtkG5un7!<{hl}VO7Jmv zcN<;AHFn07&ZT{=pUBB}_REe(BPo$8LAV}0*%{F`wT^fpeCCg@Kdnool)aBuJ%^?X zp9v5{W%}n;VyeH{=_r&qz8o+xmE%f`U3L=V+Am(^bh1?CuF=V~pi)-qk{t!9TFNV@ zz;Bn|KYE4F@Z3thub^T4xhN1q;w?u+0iq7I*O1eq4DDapSj=o$=v5JqOx=u?zf>z4 zm47_vZTxe#nh(5GSud?ip1Fh@w~aH@YMwr0XgV$=|9`dj9neu!-~XEsdI=>+m(c4j zX@t-N(gFdb_p;ecl7($-NkPN_0-^V!AW{T@&^t;AMWqW!RisLlq7*?C_aQyIsy(t>c4a`|+vT@a~nyp19Sd z*oggw`}?h|@cEzr|gL(m*o!wi(E@T(ej`9t+`hhF0_9z)lqob(2v6#OsqYlX48p#mL+VRaIw`K8Y@Nr zek14oebzsdn$5dism|GB_%)_3QtR7{0yo zmasOjFAU!F#ns8xE3ICm+TZSC6KZ23@3(T^8y_wm*{;z?2OrO=Jz#62f$DCxcL%oW z74~4uM+aLqdvX3=e0)aXy&c1@9_(<#UZ6?C_RsdM4_`Eei|d}J=l26952HDx$h%9< ztGXT-rCPM2a_@{+8EuAb{AW&lrw8M6kGC0gFK%A{18=yFRd^J;eN)P>hJqL3jRzJ! zf0`azrD3b5b*39$=$Yszd-vpo@>5#)HTTT*AQE{qL{fbF z-EBDK>h+kV#jY&A-6lTSv}1>ULc1bm8V&A$*1vk*&l=87Dq^kWsHxt5{8WdLod*BZ z>)?qJQQvXPyN>>=$@F%uPMwkQ?vwLQOaJM0A;njwo+up0hgx_9- zJ)4z2G$y**x@WtSucdH13Vd%&fF`-=3R$3^Utm#ufZitGzL6W6wvAJKyS-(QaSB z(%z}fee=HFmC&WC|Ae&*cieg9JNV*)+||zgUSPoqu31#h^kqGfGxe|J6^W`c=ErM zjxXGOYi&l6QInf@o^WJVrM1($b;@_dC#swE{J`@~E=S6E56O8$`%RyIc*I)Yy_jDv}VWV z(F-@^YAfSCEa&Yr^ZLG;+Ker6DFZiGy!MshTDQB4=FI#sZQF+H%SzVR`}+>fpk2GZ z9(%ZU?nCRJTF)2z>h1>L8h+}(H*M~h%l6bFUr#+E=N+{^=eD9Xg z9gA##wBzN?lDi9^TXiwE{CZ1Nl>Q@asUDSf)%-Ym>jb|Rm&4D;o9n#yVCwAjj5*X# z{x2V2D8B+Qze&{@^qL{IcV{ErM7^COjS{#i2oAb-{ZKrs*GHk$&zngfjdfxl& zd4T+E(wfZrSp5EP0roo>sT9W9VjOxytZF#I+?7%GQu4|7uOq}a}SW8huG99TBAXwE6caRoU?f~v*Q8sy;X0tYU5O@7`-W5V_A06 z`TspG`B|$oTTS>Lh6Q@8MW+6jd_wl=s}b{!6~{+T!(q*8~5%2dK}n zamGXrFK!<<@XoLPcaM4*a^eBJBldp09`Jg=>jAF^ydLm+!0Q382fQBedcf-euLryy z@Or@O0j~$V9`Jg=>jAF^ydLm+!0Q382fQBedcf-euLryy@Or@O0j~$V9`Jg=>jAF^ zydLcWxr|E9xxMqPNL4h{?aLyc8H!v(v zYtYA=%yBr*5mFePrMU;t zhis#;7lM(2$0-zh%bPetLz=-BH&&4jrAPe4mmA0fk5TJ95Q9yfu@)!+t1Udnofe!&XliCfSv+F$o z`pt-5KyRQA&==?j^aln20|6}%1L%NQfDZfNc!eq+NC1WaLjeO&9Kg{c_W$jc#5d0Q zvH#<_0BkJ?EWrJ5z-55SAW_bH%|xF0AB+u zfmOf~U@5Q=_yVAFk@TBH^xIUkfZ4zpU?lJfFan@6ufqWxiBdU$B)|;dn4-!C7=d~~ z5D*N60HHt_P#*{fu+>);0nqP-Gy)m}O@O9AGoU#T3A6xO0v`aafYv}=Kn-Ys3ILr& z4g@Lzm4PZiRRBjARMmkRKuw?)P#dTN6a{VqcYwRVJ>Wj@0N4ZU1=a!UfwjPD;45Gm zuo(Cf_!Jlmi~~}EWFQ6j8+Z(402_eizzkqKFba4AJO$E#3BW{PGB5=g4Lk#;1AhU} zfvdn~;1=))@ZoX%gU=2sV0=8asUHyMdte_x<^DN92k-@afLuUs;hwJj zgs^h>E(PQR@&ZEFk>%HWLY$KL4gg93RL_e6Xh2v8U(1QY}c0QrHkKpCJkKy`=e zP!K?MippFKP#vIhtPN1P)&yz*)q!e2ReQFqbOAa8oq&!&G|(Q10@?y?0IKt? zffhg{&=8<@LG2>~ptjH)p!Ps*gW^+Lp>VOSw8V8Q-~*r?&;j@mptQOJ-GClIPoNjj z2Z#k?fWAOKKnn~81_5Nt0H8lGP`IXV9gqMRfS~~8ovuv)g%ijJRv;Nj1nhtVNCHLx z!-0>0kAaZ@`D+X?8b}330cpTEU_3Ahm;g)!rUB&tsQ~4f%7yO9|Kw-#@hpIROL>?H z%mHQta{;oK%A2qN$OC*0tN@k+UjfU2rN9zkG4Lg@2>1e62v9}O!1rn(9asgB4a7-d zlm>l^;hS*X9@qe^1=awez&c<(uo0lL+Y9UlwgQxoEx=}g@;?^X1yI;FU_C zd<#$-djK)*dAQC1z616HqCH|=j6|4d&q`dA{quo?zyTlwATG)y#UnXg6Bp%|@8SLGp6u(}n$t-f9g=kS0t6hftXofaJ?+sdej&sotnUd4d=m9}W`Be30BInn>zxjYtM zpRov`a&fOCo|!LNrRfJrd7o@&76docgsLoNn_XwKsrqYA9JwEzZxkdE@LOno=WiT* zX!xa_|MC_yAPIxtke@gkm&lpywjI+)mm2#p?XsWG$Pi5^$W&Ti{!IRidVQx<-`ccc zfKMlclz?pp4vFCNd6Uz3jug)IM}QC28TuFygZwsfhr@O#;%rC&`7MMTXVdaJU2nIX zSZqc@vZQ0Prx+aIYraSuTBO<744K3cueCyL=W*Scy}1vqlO%S|YNPW^e~#|^=Ibgx zEs#!qcGFy;D{P9ueB1Olak|diUsSLJB(_SsyUZvPQNpe<5=T?hq`JR2y>YyZf z0!bir8q`=D5%SN;Hj<=-AK&Jh=j{?_O*@w@Ap_}>(5|qzwC=`d}^5wl>q=)Qo=;srpL4^+vQT+%>03?U< zemJkq9pipUas!h0AnDrdWS#OAihV6f{uXpfzkC_o^+-4;NeUNKsY*g;QMsURe!8pc zD@iItLN!0A<>!O8=kZ6GiWby|gwiQos@2^^>k@yEBpo0j+xDv-wyl2GH&T)ef`sy; z-`QkkSRUgoNis~(`DIL8o8Y-W?~^2BAt4Kvt{OSyVZLgoCCPk9$b$4X`T^GFH5N*e zb&!;T1J@NMGmc|EJVjmWIhRW?f7B#lErAk$g-Nt_j8r8WQTaxsi91 ztbMM14M_+_j4;fVAVHN&eJ^*P3Y{v9Iqd6$0T3f9W|ELlztgmnC8fgH{Y{{QYK4I& zEDjQ~piyv#?qx?^Spx~R5~TAfB$UqHx(j}8+@o}RCJE6*VAO+Dv&iJRD?RvY!n0}mm=z({P{z=pr6 zQY z7tAb6wI1@`uCx$H8e--E?{KzZ4$hjQIv4uvPT|cpIY>|jWE*F5*!2dRD!KO6aw9Sh znjk?BPm;Sx#~c@gg zK!@fb2m1s)FEDxAG?MV687(GRk<)u!zdw9|TQP*C!;eftI`#bX#Z;WJ`5q*&jOv@- zrlzD+NuS2u(sXvzheRmT8qmRvFg0M(&)0h#`))ZTR6fY5_`4ueFHZ9Rd)XRarbENF zsy=k8L8oWgcBd--xf!)rtceCL(L~iMG+(ujQPKS-LPE1Nc&9IPs7y_NH+<1?NY`?V zEu4HE2MOi0qVM&AT^>Hfd3TzQ`)w3%dC{BJO@4%z({dNF4RNsQ54lgs-xjbw!NLsNFg2f`8j~8 zI{CWK-iNstUVc!MSshHHa~WiYYDljxXF3jeeE1rZuzFns67t*ODIB&gm(r>Cb+e3HV`DyMwz0Nw z3=+!E548rRCS8m37j)3(;tX25or_hST72cqx@{F#Gf9Z1A)e&9ltgMJukTcT`rKaf zGf40xL$z1@J(yK5h8vzu?J!7S6M72LiR(4xVc9;NT0_zRtpqxWm~xVBxo^)2H_cyH z2ohoTq&LN3={dn(a(UhTzh6IjMvzc{U`pVudb_RI=l4pLzH$b=7?NNgH?0xnV>ao~ z>)@GlL(9+RCu<8ZHhRcWje-SKN54CIZ|lfG(ZeJQlB`;bB?Zs83oo9iF(UCF%)I$z z6xiJBl&i$&)L85NnANjmI{W%i@epG)ro&VULz~V{8}`#Bst5Jq9oQ!R^2^2N(_+6_ z{2Pti5gPQbSet_m)wlVxBM+Y0(YrL$VPlq?Q3eUQvK95|RfVmbr9Qwnv1#{L`mXK# zGSuoZE>SvJ+Q#}F_Y(IblhMXI@T)Bc&u%?GtsP2^?<`dotvx}Fs&(47_x0JXP4dG6 z>PKNgcXZa&wj)bkncrw{KB~Rc8X-wa(CcUo>6mfq^JSeMw-F@BsousVQ*p1X+w13U z#qXV$bZS)R=i~+M_Nvf)@#L2*9maMQ5~_)v>g``z=E#8nNYM9FI=@3geMsvAI^FRa zPppto?S&*kYg418#Lv2v@J->~zZ_vYjBRrbKAo6hRhvc@^pAi<=tF#K@}+&M_v({T zPrtnB>oby`#8I!^jN8ah5_GV>k@{)#Gv(T!Jk(ZTg9S4n34r8cTJ_h>`lXTIgfYuu z)vM_j25S^f{l0&liPTfj6Ed2L#bHX(nPa(H&0;1rD3W^sV`KU0P@A8j952-IOy8}K zYVqY$AD)cU+U&#dop`$-d~a*CEsU4{EuO_n)j^N=H8D*=yoUVAF(!TB;Yd!m*FwxJrnj;2@Yz4YbSH&vOh zS?x`Rgv#gsiE@321P?dOu;z(UUn zZ%g`ssSzYM@J&6^*#3tGkBTmEkJ$#hgBrN5i(yqNEO5k#z=8EEAx~s=o7HbtmEYKs zMl*DEL6Cvj>8kLN?*|YG>sy9%38=w^6gB6&^Qu&-H*{;P`Plw!LZGlZ4)G8;=`^;Y)SW;^)ZFGuG*N`OR|@ED*&wgor;s@jM##mX`X zn_If?6OEiTo}MBVEtQ3bXZghzZ(xO=zY5j&Hc%vD7hG`R>xrs&Iq`W=bHn!D+;!O ztsivA2R#PgfAey>7Oe!fp?_1UP77>JpJZ%2QnWt#jn*k3DczW#hxqjl>3%%V>hB;C zp7e%5LTt6`wfpx)zW^#z(t!`$Jbi$zN)ujZ-KB5uSF+WmQV{AvPFhKp>qzjNQXkT( zDc|$W*nZ%EzH)Gy)E^9mgnE~}ojyvk)Oy%blH{bFW_vXPCFlO>UHs*-?6lMNsGrpP zi|?5*W(novzJJSd%?>4mXBc>=IM@!|4O`>baQVJiLqb$PLqaRgixPLK^`~?5Gu8it zp4`0;+~>#rxZu9D-H!|I`$YE^U=GjvQSsfOuTO1+(5HTLw#y)O_vEK-0v@H{iC>ho zfutxr8hyetdQzn!Dfg||FFfQ~OF!bjGjF!yeWz)i zj8{G;t)Uw&Fvd3v43=JZMo6zaRd$<>k!1W6u-rO(dH{ZFwH}4}UtZSaVTEDe*ll=i zgkQoN@KfNZu5le+6vtGL#)?lP>L2q-F7mpaU_-xpcnyaS_I=>pYH(JsR+${@r+Sk* z&T2N1 zO=Gsk^Z6j#>#3z{HG6*?q_M{jH<-;fPR*GT@jPSGC2+A0184Qb=j4)j6jbC%KvRCJ zrU8xF!B45#q?UEbnD*PvLpc-j>o#xBIAC>NtC>1wO+nL{Q)oJ`)u_o-ouNuqj*1Mw z@vFc>F+f0HY8o-aNR{5rV;G{GG;500F#Hj!kqOVAYG%L>TSBj@G#T760H=LBTC+rvbrEKza`310xnfiqIVJGh@3YOO;>6OQUX~B zbCif{Ym`!OmE?%tX(lx*v<`{hRq{X6XHnBxw@2Q~5jkImJO_0&lI^aN9MQ}C8y+Tc zX9~^{vAoZhc;%t*NXyTj_;Ce9`~`-2T3x}oqtG1*8=s&gT&ekePo!qi>&!Z{!HkVW zW`|YBsf}6-R(ciKGQ|UDrh8^jh$nlTX_86K8>Z`=B=CD=G&)6F_()*kFVt)o4W&+l zxUdsUAuB=*=nGevsIZ+gL=h=UwfbbW#iGLy#V}Eh)DySs4Xvh*FbqZ%t^Tz zn>Zy9wZ%|*OlRwL(m6w9>GEMTQoBUMywMc@Rz#!TVha!B3@(u~dxGZ_`gE6=w$O$_ z$u41Xt4*ApvL_ERTR4+zn9X4_+cL$HHFzhz)Wy35fnK2oyd4>pf#-svygIx)33=Gb z!X`$tTJ`QUtgCbK@Eu<^iJYzjjq^IYnUa+WXk>TUC6dY;Jkm{eY4|FK(gBO}I%g!T zhB|53UCxMv2H>O;Cpp@KH7V#Y)&cAs4`X~GVpq?;Vlh$hL$uk2EZ^C`ah z%IN6RE3pW~0$z(%VzSgxNMjjJhsTtgms&7KGMZ_nO|3Ut%vP+5M)He8F<9== zBw;&eq{9@iwbaA%j6-L4Sh-lW&R{liI;+`cQ`;=sBok-TX)T-@F|eA1r9-kzFxaNU z_$OQ^>TP5jAJz-iIxUv|=-r+g>y-$K$2On@4zGXo zMu!!DvFRfLuT|KN6`Y{e$6_(lY(nDN7;x}5U;$B`q_-!S9d=C3%_iI%%&}0^u-8aN zy-9D>+I0ygEi$AvkkctKv&F7ABMftUWW}P^g5J(0+trL)srES|QSEcypneEzTnf5U zQqYxd)NJP=)eN$Ncd7!56bUTS4eCEeRAN!km9h<8=?2zgS0w3TcdWq?%c%{vNG+V` zu$yfOR_qwk*Gn>6W7V|jikh4n1&5Q&RI=EU$kt0aY!-9BXzCgj$-4$&sSz6%J!F7( zKth+kSd;XWVaZr%NjFTFJx(duEcpVu(hVNP=*6qDquqKBR8CJaCQmsQc923(xPtA% zqOXGOF4Y~{E+I%;SOZsJakd`lJFoE|NghD{*-KY7dH|}0W~JhHi3vKF5SW8M%&XYx zti>L}SUhc`-J&zYE=+pzRKP3PA(*Q$rHT7h+ z>og4%u0hhgh4!%XvpEHOq)5c&)Ihd8&z$%T@6h8fSQp``0#WsY2CIb)kOu1P zYXemQRt?Y(Xk%<>P6!!$k zVu3++$7+YCE|n@Ej$M$+{1volVx!y@xID{{cIKxWu;8?X2Nq%5KD31^RzRM$*a0=B z#jfCBn)AbAdf%bN-V~csC6*#F3Q>a%K%R<;-*(OP==_|TotdMQ*+~aHcqJ>;tSp`h z854WVl|L!Md2|>;xd@yog2Q>uGQnB~zxk5w=wKVa*cICwLCXtFLBUiecM?a?jMS4o z@~2-ZTkK(2P2CQ&inCccox@Z42yqyTaE(SGYz|SdI;)3rM)LNv`a2DH;$cj1h?lHQ zd8#FB6B#MdF;8Z>r%uO6GZUkYO}jjGY_e4dD9P^NW?|}QOWV}$~ zUD2?eE7HA!Gg*8jz`j|-^kf)20|O2A%``kY%EeCTx`aq9qJS;6D43loo{W&`y;JG2 z5e*$Nl*LQdn|bOJ*+F0^v2T>R@NmdhCg=wm@QV))3#~WVP%e0xs+5UL5h)j$0$6+U zv zc_?U!mvD#YVK*z&z>!rjCbypLaPI`Lx);J$&rii})=)u=K|0g2D$3CF%-3~^mJH+< zYngfkd0ZX`>$4^t2v8_E%HJ>{pTnpg(b*8?auZITK}ooR8u?jSD+{xD>jfK`JK36g zrkHju{A8j>MVz1Dly<4fqmgYgEy=g+F-dLIW5BR$Z9^3t;}R2$E+LH6(|o`+FG7}) zE7tNo?MG2wum_pT5W-y&{1+7P+K%FiKYNGdkyc7O3(eRvoLc%s2cS z6l~wd)@XhupLIqw@t~hXQlQTwHd4qU^qmG@xgDU9-$GxQI`V5UYQE;cVzVKUqn+o< zJGiB2AeL*r({P$8O%Pz(i3|HRxO&jcUBM1Lq^G z?3$JzZO-^=>7Bh4ChbmQ`>n}Za%=dVwr?3p`)r-{EPGj(3SKnTnVuxdCb>&>6Nz1dvq{REMO9wd z%`EeR7@A|sxBMzJt!xtVIb_!GyOx=anM1QlDfJ4X8>NtUr(#_V2-r7UFZVca;~O9A ztys$Jim7^>F|t%Lo$tbEiG48O;VUQ`Lk)uAU`z0*9;Im3sZ^BU{J zo?qd*>;QniO9-3ddwR5?*E=z^X2oBq>FI@^2eJK6YHYB=(+(}tQv`(~WT)G~!@ezH#$fLk`KKG`%I;u*uoS9Lmf~+WKvleC4rPY3 zWmxL<6bPJgz~H=or$utmwGSj`(r7C153(`yvLmOSU+=jl0CoA%?cnftEi1`pP)IjwloF;gEO+d8 J0se#k{6EZDBkceH literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +

+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..d363d7c --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "chain-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.56", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.56.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "typescript": "^5.2.2", + "vite": "^5.1.4" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..afe48ac --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> + +

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..3d7150d --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a7fc6fb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..97ede7e --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..861b04b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react-swc' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +})