From ce0b08b0e73e06ff42cc17769a31d577b10d7404 Mon Sep 17 00:00:00 2001 From: Yasamato Date: Wed, 4 Dec 2024 17:58:52 +0100 Subject: [PATCH] Bump a lot of deps --- .env.example | 1 + Dockerfile | 10 +- app/api/auth/[...nextauth]/route.ts | 3 + pages/api/auth/[...nextauth].ts => auth.ts | 62 +- bun.lockb | Bin 222807 -> 0 bytes components/CardRowView.tsx | 48 +- components/boards/Board.tsx | 12 +- components/cards/CollectionCard.tsx | 6 +- components/cards/ColumnCard.tsx | 6 +- components/cards/DataCard.tsx | 4 +- components/cards/ItemCard.tsx | 9 +- components/cards/LibraryCard.tsx | 7 +- components/cards/ListCard.tsx | 7 +- components/cards/UserCard.tsx | 7 +- components/data/ArrayValue.tsx | 6 +- components/data/DataItem.tsx | 4 +- components/data/FeatureValue.tsx | 6 +- components/data/LanguageValue.tsx | 2 +- components/data/Pagination.tsx | 2 +- components/data/ProAndConValue.tsx | 6 +- .../data/{TextValue.js => TextValue.tsx} | 12 +- components/icons/IconStar.tsx | 6 +- components/layout/Layout.tsx | 2 +- components/layout/Meta.tsx | 12 +- components/links/FooterLink.tsx | 2 +- components/modals/ItemToListModal.tsx | 2 +- components/modals/Modal.tsx | 2 +- components/modals/OnlineStatusModal.tsx | 2 +- components/navbar/{Navbar.js => Navbar.tsx} | 6 +- .../{NavbarBrand.js => NavbarBrand.tsx} | 0 .../{NavbarDropdown.js => NavbarDropdown.tsx} | 8 +- ...ideToggler.js => NavbarOutsideToggler.tsx} | 20 +- .../{NavbarToggler.js => NavbarToggler.tsx} | 18 +- .../navbar/{NavbarUser.js => NavbarUser.tsx} | 4 +- components/navbar/{Sidebar.js => Sidebar.tsx} | 0 components/rows/CollectionRow.tsx | 7 +- components/rows/ColumnRow.tsx | 7 +- components/rows/ItemRow.tsx | 15 +- components/rows/LibraryRow.tsx | 7 +- components/rows/ListRow.tsx | 7 +- components/rows/UserRow.tsx | 7 +- lib/crawler/browser.ts | 2 +- lib/crawler/html.ts | 11 +- lib/crawler/screenshot.ts | 10 +- lib/db/cache.ts | 12 +- lib/db/db.ts | 15 +- lib/db/itemScreenshots.ts | 17 +- lib/db/lists.ts | 7 +- lib/db/users.ts | 6 +- lib/session.ts | 27 +- lib/utils.ts | 6 +- lib/webhook.ts | 45 +- next.config.js | 10 +- package-lock.json | 3277 ++++++++++------- package.json | 50 +- pages/admin.tsx | 8 +- pages/api/admin/cache/clear.ts | 5 +- pages/api/admin/screenshot/clear.ts | 5 +- pages/api/admin/screenshot/create/[id].ts | 5 +- pages/api/admin/screenshot/createAll.ts | 5 +- pages/api/delete/collection.ts | 5 +- pages/api/delete/column.ts | 5 +- pages/api/delete/item.ts | 7 +- pages/api/delete/library.ts | 5 +- pages/api/delete/list.ts | 10 +- pages/api/edit/collection.ts | 5 +- pages/api/edit/collection/libraries.ts | 5 +- pages/api/edit/column.ts | 5 +- pages/api/edit/column/collections.ts | 5 +- pages/api/edit/item.ts | 7 +- pages/api/edit/item/collections.ts | 5 +- pages/api/edit/library.ts | 5 +- pages/api/edit/library/order.ts | 5 +- pages/api/edit/list.ts | 10 +- pages/api/edit/user.ts | 10 +- pages/api/export.ts | 5 +- pages/api/item/screenshot/[id].ts | 5 +- pages/api/stats/pageview.ts | 14 +- pages/api/user/[id].ts | 9 +- pages/api/users.ts | 5 +- pages/collection/[id].tsx | 6 +- pages/column/[id].tsx | 14 +- pages/edit/collection/[id].tsx | 5 +- pages/edit/column/[id].tsx | 5 +- pages/edit/item/[id].tsx | 5 +- pages/edit/library/[id].tsx | 5 +- pages/edit/list/[id].tsx | 12 +- pages/edit/user/[id].tsx | 4 +- pages/item/[id].tsx | 10 +- pages/library/[id].tsx | 10 +- pages/list/[id].tsx | 14 +- pages/user/[id].tsx | 16 +- pages/validate-api.tsx | 2 +- tsconfig.json | 25 +- 94 files changed, 2381 insertions(+), 1761 deletions(-) create mode 100644 app/api/auth/[...nextauth]/route.ts rename pages/api/auth/[...nextauth].ts => auth.ts (60%) delete mode 100644 bun.lockb rename components/data/{TextValue.js => TextValue.tsx} (56%) rename components/navbar/{Navbar.js => Navbar.tsx} (96%) rename components/navbar/{NavbarBrand.js => NavbarBrand.tsx} (100%) rename components/navbar/{NavbarDropdown.js => NavbarDropdown.tsx} (90%) rename components/navbar/{NavbarOutsideToggler.js => NavbarOutsideToggler.tsx} (88%) rename components/navbar/{NavbarToggler.js => NavbarToggler.tsx} (76%) rename components/navbar/{NavbarUser.js => NavbarUser.tsx} (88%) rename components/navbar/{Sidebar.js => Sidebar.tsx} (100%) diff --git a/.env.example b/.env.example index 9b23d1b8..e9f8fe55 100644 --- a/.env.example +++ b/.env.example @@ -7,6 +7,7 @@ NEXT_PUBLIC_SITE_NAME="The Anime Index" # remove trailing slash !!! NEXT_PUBLIC_DOMAIN="https://piracy.moe" NEXTAUTH_URL="https://piracy.moe" +AUTH_TRUST_HOST="true" # secret for session hash validations NEXTAUTH_SECRET="generate_a_real_long_and_secure_random_string" diff --git a/Dockerfile b/Dockerfile index a2fbe7d3..d9a67be2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.3 +FROM node:23.3 WORKDIR /app # We use the image browserless/chrome instead of having our own chrome instance here @@ -12,6 +12,7 @@ ENV NEXT_PUBLIC_SITE_NAME="The Anime Index" # connection urls ENV NEXTAUTH_URL="https://theindex.moe" ENV NEXT_PUBLIC_DOMAIN="https://theindex.moe" +ENV AUTH_TRUST_HOST="true" ENV DATABASE_URL="mongodb://mongo:27017/index" ENV CACHE_URL="redis://redis:6379" ENV AUDIT_WEBHOOK="" @@ -40,6 +41,13 @@ COPY package.json package-lock.json ./ RUN npm ci ENV PATH /app/node_modules/.bin:$PATH +# manully add .js to import as something is messed up... +RUN sed -i 's/next\/server/next\/server.js/' /app/node_modules/next-auth/lib/env.js \ + && sed -i 's/next\/server/next\/server.js/' /app/node_modules/next-auth/lib/index.js \ + && sed -i 's/next\/headers/next\/headers.js/' /app/node_modules/next-auth/lib/index.js \ + && sed -i 's/next\/headers/next\/headers.js/' /app/node_modules/next-auth/lib/actions.js \ + && sed -i 's/next\/navigation/next\/navigation.js/' /app/node_modules/next-auth/lib/actions.js + # build the web app COPY . . diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 00000000..c52987ae --- /dev/null +++ b/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,3 @@ +import { handlers } from '../../../../auth' + +export const { GET, POST } = handlers diff --git a/pages/api/auth/[...nextauth].ts b/auth.ts similarity index 60% rename from pages/api/auth/[...nextauth].ts rename to auth.ts index c306fa13..d375ae52 100644 --- a/pages/api/auth/[...nextauth].ts +++ b/auth.ts @@ -1,15 +1,15 @@ import NextAuth from 'next-auth' import DiscordProvider from 'next-auth/providers/discord' -import { addUser } from '../../../lib/db/users' -import { AccountType, type User } from '../../../types/User' -import { MongoDBAdapter } from '@next-auth/mongodb-adapter' -import { dbClient } from '../../../lib/db/db' +import { addUser } from './lib/db/users' +import { AccountType, type User } from './types/User' +import { MongoDBAdapter } from '@auth/mongodb-adapter' +import { dbClient } from './lib/db/db' import { ObjectId } from 'mongodb' -import type { AuthOptions } from 'next-auth' -import { findOneTyped } from '../../../lib/db/dbTyped' -import { Types } from '../../../types/Components' +import type { NextAuthConfig } from 'next-auth' +import { findOneTyped } from './lib/db/dbTyped' +import { Types } from './types/Components' -export const authOptions: AuthOptions = { +export const authOptions: NextAuthConfig = { providers: [ DiscordProvider({ clientId: process.env.DISCORD_CLIENT_ID, @@ -57,26 +57,39 @@ export const authOptions: AuthOptions = { if (isNewUser) { console.log('Creating new user', user.name) const accountType = + account !== null && typeof process.env.SETUP_WHITELIST_DISCORD_ID !== 'undefined' && process.env.SETUP_WHITELIST_DISCORD_ID !== '' && account.providerAccountId === process.env.SETUP_WHITELIST_DISCORD_ID ? AccountType.admin : AccountType.user - await addUser({ - uid: user.id.toString(), - accountType, - }) - } else if (user.image !== profile.image) { - // update new discord image on login - const db = (await dbClient).db('index') - await db.collection('nextauth_users').updateOne( - { _id: new ObjectId(user.id) }, - { - $set: { - image: profile.image, - }, - } - ) + if (typeof user.id !== 'undefined') { + await addUser({ + uid: user.id.toString(), + accountType, + }) + } else { + console.log('Unable to create new user', user, 'due to missing id') + } + } else if (profile && user.image !== profile.image) { + if (typeof user.id !== 'undefined') { + // update new discord image on login + const db = (await dbClient).db('index') + await db.collection('nextauth_users').updateOne( + { _id: new ObjectId(user.id) }, + { + $set: { + image: profile.image, + }, + } + ) + } else { + console.log( + 'Unable to update user profile picutre', + user, + 'due to missing id' + ) + } } }, }, @@ -91,4 +104,5 @@ export const authOptions: AuthOptions = { }), secret: process.env.NEXTAUTH_SECRET, } -export default NextAuth(authOptions) + +export const { auth, handlers, signIn, signOut } = NextAuth(authOptions) diff --git a/bun.lockb b/bun.lockb deleted file mode 100644 index aa69429a62d02505991443740ecd76aa5c5245f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222807 zcmeEvc|4Wd_x~Y^BodLx*lZ@EL=uuH8B(ExW6G3cPDK-`M6*UIQ5vX}Qc`JK|oo+F9Ix<7$Dc59Uca9XM|ZSX{hf5lmXlf*bDGTR~AbGFoGKt z;01Dvpj{5?pM_W~WxznF%L7(JT@}y;>Zqp(>I#77Q11h{5$gQ`hf?);s@{i^pGnD& z1ylq%bwDLR2|)Cx83KZSb2-6L92nvosH6Yhp+TWIVy-xEoaKN$p}imc!2VNE?+)k- z2>%jJz_<}(05Kl1FgQdLsH5Bfs7nHlgCA0W27nj`Qr{19sNXw?8v|xpTcD2px8Mi* z*A{op0B$0*W85Bs64a~P`|ozi{1E$rl-_7AYGtuDLJ(1}563Ig59+~G`vPc3|Kmb^ z+T~KF+H5eul^CDJvLpL{!_&8i|b`aZ#;~f+b831}z`tj`f0HSv{sK50j?r)f)^tb`^e=)PuIUSoNx|e}-HRR0(G2CX+7LP}Lp$o@MnL3( zV_2uDx+f$Rj>F4COrb@#Y{#hqJ@NVp%L5WnNsn zfWK%bK!rC>E-YY-*Jr4soq#qri$&%|1=>;nbU+-Z9U#VKu^LZ4gcA|W=FVaf-gRh4 z{Tyysct9|lwOF0!=Zpb7JsfUiL_iRiLQ8}Ra>0TBB`*dd_-FhZ|Lu2(4J%bVdmexVl6UKq8Y zR~qtoIna*z;Aq5Kj~k(m>sDX{FF!s*JH|6Gl-rhvE1@6j-l3th0-z<79U0*dAYV`}kn0l~3^;c*k5BXwJt5F80envitIc@!hMM#A*h4$cqXi(wnKgzN zPe(u;wOkBA|8W0#_Jx% zgE{9$#0GJQU3&qZzJSnhj!yuW)nLtwUkxCR?-GSYfEe%HfM~~u6EZsz<}U;4xK5J+ zF)o&%5ADIC4`=(bSbjmFcspe&PvFVP0;2y10Z~sMJD$7kSL2SRa zctE>PXat;FSS(#?++_|_ykY`i7iO`{CQ*JuKi=!$5o`t(W9p{w;=bn%VIQPup@qGbNuMLHy-)K6IuSwxa4_^Hcg+ZLCwt3hAb<7JN z4krwb39J;T_l5d;;NiUgo(Cb&j`LBZ|Zb!-a!l_X+GK`h!&Eu`5Fbt2b>1Gsuvpii9pxamA|g0GtYnbKadEh?EW%@1c;DlIObxX6hW4MZ z7SJEIcW5{U$P3zWyaQoEu>A$pao_R@^^OP+2;q!@I_i)15Aeo03*d5MKpjgvfMVZlk*`5N>N^66dE5&6@P2Uw5Xa@q=0?m0ec_x)Zh&tr z%Q1-Ory6XI=ofC1IG)~sD6a{5&=2tUd2@onC_uX!=*2kgqV!vY^7Q>KZwT$Ezlp*} zfZ|Y}7siW&G}ysBA@=@1{nL1Pe$|aPKHN+(KNNw4*(E-qD0d z5dQ-d&l&V$dsQ57{C?0b2X%uvJbzz9e;=rSj^^208_(O<2hQd3>M6Z_ppJ1D2E={! zJIJBl6hQRvG4OHSz5sa~e)C=M$rg?C<@3yA&@IkFx}T?Oo*e>KZ^`oy7*acBbl zihvE2J$yXHybE5z8-EDYasGZn9rce(<<-5y+1{ALC!mh)f-8CcIsu}5FeluPqsL;A zeQW~g!FWcn!`NOy99B4t1J{cw)5KLgf5`s-dz^6J^n%>x z2DRNzSv~>bZ5wXJ8lE5OfS5O%K%X+8B-lm0R|j_21hK$IIyA+EMegM}U1m&(cl2{@=$J5AA5jbTiNI zP^vxy5c9%i3om~T1EQY(TY2?kfEe$7+j#TSi$Yi@Tuub;%bLOLFcxbk$l*F#0f_k# z57-OP4D?}rJY{DjAg&W1&g@8b5Q_!JK~17MF@|=Qh(w@?DURWIX9I|eKboX6q*Qf5eHvZ$bCtkDFP0ht5 zMm%+x?V?<4vU-l($gcrOPQH$hcFkJjb--nVLw@%KYYGk7lkaVAxI546PPY}$T$5Jh z?sibTzIoM+Vp1PglYP!J<=NLM_oqLaUY8)|C%p9Yjd=%eIur^d#+w@Eu9R_SA3MHL zZGEz9gTW=&1)BR8h^ve|qvW`>W`F;ww%v(cGC#zAYF~}7`L$g)bQ2mswoLUtpBO|r5yY^(A z@blvFX5CJHJ@fE@D~VH6+1#+rw=P$`U!PwiAFuL$<*SB0MhT7IO#QC;#3u!+TfP@~ z|D+_Mv^7W|KTOr~uA=HgwNg>lW77mS-?RF%Eo^V7?%|+D@2#(Wra9M*Dz$uEH~B)q z8%2);0eLqs_b%!4J?L!f#OX1fa)TDJt26Z`Iaj?_j|-J_v)4Y8)%Vg_X+zaB>dOwW zatu>@)-8V0@71~SmdgjnonE=fIr4|2l4Y~2<7U>6w_h(cUbG76m+60TRjT|L%Yv;3 zzVBU-e!0-b^ZSeY!6#CLt5)sIbv)PN`MG$;Dz}6OA_AO2Mnt7oj#s(v+P2r=*jLK7^fSb)cslJ8cp+4qul528SXZ(hwArRwu0lFt|U)5 zn|pIaeboICwwD_9Hp#~ronCfi-Png$#UmeCpXhQ_Gxnj^SvNn`2_!Fm*L%syWA5%9 zYd7x^d!l!H+t@he{yu%iFI<@<#OnPpdsYcPkWFNC@s~y5#F$G;DwFha|_11?4l? zS1!G_6G7b;pdZuPs|5f$@33iS-Q7^8frLHb`o`kgf{yRn6l0B{oZYhHfnLc z<@}smloB3z(%tsO`GB+MN9}Oftv4uUo#BZ^LzPxn?R=~|<&CiZf_l-FF+LOfHQJ58 zHlTmS&29>hMRqqNP7oC~?dfL|ou&RFO<%v?gn?&-1ui{%sNJjYx%G0_M%3&adVg8u z_#w6?z7KC_6fPP&WVF{(qn^U<#m+i6hDG-*3oYDPz00oQQ&D=*>B+t?Y?Y)+jkV5{ zmFFcsJCa`GH+(&(dSGSh{=f7QJ+F7{)Y&re`;K^bp#w48IY-M6j6Uw;G)lQeT(wZf zJhN%G$&`&I{r8@XpZGdtUALCnt%lwX1!aB_Sp`44e~YV`@UCgVsVsfNN|L8lJKelL z%DuJ;`r-p>u zhv=c(hF?GMLpo+&KlRM|%~$qu^mb^Lq{M|EDz~_keSW#zhBMB0`d5lI8l+vHR9Z;v z9+8{QI=?Q(f7JTNPp;W0_qiCN((`)Nk-~l|_gW_QpSo78r)ui7F;jXf)O^2ZEN!3K}Xjg4V$ry7Mf-+wc>d_{auS;3nzu9K@Ly1y@f*lXiU zS-A(*elpn_XI?d2s}_E?)-Ytl{vMb2MobyxZUlJ_KkN&b_3C;3U%1Ig#B1~o0Wc39?reX*y(;YR*C zp`$luEPa@IzGGbw1S+2Rjx2L`P|I{#Gp$(LEp*#}1dU;fIbO9MI*td29b55s zR8Z8A9Z$TEIVH?FAer0jB5!kD>D{4n6Ws|;@`(@ja!)wt?H81INBW)bJRByaG$Bqo z$~He-+O~AWI?XjIXQj#ymCs*g;kS2yzQ}-y?cyyh?%qTSCN3DgDsPmyYMlZ*z79mbvMC>Aw8PO0AM2EepNDH%?29 z{N!o3s$%Ps;<34{J$Lnd8qia|a5C3AzV~)7kB2!flPm1ml7}zcQXAE6act6(PwtbJ zw{kBH)y^4R`gF0^T)m(}A1+<>_q#B}Ga>q+uLQ~GAJ0`keu`+1U|*#Pr+ce)JEgJd?nq}j+o%THDjoY3?h@+boXpm0 z%&6=!v3gqJ+aXEahHRa<<6zE6B^!^pRkjnB`K&28aku<|seM?i;^H%-exJ9|$&<5M zJcHu<2)ilTD=sYO%zF_X?)EUpVc+%WH@Er@|6Tt6kvs`+$L!44&0ck$y+sW2RHkNq zUHnu1RS)I9VhaZ7JxsnAQDA>bgxLFCe^dE>O=;DxH@ZG~-`ly1bd>4cGha4KZeLiG z9{<21GdeA!Zq1R&OP=bOgnN0I%H>6u)-SkJ9_tZI&WXch!&c9j65F`!;ykfimG{3* z-8Q1%ZvQiXS_aOx?Q@^d9aPyGSQ{B_189K zT#}z1TqLHb&^kYT&$Dut>Wjt8O0KOFyYq4F)FWcE%{<;meI2`PZ`0A_v<#6aBeHsK zI2O60*!-qKY3-E5WjjMN7CqnDzw}{K57|Kf8($~Nq{gWHxKnvQGo!nq(y`@lrK^{Z zE!kD^ri*iQ%F}fUpT!zRzMQZ+UHm0`zp!b+<8{&uF#56(qo2OM4q{Nuj*y=?MLzs2jm7mQ@NkEQO%~zw2ytby{npZ$(C)m zuD=d5kIyTeKeA`;`~OGU@4xJS)N04(iyFgiV>E}oiXSTfy!ZXNr>eY- zrPStI4f*g|Svp_rZg9-vBURx)^1jwIEFWNK7dK36+gq)1u@)PPPmdG7BfDNpD#7=$ z+~SKFB~y1ls&yT)H&ydkUGT;eD(UQ!Gs7H@ZJRVOZoGJ(=4nmK>*wnIJfdhXoN`=3 zXlsL~oH%ij4g+T~X|?gJQpopvb?@v&(yrTvc(% zYp`zi)qc+-zkDw>YN_B%_F0(ExjNL?;TVx4>ygyojF~=lxP!E@>vREy;`>Jz2Krk! zN7s)$-hGs5;sJrQ-7<1pH2Mfuj+W^;eww%cEtCHGR_y0-YgKj4b`FSN*h~IZaM`A* z&n8zm&wTy!Ya07=sr2ox$Im`fGW}3ma7l8wztB`Yr^>E-&JESJ`QAKT`u)dUQkw-= z`KFP5%>V7-w~hu8LoT)$h^^7ADszcwjCK1dbJq8c*+FN`5l?n2)?K`LaNK9X+9mND zmg61?c76Q?OXr- zwZ*ShxEk_T9-j=`koxICNdFI~Zr)ZmcFB00Afd1|m)zg`N=XGdsYz6qI0l>*{85#* zSaL>C&?14&+^%VJy*HS|kaKvc{D7{-o-^xnV}FF|XZ9PjbeIU zK2DOaC3`9?`xjXy{95Q|-%zHG|c#Gt^r-38j-*!=kqL5f-qinQSU5Z3V$W~h?z zjo^bm@TDj|LwcJnl#K$uIq-2jLfF8t5c^l*g9-5Y;i3t`7wy7gxlr~=8xt3ZY&`Hs z1D|l1&I{om2R_CR`6_TR9S7mpz=YX#g0Bj{KV{zuei-nrI>A2&e2gE)jf@Fn(NQ6? zUAnPYdcemzsA8;x@P`B6sT2M$1->`sKl)7c;^+1Xk$VmNshzNIDFWZscfx)i@H>+~ zUw}Wo6ZRe9ONB|D7=ISPeQe{GKOgw! zz{mX)mI4crNg?)c0pAk%$iX(!j`j8mksAnKijn&t`cB&0<6<9?^8x-S%765o-}_%C z@GXE(^zl3X2H=kcKAwB}p<@gSu{RpN>>dgHKRy2}p!jGOzHek)i2akm$M|6#$H4FS zTPXX;!}}**ObW5@3SY9Cfqmp)8^8Ix4*2k0XIuWF|3ok9Yp)QwDw=&VhW2=*kMO17 z3sKB}vUd3O-v#(Ol>exc-}o;9{$z?zd_(l&M6k7BV_3RH<=yj7{(J;J&OfAK+g}gx8^6);WxEAs zAG!SU6M#?FFUF5welhUz{0_rti$A~oM#?_W+txps7p%8eh};lqUi{&AAMks9#)a_n zfUgPu!!Ztj?}6{}HvxYV@QLAhH()>v3bAhvzkH!b%^$`e_W&k^@WX+x0eq}u>`8k^ zI*8m>;E$#JN89kb5{wGre+0fZ@X>eNzcG$X3gN54#5n*Tj&Xby!Vd>N?muWB3%~hS z2z(qr>cflZL0#%4#dvC zA(1}{{1Mdn|HS@V;N$*D#?P<+L*dYC0({JUehTqF6!;i_%s+nSknr~b-xB!fH$OTE z{~hpg{bL>NlQ_V~b_?MTQsC`hIBysOe&go@e6)`|)X6V@Bk(c)$U`6a%UBY_!}Q;{CI|A zT8RI%fKTk>_(^+5dWhU^;G0wP&vfjloA6%%UyI`79?o%iAF@O2V9We8k|8Xk3`zP6ViC&axuMoL1 z;N$%Z>wmKU3aYYL=D^2s6P@kZC4EHJ0{GEC`cCI7tMSe+GQ@vh;A8$^8?Iq~?Pmd> z9)H}2nG|CGHf3KJNKCn?pYWvz^4`B-8@_)cam0Fih43AKkLP!izoflAF7^?*4B*?) z_#N>`KjA+FKE|&r)j`^c+`l1_(;LJ)|KtA2bnZ|m;U@y$9PDEo@<}_^+bcxwG-aP@ z+=))YZvnm;*hfCL!Ph~I3gM3!%=`X}#E)qV2!9dq@%(}LhlS}l2)_jQ(}0g$coo37 z5Wd_HUjB9iCY~Ret^vZI0(^S@^6UQ=;M;)zXdesF%d7qSPa^jO`1t%u>iqhzIP}-~ z7p?I-f3ty4oVERD1Z(N8SgjXj{!dBk33u?k2+F7_@jpL z-XCEd?K3TezXT z)|2u{*+GG?+p(ho#Fcee{v`69|b;sfAOdD-xXfI zX};#*PcgzYW00{6_}vVf^m@4`_TejQaqSLhQ@K!#~+SklnpH`{WEtY_x~Oehcu;DgXHy1K}IP!-EU($^Db54}`xN`1t&R_r2b5 z@tc1)fNVj<4|9NNA@-#qdGPreLWVaHB5C9*)_n2TR;M?J$!%3@BVWR_z;4&^@FkFH-6uN zkLw4hjBTSV@m~iH->?NHV4EmhI0hz#@WX(Q=U2=_QLKRM9JGJy=BJSH%fZVd z9RHu%w*fxRALbuFh1gG}_$2q3#*pyu10PZ-0d3}@5{Au{|B-`xFVlG>eB-ga^9SLQcGTBiA#%aMNB=Qy{Hy`O&jvmm;S;cq7r*&? z7x@0bC*vmAp6}R4>|0p!{(gb!yc4~IzXtgD{_s!v&w!8nH|j&*)rf%(kl0rr_v`!# z=Saqd@TUVG_iqw6rq3XRe*pL}gunPq9U%M|@%azAe`0?*@L>oE$mJ&n#Mf%zkD>Uaji30**z(pN+Q$6hcmK`>J{do`2k~RS z7WjC6C0s-%g^X1PUVf7JArHsFq!4}#@Nxej`9s<}(m~`-10R;qU-L(vW0~@mA$iI9 z7dia;KLhxdlzrqAzwmQ=g~(+BpPXM%9&><6A^h7EpZLvm4NBhJt)Yo1ia_(T9(+U0=;CIHp(p27m|Kd;mPXNAWC;Wc}d~*K# zllU3A@y;*g-cRD%UhJ`t$b|wQj*xBZAKUmnzdV`7+dnXW;j28xh1lOc1O8taV4vhI z!HyIWem|IeSb~4d4+B2jLK1M?OvjGC5&Lz(9}avR{|M}0SO{OrSX=9>-$lBBR zxc@TUhY0@yjsGX(?*hq>`HS<0I{BSHGvMR?1=P0q^UDtfz76onc$nS;i2PCD8&dYs zHq#go{u|)KD}=ws&#!%>nZMqjGPRAdBKH5+?+@mJ|K>1$^c}}e{DP0|79v+M^Vjny z)44~*gfGDU`}+f?Itbqw_?F;5SvLgRb)IH_F7Ppb$lUSEKM8zXKj;toju(?c{BHsN zXy79Uxx^2ww^s4DUTmeMh~7KMVNy{K=1PIzJouuy3~g{(~HLFf7FWQ{dzC z8`7lVBJEgjuMjyEZ(jV!x+U%Haj}occ>*8jALGYQA^bebKGS(4HVFU4Z~l}1j*##N z`S9ZZr~Z2aAIIMX3^L7K^o`ih1U@}~JMx?K6aIbRXTIlY0t$bKrNQ+W6&b`}6$gXYA-3u@eCNNnoF8-Xa$Z z;U5D&?*B~V&SU@LzXLwzKaL*@Q$57KOTe%9x5y{$__@78LS#~i{l~z^^^5s~7r*x9 zX8ro_SN#d!ANcSH+7^GNwsCyK|1#j?`#a>4Htg@H5ZT^AyuZIBe36cbR6pT!fRFnJ z@+BE^QH=0603Yw)Wb91WG2veU{y19vnC{_(uN}-{nRg<7^MH@*hs2NH^;pFKfi@h{u6&l9&|JWB7YkAoq7N98TjV3{NXqMoI`)z zztMMo{r_Lbe+T%F_tQ>#rxD{OJ^*=wmtuM1C*uN&f%I`_G5Khg)D<{P5n%G={`} zI=noc41BCB{sDgrm$!f8xFz6XT8RBGz$f$1l#6nNuN%QTf8e;Wjo&l({7-jTo7AC7^XV>|MJ@Z*4w_b=r3p?v6w zi~WS(Cx-X^CGzp&_x=?Id~*Lqy-W+Se+2k=en;C__+5V=fv-d36Fod_|NfKMSC9P_ ze{3V||IXy~5IHXJasElYBOd7|@;Nm7=sRgAa{q=z?gj8Mf62HB{u__96TVs;Z~b9A z#-88!PX|7kKh()@{$>E5?mxfhucyGbr^b(C=Xd-zb9n#%2Ero)+`rEs({l*16Yv|K-~8DDd>fko z{PJG`-h;|~QsSwCo#U;F!jZ$}$HzwvJY{y5tBdvr8#s-O5ddj7Bf z{|-ZHn;7A*=_LOp@af}c>I1QFn817fC;88B{;UE%$sg27^mOD0v0n>(GXKcsmoK0A z_x+1s|HFY#)<62h@A<0?_?@}`cVF=9{D))bH-9aFPvQ@BzT>wX`1t+<$Bu>H{r3#; z$^MO890QX=>~?E|Nl+?_jbZh z2EHZDKELt141D_d`Mv-AuiwAPE&cWW`cL*Rci`jm2gXz6_aL`ZC-Kh%KEA)eb%$;I z#;*?em_KL=b%^2z28GzSO8NEopZNZO=@ ze*`suOmiOxK>Y8l{RFU2_CJyXOkzmvzW_dY{-yiXkq*K)TK?<&@F(_@fbT`kKk7ss zObW680{FQ9AP?iu@BC}7V6n`BkM}*~620)T-9qH%0^f%6zg@y_orHf5`1t+;{r{8r ziKg=MAN|L|@BPOf_-G&fAu()I)WHwpe=_h5DF2ayI+zr~KTr9OvB&vix`qf}awTv6 z$+-FDy8|D`&opny*ogi0z{l~UU7Q1c?NZPpXP5E@TY+No|I0e;~@5{fRE?T?!dv{P@?q8(6qZkmm3BbqSKgPIW8);|CUjls0KjdKyF%Os& zVy6!H7Qjaij-P2Ee5DOM`{dkD+B?!io-QCH=&{Nd}Kk;>Oem z!jA&JIoSWx`*#`eF@JIYMV&-1@$=u1$O&%boqte{wEY{0-cDq#fRFZZ{Mg3t_!j|x z0`QTCI{4*Z1-=typX3mz>97$0k8b+){sC<>J;xFL|N8yGH}KzriXRS|+=n{~0P){> zGmGU0e3Zxa-v>W1D1^Ts_-G%wcwrthDTLnydjPO!@5J`25=60(=9AAF)f2 zsr~DnpIvs1^dJwo);`u2qz{& z3m&X)T@?<#+Z5$V+6fZ*o;!cte=v9Wo&W#!{j;<0Unjx%r$YR2?0Av5kU0Gt61iO9 zHb;AC0;G0wNW12e{A2R;IyZ-+EL5NB4 zXnZf=7d&9DN6jwoji7vdPWupnaH0xM7uu|5_nP!O>WV`wXgScjOl6-2Blj zEQlxT2VLS8Xk$U6xa7CNGQ30#P$;KG84{0nd){}NnS z=!or=ZLK`S@m#0s|AeUj23+VzHH9^R$h!*{>Z^kb3nI$j#|jiCh{6im5s}}Ys?!mhl&E$@jHen^{}b#Ed`;k^J#9c#r9_<`ee21LFq zHZnvMol42m5u4no_J2a`ng%~`-rNDP?twoj#E+g-{htv1WJ5oScu{h66ovL#R68Pm z45I4%U^n1#DSiZCSE$EPdJysB9Qc9$%%$4@39)}Z)lWwp{{pK0pAdPApdUpRQ*wy- zaS2sN#E(f-9TD}WP<2Gqvm6lDX$GJ);6AGV{{m6feo7xA#{VcFHWk4Sw11q!6IA<2 zs(uO(3nKb`hUz~{wIkxkG78U8cpe*}&`}KP*P(qN;1{Z&j_5}V)vtsVD2O<(0|1dS zkZMQ7kAtatdx*Rtl>9JC9ueC$s5%|7U6X2W4^d8wl0(G0HXt_XQtgP?u1BFhg$7hV zBK8jl#Q2V&>c$kB0Al$kMBYe>H=2?|#C9{Pj))(}Q0*2}J0i-B1w^}6RNb2DN5p;` zs!m7TkL;-aiB$hTA$B=Xa+4@IMEvMTwNIhi>4^TgQ2nleDB?!R(Gm05i)u$if4u>* zi9?|uR-hnazdu!{BifrqwbK#xM?kw2;1WO_cM2s(N7TEFYNsRWO@;PBfQ5i~9z70- z^2L-qBGyj;qW)5%o# zQHURf;0IzisvQyK#HczVj-v;K;#4~#ew3uJH-&uwQC=1h?e+ykeTr1SGS#m_)zty< z{xS>@K7vAH3QYjvAIp?NbF4t2BkCCg?T8i>js-+})>Pew zs@nl#{3lcBLiM`>VnM|I8Gz`w2i1;<`aLO}Ng9TDr%6vhA|e;(D3i2d`aIvr7OBGtbD5XY4Si0w-$c|@!)qv~|T z_7zk+BHCRIh)wI@2ijea6$|pAKc(vbgxLQK`f)tX zfVkfYpc51#RS4?nPgg*c??%-{sd{%n9FGJbjzt;oVGrbDP+7V+KwLU?$f`Uiw@>50sU0x8HpF(=CnK%pX~*N$ z$Gmqt;8%NZ<^z@RO7Y5kS@p6M^EJC@dNH?25&9Xfrd#t_ySkt7&8+F`kD7%(%jqHz z;NYvEzF>+zXPcD;`>2xr=}mSUtAC8ynsNQJNp?$v@>mCU_zRfB91%HH9UiH0%V_9e!GS`f8q-s6KlXfYq2|6SwPdc;{gN5O`*+cs z(DT77cPEupgQf|y#|`aXN7GBaCgbTHcf)C(t5DrJ{h?|@EyM(i?H7-J>lCrT{`%1k zLCw}iOHBedh#nbKn>lRCr=z+i>jaLZeNIy|8GoX_e&GIs(5pjedhy*HDMB$egJgT9 zRVUs5bmI1*>ZPFMQrC+xT8XxzE_Y=2Fg zVH1XH4VQh@eH2YEzB436NX7k1vCR#A!&%XBZjZ_<(#^(p$yct)xLTQ;wq$KFH)4AD zoJd;B$K?Yq#}v~n1JXHW70-`$fU)Tmu|G^6YK#f_i+8zZ!@;f)b`Htt=4H4IC*Bys@95u#g&6hdsWPIuzckDUP|S} z)?Q!nI|@)Ok^ltXMe|yd0v6B1TucUiAmrlvG+tQ|&w~q0hEh$35?u9>ZT+1ly zFY->gR`T4D?_w`5tJ;-o%)FU4c0p>{K(Dkh8`sYA*t#U5bnyPPRpM)ACNJ|^e_`Ux z`f1(1p9rX=>BV>9qzJLBbd~BJ$xV6Ix-ZMAN1qRcA(NK&s&;l7-2a%qmnsu5#iT<#TB2^lFpSvT_RPOshiI(K++5Rn9h_}w}wLPcs-tKR6J$$aWF zHmiQY`@VP9z0I?JbLT|bZhIAXSF!bC7q@3$*;{{p|=0dwggcMD701n(?!kGYo}cj zH;xN?6P0MJUAE|h)UnQS>O;8IeOiv5o0l~M!NdI<(S z+b$#~_(R2c_M8g?1il#k==XN(-B$CiI-7dY;)~xQkRl|%Xx`UK+3DBLyJ$;I@-dr| z&|gij&QSO9tlWmk8S>c@<*@~8%~QOdd2gwZT;ben^w+uLL{2>Fxvbo9dBgk@X1sO5 zYKt#^_ezRT@6_RWixfi}-xm)~5TAN%P~(UT7c|!$&v_T4EpB-SnMc#q_SZS3e{w-yV&C|O`85+w2c-rHVs>d)Rpo^aFk+nqb2kfs-Z zcY_q6aQ{iwTZg*HKAn)K&knin@LX)*0e2<;qKrKyc?0g2TjqReZSeN>n6|Doaj2tn zVN`ENCvA3S;G8wsOw-QA3_4kC@X>w5}mi$Jgz%m&wX=?i1IJ$}sub#qCC#lV0mB zk5R9=`(ygO%5IsquuZRETmH%trGP@?Yy>1+4ZgBA_{>}|XZP~R5vekoeYu}r8Cl~qZl*75%RY!b?k)1>&X`YI>h5+| z94)aapx1^YjoD^j56H)~8o^2L;Cdp2^8Y;c`lEq5}X^<`Pn zns?uB$?jBlKPh6N5iFu~zH4cvUSIaIU8iGg--hZ>GYNS4Lzap!>XoPKEj)ATkyBvP zg6#2G=_1Nn$5uS)vEka51$}OgtFEz|A-U&)_PO-e_e&1w`;U~Dv|PKIWxjuy2&+H$ z?e5tt-bFvg-;INRZT|M7>%HOe-tuWv;fND=wr&k}G#ovwXcNOI=Rean-x+y))h zf8Z0dUN)l2b+ewrhk^~6b<0|}mxu1jasCqX{If!d1kGOsy55`#T87z;@taJKMg(f~ zK3?**{=n+(iG{o0<{2j%ghmDV9{*`sb5uT;qp?0VW<$2`jF#T%y2IR`c?mu*y6{%Q zrcE#JexXR$D}7BwcxJ)poL);3YZK2zEci6irjEm&nBnnw+j{$cHd^+(nl8wyTCAwD z&hox>-e7=;jLDnD$Lqh}e*4Kra^AUnG`;=ldP930*5Mp`Qc!erTET^(_65~jSdq?2eUD1E-pQQ5q#$W&y;`Kk*2J9`eTidXe4c)Z@~n&j>J_o}BWXnK|CdTR>r z9~-AC7x;da(t;S-kjF{IBQ~pU9xUl?Rr`8o`US1oPVprhm+V=!>SyZCq1P%V89!Cn zzg_>~uG%N9-3#q&>S=nF>3R>!-<%~RoMn9H)Ly$sRyh|Ec4q4Tn7c`*b$y;>MV}v= z4;Az&TenHhp<41cdgdM*yamI=#9-FrJ%FsV_DOQT6SB0)uUE*iDNZ-QZ4Ig4l z&YA6-kuh*!bXQ&7Db3oMcNNn=zxJ7#Qg%<{|I)y!kWZEx+Cw|;-!`)AZyyLV%^eexdFZ|%6R z&-{x#u1+o$*fIUq+=}e)?;rH^7xZ+a=~biajd)#BE4Hp~U;gkT)~b*CW*aFlpS5ht zw?yr4n`WoaHI6#F6O1HO;n}n#A=(?`eWjX{kAlCvkiA7HPxCa ztl9e^`I6-ef#ag(WBq4~N$&ixvurEtmEsX``6Y`6AENn--&d0&^n79O{R0M;T)g0@ zA1pa?3+LOyF}8i&XV~`dYuR_msG50lGTM3HchCJI+;GO(^>9=0fEUlNw66TBF!qpy zN0-9qFKK%5`)^W&y5C#9#J`(i&krhV6Ff9a52@;RiEX~n|E|&CCNa+VwN*zn&W&B< zSn?{~YR~=!`RUF3bTnUm7;Tie-B3~14`81)@-ysqVOVat=1O%^|M|2eE;y?q5m1-1V!*R^2ck2VDYHTg@>&(5 z4<+c1TV!-$waZ)0udQ3P6|+p1*)~njx?!2>rDG8O?Zke`%TiM!r2V@+8-AAN?=ZSv zRn5!$KAXu2iq}4OH8QanlJ!opTeTvY|jkWhO13gw}JX^p1 z$?}qZt>KZ}$%c!i(<468^lH%c8h`rMJ5XADd2rWnS`(5^tr*fgwz}W*QT4IQf&}hJ z_@#c>x=}p;V&Ah4`&gU4cY-VSv>wpY??2N0J58@9U2puCd+$Ypw|%;N zLA+wMw7}|cy}&L3vhObr)lZz~a{v6vgz1vqs?W?UnJranC$Q~~mxgn_U3RAMAh#R| z-}=WFc)zpEi?0@4Z?Cer1M5zNjNV-wzq#N*S?ig#@{j9%*0~=VAgAy`qu-})s;b*o zDqKIeAfS9w7<*@blV+7bPtVy`B$nQpdF46Fg66L_T`&84{yVGFA^S!8-`iHC>Jk4Y zJzpUrW$75hVAJpYHe5G4DxJN|%il;=+SF|0&7r9aeT{$AhdUZ4_0k(pV^HPnPyk?i)6;Z#__0i_Jn?~NSj1Q*i)uZdxsxkHy=h}Tu zN_X3*ANgH(Y=MFPnk7FUFCHPVpiukt&cm;kG`W1A@^!!E`Uz{KYh#tiUh;VCky=un zdqP09XFxPfuRdLGmf6VeU2R0~WjiMOCr;}1TI7k?#LsW+`>$W{HAd`8?x6h>O|Jo6@7@i)En=lN&kd55&~wOkoDzTb z{<&Snd3_fx>+gNewb>`6_Q&Ga(@WH^J$G*zAmvgqU`TDPv!tSH(QJG6%K91f`_OQ@ z-lrjh%=gUOw`O|PjY_3$R{9CE?UkaQdA?tJFgav>v3+_${I-*;ek5vHoSu>V=-|5g zkZ=LR-8T2;Ox`kl^^NjsHJZPMbiJpww+jk7E>`TmXu?(X?hlGSO}zE+LrtCB%X!{f z1!*Bx&Bu!*dbjpE`L-~vH1gEfJ_#`cA9^XcJ};IHoZ@13WGPLr5nb=3$J_J2>%YEx z*)ezW%Q}^5y6(q6916Mj?MT9fTg^86K2B8D@!Kr3<(h`5-K?rzF*56dx{6k{wr0#P zoOX71#RmHG@d&!!&s|3kV!3>u7X4FcUf9EwH|urwjC^x)MM3J$zq}$?{!R+=C3hb?~4fGlM#=DKlSu!NKr1Zs&2Y; z``WcbOAZYYje21!HzBQHw^zM;?mg3O+Z(!iq-{>mbsn{=<(|Ni*FPibEx(u0-*cJJ z^?uEpQ1_(eMxN-Kt9x7rX714{oq9=9q}Pgh%a{6G9{9a_y-U{ZkmvjMv4zw|c{=)3 zR-F3j{#I{Md0NX0@B8&bZE60Fr0d;P*Uw;lPK=&*#7WnJ2may`P5Xp=W*9UJjLROr z+F|IYV;7p=kGwg~!@|kT{_WUVyEpZ8Sew<`|NZ6%Q!m|$oR><|3x6yAR}sn&kht)~ zTklT7^K+jY6Glk)vecNA;kT&BBWH;Sx3Ngh?B&z2g4&Rb(szRFZ!~{L)Ai0!m@5$Dy6SfIp6K0) zBNjbrnK5`tpJiX4&KV=WvT^DS*EdBo1HX<+FK*fLFre{#u0+k#x}Ded&a{#^f8wTs znIirCU`E%g)MW7T#=^$3!jaCOZ7+^-t~ZuGvDs?F%VgO-a=Q~tB~Mp`3T=_QVl7=c zC*D)u?{GCHOA;L52yXt$Ff*FGwuf&Uv z*L*Sg$*$;kALo92k{(%qdP7OvKBw-1X{Ceb#T3gKC**rSh+M{=mXsVRG*<9J%IZbF zuajwdE$Mn6bhBDo6P~yFbk!AE4a;Npt5;cyH?0U8pyI7^Jb350il2|1a_+oHyI#9_ zOo$dI{QgS80}HonoIJ{LI<kSfN{?<<%`sT{c<=7p<2=d-@2H+} zTIJRB!T#Zyp95>86wXcSDeP?cQo#0)9%B8ot!9wNkEu0oK zAmnV6(PlxFfS`oPIdKIlVnWaFN^rN`pLq9PP(o3X#mxeLzwP_#zXm6TPqI0#`{7WZ z7^k)7%^WRmXazkVtm%4htUp)zyuY}YwR*xpyTcB*M|E3qJ@!!1^UwDV6;|sCN{Nf! zyYVgdyzEn6?{{g1*qse6vqzc;Hb+gVf2(K)I9DrF!S z-_Mfw)#K@Uz30oAs?_coGpl>L-`IPN<74+6f7P;`o3hhy^^5I!2jYzSUNv9qa$H@u z+NM4ywAT_J&r>&2L|*T?dd%`rp|#UvnqFJF-aQSIJe+P!^7^bX-*Ix>C|5DLhD-8W zU76hoqj? z5e;%{D4P7-q?gBf`nk`Ju2*;P?aFg2Mu_(>6?k!VtZsH<=$W1eS87h|7ats#a_Cj6 zO!t-7M~l9?^=`@0=bP`VPN|d-Dvqer_mG+;def1;=sC^biFCd3L6&N#^7BJy@BiX` z@R+Z5aH_6BgQ5aU@3?BON6L8@^)vHNnRfqXRW^3KUiHGycLX+#YZ-2n7H#r#ks@V~cUM?l^JmX0y`{+_zUjv0Ye!x* znDy-vtJ3sna>4wnfx1h5=4}6{xaM53ywvz?sg-u~4di_`=^ESrM z>A+s=MhEBKip?h9cz@%^dk&aP*UO%qyfQ$3!{OBzdafwg@VuMsjWgvR%P)8w^c#`$ z*zo2R?&znHyF6FSmvJxq=H9<$h0|jb_kmsOg*7idIJYeS(+irvj&!}1`E&QGnmbIp zmpWiCK3T!7c1f7T>^Q^P>F#R;w?<@DAJc74c)qymNuMo8?g^V~ zBzyR*k&>e6#lKf4MQGz>-M%3@Z(TR_*wmopk!@b=Hev4Cp?OmC91P?JRj(KN`KWoK z<@CV?m(I0bE%_pslXkgG(=7EiNn98J^fM3e#woxK{k@X*B%EX9-a4hNN9 zZ7J}VNPD{^)L%<>an9IW1cwZA`fKx?FZD>szh(BS-rE z!kMmDGFnf$X;QuPl6B3eZ|yc7$`ZYopPV0Mc00{iRN7<5O1;mAjdZj1-R53$nKbR8 z{pIqxhKe`6ukAlm=bLzcWHEgmyU_JUUf#24yPL&re72zK7D9ZfIouIlKDrx%lrcmj4SFid{G;V_R0Z{k-o44fQH#TAQduMLjm} zl%)si+7l7>YwSwdd*6hRkHtF`oW@qbd}{c*%3k2%U|iBwKTN5F2e|70r~dc5B@i!@ za!#J(ZCv6v6>rguhOkG)2gj;TMDp-bc*t)}6^Q5|t)nT&pYy%`+7UpbOL}8+;Of3g zGW$#%8PZ3f1-Sq2IrziFw0BI%%R{_BtHoY44?Ats)n832=7?=g?T0l5F&DfE8q$C@$DX5}%f3%ERSlkJP76V|l$DWFTahdV{yP6`KWCT!{chTzOJ4^y#hxCnW-$KW5<3;mO=iJ-X87OaDZiCb*ecRP|#tWlws@MjM;$6_Z;P^}jbiZ{4IDHO$_Dq5H zsr+92oeg)yn*t&UtKdD^bY&ub=D@`YQXfCc8omrG1!vUNV zgX2|eTP|^b-0vCH9Ry33sabH|tqZ!I@g?nVBv4B;(69Q9*yUWJom9v|G{$W(!_=NQ z;`yJ`7^>o==?ttQ%?O$!)pV8LPTMo|6QP>?c=Rsno7SI40&mxN>Ok8^{mSPv z&<^^b`?zA^8Ok+4u-7HD*|@wpM;kyp{VIv#x6c{P$WYaa@5}3l#nbF6;egfYkKsr+ zHTf8V%-CNx{EUBwt7{YqfbSgx(1pKb4G%-f>#(}H3XsyJtP4JMZ2E6h4ddShi8S{PmE0|BP375W@zd)yCMmE^YcHuGUt(cC47^S=h<`TNgNWPFdVYCbgr3 z$umLWmxlVDAJ3F$(e%JNqA}>kO@H-{tQUz#6T&6177mhyjx=*p?sZg0SH>_3e~Bf; zXeymCDIeZ{LpX93+&9~7GQq~1Xf^3YwKLL-+Ux|*3r#>b(ZA^7t%YmIV@I2Rt9F~* zCe?wHOw`TXQ@@9fB&m$})J2i}doAUv^y8CrRNgR_y3TiNjWj|RS`zk9t%oBvKs%U% z?%g4Kh%LPG1+|%G&=5hQ(-(c~k+h6us6hd9%?;rhgy9bq!!?`Bhe{QP2(rf)tv~M& z`q4)=FC2*X^@Jdgw*c1+bX%nL8RQEQ)&{*z$1G`bbaeTnMg}h4t*x*=%%G+hHnkai zmLU7J{bh6)l?P%ZiRkm!A&KJVd-6!(;lee6Qdq$K47$I0i?doTO`q>}&w93aDyb@K zQXQFA%uC)t9;i`^9GiLXE!P=86Oh{D@UvH@AQva>n+V(s3T173l%qTqGRy<6Ip`i6 z$C)t59`Ezq8i{@?wt%Gn!l9VLuJi^MDi8muAx&tBekyy&|QFGi_ ziPseMk!oI8gs@eFFD(S*v())`$++_3YMqH0@` z1;TAtUl3K{l23(8M0I9giux40Jfj(lF%Z!rC6k-+6UnSPNK=^AMRuyH0IntI@?!-M zZN@FF9tp*sq)qd_`9;+5@uDHNoTt-{@8Qr@=yopIy-1>m!+ zeb?JrouHSWq5;8t-hv9##=GN#GK}PHI zUWQ=UA6PV*xWJkU;UGmAT+Sch>6;m?gWpYS&_y}iil!6QctO}J@MLd2 zs8u0=eJ=N2_6_tTH}ghQ2!*%;$6j9@=B6eBgPG{JDJ(HjpH?I10DT}|8_MMoS6;$>c;ESpj%OV5Ykij z*}LAM3&J}zJg8tyLYnqy2qj>zAyM@n zxov&M$W)a5>lNe9q%L)%uhG1< z`(lg5$>=4GbX87?RP?*a$OBQ~Zdo_byIm3ea_>!zxOqj`iI~oI63FgqYEoQE;#E~+S}0sP{Dr(KKW-Js*9mlI=Okb8VSbFY zPsSMKUQmGNm?XLuH!!$Vv9DGd8eKuJVyg@KWccQ6y!d1&>XHjpVImZR1*c{DH~s8o z$q2#@;5vh@A{So4UP62gX%r5dd_9F-0`><19&E{wmLGvSW%zc`w@!j8>v~3M?Uwj&IOFH7Z+$K|)4|R_yRjSfP9+Ge@U>(sFbeVq&iEoLDaD~gR zi=1-3EH<^4(0(U|vIz5B#5heT#l5oFg?x6V6YMAY#pBLs!pKAZ9(v~5M~3Tya94QX z6b8uG4Rn8g5Pof=?|B7{@^+rymv{QCsrmHOcg{~nOcfe$)s@0sl?|D_Baw>e$E|2C z^4L~~dfCNbspU7=%XXEBwo353=?=Oa`a=e7qYOOO4CcYbf@O3xy?C@kZCPC!7AeI6|)w5~@N=w1NlLmr@e8}}4Upz`6BM)fXj zn!q;=fBpBCLNRQg@a4JfbHr;c44t4xOS|HBpv>oLA~0cp)BHFtu4wT{R$_&0kizZ* zzZagMyP0!rO=fCI%mf=QJy8X#7MaE$eVtP0p|?uc^q%MiR1kb7Iv&@={3kDGl=mp| z9AtE1;WT0t5`2HsNeLL5BF~CIU=i zv2EOeh=`5`oZF<7adT~=?r+yjYl5p)%u5(blPp;W;_HCx4Z5Z1I^_5N@b(C@*c6% z7ix<(#g9Td-Er9oCEe?tLj*B;H zH|b0Vl!8fSjKTQS5lmvHumMkrDkX_7Jj=xWrCx>p>DYhn)cNQ7fi6p;ld2l2u(W&G zOrcZB!Ot2>WmY@M$<8(eD_X7+MxiHl=4@!&I4{Xfj0)5>nY7yZ;2Ets-j%btFwdqo z;Woha2i?<$O?dGV3Ki$D_!yjRw3{_DyMherf%cpqda%Mnd#~U2i=XdSXIq*_ZEtV2 z7L;ycR9XgRZwm5eRGl{yqwoQ40O%sc66`maRON_-9ZlvLwZDM*Sxc6pubgJYZMz!7 zcwKFidq;>!dO^zFtxYB`v;Tuu{@jMr9%2_GMd&E%fQbZf13@=pFW*i`Qn9w-TXYtg zSaJ28k8|mx(mHywv^_M8!**DdLn;bLn20RE z4FcUREt(KTUcK4zXyd5oW=dTQj0BR!ByxAI#%$gke)!?6i6WUkL|R|(JvFiY?A&2m z!P=KWLTzrZy+|MeO$%%RHyCu~KT<$Z;=D3uS<-ozO4ma8bMbrIwqosc@NhNvRRdp$ zo+_D_x6(ozmBQV1vE1rA>tAEAVC$lmap9z_kHoqJ!qg+aPbui~L|8?4j&CGWrBGlYEZDvSM8Y243`GwbycU2Y*VuFU5TaDW>Mx>+g2^^Zu>+kS?!18&|6G+rU^#~OAQhg~R(uEh}OWWu0- z>rp3tjwda9%NEW4I`|9x?{MpbcV(=#83pWUHQ>BE40O{b4&TZ(b+NIa=J2nON8U{I z;-K3-+`U>Bw@_}#7_%dz{Awe$2cs;=ECHbmSHx^r_c|w?$idRSzcNbGyIKOsHym^+ z6~cITvh9Tti$B=J<`AoTW2&069rf@I3a(u`+Lv&Ct0LW2h?g6pU~2VGQg?yXVhVPz zjv>8XYk!YryziO^xDlXR7}!dlf0uC_9OzR3mqlQaR+pmC7-@NedZl)ugS2r!CvSUR zqGE{YE~xf<(wg{PbEF@>b5Jxt%hJn~ox#Orz>Nf5YuV40#8cfA)I*uYQ)5*UU7fnq zI@vd(4kF@`y`v~LmGcU0pQbgJ*D-g+7a!ECBO-;=O?EPcFcDnKT<- z!{eHqNS$~+dt5U$l>*}xbnYxP=069ICvo>d&Iz0u8#wYf)@D8!vO^Ci_~^a5C|!H} zyh>A^gWEa72)NOpt9&BS@LaS+?k1UEY}*Jk%#tcb_EDZVYC3KdNrp}%`)vG9sw|HO zZ|v-RVbM=xi%#`CKu*_YP?rbc9$vH?oCm~!ZW@{=wnm4MLitn1K_nN%ZQxD(6?S>D zn|Z!5WgTC~C&@{&3c(9zzG;cHJ?k&rIC~36m|;CE^ikT?yRy(@;O`a-x(=vr=lw%Z zI$1^L`JaguE3lI?vD58+8Yb2vzEwQ(C{Fb?auVDg?9oQ3vqxyeAruOvpA- zGf6k=asllS2fCI!mBegJx~;9@Gf}dNNG?B842zB)(N!Y?g|TB34#Ztg&I%+e4Y`zf ziwWh)-FrC3HO*pfU6AU&H_Q(nl7rvPc+fo|LCxcjV@?|gRoHKD4$!w-Fnw?{I+NbL z3GP8g@q8EAx0pXC$#Pq9oGeY1RGjNS44r;8*gAEWGqwNQjrtvsZvyDLi6F1Qt9>jU zuxN$$Hk(wd3sODg=YBu1jbVzkA8i3(AjweaVD?1S+E6JU&y@_=G`#} z=kiWkJb3nDDx`JV^HQ8a?5rR#S5sVcTs0Oym0B$%TCCj!AKV|647$P81{nQJ&x-9M zDJF{s5^XIFSQz|P{Po?Cyl4euFJJd(eB{O3m-Wnj33KA~XlM)(vL@ppQ@zj~J zCxGpn0=g0-Q^)sN1}7ZzEvUEQ1p%MeHx|k2DRxcP{JB(S5?b7dV zpr{W!C|0BAHil4E;hdz7A-?%vJHSAA|7WIxZX`k0L5(Jw8Fc?|0p1>Hi&Iv;*Pn4} zp=BPJN>O#V>EqR{Hn3ix(jZ?@@c2muvm0_6-N^1lS80|E%ACsEoc{k^)c?#h(1p@` zc(jSBc_{0I$478ybNjFz{1rhJ^`~y*;?Ns&FR`52f&R>^t%mlPT}AzR{&P7cW;S$$ zX{Z;MCPn0d$$#7T@A;N=&}~56=4^8cWFK?rpG!{tVs+cpljVa|&WF6z^JNX8K1Qel zZ(WzSP!rwc7E;YVeN8~Bv86Jk*9oi5B}=H6{cnBp?>UJK(4`RwRIID|XzKM-$!H55~ z!{2j0nV?%Qd=N&kkHz-zN}~hvMY8J$ynqW2UaTT4;swUXZU-bAq#ZR7NN$3P3;Q14lnP=1_;f$rV_4d#FMQRRRxgvU0ouMw7Xsoo&0g5zZeRK82q$#x&PBmS#_3)!#Glr3Q?i=#P zmwF%TRne0IzB#Eo`U^tz%U%WqHafUBeC`Tt#S3D}Db2r4QJ6g3<~f($Ss%p(_ao+k zZqoPM!Et`_jrE^{r?$;DXjS>1xp~-gFPBs8l5(xLXKUV5GP9f%;?(XlS7`Ab!Q9}u z%5~Vhg$w#9!uJ!VH0gi+;qUrpKIl>#vwZhUwD}nUSw*qd*zTbCgKqJmDxDFAurD#; zvK+fBo>uFVOs41&Vlp?agb9@pUqMHu=R$%l8!MFGH6{4oDF9tJ-4E-UFJeTEXfpQ^ z>`pHeVtR&Nsz|u`P9K>P&9j~@zfmPR@Af%mR*!o0tMw1UrD4442-y=zOAm*ta~%fj z8ik;nZ+VQQ?ws`6y%}!ZxB;P>j7g19IhphHND696s=nT2vSd^*wu`J!7$q^={WIih zBsb$eKZ}sKraQ8wG)xK-&<@`~ck#WULA*%JmgAk0F|F$6*XkEN-Hlm3Km4%@-E!xl zGFx^trL*bazR%_reybRSd2qye#}cx=AL5wLAe8q7ei(3zK$o9^kF=T0e6FnKvD!y_ znK6Oe7kAR;eCk1Lg8Pf;d;tqZb|CC~*|6n1ET0|Lp*wM1w9If#Bq7`suM!E7_H@JHUkc?WC(H4-Cn`gWd=Nr)w}O8)o#L3bc)@LUTA4$3QSS{(xFT% z+OK=x>Rir^mmBBYRI)Mq=g!!F^Vo9GW%VGn;`^gYngRr&9s_)$?x{DA4H7 z`UVm?cwzc$xZ5T)bk|d!au=_1DSGYf#6^oa|NEk?<@iGN9ycK0YS0~YvUibQ*)%rg zHWJp!$jgF?lD$%yXvk?O=oQe{O;0qDL^?6rX&!b?n6raDq)A)#kKnO8UxJGX_7$fT z69vanHK6P8b&ZISiqelbL)>E5tiWHL3c}EwiF>#udGVs_2{lc;?Yk>+i%!$QzG_xE ze|P`$<1%vdhA?)vww8yj3mmw!TzDPKFNLKHgjy5PEjy>>^nQ1 zVvz-WMRkG^MXWpC%rz}Iw5vrysssFn(I3jpAF*BOzG#B=>N?OR(Lu2`WrJ!<)TUZl z$jke0dj?Iklp6*ViVHdg(++6_ zf%dHjT^}kmRuBC5i9c^bEBkzOGl=bA=eb^eYQ`hTN;cppCYO?isSTi_nR>E{m}|-M zMgA)IrOb8Q{{<2j6$e>PxF6s)fNuD3CpHcu-?!HFjS6&&Eh#-QH>(Or`b5)w8V9J9 zI$ank*)R>}6|6^Mhikq?l74Gs1()7bqmB2!Zgf`2!ofOMBj`F}EQe^OPA&xFi`~-R z=v{rd`TAw9(#2#1f!ShDxARpcz9KC)F9}gmh=A<$@K069?JDXtT{iiI4Ue&;Wo{fG z-zL!2OYc>pdCu)4rcO4A_gp=}YxE;;=BCTWIZrV)r^g{I_GU*PhhDAY-Tf6a(J+d? zH`*9*&F`S2QT~4MVYQ$FaGOEbJR0p|nPHF@%nuggtm9$@Tg{cvOGgEid~Vf@MW=H%Acvt?0QA)=^TOIEloHjm{IGH=RavV=F7^fAU(%V@&a2f(~e39jSG5 z1@iq4x-wnWgbOm(N5r}qa^jSPNkdH`yzn&}1~tnK75)dgeo-boNg)tydWejjhPtck zc)_*Gs79pEDiGG5Mm>|EV4bTKbais!I+ahtGS_G>p z5!|Ek+LNDsCSoTl=D!cA_C(fJuaoC!3d@}dt=H+5_5|{616|udw24+JvF!PKJeamC z+BREwGmRAe>JiIkNwxm?LiTdr-a6?M^3pe{L3W%q+~kjRax#$<)iLw&=UYl=r&lmaK1U3e9cY}i z{K@wLtO9!04`I69=N)l?+X1?lMydT~`;i$>TJMV?SPl@W%hN)J7Tx( zy-t$PnKUUf_q}Qd6nW>4q^cp@F9MSXc%5|dXY26gZj0d(O6C1d-4Dm&O|Fl@^@}dh zo!5Lm$h&t-3-3pTK=RX|IW|!#`Q50mprZLf_j}arI$wR4>*Q~w_&uF~R_0K>vx8lw zhjnH3MCQ}JEh*fyKX<7A`)+oFZfmHU0>AR5DbI`-y?@Jlo@=3&6X;5&^*BvYWheOi zm+3aNvKU_=Jjm0Vp2DKhH2mAd4C*ek<#uRP#p>?9zXseNpleS${p5o^n&ZsDJV}qo zNlBhUm)UHNZw6c2_BlM6%oT!ZWmXJo?bF+E2(5enC#u0FgyNsG5EUaYWuLTM&c^_^ z2Xtc|)?FC&UM##dDXXBvagN^r;u}@=Z+v9QWUHIbsk7^j`p%kbD zg9cR641Enc$ibsA^>4}9a+RmQk_#DDd5g=Qt$w5h+@GM^txwxHY;3@R+g^OQyy5sN zZW#6`WrBSmGJOJvrxN?C>wCeOO8=6Oo?%LAq0&#Duo=E3XSu5QZql6F<&5WbfZGSU z`-n2facW3V$aGjYM}5fs4^b~yegsKevaDB2VmbaWk*?2q$0&%hkeIY6Cae)&;H%I* z95y!J8m8(0L`kk}2)MsM7yT^cRM-jmb&yA`5gJMc1THCON~7)9U+v7lzD;_- z5@iUJ%nl5^;&7I~SS9_{Kq!lWiSt^$8N$Q^lL&D8L3dhh5dBLqdfOQ3r_6PgSA6@K znC(TpTc=Csip8cg7jQE+PB=V58Iw;j7=I`X8Lp3?!Od{QqLW(>b@`a!ZyDiN3OR5g{DzUtu<9{;^X=fx>#~okfI9@b`?=2ki87s6khQY2uy20` z29+yTcJe2uzAIIQ%JXLUH0Uffw!?4Z)PvZx6b<#xR6xq-4p)DQLot*3`v$=!xQ;Un zx@)I-CyVs{KkZo4ONix)HL69|Y2SQn6jtzx2w5jlI*EptZ(W@eVH(n?J?{OKVX07( zk^A0;V8IH5j0dGIoeju$1a$RMIO&FBP-^x28DJ(wQF2&+A4}^L*hi6%v+`H{^i!G9 zK3Lcqmpq=g<O}f>=am6()}&D-K&0{C`Yu* z>o>nrWc~{M6Lghi)n=cJfWuy}^)4MP?qh>+EQByPUY`J6T54njCu$qn87@|v>Jzdj zL5!=#iM2wBuRF}#mJRD zE@ntpq#kA~M~g%{<9Jo+FV3T34$Ahc2LGd*t$Nw=f>e%gN4_M3zMr{L#K@iYek-NG zE{*2XW=rx5SAUTy&Ia5m&_zgB@Gc7Xv#$J(^c=NjTyOJgBJl#{n(Fe!k@rMYJfw#s z(v*zzb;HRE{@HzVh@jXyFKU#`FVZz8Q_}(ck&1vj4Z0Xt77lXoj3amFaBSX&o2*o? zWonin@1+>d#p3=OfES2I)5$8emKwjk+oKtLrIg8SEU1e}hEi=~J{#2LOaT6FGoX73 zZMazqjlF6$vT@GcL@5>AxBVXLL#TmfCFa8CtG9*3^oiJo%h^%vaVuLp_6L|&tEiU< zpN39jXHR_D4R8PcZ=ApVVHR|MAn;1={RnJo8VuiS+z1(9kYnk7Lz3|EZ36F)O6&KW zwTfKwj1HNRdI7W2O5@x$rZK@Evj?j3Vm@XzeG3Vw;HB9p+aJ64r3+s<$GVG@!`B=1Q++h&botFU9)Ow~2fiOxK-b{QH@O_l^@B)ni2^Typ_gfQ z-0PV$`iCu>PI(}IrJ*)MRHkmmB zAJy1#oX14q3}BWg&t(T8 zEZE0y)>e)>G-0~LbkJjvE9#>l=-||&;jWo5<=(-6n4@u1#Dwt+n6tZPOX|jPkK;6H zGeCBGZnBw&aRl<+1YHvfzr&fwshrL+g7>T0CDhhxiB*I(3LQxjTG^_VI=0p@-() zZkDNf(JC$q)2Y^u^y2j;vnq?uPy7rA>+8FqdzL^(Wi7b42kj*9gn;=xChVv2z2&nU zr2R#Ypj8y=(_#u9V}HeDVJkl*MebZz?dH;+K~WpXd%PND3)460{2M4a@~ZZ)dUqq-($itp+0jx|m^v*Dfl=xOK2 zvl&Uqa6xD*Qfqv-8gvChJ0Z=i*JiHZxw>P}oh~|GTw{6hh}kOUwS)MP<}s<`8o9`Q zvm+-aDSI8GKt_02&t*-}?q?$1#!!ONNeUOlm)k?jWH=*>@78!G*FZa*fUYf0<6B1~ z;{uVH-r5k|pXsp&uU0kXreqI|2D{eMMZG@fEDD8(a+)dj+kGG6veI#wbfNv}UVbJD zJEB;PfKmXsr=VNRCr|I>R1vjPHI`zV8>UpO`B?I6Xx5`v<*MJ5+EBIy&UB`9v3l&4wIn^jJp)}rWtc?>{HHXrvkQnE+M+fT{iTEb=2vSu z^mtK+$7_a$?#uQ&A^?Gt@%-mi0tVDKM5X_#T?MGo9%;poHy?m6g+_Fufl|D?TF z9pXyK6l|{E`=ZzA&S6a(2~TPm^{4>{d1iYN(S_oE#{Ad#6teD1{2I}{TrW=@*yA0{ z=OvQ=iVy!+fA|f$?+MM6I$s`yaKJT(=ZVxIj33dwWDVRpE}{B)>=S}0UuW*IG~Z@n zX2r(&q9HO%2?O7t{L!a}i)~nhxqi6f@A~H7es%%6tIMs;c#4bJ+Sg6B69@rlJE!LB zPlN(CM&Cz*klHFaDy3(66jqi5Vaq<;qBbSNk%kLLeuq}gd`s3JUTZ+M0OWfKx=p4F zra6d9{BlwnUxqw~5_3;PT)pwe{p*ws#J6k0&#&Q$bjZW`RpN@hN1xV2Oj22=>~9`l zXG^`k^D)$1-T>Sy(B(OOL|q(VXvjjHn-z@5bdMn`5{Oc+w}fH=(rh^P^!d+o6`Jw zLT}OA!(^vb zT|zM|bTBcH?=9#C(?t@n=$1O%6Py1af3hj$=N%&LoDkh>M$AqQRY~e@-uXm{xG9sh z4I4iOnJCHryCpN1Q-cUL#KuSSKqD|1aPL6(k@jS5f%zBoJI`S8LP68Lz-xT|@iL)( z7*BJ#U2%!}?0VH%S_hkM<1Wk}M&Vh!Xg2fOnaq_=ruLc(G3W)wfO`+R%l;V(M;I(R zE&fYF$#sWxVJSs&M-il3R+u7&`x2x1tv6JOYqdgV9uS%M_6>w#<#A@3FnEGcZ%9dB z1O#w{>j4j-8++et<|(MJ+Mvl7hIlc`?MOu8w$D{!@(tT^h-Gg$4tEfVg1S$Aw!%LR zCx&gYSK1fWxnGU$b)!R2GAUw4Cy?*s|I1wper)9{31fQw6C0sr-?Ou;oTul6I=K;QQIg zWCOl8`R7N5{GqUyzQ-5s2Kk9~m9BQV4++@tQL0{X&u4n(>@2B(3kkZ)vgq6&;1T6U z?FRCrEjTkq*>v_Zj~MdXVenqontWJ?G0jz=Vt0jq5lV|uEMKO9hds$!w`__lkj3IV ze52J2xKN=wU+(X8r6wxJ}*Fg6g3gp-jxd31uIPUqt&TmD0UUb&Z0OC`K# zq()~Tpk4)cM~Lzn+eFhUGTKTSaG^nWtsYCw(VKO2Lhe|gw`114g!RJW>%q!=%0O$C zkK^#Sb@V`?9d!Lgyp>OGN%!YOQK2nt@N!?KyERg9?eVX{{RA+en^m;nuN6(|s@!z= z5R5_DC*GLectf(u+KesO&17iMKCOJsOmdOx3@DDUR}P#r3FOh#BCLjHoC_U*LoyqUK*i3fRYZN8)Cp^!P2_qIkA!>mC`%iIl`YXlTMzu8(a?rtOldM9%KX#Ga~k9KASr<%~$3~1WMK0DXx~|N{!E?xK!{R zNV9~d8-wd)2%u|h@_zom>i||A4G=6ex%$$Hk>VHB33PWwG_#0@&GKw3^WO~|3mkBY zu3wB6;!)rS6gW(3e7LXwHZ@_9ybuo7VgBsh_!lszwp|XUtXX}Gk|(CO*-s(co}ckO zQ`u`fHIN=j{E-9IQ|99EDEas2A$>CeB|9w=L)s2)sVw$%VPb-Z`bxl>5Dd{UrhRl z1Z~X`Tl2t)9kmNLdVlaG7w3W*?wo=44;3{A*G>PNMgA8sod&LRz8Gk^MUv(2tKw>J z3V%*Q7V-X2@s|1&v$Y_zKk_N4&;8Ip->R#cT>CWfV<{qXYvGv88dY0&+g(;MCeRLl z*1rD*Oq$oWITLBdG-Uihm1|t7gz@7Ja*Vj$liitEgKbFo%*XxV9y!>jc@x0@SbU8&|P|+sphcY?whw?<%*~HW8=IkoRg86I!oA1q4R@wiEKhsJuVLY}?}MoipC;+pvrv?;Qr}z{{p7`$s2MEJNt0s%go+# zXjqd*1|thQ9L)vP8czutkJ>CJ9{uej;aNctd=^3r;?9`Fo=MCWxhU?%7UhfIu88da zbN}vh{8RJ#7cic5;SX!gm1EJIS7X?iR%$WlgO%<+IS)3KKexlT(cf5mbhGuzDLvoh zvl_>iTk{drpzq_ct#uB!Nf#X5IUwY{iIBSit>1_wT&r&z)ue0tUl3 zO`XS--nEj?_U!AtToK%2S-ftj^kIsznxa}=xXV}1b>c^{B0KgMhrR0Cb2k06FFw)Q zcl-6mNQ8#06Pf_-pSjV$fH|ZY?Gq3`?~~|(Lhy6qeTvJ_RSOI3*36e*NIAPVw%$){ z3KvJ<%;5UwpIXGf zfN5yprjxyn2vle7Hz7h<{dmR|U9{vg6!Amu#>}q_r*IX1O1?=^K9mrC@5VUQq$D!7 zlj@6c(V)}1h9uq;6u8by2)Y^9MJjN434YubC0drEFVXjJPcylfBG#4u#W#D)I&syidfDz4mAdrzM2xM8Oe)&}i z=eLXOo@lkSN}Z=18?!TX6VBR17jQ{H_w^*>jHs%wNB5;1o;jyAiEQ<7lCeyjC~~eg z7t4WVy>U{1@c3_1XQsQi^1r4+mp==_-|lJLhP{^KY2q_0_Xk{3&DqfWD=j=m zp-Lur51;A1zxh&xF@yyT;VO@|4bf1|_U-Z~% zj61+316_0%x`LXaZxJzC$zD%iS_2cp2lpK;TY{yGBfjDrvND}XpZ!YYSCKk@p0`&L5~_+pqlE?hzDHpe_d^R&PJ+xzcxOaZ#y1oD24@w_?q zF^NCl`Yzr~km|SwHS5{%n9d@o4F}hM>cZXe#J8}2mF=D^k|FqAfSG<@IEsI7SmxWc z*wgPn|9k#lfB3Wa{$Ien(^J>85j{K-uTWDW%k4%-<;`l)jvCigy|FJ`li|fN~ZAWK~t#{~ikkiMZ<0&PAane9@4~b?hm(Y6Y zvt*?gh(C+a#&H3c8g$uzeBl!*<@@m8ftFwBGwXrEU50Pw8t&*U#PH3w-#1#%#xpWw#m)yqep}Qmlkw| zTbWrQTT_b~o5JcN>R+VNg~tcl@nh0%mMmO&ZyCIJI-zaWEFoqd)3rL$Z5)y|Knl*y z>-$WqXP6O_j`G6`aOptTA)_t%(8P=tU-Gr8Z)nq$Ttq4>sqRp`^~{&AypqScL&jfj zp`^{no+=t%olX`NZeCH}O{;hkI%zbTy)Q;80^C1y<$nPKJH0!w=T`e_7}qi&l2k%N zR-TE;V-KNxVIym+RcBMuxytbeQb zX1#~E=atp1sT9Mf>0@{FP%#WbrTU@zm=$aD)>XnqdtqI0{>BQrI%;v*BbFUT`{5SY zW}CIT!yAw(W=M-l<6e@{~puV8rX0&&kI}oMls?gpQKtx`psUH zIHxETEA|xiEhKp#O-azs64K9r`*;5A(fk)Mx3yP|o-mtL{>Q{SO9zYZ?@{C8yYfO@ z`>l{aX6UF@G#~QPCZ5lm3G7p#GR%Kp$*#B+Lh}hiUH_>j(_n`B=biBH{qScj{4Zc$ zzB%3vS}XcRf5aheU~^XJ-dvpYaf?hnr7jG)It>joLfep#6^ow?Wkmn`dG~$(6{&i=zcL5tX8HY&`4#IIIap4eqHEBWBi1ed{V4N+6Ft@Hc^92@f{?b$ zbo>~~!%vLjp>2&UtdTab+kzzxB~G-Dv!S>B3y?1-=uQP6&e08?ac-dz52H9CM_?sz zC)}RCDmy_GonumSe~l6R)l=)E0>1IafZy?Cq(78GxYAn@T~4tMRZQB;MH0Z}0$pwc zk+amVyxHw~Wx#c^KV#v40rUT1UHQ+P_FusKe^^)M1>MnNgCcvCwt7~?p352-FKyP^ z*7A5^(U-g3riXV4CzZBg2&Ryzd}wzglgk3Min(Y0wMIf^VuG`ZySBQ#xqrq^|N0pp z=ys*4*G!o9Bz#396DN&3e<_|+pbbkyB7jM(K}nyH^i8HqM!~OaZH-@=5*CgqZl90s zgRNN-<1U>zs}bB(g(%?u8MFQinBOO=McWJ5JZcx4p6cZh3)7`!!9=2ii+H05?DH}N z?%sad#1jcISPGif(t%#TXSzR-LuM8)T>XH1)!nw=zXZ4fpo_Ik0`dCkSEqMUG2__= zaV=euH0^CX!Dp{Pzo%<^YyM(8pMi;*+!qHytnFyI-rraXeW{u4AB23kRdVHFnZR-N zpKr&%fa%#&G$;MJQlN`buNwHVCI8Ef|MXB|cW!%3e2TEhI;u8`o8B4c=G7HmWsN|x zLxeG!p-kXCIAz$sMNZa(+B4Q5g*XqP}?IRaoDRNU@}nB1}Dl zY~-Ig(7*ohXYJ)*!1y&77xdZQLENVh^KmiBc9O=@264ucbr``YPn)|ez7%Y8ThVds zy7_dET}!Q}n5woO{yojT197>dw64{TApvkjKo@O{J{em`kmoybGl5rUyD56RHOB$I>~3i{nO|E1q>8M z(>n?Bb9HlzFZ^Fk<&|_DCwv`x?UtE-p(bn4Ne{M3b6r-;laN!p+DH@N>D@4iG5SN< z-l5BgB2#)JQ~s$r{A&j>&}Bc#zzDf`dQ+J9Qsj4f%_2(pD87s6$}V2j^9J9q{A?s&ZYx%Sd?i5l zWMo8}-#V_k+lQ~a=D!;(XYEGb&!8Oc+<#}ylW6p?XF)VEE;=hkykcF$WpCb@m{Pv832&tyQiOr5^%*U*b`uN<_r z100lYa(7p3-`>7ZwqI3^@<&ew@!t|F1vctZ$o6FH$;4s$5gMwP{D>e_G<+9$i44@| z09O`t4?kNxI#efDZ_Yu@()rotb(iR~k=lo;HHMzgL0Hhs$C*c__v$-+*UTUoOb~?H2T& z#btX{;a=<@G~wdF%61$cE8~1t?yN4`{0j8BZl$ouEsF6d8N(;@dRA=0iMHx1v(%GB z;BRhdbdqrLtxnVPoa!1k@H)V}YH%-e0ycjF62*NrX$ua6*nZnC6%1VdUNtP9K4!ka z^T{yWpE8bzyW_LrCFBH)Km8`N+OhR;l0w{Q+Wcp53!~{_UUj%PgG@fc*_$x#2y0|b zk5pOjW7<}-AGSQkfcPCslcQ%NY{LhdZ#>mB*u9F+Yl@@UA0Rb)d76dyzDyJ<3e5|K zuYd2uy$h9Y=!dR}IRh#Q4LV6`l4E}@l0F274AmgH`FBwlIwfQYoy%S!yKD5U+0&}8 zA&Yov#@55pD#7B=KAY(Y9ds;Q<_odLh{d)zTy6a_cQ1ixh!bj?h!`; z0!NZQ0pyKzBe#$BapTi&W2?c992gg$_Iwc+0M&k0r!nbIpZ$UQUh7;m08Xon!D zT43c+*j9=7NBKKT+Iujk8m)rwK#4LSB60hh$~Pu|@60;PtMmP}bAE$nm>2pTmj$gQ zPKx_^dN*4E_&ZsVD#PD<_LX%u>9>3RDSmoRf0lBf@E7HILK8OqppoDxZNw%?EOCZu zGkz15G_HSg+#wx459z?YMa8ziqK&<8qr4KAeSFQFwMKOGmDvirPE`sn-4&me&WskX zT@I6vi_x1Q*=R4$jwDq-mEh9)R&F!0uU=6f^M$on7w%2@iqt9QJ)nWhb=Nj2=xb9+ ziNKUYz-^IDXKt-SYWuhe%a^u;#9L;jA4zfqMRZfP7(E5_gZ8WAqLS!l0x6bY-iL6n z^QP&7CbAaRjAv>G8x2mogBD^(rg&jh-H>7Mk&%qFlv35)N#u%J}`e zeuF(v3)Q#IQTtJv!JwvRHI@{4cZ|2^uUuMd?vUakc)ogYuj-_}P|6sp#B<7Gu7}iJ z)(chQVyb-J13+R74FyvpbIZ$rT-xD^K;}!{M#ki`$_Qk00py&arpv+zU7fX`X4=lBe zw&hY>;)3z5>O&1W6LTY`U|s{b_cdYv^(+D{S=sGx{o>urwj2F9^!vU|?Uhy=Zl<^W zd9O;_j5(3@{1Cr>cbR$pd-J&cU-iUEzppl9k@hZq9h)$(A>4~rc0<)bQ_pEPuAX_0 zquR8H@uYyg*}Z_`>eVQv&??t4zjD+wwzDF#il_zDPJu_pPcw+@t$g#8gqm@LzAW0p zypQ4DJ02=L@6D4xbkJOz|A}mThl$DvlPue-zRc{^v%n zbKb9Ub1OFNWpTV`e9!2CvC2weHs9Fqgq&<1yzn!Vsi_SEyn;+-Mr-&89RJ4Krc0yjH}r$6pUN)qw9q`!DS^g?ryVAK}3r%1HTa;}QQQ`qe!@J*v&M z6bxPx#ZQUW)FT27?+MwnWkUG;4y{vZ?6q%;_(r|D))37vYOa!r;ZMH^^P0iEJ7qCF z+{d!|$;aL5!+b0})8u1ncee%T9%)w^Pf9#8FbUC0rDaVGy4C4%95Qi0&RK9+-kHqN z|G0oNgym!gKF>qfkS+^adsPcv+-+l3&An>0S5zOio_XxK?C7}{Fu4l#uHI!oxS-@cj}iS>pVPI1d((`(G_M&w{6ZLYg>BCgjS4gS1Haw02L8|NN!x3QROnyQ zh!cL9?GHx(Ja{)tiQn^%&0CmZP{+Kf{Gnx^J2kX6z3ji%aPRBATnKAIzYtXI#)R zcIk!2%*%qNInjC0QSI438^Pcbr#39D!B)l@{Pz074xxjACZ-9xzQ>d8gV`~^^&|Dg z))(QosH{K#-4d{>)Z94Q#zoujhk2jCy$yvm7=`;uk!`o_!q_;DyBznz`gT>DNdgJi zqEh@hCtYgOzy0FhDRTIFQ%s1>zSGD>+&xjrLbA6zn}?75bQ0!;#-PiBwrWV$72~m9 zZoncjWLgft|?=lasRo$mp(Inu(zRJbCP2f z9h$~JfClqI*QPEDn#gLHV$u7U%oFC!cv%6fXjSa50za|v6Dg@q3in5+e{rBLiQrH^ zyzPjxPsg|rX@<^AzCxLKg{Wz#fx%s}`w-@}hkNA|)TC0%i_)582#!L>E&Ij@Q1nh0 zo*Of!PVR=kKuzRjDzT5I;NEIK`!tR8*<*hA2D{`v&VCo|5!S@KBhgenRw(5%{ zsJ@b?Z18E`$~h^wt|`am+v-^4fzoT@hGFyc^Xt2HC7s!!%Ec;A+c%k^HN)j`;RN^k z^pLqfmfijn#3N(zWJIr8Qnc3 zNrOs6ICE%Bc;1S4jYy>q7PgpjYfiNe-+Z@@bb!Av?E?319890kG6vziU7wp|{PTVk z6?0!Rw$cnUJ+0epc#~X|5PA>bvOl=Ny;+UDCgxie*aD?QPxs@) znDpdGhp|ZUb|da}L;hRlu8Hld0`U3R z9qzq`7x0i$U8jHj*A)qq{Kw|ebHZc^CUT3;YG$jo=6?yR8@_d-|HvK>TKt|Bd(w?c zsWi+U!B6sRy*h!q^qTQ0ti3PcUg;)Nl=fY7-dK8JtTA1AY-HZuS0tNNq#;p?q$9z( z_0_9Q7GYje`E)9^C$_7c`$Dq%)wE*mC<8N@J0zdEpt#jKC+cV)O zEa4i$7@k<@+-R3^UyFB8i#5jd*;pRh@q5WHY7t0+Qw7a_5%?~S*&6;%JAX2}wE5rj zo@PMj+LvBWxOYYxH)11gDMEW$1I58mU8YCiK6AcolYp;I%XVb-lwjgJ_xv{xE55?NB|x?;S=e^_aSCFTv+cFSz&EW8Ar!_|I3_&FO^TwC1;WT^CQodg+$a z3~Jeq5`8ddrq6%*DjH8q6s!g#aW3$O3=8zB|L*)FVKKW$pMwgGjhF59hI>u=tNqO; z^=go=EILWe-B3un4f+!};o#F&|0DV*81I%xayy%}1@hgY>9w5frB2)Mw|{K|a7h)5 zf`&^ZyjNjfAGo&z)4Fn!am8-!bx@HkarRgBA!P9$lU(Z-+su|PFTFo}xydP~dmHzN zBf%G`{b*N}MC@BL9cxBnm9}(JC~gLH?d7t)&=`MN(9p|UzV!rjikb+7qkF4s>L71~ ziy!Ur+&}rODQe+&hi8~XT4?mUGjon(=26~CwDD=L7sP^j1L0nO z&8vJRCjHGyAv!g!cLlWS_f8r0-Hg!DFnm*=z7dOlv~o_uqikkhU3uD}i`_s& zhM{UAb^hC7l4{Hd=6wbCx)3j68;|?Hp+s$%ZriCz+x^UnRFWLJY}ukMVG9|8Prv?`{tyKBqSKDl@x@Z_=1mdadDO+P zoYqD1C^Ds?wNscg9ph}6Ial#lGUipTVC0lvADt6z8U+$Nj_En&RPtp>`!-(m_QJfu zaIdv$X)?dAnup8w?%Y6dddvN{YTOyUy;0YGA}^fQ_Ls!&KfZ}=+!`Ip8N_Do!M{+j z#7Cj4aa%!!!ZkR3KuiSYeGT`zv&HW@(;6RPj&rb1ROfRpudmy5Pf+Vg7NADh)M(I0 z+&YqXC?E%)<%z6S`&gh(*5&bhSkNL*sKQuCyL$%SAE3GJvY<&vKY5~*q4b>QlV%%A z!;e?KZho83mIgTSBm`N1ht=#;StLG_CsHpZd{-32&+yhSxn1rwXG+u9;z~iWf>Blm zti2&{Z-nl&!nkFOxl1$$Ms#@`J4*>&l&Zu2!TmnRLmH8Q<-TuY?Q$ZWGWqi(v&r61 zr`!|^HAnR948DI&iFT)Z30-@+JdQ)*-neHiHHM)+f{rQznJ&HoZ>};`C*GGVrC-Y1 zerG)>rA_5$bENFvhxr^4`gVG+RZkB$x?xfEhyrNHi)G^NZ!0S_VtiQlMcNX976)oP4 z7L`BbEc-^o=sPhn3NyD&_MTATZy8X)a(D~()+^buYi-cS>pKbf+G7u%Q0ag2M?UzD z*SlZ!+x>aq$Ai6ukH|MH5>e(Avs1K*uH!qTPGSW$hfT<-WGMKwlESRAYb$JM`fZyDSs2Wwvx9y`n(71Vd`U8^I z0a@HWy%V9&<0yz>#6=}_%uZwU(W5Q*Bh=O~=v*~zJS2L!*bYcGPzFXB;A~ils z7&f2E^xnUJWYdPJ@(uRyF|0+pQoWK>qo97!MxFM?=WEn z`h8>NQ|G*CF?V;5m%I1`cR4wg(0Ro*LZ=rT({AXBzwRU?cr3UhHJBMHCwX59?UDBR zk6$?M+fn}q;jq+IG@*U2)L&hqy`vAW zjn9>QvSh)AWtGuuhMGodd|IkRsH1!?) zy=3bi9Vdyj&m(%Mnd8U0rWtKy>qMi+ZyafV)`>pcrxg{GGht_Z=+}8NkvNbn#^%cLi1~dWw$V+EI)aSd z@YU`Wc~NPF;D8`J_;rmqxR>Pft4N9EXdP!v##zO_gc7aKhgXbF?bQD0(VO(j`*9}E ze$#ln#Kad$dwlEmqNb0f;4PQ%<%sRKQz$8=cn|wpcoTo{4QN-SYj(KpN^vCnc(jSX` z3P;PvPOP;URm&kakqKa4XwJVZXbu<#jWReqiRNTsZ_LR~Reu-VsAURoSZPrZOEln2 z3#~Waj4CeEn5)l=8L9knhoTPy=UDXB)9<4nqqB*L&=)Kv?g61Pa$@a`5 zRfTrb+S64qf!8TNA& zOE-!_G#ewB_dVR(OLx0yi84_l`#`sfIb~SD>xIOJ0$Fiv_wdrXna=B}C@5`sn7NU) zldh`aXE*o4YC~Y9F0XhlM%k!$su{Cg@tyqO9k08y)kEgkmNwqD5dj})Mn1s2(Dr3P;}Ch4 zY16>;hzZozD;dFfWW%jqI;Ro?jsoZQ%9D5UjGF zcFG^(GZN8FE+E}^w(UQErKNozzpyn@FG>p5UT7_GS0$4{jC-{>k?k!G+|b-}Ij(2Jy+T%YSM;hw8CbSx(R*Yz zxVLDSQ4^lxabBwMnqfgv%R0|o=OnlfP(C>zF z*7h@a`zuK9;n+&Y*y z5AKcqH9r5GvHg(z=20HbF>=i!We!XJ2jK;K`K}u;s4+DQyT4odn$(osB02mx^R0bm zs*6M;zcIp{Z2nmk^TZOgM!$UB^5Nd=WTgE}X(Z?arkeIrQ`2uxlhH(4U7^z z+~V2(bD_$6YC|kq!_=;#MrFUZx6eMvh#uZp=E)T}(QW_G&DZ0g&v8urW;c`Z@6o={ z5PUv{#>~rtw&6OA(iu-;QYf}i^pZ8#mMiM*;IFfy==bRnd`kl?CD_EF6zmS;@&_2q z2`|Z}Q|^xje)b#xB4XP9S6akIWCqq=sLx#%w6+%u`1R95#1)t~w3wO3EMBT>(ycbN zeUisV+R^MfzT1Jc6RdDPDdEl>TO`)GMZHy>nxF}G*?|v;;CWs?qiZvSDgK}nV6vY$m7N??$@b1lYiE@$yV7i zUI?M9PddPl3n=T$f>zOb`%N}ka3iX3YGvGg;MXbj4v^ zc+>Udx_*JlJ^sald*m2%w-v)If+J}f3Zw-j|DZpgu`H^8fUF+uKR^AIi6asIIfXK~ z*MX}+vxfbbwqp`kw`A~xNm}!n?v3~-{Be~><-Il2!Tfdh^fMUl*vG9^t?E761qq4j zw!3BaVMwv|L#Aod=&<%eYoE)4wwlK@LdM9p#D&GAtfTH5e1tZpEcjZSHGbL*>FuTk zh5x2w;MSWIQlrMlqNCw4Y21Hs+g*-r`4xh03IF&T16>=q%%KAA{n%q$Q)R(`Csltv z)GN^8i%!)qvw#M-go&-8+7u0p&id176zuiHxDRL{PWs~?^u3Go`i*Z%y%;M~;}6J8 zl!SRJ;ohE{EP)P}s!2i2t>{&z}%PzCU_yRMWgopy!{Qc*uhw3nIHQd{?@T`k& zZ~ypw{nJG9MfyIR$?k!`{Md#4hvs+>eJoz9v9Q=xM$M8j;z{~b z5~iNln^TU#yftvIp;Sua(w6hz4`6Lt}sUKvY)EQ^r!DN5Y=EpFOR_Au`!xHmtxzk4!}&@U*$(uD8L_?TibH`Us0 zT9NaGT#Wk z+dwZ*_1yaUL^V8ggFNp_h7O+=k0G_B7U*32vOhp`$7MmYOyJ+0;?s;i+BT-_auTkf z_+-AjVjG$+f_@{PdHCkJ-ee8ADT5~g@9oY-!p8mSA4ad%8%6rj39_!&2Uvb!gn8@X zUKysWcNmJ5S!_pE@#rlrfx?v3<6Y!V5>=RW4UcB7duHpQfYmdHap#x;!EFyO2E zt#(ys_qXo@)o9I>7Pa!{y8f`#6cxPgaXfeK=)m)YwHJB~FAEyR{C@2_yUpl71V%@7 z1P32mZcruPFH^Kwp80``o8Gg#%gM_)$U0Ms`m>}4e{ob+fhFQT`zr3+>#r0$_zhYo zU|#4oyew#6nv}95?Te46Xm`Cg?!>&jH)Z*nl|Q(Ilw9C-R`Z^XQ0~}=X0P-V{{zku zA>n0SD&oSxuArxx9@5domDg{f!o1CJFV|U#gXv$93ci^aPp^GFJ#j9sAz9B388a60 zBq3CoJQIz*?R3T7jsH15 zo!>+F`FtzftA5l^-EvyeNWgRwp8K1N&bKy%c^b>M=Z!Z`o$PG#>b=!Rw}q}glwEP3 zJT}FA7(x3f?;5V#??oqfbEIGC7KE_&w!yvs;QLwaaPL3(IsOi~H^BW%_>ryGP(fX0 z&V-O|T;V|@6+OxAhCz!fX7`u40;$rE)gk>Rq4PLLX_$d@H_D^-NM$nLx8B z9lGXlc^pI6@GlFRwM7O)&{i&EBtAM_=-sb3_RWh$iUgJedXlJ~SH{_oR1IJ9o8-yNufj{*HbQaWR0kw+rso)jfLC zdo=#;gT}e0DiXALi|bd(*N~CAe&|W&>kBcj#zq4be_ToMdB7GIxshdi(45`K;Y)xmtki z<#_h+eSGcv<;Mh;o*~LknIAhgUJGyb2KT_c(Dr3POP{%#;#}{AY336|E4dR%Jt3@1 zAeFc@xzU#4Ml-Tk_&I;z)@ViB42|{H%ftQ$&yf4MHuQG)1Oy)bts8FQ9)fv$;a)BQ zC&~M0goj=|Zv~GXg@|SZ3>w*ys9!yLyS(y>#so)q>Q6w)=Jk@q?>m}79d-Fy8$aFo zYtwK%Y^eGekbc9j?|g-O|H0R-5AK~yh>F^|reDbG!5Kuz$5)+d;BWQShJRu-$bo#9 zSgBEjxI=dVJI-sRAfp@YdGEJC%_M~x538>zVXRi@UI$FD9Qxtjf3Up+a4*S~(r^80 ziE&(*Y#MrR{vPuU?=)wS^^1KxU*?#K!X`KN{3N6>*b|v~l6Q=mLX_qdt@c;HvFCfH zp;EZ8*9&Y|d%wZGtRB919n0}|NO_$3IlsUq@P@lUjXuJaJ z!AnRTzZS9&A~9BL1Wjd?^%S9g`{IGJb4lf`PY;y8)0 zGygJBl}}8h5ruh&;a*oAE+JyZMc9?Q%RDfqPq)xcXlk+DIAOTG7vkv}($I zXU=8!`t~UTqRS(AP;FqtwmX}V~9b|98Hsk$PGQCIY9;I> z0cNq2xH|^UA$FWRyeOs-^bbCgl4`-)I|=u8VT}3g_9@27j)ySvJX$|1o!h|kAWZC5 zP^L-i?S8Qz_iSdqPMVFoHNrWxqc-v6s&oL}F1`54QzvyNkM5`Nb>9@+YtsDjrArW3 z@ih}3Ze39kR_<9l>Z3w;K7wm2&tEOe&? z_}jz1nz2Gi?(eu!S;~AU3qxK3Qj5Zb1awY(>79Xlm(8`TWDcC=r9O<3SINP^v=S) z`$Z$fsMvab9+jOV(!BITL;A891`fz~^2i$>Ca^Jyu7PDP0j?@`hz=Fu4e=hezBoZF z`uWDCBkAOdZ&9l7>$G!lFVZ5tB2sELqi)lmCb_4jXR(&5+d=3-PPV4MRu=cbC%JoR zcFn5G+-7WX$1UwzlaCMc1(|N%IpmD6{bkMjFay@!dAOI`m1N1}_0A&&HktfMBXWie zW|!96L4Vr@(v-w@a1>84ZuS|9!2$gUf06Ib+p#F~rP3cc^=&CwHVHZzI;Ba-O6)#+0BJ~7fYTe8)BrbbiC z@1P`LVxUX{C1-=f8s=Sud((8p8K?iqQn+>o>k-HW>+cSDM)Fe-*X@!g?#>xFEZvfNikB`;QkmXE`Vcuo9 z_q)5Is+_*~R@Gmnzx@jO^B#C!wf&2-x>;0Y;A{2hMdhf8UG*{xSH=zRWuR=; zdBr;UHX+5%Swt~^s`q{thXHG5_LA|Ew?iaR;3_l+U-sWsxOeoHh2^8Zq_~fthaM6o zR7Q58T(LS)kEGlBWA={W7gv6xoCMxq9Mn3bdYb3j6!KFjFAnCvPS}#Z zW73nIJtdMr<-JY!++4c>hZQ=ht3jwwv`v#&*OqYg%ReWco<79%09f{3}!)HWF16x`%JW zq>mC|-tTa)p(9p30j=N$%0?D$X93S`F0wL@t&p+jdekG+j~=KP2_G6(jjGVtH&K&j z&9mQ{c+}gF5T4Gfhp9#uK+08k1?Js^d&7yzt+w_@JAN~9P}_Wdr{t*_Zr%K#AE}#M z;J|&gZO|kC$vZZBrfK#r)5VY1m|H&06F4bUtlo9d%2ykm(}2dX%Y3)sUjJd?z?`HW zuW&_9M~BzjSjMlc@+r011~xmJI|8U{C)_-_9X^G5(0LG7zi9uW_avI`P5)gNsy>y=k|B>6#sh}d7i#( z1Xb`;uE4Yn)2Y)BnfVir{;$7f3t~Fa!`iz8_xcDV{m53qn?J9NEjaw!kbm1#5Su2h zKt-o*DcSTmH&$^ddqx183PWRfFX*vY3m3Vhuim4t+LB{6-$;CKVbVke?c5nf)swhKlWXG10&q+VLai%pEkFwbIw0)FCGI5Tl>H4xgA$k*I+wdF zXr4u4r&B*s?vY9qYKrr2SdzcH`j^AXH@0QX9|kbbGnmp5YfW{a=H&)WoMmqc2K zLwk6w%1x4yzv6`!M>9()MpmH2#>TyoYeFgG9o}u0-olW$>ULhf`L4 zz^3lr%2Gz9tsUyjGuFmkyNJ^t1#?XI?<`(bUyd?)=jW-i&iVz_V6es}{K;T$G0giD z?lmaFYc*_F9$=Tz@T@giWaeQjuv*`d32DjeXPimMK%H*=3mc8=K%Xc2?Wyzj3Q718hn>LF7@}l6r{gP+ zoJS^Ilr6zG{2CL`%29uf5XzcF+MaNKS*pDG-tzHq)f1Ta816lyeEuM%F+htnI20$N zz2$|rWf1{EwDY*oKGDvg%$3|v#>eP8KPWk?ib_I9Y5II~%(7H?`1JVvx9k0;NCNBv#^0f8RGsA-}0H|^K43gYoYMU%ztsf@-&P- zQD!Ufu4225i_La$H$5-pwqAoa!L~Lh13zt6+5zhiwG=6s7n<`g3!39FiE8=Y{f zfq|iUA_I$C_fGm3Ol9)L)2|n;#Dyaz5xr^LcNGlie@ihwce5G$tXW@w=b4>d^K@WW zsSP2_dj|KG@eJsOm#cSw+9)NydX!dW+v{vvm_h#SgtdH3lg;i}yviXqQvQ1M=;(y} zdr$t@`{kMC*P>cwkS1{@{Oj+*&tsu$f0qUAO;M`0hS;Jr;k~OI){VvjK+`nWLLXp9#OjLhtQfj%Vj^FYjYit0ZzoMUk_xkBwa+eMg`ueJPmqe0{^G7__M+ZD3 z>gT%gHz=O0mE{Lf?l6AWg|!zM?zNr$vyc4vmUnRo-nU(jj)#;v1v9yFx2|i5uFOYU z&Z}W`UR|oNYqu}OVhCF~`1Pb&1?vTiLr4J6O~GG$N+Y!}FACgy|7{>e|53Q$^{*&v z`^oy$rj%MWo>mHlR378wZ1LMqXLz`d?V?MbOiK3V^x;#yThftB z{xB~p+)Fd=Iai`Fo#WVC@`!!bOQIw^;gy(X&{5E+Yt%HiQ2rNZU!F0q&9GO~4g>6p zm5QFWGD1`7?0n}(LvKQhZA4*SG`KgE-u7I{JpK$nwamvui~NpV*wvfH7FbJ;#DfVp z+XB@{zyH)M)u}@oi@44(6!(I-BpmxpK3mKuE$yR)%mIBo%!>~9{)5+*G2q^R@VYW4 z+{<6{bxDnm`1#}4=u>2P4k>e$B7Uu9&R3TVg$DzW4Y}g3bYQMYIj@Spd*T;EqVc_* z@H0MYnwdy9FVUA4yUziz9I)WtikU0867Nz&&ljH#e%~^P(ayaebB07|*OW1^W=y$# z$L#xw`9a4hx~`S$#EOTqpJP@SWsp>j#okCS<)PmP=oq^^-mu|b^F+QwM}_5`04cQB z+;YF)n=1L4KTty|rnW_|Nl*#jZ_m5`>U;cR!7n@49$Kp^Qze$xA8ToS7VP(v*%)PHi+aLLnL1Il| zj&jE{l4slAw5QklT7uU5FAN$4R0+XyV)Ek8)l6mnW=Y*ZH-*2yc?IqzWG88DTV+MB z9n_4LUo{gIAlA!NKiKx;bqvoNf6Z3yE@1RxmBek>{Ry@HB3o%D%5ukTLcL>c4=3I? zv=98=!rF@m_nKI3DKs^kvsWO?`%Ch%rOV8|XoXLHje&DGphFP=B z-u%Kb3VuFB2=@xp-(S3S@@3-hGjdnSxdu$IzgBE$831q?yPcunzciwGeyoZbWU;E&xqk($JM*H za0FGaR(kvMbLp@6WD}^d9es~ac8U3MV5R5ub8fzP+iWRLf&EIoDmw=Uk-kw6^R+{Y zzTvE$W%>F__&h`c_l7q!^-MhPW^R*R+A^5%ZIYc9zZ$3enVo&oob0Z`(P`!Dcr15$ zzkz!9ot&bB9Kl-!hR@v_HN{H?dvOOjdZ2TP%l4AOz2E9SHH=`Fe+j(RplN)oQ)*3B z{(GE}KTZ|1U|rcY1`(}r#r7o8GPIU?(Y^5au=;u2Bu-Rcy%dl_~Ig#oF_ zuV~{1C$3$qE8iIPbyIa@R1G#G%)0ZrTU{bb`~l2M4)>N06O+>ZeWx@06nR)?`!8lQ zk(?y{lTb;Cl~ATrd&;TzJIK$PtTU}j0^Yq$@f3Yy{y418J!Fvez_m<5F1$?v=B0pp z!+V217aFe5k~v84jx}{QTi|fY4eHkBELErCF}}t8R9BUONj{2wYNZfutzEg5Q23TR zh3!1lsdync8fX5sAIuB=jmyh|Hh7~UcRz@*o1y+t6HDm^PI<>hlOS?1OK(A`91F3+ zP2!D(*Uy<1lPVL9@b6%!p&p|&Pe`E=ZDpgr3)Jo)hv!QP_X^&&qgyu@ZLsFPf+SM8TH(E!x?+CrF4?b%2=f+ODcxU4=t0L1KdpO8@rfDM zUMjd()cc4e(r8M-)#`NWgC+l|lvKS|S6bc+QIi?%W zD1KtN$4eqJT84fyx-3Ce5A#yPy$-U6rP1BhoOQJFk;r>_13|-gqZ*X9u7rhY=^JTH z)v=>o-;+UM&QA@t^>65&kY*98^k{QgSo@?)_?Ux7aUJHRfqQqI3Hj1+QOYFF>*Tlw zrKjt%3gkFrvNaqc>Q4*%D%MI=od`qXNKQUTl7!iEv1f%mlaw&dCeTl}WPO(5dq*1P zrG<#1JYXvLo#`v%wlSY5|mGM>#dnlRY}N3SKWMlmA3%hTIiv8Z||a&+HpwS zS~7ii<$))6BIUPo^@cWhzR=%(y)0<|;Qt?@hkG?EGp^mQFY)GX5dNfOoOF9LeK*pi zn~!|gcx)_U4~-iA=a9**7WD% zjhLIOU%A_y2`U_7yR2^JkleKG`?&Fr$QnoSk&5|!Zv!2^&_l23ro$gsru2qeDBk-w z1&MvV^U88+=0|HKJ3EUrSc^RPkMDuCUgZjTIPIj!3z|yqs_^N7jcE9R_dmE5d}>;gW@^ zZLgh2J4tr`&ui%LA%)t$L_rD z+8RtUYmDHK=jfg%KJeF#8}7A20pB4;H+eQ7CyX(ZfM=-an>qJ-+tNAVkny$pYk}Q| z%a+&7$EXLT$(!by1!vpis;iamjEM?mF6eyF_}fAS%Yg^({oT9jGxj{ywbgdLn)|50 zz&v$ors2(Zsag|fTl!F}W8u*9#(pF91as2+FUPoR2VU}a`QNzvd&P_C-2tI3b|lQp z3-@Am#cJJND|efWe$LKv)vDws%ck330wi-hZ~8%1!u!Ry1fF`ucxDwpcbStFwwQU^ zVf38q(+y$6ZW)fcjfh);FfSk6yR2W>zt3s)<$Dh1%-n0*sn#K_FB74WReUEW)#U*T zD=6w?ztJ#0JH*B)&kZy*WH&7nZ*_^)PhCk3H-5SN`!USR5BI(rZC;I z2VdrzIhEsE5|A)K!>7SE#`uDWbJ+W3<=&t6k#>~N@=>OG%dt!R$?xNJ!q?1hoGQaV z2O;CjU~ z!PLB*P18Ye#_=^57aivqnxT!sbDkTZZSlL ze>UNAF8-gn1y2{r)Yh8E#_50NQHXv2Z%Y8`l1}D!uIA5>kSebrA>kn*`TXDZ91+jw z|33*p{n_N1!*eI|XHMx?k&sA0e@682|Np%Hh-ZpO;6F+L?P7<^Tj)n<`;v>h5jX!Y zC4g9q{;vfM&2RSRFPtIE2@hfo_rI3rzkW2-PoE1TA>kv|$p1Q|i+ldW0*C|<3H-MSKx3!)8zdy$|6q*$Zy$-MK_u|66M)Wp!AE+K;OD>pdhh>p z?}66imbMNiPzzgQ|MfZh|GCcq(K18=|G5+R@2&3<^VWav*Yv;FdgwJp6hs1u1P}=z z5 zKqP=j0FeM90Yn0b1P}=z5KqP=j0FeM90Yn0b1P}=z5KqP=j0FeM90Yn0b1P}=z5{_V*+&!pbly~*+t!Tu>Bmg1#0Kji#leoT?v2+Ij95wkXQggPz5O0 zF7{&u+oE8b9^6u1)Uko>kc;0-1?r$pc0daNDzq2-ae(dGf2#q{^P-Lu{G4`CM}JYr z1%8Iw2mLOFi#l$w9e(jU7%%F0K;2tV2mOAgi#lGg9eGiA{i2Q!)J*`O!hBK3CI~h_ zX%heUTO0`&K>;an{GJ%=^^-rijLVXSDM^L}{w>|-Gq1PNbexTz8IzFJ+ z8|wd1e~0=v)Ssc(5$dl{|AhJ@)c>H@5qgcF{sg@)P=A5?2h<HO0oVZ?08Rh_fDizUIp4q&83YUgMgU`galiy%5-#zA8mG=_Z#K;suQPVE480nqsL18@L<#wBPRIs!mr8Z?GMV^$ZS z8_)}Y#-=_%3!o7Y1b7X21+WF!0~`R30BFp51~37b0?Yvx084-sz#3o!fW|Qqzzx7n z05pa{W0nL!5+DVT2FL(z0d50i0e1j*0dfF&fC4}fzy!DsfX29U@OmJDTVwzV02P1+ zKnGv|FacNqYyb`b7jOlD2fzpHgNGjg4go&_M}T9%FTe@l6tD%@2J8T!G1MO52zUap z0vH1f0BQi}n1hZn=$L|zA?TQajuGgXfQ|uvfB--cAOsKwhyZQ?L;*JeVgPY~1V9oX z1z-YP2Rs68)&uAR*1*s80B8(X1c#6kKpDUSUgj* z0idw}I`*MsJq$Qy!R;NuU4S&e5MT_r2T%n-W4{ex4IGT?fDOPVU>mRt*aQ3k>;nz~ zM*tVFzbgQm4?F;#0AD}=APL-`3V07l1AG9a1F`|o9AFFffyQ_TfCXruB_I$yH#LAa zz!$I%>NWuL0A2924&XjO1E2}e0w@Cn0XzUI00rP0fD%9oAOp|?7yyg_S^za*4>*4S z+yO5E(4653@B(-PTmY_s=KxlK4nP;62v7n@0}O%30Pq4lA2)ypz!MMv>iEI)Vh3;l zD zmH-XFO+Xu97w`iR4tNWQ07L^~0Pg_tfKo@&N^aLO>Cq7*GNz z1(X5G0TqBTKqqJiG~uEHpgA}c5Dd@<7y!J$b8iH@v;f)xwSWRZ4j>os5s(T<1Ec`r z0P%nbKnUO-0GcXkfr}2X3by+I1JEt_8Jd$L08s!#z$n;%0?-Ng0_XzN0rCOgz+(mh zLx68!-yy&-U;+>acnp{V`*j0)0KI@rz!a#T2Fw6v0Y-oUP(KQu8??rC0NZ4s|3GU; z1K>6Sd%pIZ7vN_%fH%M&0Il^b0G0qN0JNqP14sazfX^7P0Gx9GXwBvWZeN1? z=z-q^JRVw$VSsH>P$vW^0zhjqXr1KY+7FBw!5GeFl60K>I@byaV;ofN8M3cd>SvR{>&B{-ZSvG;Z<(pz)Ul zzzLij0CoTy0Giua0W1J$euKs!Xs&|hEocs71HS{B&!G8g6964&&}$66zR+<59Z%5! zXfA=~6=;5e<{N1Kf#xD+044w^{(YSeZb37k?)z_RDrlPy0Ihpy0Mq~~043lWfC6w8 zKnj4?QiK3}06BmR0IjW{brt~t4}b&sf13LaFe!@W{ks!PC`mvCk!XZHxIj`+L_|OY z!2pPYdv|+x3wyiAh6{iSm_-p31B!}*h!G4RiU9!=f}$Xb5iu*GpPz~t|LM50!9JO2Al@y2RIebA8;067+@%XZG0f$bie?> z5WpFLL4d&k;&?qAFv4?}dOOfFCdpK-@(d zm|g-f@a4ER`dj|8ol_521FiyG3780|1dIm|&+<WFDq01W&kxV{)L1rP<0 zHUWqOVt~njYCx5SN%*Y=)BtEh1|Q@1a->}bU_O@urURw{rs``xN4bq(K6fKvCSV5O zI>7aS*?=1WvjEiNZGf8rbM)`6_`L=26ksLb8NkzkrGOQHCjpNGmH=oYIru#qa68}; zzypBAfcpWI@jk#pzyiR%fO`P*0e1uL0^A9h2e<=Z*qoK`BBWCv`vREP!+?hX4+0(q zJO-d_PXH+Mset8xWq?-zYXQ#zti02&R{{S#;03^Hz>9!2fR_L-1HJ})1^5!M4e$xT zu#b;%{Sn{;!25vr0Ph0c0&E13*9O3Pz&Zfi)@uOD@H&2tyxzd|n;N$Tzs&y~z}tY$ zfK7m{fDZxW_XXfHz^8!ifX@L&9^c^lzkr_rw1fWuegymg*a`R^utQ&S{=oSJ^QY7N z2S2|6W&(Z%{0;aE@F(CmKq+7sU^n0o!0!O2l>znveGVWSFar1W@w=~1p z1+)Ng?8`CmA%LcUCV<9(gFwgeaBBeDHR;m-I7X&Dw8byS%xwTK;-2+%9e}n|0AT+{ zIXmLl3aybi4Qcz}HwVBu>t}%NfY$(10qh^yUls#6rewXa{y5I;2RH{%i~G~@+aJI= zCFhu&E1e49+>>*KJis74$FTv&;{yPv07e5iFFgss`9e=X98eB86Tq=7=U!!iDS(Rs zoJVkc(iuQJ$GJ=+p0pgxL;!q-d`L_ADLeC~{FIM;nLl~3JVse42lHl`C@0Isvar0A znPsHBy#bV=5Wq69td!qc)*iU;4(JBpa|M8W{cBvGfP2Gk`{24S;4}d983Y&z7z{WA zFa$6Z!1>i#fMEc(iQ)L2gx^v49SLBWczr&A=>*nO5$-Pnj0KDX_yH_$DIfqS0nmOX z;5P^u4+sN7fC@mA_rO=;cOt-$oBB2Eg8HJaY5>$x6(9lNIL~;VZU$@uybah0coXmjfHq6I8vq8)T3oLItOi^SxC$^GKweh@ zt^iyPxJ>`f!SDTmYXC0-Rsn7UF#QF83{wE#n=8*$D2X8@Qt z<(dVs%EEif!C&HU2HdKz4cVDaFz#92`2g~~9dI|`F2J1tmf;Qnam<&%=lM$-UQ;fX zGhJ57#dPBt>pk-~a7GU7dB1(4@s0P;2X@Hrz7 zrV$Kz_{%zd+LF$?BR}IggAeV7ys7W!0n`)aArJnN5ADkOJaM!Y+6U8losPHOzXZI| zj>zv-KyS364fv(quhYNl@%uV}IJSNMTKT*M9O={3((fssHI4VQfh~YApd9cC;A6mh zfcF7g0UrQ91bhTw`<;&bKgDks0NebR`27O#Bj9sDCjisG!*6T+lI9!0R{-PL^Yr!C z`27|@J^X;*?*Z=u`T;1%4!}-;LH84`e+B#oAkSX_{{>tK_!+PZK>Y83-GILV1Ht=G z{IcKr1HZ%Zn~i>wIHvyvV8{B8zUR2%2;6VR{YF45Tyw49FaXyU_#D?ysB^BZ><6e1 zs0W~rqF$_e-WTacJ#&4AeBTB<4!9b?H4N+XFCfimMz&(p!+AY^mp2u%9{2l^$7}rk%9tGSEXoxhn^``i30%#0q1R!7X zBM)Blm-%vCg|Hdd)YVbA?g*fM*jG_M?E!{v+TogI=6I$puG;{(zLKspqg*WS5&+A_ zcFT6L9`HJV)~oie7&IHK_^ z?NqMuOFK2vyW*KsanEOa;>xjoYJ$*ee$UZk8UI!&S5HxomHMMi6D*{Epbj$5VOca=Q!2JHrgWHF_ zz4Vrx?6KVy<|bg;12g};Ip?qJGCE>nI5+D6%IOX5p6I?=I-S6qv3M8WJ3e8fpnlr1P^Ujx4G=6_~u-Jg6Bhf%fFqYN(*3ZA# zIIwLC$%hpu<4Q`f{ID@uFW+))IWPseU5ObVD~VJ<>W8L%wS4xLvTnfSg9J5K5eb(? zN{X`H+3$$Y_kUpfG+?^tvP!eUfg02`Mr^PBy!GS}WA6k;*Xc-I(p}whXEwa_^9{hD zvI}#2$jFpZ&-(Sg`Omc8XF4#tw#S2}Auux!@BI7H5BI$dnEd?Qy!_m*(SX008O{3Y zy^jx{wRTQUwwNfSuF?5SKJ3KbgIAqXYGS4V(+J#dy?W&K!gV8=Pa)LSU5#&=08>`~ znqS|(pZIdv#Piy&JmDr_V24yftlS^v z%yP>o_phJ%&mFsg>6%+m0K1M=(@N1lPMSC+_pSNI0RziH#Ys=p0Nh>;pFellhGQlP zjno3?XomvxME@g?S^V~;?*o$u8t6J*2aU7oTWOo)@yiyR^X|l{x1N&UNoZJcSuX>_ z+Wva+wT-rH*|#z$dpS}XBPEj?Bh>J8Q;Q>^2<4vlQQNDAKVJV~aAPxtU2_eJQkUSd!aY(8110z(;x)oazdqQPpviMa@v zBY=73-oH1F`SOc}CT0pS)Y8E4!v23xsP~bHxm{zHzj*KC-J5=KpNUzaxxMpv`K;&f z_~s-Nvl*E7;C9hDBM#ef&dQ-C=2u|a0@JQuqxqkl^VoJ1)1tn_W2f%C`sxq&KYikK zv!urZ(*iV;cNG12&}9!;bkJ90exGqlhf6liO_((2X>QZr%sJ-l%W^I@G2?-uNBUvZ zM>jVdyzEdDb2%`F0dqvF-7~%@Xtc$|%mapPVcUz%|Gxaa^3P4oBfzkJDi@u!V*2Fo z?lv*2foTTJ8P(Z?hyVA(#wKR@zN*ay7u?%$MboCIX-h;qjiX;ELJbbM`=bZ%J#^)7 zVmpPj5NEwP>)N?~oa@xt4ldHQooPGH_U3G(rEnAU6h#v|_UYT8QBU1Upo18a*-oFS zf6u~tuigKcXr~u-@B%ROiEoX1aO0q#@BTtCU5R-O82ZHhnvH8V`I~-AfYJR=D zryID?tEBth#@PnO*(23z+7X{EnlPtm$$6?g%qY_%aU4R|=gh4Tg=qpw9vIg8t$8=T zy;8~}dOHo6roe37@A|JsUUmIql@EQDEk^q7;!vyxCYp8j$74Pl^U>4>!VQ|U)4@r7 z^3aoH_CJlY4a~a`jGk}Uvg~P7`gErR>}hQ^x)aaRuVre~z=(Ey!PpJWFZ4hC%(5Jv#m1b|;G$aksjOsUmKHP3~{R%+=RBXD65eCo;jJ@@~N`f&C3#8B6?NgD>*myZcm(YB)SVK{3LQltlxv*t&DZUi`p!J=qGiSXQC}%ayYtln!B+FjUsdIyt{Z}e+UeeYb;lV?vhGKD zKtpb|{%9FUvTpcp`-45E?)(Fo9%v*`Pv!_k4^Xns0ykRzk83ZkocHefO|V{!Tqr^< zcG3o8@vNV2UAm>^ly*OfT??i-6ift>&tb=0?%zB=|14m7s-gyB#r}}LB=Bcw&0lAZ zsTl_hter~u6ZvpFx+M6}JL?a5o?~*V2L)#;`A5TF34Y&ttYC!Z2w>P_{1wVx zTG_roM}vASR-4x|3<0wG|CIgH7thC60Yd`;w_`O;pR$c5Q?44{k=(!xB76Z1b-knH z{Bu9*y{bPjlo}=d5g3R!_2Ed~lcAl(cLAe))qa@f(MDUh|FpxZ1KK|g47G#uoT)MA zXV3d!z^=P7wiF3~agZAMICE>)O4Y)-n|5@Z6lpvf+~C|OTM00fdT5u`_a44(O*3HF zN`SG=N7}YSKA>^#or@Bsr5wY)G^qb|$4+|j1}P637c8+n8cCFuXLX<1@S`ifX!RX1 za1?AMV=&~T?Tj2TFYE6geqRR+dJ@tE1A#z~ZiQKwpPTr5M4SE`??@#SWK||ADp_*_ z9)Gd^^xK#Dfzi6&A6)=-ea6jKez+m~otFfY$2u+YM+0mOe}40E#k1Ge-&Bthh=nu- z4JEj7X3JChKX%s=jX_C;2J_HAAD%vY{j!0yMA88BB50`5K>V&tKUn-v55b5=)47?L z^_u3!g^NeLw0j(UqF67u#p3YG6*XBaFSv2^)KB*3+!^`6u(F0=*iG3k+j8E~pC$S? z0fyQ^YdjYimb7-mD?3_D9zIntVpZdSp~W{jcjTf)?GF7!Ft$=lNjW^oDk}6-p;;}z z`fI?1v9EJ(mWSB~T#_@!RyN^gUmi3r`|^lv&gJRaR`n&vWG@^rY1v8iA+!TX9SIi) zDD|sL`^~+r#?M|;+fH@VUs+j;HRO3)-#BJU6}=cA#GfsVxXX6!ltu%8J#<3rUYGs? zZfrl$b!MN1_QUCERwvLjhOYAuefa1}c~h>^G|22kV4484uw>lD_YR4itub)1Hr`Ul zgoc2I{_Xi|2iA^VegQ{MlmOhu07HL0^O=Lcx_!ZXWe1{zpw8#RR#koeoK|@sXy}n3 z_1=^xhL;}b{a3^`v}jp<_P5}c5AP2Nf|a7atRriD=Px|T_nKhD;(vt%w6~MC4efNs zGrv;@^suNO=bqMCqooKhapqe4Y0;X|W$n)ZH-$1) zaMQlmq2?g9L(M^>S3owF^vS0pCwzR^(+`20_OQ;i@D^z3DHd)0b<@`uUtSFw_A;b_-TCn~SM4{3vqRViP4NniS+Vn| zS8w{y{z0J;3kk$3qrnP))|#81e#C!DJ#y1yBxlTsqf}d%&}Yuo6E}VM3TQBVqtt;| zA|4FIvTBas)@sVCwPDFeWV=Aqe7@tEmaE$S^;W&?OS&>X>M(N^yWSHU<@ktywlq>w zXRA8&7^Sy^6Q7;_>^@KVq&y;ZTVR@^etNt(WBDzoe)=XbdhFuNtu*FC)Gq43@Ztx% zjlSfd_MpLll-d~&ZmjK|gV*iMzoTUhFuE;_k43_Ko#>1;i{I(Ft?FaJh#e$AL#z7p z-N8Aho%6=kz(6;4+~BV{E5NMDRtHj^OsW4Dy=8I}3Fwh9m}UQS?0-J~A$I7GPeE$L zS}Ap{KQSqUdJ5h3(H)5vPX~ZOZ^ohqK*N%@J+h?5pv&gWl>P_NK}1Y}q26Y9Isf{j zm-XqDlZ^!V`$5wj5b6E$x5ID8{PYr7BD*tQ|ecLU-=pLgo5SHQk;?2KY|9kG4^93Vz?L4Niu@F6ay1%p1!O4rh`7{5>FnbJ+ zRH5+4fN25=4$dv?_vtVFhXW&Ru4|S94chh~pQ4EletKu;_k8p&&?hx|J}}L|ZS>;r zUg>|&dioHKcTm#tk(l&=!8I@UUNG!|e8~qh)NWacL{LiFYUhwa8;?5jbzrz8fqWwV zM4YPv1=F`3a6?VWnZR_-MJ;s8Dvm@Z1i|m7O$$HIJNx_kf?>DK^#utZ4|?S(e4o8hFn#1$JE@?{n^WpZ$pgoRks7fIp9%e-#y}|hwr`|m~Lufaz8Na&0753 z{&M0G2UM-^ zU}9d?n5}>8dilWbKfA)jYy$?gMp3GI&cGvL909ysE$evM$G z^w&srj?nJPR;|Qbtw6&TJIIvaJk(lS@DKaL5w_uR!`gIgzk16InEqf>sr~ zX5imX-q#Uv3d2+E0EYI^>7519wB^ck9{o|(ZLPiNSelX zU2)U8X>T7a`Ec@)(ds2KhjeJahl+fYGC;Lx5=v z2{vzTbN=}c9B?o&x@YnM!}fE_&eF=Y+v{D`EV~0zSjz+OOR0B`p1J(Vub;dFH0Wh| zqK015Pc%9FrCSf%*mDa@swTp30>l32-j3hQDkx}m1~JMlcf^uB^ErBT{p@vLecHwB zY2(pCSOVhMrJuexciH7!jny&84WMEBS$O=%GZKT28w`vd_f{stwZ)N=z;P!PUDKms z{R@HNydD~T7u#r9bCG2WH!m8pUGSmaTwAG)t?yF>^W%(7@zoxzQ5q3OU6 z&hVFg@+dG})k<;9UlX9~JN(Tq2eo@{HYfw!&X1# z%pKud_S^j-FsxHxh5|zinRvq4x1Vt2!_NVuHR@d3<3PhYopNElB{i|h9P{bOTv%gv zELhm}&NKg9Aohk03A17@NmYttvW4)f`aj;%=&znzHR`uGFlb$I#r*~WS!5r;ir%7L>(cK5PU)H?u z{2z0&TOx&R+F9z#SO}EZjk$1i@z00t7>M$))fX_5Wz&9SfM7c-5TBTJifRjYbuS+F z*xItVaKj!5L^6SC2uc3)<54f%ThN`Ygz+krX9O_x@%KLV&w+nT+9Lh{Hj1`TQxPi0 z@_Vf6{pT-kzx>`~g+|Tv!to&Xl*Ag8{}wEKaO1teaP=QF&UWCB)rN~F1mkZ!63AcR zd;VI`urY$>jsD7ZhE*Sbcel5e{0$6S3HfHgIbz1fSYdyTm5D(~ZRbo9Eh-6wCnhkyzH8_uNBl9moO3|d4`?0$ zH@2+F2mRCM$YCqkg7v&{1u$$2M{N1?gB~Mg#{kpG;x1@Gl#U#Kye?WY_V+U8~WJrKW*8}7X4u{)b!W>kd~+GfZ< zsg|u|{loF$gF018*4& zmj|N3c&y3o-yV9{C!5Q#`aUqCYlmF4h-#J^b0%d&-?g$wnkbN#z*@PQRNyreDj$X{`A_XCQS=qsL|K1pVIKq zoOcj&Kw)HT=`4YBd~|%QNXAvYY7c*E+Z%VHKhQ9rPvW zwz{o6Q%P{sdG}`zyf6D%MMDkQt~`kK&K;`CbK08X;tj|AHwtd-0b$qW{+O>c}$K) zjiU9)!Fg8TJcf0S>N?LtU3T1{6}N+yjQz@u5!I#dy`+0)423(0I3n&jQr;_{TJNd1 zFSzE@ndr^*7UzE%^XzC9583|X(H|Y(Bl3atX4t`+pYx@U;K2)x%)J$606GR z4x-P1VPtOC(mAK^Gp1?>FpOZJes%+MC@@X42YvYSQ)Qe@F~)`RG(KNN=FXe@`P4>7 z+_e}zt&a0yN-OhvV?TLL_OW=D`ikQBaQvPZ-&s5QpXO_FvIimMIHb(LFSZ6u4P1A~ zi8sFfL=p1A44o0CMVj`<*B%N{zsiTXvi32z5pF$jx90Tke1~zzJ_dE z&kA6Cz39->#2a3k86tp^X-V2UwbdGXgn~<^(+j@qqSLE3V!+e;3tj^ z0K=^?!p&)=t27uc@g*v=8h#mU*mBwMm~a!>IO_C=Vp+M*ugL9}e=POJtyxO3 zNLqb)>6f{~65W8&$%e1IJy7kc3mmy-NUn|J+X-wOy!Aqmf z2Co7)t_Z;19Cm>~qdhduxm!Q&)U?eRYX7y&K28Cq0rENPlF+jsKK2B6KQmecjSkV6 zyRKY$>f*l|E&_%T3}8lTOqWLc7qyxF#J3`W#3_n^;VkElxgDQB^QQYbJJj*Fu*QUU z_xkP3@grIRgT3kGHVGKc0h-NtfBU)XU%C$%>J8<&8W@hR4}W#`0Uuql^dZ4W?DkfT zY2Ns;m6L7=-v*4<=ptYmgC=mvH`US6pJGKo=1dsfE!UVAI^XgBiRT_RSZMM&r+ryt z@r-90G1%Jz6_^9zXZ5i{CsK7;Pbc z0YiWA_~C8Nc=3=9`{{h({hM8&+V-bce-M9c=(_!dMl9Y3Oe@gz8CqG}`ij-Pf#GBd zLE3@990^S9*>fLyG^f#jghpzvRAWxaJL8;|(>`I%v0H%DmjiPYXwGXn@U1rgd4kba zjj=6{%yKgQ!RiZ@OwJNGm&dslZ0%ZlbVnT&IG5D9PMvGP*}pk^G3Qp|?BAUIfwS#6 zw;$V@6H9dVqk-6-drRjw=iEx1J*=}2arV8=-qN{WaP~;fp4{2*IQw|#mgU?xI(t56 z@9*s2{$1~X?O5fJR`k95jWe>I{Y5;5tjd=J0+ravoVB&XhNCVYxT7yH@GbOw3qV5; zTl4fUJ?ft@h+Y}~h~p4v9XtUV_GVAKcIl1%${s#S=L28$oW}IL#W$zjnx^zsItJ-X zpM~HAS z_Vi-Y6Mq>uSaYu&H*RY6r=^WF4f<0=ed6&zN!DBQKiT}~@-`0&CO@|q z*V<}j2>JKd?SI}CZ$1|oyuL@<$&3ve5;#WyH$no+R&m^sMGwv?8fNbEw%zw6V=;em zB+8-c)?GK0JTw1u_L@C0MnZZ1L1dD(aNC@|Yd5bLbr>*wBM~}q@UW=UbZ(8aXO*e7 z@S`!nCO7};b}yZN+u>|K@X5@_RyOIkoiWb4wJQDbav#+CcI<_}-x<;S0OX_N%3XqL zjMTUJC%2vO!v3r|wnj)$T^=mv_{j-~X`>sjD z8bT7u^ClQ*{-yz$l3O>P^3;TUP_)kpt*(wM6$ zHCrQSu*=UkK881d51#t+1)Z*?jdEs$T5y=3QllX?7Ta*pnVZjF_QP@9Q!fj}S*8A1 zd?LzIwSDlWu0yZqx+eF-f+iYB#Db-@S&cfLcFxH+cfLR{67M~vLV2+nC37Bo_WjpB zQ9Jap$d}at7>;4D+V8l#&Rp>L{X&yRyXNbn9FLyZX5iRKHx5?oG9vXkFt#IrIqB-* z_wF7SngSZu0!nH-J`jIk>-}X%`@ig~9OrYkvPoNT7*jx_&i%G?@7z72H2U%KhZ+@+ zxNknR!xc|x$GNAq)sD=J`hnXa(DkrK-m3oo-NQLIV_N{Xe^+mxAs@DdhuV$0_xCIQ z=_qy}ZQ(~(93PyR5XFpgFN|HfB}v&H~Jy)}4pSnF1ELkVCQF#}B)7<#e1lNTN} z<+3I%MQR2KviL$T+d}h(gU&B5fA<7n=*dx@%YfmmZNd1eMD5>WS_?PsT5##jGUph_ zqrLGjJ?>(@eY0KX)BLbIJGaQ$aFWO-Yb-wk(;5;S*t^fPCE2qc00#EKUgltU7W$p> z<){Bvz3s$j1S59c4j9hOzCUHmsBXiWVdo-f1Y@I7+Gr2xI&)sHSK%BYGVm0(x|Ur! zSTBiG!&?kIdBy?P4Boa85@>&IuTfTm^Z3BlcBGZ`L`j>Xq)*I#Ea%`^Z)E9wP@ciS zu;zLny*RINzghQ)4#ZcD0)`gf>CnoXE;zfE5e&2|>LBxNB8)@CLb%C+-1@w~de^+h z_gn@Vq|-z)Ynyw)P~%g#fsiz1x^OBcHLrGy%7PYx}eq8XY=P=L4DuFdT=>c=eJ7?{4@QZz<5;=*FG~<}hIT zzw~FXlV6{Btzblgw}9ci{>Q1WpLP7vyKmPRBz1iu&v;d}2y}P!L%RgeOmKr*^5SRmj$^U10>!J0pRV_Yo9oF=##<+4JFI>p;^2G>2XB>fGl?J@A>905scxVM&{9zV6iL7rp+y#-L?=0}R{GgYS%b z@Z}jxITB+1U_Zq!V5sY@hu)gobZY76Cb#TrMRQthzuQ;7c-p~=hRv}NFw|RzX3yVw z_q%WHFt}la1`M^+eaNIvxp)7N3yj`dbPO<*y2GUdj{EP9w#|e_PU7eT4BJADuhVx^ zj&J$3V8l}l1%?`(ykOX1|D)^6HHH=fOmkos|5S6;sJZQ)5{yLIqQKA&D*H}(Xw{`B zsvQv6Erm07fZ+)8u%o|f_wg+Ct}k>A%tByj@teM_e($rE!kY|A4f z$W4>fsOHC~uAVh_|1WwP^@EcMC#zAwJ4dYg@a!koE;KRD+?;E{*^4=FbE*ZAdT;V^ z?z66)qFQ}cub->#J$=SxDXI7>2Md88y%{uYr_E>9wEKJO2JUWRD}mI10z+T*t^d*b zed3GW(HQh4^)FU!p~3bOzdhro+1l^WleYkd-g2LFtFQg?mLq=EG_ZIF&j+u3G-#O5 z{J95qZ}aqZKWG}r<{&j>b8ZXH7-zjX(>Q1pI&kLZ+_oKjJjRJm-X(9(y$iJCEP->| zc90FbUiYS?|871GEeo}NDt`j51jj8XN~TSZ2wo>Y->UMwev{GSvKc3 z=S*WOf%s7ePXQkijQOKce{I$wA7A{!rs7^r;axa>gWqw^$GH|-T&6tV(gyEW)LgNA zlja7`=WHPpLBm;S^zVm$-?IHWBjyd+oNdQJHc0It8`^@i4)(?p9VCEvamF~*547Xl zP912FkMj)q*(=n%@!%G}o&V!?+ZgL)pM_q=K{iNWn~(H!wxei?5!>ooEZ!j>NNt-B zMv9KIfyOo;SgG4w)7h#V##PWx;ZA+zG7dZ zV`-<&RP(uWFWT|X@3Z`z1M=-cc)n+WA-6vNUG>?tc`#^J0@D$g2U>sh>N}602E7@WOxZrcvyEM4GHF z8e99)2e04!1Fe@94{o;WX0ijqc`eko&B>a0EF>@NWPN|<0nLsJT>pm72NKMMY-|gU zez5%igS;##!`tl_GA0by14kZ6KZm@>))axvu*H8 z30Ac{YTuRPF4`vAk%Is;Ed;xGMLWlWhOy`?8eb3!U7kG;G%!S>3V@*%AKtWS=$sCX zXrsuV?Z;uC9WXOAx93L$*W~=YiN1Q)s6z3agnziZL_?JK}d zpTo2P7|OP|_U}l+{8p!6?>=&&a5kr}X+K(do1*#c_sQj}N6on}Cwnwf4h0vR9l6|H z3#o6$6O8+pj9#<)u153g=VVVs3L|nhC&TIUYM#OqjN#`U_@D2NAJD8`PWA$%G$R)* zGEvu-GvlzYlp3{_S|o6m&E}*#?mB|h%jYVoN59;C#J7WYbA3Un+U~5qUZ@20F3$Pb zziY+i*baB79%JBr;YZ(Vv+sV$hr4u89_RI7=e1oQxKY@`L9K%eG)?pKHhk8(!`iXnhT7pNF3uya2xwT_=X@~f*iJ|EEENf) z%}vpm8J*s0xv<+X?lK@Z#1m~=BU=_~;Tq6T2fG#*4Y_=48?~kD65 z?B5-w+4yUASr`fJ&3lx6=BeH}Z=c6s{CeD#T)Crv%kS!BJKdpYjA+=7(sm4>ww>3_ z99GN0?c_UE>%aQw1G1Lf)q(cL`hivLvECqo^SZP1da%Rl3%EItM_tx-tNzUuT<3M# z^Psn;sD)ES+h9H&hUv2y)!i0YJu`D&p-V0 zm!DMZ=GmL{{=hizymIPK^X>QD%E%$JKP^Dcw2VFOHBlaiUK5y8!Ik~?j<5P1&|%P| z#kxFb3(h@;%X^d=@v5^lf1CN7-jj79o;Vy5-23A8+M_qka?(w0O+)x^Z*3vut}9Ly?{44pAw1OB?UP88XHcwlNg(Rhjd8 zqdd;qafqSNU(ZgDR~g*)CWhk7%~>|vc!5J8P^ttPP9?MG+UA*`nCqGPi8;Q-&eP$t*7rNia$T+g(0h6N$1eMya^%x&9N`iS^zlFtJY$(pVCIqt;e#D6 zk6@iKSmN-2l-6evrY~jo@vPr2`qUzyzr&(uLANL*V0pfuNkCQ&4CT3fp5PTIvVcSnhmKK4xR?0?Q`>K_|bU;MV|2QUd!c zj>A%miu(pDU>N*#ps&Oqt%i;HqZQo?Gm~pl5PL|!h&oWTQ+Crw3hMT*5}_JkMZNn^&OJ?AFHH95(xg-hQ+1x^+Yc8Ml% z%w|QvO~lkE!BW$hZPbNY&d36d{K9);CD^0sS=1}mYSd-2EGem$BDqMB!c(=s6fPFt zHdqvtYeMcGBP9#N1jQp*n5U%w3!GTdLqp`QJoN<7p9Ac<+stm9t0_ zR2<0vD5~(V@U;r7`0tgt=@mxLrYgzoWA?(16%Pk-{|6%gsfDQ)_J7oDDo?9kf!T9g zRSa|woNBb`sQ;0<=+UB%6!wDL(+q5+Hk0;P&DK#!QcP>2g(D|bdTKb{ZOEsdAvf7; zBZMY<_Jgr<7cnhQftTfu z_2sE;RY=O8EFy1EK#uk6pli-CsnjI7zL(na8Yibrpui#J-iI^pIPHNDeM>_Te;n22 zO9Z=M&L#&W@`DX7dQrUaaFQ>sedcs1R$Lw^NrVDX7aqxHz$1Ch3Sub6LpjOWDK(S4 zfm*mp#+^33xZohNqxE#pPzSebq!7rte=dc}d>H(NNKDVGg{6=)bCwT3Fc}_7xCbSZ zJS}pX8>FcTKKWL=2M>NOmm=c_B6H_-UGlWV0Fv2S(!dGxLLD^_h7kk- zeBnqK??&U>LzvRTev4yjI$E&D)6sH!b`Zq@DNl1M4wLTgTNuga%;8b)8J{|_|$ic$uCkgo^xo#eh@@=G4qt? zz%1n+;?cv^sgRi-q>lPYY6VWmn*zxgJ$)J48cz9oR9k^ z1uJ1+HMKr}83Lk-a1j#n;V$8uDqL*EZe%H4awwYc72`w!H$zK41Id!tK5pss>eclZ zp+TpwU{-aZ!dIz<2ERV_MQTM@8jRUxD_pD1KL(g!sV#44Wi8p0~;fI_oWTV^nrUWPDJa5`qD0 zX(AMoGGXk9RgcODmMTbB>GOwUL6^dr59yo~h18rl9n!08T)3DIfs1(~rS<9(9Ha*$ z2aGf$FRKce>H#Oq9sH@cb!C_hcx0rBOY2g-qkY5c%XiCpz@tkWPCg?7z-P*VknFa-bgaLMZqP;8+0%!+ z*Njk!-1QT;M^cAV-CQtyL`-q;TG=gJ} z69FG4924SPMlA`@(Yj4^MRHXLLnd`6+VL6+Su+8-^%h3KsgZ|v3;oQs(2u9_ZCsD1 z&BB4myaBEE!dy~AAWdF_(tECC+9ykxG*SeNJPOK>`XV#_nB53I0ql#E zdJmBJ^&}AU2j%m&aP>_kP^b&hrdPeE$O6)od&$+SE-gbpmed>wqEFW{%ec@-FT*y) z$%rvnls0BfsPq@7+{&Y+nB8#ITRxCtMY}Z7jAtQSMw)a{UMdo*B(;2zg|!~5@JHi5 z<*?o4uslX4mRlKIc{Qvc?FZv3cH3T^f97n-tMbg6K`!PE`d#lPud30g8_=gFz_7-q#AHKEAWS;_BD|ZIv_7VDGpNkLMhVWs z3kRZp4B%aAHXMjo_+t~mMPErBd0CTDpVUq-5AR`-1G!l4%z-Yu3yI8NoQ4hpax<{6 zcW_~v7l;|Nc9m}2xz7N3R&KC@9$jC_97*++!d~Yk8E9PvR0hVKR|cAcWTCIw4XTbN z0C($0NE+ft5>dE6yt&{~6Xru;XWn22&o>6$J1)J|SmaO<)Vi!um;wr+AuZ~~JFJ|n zGLR;(AuD2bUd>f>V0D0Ck&z~L>}7_evSDORGTVcT>N&f>$=8rWU&%~Pa)-YU7W+!$ zm53Sn`4ILOdHc&!G-}2bz|pv5NJ`m78Q;{$+!N!^L^wzTK}gDVE0pyyu(aM%<(?rT zp5DrdJ!p+fX$xL%+af7-W6CW~ADhD5tuj+(;F6hWPMck-C|M6+k-QcU;$?0gE*JbV z{V=pzhozNd$Ob%;*DyE z3cThqmiQS+Eq7*T&qk$&o_bHId~ejHvaOGSsXR`>jtaLM01$sR?&oFg(X-Z?ZROn#qf}rs-v*#bAci!?=j)5lCWM0f?PFy zW7Wl7$^)TF^z5>WyP#{=u6f;h^ulM?gWM?04dSw|99yxAjUBYu^OKP#yK&4^wd~&QyKEtR!8~yXM|s3@xH9Q zcpwz02w*FE7i`sZ(Xc6^lEh>Sy;D``$(DMk6I*M^Sq{xMJ$X;rrs*w3SlRVT&Fm>t zt5B#V8&Q$Er%aWkv>=L|l(VZ9YcEDobPT$g)CYjreWqg@UH@iPZ5fuKM&q%7KU(azx?z2c#g}CfMFn1U2#l$X zJ?Y&uRbh{jF{0kB6TqutcoQpHffX3%SDF+flOx9W_)e^s-Ga*Gu87Ths8+9Ixa6BU z4gm|}Z328&72p1)l6i=R4#4@m-%qf4np`t^uwio7kh^b488m@W%01Mq_rL1RNI2{W z`?pGp)yq>p-nx`M?MZS^r3HWQ9kQ0J$wBR=V$PW9c~2C^;~g@P@du+u?8@?*h*<`d zpyRkwOxR10#gWK_Aaha|;#|F^2oXK5m0wU`H=szD9BC#J!4en!5{(@B1NY^Vl22ow^k5^-JZZxE01ZIMZzB8Uhh9;qpFF)!IRl)_FiUmtTdc$!H`g1Fp z!90V8nPenNsK(2CnX;t`N(E!O(WTnARx z$H2~d3jygP-FHIQ4D0V$5D8&bgZ(OI zo^gM9yds2ENi1G)S9>fREG-R0v4^NK64%YQIDyxIv2w{d9NrY>uKZ{eHsiy|0FjDV zZADQeDvmtv&S}tM}@JmJJWT^ zD)V8KIWti@Aukm>Hl@03r?VP6YqO4-8HI+_X=;$jNgcTunl!l>DX>%B@c52=m4q8y ztj2r@tjrtqTihcJ3&j|oYg+kjd$$z_6Z6AFyw^aikAbuGma$y)@$S~2VL~ivx>?n! zlC6dbCe~YVQW9cEpP_a&x~MAo47en(r72_BiPFedy;TTG-pZG4lx#~;w;`!K2iXIYtoDR>XaDkYqPe<3lC(Q&U_i`zhEmOB_P_d$73 z<9JXmRK)lz%ST@M!9Cz3@=+2Qmvz#L#nXY*atEF0-EA)RBK=1<5ULAw?%rlkuNx0a z@r+9tsdr})u8#3VXv`1gLQ1Es(nUZoM-O&hkBEVKjiPOP88Ej^uag%{c3|L=yf!I| zBNdogBO0ORtaQ1aYdz*e;A!57vnueKUdZz$MFwR_5#54!t4Wg+*$kN$=;Sq~swlpiN$zlM$CH3PvzJlJ}kT6-ue+^nDE+ z455Oj-4ur~07Hk1uZ&}vFcJ?%N-#;zEeVwR6Cs>Opl*2pXIX+Hw3x8=VUQMy>T9*{ z9}7SpW()agmkhIcoUVP<5cEv`=L zG|xH$rFjEd7_#UOgS@sr3>~q95=pqEg<}aGKLxmx@ntuJ+Ir!p8^#QUeDR{Bgqslf za%#R1qszp>{rU!c-6F==?G^QxLL7AgeR_A%JW`Maz>jp#GHEQ05QU)Ph7|FLm z%qPJvEk#U5?dK`-hy2*9TY}wcC^aS!#s0X*&NcHPa5it?L%qwGnjIxe$zSy3HB$(N z%Q4T4b8u%|qV8#E?!(AnxHKdym84UblAqUpXp4CuOUs>5d-@Llq*{=L@FUNAZlf}r z1q+yLBj_^FW>`e-a}49^Q0TKFA=kJ->Vqt03MHDiw@XI+*;g9!mx0>2l!1ho z>@r9Kk^I8=yx$%uVSt5eTk3-EJ9C)tuF~Y0bD&FJ!w|SV29$j(BREyxghplP)iiM|UR|NV0)wN>B{z$tws`4IygDGqKz3c?ht@!Lat+B%C3+n! zx!Q&zm;zwUQXd@T!os??!NprI4W^v*sx}W;PH9E{8EF`PdW(_5*22(doIwlDcF71j zayu*gTtuIYlWS8RqMU>g_X4_iHo*VGvP_PX@}r41DoW%WR6`6sfX|y z>@yI1nL+wFzy|;Hbdx>z*%(JIyC_O(OJ2qTOY;UpEM48?BfCd}fvCrh9pf=@GA=QB z^Ip!+JTn;_G85U^=ummeS{tmu{)NRr@W+>LK2jLdO{QDWQ|^!{HF4l7IustSKDb&NnwiJ~_026{e`X zUglz^rl#>R0=?pj_g*T?vG^J7tN8F88rkf?SL@^*<2Vm&E{;ZG*!xiFuMSHz0g)~S z@GBBg{Lg(YT6VnRRvFL%B>Cu|gu&wFKAd%qZ4&Y}FbZ1flh3^1MZrWAn<&ua$BRbEjU@Qn>8AF72i~W^w0J2jW+ATu_p>HBw z=C4F-FPbPuewh6ihazDkH)dXe1)+E?yeuED>|35dY_hsM!k6AS+mPeE<&Zcnp@l}v zAn&E65mrQa@|mt_PF!R!3bm=_!!jCn{l?29i8!XW5iC!;9T{CGdQ@?poss@p{CV? z(7cf@*K4F=wjI!#H=xz~_WJtKSQ7C_tQ;?|mIu33M-a2-+u+hPLOc%u)5}0G46hnW z;NX@JV*jvcoVDW`&^8~U&`Anp?7gmGW(8XF2Gz->Z1+h!BxW3hKa!W%^XbI|ZF-V~ zx4gns;zVSTL0=(v@52-wwGT0pH6i8p%0JC@fj%t-T)Z`J^_0}2TJ8|XiJ7_H#z-fR z9l5ps3T|$3v3C6s80jmCGkKXTmR4ll0%XRe)PPq_rh0ZzrzXg{UCNQxjp5nOrA-W_+g- zJd8`RYcDx0Q#p`Y?w|<$VgsggMSkp<hfT5Icvwfb5WB#4fgUY!wIi; z9*hNQXuI+&6kY{MlM=LPDJB;KAu~J|u~VM2Fci8vX;*qBI4ckvm(t?Byp4Z6y&V39 zJI1B}8GefAu$|7SL^$dSKXxapb68x8#gjb{;N`wfUckJ#IO1-uc3FUfT{3ziZ+^~& z0as_F4CTBm!C{6E#_5xO8QXiZON%>DKox-ya@nwEjZGltfCCrY4kBXtChBrd1QV=> zdI=E?Bw`2%fJk3~%zM?}Ml2=0mQmCx3$ZCr;@oV!#KmzP4@z}AI@kIbWwTJ3x|K1F zuObNN636*VE|!`0Bsiv}2ve`_GQBLi$S9S#0I!ATv^a+~-~&$9TaLLL7m43&I zhe}uA#RJFBl(~^1w-h!ay;nmuqGr;-(YWgr<1mO+zZm7)(#EBjh>Wsyj1sYP#!z{5 zth9di3fzk4Qb?Ppk%LWYoqVHJ4zRJ_f?oH$YKG!dAt`-en2$%Fxrk|f42-R}b?Sms z@&tpFdugvyc|3g>AxhV?Sd!0xP4Zf_DM{QZ$E9h3rF754sqoW>_iTp48D}Q^b^HC@o)qB1OW} zh_Yk9B!bp*my353;}MoKmve7?9RnZtC<)YLATiOgOT&q7s)};ij2L&v&V8Ly7L6n- zi)!^9j;u={{-8^WZX{kF8>^O4)IlVLvSgvoCh0EMvYMh6GF)_#$`V>gOApLa8n&5Ar$MekeWCnz`pkzs)x{9L_FZV?uSGp;@KNv2-x(;4P;H$9MpT*ZZ@ZJh` zl44+5>=u)Piz~d0p7Tj&B3931jIDG&m|x&U;et1fr42 zN-FlIs*oIl`S{QzHhn8C)MCo7p1?+RogRc+A#fQE zl;N``RRJH~G>qV$-?KEzrQcLzs+0>CmQv%cI^drW4V0=XOLbmQd)|-wI(Yg!QtSM8ncGgT-5TIi{r_778aV3CQU(~7>0_q*p>@tnt^zh{>bxQL(G&$KtgMy00+Gl#b`p}6x>x1sphH?N`VXM z`n?LA!W*P1_YlE51VoidkEk+M*L5mBHo^F??Vz05>Pw7(^tM!&a-#Ve%^0MXJ5ia} z`6fyC3fkng$Sd<1db6Ywl)bx%V)HcE+N6pq#U8X*mv@y6r{>Q^ zdE{lAZsrKPQyKCi5(x$TVW0B)NC+n?itzeX@?Lon7a>5So>RNPXMWH4R_*{su5#m1Th0H7ZKZ`Vki(A6ta*^zufA?OW#6Y(-$|fB{$UZ@Z=i zJ-{t31zdE$0t3X@KcL5kE{!eqL9k3skkWeju*~p`5{)j#GFz^bb&4U{$A-Yv1uK$z zS#64$TcQ#MYaP3=1}ucHSAA<2r30(rmYN_uy!sDKVhPupd@PBgMXyl^D$x?J2A|Xf z@Th|Wv@6rbJ6JTmA zBB34Wn6T^vz|s(6kj6W^*r$Wj!_YCpYhZ)T1od973x5wvT7oovvQ6b#K9q4iR= zu?Gc|#wBe80|NI^rnD!EljCM9tUQ2?0|wIQ*G%X%%7YcYM3@_S7%g=hW7s^6Ol(r6 zxOH*^X<|FbYzpjB!5M|MuGrWyw&Ib4_n1gIE@OqrV2J^ZS~B8Vif4Obe`YMffP?iG zqbmKjw9x`8CzSDQ1-Cj$e-u2^lcYAhj3~L{1_sG%lt>$j>_m_wA6#m{d`N_`OAQWIp;tMo(Y4^#-oMW@MUz$bYv`^>y*RQAB{xTwf-?(CL2+6K4x{tQQvaUiWGy!` zvEEwv?-@^#)R4GtT&x8krKLRLZM~*DrgDsYRjntF>ToGRMKFw0TJZ`dNR!vtsqB5E zw)jQYbAFQ12bcWmBZ?SdQ5QV_Slh4aAMqxj>uEzVY@?v;@+(f-%adVepz)H6aVd1- zL}idgeY%L8d5G%~YkDk&|KTHx!R=;WoP*3I~wUcCjkR5!=> zaed}%z;eELAXdSz+2mHZz6Zss1v}{uu^XT9l}Hd*s+E$RN`H1s@A3a zII(f0W2@S9P|X3!%u#ifmAK8$QL6Q$xr3)r=Wb0^}t2r|gF9hzjM z)FlUd0_0+kkn+i@fZjln2!^mhR!rX|m&}KeLuR6sLk7~A_o{>QjJQ1#uwRm24#2j) zNZ2qZB%7bqF`iY7aX27V;XX1=e>5qUNv*1sCWg$oGKKJrzCxhgrO@U>tTaW-&^#TZ zm&ux0nY74PXuSg3phY%{ZV&PUdqrd9QwJF{b+1@trYkLa^#~B%u9g*3JB+ZcgP^I# zr1+(#iE6#%b7<4x=YSFUytvx*58!B%D%`x*^;7#Eik8wDnS*K<(=CycW+;SQh;FC6KuHHvbCi`L1CvPw+s>>^;*3MtzL||f!Aym(= zqDMV)3v_H$W`(9t&&6sR5B@0`%j1{wq#u^hlI~xzV<}P{1`=h#&g7bSZlM~>Sy;&Y z9{ZPFYQ>QT@;c&V&a38fF06F`8H|ijvPD?0b;y)bfm`pLW|dUL*)#|fj3u>oAQ~t0Wpn~oU{Hv{ri7dVD;tz diff --git a/components/CardRowView.tsx b/components/CardRowView.tsx index 037651f3..4067a1aa 100644 --- a/components/CardRowView.tsx +++ b/components/CardRowView.tsx @@ -11,22 +11,38 @@ import UserCard from './cards/UserCard' import UserRow from './rows/UserRow' import ListCard from './cards/ListCard' import ListRow from './rows/ListRow' +import { Column } from '../types/Column' +import { User } from '../types/User' +import { Item } from '../types/Item' +import { Collection } from '../types/Collection' +import { Library } from '../types/Library' +import { List } from '../types/List' import { Types } from '../types/Components' +type Props = { + cardView: boolean, + type: Types, + content: User | Item | List | Collection | Column | Library + columns: Column[] + move?: (order: number) => void + add?: () => void + remove?: () => void +} + const CardRowView = ({ cardView = true, type, content, - add = null, - move = null, - remove = null, + add, + move, + remove, columns = [], -}) => { +}: Props) => { if (type === Types.item) { if (cardView) { return ( + ) } - return + return } else if (type === Types.collection) { if (cardView) { return ( + ) } return ( - + ) } else if (type === Types.user) { if (cardView) { - return + return } - return + return } else if (type === Types.list) { if (cardView) { - return + return } - return + return } else { console.error('Unknown type of content:', type) } diff --git a/components/boards/Board.tsx b/components/boards/Board.tsx index 71582d64..0b9ec863 100644 --- a/components/boards/Board.tsx +++ b/components/boards/Board.tsx @@ -208,7 +208,7 @@ const Board: FC = ({ ) updateContent(newContent, newUnselectedContent) } - : null + : undefined } move={ moveAllowed @@ -231,7 +231,7 @@ const Board: FC = ({ updateContent(copy, unselectedContent) } } - : null + : undefined } remove={ removeAllowed @@ -263,7 +263,7 @@ const Board: FC = ({ updateContent(newContent, newUnselectedContent) } } - : null + : undefined } columns={compactView ? [] : columns} /> @@ -365,8 +365,10 @@ const Board: FC = ({ (option) => option.name === event.target.value ) console.log('Changed sorting to', newSortOption) - setSortOption(newSortOption) - setContent(content.sort(newSortOption.sort)) + if (typeof newSortOption !== 'undefined') { + setSortOption(newSortOption) + setContent(content.sort(newSortOption.sort)) + } }} /> )} diff --git a/components/cards/CollectionCard.tsx b/components/cards/CollectionCard.tsx index 015d76cb..8892cadf 100644 --- a/components/cards/CollectionCard.tsx +++ b/components/cards/CollectionCard.tsx @@ -12,9 +12,9 @@ type Props = { const CollectionCard: FC = ({ collection, - add = null, - remove = null, - move = null, + add, + remove, + move, }) => { return ( = ({ column, - add = null, - remove = null, - move = null, + add, + remove, + move, }) => { return ( void } -const DataCard: FC = ({ data, column, onChange = null }) => { +const DataCard: FC = ({ data, column, onChange }) => { const { data: session } = useSession() return ( @@ -37,7 +37,7 @@ const DataCard: FC = ({ data, column, onChange = null }) => { )} - {onChange === null && ( + {typeof onChange === 'undefined' && (

