From 164d5a6400aaa9efd81736f86594a6dfcfc62aa2 Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Tue, 7 Nov 2023 05:03:08 -0800 Subject: [PATCH 1/8] Adding initial setup files for project. Set up prettier, eslint, parcel, and typesript. Added a temporary home screen that displays on project first load --- .eslintrc.json | 23 +++++++ .gitignore | 37 +++++++++++ README.md | 45 +++++++++++++ package.json | 58 +++++++++++++++++ public/imgs/PRN_black_full.png | Bin 0 -> 87255 bytes public/imgs/PRN_logo.png | Bin 0 -> 8776 bytes src/App.scss | 0 src/App.tsx | 18 ++++++ src/index.html | 11 ++++ src/index.tsx | 7 ++ src/pages/home/home.scss | 27 ++++++++ src/pages/home/home.tsx | 46 ++++++++++++++ src/pages/rootpage/root.tsx | 18 ++++++ tsconfig.json | 113 +++++++++++++++++++++++++++++++++ 14 files changed, 403 insertions(+) create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 README.md create mode 100644 package.json create mode 100644 public/imgs/PRN_black_full.png create mode 100644 public/imgs/PRN_logo.png create mode 100644 src/App.scss create mode 100644 src/App.tsx create mode 100644 src/index.html create mode 100644 src/index.tsx create mode 100644 src/pages/home/home.scss create mode 100644 src/pages/home/home.tsx create mode 100644 src/pages/rootpage/root.tsx create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..9a59abc --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["@typescript-eslint", "react"], + "rules": {}, + "settings": { + "react": { + "version": "detect" // Automatically detect the React version + } + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b77bf3e --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Ignore IDE/Editor specific files and folders +.idea/ +.vscode/ + +# Ignore Node.js related files and folders +node_modules/ +package-lock.json + +# Ignore build and compiled output +build/ + +# Ignore system-specific files +.DS_Store + +# Ignore archived files +*.tgz + +# Ignore files or folders starting with "my-app" +my-app* + +# Ignore generated snapshots +template/src/__tests__/__snapshots__/ + +# Ignore lerna logs +lerna-debug.log + +# Ignore npm and yarn logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Ignore dist files +/dist + +# Ignore cache files +/.changelog +/.cache diff --git a/README.md b/README.md new file mode 100644 index 0000000..c0c3693 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# CRUD Database App + +This code runs the CRUD Database application for volunteers to interact with, input, and update datbase information relating to the Parking Lot Map and Parking Reform Map. + +This project utilizes React, Typescript, and Parcel. + +# Running the database app + +1. Install [Node Package Manager (npm)](https://nodejs.dev/en/download/). + +2. Run `npm i` in the main folder. + +### Start the development server + +```bash +❯ npm run start +``` + +Then open http://localhost:1234 in a browser. Hit `CTRL-C` to stop the development server. + +When the server is running, you can make any changes you want to the project. Reload the page in the browser to see those changes. (You may need to force reload, e.g. hold the shift key while reloading on macOS.) + +### Autoformat Code Using Prettier +To fix the format of your code before pushing it up to the repository, you can run the following command to do a check for you: + +```bash +> npm run fmt +``` + +### Check For Consistency Errors in Code +To check if there are any errors in your code, such as unused variables, use the following command: + +```bash +> npm run fix +``` + +### Lint Code +"Linting" means using tools that check for common issues that may be bugs or low code quality. + +```bash +❯ npm run lint +``` + +# Tests +There are currently no tests for this repository. Tests will be added as there is more development. diff --git a/package.json b/package.json new file mode 100644 index 0000000..43b726d --- /dev/null +++ b/package.json @@ -0,0 +1,58 @@ +{ + "name": "crud", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "parcel ./src/index.html", + "build": "rm -rf dist; parcel build --detailed-report", + "test": "echo \"Error: no test specified\" && exit 1", + "fmt": "prettier --write .", + "fix": "prettier --write src/; eslint --fix src/", + "lint": "prettier --check ." + }, + "source": "src/index.html", + "repository": { + "type": "git", + "url": "git+https://github.com/ParkingReformNetwork/crud.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/ParkingReformNetwork/crud/issues" + }, + "homepage": "https://github.com/ParkingReformNetwork/crud#readme", + "dependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@fontsource/roboto": "^5.0.8", + "@mui/icons-material": "^5.14.16", + "@mui/material": "^5.14.17", + "@react-oauth/google": "^0.11.1", + "@types/react": "^18.2.33", + "@types/react-dom": "^18.2.14", + "deasync": "^0.1.29", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.18.0" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/parser": "^6.10.0", + "eslint": "^8.53.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard-with-typescript": "^39.1.1", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-n": "^16.3.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.33.2", + "parcel-bundler": "^1.12.5", + "playwright": "^1.39.0", + "prettier": "^3.0.3", + "react-refresh": "^0.14.0", + "sass": "^1.69.5", + "typescript": "^5.2.2" + } +} diff --git a/public/imgs/PRN_black_full.png b/public/imgs/PRN_black_full.png new file mode 100644 index 0000000000000000000000000000000000000000..39e70817b866149eaf57ff9e0069bb5b7a7a8006 GIT binary patch literal 87255 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

F4>ux5((R}oOX%Xsx83}JWsAT z8Ly}Ik~>F)W6%13)EJ%*G%|ac@9@GxlwU$(_3>;M@ywYs6<{Yx`z!J!c|BY_t(GPw zX)rxS4}`NQP$@Is0xR~EF)v4`Q;tGuu!zyGCf!osdGOT0o<;8mo=Q6*WI#LCfeP>0VY#NXfC8~b79P$L*{z20^KcZgN4h@`>V>gwv5jO^?d=rnEXc$uGG6MF>U`_%;&dP}Indd__Q z{FzaZHITrRnhY)zz+Z}`e(oGZwL43Mr%drcyDk`HDohV${(B1x3y+|m6Zata!O?I> zIg$l1nwr2kYlRkGrJWkQ-yU0BSeHcb138!^+ch zbre*1b=WxhO2KVBS{m%PDXIl;vl*6ah2_{-1MAlJN{;zoe^+Nub%ULl^XB}ineZPF z<^d3<-4D>1vV`Uvp&#*U+MQUDb!GJCp~Y)JcVQi9+gV=T%Dh(d^0KivM71`7OlS)l z9NGrz0D+9Gn1^RcMK3uPPx7jk0Ie|P8sJw;R(AG!+A&IF2|up4g+a$CSIb^5E-8Sg z(zq*6il$i+CpwPB-B0=w+7aZ>6e<*pQ5dHCCWLS?$%0iG_WE-VINhuM2`?Ya@M=L{ z>Jj8hzz9b4Cb#h2>=z&paPd{0u!{D$ANlbn?B(MG?&J~SwZC+W1ra7^G5==u-h#V? zdg5LidNElji)K>pAEOv#h}_Nge^l)ZW^-LdYN{6J&h<^k! zYww{^)Jud~55zs6QISITwvo~B00@EtoZMm=rW|2X2B$bkcGjiGeD<)=Z>1ns3-F7M}X2K7L-s9j>Jpnk2e@5GlcU$TW*1GjZ>C(T=- zNb__Cw?D9PMU&=;ucMTVbPE)T^Cn2)XK*st0^3SnApAD`FujACL!Tr-(|}q%cIP}i zpzA<+Sz*1hucxB#-G*Fit;#{E#C{uy>iCY{dmUd`UcOQWJsbUtSGls>UIWvM6S&_6 zj4b^fE?Od!=`{qly#}^1g6;s@-Z|cY6vwCa;D+kRC$@5b;0~sto;>b*HH!WMnCtft z<&si+7M%`W9eGhoNt>*B@GM0H2_3{MnF-fyKxs2hU|`X5{?@T7*biJ zpPikqdOGjoHUN%eLM-$ZuYmUFmlIzlUrrSln{osX%AYg$zLo|k+*0sd4$+H$itT(@ zBjrH>m<#uVvg*YqmDA(*V*s~RoMcr$d=#$8>LpkFj4Q}p2XxXucVrh6!gG)3@}xtI zYF5;H2Sk3^dY+jQ4AQw2*d|=ExP;>Da0o8I&MQiK$^IxRR=I^FOkLF{)xegHD6+;( z=IV{&LY}kJ;4*Gs{oEWJ4pq*qaNOfYel({UY?}kg^a@eGwPp*(%VA zipz;dF1tP3hqAFMVQ&AAQ^G;E^SEb{c0-oYI_pm;d5hbUw1o%H)K3Smj&vKPfZhd! zc##g_C=!MudzN3oh7mh?yC$9Z8;|UWhJtXs!1RtXW#6{hUm-2f^iL2L2^wJoPY;d@ zK8^LD>H+Wcj0PV+XJR!{1aHu2#K-a>A~JH_3ViUDKsDhKq=GC`2mFZocvA8OSz6*e z!HBVm&z%MnC&b#Uj=nu_Fm4y| z){B0g+P-Q_136~s!O#S5OM7+$Xm=VUAX25>Ad~TF{iZ@Hy3PF{HAfzfch%&`l*9Qj zyf(+fEIZc++=g@#!b!-&?;|cg2QF@zoSgL5$nN4)H~yrwQw*v;K3~9!n_k~aY~5}A zHTIBmDM;%{srZx*?)V!~-7{dogH%d?jN)n3f*9|(c5>>-!OK~PoPR}`Wg!A4FDQgv{rM(;P;><66nMT72@<5KQENB91Ani&K#UEXtODb z23-ql++yU-1t_YU%IzOIB3$vjmprY8P}MLW#f2gsr+Fac#TW!3ih)>Y-2l;l|6d9_ z^)aW57EGc-VLZDaLtmE(O9@R;xnm%~yW$&S8KT6XKBgu!!n4R2VE&m6~F} z^`S5lUpMex%obol)e(uk5ul(|&Zqo8egcL2)48k+uh@|!5yQnRm?9AW{k|3%8Nkj; z3hCm~@UgrA9Wa1+7}Pzd|6GO}ssvz$y+|4FE?>WK5^)`q7J(KIWaK?I zMby1GOcch#ap05oanBA=$_EMDv268o&HXl7$PM|NMF;`^rY(7pqUaMtk}dAIyO$oS zf5ie>pOYJ@0LLinvq&E2)>#&n(a$HGlt>TZKVqu?%U@L0=8mLRGXNUEN9F2wTOf%7 zukhbt3^J-rTp$yfqTYT8Pk^(X$dBP4yQOms1S0Mpb!$N3@K2Qy#Qe{WppSA@OiWPDIhD_eq0Feq$bO4S=^)Ktk93iI@SGI(5srHxnT2;pL}b3~TuCf@EH z4GHzBh3a>Y!C($9%EI{>GP(VAm}I-IDJtqc$A!~A{u=|r(s-rV?h`uG4w#{O_TI9v<^U_m~;EE9xfCS|iXrR>#xPdWD zh+O0?j{F6FiR;@L{{*&_zl7j{&dUA`LL!sdi5xj}))=sO<&aINw{v)E7fr&FpvQc- zE?l@!pqXA^Cd|%(SD`bY(HDALgsa7Y|MJUj>&}RXh-qDI?K#Fvo3J2hz*%nptf$c1 zM?DCb?L&OJJd+UB)hlOn>sErGl+^k}K|#UwU6_wrw<}Qs?U@E1tPgk#uR*yV*vW_c zurkr9pAmC^H?4jb4yaF4g4n{Q>MUGehssdkmDrW-_L@j9$+?J3q!A|aK0rGX+Ha`r zeqCFYNglKT6;oj){DorzFhJ&>-r+uAC!B#mO}Q=8jY#B~W~4p_vB~`1r2sxQMt}AU!TJ{fj(*0j%1A9 zfhnxi6Y_VpW5-ios_rz{PW4CokRKRH9Y@ElQb*@F26JtBWgV6=LhKBamSNSNM!^8= zDy;oEuwP(y#|q%FPogFm)c?p*00~J{=t0bJ84I2VNocz|C!+(6eD2Mrd4>7;Ukk#+ znZd|{0_my;a2u(5j*hkG$3t1;3IY>j^M`sL)tdv4v+tRJ( z5O(Z(!!J2dhE(%!E904>bu$@|Ln!P9Q>x9>w6YXt@9f|X9L>1~VU(Jy5$Vxw?r`4w zo{*Zq3~1;XVH91-Vj2aWLC=SbQX{aLCtwpKFMV6yIBIn#vcLy{2YBLmWm2u#i>ZNf zn93f=Yl?Y2Cln?=e*EYc-8@#$e2S=G8N9w8fB=Prn&O46K!F>~KP1%*+g%F0`-H~6 z!J@*##V4S5i5(M;rO^Hr1}nLmK(mrHFB214dhBIHpjO}dk*QU+FkSF9a;lCsA3l7b z1kbSU4k`2IE(vn)uKXAJL`Md|HixZ4)X5?0L z{|g3a3q0)VRoK86mb2MKk)5kX27n4_7EVqJO^+Tu^3Ivl)#lDl;D!QyKMW9E#H%kp zh%rjQn3PqcV8CKNm}f?yMs|xO5Q!cYDhM*K_s97WA^j@*juOaH@94JL|rzqmaG*k4BLukVfr~ zrYUC}2ZJ9F^z`AwhaO&DYYtXcR-irsZ^kCc*)8)c;uo)uM;jS{n$=ZH7*(E-Dft)p zPnjcYoFwv3EgLzVx;ox&q@VZ$#**1vqklx^R6pn9iGx`DH%%?AN42%JQWk>Ij4xH) z*(&@0#Ffn_29?vTpFe&2^a3=Uy;&IixKdTG!jjnKm(YxlI^M7gx>O05PkA1hI&&VY zA{7fwxtMSl{nJzAgd%IpTu^|Xhl&oU{UAufkP4$}&|sBS&F#01)$^VI-y5PWYKhq6fI%FHp5_$;`|IPshi~%Si1yAEuty z{T3iuvNAXK=vFKsa$C&+FV2^{OtM1Y6v=oDPeLuYs{McgB8eTAtKaN|#kHX_;!0fI z10Y&xkkT&yD<^Q6{o>V0-fGD+KwM-qsBM0?wU=~Y8^MUghbLZB6%IjuI`~!l1SyjgoFoAqj zXs=R24kL&d$4Iaz*{g;1q~JzMa<-)-WYUio*iRu$Th9V@0$b&)5ajT74W>_W`H94a zr!~&304#R&&2Qh9!>|z1LYTeq19vv)PYZn3SD|SH)xlnnUb(pZV{aH4(hXG8O?4w4 z!s>dU42yFg+B`z=5~O_4pT7XNULVjXL+#$6kPU5E=VxbdNd;};y)FU8rm97lb?QGZ z?{%_e-r)l`v2r^#gC65sg!0PSgN+ckIDl_Av9!Dje8CLsQA}B11sIYCid8Xe$C9eL zgOhWJtU<=*6Medb73dlo24rSs?MJrTW-Z96lK9n&Z;BSVh&=$i z6~0Py(+kmnM@6ioFaa0>2llq1!TFu{6OJcg#KSgrJXR)ZiyMiSYdUWRp+F#Jlbu2F^OOOs&Ma{2TjPX5OZmX7 z-LAC@4)A)=7ef*Ow;q5cqP3;vX8{yX``9B;jNMvK?hx2GmFb;3WPbP?3{thHLX*A8 zE!MW2uUq8>>&D51pe=O^(wtoA!^zdS{DRCn&&U>!8dzM=!L|c2`HX(J=sH1kp#auW zE%Tg=oLo$)VT9^6=;4#x02wOFi;G>g^182eAdLtb^r-dJL6ME&Gh~y;_%2+4>l~S@ zHN&$e7wgFyU)OSM0XuUp3I_KMMvpIBeR%nTP$LP6^wbR(ztsqO@J6+C3EZU)-*v$n zty2RrNxMaX4ksIf--R_c9SNBIG>C&X=Oc)f>LE)IUIa82l7Fl$Y?GaAn)ejq{nh5i zMt>HNA81C_*>mT-xIK7hrGH)~IywM-m~jI%@Y#JqUA15gOBtGO^B-Pj1a|du0ssw> zCLKkEpbPyv71b-CkV6N^^80z^r7OihyqEDHvp ze>lkE{Oi&1MKhyyJS=FRaQqDX6Kk0-@>AqivtX+y$J%c5Ib`GHe?_qVvTTKQa-f>0N+qD`-O>Jmby2_&b1yGGMct(&OVZ@8(y&@iCqZh*W;CS^zoy zzB@p6DEx6n&l<3V&4@jLCAt;ed-kvaIhNz z8Bkgg4-fRFr|3d)YJ18H=$-w@K-L%Bm<~=h=+r#35+}@nQzt-tJ@|Z zp%J1+m>82h`Xj8Y;sh|jLO?`6g_Yfe*$4JWULI~KJw0N3>(P@Qo9%L8KwBPe4J9*$PMJq!0bwuQO}Z}{mc%k;;F_n9`#ZZVEFedD_T$; z8j}tOc#7W(R-_B9dtL~E2KPzEays87oiG~rl`tErv>0AL$+T__quZXS5TL88yKf6d z+9McDDw9Klii5IhrwqSCGa3bZY?!564n4I)M*nqti zgDBe48No4v$H&JjhZdYM7O{pgpTzgpf>H(f`HmDEZL9Wld(^Hb z0;DZVM9@-zc=7al(x_*vC){KJPZ2wyPiQLtyM zu7TGNWjdJfah#!d0B!Hs+t0Po;um714XRtkt3jlP8NZ$+LoMV(`2dVJ8*|c8nZE}m z?wNS?(I*WRTLT^$?8Ivqc31RmVTkwXMnGBtR_nu>RD|Fg6c#v!VxgDi5LZ!9)(8&y z4nAx37PhI{zuc6wuHkzZ%1~dq{q;wfU3}K#h=g6anHe+U0}UC_1^l!8{gbGu3?;SD z8%aM-bWE6Qm|hcL4s{KDxF_&nz3%q8UrR)kGTtWLI>BmI{$uttpTjQ??;SaKor!)N zBSwoAyTo}K7Wl~L=#>#{C9a&1nQ`D~4{=knmeZ9kdDf(#E)|z%(E6k8OJ3d^8Y@&l zZu7lhEYfV{yySE^K$Y{6`%hP?lywumF8rV`feU35gpr*WlLvTT(Ap94rx51?3m4p} z2LuHL0l|C-y)lL0@$AC-qMWnn+wV9y%x?qKT71YAyCh?Y7^8^B<;*k0TPjh6RTmhz z3zw$L_9J}-Xh`M5Lom43oCSZX$wb-6X4o#Y&C3AQvf_83?GzWK+I$g(o~3qmh?%N| zvCvqI=L8!7Zh2P-F8UU)o+YJy^M3UYa!n z18%}wv##}?sB!G=>$?dpAPufq*94?PRo79`K_I-V7ovf+m{@1zLtf=nRN(!wiQUyP zme+_Wckoch5-f2)Ti<wU1h0vZMb23-pWz}p2SL7V0&ba06igcoYYpAUJx zUPUDg3~NUf{rB8%v6bL5Q+r6H-B53sChJ+mLAEEXWOI#>LgWA7e%U!TT56vh4v}y? zKV0>wZfk3!3JD5MqY1x4x+5Mod@LT0!t6FMS;Ee!n_cYE?$W>v2Q;`sE9h1Uph*pZ zhExlbC}Y#@2Q4JPaz~~*^Bqi{*hEK1OQ|r`<|&KM{lSSRP*0$fvB~H1oB0(9NN(4PaGL@ep(JTo1cG!shq;fcHQRjMb1&X|t{%5a{z!xb763yX>T zz`#InmA}b+c9ER{$?eJ3$p+}*El-G@NaH60Q}b%Fi>0RRgT;p5KbP4ji?4*5wC2BR zrFf#j*J5R}7YhJ)$#26g%5LLC)5)rqf7zkzT74~Gjs|t@RS0W3zKDCb0FPo}b5y`b zqU?pHhe*w^3O#0+2CV>F&^m8X&+NX`x(@`M9*6c7&R@`;sYt<}zzr{NBcPrPTDKlg zJNOOg#&fbW_<0>|@CIclwvB3@(5(c3<3b?^0141~@5 z!GBs5R8)8^F%rB#r+B6L^T)=&xh}TiPero|@aiuR5c#BrjW2V8&($k<^~ydN5;8kp z+bd|s0w}w>79-xmYoMbeYHMsf5)aR#J!N3ejA1+Otr*_| zL*>Vc^71~#K|U>r#=s!9AZ|VpG*BYw^<06liFEG%YzeedvxeTFkfRxxv;SG1fbto}R{TZp-Zx)G;Ll zB3Q8$(qoI+seIl>_z~<=QVQ%-n4Mu=6V7~M@dZ&2Kl3yiKpHA;oL_kX6QSZyuc0H8 z8Ip)1WLCHmPrtm z`OSeAGhooL6cu?C;d5WarQph2tl-mY-)*|mgFzul|&dZ?7V&cAS(W% z6HBttuTh}{0*d_J6wtvSqQd(evPlps0$Je*2F?O0DYAkZZG$Ax3ST3L@^kiOa6#W| zJY^;xxj&EtzK3QVR53Gq$qXk$0q!9QxwJiwlYXnWI6H$av>!=Ef6EPj{v@2bpqH!} z1XyfXmN~MB3MpNnl~V%HEoOrq;*>1*b~4)HEP8jX7C|tg zW8Wy@IDDmlP+K2Dj#au;AZg3R`Ccnd-YBqP>(hz;y286ND`=Vzgp1S&f) z?8(y-elqQD4YGLQ)9ffJSrzr@^YR~Y2F7%|*Ak;ELTQCyLo?(}*zFM&LtdWq#j74@ zQOaGbo)R3-r>qg#$7lrcqQ4E+;`U*i9E_VERJr#;DuUL=ifxbFZ(-beFVwGQxB!IO zSGn*hmM|@13&SLC{B_=$+tCrR^pGV!~3dQZi#$c7QHN!cea`+Y(V2dwb^_(8j zwom}{n>B!S# z$R!5NAmy*DTQlqk&v{tD4*O1 zrylCPzuN|!Q#N>IPsD|iruKoT#r>xc7kZk|D?quNCUsS6YIWe_XGZ33 z&WQ>R?=HeUaxJj;Gc-2z9lGS&53VK(Sz@Y#RgVa6Wci^WQN!_Wc=#U9vqCUg;)C7$ zVVsrn87fK4KzVWt*d5`({{51BjXgq+qN9*Mf+dl(CF91I)yvThY0AWGIyt)^CUn~m zfv#OEYBkRvn4z>N4BGnP=x%-hC(8~*ibf7n6iArgUu>6wm>xY50MgF zL8Lu1*%e?Gv4B!EuOe1^jSoTo!>P+FD?ZW zQ~FXH=4m~@u)8`M?NtbSd56JXud|sD z#g!)t4R;E32{HC^637Kz6<^vEcvnBZzPC*S+M!em!9og#>ZPdxmlM(b5yGYI5KUs3 zz)gS=fp^0-i|FeM#%gP2fHot>IYn=tbjh)2D-$ptvO1<;h(6MZT;GH-i(`z|=i46=rx0G1I{ zd5;V8@@U6zY+z^4)2y~0R4_KOg6ef`4{Yu;hQg!v@y7so6~)EHj=**A$7lur8eaE- zCyUx(tvchM^V{18@cNDPyhr5^7$0**)M6#Dywxh3xY!-3?>;e#`=CD`@=Lk{Paa6E z)JUz|11FN-WG)ajL7_(8-<^d+X1p6ZZ@uz0Dg-GldQi9i3S=h&QrXc&xI!|3H*C_D|~KoWmXpM9n5JUI_opZ{*bf>WLlLL&=#>Y!)YFZ7;`FNdRMfhVx> zA)JVB^;SSI6c?mKR*SvQf}Y1qfbP4)P$vO&e`2C+W*ZJSPrSfQ4?U;e?NRHw6+2Ei zaNvNggzM~(RMTb*Yu;zP5(rE=(;i&b2f1qgyJ4+9sjx*I97vPVz?18cjY4l^;iq_T zS2`23XQsQ7X}s7lYY&>GajGLrGb}}=Z>r!`Hf!=M9a-oc)UcO_Uf-i!0lAZzj6FWW z*TxJVqpTOg=Q(@kJT82;xbW1r{C(b2XN{Eh?wdDn zmVZ_`3OYHf$X~|?;|h&mN18zgyi*VbQ_5l&&~;RZKbRoosmj+?p!Vi_uLVi1XSY>^ zExPD>lV>a28P@9`@^Y?O#VDDrLqji;@sOxv@O^mc-X3F*PB>QWAjNaA$V!-f=Vt8v zUZg2R7*iJVoL^1AA-NqcTUCWY7e2+nzLq(Ay{D_95RJSbpJ@e`2HWRc#Vy(fDLc5H z&6Yw5Pzv(VHyCpnrue2SN(v ze8(R0ubFE{aKX6Zb^s=wao_xT6ZH2dD7uD!gC3`)nSL(yf_dkn^wulc@`NC$7?aOm z1z*^G{su~)E&!uZWN0{6axE5fa%+sWGK-T_Oh=DQzkG9cPMuTba za8O0j3%w&U^MA0!sYQ%tGszy=ib+2L#FMWa96WTXSY{VIJ?*o!Ue^Ir zZRbeVz^`Q%m4^W!CvS!>LWK=J$!N$Ko;Mx|$XB>+9?LQk9A>iImcZ?$0+S}+HK1*G zwG)kEMjFNS(i$2Uob=-0E+W}dKsjJ;)I?jdhFITin`#THCWh$879!3P{w;_RG|!8unXkw{aWIOjZt0I)9`8JE|7*Zs%@Wf| zF+`-#$RD)F?A0_no|k61z>R9zi>wo2`KYdfgAQ`I0{87=@W8kpAtHKha-T(H(|d9L zI=M)bWvZ+y^bbL4?mG0KK~K2fg6?_1zd?z(I<7r}Z!kzf2aD5=7`^Z)VK=z{6aOO! zW8`6hUVBZAj%Fu4gWutL5pcIZAGNIT{$&_JM`?UhPs0tv;E74M9-NLdSwaSwtXXn|40l=K6NFMR__UJ)@*m+g zpV*Y^VWi3=1=)qPSiobrLg&1F*az1%xeZM_1^NI5OEXjLLW4k{qoSOrX?#BpK7^Zb zi$Bp;X4s%0D=lpj0PV*ASo|TN7jCQ1FdXTlO(BNRxE6oVImyWcVUK!at_Mt>Jw>`> zuh>JqjmQ-Kf(pD4#ewc@`&=q1)|Bh?w`rh7|Hm}s(6}m?#@N!89<%SK6EC@f# zUFx{aub*$q75ng)Q8@pvQE;HCLijX)ZOB)~Ep5Xlb|9M=`EC=lvowVS|JL1ku+-IS=J|qYN zj_0nf8-nOHc%gR^c_2=Mh|x!2>@PrI&2U@86ut<-OlEr*uDi4EH%Q5$xk6iTg{iQt z5>*3~MQ0=;{{k*w*FQIw9URzjLD#e+vZ2}YGn_2SR-A(qBJZf()f_lDaG*gI`0OeI z`9#A#?3+j%B}+gXX|9kipnjwmuH=_(1pnec&_t&L907NMtU?Q*r|X4;23SRB@hP%6 zuDcwlWeOj%z3GPDSZhb{LNA6NG(cd`Rh(nNotSrN`!-M{81=TJ5uN`t%@IbMbl<@p zVUmgVnmdipHGvl6sCbXf4$)x8967>HCr|hypj!g%3T;ZDi}A~KBXcjhCdmv(R*1O8 zF+QUy@S>Y;&**vNTpPf-;#bWx?e)IPVrXOkYyV>ujBT+{*p!|RtRHy_-@VYiyBgJj zAQ9oCF`;MTm_=O3b2o@;Pd9ye04jMIxuN0{WO^DCSZGW*dmXp-nU-AZN>=2JEwm#l zwV5732LxyQ#UuA6@P$2WH@FL!GdcN}#W%Hk!61mw7+Y|C5q#H(%Y)qj$M7{<92->k z_O_i1MPw+G+-oJESsc%7a~0hL1;d>|--ZB{j7J(8PA{`2E8pf$G2r%&ssZmkM&?}M zKIprh-(C0GhL%+-CzHd!pNs;|0ym7|x_k#*%Zj}>2nA?*TAHN{UqW*7B67z8xjb*pg%EPW*Vag~T`GpsFdUG8YJN~ymw^BR4(I|`NTVS(>$OmZK^tI% zycpp1Kc35*QY`x!VgDHDmJ+};pr>>ml$pF_w-3|48m4e#$$K>a1JcsV#NE7V#3&uj zTMUDqS!Q>MeFv!`n$hRfT-R8rg^0sUyYM;gvQiPGRSz48_v1D4sv?^5lAf*|C7(y9 z6V{Cwo&Rq2f*ip!@YSLRe0MY8E_N1uEd)^SOamaVe_8!s@>trs!L#cS`%actz-ZZT z-(8^wQ|&`!biJu?j|d>*>p|NV5K|A)P=42yd0-o*|C6s1dA8l+o7I;0z< zrC~t23`C?sx}>G08&m|O5d;JV5Q(9YmOg9H^FQCub)8RV&xieP_B#yoThDq{-s@hS zWk)-sqdE|H6Wa=rD}#NPmbiL&c00}>gYfIN$Y-i4_{4C3|OimkId{XcI^Q_lYDkhXwVXbSzog=mjd2`&PU^5tJD9@p#t zJ~cNcCI;Q07hQJ|&^mMaxxm&WY~$*x2?*}XAi@G*Us<{N{H)y@_E+ir4=Z6xq!oTG z9LRmpzW;kgS`1v*4Je+Sb$TAt{~dVwxVPC`(Rb$d+oA8==nnJ^k!WomaTjVT7+E$T z6#w%EZRj72|Fv8{>vjK+Qq^jJ05!%+(5B9vH#>zIeeC_Ne~;b$F01lk2s)EV2GS_6 zA)uvD23Om!4>oZCEDW*u514_4_gnl^lT--p{j_oiYvs^R@&w4pkj?-}X+>Kl-?1xa zLL5Vbb>W5c6#!NQTA-;wdDD~+;!fNRMqe5D-l=e92m)`if}w_AW%?^fAwtV+17>s> zUHsO$7ai|5~t*5*xb}!e@>WzQ?@bPk?>; zx7E|FqLl?YZ2#W%q6$6~1s@s!1W*O&s6Sg6#(K^^_1~Q_I-7BOf~GTqmyo(;wvYbV zT?B^bwE%!Tg`@AyH}F(v_vW4AUvKt10zg^afHz77^!nwqD1a77sMr!yQt;sY>33{Ex{GG?eCdKn8WJ3kMF?}B$T2Tif0|};liEf+%FypV~^AEH$H#fHcKu!vXPwLEb zHo#>=)uOZM;tltPF;Kvp;*e0n!E^nUAn7eQ_#yZn(gG>HuZTlktjGE~K|P<0WTmj4 zDYn^PMdgcf%{E{-iztDQdhZt$W~9-ItuV9krx>iH@zrUjzu#u(^y1_7HPczXWkLV- zVmEvCyVF^p->65ArE7*8y?GQGo5HAkY(=zFb5&5#F3H@Zf_FYy=wkE;D;=Z4lG?dt%YR7$C zkN0InJuL0^!`CO>EgGggq@XAaBBTYfbxWWUh>NC4cq^q`cduLT3q0GPREs_>`Vzj= zVmM1%K76;w-eTd{P6b5iGb|FG1~i+&EO*Ip=7n4RUP0F3YN%oY?58;4fl@Dnm31GT#C&MXJ0n%-rt9_1&-23z++$$Me})q zh3)#*d2kimRj`ilUR;+}juj)?yS=mg_ip3~LpKk+;epo5^{t0z)tpB0zv494DAL4% zKT8rt!_N$VVxbT|gE6j)H_PfEf(t&x-|*c}Y@u}W`FKKaw0yf}3ykgYL5o~kpTrk@ zxmjruFAUiY2F4|~pSg4`-NESvcOVk^wevV$`b)pY-b)XK8;u3JMe}fGBT+O&aZ<{B zH*;7nV<-*WLfISav>-P!n9&ey??Qc6qqLmGc&-d?l6mQWpZWOP@87>CYaifFL;`!5 zI^%?hpx`nm2FB~b$>irUBUx67AZ{F}R?XFTgx z%1Q^O*V)0ggI+1e;vp?t`|)^DVWL$882&YVqjd1&i`p4lvV#Yey29U|a5cePhOgBZ z2F1Z)fGVx!(6gr0OJZUtX;ujHNy`e-?AGATtAxU4KcW8k= z$d69f*FGxWz`^mevA1Vs3T2kbbOu_;8g)hkZb89(JXW#OgoO-*yKIf0Ja)@6wS*TgDN*{Ui?6!`6tB-We@IemOFWArZX2rQSQ#B7s zjaENCrB7t;b@DAjjIY8DWY+#<(x1b4t(~pf0URlQMcT|ta+#SYwB4*6+i}*FiF*32 z$E;Rg%$;_2^6Oc^LC3D3ZMbQWXV?S2;Gtkaoz}jt}lA3zrS*l%;=zayR zT@h%J!_MxBdXZ-H)Dy1a?l;;4uRBFw?gP(?Hr42DJrSl?Vf!WQX#^MgzU{L6F}+&T zEj4MCm`>bdijgzdMXSVbH4rN2{)71SfCPfpGV7Q7(d>3AaKYZLToWRnYw8~0A_KMa z8@1(GkC8I!(p>11bFeQ9Gi|Q7u(e%zb9ROwXv$3G_^Q151>0myJ!oaivJFd4TmSs2 zVRu(5BMEBZ9>Fs{J#w>hQFP_pdum*K^Ah}Jp_u1_zd2t82BMzx2F6vR-Xi1Vsb!5I(#xhN~_06%+DSF}lHI!;K5X8#2x3}ZSzc7;I1gk-zf>?i(*=n+Z zIZgfN(eCM40Imi~-1nq(_GB2j(Vk%an5`%&nr5^R-TJHt-r^P@|5<0n4^G2Q3YRro z1o5w~)vx=u!^#9l7?=6V@Kcs{PyTZb;;GwieK=r<3;_K4w3!P-8+)3N6EBQ=y(5f& zKwEd3bm@&}qwl9bfBsAi{4`^ZMY3TZqNYHXPnq$9TQPHUbJ*%{^VWxXiD7d--jVakJMdT*zF&z3OM3 z|4>+Fs_5F?5hgs!Aw$(SzSrV0xDE+14s2McUyMc3>c0>sE^ZYe-|g!$-ckx;PNFa` zsG<;Z|GlGEZGVh22RIQ7zS4}V{%Mx(?m+2e-ZI~lguXQgMo3Jt(q6|%A>0-l*GubjmWZLec@YXGufo!viCl}2cH7J;vm~9 zpptVgT)`G%jZ)Kt>5c%8klK_AS@=$~L=W3TBq zdhXctUi*BqA2_}0HXG(g@uj27p5|DrRJ*~+(^G({azyexJgI0J=y5U@4$eAuv)Ps< zYe(SANbHDgG68qMD};@czmudW??@?^N?vI_bO`oo3pM1ZF}w4V|_Zz7fn9 zN**gjaVf5kms|GDKD%&bwx#bq`Ci`dO*P9jpWS@UJ|X902&{uwmFd}5oEPD!aL`sJ z;xfiWm9`577F&6(JGkZM2A~Gl>bW?uPqa@X8wR{CV{iv&__|p2GkdVHu}>V_6M9+; zv`Tyz`BBMR)`uvz!bi;b6lV@VHIEb*T{u26xr2Nb4XowKEE^UHyikX_JQ_FB^zl`; zN|ENcv8()fi~}v#3$aNb?kb@Pz;O`H>sQx#k z`1hlv*qKlM_mlszzxv6fKZigK|6MN2%Y-`;ZswQv1Y7%` zjzbv%{U6QElc`M>5(}@+$&)}SWVeMq5K0PxKJekfY+j5}B+~V$gNg%a<>|{B}uajqI-pr`wcmEeb;7*oMyYUOBh$7pATi8J*n5)&pn=Y zuf~WqxVYBINg7HIfv_%Ver$F3X@K}A#x*ja=x%|Xac&j5MVSNe03K6VPQXUYeXxzIKRx!T1nwgm?a2EuyuB}vEm&AJN^vUPRlPC9&5S2m# zOlf`VY%y|LJ$f*A{LaXmy1Rl25L*Aa>f|5W7`zbTJ2*oQZ+WhGH=Kc|@l?!qg#4L!Z>^T!{T*x!3L-4A!lLq5K z8X*~(9ekla{ObWP1{OkW@iJgn858gY7^4egq024a@;AtKQrLNeKpvv-i14J;yxCT| zF;bRyt_Mhi7_dh7E~1~CM5lQ#8vZ<{pLf{tm*HQGYZS5ama|*?Y_W3L<7M?iSx}_Z zYQmi#P9`A|oEu;_g=*0P1ytfrXW(h}vPzG{d*>qdEQ?@%u-~l=ahPqg5Io?l$ z=eM>!sNC!`*BRrWt*z~zAQ`Kin6pknL{wWmWZfeVQfq$c+;9PgN^yz}8xMBc!^re# zBj-5S+1dF)%vO*nP(lIn1Tp(H5}7U$NH2?#{}IB7 zJa}#wwyKT2L;u~uNNVYMK>w+$AdE!d|ELZR3nPz3OF&m!JHBLOnU|rKt)LL;I~_fx zy`kV|4RRZAx#FbdzCX;)7BL?6M@1y<^bf3O6jd!4BG-VNeZe7^cF#tuSU=&VbF)@p z_2sNGnkB2mCO0#)S&|~nuG^9DcabI?$IFm}89KwFb}d;mE7ej-);}B47NEMSERQ2edcix13b4%wcyu+b%)_11v=`uN1Qqt!vRUO<_ z_H`m+;)D9!)3)+r8jq8Glx4v$ecX8o(Z`4Tis3w^eS+Zj@pYkB=kd)qO4V)i|_!h=m!`nF*;p>a{u1T9^O~`mF#R$-PgTXR31iBa{?41Y<)c;|XO+}cVoL26Vm=2#iv+=BE#rMMly zp^5Dx1ZY)G0~kfCAq0-ORYmmGmS0(O#InEnTxy?rfq#=6U%m8BXeB#ht;n7 z?7djSdvUQe{XfENO#|hBy?iO~z%-icE!R!nFISgO{FGRB`&=>QP2`=WPJBeuwt`Xy zx)V^{$qCfLTj&b@f3N=}@Sg&IY*ep+z;_7k&)eMr>fi zx}ll+-&4R2>zXSI05D9Dq&QyOb>ir>t@rDT`I{d+VpfW;lL(nB&^0=|X*G!ib`w#K z`xp^^G-s%f2b$3Dbb9!(H7HMgiFE&IHiu67M4k#kwfwSctv-(Jj}Me(Ff4ixFq9Y; zRFJIg?t8OrxF6Z>?=V|oN%@kCd*`Y@KU_~%LbZV8{mkGMa)!MEh;W)dYaHjD>qRm& zxG3W2OS#^}Pn9(SwH)@A%SLS{O0`$2fsCPq(;6efi(lCh=-HO8f;V=cxOO)%~oH(~GawZ-X4^lAf*sh`IEgjtLEn=URcNOgVvLPJ_J zwtfS3ql&dC9uozT{XAdt7#~gNwlILb{krFlie)wMbOp+eEB6z+jYr+*Ta1BMt$Z00 zm%W4K68fhh@^^2tBVp2-mK8I!W5hPWvxIV^>>*X8eCD?W`*Ks~PKI10pUrS#48q5C zej}bChEV8UFj5d&-YjY!`?Jx?B6hngqZCovK-9*EsM9aD!!7AU?@6L%>XD^SaZyE0 z2U7T^e6ckoH|5d$wKLRC?zQp^lI!-``=p8U^A=tYA3lWr=>~V3oAky=gIx^BV91`Z z#-ZgEmgodMq2g?(Q#+a4Xrwf`M{S`qk{D?;`@AK-u<0>RsdS*q728@;|?Cxhd(gqcg)tl~(ldAl?v4DIl2le>>7D=VEt^(qLgEQe|kMTZ+Y=Osc6#a??BNN&$U|Adt$en_{`dmfXn93 zIex=pcDm*+4tX7zmfeH&HO`EjkA1K`8{p?zd3lS+_gS^NO8hwTNR$FwN@v3Tj%Muo zgtofXl39kGzTA?oQ358KuDL(^k5a?asQ4{Z*&4S8*yfs!S(#c3fz@Pg?~pAr-XN_# z9uGGBP57N`r8!JBcx;(!1`R<=Kb(K=t=fr(i3US69pB94t-z3-R4v#(8wR_Ti+Rhb zp+oG-YEZYWPt>fO;61_i)rpmnk$3_)-`dmMe+5~cu2~Eh>THdVk2l{nbxY>hAJuRA zVb-i#(sW=wyU|Y3Tzm6!K41w4zkPEmDopB&Hp=C+Y^9?!gkk5y%U7it8j9+cN#Siz_TFoV!d+kPxn(TE!dPfs7WObYUMD8ro@Mn0h&%o*5{Q zNfcnja)RVNrMePKNnpHVT2eu2wLGMzZ<0p(yPL;@hBs@=Or=PqfwilBS2gb~CBbC9 zS>fTV_?O2NLK?K(@wxl5B#0LKuNel%e`+d1t=A%wYMvrUk9F|Xh3;()hjG!RP43Kk z)Gxj0p$eVJu-9hg+Ro!EY;qi?RnZY%EHYGE@7!|LDAO-(?Jc3ss+3KNTgPfQDb2o5 zFM=EyaXW<;ej#D`zQ^R6cn^xkjyo7k>|W>b_}sv}wj;s!3(t)CEk7$ND!P5`D==Uk z8R4=0@%slDSsAV`E(N`lZnc&JN?rTr%sOQ>l&c>5mCC)Psp#_`Ew{wMdE3yKS=KI3 zl+ITp(QCp{&>6O6d}Bgv)b`Gr#4-Q$j;EbS+WJd(A>R~Tqt3K)<~pYQF>iU`b@WVwx3O{pLWiKiyB_Vse1oegO|AW&{uiR|9I*=e-6sb)Lcrn zlF_@L^EN#$Y(u{qAZ`~V`Rnq&hK4O$=}-Ij-Z{Gpbc3*i(-h3g;X`Kpdi3hC5q(DN z{gacd1ovZCKGFoB8E#W9f1!UFKg*Mps9Sx>*i!^YSZVK0$ZmYZ>hp&fmCF7HH| z8+_~N^k+4tt9 zcOu40^E>!=!{uX{Rb?V_x!f6k9_@3h+G z=HJxP(>vVEco@9qy*p~zTxr^ljr(>(DUarc2FH@i&i?f008FDe9`IpDA4sM5MCh+Z zR^h*Y`d;jLJtD-|7a{2QUOoGxO_oo@BaDv~Dh?L9EUQKeV@+~nnnRfs6^NSvuMY_e z!%i#Yb&f(7BT~&sVt}DR`UW<(?m>Ovz<{b3JE1yGMpBHvFzaeH=OPU}TsA~Dx;pLo z^DJ2g(atl%;0wzf`HnJrEDk-H@eh@ZjEuT5PTZCb4R#(6ERI_ISlxX~D!)A2eyEoB z{RMcpI6hXJ*&`coZTIx|ti*sHjidkVrjkcru()=zO1GN?` zUzRS^uicCWB1LM5Z?3!&(Xd3Mi|=l1m6iBK`J4o;cnM2mU_U!3WRH-cX{vFY{%mQE z^?UXW9uq5U1+o+_BHDTIJbC@u!(e>w?pZ$dYdR&VMU$}?wNCGbza@+AB@ap@-0j?aOPh3yZEaw2%-J!n0=5*MwW zORnlTa7iyzTYq9><0UpMIrX-A7k^)aQ}y%;5D-&|BsuzWbUgA=7~$GTG&RWFg=Z#4Vh zuuLD>+3_^Z@cyTfF0=KXNtszi#+dwtm6e8%l!TWQGVyDtn>Fl@hLW8EnJIR zwB|~}62U9SS&j@bl8EOKP`*TdmDLorZ(fCn|C|-b+kM zQZ9M_{znviH`iBb%IkKZ>N=IyLnu^lN*Dj7*;n$tl{l=14el=`fsq2$U|3=bO{Tb^ z@855Hnc3(giY}Q;$(xjMp@@q2HZW1^z4e?SK1qf~q!O*xGA<*5A+ia{GpoV)EQyha zMj9ICU&ksG*OChOi63E%Wf@2kVm$VQZJj@dK$j`%^>Z3u%V^Ny=yC(UzqypObo+T7 zHS*}LRUjBkvb9mMu_-X0ve41hwZ^>sLL?|g$0qA|z*qG>sw}w$ZG}wBc8Q{lO1SB^ z^epmuaVMlfm3Jd|cU>ndUgbU7S{niJV&hJvPhO^K|3sQ#y2e3AAu{+WzG5r)kb*W? zm(78uE*!v(hH8?rhc0}|i3}Rw!A9}l55v3TB#qq|xzHqmf7K`|;CWI+x5BdrKQ9CK zPNKf(iY{rq5=vBxDw5^fleeEfxja&KW2L#lM+liGcUK%+vs-U6KTe16=!WEM^ZVKH zB(z&F1TpJ4qk8Ag@!yrMmKc@XQ{f+JGStzLMNnZJk%0ryu0@!C$jPx_Cl4E|S`Ai`QYO2tv9Yhq4M6aO3@lD9;=^p^yXKawiXtI?*t;B=YNusB^LJ%8_FhZ*8o z;a+h%>{(G@(r9fQ$+9cBxTk?1mXa@%TGF}1m{&IOt5l#X1Z&*3N`Z@b0vasr`cLRf zy5)@%W1p)gX3KUS`)f$*=>w|6Je|bS|TPov_;`yha^;g?NvNzv2 zMCZt}N=oTkYH5v}=&#)4YDkE}9Cs5>?~eteouaRqG8;7=E%7_g-^fvA&=BjARX-^XK-derpffE|w>5q8 zyXO$@X{@NRc1STAjEC|y2-Gz-H;Hawn0Yi#)n=3O(wr(IIXMuCn^{k*i6h_b z?s!{`TQpL}TRtpX5kzeFvPC^Onx;C=y!>o~u$G35#dyT;b)nMH8)V<*&?s|>d~Z`@r~(bh+DqjC|jQo zDI+t3*-@k9S%{c8OTCa&s zo(mdU#4X3dtxKYPl`VNuEmDRi%m|F^x@MvFMhVEYp?55qgMBvH-l*cqw-C>tHITO{ z48J2oICP8oKaW(Pv+NRB|JBweB@%qz-^vj-=Z?SvP2Wsh3&o74*Va`}{;2ytFeJaL z<$%Y=#3Wc+Svh20c{e6DHs2&cxRkeRhKt59t(Va#-Li;ED!R=PZ$@G;=7)v__AdhKSA35Tb4Xy?Xj1Efx%SYoEUab z_TZv&CzjZ3#h{X4#{1Wlf>%+*bo4d3s(FI~f`Uw>*s017PQLz{elcpjM&F^x5iRxX z`o;6FfGH8D*6Q1wY`5@$efP<=+0V@~f>G>0*I|I5sVpPomu&4`#`Wn>NkzC0zk$P;LgsSW1nfrvp#HTGutsCO;!z>K+(L~Q|locd`APS zDjt@-1_Gk{YG5r3YL zJ#!Hdrn<7o06MD9b71taN>YbdVtQ3p* z)0{UQ_2v*&LO4*t+(|?(HN1^y zc~D`ZXVb6w{S1#uQ(x7{Ncq7g$>AjgYg+A-Z{6;}?iv~~-)LqH0Ez`KcXNwZHl%7B;~c>VVwP0`G*$#K>3&F3yX)ZoRxhn;BnV`sHok zI_n`uKM(#^Du2>MTGV*88F_taSy|LR<^wUM*IR^Ds2%zxB|Gpl`&MXDxA-AtUF!lgFPLXBhOd7e)7+GTa8D}OJsnUT?yR9sg~ z_g>ZDV#V}^d;YO+^ANeNs_gjcKJqbLGy@CV=G@951RE_vo|9?A8OgrBdT}rV1c(Q; zg(|}l1w*<~L^fl+xz-6=n$^|SM$%mDWXlfq6HSJASLp5pv{;nm1++|)m^JaqN3-S~ zeb}n6tJ_6+O3>8kMIhDv^ss*v$RbV;&7QNy1|0~QZsy?)LRM)Cm$(r-@WqlkdjK|zc1))zA>Z9lM4^yVrMN??p?xIF2OTK!$Dres%#<;FxV31PZ)N~RI z$%5b}lk>zjQ_K(FUeuNkY{w;+1$nkYnv4m=d}&l2!X;sG_^FhK`Q(T?e@f|eIlAaq z%&VF}shujuh4EPTNN22(&Q6auSTE`%|ht_6q{Q&u_hd1rLrp6WO6jB=F#pMT(O8-f}3Fmm>!N*z&ePjDD6LrsK} z6Zx6I%Z9LR z?0ZjbUC#hBF1u!wS5(v}9mX(uIpGSfgEW+G-T^Y~U9%t%MBRtzD=f~-sEJxkOr9>9 zyR4$Vth6-pF~-O5tK8l4j%n0(F##srT4VKao1sdSNZV5w_zir>?Sj+@T3T9XV5Dp; zdo>-(T|3upc7MG`)0sZ^wwlOOa2?9C$i^3swBvd#I6qH2)^=mCr0zIo$umRbTKEWz^s_CJbA~YU^xg;%cT??{7_g725|7?D3$NId_lh(Y69J{- zFMHQ)4JE?zptkO4Mf+xk7`Yx=Vt(l;!H8xX64^D3>v9GL6VJiqQ$R@WM@76(S!%ep zweP#Oq<)j1EBrJ7AAIa0nRK1^v@5_ApEZ=iTysySGM2Fzk*ra@qw|953 z>-CGZHXBzVp@B;GLr7>CDMAX?ySkx1fKySex6rRTv>%sLu?kVQaiw!9Tt)3tlZO)n z+42-omA~XHavMHa-cL|UIQ1QwoHUdN<;AX_@O{coXclTR%`Y}4JP_O_9rHgsayASI_BrUReyXBqqr?pIt`*sxbYqEtWEvh^4J} z(Z!G?NHP`HZQsD&gz>J4yO;+vkj^}0x40QKt|)dUmLxgEX)Z7YkcV7;Z1pq)uGis) zdor8irhk6d5oQI?U85@F7M{&GIUglb2up^!S6UNz9%d1k*uJxDI}P{OF&p z^dJVw%ArTI+_JN|teTV6;OQLY#XbE|UD>jJ;^aaUvPim^;vulMUQWR29mtY59q5G} z_G4*%p;12#G0J4u=n3%fMqj^jN=N>>;SBeI9VVzm}p|YFG_XXI4>V}QzSFeh5a7G~Q8Fy$p_OeoB?)f93fs+=uzcvHz zzg6;rKc0E?c=PS>_PASE&N3@D-Xc?e5wl@d@7AP6SVBkoP})?H>=0?{0rD%1<;!tF zetzOOESZv9drD;6O~cr+?)e$$@N%NwYbI6L?MS&W(QM~0ty(4`uizDE;0Fz5)7g3H zk2w^%Y&J5~`lN8|KVnsg=rC(wjVlPIaZ|Ve&6v}sumj^dgnnZg-j@@{5stMx7M@g-q4?Smvmku@o*8G-Fla}2(Dhd z0R!A(&cdubQOY_=ShUfaX#I1q^Y)XYSP$0K3RVo7e^t_ z<)579kQU>yo(xL!93~QBKs_G}j01J;g!d@To*$HTa&fT~z=!e`!d^O4giwkS7h=ub zDi?2|i6ycsnX*kG3LUB@u0g2Uwl8@B1A78yxxS5$*SF3gu;#qLn2xP&xGMq6QXN6Y zqp75L1FIAEmLr-&H*vfzj)L>Wa*lpqOmg2H_}6vat(|azKl^lbbv5udmO^CytS=-0 zW+@r`Nj(-2l_L00*9XlRqgkWJ0}e;dh_50d2mCN{^ zK12pun(FG_v9qpQttK2h#wXH1bO zc9LXiAqqZdN!}c?{wfCp@LZL^zm6ZIA=^}KS3a8Y zEAYaF3$gr*a&mI>at&*dPdg(O#5^Om3ftxo#~F}52`MYY$l0Ib8TY3$Y8Gtz;|ykr z?zugEI$=B9mhk7gj6e!Dh%yOk{T9|SznMZhv~rhLNHMo>akh(F@j__>>&2_{&prkK z2lREF4{x9JlWCM5n^@Ho5iL;R2Uk{CR;Ebe?S1}^M0(5d)E-~WNblj_JJ&pQn!34( zn3TIXyQ^Oi$^UyyuCwOC2Y*{ceLnI;SyF=SK3$iO$dsE5qFtR9H)sxRgJNca9?!<+ z{~~An;FBNOMuNdkO&i^zsxx5l9cBj=z_rU6##D`gluXzNY)DCBwq0M*`KUl~NpD6w zFN2BG15$VD_zLj^E;bREQh2hiOIvNK# z;IW}ii|N}es&8nh#O{wwwTbJ{|HFzvo?8HxjNbRKULI(Jn!}$g$hOUML2S+eJz^T- z_>4V5b*kP<)9e(@$A=YPAf4qLcj`{TVCSBhnUQjESjS|Iv$;1l4vDvGc>Cb&-r-ZM zK3j>j>s$G_Lqx9%Noe^TRQK&1@BxRs?}$Go*wkz?&F$?wX{yfVEmF}gg^?fG*zUu`MFdx zmv3W!%k&=c~RK|uHcYTcM~+PV+85csBm>{OYCj*F>giS1?=itWyYxaV ztuPdo^ua@ee~nj@uLJJb8(O8)yUV!w0yYZ0+;M*%LlJ0B@`75HNMB8+w6q-B z@sfLCn%uPPbL75Tr4p(HYV>5^o@{f!xn~p2b64yu3z_baWOW9dl9B(sD!BaC3n#x=fWnv#TAmHZL2D>&S=k^6`DKQ^Ma|m28PP@aE6lfy zn`84md-C}D8{lg<>OJRhI; z{^++*U0VYzMSO3s64>t#PFdmvW!n1>?%fekvVY0Xs)&E};^ew(eP47y&?4S%z)hse z&>&1983~Ad)@xGwBN=q8K#080HpAEsmVKN)GBor}K(fVXzaL*3($7ENt~k&eXS4V@ zJ)N?i`H%j9Qf!riu4PpUYmro<4?yQx>nA2@PSXmqCKy*4Oz$&HGO9=2p-4SfyVp0M zM12FpMO90S7oEAJ0o4%aw-1+zn8N!|^^?mxn@h$DF?DQK^fzkJ)gHLtA_WkA-*lC3 zbaLa!yndvSR1tg?ie^Cvq#{x4p*e$A)$KF<U}q=-^D z1Kl94{dZcCu=C_z8bnTJbyptgDpoD}Mm`$4qw#S5l$u57D}Aj(#d_2=x75};pX`c0 znWV>w!)>N*+w?KnS!8T>sh8$&PzxIA#~%A*&|Up&^ay4xrX3aQvJ6w|q9dQ-eK9Fr zhTaqT!utBU*UpgEwbz$m%N3~x2waUZMquFl#Bp?m7xaz8uUxsp3seKN*t-;j#Kfw5 zWJ%?#C6JEf!@Rv)rEMtv1mJC7hgRyz5mQOS=6z{)!~&5Oo6;7FfWx#b zBWqV9a892S3@qDNh1K8;+coUK(;?pMgy!5!EZ&D%q4z`jft4&p#mLCdK#1Hg z?xCBp{uqx{QkLD@s+L6;d>DWi6@;0N&q=2ezya4qZ)P+UH*IKoU!`15S9|Py!D`Kl zbnr@VrS+8C%8$sOPef*CP&%fY<>iZ>UeQQqp8Dla)^PSc_tBbqmcQPR zW=R++u|)12TA`-+qskN0(|K2DsC8v!Or0b_q0LZJ)71px02@cgN5LeYpbr_N?DDoS zu*Y3otcb!d^Dsz5RrOaSp^wV2XS=S8{iCVMqUhZUj{VvtO^BEj6cmoqo10Htc~1jb zZ(R=%fJYTTCfP03^X=rPP_xvmOUu{mjScBjVION6jCqC4|HZg44dZ<%OrUITRcH(Gr}Sb%J9-}4(LX=l zAFSniI(V8~A^fsM7hWN-???~uZcd4APahPc(#T0kSI9_6vh|uM6NH)EkaB$~?B_EseZ4T0e@-y0o=rmX;P}m@{k2{ImX}bjH6Tx2$=$Y2U8^n$EgV z4zAsB*B2%%X8hDsDSkJrS?j=CBqrtvZl z+1^(f1V@RP={WwJNqqi644j;fC(?|%e1=A)FPj{ z`Do>5fzSizSlMySp&H-9Ef3H@6Iis83o*70GZ)$Wm$O(rNvkKY*KOzc_*l7N@HDfV zthCZ*dD6 zNnFUV0|lyLvsD>(_`^HxzHhKtI;cA}`y3za2xX^Qj?V7ZDbP8G(;1A>`|vl{*B|;T zIUyY1lM)ljXnfN&xa)g2`WqIaA%#VBil(TyA0>f$Uh<3ec46X^p$nH?nRfJ84e=02 zt}dtVOa$Frmg>{6*~Ux%8QSwzkc!jA(E- z8UxEdP?0f8=5?5)FV~pp;tJ`x64KF0*syUSw%l&K>Se|1W~Q|pz-h8PLD}NI5-SR` zKYc4T!kb@nL1#(qRgqq`NVCmIF=a-iALNJ{&_>V#U>P-Y|AcT^)$u-XuvA0)Ft@RL z`|H=QX<0sczDKU$_E(^(o0sL>V8)C-KD(OGiFO>kBwHBmJUiQ4qOC|jrW;SItdJ|w3+u0@8-?A7Kpr0 z&o_v1yxb!Ms7$sJm=iQbWO~0vzC6w4*dL=|`5JnFh6tRG;qpI%EP@x}}H zJ9;ey7o!~Nh(w?}>%r|amR6HPmgWYBCuD-I-%EgbhPqb9{!|a<>kiHJL}NwcI;$i$ zwQi+cpfUaNYiqw4C^cJ2M?J>@b@0AWV)F24t8b*MZq~4;E;s)^52qY|CZlkg&9|n4 z9m=8cXU)n*i^Y^TFdV-c#>Va){&Ep0A~(|pYulLkMQr@yo&uekF8DYl@NujLs@Gn0 zDgG$V|GaZMML8!bDyjv#tf3I}%Y@eFy$P_d8ns11UD9;8NN=xoQ3<{!(8-p&u8ze) zFnQ8gQo{B~U*EeayvvbSdUTSf89te~}uLhcV$)1$=jwhHxN6N;qjtftYb>eWJd)$G*D2 zeRX6Zne)i^G#ggC;gNRUy93zL@l*8Cn!wRQ)2*FHv9~e`ipNl;qjmUo;c={5NJpTZ z%T5_=D7S)%S33aQ?yoH@Jej0WB_<-`FdJW<>wC9Nd(Us@W!r|TQNQ75V>>LgF%Vl* zW{u>2BXGsdYJeri--j+Unv=1E=JB_tYQp`J{Oj7{_Y;_7xF;S0Yn0I4ix`2Ay}gA- zq129P0A!(VIcTO{|^44KL zf}DY}G*6ZWmtv$c96UxiB+7MAF3x$nJS^NlHFfIQba=O2$z*k`a&K>ECq)$i%EL3% ziLd1Aw7k>1vF>~=ZA*MWTX!mg806NBe+h6ZLL~<{hqSkbhHT@B-9)lSQxbINx2U*!+HMp}Aj$X?s{3x6Lq82!hzM z(c=!fI_cRywJe8xzV>)~j_A_uKi*AD4bQ2O#I9>dt3sH2ZUStieL|s@Ldj-~3{426 z&}wshx*r#2>6(DWwFnCft6ev5N&{dj;GW2q#GYU{$ZDW60X{)0pq5_~%>U~0wKZ`( z1)D+dkj@*zlM9(p?v>l)Nn*hZl}aNfBy=~J;Yeg!B}v?6q2oB(g;CX~etxHZ3;pS~ z8HZpEecJH|2>f)8V_rF_?F*|rRYznktgW3yPS|T*x|llnPF~%qZ|do1eC$9y00Xc< zn3-0glwvCN+zWeWd)u2TMX4ayF3Mt8;^2dvQpo0c=3l<4Tm|%jX{OrM=Y?}3kvA+M z^OLI$E8&k($dnWS$ZfKFt`twuU6tjNaJAt z^{WlRp7LWdRj4W;LG#tA7kVe=roLI3rqYoxQ;y1uc|TH^*4uy1fh9qK81im3 z&mA9$A^vKyVSr!hXp3rp-f>6s> z`vuKj<_%n=GhL+2TY%|T^Kx-%XEeh_k&2G+8g30C|Gf*{@X*5LVrYib5Mnq+w6(W~ zPEJl5*An=)zU-l}kAHOQ22 z@0to}E^?}!h_(^#WwlO=@}iXZ_$P}50u)mSg=}CZsLumra8XUoAJ(2axA^Tv=ljYL znASy=&%RAeGzuooo)mUWsB{FQI2ie}H(Ttv=`eK@6d_X33Tw`NibEW&OTG=4i8e*) zRE~_0&UFSUPV7)iw9_$LY?yAt?^4N=k!tx3qLgNJ@i*w1hOi!`}OUyvK8Y^vkX5TE8_jXU+M=#mOs^ z`*52|on2l3Il_wU?(qZ7SeyJyKCYTc`^2(1>zIo)kl9`QnoJ1MRYu>{V5Q+}cm`zr zQXxEP9-JEr&(xyhS9XKd-&3IPo*g!CN7QJI4ZeP$X4k?lP)>;KY;R{Dx`+*rbv(D(+{-?x@Iq5239ncBo`k4A^aawDZiu$JAKqy)koBGbk+I zMs`cEa%QO1lRcVlR|pn?%HH@_xPh!8oenO#bG7M=iXP&88rvOO8-1@2_HpPlYU49Lg@5Yuf;okY<;<+PXSSdvsJVHz zDq31ZEUH83C?ge}TwNEmp%wU09ZoyP@aZq*Ep;8LY!En5!d^^$_Hr_*imNpPRvDa? zqajxy>u2EuwHZklux$QmF25G4g^a%IHu~eoVbbirUe4MhjvAI3?q8DV1R==i`300} zcY8VVRSR;U{1XSai_x%M%cVsnpH(|Va2!5MW!U`zwVxP>kr{^{6*B*+{)cWfOGW5-;%X%5~k5nkTYQuP-$K6uCcy_DGJ_u^b01@mCcUX4<+Tdiyw z-gIqoH*_s6QWS0h`)B?5@5Zq+B5eHpq_qx8($Ahvz^=fn0Mf_xh4#V`?Q`zX>zY{4 zeLY62D5;<6uo)wLRJR^p5Tg%7`26s&UDfxiqW|*z3Naqz4$rW8>7K|oq{1iAMnXl! z6+vBw#g`O-j%le?V5!^NK==1VZM%HQ?h6CyJ;=D1hy88INr)>i`YY4G!Z#_~s z{l&K(_xJsW*Dqhb%v`RJiQk0E-~~JGYp$=a70C!`yR`}$8a#CE?aSR80&rw^xqr(A z3=pl`RhOlzGJM*Ad5H%Y-*+K%N}aI*;ayeVT^Y=3bxI;yxM`_c*=K}*_n)!5Hd%fm zj#*5V22%}g?vLNhcr2D};>3=}edLJ)k!-a3r7!7Jzj?Enp!^9v-D~Rr^V4Il2C2n4<6oOXhbS>Vp7@6ybmj zR_VfSCv)?jsRq|QqE$+_hF;wVZ4{`s&|G&xZEsnzsS6P0DM2c z71S%1@WFUoe}&EexW1p54AejJrHehask#j=5w`Hd@KiLjt-go~k^H9o>Xk9VWgF3rpIydKN ztxs6n-)-(di^V`mPE0)PELfF4uSeIrV>`^+tDABwZI#_{PNFYi;3<1p-_yr!Uhbgt z@xT&lo|H3-opIHo_l2vmFc>7OHXDH~YsW(y+qQ%1qLat)<mfwJMaDj&4AzUgFroZCfChJr&(yxP+H9P6zA4~QKcQlU}H$vOlEvsi~5KC%>+0 zVUzbRh*t`tHk2!BG%Z~8t+`)W!}U%5-(Nro=88*M_!|_|UGVesD=fY=6rvv)AFux2 z!La*xn-uj2$NGQNRPc&xkvd5~uGMF8R4W}{mhtyUh2~U{mZzzJJ(5K64HrqE^0Ch2 zy7i~A2C6BGZgrxcTwPqa1;}x}%U%{!$%Z9W?V#SaB}^cM4oC(%phDrlFdQ6SNAMp$%vMgEJj}&3BJY+Scoo;Ns%oxI{z{%&NYPuiBwawF&}Z zl~z~X$1DntR+gMM92PSSZC;cT2V)x^kJ;_3Kvs7bs$s zX+yOGz*q1^p(g5f>W)2s^-bp2*q>2_(el^O+&F?xTRs1n+BYCxo>uP0;-UQd^=nL^ z(OhjjJ!dy|cCG?uZ%NBfH8LFB=QK=y@H9f1HntqPRSH6OPv6?+Q zo7Dg$8lbW{psmR`DR7Q`JD?f{yH{7bi(W_s^0M^W^FRaRWd=o67Y>*}_mWiubBj_T z$W3iFtjMKlL`_*anu#1Ijc&5tcEeul`|Lx-Y<$ z!g}$S=@CuCTxu!G$lRzm6O+E$$C9YE<)hYQ06c^!!a7qwNh!}$g~H(Z3^=9nRfj*T zYxpS0NbO*FQnexcFrF?@VAN1>`|!!L+Z@A8qi@Z=o?W*kc>4BnI_Ng|*xBv-m6w+r zXQ1-D>b$auEvze)-W&fuOzejp&ILc0f<5qattn=x)8IhibN*cQ!>P%d)fKcQl=m}l z#xOy(Hq!{GkZC@peUn}Ae$2v;YL?veOhmHaU@XyXHud@D4y&PvTHCh;b77pxq&al3 zeI0akbcp;tIU(B4ezgAE3Y@@cV3*tFsDC;dxa?@MyZGEtY?@(r4)TvmNoL}A2=jvj zi9;lE9UKKf&kGmc3x1DPGMkSsStcvJ4@^QYu<`ECRwgkD@17OSUzb(wk)FxfXOI(L7A+EGZi6(rGv*|8uGKvr20I;{1|iakc2~@QtHS{?&d@AuHeHohz{fd zcMOO|L_HkrGOjkL^iugL5lFcWhx-fQPgmo?>+D`#W!$w|`_oqw%odS1(wu!=5{W2* zn^##^mja^LhBrAPfH2Min=F34i0%L#QZVzU=Ol;gL;5$2G421Zx*#wU7g6W4B12>A z3xx-DLTX+!1-SU%qg`ZEUpoh(U*rovY?kXrqWkZ>MX05c@D)OwBK?=uGkI!ugm1eOg8MJf~N3Dc_idwb1KcIdFr+2eYROE!0RYqrT=%4&0p z0rnL3+euqZwKt*c%u*uYQNP3k9$g?Ny;Cm};$uEm6fgAjHgUna=>Hf;Ro%?Y*3WR- zwESB#QvY&2ZEI3aihaP#3D1l!^ePVZT6Am;EKnoYKuB!PN&14FJ)uq5R$iSj0399~ zK^Sbq#^YUR&$FvCka4R)k2BJ-!@_<#e2b$yDr7zRydo&L1|bhU)=e2~2Js=4;Q{I2 zV0c?xA&cz$`?`K_;l~#q@!PK7iiGnleTCCXA<10bo>p@Rrk3#HZ=g)+%)W?u94`Jn z#aN!OcSJU#>IVs_!6sx*A77pwF3e0#$*>|87xOxnWrTSW6mqd6yE(e|PI%TWVk@y7 zV`_34V|%B-rI!S3y<;;|?M$&l=!cl$N-Oqx% z-(h=kapA*{NBj8r>^b1L@7tGHFR+Ceq*oo7@#1n0+$lNX$z42=_EB-I!>R*1d4dgHDz1HMxn@hOd=hpAtLFcP)Sbe0?B5d%hH1vY+ zc5lZi88q&S{n-EB&7LNgyWviTO5oi=VK8~%RXFg_@xODE+N1mR5`>ebZ0rfW|1VLE zQCV2K2V9lsTNs-%TUQ$A6677I21@u2rpG)UQ^mUYwo`DtbGMr-3gy`JD|W*|@+BW+ z`J!$c&$TTFKSK)y{dqYDbzTQ|8JkdX7}{es6vo{(|u zlRNd9b?ilYXy|pnd{V-%&k-j_N0+lpc1KB5*dAa&4;y%ZpHq?k5&AuC+u9lQpg?>O z)PSrp-h@3-(PEh5_p`MxySq01Ee}3DA6c8WPEcu^>l3D7(&yRT~TK>bpvcAq!7=Fr|~`h`=;r4YMd* zX(0cRu9JRwdqLZG3uq@Vu#qz$^_H%V4iurd2Uo3Q2=z!v_%JE?2nCZxc|e<|f;-UI zXwZh-{_dEJU>50DXo09}W3N}8^iK&6rhS-uHjNI#f`Wof{=A*FddXv1(cNmPfGT$$ z%a-`7nKO;-1=No>Z;A^p_iikyD_9b{%dnrR__;o%0JJwAl@}^%YOCg!mX;BnMzgWV zKOTL0PQmAMeQ8BXM&?sv(ocwtjM!^EJ$+jQ3hsuitcUa`kIx2tUaFO=nM{pmC0;-nn zFz@xs>rw86DYR-ml|Xf$R)Y21hZSf36-$+`O@T>wlT z&47Hf5K3C}HOg~XCII_FOWm(#7oS}6aNEVhkup;2llg+CnqbwcmS8{v$ew757zMK`yzW!1jVa?@A^^ElN1 zQioRD?;#ut{wsa51^(fS(9MeCG-4=_t1ykoQv^xpcr6q~6i%97csAoT>ao~1ReWKy z@BmS=`>`9m%iTTIo|jw% zCS!)SE9+b8pSWoc>!8bs0%I+W5S}1JgwLI zVaTgbW2s6ak~GoTQy-h`eg(L@e+ZpEeZ|n0(m{d=N(v2FCjZo=T+hfwAJi+W?7>1z zm{zxMzm5IBu>}ND2ET^rN7s_-uJ)4O{=-f$%hwownU61;p+t}n$ySex`+SC11x@tv zUtC<=f9ey5itrVF5}oPzZ6E}3jL&W6zB-SsW~RGjy!=E2&V?HtqSMBA`z~WYT*ME^ z#~4f%@wx5<6#o+lHs{OZbLOnRxv1^F_#QL#UnlejDeyRCBD!QAU!;62^qJjpiBEOk z%wNw7t~r!f+qe$tvS;};VK~tRfh~T3kO%-mVs>zu-7Lad>0gmmSI7Iv5nThr>ZMy~ zk4{{J(Xrf|fMmet9t)Pu+h+rKYo573Zv8O03s1*?mD6DN+qPJ+_ zu)o->?#BL%<6AQ(NWort3mRc*ZZ57AXc>vIsa@C4Zd^q3iGTk5F$VeFjfG>+$lfu0 z78cr}ADQ9zu(~;rKdr6e=D-oLXgT{gC4jeI6Y6*s`ADu}wW|ZYi|s)Tp3L%CThD{A z0P9|dJCC-9;O0%d)ltG*?W-Sera#lPG4t%qMeJO0h5Kb_Rr~ zv#5{lE6K2c;BT0sJ*#5X{cT-B&-a&~$YkWm9O-04r&A$V*%)=desm2Mk%phs|n&QRg0FBi0Q+_j$>!w7=!}FOYos z=|W#BX=}S1f(HlL7}g!(Bq4<^SZOVS;FykqA*tc*pXGc8g0>*brywUh)mlqr@b-@G zOZ#^Z9Gv%osQ|Jsi+`}*`sD8jw40#uo4=;CZao$XS)DQdi;AcqfrsJ1z3B-YNrRIT zMZvR8ZjiO+7WH#{C1pj#zx-vPIiIyGfqbGwSM@ki-e$E;G>hL;L9__rJ5nc|t}Z{D+OD6xx+u28!bmW3m50#on{AAc+i?RPgc%z&;pLBZ;1 zMXf}nrEWUMB?jITpIj0E$}yjuSHhRox#Pl;uCpq);n*_rhpP?w#64tn@5?Dc&==PT zl$X#;erjxNG?i5|a8%>1yOoYpWM)#?B;I>$VBavbcjEJqEEda8fE9TiBLZcYFl?0x zX3Q7LADhspr#p3HUl-?HuD~im8}s==-Y?fJySiR)75 z53)Bupp|PDLCaXo$iVRJ3%j%7$zOVQjGCF9hRNbrlhuyv3RTDmQ6|kr<`v#3Y~*BE z)rE%{mY6HYn8wsJkwr3Uz0fRF4{99n^2x~*AUANl=3qsf2l8Z$$uf9+@%0es(LHS* zNFKhon3MTyf>9twnt*H`_2&glM)9@5 zSFbqf!a9AJ354T$NOTypW|ResSNi>(F}c_=OkFSFR{forP#0{uCc2z|6<1i%X<5xr zMryE((<*5MSPtx={R<%r_V7>Ud7YM4UH{BAR^s*R6?#v3B=&M2z%eWc!vgj5%s&-I z*44H|c1xZweNxwuRzdwSm>som%oR*IJN4atEZ~!gkMog3QwBc;&r$$tVB;|ZhSCvv+=6J zw_qTF_LfV+^n2RVJ1k*Gl{zG4`v%NOt#+Q_nJ5;+sEj3>*~IGQ;du0fmS;IIz8`#6 zFe?sCrgM3Xje8`orDy$^zh>=NYYbwM;+ZWx_|iXCkHP4CCf@6k8PO9+I$C`Q|T8!b@}sf!e&^2 z^JFn~{ywsky@c<8vfF?a_k_^Rsv>aEsQeLFWwJsux5wLr@G%~TT=6w3(y2z~b5gq> z9vm>%>G;YBPy*pda5fX<$uS0@O2fdEHAk{yAV zMl>Mx{`}ZOGfXssLS+nO(YEzJcV|8S^z0R#_K25nYHxpkW%J>8fpVCXr5olb)fxn)ls|wH zr|CX3Y#OvP07_R9%;ANc!d6YnZ^cn}0|Ns;z?e|!ru)UE4~z#YjQ(F5oqzm1WQuTb z{)6I8DbmfW(%-cffdn&ZHRQuoePBW3R`|&7mVQYGjR^%v{vHy45=KrtdMvm2{VNBr z9~rI!s_()wPI;$M*+z@xf?kBBK6+shCWJ z{UfA=BzMsWOVI+KA)jEy->Gw17X-vh3V!n-A;0#tWKW$f z@nZGDDZq2gU0r#!7xjOsNYYWN6#7D&tf8!2UIhg$_5|&wpviU^u~nZFr>!ByOB+1; zDfKg50&}YE(w%8l=UEu zUrod>jc3IFEWnSaPAKDW%Xh(}?>ws8kba8jx*B{hI#!2 zD5M5BmI#2g9vR2HH{XYhkx9dzkZi04feV3?rLU1!6pt)mNyz`(Hmh0S0S|5 zJQ-4cUHkoqzhfq<8n|ue8~x_`+VtEMp$z7rpM;RmG?h~l2WVB4m>{hL;u=(IGXa_6 z;Q|bx*GQ%m=Zld1V{6w8nHGuDu-p1uni!>_X)S8msOn+E0lxQ$$;rt9s8bx_@_wwl zQjlay7wVu2Nq@OkmX_D@TY*T%A{UE4Si-`>lHY$+ZVBi#nr7qVbb13(CHfMofmtZtc1cg`gO0WzELy`Ny~4H4YG?VsSRz zw|J9}rTMUi;>Et$0LtJbOP0s9nUhk=gN$7cQm<9YIYo~R(_@m|qnJ>$@`7EWZcqm* zU@jf9->OkBd+XJ5)4p-a;6>;aJLJ)Yc5WT(bxBh$_w`z6PH9o+Z$}{G?0T$Nh8j(O zDx0>B2R3*eB$X=W_oLu|?zz~v1b%r@YN7h;1m%NSvbp9gvz5x5SEjJ~6=4ZYlSNG5 zym&d<3j`v8`uU?0d$*E>NZP3<@GymDS4_8gF(kDT4XjFNZpGet}XL0ht!K|-rTW(lxiRsaddp#Bw7S=4Ac$&R?(uYQ>utQ{^;fB|M?nN z*(gZvfoJWNg+fNP96RQ0hu)IzV=Y8! zd_XxD(A1P>QFS%J8pTCWX?glb z1;gqjb5Ai$VzlNDEYYgmTah(c=)%ZWlr}%agkqosZJk^!^nU7)SY!@%H2Iavbqw5C zAPh?%#T>E|>*kEgkCbeJ-UeTawThp<3##W0{ub0v%L9rAmQ2*sGbhKG)y3-q-u>R& zqR8;|lo+s{0vbTaP3>C*!s4p!pVeE+N!@wZal-Juz7K>P1)0l^a>?vKHujDCzq9Tl zAq>9d!`fj!uk)iMHZI83A_KN^JN^`FDG{|! z;f~#%vkmT68OR4asO&e@&T=l$jmxA%g?@+#Qa~6**N_m4zT4TS4P7Su9VmBZrQBox zNRf`k&&_D;LD<%4y7fGk-5(TBoR$Fri4_-9wxz4vb+-@Lyr+EpV-3}46F{}EcDCNNCU$H(CKHFR-ub5mMzClAGc zys$I9%Z@y0YEzIloPEyj>~8qZ=O=35!AKY& zQ1=~f`xaQdeQtu#9+FW@*L})VY_C|OUhN9%Oxv0$Ci_|M_#_4ip%kWw;nv-F@EhMY z109a`PFR8oUmY&`=dX^`dbv^Mg}o0R3B@7@|6fbF^}0NvsG9L)XvaJR*9bQ1GJ4O| z*}ujtRvs5j{GgknsCKrcs?4bI=dd=ks+D4Qr}ceV*`hQ=k3FIP?;z9K(<4(=Uw>xr zt(Z;#{g_KP$srFJ3Ktx+T6@4}{21>c?au2t~ zL06AE6IuMhP2_^mlAY#Wx8;F$v(C%uA|^LwU#};0lp5eQy)An?SBH*#*7-xH(LK;0 zKIS}WQGH3UIA5YTl~5C~9Heu3aJSA%rmN}7A;fJV>i53;dgDNZT48egD@=KD+`Ck z)`EVfx}kxLmgFL+yFR_oq%6!Mi75Kd&PT!trW($7}vh4WGm{ckkz{`+{C|Abtj+!FnkYr6?M750^epZgxAxqlCB3+dzXwfs~W)RbVG zkOHV`u(u{CCJd#eHxWK{R)_jz=@*p~1>!HKSCGH$1o)wLl!hKzSR*d+!a9v?EG@OO z>G}v_F3b?c8KrCwAKDCQtvtOm%avJP{>QR%dLULbHvAxen>lT0QZCj~H!Mqta)_L? z%*^6*u9B&*Fus5A9}elh$N2vqQ1gB#@K#i2d^7&KI#iVUZZ@h9@{0^yxX8L~2K%Y- z!-OMI#~VtAu&9t{xrlLI>#jT0t5<{baeKarEKvmOCMB5Dd2@_LSeS&I90IRj%F6bd z(VKbt%Q4%UGE~j%D8fI#+1cFuj^n*_GI05J9{v8&k|s~PWjyXz5|II^xPw60o8OJ< z|D1}R_07m3O{PKncfJBUF~QWwyjPG3p1@&-gZV0Qb7!X$(~^QcAOSGt@ha~W=5o>* zdc9{>brR~cA&?-0j*NKUo}JBZ4Nn~1xJxyE^~(PUwf|2!J+hv^K-rJ&CSq^ zFhmvykiqIe>a;`J=l4vjFRFtT_)>f|RaHlQU>HQ>v3Vy80pHufDKtzI!mrxdb3?0S zt~7!VBw!HB%*Ze#EpAuUO-q)iH8D2M&MGc`Q#$krGNm~n&W6&lVNPU;E2FQ>9w{w` zgfE-Qffpmsd)-{A1@{*dX@twWcEg8)?FJME_1P6#i^Aa<(zRuVGPgR1qA@7+>fGGE zZ5=CQ)nBKuZ;7q8P+;9|7@_%U2qM?H?URdF4(I2hB1&n{uBr@}9_}2y3hS^$dB-+8 z!!ll>ugw_uZfM=(xl2K81wG_d%`|szD3+`OD z@duK|so=0AJ#|v8CZfO_ku(ZGEY1~Iq!|IFQ!EM#~ z0Ap6_e6E#*bj;RgcW1BdiFAz$qiQ{~RN@{vUq{+&!$!H4<_@tq3Z95mU;;a-5_x}pr4_F@8q@~UQ zNSu9Ie(Kj4C!Xia>*+d>K0K_YqWm#mue6q%g#~x=4PorPT75a5e9vArH*wL$ z5~4Z^=IkjyRm6Tt&s8tzxr%eoK5d#n5RGDkPDvz8n-BhU1xShBeRc~$8&gPEGS>Dp z6?J!J1ZputbT{T+txxbo(L#(CZsB;+Y|WcjX0ANpO*r>!v}`oC+VMg<%E9e!_Qx~< z{g-j*q3S>{ZD{TYmuL+uFE1}?h~%{qm{S%`v*`Mip@~c@$%gw`6 zx{i0Rn!(Z2QwMm}LEQ@D-VFY7s>h?>-d6Jw`w6t@YZZ&>V$gpV3{QK?KaeJHfBv4u z6$%1R>^bp|Y|K1KJv}|Y$*n8A!9OC8>luok2Da*otaKdWr%5wV+i83XubWeBVT%6Q zW9k?`w7!+z>-2o+40IZ~T8wdc8@069VP5j&%`z!G*yc>1zsAu}X=u1)64?t-VUyiK zQSVf(!b3)jgy36wR$@;#C;Z%+Tl>N`nNweswH9*nB>RvM)I5gke<3$+M+CG%KETR_ znM?#uU<3dwv~%kguO`3>h#s{g8k?bge;KkK-+&b6hO%*Dq@h8SDi&b9@)#HZRYLtk4VqO1qD+6P^NNKuzSm|OZHHA)Qf)HL_z%^O>a#g>EL1&ReJ*{Tek3s+MB2?n@4g`8!=+Lvn*cwfH2Ogi~7MEZ~m;s&IEmfl0ejISIeamP8vr z%VPZi7~~4O+xmzh`Yc$!;*8n(9zBp&*D;)y^73kOo31eN0oG)4tF=C5iDKH$b`ojq ziCzY}v9XgAXNWaop9LiGU2q45#2lH%_5Hhy%2l8{6t9Do1ERa2VbSG;F-L#oYh+|R z%b3`w2_>ft6F5NM*=)e*jbOAq*_539?qrHgjsj$OFGO;?z{A27mZ)gIDfuFpKCVzx z!==gxMd+3>8CVoAw-5H5ibZl^{`LB0$lD0Rc5bKnKihtaV5aZkQZ?JE0F6;XerJUU7tq z>WYbhLHm#l;fcbeJL~gYIq>7np(*L=HhG>O{T_M}+gtcM(j`UJim6j%nE&SEwNcj7 zv(c+}SZztM`-ToX>0P2JH;t>c^%nrI0$Gj?=Ws?_=5CZW6+{gjK%_&Qx|-UHj>}J- z2VtrMorIys8~3T@mdxU`LnPjEVCcZwZv!gmiQj{~chIFlmt*A{fa3kxvat$!@Zq*K zUxzAo&qn(f!><==B>W{)*_ur#!)Fi@5V+nQUXmBuDXa*N-GGICu! ztka>Yt8@P82c6H9_`$ysJ}5dgM-R&o!Lp!L*@1vFO1OkRFLGY4y64A_Th8I%LHP>l z5*WqVxDXV)ZV}#Cl%7saHH}!*2beAenB}iwYy1sk%wb&}4iLZ$W7wTZSn6ra2QH%T zHy?NJ=;-Kpukis&(->qYm+owDTT>7di$1(rNWv%X=2rg(Qgm}u;grR+A#J%d;UWHOEGv(x53J>z4>iPl3Jj*uC8{Jf0xBF zzLQq3%3D`iMa7Yp9T$PP_=OEGfevlh1g`q~!DnU>mg-%`?B!D}4WNuK4!DdK!e_F4 z0wH3F7?_yrV1WEYx$%#m94B^WClw-~o`?EbBf+ zMib(~j#oq62kZSq*BbpCXYb!%MkT#UJN8cYWNBmT?qW+qz1L}&(^JH(-r9(y%GE#S zHN6yVZPIle7Qf<-?5>QU{iq1U#PT<^Mg7@l_8*4VHlDeJug4GbVqic44~MX(#GA1& zY(hgnTV!IxDdpG)zf1-dVN8Z9F2dsABnNn^9>5pjZv{UX|3cgtn0WZ;3Bz<{d>W&? zg~V)~Z&rSS7{;RprkRw3yHM)a_4SJK^E19g!3-P2WU)-P?(80a>pub2+LMq)iqKp; zbczI3hQ|kohl9-Va#b}oG!HIc$M8N<*yjy z4o|<0S)-I`&S%a#jYh1zFWRwqnU*c<^<*weQ!_V5Gm!`7Qk%T~mJqdOE5u{|ix~L! zowIF4>Op4+{u34Q!G@^gq~LIm3yyM4tgGk20J1L(zjf1wYG~o)gpZCS+PJlxssr(_ zrL>Bvg2`(F1^nE@Q@qo_EY1J?c|Hed@au5h&yw~PWL5g9>9yXxlwxvn6hUN z;qU*E%7+#%3~RoThWe2u2nXMFx@NgQZ?OA}?yXAUbWFP+eo(p>$cft;Hb5Ne8abU->qX~a`0?N{zG znRKyEpM&fR7JeGAzUTTXoS1a4o(FQxTpj*u4=(SmeV1f@{piFctjpwfM|4ANOLr3_ z{B~e4<8(a6cg46f`y|Ge8WjpJ-=)K$dg##0#y}^;zT)Z9&rX`1UnLA+Jh6g+B{eH6 zEAx}xxt>eEX(oGSenrSx*h?otunMO2NHRMHx1!S^5YE$|6M0^UGqie4S#yJu`O3xC zmL=v7%NJ$O2l04O_O?F$=Uoa;!Rx$kY<_NrWB=V$fqmk36uYv2VR`~@`DNQ6KfVbxn?es*Sccxs zBGWdWPrcnS+9ZZ8Pd42{9e!qfQ8-3Auc4 z4UdeJdw^u2w$n%qn7&0;FfmzyDEZYAY!B{vc`9{nFVl{c_=1hd0>Qs@FM8e+4JY>c z+PfUc5{0DorZ4Iwpnoa*uT)~w&ik_>jgVX?exv*!PIu&<2S4e(3zW4OJ?oI@p~-3b zX7r}Gv+u&$jD?Z0ij$M`GkIk9_(b16{a;0jOrP1v4nK3 z%j4E>KZV+G+d?$e*HDHb)PZPr#yN7@m|YhlDE~2;;rR+jecJ!f`0w6rJ6lM~@783D z(`LG$2`d8nlz}w+$s-ZY`~`^5s~xqio|kX^exmN=$|_bCa5W-<3LV^Uy4wh=4nKW4#OFQTiWa?24Gc%R;dJC|8s?kcmnLYfOM}}D-wWeL z2!=Xj8!qfyxIqgY8!JoiAUsipokh@kv4|}{MQw$}=w$nKX6yL-P$vtnp9eR0!L(-+ zbcR3x@`yVR^~*a{{UQksamhC&axFHa)+hMA@)E&IQ>4BX39w=p9Jn}lxR@Yi%goB3 z&o7mfd{xL1r$mkQr5afk&2q{iAGeZd&>iK0tudck-P6j3HP}di4+2*l)Y{c?%U*|8 zQM+9{Xfn!sUszqaiW*y5LFDF+J#mxB3LVJeJ-+J`G&eJ(QYfxoc)ZixEUXW62|rQ~ zmtN-Sr)MUA*5aNe(MVS`k*a`;Hw+HQ46J zQ4dP!`u+{Sy(hsC&f%RPPul`hp5}kh>dIoV!L>4orb?#m4;3r$EFPW@ykukhW8`!_ z@Gef@--c7gVz^+izrWoX3x~`_53;&NAj`xf3cLLeb*ED{k}oIZFqY!r;+B4?kJ=1l zCFM{ABO)lfyp^hy!)58>ySwvcL=dfcu-W9M9G$>|=vF==MAXj5*Ka&TO)>eB5vL!O zW`kQB;L3FaYWi2Du2zxm^T6PL5b3)x5g!A7Er5^KiAN_~vh2Dxs5+GKTdV{e0dzFc z?;|JN3NTR!r0D5@fWO%YfOOO8QNfC|M?Yt0FYEe}u|x)x@t=xZ#{Uofu@R&c(H{Kv zg7ycU*IqY-Q{il_XN}~+!idz`X>08})LI?a(b!2i!C9?4E@{2FtrmA0=Kqms3}&!U z00x8Rk47B{Jl$g=oZZE_X3?#n8^r>JOyH8iRRGImGv~YVY19@c-ZUDUcYW?4vLg&L zAsi~?V&)gkAYSCa4U%KWqekGwKc$<0MjDRBv@B;q-c*>Lo{j=dblUzs?NW19!iG)t z2dn4rB2`KY3zPM9bi$1hi10gM=sq-~%&=2F9o0JLX@8qni3}z~n;vW^8o0?F&G-{` zd9p!dXNN}fCaN6p=T~1F8eD0}@cN#GRx`x6kr~HP4)`!abo9h;r_{kM3j#O4WfM-J z9_1S4OT93Ee5rg$l5G0&<@Pzer&E}Mx!4w(lwmbPQ~e8y^W6)IoQz|7UhmS{n0FPQ z4~##Ga5!d$ENbxgH?%M9lil83FQS+!a?Z$Ceg12GJ-$wdnV4jo45(T_q`;JM$&iG& zdka5JloSVZI$3gq+k_w5vuoZPX3B$`>&vvKAHZK>k^Jm;;!SPllMKr>-RY#8LNl{z z4;&>jlw#hh$~SUcw*49on#aXKD;#%MqrSTl-f2W{yb^Ur*!imB={?A4^$<)ggz*kz zY|JQOx4Sc~Pdg_Wp<#L9#FCefLGw4BXRbINYnuhK2^z=>$#S-A}A% z>&m5Gpp8JDurcB_gKUo%;`(!NOId;{BAs9Y@n5qHv)s`{bsN^c(ZB_mUgrI(;y)VaQR>6rR8 z@-xX?lkOK4o~`(@ew%-17EwyfR{k{)uY8GB@K-MlScxSVa1!6ikSX?eS+ggWoVYio z_21C0sZ7`w+&=y5he8}S)XoC-CBvGF3WBs_co}GcUC6Fqe`}hz^0P#?sv&Stp&loL zt6N{*L@t#vXimL^h~EyxW-B~!zCYl28O;e1^MNT*dSiJ-$tbh5xE(ebSGQYF7I{vk zK=I)lT{g4RvbDW^xzpMziVTIuyc056@IY^H#hv_@5@TB)rjAwPT!*R-J;Re#zL>r> zGfD|_|Ih1Y;u1(oINx%Is|$6yJVT`}E^zUZt|52K?-KZLcA=v1S0I}<^X3?rg7(G5w(@8MQ79+#MN(x&`sFsA5?1{@qUJ}p- zNgwfzn5&`(inHWh4fxKr(DTH?$aKx;>dZ^d4Q}C)Q&kSax&_<)lJBHZM2|o1r1N5C z4N7NN^^C%Mn=Jp_?M;DFYZFC>Maq7)0c#y)KCct_`&ER~SVT`IZ8y{T2@AS+K-1Tu z(<7uuZj1yl2GUnwn;cA8w&y8Y;TGkZns-e{>&&@yCp462nIELAD+x0G3hDN3E7LAk zyp8Pl?|rAy!=5ff7GaE3x3xqOW(fbnVXA5o!?Xz=(=r#l<{{M}8kVebgdqYO#Q}N% zmvY!Jv+yES(2a61;`umZSl37|Xr~S)CMNc7RuU3VFFds#taIf2Nw%#Tap{+sgDutL)6%XZB8 zngN}xKL%nnS=;;h&CGD1r1M}jh*}idAHsRW65Jb|AZtWA`sMZ;uFh%FPdtgsSfTo+ z*MjtiX4Ol_vnqH;T9>J2Oo2aFRF!FY?nOA>JVmnLkEDQX(t$-ULFQlRvuE!ac!Cm} zzUBI-JuFw`%tCia%Fd+o0ZAk)8?QJ7<`lywnb_w!-=lOs(K{`;zuSB%=j{F@*%1fL zHH#;GnjAJa#zW{C+2CBn+zgj9S&b&6t#S#!MXP$}sxUqVHf?OLUbOH}DUOYc&k_M@ z=<>5|ZJ?^rhcX%8WyE%eEt0%>!={gM?YOM%Jypk|rYoYOf#w7)I5_x~MQXOY7H6vW z;HtwoJeP+;e1Y3O?@yQ3bc@5IdcO>JFx?910 z`=ESVZWx6s8`4QZ7*(MDI```d$9wf2UH0X_h4AioM`0g>y-d+&wvJ8SQEXgc8df;D z!FcZsZ&T&odP{k~M^>o*F%|Oe4kFvORfE7P8=Uu5-_Sr_9Q)|gRgjE`G&0|v zj-8}R>q{e+qWFru^VREzFHbZ$&8ZYb{mPQ)C)CyQ5v;H{)Pu zkFmC~(X*|buJSay_Er`U_{vkDMJy2g<769X@#LsKBBT)?g2XerPpeqC4DFo^4VTK{ zloJPUN7~eSKzlkgS(Y+Y_8UFx1w=XaeuErE4j%Zm|K-Yq^+yVXP+>HMnLDzNwVN|t+_9NBec)Py^k3=)@< zJ(q~lVL4AmrxBmF_z39lnMt|OEtILiW+E6617!TTibGD-{u{RSEV{K*J;}SsG^W>nroL7-`45H za;T1>_3e%@b0t0qpoX7s`SfKf#1(S0qstv1u@ z{+IYU=|BsHcZLxSg)gn%MIby4c)z?=YCrh$Au>|G$1&?hm&wJOzx5^*jrNpdy3?!p zcD>P$%uh6Lj`9*c8vdt0e%HQat%do=%cnBjUnO5v%-j3A9`Gh#pKs?8R>lN?`36Da zXz&OYU$@8d-%=U^JWMNiV0;AT1e&u0Hp_ah+ySO_saYdKc74d5G<^w#E${DXvox;H zbpX2T?rf889-gU>v=$ef3gTl30XNA-R6lyMJjdG@HvaA@iYKu)oyau6K=lyo)EK%R zzbT42mut~>L6*cRX)^hkGIC)X64aq;xq-i;YX-9EYOj>bv z?*cjC6arDsE%2ON-k2eyuo1r25Hs|(FgMpM?5Bn+(!pcyxACXGO2w2EkHaudhU<?IJH%WkIgCw0h|*w>b}F zS8q}Kpdhbh3IYe(SmjXDkkxpTpZBuq(@#HVS1iq^CO^WLI=k1gQ!qc%4cmZp;j45ch1WY#XO72O7<_c0qg1+ptbW63l&Jl;WK%16QkG=hR z1SEqzUc7>qj_j6S>yy{z#FRP(^1S5Nd*J=zq&lN*V20fzL+}MQw=apd`+oic>yXA_ z#9sJuX%TR>&o2oEg z4KGm0*@yP6+GM^ZeSy`A2I%(T8X?m=r@sS@MyNN#j>Qei1{oGltFB2#%cf{Thm<(; zwchs{FYnb>1G}C1W?7mpRrUW=;F>#-jC^zIq{M$tJZQtd)?52s7>EArFhAUNB=i8Q zfl06NOLc;`jJ~ZxwQnVqKMvgvXtRAtP|!~F*O}&OTY|fj6Ri#=ZbFk+F-yCat97+D3l<78Z14U;O_B6R zE1J;Zd%O;=dX31VQCykx5k~6ndM?MvqLK6>#Rqd#IaygN$EcWujY7_ws>06Co)LV{ zt&7a;NBmxn^)0#k8*L7cZ=I@lK(X{!XYsqeW5-Zw`np@>1GHB2bfXVPrD5`Y(+H_= zr4T*qX=h+S4fq|x=~=E!7^7mes&IURX7-%7BO&3LhMHPRPFwWxMWY6KUF|v+%;}vF z&{PN}KkaDj{O$BRDmr=UND!6v9Cmw!z1rK}JYPRJz2RuL_2Kc^lVZTN5{DrG_W=>&iJdnXB z*aBZ)!??PCSGU2ofW)aCK@GI`6Ze(*cDnAer@qs1e1vYQq%sp}-<6erP z|GSPRFNSr-ht%>)FPE-w{r5q4r4ZA7VPR(IZ_?qV7mV-_J}(px8D~>wOs|v6c1F^= zg|geVXi_=t*$g~x24?#POKT~C!{-;bXqfUw{L_O>uJFE!Q7GP8Lnh@-j_v)$%bfgq z?K<4?!irQ7A9XK)@c%3Ct^2ZCySC9w5mXRRq!Ca+I+T=FO1eu@0qO1z5fG3P;gSw% zq@_!wyStPQ>F#%M-_P^zy+6a|-}PH-!8zv~=NQL0qP9O>3hCMZ*P2f(5~*)60_CUI z28a_FenPsbs3-R|ZZFUSE-;Tlz&3-yiqURJr5(p?Qabr7^uJ) zTnENrW`5-UZw!`g;S5I(0SJTe%uh=*_%afA52P0A^_~}Nz|9e4MhRcnH$&!@5qe^jvR0uzH}^iKe~D{K<&dV0sORGa0veTqtuHcVr<}gF7`kF5#Urj zl}g)z4V*&U)jq6|-P4Op*c`bD(?^{qEUbO|gptKOo5AD3rDpTX!M3<8~_ zKi;6&R8zrgrpZoR>({d7WN>|pc>RVnnK|nh=zXk@TmRm6(H8erK2~q#dK!JD67CCvZ_YVtH;m5kM0IARzTnt9i~Jb0xj{6R zy<@`8gg7&_wzgJ-#x;E8GYZTh2;wBkgnwqh zd4SUM2DIM%kFW}Qe_PhQHgp4XU^BR{Z5?fT|E7pxZ*DyKeEbH}>|tY2DmxUds}B|0 zij?<(CL&vvd9FcT&N zPu#SPh8gWSbV#~}C6(CY;b^=S^-Q_eRb0%F8*=6hO8NYyq-o{QC}mD^AFj_*h=n!2 zY0L7f<3*%yz7DwO0_h5cF6|cLEn@8FyOJi3A5o|?jQc&MO?zq?TbB|Y4d`zi;PBf) zKZ{vg+gENxX9YK$*>x;BDtHaPnH(JS{k-xC++6Qjj1@NYW=3Uka?4PO0CJJ~Q1(TG z^!md1zFP1QeekJ9aY2EVHUO4d>WCN5++90J#X(dl?vtc_#UEUU%^Q(RZ5%50-Te5) zOS4w45?Uk1n_d)BXIvQC{Q|?y->B67? zocq%Cxog3>Uy%?J5(-Ho5NN4ULOEtcdGFL<%YUJXWjZC7ar|?E=jZ!VL>u!=nMR(V z`$p-gtOmqz7QiinnP$j1G|U)~AsYF`FATmu}y|_3%@_!1^BrVipt$j(-dhP@?)&yTr5KmsE_^wHRuZT>& z$An@VPeNN2fo8%N`Nmr6$^2X$)u`4~f@~)EqnzMcef+BIcc%jy7V03~$CwDjV^n-|5*-BKLF$FGqa!1S zH65ZmdzUmNDSzpVK>uGw_Xx{quSTUx*n>VQ7S8yJ1KG(z7tj*bPLbCees{~*^PaH# z$n$(!$#Up5VJh2v#bZD6Vt$^kezx9klO<`i(IQmuMsuE6uNhfYwEgCH*^Ad}Q)VSH zLzhpOqxxszH21*krjl&5!kD=reA!e;UqR3YfZZt@%1&FHz@{`{3&z2s;tKeqlx?3b zlbg4f;P$;N2bt$xrYQq5{$?!a>$sUCU=fX)q|`mkL$QTm-$OM5W~~a>-Gz2M_N`({ z%Gf=wpaO+Qz>T|N82FHY$^F#{UxJk3`&-BaG`cuF@DLV$R)AKC+TG0n8%>tgfB*i0 zYwNEX48&Uz9$HQ%WeKfDS%8`6mIK$}T1^~I)pE?~{WQrE^#(hx8^{6Gyi=2t!3>W( zL4ceIPJqE&?q0Q-nYZuuKL=yYx0wY!aK}ny{mU1ie3%0$NhE-x3BXe_Rz_fbX=r%$ z0Hlq;A$I+ef5jH@0B%`a{EC8%ZNhUm<2ezs5HTg_mhd3LiW;u>_7Cy=5sMeRu_vLk zNUgAOTx|LHs11}LNah5zQ*A(_=9R5V3+?5{Cj#rwV0YgPcmN5IGHAe%kB|mBBVCh6 z$M5K)suXM;q?;C%k(kOfjh0#dzSWO((vF?hUcSD4)2H|PD;Q@aC}(4=iY`j|;Do56 zBjyODMt5u<(wOQ=^~AuGMr!1#R#Yq_*y-wWpjm6MEY}Rj^uU44iI*4`f&TT_J4F2$n5#03n05)7Uqp@et zcv4BF7r09Yf~=-$*z}^h%QX#@5}ux(-#Zsi4LO(NS{{s;RRT*fj7sgPsKbh-rDf04 z#saP1hDGZ6@D8^=#yd6mZz<=3QjSlm+$w!gkH$O(%<$hpXBOx@lN!9QW@G zK_N-{0qnI;@U?ik5X;Mb_c^%r5+_So_4#pWp!w-3#d{PWFZV7p?#^sEpIwCQ0-iRr}N}GsYaeee&AL zsl1-xaN~^>MZ`CLxHZiTdlN&9KAi?w^d@l}JB?8c^a|ZT1iS=2gmL+#SC~0)>z1~k zr-c!f?ovkv`khw8Q%fAp5^uzq`cEyH00I4Mo6lu;uhS+{8#Kx)-=Lnz07;6KB(kel zwMNJ4Xtmz8^Hn?%XmotSDFFd~_1|C6 z-QH#Du1#2ast2`#6g>ST?A^k1;mE7t&+N>QiSw5rK!7SIvYf0b(EQIfW{^?|Qv;h( z4`VFYh98-P)Ct{&v}0?lUeuoU9}m1k$BXm>#tPpxifJe{e^&Q`7RnJ~PuH%uB-Dt2 zhW|nLZ+Pb41p1wl`k%{ipLIcccHDSi6+Q)s1fVoMw4OI3*Tjwgu0BtV^XpzaYJ*>t z4fJ~(0C`t1N+0y&dIs4he7<|6XWVPb*pv;GKuO$B;GGAoJxN$&qzP8iB$Zh8zy59O z9FY}Dn0FhJuuP4cf5A+&8Xwo~A=9cQv?ClusA%Ku^NdCA)=eK1Km@{XIe~DN8l;zE z^IbwuTy7guL>#Na=uCe~W&z<#eyYRd07SoC9Y`PLeH1#o^IOK&!I^704>u_tw0tPG zA^#tko{3R1;=u+qBlp1oqQVLcAZTcVC@dJ$+!ps?PD;v$pnzaF#;L@RO6VMxqoD(* z@2};5*&n8Z9eT?%MQ*;O*{TM}#{s)`K(s>z%9j^ojPx2zhIkP(Qzd9j=!j=Hn&U0n zpEBV+u4N<(lgh)Wj)Tc}2d$aK0xU$w&D*xRV%RKz*WJvMjng~*Vddnk)v&~33|N3F zxPOIDDuFQ+Y3#X6q7lFt_2vp#L69x!@Sxm5P7a%seI*V_JE9o>u1WJwvz@UJBJ`63 z?rh4jRT@0MpYNdXj6>mZhnoLk#6-;gfkDxsX-KC5!4VA|^E2ZTyPnP76wA8Ex!bt2 zNbLw^dJYFYW@&ad|vq5tg)uePaV5bVlodX5XMb3NBEv)X8#rPs4HW;>>@0NBR&efE>Er z`ZR%uQQAmnKF=I5J%%wDH|71y(BFFPoN2Gny&m%17Z~Jshk&7JF34fZG|>D2ffKEe z6K1K5E4t+S^Grlz3~Gfr8(Dz<zb(sYV1$bhkADHxs-P#4 zf6_m?pQASB`PirJN9XU^pCAHy;j1!+Y3j=+$$zJ*j>0}2DglK;^~p?|7{+g&eV^Ll zlaOR5-hk#!zjB}w4C%$LGhJ141rDuh8_ zeoJr!7@TI8p&fZ~3KQI<1=yIFc^Q87`?mw^v9Bb>76j-tch~KCL_yNR6qFhdJu*Aq zc!}r5smxH%%JxfQkQTXC!QnRm2YJ3c{|xL%bd{48S~VuRlEx{M{k+8!h1 z&aa4)#5u$3o0r{B&aJ-D_}ZA^JCI>OY-_TFl=i? ziJYsdE#b88#l`+01F%}jM)bz)U4OvC=scQ*+~Pd0g9iW z^Z!zgvSju(X5$&g@=nczO9Q*)?qloQIsIc}ZLi%!-ti2Cco$T+NMX|5fCr(ww!t2bByZ+g6y|4eA1R)G0Q(%CIV@z}LL_ja!=MNUtoaJtQBNAeEmP9GW zFhBE(mJ=3M&Zan1+^*)vnDR==M1L=`2~^Q_Y09TxTJDwrUK}$rdgD~zH#7(B$Z>-( zy~2kg-?yqzV2?Sh6(!}HY)X+VG%HUc+wFa1bDAie1Vi-wpWV2Ak?&TQ3r{g4?VK(B z*t0O0?B6^(av(l;T1}Ij&7c+PTtQmDsG%ed(UJ35VoFe6r3fiwY&R! zdibwRCzq@>)M}rtuVTAqiBm+Ve|=E-UB$iw>-q(jBkXEhKn+6nyCS5gilgUlUl01m z=)sfZ?CJ?`zHfg`D|RBWkTGG6X-Vy0p@iFwag^t1Z0sAXQz!F)Om(1K06k3%^fckn zFlId1HKwf5*&;C3?k4$iuwO&IxpCc#C_$lsx|$k*iAo(*iF@T2-Os{4k`8RQJ$v#h zAsQ7u?IudGHqu+0FJY&B$l=HJRR!k+;dql?Ir59*CD)_LPzx`4}=9g4gS7SIGjK@bHClZ#;WtpfxqQTDL=043#3bNQqFq(1JDQD+m)q%gQ+E zuzvR&+q2`M@3dQqnd&=QdC{x!9z*o0_%p(qgr%)2SC&}Gbaa!Rz1sJk(fk{>mG&k$ zjTh(pgK~oTb#<3Lz)1-Rcl)wC_x zAQyWx?e1ymkblDEeSv$b%8(CRdf44ZY z44#hC^7_nXIKQ+d9fQ4KL~P7l%%iO}cSRqv>47~+kh6_FGS?_G9}j_5AeVnAJM|b_ z{)W5haQ*5tCxx8JE8ywNZqn5yM^-Ha@4IOvTj2(+)9DPn(pF#ab0>k3sA`4^OcaBq zBqcW$aQ#qAUbp9Cck`0z)_Z!i_VwL&ce*F%ZrG!GB zOyrA;O_Y{j{n4Gv7Qcc-Z;w6c2LJ$Di%$EMUC`?@65bP#-gB-ct5^OeneG{$lr#&k zeb1LS4?tkW57%aIZb1R|;OPnWzM7IlY>Air`OU`iLwNVUg0KkWdQ&;RYu~cTf6l@^4%O5Pxl$t2{m30^6Z%?@c!uXtY0!w_}Apq8%%T)!XH4v~YaeC4nM@lB;gqFjxl;kKAy|A~(H^$d*u9n`=IxBxsB4N2APc=AlP;$cH9#i075 zA_KS~%DEo|sm!tabSn>HsT}9FHaF|O16zmRwd@gyx}8yG$Tu9%P}xf^B_OevqyiFs5+swRV_@gvfcf&)*~blwK#>oa_e>q)bEcJBSs;)$ zvoCKEBhtC50sGn-k!e>E(P7&)16j*5>XlQ+GIPfwUPVZSnf4z5yx8mLY#&CR=*$OKuV>D|T7QP~*Q#e$&J zu0E;MKQmbSJ#Y_*czIpPK)-GQC#L4|`PKDTA?7`2g_dQc!bb+qh;K@COiWFyoSK91 zWB{E!F~wz%Ozyq%+VAXiB`B*8J3|d+h?a$xU6Wm~61mjR`=6G*D`R~z7Tl5MiBbjL zEiV}z2uxo?H>ln@HMI7&r{Ei7zzauiZhDk+-A1{o_+foq1l}50Dvr|XR?U2cTe%{? zV9(8Ef7eNSN(qoI(cIyjqZ8D1Vmaw_#iPDcmq{4oJR#m7c8K=VY2gW64+S7cud0PB z!U5&ZB%9P}QzQ7qyxKQi75Puix&|MNaXf_QCn~N9!kcnO(AkvGZjP*nAiM*YaNrBq zj*zCVZF>I9W)w|hyAF~#Ete?s?VrUZ%#Mv6W5)h#4Aorj(>vwVP!`O+eRSo_C(sHG z>Ro@WrA0fvwIGQ6A{!nEX9zW^(60UsM_uhosQGIMDQ)yEFL3UgpWjhx$m zJ-R!oi7Wayz{!<21$A@d<q>9! z{>hcp6?^ZUyD4Ss*FjVcR#sLw`85d6wO3yMaK>sLHpaOqf}E`de@qgd4M&gD(QV!U zXkHHi!T9Hh_EHpxD6b)el#(5P|1k+vwY!ZmCsm0qnrU)0BPi8$s_T5ZKc<~;YM<$T z4hh-7Li6S7j|c06oKCdd_mDN1%TDfEmYr?lJy!?!x<~t>Et5bzc3N*yyyxkv%09Pl zMg=%+dqQ^hAEzkY@6UqHIO>trH*4Prv>Vuh?6jaC0P ziYv;oB}*Ka!(65Y`7*$Q^VbjD??%NX6}rvq12v8Y;Abg-XIr6D!Hz{+xX-2ZLew>Y zzV8!g(?$sx)wc(;l`=02QfXa1jemaKOuw9%&=Byvcv96nd#yORPL@*^eGD-NozMUa zNN}H^U)V5TIlTEB&%KXT7o@K4!~DJF3mwd$|py_Z%zvzeRh&Z3c*o=f7Q04K(ANE~<#I-RLCdm-J~>N8>TEb!0EJR8eq zUH>9ZbsSp(QOkZ=Nk5Yv>~B}U6A-oW$69ZhU$HZ$K(PNs4N6ix$IotKK913am7ax? z(!*er5N8SqQ`U3QhlnZym|LyGQQtHGTlGJyp5f8a*{oKM$JG%^q}9MnpBa$qpiN9W zE(?u|N;2Z}p1F81lUyOc@`v49xbhaQB%MH3C-^ zsfdcj7X2Fyfae6edqV-^oP-MS45DZ9X7`}dMN4^}$D%v+3>mi^h5klrAe%^0Gg;quP zTIMz%Nh5c;3%;zRMEzggXxHeNIezh^f1axXajiCd`DXiWo;HJk`Eva%Eft;dJlklT zAiRD>poNJKO08H4W3-Nut1n;Wez2c#RRnLzET90GsTe4fg(id4mx}~|f)#*{a+nn= zgSbG*ldGBW@k)!gAbiPVd(zeYQ6W$PHMe- z{&)kb$4L9$7Y~Wrd4lL-0`H})+DQF^d?1AEihhNg$bIa}>XF18iszTL> z=hW2H=aBb26fx51;6jTH-j|}H3aYEglIH?(q>F+9BmFFNznAwcEKENnS zyY1(l{MdGTJ0q{O{ik8Z{_{wD>LCe>3tjb?D$&Y8^<-`e`N}@JQiLsGnnO!`epGjQEA^ zLw-fe3}4n~iAx%@gTEMzH zVRRJZw!$i_;%9wc#ej>RFg88SpH&x+i2lUzbcSK)C@s|!%uFpGx&135!Q%Z_sKUC6 zJ)X5{_4POn-67bcm3QcOpFjN}8OM??qZ0Pn@L_xp^4w|7!n_nG%avQ1{}+$O++%Gu zlPiom`l1jvLdP$X>B=^J8`nLS(2_)S=-^_NjV&ZsLfV3*`%;Y2$|FSCGoBoOZZGv_ z{>OGLUQZ}bVL^hOKDZhZBkganvg#S=G~6>rAAs0k$@JZK!Ey6A zd)ORT(TNR;&!0Ve z#=+0;5jVIxCCs^I1}>cNZd~HTm|u-7)dx+?$>U{ZvD{?gT+)rLIDfi>d6(mr3Mv&1 z;fNLYVR8GnIhbSXuvXb*b;kNJ{RJlTbtw9Ukch%a2=thP>d6IZso0-5Xgt{CWit!f z4OrzOG5Ozv2JYs}G;7^vQ592$3E9HYSuaHDzH$}gl@mXgEa421Fi$u0KF!XXt5ew| za*D)6sB4v!l=z8I?1Xn^|1?Dot}0uQ07YeZgFA@c+Dl|`Q@QtSbMD9G9*Fj-;iN~v zrTuPk3O@%nZ!o*DMM0AvP6nFAnsRr6$K*ZfV4~6L(ap8-$G_|}A=b|ZZd%7<*%5$arpP7DeEs@`Ub7?D* zt?X(F@VwV z7Q!J#)yYM^gtJ?mFGn*K-A@S2uiP@bgiBq^ASf$mpv)e|l#=)!uc!&Veg2m7prgL< z_+C@B0%O>(QInj~BRj?T$h^S&(nB?1P;8E=#XXO3KeNnLQ26`$_A2!9?ztqde0cG{ zXpqJaPaf0-lEEg^_Q&MLQi<+s)(Yvi$9rU?s`H#Od-G5xa0^D)GmQ4BBh3#)f4yF; zAsS8LPggYYpvC2xT;8h>&bR0FypIuYZL)73 zC7F#-mlo>eW}GOBmRD`CvZnX*NtwYnEe14vjh53NSou%Dli0mTosSo!mhJwR9TdR& zT?f2pEU=qtqvF{ktdcK2OF6?i4}zO_cU=UPkWyhy8OH3yWyKG0EA?K1LBo4+!ngOm z>BM{d^;Rd(&}=16HM>bCHWgO7)PCj+6$>spK@OLVgRxw;aup{odhP7;9!Ec~I>ivu znm?_9^~$iz3-pe7t}u%&!vd^ydC%pGkC?S@6TZxZZA??3{ar*g5#)^68yGC;(%Ftm zN}SGjuG*hM3cE0;IYnG|G}zQ?v(AteUw@O#M`ssFShsF6tPth>3tt&ZW1mO&jn9!dTU)V;x#F>SW}f2Ok0!*eFshHL3arAsGM3qAQS0bDag!R zo)Jp14v6Qq;7YOQM+s8GOkk2@rx+o|Wb)cBG$H8W`3JN# z@_f0>!BM3tOQ~8M!GV+~876h3TSr!RZmIu~B6#@l;R%G%R&;gR8~1z?A+NouZd%>M z0gDHGNX4xnxOaixcI7pX?gs%k<*rYXvxFga?X~E{PoQTQg$_Dj4F^r}LTIFmfpG9% zg*+pEy_ik)#n;Y7Q$DiURolw^fn;u3lhz&ROBnV)U*-(20fpDG(*4rG<&_kFxw7bH zLCM0x;@4j{xpjZb5S!beIDi>fJhQLDX>O0fuam-ie3J`k1}BX=gY1G}3n2>z`ZeG5 zun8o8lDOhJb4pE7?4VVlN;N>(#t59H_BPQKl@N-t-JZ5Y)5U8|t)hB|-p@=3-(56$zrS0;#3%*{VyL)x594 z(TjBT-2NnXQWdOpycic3$KdGTFio$2RS{^C(+Y6V?{_>?&3zicgLB!Hi#ATE6A zyHt@*N&x6X<0_G6miQ0kaRT**OF$Df1J+bir8f#*phzs>3w_^azx+bKde>#;_ohgq z<4~d|?=ZzHO4Q;wyon!&+Q@o3fx+fS6FufcssOKPR07|0D%`GQ`apt9Iy!MD9X36n z&7D-Dj~W38KnmnOEYSG4tvq48p(YtmyQ8Y8;FZ(HPk1k}#QntfyJB{H_oEi#Qcxx= z@0~mvfB9V^U2!eUO!bGljaH?Wz$;&B4~03KK+=6I1TTEPDqiLqrKT#fOCf8#w`WGO z3u>VS1zzr{CUh^zd*+OB-92sOg4}Ca--TcgHL!JGW>9PK=xjL0XV1u#Xu=LbUSmkXuMU{iHX5|G=&?L!+36FU;9AN;M@yc^W z@dU)nSMoISh+*|k9wOHJwSK+OH!%l8Ky!kPYU5OvA6wey4*qWwoanrpfD~GO#qQaZ zOxMedcYxh-0VH^kzH4siT-+rB#$7<`{LbflBHX^~;%G^32D@(Q(1IpTdF$xE*G$_A z3l*Ut0T+yOFN3#Q$xiztu-e+6C^ci*KXG^JsN8e?&r<(;pPv z-aDLR>*;FaS z*f4N0t{1gNZhT}deZf{?3nv)3TJF{MRU z!GewxC`A-|dXKM*3t~mT>zfxHI-<~dC}$y0wfBPExbf0e=l7bPaVgu#_xP&Yu+q&R z0KNvZoe%asC-GP*^!Y1)OL%LsfB?FEcq+p3KuaI96KAXntcJV`uvC9jW=( z7hjo+LKvt#(>qIHV>e9%;lVp6?)&$MC!qe;LH&(0m=caC@KcU(1MlvP>})!f6#-c> zd}uIhedZh)p90;Kkes|8{)tKTumzX}b;7lUgbInWe-BYjOiDV<2W`RRcb7w)lc>`a%zcKlFy>}>{7?nEO!#;5f zyd$zo-6?6#|0x)v|HzQs>H{5y;^t5-k@b*(R_)PwwBk)V6PrH$=>Y*fLlq;hs6G* z39&qRT6e9U1R4(FV;#-2hsO4TU!3FF)mdVsFV&clZuOmuYm_9x!v3h&y^^+w4R3TT zBzrW$jXw=HK5FhH-1w2euE+-5)&3r0k{GX);>fJ6<@c9(fpFQ(*~oT-i8e7|rHkCo zoEp>8x{_6#bs1@CLV!ubI&1Qb8~zTP+Q|)Ic zO4@IS8nbI4kyNzStv)>3+WU;eO;?HnHN7hIc)ZJUcq^LRce!Ogs5miFpbW+tc%Ocp z^3G8$Z)Wd~gDpeEP{pLLbjy2Lofofr5{&-SgYt0WqI)zf?~#gZB}V`em~e1#Q1I*X zwi1IzR~Yl6Iu}RU7tUJo!!n7xKYqTg0V@s5j^(}g13pjJCjA{4^y-G5;xIu|%1c5@ znjn=qNCIRD!S=A;@CcMLHQN)+_SII1u%ulzHXk=vt@S=)Bl>>Tu~zmi!zCPYQ)%ws zxwT5fl%-O=Rwe8YCSYIfSiw&~`tSz7MdY7!A%r?#PVzs6;LrqQq2{Zdy#um>y0#yF z9>d$vh-Scm*b{xyP~Q=D*4E|&VPSrX+4k>15+(@eicVy59v0q&htq4)hhNaSSOwvw zEZ;Tv)$oec&8xN8mk$<}BRHFw&%>{JtZ4-CRP$%EZagfbTeTu(L7o|fLz`RU9nN3D$nT`Bgly8uD0uNddEXWM)5 zjq7$2eljoy`cy2ykn5Ql83ObVt;H~ddUSsIe@)%Ia$Hk0l2=|n zs>(Z#|KD;E)}~c96X5x3?w#y#Gd%M0g4)_zug+*Dv-fq|TWHlx^^e?0v04|K^>(yD z9~W-V$OL~H=v{chjFJVah316KyBCiPpQ6NNspdwhGnVP(KdGwGvj5cN0n37Z{Gs$L zyxVj3jj1=Ch@e_9A681HKXEj2`8DT5mRq4Ihj}<0U95sRv5OM8XdjptPq$Mcw&5c3 z0Z**I4@NCVX*oGT#`y?t821cVW42aSju(c8hG+~ZE=gF6XE$Mu+j@fztTMLeWtLV65zxA&tv7eB+a`fZA(svU}N&G`7Z5JiM@ zR*&f9+TylqT!wVsoPhkYe$McwSIfADAe@ySpqO3|q+P(F-hEMU(wMW6uDIF+{v){y zuD?^YrH~UbJ3_)?1j5SQ*Yj##)`xL6DnoXYFx|Pj=F=plKcOIs3XEU0=fN&1yo)^~ z@FV2UtHy~aF}bL1YgNtHXnCf6UPbo|j?|~|2idW|^d2q3cg?Z?nID8%SzLbvsh4{{ zVr@jUkIlmCsR_HQzn_EiFle?4*H?N!`zr+=UhJ@4xt4yXCl#Hi< z?nsMe-no<9J1*ly2Xqoo?!Wb63C`X^;Tm04HZs_=lJ9BP^(e=GxtlC13DDLsC$DaVn8W|=v64>Z54H!mp zNeNq9&IU|*{}){HU3!sD+8WUKx1f)WvoiS;>>DH2J6uCz@c@n=W$w5uiJZsd=`J)r zI3!m2qht9|#L>yAb)n@T-jAzWSW`oz$3B-|>>Ux&FKUB6udpe1d*_!9mQ*-*U21g* zpsbjFVU9fLTsZI7OQn5S5(%OV0yy4RaJ<9dgyQJxdTN+C*iOJsEJ+>d2kWt`Z?UmF zI@Ak-tV`u-O*J)B^Yvi&dt3&3vH%(yn%uNo$G|mFZiTMF_qrgIi!Na-gCO^67{=dL zgfU@`akUJ*!K52I&dkr85jo0K1m%*lGtAkQ8n#X9_$(QYJ=NNgW$_d{0#!{sfEBcW z4~pWFb7Qc}ql1;laot#8-(=LzlUzSRzlmaN;r!7Y=7Frqpf%ad!EZ4!rF0$`aA zZGw-sQDIQ^$d`7543H1UXJ==ZE3H`mJ8-QX9YUY9ijR*^lSd!(S_?jA2FNP0>AC$~ zZ!u`Ja)8b-OGH9~;mnt4MJQ!QlURJdDH!>vM#grBsJ;D#5t@!ExcrrXl%?WL%VBiE zp<(P2J@o%NpydCUSoBpR`=m%zz+Z#TlOY@JA0@Ig1n7FYlt&m4hk;@4=vW3>A)Ck( zP5w1r<>$59YF291;kl^fPEz@6DmB@v)%C$8L$3c@8oHr0d?l}EP|)~bBJZ~Wd%l4< z5Lj}xIr!>%owrM+Hwl{U5-Buql=nS7RLE030#Xacg2tX1fE__oTwq5xjBz5E{)@EW zBUWy?8Zl!gwuVayV62${%+w@`PUSsC(ctKteaw}}|DO)*J9J>pP$Gu+Kj&p_7!5U2 zGpWu;wNE6#R+liT_jPablWQSXTw>y7^x&#{wE4=0sNZI5l~z8(LQj)_2}P#7}9JCX>jwn$_s9qUQ0XI!;@K@S6LeP(8Wkz*_*D-8n)aMohH zc##j7fgjHYks&R*eJ_Vi_`a)}7vPoYeif&3W)2X{{qO853!WuWXx%oFyfeW2zKTdJ zit@lQ67Mn|AS=D!VgZP>1BRpCK&vxq53;ZrM+2_{Ny3<^jejM(=7(BJF9^4nG+H@! z=gWE-w3_Io`3w^soIsHo@cko&I^6bAyY}vt0=Jj_n?;M5rrxJB;_&ij+wqAK{{t6~ z3|=0d{CKDgiqtEnZa-Ryt+leVSo+AK+?<_(t_G%)>)6yZG)CMg-YB;9O~SE17x!?U zTwiLP2CTi11T^}71C1xzwY2UDAt$2&)_pb`}Y*txdG0v^_rUmz2F(4Zf$D5 zzt_y?J-EsaBSzxt#zyxzpIWaJpJKp#77|OnR$I7K=qOXaXsqQrJVauNkbr29WsU@tU=IvZ`;)N8zQa4-MV(BoH+t<lmYk=duK_&1|?=&&08sV)fxPU43gH z7$>{to?CLYZHf02>6C%jYwxx9k`B?8W?h?)N$hJ#bh{pu>om)Hu=ICS)zxN|j>7eR zl?`D$o29`-6c$3a+zB06T-QdIDBov|zypQqW%whNL6|p;F;lO*Ae=398o+M!ZwN#w&qXFR-%kv~{(@@J<%Rf;-t zaseAp7j`ee`(7t<*8X?x*Sr|`iewj7JhR`VglgFfqu zo{N7RWBf+#9R{rWILHF6%3X-jU_dA8q!By`eOr<6UGI3=dkGWoK%?1t5! zD;4Nk>*)!RZk-P2s#!4yp>ArH>a9dNoT@mI>|yU?M`pFszc$sn_+Xf1_K*C4as4$; z+`99H-N>dOrK6-WGjeirbku2MruEo&g%Bn1@$0Txy-u zifK!`YLe%LvPT7io^?ZelSbSZjOnId!27#Sv_j{Fss6gyiB>j&T_X+y{=D7XeU_SS zp}$3~WZw(Ns13A=VUo}u){5UcaAg5dl?G<+jPvtXfhxpY+8!f=wjB-~Th_W15i4n2 z1RsgnJZ0xN#5|H{j7!ATE45|_f}6|4zV~xPNiLT9AM~o&>$s?Q-{_5W&O=S|vQWuY zalq21UY3`Rn?SpohIoq)Qu>!&&GhO^ejKV92py1;>s5AN~+`UZHjzU3yf=W!7K+`4XbCBKbmZKl~rd C-&AM- literal 0 HcmV?d00001 diff --git a/public/imgs/PRN_logo.png b/public/imgs/PRN_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b45ccfb0cfa7729376704e9bedd9480c44c5258d GIT binary patch literal 8776 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�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 G4*4$u?eX;h literal 0 HcmV?d00001 diff --git a/src/App.scss b/src/App.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..7e7494e --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,18 @@ +import React, { lazy, Suspense, FC } from "react"; +import { Route, Routes, BrowserRouter } from "react-router-dom"; + +const HomePage = lazy(() => import("./pages/home/home")); + +const AppRoutes: FC = () => { + return ( + + Loading...}> + + } /> + + + + ); +}; + +export default AppRoutes; diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..0e8b392 --- /dev/null +++ b/src/index.html @@ -0,0 +1,11 @@ + + + + + Parking Reform Network CRUD Databas + + +
+ + + diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..186635e --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,7 @@ +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; + +const container = document.getElementById("app"); +const root = createRoot(container); +root.render(); diff --git a/src/pages/home/home.scss b/src/pages/home/home.scss new file mode 100644 index 0000000..506f718 --- /dev/null +++ b/src/pages/home/home.scss @@ -0,0 +1,27 @@ +.background-image-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-image: url("../../../public/imgs/PRN_black_full.png"); + background-size: 36% auto; + background-position: center; + background-repeat: no-repeat; + opacity: 1; + z-index: 1000; +} + +.form-logo-box { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 20%; +} + +.prn-form-logo { + // position: absolute; + width: 120px !important; + height: 120px !important; + margin-bottom: 20px; +} diff --git a/src/pages/home/home.tsx b/src/pages/home/home.tsx new file mode 100644 index 0000000..fa00f8f --- /dev/null +++ b/src/pages/home/home.tsx @@ -0,0 +1,46 @@ +import * as React from "react"; +import Avatar from "@mui/material/Avatar"; +import CssBaseline from "@mui/material/CssBaseline"; +import Paper from "@mui/material/Paper"; +import Box from "@mui/material/Box"; +import Grid from "@mui/material/Grid"; +import Typography from "@mui/material/Typography"; +import { createTheme, ThemeProvider } from "@mui/material/styles"; +import PRN_LOGO from "../../../public/imgs/PRN_logo.png"; +import "./home.scss"; + +// TODO remove, this demo shouldn't need to reset the theme. +const defaultTheme = createTheme(); + +export default function HomePage() { + return ( + + + + + + + + + Sign in + + + + + + ); +} diff --git a/src/pages/rootpage/root.tsx b/src/pages/rootpage/root.tsx new file mode 100644 index 0000000..a024432 --- /dev/null +++ b/src/pages/rootpage/root.tsx @@ -0,0 +1,18 @@ +import React, { FC, ReactNode } from "react"; + +interface RootpageProps { + children: ReactNode; + header: string; +} + +const Rootpage: FC = ({ children, header }) => { + return ( + <> + {/* Have a header here */} + {children} + {/* Have a footer here */} + + ); +}; + +export default Rootpage; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..752221d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,113 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + + "moduleResolution": "node", + "lib": ["DOM", "ESNext"], + "jsx": "react-jsx" + } +} From 8100ae379fefeb851ef160f8442c235b90adf89b Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Tue, 28 Nov 2023 13:00:51 -0800 Subject: [PATCH 2/8] Fixing 'npm run fix' command to target all files | Using Apache 2 license in package.json file | Removed the theme in home.tsx b/c it is unnecessary | Removed defaults in tsconfig.json file --- crud-backend/tsconfig.json | 20 ++++++++ .../.eslintrc.json | 0 .gitignore => crud-frontend/.gitignore | 0 LICENSE => crud-frontend/LICENSE | 0 package.json => crud-frontend/package.json | 6 +-- .../public}/imgs/PRN_black_full.png | Bin .../public}/imgs/PRN_logo.png | Bin {src => crud-frontend/src}/App.scss | 0 {src => crud-frontend/src}/App.tsx | 0 {src => crud-frontend/src}/index.html | 0 {src => crud-frontend/src}/index.tsx | 0 .../src}/pages/home/home.scss | 0 crud-frontend/src/pages/home/home.tsx | 41 ++++++++++++++++ .../src}/pages/rootpage/root.tsx | 0 tsconfig.json => crud-frontend/tsconfig.json | 0 src/pages/home/home.tsx | 46 ------------------ 16 files changed, 64 insertions(+), 49 deletions(-) create mode 100644 crud-backend/tsconfig.json rename .eslintrc.json => crud-frontend/.eslintrc.json (100%) rename .gitignore => crud-frontend/.gitignore (100%) rename LICENSE => crud-frontend/LICENSE (100%) rename package.json => crud-frontend/package.json (92%) rename {public => crud-frontend/public}/imgs/PRN_black_full.png (100%) rename {public => crud-frontend/public}/imgs/PRN_logo.png (100%) rename {src => crud-frontend/src}/App.scss (100%) rename {src => crud-frontend/src}/App.tsx (100%) rename {src => crud-frontend/src}/index.html (100%) rename {src => crud-frontend/src}/index.tsx (100%) rename {src => crud-frontend/src}/pages/home/home.scss (100%) create mode 100644 crud-frontend/src/pages/home/home.tsx rename {src => crud-frontend/src}/pages/rootpage/root.tsx (100%) rename tsconfig.json => crud-frontend/tsconfig.json (100%) delete mode 100644 src/pages/home/home.tsx diff --git a/crud-backend/tsconfig.json b/crud-backend/tsconfig.json new file mode 100644 index 0000000..7832db5 --- /dev/null +++ b/crud-backend/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + + /* Interop Constraints */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/.eslintrc.json b/crud-frontend/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to crud-frontend/.eslintrc.json diff --git a/.gitignore b/crud-frontend/.gitignore similarity index 100% rename from .gitignore rename to crud-frontend/.gitignore diff --git a/LICENSE b/crud-frontend/LICENSE similarity index 100% rename from LICENSE rename to crud-frontend/LICENSE diff --git a/package.json b/crud-frontend/package.json similarity index 92% rename from package.json rename to crud-frontend/package.json index 43b726d..77de77b 100644 --- a/package.json +++ b/crud-frontend/package.json @@ -4,11 +4,11 @@ "description": "", "main": "index.js", "scripts": { - "start": "parcel ./src/index.html", + "start": "set PORT=3000 && parcel ./src/index.html", "build": "rm -rf dist; parcel build --detailed-report", "test": "echo \"Error: no test specified\" && exit 1", "fmt": "prettier --write .", - "fix": "prettier --write src/; eslint --fix src/", + "fix": "prettier --write .; eslint --fix .", "lint": "prettier --check ." }, "source": "src/index.html", @@ -18,7 +18,7 @@ }, "keywords": [], "author": "", - "license": "ISC", + "license": "LICENSE", "bugs": { "url": "https://github.com/ParkingReformNetwork/crud/issues" }, diff --git a/public/imgs/PRN_black_full.png b/crud-frontend/public/imgs/PRN_black_full.png similarity index 100% rename from public/imgs/PRN_black_full.png rename to crud-frontend/public/imgs/PRN_black_full.png diff --git a/public/imgs/PRN_logo.png b/crud-frontend/public/imgs/PRN_logo.png similarity index 100% rename from public/imgs/PRN_logo.png rename to crud-frontend/public/imgs/PRN_logo.png diff --git a/src/App.scss b/crud-frontend/src/App.scss similarity index 100% rename from src/App.scss rename to crud-frontend/src/App.scss diff --git a/src/App.tsx b/crud-frontend/src/App.tsx similarity index 100% rename from src/App.tsx rename to crud-frontend/src/App.tsx diff --git a/src/index.html b/crud-frontend/src/index.html similarity index 100% rename from src/index.html rename to crud-frontend/src/index.html diff --git a/src/index.tsx b/crud-frontend/src/index.tsx similarity index 100% rename from src/index.tsx rename to crud-frontend/src/index.tsx diff --git a/src/pages/home/home.scss b/crud-frontend/src/pages/home/home.scss similarity index 100% rename from src/pages/home/home.scss rename to crud-frontend/src/pages/home/home.scss diff --git a/crud-frontend/src/pages/home/home.tsx b/crud-frontend/src/pages/home/home.tsx new file mode 100644 index 0000000..2468132 --- /dev/null +++ b/crud-frontend/src/pages/home/home.tsx @@ -0,0 +1,41 @@ +import * as React from "react"; +import Avatar from "@mui/material/Avatar"; +import CssBaseline from "@mui/material/CssBaseline"; +import Paper from "@mui/material/Paper"; +import Box from "@mui/material/Box"; +import Grid from "@mui/material/Grid"; +import Typography from "@mui/material/Typography"; +import { createTheme, ThemeProvider } from "@mui/material/styles"; +import PRN_LOGO from "../../../public/imgs/PRN_logo.png"; +import "./home.scss"; + +export default function HomePage() { + return ( + + + + + + + + Sign in + + + + + ); +} diff --git a/src/pages/rootpage/root.tsx b/crud-frontend/src/pages/rootpage/root.tsx similarity index 100% rename from src/pages/rootpage/root.tsx rename to crud-frontend/src/pages/rootpage/root.tsx diff --git a/tsconfig.json b/crud-frontend/tsconfig.json similarity index 100% rename from tsconfig.json rename to crud-frontend/tsconfig.json diff --git a/src/pages/home/home.tsx b/src/pages/home/home.tsx deleted file mode 100644 index fa00f8f..0000000 --- a/src/pages/home/home.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import * as React from "react"; -import Avatar from "@mui/material/Avatar"; -import CssBaseline from "@mui/material/CssBaseline"; -import Paper from "@mui/material/Paper"; -import Box from "@mui/material/Box"; -import Grid from "@mui/material/Grid"; -import Typography from "@mui/material/Typography"; -import { createTheme, ThemeProvider } from "@mui/material/styles"; -import PRN_LOGO from "../../../public/imgs/PRN_logo.png"; -import "./home.scss"; - -// TODO remove, this demo shouldn't need to reset the theme. -const defaultTheme = createTheme(); - -export default function HomePage() { - return ( - - - - - - - - - Sign in - - - - - - ); -} From 30166783c7ae2de84f8a0f3cd2a8de9f77d51dee Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Tue, 6 Feb 2024 10:24:08 -0800 Subject: [PATCH 3/8] Files + Dead code for backend for history tracking --- crud-backend/.gitignore | 41 + crud-backend/package-lock.json | 2578 ++++++++++++++++++ crud-backend/package.json | 33 + crud-backend/src/credentials.json | 17 + crud-backend/src/index.tsx | 60 + crud-backend/src/oauth2.keys.json | 17 + crud-backend/tsconfig.json | 4 +- crud-frontend/src/components/login/login.tsx | 117 + 8 files changed, 2866 insertions(+), 1 deletion(-) create mode 100644 crud-backend/.gitignore create mode 100644 crud-backend/package-lock.json create mode 100644 crud-backend/package.json create mode 100644 crud-backend/src/credentials.json create mode 100644 crud-backend/src/index.tsx create mode 100644 crud-backend/src/oauth2.keys.json create mode 100644 crud-frontend/src/components/login/login.tsx diff --git a/crud-backend/.gitignore b/crud-backend/.gitignore new file mode 100644 index 0000000..4afb8ba --- /dev/null +++ b/crud-backend/.gitignore @@ -0,0 +1,41 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz +*.swp + +pids +logs +results +tmp + +# Build +public/css/main.css + +# Coverage reports +coverage + +# API keys and secrets +.env + +# Dependency directory +node_modules +bower_components + +# Editors +.idea +*.iml + +# OS metadata +.DS_Store +Thumbs.db + +# Ignore built ts files +dist/**/* + +# ignore yarn.lock +yarn.lock \ No newline at end of file diff --git a/crud-backend/package-lock.json b/crud-backend/package-lock.json new file mode 100644 index 0000000..8803157 --- /dev/null +++ b/crud-backend/package-lock.json @@ -0,0 +1,2578 @@ +{ + "name": "crud-backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "crud-backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@google-cloud/local-auth": "^2.1.0", + "@supabase/supabase-js": "^2.39.0", + "axios": "^1.6.2", + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "google-auth-library": "^9.2.0", + "googleapis": "^105.0.0", + "nodemon": "^3.0.1" + }, + "devDependencies": { + "@types/cors": "^2.8.16", + "@types/express": "^4.17.21", + "ts-node-dev": "^2.0.0", + "typescript": "^5.2.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/local-auth": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@google-cloud/local-auth/-/local-auth-2.1.0.tgz", + "integrity": "sha512-ymZ1XuyKcRcro0aiMYz3hVGbZ+QZmN5V1Eyjvw2k1xqq76PwmDer0DIPxdxkLzfW9Inr8+g+MS9t9fZ7dOlTOQ==", + "dependencies": { + "arrify": "^2.0.1", + "google-auth-library": "^8.0.2", + "open": "^7.0.3", + "server-destroy": "^1.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/local-auth/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/local-auth/node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/local-auth/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.5.tgz", + "integrity": "sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/gotrue-js": { + "version": "2.57.0", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.57.0.tgz", + "integrity": "sha512-/CcAW40aPKgp9/w9WgXVUQFg1AOdvFR687ONOMjASPBuC6FsNbKlcXp4pc+rwKNtxyxDkBbR+x7zj/8g00r/Og==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/node-fetch": { + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.9.0.tgz", + "integrity": "sha512-axP6cU69jDrLbfihJKQ6vU27tklD0gzb9idkMN363MtTXeJVt5DQNT3JnJ58JVNBdL74hgm26rAsFNvHk+tnSw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.8.4.tgz", + "integrity": "sha512-5C9slLTGikHnYmAnIBOaPogAgbcNY68vnIyE6GpqIKjHElVb6LIi4clwNcjHSj4z6szuvvzj8T/+ePEgGEGekw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14", + "@types/phoenix": "^1.5.4", + "@types/websocket": "^1.0.3", + "websocket": "^1.0.34" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz", + "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.39.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.39.0.tgz", + "integrity": "sha512-cYfnwWRW5rYBbPT/BNIejtRT9ULdD9PnIExQV28PZpqcqm3PLwS4f3pY7WGB01Da63VYdvktZPKuYvreqsj/Zg==", + "dependencies": { + "@supabase/functions-js": "^2.1.5", + "@supabase/gotrue-js": "^2.56.0", + "@supabase/node-fetch": "^2.6.14", + "@supabase/postgrest-js": "^1.8.6", + "@supabase/realtime-js": "^2.8.4", + "@supabase/storage-js": "^2.5.4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.16.tgz", + "integrity": "sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/phoenix": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", + "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" + }, + "node_modules/@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz", + "integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gcp-metadata/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gcp-metadata/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/gcp-metadata/node_modules/gaxios": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gcp-metadata/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gcp-metadata/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/google-auth-library": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.2.0.tgz", + "integrity": "sha512-1oV3p0JhNEhVbj26eF3FAJcv9MXXQt4S0wcvKZaDbl4oHq5V3UJoSbsGZGQNcjoCdhW4kDSwOs11wLlHog3fgQ==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-auth-library/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/google-auth-library/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/google-auth-library/node_modules/gaxios": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-auth-library/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/google-auth-library/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis": { + "version": "105.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-105.0.0.tgz", + "integrity": "sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==", + "dependencies": { + "google-auth-library": "^8.0.2", + "googleapis-common": "^6.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.4.tgz", + "integrity": "sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA==", + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^5.0.1", + "google-auth-library": "^8.0.2", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/googleapis-common/node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/googleapis-common/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/googleapis/node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/googleapis/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/gtoken/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gtoken/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/gtoken/node_modules/gaxios": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gtoken/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gtoken/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", + "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nodemon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/crud-backend/package.json b/crud-backend/package.json new file mode 100644 index 0000000..8c9b065 --- /dev/null +++ b/crud-backend/package.json @@ -0,0 +1,33 @@ +{ + "name": "crud-backend", + "version": "1.0.0", + "description": "Backend for Parking Reform Network CRUD project", + "main": "src/index.ts", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "clean": "rm -rf dist", + "build": "npm run clean && tsc", + "start": "node dist/index.js", + "dev": "nodemon" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@google-cloud/local-auth": "^2.1.0", + "@supabase/supabase-js": "^2.39.0", + "axios": "^1.6.2", + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "google-auth-library": "^9.2.0", + "googleapis": "^105.0.0", + "nodemon": "^3.0.1" + }, + "devDependencies": { + "@types/cors": "^2.8.16", + "@types/express": "^4.17.21", + "ts-node-dev": "^2.0.0", + "typescript": "^5.2.2" + } +} diff --git a/crud-backend/src/credentials.json b/crud-backend/src/credentials.json new file mode 100644 index 0000000..3dc60c7 --- /dev/null +++ b/crud-backend/src/credentials.json @@ -0,0 +1,17 @@ +{ + "web": { + "client_id": "757897629512-3ltcl0q206uancd3h7jbi63aaj3levud.apps.googleusercontent.com", + "project_id": "crud-database-403800", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_secret": "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", + "redirect_uris": [ + "http://localhost:1234/oauth2callback" + ], + "javascript_origins": [ + "http://localhost:8000", + "http://localhost" + ] + } +} \ No newline at end of file diff --git a/crud-backend/src/index.tsx b/crud-backend/src/index.tsx new file mode 100644 index 0000000..773e5e4 --- /dev/null +++ b/crud-backend/src/index.tsx @@ -0,0 +1,60 @@ +import express, { Express, Request, Response, Application } from 'express';`` +// const express = require("express"); +import dotenv from 'dotenv'; +// const dotenv = require("dotenv"); +import { createClient } from '@supabase/supabase-js'; +// const createClient = require("@supabase/supabase-js") +// const cors = require("cors"); +import cors from "cors"; + + +// for env file +dotenv.config(); + +const supabaseUrl = process.env.SUPABASE_URL ?? ''; +const supabasePublicAnonKey = process.env.SUPABASE_PUBLIC_ANON_KEY ?? ''; + +console.log(supabaseUrl); + +const supabase = createClient(supabaseUrl, supabasePublicAnonKey, { + auth: { + autoRefreshToken: false, + persistSession: true, + detectSessionInUrl: false + } +}); + +const app = express(); +const port = process.env.PORT || 8000; +app.use(cors()); + +app.use(express.json()); + +app.post('/auth/google', async(req: Request, res: Response) => { + console.log("Hello"); + const { access_token } = req.body; + console.log(req.body); + + try { + const { data, error } = await supabase.auth.signInWithOAuth({ + provider: 'google', + options: { + queryParams: { + access_type: 'offline', + prompt: 'consent' + }, + }, + }); + + console.log(data); + res.status(200).json({ success: true, message: "Login successful" }); + } catch(error) { + console.error("Error: ", error); + } +}) + +app.listen(8000, () => { + console.group(`Server is running on http://localhost:${port}`); +}) + + diff --git a/crud-backend/src/oauth2.keys.json b/crud-backend/src/oauth2.keys.json new file mode 100644 index 0000000..d9ce31f --- /dev/null +++ b/crud-backend/src/oauth2.keys.json @@ -0,0 +1,17 @@ +{ + "web": { + "client_id": "757897629512-3ltcl0q206uancd3h7jbi63aaj3levud.apps.googleusercontent.com", + "project_id": "crud-database-403800", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_secret": "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", + "redirect_uris": [ + "http://localhost:8000/oauth2callback" + ], + "javascript_origins": [ + "http://localhost:8000", + "http://localhost" + ] + } +} \ No newline at end of file diff --git a/crud-backend/tsconfig.json b/crud-backend/tsconfig.json index 7832db5..b70c06d 100644 --- a/crud-backend/tsconfig.json +++ b/crud-backend/tsconfig.json @@ -15,6 +15,8 @@ "strict": true, /* Enable all strict type-checking options. */ /* Completeness */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + + "moduleResolution": "node" } } diff --git a/crud-frontend/src/components/login/login.tsx b/crud-frontend/src/components/login/login.tsx new file mode 100644 index 0000000..1b2711f --- /dev/null +++ b/crud-frontend/src/components/login/login.tsx @@ -0,0 +1,117 @@ +import React, { useState, useEffect } from "react"; +import axios from "axios"; +import { useNavigate } from "react-router-dom"; +import { createClient } from '@supabase/supabase-js'; +import { ConnectingAirportsOutlined, SettingsSuggestRounded } from "@mui/icons-material"; +// import 'dotenv/config'; + +// for env file +// require('dotenv').config(); + +const supabase = createClient(process.env.REACT_APP_SUPABASE_URL, process.env.REACT_APP_SUPABASE_PUBLIC_ANON_KEY, { + auth: { + autoRefreshToken: false, + persistSession: true, + detectSessionInUrl: false + } +}); + +... +declare global { + interface Window { + handleSignInWithGoogle?: any; + } +} + +function Login() { + const [session, setSession] = useState(null); + const [user, setUser] = useState(null); + + useEffect(() => { + const script = document.createElement('script'); + + script.src = "https://accounts.google.com/gsi/client"; + script.async = true; + script.defer = true; + + document.body.appendChild(script); + + supabase.auth.onAuthStateChange((_event, session) => { + setSession(session) + setUser(session?.user ?? null); + }); + + return () => { + document.body.removeChild(script); + } + }, []); + + // useEffect(() => { + // const {data, error} = await supabase.auth.getSession(); + + // console.log(data); + // }, []); + + const navigate = useNavigate(); + + window.handleSignInWithGoogle = async(response) => { + console.log("Encoded JWT ID Token: ", response.credential); + + try { + const serverResponse = await fetch("http://localhost:8000/auth/google", { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ token: response.credential }) + }); + + console.log(serverResponse); + if(serverResponse.ok) { + console.log("Login successful on server"); + const {data, error} = await supabase.auth.refreshSession(); + const {session, user} = data; + + console.log(data); + // const {user, session} = supabase.auth.session() + + // const data = await supabase.auth.onAuthStateChange((event, session) => { + // console.log(event, session); + // }); + + // console.log("Auth session: ", data); + + // navigate("/logged-in"); + } else { + console.log("Login failed on server"); + } + } catch (error) { + console.error("Error sending token to server: ", error); + } + } + + return ( + <> +
+
+
+ +
+
+
+ + ); +} + +export default Login; From 5107290efe5f0ac5bc991e52ac0d795f73cf9db1 Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Mon, 12 Feb 2024 01:21:17 -0800 Subject: [PATCH 4/8] Finished implementation of login and tested sign out functionality --- crud-frontend/.eslintrc.json | 5 +- crud-frontend/.gitignore | 3 + crud-frontend/package.json | 11 +- crud-frontend/src/App.tsx | 22 ++-- crud-frontend/src/components/login/login.tsx | 77 +++---------- crud-frontend/src/contexts/AuthContext.tsx | 73 ++++++++++++ crud-frontend/src/index.html | 1 + crud-frontend/src/pages/home/home.tsx | 3 +- crud-frontend/src/pages/loggedIn/loggedIn.tsx | 34 ++++++ crud-frontend/src/setup/supabaseSetup.tsx | 12 ++ crud-frontend/tsconfig.json | 105 +----------------- 11 files changed, 172 insertions(+), 174 deletions(-) create mode 100644 crud-frontend/src/contexts/AuthContext.tsx create mode 100644 crud-frontend/src/pages/loggedIn/loggedIn.tsx create mode 100644 crud-frontend/src/setup/supabaseSetup.tsx diff --git a/crud-frontend/.eslintrc.json b/crud-frontend/.eslintrc.json index 9a59abc..dea0296 100644 --- a/crud-frontend/.eslintrc.json +++ b/crud-frontend/.eslintrc.json @@ -14,7 +14,10 @@ "sourceType": "module" }, "plugins": ["@typescript-eslint", "react"], - "rules": {}, + "rules": { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "off" + }, "settings": { "react": { "version": "detect" // Automatically detect the React version diff --git a/crud-frontend/.gitignore b/crud-frontend/.gitignore index b77bf3e..1f62131 100644 --- a/crud-frontend/.gitignore +++ b/crud-frontend/.gitignore @@ -35,3 +35,6 @@ yarn-error.log* # Ignore cache files /.changelog /.cache + +# Environment files +.env diff --git a/crud-frontend/package.json b/crud-frontend/package.json index 77de77b..0b21e17 100644 --- a/crud-frontend/package.json +++ b/crud-frontend/package.json @@ -4,8 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "start": "set PORT=3000 && parcel ./src/index.html", - "build": "rm -rf dist; parcel build --detailed-report", + "start": "parcel ./src/index.html --port 3000", + "build": "rm -rf dist; parcel build ./src/index.html", "test": "echo \"Error: no test specified\" && exit 1", "fmt": "prettier --write .", "fix": "prettier --write .; eslint --fix .", @@ -18,7 +18,7 @@ }, "keywords": [], "author": "", - "license": "LICENSE", + "license": "Apache-2.0", "bugs": { "url": "https://github.com/ParkingReformNetwork/crud/issues" }, @@ -30,12 +30,15 @@ "@mui/icons-material": "^5.14.16", "@mui/material": "^5.14.17", "@react-oauth/google": "^0.11.1", + "@supabase/supabase-js": "^2.39.3", "@types/react": "^18.2.33", "@types/react-dom": "^18.2.14", + "axios": "^1.6.1", "deasync": "^0.1.29", + "dotenv": "^16.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.18.0" + "react-router-dom": "^6.20.0" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^6.10.0", diff --git a/crud-frontend/src/App.tsx b/crud-frontend/src/App.tsx index 7e7494e..faefc7d 100644 --- a/crud-frontend/src/App.tsx +++ b/crud-frontend/src/App.tsx @@ -1,17 +1,23 @@ import React, { lazy, Suspense, FC } from "react"; import { Route, Routes, BrowserRouter } from "react-router-dom"; +import LoggedIn from "./pages/loggedIn/loggedIn"; +import HomePage from "./pages/home/home" +import { AuthProvider } from "./contexts/AuthContext"; -const HomePage = lazy(() => import("./pages/home/home")); +// const HomePage = lazy(() => import("./pages/home/home")); const AppRoutes: FC = () => { return ( - - Loading...}> - - } /> - - - + + + Loading...}> + + } /> + } /> + + + + ); }; diff --git a/crud-frontend/src/components/login/login.tsx b/crud-frontend/src/components/login/login.tsx index 1b2711f..04d65e8 100644 --- a/crud-frontend/src/components/login/login.tsx +++ b/crud-frontend/src/components/login/login.tsx @@ -1,18 +1,12 @@ import React, { useState, useEffect } from "react"; import axios from "axios"; -import { useNavigate } from "react-router-dom"; -import { createClient } from '@supabase/supabase-js'; -import { ConnectingAirportsOutlined, SettingsSuggestRounded } from "@mui/icons-material"; -// import 'dotenv/config'; - -// for env file -// require('dotenv').config(); +import { createClient } from "@supabase/supabase-js"; const supabase = createClient(process.env.REACT_APP_SUPABASE_URL, process.env.REACT_APP_SUPABASE_PUBLIC_ANON_KEY, { - auth: { - autoRefreshToken: false, - persistSession: true, - detectSessionInUrl: false + auth: { + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: true } }); @@ -36,58 +30,23 @@ function Login() { document.body.appendChild(script); - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - setUser(session?.user ?? null); - }); - return () => { document.body.removeChild(script); } }, []); - // useEffect(() => { - // const {data, error} = await supabase.auth.getSession(); - - // console.log(data); - // }, []); - - const navigate = useNavigate(); - window.handleSignInWithGoogle = async(response) => { - console.log("Encoded JWT ID Token: ", response.credential); - - try { - const serverResponse = await fetch("http://localhost:8000/auth/google", { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ token: response.credential }) - }); - - console.log(serverResponse); - if(serverResponse.ok) { - console.log("Login successful on server"); - const {data, error} = await supabase.auth.refreshSession(); - const {session, user} = data; - - console.log(data); - // const {user, session} = supabase.auth.session() - - // const data = await supabase.auth.onAuthStateChange((event, session) => { - // console.log(event, session); - // }); - - // console.log("Auth session: ", data); - - // navigate("/logged-in"); - } else { - console.log("Login failed on server"); - } - } catch (error) { - console.error("Error sending token to server: ", error); - } + try { + const { data, error } = await supabase.auth.signInWithOAuth({ + provider: 'google', + options: { + redirectTo: 'http://localhost:3000/logged-in' + }, + }) + + } catch (error) { + console.log("Error:", error); + } } return ( @@ -101,7 +60,7 @@ function Login() { data-auto_prompt="false"> -
({session: null, user: null}); + +export const useAuth = () => useContext(AuthContext) + +export const AuthProvider: React.FC<{ children: ReactNode }> = ({children}) => { + const [session, setSession] = useState(null); + const [user, setUser] = useState(null); + + useEffect(() => { + const sessionListener = supabase.auth.onAuthStateChange((event: AuthChangeEvent, session: Session | null) => { + setSession(session); + setUser(session?.user ?? null); + }); + + const fetchSession = async() => { + try { + const { data, error } = await supabase.auth.getSession(); + + if(error) { + // Handle error if any + console.error("Error fetching session: ", error) + } else if (data && data.session) { + // session exists + setSession(data.session); + setUser(data.session.user ?? null); + } else { + // no session exists, set seesion state to null + setSession(null); + setUser(null); + } + } catch (error) { + console.error("Unexpected error fetching session: ", error) + } + }; + + fetchSession(); + + // // fetch the current session + // const currentSession = supabase.auth.getSession(); + // if(currentSession) { + // setSession(currentSession); + // // setUser(currentSession.) + // } + + return () => { + if(sessionListener.data.subscription) { + sessionListener.data.subscription.unsubscribe(); + } + }; + }, []); + + return ( + + {children} + + ); +}; \ No newline at end of file diff --git a/crud-frontend/src/index.html b/crud-frontend/src/index.html index 0e8b392..2d9f365 100644 --- a/crud-frontend/src/index.html +++ b/crud-frontend/src/index.html @@ -7,5 +7,6 @@
+ diff --git a/crud-frontend/src/pages/home/home.tsx b/crud-frontend/src/pages/home/home.tsx index 2468132..3367659 100644 --- a/crud-frontend/src/pages/home/home.tsx +++ b/crud-frontend/src/pages/home/home.tsx @@ -5,9 +5,9 @@ import Paper from "@mui/material/Paper"; import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; import Typography from "@mui/material/Typography"; -import { createTheme, ThemeProvider } from "@mui/material/styles"; import PRN_LOGO from "../../../public/imgs/PRN_logo.png"; import "./home.scss"; +import Login from "./../../components/login/login"; export default function HomePage() { return ( @@ -34,6 +34,7 @@ export default function HomePage() { Sign in + diff --git a/crud-frontend/src/pages/loggedIn/loggedIn.tsx b/crud-frontend/src/pages/loggedIn/loggedIn.tsx new file mode 100644 index 0000000..11a248b --- /dev/null +++ b/crud-frontend/src/pages/loggedIn/loggedIn.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import { useAuth } from "../../contexts/AuthContext"; +import { supabase } from "../../setup/supabaseSetup"; +import { useNavigate } from "react-router-dom"; + + +export default function LoggedIn() { + const {session, user} = useAuth(); + + const navigate = useNavigate(); + + const signOut = async() => { + try { + const { error } = await supabase.auth.signOut(); + if(error) { + console.error("Error signing out: ", error.message) + } else { + console.log("User signed out successfully"); + navigate("/"); + } + } catch (error) { + console.error("Error while signing out: ", error) + } + } + + return ( +
+ {session ?

User is logged in

:

User is not logged in

} + {user ?

User {user.email} is logged in

:

User has no name

} + +
+ ) +} + diff --git a/crud-frontend/src/setup/supabaseSetup.tsx b/crud-frontend/src/setup/supabaseSetup.tsx new file mode 100644 index 0000000..7ee5664 --- /dev/null +++ b/crud-frontend/src/setup/supabaseSetup.tsx @@ -0,0 +1,12 @@ +import { createClient } from '@supabase/supabase-js'; + +const supabaseUrl = process.env.REACT_APP_SUPABASE_URL; +const supabaseKey = process.env.REACT_APP_SUPABASE_PUBLIC_ANON_KEY; + +console.log(supabaseUrl) +console.log(supabaseKey) +if (!supabaseUrl || !supabaseKey) { + throw new Error("Supabase URL or Supabase Key is missing. Make sure to set them in your environment variables."); +} + +export const supabase = createClient(supabaseUrl, supabaseKey); diff --git a/crud-frontend/tsconfig.json b/crud-frontend/tsconfig.json index 752221d..98fab90 100644 --- a/crud-frontend/tsconfig.json +++ b/crud-frontend/tsconfig.json @@ -1,113 +1,16 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */, "moduleResolution": "node", "lib": ["DOM", "ESNext"], - "jsx": "react-jsx" + "jsx": "react-jsx", + "noUnusedLocals": false, + "allowSyntheticDefaultImports": true, + "module": "esnext" } } From b22f369b8c8eea1a843bbe2153cfa3d211b9aa20 Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Mon, 12 Feb 2024 01:27:43 -0800 Subject: [PATCH 5/8] Removing console log that showed env variables --- crud-frontend/src/setup/supabaseSetup.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/crud-frontend/src/setup/supabaseSetup.tsx b/crud-frontend/src/setup/supabaseSetup.tsx index 7ee5664..a38a14d 100644 --- a/crud-frontend/src/setup/supabaseSetup.tsx +++ b/crud-frontend/src/setup/supabaseSetup.tsx @@ -3,8 +3,6 @@ import { createClient } from '@supabase/supabase-js'; const supabaseUrl = process.env.REACT_APP_SUPABASE_URL; const supabaseKey = process.env.REACT_APP_SUPABASE_PUBLIC_ANON_KEY; -console.log(supabaseUrl) -console.log(supabaseKey) if (!supabaseUrl || !supabaseKey) { throw new Error("Supabase URL or Supabase Key is missing. Make sure to set them in your environment variables."); } From 89f2cfa4800226232d59d4ac440db9d689fb3d00 Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Mon, 12 Feb 2024 01:39:08 -0800 Subject: [PATCH 6/8] Added credentials to .gitignore --- crud-backend/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crud-backend/.gitignore b/crud-backend/.gitignore index 4afb8ba..3f9a617 100644 --- a/crud-backend/.gitignore +++ b/crud-backend/.gitignore @@ -21,6 +21,8 @@ coverage # API keys and secrets .env +./credentials.json +./oauth2.keys.json # Dependency directory node_modules From e413c2407fb8640618906e53448285f47e47ec79 Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Tue, 20 Feb 2024 17:08:12 -0500 Subject: [PATCH 7/8] Removing unnecessary comment --- crud-frontend/src/pages/rootpage/root.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/crud-frontend/src/pages/rootpage/root.tsx b/crud-frontend/src/pages/rootpage/root.tsx index a024432..176bf05 100644 --- a/crud-frontend/src/pages/rootpage/root.tsx +++ b/crud-frontend/src/pages/rootpage/root.tsx @@ -8,9 +8,7 @@ interface RootpageProps { const Rootpage: FC = ({ children, header }) => { return ( <> - {/* Have a header here */} {children} - {/* Have a footer here */} ); }; From 34fbfa7a3b646c64edeaa7970fc80e721f47b3a4 Mon Sep 17 00:00:00 2001 From: Alan Vuong Date: Tue, 27 Feb 2024 11:15:14 -0800 Subject: [PATCH 8/8] Deleting backend | Removing unused code from frontend --- README.md | 2 +- crud-backend/.gitignore | 43 - crud-backend/package-lock.json | 2578 -------------------- crud-backend/package.json | 33 - crud-backend/src/credentials.json | 17 - crud-backend/src/index.tsx | 60 - crud-backend/src/oauth2.keys.json | 17 - crud-backend/tsconfig.json | 22 - crud-frontend/src/App.tsx | 2 - crud-frontend/src/contexts/AuthContext.tsx | 7 - 10 files changed, 1 insertion(+), 2780 deletions(-) delete mode 100644 crud-backend/.gitignore delete mode 100644 crud-backend/package-lock.json delete mode 100644 crud-backend/package.json delete mode 100644 crud-backend/src/credentials.json delete mode 100644 crud-backend/src/index.tsx delete mode 100644 crud-backend/src/oauth2.keys.json delete mode 100644 crud-backend/tsconfig.json diff --git a/README.md b/README.md index c0c3693..e1af99e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # CRUD Database App -This code runs the CRUD Database application for volunteers to interact with, input, and update datbase information relating to the Parking Lot Map and Parking Reform Map. +This code runs the CRUD Database application for volunteers to interact with, input, and update database information relating to the Parking Lot Map and Parking Reform Map. This project utilizes React, Typescript, and Parcel. diff --git a/crud-backend/.gitignore b/crud-backend/.gitignore deleted file mode 100644 index 3f9a617..0000000 --- a/crud-backend/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz -*.swp - -pids -logs -results -tmp - -# Build -public/css/main.css - -# Coverage reports -coverage - -# API keys and secrets -.env -./credentials.json -./oauth2.keys.json - -# Dependency directory -node_modules -bower_components - -# Editors -.idea -*.iml - -# OS metadata -.DS_Store -Thumbs.db - -# Ignore built ts files -dist/**/* - -# ignore yarn.lock -yarn.lock \ No newline at end of file diff --git a/crud-backend/package-lock.json b/crud-backend/package-lock.json deleted file mode 100644 index 8803157..0000000 --- a/crud-backend/package-lock.json +++ /dev/null @@ -1,2578 +0,0 @@ -{ - "name": "crud-backend", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "crud-backend", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@google-cloud/local-auth": "^2.1.0", - "@supabase/supabase-js": "^2.39.0", - "axios": "^1.6.2", - "cors": "^2.8.5", - "dotenv": "^16.3.1", - "express": "^4.18.2", - "google-auth-library": "^9.2.0", - "googleapis": "^105.0.0", - "nodemon": "^3.0.1" - }, - "devDependencies": { - "@types/cors": "^2.8.16", - "@types/express": "^4.17.21", - "ts-node-dev": "^2.0.0", - "typescript": "^5.2.2" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/local-auth": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@google-cloud/local-auth/-/local-auth-2.1.0.tgz", - "integrity": "sha512-ymZ1XuyKcRcro0aiMYz3hVGbZ+QZmN5V1Eyjvw2k1xqq76PwmDer0DIPxdxkLzfW9Inr8+g+MS9t9fZ7dOlTOQ==", - "dependencies": { - "arrify": "^2.0.1", - "google-auth-library": "^8.0.2", - "open": "^7.0.3", - "server-destroy": "^1.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/local-auth/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/local-auth/node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/local-auth/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.5.tgz", - "integrity": "sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw==", - "dependencies": { - "@supabase/node-fetch": "^2.6.14" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.57.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.57.0.tgz", - "integrity": "sha512-/CcAW40aPKgp9/w9WgXVUQFg1AOdvFR687ONOMjASPBuC6FsNbKlcXp4pc+rwKNtxyxDkBbR+x7zj/8g00r/Og==", - "dependencies": { - "@supabase/node-fetch": "^2.6.14" - } - }, - "node_modules/@supabase/node-fetch": { - "version": "2.6.15", - "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", - "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.9.0.tgz", - "integrity": "sha512-axP6cU69jDrLbfihJKQ6vU27tklD0gzb9idkMN363MtTXeJVt5DQNT3JnJ58JVNBdL74hgm26rAsFNvHk+tnSw==", - "dependencies": { - "@supabase/node-fetch": "^2.6.14" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.8.4.tgz", - "integrity": "sha512-5C9slLTGikHnYmAnIBOaPogAgbcNY68vnIyE6GpqIKjHElVb6LIi4clwNcjHSj4z6szuvvzj8T/+ePEgGEGekw==", - "dependencies": { - "@supabase/node-fetch": "^2.6.14", - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz", - "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==", - "dependencies": { - "@supabase/node-fetch": "^2.6.14" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.39.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.39.0.tgz", - "integrity": "sha512-cYfnwWRW5rYBbPT/BNIejtRT9ULdD9PnIExQV28PZpqcqm3PLwS4f3pY7WGB01Da63VYdvktZPKuYvreqsj/Zg==", - "dependencies": { - "@supabase/functions-js": "^2.1.5", - "@supabase/gotrue-js": "^2.56.0", - "@supabase/node-fetch": "^2.6.14", - "@supabase/postgrest-js": "^1.8.6", - "@supabase/realtime-js": "^2.8.4", - "@supabase/storage-js": "^2.5.4" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.16", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.16.tgz", - "integrity": "sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/phoenix": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", - "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" - }, - "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", - "dev": true - }, - "node_modules/@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", - "dev": true - }, - "node_modules/@types/websocket": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz", - "integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/dynamic-dedupe": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", - "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", - "dev": true, - "dependencies": { - "xtend": "^4.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gaxios": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", - "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/gcp-metadata": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", - "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", - "dependencies": { - "gaxios": "^6.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/gcp-metadata/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/gcp-metadata/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/gcp-metadata/node_modules/gaxios": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", - "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/gcp-metadata/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/gcp-metadata/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/google-auth-library": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.2.0.tgz", - "integrity": "sha512-1oV3p0JhNEhVbj26eF3FAJcv9MXXQt4S0wcvKZaDbl4oHq5V3UJoSbsGZGQNcjoCdhW4kDSwOs11wLlHog3fgQ==", - "dependencies": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^6.0.0", - "gcp-metadata": "^6.0.0", - "gtoken": "^7.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/google-auth-library/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/google-auth-library/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/google-auth-library/node_modules/gaxios": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", - "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/google-auth-library/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/google-auth-library/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis": { - "version": "105.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-105.0.0.tgz", - "integrity": "sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==", - "dependencies": { - "google-auth-library": "^8.0.2", - "googleapis-common": "^6.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis-common": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.4.tgz", - "integrity": "sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA==", - "dependencies": { - "extend": "^3.0.2", - "gaxios": "^5.0.1", - "google-auth-library": "^8.0.2", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis-common/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis-common/node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis-common/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis/node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gtoken": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", - "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", - "dependencies": { - "gaxios": "^6.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/gtoken/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/gtoken/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/gtoken/node_modules/gaxios": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", - "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/gtoken/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/gtoken/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", - "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", - "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.1", - "dynamic-dedupe": "^0.3.0", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "resolve": "^1.0.0", - "rimraf": "^2.6.1", - "source-map-support": "^0.5.12", - "tree-kill": "^1.2.2", - "ts-node": "^10.4.0", - "tsconfig": "^7.0.0" - }, - "bin": { - "ts-node-dev": "lib/bin.js", - "tsnd": "lib/bin.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "peerDependencies": { - "node-notifier": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "dev": true, - "dependencies": { - "@types/strip-bom": "^3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - } -} diff --git a/crud-backend/package.json b/crud-backend/package.json deleted file mode 100644 index 8c9b065..0000000 --- a/crud-backend/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "crud-backend", - "version": "1.0.0", - "description": "Backend for Parking Reform Network CRUD project", - "main": "src/index.ts", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "clean": "rm -rf dist", - "build": "npm run clean && tsc", - "start": "node dist/index.js", - "dev": "nodemon" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@google-cloud/local-auth": "^2.1.0", - "@supabase/supabase-js": "^2.39.0", - "axios": "^1.6.2", - "cors": "^2.8.5", - "dotenv": "^16.3.1", - "express": "^4.18.2", - "google-auth-library": "^9.2.0", - "googleapis": "^105.0.0", - "nodemon": "^3.0.1" - }, - "devDependencies": { - "@types/cors": "^2.8.16", - "@types/express": "^4.17.21", - "ts-node-dev": "^2.0.0", - "typescript": "^5.2.2" - } -} diff --git a/crud-backend/src/credentials.json b/crud-backend/src/credentials.json deleted file mode 100644 index 3dc60c7..0000000 --- a/crud-backend/src/credentials.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "web": { - "client_id": "757897629512-3ltcl0q206uancd3h7jbi63aaj3levud.apps.googleusercontent.com", - "project_id": "crud-database-403800", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_secret": "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", - "redirect_uris": [ - "http://localhost:1234/oauth2callback" - ], - "javascript_origins": [ - "http://localhost:8000", - "http://localhost" - ] - } -} \ No newline at end of file diff --git a/crud-backend/src/index.tsx b/crud-backend/src/index.tsx deleted file mode 100644 index 773e5e4..0000000 --- a/crud-backend/src/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import express, { Express, Request, Response, Application } from 'express';`` -// const express = require("express"); -import dotenv from 'dotenv'; -// const dotenv = require("dotenv"); -import { createClient } from '@supabase/supabase-js'; -// const createClient = require("@supabase/supabase-js") -// const cors = require("cors"); -import cors from "cors"; - - -// for env file -dotenv.config(); - -const supabaseUrl = process.env.SUPABASE_URL ?? ''; -const supabasePublicAnonKey = process.env.SUPABASE_PUBLIC_ANON_KEY ?? ''; - -console.log(supabaseUrl); - -const supabase = createClient(supabaseUrl, supabasePublicAnonKey, { - auth: { - autoRefreshToken: false, - persistSession: true, - detectSessionInUrl: false - } -}); - -const app = express(); -const port = process.env.PORT || 8000; -app.use(cors()); - -app.use(express.json()); - -app.post('/auth/google', async(req: Request, res: Response) => { - console.log("Hello"); - const { access_token } = req.body; - console.log(req.body); - - try { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'google', - options: { - queryParams: { - access_type: 'offline', - prompt: 'consent' - }, - }, - }); - - console.log(data); - res.status(200).json({ success: true, message: "Login successful" }); - } catch(error) { - console.error("Error: ", error); - } -}) - -app.listen(8000, () => { - console.group(`Server is running on http://localhost:${port}`); -}) - - diff --git a/crud-backend/src/oauth2.keys.json b/crud-backend/src/oauth2.keys.json deleted file mode 100644 index d9ce31f..0000000 --- a/crud-backend/src/oauth2.keys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "web": { - "client_id": "757897629512-3ltcl0q206uancd3h7jbi63aaj3levud.apps.googleusercontent.com", - "project_id": "crud-database-403800", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_secret": "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", - "redirect_uris": [ - "http://localhost:8000/oauth2callback" - ], - "javascript_origins": [ - "http://localhost:8000", - "http://localhost" - ] - } -} \ No newline at end of file diff --git a/crud-backend/tsconfig.json b/crud-backend/tsconfig.json deleted file mode 100644 index b70c06d..0000000 --- a/crud-backend/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - - /* Interop Constraints */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - - /* Completeness */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ - - "moduleResolution": "node" - } -} diff --git a/crud-frontend/src/App.tsx b/crud-frontend/src/App.tsx index faefc7d..af3ac3a 100644 --- a/crud-frontend/src/App.tsx +++ b/crud-frontend/src/App.tsx @@ -4,8 +4,6 @@ import LoggedIn from "./pages/loggedIn/loggedIn"; import HomePage from "./pages/home/home" import { AuthProvider } from "./contexts/AuthContext"; -// const HomePage = lazy(() => import("./pages/home/home")); - const AppRoutes: FC = () => { return ( diff --git a/crud-frontend/src/contexts/AuthContext.tsx b/crud-frontend/src/contexts/AuthContext.tsx index c6c1b0e..25ac97c 100644 --- a/crud-frontend/src/contexts/AuthContext.tsx +++ b/crud-frontend/src/contexts/AuthContext.tsx @@ -50,13 +50,6 @@ export const AuthProvider: React.FC<{ children: ReactNode }> = ({children}) => { }; fetchSession(); - - // // fetch the current session - // const currentSession = supabase.auth.getSession(); - // if(currentSession) { - // setSession(currentSession); - // // setUser(currentSession.) - // } return () => { if(sessionListener.data.subscription) {