From bd916e68cb830f6c84aa39468f9229771b71b63a Mon Sep 17 00:00:00 2001 From: Yiming <104139426+ymc9@users.noreply.github.com> Date: Sat, 28 Jan 2023 19:02:41 +0800 Subject: [PATCH] chore: remove docs and bump version (#189) --- docs/.gitignore | 1 - docs/.nojekyll | 0 docs/8cd31ff7afe74424abbec00b65f04ae8.txt | 1 - docs/README.md | 28 - docs/_coverpage.md | 12 - docs/_media/banner.png | Bin 33040 -> 0 bytes docs/_media/cli-shot.png | Bin 156029 -> 0 bytes docs/_media/logo.png | Bin 23566 -> 0 bytes docs/_media/starter-shot.png | Bin 89412 -> 0 bytes docs/_navbar.md | 1 - docs/_sidebar.md | 38 - docs/building-your-app.md | 146 - docs/choosing-a-database.md | 11 - docs/cli-commands.md | 131 - docs/code-generation.md | 15 - docs/entity-types-server.md | 84 - docs/entity-types.md | 84 - docs/evolving-model-with-migration.md | 65 - docs/index.html | 75 - docs/integrating-authentication.md | 228 -- docs/modeling-your-app.md | 168 -- docs/package-lock.json | 3029 --------------------- docs/package.json | 30 - docs/quick-start.md | 134 - docs/reach-out.md | 9 - docs/robots.txt | 2 - docs/runtime-api.md | 224 -- docs/script/sitemap.js | 21 - docs/script/ssg.js | 34 - docs/server-side-rendering.md | 26 - docs/setup-logging.md | 92 - docs/sitemap.js | 20 - docs/telemetry.md | 21 - docs/vercel.json | 13 - docs/vscode-extension.md | 5 - docs/zmodel-access-policy.md | 203 -- docs/zmodel-attribute.md | 480 ---- docs/zmodel-data-model.md | 35 - docs/zmodel-data-source.md | 80 - docs/zmodel-enum.md | 30 - docs/zmodel-field-constraint.md | 71 - docs/zmodel-field.md | 66 - docs/zmodel-overview.md | 13 - docs/zmodel-referential-action.md | 68 - docs/zmodel-relation.md | 88 - package.json | 2 +- packages/language/README.md | 6 +- packages/language/package.json | 2 +- packages/next/package.json | 2 +- packages/plugins/react/README.md | 2 + packages/plugins/react/package.json | 2 +- packages/plugins/trpc/README.md | 4 +- packages/plugins/trpc/package.json | 2 +- packages/runtime/package.json | 2 +- packages/schema/package.json | 2 +- packages/sdk/README.md | 6 +- packages/sdk/package.json | 2 +- 57 files changed, 23 insertions(+), 5893 deletions(-) delete mode 100644 docs/.gitignore delete mode 100644 docs/.nojekyll delete mode 100644 docs/8cd31ff7afe74424abbec00b65f04ae8.txt delete mode 100644 docs/README.md delete mode 100644 docs/_coverpage.md delete mode 100644 docs/_media/banner.png delete mode 100644 docs/_media/cli-shot.png delete mode 100644 docs/_media/logo.png delete mode 100644 docs/_media/starter-shot.png delete mode 100644 docs/_navbar.md delete mode 100644 docs/_sidebar.md delete mode 100644 docs/building-your-app.md delete mode 100644 docs/choosing-a-database.md delete mode 100644 docs/cli-commands.md delete mode 100644 docs/code-generation.md delete mode 100644 docs/entity-types-server.md delete mode 100644 docs/entity-types.md delete mode 100644 docs/evolving-model-with-migration.md delete mode 100644 docs/index.html delete mode 100644 docs/integrating-authentication.md delete mode 100644 docs/modeling-your-app.md delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/quick-start.md delete mode 100644 docs/reach-out.md delete mode 100644 docs/robots.txt delete mode 100644 docs/runtime-api.md delete mode 100644 docs/script/sitemap.js delete mode 100644 docs/script/ssg.js delete mode 100644 docs/server-side-rendering.md delete mode 100644 docs/setup-logging.md delete mode 100644 docs/sitemap.js delete mode 100644 docs/telemetry.md delete mode 100644 docs/vercel.json delete mode 100644 docs/vscode-extension.md delete mode 100644 docs/zmodel-access-policy.md delete mode 100644 docs/zmodel-attribute.md delete mode 100644 docs/zmodel-data-model.md delete mode 100644 docs/zmodel-data-source.md delete mode 100644 docs/zmodel-enum.md delete mode 100644 docs/zmodel-field-constraint.md delete mode 100644 docs/zmodel-field.md delete mode 100644 docs/zmodel-overview.md delete mode 100644 docs/zmodel-referential-action.md delete mode 100644 docs/zmodel-relation.md diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 1d3de1ab4..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -sitemap.xml diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/8cd31ff7afe74424abbec00b65f04ae8.txt b/docs/8cd31ff7afe74424abbec00b65f04ae8.txt deleted file mode 100644 index 4c8237722..000000000 --- a/docs/8cd31ff7afe74424abbec00b65f04ae8.txt +++ /dev/null @@ -1 +0,0 @@ -8cd31ff7afe74424abbec00b65f04ae8 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 50e6e9cc5..000000000 --- a/docs/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ZenStack - -> A toolkit for building secure CRUD apps with Next.js. - -## What it is - -ZenStack is a schema-first toolkit for defining data models, relations and access policies. It generates database schema, backend CRUD services and frontend React hooks for you automatically from the model. Our goal is to let you save time writing boilerplate code and focus on building real features! - -_NOTE_: ZenStack is built above [Prisma ORM](https://www.prisma.io/) - the greatest ORM solution for Typescript. It extends Prisma's power from database handling to full-stack development. - -See the [Quick start](quick-start.md) guide for more details. - -## Features - -- Intuitive data & authorization modeling language -- Generating RESTful CRUD services and React hooks -- End-to-end type safety -- Support for [all major relational databases](zmodel-data-source.md#supported-databases) -- Integration with authentication libraries (like [NextAuth](https://next-auth.js.org/ ':target=_blank')) -- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=zenstack.zenstack ':target=_blank') for model authoring - -## Examples - -Check out the [Collaborative Todo App](https://zenstack-todo.vercel.app/ ':target=_blank') for a running example. You can find the source code [here](https://github.com/zenstackhq/todo-demo-sqlite ':target=_blank'). - -## Community - -Join our [discord server](https://go.zenstack.dev/chat ':target=_blank') for chat and updates! diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index 539dc966a..000000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,12 +0,0 @@ -![cover-logo](_media/logo.png) - -# ZenStack 0.4.0 - -> A toolkit for building secure CRUD apps with Next.js + Typescript. - -- Full-stack toolkit made for front-end developers -- Intuitive and flexible data modeling -- No more boilerplate CRUD code - -[GitHub](https://github.com/zenstackhq/zenstack/) -[Get Started](#zenstack) diff --git a/docs/_media/banner.png b/docs/_media/banner.png deleted file mode 100644 index b2074d34e6ec7cdbec122eb1d8eead3e182b1f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33040 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νSO<@ip0OQ66_uoD{O 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 z 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 G|Nj6F5~m0N diff --git a/docs/_media/logo.png b/docs/_media/logo.png deleted file mode 100644 index 7358d53b67caed1c6a1d7b76eb588d38840c632d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23566 zcmb??WmBBb6YXM)JAn)EZEooA-2yXW-jGtnwa( JC;$KeT~g!P9&j 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 diff --git a/docs/_media/starter-shot.png b/docs/_media/starter-shot.png deleted file mode 100644 index d6531d8b1ee99fc801c2a66b689ba432e3c1ed4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89412 zcma%jc|4SD-~JF~sgSKyh)TAml|qe*R6?bwq|qWICS+eOD%rB#?wZOnTGcHk`|h$Y z*-2v``_7DY#w^$MJKfLozVGj!=ehkw`pnFAp67QtzQ=K#6LQJeV3UxH5C((UbpD*) z6%1wrg2C`62&@Nx`CgUr9{k{Oxngh{liIjr0)vsqoYy;b)#LVbk?@lp6wfiwD$JR`R#U+jW}~Cd%-yF zrDkM9W4%{XV};wJI*}XceIJG^BJRm4#qwor_x|JhmW$6m2t++^?#0MhdKX(PN$wYF z?`;o%7$pz6>RoefPqDZL|Fz$r1EJ_r{cLREDU!1&pQVV?bVphM$$%1*$ipX(;Stcq z@QV6l{^PF!VZkNQiU#?iSqV9cR~#q{xluo80?~0;kN&Zjbkf4kkJ|tA7Jq-nHUW8# zjsKsm_xlyRprm#uascUY8H$;eu{{0XAK+h4IDQ&40K*3VdbPE)Hu;Dc)O?Vek&%%X z50N+>oBrz}{=Lc){_|E|US5d@S$37{j*EyKXkMU=eX;z?>*_cbNT)X4D?Rz&w&H*H zYW*3^01isc6P!Lyy1DvN(n9?EwQWPUygwb@^t`^CS-7=#}R zX(@WrVbJYBT2}_i{p#dj%O>fP_(YK$|AO6tXmKT?qlftI;GVBW+~QW0jN``HEHJ%=7hr641IF7fOvBdCx)=0$kGMvN^c2WEEhX3z1 z|M6F_R8gcsAIo9vVHVs))9zJ!O)4fAP+b>ooEF9gy70GdO;6lhk4g>;tmz0@iU%|_ zvK>mb4O{$Ug`$p%B~m0Xnmi>7tkzo? zn<|BPOR@P4a8DskBBU7vX}Uw225>%e;qfe1U45xCW$L5ex-}*Eaj~yv$=y;JSyqV_ zTDm!U{%*>c8{(MseAMMJVsTz4$>PVi*i#|(Cm7wy{qW8-IHs9uJWSK?p{9Dkg@rw@ zsin_0Y?#~8thAICC$(m1uYmugI>?Ot|wnPVu-7d%B0`8dY<>$c7AG+M*i1{nI6xK*;U5T*{UnV)3s+^rYi4v4o2RPw2iTsSSk&B$eE2q4{JEHV0F9lIj| z|GB{aZ^*m-sf)c^9Cw`@h=~`%Xnn>^pPs{+Qy>!sU!u~Nq+%~Ij&>z0$AxL*$_T5W zHnvlZd(1Bv$J@iwEycIVjEa=r6K~?;dRnkYHauI)=ivfkluSmQ#YUWuXGHa;dgzAn zbvY2sC8A!hkIE92uM@@eZoybn43>Jhr4pyM3SxGO5maC`yIXk7XrPI*2@oY@`1 zQW<2Z^l8e3C%lHn*7|TbAk;l=){q#pG<2PZ5=GQt%H63AuVU zeha3N$fU+RCgr|;%V9CtO%COrRDU;kz7tH*>Z( z@~q`C!V+|^B;s5~FH-Dh&D5f%Gb|747M#ZHRIw`H$1E%?q~-QG2>9z%KuvXODZ)d- zrp%_vWt#aSO=^l3ip1|g&bvcb=qBRq7)RvD<&#D|<_BRpF`QwVE`_jT(;A+DN8pKk zvr&af_q9N7rb0j_(kjIB$J8JCm_PUu`7zF$9mRB$`22@KX7r#NHtz`LXZls5CoNI! zy&M}AgN}%Ptme5vuFZo7gJXNP%}~$N2};XhblOROm1U)PZfXs7uuzq*ROw|NEPVQ)&gSn=8g_o^MSkYcqKACymKgjGpcqM9UuSN+a$@d6oYT=C*&u5D#5F~(r_>l zA8Y$<>DFnz?A;RihWbe3Fje~Yoi#m9tAK=1;6-D|9WS{=f{+z;%P)dRt!wz%du<0} z_<5GRPV~(>nljM&dFR3thC=>QJZk&*SFuNCkftk`e$Nx<3*XKfVoyAH7)u<-n!MOf zBex)JZEd5A6K!*OPr{aHdzl575fx@~BI)I5x>tgkoL)DS7nd4|&CED{Gz4#RFn{zBf-QtiNdgu`% zlyx(l{JzDuA{CjNbMo$r=L4G#t4=0`aO_U!e>W7LXG`|7d&wm1G4@)jwe*GnwWoev zufEJE1@hWW#Z3KCiAn9CrU>X(Ah(4vuV26Z?s0oR@t&Ba5GK6}Ef|CshomrzDu~>1 z=Zb_gk*QGU=X*T5QkQXtvB&!G5gq#nVe=NeCDNLt$|~58x}_m8F)?4vk~>|R6qXAP zA}Y)FPhi#QDd)87FY|WmyPN+aD6tCgo7FKj3Vk+qE>4AabA{FbPx^htYOaVTI`rJf z9H$x&LN}fKyZx-KD}{RODlu9|{A2kN%X#jf=lOb7rL;CiDMtcRGuJwZGH6t}`o_kp zoWyuGjGx16&A!K2*#x3)AKDjqFvzaIABBq&%9+|^0$CF4ozKfF_YHbZ_?1+GD$tx)w;_gk|i`qTlTX_?^Ko10(~CGgZ^4*%m>KX_oi4$ zYwHyq9sghid`is~Omo<3AVErTX!jQ6+9EL)qyW_X0cstA)6)mTBO?jUi%LTrOLyo{ z6;*P{k_g|rmyVGKmAOSnc~*(vS8UF5t~kD<&*-^{6y}LN+>6y>pZUKDza8#mG_1+Q#u-p{Z5g6FX~MoLQR zrNnw$4%Et}Dzk8eIkYBP(aA~w>==YZppK4cAwYnckQ5QlWgTtB??le8?)>=;u#d3? z#hBx+?`Pic4t6}sov5E{B0dFH)g`T(*Ca2FaYOCHRR0U@@V}_IRbV$i>S)Jnr;JID z?2haX+OHJGdzDVP>wkZj?v;Lb+*I+bmL|V^3Z}#e6J>oT`Xy@Of+p#sA{RI~Y#BuU z0Q<)#Bt(d>H;y|dhIJ2Rn22+|T~`XCk<{{42sttBj!W)8siX6#3D3T?ilML)LUUPr z`F-t3?O9ZS^c!vN-`|ZC45)I>HiZ zRVzyTh;!bfK<<$=obsZ5?2%}yB*XGxpX9v$4_fsKSyP`aBP%=0;{UuB8tAc|_;m}5 z3`|!D`@Ggn9OB3m&|T%qnsQFMi!s_1r7;tVnOw?OmwhbE`v*UUbwddAYX!S-_TwFX z7iEm-9G+OoCAXmI#)D|v2b3*_M#|wF_wL>6wFNyafX=3LZrv;IRGu${PA(F;=|X7g zIF`L95S^H?b73voc~5`-yhochylCD6J$Z6O3XN$&&J*G7Q`ozHpRc5SDCRivLpfV@ zpL#-#|z*ZC2bRU?vv{&74inN^C~`zyJF zIx(pw$-6t}JT#mCiB8t%$uG7%=pTyY7g>t=Ywz%%Vo|Kcxb|7^qVqWCLC2d#9b3?% zQ1srtduaj?pg%m08*yl(EFwE54P(VFgK!_91Y<~yTRDT3RtFHi4qpM8(@k8M$seh% zjDowcTCzBPbaGsp$5P*~cmLEaC%nF!`7e`Dt}~+0ti-?K#_Nl1^wUFn(bJ=j^{D8Cx>0SPIfh_Z+cI}+>995DX^y0{h2X&fsPf2SSis@n}Fh#`z z`?ik1+B&oAABo5xE_~?%%o|O68!AaXnnu&^-QUUN>c)lpyt?n`VZ_YrK-q+`gSX1=3XW_;I_3S?`FWi_{zf{uby-*|K>wM#6lBD3LqWz-FO{n3YhyS^1mjoKi8{Y9( z9i3X*y_1`NvY`{(eM=LP8lW1jJ7>sy4m7R{7~3&~poD}qL!P(g3k`?hQa?0a`$xMy9$gUNp5=!EfhTu__-8fcSG|$6&VgmS{XbIxM``BpU8Lxc>`L zhQj-g%{ZXiVdA02MFCwohPZETti(0bE!I*+D4qbTVL@?xuA-JR);; zG?k4fx)xi`L5_}%wqpKONK;djMX6tq0-B@5QPPKwJFS*5R80(Rf7ot+L?-)~)srW` zV%|VbOj>u2$#d_5@5YeR3OOakA#_=~1)yB!)YO#IOE{Q2IS(+wQds4Ot8bZhjebtk zVg2OGh!#PKQ|FoQFp^=hFOj5wQF`Fy#Jox9O1@>6$fivWEXOZ`^YMDDVWf522R|HH zdkwr+$*e+@*^VE@#eK^PtzAl#S|q#GY z@{Lme9L=Izj|3dKjE{J0hKah!Z<}>f1_vLkDjegt3*>RU1uv3Gz19;{$>p{RWH?`5 z;HDjWg7qL{+xTP5O+I;2Zw+de-0qA^3PGI{YCF&?-|mwOVwt3%DV*j2I^OcpA&B>J zAmqfVt8A#Re`D;30#wp%tOvafqhmjy!^5AxwLkm~$`NQ7a~%WNGFX)rR)_CFQftV@ zQ22^85!Pde*`|JgCDsGXH^?#xW!gES_b-F~g{Ay)aYK}AtJ!lO$;p^Ozjx)hl&$iU zQ1@l@#tzi(JkK+~v}W8Ic=4!kU8S+&GQlS*IT4$#J7`6Dj_47B`5aEE5-2 zK_Kr;1=lSVa$*-eg$39uNZs6?dAup6VuCcvF{whrx~Y8c)KH=^c z78d5#`|H=A@yXrzTgW7nCN)PTx8e2Cm6eqin*`6%(9fSg&v_LUliMGLuRnDun9swT zd#JYOhEmd0Y7S{6Qgu?B{Z*WL+vfBl#dqn1Rrj$*^w&%+@oZ=?xmu=z{n_DXx%}p{ zq&4tdx+Z*D`LOq-^245oSx<6|eBIA&e%u|BOJKNn5jqppghV@!q&3bCNeI>0%vkXG zu#an9wzwpEfjsA>e#n+p4A?ee)79kmz+`eUtMl8pZ`P9N!eayrz#avT3sXhHhVZ?s zXFCHZf^{1D38C( z1@-*cQceXs$Awkr<-~$!?C}L|4@#P8oM!f<~5$td)`BO{y@6<;Vn9W;dB!TI?3 zC7pY^Ru6|WXl0z|I`Q|P;x+b$M%)VxzbhqBd8l-Wl0sSMd&LuDH+xk5UDn05iqWW? z@h>=dWy!>Z#UM58_Bb=lxc>m_9N4s8N$>A+*}HbB*O^Xdp2*3Fm~E& zhWI~TfUz->$6Oem^Jg$RNpG6u5RS-{(&>*crI=aRG{zm=f?}Oe6+}r99UC2e8H}oM zlJt>eCg};6_J&T9n!}2m(H>ac@gz7HO^?jyZV!JU$*Hcc4i`d4oI9m3!Q=Skc23>? zf{R^jMMcHi8J&yw`)rR4HVx8O8>}_*%hV(ssl;e%db9Ol)@3S<1q4A+9a>!<)EDcXM50X6BpVurR^ogt-93yO9NvrP@H+k%4)_c=Yr?hC2Jo#(c z_n-&+4_&JS-`P9@QX6C9H*$jJ*+k-&h;T~EDYw06(kl>m7lc?h@_V5PM^Jfn0Td@O z&eT$Vd>9@6@x$u=elYHU3UCWm;M5&Cc(A2qh3ftbZTVG997ptj!rfsZGorb40lF}? za*h~kxMY4Vfx199&bun7ajK|WHn-QUm~~8qxvj2<-J`7|LY+D(Qj7Ci7Id^Iuq+el z$xYiTopnyZw z{!wzb`(UuKt!-|L=3YS2$p_+`5>4i0pN?w)~P=C)D;IQ2oi@m0ZX-bTNu`e?iMt?wK;N%3>L{1Z3DqdTCF zmj>?+(MH(|>~pWp7c{ys9^2^}w4b=Hu@{G240MX$UUqe;!Tz!o8|kwea*yvRC?3}8 zNy+ET=3Sn6?zv&ieZ#iRyK%24PJ9+f(kWT@Vsn2XW?{YYA3HcETpvin*`-Z;H$yE9ExC4puC?dl=YO1%vZc`xES4nehsx91z)zkjdGhXUxA{#_X} z$)qS?#L(UvD1-@mw#GcJVF_!#w+sgA)e!#o`C+sq5OTjb12BvOD`Br9GVQ6|`ZFtLTR&8q=nARPEq6Nkg)XJ;?7sH_Gm zi}aT_);mC;!OVw3lJWZT+aD{Zp~E!$nG*>7M1t9adj6MwWIJ$woY&FNUEKI0@|Km) z&SNDi=pFnHw6z~z+0gZwHRRBYW&A)5U(H$}lNxVsmuo7B^SLFId}jG=6`1&iJ@|a# zUW3JE|4vbr>qZreBlg)HXqBu_HHhMT(qe?ID)5p6Z~<+=!q#5yAd^8 zX)=c_Z)!0b+_@D62yI|sz~rKlk-BEAk<(oDEc$62TZy@$h!S7Fo}M7qS*x;|8X9ge zU@*#3U@gR&)Y;joZen(5{%=-!yQcp6;?Oxtn)CoQe1#YTptdU;kTBWb+VFr)oWY8r z=|=Yuz$N)OvE0L$Ldli|Gs8?w@1RxlaiSa43&-3Yq+8qEbj8M`!*Ry9r%;}qT zM@640M9Gxb8hTvH{Rp}7Ja+V7*+ty`b1|X|Gb+{??w!Bi*=}9q(xkiYv4$ld7w`0J zwLY^6#_jGdu}kjdnnUrShusmd!}G4vXf=vrF?QI=>zXmzBVCUA$v%BJp= zL@Yt$(lKHJ8r9jk_1D9!i;k#Q(QM?)m**_Bi8Y{J0LGyLL@#k=C=!R5;5Y*!=&vkn z?(znG7jtee(x^Ce^0~geMm9B41=B+f`hHbzV(IcZ=sT5A$Q!S~n|G<(rm(HbrFIT` z0`X$3c)q1-Cy$r{{@|Rv)@&qEo!>RLeB)-V)O| zO2dGAaN)VurohwwIcFl=pHf?#pXX&IXM0>ua2{?v6Q@}J$Z~E=V^xTmXl{ofoz*+1 zT|ec1phojZ&n2|U5ao`Vn)oiM6Flq4a#~NuvHHW5H|X6o+jtZp`Vr^6Jz!u#0QUN0 zi|DT@S8Y&6RbO3rJU?99u|(R-5mpc9n9rew0;tTwD%tdA`vMuHIj4ON{IK(0p1uM3 z`1E}L{@vr%g-VN?H|LKI;_o3x2dUvK=~Da-L;*3Zhc9kfLOYxMmRUh^e$4TNhf6={ z50VeSVs=*MwN=f(34sV*_-pu4RCg!)a_li>-8iK9;Hf%3zdwZ%n+Q+p>05U|=JPa$ zWrawiUu~M)KhJzxTYj|8ViqZ2`XErBv>6%Txs&F&UEsl4M`!U{FrPrfU=lS{ILS;r zfSXx28-!3{Vc`d~z9RKJc~@>-x&XR`fvwxJLVC$2E&&ueglw2)nh2o^tUAFg7j|9t z3GZc(-W~+J6e|^$Rsi(c)FJ$HPyqGm(gQ%wXn<+OY)9^(G`v_BSa#|1RqlaQygqX2 zZPwJ_mDo)qxQ9DWTzX%vu#x}VuaV~~=pF4DZ5dkuJ(LMBJ7_Rwqf990f5B*wNSnHWBTXG|3l%K^L|2zPzvDpU1y zBt0I4^VG6*5STd*)u!ul!ss9mZeZ(fVjfd{8NJA7tnZ4set*thA2IG8yf8dyaX|e^MsawLXZMg5&9APQE^3 zSm1CRX?wm(r<(xE(*GEuoyP^U;^%N`;|wj76W@aFkj}k?^%&j3PzcNYZ&bj^$~tN?n%a#Y;uhp_ z^_kMus5H#1#JBeQwlm9v(dH>^%xj)UYR{X3!&K=IK6* zNH2YN_a8F2XP~F+CJqwyQ|yMI@f_*pwU{aY;46E{2v6%-_$7y*3pMA&O))`=-bLGP zp)zb*K0={TKKshMH~~(COVW04{3~gY2VD#vb6)0Wwc4qt#?IBWV_|Nhi zCP4Uw|INY_m4pn04c527_;ehxq`(5meBO1nuBVug6?aP@@K!(}9O*fHD5fVDIz9s! z(rq$UhCT2jdnJw>&abEMSxAVW_XKcMIm!6<#T9=*yaDPM#rGn>%_2Sk$9LnO0}*9Z zI;>KC5WcqJix=YKoPOUQ(o8NxySi@P!ie&fHjm-Z6?5MKVY~-iRCB32@*=9xXSnm+ zKD1iog}{=VTJX6sg1!?bTW|M)1i8IDj}q>l*VcKlXsaC|^Uym2)?Q(-SSTj%8 zP=zr88hq z`)Jk6+`gWB>?y8sUGVR(_P8x`N853~7c@ii?{xbA5(pk7pTTsz=e_@``}GiLd)(r4 zIa0xk-Qw(1Yp{Xr5Ae9U%rj0V`;4ekz3bF-d~Wk0r{6a_3uA6kV6}qFfc3+^y6~He z-%qqqK-@#wO@IVB3XTvgVwx%PXxaA|pf}WR12=l_ZqHRmJ4@{{Agun~O1upX4YL6& zHMmTQi#r06`9oMN$nhaAW2RflX}#agdU*Q^ZNE}4s6hqMe`DGdlanifjLHO`sTvUn z)GU>_=*KQq-VnVHYDZI|ur}NBnKPn1QsF)V>|j*x(W3O`^`hZwVj7!b)*k~vgi2FA z;@7#@&9kQUPw+i`e4TM>oJ=X2e?=<-6NBufoYfL*l8;yhK?T;~Y#?i=9JXoP>cm|w zlFD*&a)fvt&sN(Wba3!P(QYR$aO30N#K&h*W`$6pdv0!Srp86vSD@jVXpdM*G9BOr z+1*A=B2Yk(&*9q_{x(T#P38q(I zUz8PpEH)@BvXKkER7|vc=Kqytd=_?0^F7uAq(6e3+O{q7GJEB<&R(}J0pJOgsW11r zjJ4s3x4LD%@gEWIURN?F(1K9Z4$g^bK0sCH6Mc{WfE?w~jYlT|=?nTMkw|nH2K0^) zhzfuYR{%U#6?R1c9Z7AN0bJwmVrnP=yyhyB+R~R-Az<4Zh|-I_yxM&CqhE_GiBH&d zW2?)0t(4#~cwOMGVh4`1`zicLSrI?Rusd3VQnx zQn`ek(w_!%zS$zEPtVZ{pSL^#cwq>CXF8V-EX>x{O_^`dhglDE;!k-028W(Ahk$PK z9Cd3!K*v-;K*l~tgJiwN!GezY{ff9{6)CgTX{Gy(-}WI`tX6I_Prt(_qB?d!vj-rOj9QhU%j@+0ptWd8_h&Nc1xjfW@B z!|`hw*W^XT>3Tskha4QmRC0S6heltN2SxURx$RpS^gDM|briF?H=KjgYeQIL%z`K=NAqmK%n7s2OWs@8 zfRjo-pVhtE_uce}g3s^KQTnDJXzsTK!S~!C=i0bQqjhW*x9*k#>Z&3kbjmre#g-48 znIojUUbGrk<&Z!P{CQXC2h@y(J)e7BMhAa^HXFX8A7fk5pTm2-tAN#&5%JnFrsbCvymETD6hY zrH4HOxOzhna-@pmfM zenodWaSF;%fE8D#)uDfl=Am?275FRg7WCdldU^dn^^-|*zKbofa-PG{q@2jYQF`6e zV=JGhbxAJ{bmERITeSI&_Y-$vbZ|Rlbqg+;pra?n@hY)&xvhBCfq-rAynk-wF5zVs zmf)j(wVvW}C&Xuq-ARIblU{lbxX1oxa826^SzQ4;;O-@FL)3~>N#07E#&2))=z7yW zRwgWy*Yl?J=$9-8bfA=J_%d%=`?QW%-ods;3U!8AmLrZPy+%uYW~R*>s5&_Ngxf2x zkLS5{xg9@VNWEoR_|u1G-8Ne34K?4gSc#zPZQ0@K~h_H62a{RW3%49Pndr3j7td<@iwl1xmuG}GlBq*MiV}PSOJ8om4323PG&)qJ?Mm*1 zDQ{XXRKAIRT5;g{SWdBH{lhjj%EQsc8~1J!sdt{*Q*Cb&E$y39x|iIw{WKAmtfYD+ zW4~6P2LocJ+vN^^e0BNo5uHbzan8-DsRzCe4QiCvM%H)Q3mtmBHH?0P8M=itIRM#RHg}t`%UKQW3>s2k>{15#1}8A3#J3nU_BG zH!J}(06-!v;KS*(1&*S;J%jk)Vc_x&9L#p)@mF0|3PcTLJ@uZWjE?VqxGgM)OxWh8 z!l3Fl3% z>uPNd$b=?(j(%TRzEJLg`~EH5^Cqo`{pj>F zIhB)upm*wp`WsVbc5k9>26O~`a8mk9Eig+$1k->u~~^*Y7oSV8mk zkD9c4J=%=qa_6eH7YLy$%(`28kn5@neT}*5`_bdz@pwWAKn;)>3OWk78v%H=PX|g8 z#s>%QCW8KSjVYZ2$6Zny0EVDiU?wEJG;cOzN|&zU+fd}tw|+P~`++d#eo;QMyU6P8sMT;oXTLcDS-b9O;wfC!^b2w~3b7|7yq!Y3F03y3UL)okk^?=C#f1DC%QCa9ttCj!8*3L{D1O+biMa`VQN8JWZfMzcqE! zEw{hsy8RPK)ht)E_#ZF8-_BfJy%OOK`7;ejdVlzr%sxxqCKwf~qy+aNqCimu?0BbJLXUmYat;N+$2pBDvD0@o@(p*dFtF zq#^jbwz^5II}2mw+n^S&V=YBxlItgN@W~yg<%i~mm>k`veffWlvx1CI-d%>+V+{$a zUtVrg(MuZJh7EoZa!%-X^thZyvGx6=r7y=B(}l-`&&>;zwEBpz?yQF)ocU z(rKT64z9j~`)8W*)F-4^)6xzW_*q>>pNS$Vt#U@d zznZ%0(JzB7F#T0r0J`pJo?L7`gR{4GxyCKm-Ya}gn?Y;`aXj-*EZng}P?oPCL& zEri`9&(giW&}WXDGCwPh_9Hdt;fY;cTOV50NjD`JT*V}s*nM;yH703H;oR$wkPB6` za>j3scnzxgCKq%M*=OoLd9i#z!DDKPodwU)@)r*h!S^@xPIbBnamOT?!e%sKdP zu}SdA+ffFZAb6JC_=FR#_3jBmeOUiC2bs~nI5QclOjNPZgDgCv5Ak0<^;8w1Y(Hx1 z`Q?EhkfgGYU((8*VME`F)behxVW+?H<)4qWXeIjiU|^6k1>Ce9dA97qWuUD3m{DK=fu;fGi&33c`iKBl(2hYb z7ojrypNSy#zc*azLANx?NxEN`_Ojxo<}6&=XCCA|Zk^-kE=fsQzzMDYq2RN11<#6v z?f1e+&I1qB<7;X4E5+1tYSkRDx1PB7+Zg*M2Fr3ZMe%-WZF56YFPmH!UP&V`^}vRw z8|rJ2gWi5u)U4tWR>NbWtNBFTLb*vQleR6x%c~`h?s(K5Wh!Mo+U1yY`EAs)*10iM z+r+oo=Ls`x)Op*}#F0*02;|~8Rp_S1GBtj8AC=(~BY}p?y&01-j@3*lDl6pj(=Np6 zVHto;z9B-0^b;vv!yKH;C-_`&rW0F8JjLUfxAYsIH}NG_LvU5!DT5A8;=yP!4QRcMIV3tV5Uy4r7a zyqc8tIsc9kS{2*A9?)^`fad+_l9efs?iD&E7c~Ir^Th^PpMIOuns63et$3p22wJlw zcb@(JUf(49z2V6}-(1_hd2AqYd7#)0{yNi~Gg?niW4w7roqKv|AGq0J?ui$qGx zn#ult{gxd>c$cLpcVNmqB)OP7w^W)vCVNykXpca-aA8;5gJCR^b(|TwKk_cEI~cJW zqnzas7v8dIO>f)fnDE6*c~uE+1w-yb=tZvG!fTkzc(52~z8#+09|W@*4eg)pS%qjPerv47mn8AU?(J)$ly(Iim^m?Y|3q(RR>5jKn>*$X zyfC;n?jDca#3VjNfzK294&B3h zOp%n(^Pw{BU8u}Axue12>t5P~iunA#sKfCzO^AEag9s);1!IJmZk&#VD#yF(7jUvS z^)9Nk7m`)c_FI0HlD}ujW)Nipw56rwxV=dC zf;a`uXnIH5j~Fg=)lv+OX#CVk??GRZ!_*tRygC=XMb|QR?K!7wVAA9@QS?i&$F17| z);fH6;j8UJDwDc@lFHz^iZOxr!+a5_U7ISnAVEG~i9Q`*1@3y;0#o);;A=YjH05CX z!=vM)O!wm#O-!o)%5+~GZ#g$`bg#((3Os)ZlbIVGj2;;PTs$xm3!@6-Nu7#)Os>+@EeV~ykiP`)3d{(Rqv>@TJ;=9IR3j39Xp$;RIXt>D)&S1M)SF#Up5f@ip}+i?kyF0a zw&<)!xFWQ0d*SI%%FDb*Ph2YCDt7ng!7-bK^A~vhE2SzCz_d1DW0M|YHIk|9;)rUI zrY|Q@2HJahVYm-I{P82P(h*hr04La9;SjwQG#_}bc)Ij<(hkwMsULSnQs)pG-+RrQ z*I>Zis>9Qw?)^rutwF2TkL>_^G3f))IX z^L?4`BOTgcaQ3CLl;QwT9#W@pj|x1UWe=Tj)M325apRy%a`KmDgc@A8sWpQ9d7~LU za)0v|Nj-hxN;22NWoG#4LB+~TKwyF|{$7!bzpONXf2Vghzeoso-_Fdu-c+f&VKNML z@#xT~rj&|z&7skqaz{<%ZXNy{J-BxO2QGkEjVd*!eg4L0HYQDkJmju13ExxS*pI$w zkn?Mjdmbowq7VI!^}k=XH&z;bzw}GL zlmoadN9`qtX3ivdCfH@a`@&?{)SsX-(hx8YVFQeeynR5uSQ|NIAm4g6WBbbCWYoRK zshSLI{yMLvmcY&XnN_ocWe!lg0Lr_HStVlt($0wn(HzEvRi6VHQ{LDQXyueu`}isf z&jBWWI+mZu-rn8~%vK7^KuZ93l;vb(WVQ?duANrIaKTw0^~);O_CuM%R>Hg=_TIj_ zRn*}s#pew}PL<|n&pCMD%Y1~~wy$(NP{zvVTm}4p7+vp>=ijXE#HhQ(w@wO~!m=}W z+9vkS70kg?g!Sqi$mgTHqU_`;f-{>b z*4Nixf4XXsBS}k3&#a2Jz$uenw`Bo%wSd{^TJkllGAFqWpyM_2%APGf%Y|taZCR=jZ`9Rwc~-~A4wRR?X{8`z z0cW}7LMAS-|M}&gVB^phRHNf7ieoCla#DL2z0iyz)$HuaIqNpsoeq(Iu6ab+09m8l z6Q5kEPGdXalc2}s3UL*XWHw}L`}Nyh_z~p}xQYmRdVHN*$jWN7`PbFhwAvMN1ZecY z9`_Vn)V&9&ZX&x&c@kyL4K4pRxp=WcchzoaO#@d?w%jEo0k>Q(MqyQ6Lctd$S?fGa z2!zC#=4NJtwt&l$js_#1%5)Vz{18x!i zDu$0m@EwEQ^b;9{oWi`>Y4^8`!hUI1KFTfL?fp$=a*fq6T32)8XzeHBGP!u6(Wnd- zV9Lyq!Bl_kE^5z zPDT0-HJoAo9(Np6d_XiWP#L}~ie~UzcozR3d++_$)V8&Of`W(z?1%_hKtvG~1f&MV zMi*&P1T26`lP)C$Y^YS}MF@&g1(Yf^fYM8pDmC;LLTDj9>&~Tn-*dlv{JyjQfb$!V zk1NTVbIeiR_Z?$?c8%K|K5z`Q`86v%n=wLocfKiKwl%1j>Uh{jpWGveTAiO&bhvQ- z(cZ5(+S3GOI^EXY^@wst>~62oS5W8ceQZB(zsM9ie+flb`1G#az0z+bTA_@bYfH$k zNH+NC!-#P5WuaB5;;Z)dzmuzmqRJ)4!rSs-NaF`?@%YRP*L0a3T9zopikt3<${%iE zV)j_YS;+inshQ-p4OPdf#<$z6zb1QC)8u(T;r1w}=T$PG#{kBV%xW$Zpi8yp&E^AS zf(f`m&>h_bd4>V|1TCGIssNaxp$2Z`TJReTgZQduFD31nwR{G+xFeh!{DJ3`2an~z z9nmf;csl^#ezro0!5xn%VilUHVL$8jj`p=tX3tyoQjEmYGfQv32yK~u`$#yK4_8SL z^E>VErfM6zHFGUc{7t+}JsEmjMpLrfQ9f=k%n~0*CC)nQNx4rTR>`=tCoxOGw#=Fy z!Ej;ANZ*b`;T`FM+j`Jv>M@MI>3KfOoq)|NXAwm2Z%`X=JvkG%g9-BSg%oPT{Voa% zx@#6=uPB5Ofb8b6@u=0%(!}}Tyfa58gO`NwLxT0t*&iUSh}?CJPV1URR4;k8%TC!( zyxrwf0nE5kd++mRI)xS^(N+hzx})Fn5DE0Y#A*_qv`4~R$JIFU{FP9 zrbN=4kI->(>oth6QHB(npESmt2*X=>YM+DTRSY|tzvx3LXY4ch+8A4{?#4px;kJtY zey@@ux7KxXB)q~=Qp;MD?_FLGf0oe=hD2cVLuaKj%0b=i*E)3D*pd>q|AC?0PE>E_ z3ke2PYUkhR=P;=?y|T>gB@wyi#xcG=PL-ICpu1A^*~am8t8Bm;Aq1+)%wmKLm>oE&wHQp^iLs^`G= zPG&uQlSG=mlIL#{5*9}&IX-o`b6kF%JB=>OSrfbEoTDta^&{3(an`(4;uAVqz~Dqs zr9m?EvhiUQ9-;W?HzIVB$l@&YoC?%#?8C2xew(m&scTTDc)O;%4gRopLn`01NLL15_4`5g(ROfvdxan8wfi|n8F zS6@N*Gcv3k_A+fOox8QC5)!H35wz`YHp|vHGA4uXdDs3ijFsy@$z9)YukGk1{Nl7k z#;aL7mr-}`-n}_(24FIvz66=(5lYT1ApLd`K{^Xk+4EJFymwQKD4^T8*cyyNa=29! z#tmUr$ZtF-pnIGM7iM6t)LsUV7G0VIYG0Qj02fsg8})%ciPZ#j&sz#4#-ZJM%4b#+ z^iVW0hZCqh?ZS;TrMyS>s8W8`^@FKLl`pnbdob-MF&3d`mqPX?spB!jc^(_@1vlC4T3*$f4Su5FzNBfv{1l!!BlD()3W_>U96fu!Q21JkI4TCpgjF zy0x)gPm;;yHuY_9`nCNdM_8rwR~7G2g=MzY$a&LMfgWM`zR-3D_`l;^Av!W+wrar( z^$%)eHjYkihfb@C^RKjrhZ8RiTG12x7}KOaE0l$y`A#|#=X|Uly86?(ybdL@G;k}N3xDcVcN8(#=#(qQTAW}(HanrAYB-Mb<4NRZv@&4 zJYWxiB&-pJi*(o?3bH`0w-dVG0SXalEd#;KyIR8QZ1jFPXqhQ+RPn~+BfW~e8ire} zFZrL`taY~f9IpOl-ff>~5$nN=f$UR3i!yZKO5ATUpg8i7KHI3W>4{xhT%>YSvm0kK zoXgtJI#mzvlUVcd^A-P5b}{bblg&Tf_!V5j6V9y;+J;}8*OCqlGmF^6Ofv`xl8w+6 z@Njb)D^e&X3fhvgE7ESioIRL)$5XMoekc&C%2+%@%!l~?Vg(v_>o_*LKp8r_2*O*S zK+~+gcDLZ*>8dG|&0_o)EoW*vp6KbPa+&uT!d&;H-+}o5Eb(OvtmOV;cDJOu(2j{& zFV1J4dI>k_0=p9+<##|p;D=uXLLw7bO%w{tK;;%eQ~A|5C@n#lNUmz2QoVf-Z**hu zYQlQMZ^%$4pp!rU029h!GRK7i_~9?CdL~4f2*>)(8=(E;j;)%{_}U-cVD$l7lDneL zeldm}G;dC=KHATwv+2cm&7A?=W-stoSGYd~vIS-_=As&)ZsDYj9}2`52JJ(L&U@HI z(5n4qJ<{zmcI_`O4}ZjwE*tP=KyqQup|q4Q(AN`ef;wvXC`xyl?PL~C-X!c)QeE|# ziDxm}=Ax$d#ZM<(S|!x$7y1w|^7gys4`e;R=LJX@=O}i$y~iDAqHgr>-UTNFq1%4Ut6Q>bAQy5tpI*(T+Z2n)Me#^b)<~Atr zHD8W@Z~|&XH4X)H^}WWA*KgZ3g101><3Pv2cQBK-o&aRutpzWjJmB&{_rU&OW`WK( zprC=??SlJH7%?$1=jN>d7&i}!I_JB0zwLf&6`R{hqyreM4kKyb4e%Gd1<1~sNL;Bt z^mYl#@_N?dH9HU|9=&EX;OKajp+AJmWCpz}bL10ce_HrSYHzc=2y|K$x9+f)P_sw3 zEur%XnV)EHbtcZ_vQC-wgSMqlXE+s9?r6IW#}~^QYRi+d zgNX8OZKt`2vLlXIqOC6_CC0(-cQrQq6F>td9q5 zwTvazqM2VnX~K-EjjGqW%l}0I4}B&_coV+i+l=b%>wNc&ER?_$zl!Knk&(<>rW<$v z=S=cYgnXc7^p|VccGaqNkNjddUo17ty}{rM1n9Iom`afO6XYdZpItaKXl!D#(KHsc z`%GYNNNfW06dco7qy;xOSaN870xmUIfz(+E5Ch*Bt#aHI=`>s2`C z-aN(qJeML?mn&|f-m;38`7jT*Xcab`O_B3=t4*=WIqmegQ`WXh(XqFYm2f{ce>-VS zC?7Kj*P_M~;;VdGRx&69I;veJ)Hz|sEO?zENp5T_{*co~He|h|vgU)^Wk1-ziwtXr zB@zqy0qv)Jy#dCt?VnivhpVab;u!f0`M$$=)kjPqtLNi42Z|K7YZ;hV(2+%eU*^Fb zh0-RUaW{p8gi1Ks4v_L;Y?NC!MftuYhT+b)X2p83gu<$zee9GQo_I_Kb&zAPep_$ZfFF-@Sy0cY<_jJ?zvH6gyZwInHFD^( z#LPJb>pKb(`@ipDQ|j=Qn6#f%ZN%v?e0{e&6!D->{S&F(A?FRoL4;fLqPcXB{EAjE zg=!w?l;Z}~qlv1GOhc7}6lxlol zdmTih`5YumU4Zqrija+Iz5ia8jU`}kY{gD(0Mi-(gax>si%Xb$&j9qE-wLXNZjgQg z=x6ZhV3eM!H&cZ?wA!(Be&CJ1u;Qxd&s3WY_?7TU-;8}V2N(qP-Fe+Q0(q>5Nq#)O zk+<0Eas}Q(wEb>=ULgU)br@XSj&c-c@}DH(-n(XVHAnL*EXlR_yoyC`fKb9}RGVEH zsKh1oG!1k78PH|^B0$nuCu3fPGQ84Y4K+eq`gUKlNFK_A1X`AWc=f6O{iAgliB=yN z6$bLb+2uxI3@gP~m8$!4#e`h7my)Y*b(^6sj@UQ1(fRABFyVIT1NMMz+^L7z-ew>q z_CLI`;h_cVR=e7{XtqYa{rW9+lH)*LEb6EDk3#vX)}aIQDiaz*9^{+C${?8R&NXgT zWCD>yAY9VIouQ`a5Nd2Z^4;HBfIg4BL7>T#Jq{$-01kqq4aiT`rpGBjgk1|p2R=Nn z$l^N80OFO$sKWjsAR`A&j{x>Yc!ytP1})R2OI<&DP`G;Mr1Y8QVx}`emi~hLYO4J= zpzk6<^sc?I#{8vmFJ#YK3{vfD+ znYaZMly74~7$%>so+6(@AutdR^zcq74_KylCtO9&4L-tG_IC-#8^8ZX2cuPkF0uWV zR(AdWq?H=)7&cpkkD3;~-uJx#J`A#@5|}fQhg0>VEV;Na#Gaw{LiJ?-2v5b;=g*n9*fw{=;tx-LG>x9}Hf>gWXnA!~y>#mJQ91$lD zpKgfiWV53Ld@87U$hg^t7$l?Ya~6nU{^2$MgsK(cUOO^ro=_U37+A4bjV~3Q$9d2y zT92?=(V(Xr))VyE$j<|58Hd~qs`MfgOx7`Nb_2?@oIZSt00~o6Gzs+N&Op!!dKgDQ zZ-fMxG>m&t{QUCe%gQ?`coHq5EeZrZhE3H)CP)K`bmO%+L^)6diy^$RN*7M4?wK+Q zkNKr~^zkp+k+;?S8N`?2Uv#i{^}PevM{0QhjWokBklu(jxJ{^&lwi7C~@N-@;r3v;6>&ynVZ@P0Ait>(om5M{@v(`r)hqlpK2b zC>TP`Jx}t1$6^2~=sb|0gORcT9X%Kl7B-+|VPO$X@bm`L+BzB=8WtE}rk1Cwl9Iqg z{NIs>M)QNmwT?^y4PS*H%%y^R0g6_$vc#3FK)@)#6F{M7eOfl&bP`mzgElc)P} ziWJ8b%qi*;VFz1^a5=qrD{0MnQD)h(;67X6@&{foyFp$!qR^3gU{V10e+GnioP#)g zGIyy_i24+O_pj711KvD07cocSBg0StP+${)7za25;~9(tNbEt%FNt7LCS=f*NwE>3 z%kmdl$k3U%m2-!qc! zcPD_Ay64d5e-!Y%HW=4{fOo#4g1%URn)&`#y|KPWD(Y%~vkeFZuR)!B?7ot;bmy)( zRN@2>bBTg!(>%R>edc`6CQ#r!CG`-mTmVHg?)qoT6fSd)9hX+jwJ;5<&i>X8Cjur| zafjI*CNcYVpWDdhunPi{ENU@9CR{rIq|GRB=WP2^dz~Tvj0!8r2Ta*`#{&J#)TX8v zGm0QJm&)^}cHKLx2>zx@fgb*K;OCq6-!WiI@mp!eLzHlcLiqdy0dS?hi(cnEq2M=C zs?5yLbCjxB%DUs%L#|Y<7bpjfTm_7UE1uWh~y#su;@GPa?m}W z9mJ8P2KgflF+m74HZOy5fPKH4U!8%H57e0>z)<7d8S)3VB(=6#4F2?fYr`+_K4)OBUTk#g4kZP za=-Z&@M#pdb$?deKx-ua*?$!E);!ZpomnCXy<;EQ&kZ1XFgEHO%LXhP==oW#^q?Na ze;bx+1tK}myf7$MCI&!r`x@aywIf-H4|W)ZmKGM=fCdG|n})g!4V8!DG|oD0HGPod9eoPoRFx8X||;1@@OyD)r>sGOc%To~AQ zILRd?9fU_TAtE=VhM};lTMBg38--B}TDbp0nltY(Lym|LnyXExUde;54VdWTZXC8^ zLY@vUj`!lyH(hK$fe8?GSK`NyE)PzrhzmoMo(9EeFdZre? zp5juFvbZpie2&E{sJQlxMl1JN<2wJ{T@cQO1>sC#ieBwOYn_zLnZra)0CZ0TP=>kJ zv-W^78+p1G&`i%V3XuQ8%-KQCS4XLh(wK8J^V}Lrirobn%#eo*{>l^fCZC;5kB4lb zYvBW#c-%g&iyJw=#jr11j%{pQE)KIzYr8GKgr$`K?EIJ!r-R}8M~c7493R6gg0kWi z1LdpcbU?2j33Utn4DSjW^{4`_Woc~X`R3fg?q+8MesqV+N6enhMYnh2T9|>`Hl|ix z^1Z^%K2}&l0uB3d%fzt{=MDa|^i9pWhGQXu(4X<}D%qhc2^X^Dyh)S++N{4ZTZLbO zekJK?(7$S)8yiX^BQXzwf(Nfk`w?D=Jo*+VGcH}aOxKUcAdh{lx4MWdrnTzuI#-jj z2HWTRdCA>xH`HBe(cyfN&F1h~?NHj*i;iE752C!5vFjw*A$Q_(ALQq)UYj7-eS~x_v77BUWN!8&_S*N*Za-Alem3)z zeexp+Ny$-4+%_nb>xeI>{<;azshFA%nx%2V*ZR@1wQB=--tL7N-!ny(hUn4rLlwDL zDR-{ge!}j$vYm^fb`qse79WRs4jwHT?2yM^v3`iTFzFr3XJS<~&2MR8f+qGX@pQzA zRsHIWtl`v2jr$xbHM_NpO*hOckPEr{kn)W>aX+akOxN^wCDJnIL(BM^m1lY^mu&s2 zDyi+xmnoPXf)Hx$3NQ+${LbPLrA~iF#LGdeq!)!aYA~jJUHvnHXTzt824Tk|YG+de zj%~ikEZX2gbz^9SA|TJ`zLS-{2u6~f*X2R`AFX^ByKYFlib;rzRH+z#?RMhQpcA?{L7c&knulP6Zv^6tvWLpi}FX6>{ zD~6~Rht#~YRI4|7-{iUWQ=o}DO}?94n(|0x+kTaR)r}!)(Za3WDRLu`w}gDxv*LO; zLk$)Y`ruVwBYY~Vrf#qB<}w??#&$?*)?r{O-CsEEG+RaU>boYEP6AWlCHs#Z?24xY zCTT&UY`3!27~z}22%3p};sJkaTNK{&zWB3q+DckA6V!Izb6978iNf{nR%cgJdZppu zGHsZugr&=anO-#tb=t%S0nn_%k{gbbOD%qcn)EGy#}iwgv7ybYULix*(mlFa@|#n} z7&TEtvBIq(D$C@MkkoQ{Ev8^D-Ki*`2EvXc2WVa2H@zXRKZ5_FoXzg@*U~o6e%Y~9 z{^`qT;_(MNuBmUk{m$}b!%0c~!w)Z6oDcnS*lG0n#XAwfTedu?2`FgF{Br2Xq0Dnz z3YsKlRISc?%&)D@O|{K+^~_X4t08vr1~*B4<|w05CR0m>1B_=i#qcO%Iz+s4*?DQ7 z9RfbE^C&mHfNVEGKwL*rA*3cIVl>xtLNIS=7*cD687_GaMaA?$?=#el7UvILt1cRP zK)6}BWvItKwRkK!8Fb25({TOa7Zdo|apKsJiD+MTWqOU!4s|&&L;lW@QRrd#^abxt z*!YT}`whqGBR?2S&}}LdKVgikP8y{-9(OlGU}!l^)R%<9g)d^{rHDX6O3lGNODJjE z#dq`j&$`9p7n`A=qzhg{PGc@PL~Yr5+QcojC+7!PwOoRCv!PphB*d9BpO2&VN!-oE+7rJ_guRpn&)qDzt3h>p zvRy9z3upm8w&F&b@3EI3dieFFO>3;q5NOAO4T78PD_+`2?R9dZ$~u2qELl1|ePZlJoo+itN(sHK4ZgUR4t_JNYhRFUw`MX z|Lmr&wj@PC3!LgV{Xbs{%ud|0nbmicV)X?+T{$LFP1x*@H!D1UJm&Ob8T>k9mq-XN zroRizkuXpk%y-JnkmXr9nl*XY3xyr= zB_f^l_t=A50gRbU{?e$jZ^#FqyVVK9T;~ktld^o&DCi||quhP&F~g$h-j6z? z9OD=SC$zEXY|^g(%b>u{U*q6_9z$=>N+^l`y-0t4BCvlaY$J9V9~8FyZwC6;Cv3X} zZ@sYQ*8+q8upjY)?65U^nkADwTQao~vX1g$WsyEqP<`u=n#cGPMKH=A^E>d$+cs<6SAP;A0ald`I=JU9O0=qoTN zuoUD$_uWop9=mh$;hVsD&-i20ofEhFaWzn;<6PP~ zFeF9b%)C{F^WEM0;u}JD->Y-e0@xKl}gh%7Ld!e!ja={J_Ws^bzkT;3`{X zG9E<#C^UC0Hu`+GIdUB2p$F&6?vsyBc|F{4=jdNci;$BKdG+T6v1XQI(IwnBnhOJZ zIxm}WUrCYQpmX0@C#$itY)Ln|X8+a@n)hMwlHtpQwD~{(uG8il(s<6=;*|w6_5n4@@sAP4B*=d(%Qp-8yW`U*C)U zVcvRw=O0tm8g2OD_-41y`O{m^eyEcDAk>bz{oraqO(vQTR4zV@0biKzPS z2)00dgcQiJQC^4tYzsSP#ZS+xrP*;hp3dM%>>NqF9~(mmE* z1N99YmzkAt#W4Kre|*=!7B4lUCUawG%HE>dH@ki>*mQTjhcw4@=3g5H9jq#Tv+vKV z*7hELI6;|@{-9dTV8Gm9{s-e^`g4xWf7wUH)<3(U05!cpeXav4C+|H`5dFPiZCSzi zyPMne|Jo=>!N*?V)W25k|NHCXHQR$(GH9!8qu0wy> z2T@YwU#t2*%tVFrvf#b7kEz?Iqkk{bnGDIisKckPaQ?M9Gqbr4*i7W+z!|f!;5^+r7!Jw5S93%Zk8=KRf7N!aMsvP`mZxmBrpvzF^~ykDG2eV2)d#?zOx=&zaU$5XTW8Z zlLgejd!14A!C-I;1Ln)<_UtH+)Ty!xOOCkJtWWBPAqR-?QZ_6EH4d=wKu-iTni zyjEj?0aC!%-VVMELd&UGDJ#oOlLj#W1sqqvdh0G1=Oc5!(1(eZZ~SR<^(nrK{n*1- zO4^l1mcz!aAd*$<#0)V=(DP^0ymZJ$`Cp#t>uF0g($cM6_7X|#FaeAuGaa#qFE07{ ztQbFW+9@Boa7WnO!fV*WrWixYb&l!#$SsN;;BGFS;A=Ij;u zx37>rw|@Ipj6)_ok^U7vA5(p!!jtg+c?G~%G@xYtegVfKeHX0nNZ|qrT+gBU=_lAh zB{|Pplod8WT)rIOjVT^!Uid>Y;M8`tqwD z$^P4_u?61R3cGGke;jksE4UBCBGo_Rv;65&_>>CoajT<>LzNuvjz4%m z0lB#%GMX4(I`AN;7w_iJeQOZYgF7JhNx)Bw31v!OkT09=mXt- zm7|&}Q3WE%(`MOk-fNHsn2QdG(1IX4$3LaN~zD#w7Pvs>sM9B1=t*T zH_LeOFTDJNc@@EyuWd93)Nf_yz<@ZqV#cr+t_r9!5M>=+`6f3#jFuyUl;0PJ!*=bp zjDm;|!5*FV^B#cI>%R)Ee>y_aZ9Y^0(ej}KmyDi!w*3y2_r4<+A5FEy)CY12{q$1u zomCe$12B75J#x_vtr~t>D2WNaLR^)Ur56)Z1(x$><)o+-fA}k$Q7b@J;Y8;Z2B=P* z6dGg&KgXUjH}1Gw(50(X>`$)c_5bu`eZamI@@K80!Tl~)j7w>ZE5H4GtHAB@T9k)8 z;d7%9Uc2}(#R_BB?*0TiD62BR@;njW`F`c2ol4F*`a)sr2|@So=j&gJrQFy=Crp9t zxlcng5CeVW{Ix3O+4H<7b}8CU4@g`|GG)u&nb$9w zHnFNQ)uBXGp7WrlFy2S$o={(dsn)5Fr8<&0)_Q3$kcyR9a49{>=*+q$8S{I!qWk0w zzJfeVPs)G25UrDad0TVQ(~Y1fW| z$f)q1EZH*@SWMGu=hT8E`r?kre9|sHyJp3jvWjgjd+$fVs%jzntQO^QK!4RUHMChW?Oi>nVKE$3~S!m#HFx(N0D_?rXlu60VvI z=2NFxY@AXTrd`9E%sG0Fc+bSBs9w2w9kcc+x24C#>ZSt#TLp7ODZ->4SHC~RYy6h8 zr`V9B9IIiP>e-{gGMrxix<+B(b2YliGxSBUtQ{YmGXIK;*{#uPatdw@9L zN^r$6!O6f_Joy2SDrK~nD6{$W6ZV-4I~iDpk>5%bddTd;xEq>o@fu3W-ps0?Zw1Mg z&DJ?FN`7Kzwowk4Z!x;@l7Fw(M_8;PC1EYx&-_ zgT6~oge@d2zI>W75Iu^+A|S@N7lwY*1z^9iwO;A3tg8LI6`nERNc+ZnIw5Mku-`Um zuP?F63yZ||ZhEo_GO8K@cev~Umr|IU_p~V*nucdvN^7afD%J2PEnM5Q#Qz$7-=~15 z8@|_O{7ksF_VSA>%D0odbgKM;ea0GOeUne#>UvW;5o1uc(sD95$+^0$G9?_vm@rTJ zhN109@i6NgluBkV(7mRZ(B0=o1v9)29l$iTDSP?;yHT#$ak^8$&wIcnBOv9$j<%ND zAmg&qpC;tm&z<{2PBZ;jt!u+~j)<8QUnh;E50_S}JW3;pLaWGoM%7Etq_klk#onm$@la?wD=N6Tv%??~F)8$Ap`f*eG;Fo@j?cpZ0!K}%RpL;> zg%;QwyS@y|DtMwhlN2K2(Sin4VKn(ZOIz0Z3`wU7t1$Cs9A-DlS|5SS0MPdds?beg zHdBOC3ZjgBedYwztTLi%Uw5c4y{kk4J?Q{0^T}_q5XBZudiAjVa57-(k%pQIk0lHm zncOs5DC*LUT1m?0X%2|wn(B|kN7>!T(~vIH#ePz*D8NO-)5~+`=uyrpKmp>EY_|To z?F4opdInr(RS$fGIZH)mqhVq7-LjVsO7nlETvj6+pKw6^Eb!6xD%Wz7j^msAoEy$R zhJ+cTT=j6|m-bsUUU_)+kOlOxw;Fk2+)phjd-7J){d=m^WR3kyoDgNd zf$VlgirlZxXroOLMBn<^9sohJ`f~?yMa6DDf`@y!u6UhjCv%7pu#x8;rxi(1Y>yvA z$KhNw`as^|kt^OKQ$<5CyAZ{eiN*Pa%FZorDXVW>E1qWZ=MGt}3@?Jn`14E~o?G$T z_TQPeQ}>+q^=C85)#~U)8%^JQ-W_dMp`r|b&BfwmuaUCixgcPZ1<4uj4K(*Y%3z9a zLo9sy+Om*kxr?U{)2D|FQ(kEjkDF_fIZVD#YQwopd&c`U&$eVu#jk#h31O?5l$?R{ zrEYrZkq#d$cct6a*e*`!it@}|U3w~}{8qSEytFw)%==h(+}%vMjzV#dtKdZRce94h zfx%*}eTLo!>v0KnumP6LzwX#U1fkG8`LLqV(v%d+yKG3aj+!k}sFB{C^Zx54#rrmN zOVQ*E>G(&{Hh-t85O8B+Xg^m4=?Y68Fd@#^IhWy!sYR(Cy6LxEzi~Lon=PGu*SFd5 z%v^nU&g5Ye(&p@vef-jEj^XazC3H=d*;iyvMzU7u=XG z?F0oVEQ}(AZ>-w(=1i*VDLw;SoLrS0$@dRYgF|sMNH*@}Uq`NY`OPHhvKfSy5M~~) zZ(*%6@5NR+LQZ8!9QO~IfihZ$?8Y?d`C{O6xVPx3kh)z(97`jAl<6(< zWs5QtbvM0a4&#_N5r%~YI=?H`?Z_LoknhN9$~c@Um<4sHe0O{Wtt;Aox3lHYZBA`_ zF#Qr_1<8gZ)DEvaw^yW5MB(0yuJgXJKUnYFMXs7-t$WrZ+28UX|EWg>BGhn=!i#!h z6s(6vGQO5-*w{g}o20vIDxOgWi4F076h6VO!w{Pe)`UkpLF33G={hfKm2QWi_ZxV= z%fv`N@hLR)=y|Qagh)O)OqT^1394Un6E{nyoK^wS`1idr;wGKy*_JeJ*6Kqd=~kM7 zOvf%Z7|DA*N6m@cIYH^d5=`vNCbz~Y>*V=l^SA=L)YiH|;s(W}X zo=KgLiSww5PgoRaf2wcyTcqA+zn4Db4_s@%;%n{IWMa9DEY)4JbQEDQDfT5BrI&dB z0~#&}x~9b9AuPnehCRtB=Y)(@49FqI9pnOTO_?t_s;=_5;c49b2iz#eN2fZxUE%KZ zh#%J*A{DXnI=sj;0cYp#$n+)8o$Khf|LZL0eFfPNiwIRW1++$U)b?oC;eA8#wJ4-j z8LxEwX)VgJHysk+61Wvx8Mf1bKC>7YXH1)v(LrsBPx0tAjT&%GugKRM#8r1U0(X)R z1Y7=H>xIb6d41u_aOo@y5|0$@=Yl=88e++YLMQWcylylF^khHLEzv273`{U;mN;T6 zt+a7ZRPj`TKEiU5sw=p!+#3f%_mo;ct)^W$%C%}d-mYsd13mKDK#g9Q1-3CfVL`N2 z-MP5Oc&hVQf{KW!mX0tOU6ZR*IOJygrb(MOAq6T#Gac*|VjZFrwzELFRyI^^MpHsz z13I(SjT8gB(PQ2Xc5?v_*jy~F5SO|Bsbj}me}i+VewGp^RHgvJhG~VT zqxaDdWZiT^W}LEn*VfZxj#X>B8Fmk%2Awg;WZ%=g&y)`qZo1y<+N?8dxr@ziI6Yfr zs3RzU{d%r2n(JXKTW0UJ`#2{_PDr7YcGiRxbl<;Eh%uv>K{o3d%yWv8M`tKciRYqP zo|Ln2)Jqqbm4QYE6Gg)L1L-4!a>5t0M=?yZ_sKoJHPh;9NM!Z{x;F3XOFh4L46OUv zrlh;{vyvd`r<-Z*n|w64BSP-&zekfDhfc@C@nn5qnm!tmo|{h3_eU?C#tDjL`uzMV z)Jvw3h95(HmD93Oy*gOy59=T9tPXo`vM%PmhTqE&Gi=?%AnmL--6wzRhKgb3WTaLL zsW?aa>JplGdH0DD?12bW>x<#+BHkkcAD^`?^!~zVugDMI;)F(-*^ z4t1o7yNB-8;j=|1v4 z)~ZDQPX>yoiY*-DY4wHr{?JL65V;?=SC6Eh6$pFrb31g9YI5tg4}>uka?o$)jU$Yi?#BNf@ zENMQJMe81^dJLV+uPm6@#mV2CL>$eTfcX)LbpQhN-s0kB4O*G!`#y#qcn0de z9m^cJ{X29J6t|tEV5_2P-NpIulI!@YA6`yW_gzB2W;#FmDxkQiB(tSYsZwOCW)NCe z)Sx+Idxpr6UiIt#Q`aTSXW#X<)hFa0ee02NojBQ*Rj3X^?B!|`Y+#5sid=ykUVha4 zaX#Tjip|`%ZaodIw_FHHZSIeiW?MKbk1iA`ijzo+Q0%eWGz(1geZH-=6V587%8J@z z(t_$(j_i{#E4r6FVcYxkL4=Ec|NXMfwJ3y11;!DUm=t`_2DOpXwDQBQLA&oeA?l&m zq?_|L*-I+IAElMlgl>}}EfEQIBKF@+*dLPUPnq16N}-F3-LI|lfGx{s_+{p%r@Yit zq3Ahh>I$Bw`95V}jlDOvCSBG{Z)#rHLXr*vyEp26RIfS7-6!RP+v5xW0}B1UYc*|K z&&smtuz4_+8{=y4=94foDv#3B^SEBdbQ^+W@-Z`ES7p~iR*(ORiVbqE$Eg-FJZhbT zv^lY&eJ3Sy^fdczBM=yOr<7o0%?M(JTMV_{r@LKTd3-GTH&it!%Wu4d0kvhxVisIN z)fc9aKJwo`K&VBPeo|`PD$;dzE?TAgWOwy8*G-(pWtT8}^Sy*-yPGr6AmDogNO45* zF5N+p;L*H?+QZhCwMoG<8>JH0Oq9t5KTn9%H+7&l?(X6~M#jWNTeaElm#J2*4=QM* zW9xTp1!|$xcLvTh)?B_k8&rKkFuU2!{ReXx~r@w)}KL!+T55pSOZE zy0-M7;({FMK_wrnB6Yd=Yprx-tg4Rje)!6x^zja!*sTw*e?r4FxYPF(7QsV&)Tm^( z4zG1cXlVLi=U1C?dz zeB%J6R;bE&Z}KPl?b?>JqHF}Rt4KhLPd_(xw{;I!tY{6E{Dvx7c*1}a;#SW2bavy9 zT_qkTsf!E%LV4jIfdFWU!`gax@%k@4nHozMVAz?h>1s_G&qT~s=BSx0VHRT?H7oMN z=ZR#YdpOB5y#laRNDyh3p!Pi9yacw)(xF`Qn{mElSV=yva z4eF9u9&i`4V_#Ri(-Ka#z<);${64yFOe%lo za&hf98{Pb5Xm-HRsjZ4bGue}6lYU!!(u(C%47+8 z9q#vjfodRSicr1fm=Vcq0KJ*|KUT_Ns)Kzx7eePao zv?t=#C={X2BhJN*XSNKRfqmo6+m$IY}^uW` z%QIW5El)uKGQoh+ieYGBf)a{`4<*aYH_nxI>6YFn7fQIte%A%C7 z7FI@&1kL|7pf;`KV$VN;DyP5g){_v9CPngI4)<=m(}J4c%a|EUuGd_NfPDvsa0CHQyKBgPEFnw7^O%l;foPy0{*r~22_f1qsxy(Pa#v$>bY9md%a0ov^vU#`0}V`qtG>$N}<`LWuB&V7_55uc|Rlh zRl7W{GR8xMk!Q=F;f;uSx z7SQ$)!g_iXwN^mglrofB1g+P3}etn5fpnSym+gsADI z%R>;bHYs@&sPp@_1b~bV$C#GqBl?poT9MnNxBFLx&25V?eU}qyBeSbb%HqqzWCI1j zB?SK>Eiih3CaC$=7I7_RKad}P5iSWV(cp=j3d?Z?b2Ru`V^1Zy3d5|1*!Jq1=qwgK z`9kO1p_w-|m@1LJ!P~*7(*1;{`5r@olD>VRzcBbf7=xZf`Y78Rp!j$fXjmWqTMN*n zF4Q^yvg;%T^Q*oXAJjsY1%=ggQH$-4C`6OJ#P zIayV0F{2pdQ^RFZ zN&s$+xH?RR0ZymHh?5)hVVShYfcmCegevk#6zk>^qG~YxuZ=qQaTL)wQ)ezQ$$-!qhq*%YLDBtrmkW4zF~qvOe*{|^E{YZM-1U5-8;C63 zV&fh5z%=|LxEoWLd9S4%|KzYQCzQO&(zX!>zh1$LZjTVaFrzwA*$!&zd`!JxiQNNP1_W;Hpe;+aHVhqw<;|A8=v13 z#Luuxq)7zp$MAtdr5;Yu;7X+BglJ#0JHf~<;qE3A3ztjw-E|oWV5NynwiEKwBdv>O-DPy}$3=Sy_k%@`MT7SOTqW zW6$R(^D2P;OU-Kueso^4LOAVSP5H}duCVZX7&AD$LAb~xXI>nhH_Rc4>p`)iO5owL!eWu+%lBEokSto_4O;<|%W3E9Pg(+%%ipByNVT8hsArmhk_v)tZ zQ+8;iXPMu5q$d3h-q1jo1X3zt)8K5@^QeTq^HtQ9O(~WIq&xY}OK5uo)E&)hX!%)M z((Miv=bt@6vtSfUp~d3cs*GE7u9Zr0yO*2)$ja8j1a?v1I-E5W2)P^Wx@tRz{n$5b zxpMRVWnsG-BclPkbA)}28Ch;{BYkhF?tsT*%*TYAkpJ1*+p-rF1-7!d?CpB~#w_Y@ zfn@m^Ou_HtPc?~=kbgs5z;C2v)(73&GfN@G4o1stBX zs(IL}kv64hpeNDuk@WD9L&6mAO#{~|*WvUNBrv*QEtP9;g5zikxzf&lbsMYQLyI|Y zgM0#QIEw$DI%R)+t(yIn}iNK_U*=Pwmb>pp;$cNM@M-W9VtA_i;~w zm$)n*Z)-c_fb~fEQY?zKI@Jvgw*ar&=R+|WlvSZ%lg|4(f6@g2lwSd%SqyD4sjL(O zC>WUPZbJJs3mE!z`2!De(hhY`3LIWL6lvsP4@;(Aw|71}Ruk{N`9!nr-Psc`QAhGE6`gc4)KfdM`er1 z=O`XAgks+uk$HA^dLpDFA8n8^K`Qr+3=-wbvgOMZ7E6w-25O!X+l#s?_(pT|PN?~L zWPi8Trbt_bprU8aeiH&wiu#6wx!@Re+$4qV>UUm<(o6rUj#P7#s<_4Q|J#4};de7K zcFv6Tt0wyaU@Q!|+AhxrXV&Hh`D^7rTvyXG^sB^7n6lop(}9ulVe9%#?@Swo$3qnE z2KSS3@j=cur4SKv{D?}pCtbLWkv;A!IT zM=ZUM=8+xjan8v0WExRARBOOkGo9c~u(vWV!C8tr9+T`*FYR0R*ZUJlau-&)CFfm9 zXZ)g(`t|6iV7-HtB=I^{mq^tn^%OV{@|*mN1uTgjV)x`%%WEv zNiMbjrGYHJ&!a@aewKNs>R6d*T;12xPKLN~gI~ugoxTI-rZF9H{$=rgwSO zqfAw?;KR!Ja+x0SL2dzA{tR~atrF_K4C2Rt1o}R5K~#Wy9LG6E*V-#Sd$O;pWCiq( zqaKlBfll@{9qO3rDa9AEq$kswJhq0wB{Mh_q3Tk=bG>A#!B5zLeb`9c>Z*NN%JGe? z1M9-VzQQD_u=LeTLW10=Gf}v0Do!fM{G6tFyPYndU|oLK77hM}Z9T1(K(soSN%Qr~wZsKyo#nXVAHyrtigzx}Amc|CdQ1`~6YZNZ}_lk)W)8ZUP@HEVKq%{P9Q zYX2ISc{hw|DCre(Rw6oIuGP_f)n~W6;huWxL2m83z7MLeb}P@e-l|=osoE6?^gldn z?@?hl=n9)FPK#c!xsmCgSzx);?FwHt{fnv44UHjf!kp%z0omBPpI@tM$~mjO9=9v( z-_K_w|Ao+VAWbM_)rf{fC4-daVbA$C2PceVQ6A5pzS;ZX?8AWWC9i1Ku8LOzmU>sz z5Ae-p`1AQ4G_LJ&mh1NTaCJ&GWA)BACrvy*7`~F@Cq{Gg5ns>PD)sur_{-&^WJBcoHoGmr%KmNSy(3SbT?n0XnnPn~tFQC|lOE5Z6Fohb}LQyp&@qNuo62+Of zU8FbAIKo)wWf4OoZom-sXQsOV|Iz#`yQuy-#{XY4hWbgql1*2Qf#$`^WmRZRZ3i(` zcd9L9Yr=R-D2sIy*@U$oP;KF-yNRe* zM{@>;B=!ZmqU?x}(~WQM+&X*iI;v>o(r21E(EQ_9(CSY=-(MTMX2P~6`otRT6kSb* zvQCl9^vww|$Dl0p22tIY9o6_mh8%q47mVK2cCl(gnHl`s?okey1kc^&eF9}bv-vRZ zYLqS~ML9^2T;E2kI5}ySGMikH35($zWmD`VUigm@GsT@d`#uYOy}3p-G;^zp!_xyt zB7y4RzppjDw7Tc)&5KcU;D=7jf08hvA<8kAos6rDY`tOa0xel9GN@NRMCd=cs@a@1;t z|GJEw%EVo>EqWD8Z2V2K`%d_MM{7 zC#&^(-D(SV%YKw-J?p|9JFDqhAt~nGuVhkaLV8+izhjZE3G)Y6a{7wzmxi<0!r*RD1N0iB+K|-~M zO#aT!4#$Tm$K262a<{kcj}2i*fyx`Pvk=KBFGRVYaJ44d7`FL|AaT^-H)rWwpq<;pSK{Ut|aCt{KG$qiA58<~0KP>!$!wS(8->&yh&mE55 zD0%q%o4MQaHavZv2@9*m;WsUkr^5r@tdGvL19lcU0X(X;12o-zOQ2Mh^5U zE_OiB1K5sENH%dK_TsK@#QX{)frc-fe2a{q{>D|e zE)E`0JzxC$JODAo^`rCR$GGur5AA z?^%iv@Xv-9(>9y@HmUM7EjFJuRP1+R|75qJZRBFNf5WzyTMvi0t;Hu9&R<8y4QUJ0YioR(+8E{i-`V)*ZU=<1zpC;Qmh^v);Az6X~!=ntX@La#ygZ zLH<_PiL=XEm!nv1oRpHi8*T}9l3rsJgSU*sNdG(6*f({DpG@!a>VusR$R$6m7XhO9T{d7^j+`WF7w`%ZyjVALc?!tn zpr&kk-UW@vi(8bu;KD2*N^*R$FUk_CZ{w<5bCQt=TTel>JAYvQ6VpVlD;yog~`wJ%UU?%N6 z8moH?V|APySDO|l;iAUnE$=RFPkW`7qaOOgjNzef!m;z`maT&2m+Ag&!20ccxla6( zN7lS&?ltA}hO75~T^Q0MR)rH4Sr>uDFfTc^T!Kyo3XCCApf3YbZybRyZRhonk^p`s zZv)5HtS@+st{_*0X>gnyJ}-cWyy)p|dCHZ-(){!~Jd094=V17$xdYhw$U=E$;cY{W!h9-kcwI@4IpR z=NCUL_b<->hhzESSWqncVH!V7;|F5-%N_WiF%99FxD~&10k$3a;i7-I=>M5}_~Y&^ z>JU(t_apE4k$3#482t4P{4kBbHn!k9|2I?eBZOrkhAyVowTgml97b-|<3J`$|6-BT z>g_($7=N(q;V<50J{+?JT+M5@jg^Ucq@y(%{^S59Q6b+DP)w1T%_HuKq`Vbe_mU%g zhOZ=_m%n+jxhW{X>9a4$(%Q^BSTZqhIx!A>N`ezm7@BJqm?~&0WfRPC3ng)GL@g0( z81ZFC;$`KsJ&vO;4Fy;FuG(IdLd@@R7}PEXN!H8bFev*B%8Sz8puNnd6e7AuvfXWR zLCysx>0DE6UnTdxn|Ayg8Qhl)l)2!OpdRZ?tuiuf0V)oRWx)F~(zhpR4rXT3XWI!T zg9}6OF9q<~Z7zex&}`lF)6@RoDltMKOi#4cOm?SvOea-c6oL;`M(vGS5OXjPLM(DJ z(7BeRa&C0$m2TJJw*P#_VAg?rUyywzuiMzqJk~OflSovAQmI{hw%U8Fxt)>StElfj zO&YX2eW5k*=^BQqIB9LkGW%lu)b=dCIu#zcr~vM1vNN0AdJX?ZvYC$!-E+OQ*Ef~o*F_4Y z5vF3rP|5mYL-^4#T&>A%FaLxiuW7L6D#v7)0O!mG>Ki|~Sekf^EJJPD`PGwkjY52k zUiFI44A7ISi*v6WF2xO&3K@;v{b0{VMTrt z6g7S%y+KASqX`BJ&A%?@ghBX@m!Q2)hQaz>)gY82lw`-C_Hq;qy;4$7l$n{%1rmV| z0Y(v?+VISS%`?h!2=rm&##fgw;#0kzmVhP^K}e-(cJkMivM-#Fwi3F|CxV&ZM*-J_ zRJMZa+Fn!jdM|y?=nb^>J(tZF%>^C=e!D(tG3yxWkJh{Q{Zcjwgg?L8haLE*TlWk! z?Of2m0F-dd z6XOHc?E=qcY7|dPbu3Eat{{MTQ*pLQD~EdCqYeUISZ~o@=J}Ry&oG>4Cj~>YM5=mG zp`p7{35+>1Qq*`f?I{LlrMUefPD(-k^_7(I{&T3#^bpeE? ztH_p)1zf4y*F3K)L*A99Qh%FN8T+i8}zsGGZb^V?IoyN`#aEnR)J0S&m9 zp&`8DCR*uAUj3&|A+?Qn0sE!k+|c;DC8`=iHKN^2=G2IWzn`E zzGMu|K4DNy@SkYEt7BtO3^V7O7Q9OC0$l||+?%p1;TBq|ydJPJGwEr*J1m+OK^z`G zCH`b9o_(@3Z#H3XBw;4QKvS(SX4cSlHO9BHvsZ0kVqr97Du!3~b3#|RL&S<{`Ws%x zX*Y1fyHj(?-V^x@xc$Pi`wXZc>p`p)$7i=XG?PK*Q9m7~{eE`2XEUD}^`W>XrOR;8 zkv=^`f8J)wy1+glX=(@Ik=!`>=z5pa=^zQl22*;r)LGy>I7RGEwraImk0i+rh!&tg zIpj1Hiia>QJUVKpS{ao&j^rt)h<#JJy^*|`Eud!}do<_OwZ>Ny#r+yjTnxPqW*Rk% zES-EVD4WnL>IZ^KelT`vVYjIsmL~{F>{AKOP`sNhVjVc+4o8{e)URaJ)DW%-1{y1Qk5j?dzFZ3!r(3FEi%kzX@62}(ohs^4Pq?2KP&&-?;q82-a(zYdpJB@% z-INYhq!UlD7yDV7qW0y{qYnCG5af~ewXKZd2EHUvhrtPpIts{ypDUm*bwlmwMxsz z+!d=taXObmOZzk*wN`8HzrSPMzIC7WUL0-JB=p*LOsT8awQ7=F*QSk5ey}w=WIym! zJECr~e14w#6zLF+5VbryKw?f&ZtB^3{*~O3rY&ds$}65%nh^SKx{Sxp-3CIe~q$o%XRkc}|)a#)2#2RKf*X zgJNCur*lbj&Gi`{D{f-9GyOizKUP-_a|nrF!-%OW2Qj8VM)>eOb0J1tsu97XQiU{! zzal%ov2_{3L_~#TrSE|2KfYMA6WN*CQ?p4PnnLqe-RApvp!_PT;^$J3DejIml=gIBmZFgMe)tcmk8frZ#kvfOYv@J z_UuW%So9*O$fcqd23BlRY0R zp55K5Yd0k5w#&;7XdWc~b8` zh6x){PrZUvNF|SW8v> zdQ5MJh2yx^u+hY(tVx|Y@yjs<9(xTmfu_wLDnh|P{xI|@>_XHmIHJ)?*(Ch-(o-0& za>!XFl*NeBAYX<8nU^xz^D)UCRQU`Zqmk>>?55;4|4J-3jmDTC#dSMGx4O3Mb1hc5 zMM9%yq%<8ff;x#O_1tz{GO?j6U?_>qJrBxd`!BQ2!2yV$5!mh1YeuWLqH9ecAFbF@ zAJY`7GRE8MuKeJht*fYf%i#{#6QUAVK$ttmg!x$OPg8~!OYySh2Anj1fB*PaEg*sO ze$EKXZ}1(Qe7#2OX$=-O?H1NS*t%zMad>uNp@wsRpXK(O7$~G_TLf`SPbH|i?@oCv z%4^F;Q=qtm0QZOaAa)CE6qZ;g=14hFzTP#lGrtkWeWZoMBY$4W=z8gLMU5`v?7dUd za6`TWRjJdUC+l452`J{R*XCOVotQ8I0R8$5D3${i2kFwK< zWn!1P7R6nmybDV_$RD1Jc3>bRc4DJuan^&}C>ssMV1KaY{@sii11j=84er7CPALyQ zsu;kjQ%J_LJwwJ4M|}anOUC*t` ztk|2;FsGU2<*ma27cp9^LvNB1-E3pvhD2YA0a>mWpjD#<392QB?+4e7b7^p;xeuGi z4~f2nxMNl>(Kw&A!lO6B(a;98+665vED9`o5Q?&S$7%9;e;655C6#`9Qz_oufnkhx zO!~5vXTQF&@p~U58u@uf#y%jND+C~}YL9KEO@S>BjW7|ErfmG`xUH@21TQwuTY+RG zccu=yyn|rlFyH*p-6Q=bMwLr-aeJNN7VsG*tX;3FM3eIG0}k0ujls>uwATAf?y_W4 zKg3>jc!sZf6jB+|@U|=S+S}Q3XI(i^9+)NVf3%I^FFd;Sp+#p`pjzaNB*y`so=DU#+TA}g(so%Y#=H`kasrkYHs-kKa@Sr18FV zqfQ7(X_^b($z86(?ejN95nsM|6)u`pORo4K`cz$# zVFX4eV6$Bac$21$Z=)<;^QRGJ?;TT5lB4GlqTRAXMJih2&~8GKukKIegx5XHEg=4& zrZNAd3wE}v>FVmn8Hg>TS0vgB<2JD+oUu2M3nq_hu*DkR-lLcOoK!-R-{Wa?jjy`m zW4M%BL0-a$G_JV=cdT32%8G?mV@Kx4ZX5NHLFL2DA5M(%M(ieAeS&G(eS-7stX^b? zb%DOOe~#gp$W4qO))f&1nJ{Y=JmAo$Q(8iSJoA8GLXosWTBVkSgyywh>#?YdJI>I2 zqs*8YNephS#i~~~j=WiowB1<+tx`&lxt%ZfbzfSm|U^S$bB10-xu>7s+pyaBkA5VG*WywcxEw0CL)kNd-C-ujSR2t_O4OLh5zlExy6hR6Gk_Sc2I=n~m znSK5@1V{F9Yqrm}xmp=$D=_JxwA^ux*F`=kY23YgH}H!?mbhk)XTKar&~RW@vKaQk zZkUlYtS&ps3!bh5l7G4>ZX*wK^o}B%(-S|Y28hx5ukJ}(AsruIkv`KKZ~N0r5dvmTbM-b`*fB_X#g1$MJs}Mqa;~N z7%011vf)uR`8P4nbn1phVc3>q-(c98!Bvdj!J)|29wk-3a{*E(tR+kFDM3^i4K1&m zuWQ&BZAORj*(Wo6f{{+f6OfcXi~Lx9wH4lzXdcjb^}ZvDggP{4-_X*(!z1wEXml)AWjON+LPmzxtHeP-Cs-1!pX`DP zg&JuzRFo-d;0-pm9(#xcw^QQ*aw(?2 zt7*lehZG!#DoZ%)E20i#ykDJe5vgt-wMm!ZaBh8N@otdVaVy1y1|zV^`7XB(lJb`+ zXFY=D$TH5*j|doU&Jl#cKaJXkh7cL>Sp5X2$f9hE=4`tNGmvP)y(Te7UXd^kXYoF< zgnRauzuwZ%wHKaE6l|e7CdvdWi52b7gUO;Rufy(mh%Y@4(%%)^?{WuZbBJwPy|1bM z+D*(6>PU(jJG8mP4}qS6=!@(o(NS#31gGTU;$k-U;hGngAct!V;qWQDG+H#9ns1~8 z(%gNWiQW<)SNm?I;h-S3@5w{foRSw=87KIS?5^J@{B(D#%hfr@ZMu|Ro4iKa&-Xj< zT5fX6|B=M~W?!ECd%n5pUwt@fqXnbIrhD63TV=bK?+fq1P||PH6J{dXRCZAFi(KQn z6A!V7Q8&T+k~KA_3Uvn=F6+(m-KiP4`HU`v2?krco)4Dqycznz8uYp1XYr$beJ}D` z<>w+2c|M>D#s1u=Bo@+4!!Oqg$pePO0ef8Chz%qz zHtO*3u)3w(&GZ)=39!eY*PNqvSe0Y5yrbufy(zJ_M~bAW!8wKe_qRFcr!MmylP1}= zWMx;TnS`fX+G!qyy*0IZKWPjy?S+F3N^|ReJew}o-iy3+#VDcil!{{K!5@{ z1HD&RY30wOv002^L>k>?^tHoly(&4Iwa&L}9fPAYci>p^xx7bSSlBs}yEr+y$ikVd zG!?Wbv~f&jt`VsZD(bh_n8wy`r=)3Cx-9NHWxn~&WCPIlN@Pd0dVVyLo@6KsP7+G( zvx3@&&X>VxiEKM4E}(jn)2#jYRBTsbQtByVUJhf8q)mR?WHAtVq-QAg(jUOZwH?Y6^kVHQDB*o7k5} zkZtZiG?<(b0GHp@aApvc=TE&Et2CRAos<5^exX>JQ@Ozm55B@~)0aYLThbdmxP{tz z{|0GQ>EX;SkULAB6EDR^;JukBdrV5Bt&3A6X7KsTyfWK{V;!s%^TCWz zrK<}iNJ){S`*gO?Sa-hj)fB8*#W0B;+_(5s`}x~bQ#QEQfm;@es%G~~(h3R+Qj;!8 zmSS!z)3UhVUxNHkBe!8At$ZBtGQSahKsyjkI9GsZ!Re~)^;y-Bi-sflp4RStO4E*s zgC%k24hg8EJY1DAV}&`0O6F8alBIkd=0V#Cvuut8TPVlV$}5l}N8&tJ;7_Oyn>eVM zI)-xa`<6>dcRKKn&%$oi>}EJR>c4=Q@*bocTmkbe(qcJwsJ$BL27jsQ>gmN7K4-#6 zj3%e3MeFmv!rxp_(KHjrvR8u(w%{u7cdbf_IMDO-Eh|Y+!ove|d2O9<&v*LcA`79foSfa?+J>dH&!u!Vcnmkx-e(=R z0{5wkL5IY!LJ#yT5}T6_P{i6lLB}_$ZBTYZooDH!zAsASsJ`tK-}@i;l(n0t`W&n05PGN}_BAi#E3fL|g!AwSV0h;#YGG=wLg+g#(0PDUJpB@NqWggR z@iBsQU&CIh|J9o}VXZXRwkOWvH6 z)f=TaX2iHnr_&WP9SEbv^8qgm>Ge6qL8uEF#iGMhH7>>lsmYTXPZH%>=w8sqr|rCd zpY1DW;O;B?(s$&q)@bW>h5O$kMML?V%l;b9jwj}+3HgT9)ktR|V0y5jVTuz>KpB|; z49x4s;-KWHbMqwN`d?EwEnz?_0HM3nP#P%IL zZQ<6%$D5F_??~40=LrVvC(u-1Lx+~U3}nr=W{sE5Dh*Bn)(RYck92Ex3aA`cxPf-3 z#JT$h)u-s?C{+!{Qlv?4du=m~Z{1*-JE3snYKD=LFl{I)#)WbjdY+=L65y&)^?M>t zswiRLQOddW9cx9aq;)msPb=@bcYk@-&+s8np$|E8s{{Yae4D^IchKEb`Gtlg67B6* zgblddA7!C6OmLJRUfi6Of2*~$26|y%zkc2My27jz8l=hnkv*hr^{V-xpvFMRbl11Q z8rixw`EB$1DJgZmd~i``LFr?s^BbC?lLe4ev_Ms7^F(1q{P4=2GKhrYohjkv6Kz zPr<*tq_&n(g&#*5Yz6egpB(4Hbmf&_-`5*bmSn=Rn04st3?kp>^f065(Rhg zqNs%AxftiFeO@ z#u@XyTUl2i&yqOLvV9UY=xvV_0KLT^n+i09yf{7XOst*r+3Mc~-? zQo)F`s$7)%9TQ!as3)Hu+{57kbu>X99v)3X4^p_AKq=CIi*@+zgX`fyys*#>HlUfO zK_5A{{qR9ISgjFZV{;M;FlYw6Ym_lEYSv_!9RQA9v=rMXpmYGJKdi>>iN3nnyK)EP zV`ub@Nb<^`b&B1n&y!AQ`{^>&s3CZ2NEh@(Q)V>V1Q$nJ{J-@J{9IkecvHq^L00$4 zND%jME#K2?R#s6HHojvriFIh*dSZy(<>gnHeqE@K5X)ARmW8g|>a@+7lw_!BKXG*C za-e1-2HcdBzcici$#ETZ&$3*OGzkI&!5KI81Rx|-5f7@42K9Q-LLmJVYJ8hH2PK2r zbSLHLdlj2V?|>5$07H@OFS2!A)W#}LwS(6{LTrI(QNe&?NR&~{vu(@X4LPt|7hAOz z9vXIGX-;xvW;k-N(r_1FX?S5@a&!fjl(_)ch9gmnK07nUYmkW6JCb>wc=IzQWvkm*X%|`~wJ{}nkW+p6FIgjMOnyl2 zCF-rUiX^#yrIkxvxY?6?*DLr#p0jlXT@<3LPJg*F=mBlmQ>e>GnyLY2ij*u-Aey?^8#Vf^+~e6Z}sL3PB0({*h}3_Ew1y+#hi{FUV0vKmj34tL-(FF zzq&Pw0873cnp>edkB9mTKa^v`R+T+egg_rgXn zF3?!%8c0fuoaj{Qc6`!5-U>TaAl|%47R29 z%WdFUN;d3UKz-X6oWmiCKi$Whsw?fFQLrwth&RXlezW_g)whMTefRp`T#(%NVSZTzFRB(rDAuhUUF~W(}|HM%!VO zyJBv7FuwIT&A>ZVYTxh{K1$R_v963o!+NOEx3K=RE6BmJcpxsJtzqfY3-U^gs|kfr zE;UW-$Q5+WtinKaLT*r)&KgBI-ek}*QZO3npjWpX8!yE(dhx1^K7Yp5`uTmN715Q_ zuiKF3*np!5e98eo)%4eXJkqtzGH&zD?UDTgi5{Y_DF;I)skG;V)zHr5@^9~i9+q-+ z1m&8%#?kV(;kmM&;K?gO_iy6ij^hHej!#bQ*&MhjsC2s7pct-2H3OWQ%h zZ*P+OK?FwEa!Kw4tlE+cezPA5ic}1O(|IyOhzv45cATlmT5R6s-C0V+Kx6xaeP_#I zXvGFHf9P@1x2fQ-fM((T;VZoo6k_qNo7lnjfg;OjHfQCt?-K)-W8nhyVJ3{rtXN|U zG6H94v;_i{!$MWSS(E(vY`+mT3m2&(S}!`k61!gsEu%w%)B$aRZiC$MhYaY0h#i7fa-hDb zlu0Rm=q&M$KFo4-j_6h4o(%kmD$& zUJfzPQg66LWoBGdAdjA~yNmQ_0u~B)Th*V&qfUT@#6 zE>tkK!A|^)2|idKI*k=+jDa+*qC2~_?+r=`Ja7lLVcH-d@BG~4 z#p^-Kzr`li+}yj4dzK!{(i)$%U!ibh^U(`g;(-I@UwS}b>4`p`K5hERKy8o?y)BVL zAk`fRtJU~St*p|rUF(Xm=`_47H6H3ZU5JsIIe4Og#(cIN)SZSlK36zlnpHW$d;u7- zrB7z}jVz}F$yj`CYEl+&T1y{n&IxtcM~MRDCxDg%e{4V0>aFw@Je4QZt#?Yb+NmF| z*qOiiGb^KP)B&h#I~Phnu69r~-<%wK0E5!p6+6be=XXMPZfy8KgspJU$=a$&&SJjQ zX=LXZI*|W@KhwAKfu4Y}B)KKgf$KKfom7Etif&%*v{^zf4rF2j5PP$B_+9%gv%u|s zhX-B=3C@X-IuqBV8+SufVduD>1{Y!|2OxSNNh{n5pP;MexI|56{J0G;sGj3jCen*i zTU5D6QJu2wSQjDyeNGD22Cy`!9&vpObIyA31nzhFOE}p@pfbB8F7S z6f>1ZM@AwiN0TpmrQ@veeSN22y3fx{wSW0?Zmx#e@#3-9hyi&CE|wBGcx6Tevv{lA zp4;sS>=_C5t8$5T{PlJ!$1$zP-_ zo)q$XWD#AWO3rfhjgG1zj@)ys{1RTB7f&0%1d_svSoXX2I*Q&)o9@akNV|0A+~nRt zz?}f8Q2zBYV@F){ZhlFl;71bTBTr$Yg98Jnuv7xlhh}`CAGr4PC!1CIWSkF$k!CJcuV}7mr!4W zyh7@F;E*Z{U9Zd~mo~+wW8+5?lL}f$ZfN2|vD+WL%oZs4i29}5^A6~l6lFb@8d;CcI*}Tax zc?#8xOp|QA7X9oCA?dss3PJ7D(2esHTJA9P+3e@D#M61B6Y7zpt%|Au zdi_6ENP#5Njy$rr@IoGIqKXwk&{pO@fI@3JFrAuqy(R6CZRx>3TtS_Vq_6{w+j z4bqPLGqmXkpbRdB+N3Bq*={k|USF?8EKm6xS{8a{rv*?ctza8^eCD1tH8owZMf4w#MOoovI2Emfk6*hu3|}}#nT3XK0Xw|* zqIuqLAM{tx1(M7PIrrhifBV_L8OefqEnAeL{m1XPdLCVDf~T5M!T*lbO48rj-*4}F z%YxL3RYzSz>f+$~yNxYe|K0!iVd0vuSQv8QqD*BCE{YBR`1yrLv--#J{rUF%IKIET zG(T?NA}901c>i!Ge>S6UiX8vt`_9{k(SPRx{MGCHILiMINBQIUenjE#xZpp(_yJ=6 zinxAYz`sMjKQQ25Pv!>(TmXwa!Lc*XQ{SJKKm-Q;)&+cV9dfNQ*!Y^{JG4LJj?6Y%DP+RVQm6j%E zkgA)t+hC+6Z(l=eYs4T_d85SivPGo!?%nXrBlYyIE(Ljc8{kgnos&Fppc{xlb+H|I z&+4;Ae_tB?cA?c5>Z78l-ug%R=dXAD|HXpPnhi9d^3oPAR_xgXAqLy(+i^~NwwCW= z_vwc_VDu%^w64YxnhS^4x*0aw|H~1c+vX`k5o7nc2<$nTD55_w*8R&n(Vc=nQ`R(L zxM5Cvg2%<+|Dij_Nvu-P)6=uQbm{qiIXS~?mX@j^d-m*!EiElQD^mXMoj33VV*UL5 zYN17W$~re9A|e*5&1bc>wddSW*ZfsMfwV!YVbNiOnVFfms?D;pvaJ5Lz|wqgVl_20 z(^IK+ir1>~6~DpE^mJ^MW|CHHRfM!-PkupxE%4U*CxHypy<)`*n_qtUCGXg?hrFDe z6;ZZ?vCSA4I?RYMjB43GG$hiI(;fP5_+G4xQ{(!3`wx>~n88ka) z)`k5is{ii`=<2sn`|W-D(eKtj|4ZUgRIkJiIWD z_JA`Ohqk2Q?x1%8J2|b)ymMVd+*4>qg<88dc~jlw>i4|cg@0OnT7Yr zs0O|xtS97N2v5+i5y&N?uy-U#)N!OGY;a_xdU|#?o*1%6FPLld=J#vYuI*lZ`q+@B7H8atE+p!IITf;X6D<&)QLy8>Elm2@WraI;_p9eAOGzyJeAR7bv*Fj5AnbL z-I1T5!Bce;qwvHG5DLizXsYGd_Ex*evSDZXc`fFV>$)r>W;M-Aj48uACt+@K?HVHN zb=eruJwvpxwQgtr&C*1kA7R3PVLa7ybu^0DTkc&(c7hkWO6A={&v3wM25_!zEiF%r zw-Ph5v8>Fw(Sd>8GqbZHm3nlAaO~j735#hliqU&@qT}CpNfs_ci9U1-1rsQ|+}t1R z?d`ko+__^z+RXslv?()APk?A;Ab$W)#ya~6P9z(`$Rp7^K%$l%ajS_}ciL{t}LQ0B7G#Lku z!~em9$HqFlHk}%Ga&s&E0v}UUPgnO8G;v}lyfLuv;HKtgC8b2N(HPcpkjlgVJ^U^D z#S9Z@eEclT06%1VrpCx{oHvMeW*R3U5uim?(;kn~oRd0m;DDxFF)-yC+MpZPJG4qL z^x~i2`XYwwNo6~iaphwcc&X-1nl$lOX4phIc-VuQWq7yL*x1<3nv8Tq=Q6w<)8?&P zMTZ};f$Td~R@@?Dkr(^(`!<8_SA)(tv}}U8z(Xa`1(VRjx#nGoZ9Y@M>)+YF;LL9y z+nzE;WOPqbk9Bu~CdXtb&}DmDnmmq~|JxI{)j{JV_$rf9y`oqK| z8(pUxFXQ1*WGrI|47*G+E|C#K#$Ubq;&W~7*)81MB5+68=I7^?kmLUSQ6RTX;Q`ww z)2GG}iQ%%Nqhr24D0Afx4G*h?h{HsRz}8;LYhNA`+xmuwKL({dmTP-;St);La8M}( zI)bM{q#Z{-*gHDL`@@Ud!lTYhO-*e94o>Rt#s#y?mSEw66uhXBsNcVwqLSK?G3?qH zuO|kxzfz`SI2oCzgMEGP%OrMFg@qXz1BgR=e>Ya?jU^`%UXcmFuuM275~qnZUSz|R zMvtW{{FlxD*Hb%}xJ+jZ8Ron4@;dbBbynVZK_PBcxQ)MDhA(VrYTB}#(Z6fc>ewM` z4O)38P`GNLSuGSCs7b@k^~ES^FvL!kVL*I-_UxIPl2X<2W{jB;6M?@)VWFA$XIw7a z3d_vraN$2cT+UDoc-#9#(y}F2D+!BrsrVxH&*4F2k0&z&gr~l!lo?ygCbiOedQ94nI?Mz_|rcj8x=@)f4X$pP35gVhyVhNkX z*ya~qmGj*QJY$7UZ>1^tU@zu~x(r~(Xv~-dVLJBMR-iz>Y;)A1uL(iSNcWnW= z<^eXyOhNOw`P^Jw&9NWx^=-J|Gp)Q!@y_8`WiXbmszFysg7fWkzO~?jy|Gy5qA$Y# za*T)2G0M&LePp?)5E=#itf}(Jirw^#PdEXlx1Cpeqq68?RRQBqdHX6UDQVN`{}brk-X4W^xd)tEw{Bfej|2sl zUHf0hnNy=={a)f;V?)%QkKqkw(}b>6HtBykXMQ0N01z+d&JbEgqj2zrGwp>tt;taM zL{M0PjSI`dC@Iy&3wyyJCeku0v5G`SMniNhu8D4P0WTLN#>@!mI$#|C&zR!n^X0p} zFyr)4tvQotcxNAMXnNukE@_G=u=J89<4nJic^QTnB*xqJn3ds&j)3QAS_)TkC7?DH z6&0$kF5Sce^C>e{cdo*mBC{xI$u$2C9FSc*cvBdYRJW!9qcSX@_{tFX_Y1V>7r~E@ zu+tQR@W5Jz7+J#WiLdX$9ivaIS~3nucC?m^b2T&{gCQxyp}xLdCz8MpM!`EZ&k!N* z!Z2UFCu8YK?!Bf-n3Gr&J!B+eTW|-(g+;cY*6BFcZ5uO5|16R7GqvO0Bm^bC_ojb;l{3c)& zj0OX;;nDeoR}*mWCLAyp1_aVoa4BN{^-}C#{;C5H?qCv5cAQ!2o1Uju*;w5aB9>V-pP* zcN}@(%O#bnK2F##w%PT>A87r*TsI2rp0NUO^+8m^)r1M_Cec~O6kM^1Q`og*M{dzS ze*9=!!b_qz?!0kl4a3#NrMA5j=w5(d7!I3YnO1-+$Hl&XFCKd z^%)uSX^0AIz>c!!{a@k|>7CA*bL}wxl{trRJ}a#=w0_ac`G*aO$a=n6kE8v9SjSBR zxSRB=(?*9@bu^yGCl^j&jSq2a=~Z5s2n~Me)!z1+nllgJi}9$exiqbD0#R=M`S3hM zO7)k{=F_mryuH1h*MepXkeg+o7cjD%`Lq#Sa=<>>bmB7X8YdeA9B4r%a?^ZM{^e)J z@i6SPni0}AZS4QYn_4UeyzF9HCq49X{fRRCEd~oiO^e!ITPv}ZXGx_Ob`E!p5gZ(x z?}b5Hn9F~}w6{9KTKdLWxK&%GX1^5>PEBs5nGjwNkdkc2b6=71uR3t`5Tfr@FQF!r z30Yb8(SQ^&zCM3;jAc$i6Yo5Y*J?GAW7%dt$-4)GHw)9OHVyZ97UjTwf8-?r?7P-8 z;9rm7%*S~z;4dd(L(W>=yj9FtOgCPc>E0wR^l>1nd<_ORR+)nKcLVX7w6)ol( zkqAp&FIY>cQ&D`p3EA56&7HN>Yu#;aZTmm_rz0lZIPwbPx-w}$Gx%VaFL>t44wMl{ z0pti5q408XRh{^Pq6cOD`t|WajG$6{A;)%n{QzzaBSUd13!`_Enn}iBPgCA`#i&CL ze&65w;$H;cDtU6iTy8TPR%R@|md^Ku$Ou}AiF5u6hVk_9{{Y2z&HXeC)dY1}2 zEhjrWIGO~o1Va(%csJg;412l~LxbiuIoBEkRF}MvqWDW<;B5;uXy9ssXK>PBn2Gd^ z0ftCln*O_;Hzvj)a_>xCCH)VyFJxACHiqt|_=A6^rCl56B|^B!2c%Cik^=*VjI!_N z(@zw~2$1q+CgSVjR1$_C2s4DeFv$7smX&~fMD%TZs%{yco#yZ7*Av}}zeMkbS!?9$ zx+U_LT?(Q%GTj(*zTAyLSuC224X?EqXw>=VFuvj3CQl&8xt$+w%5qfI>W?Z4zD*mK zNu*Xa(*RqDRJ}pKAPZpFS*U&`z_c9rO4Cp6P@)p$5TW2_lb?N1<(fvaiEt%s80Zaq3=8El<5_@+jOhLX3?W}&Jx_}Cvl&HVF_&3@)28^Sw`m!ZL`l1fbuO5q18P zN5x9)&6_u-1=yEHsCBsk5@BZWwSvub^Buz`g0aBm7zF!nizTpa%&!y3`EsTBHwLN> zf1`Z+yJKA=b{$578Qq|%>8QXyXEIEy5?p#Ih|yh@OhRYK*F-OW@iU_wQj7rze~h!{ z=H{jqE3ouHc)O;(Hz3~YL#b>8R+UwY85PUiU$sPMY$0)kstDX|$Ud1E@Wxq5jPY&x z%ia!lvo3)GL5Ma6Xc#!Iv#)RCc-;8@B_i#AQgY!gkAr6B9PuXOYQK>V6>hr10X+L$ z`73bKA&D5gTP6&q$I8HnGU0cEufxG(tAKE=*^*~#l2BA6n?eDwqA0lhZ68!BEL!sq zxEFn|?TMaD!YI*|9gt`4N})u72QkASd}L1GWS$Yi?Xe_3~^t8zjMJ2M=$oS`#~pDE1CJG7hPlm4J#w=kA5 zMkp$B2Nzz*z7^cf<+1k0Mx6n`rowYjO$ml-4Zn#`l{R5I>0 zT$3T9z}ky9YH~X9H=H2cAR3=hJYL%NaaG);BDOC z37cNV0EyIH27i_RbkZBk`xy}X5db#ikQ_R3H$ymyF5FBjpG5lvDWG^V8X$k@{?Okn z+58TdL?TN-v~P|9Iw>QAI=M!ib0OOF5Va*v*#Y?I0XQ};Q3~~ z5hBb9EHp*-&};$Kr>lCP`Ey|mAhFGvao(dCQ1A0UfMw`p;h&v;e_{*=HP)I5g3OqI zdG{~_O^Hw6#L5bGx$XOB%if~6?Is2@*zJ+G=Pq8n*x4PpglvtjUfyQbr9kwpWoL}L zn41rZYGP1rau;i&tzWw~Hi&^#O*U2~e?)i86h_NqU(BpeLLt17MAB@^w>KAp^p3kX zg^ZiO3B`oonh^q+I)}d?RR6jm>%xQj$uX>_rw1ltprBcbmt1=Ol@`{W=8hJ^2ba4QqB zA%`V7tqyuj*r@JP_18IzO8x!uo{#XYf*rqNR39`SYBpwMNabZ+vV$hZivlBZaZnT> zLspd>eh2V#PF7Zs!$^ycnU$5AFarv|H9LcCH_}2*#b%zxy@M$q$?;rhsJRyc=CsQL z&t?~aM5>5Y!i-KT)Z8W^28|m&JAH32ZY|>?XX!$Ql9hEJV#z}gJzVu`VJp6Vh5+3H zHlMQ0X*~OswkR5$Wo5#A?Km5?|Jg^0L_#$h4P#lLFekB_26?v-RBBCz>42i3Ui&>c)<2 zeXAcnt;sM0eV!_?jhmQL3p8m|mwbcoB{*R!6oVA{Aoi$fO@jqvFl8nC70kwO@qLlV@@hQJmInr+d`zk4uM zZV=KqhC$CFlZ1ghVxXs|XJ#w>n13*)gKY509ZaVH6PW_UA0E17!!RSm8~#gd{Tvh= ztzdkW6;0gE?ypq5gj)<~{Q<6yoF8XG0_d}hwo$qv%$UDkD7Zses|nX8Y&F>q6>%*9 z>b&54e~Y}asL%vW0dS;}7)({ECBR()T{cxgW|6BXWbjIF0Bp15T=q4c%*l3s3KXt* z1D6;tJ0cQ8Cg>Jm!1%Y@apW?%b_cKyg)w~p|K_2B;7su~5FyMtp@dBgFaQie`po(a zWSpUJ3~3-U?V?Uw4?%+RzZ(1Yc&PIK|3j2ZTanu;#z#pvWGj`_sHKu5l}m0@+1=D6 z2}$9ot=%G~o7G*hr4o}Zg2dauzNe?hWr18tLaZSOzU@>lked%G9SAiI zxUvWscv9{mq64UDY`p3<4*tz;R4RFEZ%@0Z`u0Zy8N|{mQ}_mK-#GYv#&xH$|2*XL z&*Wj?-U?UTGA$dhAN5#>0~mfV$_csxO0JR*fH|ynd@>FY1dPo)f1EXodjbWEX2=b|k zV=2I&8yI{fDCtEYlk~2Cg^VClKYj!szdv2O4Bnw}xJ|i7{5fh1F#M7!e>3YKY=k_p z{PW4_2i}~3v)HmQP3>Hy%ITeSU$_JG%1@q3PyP!`g^20Pm;3Yr;#&P*cx>{eeb1H9 zt!PIUQimfrj6iwcWT|z@Tfz1({OBW>aTz)lHr`ZY{DbKW`KYm$}*gyCGPB$70ua?13$&sERvSr9k4W+;$wY+iAitlJp zO-)Uf$_M{MLNhX&>zO~!&kyl?+tO0%2Z7fPsr=CjOLO-|OF_>_OB8~>)<`OI(Jp+? z9syiRMlZf|ry1kpATT13#x8m)HN(db5bP@tA(hP&dv9+E-tlDdpN3zU+$g(XXf$KS zj1?ob-`lKI9x&t+;K5@Q@Xm)Xh>}Jn<@(q~0O0cp9H4n3s50-B0_663`GA~o7n&Tt zK^bq9=i8_4D@r5R`sMGh1}*VOV0JH3%GR8tkV<_ef-xAsdoqAq!7*B6K$esUa-o#_ zfKmo!bQoUP5cp(wMM8=zweXLh|7pJe#T@>}cOC_+!deKv@_iwJ(am8Tk{MkKL^0zn z9q7%EAev;q!JkO*-usysG?Y?5uvXZuZ{w9U#u_zODnE-aU-cs`T`v40v4tAVBGJ?R z-}f-#zjRMkiUj=mQz6BGYrd5z)Au0#CV&`#&)b2H@j)N7zIOF0B++0A#3Lmq{&Bk; z6g{0mcTZ&^#bJiuUOJ05Ugb9xHUWKaFwifo_#c=5?}Y79hdLmvQn_;5s)EgeS0hY< zSgJv0J{VK#RB%jW(3QM#8jWVN?t{|86Mh7te|R4P>Yac9jr{&sdD#dG9iS7u<#|2y zIbX^L$IT7Qr+)cn#+<;!M{$+U@%@XkWNCYaO1sGta(}Z`Ft+Nhoew062#wRx*!V&r z>qjpUpU2~glrL!+VdfNeDaXE|kn_s#V{E_ViaU;{A%%c-9r^>7!7@+9OClmFYU&UA z=%S~5{T;ld1p@9w{ z8uVVhRf$Z-;XNuVKX-%Vwy&;6kMSR8rvK$3xo&QSwcoPJYp|81X|sc<9I+inAU5s= z>5!^xp_}eGj;oO=khYj&*lO$vySFVb-jjtwdsd3Ke9}4wgYT4wVCm+z-hqLnblH*) z5Y{>E&LHQ1dhV|jNx;hS&X+0G+y4q$;~Hp|vaH;Er zKob|OOQmfYtQB3CQGQ3w>@Sp(R8+OCA4QA1@Mkc^IOtn=sFUZF_b5Kcb}wy=0fRTgMzYky%2|Qmz}mlAXr?p3)%P#0*@_`O~Kmyph+D#xMo=PH zRmPr49hNbRi;C>qrQRy>nFx=0I-1p%|tWOMe8%_9-PG2D~@HEV?&ao&l&(|%%-w59FuWPa-UMqc#u!6 zq|^EKt5$s?N=lk%us8&WsUaWUY!#^;eb#bz zhQfA13!l$@n8J?5@uAN8rw{3QdtW~ZSQ~9T6g1$vgZEQWpZNZY{5So3!ha{2ZdN(r z8%o^e+pfjgdlge4`jYwCat8d z{oD+yubGN|jnZ)H%AhASri@27vZqrfV*1P}0(%m=`m(6d3nK-rik=9e(PxI(H4N#J zCgXT)?5D?lNV)W}7gV#C4m>d2u1 z<}n<%u_&Ey^t8CxRlaRaz>lVTSLL~Dt3QY}DUO}r(MP-tzwnf%J#pc~tdOF#n^h5; zbVu7S3!P)P7}ai{b`Gy@IxQQ&${N4D)B3+G??0X8KMwnmzv`N^?0~2Dm*3jlYNIK) zuik#z{X{9}soN+1@7&PM;zwzXF%JiNAN>AtcC+8_tP`=i?U`+{jcGR*s9naUTLS@`|bBEh+QwOQp z!u18XgY_9?Ah#%Wt%}l#FITj_$IYb2{PkpFRTY!?^~ zf7r|4L)o+=zN#T7(bWY;BO2@E?}Xkx=+ZmukqV z!r_@v7BY!EwnDn+I{sVIm}h9EtxCiEZr!gjBP$E1_yI=(KGhpL`qzaYY&;u@+KdAtKY`> z4Dwoej6PQNnPEAyo`=K&?vRyieJYa4j&4*vS4%sE>Bq}A+9J36ST5!` z7?(&TNK;$cOHCv;xpYHhAqx!&f!9wktWjO?lIbEFJ7tX7jONO+21vPNdLm_?-%gK` z3r-NU*Fe}3)o1YCq}%{hG))shKtZsfp)YA&hA$7_)FJtxQ`d zqcy4Ma(r-%_ms9)$~$$*A01L;adYq$ROEgRQI70+sH6&sj+D$7;MF91JEl!F&L8Ht z;nm}zBKm=LCblsdIjiA`3fo@B!kCAo5y@_!CQqvzcfDjdsodsqh0M8vdg|qX%;`q2 zkAKB;FQpy#Kg;OYWH2T+Ke4rhc%LdA6iXEzAG{fXYSUO&V}b*C(q2DontGh}crJEp z_6TRU${9*mq5p~YiL|c?pbjevlB7JcX~3qA!6_6%C}|X5M$H3kTi0-f`yBqwrt0eI zvlkuKky(rvM7~mhS3ohy{-!0>G#V;mgh3SMH#PZ%y~7E9+8G5tK71!o=iEuObp&pk z7KE%inAeJBt~qFVi@M5H!B}^9!D(7W><}lcO}AZP^;V#X*|rgzAux>C%x|^HII{CR z&9LjsFa}e7qqebz?An3O4A>-D>8oB!z;<^K+L*sy>vBAMD8J|)Zm8~5KqO9BD0F>N zP(~}TD8O${JjV?$!K-^131g{3{*Yvdj#DMNv#5-ERG;a-;E>|g0BsiKdH_YI!wX=c zHsT}|yns%Eu->6jQ?=)roEDQsof=NHorr9mELkN0o~Ek@SY5j8!u4AMfDYEBgt6b#u|TYGKPLA2E|K0Olo z^fMG-;(5JL++TTSG+D}vyVwMOfM&lStPd_S+I~mfEeG;VGC8C>&Nhz+g#A*)?@&a& zBg%*8DweHKWIX0;s?Y*C~!gC$KI3Fj~en< zKJ7!~;;M%4{|&pIJQCrLVKaYmaayze9|YjP-M*D$Q9HZ0pl~=Qsc3EdT~+MH0z+x0 z?5;`g#qM4hUQ+28X6+^<8ISmPrkUMU_mM`0#XBLWT5qzmvm4CI4wtR3V|bu;(Gl}p zdJ)Oa$+=L^kWBwXB}m{d{z?&DQ-1xka5GMSWjUR4&A|gsnxk+Y(P*KFN>Zc>8M>(N zI!ZvHx+voaBVmMl3W9mmdB>T8Blssl$vs@M(qgB~Jy3s3c@@rjL;PO2VW=a%NEA}q zarSGRJ8reAM}I->Q1L?j=^gFux!S7f-RwMvyLzMSIL>%#IdwO`$Q!$)HKErDU3jc) zS8H*`LY$Db4uZGb^w>;l|jgUWuqzeirq5mBIR8NIYfUY z6}j*;!!Hq~rl$6MNJd*bKu~vsvSg?;aF?b)g74l0Da~!tSGZYW2cPeS4c%(UoYh*%31B1ecobm+7-CMj`qf<<3XY_t|YwDWX-=l z<9~auLvCh<1Fli^cKT*fBgd??WuoPLUS#=Y9FP#Ck4Nx!A%h;P;VdgH3R0HrlVQ7} z-9M2$G`66HaiUbR^uV{ud;p~&x`>N zg?9&`1+P$GhYTuG%WQZE8g9?F4&6f+;^B9T?Ws)kdX>J)5k6CT6bIYb? z&F;my_YfiB&h(!870_piPVkITc4Sc{$ywo1JJ4Phofe(aiXDf;uPBNPv zL=em?okXB!XKutEiHX^iG7c^?WqDi4j%B^T3{{{|@DQpAcjiwFZkMrw+Dda4&zaD@ zymU$#N4FP5z-?(wPdxo1KBwwpibop{kkM193*kgkJJGW~KJII1C}+-=Lkg~|R&auh z_vyEp)IMG_n?cMmv(~Nk3h52^3($#gT(!(ytx8>q)|}%Csn7!lycUkRb{BLHDRC_c z$G%C&(M7o$?y|qXf3VdZ^-WN7e;auKroOCgY%Iw*x=E@Nno|G(NKU`sA;on+GYo}3 zJYpt-R?-D`s?faOzZDSvXxruRAY?JJ@|#vT!$_b3rzT|SBG1XKPmy#!MocVwp|pmj zaqFsB>7^2}ZBgmgw8k51t+tUNx%{d2HoB+j79kl_lR~j&X6-M!LI1x||GU)-dDDVt zwDY@qyPQeC*An}%{mrZw&p4HKN#t;+>wK-b`YPq6_MaI+?|HnTPocNz>&BZp*>-0X z31c)CXF;QHH!B%0_}CemNer&pjSr4^7ds(`HUP9s&HyDYC-Pq%lrwKYmUqPEZ zv4N>_NPu=O@)?(k+JCOXvmb8~(Mwew=VA6WpHPT4R&*MoGrmx(cGW(sylDD?yde>_ z_MN88K;Sufi)6=7wvN|m>Xl!Und#QY?awp3_n#+n?wJ{q7UlBk0o1<7=h(4{WTevY za*6vIw~|_E0hGmUdj2Y}5#Fdk8MQ!Ix@(Tb&J?l9&j)?-`ksQ}mRP^Q72GT}xq=_| z-T2`_P-EII&!tul@|ivgK;iD;edV|&>IIfNXfku=!?WvVRg773P)kdo{wQSl`sIbl zM2KStA!jV~KH=|@lYBx>ds)W6=18I$O+J&i>|=$rK&trm{TZpa zoQz3QIM4^(r+9x2TXFcs(WQg6JGS(2fQMs?sdH?$Eq5G%R@lQ+aRqM@!Hu4@IQ&Ye z#TJtpPuXN$@bBgEE)kR}9{JaDFJir=9ZwZBv6$okWj9qAt92D3w=x~_{Dy#Ld~jHD-M_G#peM;(@ah8R^e~Xieol7leFZkSHv4NhgwtIP&VrSn_^A$Q>U%`+Tu{V1zxL zT$)+a!!CXG>Xi%R##7iKS=!B;ce9fLMAeT0N!sfNl&YKU9wG0OR-eM@BRS{M)q+j% zwEj3m_4(AH1TwW=d8aEV6Ov7JOIh;XSK62Z_3`l@7a`Xf_0V1R@#30-k$(qEHD=QU z;Z>2Vmu_EEsn*W(X%-0+3~pD>{PLr7_~y8?Gx@e5C0!v7b4w>q#k_enU1g&Sc4sZd zef*fu+|g0cYU52f#f}Q5;CT(2RBvJ(1t6eWWD`ZG;iIY7seQ;a9nDh5>FI+WsNr>W zL7}CkWd%=l@~?kh8FMyAt~Cf6Ra5GM-(3_l1h}ZpSr_Hm)bZPh5ORlO^$LtSl#gB<+V+E^l${|UdTVT+eac_{ctHH&r@T+ll(}dSF>b{&Dk28LC zymsPvb6#5g-u4mROx6NTq$>i%l4a}BEO987=lv$@Q$t`g?`Z1yn=>4XRHD*ngy+Qx zX(L@XBX4$~+b@6aTI(qoWBgIiXLX8R5MI7c3SNoB7{18pVT?kWYdZ!>k-17A+n`W- z*jTs()SlEb=o3#l8E1$E-*EWG%trMzTeViY)i}PXnVqdJ_0gNw^o(Co!C&`|%X`Hg z?^B!%%lvP^`tLd5ADmX2r}55tY?;Sp@0nXRPO37Y0{LyF$r;xeoaCV>h91@M+xqdW zH-m8l0&^lr(XiS$X)8e;dQLA=SPX-oZMVj=k3~kNoE!m|Rt>^z$DhAW-I$g(V<@za z0O8EaSrMgAE@kr;$b@1}!BgQ-irzTi3*g^SCxk$#N_lHi_TJSbo!rwMvVZ^f192Qh zmW>TowGCS`XO0SZ`d#!x!}LeX8S^LBewf>$Br478T3O5#z@RoZQ+`@hrOyHdN3g8mq~i->bwD|KzH>|Vm0~J$*@x^&bI{TxD zrrAP{t;KUbsjJAd$z|Ymo$SMBDBDJUy3*02B4y0YH=6L}GreAv6uyQ4bN7@G?R>K& zwC2zKucvfFt%gU`$c;n{u`KH=9;5VP7-@lJASwKEx$Z7;z6 zEpv2kps*b0*ijh5e>qNf@8{($uVlz`&CFP%-gw0LGG{qc(b@TrP-BY{mxNh&$hEig1}T4Gs4>6OwZ`YmQP8nfFni0P0d8@9(TVsE z)*`yinOoy;pghBN8Uu9sMA@PVqTr@` zzs-{|pAnm+yy|QIzz(1k^mf8;R#e|iNVdJuEIR;;Dz@+a>-vSc+pvh44E1R&@z@9N z`4hL`dL7W?Lv>bbtL?@&sYq{5!4oFM)zCr*wZ0^sw+hT^J6__i1J()R0^SktStsHg z7C$L4a~pp;#QFM zaN_|Oz4c>-*n1t*8w}T>8>p9$j~j;G6y~HKm#+C8f6X-r|FS-ZspwQCYU&XT$^8Wm zrz^0!=R=X;lst zbmaP&D;StE8!^scr3C=%^X_Xn`VmtcNOqJn$#c~_1xk;@3R^1Xg=|wCNUr_b6 zDl_{UBTJpNMbOM$v!RN&C$Q16)JspYwBQ~4@Jdo_Yg@^Pg{+wOfgM{Y&-1*FJLH5* znVSqDB@sAUoo$jqMk-*0a^p!{GWh8w(D<`+8J1G!plUkqA(Vvg1I7H?ZO#<)vl97U zcfNsq!~dS6Y_nIoE7DfKYk`)jm%&Rmwp&rqsRvss#@;?-;xhM3`PSI!kZ6^7*;N2* zcQ0v8Ba8|+q*-dbmM>k?iaO(%g}c6da}Fzx+o`M6-KN<*T2j!_CAq$QwV{0J97BcG zSQdM;5RLR~(;tH3lzl4kes97U?=r|gXDDOfoV?4Nb&6}dW_S>9F88jmTY-ub(6*`` z<8&#z-3L1u8QHL)0x_H6dVf}nk9NjZu3R})Yr>OcCncedU|VBV5=Lpviuz3If)6cm zLR;!ik6nQ9+$rtnnqOgW$7#Pf&Nxm)GwW1DD?I-?PKTL)ltR;lk13|TSGUo4l9n`_EN{(UJwS%SroGwbkE4m9I8ME zE%iQyH3l*mnIW4XUR~3R_rY$h5Jh5<&X}=bqH2Ucxc#vixvP`IzAKYZ`oZA=e7Ug? z?Mv4FV|mbh=_xi5u*WX6D(f|Xq(@;OYu|S>r(_*FQ%CKK zIa|*VLjkyc^l*fn8!40T_DdZ9?2>mi2om1r&71cLo`fMAU#wM%dcJ4p+@7cI*zU?! zUG%fh$`muA_T@LG{ym6RSX0-s5iR}F` z5&1r4s>FAdFTqTf>8nU5f+RMWXdZWe(XA2ZwbD>o^zE;C_T3wAWeY=hG5WaIE+$G# zZ|3hNDs9ZA%s`$G{$_{M2(QErieHjhnkdeI{|s{k**rfOKDN>uD_6rtdp;~{H^<2Nxhm#T)}QS07j%pa+^=IvO!B=u|b8B8@qgSbt^XVZPL1_gDY*+YL{z|MBB!%u%6#qFwdaX@{7q_iT}%jG?tu^MluEF zrJU+FZ1?-b=5C&JDsA=l%%cxm`5nW&Grw8Mm~UtSQg_~m&a^urDvmA+UbG$wRfK&I zAdemVrjBIH$7)M*=3!T-GbY_?kFLOaZS>VTN_ML_2Ap>^tV}e}i&!x!=xbbHbj?ptms1Lg1&dqn^csPpwi$FMg)>a=9p*r{gfYO~8z zc68N^_rVLOK7ZviM9&hiCx${UEufr&w--f zv@r-0#_U}m)v=;I7AoBrA*F{z8^?c}lA!V~b8Jp>B(xnk7-~O#HnQ*d-SDsAm!KZ( zyrQc#f3wyVWjX9DaJ~}&uXsI~lhOBX{ z53kamc(tsEF=-|0b8+0fFBYYExxvA%6QhOT1i>L^K8_H1d^v#f6R3UNBw zfV}O=H%~75@JAM9k~iM>Z^dqn_5oJSTA;c`In5<18eSXU^RsKg){PSu{alnDUp3bN zd#A7Y&URp{L+xGbFx4XVbJ4u^P#xtl^%*rN_>izvM*t`4nNa% zOpBg}{ZxO)=vI07%_f3*$nlk+V$oN8CZ?)?d~U12$JB30?d;*c7;!V%%bqT8Nac)Y zWhcF2wBIc2Vb?G89O0d~p)Q+(`n0n@&n1$iLUS{)23MWZ`kUw%Ga=SIc9$X_mvxO)lNu^6x6*vL#i)IKSqtGj3IKZaIG> zUW>fJeY`;>zNTrr+AUkRQqh;Y3NC^UIUfZ*QjGxp9bs1cjdcawaYWHU>KshC#sHcQM>2&&~>Y0ySnZFs+#<3 zCqNlv!>z<{V(>e`3fU@7O`OTl&`^PHL-BG&-k`2O<$Jdw&#L{r)$DS5TeXbf9j55NdN!< diff --git a/docs/_navbar.md b/docs/_navbar.md deleted file mode 100644 index 1c416471c..000000000 --- a/docs/_navbar.md +++ /dev/null @@ -1 +0,0 @@ -- [Live Chat](https://go.zenstack.dev/chat ':target=_blank') diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 7e1be8536..000000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,38 +0,0 @@ -- Getting started - - - [Quick start](quick-start.md) - - [Modeling your app](modeling-your-app.md) - - [Code generation](code-generation.md) - - [Building your app](building-your-app.md) - -- ZModel reference - - - [Overview](zmodel-overview.md) - - [Data source](zmodel-data-source.md) - - [Enum](zmodel-enum.md) - - [Data model](zmodel-data-model.md) - - [Attribute](zmodel-attribute.md) - - [Field](zmodel-field.md) - - [Relation](zmodel-relation.md) - - [Access policy](zmodel-access-policy.md) - - [Field constraint](zmodel-field-constraint.md) - - [Referential action](zmodel-referential-action.md) - -- CLI reference - - - [Commands](cli-commands.md) - -- [Runtime API](runtime-api.md) - -- Guide - - - [Choosing a database](choosing-a-database.md) - - [Evolving model with migration](evolving-model-with-migration.md) - - [Integrating authentication](integrating-authentication.md) - - [Server-side rendering](server-side-rendering.md) - - [Set up logging](setup-logging.md) - - [Telemetry](telemetry.md) - -- [VSCode extension](vscode-extension.md) -- [Reach out to the developers](reach-out.md) -- [Changelog](changelog) diff --git a/docs/building-your-app.md b/docs/building-your-app.md deleted file mode 100644 index f169d1639..000000000 --- a/docs/building-your-app.md +++ /dev/null @@ -1,146 +0,0 @@ -# Building your app - -The code generated from your model covers everything you need to implement CRUD, frontend and backend. This section illustrates the steps of using them when building your app. - -## Mounting backend services - -First you should mount the generated server-side code as a Next.js API endpoint. Here's an example: - -```ts -// pages/api/zenstack/[...path].ts - -import { authOptions } from '@api/auth/[...nextauth]'; -import service from '@zenstackhq/runtime'; -import { requestHandler, type RequestHandlerOptions } from '@zenstackhq/runtime/server'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { unstable_getServerSession } from 'next-auth'; - -const options: RequestHandlerOptions = { - // a callback for getting the current login user - async getServerUser(req: NextApiRequest, res: NextApiResponse) { - // here we use NextAuth is used as an example, and you can change it to - // suit the authentication solution you use - const session = await unstable_getServerSession(req, res, authOptions); - return session?.user; - }, -}; -export default requestHandler(service, options); -``` - -Please note that the services need to be configured with a callback `getServerUser` for getting the current login user. The example above uses NextAuth to do it, but you can also hand-code it based on the authentication approach you use, as long as it returns a user object that represents the current session's user. - -_NOTE_ Check out [this guide](integrating-authentication.md) for more details about integrating with authentication. - -Make sure the services are mounted at route `/api/zenstack/` with a catch all parameter named `path`, as this is required by the generate React hooks. - -## _optional_ Integrating with NextAuth - -If you use NextAuth for authentication, you can install the `@zenstackhq/next-auth` package for easier integration. This package provides an adapter and authorization helper that you can use to configure NextAuth. - -```ts -// pages/api/auth/[...nextauth].ts - -import service from '@zenstackhq/runtime'; -import { authorize, Adapter } from '@zenstackhq/next-auth'; -import NextAuth, { type NextAuthOptions } from 'next-auth'; - -export const authOptions: NextAuthOptions = { - // use ZenStack adapter for persistence - adapter: Adapter(service), - - providers: [ - CredentialsProvider({ - credentials: { ... }, - // use the generated "authorize" helper for credential based authentication - authorize: authorize(service), - }), - ] - - ... -}; - -export default NextAuth(authOptions); -``` - -Find more details [here](integrating-authentication.md) about integrating with different authentication schemes. - -## Using React hooks - -React hooks are generated for CRUD'ing each data model you defined. They save your time writing explicit HTTP requests to call the generated services. Internally the hooks use [SWR](https://swr.vercel.app/) for data fetching, so you'll also enjoy its built-in features, like caching, revalidation on interval, etc. - -_NOTE_ The generated service code is injected with the access policies you defined in the model, so it's already secure, regardless called directly or via hooks. A read operation only returns data that's supposed to be visible to the current user, and a write operation is rejected if the policies verdict so. - -### Read - -Call `find` and `get` hooks for listing entities or loading a specific one. If your entity has relations, you can request related entities to be loaded together. - -```ts -const { find } = usePost(); -// lists unpublished posts with their author's data -const posts = find({ - where: { published: false }, - include: { author: true }, - orderBy: { updatedAt: 'desc' }, -}); -``` - -```ts -const { get } = usePost(); -// fetches a post with its author's data -const post = get(id, { - include: { author: true }, -}); -``` - -### Create - -Call the async `create` method to create a new model entity. Note that if the model has relations, you can create related entities in a nested write. See example below: - -```ts -const { create } = usePost(); -// creating a new post for current user with a nested comment -const post = await create({ - data: { - title: 'My New Post', - author: { - connect: { id: session.user.id }, - }, - comments: { - create: [{ content: 'First comment' }], - }, - }, -}); -``` - -### Update - -Similar to `create`, the update hook also allows nested write. - -```ts -const { update } = usePost(); -// updating a post's content and create a new comment -const post = await update(id, { - data: { - const: 'My post content', - comments: { - create: [{ content: 'A new comment' }], - }, - }, -}); -``` - -### Delete - -```ts -const { del } = usePost(); -const post = await del(id); -``` - -## Server-side coding - -Since doing CRUD with hooks is already secure, in many cases, you can implement your business logic right in the frontend code. - -ZenStack also supports server-side programming for conducting CRUD without sending HTTP requests, or even direct database access (bypassing access policy checks). Please check the following documentation for details: - -- [Server runtime API](runtime-api.md#zenstackhqruntimeserver) -- [Server-side rendering](server-side-rendering.md) diff --git a/docs/choosing-a-database.md b/docs/choosing-a-database.md deleted file mode 100644 index 44bec5d16..000000000 --- a/docs/choosing-a-database.md +++ /dev/null @@ -1,11 +0,0 @@ -# Choosing a database - -ZenStack is agnostic about where and how you deploy your web app, but hosting on serverless platforms like [Vercel](https://vercel.com/ ':target=blank') is definitely a popular choice. - -Serverless architecture has some implications on how you should care about your database hosting. Different from traditional architecture where you have a fixed number of long-running Node.js servers, in a serverless environment, a new Node.js context can potentially be created for each user request, and if traffic volume is high, this can quickly exhaust your database's connection limit, if you connect to the database directly without a proxy. - -You'll likely be OK if your app has a low number of concurrent users, otherwise you should consider using a proxy in front of your database server. Here's a number of (incomplete) solutions you can consider: - -- [Prisma Data Proxy](https://www.prisma.io/data-platform/proxy ':target=blank') -- [Supabase](https://supabase.com/)'s [connection pool](https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pool ':target=blank') -- [Deploy pgbouncer with Postgres on Heroku](https://devcenter.heroku.com/articles/postgres-connection-pooling ':target=blank') diff --git a/docs/cli-commands.md b/docs/cli-commands.md deleted file mode 100644 index 92be36169..000000000 --- a/docs/cli-commands.md +++ /dev/null @@ -1,131 +0,0 @@ -# CLI commands - -## `init` - -Set up ZenStack for an existing Next.js + Typescript project. - -```bash -npx zenstack init [options] [dir] -``` - -_Options_: - -``` - -p, --package-manager : package manager to use: "npm", "yarn", or "pnpm" (default: auto detect) -``` - -## `generate` - -Generates RESTful CRUD API and React hooks from your model. - -```bash -npx zenstack generate [options] -``` - -_Options_: - -``` - --schema : schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") - - -p, --package-manager : package manager to use: "npm", "yarn", or "pnpm" (default: auto detect) -``` - -## `migrate` - -Update the database schema with migrations. - -**Sub-commands**: - -### `migrate dev` - -Create a migration from changes in Prisma schema, apply it to the database, trigger generation of database client. This command wraps `prisma migrate` command. - -```bash -npx zenstack migrate dev [options] -``` - -_Options_: - -``` - --schema schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") -``` - -### `migrate reset` - -Reset your database and apply all migrations. - -```bash -npx zenstack migrate reset [options] -``` - -_Options_: - -``` - --schema schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") -``` - -### `migrate deploy` - -Apply pending migrations to the database in production/staging. - -```bash -npx zenstack migrate deploy [options] -``` - -_Options_: - -``` - --schema schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") -``` - -### `migrate status` - -Check the status of migrations in the production/staging database. - -```bash -npx zenstack migrate status [options] -``` - -_Options_: - -``` - --schema schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") -``` - -## `db` - -Manage your database schema and lifecycle during development. This command wraps `prisma db` command. - -**Sub-commands**: - -### `db push` - -Push the state from model to the database during prototyping. - -```bash -npx zenstack db push [options] -``` - -_Options_: - -``` - --schema schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") - --accept-data-loss Ignore data loss warnings -``` - -## `studio` - -Browse your data with Prisma Studio. This command wraps `prisma studio` command. - -```bash -npx zenstack studio [options] -``` - -_Options_: - -``` - --schema schema file (with extension .zmodel) (default: "./zenstack/schema.zmodel") - -p --port Port to start Studio in - -b --browser Browser to open Studio in - -n --hostname Hostname to bind the Express server to -``` diff --git a/docs/code-generation.md b/docs/code-generation.md deleted file mode 100644 index 8db1cbe53..000000000 --- a/docs/code-generation.md +++ /dev/null @@ -1,15 +0,0 @@ -# Code generation - -Code generation is where your modeling work pays off. To trigger it, simply run: - -```bash -npx zenstack generate -``` - -You should see an output similar to: - -![CLI screenshot](_media/cli-shot.png 'CLI screenshot') - -A full reference of the `zenstack` CLI can be found [here](cli-references.md), but for now knowing just this one command is good enough. - -As you see, several code generators are run to create pieces of code that help you build the app. Let's see how to use it in the [next section](building-your-app.md). diff --git a/docs/entity-types-server.md b/docs/entity-types-server.md deleted file mode 100644 index 189df5691..000000000 --- a/docs/entity-types-server.md +++ /dev/null @@ -1,84 +0,0 @@ -# Types - -Module `@zenstackhq/runtime/types` contains type definitions of entities, filters, sorting, etc., generated from ZModel data models. The types can be used in both the front-end and the backend code. - -Suppose a `User` model is defined in ZModel: - -```zmodel -model User { - id String @id @default(cuid()) - email String @unique @email - password String @password @omit - name String? - posts Post[] -} -``` - -The following types are generated: - -## Entity type - -````ts -export type User = { - id: string - email: string - password: string | null - name: string | null - posts: Post[] -}``` - -This type serves as the return type of the generated React hooks: - -```ts -import { type User } from '@zenstackhq/runtime/types'; -import { useUser } from '@zenstackhq/runtime/client'; - -export function MyComponent() { - const { find } = useUser(); - const result = find(); - const users: User[] = result.data; - ... -} -```` - -Backend database access API also returns the same type: - -```ts -const users: User[] = await service.db.user.find(); -``` - -## Filter and sort type - -Types for filtering and sorting entites are also generated: - -```ts -export type UserFindManyArgs = { - select?: UserSelect | null; - include?: UserInclude | null; - where?: UserWhereInput; - orderBy?: Enumerable; - ... -}; -``` - -You can use it like: - -```ts -const { find } = useUser(); -const { data: users } = find({ - where: { - email: { - endsWith: '@zenstack.dev', - }, - }, - orderBy: [ - { - email: 'asc', - }, - ], - include: { - // include related Post entities - posts: true, - }, -}); -``` diff --git a/docs/entity-types.md b/docs/entity-types.md deleted file mode 100644 index 189df5691..000000000 --- a/docs/entity-types.md +++ /dev/null @@ -1,84 +0,0 @@ -# Types - -Module `@zenstackhq/runtime/types` contains type definitions of entities, filters, sorting, etc., generated from ZModel data models. The types can be used in both the front-end and the backend code. - -Suppose a `User` model is defined in ZModel: - -```zmodel -model User { - id String @id @default(cuid()) - email String @unique @email - password String @password @omit - name String? - posts Post[] -} -``` - -The following types are generated: - -## Entity type - -````ts -export type User = { - id: string - email: string - password: string | null - name: string | null - posts: Post[] -}``` - -This type serves as the return type of the generated React hooks: - -```ts -import { type User } from '@zenstackhq/runtime/types'; -import { useUser } from '@zenstackhq/runtime/client'; - -export function MyComponent() { - const { find } = useUser(); - const result = find(); - const users: User[] = result.data; - ... -} -```` - -Backend database access API also returns the same type: - -```ts -const users: User[] = await service.db.user.find(); -``` - -## Filter and sort type - -Types for filtering and sorting entites are also generated: - -```ts -export type UserFindManyArgs = { - select?: UserSelect | null; - include?: UserInclude | null; - where?: UserWhereInput; - orderBy?: Enumerable; - ... -}; -``` - -You can use it like: - -```ts -const { find } = useUser(); -const { data: users } = find({ - where: { - email: { - endsWith: '@zenstack.dev', - }, - }, - orderBy: [ - { - email: 'asc', - }, - ], - include: { - // include related Post entities - posts: true, - }, -}); -``` diff --git a/docs/evolving-model-with-migration.md b/docs/evolving-model-with-migration.md deleted file mode 100644 index e4354324b..000000000 --- a/docs/evolving-model-with-migration.md +++ /dev/null @@ -1,65 +0,0 @@ -# Evolving model with migration - -When using ZenStack, your schema.zmodel file represents the current status of your app's data model and your database's schema. When you make changes to schema.zmodel, however, your data model drifts away from database schema. At your app's deployment time, such drift needs to be "fixed", and so that your database schema stays synchronized with your data model. This processing of "fixing" is called migration. - -Here we summarize a few common scenarios and show how you should work on migration. - -## For a newly created schema.zmodel - -When you're just starting out a ZenStack project, you have an empty migration history. After creating schema.zmodel, adding a development datasource and adding some models, run the following command to bootstrap your migration history and synchronize your development database schema: - -```bash -npx zenstack migrate dev -n init -``` - -After it's run, you should find a folder named `migrations` created under `zenstack` folder, inside of which you can find a .sql file containing script that initializes your database. Please note that when you run "migration dev", the generated migration script is automatically run agains your datasource specified in schema.zmodel. - -Make sure you commit the `migrations` folder into source control. - -## After updating an existing schema.zmodel - -After making update to schema.zmodel, run the "migrate dev" command to generate an incremental migration record: - -```bash -npx zenstack migrate dev -n [short-name-for-the-change] -``` - -If any database schema change is needed based on the previous version of data model, a new .sql file will be generated under `zenstack/migrations` folder. Your development database's schema is automatically synchronized after running the command. - -Make sure you review that the generated .sql script reflects your intention before committing it to source control. - -## Pushing model changes to database without creating migration - -This is helpful when you're prototyping locally and don't want to create migration records. Simply run: - -```bash -npx zenstack db push -``` - -, and your database schema will be synced with schema.zmodel. After prototyping, reset your local database and generate migration records: - -```bash -npx zenstack migrate reset -``` - -```bash -npx zenstack migrate dev -n [name] -``` - -### During deployment - -When deploying your app to an official environment (a shared dev environment, staging, or production), **DO NOT** run `migrate dev` command in CI scripts. Instead, run `migrate deploy`. - -```bash -npx zenstack migrate deploy -``` - -The `migrate deploy` command does not generate new migration records. It simply detects records that are created after the previous deployment and execute them in order. As a result, your database schema is synchronized with data model. - -If you've always been taking the "migrate dev" and "migrate deploy" loop during development, your migration should run smoothly. However manually changing db schema, manually changing/deleting migration records can result in failure during migration. Please refer to this documentation for [troubleshooting migration issues in production](https://www.prisma.io/docs/guides/database/production-troubleshooting). - -## Summary - -ZenStack is built over [Prisma](https://www.prisma.io ':target=blank') and it internally delegates all ORM tasks to Prisma. The migration workflow is exactly the same as Prisma's workflow, with the only exception that the source of input is schema.zmodel, and a Prisma schema is generated on the fly. The set of migration commands that ZModel CLI offers, like "migrate dev" and "migrate deploy", are simple wrappers around Prisma commands. - -Prisma has [excellent documentation](https://www.prisma.io/docs/concepts/components/prisma-migrate ':target=blank') about migration. Make sure you look into those for a more thorough understanding. diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index b06ee2cd4..000000000 --- a/docs/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - ZenStack - toolkit for building CRUD apps with Next.js + Typescript - - - - - - - - - - - - - - - - - - - - - - - - - -
Please wait...
- - - - - - - - - - - - - diff --git a/docs/integrating-authentication.md b/docs/integrating-authentication.md deleted file mode 100644 index bff6a3154..000000000 --- a/docs/integrating-authentication.md +++ /dev/null @@ -1,228 +0,0 @@ -# Integrating authentication - -This documentation explains how to integrate ZenStack with popular authentication frameworks. - -## NextAuth - -[NextAuth](https://next-auth.js.org/) is a comprehensive framework for implementating authentication. It offers a pluggable mechanism for configuring how user data is persisted. You can find a full example using ZenStack with NextAuth [here](https://github.com/zenstackhq/zenstack/tree/main/samples/todo ':target=blank'). - -ZenStack provides an extension package `@zenstackhq/next-auth` for integrating with NextAuth, which includes: - -### Adapter - -Adapter is a NextAuth mechanism for hooking in custom persistence of auth related entities, like User, Account, etc. The ZenStack adapter can be configured to NextAuth as follows: - -```ts -// pages/api/auth/[...nextauth].ts - -import service from '@zenstackhq/runtime/server'; -import { Adapter } from '@zenstackhq/next-auth'; -import NextAuth, { type NextAuthOptions } from 'next-auth'; - -export const authOptions: NextAuthOptions = { - // install ZenStack adapter - adapter: Adapter(service), - ... -}; - -export default NextAuth(authOptions); -``` - -### `authorize` helper - -If you use [`CredentialsProvider`](https://next-auth.js.org/providers/credentials ':target=blank'), i.e. email/password based auth, you can also use the `authorize` helper to implement how credentials are verified against the database: - -```ts -// pages/api/auth/[...nextauth].ts - -import service from '@zenstackhq/runtime/server'; -import { authorize } from '@zenstackhq/next-auth'; -import NextAuth, { type NextAuthOptions } from 'next-auth'; - -export const authOptions: NextAuthOptions = { - ... - providers: [ - CredentialsProvider({ - credentials: { - email: { - label: 'Email Address', - type: 'email', - }, - password: { - label: 'Password', - type: 'password', - }, - }, - - // use ZenStack's default implementation to verify credentials - authorize: authorize(service), - }), - ]}; - -export default NextAuth(authOptions); -``` - -### Configuring ZenStack services - -ZenStack's CRUD services need to be configured with a `getServerUser` callback for fetching current login user from the backend. This can be easily done when using Next-Auth's `unstable_getServerSession` API: - -```ts -// pages/api/zenstack/[...path].ts - -... -import service, { - type RequestHandlerOptions, - requestHandler, -} from '@zenstackhq/runtime/server'; -import { authOptions } from '../auth/[...nextauth]'; -import { unstable_getServerSession } from 'next-auth'; - -const options: RequestHandlerOptions = { - async getServerUser(req: NextApiRequest, res: NextApiResponse) { - const session = await unstable_getServerSession(req, res, authOptions); - return session?.user; - }, -}; -export default requestHandler(service, options); - -``` - -_NOTE_ Although the name `unstable_getServerSession` looks suspicious, it's officially recommended by Next-Auth and is production-ready. - -### Data model requirement - -NextAuth is agnostic about the type of underlying database, but it requires certain table structures, depending on how you configure it. Your ZModel definitions should reflect these requirements. A sample `User` model is shown here (to be used with `CredentialsProvider`): - -```zmodel -model User { - id String @id @default(cuid()) - email String @unique @email - emailVerified DateTime? - password String @password @omit - name String? - image String? @url - - // open to signup - @@allow('create', true) - - // full access by oneself - @@allow('all', auth() == this) -} -``` - -You can find the detailed database model requirements [here](https://next-auth.js.org/adapters/models ':target=blank'). - -## Iron-session - -[Iron-session](https://www.npmjs.com/package/iron-session ':target=blank') is a lightweighted authentication toolkit. - -### Authentication endpoints - -Iron-session requires you to implement auth related API endpoints by yourself. Usually you need to at least have these three endpoints: **api/auth/login**, **/api/auth/logout**, and **/api/auth/user**. The following code shows how to use ZenStack backend service to implement them. - -- **/api/auth/login** - -```ts -... -import service from '@zenstackhq/runtime/server'; -import * as bcrypt from 'bcryptjs'; - -const loginRoute: NextApiHandler = async (req, res) => { - const { email, password } = req.body; - - const user = await service.db.user.findUnique({ where: { email } }); - if (!user || !bcrypt.compareSync(password, user.password)) { - res.status(401).json({ - message: 'invalid email and password combination', - }); - return; - } - - delete (user as any).password; - req.session.user = user; - await req.session.save(); - - res.json(user); -}; - -export default withIronSessionApiRoute(loginRoute, sessionOptions); -``` - -- **/api/auth/logout** - -```ts -... - -const logoutRoute: NextApiHandler = async (req, res) => { - req.session.destroy(); - res.json({}); -}; - -export default withIronSessionApiRoute(logoutRoute, sessionOptions); - -``` - -- **/api/auth/user** - -```ts -... -import service from '@zenstackhq/runtime/server'; - -const userRoute: NextApiHandler = async (req, res) => { - if (req.session?.user) { - // fetch user from db for fresh data - const user = await service.db.user.findUnique({ - where: { email: req.session.user.email }, - }); - if (!user) { - res.status(401).json({ message: 'invalid login status' }); - return; - } - - delete (user as any).password; - res.json(user); - } else { - res.status(401).json({ message: 'invalid login status' }); - } -}; - -export default withIronSessionApiRoute(userRoute, sessionOptions); -``` - -### Configuring ZenStack services - -ZenStack's CRUD services need to be configured with a `getServerUser` callback for fetching current login user from the backend. This can be easily done when using iron-session: - -```ts -// pages/api/zenstack/[...path].ts - -... -import service, { - requestHandler, - type RequestHandlerOptions, -} from '@zenstackhq/runtime/server'; - -const options: RequestHandlerOptions = { - async getServerUser(req: NextApiRequest, res: NextApiResponse) { - const user = req.session?.user; - if (!user) { - return undefined; - } - - const dbUser = await service.db.user.findUnique({ - where: { email: user.email }, - }); - - return dbUser ?? undefined; - }, -}; - -export default withIronSessionApiRoute( - requestHandler(service, options), - sessionOptions -); -``` - -## Custom-built authentication - -[TBD] diff --git a/docs/modeling-your-app.md b/docs/modeling-your-app.md deleted file mode 100644 index 5cb860652..000000000 --- a/docs/modeling-your-app.md +++ /dev/null @@ -1,168 +0,0 @@ -# Modeling your app - -ZenStack provides an integrated DSL called **ZModel** for defining your data models, relations, and access policies. It may sounds scary to learn yet another new language, but trust me is simple and intuitive. - -**ZModel** DSL is extended from the schema language of [Prisma ORM](https://www.prisma.io/docs/concepts/components/prisma-schema ':target=_blank'). Familarity of Prisma will make it very easy to start, but it's not a prerequisite. - -## Configuring data source - -The very first thing to do is to configure how to connect to your database. - -Here's an example for using a PosgreSQL with is connection string read from `DATABASE_URL` environment variable: - -```zmodel -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} -``` - -The generated CRUD services use the data source settings to connect to the database. Also, the migration workflow relies on it to synchronize database schema with the model. - -## Adding data models - -Data models define the shapes of business entities in your app. A data model consists of fields and attributes (which attach extra behavior to fields). - -Here's an example of a blog post model: - -```zmodel -model Post { - // @id attribute marks a field as unique identifier, - // mapped to database table's primary key - id String @id @default(cuid()) - - // fields can be DateTime - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - // or string - title String - - // or integer - viewCount Int @default(0) - - // and optional - content String? - - // and a list too - tags String[] -} -``` - -Check [here](zmodel-field.md) for more details about defining fields. - -## Adding relations - -An app is usually made up of a bunch of interconnected data models. You can define their relations with the special `@relation` attibute. - -Here are some examples: - -- One-to-one - -```zmodel -model User { - id String @id - profile Profile? -} - -model Profile { - id String @id - user @relation(fields: [userId], references: [id]) - userId String @unique -} -``` - -- One-to-many - -```zmodel -model User { - id String @id - posts Post[] -} - -model Post { - id String @id - author User? @relation(fields: [authorId], references: [id]) - authorId String? -} -``` - -- Many-to-many - -```zmodel -model Space { - id String @id - members Membership[] -} - -// Membership is the "join-model" between User and Space -model Membership { - id String @id() - - // one-to-many from Space - space Space @relation(fields: [spaceId], references: [id]) - spaceId String - - // one-to-many from User - user User @relation(fields: [userId], references: [id]) - userId String - - // a user can be member of a space for only once - @@unique([userId, spaceId]) -} - -model User { - id String @id - membership Membership[] -} -``` - -Check [here](zmodel-relation.md) for more details about defining relations. - -## Adding access policies - -It's great to see our app's business model is in place now, but it's still missing an important aspect: **access policy**, i.e., who can take what action to which data. - -Access policies are defined using `@@allow` and `@@deny` attributes. _NOTE_ attributes with `@@` prefix are to be used at model level. - -A few quick notes before diving into examples: - -- Access kinds include `create`, `read`, `update` and `delete`, and you can use `all` to abbreviate full grant. - -- By default, all access kinds are denied for a model. You can use arbitrary number of `@@allow` and `@@deny` rules in a model. See [here](zmodel-access-policy.md#combining-multiple-rules) for the semantic of combining them. - -- You can access current login user with the builtin `auth()` function. See [here](integrating-authentication.md) for how authentication is integrated. - -Let's look at a few examples now: - -```zmodel -model User { - id String @id - posts Post[] - ... - - // User can be created unconditionally (sign-up) - @@allow("create", true) -} - -model Post { - id String @id - author User @relation(fields: [authorId], references: [id]) - authorId String - published Boolean @default(false) - ... - - // deny all unauthenticated write access - @@deny("create,update,delete", auth() == null) - - // published posts can be read by all - @@allow("read", published) - - // grant full access to author - @@allow("all", auth() == author) -} -``` - -You can find more details about access policy [here](zmodel-access-policy.md). Also, check out the [Collaborative Todo App](https://github.com/zenstackhq/todo-demo-sqlite) sample for a more sophisticated policy design. - -Now you've got a fairly complete model for the app. Let's go ahead with [generating code](code-generation.md) from it then. diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 02616276b..000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,3029 +0,0 @@ -{ - "name": "zenstack-docs", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "zenstack-docs", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "ora": "^6.1.2" - }, - "devDependencies": { - "copyfiles": "^2.4.1", - "globby": "^13.1.2", - "puppeteer": "^19.4.0", - "rimraf": "^3.0.2", - "sitemap": "^7.1.1" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "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==", - "dev": true - }, - "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/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1068969", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz", - "integrity": "sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "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/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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/ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=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==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "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/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", - "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", - "dependencies": { - "bl": "^5.0.0", - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/ora/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/puppeteer": { - "version": "19.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.4.0.tgz", - "integrity": "sha512-sRzWEfFSZCCcFUJflGtYI2V7A6qK4Jht+2JiI2LZgn+Nv/LOZZsBDEaGl98ZrS8oEcUA5on4p2yJbE0nzHNzIg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "cosmiconfig": "8.0.0", - "devtools-protocol": "0.0.1068969", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.4.0" - }, - "engines": { - "node": ">=14.1.0" - } - }, - "node_modules/puppeteer-core": { - "version": "19.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.4.0.tgz", - "integrity": "sha512-gG/jxseleZStinBn86x8r7trjcE4jcjx1hIQWOpACQhquHYMuKnrWxkzg+EDn8sN3wUtF/Ry9mtJgjM49oUOFQ==", - "dev": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1068969", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.10.0" - }, - "engines": { - "node": ">=14.1.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "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/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dev": true, - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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/ws": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": 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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "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==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "requires": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "requires": { - "clone": "^1.0.2" - } - }, - "devtools-protocol": { - "version": "0.0.1068969", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz", - "integrity": "sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "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 - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "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, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "requires": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "dependencies": { - "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, - "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, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", - "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", - "requires": { - "bl": "^5.0.0", - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "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 - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "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==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "puppeteer": { - "version": "19.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.4.0.tgz", - "integrity": "sha512-sRzWEfFSZCCcFUJflGtYI2V7A6qK4Jht+2JiI2LZgn+Nv/LOZZsBDEaGl98ZrS8oEcUA5on4p2yJbE0nzHNzIg==", - "dev": true, - "requires": { - "cosmiconfig": "8.0.0", - "devtools-protocol": "0.0.1068969", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.4.0" - } - }, - "puppeteer-core": { - "version": "19.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.4.0.tgz", - "integrity": "sha512-gG/jxseleZStinBn86x8r7trjcE4jcjx1hIQWOpACQhquHYMuKnrWxkzg+EDn8sN3wUtF/Ry9mtJgjM49oUOFQ==", - "dev": true, - "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1068969", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.10.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dev": true, - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "requires": { - "defaults": "^1.0.3" - } - }, - "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==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "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 - }, - "ws": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", - "dev": true, - "requires": {} - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 16ae28b32..000000000 --- a/docs/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "zenstack-docs", - "version": "1.0.0", - "description": "ZenStack documentation site", - "type": "module", - "scripts": { - "serve": "docsify serve -p 8765", - "copy-static": "mkdir -p ../doc-serve/public/static && copyfiles -e node_modules ./* ./**/* ../doc-serve/public", - "build": "rimraf ../doc-serve/public && npm run copy-static && node script/ssg.js && node script/sitemap.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/zenstackhq/zenstack.git" - }, - "author": "ZenStack Team", - "license": "MIT", - "bugs": { - "url": "https://github.com/zenstackhq/zenstack/issues" - }, - "homepage": "https://zenstack.dev", - "devDependencies": { - "globby": "^13.1.2", - "puppeteer": "^19.4.0", - "rimraf": "^3.0.2", - "sitemap": "^7.1.1" - }, - "dependencies": { - "ora": "^6.1.2" - } -} diff --git a/docs/quick-start.md b/docs/quick-start.md deleted file mode 100644 index 3e71dc6fc..000000000 --- a/docs/quick-start.md +++ /dev/null @@ -1,134 +0,0 @@ -# Quick start - -Please check out the corresponding guide for [creating a new project](#creating-a-new-project) or [adding to an existing project](#adding-to-an-existing-project). - -## Creating a new project - -You can choose from these preconfigured starter to create a new project: - -- [Using Next-Auth for authentication](#with-next-auth) -- [Using iron-session for authentication](#with-iron-session) -- [Without integrating with authentication](#without-integrating-authentication) - -### With Next-Auth - -Follow these steps to create a new project from a preconfigured template using [Next-Auth](https://next-auth.js.org/ ':target=blank') for authentication: - -1. Clone from starter template - -```bash -npx create-next-app --use-npm -e https://github.com/zenstackhq/nextjs-auth-starter -``` - -2. Install dependencies - -```bash -npm install -``` - -3. Generate CRUD services and hooks code from the starter model - -```bash -npm run generate -``` - -4. push database schema to the local sqlite db - -```bash -npm run db:push -``` - -5. start dev server - -``` -npm run dev -``` - -### With iron-session - -Follow these steps to create a new project from a preconfigured template using [iron-session](https://www.npmjs.com/package/iron-session ':target=blank') for authentication: - -1. Clone from starter template - -```bash -npx create-next-app --use-npm -e https://github.com/zenstackhq/nextjs-iron-session-starter -``` - -2. Install dependencies - -```bash -npm install -``` - -3. Generate CRUD services and hooks code from the starter model - -```bash -npm run generate -``` - -4. push database schema to the local sqlite db - -```bash -npm run db:push -``` - -5. start dev server - -``` -npm run dev -``` - -### Without integrating authentication - -If you would rather not use a template preconfigured with authentication, you can use the barebone starter instead. You can add an authentication solution later or hand-code it by yourself. - -1. Clone from starter template - -```bash -npx create-next-app --use-npm -e https://github.com/zenstackhq/nextjs-barebone-starter -``` - -2. Install dependencies - -```bash -npm install -``` - -3. Generate CRUD services and hooks code from the starter model - -```bash -npm run generate -``` - -4. push database schema to the local sqlite db - -```bash -npm run db:push -``` - -5. start dev server - -``` -npm run dev -``` - -### Check result - -If everything worked, you should see a simple blog app like this: -![starter screen shot](_media/starter-shot.png 'Starter project screenshot') - -No worries if a blogger app doesn't suit you. The created project contains a starter model at `/zenstack/schema.zmodel`. You can modify it and build up your application's own model following [this guide](modeling-your-app.md). - -## Adding to an existing project - -To add ZenStack to an existing Next.js + Typescript project, run command below: - -```bash -npx zenstack init -``` - -You should find a `/zenstack/schema.model` file created, containing a simple blogger model in it. No worries if a blogger app doesn't suit you. You can modify it and build up your application's own model following [this guide](modeling-your-app.md). - -## Installing VSCode extension - -It's good idea to install the [VSCode extension](https://marketplace.visualstudio.com/items?itemName=zenstack.zenstack ':target=_blank') so you get syntax highlighting and error checking when authoring model files. diff --git a/docs/reach-out.md b/docs/reach-out.md deleted file mode 100644 index e57290e72..000000000 --- a/docs/reach-out.md +++ /dev/null @@ -1,9 +0,0 @@ -# Reach out to the developers - -As developers of ZenStack, we hope this toolkit can assist you to build a cool app. -Should you have any questions or ideas, please feel free to reach out to us by any of the following methods. We'll be happy to help you out. - -- [Discord](https://go.zenstack.dev/chat) -- [GitHub Discussions](https://github.com/zenstackhq/zenstack/discussions) -- [Twitter](https://twitter.com/zenstackhq) -- Email us: [contact@zenstack.dev](mailto:contact@zenstack.dev) diff --git a/docs/robots.txt b/docs/robots.txt deleted file mode 100644 index c2a49f4fb..000000000 --- a/docs/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/docs/runtime-api.md b/docs/runtime-api.md deleted file mode 100644 index 8d017da2a..000000000 --- a/docs/runtime-api.md +++ /dev/null @@ -1,224 +0,0 @@ -# Runtime API - -## `@zenstackhq/runtime/types` - -This module contains types generated from ZModel data models. These types are shared by both the client-side and the server-side code. - -The generated types include (for each data model defined): - -- Entity type -- Data structure for creating/updating entities -- Data structure for selecting entities - including filtering and sorting - -Take `User` model as an example, here're some of the most commonly used types: - -- `User` - - The entity type which directly corresponds to the data mdoel. - -- `UserFindUniqueArgs` - - Argument type for finding a unique `User`. - -- `UserFindManyArgs` - - Argument type for finding a list of `User`s. - -- `UserCreateArgs` - - Argument for creating a new `User`. - -- `UserUpdateArgs` - - Argument for updating an existing `User`. - -## `@zenstackhq/runtime/client` - -This module contains API for client-side programming, including the generated React hooks and auxiliary types, like options and error types. - -_NOTE_ You should not import this module into server-side code, like getServerSideProps, or API endpoint. - -A `useXXX` API is generated fo each data model for getting the React hooks. The following code uses `User` model as an example. - -```ts -const { get, find, create, update, del } = useUser(); -``` - -### `RequestOptions` - -Options controlling hooks' fetch behavior. - -```ts -type RequestOptions = { - // indicates if fetch should be disabled - disabled?: boolean; - - // provides initial data, which is immediately available - // before fresh data is fetched (usually used with SSR) - initialData?: T; -}; -``` - -### `HooksError` - -Error thrown for failure of `create`, `update` and `delete` hooks. - -```ts -export type HooksError = { - status: number; - info: { - code: ServerErrorCode; - message: string; - }; -}; -``` - -#### `ServerErrorCode` - -| Code | Description | -| ------------------------------ | --------------------------------------------------------------------------------------------- | -| ENTITY_NOT_FOUND | The specified entity cannot be found | -| INVALID_REQUEST_PARAMS | The request parameter is invalid, either containing invalid fields or missing required fields | -| DENIED_BY_POLICY | The request is rejected by policy checks | -| UNIQUE_CONSTRAINT_VIOLATION | Violation of database unique constraints | -| REFERENCE_CONSTRAINT_VIOLATION | Violation of database reference constraint (aka. foreign key constraints) | -| READ_BACK_AFTER_WRITE_DENIED | A write operation succeeded but the result cannot be read back due to policy control | - -### `get` - -```ts -function get(id: string | undefined, args?: UserFindFirstArgs, options?: RequestOptions): SWRResponse; -``` - -### `find` - -```ts -function find(args?: UserFindManyArgs, options?: RequestOptions): SWRResponse; -``` - -### `create` - -```ts -function create(args?: UserCreateArgs): Promise; -``` - -### `update` - -```ts -function update(id: string, args?: UserUpdateArgs): Promise; -``` - -### `del` - -```ts -function del(id: string, args?: UserDeleteArgs): Promise; -``` - -## `@zenstackhq/runtime/server` - -This module contains API for server-side programming. The following declarations are exported: - -### `service` - -The default export of this module is a `service` object which encapsulates most of the server-side APIs. - -#### Server-side CRUD - -The `service` object contains members for each of the data models, each containing server-side CRUD APIs. These APIs can be used for doing CRUD operations without HTTP request overhead, while still fully protected by access policies. - -The server-side CRUD APIs have similar signature with client-side hooks, except that they take an extra `queryContext` parameter for passing in the current login user. They're usually used for implementing SSR or custom API endpoints. - -- get - - ```ts - async get( - context: QueryContext, - id: string, - args?: UserFindFirstArgs - ): Promise; - ``` - -- find - - ```ts - async find( - context: QueryContext, - args?: UserFindManyArgs - ): Promise; - ``` - -- create - - ```ts - async create( - context: QueryContext, - args?: UserCreateArgs - ): Promise; - ``` - -- update - - ```ts - async update( - context: QueryContext, - id: string, - args?: UserUpdateArgs - ): Promise; - ``` - -- del - ```ts - async del( - context: QueryContext, - id: string, - args?: UserDeleteArgs - ): Promise; - ``` - -#### Direct database access - -The `service.db` object contains a member field for each data model defined, which you can use to conduct database operations for that model. - -_NOTE_ These database operations are **NOT** protected by access policies. - -Take `User` model for example: - -```ts -import service from '@zenstackhq/runtime/server'; - -// find all users -const users = service.db.user.find(); - -// update a user -await service.db.user.update({ - where: { id: userId }, - data: { email: newEmail }, -}); -``` - -The server-side database access API uses the [same set of typing](#zenstackhqruntimetypes) as the client side. The `service.db` object is a Prisma Client, and you can find all API documentations [here](https://www.prisma.io/docs/reference/api-reference/prisma-client-reference ':target=blank'). - -### `requestHandler` - -Function for handling API endpoint requests. Used for installing the generated CRUD services onto an API route: - -```ts -// pages/api/zenstack/[...path].ts - -import service from '@zenstackhq/runtime'; -import { - requestHandler, - type RequestHandlerOptions, -} from '@zenstackhq/runtime/server'; -import { NextApiRequest, NextApiResponse } from 'next'; - -const options: RequestHandlerOptions = { - // a callback for getting the current login user - async getServerUser(req: NextApiRequest, res: NextApiResponse) { - ... - }, -}; -export default requestHandler(service, options); -``` - -The `getServerUser` callback method is used for getting the current login user on the server side. Its implementation depends on how you authenticate users. diff --git a/docs/script/sitemap.js b/docs/script/sitemap.js deleted file mode 100644 index 916e552ea..000000000 --- a/docs/script/sitemap.js +++ /dev/null @@ -1,21 +0,0 @@ -import { globbySync } from 'globby'; -import { SitemapStream, streamToPromise } from 'sitemap'; -import { Readable } from 'stream'; -import fs from 'fs'; - -const links = [ - { url: '/', changefreq: 'daily' }, - { url: '/changelog', changefreq: 'daily' }, - ...globbySync(['./**/[!_]?*.md', '!node_modules', '!README.md']).map((path) => ({ - url: `/${path.replace('.md', '')}`, - changefreq: 'daily', - })), -]; - -console.log('Sitemap entries:'); -console.log(links); - -const stream = new SitemapStream({ hostname: 'https://zenstack.dev' }); -const content = (await streamToPromise(Readable.from(links).pipe(stream))).toString('utf-8'); - -fs.writeFileSync('../doc-serve/public/sitemap.xml', content); diff --git a/docs/script/ssg.js b/docs/script/ssg.js deleted file mode 100644 index d808e48d3..000000000 --- a/docs/script/ssg.js +++ /dev/null @@ -1,34 +0,0 @@ -import puppeteer from 'puppeteer'; -import { globbySync } from 'globby'; -import fs from 'fs'; -import ora from 'ora'; - -const siteUrl = 'http://localhost:8765'; - -const urls = [ - { route: 'index', url: `${siteUrl}/` }, - { route: 'changelog', url: `${siteUrl}/changelog` }, - ...globbySync(['./**/[!_]?*.md', '!node_modules', '!README.md']).map((path) => ({ - route: path.replace('.md', ''), - url: `${siteUrl}/${path.replace('.md', '')}`, - })), -]; - -console.log('Generating static content for', urls.length, 'urls'); -const browser = await puppeteer.launch(); - -for (let i = 0; i < urls.length; i++) { - const { url, route } = urls[i]; - const spinner = ora(`${i + 1}/${urls.length}\tGenerating ${url}`).start(); - const page = await browser.newPage(); - - await page.goto(url); - await page.waitForNetworkIdle({ idleTime: 2000, timeout: 5000 }); - await page.evaluate("document.querySelectorAll('script').forEach(e => e.remove())"); - const content = await page.content(); - fs.writeFileSync(`../doc-serve/public/static/${route}.html`, content); - spinner.succeed(); - await page.close(); -} - -await browser.close(); diff --git a/docs/server-side-rendering.md b/docs/server-side-rendering.md deleted file mode 100644 index e2ce76829..000000000 --- a/docs/server-side-rendering.md +++ /dev/null @@ -1,26 +0,0 @@ -# Server-side rendering - -You can use the `service` object to conduct CRUD operations on the server side directly without the overhead of HTTP requests. The `service` object contains members for each of the data model defined. - -The server-side CRUD methods are similar signature with client-side hooks, except that they take an extra `queryContext` parameter for passing in the current login user. Like client-side hooks, the CRUD operations are fully protected by access policies defined in ZModel. - -These methods are handy for implementing SSR (or custom API endpoints). Here's an example (using Next-Auth for authentication): - -```ts -import service from '@zenstackhq/runtime/server'; -import { unstable_getServerSession } from 'next-auth'; -... - -export const getServerSideProps = async ({ - req, - res, - params, -}) => { - const session = await unstable_getServerSession(req, res, authOptions); - const queryContext = { user: session?.user }; - const posts = await service.post.find(queryContext); - return { - props: { posts }, - }; -}; -``` diff --git a/docs/setup-logging.md b/docs/setup-logging.md deleted file mode 100644 index b3c2b4099..000000000 --- a/docs/setup-logging.md +++ /dev/null @@ -1,92 +0,0 @@ -# Set up logging - -ZenStack uses the following levels to control server-side logging: - -- `error` - - Error level logging - -- `warn` - - Warning level logging - -- `info` - - Info level logging - -- `verbose` - - Verbose level logging - -- `query` - - Detailed database query logging - -By default, ZenStack prints `error` and `warn` level of logging with `console.error` and `console.log`, respectively. You can also control the logging behavior by providing a `zenstack.config.json` file at the root of your project. - -You can turn log levels on and off in `zenstack.config.json`: - -```json -{ - "log": ["verbose", "info"] -} -``` - -The settings shown above is an shorthand for: - -```json -{ - "log": [ - { - "level": "verbose", - "emit": "stdout" - }, - { - "level": "info", - "emit": "stdout" - } - ] -} -``` - -You can also configure ZenStack to emit log as event instead of dumping to stdout, like: - -```json -{ - "log": [ - { - "level": "info", - "emit": "event" - } - ] -} -``` - -To consume the events: - -```ts -import service from '@zenstackhq/runtime'; - -service.$on('info', (event) => { - console.log(event.timestamp, event.message); -}); -``` - -You can also mix and match stdout output with event emitting, like: - -```json -{ - "log": [ - { - "level": "info", - "emit": "stdout" - }, - { - "level": "info", - "emit": "event" - } - ] -} -``` - -The settings in `zenstack.config.json` controls logging of both ZenStack and the underlying Prisma instance. diff --git a/docs/sitemap.js b/docs/sitemap.js deleted file mode 100644 index 109e8e526..000000000 --- a/docs/sitemap.js +++ /dev/null @@ -1,20 +0,0 @@ -import { globbySync } from 'globby'; -import { SitemapStream, streamToPromise } from 'sitemap'; -import { Readable } from 'stream'; -import fs from 'fs'; - -const links = [ - { url: '/', changefreq: 'daily' }, - ...globbySync(['./**/[!_]?*.md', '!node_modules', '!README.md']).map((path) => ({ - url: `/${path.replace('.md', '')}`, - changefreq: 'daily', - })), -]; - -console.log('Sitemap entries:'); -console.log(links); - -const stream = new SitemapStream({ hostname: 'https://zenstack.dev' }); -const content = (await streamToPromise(Readable.from(links).pipe(stream))).toString('utf-8'); - -fs.writeFileSync('./sitemap.xml', content); diff --git a/docs/telemetry.md b/docs/telemetry.md deleted file mode 100644 index 42540dac0..000000000 --- a/docs/telemetry.md +++ /dev/null @@ -1,21 +0,0 @@ -# Telemetry - -ZenStack CLI and VSCode extension sends anonymous telemetry for analyzing usage stats and finding bugs. - -The information collected includes: - -- OS -- Node.js version -- CLI version -- CLI command and arguments -- CLI errors -- Duration of command run -- Region (based on IP) - -We don't collect any telemetry at the runtime of apps using ZenStack. - -We appreciate that you keep the telemetry ON so we can keep improving the toolkit. We follow the [Console Do Not Track](https://consoledonottrack.com/ ':target=blank') convention, and you can turn off the telemetry by setting environment variable `DO_NOT_TRACK` to `1`: - -```bash -DO_NOT_TRACK=1 npx zenstack ... -``` diff --git a/docs/vercel.json b/docs/vercel.json deleted file mode 100644 index 5f1824307..000000000 --- a/docs/vercel.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "rewrites": [ - { "source": "/sitemap.xml", "destination": "/sitemap.xml" }, - { - "source": "/8cd31ff7afe74424abbec00b65f04ae8.txt", - "destination": "/8cd31ff7afe74424abbec00b65f04ae8.txt" - }, - { "source": "/:path*", "destination": "/index.html" } - ], - "github": { - "silent": true - } -} diff --git a/docs/vscode-extension.md b/docs/vscode-extension.md deleted file mode 100644 index c48150116..000000000 --- a/docs/vscode-extension.md +++ /dev/null @@ -1,5 +0,0 @@ -# VSCode extension - -ZenStack VSCode extension provides syntax highlighting and error checking to improve the efficiency of your modeling work. - -You can install by searching "ZenStack Language Tools" inside of VSCode, or from [here](https://marketplace.visualstudio.com/items?itemName=zenstack.zenstack) directly. diff --git a/docs/zmodel-access-policy.md b/docs/zmodel-access-policy.md deleted file mode 100644 index 9ecdcd83f..000000000 --- a/docs/zmodel-access-policy.md +++ /dev/null @@ -1,203 +0,0 @@ -# Access policy - -Access policies use `@@allow` and `@@deny` rules to specify the eligibility of an operation over a model entity. The signatures of the attributes are: - -- `@@allow` - - ```zmodel - attribute @@allow(_ operation: String, _ condition: Boolean) - ``` - - _Params_: - - | Name | Description | - | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | operation | Comma separated list of operations to control, including `"create"`, `"read"`, `"update"`, and `"delete"`. Pass` "all"` as an abbriviation for including all operations. | - | condition | Boolean expression indicating if the operations should be allowed | - -- `@@deny` - - ```zmodel - attribute @@deny(_ operation: String, _ condition: Boolean) - ``` - - _Params_: - - | Name | Description | - | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | operation | Comma separated list of operations to control, including `"create"`, `"read"`, `"update"`, and `"delete"`. Pass` "all"` as an abbriviation for including all operations. | - | condition | Boolean expression indicating if the operations should be denied | - -## Using authentication in policy rules - -It's very common to use the current login user to verdict if an operation should be permitted. Therefore, ZenStack provides a built-in `auth()` attribute function that evaluates to the `User` entity corresponding to the current user. To use the function, your ZModel file must define a `User` data model. - -You can use `auth()` to: - -- Check if a user is logged in - - ```zmodel - @@deny('all', auth() == null) - ``` - -- Access user's fields - - ```zmodel - @@allow('update', auth().role == 'ADMIN') - ``` - -- Compare user identity - - ```zmodel - // owner is a relation field to User model - @@allow('update', auth() == owner) - ``` - -## Accessing relation fields in policy - -As you've seen in the examples above, you can access fields from relations in policy expressions. For example, to express "a user can be read by any user sharing a space" in the `User` model, you can directly read into its `membership` field. - -```zmodel - @@allow('read', membership?[space.members?[user == auth()]]) -``` - -In most cases, when you use a "to-many" relation in a policy rule, you'll use "Collection Predicate" to express a condition. See [next section](#collection-predicate-expressions) for details. - -## Collection predicate expressions - -Collection predicate expressions are boolean expressions used to express conditions over a list. It's mainly designed for building policy rules for "to-many" relations. It has three forms of syntaxes: - -- Any - - ``` - ?[condition] - ``` - - Any element in `collection` matches `condition` - -- All - - ``` - ![condition] - ``` - - All elements in `collection` match `condition` - -- None - - ``` - ^[condition] - ``` - - None element in `collection` matches `condition` - -The `condition` expression has direct access to fields defined in the model of `collection`. E.g.: - -```zmodel - @@allow('read', members?[user == auth()]) -``` - -, in condition `user == auth()`, `user` refers to the `user` field in model `Membership`, because the collection `members` is resolved to `Membership` model. - -Also, collection predicates can be nested to express complex conditions involving multi-level relation lookup. E.g.: - -```zmodel - @@allow('read', membership?[space.members?[user == auth()]]) -``` - -In this example, `user` refers to `user` field of `Membership` model because `space.members` is resolved to `Membership` model. - -## Combining multiple rules - -A data model can contain arbitrary number of policy rules. The logic of combining them is as follows: - -- The operation is rejected if any of the conditions in `@@deny` rules evaluate to `true` -- Otherwise, the operation is permitted if any of the conditions in `@@allow` rules evaluate to `true` -- Otherwise, the operation is rejected - -## Example - -### A simple example with Post model - -```zmodel -model Post { - // reject all operations if user's not logged in - @@deny('all', auth() == null) - - // allow all operations if the entity's owner matches the current user - @@allow('all', auth() == owner) - - // posts are readable to anyone - @allow('read', true) -} -``` - -### A more complex example with multi-user spaces - -```zmodel -model Space { - id String @id - members Membership[] - owner User @relation(fields: [ownerId], references: [id]) - ownerId String - - // require login - @@deny('all', auth() == null) - - // everyone can create a space - @@allow('create', true) - - // owner can do everything - @@allow('all', auth() == owner) - - // any user in the space can read the space - // - // Here the ?[condition] syntax is called - // "Collection Predicate", used to check if any element - // in the "collection" matches the "condition" - @@allow('read', members?[user == auth()]) -} - -// Membership is the "join-model" between User and Space -model Membership { - id String @id() - - // one-to-many from Space - space Space @relation(fields: [spaceId], references: [id]) - spaceId String - - // one-to-many from User - user User @relation(fields: [userId], references: [id]) - userId String - - // a user can be member of a space for only once - @@unique([userId, spaceId]) - - // require login - @@deny('all', auth() == null) - - // space owner can create/update/delete - @@allow('create,update,delete', space.owner == auth()) - - // user can read entries for spaces which he's a member of - @@allow('read', space.members?[user == auth()]) -} - -model User { - id String @id - email String @unique - membership Membership[] - ownedSpaces Space[] - - // allow signup - @@allow('create', true) - - // user can do everything to herself; note that "this" represents - // the current entity - @@allow('all', auth() == this) - - // can be read by users sharing a space - @@allow('read', membership?[space.members?[user == auth()]]) -} - -``` diff --git a/docs/zmodel-attribute.md b/docs/zmodel-attribute.md deleted file mode 100644 index 3a9c26be8..000000000 --- a/docs/zmodel-attribute.md +++ /dev/null @@ -1,480 +0,0 @@ -# Attribute - -Attributes decorate fields and data models and attach extra behaviors or constraints to them. - -## Syntax - -### Field attribute - -Field attribute name is prefixed by a single `@`. Its application takes the following form: - -```zmodel -id String @[ATTR_NAME](ARGS)? -``` - -- **[ATTR_NAME]** - -Attribute name. See [below](#built-in-attributes) for a full list of attributes. - -- **[ARGS]** - -See [attribute arguments](#attribute-arguments). - -### Data model attribute - -Field attribute name is prefixed double `@@`. Its application takes the following form: - -```zmodel -model Model { - @@[ATTR_NAME](ARGS)? -} -``` - -- **[ATTR_NAME]** - -Attribute name. See [below](#built-in-attributes) for a full list of attributes. - -- **[ARGS]** - -See [attribute arguments](#attribute-arguments). - -### Arguments - -Attribute can be declared with a list of parameters, and applied with an optional comma-separated list of arguments. - -Arguments are mapped to parameters by position or by name. For example, for the `@default` attribute declared as: - -```zmodel -attribute @default(_ value: ContextType) -``` - -, the following two ways of applying it are equivalent: - -```zmodel -published Boolean @default(value: false) -``` - -```zmodel -published Boolean @default(false) -``` - -## Parameter types - -Attribute parameters are typed. The following types are supported: - -- Int - - Integer literal can be passed as argument. - - E.g., declaration: - - ```zmodel - attribute @password(saltLength: Int?, salt: String?) - - ``` - - application: - - ```zmodel - password String @password(saltLength: 10) - ``` - -- String - - String literal can be passed as argument. - - E.g., declaration: - - ```zmodel - attribute @id(map: String?) - ``` - - application: - - ```zmodel - id String @id(map: "_id") - ``` - -- Boolean - - Boolean literal or expression can be passed as argument. - - E.g., declaration: - - ```zmodel - attribute @@allow(_ operation: String, _ condition: Boolean) - ``` - - application: - - ```zmodel - @@allow("read", true) - @@allow("update", auth() != null) - ``` - -- ContextType - - A special type that represents the type of the field onto which the attribute is attached. - - E.g., declaration: - - ```zmodel - attribute @default(_ value: ContextType) - ``` - - application: - - ```zmodel - f1 String @default("hello") - f2 Int @default(1) - ``` - -- FieldReference - - References to fields defined in the current model. - - E.g., declaration: - - ```zmodel - attribute @relation( - _ name: String?, - fields: FieldReference[]?, - references: FieldReference[]?, - onDelete: ReferentialAction?, - onUpdate: ReferentialAction?, - map: String?) - ``` - - application: - - ```zmodel - model Model { - ... - // [ownerId] is a list of FieldReference - owner Owner @relation(fields: [ownerId], references: [id]) - ownerId - } - ``` - -- Enum - - Attribute parameter can also be typed as predefined enum. - - E.g., declaration: - - ```zmodel - attribute @relation( - _ name: String?, - fields: FieldReference[]?, - references: FieldReference[]?, - // ReferentialAction is a predefined enum - onDelete: ReferentialAction?, - onUpdate: ReferentialAction?, - map: String?) - ``` - - application: - - ```zmodel - model Model { - // 'Cascade' is a predefined enum value - owner Owner @relation(..., onDelete: Cascade) - } - ``` - -An attribute parameter can be typed as any of the above type, a list of the above type, or an optional of the above type. - -```zmodel - model Model { - ... - f1 String - f2 String - // a list of FieldReference - @@unique([f1, f2]) - } -``` - -## Attribute functions - -Attribute functions are used for providing values for attribute arguments, e.g., current `DateTime`, an autoincrement `Int`, etc. They can be used in place of attribute argument, like: - -```zmodel -model Model { - ... - serial Int @default(autoincrement()) - createdAt DateTime @default(now()) -} -``` - -You can find a list of predefined attribute functions [here](#predefined-attribute-functions). - -## Predefined attributes - -### Field attributes - -- `@id` - - ```zmodel - attribute @id(map: String?) - ``` - - Defines an ID on the model. - - _Params_: - - | Name | Description | - | ---- | ----------------------------------------------------------------- | - | map | The name of the underlying primary key constraint in the database | - -- `@default` - - ```zmodel - attribute @default(_ value: ContextType) - ``` - - Defines a default value for a field. - - _Params_: - - | Name | Description | - | ----- | ---------------------------- | - | value | The default value expression | - -- `@unique` - - ```zmodel - attribute @unique(map: String?) - ``` - - Defines a unique constraint for this field. - - _Params_: - - | Name | Description | - | ---- | ----------------------------------------------------------------- | - | map | The name of the underlying primary key constraint in the database | - -- `@relation` - - ```zmodel - attribute @relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?, onDelete: ReferentialAction?, onUpdate: ReferentialAction?, map: String?) - ``` - - Defines meta information about a relation. - - _Params_: - - | Name | Description | - | ---------- | --------------------------------------------------------------------------------------- | - | name | The name of the relationship | - | fields | A list of fields defined in the current model | - | references | A list of fields of the model on the other side of the relation | - | onDelete | Referential action to take on delete. See details [here](zmodel-referential-action.md). | - | onUpdate | Referential action to take on update. See details [here](zmodel-referential-action.md). | - -- `@map` - - ```zmodel - attribute @map(_ name: String) - ``` - - Maps a field name or enum value from the schema to a column with a different name in the database. - - _Params_: - - | Name | Description | - | ---- | ------------------------------------------------- | - | map | The name of the underlying column in the database | - -- `@updatedAt` - - ```zmodel - attribute @updatedAt() - ``` - - Automatically stores the time when a record was last updated. - -- `@password` - - ```zmodel - attribute @password(saltLength: Int?, salt: String?) - ``` - - Indicates that the field is a password field and needs to be hashed before persistence. - - _NOTE_: ZenStack uses `bcryptjs` library to hash password. You can use the `saltLength` parameter to configure the cost of hashing, or use `salt` parameter to provide an explicit salt. By default, salt length of 12 is used. See [bcryptjs](https://www.npmjs.com/package/bcryptjs ':target=blank') for more details. - - _Params_: - - | Name | Description | - | ---------- | ------------------------------------------------------------- | - | saltLength | The length of salt to use (cost factor for the hash function) | - | salt | The salt to use (a pregenerated valid salt) | - -- `@omit` - - ```zmodel - attribute @omit() - ``` - - Indicates that the field should be omitted when read from the generated services. Commonly used together with `@password` attribute. - -### Model attributes - -- `@@unique` - - ```zmodel - attribute @@unique(_ fields: FieldReference[], name: String?, map: String?) - ``` - - Defines a compound unique constraint for the specified fields. - - _Params_: - - | Name | Description | - | ------ | ------------------------------------------------------------ | - | fields | A list of fields defined in the current model | - | name | The name of the unique combination of fields | - | map | The name of the underlying unique constraint in the database | - -- `@@index` - - ```zmodel - attribute @@index(_ fields: FieldReference[], map: String?) - ``` - - Defines an index in the database. - - _Params_: - - | Name | Description | - | ------ | ------------------------------------------------ | - | fields | A list of fields defined in the current model | - | map | The name of the underlying index in the database | - -- `@@map` - - ```zmodel - attribute @@map(_ name: String) - ``` - - Maps the schema model name to a table with a different name, or an enum name to a different underlying enum in the database. - - _Params_: - - | Name | Description | - | ---- | -------------------------------------------------------- | - | name | The name of the underlying table or enum in the database | - -- `@@allow` - - ```zmodel - attribute @@allow(_ operation: String, _ condition: Boolean) - ``` - - Defines an access policy that allows a set of operations when the given condition is true. - - _Params_: - - | Name | Description | - | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | operation | Comma separated list of operations to control, including `"create"`, `"read"`, `"update"`, and `"delete"`. Pass` "all"` as an abbriviation for including all operations. | - | condition | Boolean expression indicating if the operations should be allowed | - -- `@@deny` - - ```zmodel - attribute @@deny(_ operation: String, _ condition: Boolean) - ``` - - Defines an access policy that denies a set of operations when the given condition is true. - - _Params_: - - | Name | Description | - | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | operation | Comma separated list of operations to control, including `"create"`, `"read"`, `"update"`, and `"delete"`. Pass` "all"` as an abbriviation for including all operations. | - | condition | Boolean expression indicating if the operations should be denied | - -## Predefined attribute functions - -- `uuid` - - ```zmodel - function uuid(): String {} - ``` - - Generates a globally unique identifier based on the UUID spec. - -- `cuid` - - ```zmodel - function cuid(): String {} - ``` - - Generates a globally unique identifier based on the [CUID](https://github.com/ericelliott/cuid) spec. - -- `now` - - ```zmodel - function now(): DateTime {} - ``` - - Gets current date-time. - -- `autoincrement` - - ```zmodel - function autoincrement(): Int {} - ``` - - Creates a sequence of integers in the underlying database and assign the incremented - values to the ID values of the created records based on the sequence. - -- `dbgenerated` - - ```zmodel - function dbgenerated(expr: String): Any {} - ``` - - Represents default values that cannot be expressed in the Prisma schema (such as random()). - -- `auth` - - ```zmodel - function auth(): User {} - ``` - - Gets the current login user. The return type of the function is the `User` data model defined in the current ZModel. - -## Examples - -Here're some examples on using field and model attributes: - -```zmodel -model User { - // unique id field with a default UUID value - id String @id @default(uuid()) - - // require email field to be unique - email String @unique - - // password is hashed with bcrypt with length of 16, omitted when returned from the CRUD services - password String @password(saltLength: 16) @omit - - // default to current date-time - createdAt DateTime @default(now()) - - // auto-updated when the entity is modified - updatedAt DateTime @updatedAt - - // mapping to a different column name in database - description String @map("desc") - - // mapping to a different table name in database - @@map("users") - - // use @@index to specify fields to create database index for - @@index([email]) -} -``` diff --git a/docs/zmodel-data-model.md b/docs/zmodel-data-model.md deleted file mode 100644 index b93d3aa62..000000000 --- a/docs/zmodel-data-model.md +++ /dev/null @@ -1,35 +0,0 @@ -# Data model - -Data models represent business entities of your application. - -## Syntax - -A data model declaration takes the following form: - -```zmodel -model [NAME] { - [FIELD]* -} -``` - -- **[NAME]**: - - Name of the data model. Needs to be unique in the entire model. Needs to be a valid identifier matching regular expression `[A-Za-z][a-za-z0-9_]\*`. - -- **[FIELD]**: - - Arbitrary number of fields. See [next section](zmodel-field.md) for details. - -## Note - -A data model must include a `String` typed field named `id`, marked with `@id` attribute. The `id` field serves as a unique identifier for a model entity, and is mapped to the database table's primary key. - -See [here](zmodel-attribute.md) for more details about attributes. - -## Example - -```zmodel -model User { - id String @id -} -``` diff --git a/docs/zmodel-data-source.md b/docs/zmodel-data-source.md deleted file mode 100644 index 1b93c84d9..000000000 --- a/docs/zmodel-data-source.md +++ /dev/null @@ -1,80 +0,0 @@ -# Data source - -Every model needs to include exactly one `datasource` declaration, providing information on how to connect to the underlying database. - -## Syntax - -A data source declaration takes the following form: - -```zmodel -datasource [NAME] { - provider = [PROVIDER] - url = [DB_URL] -} -``` - -- **[NAME]**: - - Name of the data source. Needs to be a valid identifier matching regular expression `[A-Za-z][a-za-z0-9_]\*`. Name is only informational and serves no other purposes. - -- **[PROVIDER]**: - - Name of database connector. Valid values: - - - sqlite - - postgresql - - mysql - - sqlserver - - cockroachdb - -- **[DB_URL]**: - - Database connection string. Either a plain string or an invocation of `env` function to fetch from an environment variable. - -## Examples - -```zmodel -datasource db { - provider = "postgresql" - url = "postgresql://postgres:abc123@localhost:5432/todo?schema=public" -} -``` - -It's highly recommended that you don't commit sensitive database connection string into source control. Alternatively, you can load it from an environment variable: - -```zmodel -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} -``` - -## Supported databases - -ZenStack uses [Prisma](https://prisma.io ':target=_blank') to talk to databases, so all relational databases supported by Prisma is supported by ZenStack as well. - -Here's a list for your reference: - -| Database | Version | -| --------------------- | ------- | -| PostgreSQL | 9.6 | -| PostgreSQL | 10 | -| PostgreSQL | 11 | -| PostgreSQL | 12 | -| PostgreSQL | 13 | -| PostgreSQL | 14 | -| PostgreSQL | 15 | -| MySQL | 5.6 | -| MySQL | 5.7 | -| MySQL | 8 | -| MariaDB | 10 | -| SQLite | \* | -| AWS Aurora | \* | -| AWS Aurora Serverless | \* | -| Microsoft SQL Server | 2022 | -| Microsoft SQL Server | 2019 | -| Microsoft SQL Server | 2017 | -| Azure SQL | \* | -| CockroachDB | 21.2.4+ | - -You can find the orignal list [here](https://www.prisma.io/docs/reference/database-reference/supported-databases ':target=_blank'). diff --git a/docs/zmodel-enum.md b/docs/zmodel-enum.md deleted file mode 100644 index 56a2428c9..000000000 --- a/docs/zmodel-enum.md +++ /dev/null @@ -1,30 +0,0 @@ -# Enum - -Enums are container declarations for grouping constant identifiers. You can use them to express concepts like user roles, product categories, etc. - -## Syntax - -Enum declarations take the following form: - -```prsima -enum [ENUM_NAME] { - [FIELD]* -} -``` - -- **[ENUM_NAME]** - - Name of the enum. Needs to be unique in the entire model. Needs to be a valid identifier matching regular expression `[A-Za-z][a-za-z0-9_]\*`. - -- **[FIELD]** - - Field identifier. Needs to be unique in the data model. Needs to be a valid identifier matching regular expression `[A-Za-z][a-za-z0-9_]\*`. - -## Example - -```zmodel -enum UserRole { - USER - ADMIN -} -``` diff --git a/docs/zmodel-field-constraint.md b/docs/zmodel-field-constraint.md deleted file mode 100644 index bcc416a73..000000000 --- a/docs/zmodel-field-constraint.md +++ /dev/null @@ -1,71 +0,0 @@ -# Field constraint - -## Overview - -Field constraints are used for attaching constraints to field values. Unlike access policies, field constraints only apply on individual fields, and are only checked for 'create' and 'update' operations. - -Internally ZenStack uses [zod](https://github.com/colinhacks/zod ':target=blank') for validation. The checks are run in both the server-side CURD services and the clent-side React hooks. For the server side, upon validation error, HTTP 400 is returned with a body containing a `message` field for details. For the client side, a `ValidationError` is thrown. - -## Constraint attributes - -The following attributes can be used to attach field constraints: - -### String - -- `@length(_ min: Int?, _ max: Int?)` - - Validates length of a string field. - -- `@startsWith(_ text: String)` - - Validates a string field value starts with the given text. - -- `@endsWith(_ text: String)` - - Validates a string field value ends with the given text. - -- `@email()` - - Validates a string field value is a valid email address. - -- `@url()` - - Validates a string field value is a valid url. - -- `@datetime()` - - Validates a string field value is a valid ISO datetime. - -- `@regex(_ regex: String)` - - Validates a string field value matches a regex. - -### Number - -- `@gt(_ value: Int)` - - Validates a number field is greater than the given value. - -- `@gte(_ value: Int)` - - Validates a number field is greater than or equal to the given value. - -- `@lt(_ value: Int)` - - Validates a number field is less than the given value. - -- `@lte(_ value: Int)` - - Validates a number field is less than or equal to the given value. - -## Example - -```zmodel -model User { - id String @id - handle String @regex("^[0-9a-zA-Z]{4,16}$") - email String @email @endsWith("@myorg.com") - profileImage String? @url - age Int @gt(0) -} -``` diff --git a/docs/zmodel-field.md b/docs/zmodel-field.md deleted file mode 100644 index a989228b5..000000000 --- a/docs/zmodel-field.md +++ /dev/null @@ -1,66 +0,0 @@ -# Field - -Fields are typed members of data models. - -## Syntax - -A field declaration takes the following form: - -```zmodel -model Model { - [FIELD_NAME] [FIELD_TYPE] (FIELD_ATTRIBUTES)? -} -``` - -- **[FIELD_NAME]** - - Name of the field. Needs to be unique in the containing data model. Needs to be a valid identifier matching regular expression `[A-Za-z][a-za-z0-9_]\*`. - -- **[FIELD_TYPE]** - - Type of the field. Can be a scalar type or a reference to another data model. - - The following scalar types are supported: - - - String - - Boolean - - Int - - BigInt - - Float - - Decimal - - Json - - Bytes - - A field's type can be any of the scalar or reference type, a list of the aforementioned type (suffixed with `[]`), or an optional of the aforementioned type (suffixed with `?`). - -- **[FIELD_ATTRIBUTES]** - - Field attributes attach extra behaviors or constraints to the field. See [Attribute](zmodel-attribute.md) for more information. - -## Example - -```zmodel -model Post { - // "id" field is a mandatory unique identifier of this model - id String @id @default(uuid()) - - // fields can be DateTime - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - // or string - title String - - // or integer - viewCount Int @default(0) - - // and optional - content String? - - // and a list too - tags String[] - - // and can reference another data model too - comments Comment[] -} -``` diff --git a/docs/zmodel-overview.md b/docs/zmodel-overview.md deleted file mode 100644 index a3fcfc02f..000000000 --- a/docs/zmodel-overview.md +++ /dev/null @@ -1,13 +0,0 @@ -# Overview - -**ZModel**, the modeling DSL of ZenStack, is the main concept that you'll deal with when using this toolkit. - -The **ZModel** syntax is extended from the schema language of [Prisma ORM](https://prisma.io). We made that choice based on several reasons: - -- CRUD heavily relies on database operations, however creating a new ORM doesn't add much value to the community, since there're already nice and mature solutions out there; so instead, we decided to extend Prisma - the overall best ORM toolkit for Typescript. - -- Prisma's schema language is simple and intuitive. - -- Extending a popular existing language lowers the learning curve, compared to inventing a new one. - -Even so, this section provides detailed descriptions about all aspects of the ZModel language, so you don't need to jump over to Prisma's documentation for extra learnings. diff --git a/docs/zmodel-referential-action.md b/docs/zmodel-referential-action.md deleted file mode 100644 index 30cec3ada..000000000 --- a/docs/zmodel-referential-action.md +++ /dev/null @@ -1,68 +0,0 @@ -# Referential action - -## Overview - -When defining a relation, you can use referential action to control what happens when one side of a relation is updated or deleted, by setting the `onDelete` and `onUpdate` parameters in the `@relation` attribute. - -```zmodel - attribute @relation( - _ name: String?, - fields: FieldReference[]?, - references: FieldReference[]?, - onDelete: ReferentialAction?, - onUpdate: ReferentialAction?, - map: String?) -``` - -The `ReferentialAction` enum is defined as: - -```zmodel -enum ReferentialAction { - Cascade - Restrict - NoAction - SetNull - SetDefault -} -``` - -- `Cascade` - - - **onDelete**: deleting a referenced record will trigger the deletion of referencing record. - - - **onUpdate**: updates the relation scalar fields if the referenced scalar fields of the dependent record are updated. - -- `Restrict` - - - **onDelete**: prevents the deletion if any referencing records exist. - - **onUpdate**: prevents the identifier of a referenced record from being changed. - -- `NoAction` - - Similar to 'Restrict', the difference between the two is dependent on the database being used. - - See details [here](https://www.prisma.io/docs/concepts/components/prisma-schema/relations/referential-actions#noaction ':target=blank') - -- `SetNull` - - - **onDelete**: the scalar field of the referencing object will be set to NULL. - - **onUpdate**: when updating the identifier of a referenced object, the scalar fields of the referencing objects will be set to NULL. - -- `SetDefault` - - **onDelete**: the scalar field of the referencing object will be set to the fields default value. - - **onUpdate**: the scalar field of the referencing object will be set to the fields default value. - -## Example - -```zmodel -model User { - id String @id - profile Profile? -} - -model Profile { - id String @id - user @relation(fields: [userId], references: [id], onUpdate: Cascade, onDelete: Cascade) - userId String @unique -} -``` diff --git a/docs/zmodel-relation.md b/docs/zmodel-relation.md deleted file mode 100644 index 02ca4e274..000000000 --- a/docs/zmodel-relation.md +++ /dev/null @@ -1,88 +0,0 @@ -# Relation - -Relations are connections among data models. There're three types of relations: - -- One-to-one -- One-to-many -- Many-to-many - -Relations are expressed with a pair of fields and together with the special `@relation` field attribute. One side of the relation field carries the `@relation` attribute to indicate how the connection is established. - -## One-to-one relation - -The _owner_ side of the relation declares an optional field typed as the data model of the _owned_ side of the relation. - -On the _owned_ side, a reference field is declared with `@relation` attribute, together with an **foreign key** field storing the id of the owner entity. - -```zmodel -model User { - id String @id - profile Profile? -} - -model Profile { - id String @id - user @relation(fields: [userId], references: [id]) - userId String @unique -} -``` - -## One-to-many relation - -The _owner_ side of the relation declares a list field typed as the data model of the _owned_ side of the relation. - -On the _owned_ side, a reference field is declared with `@relation` attribute, together with an **foreign key** field storing the id of the owner entity. - -```zmodel -model User { - id String @id - posts Post[] -} - -model Post { - id String @id - author User? @relation(fields: [authorId], references: [id]) - authorId String? -} -``` - -## Many-to-one relation - -A _join model_ is declared to connect the two sides of the relation, using two one-to-one relations. - -Each side of the relation then establishes a one-to-many relation with the _join model_. - -```zmodel -model Space { - id String @id - // one-to-many with the "join-model" - members Membership[] -} - -// Membership is the "join-model" between User and Space -model Membership { - id String @id() - - // one-to-many from Space - space Space @relation(fields: [spaceId], references: [id]) - spaceId String - - // one-to-many from User - user User @relation(fields: [userId], references: [id]) - userId String - - // a user can be member of a space for only once - @@unique([userId, spaceId]) -} - -model User { - id String @id - // one-to-many with the "join-model" - membership Membership[] -} - -``` - -## Referential action - -When defining a relation, you can specify what happens when one side of a relation is updated or deleted. See [Referential action](zmodel-referential-action.md) for details. diff --git a/package.json b/package.json index 3ab50a562..2a6d99669 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/language/README.md b/packages/language/README.md index 8cad987c3..27c17fd12 100644 --- a/packages/language/README.md +++ b/packages/language/README.md @@ -1 +1,5 @@ -ZenStack ZModel language compiler +# ZenStack ZModel language compiler + +This package provides the AST of ZModel - ZenStack's modeling language. + +Visit [Homepage](https://zenstack.dev) for more details. diff --git a/packages/language/package.json b/packages/language/package.json index a7da6be48..b499fd6a1 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "displayName": "ZenStack modeling language compiler", "description": "ZenStack modeling language compiler", "homepage": "https://zenstack.dev", diff --git a/packages/next/package.json b/packages/next/package.json index 887edb7c2..0351fda53 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/next", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "displayName": "ZenStack Next.js integration", "description": "ZenStack Next.js integration", "homepage": "https://zenstack.dev", diff --git a/packages/plugins/react/README.md b/packages/plugins/react/README.md index af12f7f86..e651fe280 100644 --- a/packages/plugins/react/README.md +++ b/packages/plugins/react/README.md @@ -1,3 +1,5 @@ # ZenStack React plugin & runtime This package contains ZenStack plugin and runtime for ReactJS. + +Visit [Homepage](https://zenstack.dev) for more details. diff --git a/packages/plugins/react/package.json b/packages/plugins/react/package.json index cdef9b1ef..da98367b8 100644 --- a/packages/plugins/react/package.json +++ b/packages/plugins/react/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/react", "displayName": "ZenStack plugin and runtime for ReactJS", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "description": "ZenStack plugin and runtime for ReactJS", "main": "index.js", "repository": { diff --git a/packages/plugins/trpc/README.md b/packages/plugins/trpc/README.md index 392982366..2e41ff05e 100644 --- a/packages/plugins/trpc/README.md +++ b/packages/plugins/trpc/README.md @@ -1,3 +1,5 @@ # ZenStack tRPC plugin -This package contains ZenStack plugin for tRPC. It's based on [prisma-trpc-generator](https://github.com/omar-dulaimi/prisma-trpc-generator). +This package contains ZenStack plugin for tRPC. The implementation is based on [prisma-trpc-generator](https://github.com/omar-dulaimi/prisma-trpc-generator). + +Visit [Homepage](https://zenstack.dev) for more details. diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index bbdd85552..65f6ed6e5 100644 --- a/packages/plugins/trpc/package.json +++ b/packages/plugins/trpc/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/trpc", "displayName": "ZenStack plugin for tRPC", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 82fe4c3ba..2fcaca000 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/schema/package.json b/packages/schema/package.json index f33eb1b81..d803e6250 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack Language Tools", "description": "A toolkit for building secure CRUD apps with Next.js + Typescript", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "author": { "name": "ZenStack Team" }, diff --git a/packages/sdk/README.md b/packages/sdk/README.md index 4b135ae78..63f7fa833 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -1 +1,5 @@ -ZenStack plugin development SDK +# ZenStack plugin development SDK + +This package provides types and utilities for developing a ZenStack plugin. + +Visit [Homepage](https://zenstack.dev) for more details. diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 95cfdc3ae..2311c713c 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "1.0.0-alpha.27", + "version": "1.0.0-alpha.28", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": {