{column.description}

diff --git a/components/cards/ItemCard.tsx b/components/cards/ItemCard.tsx index 9f17508d..638b0b9d 100644 --- a/components/cards/ItemCard.tsx +++ b/components/cards/ItemCard.tsx @@ -18,13 +18,7 @@ type Props = { remove?: () => void } -const ItemCard: FC = ({ - item, - columns = [], - add = null, - remove = null, - move = null, -}) => { +const ItemCard: FC = ({ item, columns = [], add, remove, move }) => { const column = splitColumnsIntoTypes(columns, item.data) return ( @@ -55,7 +49,6 @@ const ItemCard: FC = ({ column={c} sponsor={item.sponsor} key={c._id} - data={null} /> ))} diff --git a/components/cards/LibraryCard.tsx b/components/cards/LibraryCard.tsx index 71b36ba2..5d9c1e43 100644 --- a/components/cards/LibraryCard.tsx +++ b/components/cards/LibraryCard.tsx @@ -10,12 +10,7 @@ type Props = { remove?: () => void } -const LibraryCard: FC = ({ - library, - add = null, - remove = null, - move = null, -}) => { +const LibraryCard: FC = ({ library, add, remove, move }) => { return ( void } -const ListCard: FC = ({ - list, - add = null, - remove = null, - move = null, -}) => { +const ListCard: FC = ({ list, add, remove, move }) => { return ( void } -const UserCard: FC = ({ - user, - add = null, - remove = null, - move = null, -}) => { +const UserCard: FC = ({ user, add, remove, move }) => { const joined = new Date(user.createdAt).toISOString().slice(0, 10) return ( void } -const ArrayValue: FC = ({ data, column, onChange = null }) => { +const ArrayValue: FC = ({ data, column, onChange }) => { if (column.type !== ColumnType.array) { console.error('Called ArrayValue but column type is', column.type) return } - if (onChange === null) { + if (typeof onChange === 'undefined') { return ( <> {data.map((v) => ( @@ -48,7 +48,7 @@ const ArrayValue: FC = ({ data, column, onChange = null }) => { } }} > - + ) })} diff --git a/components/data/DataItem.tsx b/components/data/DataItem.tsx index 542cc480..74222049 100644 --- a/components/data/DataItem.tsx +++ b/components/data/DataItem.tsx @@ -7,12 +7,12 @@ import { FC } from 'react' import LanguageValue from './LanguageValue' type Props = { - data: boolean | string | string[] | null + data?: boolean | string | string[] column: Column onChange?: (data: any) => void } -const DataItem: FC = ({ data, column, onChange = null }) => { +const DataItem: FC = ({ data, column, onChange }) => { const isUndefined = typeof data === 'undefined' || data === null if ( column.type === ColumnType.feature && diff --git a/components/data/FeatureValue.tsx b/components/data/FeatureValue.tsx index a9b6aff0..04c4fedf 100644 --- a/components/data/FeatureValue.tsx +++ b/components/data/FeatureValue.tsx @@ -4,7 +4,7 @@ import { Column } from '../../types/Column' import { FC } from 'react' type Props = { - data: boolean | null + data?: boolean column: Column sponsor?: boolean onChange?: (data: boolean | null) => void @@ -14,9 +14,9 @@ const FeatureValue: FC = ({ data, column, sponsor = false, - onChange = null, + onChange, }) => { - if (onChange === null) { + if (typeof onChange === 'undefined') { return ( <> = ({ }} > diff --git a/components/data/Pagination.tsx b/components/data/Pagination.tsx index a0fd1965..faedfc36 100644 --- a/components/data/Pagination.tsx +++ b/components/data/Pagination.tsx @@ -20,7 +20,7 @@ const Pagination: FC = ({ setStartViewIndex, }) => { const currentPage = Math.floor(startViewIndex / pageSize) - const pagination = [] + const pagination: number[] = [] const numPaginations = Math.ceil(contentLength / pageSize) if (pageSize !== 0) { if (currentPage > 4) { diff --git a/components/data/ProAndConValue.tsx b/components/data/ProAndConValue.tsx index fc10423e..30d5515b 100644 --- a/components/data/ProAndConValue.tsx +++ b/components/data/ProAndConValue.tsx @@ -4,7 +4,7 @@ import { Column } from '../../types/Column' import { FC } from 'react' type Props = { - data: boolean | null + data?: boolean column: Column sponsor?: boolean onChange?: (data: boolean | null) => void @@ -14,12 +14,12 @@ const ProAndConValue: FC = ({ data, column, sponsor = false, - onChange = null, + onChange, }) => { const displayData = typeof data === 'boolean' ? column.values[data ? 0 : 1] : column.name - if (onChange === null) { + if (typeof onChange === 'undefined') { return ( <> void +} + +export default function TextValue({ data, column, onChange }: Props) { + if (typeof onChange === 'undefined') { return
{data}
} diff --git a/components/icons/IconStar.tsx b/components/icons/IconStar.tsx index 11079694..16f2b4d3 100644 --- a/components/icons/IconStar.tsx +++ b/components/icons/IconStar.tsx @@ -11,6 +11,7 @@ import { SizeProp } from '@fortawesome/fontawesome-svg-core' import { Item } from '../../types/Item' import { faStar } from '@fortawesome/free-solid-svg-icons/faStar' import { faStar as farStar } from '@fortawesome/free-regular-svg-icons/faStar' +import { User } from '../../types/User' type Props = { item: Item @@ -21,8 +22,9 @@ const IconStar: FC = ({ item, size }) => { const { data: session } = useSession() const [show, setShow] = useState(false) const [isFav, setIsFav] = useState(false) - const [userFav, setUserFav] = useState([]) - const { data: user } = useSWR('/api/user/me') + const [userFav, setUserFav] = useState([]) + const { data: _user } = useSWR('/api/user/me') + const user: User = _user as User if (user && user.favs) { const diff = userFav diff --git a/components/layout/Layout.tsx b/components/layout/Layout.tsx index 99423c79..6256517d 100644 --- a/components/layout/Layout.tsx +++ b/components/layout/Layout.tsx @@ -6,7 +6,7 @@ import { Tooltip } from 'react-tooltip' import { FC, ReactNode } from 'react' type LayoutProps = { - children: ReactNode // TODO: workaround, but what? why? Shouldn't FC already include that? + children: ReactNode error?: string } diff --git a/components/layout/Meta.tsx b/components/layout/Meta.tsx index dd629aac..0745750e 100644 --- a/components/layout/Meta.tsx +++ b/components/layout/Meta.tsx @@ -1,5 +1,13 @@ -export default function Meta({ title, description, image = null }) { - if (image == null) { +export default function Meta({ + title, + description, + image, +}: { + title?: string + description?: string + image?: string +}) { + if (typeof image === 'undefined') { image = process.env.NEXT_PUBLIC_DOMAIN + '/icons/logo.png' } diff --git a/components/links/FooterLink.tsx b/components/links/FooterLink.tsx index 828e4559..f9186336 100644 --- a/components/links/FooterLink.tsx +++ b/components/links/FooterLink.tsx @@ -7,7 +7,7 @@ import { IconDefinition } from '@fortawesome/free-brands-svg-icons' type Props = { name: string url: string - icon?: string | IconDefinition + icon: string | IconDefinition } const FooterLink: FC = ({ name, url, icon }) => { diff --git a/components/modals/ItemToListModal.tsx b/components/modals/ItemToListModal.tsx index f1483089..3ed57ab2 100644 --- a/components/modals/ItemToListModal.tsx +++ b/components/modals/ItemToListModal.tsx @@ -17,7 +17,7 @@ type Props = { const ItemToListModal: FC = ({ item, close }) => { const { data: user } = useSWR('/api/user/me') const { data: swrLists } = useSWR('/api/lists') - const [checked, setChecked] = useState([]) + const [checked, setChecked] = useState([]) const [init, setInit] = useState(false) if (!user || !swrLists) { diff --git a/components/modals/Modal.tsx b/components/modals/Modal.tsx index bc82e029..c1739391 100644 --- a/components/modals/Modal.tsx +++ b/components/modals/Modal.tsx @@ -9,7 +9,7 @@ type Props = { } const Modal: FC = ({ head, children, footer, close }) => { - const ref = useRef(null) + const ref = useRef(null) useEffect(() => { const checkIfClickedOutside = (e) => { diff --git a/components/modals/OnlineStatusModal.tsx b/components/modals/OnlineStatusModal.tsx index 36da6d6b..db15e66e 100644 --- a/components/modals/OnlineStatusModal.tsx +++ b/components/modals/OnlineStatusModal.tsx @@ -9,7 +9,7 @@ type Props = { style: string text: string url: string - data: StatusData + data?: StatusData close: () => void } diff --git a/components/navbar/Navbar.js b/components/navbar/Navbar.tsx similarity index 96% rename from components/navbar/Navbar.js rename to components/navbar/Navbar.tsx index 87ad70ba..1ff9c35c 100644 --- a/components/navbar/Navbar.js +++ b/components/navbar/Navbar.tsx @@ -20,9 +20,9 @@ export default function Navbar() { const [show, setShow] = useState(false) const { data: session } = useSession() - const sidebarRef = useRef(null) - const navbarToggleRef = useRef(null) - const outsideToggleRef = useRef(null) + const sidebarRef = useRef(null) + const navbarToggleRef = useRef(null) + const outsideToggleRef = useRef(null) useEffect(() => { const checkIfClickedOutside = (e) => { diff --git a/components/navbar/NavbarBrand.js b/components/navbar/NavbarBrand.tsx similarity index 100% rename from components/navbar/NavbarBrand.js rename to components/navbar/NavbarBrand.tsx diff --git a/components/navbar/NavbarDropdown.js b/components/navbar/NavbarDropdown.tsx similarity index 90% rename from components/navbar/NavbarDropdown.js rename to components/navbar/NavbarDropdown.tsx index f2b37c8a..0b685670 100644 --- a/components/navbar/NavbarDropdown.js +++ b/components/navbar/NavbarDropdown.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { type ReactNode, useState } from 'react' import Link from 'next/link' import styles from './NavbarDropdown.module.css' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' @@ -11,6 +11,12 @@ export default function NavbarDropdown({ contentList, viewAllUrl, onClick, +}: { + targetId: string + toggler: ReactNode + contentList: ReactNode[] + viewAllUrl?: string + onClick: () => void }) { const [show, setShow] = useState(false) diff --git a/components/navbar/NavbarOutsideToggler.js b/components/navbar/NavbarOutsideToggler.tsx similarity index 88% rename from components/navbar/NavbarOutsideToggler.js rename to components/navbar/NavbarOutsideToggler.tsx index 9ea612f5..c8cfc0f1 100644 --- a/components/navbar/NavbarOutsideToggler.js +++ b/components/navbar/NavbarOutsideToggler.tsx @@ -7,8 +7,17 @@ import NavbarToggler from './NavbarToggler' const toggleButtonDragPadding = 30 const toggleButtonSize = 40 -export const NavbarOutsideToggler = React.forwardRef( - function NavbarOutsideTogglerFunction({ show, inViewport, onClick }, ref) { +type Props = { + show: boolean + inViewport: boolean + onClick: () => void +} + +export const NavbarOutsideToggler = React.forwardRef( + function NavbarOutsideTogglerFunction( + { show, inViewport, onClick }: Props, + ref + ) { const [togglePosition, setTogglePosition] = useState({ x: toggleButtonDragPadding, y: toggleButtonDragPadding, @@ -17,10 +26,9 @@ export const NavbarOutsideToggler = React.forwardRef( const [dragging, setDragging] = useState(false) if (typeof localStorage !== 'undefined' && !dragLocalStorageInit) { - if (localStorage.getItem('togglePosition') !== null) { - setTogglePosition( - adjustDragPosition(JSON.parse(localStorage.getItem('togglePosition'))) - ) + const position = localStorage.getItem('togglePosition') + if (position !== null) { + setTogglePosition(adjustDragPosition(JSON.parse(position))) } setDragLocalStorageInit(true) } diff --git a/components/navbar/NavbarToggler.js b/components/navbar/NavbarToggler.tsx similarity index 76% rename from components/navbar/NavbarToggler.js rename to components/navbar/NavbarToggler.tsx index 69297ae9..2ef43686 100644 --- a/components/navbar/NavbarToggler.js +++ b/components/navbar/NavbarToggler.tsx @@ -6,11 +6,19 @@ import classNames from 'classnames' import { faBars } from '@fortawesome/free-solid-svg-icons/faBars' import { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes' -function NavbarToggler({ show, onClick, className, onTouchStart }, ref) { +function NavbarToggler( + { + show, + className, + ...props + }: { + show: boolean + } & Omit, 'children'>, + ref +) { return ( diff --git a/components/navbar/NavbarUser.js b/components/navbar/NavbarUser.tsx similarity index 88% rename from components/navbar/NavbarUser.js rename to components/navbar/NavbarUser.tsx index c0a4ecd6..b6fba601 100644 --- a/components/navbar/NavbarUser.js +++ b/components/navbar/NavbarUser.tsx @@ -4,10 +4,10 @@ import Link from 'next/link' import Image from 'next/image' import LoginOrOutButton from '../buttons/LoginOrOutButton' -export default function NavbarUser({ className }) { +export default function NavbarUser({ className }: { className?: string }) { const { data: session } = useSession() - if (isLogin(session)) { + if (isLogin(session) && session !== null) { return ( <>
  • diff --git a/components/navbar/Sidebar.js b/components/navbar/Sidebar.tsx similarity index 100% rename from components/navbar/Sidebar.js rename to components/navbar/Sidebar.tsx diff --git a/components/rows/CollectionRow.tsx b/components/rows/CollectionRow.tsx index a3ee0631..dba7b209 100644 --- a/components/rows/CollectionRow.tsx +++ b/components/rows/CollectionRow.tsx @@ -10,12 +10,7 @@ type Props = { remove?: () => void } -const CollectionRow: FC = ({ - collection, - add = null, - remove = null, - move = null, -}) => { +const CollectionRow: FC = ({ collection, add, remove, move }) => { return ( void } -const ColumnRow: FC = ({ - column, - add = null, - remove = null, - move = null, -}) => { +const ColumnRow: FC = ({ column, add, remove, move }) => { return ( void } -const ItemRow: FC = ({ - item, - columns = [], - add = null, - remove = null, - move = null, -}) => { +const ItemRow: FC = ({ item, columns = [], add, remove, move }) => { const column = splitColumnsIntoTypes(columns, item.data) return ( @@ -51,12 +45,7 @@ const ItemRow: FC = ({ {column.features.length > 0 && (
    {column.features.map((c) => ( - + ))}
    )} diff --git a/components/rows/LibraryRow.tsx b/components/rows/LibraryRow.tsx index f77a885f..4760d04c 100644 --- a/components/rows/LibraryRow.tsx +++ b/components/rows/LibraryRow.tsx @@ -10,12 +10,7 @@ type Props = { remove?: () => void } -const LibraryRow: FC = ({ - library, - move = null, - add = null, - remove = null, -}) => { +const LibraryRow: FC = ({ library, move, add, remove }) => { return ( void } -const ListRow: FC = ({ - list, - add = null, - remove = null, - move = null, -}) => { +const ListRow: FC = ({ list, add, remove, move }) => { return ( void } -const UserRow: FC = ({ - user, - add = null, - remove = null, - move = null, -}) => { +const UserRow: FC = ({ user, add, remove, move }) => { const joined = new Date(user.createdAt).toISOString().slice(0, 10) return ( 0) { + if (item !== null && item.urls.length > 0) { try { const result = await fetchSite(item.urls[0], item._id) - const { screenshotStream } = result - if ( - screenshotStream !== null && - typeof screenshotStream !== 'undefined' - ) { - await addItemScreenshot(screenshotStream, item._id) + if (result !== null && result.screenshotStream !== null) { + await addItemScreenshot(result.screenshotStream, item._id) console.log('Created screenshot of item', _id) return true } diff --git a/lib/db/cache.ts b/lib/db/cache.ts index c78c982a..873e4c24 100644 --- a/lib/db/cache.ts +++ b/lib/db/cache.ts @@ -7,6 +7,9 @@ import { findOneTyped, getAllTyped } from './dbTyped' const uri = 'CACHE_URL' in process.env ? process.env.CACHE_URL : 'redis://localhost' +if (typeof uri !== 'string') { + throw Error('Unable to connect to DB due to missing DATABASE_URL') +} const client = new Redis(uri) /** @@ -15,10 +18,10 @@ const client = new Redis(uri) export async function getSingleCache( type: Types, _id: string -): Promise { +): Promise { let data = await getCache(type + '-' + _id) if (data === null) { - data = await findOneTyped(type, _id) + data = (await findOneTyped(type, _id)) as object if (data === null) { return null @@ -40,7 +43,7 @@ export async function updateSingleCache( data?: string | object ) { if (typeof data === 'undefined') { - data = await findOneTyped(type, _id) + data = (await findOneTyped(type, _id)) as object } await setCache(type + '-' + _id, data) @@ -80,7 +83,7 @@ export async function updateAllCache(type: Types, data?: string | object) { /** * only returns null if requested component does not exist */ -export async function getCache(key: string): Promise { +export async function getCache(key: string): Promise { try { let data = await client.get(key) if (data === null) { @@ -95,6 +98,7 @@ export async function getCache(key: string): Promise { } catch (e) { console.error('Failed to get from cache', e) } + return null } /** diff --git a/lib/db/db.ts b/lib/db/db.ts index 38183d79..f968abb9 100644 --- a/lib/db/db.ts +++ b/lib/db/db.ts @@ -6,6 +6,9 @@ const uri = 'DATABASE_URL' in process.env ? process.env.DATABASE_URL : 'mongodb://localhost' +if (typeof uri !== 'string') { + throw Error('Unable to connect to DB due to missing DATABASE_URL') +} export const dbClient = new MongoClient(uri, { maxPoolSize: 5 }).connect() @@ -35,13 +38,13 @@ export function cleanId(data: Record) { return data.map((d) => cleanId(d)) } if (hasOwnProperty(data, '_id')) { - data._id = data._id.toString() + data._id = (data._id as number).toString() } if (hasOwnProperty(data, 'lastModified')) { - data.lastModified = data.lastModified.toString() + data.lastModified = (data.lastModified as Date).toString() } if (hasOwnProperty(data, 'createdAt')) { - data.createdAt = data.createdAt.toString() + data.createdAt = (data.createdAt as Date).toString() } } return data @@ -87,7 +90,11 @@ export async function findOne( query: Record ): Promise { const db = (await dbClient).db('index') - return cleanId(await db.collection(collection).findOne(polluteId(query))) + const found = await db.collection(collection).findOne(polluteId(query)) + if (found === null) { + return null + } + return cleanId(found) } export async function count( diff --git a/lib/db/itemScreenshots.ts b/lib/db/itemScreenshots.ts index 4528cc5a..a6a443e1 100644 --- a/lib/db/itemScreenshots.ts +++ b/lib/db/itemScreenshots.ts @@ -12,16 +12,25 @@ export function bufferToStream(buffer: Buffer) { // note you want usually want to not use this function as you loose all the benefits of streams export function streamToBuffer(stream: Readable) { return new Promise((resolve, reject) => { - const buffer = [] + const buffer: any[] = [] stream.on('data', (chunk) => buffer.push(chunk)) stream.on('end', () => resolve(Buffer.concat(buffer))) stream.on('error', (err) => reject(err)) }) } -export async function addItemScreenshot(buffer: Buffer, itemId: string) { - // convert image buffer to stream - const imgStream = bufferToStream(buffer) +export function imgToStream(img: Uint8Array) { + let stream = new Readable() + stream.push(img) + stream.push(null) + return stream +} + +export async function addItemScreenshot(img: Uint8Array, itemId: string) { + // convert uint8array image to stream + const imgStream = new Readable() + imgStream.push(img) + imgStream.push(null) const db = (await dbClient).db('index') const bucket = new GridFSBucket(db, { diff --git a/lib/db/lists.ts b/lib/db/lists.ts index 553f2aea..dfe113fb 100644 --- a/lib/db/lists.ts +++ b/lib/db/lists.ts @@ -6,7 +6,7 @@ import type { List, ListUpdate } from '../../types/List' import type { User } from '../../types/User' import { findOneTyped } from './dbTyped' -export async function getLists(): Promise { +export async function getLists() { return (await getAll('lists')) as List[] } @@ -70,6 +70,11 @@ export async function updateList( export async function deleteList(_id: string) { // remove list entry from owner const list = await getList(_id) + if (list === null) { + console.log('Unable to delete list', _id, 'as it was not found') + return + } + const owner = (await findOneTyped(Types.user, list.owner)) as User owner.lists = owner.lists.filter((userList) => userList !== _id) diff --git a/lib/db/users.ts b/lib/db/users.ts index ad4aceeb..6dd007ad 100644 --- a/lib/db/users.ts +++ b/lib/db/users.ts @@ -19,7 +19,7 @@ export async function userExists(uid: string): Promise { ) } -export async function gatherUserInfo(user: User): Promise { +export async function gatherUserInfo(user: User | null): Promise { if (user === null || typeof user === 'undefined') { console.warn( 'Well... gathering user data of', @@ -36,12 +36,14 @@ export async function gatherUserInfo(user: User): Promise { favs: [], lists: [], followLists: [], + createdAt: '', + views: 0, } as User } const data = (await findOne('nextauth_users', { _id: new ObjectId(user.uid), - })) as User + })) as User | null if (data === null) { console.warn('User does not exists in next-auth db yet') user.favs = user.favs || [] diff --git a/lib/session.ts b/lib/session.ts index 9ce74416..55a9fa61 100644 --- a/lib/session.ts +++ b/lib/session.ts @@ -1,9 +1,16 @@ -export const isLogin = (session) => { - return session && session.user && session.user.uid +import { Session } from 'next-auth' + +export const isLogin = (session: Session | null) => { + return ( + typeof session !== 'undefined' && + session !== null && + session.user && + session.user.uid + ) } -export const canEdit = (session, type = 'item') => { - if (isLogin(session)) { +export const canEdit = (session: Session | null, type = 'item') => { + if (isLogin(session) && session !== null) { if (session.user.accountType === 'admin') { return true } @@ -12,22 +19,22 @@ export const canEdit = (session, type = 'item') => { return false } -export const isAdmin = (session) => { - if (isLogin(session)) { +export const isAdmin = (session: Session | null) => { + if (isLogin(session) && session !== null) { return session.user.accountType === 'admin' } return false } -export const isEditor = (session) => { - if (isLogin(session)) { +export const isEditor = (session: Session | null) => { + if (isLogin(session) && session !== null) { return session.user.accountType === 'editor' || isAdmin(session) } return false } -export const isCurrentUser = (session, uid) => { - if (isLogin(session)) { +export const isCurrentUser = (session: Session | null, uid) => { + if (isLogin(session) && session !== null) { return session.user.uid === uid || uid === 'me' } return false diff --git a/lib/utils.ts b/lib/utils.ts index 78ce6148..afc319c1 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -12,7 +12,11 @@ export function isValidUrl(url = '') { return false } -export function postData(url, object, onSuccess = null) { +export function postData( + url, + object, + onSuccess: null | ((result: string) => void) = null +) { console.log('Posting data to', url, process.env) const toastId = toast.loading('Saving changes...') fetch(url, { diff --git a/lib/webhook.ts b/lib/webhook.ts index 9356e1b1..8f6e18ec 100644 --- a/lib/webhook.ts +++ b/lib/webhook.ts @@ -5,7 +5,10 @@ import { Column, ColumnType } from '../types/Column' import { User } from '../types/User' import { getLanguages } from './utils' -const extractFieldsFromItemDataDiff = async (oldItem: Item, newItem: Item) => { +const extractFieldsFromItemDataDiff = async ( + oldItem: Item | null, + newItem: Item | null +) => { const languages = getLanguages() const columns = (await getAllCache(Types.column)) as Column[] const data: Record = {} @@ -14,15 +17,20 @@ const extractFieldsFromItemDataDiff = async (oldItem: Item, newItem: Item) => { if (oldItem !== null) { const oldKeys = Object.keys(oldItem.data) oldKeys.forEach((key) => { + const foundColumn = columns.find((column) => column._id === key) + if (typeof foundColumn === 'undefined') { + return + } + if (newItem !== null && key in newItem.data) { data[key] = { - column: columns.find((column) => column._id === key), + column: foundColumn, old: oldItem.data[key], updated: newItem.data[key], } } else { data[key] = { - column: columns.find((column) => column._id === key), + column: foundColumn, old: oldItem.data[key], updated: null, } @@ -32,17 +40,25 @@ const extractFieldsFromItemDataDiff = async (oldItem: Item, newItem: Item) => { Object.keys(newItem.data) .filter((key) => !oldKeys.includes(key)) .forEach((key) => { + const foundColumn = columns.find((column) => column._id === key) + if (typeof foundColumn === 'undefined') { + return + } data[key] = { - column: columns.find((column) => column._id === key), + column: foundColumn, old: null, updated: newItem.data[key], } }) } - } else { + } else if (newItem !== null) { Object.keys(newItem.data).forEach((key) => { + const foundColumn = columns.find((column) => column._id === key) + if (typeof foundColumn === 'undefined') { + return + } data[key] = { - column: columns.find((column) => column._id === key), + column: foundColumn, old: null, updated: newItem.data[key], } @@ -131,14 +147,14 @@ const extractFieldsFromItemDataDiff = async (oldItem: Item, newItem: Item) => { old !== null && old.length > 0 ? old.map( (langKey) => - languages.find((lang) => lang.iso6393 === langKey).name + languages.find((lang) => lang.iso6393 === langKey)?.name ) : null newValue = updated !== null && updated.length > 0 ? updated.map( (langKey) => - languages.find((lang) => lang.iso6393 === langKey).name + languages.find((lang) => lang.iso6393 === langKey)?.name ) : null break @@ -175,6 +191,10 @@ export const postItemUpdate = async ( } const url = process.env.AUDIT_WEBHOOK + if (typeof url !== 'string') { + console.error('Unable to post to webhook, due to missing env AUDIT_WEBHOOK') + return + } let title = '', color @@ -272,7 +292,9 @@ export const postItemSubmission = async ( { title, description: 'This is a submission for correction/entry of data', - url: process.env.NEXT_PUBLIC_DOMAIN + '/item/' + newItem._id, + url: + process.env.NEXT_PUBLIC_DOMAIN + + (newItem === null ? '/items' : '/item/' + newItem._id), color, author: { name: user.name, @@ -286,7 +308,10 @@ export const postItemSubmission = async ( type: 2, style: 5, label: 'Moderate', - url: process.env.NEXT_PUBLIC_DOMAIN + '/edit/item/' + newItem._id, + url: + process.env.NEXT_PUBLIC_DOMAIN + + '/edit/item' + + (newItem === null ? 's' : '/' + newItem._id), }, ], }), diff --git a/next.config.js b/next.config.js index 516e6743..cbb7c198 100644 --- a/next.config.js +++ b/next.config.js @@ -15,7 +15,15 @@ const nextConfig = { }, images: { dangerouslyAllowSVG: true, - domains: ['cdn.discordapp.com', 'localhost'], + remotePatterns: [ + { + protocol: 'https', + hostname: 'cdn.discordapp.com', + port: '', + pathname: '/**', + search: '', + }, + ], }, } diff --git a/package-lock.json b/package-lock.json index c35caeed..312263a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,43 +8,43 @@ "name": "theindex", "version": "0.1.0", "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-regular-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@auth/mongodb-adapter": "^3.7.4", + "@fortawesome/fontawesome-svg-core": "^6.7.1", + "@fortawesome/free-brands-svg-icons": "^6.7.1", + "@fortawesome/free-regular-svg-icons": "^6.7.1", + "@fortawesome/free-solid-svg-icons": "^6.7.1", "@fortawesome/react-fontawesome": "^0.2.2", - "@next-auth/mongodb-adapter": "^1.1.3", - "axios": "^1.7.4", + "axios": "^1.7.9", "bootstrap": "^5.3.3", "classnames": "^2.5.1", - "dotenv": "^16.4.5", + "dotenv": "^16.4.7", "geoip-lite": "^1.4.10", "ioredis": "^5.4.1", "iso-639-3": "^3.0.1", - "jsdom": "^24.1.0", - "mongodb": "^5.9.2", - "next": "^14.2.12", - "next-auth": "^4.24.7", + "jsdom": "^25.0.1", + "mongodb": "^6.11.0", + "next": "^15.0.3", + "next-auth": "^5.0.0-beta.25", "node-fetch": "^3.3.2", - "puppeteer-core": "^22.12.0", + "puppeteer-core": "^23.10.0", "react": "18.3.1", "react-dom": "18.3.1", "react-draggable": "^4.4.6", - "react-in-viewport": "^1.0.0-beta.2", - "react-toastify": "^9.1.3", - "react-tooltip": "^5.27.0", - "sharp": "^0.33.4", + "react-in-viewport": "^1.0.0-beta.6", + "react-toastify": "^10.0.6", + "react-tooltip": "^5.28.0", + "sharp": "^0.33.5", "swr": "^2.2.5" }, "devDependencies": { - "@types/node-fetch": "^2.6.11", - "@types/react": "^18.3.3", - "@typescript-eslint/eslint-plugin": "^7.14.1", - "@typescript-eslint/parser": "^7.14.1", - "eslint": "^8.57.0", - "eslint-config-next": "^14.2.4", - "prettier": "^3.3.2", - "typescript": "^5.5.2" + "@types/node-fetch": "^2.6.12", + "@types/react": "^18.3.12", + "@typescript-eslint/eslint-plugin": "^8.17.0", + "@typescript-eslint/parser": "^8.17.0", + "eslint": "^8.57.1", + "eslint-config-next": "^15.0.3", + "prettier": "^3.4.2", + "typescript": "^5.7.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -55,14 +55,55 @@ "node": ">=0.10.0" } }, - "node_modules/@babel/runtime": { - "version": "7.23.6", - "license": "MIT", + "node_modules/@auth/core": { + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.37.4.tgz", + "integrity": "sha512-HOXJwXWXQRhbBDHlMU0K/6FT1v+wjtzdKhsNg0ZN7/gne6XPsIrjZ4daMcFnbq0Z/vsAbYBinQhhua0d77v7qw==", + "license": "ISC", "dependencies": { - "regenerator-runtime": "^0.14.0" + "@panva/hkdf": "^1.2.1", + "jose": "^5.9.6", + "oauth4webapi": "^3.1.1", + "preact": "10.24.3", + "preact-render-to-string": "6.5.11" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "nodemailer": "^6.8.0" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, + "node_modules/@auth/mongodb-adapter": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@auth/mongodb-adapter/-/mongodb-adapter-3.7.4.tgz", + "integrity": "sha512-EZ7aSNnPWNVEtYRCmUbHtb3UxGNB52EJpVq0NDFdbxHypeqdUaz8ClHoKO/o99lQUT1BWCli819dlldWUKyEgw==", + "license": "ISC", + "dependencies": { + "@auth/core": "0.37.4" + }, + "peerDependencies": { + "mongodb": "^6" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@eslint-community/eslint-utils": { @@ -138,7 +179,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -169,52 +212,57 @@ "license": "MIT" }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.5.2", - "hasInstallScript": true, + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.1.tgz", + "integrity": "sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.5.2", - "hasInstallScript": true, + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.1.tgz", + "integrity": "sha512-8dBIHbfsKlCk2jHQ9PoRBg2Z+4TwyE3vZICSnoDlnsHA6SiMlTwfmW6yX0lHsRmWJugkeb92sA0hZdkXJhuz+g==", "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" + "@fortawesome/fontawesome-common-types": "6.7.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.5.2", - "hasInstallScript": true, + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.1.tgz", + "integrity": "sha512-nJR76eqPzCnMyhbiGf6X0aclDirZriTPRcFm1YFvuupyJOGwlNF022w3YBqu+yrHRhnKRpzFX+8wJKqiIjWZkA==", "license": "(CC-BY-4.0 AND MIT)", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" + "@fortawesome/fontawesome-common-types": "6.7.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.5.2", - "hasInstallScript": true, + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.1.tgz", + "integrity": "sha512-e13cp+bAx716RZOTQ59DhqikAgETA9u1qTBHO3e3jMQQ+4H/N1NC1ZVeFYt1V0m+Th68BrEL1/X6XplISutbXg==", "license": "(CC-BY-4.0 AND MIT)", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" + "@fortawesome/fontawesome-common-types": "6.7.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.5.2", - "hasInstallScript": true, + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.1.tgz", + "integrity": "sha512-BTKc0b0mgjWZ2UDKVgmwaE0qt0cZs6ITcDgjrti5f/ki7aF5zs+N91V6hitGo3TItCFtnKg6cUVGdTmBFICFRg==", "license": "(CC-BY-4.0 AND MIT)", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" + "@fortawesome/fontawesome-common-types": "6.7.1" }, "engines": { "node": ">=6" @@ -232,11 +280,14 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -244,6 +295,30 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "dev": true, @@ -258,153 +333,440 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", "cpu": [ "x64" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "Apache-2.0", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" } }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "license": "MIT" + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@emnapi/runtime": "^1.2.0" }, "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "license": "MIT" + }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.1", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", "license": "MIT", - "optional": true, "dependencies": { "sparse-bitfield": "^3.0.3" } }, - "node_modules/@next-auth/mongodb-adapter": { - "version": "1.1.3", - "license": "ISC", - "peerDependencies": { - "mongodb": "^5 || ^4", - "next-auth": "^4" - } - }, "node_modules/@next/env": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.12.tgz", - "integrity": "sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==", + "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.4", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.3.tgz", + "integrity": "sha512-3Ln/nHq2V+v8uIaxCR6YfYo7ceRgZNXfTd3yW1ukTaFbO+/I8jNakrjYWODvG9BuR2v5kgVtH/C8r0i11quOgw==", "dev": true, "license": "MIT", "dependencies": { - "glob": "10.3.10" + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "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/@next/eslint-plugin-next/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.12.tgz", - "integrity": "sha512-crHJ9UoinXeFbHYNok6VZqjKnd8rTd7K3Z2zpyzF1ch7vVNKmhjv/V7EHxep3ILoN8JB9AdRn/EtVVyG9AkCXw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -414,12 +776,13 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.12.tgz", - "integrity": "sha512-JbEaGbWq18BuNBO+lCtKfxl563Uw9oy2TodnN2ioX00u7V1uzrsSUcg3Ep9ce+P0Z9es+JmsvL2/rLphz+Frcw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -429,12 +792,13 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.12.tgz", - "integrity": "sha512-qBy7OiXOqZrdp88QEl2H4fWalMGnSCrr1agT/AVDndlyw2YJQA89f3ttR/AkEIP9EkBXXeGl6cC72/EZT5r6rw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -444,12 +808,13 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.12.tgz", - "integrity": "sha512-EfD9L7o9biaQxjwP1uWXnk3vYZi64NVcKUN83hpVkKocB7ogJfyH2r7o1pPnMtir6gHZiGCeHKagJ0yrNSLNHw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -459,12 +824,13 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.12.tgz", - "integrity": "sha512-iQ+n2pxklJew9IpE47hE/VgjmljlHqtcD5UhZVeHICTPbLyrgPehaKf2wLRNjYH75udroBNCgrSSVSVpAbNoYw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -474,12 +840,13 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.12.tgz", - "integrity": "sha512-rFkUkNwcQ0ODn7cxvcVdpHlcOpYxMeyMfkJuzaT74xjAa5v4fxP4xDk5OoYmPi8QNLDs3UgZPMSBmpBuv9zKWA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -489,27 +856,13 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.12.tgz", - "integrity": "sha512-PQFYUvwtHs/u0K85SG4sAdDXYIPXpETf9mcEjWc0R4JmjgMKSDwIU/qfZdavtP6MPNiMjuKGXHCtyhR/M5zo8g==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.12.tgz", - "integrity": "sha512-FAj2hMlcbeCV546eU2tEv41dcJb4NeqFlSXU/xL/0ehXywHnNpaYajOUvn3P8wru5WyQe6cTZ8fvckj/2XN4Vw==", - "cpu": [ - "ia32" - ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -519,12 +872,13 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.12.tgz", - "integrity": "sha512-yu8QvV53sBzoIVRHsxCHqeuS8jYq6Lrmdh0briivuh+Brsp6xjg80MAozUsBTAV9KNmY08KlX0KYTWz1lbPzEg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -566,21 +920,14 @@ } }, "node_modules/@panva/hkdf": { - "version": "1.1.1", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", + "integrity": "sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@popperjs/core": { "version": "2.11.8", "license": "MIT", @@ -591,17 +938,19 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.2.3", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.5.0.tgz", + "integrity": "sha512-6TQAc/5uRILE6deixJ1CR8rXyTbzXIXNgO1D0Woi9Bqicz2FV5iKP3BHYEg6o4UATCMcbQQ0jbmeaOkn/HQk2w==", "license": "Apache-2.0", "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.4.0", - "semver": "7.6.0", - "tar-fs": "3.0.5", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.3.7", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" @@ -610,38 +959,45 @@ "node": ">=18" } }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" }, "node_modules/@rushstack/eslint-patch": { - "version": "1.6.1", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", "dev": true, "license": "MIT" }, "node_modules/@swc/counter": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.5", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "license": "Apache-2.0", "dependencies": { - "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "license": "MIT" }, "node_modules/@types/json5": { @@ -651,13 +1007,16 @@ }, "node_modules/@types/node": { "version": "20.10.5", + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-fetch": { - "version": "2.6.11", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", "dev": true, "license": "MIT", "dependencies": { @@ -671,7 +1030,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.3", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dev": true, "license": "MIT", "dependencies": { @@ -681,18 +1042,23 @@ }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", "license": "MIT" }, "node_modules/@types/whatwg-url": { - "version": "8.2.2", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", "license": "MIT", "dependencies": { - "@types/node": "*", "@types/webidl-conversions": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "license": "MIT", "optional": true, "dependencies": { @@ -700,30 +1066,32 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.14.1", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.17.0.tgz", + "integrity": "sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.14.1", - "@typescript-eslint/type-utils": "7.14.1", - "@typescript-eslint/utils": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/type-utils": "8.17.0", + "@typescript-eslint/utils": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -732,25 +1100,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.14.1", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz", + "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.14.1", - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/typescript-estree": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -759,15 +1129,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.14.1", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz", + "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1" + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -775,24 +1147,26 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.14.1", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.17.0.tgz", + "integrity": "sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.14.1", - "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/utils": "8.17.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -801,11 +1175,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.14.1", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz", + "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -813,21 +1189,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.14.1", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz", + "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -839,79 +1217,63 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.5", + "node_modules/@typescript-eslint/utils": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.17.0.tgz", + "integrity": "sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0" }, "engines": { - "node": ">=6.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.14.1", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz", + "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.14.1", - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/typescript-estree": "7.14.1" + "@typescript-eslint/types": "8.17.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.14.1", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.14.1", - "eslint-visitor-keys": "^3.4.3" - }, + "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/eslint" } }, "node_modules/@ungap/structured-clone": { @@ -939,7 +1301,9 @@ } }, "node_modules/agent-base": { - "version": "7.1.0", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -989,34 +1353,44 @@ "license": "Python-2.0" }, "node_modules/aria-query": { - "version": "5.3.0", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.7", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -1026,24 +1400,40 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1087,28 +1477,36 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.2", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -1120,6 +1518,8 @@ }, "node_modules/ast-types": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "license": "MIT", "dependencies": { "tslib": "^2.0.1" @@ -1130,6 +1530,8 @@ }, "node_modules/ast-types-flow": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, "license": "MIT" }, @@ -1140,22 +1542,19 @@ "lodash": "^4.17.14" } }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "license": "MIT" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1164,7 +1563,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, "license": "MPL-2.0", "engines": { @@ -1172,9 +1573,10 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -1182,28 +1584,36 @@ } }, "node_modules/axobject-query": { - "version": "3.2.1", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/b4a": { - "version": "1.6.4", - "license": "ISC" + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" }, "node_modules/bare-events": { - "version": "2.4.2", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { - "version": "2.3.1", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1213,12 +1623,16 @@ } }, "node_modules/bare-os": { - "version": "2.4.0", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", "license": "Apache-2.0", "optional": true }, "node_modules/bare-path": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1226,28 +1640,19 @@ } }, "node_modules/bare-stream": { - "version": "2.1.3", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.4.2.tgz", + "integrity": "sha512-XZ4ln/KV4KT+PXdIWTKjsLY+quqCaEtqqtgGJVPw9AoM73By03ij64YjepK0aQvHSWDb6AfAZwqKaFu68qkrdA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "streamx": "^2.18.0" - } - }, - "node_modules/bare-stream/node_modules/streamx": { - "version": "2.18.0", - "license": "MIT", - "optional": true, - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" + "streamx": "^2.20.0" } }, "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", @@ -1265,7 +1670,9 @@ "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.0.4", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -1289,12 +1696,13 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -1309,14 +1717,18 @@ } }, "node_modules/bson": { - "version": "5.5.1", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.1.tgz", + "integrity": "sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==", "license": "Apache-2.0", "engines": { - "node": ">=14.20.1" + "node": ">=16.20.1" } }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -1354,13 +1766,20 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "license": "MIT", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1375,7 +1794,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001617", + "version": "1.0.30001686", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", + "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", "funding": [ { "type": "opencollective", @@ -1407,7 +1828,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.5.24", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", + "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==", "license": "Apache-2.0", "dependencies": { "mitt": "3.0.1", @@ -1428,6 +1851,8 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -1500,14 +1925,18 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -1520,19 +1949,17 @@ } }, "node_modules/cssstyle": { - "version": "4.0.1", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" }, "engines": { "node": ">=18" } }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.6.0", - "license": "MIT" - }, "node_modules/csstype": { "version": "3.1.3", "dev": true, @@ -1540,6 +1967,8 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, @@ -1561,11 +1990,67 @@ "node": ">=18" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1586,16 +2071,21 @@ "license": "MIT" }, "node_modules/define-data-property": { - "version": "1.1.1", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -1616,6 +2106,8 @@ }, "node_modules/degenerator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "license": "MIT", "dependencies": { "ast-types": "^0.13.4", @@ -1640,14 +2132,6 @@ "node": ">=0.10" } }, - "node_modules/dequal": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { "version": "2.0.3", "license": "Apache-2.0", @@ -1656,20 +2140,11 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1299070", + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", "license": "BSD-3-Clause" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "dev": true, @@ -1682,7 +2157,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -1691,18 +2168,17 @@ "url": "https://dotenvx.com" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, "node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "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==", "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -1731,49 +2207,58 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1782,35 +2267,79 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, "license": "MIT", "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -1841,7 +2370,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -1860,6 +2391,8 @@ }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", @@ -1878,15 +2411,18 @@ } }, "node_modules/eslint": { - "version": "8.57.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1931,160 +2467,32 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-next": { - "version": "14.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "14.2.4", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", + "node_modules/eslint-config-next": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.3.tgz", + "integrity": "sha512-IGP2DdQQrgjcr4mwFPve4DrCqo7CVVez1WoYY47XwKSrYO4hC0Dlb+iJA60i0YfICOzgNADIb8r28BpQ5Zs0wg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@next/eslint-plugin-next": "15.0.3", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.0.0" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { @@ -2146,7 +2554,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -2170,33 +2580,37 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -2247,36 +2661,50 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint-plugin-jsx-a11y/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, "license": "ISC", "dependencies": { @@ -2286,57 +2714,67 @@ "node": "*" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2348,6 +2786,8 @@ }, "node_modules/eslint-plugin-react/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, "license": "ISC", "dependencies": { @@ -2357,33 +2797,10 @@ "node": "*" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -2416,12 +2833,28 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.0", + "node_modules/eslint/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, "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">= 4" + "node": "*" } }, "node_modules/espree": { @@ -2442,6 +2875,8 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -2489,6 +2924,8 @@ }, "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==", "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", @@ -2512,6 +2949,8 @@ }, "node_modules/fast-fifo": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, "node_modules/fast-glob": { @@ -2714,27 +3153,14 @@ }, "node_modules/for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, - "node_modules/foreground-child": { - "version": "3.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { "version": "4.0.0", "license": "MIT", @@ -2757,25 +3183,6 @@ "node": ">=12.20.0" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "license": "ISC" @@ -2831,27 +3238,37 @@ }, "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==", "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.2", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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==", "license": "MIT", "dependencies": { "pump": "^3.0.0" @@ -2864,12 +3281,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -2890,46 +3310,28 @@ } }, "node_modules/get-uri": { - "version": "6.0.2", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { - "version": "6.0.1", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "license": "MIT", "engines": { "node": ">= 14" } }, - "node_modules/glob": { - "version": "10.3.10", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "dev": true, @@ -2941,28 +3343,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/globals": { "version": "13.24.0", "dev": true, @@ -2978,11 +3358,14 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2991,39 +3374,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/gopd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "get-intrinsic": "^1.2.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">= 4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3031,6 +3392,7 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -3054,20 +3416,27 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", + "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, "engines": { "node": ">= 0.4" }, @@ -3087,11 +3456,13 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3101,7 +3472,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3139,23 +3512,10 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/https-proxy-agent": { - "version": "7.0.4", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "license": "MIT", "dependencies": { "agent-base": "^7.0.2", @@ -3165,21 +3525,6 @@ "node": ">= 14" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "license": "MIT", @@ -3192,6 +3537,8 @@ }, "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", @@ -3252,11 +3599,13 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.6", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -3299,13 +3648,17 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3317,6 +3670,8 @@ }, "node_modules/is-async-function": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "license": "MIT", "dependencies": { @@ -3367,11 +3722,32 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3400,11 +3776,16 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3412,6 +3793,8 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -3419,6 +3802,8 @@ }, "node_modules/is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "license": "MIT", "dependencies": { @@ -3443,15 +3828,22 @@ } }, "node_modules/is-map": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -3496,12 +3888,16 @@ "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -3511,19 +3907,29 @@ } }, "node_modules/is-set": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3558,11 +3964,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -3572,9 +3980,14 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3591,12 +4004,17 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3604,6 +4022,8 @@ }, "node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, @@ -3621,7 +4041,9 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.2", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3630,27 +4052,15 @@ "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">= 0.4" } }, "node_modules/jose": { - "version": "4.15.5", + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -3676,29 +4086,31 @@ "license": "MIT" }, "node_modules/jsdom": { - "version": "24.1.0", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.5", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.10", + "nwsapi": "^2.2.12", "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.0", + "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0", - "ws": "^8.17.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -3739,15 +4151,10 @@ "json5": "lib/cli.js" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3769,12 +4176,16 @@ } }, "node_modules/language-subtag-registry": { - "version": "0.3.22", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -3844,20 +4255,11 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/memory-pager": { "version": "1.5.0", - "license": "MIT", - "optional": true + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -3868,11 +4270,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3897,14 +4301,19 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -3915,38 +4324,33 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/mitt": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, "node_modules/mongodb": { - "version": "5.9.2", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.11.0.tgz", + "integrity": "sha512-yVbPw0qT268YKhG241vAMLaDQAPbRyTgo++odSgGc9kXnzOujQI60Iyj23B9sQQFPSvmNPvMZ3dsFz0aN55KgA==", "license": "Apache-2.0", "dependencies": { - "bson": "^5.5.0", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.0", + "mongodb-connection-string-url": "^3.0.0" }, "engines": { - "node": ">=14.20.1" - }, - "optionalDependencies": { - "@mongodb-js/saslprep": "^1.1.0" + "node": ">=16.20.1" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.0.0", - "kerberos": "^1.0.0 || ^2.0.0", - "mongodb-client-encryption": ">=2.3.0 <3", - "snappy": "^7.2.2" + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" }, "peerDependenciesMeta": { "@aws-sdk/credential-providers": { @@ -3955,6 +4359,9 @@ "@mongodb-js/zstd": { "optional": true }, + "gcp-metadata": { + "optional": true + }, "kerberos": { "optional": true }, @@ -3963,40 +4370,51 @@ }, "snappy": { "optional": true + }, + "socks": { + "optional": true } } }, "node_modules/mongodb-connection-string-url": { - "version": "2.6.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", "license": "Apache-2.0", "dependencies": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" } }, - "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { - "version": "11.0.0", + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "punycode": "^2.3.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/mongodb-connection-string-url/node_modules/whatwg-url/node_modules/tr46": { - "version": "3.0.0", + "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=16" } }, "node_modules/ms": { - "version": "2.1.2", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/nanoid": { @@ -4022,46 +4440,50 @@ }, "node_modules/netmask": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/next": { - "version": "14.2.12", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.12.tgz", - "integrity": "sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "license": "MIT", "dependencies": { - "@next/env": "14.2.12", - "@swc/helpers": "0.5.5", + "@next/env": "15.0.3", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1" + "styled-jsx": "5.1.6" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=18.17.0" + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.12", - "@next/swc-darwin-x64": "14.2.12", - "@next/swc-linux-arm64-gnu": "14.2.12", - "@next/swc-linux-arm64-musl": "14.2.12", - "@next/swc-linux-x64-gnu": "14.2.12", - "@next/swc-linux-x64-musl": "14.2.12", - "@next/swc-win32-arm64-msvc": "14.2.12", - "@next/swc-win32-ia32-msvc": "14.2.12", - "@next/swc-win32-x64-msvc": "14.2.12" + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", + "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -4071,37 +4493,94 @@ "@playwright/test": { "optional": true }, + "babel-plugin-react-compiler": { + "optional": true + }, "sass": { "optional": true } } }, "node_modules/next-auth": { - "version": "4.24.7", + "version": "5.0.0-beta.25", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-5.0.0-beta.25.tgz", + "integrity": "sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==", "license": "ISC", "dependencies": { - "@babel/runtime": "^7.20.13", - "@panva/hkdf": "^1.0.2", - "cookie": "^0.5.0", - "jose": "^4.15.5", - "oauth": "^0.9.15", - "openid-client": "^5.4.0", - "preact": "^10.6.3", - "preact-render-to-string": "^5.1.19", - "uuid": "^8.3.2" + "@auth/core": "0.37.2" }, "peerDependencies": { - "next": "^12.2.5 || ^13 || ^14", + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "next": "^14.0.0-0 || ^15.0.0-0", "nodemailer": "^6.6.5", - "react": "^17.0.2 || ^18", - "react-dom": "^17.0.2 || ^18" + "react": "^18.2.0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, + "node_modules/next-auth/node_modules/@auth/core": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.37.2.tgz", + "integrity": "sha512-kUvzyvkcd6h1vpeMAojK2y7+PAV5H+0Cc9+ZlKYDFhDY31AlvsB+GW5vNO4qE3Y07KeQgvNO9U0QUx/fN62kBw==", + "license": "ISC", + "dependencies": { + "@panva/hkdf": "^1.2.1", + "@types/cookie": "0.6.0", + "cookie": "0.7.1", + "jose": "^5.9.3", + "oauth4webapi": "^3.0.0", + "preact": "10.11.3", + "preact-render-to-string": "5.2.3" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "nodemailer": "^6.8.0" }, "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, "nodemailer": { "optional": true } } }, + "node_modules/next-auth/node_modules/preact": { + "version": "10.11.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", + "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/next-auth/node_modules/preact-render-to-string": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz", + "integrity": "sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==", + "license": "MIT", + "dependencies": { + "pretty-format": "^3.8.0" + }, + "peerDependencies": { + "preact": ">=10" + } + }, "node_modules/node-domexception": { "version": "1.0.0", "funding": [ @@ -4136,12 +4615,19 @@ } }, "node_modules/nwsapi": { - "version": "2.2.10", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", "license": "MIT" }, - "node_modules/oauth": { - "version": "0.9.15", - "license": "MIT" + "node_modules/oauth4webapi": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.1.4.tgz", + "integrity": "sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } }, "node_modules/object-assign": { "version": "4.1.1", @@ -4150,17 +4636,15 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { - "version": "1.13.1", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4191,26 +4675,31 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4220,36 +4709,30 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4258,13 +4741,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "license": "MIT", - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, "node_modules/once": { "version": "1.4.0", "license": "ISC", @@ -4272,19 +4748,6 @@ "wrappy": "1" } }, - "node_modules/openid-client": { - "version": "5.6.2", - "license": "MIT", - "dependencies": { - "jose": "^4.15.4", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/optionator": { "version": "0.9.3", "dev": true, @@ -4330,7 +4793,9 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", @@ -4338,52 +4803,27 @@ "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" } }, "node_modules/pac-resolver": { - "version": "7.0.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "license": "MIT", "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { "node": ">= 14" } }, - "node_modules/pac-resolver/node_modules/ip": { - "version": "1.1.9", - "license": "MIT" - }, "node_modules/parent-module": { "version": "1.0.1", "dev": true, @@ -4433,37 +4873,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/pend": { "version": "1.2.0", "license": "MIT" @@ -4483,6 +4892,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.31", "funding": [ @@ -4510,7 +4929,9 @@ } }, "node_modules/preact": { - "version": "10.19.3", + "version": "10.24.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", + "integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==", "license": "MIT", "funding": { "type": "opencollective", @@ -4518,11 +4939,10 @@ } }, "node_modules/preact-render-to-string": { - "version": "5.2.6", + "version": "6.5.11", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.11.tgz", + "integrity": "sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==", "license": "MIT", - "dependencies": { - "pretty-format": "^3.8.0" - }, "peerDependencies": { "preact": ">=10" } @@ -4536,7 +4956,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", "bin": { @@ -4551,10 +4973,14 @@ }, "node_modules/pretty-format": { "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -4571,6 +4997,8 @@ }, "node_modules/proxy-agent": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "license": "MIT", "dependencies": { "agent-base": "^7.0.2", @@ -4586,23 +5014,10 @@ "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.5", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "license": "ISC", "engines": { "node": ">=12" @@ -4612,12 +5027,10 @@ "version": "1.1.0", "license": "MIT" }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" - }, "node_modules/pump": { - "version": "3.0.0", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -4631,39 +5044,23 @@ "node": ">=6" } }, - "node_modules/puppeteer-core": { - "version": "22.12.0", - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "2.2.3", - "chromium-bidi": "0.5.24", - "debug": "4.3.5", - "devtools-protocol": "0.0.1299070", - "ws": "8.17.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.5", - "license": "MIT", + "node_modules/puppeteer-core": { + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.10.0.tgz", + "integrity": "sha512-7pv6kFget4Iki0RLBDowi35vaccz73XpC6/FAnfCrYa2IXVUlBHfZw+HGWzlvvTGwM9HHd32rgCrIDzil3kj+w==", + "license": "Apache-2.0", "dependencies": { - "ms": "2.1.2" + "@puppeteer/browsers": "2.5.0", + "chromium-bidi": "0.8.0", + "debug": "^4.3.7", + "devtools-protocol": "0.0.1367902", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=18" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -4685,6 +5082,8 @@ }, "node_modules/queue-tick": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "license": "MIT" }, "node_modules/react": { @@ -4721,7 +5120,9 @@ } }, "node_modules/react-in-viewport": { - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/react-in-viewport/-/react-in-viewport-1.0.0-beta.6.tgz", + "integrity": "sha512-gcoIEbcV1afC1tYSBn1d2JAbOw8tfdZpQDCHdjYhZQrH0MCTdAK/w+U3EvytTu9Sz6AQ9GIKJkjrMeZwZ/NHqA==", "license": "MIT", "dependencies": { "hoist-non-react-statics": "^3.0.0" @@ -4736,18 +5137,31 @@ "license": "MIT" }, "node_modules/react-toastify": { - "version": "9.1.3", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.6.tgz", + "integrity": "sha512-yYjp+omCDf9lhZcrZHKbSq7YMuK0zcYkDFTzfRFgTXkTFHZ1ToxwAonzA4JI5CxA91JpjFLmwEsZEgfYfOqI1A==", "license": "MIT", "dependencies": { - "clsx": "^1.1.1" + "clsx": "^2.1.0" }, "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-toastify/node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/react-tooltip": { - "version": "5.27.0", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.28.0.tgz", + "integrity": "sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg==", "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.6.1", @@ -4776,16 +5190,19 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" }, "engines": { "node": ">= 0.4" @@ -4794,18 +5211,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "license": "MIT" - }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -4816,14 +5232,30 @@ }, "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==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/resolve-from": { "version": "4.0.0", @@ -4923,12 +5355,14 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -4940,14 +5374,19 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4974,7 +5413,9 @@ } }, "node_modules/semver": { - "version": "7.6.2", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4984,68 +5425,76 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/sharp": { - "version": "0.33.4", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", - "semver": "^7.6.0" + "semver": "^7.6.3" }, "engines": { - "libvips": ">=8.15.2", "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.4", - "@img/sharp-darwin-x64": "0.33.4", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.4", - "@img/sharp-linux-arm64": "0.33.4", - "@img/sharp-linux-s390x": "0.33.4", - "@img/sharp-linux-x64": "0.33.4", - "@img/sharp-linuxmusl-arm64": "0.33.4", - "@img/sharp-linuxmusl-x64": "0.33.4", - "@img/sharp-wasm32": "0.33.4", - "@img/sharp-win32-ia32": "0.33.4", - "@img/sharp-win32-x64": "0.33.4" + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" } }, "node_modules/shebang-command": { @@ -5068,27 +5517,22 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/simple-swizzle": { @@ -5098,14 +5542,6 @@ "is-arrayish": "^0.3.1" } }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "license": "MIT", @@ -5115,35 +5551,56 @@ } }, "node_modules/socks": { - "version": "2.7.1", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.1", - "license": "MIT" + "node_modules/socks/node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/socks/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "optional": true, "engines": { @@ -5159,8 +5616,9 @@ }, "node_modules/sparse-bitfield": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", "license": "MIT", - "optional": true, "dependencies": { "memory-pager": "^1.0.2" } @@ -5180,15 +5638,23 @@ } }, "node_modules/streamx": { - "version": "2.15.6", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz", + "integrity": "sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==", "license": "MIT", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.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==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -5199,56 +5665,76 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", + "node_modules/string-width/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==", + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.8", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5258,26 +5744,33 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5293,18 +5786,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "3.0.0", "dev": true, @@ -5325,7 +5806,9 @@ } }, "node_modules/styled-jsx": { - "version": "5.1.1", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "license": "MIT", "dependencies": { "client-only": "0.0.1" @@ -5334,7 +5817,7 @@ "node": ">= 12.0.0" }, "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "peerDependenciesMeta": { "@babel/core": { @@ -5390,7 +5873,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.5", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "license": "MIT", "dependencies": { "pump": "^3.0.0", @@ -5402,7 +5887,9 @@ } }, "node_modules/tar-stream": { - "version": "3.1.6", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "license": "MIT", "dependencies": { "b4a": "^1.6.4", @@ -5411,12 +5898,10 @@ } }, "node_modules/text-decoder": { - "version": "1.1.0", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "b4a": "^1.6.4" - } + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "license": "Apache-2.0" }, "node_modules/text-table": { "version": "0.2.0", @@ -5425,6 +5910,26 @@ }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tldts": { + "version": "6.1.65", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz", + "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==", + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.65" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.65", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz", + "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==", "license": "MIT" }, "node_modules/to-regex-range": { @@ -5439,16 +5944,15 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/tr46": { @@ -5462,7 +5966,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -5510,27 +6016,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5540,15 +6051,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -5558,20 +6073,36 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT" + }, "node_modules/typescript": { - "version": "5.5.2", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5598,6 +6129,8 @@ }, "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==", "license": "MIT", "dependencies": { "buffer": "^5.2.1", @@ -5606,15 +6139,9 @@ }, "node_modules/undici-types": { "version": "5.26.5", + "devOptional": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "dev": true, @@ -5623,16 +6150,10 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/urlpattern-polyfill": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "license": "MIT" }, "node_modules/use-sync-external-store": { @@ -5642,13 +6163,6 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "license": "MIT", @@ -5731,22 +6245,25 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", "dev": true, "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -5756,29 +6273,36 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.13", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5789,23 +6313,8 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", - "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-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -5824,7 +6333,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.17.1", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -5855,17 +6366,17 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -5882,6 +6393,8 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -5908,6 +6421,8 @@ }, "node_modules/zod": { "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index d92f6b50..0229accc 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbo", "build": "next build", "lint": "next lint", "start": "next start", @@ -11,42 +11,42 @@ "test": "node cleanup.mjs" }, "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-regular-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@auth/mongodb-adapter": "^3.7.4", + "@fortawesome/fontawesome-svg-core": "^6.7.1", + "@fortawesome/free-brands-svg-icons": "^6.7.1", + "@fortawesome/free-regular-svg-icons": "^6.7.1", + "@fortawesome/free-solid-svg-icons": "^6.7.1", "@fortawesome/react-fontawesome": "^0.2.2", - "@next-auth/mongodb-adapter": "^1.1.3", - "axios": "^1.7.4", + "axios": "^1.7.9", "bootstrap": "^5.3.3", "classnames": "^2.5.1", - "dotenv": "^16.4.5", + "dotenv": "^16.4.7", "geoip-lite": "^1.4.10", "ioredis": "^5.4.1", "iso-639-3": "^3.0.1", - "jsdom": "^24.1.0", - "mongodb": "^5.9.2", - "next": "^14.2.12", - "next-auth": "^4.24.7", + "jsdom": "^25.0.1", + "mongodb": "^6.11.0", + "next": "^15.0.3", + "next-auth": "^5.0.0-beta.25", "node-fetch": "^3.3.2", - "puppeteer-core": "^22.12.0", + "puppeteer-core": "^23.10.0", "react": "18.3.1", "react-dom": "18.3.1", "react-draggable": "^4.4.6", - "react-in-viewport": "^1.0.0-beta.2", - "react-toastify": "^9.1.3", - "react-tooltip": "^5.27.0", - "sharp": "^0.33.4", + "react-in-viewport": "^1.0.0-beta.6", + "react-toastify": "^10.0.6", + "react-tooltip": "^5.28.0", + "sharp": "^0.33.5", "swr": "^2.2.5" }, "devDependencies": { - "@types/node-fetch": "^2.6.11", - "@types/react": "^18.3.3", - "@typescript-eslint/eslint-plugin": "^7.14.1", - "@typescript-eslint/parser": "^7.14.1", - "eslint": "^8.57.0", - "eslint-config-next": "^14.2.4", - "prettier": "^3.3.2", - "typescript": "^5.5.2" + "@types/node-fetch": "^2.6.12", + "@types/react": "^18.3.12", + "@typescript-eslint/eslint-plugin": "^8.17.0", + "@typescript-eslint/parser": "^8.17.0", + "eslint": "^8.57.1", + "eslint-config-next": "^15.0.3", + "prettier": "^3.4.2", + "typescript": "^5.7.2" } } diff --git a/pages/admin.tsx b/pages/admin.tsx index d90cf293..df27708b 100644 --- a/pages/admin.tsx +++ b/pages/admin.tsx @@ -77,7 +77,7 @@ const Admin = ({ onClick={() => { if ( !('NEXT_PUBLIC_AUDIT_WEBHOOK' in process.env) || - process.env.NEXT_PUBLIC_AUDIT_WEBHOOK.length === 0 + process.env.NEXT_PUBLIC_AUDIT_WEBHOOK?.length === 0 ) { return alert("ENV 'NEXT_PUBLIC_AUDIT_WEBHOOK' not provided") } @@ -96,8 +96,8 @@ const Admin = ({ url: process.env.NEXT_PUBLIC_DOMAIN, color: 15548997, // red author: { - name: session.user.name, - icon_url: session.user.image, + name: session?.user.name, + icon_url: session?.user.image, }, }, ], @@ -105,7 +105,7 @@ const Admin = ({ }} disabled={ !('NEXT_PUBLIC_AUDIT_WEBHOOK' in process.env) || - process.env.NEXT_PUBLIC_AUDIT_WEBHOOK.length === 0 + process.env.NEXT_PUBLIC_AUDIT_WEBHOOK?.length === 0 } > Send test webhook diff --git a/pages/api/admin/cache/clear.ts b/pages/api/admin/cache/clear.ts index 197a01e5..398a0cf6 100644 --- a/pages/api/admin/cache/clear.ts +++ b/pages/api/admin/cache/clear.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { isAdmin } from '../../../../lib/session' import { clearCompleteCache } from '../../../../lib/db/cache' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,7 +7,7 @@ export default async function apiAdminCacheClear( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (!isAdmin(session)) { return res.status(401) } diff --git a/pages/api/admin/screenshot/clear.ts b/pages/api/admin/screenshot/clear.ts index defb0979..56363f05 100644 --- a/pages/api/admin/screenshot/clear.ts +++ b/pages/api/admin/screenshot/clear.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { isAdmin } from '../../../../lib/session' import { clearAllScreenshots } from '../../../../lib/db/itemScreenshots' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,7 +7,7 @@ export default async function apiAdminScreenshotClear( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (!isAdmin(session)) { return res.status(401) } diff --git a/pages/api/admin/screenshot/create/[id].ts b/pages/api/admin/screenshot/create/[id].ts index 92c5aec9..6a837b9b 100644 --- a/pages/api/admin/screenshot/create/[id].ts +++ b/pages/api/admin/screenshot/create/[id].ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../../auth' import { isEditor } from '../../../../../lib/session' import createScreenshot from '../../../../../lib/crawler/screenshot' import { getItem } from '../../../../../lib/db/items' @@ -9,7 +8,7 @@ export default async function apiAdminScreenshotCreateId( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (!isEditor(session)) { return res.status(401) } diff --git a/pages/api/admin/screenshot/createAll.ts b/pages/api/admin/screenshot/createAll.ts index 3ba71249..c0c25fbc 100644 --- a/pages/api/admin/screenshot/createAll.ts +++ b/pages/api/admin/screenshot/createAll.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { isAdmin } from '../../../../lib/session' import createScreenshot from '../../../../lib/crawler/screenshot' import { getItems } from '../../../../lib/db/items' @@ -10,7 +9,7 @@ export default async function apiAdminScreenshotCreateAll( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (!isAdmin(session)) { return res.status(401) } diff --git a/pages/api/delete/collection.ts b/pages/api/delete/collection.ts index 8f1848ec..b188f3d5 100644 --- a/pages/api/delete/collection.ts +++ b/pages/api/delete/collection.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { deleteCollection } from '../../../lib/db/collections' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,7 +7,7 @@ export default async function apiDeleteCollection( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (d._id !== '') { diff --git a/pages/api/delete/column.ts b/pages/api/delete/column.ts index f1d83cee..d466fa66 100644 --- a/pages/api/delete/column.ts +++ b/pages/api/delete/column.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { deleteColumn } from '../../../lib/db/columns' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,7 +7,7 @@ export default async function apiDeleteColumn( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (d._id !== '') { diff --git a/pages/api/delete/item.ts b/pages/api/delete/item.ts index e698b0dc..7e4a7576 100644 --- a/pages/api/delete/item.ts +++ b/pages/api/delete/item.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { deleteItem } from '../../../lib/db/items' import { User } from '../../../types/User' @@ -9,8 +8,8 @@ export default async function apiDeleteItem( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) - if (canEdit(session)) { + const session = await auth(req, res) + if (canEdit(session) && session !== null) { const d = req.body if (d._id !== '') { await deleteItem(d._id, session.user as User) diff --git a/pages/api/delete/library.ts b/pages/api/delete/library.ts index 8565d975..9b25fdea 100644 --- a/pages/api/delete/library.ts +++ b/pages/api/delete/library.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { deleteLibrary } from '../../../lib/db/libraries' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,7 +7,7 @@ export default async function apiDeleteLibrary( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (d._id !== '') { diff --git a/pages/api/delete/list.ts b/pages/api/delete/list.ts index 99353471..218251e0 100644 --- a/pages/api/delete/list.ts +++ b/pages/api/delete/list.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { isAdmin, isCurrentUser } from '../../../lib/session' import { deleteList, getList } from '../../../lib/db/lists' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,10 +7,13 @@ export default async function apiDeleteList( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) const d = req.body const list = await getList(d._id) - if (isCurrentUser(session, list.owner) || isAdmin(session)) { + if ( + (list !== null && isCurrentUser(session, list.owner)) || + isAdmin(session) + ) { if (d._id !== '') { await deleteList(d._id) diff --git a/pages/api/edit/collection.ts b/pages/api/edit/collection.ts index c48f63c4..6d032e58 100644 --- a/pages/api/edit/collection.ts +++ b/pages/api/edit/collection.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { addCollection, updateCollection } from '../../../lib/db/collections' import { updateAllCache } from '../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditCollection( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (d.urlId === '_new') { diff --git a/pages/api/edit/collection/libraries.ts b/pages/api/edit/collection/libraries.ts index e65d36a6..86492c70 100644 --- a/pages/api/edit/collection/libraries.ts +++ b/pages/api/edit/collection/libraries.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { canEdit } from '../../../../lib/session' import { updateCollectionLibraries } from '../../../../lib/db/collections' import { updateAllCache } from '../../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditCollectionLibraries( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (typeof d._id !== 'undefined' && Array.isArray(d.libraries)) { diff --git a/pages/api/edit/column.ts b/pages/api/edit/column.ts index 7f3525db..28a2cfa8 100644 --- a/pages/api/edit/column.ts +++ b/pages/api/edit/column.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { addColumn, updateColumn } from '../../../lib/db/columns' import { updateAllCache } from '../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditColumn( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (typeof d._id === 'undefined') { diff --git a/pages/api/edit/column/collections.ts b/pages/api/edit/column/collections.ts index a3afd51e..ace23b1f 100644 --- a/pages/api/edit/column/collections.ts +++ b/pages/api/edit/column/collections.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { canEdit } from '../../../../lib/session' import { updateColumnCollections } from '../../../../lib/db/columns' import { updateAllCache } from '../../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditColumnCollections( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (typeof d._id !== 'undefined' && Array.isArray(d.collections)) { diff --git a/pages/api/edit/item.ts b/pages/api/edit/item.ts index e07da0bd..13bd0fd9 100644 --- a/pages/api/edit/item.ts +++ b/pages/api/edit/item.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { addItem, updateItem } from '../../../lib/db/items' import createScreenshot from '../../../lib/crawler/screenshot' @@ -12,8 +11,8 @@ export default async function apiEditItem( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) - if (canEdit(session)) { + const session = await auth(req, res) + if (canEdit(session) && session !== null) { const d = req.body let id = d._id if (typeof d._id === 'undefined') { diff --git a/pages/api/edit/item/collections.ts b/pages/api/edit/item/collections.ts index 25b31cb7..97eb2daa 100644 --- a/pages/api/edit/item/collections.ts +++ b/pages/api/edit/item/collections.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { canEdit } from '../../../../lib/session' import { updateItemCollections } from '../../../../lib/db/items' import { updateAllCache } from '../../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditColumnCollections( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (typeof d._id !== 'undefined' && Array.isArray(d.collections)) { diff --git a/pages/api/edit/library.ts b/pages/api/edit/library.ts index d1b3befd..b39f8809 100644 --- a/pages/api/edit/library.ts +++ b/pages/api/edit/library.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { canEdit } from '../../../lib/session' import { addLibrary, updateLibrary } from '../../../lib/db/libraries' import { updateAllCache } from '../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditLibrary( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (d.urlId !== '' && d.name !== '') { diff --git a/pages/api/edit/library/order.ts b/pages/api/edit/library/order.ts index a5b8c7cc..e9b8d159 100644 --- a/pages/api/edit/library/order.ts +++ b/pages/api/edit/library/order.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { canEdit } from '../../../../lib/session' import { updateLibrary } from '../../../../lib/db/libraries' import { updateAllCache } from '../../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditLibraryOrder( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (canEdit(session)) { const d = req.body if (Array.isArray(d.libraries)) { diff --git a/pages/api/edit/list.ts b/pages/api/edit/list.ts index 038ef878..8f7ecf34 100644 --- a/pages/api/edit/list.ts +++ b/pages/api/edit/list.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { isAdmin, isCurrentUser, isLogin } from '../../../lib/session' import { addList, getList, updateList } from '../../../lib/db/lists' import { updateAllCache } from '../../../lib/db/cache' @@ -10,7 +9,7 @@ export default async function apiEditList( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) const d = req.body if (isLogin(session)) { if ( @@ -31,7 +30,10 @@ export default async function apiEditList( } } else { const list = await getList(d._id) - if (isCurrentUser(session, list.owner) || isAdmin(session)) { + if ( + (list !== null && isCurrentUser(session, list.owner)) || + isAdmin(session) + ) { await updateList(d._id, d) await updateAllCache(Types.list) res.status(200).send(d._id) diff --git a/pages/api/edit/user.ts b/pages/api/edit/user.ts index baf8ce31..3d5588a3 100644 --- a/pages/api/edit/user.ts +++ b/pages/api/edit/user.ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { isAdmin, isCurrentUser } from '../../../lib/session' import { updateUser } from '../../../lib/db/users' import { updateAllCache, updateSingleCache } from '../../../lib/db/cache' @@ -12,10 +11,13 @@ export default async function apiEditUser( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) const d = req.body if (d.uid !== '') { - if (isAdmin(session) || isCurrentUser(session, d.uid)) { + if ( + session !== null && + (isAdmin(session) || isCurrentUser(session, d.uid)) + ) { if (!isAdmin(session) && d.accountType) { delete d.accountType } diff --git a/pages/api/export.ts b/pages/api/export.ts index 291bff0d..a6259b44 100644 --- a/pages/api/export.ts +++ b/pages/api/export.ts @@ -1,5 +1,4 @@ -import { authOptions } from './auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../auth' import { exportData } from '../../lib/db/db' import { isAdmin, isLogin } from '../../lib/session' import { NextApiRequest, NextApiResponse } from 'next' @@ -8,7 +7,7 @@ export default async function handler( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (isLogin(session)) { res.json(await exportData(isAdmin(session))) } else { diff --git a/pages/api/item/screenshot/[id].ts b/pages/api/item/screenshot/[id].ts index 2d7d1b40..4409a556 100644 --- a/pages/api/item/screenshot/[id].ts +++ b/pages/api/item/screenshot/[id].ts @@ -1,6 +1,5 @@ import { getItem } from '../../../../lib/db/items' -import { authOptions } from '../../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../../auth' import { getItemScreenshotBuffer, screenshotExists, @@ -13,7 +12,7 @@ export default async function handler( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) const item = await getItem(req.query.id as string) if (item) { try { diff --git a/pages/api/stats/pageview.ts b/pages/api/stats/pageview.ts index dd628c31..07df0d1b 100644 --- a/pages/api/stats/pageview.ts +++ b/pages/api/stats/pageview.ts @@ -1,9 +1,9 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { isLogin } from '../../../lib/session' import { findOne } from '../../../lib/db/db' import { addView } from '../../../lib/db/views' import { NextApiRequest, NextApiResponse } from 'next' +import { User } from '../../../types/User' export default async function statsPageView( req: NextApiRequest, @@ -15,7 +15,7 @@ export default async function statsPageView( const type = split[1] const contentId = split[2] - let exists = null + let exists: object | null = null if (type === 'item') { exists = await findOne('items', { _id: contentId }) } else if (type === 'collection') { @@ -31,11 +31,13 @@ export default async function statsPageView( } if (exists !== null) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) const body = { type, - contentId: type === 'user' ? exists.uid : exists._id, - uid: isLogin(session) ? session.user.uid : 'guest', + contentId: + type === 'user' ? (exists as User).uid : (exists as User)._id, + uid: + isLogin(session) && session !== null ? session.user.uid : 'guest', } await addView(body) res.json(body) diff --git a/pages/api/user/[id].ts b/pages/api/user/[id].ts index 26828b56..146313d6 100644 --- a/pages/api/user/[id].ts +++ b/pages/api/user/[id].ts @@ -1,5 +1,4 @@ -import { authOptions } from '../auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../../auth' import { isAdmin, isLogin } from '../../../lib/session' import { getSingleCache } from '../../../lib/db/cache' import { Types } from '../../../types/Components' @@ -11,11 +10,11 @@ export default async function apiUser( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) - let result = {} + let result: object | null = null if (req.query.id === 'me') { - if (isLogin(session)) { + if (isLogin(session) && session !== null) { result = await getSingleCache(Types.user, session.user.uid) } else { return res.status(200).end() diff --git a/pages/api/users.ts b/pages/api/users.ts index adc7d496..33373f5c 100644 --- a/pages/api/users.ts +++ b/pages/api/users.ts @@ -1,5 +1,4 @@ -import { authOptions } from './auth/[...nextauth]' -import { getServerSession } from 'next-auth/next' +import { auth } from '../../auth' import { isAdmin } from '../../lib/session' import { getAllCache } from '../../lib/db/cache' import { Types } from '../../types/Components' @@ -9,7 +8,7 @@ export default async function apiUsers( req: NextApiRequest, res: NextApiResponse ) { - const session = await getServerSession(req, res, authOptions) + const session = await auth(req, res) if (isAdmin(session)) { res.json(await getAllCache(Types.user)) } else { diff --git a/pages/collection/[id].tsx b/pages/collection/[id].tsx index e320f5b1..c7944ad4 100644 --- a/pages/collection/[id].tsx +++ b/pages/collection/[id].tsx @@ -44,9 +44,9 @@ const Collection: FC = ({ fallbackData: allItems, }) allItems = swrItems || allItems - const items = collection.items.map((itemId) => - allItems.find((item) => item._id === itemId) - ) + const items = collection.items + .map((itemId) => allItems.find((item) => item._id === itemId)) + .filter((item) => typeof item !== 'undefined') const { data: swrLibraries } = useSWR('/api/libraries', { fallbackData: libraries, diff --git a/pages/column/[id].tsx b/pages/column/[id].tsx index 509138dd..83f9fcb2 100644 --- a/pages/column/[id].tsx +++ b/pages/column/[id].tsx @@ -29,7 +29,7 @@ type Props = { const Column: FC = ({ column, columns, items }) => { const { data: session } = useSession() - const [filter, setFilter] = useState(null) + const [filter, setFilter] = useState('') const { data: swrColumn } = useSWR('/api/column/' + column._id) column = swrColumn || column @@ -39,7 +39,7 @@ const Column: FC = ({ column, columns, items }) => { items = swrItems || items const filteredItems = items.filter((i) => { - if (filter === null) { + if (filter === '') { return true } else if (typeof i.data[column._id] === 'undefined') { // item does not have data about the column @@ -52,7 +52,8 @@ const Column: FC = ({ column, columns, items }) => { ) { return ( filter.length === 0 || - filter.every((ii) => (i.data[column._id] as string[]).includes(ii)) + (Array.isArray(filter) && + filter.every((ii) => (i.data[column._id] as string[]).includes(ii))) ) } else if ( column.type === ColumnType.feature || @@ -63,9 +64,10 @@ const Column: FC = ({ column, columns, items }) => { return ( filter === '' || - (i.data[column._id] as string) - .toLowerCase() - .includes(filter.toLowerCase()) + (typeof filter === 'string' && + (i.data[column._id] as string) + .toLowerCase() + .includes(filter.toLowerCase())) ) }) diff --git a/pages/edit/collection/[id].tsx b/pages/edit/collection/[id].tsx index 99298582..63de63cd 100644 --- a/pages/edit/collection/[id].tsx +++ b/pages/edit/collection/[id].tsx @@ -8,6 +8,7 @@ import ViewAllButton from '../../../components/buttons/ViewAllButton' import { Types } from '../../../types/Components' import React from 'react' import DeleteButton from '../../../components/buttons/DeleteButton' +import { Collection } from '../../../types/Collection' export default function EditorCollection({ _id, @@ -109,10 +110,10 @@ EditorCollection.auth = { } export async function getServerSideProps({ params }) { - let collection = {} + let collection: Collection | null = null if (params.id !== '_new') { collection = await getCollection(params.id) - if (!collection) { + if (collection === null) { return { notFound: true, } diff --git a/pages/edit/column/[id].tsx b/pages/edit/column/[id].tsx index 42975168..4db60150 100644 --- a/pages/edit/column/[id].tsx +++ b/pages/edit/column/[id].tsx @@ -8,6 +8,7 @@ import ViewAllButton from '../../../components/buttons/ViewAllButton' import { Types } from '../../../types/Components' import DeleteButton from '../../../components/buttons/DeleteButton' import React from 'react' +import { Column } from '../../../types/Column' export default function EditorColumn({ _id, collections, columns, column }) { let collectionsWithColumn = [] @@ -99,10 +100,10 @@ EditorColumn.auth = { } export async function getServerSideProps({ params }) { - let column = {} + let column: Column | null = null if (params.id !== '_new') { column = await getColumn(params.id) - if (!column) { + if (column === null) { return { notFound: true, } diff --git a/pages/edit/item/[id].tsx b/pages/edit/item/[id].tsx index 33267614..25cfbe93 100644 --- a/pages/edit/item/[id].tsx +++ b/pages/edit/item/[id].tsx @@ -9,6 +9,7 @@ import ViewAllButton from '../../../components/buttons/ViewAllButton' import { Types } from '../../../types/Components' import React from 'react' import DeleteButton from '../../../components/buttons/DeleteButton' +import { Item } from '../../../types/Item' export default function EditorItem({ items, _id, collections, columns, item }) { let collectionsWithItem = [] @@ -98,10 +99,10 @@ EditorItem.auth = { } export async function getServerSideProps({ params }) { - let item = {} + let item: Item | null = null if (params.id !== '_new') { item = await getItem(params.id) - if (!item) { + if (item === null) { return { notFound: true, } diff --git a/pages/edit/library/[id].tsx b/pages/edit/library/[id].tsx index 1ef14aa2..225a0319 100644 --- a/pages/edit/library/[id].tsx +++ b/pages/edit/library/[id].tsx @@ -11,6 +11,7 @@ import ViewAllButton from '../../../components/buttons/ViewAllButton' import { Types } from '../../../types/Components' import DeleteButton from '../../../components/buttons/DeleteButton' import React from 'react' +import { Library } from '../../../types/Library' export default function EditorLibrary({ _id, @@ -104,10 +105,10 @@ EditorLibrary.auth = { } export async function getServerSideProps({ params }) { - let library = {} + let library: Library | null = null if (params.id !== '_new') { library = await getLibrary(params.id) - if (!library) { + if (library === null) { return { notFound: true, } diff --git a/pages/edit/list/[id].tsx b/pages/edit/list/[id].tsx index 551f0774..2539ec74 100644 --- a/pages/edit/list/[id].tsx +++ b/pages/edit/list/[id].tsx @@ -9,6 +9,7 @@ import ViewAllButton from '../../../components/buttons/ViewAllButton' import { Types } from '../../../types/Components' import DeleteButton from '../../../components/buttons/DeleteButton' import React from 'react' +import { List } from '../../../types/List' export default function EditorList({ _id, userLists, list }) { const { data: session } = useSession() @@ -54,11 +55,8 @@ export default function EditorList({ _id, userLists, list }) {
    - {_id === '_new' ? ( - + {_id === '_new' && session !== null ? ( + ) : ( = ({ item, columns, collections }) => { const { data: swrItem } = useSWR('/api/item/' + item._id, { fallbackData: item, }) - item = swrItem || item + item = (swrItem as Item) || item item.stars = item.stars || 0 const { data: swrColumns } = useSWR('/api/columns', { fallbackData: columns, }) - columns = swrColumns || columns + columns = (swrColumns as Column[]) || columns const { data: swrCollections } = useSWR('/api/collections', { fallbackData: collections, }) - collections = (swrCollections || collections).filter((t) => + collections = ((swrCollections as Collection[]) || collections).filter((t) => t.items.includes(item._id) ) const { @@ -58,7 +58,9 @@ const Item: FC = ({ item, columns, collections }) => { array: arrayColumns, text: textColumns, } = splitColumnsIntoTypes( - Object.keys(item.data).map((k) => columns.find((c) => c._id === k)), + Object.keys(item.data) + .map((k) => columns.find((c) => c._id === k)) + .filter((column) => typeof column !== 'undefined'), item.data ) diff --git a/pages/library/[id].tsx b/pages/library/[id].tsx index c746808f..6b0e83eb 100644 --- a/pages/library/[id].tsx +++ b/pages/library/[id].tsx @@ -33,25 +33,25 @@ const Library: FC = ({ library, collections, items, columns }) => { const [showCollections, setShowCollections] = useState(false) const { data: swrLibrary } = useSWR('/api/library/' + library._id) - library = swrLibrary || library + library = (swrLibrary as Library) || library const { data: swrCollections } = useSWR('/api/collections') - collections = swrCollections || collections + collections = (swrCollections as Collection[]) || collections const libraryCollections = library.collections .map((collectionId) => collections.find((collection) => collection._id === collectionId) ) - .filter((collection) => collection) + .filter((collection) => typeof collection !== 'undefined') const collectionsItems = [].concat.apply( [], libraryCollections.map((collection) => collection.items) ) const { data: swrItems } = useSWR('/api/items') - items = swrItems || items + items = (swrItems as Item[]) || items const hotFixLibraryItems = items.filter((i) => collectionsItems.some((item) => i._id === item) ) const { data: swrColumns } = useSWR('/api/columns') - columns = swrColumns || columns + columns = (swrColumns as Column[]) || columns return ( <> diff --git a/pages/list/[id].tsx b/pages/list/[id].tsx index 4dbd2269..8e189891 100644 --- a/pages/list/[id].tsx +++ b/pages/list/[id].tsx @@ -31,11 +31,11 @@ const List: FC = ({ list, owner, allItems, columns }) => { const { data: swrList } = useSWR('/api/list/' + list._id, { fallbackData: list, }) - list = swrList || list + list = (swrList as List) || list const { data: swrOwner } = useSWR('/api/user/' + owner.uid, { fallbackData: owner, }) - owner = swrOwner || owner + owner = (swrOwner as User) || owner //let adminInfo if (isAdmin(session)) { //adminInfo = owner @@ -48,15 +48,15 @@ const List: FC = ({ list, owner, allItems, columns }) => { const { data: swrItems } = useSWR('/api/items', { fallbackData: allItems, }) - allItems = swrItems || allItems + allItems = (swrItems as Item[]) || allItems const { data: swrColumns } = useSWR('/api/columns', { fallbackData: columns, }) - columns = swrColumns || columns + columns = (swrColumns as Column[]) || columns - const items = (list.items || []).map((itemId) => - allItems.find((item) => item._id === itemId) - ) + const items = (list.items || []) + .map((itemId) => allItems.find((item) => item._id === itemId)) + .filter((item) => typeof item !== 'undefined') const title = owner.name + "'s list " + list.name return ( diff --git a/pages/user/[id].tsx b/pages/user/[id].tsx index 23db4be8..ef5fb9d9 100644 --- a/pages/user/[id].tsx +++ b/pages/user/[id].tsx @@ -32,7 +32,7 @@ const User: FC = ({ user, lists, items, columns }) => { const { data: swrUser } = useSWR('/api/user/' + user.uid, { fallbackData: user, }) - user = swrUser || user + user = (swrUser as User) || user let adminInfo if (isAdmin(session)) { adminInfo = user @@ -45,20 +45,20 @@ const User: FC = ({ user, lists, items, columns }) => { const { data: swrColumn } = useSWR('/api/columns', { fallbackData: columns, }) - columns = swrColumn || columns + columns = (swrColumn as Column[]) || columns const { data: swrItem } = useSWR('/api/items', { fallbackData: items, }) - items = swrItem || items - const userFav = user.favs.map((itemId) => - items.find((item) => item._id === itemId) - ) + items = (swrItem as Item[]) || items + const userFav = user.favs + .map((itemId) => items.find((item) => item._id === itemId)) + .filter((item) => typeof item !== 'undefined') const { data: swrLists } = useSWR('/api/lists', { fallbackData: lists, }) - lists = swrLists || lists + lists = (swrLists as List[]) || lists const userLists = lists.filter((list) => list.owner === user.uid) - const followLists = (swrLists || lists).filter((list) => + const followLists = ((swrLists as List[]) || lists).filter((list) => user.followLists.includes(list._id) ) diff --git a/pages/validate-api.tsx b/pages/validate-api.tsx index cefb6527..a0ca001e 100644 --- a/pages/validate-api.tsx +++ b/pages/validate-api.tsx @@ -27,7 +27,7 @@ export default function ValidateApi() { secret === '' ? '' : ' is-' + (validSecret ? '' : 'in') + 'valid' // requested data - const [data, setData] = useState([]) + const [data, setData] = useState([]) return ( <> diff --git a/tsconfig.json b/tsconfig.json index 89305457..ff90114c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "compilerOptions": { "target": "es2017", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": false, @@ -13,8 +17,21 @@ "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", - "incremental": true + "incremental": true, + "strictNullChecks": true, + "plugins": [ + { + "name": "next" + } + ] }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] }